园林绿化
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

17126 lines
5.5 MiB

/**
* @license
* Cesium - https://github.com/CesiumGS/cesium
* Version 1.140.0
*
* Copyright 2011-2022 Cesium Contributors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
* Columbus View (Pat. Pend.)
*
* Portions licensed separately.
* See https://github.com/CesiumGS/cesium/blob/main/LICENSE.md for full licensing details.
*/
"use strict";var Cesium=(()=>{var gGe=Object.create;var TR=Object.defineProperty;var bGe=Object.getOwnPropertyDescriptor;var yGe=Object.getOwnPropertyNames;var xGe=Object.getPrototypeOf,CGe=Object.prototype.hasOwnProperty;var TGe=(e,t,n)=>t in e?TR(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n;var UU=(e=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(e,{get:(t,n)=>(typeof require<"u"?require:t)[n]}):e)(function(e){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+e+'" is not supported')});var nm=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),EGe=(e,t)=>{for(var n in t)TR(e,n,{get:t[n],enumerable:!0})},gie=(e,t,n,i)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of yGe(t))!CGe.call(e,o)&&o!==n&&TR(e,o,{get:()=>t[o],enumerable:!(i=bGe(t,o))||i.enumerable});return e};var y=(e,t,n)=>(n=e!=null?gGe(xGe(e)):{},gie(t||!e||!e.__esModule?TR(n,"default",{value:e,enumerable:!0}):n,e)),SGe=e=>gie(TR({},"__esModule",{value:!0}),e);var Bn=(e,t,n)=>TGe(e,typeof t!="symbol"?t+"":t,n);var x=nm(()=>{"use strict";globalThis.CESIUM_WORKERS=atob("dmFyIENlc2l1bVdvcmtlcnM9KCgpPT57dmFyIGhTPU9iamVjdC5jcmVhdGU7dmFyIHF1PU9iamVjdC5kZWZpbmVQcm9wZXJ0eTt2YXIgbVM9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjt2YXIgYlM9T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXM7dmFyIHBTPU9iamVjdC5nZXRQcm90b3R5cGVPZixnUz1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O3ZhciBiYT0oZT0+dHlwZW9mIHJlcXVpcmU8InUiP3JlcXVpcmU6dHlwZW9mIFByb3h5PCJ1Ij9uZXcgUHJveHkoZSx7Z2V0Oih0LG4pPT4odHlwZW9mIHJlcXVpcmU8InUiP3JlcXVpcmU6dClbbl19KTplKShmdW5jdGlvbihlKXtpZih0eXBlb2YgcmVxdWlyZTwidSIpcmV0dXJuIHJlcXVpcmUuYXBwbHkodGhpcyxhcmd1bWVudHMpO3Rocm93IEVycm9yKCdEeW5hbWljIHJlcXVpcmUgb2YgIicrZSsnIiBpcyBub3Qgc3VwcG9ydGVkJyl9KSxjMT1lPT50PT57dmFyIG49ZVt0XTtpZihuKXJldHVybiBuKCk7dGhyb3cgbmV3IEVycm9yKCJNb2R1bGUgbm90IGZvdW5kIGluIGJ1bmRsZTogIit0KX07dmFyIFg9KGUsdCk9PigpPT4oZSYmKHQ9ZShlPTApKSx0KTt2YXIgZW89KGUsdCk9PigpPT4odHx8ZSgodD17ZXhwb3J0czp7fX0pLmV4cG9ydHMsdCksdC5leHBvcnRzKSxydD0oZSx0KT0+e2Zvcih2YXIgbiBpbiB0KXF1KGUsbix7Z2V0OnRbbl0sZW51bWVyYWJsZTohMH0pfSxzMT0oZSx0LG4sbyk9PntpZih0JiZ0eXBlb2YgdD09Im9iamVjdCJ8fHR5cGVvZiB0PT0iZnVuY3Rpb24iKWZvcihsZXQgYSBvZiBiUyh0KSkhZ1MuY2FsbChlLGEpJiZhIT09biYmcXUoZSxhLHtnZXQ6KCk9PnRbYV0sZW51bWVyYWJsZTohKG89bVModCxhKSl8fG8uZW51bWVyYWJsZX0pO3JldHVybiBlfTt2YXIgY2E9KGUsdCxuKT0+KG49ZSE9bnVsbD9oUyhwUyhlKSk6e30sczEodHx8IWV8fCFlLl9fZXNNb2R1bGU/cXUobiwiZGVmYXVsdCIse3ZhbHVlOmUsZW51bWVyYWJsZTohMH0pOm4sZSkpLF9TPWU9PnMxKHF1KHt9LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxlKTtmdW5jdGlvbiB5UyhlKXtyZXR1cm4gZSE9bnVsbH12YXIgZyxzZT1YKCgpPT57Zz15U30pO2Z1bmN0aW9uIFlpKGUpe3RoaXMubmFtZT0iRGV2ZWxvcGVyRXJyb3IiLHRoaXMubWVzc2FnZT1lO2xldCB0O3RyeXt0aHJvdyBuZXcgRXJyb3J9Y2F0Y2gobil7dD1uLnN0YWNrfXRoaXMuc3RhY2s9dH12YXIgV3QsSmk9WCgoKT0+e3NlKCk7ZyhPYmplY3QuY3JlYXRlKSYmKFlpLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKEVycm9yLnByb3RvdHlwZSksWWkucHJvdG90eXBlLmNvbnN0cnVjdG9yPVlpKTtZaS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtsZXQgZT1gJHt0aGlzLm5hbWV9OiAke3RoaXMubWVzc2FnZX1gO3JldHVybiBnKHRoaXMuc3RhY2spJiYoZSs9YAoke3RoaXMuc3RhY2sudG9TdHJpbmcoKX1gKSxlfTtZaS50aHJvd0luc3RhbnRpYXRpb25FcnJvcj1mdW5jdGlvbigpe3Rocm93IG5ldyBZaSgiVGhpcyBmdW5jdGlvbiBkZWZpbmVzIGFuIGludGVyZmFjZSBhbmQgc2hvdWxkIG5vdCBiZSBjYWxsZWQgZGlyZWN0bHkuIil9O1d0PVlpfSk7ZnVuY3Rpb24gQVMoZSl7cmV0dXJuYCR7ZX0gaXMgcmVxdWlyZWQsIGFjdHVhbCB2YWx1ZSB3YXMgdW5kZWZpbmVkYH1mdW5jdGlvbiBxYyhlLHQsbil7cmV0dXJuYEV4cGVjdGVkICR7bn0gdG8gYmUgdHlwZW9mICR7dH0sIGFjdHVhbCB0eXBlb2Ygd2FzICR7ZX1gfXZhciB0byxNbixVbT1YKCgpPT57c2UoKTtKaSgpO3RvPXt9O3RvLnR5cGVPZj17fTt0by5kZWZpbmVkPWZ1bmN0aW9uKGUsdCl7aWYoIWcodCkpdGhyb3cgbmV3IFd0KEFTKGUpKX07dG8udHlwZU9mLmZ1bmM9ZnVuY3Rpb24oZSx0KXtpZih0eXBlb2YgdCE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgV3QocWModHlwZW9mIHQsImZ1bmN0aW9uIixlKSl9O3RvLnR5cGVPZi5zdHJpbmc9ZnVuY3Rpb24oZSx0KXtpZih0eXBlb2YgdCE9InN0cmluZyIpdGhyb3cgbmV3IFd0KHFjKHR5cGVvZiB0LCJzdHJpbmciLGUpKX07dG8udHlwZU9mLm51bWJlcj1mdW5jdGlvbihlLHQpe2lmKHR5cGVvZiB0IT0ibnVtYmVyIil0aHJvdyBuZXcgV3QocWModHlwZW9mIHQsIm51bWJlciIsZSkpfTt0by50eXBlT2YubnVtYmVyLmxlc3NUaGFuPWZ1bmN0aW9uKGUsdCxuKXtpZih0by50eXBlT2YubnVtYmVyKGUsdCksdD49bil0aHJvdyBuZXcgV3QoYEV4cGVjdGVkICR7ZX0gdG8gYmUgbGVzcyB0aGFuICR7bn0sIGFjdHVhbCB2YWx1ZSB3YXMgJHt0fWApfTt0by50eXBlT2YubnVtYmVyLmxlc3NUaGFuT3JFcXVhbHM9ZnVuY3Rpb24oZSx0LG4pe2lmKHRvLnR5cGVPZi5udW1iZXIoZSx0KSx0Pm4pdGhyb3cgbmV3IFd0KGBFeHBlY3RlZCAke2V9IHRvIGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAke259LCBhY3R1YWwgdmFsdWUgd2FzICR7dH1gKX07dG8udHlwZU9mLm51bWJlci5ncmVhdGVyVGhhbj1mdW5jdGlvbihlLHQsbil7aWYodG8udHlwZU9mLm51bWJlcihlLHQpLHQ8PW4pdGhyb3cgbmV3IFd0KGBFeHBlY3RlZCAke2V9IHRvIGJlIGdyZWF0ZXIgdGhhbiAke259LCBhY3R1YWwgdmFsdWUgd2FzICR7dH1gKX07dG8udHlwZU9mLm51bWJlci5ncmVhdGVyVGhhbk9yRXF1YWxzPWZ1bmN0aW9uKGUsdCxuKXtpZih0by50eXBlT2YubnVtYmVyKGUsdCksdDxuKXRocm93IG5ldyBXdChgRXhwZWN0ZWQgJHtlfSB0byBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJHtufSwgYWN0dWFsIHZhbHVlIHdhcyAke3R9YCl9O3RvLnR5cGVPZi5vYmplY3Q9ZnVuY3Rpb24oZSx0KXtpZih0eXBlb2YgdCE9Im9iamVjdCIpdGhyb3cgbmV3IFd0KHFjKHR5cGVvZiB0LCJvYmplY3QiLGUpKX07dG8udHlwZU9mLmJvb2w9ZnVuY3Rpb24oZSx0KXtpZih0eXBlb2YgdCE9ImJvb2xlYW4iKXRocm93IG5ldyBXdChxYyh0eXBlb2YgdCwiYm9vbGVhbiIsZSkpfTt0by50eXBlT2YuYmlnaW50PWZ1bmN0aW9uKGUsdCl7aWYodHlwZW9mIHQhPSJiaWdpbnQiKXRocm93IG5ldyBXdChxYyh0eXBlb2YgdCwiYmlnaW50IixlKSl9O3RvLnR5cGVPZi5udW1iZXIuZXF1YWxzPWZ1bmN0aW9uKGUsdCxuLG8pe2lmKHRvLnR5cGVPZi5udW1iZXIoZSxuKSx0by50eXBlT2YubnVtYmVyKHQsbyksbiE9PW8pdGhyb3cgbmV3IFd0KGAke2V9IG11c3QgYmUgZXF1YWwgdG8gJHt0fSwgdGhlIGFjdHVhbCB2YWx1ZXMgYXJlICR7bn0gYW5kICR7b31gKX07TW49dG99KTt2YXIgZDE9ZW8oKEFHLGYxKT0+e3ZhciBQcj1mdW5jdGlvbihlKXtlPT1udWxsJiYoZT1uZXcgRGF0ZSgpLmdldFRpbWUoKSksdGhpcy5OPTYyNCx0aGlzLk09Mzk3LHRoaXMuTUFUUklYX0E9MjU2NzQ4MzYxNSx0aGlzLlVQUEVSX01BU0s9MjE0NzQ4MzY0OCx0aGlzLkxPV0VSX01BU0s9MjE0NzQ4MzY0Nyx0aGlzLm10PW5ldyBBcnJheSh0aGlzLk4pLHRoaXMubXRpPXRoaXMuTisxLGUuY29uc3RydWN0b3I9PUFycmF5P3RoaXMuaW5pdF9ieV9hcnJheShlLGUubGVuZ3RoKTp0aGlzLmluaXRfc2VlZChlKX07UHIucHJvdG90eXBlLmluaXRfc2VlZD1mdW5jdGlvbihlKXtmb3IodGhpcy5tdFswXT1lPj4+MCx0aGlzLm10aT0xO3RoaXMubXRpPHRoaXMuTjt0aGlzLm10aSsrKXt2YXIgZT10aGlzLm10W3RoaXMubXRpLTFdXnRoaXMubXRbdGhpcy5tdGktMV0+Pj4zMDt0aGlzLm10W3RoaXMubXRpXT0oKChlJjQyOTQ5MDE3NjApPj4+MTYpKjE4MTI0MzMyNTM8PDE2KSsoZSY2NTUzNSkqMTgxMjQzMzI1Myt0aGlzLm10aSx0aGlzLm10W3RoaXMubXRpXT4+Pj0wfX07UHIucHJvdG90eXBlLmluaXRfYnlfYXJyYXk9ZnVuY3Rpb24oZSx0KXt2YXIgbixvLGE7Zm9yKHRoaXMuaW5pdF9zZWVkKDE5NjUwMjE4KSxuPTEsbz0wLGE9dGhpcy5OPnQ/dGhpcy5OOnQ7YTthLS0pe3ZhciByPXRoaXMubXRbbi0xXV50aGlzLm10W24tMV0+Pj4zMDt0aGlzLm10W25dPSh0aGlzLm10W25dXigoKHImNDI5NDkwMTc2MCk+Pj4xNikqMTY2NDUyNTw8MTYpKyhyJjY1NTM1KSoxNjY0NTI1KStlW29dK28sdGhpcy5tdFtuXT4+Pj0wLG4rKyxvKyssbj49dGhpcy5OJiYodGhpcy5tdFswXT10aGlzLm10W3RoaXMuTi0xXSxuPTEpLG8+PXQmJihvPTApfWZvcihhPXRoaXMuTi0xO2E7YS0tKXt2YXIgcj10aGlzLm10W24tMV1edGhpcy5tdFtuLTFdPj4+MzA7dGhpcy5tdFtuXT0odGhpcy5tdFtuXV4oKChyJjQyOTQ5MDE3NjApPj4+MTYpKjE1NjYwODM5NDE8PDE2KSsociY2NTUzNSkqMTU2NjA4Mzk0MSktbix0aGlzLm10W25dPj4+PTAsbisrLG4+PXRoaXMuTiYmKHRoaXMubXRbMF09dGhpcy5tdFt0aGlzLk4tMV0sbj0xKX10aGlzLm10WzBdPTIxNDc0ODM2NDh9O1ByLnByb3RvdHlwZS5yYW5kb21faW50PWZ1bmN0aW9uKCl7dmFyIGUsdD1uZXcgQXJyYXkoMCx0aGlzLk1BVFJJWF9BKTtpZih0aGlzLm10aT49dGhpcy5OKXt2YXIgbjtmb3IodGhpcy5tdGk9PXRoaXMuTisxJiZ0aGlzLmluaXRfc2VlZCg1NDg5KSxuPTA7bjx0aGlzLk4tdGhpcy5NO24rKyllPXRoaXMubXRbbl0mdGhpcy5VUFBFUl9NQVNLfHRoaXMubXRbbisxXSZ0aGlzLkxPV0VSX01BU0ssdGhpcy5tdFtuXT10aGlzLm10W24rdGhpcy5NXV5lPj4+MV50W2UmMV07Zm9yKDtuPHRoaXMuTi0xO24rKyllPXRoaXMubXRbbl0mdGhpcy5VUFBFUl9NQVNLfHRoaXMubXRbbisxXSZ0aGlzLkxPV0VSX01BU0ssdGhpcy5tdFtuXT10aGlzLm10W24rKHRoaXMuTS10aGlzLk4pXV5lPj4+MV50W2UmMV07ZT10aGlzLm10W3RoaXMuTi0xXSZ0aGlzLlVQUEVSX01BU0t8dGhpcy5tdFswXSZ0aGlzLkxPV0VSX01BU0ssdGhpcy5tdFt0aGlzLk4tMV09dGhpcy5tdFt0aGlzLk0tMV1eZT4+PjFedFtlJjFdLHRoaXMubXRpPTB9cmV0dXJuIGU9dGhpcy5tdFt0aGlzLm10aSsrXSxlXj1lPj4+MTEsZV49ZTw8NyYyNjM2OTI4NjQwLGVePWU8PDE1JjQwMjI3MzA3NTIsZV49ZT4+PjE4LGU+Pj4wfTtQci5wcm90b3R5cGUucmFuZG9tX2ludDMxPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmFuZG9tX2ludCgpPj4+MX07UHIucHJvdG90eXBlLnJhbmRvbV9pbmNsPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmFuZG9tX2ludCgpKigxLzQyOTQ5NjcyOTUpfTtQci5wcm90b3R5cGUucmFuZG9tPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmFuZG9tX2ludCgpKigxLzQyOTQ5NjcyOTYpfTtQci5wcm90b3R5cGUucmFuZG9tX2V4Y2w9ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5yYW5kb21faW50KCkrLjUpKigxLzQyOTQ5NjcyOTYpfTtQci5wcm90b3R5cGUucmFuZG9tX2xvbmc9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnJhbmRvbV9pbnQoKT4+PjUsdD10aGlzLnJhbmRvbV9pbnQoKT4+PjY7cmV0dXJuKGUqNjcxMDg4NjQrdCkqKDEvOTAwNzE5OTI1NDc0MDk5Mil9O2YxLmV4cG9ydHM9UHJ9KTt2YXIgTG0sT2UsV3UsdTEsayxHZT1YKCgpPT57TG09Y2EoZDEoKSwxKSxPZT17fTtPZS5FUFNJTE9OMT0uMTtPZS5FUFNJTE9OMj0uMDE7T2UuRVBTSUxPTjM9LjAwMTtPZS5FUFNJTE9OND0xZS00O09lLkVQU0lMT041PTFlLTU7T2UuRVBTSUxPTjY9MWUtNjtPZS5FUFNJTE9ONz0xZS03O09lLkVQU0lMT044PTFlLTg7T2UuRVBTSUxPTjk9MWUtOTtPZS5FUFNJTE9OMTA9MWUtMTA7T2UuRVBTSUxPTjExPTFlLTExO09lLkVQU0lMT04xMj0xZS0xMjtPZS5FUFNJTE9OMTM9MWUtMTM7T2UuRVBTSUxPTjE0PTFlLTE0O09lLkVQU0lMT04xNT0xZS0xNTtPZS5FUFNJTE9OMTY9MWUtMTY7T2UuRVBTSUxPTjE3PTFlLTE3O09lLkVQU0lMT04xOD0xZS0xODtPZS5FUFNJTE9OMTk9MWUtMTk7T2UuRVBTSUxPTjIwPTFlLTIwO09lLkVQU0lMT04yMT0xZS0yMTtPZS5HUkFWSVRBVElPTkFMUEFSQU1FVEVSPTM5ODYwMDQ0MThlNTtPZS5TT0xBUl9SQURJVVM9Njk1NWU1O09lLkxVTkFSX1JBRElVUz0xNzM3NDAwO09lLlNJWFRZX0ZPVVJfS0lMT0JZVEVTPTY0KjEwMjQ7T2UuRk9VUl9HSUdBQllURVM9NCoxMDI0KjEwMjQqMTAyNDtPZS5zaWduPU1hdGguc2lnbj8/ZnVuY3Rpb24odCl7cmV0dXJuIHQ9K3QsdD09PTB8fHQhPT10P3Q6dD4wPzE6LTF9O09lLnNpZ25Ob3RaZXJvPWZ1bmN0aW9uKGUpe3JldHVybiBlPDA/LTE6MX07T2UudG9TTm9ybT1mdW5jdGlvbihlLHQpe3JldHVybiB0PXQ/PzI1NSxNYXRoLnJvdW5kKChPZS5jbGFtcChlLC0xLDEpKi41Ky41KSp0KX07T2UuZnJvbVNOb3JtPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQ9dD8/MjU1LE9lLmNsYW1wKGUsMCx0KS90KjItMX07T2Uubm9ybWFsaXplPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gbj1NYXRoLm1heChuLXQsMCksbj09PTA/MDpPZS5jbGFtcCgoZS10KS9uLDAsMSl9O09lLnNpbmg9TWF0aC5zaW5oPz9mdW5jdGlvbih0KXtyZXR1cm4oTWF0aC5leHAodCktTWF0aC5leHAoLXQpKS8yfTtPZS5jb3NoPU1hdGguY29zaD8/ZnVuY3Rpb24odCl7cmV0dXJuKE1hdGguZXhwKHQpK01hdGguZXhwKC10KSkvMn07T2UubGVycD1mdW5jdGlvbihlLHQsbil7cmV0dXJuKDEtbikqZStuKnR9O09lLlBJPU1hdGguUEk7T2UuT05FX09WRVJfUEk9MS9NYXRoLlBJO09lLlBJX09WRVJfVFdPPU1hdGguUEkvMjtPZS5QSV9PVkVSX1RIUkVFPU1hdGguUEkvMztPZS5QSV9PVkVSX0ZPVVI9TWF0aC5QSS80O09lLlBJX09WRVJfU0lYPU1hdGguUEkvNjtPZS5USFJFRV9QSV9PVkVSX1RXTz0zKk1hdGguUEkvMjtPZS5UV09fUEk9MipNYXRoLlBJO09lLk9ORV9PVkVSX1RXT19QST0xLygyKk1hdGguUEkpO09lLlJBRElBTlNfUEVSX0RFR1JFRT1NYXRoLlBJLzE4MDtPZS5ERUdSRUVTX1BFUl9SQURJQU49MTgwL01hdGguUEk7T2UuUkFESUFOU19QRVJfQVJDU0VDT05EPU9lLlJBRElBTlNfUEVSX0RFR1JFRS8zNjAwO09lLnRvUmFkaWFucz1mdW5jdGlvbihlKXtyZXR1cm4gZSpPZS5SQURJQU5TX1BFUl9ERUdSRUV9O09lLnRvRGVncmVlcz1mdW5jdGlvbihlKXtyZXR1cm4gZSpPZS5ERUdSRUVTX1BFUl9SQURJQU59O09lLmNvbnZlcnRMb25naXR1ZGVSYW5nZT1mdW5jdGlvbihlKXtsZXQgdD1PZS5UV09fUEksbj1lLU1hdGguZmxvb3IoZS90KSp0O3JldHVybiBuPC1NYXRoLlBJP24rdDpuPj1NYXRoLlBJP24tdDpufTtPZS5jbGFtcFRvTGF0aXR1ZGVSYW5nZT1mdW5jdGlvbihlKXtyZXR1cm4gT2UuY2xhbXAoZSwtMSpPZS5QSV9PVkVSX1RXTyxPZS5QSV9PVkVSX1RXTyl9O09lLm5lZ2F0aXZlUGlUb1BpPWZ1bmN0aW9uKGUpe3JldHVybiBlPj0tT2UuUEkmJmU8PU9lLlBJP2U6T2UuemVyb1RvVHdvUGkoZStPZS5QSSktT2UuUEl9O09lLnplcm9Ub1R3b1BpPWZ1bmN0aW9uKGUpe2lmKGU+PTAmJmU8PU9lLlRXT19QSSlyZXR1cm4gZTtsZXQgdD1PZS5tb2QoZSxPZS5UV09fUEkpO3JldHVybiBNYXRoLmFicyh0KTxPZS5FUFNJTE9OMTQmJk1hdGguYWJzKGUpPk9lLkVQU0lMT04xND9PZS5UV09fUEk6dH07T2UubW9kPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIE9lLnNpZ24oZSk9PT1PZS5zaWduKHQpJiZNYXRoLmFicyhlKTxNYXRoLmFicyh0KT9lOihlJXQrdCkldH07T2UuZXF1YWxzRXBzaWxvbj1mdW5jdGlvbihlLHQsbixvKXtuPW4/PzAsbz1vPz9uO2xldCBhPU1hdGguYWJzKGUtdCk7cmV0dXJuIGE8PW98fGE8PW4qTWF0aC5tYXgoTWF0aC5hYnMoZSksTWF0aC5hYnModCkpfTtPZS5sZXNzVGhhbj1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGUtdDwtbn07T2UubGVzc1RoYW5PckVxdWFscz1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGUtdDxufTtPZS5ncmVhdGVyVGhhbj1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGUtdD5ufTtPZS5ncmVhdGVyVGhhbk9yRXF1YWxzPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZS10Pi1ufTtXdT1bMV07T2UuZmFjdG9yaWFsPWZ1bmN0aW9uKGUpe2xldCB0PVd1Lmxlbmd0aDtpZihlPj10KXtsZXQgbj1XdVt0LTFdO2ZvcihsZXQgbz10O288PWU7bysrKXtsZXQgYT1uKm87V3UucHVzaChhKSxuPWF9fXJldHVybiBXdVtlXX07T2UuaW5jcmVtZW50V3JhcD1mdW5jdGlvbihlLHQsbil7cmV0dXJuIG49bj8/MCwrK2UsZT50JiYoZT1uKSxlfTtPZS5pc1Bvd2VyT2ZUd289ZnVuY3Rpb24oZSl7cmV0dXJuIGUhPT0wJiYoZSZlLTEpPT09MH07T2UubmV4dFBvd2VyT2ZUd289ZnVuY3Rpb24oZSl7cmV0dXJuLS1lLGV8PWU+PjEsZXw9ZT4+MixlfD1lPj40LGV8PWU+PjgsZXw9ZT4+MTYsKytlLGV9O09lLnByZXZpb3VzUG93ZXJPZlR3bz1mdW5jdGlvbihlKXtyZXR1cm4gZXw9ZT4+MSxlfD1lPj4yLGV8PWU+PjQsZXw9ZT4+OCxlfD1lPj4xNixlfD1lPj4zMixlPShlPj4+MCktKGU+Pj4xKSxlfTtPZS5jbGFtcD1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGU8dD90OmU+bj9uOmV9O3UxPW5ldyBMbS5kZWZhdWx0O09lLnNldFJhbmRvbU51bWJlclNlZWQ9ZnVuY3Rpb24oZSl7dTE9bmV3IExtLmRlZmF1bHQoZSl9O09lLm5leHRSYW5kb21OdW1iZXI9ZnVuY3Rpb24oKXtyZXR1cm4gdTEucmFuZG9tKCl9O09lLnJhbmRvbUJldHdlZW49ZnVuY3Rpb24oZSx0KXtyZXR1cm4gT2UubmV4dFJhbmRvbU51bWJlcigpKih0LWUpK2V9O09lLmFjb3NDbGFtcGVkPWZ1bmN0aW9uKGUpe3JldHVybiBNYXRoLmFjb3MoT2UuY2xhbXAoZSwtMSwxKSl9O09lLmFzaW5DbGFtcGVkPWZ1bmN0aW9uKGUpe3JldHVybiBNYXRoLmFzaW4oT2UuY2xhbXAoZSwtMSwxKSl9O09lLmNob3JkTGVuZ3RoPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIDIqdCpNYXRoLnNpbihlKi41KX07T2UubG9nQmFzZT1mdW5jdGlvbihlLHQpe3JldHVybiBNYXRoLmxvZyhlKS9NYXRoLmxvZyh0KX07T2UuY2JydD1NYXRoLmNicnQ/P2Z1bmN0aW9uKHQpe2xldCBuPU1hdGgucG93KE1hdGguYWJzKHQpLC4zMzMzMzMzMzMzMzMzMzMzKTtyZXR1cm4gdDwwPy1uOm59O09lLmxvZzI9TWF0aC5sb2cyPz9mdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5sb2codCkqTWF0aC5MT0cyRX07T2UuZm9nPWZ1bmN0aW9uKGUsdCl7bGV0IG49ZSp0O3JldHVybiAxLU1hdGguZXhwKC0obipuKSl9O09lLmZhc3RBcHByb3hpbWF0ZUF0YW49ZnVuY3Rpb24oZSl7cmV0dXJuIGUqKC0uMTc4NCpNYXRoLmFicyhlKS0uMDY2MyplKmUrMS4wMzAxKX07T2UuZmFzdEFwcHJveGltYXRlQXRhbjI9ZnVuY3Rpb24oZSx0KXtsZXQgbixvPU1hdGguYWJzKGUpO249TWF0aC5hYnModCk7bGV0IGE9TWF0aC5tYXgobyxuKTtuPU1hdGgubWluKG8sbik7bGV0IHI9bi9hO3JldHVybiBvPU9lLmZhc3RBcHByb3hpbWF0ZUF0YW4ociksbz1NYXRoLmFicyh0KT5NYXRoLmFicyhlKT9PZS5QSV9PVkVSX1RXTy1vOm8sbz1lPDA/T2UuUEktbzpvLG89dDwwPy1vOm8sb307az1PZX0pO3ZhciBtbixYdSxsMSxZdSxqbSx3UyxwYSxXYyxzLEllPVgoKCk9PntzZSgpO0dlKCk7bW49Y2xhc3MgZXtjb25zdHJ1Y3Rvcih0LG4sbyl7dGhpcy54PXQ/PzAsdGhpcy55PW4/PzAsdGhpcy56PW8/PzB9c3RhdGljIGZyb21TcGhlcmljYWwodCxuKXtnKG4pfHwobj1uZXcgZSk7bGV0IG89dC5jbG9jayxhPXQuY29uZSxyPXQubWFnbml0dWRlPz8xLGk9cipNYXRoLnNpbihhKTtyZXR1cm4gbi54PWkqTWF0aC5jb3Mobyksbi55PWkqTWF0aC5zaW4obyksbi56PXIqTWF0aC5jb3MoYSksbn1zdGF0aWMgZnJvbUVsZW1lbnRzKHQsbixvLGEpe3JldHVybiBnKGEpPyhhLng9dCxhLnk9bixhLno9byxhKTpuZXcgZSh0LG4sbyl9c3RhdGljIGNsb25lKHQsbil7aWYoZyh0KSlyZXR1cm4gZyhuKT8obi54PXQueCxuLnk9dC55LG4uej10Lnosbik6bmV3IGUodC54LHQueSx0LnopfXN0YXRpYyBwYWNrKHQsbixvKXtyZXR1cm4gbz1vPz8wLG5bbysrXT10LngsbltvKytdPXQueSxuW29dPXQueixufXN0YXRpYyB1bnBhY2sodCxuLG8pe3JldHVybiBuPW4/PzAsZyhvKXx8KG89bmV3IGUpLG8ueD10W24rK10sby55PXRbbisrXSxvLno9dFtuXSxvfXN0YXRpYyBwYWNrQXJyYXkodCxuKXtsZXQgbz10Lmxlbmd0aCxhPW8qMztnKG4pPyFBcnJheS5pc0FycmF5KG4pJiZuLmxlbmd0aCE9PWF8fG4ubGVuZ3RoIT09YSYmKG4ubGVuZ3RoPWEpOm49bmV3IEFycmF5KGEpO2ZvcihsZXQgcj0wO3I8bzsrK3IpZS5wYWNrKHRbcl0sbixyKjMpO3JldHVybiBufXN0YXRpYyB1bnBhY2tBcnJheSh0LG4pe2xldCBvPXQubGVuZ3RoO2cobik/bi5sZW5ndGg9by8zOm49bmV3IEFycmF5KG8vMyk7Zm9yKGxldCBhPTA7YTxvO2ErPTMpe2xldCByPWEvMztuW3JdPWUudW5wYWNrKHQsYSxuW3JdKX1yZXR1cm4gbn1zdGF0aWMgbWF4aW11bUNvbXBvbmVudCh0KXtyZXR1cm4gTWF0aC5tYXgodC54LHQueSx0LnopfXN0YXRpYyBtaW5pbXVtQ29tcG9uZW50KHQpe3JldHVybiBNYXRoLm1pbih0LngsdC55LHQueil9c3RhdGljIG1pbmltdW1CeUNvbXBvbmVudCh0LG4sbyl7cmV0dXJuIG8ueD1NYXRoLm1pbih0Lngsbi54KSxvLnk9TWF0aC5taW4odC55LG4ueSksby56PU1hdGgubWluKHQueixuLnopLG99c3RhdGljIG1heGltdW1CeUNvbXBvbmVudCh0LG4sbyl7cmV0dXJuIG8ueD1NYXRoLm1heCh0Lngsbi54KSxvLnk9TWF0aC5tYXgodC55LG4ueSksby56PU1hdGgubWF4KHQueixuLnopLG99c3RhdGljIGNsYW1wKHQsbixvLGEpe2xldCByPWsuY2xhbXAodC54LG4ueCxvLngpLGk9ay5jbGFtcCh0Lnksbi55LG8ueSksZj1rLmNsYW1wKHQueixuLnosby56KTtyZXR1cm4gYS54PXIsYS55PWksYS56PWYsYX1zdGF0aWMgbWFnbml0dWRlU3F1YXJlZCh0KXtyZXR1cm4gdC54KnQueCt0LnkqdC55K3Queip0Lnp9c3RhdGljIG1hZ25pdHVkZSh0KXtyZXR1cm4gTWF0aC5zcXJ0KGUubWFnbml0dWRlU3F1YXJlZCh0KSl9c3RhdGljIGRpc3RhbmNlKHQsbil7cmV0dXJuIGUuc3VidHJhY3QodCxuLFh1KSxlLm1hZ25pdHVkZShYdSl9c3RhdGljIGRpc3RhbmNlU3F1YXJlZCh0LG4pe3JldHVybiBlLnN1YnRyYWN0KHQsbixYdSksZS5tYWduaXR1ZGVTcXVhcmVkKFh1KX1zdGF0aWMgbm9ybWFsaXplKHQsbil7bGV0IG89ZS5tYWduaXR1ZGUodCk7cmV0dXJuIG4ueD10LngvbyxuLnk9dC55L28sbi56PXQuei9vLG59c3RhdGljIGRvdCh0LG4pe3JldHVybiB0Lngqbi54K3QueSpuLnkrdC56Km4uen1zdGF0aWMgbXVsdGlwbHlDb21wb25lbnRzKHQsbixvKXtyZXR1cm4gby54PXQueCpuLngsby55PXQueSpuLnksby56PXQueipuLnosb31zdGF0aWMgZGl2aWRlQ29tcG9uZW50cyh0LG4sbyl7cmV0dXJuIG8ueD10Lngvbi54LG8ueT10Lnkvbi55LG8uej10Lnovbi56LG99c3RhdGljIGFkZCh0LG4sbyl7cmV0dXJuIG8ueD10Lngrbi54LG8ueT10Lnkrbi55LG8uej10Lnorbi56LG99c3RhdGljIHN1YnRyYWN0KHQsbixvKXtyZXR1cm4gby54PXQueC1uLngsby55PXQueS1uLnksby56PXQuei1uLnosb31zdGF0aWMgbXVsdGlwbHlCeVNjYWxhcih0LG4sbyl7cmV0dXJuIG8ueD10LngqbixvLnk9dC55Km4sby56PXQueipuLG99c3RhdGljIGRpdmlkZUJ5U2NhbGFyKHQsbixvKXtyZXR1cm4gby54PXQueC9uLG8ueT10LnkvbixvLno9dC56L24sb31zdGF0aWMgbmVnYXRlKHQsbil7cmV0dXJuIG4ueD0tdC54LG4ueT0tdC55LG4uej0tdC56LG59c3RhdGljIGFicyh0LG4pe3JldHVybiBuLng9TWF0aC5hYnModC54KSxuLnk9TWF0aC5hYnModC55KSxuLno9TWF0aC5hYnModC56KSxufXN0YXRpYyBsZXJwKHQsbixvLGEpe3JldHVybiBlLm11bHRpcGx5QnlTY2FsYXIobixvLGwxKSxhPWUubXVsdGlwbHlCeVNjYWxhcih0LDEtbyxhKSxlLmFkZChsMSxhLGEpfXN0YXRpYyBhbmdsZUJldHdlZW4odCxuKXtlLm5vcm1hbGl6ZSh0LFl1KSxlLm5vcm1hbGl6ZShuLGptKTtsZXQgbz1lLmRvdChZdSxqbSksYT1lLm1hZ25pdHVkZShlLmNyb3NzKFl1LGptLFl1KSk7cmV0dXJuIE1hdGguYXRhbjIoYSxvKX1zdGF0aWMgbW9zdE9ydGhvZ29uYWxBeGlzKHQsbil7bGV0IG89ZS5ub3JtYWxpemUodCx3Uyk7cmV0dXJuIGUuYWJzKG8sbyksby54PD1vLnk/by54PD1vLno/bj1lLmNsb25lKGUuVU5JVF9YLG4pOm49ZS5jbG9uZShlLlVOSVRfWixuKTpvLnk8PW8uej9uPWUuY2xvbmUoZS5VTklUX1ksbik6bj1lLmNsb25lKGUuVU5JVF9aLG4pLG59c3RhdGljIHByb2plY3RWZWN0b3IodCxuLG8pe2xldCBhPWUuZG90KHQsbikvZS5kb3QobixuKTtyZXR1cm4gZS5tdWx0aXBseUJ5U2NhbGFyKG4sYSxvKX1zdGF0aWMgZXF1YWxzKHQsbil7cmV0dXJuIHQ9PT1ufHxnKHQpJiZnKG4pJiZ0Lng9PT1uLngmJnQueT09PW4ueSYmdC56PT09bi56fXN0YXRpYyBlcXVhbHNBcnJheSh0LG4sbyl7cmV0dXJuIHQueD09PW5bb10mJnQueT09PW5bbysxXSYmdC56PT09bltvKzJdfXN0YXRpYyBlcXVhbHNFcHNpbG9uKHQsbixvLGEpe3JldHVybiB0PT09bnx8Zyh0KSYmZyhuKSYmay5lcXVhbHNFcHNpbG9uKHQueCxuLngsbyxhKSYmay5lcXVhbHNFcHNpbG9uKHQueSxuLnksbyxhKSYmay5lcXVhbHNFcHNpbG9uKHQueixuLnosbyxhKX1zdGF0aWMgY3Jvc3ModCxuLG8pe2xldCBhPXQueCxyPXQueSxpPXQueixmPW4ueCxkPW4ueSxjPW4ueix1PXIqYy1pKmQsbD1pKmYtYSpjLGg9YSpkLXIqZjtyZXR1cm4gby54PXUsby55PWwsby56PWgsb31zdGF0aWMgbWlkcG9pbnQodCxuLG8pe3JldHVybiBvLng9KHQueCtuLngpKi41LG8ueT0odC55K24ueSkqLjUsby56PSh0Lnorbi56KSouNSxvfXN0YXRpYyBmcm9tRGVncmVlcyh0LG4sbyxhLHIpe3JldHVybiB0PWsudG9SYWRpYW5zKHQpLG49ay50b1JhZGlhbnMobiksZS5mcm9tUmFkaWFucyh0LG4sbyxhLHIpfXN0YXRpYyBmcm9tUmFkaWFucyh0LG4sbyxhLHIpe289bz8/MDtsZXQgaT1nKGEpP2EucmFkaWlTcXVhcmVkOmUuX2VsbGlwc29pZFJhZGlpU3F1YXJlZCxmPU1hdGguY29zKG4pO3BhLng9ZipNYXRoLmNvcyh0KSxwYS55PWYqTWF0aC5zaW4odCkscGEuej1NYXRoLnNpbihuKSxwYT1lLm5vcm1hbGl6ZShwYSxwYSksZS5tdWx0aXBseUNvbXBvbmVudHMoaSxwYSxXYyk7bGV0IGQ9TWF0aC5zcXJ0KGUuZG90KHBhLFdjKSk7cmV0dXJuIFdjPWUuZGl2aWRlQnlTY2FsYXIoV2MsZCxXYykscGE9ZS5tdWx0aXBseUJ5U2NhbGFyKHBhLG8scGEpLGcocil8fChyPW5ldyBlKSxlLmFkZChXYyxwYSxyKX1zdGF0aWMgZnJvbURlZ3JlZXNBcnJheSh0LG4sbyl7bGV0IGE9dC5sZW5ndGg7ZyhvKT9vLmxlbmd0aD1hLzI6bz1uZXcgQXJyYXkoYS8yKTtmb3IobGV0IHI9MDtyPGE7cis9Mil7bGV0IGk9dFtyXSxmPXRbcisxXSxkPXIvMjtvW2RdPWUuZnJvbURlZ3JlZXMoaSxmLDAsbixvW2RdKX1yZXR1cm4gb31zdGF0aWMgZnJvbVJhZGlhbnNBcnJheSh0LG4sbyl7bGV0IGE9dC5sZW5ndGg7ZyhvKT9vLmxlbmd0aD1hLzI6bz1uZXcgQXJyYXkoYS8yKTtmb3IobGV0IHI9MDtyPGE7cis9Mil7bGV0IGk9dFtyXSxmPXRbcisxXSxkPXIvMjtvW2RdPWUuZnJvbVJhZGlhbnMoaSxmLDAsbixvW2RdKX1yZXR1cm4gb31zdGF0aWMgZnJvbURlZ3JlZXNBcnJheUhlaWdodHModCxuLG8pe2xldCBhPXQubGVuZ3RoO2cobyk/by5sZW5ndGg9YS8zOm89bmV3IEFycmF5KGEvMyk7Zm9yKGxldCByPTA7cjxhO3IrPTMpe2xldCBpPXRbcl0sZj10W3IrMV0sZD10W3IrMl0sYz1yLzM7b1tjXT1lLmZyb21EZWdyZWVzKGksZixkLG4sb1tjXSl9cmV0dXJuIG99c3RhdGljIGZyb21SYWRpYW5zQXJyYXlIZWlnaHRzKHQsbixvKXtsZXQgYT10Lmxlbmd0aDtnKG8pP28ubGVuZ3RoPWEvMzpvPW5ldyBBcnJheShhLzMpO2ZvcihsZXQgcj0wO3I8YTtyKz0zKXtsZXQgaT10W3JdLGY9dFtyKzFdLGQ9dFtyKzJdLGM9ci8zO29bY109ZS5mcm9tUmFkaWFucyhpLGYsZCxuLG9bY10pfXJldHVybiBvfWNsb25lKHQpe3JldHVybiBlLmNsb25lKHRoaXMsdCl9ZXF1YWxzKHQpe3JldHVybiBlLmVxdWFscyh0aGlzLHQpfWVxdWFsc0Vwc2lsb24odCxuLG8pe3JldHVybiBlLmVxdWFsc0Vwc2lsb24odGhpcyx0LG4sbyl9dG9TdHJpbmcoKXtyZXR1cm5gKCR7dGhpcy54fSwgJHt0aGlzLnl9LCAke3RoaXMuen0pYH19O21uLmZyb21DYXJ0ZXNpYW40PW1uLmNsb25lO21uLnBhY2tlZExlbmd0aD0zO21uLmZyb21BcnJheT1tbi51bnBhY2s7WHU9bmV3IG1uLGwxPW5ldyBtbixZdT1uZXcgbW4sam09bmV3IG1uLHdTPW5ldyBtbixwYT1uZXcgbW4sV2M9bmV3IG1uO21uLl9lbGxpcHNvaWRSYWRpaVNxdWFyZWQ9bmV3IG1uKDYzNzgxMzcqNjM3ODEzNyw2Mzc4MTM3KjYzNzgxMzcsNjM1Njc1MjMxNDI0NTE3OWUtOSo2MzU2NzUyMzE0MjQ1MTc5ZS05KTttbi5aRVJPPU9iamVjdC5mcmVlemUobmV3IG1uKDAsMCwwKSk7bW4uT05FPU9iamVjdC5mcmVlemUobmV3IG1uKDEsMSwxKSk7bW4uVU5JVF9YPU9iamVjdC5mcmVlemUobmV3IG1uKDEsMCwwKSk7bW4uVU5JVF9ZPU9iamVjdC5mcmVlemUobmV3IG1uKDAsMSwwKSk7bW4uVU5JVF9aPU9iamVjdC5mcmVlemUobmV3IG1uKDAsMCwxKSk7cz1tbn0pO2Z1bmN0aW9uIFJTKGUsdCxuLG8sYSl7bGV0IHI9ZS54LGk9ZS55LGY9ZS56LGQ9dC54LGM9dC55LHU9dC56LGw9cipyKmQqZCxoPWkqaSpjKmMsbT1mKmYqdSp1LGI9bCtoK20scD1NYXRoLnNxcnQoMS9iKSx5PXMubXVsdGlwbHlCeVNjYWxhcihlLHAsVFMpO2lmKGI8bylyZXR1cm4gaXNGaW5pdGUocCk/cy5jbG9uZSh5LGEpOnZvaWQgMDtsZXQgVD1uLngsXz1uLnksRT1uLnosdz1FUzt3Lng9eS54KlQqMix3Lnk9eS55Kl8qMix3Lno9eS56KkUqMjtsZXQgUj0oMS1wKSpzLm1hZ25pdHVkZShlKS8oLjUqcy5tYWduaXR1ZGUodykpLFM9MCxDLEksTixQLEYsQSx4LE0sdixVLHo7ZG97Ui09UyxOPTEvKDErUipUKSxQPTEvKDErUipfKSxGPTEvKDErUipFKSxBPU4qTix4PVAqUCxNPUYqRix2PUEqTixVPXgqUCx6PU0qRixDPWwqQStoKngrbSpNLTEsST1sKnYqVCtoKlUqXyttKnoqRTtsZXQgRD0tMipJO1M9Qy9EfXdoaWxlKE1hdGguYWJzKEMpPmsuRVBTSUxPTjEyKTtyZXR1cm4gZyhhKT8oYS54PXIqTixhLnk9aSpQLGEuej1mKkYsYSk6bmV3IHMocipOLGkqUCxmKkYpfXZhciBUUyxFUyxKdSx6bT1YKCgpPT57SWUoKTtzZSgpO0dlKCk7VFM9bmV3IHMsRVM9bmV3IHM7SnU9UlN9KTtmdW5jdGlvbiBibihlLHQsbil7dGhpcy5sb25naXR1ZGU9ZT8/MCx0aGlzLmxhdGl0dWRlPXQ/PzAsdGhpcy5oZWlnaHQ9bj8/MH12YXIgeFMsT1MsU1MscmUsVHQ9WCgoKT0+e0llKCk7c2UoKTtHZSgpO3ptKCk7Ym4uZnJvbVJhZGlhbnM9ZnVuY3Rpb24oZSx0LG4sbyl7cmV0dXJuIG49bj8/MCxnKG8pPyhvLmxvbmdpdHVkZT1lLG8ubGF0aXR1ZGU9dCxvLmhlaWdodD1uLG8pOm5ldyBibihlLHQsbil9O2JuLmZyb21EZWdyZWVzPWZ1bmN0aW9uKGUsdCxuLG8pe3JldHVybiBlPWsudG9SYWRpYW5zKGUpLHQ9ay50b1JhZGlhbnModCksYm4uZnJvbVJhZGlhbnMoZSx0LG4sbyl9O3hTPW5ldyBzLE9TPW5ldyBzLFNTPW5ldyBzO2JuLl9lbGxpcHNvaWRPbmVPdmVyUmFkaWk9bmV3IHMoMS82Mzc4MTM3LDEvNjM3ODEzNywxLzYzNTY3NTIzMTQyNDUxNzllLTkpO2JuLl9lbGxpcHNvaWRPbmVPdmVyUmFkaWlTcXVhcmVkPW5ldyBzKDEvKDYzNzgxMzcqNjM3ODEzNyksMS8oNjM3ODEzNyo2Mzc4MTM3KSwxLyg2MzU2NzUyMzE0MjQ1MTc5ZS05KjYzNTY3NTIzMTQyNDUxNzllLTkpKTtibi5fZWxsaXBzb2lkQ2VudGVyVG9sZXJhbmNlU3F1YXJlZD1rLkVQU0lMT04xO2JuLmZyb21DYXJ0ZXNpYW49ZnVuY3Rpb24oZSx0LG4pe2xldCBvPWcodCk/dC5vbmVPdmVyUmFkaWk6Ym4uX2VsbGlwc29pZE9uZU92ZXJSYWRpaSxhPWcodCk/dC5vbmVPdmVyUmFkaWlTcXVhcmVkOmJuLl9lbGxpcHNvaWRPbmVPdmVyUmFkaWlTcXVhcmVkLHI9Zyh0KT90Ll9jZW50ZXJUb2xlcmFuY2VTcXVhcmVkOmJuLl9lbGxpcHNvaWRDZW50ZXJUb2xlcmFuY2VTcXVhcmVkLGk9SnUoZSxvLGEscixPUyk7aWYoIWcoaSkpcmV0dXJuO2xldCBmPXMubXVsdGlwbHlDb21wb25lbnRzKGksYSx4Uyk7Zj1zLm5vcm1hbGl6ZShmLGYpO2xldCBkPXMuc3VidHJhY3QoZSxpLFNTKSxjPU1hdGguYXRhbjIoZi55LGYueCksdT1NYXRoLmFzaW4oZi56KSxsPWsuc2lnbihzLmRvdChkLGUpKSpzLm1hZ25pdHVkZShkKTtyZXR1cm4gZyhuKT8obi5sb25naXR1ZGU9YyxuLmxhdGl0dWRlPXUsbi5oZWlnaHQ9bCxuKTpuZXcgYm4oYyx1LGwpfTtibi50b0NhcnRlc2lhbj1mdW5jdGlvbihlLHQsbil7cmV0dXJuIHMuZnJvbVJhZGlhbnMoZS5sb25naXR1ZGUsZS5sYXRpdHVkZSxlLmhlaWdodCx0LG4pfTtibi5jbG9uZT1mdW5jdGlvbihlLHQpe2lmKGcoZSkpcmV0dXJuIGcodCk/KHQubG9uZ2l0dWRlPWUubG9uZ2l0dWRlLHQubGF0aXR1ZGU9ZS5sYXRpdHVkZSx0LmhlaWdodD1lLmhlaWdodCx0KTpuZXcgYm4oZS5sb25naXR1ZGUsZS5sYXRpdHVkZSxlLmhlaWdodCl9O2JuLmVxdWFscz1mdW5jdGlvbihlLHQpe3JldHVybiBlPT09dHx8ZyhlKSYmZyh0KSYmZS5sb25naXR1ZGU9PT10LmxvbmdpdHVkZSYmZS5sYXRpdHVkZT09PXQubGF0aXR1ZGUmJmUuaGVpZ2h0PT09dC5oZWlnaHR9O2JuLmVxdWFsc0Vwc2lsb249ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBuPW4/PzAsZT09PXR8fGcoZSkmJmcodCkmJk1hdGguYWJzKGUubG9uZ2l0dWRlLXQubG9uZ2l0dWRlKTw9biYmTWF0aC5hYnMoZS5sYXRpdHVkZS10LmxhdGl0dWRlKTw9biYmTWF0aC5hYnMoZS5oZWlnaHQtdC5oZWlnaHQpPD1ufTtibi5aRVJPPU9iamVjdC5mcmVlemUobmV3IGJuKDAsMCwwKSk7Ym4ucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKGUpe3JldHVybiBibi5jbG9uZSh0aGlzLGUpfTtibi5wcm90b3R5cGUuZXF1YWxzPWZ1bmN0aW9uKGUpe3JldHVybiBibi5lcXVhbHModGhpcyxlKX07Ym4ucHJvdG90eXBlLmVxdWFsc0Vwc2lsb249ZnVuY3Rpb24oZSx0KXtyZXR1cm4gYm4uZXF1YWxzRXBzaWxvbih0aGlzLGUsdCl9O2JuLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybmAoJHt0aGlzLmxvbmdpdHVkZX0sICR7dGhpcy5sYXRpdHVkZX0sICR7dGhpcy5oZWlnaHR9KWB9O3JlPWJufSk7dmFyIEZuLFp1LGgxLG0xLGIxLENTLFksanQ9WCgoKT0+e3NlKCk7R2UoKTtGbj1jbGFzcyBle2NvbnN0cnVjdG9yKHQsbil7dGhpcy54PXQ/PzAsdGhpcy55PW4/PzB9c3RhdGljIGZyb21FbGVtZW50cyh0LG4sbyl7cmV0dXJuIGcobyk/KG8ueD10LG8ueT1uLG8pOm5ldyBlKHQsbil9c3RhdGljIGNsb25lKHQsbil7aWYoZyh0KSlyZXR1cm4gZyhuKT8obi54PXQueCxuLnk9dC55LG4pOm5ldyBlKHQueCx0LnkpfXN0YXRpYyBwYWNrKHQsbixvKXtyZXR1cm4gbz1vPz8wLG5bbysrXT10LngsbltvXT10Lnksbn1zdGF0aWMgdW5wYWNrKHQsbixvKXtyZXR1cm4gbj1uPz8wLGcobyl8fChvPW5ldyBlKSxvLng9dFtuKytdLG8ueT10W25dLG99c3RhdGljIHBhY2tBcnJheSh0LG4pe2xldCBvPXQubGVuZ3RoLGE9byoyO2cobik/IUFycmF5LmlzQXJyYXkobikmJm4ubGVuZ3RoIT09YXx8bi5sZW5ndGghPT1hJiYobi5sZW5ndGg9YSk6bj1uZXcgQXJyYXkoYSk7Zm9yKGxldCByPTA7cjxvOysrcillLnBhY2sodFtyXSxuLHIqMik7cmV0dXJuIG59c3RhdGljIHVucGFja0FycmF5KHQsbil7bGV0IG89dC5sZW5ndGg7ZyhuKT9uLmxlbmd0aD1vLzI6bj1uZXcgQXJyYXkoby8yKTtmb3IobGV0IGE9MDthPG87YSs9Mil7bGV0IHI9YS8yO25bcl09ZS51bnBhY2sodCxhLG5bcl0pfXJldHVybiBufXN0YXRpYyBtYXhpbXVtQ29tcG9uZW50KHQpe3JldHVybiBNYXRoLm1heCh0LngsdC55KX1zdGF0aWMgbWluaW11bUNvbXBvbmVudCh0KXtyZXR1cm4gTWF0aC5taW4odC54LHQueSl9c3RhdGljIG1pbmltdW1CeUNvbXBvbmVudCh0LG4sbyl7cmV0dXJuIG8ueD1NYXRoLm1pbih0Lngsbi54KSxvLnk9TWF0aC5taW4odC55LG4ueSksb31zdGF0aWMgbWF4aW11bUJ5Q29tcG9uZW50KHQsbixvKXtyZXR1cm4gby54PU1hdGgubWF4KHQueCxuLngpLG8ueT1NYXRoLm1heCh0Lnksbi55KSxvfXN0YXRpYyBjbGFtcCh0LG4sbyxhKXtsZXQgcj1rLmNsYW1wKHQueCxuLngsby54KSxpPWsuY2xhbXAodC55LG4ueSxvLnkpO3JldHVybiBhLng9cixhLnk9aSxhfXN0YXRpYyBtYWduaXR1ZGVTcXVhcmVkKHQpe3JldHVybiB0LngqdC54K3QueSp0Lnl9c3RhdGljIG1hZ25pdHVkZSh0KXtyZXR1cm4gTWF0aC5zcXJ0KGUubWFnbml0dWRlU3F1YXJlZCh0KSl9c3RhdGljIGRpc3RhbmNlKHQsbil7cmV0dXJuIGUuc3VidHJhY3QodCxuLFp1KSxlLm1hZ25pdHVkZShadSl9c3RhdGljIGRpc3RhbmNlU3F1YXJlZCh0LG4pe3JldHVybiBlLnN1YnRyYWN0KHQsbixadSksZS5tYWduaXR1ZGVTcXVhcmVkKFp1KX1zdGF0aWMgbm9ybWFsaXplKHQsbil7bGV0IG89ZS5tYWduaXR1ZGUodCk7cmV0dXJuIG4ueD10LngvbyxuLnk9dC55L28sbn1zdGF0aWMgZG90KHQsbil7cmV0dXJuIHQueCpuLngrdC55Km4ueX1zdGF0aWMgY3Jvc3ModCxuKXtyZXR1cm4gdC54Km4ueS10Lnkqbi54fXN0YXRpYyBtdWx0aXBseUNvbXBvbmVudHModCxuLG8pe3JldHVybiBvLng9dC54Km4ueCxvLnk9dC55Km4ueSxvfXN0YXRpYyBkaXZpZGVDb21wb25lbnRzKHQsbixvKXtyZXR1cm4gby54PXQueC9uLngsby55PXQueS9uLnksb31zdGF0aWMgYWRkKHQsbixvKXtyZXR1cm4gby54PXQueCtuLngsby55PXQueStuLnksb31zdGF0aWMgc3VidHJhY3QodCxuLG8pe3JldHVybiBvLng9dC54LW4ueCxvLnk9dC55LW4ueSxvfXN0YXRpYyBtdWx0aXBseUJ5U2NhbGFyKHQsbixvKXtyZXR1cm4gby54PXQueCpuLG8ueT10LnkqbixvfXN0YXRpYyBkaXZpZGVCeVNjYWxhcih0LG4sbyl7cmV0dXJuIG8ueD10LngvbixvLnk9dC55L24sb31zdGF0aWMgbmVnYXRlKHQsbil7cmV0dXJuIG4ueD0tdC54LG4ueT0tdC55LG59c3RhdGljIGFicyh0LG4pe3JldHVybiBuLng9TWF0aC5hYnModC54KSxuLnk9TWF0aC5hYnModC55KSxufXN0YXRpYyBsZXJwKHQsbixvLGEpe3JldHVybiBlLm11bHRpcGx5QnlTY2FsYXIobixvLGgxKSxhPWUubXVsdGlwbHlCeVNjYWxhcih0LDEtbyxhKSxlLmFkZChoMSxhLGEpfXN0YXRpYyBhbmdsZUJldHdlZW4odCxuKXtyZXR1cm4gZS5ub3JtYWxpemUodCxtMSksZS5ub3JtYWxpemUobixiMSksay5hY29zQ2xhbXBlZChlLmRvdChtMSxiMSkpfXN0YXRpYyBtb3N0T3J0aG9nb25hbEF4aXModCxuKXtsZXQgbz1lLm5vcm1hbGl6ZSh0LENTKTtyZXR1cm4gZS5hYnMobyxvKSxvLng8PW8ueT9uPWUuY2xvbmUoZS5VTklUX1gsbik6bj1lLmNsb25lKGUuVU5JVF9ZLG4pLG59c3RhdGljIGVxdWFscyh0LG4pe3JldHVybiB0PT09bnx8Zyh0KSYmZyhuKSYmdC54PT09bi54JiZ0Lnk9PT1uLnl9c3RhdGljIGVxdWFsc0FycmF5KHQsbixvKXtyZXR1cm4gdC54PT09bltvXSYmdC55PT09bltvKzFdfXN0YXRpYyBlcXVhbHNFcHNpbG9uKHQsbixvLGEpe3JldHVybiB0PT09bnx8Zyh0KSYmZyhuKSYmay5lcXVhbHNFcHNpbG9uKHQueCxuLngsbyxhKSYmay5lcXVhbHNFcHNpbG9uKHQueSxuLnksbyxhKX1jbG9uZSh0KXtyZXR1cm4gZS5jbG9uZSh0aGlzLHQpfWVxdWFscyh0KXtyZXR1cm4gZS5lcXVhbHModGhpcyx0KX1lcXVhbHNFcHNpbG9uKHQsbixvKXtyZXR1cm4gZS5lcXVhbHNFcHNpbG9uKHRoaXMsdCxuLG8pfXRvU3RyaW5nKCl7cmV0dXJuYCgke3RoaXMueH0sICR7dGhpcy55fSlgfX07Rm4uZnJvbUNhcnRlc2lhbjM9Rm4uY2xvbmU7Rm4uZnJvbUNhcnRlc2lhbjQ9Rm4uY2xvbmU7Rm4ucGFja2VkTGVuZ3RoPTI7Rm4uZnJvbUFycmF5PUZuLnVucGFjaztadT1uZXcgRm4saDE9bmV3IEZuLG0xPW5ldyBGbixiMT1uZXcgRm4sQ1M9bmV3IEZuO0ZuLlpFUk89T2JqZWN0LmZyZWV6ZShuZXcgRm4oMCwwKSk7Rm4uT05FPU9iamVjdC5mcmVlemUobmV3IEZuKDEsMSkpO0ZuLlVOSVRfWD1PYmplY3QuZnJlZXplKG5ldyBGbigxLDApKTtGbi5VTklUX1k9T2JqZWN0LmZyZWV6ZShuZXcgRm4oMCwxKSk7WT1Gbn0pO2Z1bmN0aW9uIGcxKGUsdCxuLG8pe3Q9dD8/MCxuPW4/PzAsbz1vPz8wLGUuX3JhZGlpPW5ldyBzKHQsbixvKSxlLl9yYWRpaVNxdWFyZWQ9bmV3IHModCp0LG4qbixvKm8pLGUuX3JhZGlpVG9UaGVGb3VydGg9bmV3IHModCp0KnQqdCxuKm4qbipuLG8qbypvKm8pLGUuX29uZU92ZXJSYWRpaT1uZXcgcyh0PT09MD8wOjEvdCxuPT09MD8wOjEvbixvPT09MD8wOjEvbyksZS5fb25lT3ZlclJhZGlpU3F1YXJlZD1uZXcgcyh0PT09MD8wOjEvKHQqdCksbj09PTA/MDoxLyhuKm4pLG89PT0wPzA6MS8obypvKSksZS5fbWluaW11bVJhZGl1cz1NYXRoLm1pbih0LG4sbyksZS5fbWF4aW11bVJhZGl1cz1NYXRoLm1heCh0LG4sbyksZS5fY2VudGVyVG9sZXJhbmNlU3F1YXJlZD1rLkVQU0lMT04xLGUuX3JhZGlpU3F1YXJlZC56IT09MCYmKGUuX3NxdWFyZWRYT3ZlclNxdWFyZWRaPWUuX3JhZGlpU3F1YXJlZC54L2UuX3JhZGlpU3F1YXJlZC56KX1mdW5jdGlvbiBfdChlLHQsbil7dGhpcy5fcmFkaWk9dm9pZCAwLHRoaXMuX3JhZGlpU3F1YXJlZD12b2lkIDAsdGhpcy5fcmFkaWlUb1RoZUZvdXJ0aD12b2lkIDAsdGhpcy5fb25lT3ZlclJhZGlpPXZvaWQgMCx0aGlzLl9vbmVPdmVyUmFkaWlTcXVhcmVkPXZvaWQgMCx0aGlzLl9taW5pbXVtUmFkaXVzPXZvaWQgMCx0aGlzLl9tYXhpbXVtUmFkaXVzPXZvaWQgMCx0aGlzLl9jZW50ZXJUb2xlcmFuY2VTcXVhcmVkPXZvaWQgMCx0aGlzLl9zcXVhcmVkWE92ZXJTcXVhcmVkWj12b2lkIDAsZzEodGhpcyxlLHQsbil9ZnVuY3Rpb24gcDEoZSx0LG4pe2xldCBvPS41Kih0K2UpLGE9LjUqKHQtZSkscj0wO2ZvcihsZXQgaT0wO2k8NTtpKyspe2xldCBmPWEqRlNbaV07cis9RFNbaV0qKG4obytmKStuKG8tZikpfXJldHVybiByKj1hLHJ9dmFyIE1TLE5TLElTLFBTLGtTLHZTLEZTLERTLHEsV2U9WCgoKT0+e2p0KCk7SWUoKTtUdCgpO3NlKCk7R2UoKTt6bSgpO09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKF90LnByb3RvdHlwZSx7cmFkaWk6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9yYWRpaX19LHJhZGlpU3F1YXJlZDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JhZGlpU3F1YXJlZH19LHJhZGlpVG9UaGVGb3VydGg6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9yYWRpaVRvVGhlRm91cnRofX0sb25lT3ZlclJhZGlpOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fb25lT3ZlclJhZGlpfX0sb25lT3ZlclJhZGlpU3F1YXJlZDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX29uZU92ZXJSYWRpaVNxdWFyZWR9fSxtaW5pbXVtUmFkaXVzOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbWluaW11bVJhZGl1c319LG1heGltdW1SYWRpdXM6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tYXhpbXVtUmFkaXVzfX19KTtfdC5jbG9uZT1mdW5jdGlvbihlLHQpe2lmKCFnKGUpKXJldHVybjtsZXQgbj1lLl9yYWRpaTtyZXR1cm4gZyh0KT8ocy5jbG9uZShuLHQuX3JhZGlpKSxzLmNsb25lKGUuX3JhZGlpU3F1YXJlZCx0Ll9yYWRpaVNxdWFyZWQpLHMuY2xvbmUoZS5fcmFkaWlUb1RoZUZvdXJ0aCx0Ll9yYWRpaVRvVGhlRm91cnRoKSxzLmNsb25lKGUuX29uZU92ZXJSYWRpaSx0Ll9vbmVPdmVyUmFkaWkpLHMuY2xvbmUoZS5fb25lT3ZlclJhZGlpU3F1YXJlZCx0Ll9vbmVPdmVyUmFkaWlTcXVhcmVkKSx0Ll9taW5pbXVtUmFkaXVzPWUuX21pbmltdW1SYWRpdXMsdC5fbWF4aW11bVJhZGl1cz1lLl9tYXhpbXVtUmFkaXVzLHQuX2NlbnRlclRvbGVyYW5jZVNxdWFyZWQ9ZS5fY2VudGVyVG9sZXJhbmNlU3F1YXJlZCx0KTpuZXcgX3Qobi54LG4ueSxuLnopfTtfdC5mcm9tQ2FydGVzaWFuMz1mdW5jdGlvbihlLHQpe3JldHVybiBnKHQpfHwodD1uZXcgX3QpLGcoZSkmJmcxKHQsZS54LGUueSxlLnopLHR9O190LldHUzg0PU9iamVjdC5mcmVlemUobmV3IF90KDYzNzgxMzcsNjM3ODEzNyw2MzU2NzUyMzE0MjQ1MTc5ZS05KSk7X3QuVU5JVF9TUEhFUkU9T2JqZWN0LmZyZWV6ZShuZXcgX3QoMSwxLDEpKTtfdC5NT09OPU9iamVjdC5mcmVlemUobmV3IF90KGsuTFVOQVJfUkFESVVTLGsuTFVOQVJfUkFESVVTLGsuTFVOQVJfUkFESVVTKSk7X3QuTUFSUz1PYmplY3QuZnJlZXplKG5ldyBfdCgzMzk2MTkwLDMzOTYxOTAsMzM3NjIwMCkpO190Ll9kZWZhdWx0PV90LldHUzg0O09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKF90LHtkZWZhdWx0OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gX3QuX2RlZmF1bHR9LHNldDpmdW5jdGlvbihlKXtfdC5fZGVmYXVsdD1lLHMuX2VsbGlwc29pZFJhZGlpU3F1YXJlZD1lLnJhZGlpU3F1YXJlZCxyZS5fZWxsaXBzb2lkT25lT3ZlclJhZGlpPWUub25lT3ZlclJhZGlpLHJlLl9lbGxpcHNvaWRPbmVPdmVyUmFkaWlTcXVhcmVkPWUub25lT3ZlclJhZGlpU3F1YXJlZCxyZS5fZWxsaXBzb2lkQ2VudGVyVG9sZXJhbmNlU3F1YXJlZD1lLl9jZW50ZXJUb2xlcmFuY2VTcXVhcmVkfX19KTtfdC5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oZSl7cmV0dXJuIF90LmNsb25lKHRoaXMsZSl9O190LnBhY2tlZExlbmd0aD1zLnBhY2tlZExlbmd0aDtfdC5wYWNrPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gbj1uPz8wLHMucGFjayhlLl9yYWRpaSx0LG4pLHR9O190LnVucGFjaz1mdW5jdGlvbihlLHQsbil7dD10Pz8wO2xldCBvPXMudW5wYWNrKGUsdCk7cmV0dXJuIF90LmZyb21DYXJ0ZXNpYW4zKG8sbil9O190LnByb3RvdHlwZS5nZW9jZW50cmljU3VyZmFjZU5vcm1hbD1zLm5vcm1hbGl6ZTtfdC5wcm90b3R5cGUuZ2VvZGV0aWNTdXJmYWNlTm9ybWFsQ2FydG9ncmFwaGljPWZ1bmN0aW9uKGUsdCl7bGV0IG49ZS5sb25naXR1ZGUsbz1lLmxhdGl0dWRlLGE9TWF0aC5jb3Mobykscj1hKk1hdGguY29zKG4pLGk9YSpNYXRoLnNpbihuKSxmPU1hdGguc2luKG8pO3JldHVybiBnKHQpfHwodD1uZXcgcyksdC54PXIsdC55PWksdC56PWYscy5ub3JtYWxpemUodCx0KX07X3QucHJvdG90eXBlLmdlb2RldGljU3VyZmFjZU5vcm1hbD1mdW5jdGlvbihlLHQpe2lmKCFzLmVxdWFsc0Vwc2lsb24oZSxzLlpFUk8say5FUFNJTE9OMTQpKXJldHVybiBnKHQpfHwodD1uZXcgcyksdD1zLm11bHRpcGx5Q29tcG9uZW50cyhlLHRoaXMuX29uZU92ZXJSYWRpaVNxdWFyZWQsdCkscy5ub3JtYWxpemUodCx0KX07TVM9bmV3IHMsTlM9bmV3IHM7X3QucHJvdG90eXBlLmNhcnRvZ3JhcGhpY1RvQ2FydGVzaWFuPWZ1bmN0aW9uKGUsdCl7bGV0IG49TVMsbz1OUzt0aGlzLmdlb2RldGljU3VyZmFjZU5vcm1hbENhcnRvZ3JhcGhpYyhlLG4pLHMubXVsdGlwbHlDb21wb25lbnRzKHRoaXMuX3JhZGlpU3F1YXJlZCxuLG8pO2xldCBhPU1hdGguc3FydChzLmRvdChuLG8pKTtyZXR1cm4gcy5kaXZpZGVCeVNjYWxhcihvLGEsbykscy5tdWx0aXBseUJ5U2NhbGFyKG4sZS5oZWlnaHQsbiksZyh0KXx8KHQ9bmV3IHMpLHMuYWRkKG8sbix0KX07X3QucHJvdG90eXBlLmNhcnRvZ3JhcGhpY0FycmF5VG9DYXJ0ZXNpYW5BcnJheT1mdW5jdGlvbihlLHQpe2xldCBuPWUubGVuZ3RoO2codCk/dC5sZW5ndGg9bjp0PW5ldyBBcnJheShuKTtmb3IobGV0IG89MDtvPG47bysrKXRbb109dGhpcy5jYXJ0b2dyYXBoaWNUb0NhcnRlc2lhbihlW29dLHRbb10pO3JldHVybiB0fTtJUz1uZXcgcyxQUz1uZXcgcyxrUz1uZXcgcztfdC5wcm90b3R5cGUuY2FydGVzaWFuVG9DYXJ0b2dyYXBoaWM9ZnVuY3Rpb24oZSx0KXtsZXQgbj10aGlzLnNjYWxlVG9HZW9kZXRpY1N1cmZhY2UoZSxQUyk7aWYoIWcobikpcmV0dXJuO2xldCBvPXRoaXMuZ2VvZGV0aWNTdXJmYWNlTm9ybWFsKG4sSVMpLGE9cy5zdWJ0cmFjdChlLG4sa1MpLHI9TWF0aC5hdGFuMihvLnksby54KSxpPU1hdGguYXNpbihvLnopLGY9ay5zaWduKHMuZG90KGEsZSkpKnMubWFnbml0dWRlKGEpO3JldHVybiBnKHQpPyh0LmxvbmdpdHVkZT1yLHQubGF0aXR1ZGU9aSx0LmhlaWdodD1mLHQpOm5ldyByZShyLGksZil9O190LnByb3RvdHlwZS5jYXJ0ZXNpYW5BcnJheVRvQ2FydG9ncmFwaGljQXJyYXk9ZnVuY3Rpb24oZSx0KXtsZXQgbj1lLmxlbmd0aDtnKHQpP3QubGVuZ3RoPW46dD1uZXcgQXJyYXkobik7Zm9yKGxldCBvPTA7bzxuOysrbyl0W29dPXRoaXMuY2FydGVzaWFuVG9DYXJ0b2dyYXBoaWMoZVtvXSx0W29dKTtyZXR1cm4gdH07X3QucHJvdG90eXBlLnNjYWxlVG9HZW9kZXRpY1N1cmZhY2U9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gSnUoZSx0aGlzLl9vbmVPdmVyUmFkaWksdGhpcy5fb25lT3ZlclJhZGlpU3F1YXJlZCx0aGlzLl9jZW50ZXJUb2xlcmFuY2VTcXVhcmVkLHQpfTtfdC5wcm90b3R5cGUuc2NhbGVUb0dlb2NlbnRyaWNTdXJmYWNlPWZ1bmN0aW9uKGUsdCl7Zyh0KXx8KHQ9bmV3IHMpO2xldCBuPWUueCxvPWUueSxhPWUueixyPXRoaXMuX29uZU92ZXJSYWRpaVNxdWFyZWQsaT0xL01hdGguc3FydChuKm4qci54K28qbypyLnkrYSphKnIueik7cmV0dXJuIHMubXVsdGlwbHlCeVNjYWxhcihlLGksdCl9O190LnByb3RvdHlwZS50cmFuc2Zvcm1Qb3NpdGlvblRvU2NhbGVkU3BhY2U9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZyh0KXx8KHQ9bmV3IHMpLHMubXVsdGlwbHlDb21wb25lbnRzKGUsdGhpcy5fb25lT3ZlclJhZGlpLHQpfTtfdC5wcm90b3R5cGUudHJhbnNmb3JtUG9zaXRpb25Gcm9tU2NhbGVkU3BhY2U9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZyh0KXx8KHQ9bmV3IHMpLHMubXVsdGlwbHlDb21wb25lbnRzKGUsdGhpcy5fcmFkaWksdCl9O190LnByb3RvdHlwZS5lcXVhbHM9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfHxnKGUpJiZzLmVxdWFscyh0aGlzLl9yYWRpaSxlLl9yYWRpaSl9O190LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9yYWRpaS50b1N0cmluZygpfTtfdC5wcm90b3R5cGUuZ2V0U3VyZmFjZU5vcm1hbEludGVyc2VjdGlvbldpdGhaQXhpcz1mdW5jdGlvbihlLHQsbil7dD10Pz8wO2xldCBvPXRoaXMuX3NxdWFyZWRYT3ZlclNxdWFyZWRaO2lmKGcobil8fChuPW5ldyBzKSxuLng9MCxuLnk9MCxuLno9ZS56KigxLW8pLCEoTWF0aC5hYnMobi56KT49dGhpcy5fcmFkaWkuei10KSlyZXR1cm4gbn07dlM9bmV3IHM7X3QucHJvdG90eXBlLmdldExvY2FsQ3VydmF0dXJlPWZ1bmN0aW9uKGUsdCl7Zyh0KXx8KHQ9bmV3IFkpO2xldCBuPXRoaXMuZ2V0U3VyZmFjZU5vcm1hbEludGVyc2VjdGlvbldpdGhaQXhpcyhlLDAsdlMpLG89cy5kaXN0YW5jZShlLG4pLGE9dGhpcy5taW5pbXVtUmFkaXVzKm8vdGhpcy5tYXhpbXVtUmFkaXVzKioyLHI9byphKioyO3JldHVybiBZLmZyb21FbGVtZW50cygxL28sMS9yLHQpfTtGUz1bLjE0ODg3NDMzODk4MTYzLC40MzMzOTUzOTQxMjkyNSwuNjc5NDA5NTY4Mjk5MDIsLjg2NTA2MzM2NjY4ODk4LC45NzM5MDY1Mjg1MTcxNywwXSxEUz1bLjI5NTUyNDIyNDcxNDc1LC4yNjkyNjY3MTkzMDk5OSwuMjE5MDg2MzYyNTE1OTgsLjE0OTQ1MTM0OTE1MDU4LC4wNjY2NzEzNDQzMDg2ODQsMF07X3QucHJvdG90eXBlLnN1cmZhY2VBcmVhPWZ1bmN0aW9uKGUpe2xldCB0PWUud2VzdCxuPWUuZWFzdCxvPWUuc291dGgsYT1lLm5vcnRoO2Zvcig7bjx0OyluKz1rLlRXT19QSTtsZXQgcj10aGlzLl9yYWRpaVNxdWFyZWQsaT1yLngsZj1yLnksZD1yLnosYz1pKmY7cmV0dXJuIHAxKG8sYSxmdW5jdGlvbih1KXtsZXQgbD1NYXRoLmNvcyh1KSxoPU1hdGguc2luKHUpO3JldHVybiBNYXRoLmNvcyh1KSpwMSh0LG4sZnVuY3Rpb24obSl7bGV0IGI9TWF0aC5jb3MobSkscD1NYXRoLnNpbihtKTtyZXR1cm4gTWF0aC5zcXJ0KGMqaCpoK2QqKGYqYipiK2kqcCpwKSpsKmwpfSl9KX07cT1fdH0pO2Z1bmN0aW9uIFF1KGUpe3RoaXMuX2VsbGlwc29pZD1lPz9xLmRlZmF1bHQsdGhpcy5fc2VtaW1ham9yQXhpcz10aGlzLl9lbGxpcHNvaWQubWF4aW11bVJhZGl1cyx0aGlzLl9vbmVPdmVyU2VtaW1ham9yQXhpcz0xL3RoaXMuX3NlbWltYWpvckF4aXN9dmFyIGlvLGtyPVgoKCk9PntJZSgpO1R0KCk7c2UoKTtXZSgpO09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFF1LnByb3RvdHlwZSx7ZWxsaXBzb2lkOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZWxsaXBzb2lkfX19KTtRdS5wcm90b3R5cGUucHJvamVjdD1mdW5jdGlvbihlLHQpe2xldCBuPXRoaXMuX3NlbWltYWpvckF4aXMsbz1lLmxvbmdpdHVkZSpuLGE9ZS5sYXRpdHVkZSpuLHI9ZS5oZWlnaHQ7cmV0dXJuIGcodCk/KHQueD1vLHQueT1hLHQuej1yLHQpOm5ldyBzKG8sYSxyKX07UXUucHJvdG90eXBlLnVucHJvamVjdD1mdW5jdGlvbihlLHQpe2xldCBuPXRoaXMuX29uZU92ZXJTZW1pbWFqb3JBeGlzLG89ZS54Km4sYT1lLnkqbixyPWUuejtyZXR1cm4gZyh0KT8odC5sb25naXR1ZGU9byx0LmxhdGl0dWRlPWEsdC5oZWlnaHQ9cix0KTpuZXcgcmUobyxhLHIpfTtpbz1RdX0pO3ZhciBCUyxTbixaaT1YKCgpPT57QlM9e09VVFNJREU6LTEsSU5URVJTRUNUSU5HOjAsSU5TSURFOjF9LFNuPU9iamVjdC5mcmVlemUoQlMpfSk7ZnVuY3Rpb24gVVMoZSx0KXt0aGlzLnN0YXJ0PWU/PzAsdGhpcy5zdG9wPXQ/PzB9dmFyIFRvLGxmPVgoKCk9PntUbz1VU30pO2Z1bmN0aW9uIFRlKGUsdCxuLG8sYSxyLGksZixkKXt0aGlzWzBdPWU/PzAsdGhpc1sxXT1vPz8wLHRoaXNbMl09aT8/MCx0aGlzWzNdPXQ/PzAsdGhpc1s0XT1hPz8wLHRoaXNbNV09Zj8/MCx0aGlzWzZdPW4/PzAsdGhpc1s3XT1yPz8wLHRoaXNbOF09ZD8/MH1mdW5jdGlvbiBWUyhlKXtsZXQgdD0wO2ZvcihsZXQgbj0wO248OTsrK24pe2xldCBvPWVbbl07dCs9bypvfXJldHVybiBNYXRoLnNxcnQodCl9ZnVuY3Rpb24gSFMoZSl7bGV0IHQ9MDtmb3IobGV0IG49MDtuPDM7KytuKXtsZXQgbz1lW1RlLmdldEVsZW1lbnRJbmRleChIbVtuXSxWbVtuXSldO3QrPTIqbypvfXJldHVybiBNYXRoLnNxcnQodCl9ZnVuY3Rpb24gS1MoZSx0KXtsZXQgbj1rLkVQU0lMT04xNSxvPTAsYT0xO2ZvcihsZXQgYz0wO2M8MzsrK2Mpe2xldCB1PU1hdGguYWJzKGVbVGUuZ2V0RWxlbWVudEluZGV4KEhtW2NdLFZtW2NdKV0pO3U+byYmKGE9YyxvPXUpfWxldCByPTEsaT0wLGY9Vm1bYV0sZD1IbVthXTtpZihNYXRoLmFicyhlW1RlLmdldEVsZW1lbnRJbmRleChkLGYpXSk+bil7bGV0IGM9ZVtUZS5nZXRFbGVtZW50SW5kZXgoZCxkKV0sdT1lW1RlLmdldEVsZW1lbnRJbmRleChmLGYpXSxsPWVbVGUuZ2V0RWxlbWVudEluZGV4KGQsZildLGg9KGMtdSkvMi9sLG07aDwwP209LTEvKC1oK01hdGguc3FydCgxK2gqaCkpOm09MS8oaCtNYXRoLnNxcnQoMStoKmgpKSxyPTEvTWF0aC5zcXJ0KDErbSptKSxpPW0qcn1yZXR1cm4gdD1UZS5jbG9uZShUZS5JREVOVElUWSx0KSx0W1RlLmdldEVsZW1lbnRJbmRleChmLGYpXT10W1RlLmdldEVsZW1lbnRJbmRleChkLGQpXT1yLHRbVGUuZ2V0RWxlbWVudEluZGV4KGQsZildPWksdFtUZS5nZXRFbGVtZW50SW5kZXgoZixkKV09LWksdH12YXIgTFMsalMsR20sXzEselMsR1MsVm0sSG0sJHUseTEscVMsSixEbj1YKCgpPT57SWUoKTtzZSgpO0dlKCk7VGUucGFja2VkTGVuZ3RoPTk7VGUucGFjaz1mdW5jdGlvbihlLHQsbil7cmV0dXJuIG49bj8/MCx0W24rK109ZVswXSx0W24rK109ZVsxXSx0W24rK109ZVsyXSx0W24rK109ZVszXSx0W24rK109ZVs0XSx0W24rK109ZVs1XSx0W24rK109ZVs2XSx0W24rK109ZVs3XSx0W24rK109ZVs4XSx0fTtUZS51bnBhY2s9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB0PXQ/PzAsZyhuKXx8KG49bmV3IFRlKSxuWzBdPWVbdCsrXSxuWzFdPWVbdCsrXSxuWzJdPWVbdCsrXSxuWzNdPWVbdCsrXSxuWzRdPWVbdCsrXSxuWzVdPWVbdCsrXSxuWzZdPWVbdCsrXSxuWzddPWVbdCsrXSxuWzhdPWVbdCsrXSxufTtUZS5wYWNrQXJyYXk9ZnVuY3Rpb24oZSx0KXtsZXQgbj1lLmxlbmd0aCxvPW4qOTtnKHQpPyFBcnJheS5pc0FycmF5KHQpJiZ0Lmxlbmd0aCE9PW98fHQubGVuZ3RoIT09byYmKHQubGVuZ3RoPW8pOnQ9bmV3IEFycmF5KG8pO2ZvcihsZXQgYT0wO2E8bjsrK2EpVGUucGFjayhlW2FdLHQsYSo5KTtyZXR1cm4gdH07VGUudW5wYWNrQXJyYXk9ZnVuY3Rpb24oZSx0KXtsZXQgbj1lLmxlbmd0aDtnKHQpP3QubGVuZ3RoPW4vOTp0PW5ldyBBcnJheShuLzkpO2ZvcihsZXQgbz0wO288bjtvKz05KXtsZXQgYT1vLzk7dFthXT1UZS51bnBhY2soZSxvLHRbYV0pfXJldHVybiB0fTtUZS5jbG9uZT1mdW5jdGlvbihlLHQpe2lmKGcoZSkpcmV0dXJuIGcodCk/KHRbMF09ZVswXSx0WzFdPWVbMV0sdFsyXT1lWzJdLHRbM109ZVszXSx0WzRdPWVbNF0sdFs1XT1lWzVdLHRbNl09ZVs2XSx0WzddPWVbN10sdFs4XT1lWzhdLHQpOm5ldyBUZShlWzBdLGVbM10sZVs2XSxlWzFdLGVbNF0sZVs3XSxlWzJdLGVbNV0sZVs4XSl9O1RlLmZyb21BcnJheT1UZS51bnBhY2s7VGUuZnJvbUNvbHVtbk1ham9yQXJyYXk9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gVGUuY2xvbmUoZSx0KX07VGUuZnJvbVJvd01ham9yQXJyYXk9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZyh0KT8odFswXT1lWzBdLHRbMV09ZVszXSx0WzJdPWVbNl0sdFszXT1lWzFdLHRbNF09ZVs0XSx0WzVdPWVbN10sdFs2XT1lWzJdLHRbN109ZVs1XSx0WzhdPWVbOF0sdCk6bmV3IFRlKGVbMF0sZVsxXSxlWzJdLGVbM10sZVs0XSxlWzVdLGVbNl0sZVs3XSxlWzhdKX07VGUuZnJvbVF1YXRlcm5pb249ZnVuY3Rpb24oZSx0KXtsZXQgbj1lLngqZS54LG89ZS54KmUueSxhPWUueCplLnoscj1lLngqZS53LGk9ZS55KmUueSxmPWUueSplLnosZD1lLnkqZS53LGM9ZS56KmUueix1PWUueiplLncsbD1lLncqZS53LGg9bi1pLWMrbCxtPTIqKG8tdSksYj0yKihhK2QpLHA9Mioobyt1KSx5PS1uK2ktYytsLFQ9MiooZi1yKSxfPTIqKGEtZCksRT0yKihmK3IpLHc9LW4taStjK2w7cmV0dXJuIGcodCk/KHRbMF09aCx0WzFdPXAsdFsyXT1fLHRbM109bSx0WzRdPXksdFs1XT1FLHRbNl09Yix0WzddPVQsdFs4XT13LHQpOm5ldyBUZShoLG0sYixwLHksVCxfLEUsdyl9O1RlLmZyb21IZWFkaW5nUGl0Y2hSb2xsPWZ1bmN0aW9uKGUsdCl7bGV0IG49TWF0aC5jb3MoLWUucGl0Y2gpLG89TWF0aC5jb3MoLWUuaGVhZGluZyksYT1NYXRoLmNvcyhlLnJvbGwpLHI9TWF0aC5zaW4oLWUucGl0Y2gpLGk9TWF0aC5zaW4oLWUuaGVhZGluZyksZj1NYXRoLnNpbihlLnJvbGwpLGQ9bipvLGM9LWEqaStmKnIqbyx1PWYqaSthKnIqbyxsPW4qaSxoPWEqbytmKnIqaSxtPS1mKm8rYSpyKmksYj0tcixwPWYqbix5PWEqbjtyZXR1cm4gZyh0KT8odFswXT1kLHRbMV09bCx0WzJdPWIsdFszXT1jLHRbNF09aCx0WzVdPXAsdFs2XT11LHRbN109bSx0WzhdPXksdCk6bmV3IFRlKGQsYyx1LGwsaCxtLGIscCx5KX07VGUuZnJvbVNjYWxlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGcodCk/KHRbMF09ZS54LHRbMV09MCx0WzJdPTAsdFszXT0wLHRbNF09ZS55LHRbNV09MCx0WzZdPTAsdFs3XT0wLHRbOF09ZS56LHQpOm5ldyBUZShlLngsMCwwLDAsZS55LDAsMCwwLGUueil9O1RlLmZyb21Vbmlmb3JtU2NhbGU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZyh0KT8odFswXT1lLHRbMV09MCx0WzJdPTAsdFszXT0wLHRbNF09ZSx0WzVdPTAsdFs2XT0wLHRbN109MCx0WzhdPWUsdCk6bmV3IFRlKGUsMCwwLDAsZSwwLDAsMCxlKX07VGUuZnJvbUNyb3NzUHJvZHVjdD1mdW5jdGlvbihlLHQpe3JldHVybiBnKHQpPyh0WzBdPTAsdFsxXT1lLnosdFsyXT0tZS55LHRbM109LWUueix0WzRdPTAsdFs1XT1lLngsdFs2XT1lLnksdFs3XT0tZS54LHRbOF09MCx0KTpuZXcgVGUoMCwtZS56LGUueSxlLnosMCwtZS54LC1lLnksZS54LDApfTtUZS5mcm9tUm90YXRpb25YPWZ1bmN0aW9uKGUsdCl7bGV0IG49TWF0aC5jb3MoZSksbz1NYXRoLnNpbihlKTtyZXR1cm4gZyh0KT8odFswXT0xLHRbMV09MCx0WzJdPTAsdFszXT0wLHRbNF09bix0WzVdPW8sdFs2XT0wLHRbN109LW8sdFs4XT1uLHQpOm5ldyBUZSgxLDAsMCwwLG4sLW8sMCxvLG4pfTtUZS5mcm9tUm90YXRpb25ZPWZ1bmN0aW9uKGUsdCl7bGV0IG49TWF0aC5jb3MoZSksbz1NYXRoLnNpbihlKTtyZXR1cm4gZyh0KT8odFswXT1uLHRbMV09MCx0WzJdPS1vLHRbM109MCx0WzRdPTEsdFs1XT0wLHRbNl09byx0WzddPTAsdFs4XT1uLHQpOm5ldyBUZShuLDAsbywwLDEsMCwtbywwLG4pfTtUZS5mcm9tUm90YXRpb25aPWZ1bmN0aW9uKGUsdCl7bGV0IG49TWF0aC5jb3MoZSksbz1NYXRoLnNpbihlKTtyZXR1cm4gZyh0KT8odFswXT1uLHRbMV09byx0WzJdPTAsdFszXT0tbyx0WzRdPW4sdFs1XT0wLHRbNl09MCx0WzddPTAsdFs4XT0xLHQpOm5ldyBUZShuLC1vLDAsbyxuLDAsMCwwLDEpfTtUZS50b0FycmF5PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGcodCk/KHRbMF09ZVswXSx0WzFdPWVbMV0sdFsyXT1lWzJdLHRbM109ZVszXSx0WzRdPWVbNF0sdFs1XT1lWzVdLHRbNl09ZVs2XSx0WzddPWVbN10sdFs4XT1lWzhdLHQpOltlWzBdLGVbMV0sZVsyXSxlWzNdLGVbNF0sZVs1XSxlWzZdLGVbN10sZVs4XV19O1RlLmdldEVsZW1lbnRJbmRleD1mdW5jdGlvbihlLHQpe3JldHVybiBlKjMrdH07VGUuZ2V0Q29sdW1uPWZ1bmN0aW9uKGUsdCxuKXtsZXQgbz10KjMsYT1lW29dLHI9ZVtvKzFdLGk9ZVtvKzJdO3JldHVybiBuLng9YSxuLnk9cixuLno9aSxufTtUZS5zZXRDb2x1bW49ZnVuY3Rpb24oZSx0LG4sbyl7bz1UZS5jbG9uZShlLG8pO2xldCBhPXQqMztyZXR1cm4gb1thXT1uLngsb1thKzFdPW4ueSxvW2ErMl09bi56LG99O1RlLmdldFJvdz1mdW5jdGlvbihlLHQsbil7bGV0IG89ZVt0XSxhPWVbdCszXSxyPWVbdCs2XTtyZXR1cm4gbi54PW8sbi55PWEsbi56PXIsbn07VGUuc2V0Um93PWZ1bmN0aW9uKGUsdCxuLG8pe3JldHVybiBvPVRlLmNsb25lKGUsbyksb1t0XT1uLngsb1t0KzNdPW4ueSxvW3QrNl09bi56LG99O0xTPW5ldyBzO1RlLnNldFNjYWxlPWZ1bmN0aW9uKGUsdCxuKXtsZXQgbz1UZS5nZXRTY2FsZShlLExTKSxhPXQueC9vLngscj10Lnkvby55LGk9dC56L28uejtyZXR1cm4gblswXT1lWzBdKmEsblsxXT1lWzFdKmEsblsyXT1lWzJdKmEsblszXT1lWzNdKnIsbls0XT1lWzRdKnIsbls1XT1lWzVdKnIsbls2XT1lWzZdKmksbls3XT1lWzddKmksbls4XT1lWzhdKmksbn07alM9bmV3IHM7VGUuc2V0VW5pZm9ybVNjYWxlPWZ1bmN0aW9uKGUsdCxuKXtsZXQgbz1UZS5nZXRTY2FsZShlLGpTKSxhPXQvby54LHI9dC9vLnksaT10L28uejtyZXR1cm4gblswXT1lWzBdKmEsblsxXT1lWzFdKmEsblsyXT1lWzJdKmEsblszXT1lWzNdKnIsbls0XT1lWzRdKnIsbls1XT1lWzVdKnIsbls2XT1lWzZdKmksbls3XT1lWzddKmksbls4XT1lWzhdKmksbn07R209bmV3IHM7VGUuZ2V0U2NhbGU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdC54PXMubWFnbml0dWRlKHMuZnJvbUVsZW1lbnRzKGVbMF0sZVsxXSxlWzJdLEdtKSksdC55PXMubWFnbml0dWRlKHMuZnJvbUVsZW1lbnRzKGVbM10sZVs0XSxlWzVdLEdtKSksdC56PXMubWFnbml0dWRlKHMuZnJvbUVsZW1lbnRzKGVbNl0sZVs3XSxlWzhdLEdtKSksdH07XzE9bmV3IHM7VGUuZ2V0TWF4aW11bVNjYWxlPWZ1bmN0aW9uKGUpe3JldHVybiBUZS5nZXRTY2FsZShlLF8xKSxzLm1heGltdW1Db21wb25lbnQoXzEpfTt6Uz1uZXcgcztUZS5zZXRSb3RhdGlvbj1mdW5jdGlvbihlLHQsbil7bGV0IG89VGUuZ2V0U2NhbGUoZSx6Uyk7cmV0dXJuIG5bMF09dFswXSpvLngsblsxXT10WzFdKm8ueCxuWzJdPXRbMl0qby54LG5bM109dFszXSpvLnksbls0XT10WzRdKm8ueSxuWzVdPXRbNV0qby55LG5bNl09dFs2XSpvLnosbls3XT10WzddKm8ueixuWzhdPXRbOF0qby56LG59O0dTPW5ldyBzO1RlLmdldFJvdGF0aW9uPWZ1bmN0aW9uKGUsdCl7bGV0IG49VGUuZ2V0U2NhbGUoZSxHUyk7cmV0dXJuIHRbMF09ZVswXS9uLngsdFsxXT1lWzFdL24ueCx0WzJdPWVbMl0vbi54LHRbM109ZVszXS9uLnksdFs0XT1lWzRdL24ueSx0WzVdPWVbNV0vbi55LHRbNl09ZVs2XS9uLnosdFs3XT1lWzddL24ueix0WzhdPWVbOF0vbi56LHR9O1RlLm11bHRpcGx5PWZ1bmN0aW9uKGUsdCxuKXtsZXQgbz1lWzBdKnRbMF0rZVszXSp0WzFdK2VbNl0qdFsyXSxhPWVbMV0qdFswXStlWzRdKnRbMV0rZVs3XSp0WzJdLHI9ZVsyXSp0WzBdK2VbNV0qdFsxXStlWzhdKnRbMl0saT1lWzBdKnRbM10rZVszXSp0WzRdK2VbNl0qdFs1XSxmPWVbMV0qdFszXStlWzRdKnRbNF0rZVs3XSp0WzVdLGQ9ZVsyXSp0WzNdK2VbNV0qdFs0XStlWzhdKnRbNV0sYz1lWzBdKnRbNl0rZVszXSp0WzddK2VbNl0qdFs4XSx1PWVbMV0qdFs2XStlWzRdKnRbN10rZVs3XSp0WzhdLGw9ZVsyXSp0WzZdK2VbNV0qdFs3XStlWzhdKnRbOF07cmV0dXJuIG5bMF09byxuWzFdPWEsblsyXT1yLG5bM109aSxuWzRdPWYsbls1XT1kLG5bNl09YyxuWzddPXUsbls4XT1sLG59O1RlLmFkZD1mdW5jdGlvbihlLHQsbil7cmV0dXJuIG5bMF09ZVswXSt0WzBdLG5bMV09ZVsxXSt0WzFdLG5bMl09ZVsyXSt0WzJdLG5bM109ZVszXSt0WzNdLG5bNF09ZVs0XSt0WzRdLG5bNV09ZVs1XSt0WzVdLG5bNl09ZVs2XSt0WzZdLG5bN109ZVs3XSt0WzddLG5bOF09ZVs4XSt0WzhdLG59O1RlLnN1YnRyYWN0PWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gblswXT1lWzBdLXRbMF0sblsxXT1lWzFdLXRbMV0sblsyXT1lWzJdLXRbMl0sblszXT1lWzNdLXRbM10sbls0XT1lWzRdLXRbNF0sbls1XT1lWzVdLXRbNV0sbls2XT1lWzZdLXRbNl0sbls3XT1lWzddLXRbN10sbls4XT1lWzhdLXRbOF0sbn07VGUubXVsdGlwbHlCeVZlY3Rvcj1mdW5jdGlvbihlLHQsbil7bGV0IG89dC54LGE9dC55LHI9dC56LGk9ZVswXSpvK2VbM10qYStlWzZdKnIsZj1lWzFdKm8rZVs0XSphK2VbN10qcixkPWVbMl0qbytlWzVdKmErZVs4XSpyO3JldHVybiBuLng9aSxuLnk9ZixuLno9ZCxufTtUZS5tdWx0aXBseUJ5U2NhbGFyPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gblswXT1lWzBdKnQsblsxXT1lWzFdKnQsblsyXT1lWzJdKnQsblszXT1lWzNdKnQsbls0XT1lWzRdKnQsbls1XT1lWzVdKnQsbls2XT1lWzZdKnQsbls3XT1lWzddKnQsbls4XT1lWzhdKnQsbn07VGUubXVsdGlwbHlCeVNjYWxlPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gblswXT1lWzBdKnQueCxuWzFdPWVbMV0qdC54LG5bMl09ZVsyXSp0LngsblszXT1lWzNdKnQueSxuWzRdPWVbNF0qdC55LG5bNV09ZVs1XSp0Lnksbls2XT1lWzZdKnQueixuWzddPWVbN10qdC56LG5bOF09ZVs4XSp0Lnosbn07VGUubXVsdGlwbHlCeVVuaWZvcm1TY2FsZT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIG5bMF09ZVswXSp0LG5bMV09ZVsxXSp0LG5bMl09ZVsyXSp0LG5bM109ZVszXSp0LG5bNF09ZVs0XSp0LG5bNV09ZVs1XSp0LG5bNl09ZVs2XSp0LG5bN109ZVs3XSp0LG5bOF09ZVs4XSp0LG59O1RlLm5lZ2F0ZT1mdW5jdGlvbihlLHQpe3JldHVybiB0WzBdPS1lWzBdLHRbMV09LWVbMV0sdFsyXT0tZVsyXSx0WzNdPS1lWzNdLHRbNF09LWVbNF0sdFs1XT0tZVs1XSx0WzZdPS1lWzZdLHRbN109LWVbN10sdFs4XT0tZVs4XSx0fTtUZS50cmFuc3Bvc2U9ZnVuY3Rpb24oZSx0KXtsZXQgbj1lWzBdLG89ZVszXSxhPWVbNl0scj1lWzFdLGk9ZVs0XSxmPWVbN10sZD1lWzJdLGM9ZVs1XSx1PWVbOF07cmV0dXJuIHRbMF09bix0WzFdPW8sdFsyXT1hLHRbM109cix0WzRdPWksdFs1XT1mLHRbNl09ZCx0WzddPWMsdFs4XT11LHR9O1ZtPVsxLDAsMF0sSG09WzIsMiwxXTskdT1uZXcgVGUseTE9bmV3IFRlO1RlLmNvbXB1dGVFaWdlbkRlY29tcG9zaXRpb249ZnVuY3Rpb24oZSx0KXtsZXQgbj1rLkVQU0lMT04yMCxvPTEwLGE9MCxyPTA7Zyh0KXx8KHQ9e30pO2xldCBpPXQudW5pdGFyeT1UZS5jbG9uZShUZS5JREVOVElUWSx0LnVuaXRhcnkpLGY9dC5kaWFnb25hbD1UZS5jbG9uZShlLHQuZGlhZ29uYWwpLGQ9bipWUyhmKTtmb3IoO3I8byYmSFMoZik+ZDspS1MoZiwkdSksVGUudHJhbnNwb3NlKCR1LHkxKSxUZS5tdWx0aXBseShmLCR1LGYpLFRlLm11bHRpcGx5KHkxLGYsZiksVGUubXVsdGlwbHkoaSwkdSxpKSwrK2E+MiYmKCsrcixhPTApO3JldHVybiB0fTtUZS5hYnM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdFswXT1NYXRoLmFicyhlWzBdKSx0WzFdPU1hdGguYWJzKGVbMV0pLHRbMl09TWF0aC5hYnMoZVsyXSksdFszXT1NYXRoLmFicyhlWzNdKSx0WzRdPU1hdGguYWJzKGVbNF0pLHRbNV09TWF0aC5hYnMoZVs1XSksdFs2XT1NYXRoLmFicyhlWzZdKSx0WzddPU1hdGguYWJzKGVbN10pLHRbOF09TWF0aC5hYnMoZVs4XSksdH07VGUuZGV0ZXJtaW5hbnQ9ZnVuY3Rpb24oZSl7bGV0IHQ9ZVswXSxuPWVbM10sbz1lWzZdLGE9ZVsxXSxyPWVbNF0saT1lWzddLGY9ZVsyXSxkPWVbNV0sYz1lWzhdO3JldHVybiB0KihyKmMtZCppKSthKihkKm8tbipjKStmKihuKmktcipvKX07VGUuaW52ZXJzZT1mdW5jdGlvbihlLHQpe2xldCBuPWVbMF0sbz1lWzFdLGE9ZVsyXSxyPWVbM10saT1lWzRdLGY9ZVs1XSxkPWVbNl0sYz1lWzddLHU9ZVs4XSxsPVRlLmRldGVybWluYW50KGUpO3RbMF09aSp1LWMqZix0WzFdPWMqYS1vKnUsdFsyXT1vKmYtaSphLHRbM109ZCpmLXIqdSx0WzRdPW4qdS1kKmEsdFs1XT1yKmEtbipmLHRbNl09cipjLWQqaSx0WzddPWQqby1uKmMsdFs4XT1uKmktcipvO2xldCBoPTEvbDtyZXR1cm4gVGUubXVsdGlwbHlCeVNjYWxhcih0LGgsdCl9O3FTPW5ldyBUZTtUZS5pbnZlcnNlVHJhbnNwb3NlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIFRlLmludmVyc2UoVGUudHJhbnNwb3NlKGUscVMpLHQpfTtUZS5lcXVhbHM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT09PXR8fGcoZSkmJmcodCkmJmVbMF09PT10WzBdJiZlWzFdPT09dFsxXSYmZVsyXT09PXRbMl0mJmVbM109PT10WzNdJiZlWzRdPT09dFs0XSYmZVs1XT09PXRbNV0mJmVbNl09PT10WzZdJiZlWzddPT09dFs3XSYmZVs4XT09PXRbOF19O1RlLmVxdWFsc0Vwc2lsb249ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBuPW4/PzAsZT09PXR8fGcoZSkmJmcodCkmJk1hdGguYWJzKGVbMF0tdFswXSk8PW4mJk1hdGguYWJzKGVbMV0tdFsxXSk8PW4mJk1hdGguYWJzKGVbMl0tdFsyXSk8PW4mJk1hdGguYWJzKGVbM10tdFszXSk8PW4mJk1hdGguYWJzKGVbNF0tdFs0XSk8PW4mJk1hdGguYWJzKGVbNV0tdFs1XSk8PW4mJk1hdGguYWJzKGVbNl0tdFs2XSk8PW4mJk1hdGguYWJzKGVbN10tdFs3XSk8PW4mJk1hdGguYWJzKGVbOF0tdFs4XSk8PW59O1RlLklERU5USVRZPU9iamVjdC5mcmVlemUobmV3IFRlKDEsMCwwLDAsMSwwLDAsMCwxKSk7VGUuWkVSTz1PYmplY3QuZnJlZXplKG5ldyBUZSgwLDAsMCwwLDAsMCwwLDAsMCkpO1RlLkNPTFVNTjBST1cwPTA7VGUuQ09MVU1OMFJPVzE9MTtUZS5DT0xVTU4wUk9XMj0yO1RlLkNPTFVNTjFST1cwPTM7VGUuQ09MVU1OMVJPVzE9NDtUZS5DT0xVTU4xUk9XMj01O1RlLkNPTFVNTjJST1cwPTY7VGUuQ09MVU1OMlJPVzE9NztUZS5DT0xVTU4yUk9XMj04O09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFRlLnByb3RvdHlwZSx7bGVuZ3RoOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gVGUucGFja2VkTGVuZ3RofX19KTtUZS5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oZSl7cmV0dXJuIFRlLmNsb25lKHRoaXMsZSl9O1RlLnByb3RvdHlwZS5lcXVhbHM9ZnVuY3Rpb24oZSl7cmV0dXJuIFRlLmVxdWFscyh0aGlzLGUpfTtUZS5lcXVhbHNBcnJheT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGVbMF09PT10W25dJiZlWzFdPT09dFtuKzFdJiZlWzJdPT09dFtuKzJdJiZlWzNdPT09dFtuKzNdJiZlWzRdPT09dFtuKzRdJiZlWzVdPT09dFtuKzVdJiZlWzZdPT09dFtuKzZdJiZlWzddPT09dFtuKzddJiZlWzhdPT09dFtuKzhdfTtUZS5wcm90b3R5cGUuZXF1YWxzRXBzaWxvbj1mdW5jdGlvbihlLHQpe3JldHVybiBUZS5lcXVhbHNFcHNpbG9uKHRoaXMsZSx0KX07VGUucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuYCgke3RoaXNbMF19LCAke3RoaXNbM119LCAke3RoaXNbNl19KQooJHt0aGlzWzFdfSwgJHt0aGlzWzRdfSwgJHt0aGlzWzddfSkKKCR7dGhpc1syXX0sICR7dGhpc1s1XX0sICR7dGhpc1s4XX0pYH07Sj1UZX0pO3ZhciBZbixlbCxBMSxXUyxLbSxObyxYUyxZUyx3MSxkdCxnYT1YKCgpPT57c2UoKTtHZSgpO1luPWNsYXNzIGV7Y29uc3RydWN0b3IodCxuLG8sYSl7dGhpcy54PXQ/PzAsdGhpcy55PW4/PzAsdGhpcy56PW8/PzAsdGhpcy53PWE/PzB9c3RhdGljIGZyb21FbGVtZW50cyh0LG4sbyxhLHIpe3JldHVybiBnKHIpPyhyLng9dCxyLnk9bixyLno9byxyLnc9YSxyKTpuZXcgZSh0LG4sbyxhKX1zdGF0aWMgZnJvbUNvbG9yKHQsbil7cmV0dXJuIGcobik/KG4ueD10LnJlZCxuLnk9dC5ncmVlbixuLno9dC5ibHVlLG4udz10LmFscGhhLG4pOm5ldyBlKHQucmVkLHQuZ3JlZW4sdC5ibHVlLHQuYWxwaGEpfXN0YXRpYyBjbG9uZSh0LG4pe2lmKGcodCkpcmV0dXJuIGcobik/KG4ueD10Lngsbi55PXQueSxuLno9dC56LG4udz10Lncsbik6bmV3IGUodC54LHQueSx0LnosdC53KX1zdGF0aWMgcGFjayh0LG4sbyl7cmV0dXJuIG89bz8/MCxuW28rK109dC54LG5bbysrXT10LnksbltvKytdPXQueixuW29dPXQudyxufXN0YXRpYyB1bnBhY2sodCxuLG8pe3JldHVybiBuPW4/PzAsZyhvKXx8KG89bmV3IGUpLG8ueD10W24rK10sby55PXRbbisrXSxvLno9dFtuKytdLG8udz10W25dLG99c3RhdGljIHBhY2tBcnJheSh0LG4pe2xldCBvPXQubGVuZ3RoLGE9byo0O2cobik/IUFycmF5LmlzQXJyYXkobikmJm4ubGVuZ3RoIT09YXx8bi5sZW5ndGghPT1hJiYobi5sZW5ndGg9YSk6bj1uZXcgQXJyYXkoYSk7Zm9yKGxldCByPTA7cjxvOysrcillLnBhY2sodFtyXSxuLHIqNCk7cmV0dXJuIG59c3RhdGljIHVucGFja0FycmF5KHQsbil7bGV0IG89dC5sZW5ndGg7ZyhuKT9uLmxlbmd0aD1vLzQ6bj1uZXcgQXJyYXkoby80KTtmb3IobGV0IGE9MDthPG87YSs9NCl7bGV0IHI9YS80O25bcl09ZS51bnBhY2sodCxhLG5bcl0pfXJldHVybiBufXN0YXRpYyBtYXhpbXVtQ29tcG9uZW50KHQpe3JldHVybiBNYXRoLm1heCh0LngsdC55LHQueix0LncpfXN0YXRpYyBtaW5pbXVtQ29tcG9uZW50KHQpe3JldHVybiBNYXRoLm1pbih0LngsdC55LHQueix0LncpfXN0YXRpYyBtaW5pbXVtQnlDb21wb25lbnQodCxuLG8pe3JldHVybiBvLng9TWF0aC5taW4odC54LG4ueCksby55PU1hdGgubWluKHQueSxuLnkpLG8uej1NYXRoLm1pbih0Lnosbi56KSxvLnc9TWF0aC5taW4odC53LG4udyksb31zdGF0aWMgbWF4aW11bUJ5Q29tcG9uZW50KHQsbixvKXtyZXR1cm4gby54PU1hdGgubWF4KHQueCxuLngpLG8ueT1NYXRoLm1heCh0Lnksbi55KSxvLno9TWF0aC5tYXgodC56LG4ueiksby53PU1hdGgubWF4KHQudyxuLncpLG99c3RhdGljIGNsYW1wKHQsbixvLGEpe2xldCByPWsuY2xhbXAodC54LG4ueCxvLngpLGk9ay5jbGFtcCh0Lnksbi55LG8ueSksZj1rLmNsYW1wKHQueixuLnosby56KSxkPWsuY2xhbXAodC53LG4udyxvLncpO3JldHVybiBhLng9cixhLnk9aSxhLno9ZixhLnc9ZCxhfXN0YXRpYyBtYWduaXR1ZGVTcXVhcmVkKHQpe3JldHVybiB0LngqdC54K3QueSp0LnkrdC56KnQueit0LncqdC53fXN0YXRpYyBtYWduaXR1ZGUodCl7cmV0dXJuIE1hdGguc3FydChlLm1hZ25pdHVkZVNxdWFyZWQodCkpfXN0YXRpYyBkaXN0YW5jZSh0LG4pe3JldHVybiBlLnN1YnRyYWN0KHQsbixlbCksZS5tYWduaXR1ZGUoZWwpfXN0YXRpYyBkaXN0YW5jZVNxdWFyZWQodCxuKXtyZXR1cm4gZS5zdWJ0cmFjdCh0LG4sZWwpLGUubWFnbml0dWRlU3F1YXJlZChlbCl9c3RhdGljIG5vcm1hbGl6ZSh0LG4pe2xldCBvPWUubWFnbml0dWRlKHQpO3JldHVybiBuLng9dC54L28sbi55PXQueS9vLG4uej10LnovbyxuLnc9dC53L28sbn1zdGF0aWMgZG90KHQsbil7cmV0dXJuIHQueCpuLngrdC55Km4ueSt0Lnoqbi56K3QudypuLnd9c3RhdGljIG11bHRpcGx5Q29tcG9uZW50cyh0LG4sbyl7cmV0dXJuIG8ueD10Lngqbi54LG8ueT10Lnkqbi55LG8uej10Lnoqbi56LG8udz10Lncqbi53LG99c3RhdGljIGRpdmlkZUNvbXBvbmVudHModCxuLG8pe3JldHVybiBvLng9dC54L24ueCxvLnk9dC55L24ueSxvLno9dC56L24ueixvLnc9dC53L24udyxvfXN0YXRpYyBhZGQodCxuLG8pe3JldHVybiBvLng9dC54K24ueCxvLnk9dC55K24ueSxvLno9dC56K24ueixvLnc9dC53K24udyxvfXN0YXRpYyBzdWJ0cmFjdCh0LG4sbyl7cmV0dXJuIG8ueD10Lngtbi54LG8ueT10Lnktbi55LG8uej10Lnotbi56LG8udz10Lnctbi53LG99c3RhdGljIG11bHRpcGx5QnlTY2FsYXIodCxuLG8pe3JldHVybiBvLng9dC54Km4sby55PXQueSpuLG8uej10LnoqbixvLnc9dC53Km4sb31zdGF0aWMgZGl2aWRlQnlTY2FsYXIodCxuLG8pe3JldHVybiBvLng9dC54L24sby55PXQueS9uLG8uej10LnovbixvLnc9dC53L24sb31zdGF0aWMgbmVnYXRlKHQsbil7cmV0dXJuIG4ueD0tdC54LG4ueT0tdC55LG4uej0tdC56LG4udz0tdC53LG59c3RhdGljIGFicyh0LG4pe3JldHVybiBuLng9TWF0aC5hYnModC54KSxuLnk9TWF0aC5hYnModC55KSxuLno9TWF0aC5hYnModC56KSxuLnc9TWF0aC5hYnModC53KSxufXN0YXRpYyBsZXJwKHQsbixvLGEpe3JldHVybiBlLm11bHRpcGx5QnlTY2FsYXIobixvLEExKSxhPWUubXVsdGlwbHlCeVNjYWxhcih0LDEtbyxhKSxlLmFkZChBMSxhLGEpfXN0YXRpYyBtb3N0T3J0aG9nb25hbEF4aXModCxuKXtsZXQgbz1lLm5vcm1hbGl6ZSh0LFdTKTtyZXR1cm4gZS5hYnMobyxvKSxvLng8PW8ueT9vLng8PW8uej9vLng8PW8udz9uPWUuY2xvbmUoZS5VTklUX1gsbik6bj1lLmNsb25lKGUuVU5JVF9XLG4pOm8uejw9by53P249ZS5jbG9uZShlLlVOSVRfWixuKTpuPWUuY2xvbmUoZS5VTklUX1csbik6by55PD1vLno/by55PD1vLnc/bj1lLmNsb25lKGUuVU5JVF9ZLG4pOm49ZS5jbG9uZShlLlVOSVRfVyxuKTpvLno8PW8udz9uPWUuY2xvbmUoZS5VTklUX1osbik6bj1lLmNsb25lKGUuVU5JVF9XLG4pLG59c3RhdGljIGVxdWFscyh0LG4pe3JldHVybiB0PT09bnx8Zyh0KSYmZyhuKSYmdC54PT09bi54JiZ0Lnk9PT1uLnkmJnQuej09PW4ueiYmdC53PT09bi53fXN0YXRpYyBlcXVhbHNBcnJheSh0LG4sbyl7cmV0dXJuIHQueD09PW5bb10mJnQueT09PW5bbysxXSYmdC56PT09bltvKzJdJiZ0Lnc9PT1uW28rM119c3RhdGljIGVxdWFsc0Vwc2lsb24odCxuLG8sYSl7cmV0dXJuIHQ9PT1ufHxnKHQpJiZnKG4pJiZrLmVxdWFsc0Vwc2lsb24odC54LG4ueCxvLGEpJiZrLmVxdWFsc0Vwc2lsb24odC55LG4ueSxvLGEpJiZrLmVxdWFsc0Vwc2lsb24odC56LG4ueixvLGEpJiZrLmVxdWFsc0Vwc2lsb24odC53LG4udyxvLGEpfWNsb25lKHQpe3JldHVybiBlLmNsb25lKHRoaXMsdCl9ZXF1YWxzKHQpe3JldHVybiBlLmVxdWFscyh0aGlzLHQpfWVxdWFsc0Vwc2lsb24odCxuLG8pe3JldHVybiBlLmVxdWFsc0Vwc2lsb24odGhpcyx0LG4sbyl9dG9TdHJpbmcoKXtyZXR1cm5gKCR7dGhpcy54fSwgJHt0aGlzLnl9LCAke3RoaXMuen0sICR7dGhpcy53fSlgfXN0YXRpYyBwYWNrRmxvYXQodCxuKXtyZXR1cm4gZyhuKXx8KG49bmV3IGUpLEttWzBdPXQsdzE/KG4ueD1Ob1swXSxuLnk9Tm9bMV0sbi56PU5vWzJdLG4udz1Ob1szXSk6KG4ueD1Ob1szXSxuLnk9Tm9bMl0sbi56PU5vWzFdLG4udz1Ob1swXSksbn1zdGF0aWMgdW5wYWNrRmxvYXQodCl7cmV0dXJuIHcxPyhOb1swXT10LngsTm9bMV09dC55LE5vWzJdPXQueixOb1szXT10LncpOihOb1swXT10LncsTm9bMV09dC56LE5vWzJdPXQueSxOb1szXT10LngpLEttWzBdfX07WW4ucGFja2VkTGVuZ3RoPTQ7WW4uZnJvbUFycmF5PVluLnVucGFjaztlbD1uZXcgWW4sQTE9bmV3IFluLFdTPW5ldyBZbjtZbi5aRVJPPU9iamVjdC5mcmVlemUobmV3IFluKDAsMCwwLDApKTtZbi5PTkU9T2JqZWN0LmZyZWV6ZShuZXcgWW4oMSwxLDEsMSkpO1luLlVOSVRfWD1PYmplY3QuZnJlZXplKG5ldyBZbigxLDAsMCwwKSk7WW4uVU5JVF9ZPU9iamVjdC5mcmVlemUobmV3IFluKDAsMSwwLDApKTtZbi5VTklUX1o9T2JqZWN0LmZyZWV6ZShuZXcgWW4oMCwwLDEsMCkpO1luLlVOSVRfVz1PYmplY3QuZnJlZXplKG5ldyBZbigwLDAsMCwxKSk7S209bmV3IEZsb2F0MzJBcnJheSgxKSxObz1uZXcgVWludDhBcnJheShLbS5idWZmZXIpLFhTPW5ldyBVaW50MzJBcnJheShbMjg3NDU0MDIwXSksWVM9bmV3IFVpbnQ4QXJyYXkoWFMuYnVmZmVyKSx3MT1ZU1swXT09PTY4LGR0PVlufSk7dmFyIHFtLENlLG10PVgoKCk9PntxbT17fTtxbS5FTVBUWV9PQkpFQ1Q9T2JqZWN0LmZyZWV6ZSh7fSk7cW0uRU1QVFlfQVJSQVk9T2JqZWN0LmZyZWV6ZShbXSk7Q2U9cW19KTtmdW5jdGlvbiBoZihlKXt0aGlzLm5hbWU9IlJ1bnRpbWVFcnJvciIsdGhpcy5tZXNzYWdlPWU7bGV0IHQ7dHJ5e3Rocm93IG5ldyBFcnJvcn1jYXRjaChuKXt0PW4uc3RhY2t9dGhpcy5zdGFjaz10fXZhciB1dCxqYT1YKCgpPT57c2UoKTtnKE9iamVjdC5jcmVhdGUpJiYoaGYucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoRXJyb3IucHJvdG90eXBlKSxoZi5wcm90b3R5cGUuY29uc3RydWN0b3I9aGYpO2hmLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe2xldCBlPWAke3RoaXMubmFtZX06ICR7dGhpcy5tZXNzYWdlfWA7cmV0dXJuIGcodGhpcy5zdGFjaykmJihlKz1gCiR7dGhpcy5zdGFjay50b1N0cmluZygpfWApLGV9O3V0PWhmfSk7ZnVuY3Rpb24gd2UoZSx0LG4sbyxhLHIsaSxmLGQsYyx1LGwsaCxtLGIscCl7dGhpc1swXT1lPz8wLHRoaXNbMV09YT8/MCx0aGlzWzJdPWQ/PzAsdGhpc1szXT1oPz8wLHRoaXNbNF09dD8/MCx0aGlzWzVdPXI/PzAsdGhpc1s2XT1jPz8wLHRoaXNbN109bT8/MCx0aGlzWzhdPW4/PzAsdGhpc1s5XT1pPz8wLHRoaXNbMTBdPXU/PzAsdGhpc1sxMV09Yj8/MCx0aGlzWzEyXT1vPz8wLHRoaXNbMTNdPWY/PzAsdGhpc1sxNF09bD8/MCx0aGlzWzE1XT1wPz8wfXZhciBYYyxZYyxtZixKUyxaUyxXbSxUMSxRUywkUyxlQyx0QyxuQyxvQyxhQywkLHBuPVgoKCk9PntJZSgpO2dhKCk7bXQoKTtzZSgpO0dlKCk7RG4oKTtqYSgpO3dlLnBhY2tlZExlbmd0aD0xNjt3ZS5wYWNrPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gbj1uPz8wLHRbbisrXT1lWzBdLHRbbisrXT1lWzFdLHRbbisrXT1lWzJdLHRbbisrXT1lWzNdLHRbbisrXT1lWzRdLHRbbisrXT1lWzVdLHRbbisrXT1lWzZdLHRbbisrXT1lWzddLHRbbisrXT1lWzhdLHRbbisrXT1lWzldLHRbbisrXT1lWzEwXSx0W24rK109ZVsxMV0sdFtuKytdPWVbMTJdLHRbbisrXT1lWzEzXSx0W24rK109ZVsxNF0sdFtuXT1lWzE1XSx0fTt3ZS51bnBhY2s9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB0PXQ/PzAsZyhuKXx8KG49bmV3IHdlKSxuWzBdPWVbdCsrXSxuWzFdPWVbdCsrXSxuWzJdPWVbdCsrXSxuWzNdPWVbdCsrXSxuWzRdPWVbdCsrXSxuWzVdPWVbdCsrXSxuWzZdPWVbdCsrXSxuWzddPWVbdCsrXSxuWzhdPWVbdCsrXSxuWzldPWVbdCsrXSxuWzEwXT1lW3QrK10sblsxMV09ZVt0KytdLG5bMTJdPWVbdCsrXSxuWzEzXT1lW3QrK10sblsxNF09ZVt0KytdLG5bMTVdPWVbdF0sbn07d2UucGFja0FycmF5PWZ1bmN0aW9uKGUsdCl7bGV0IG49ZS5sZW5ndGgsbz1uKjE2O2codCk/IUFycmF5LmlzQXJyYXkodCkmJnQubGVuZ3RoIT09b3x8dC5sZW5ndGghPT1vJiYodC5sZW5ndGg9byk6dD1uZXcgQXJyYXkobyk7Zm9yKGxldCBhPTA7YTxuOysrYSl3ZS5wYWNrKGVbYV0sdCxhKjE2KTtyZXR1cm4gdH07d2UudW5wYWNrQXJyYXk9ZnVuY3Rpb24oZSx0KXtsZXQgbj1lLmxlbmd0aDtnKHQpP3QubGVuZ3RoPW4vMTY6dD1uZXcgQXJyYXkobi8xNik7Zm9yKGxldCBvPTA7bzxuO28rPTE2KXtsZXQgYT1vLzE2O3RbYV09d2UudW5wYWNrKGUsbyx0W2FdKX1yZXR1cm4gdH07d2UuY2xvbmU9ZnVuY3Rpb24oZSx0KXtpZihnKGUpKXJldHVybiBnKHQpPyh0WzBdPWVbMF0sdFsxXT1lWzFdLHRbMl09ZVsyXSx0WzNdPWVbM10sdFs0XT1lWzRdLHRbNV09ZVs1XSx0WzZdPWVbNl0sdFs3XT1lWzddLHRbOF09ZVs4XSx0WzldPWVbOV0sdFsxMF09ZVsxMF0sdFsxMV09ZVsxMV0sdFsxMl09ZVsxMl0sdFsxM109ZVsxM10sdFsxNF09ZVsxNF0sdFsxNV09ZVsxNV0sdCk6bmV3IHdlKGVbMF0sZVs0XSxlWzhdLGVbMTJdLGVbMV0sZVs1XSxlWzldLGVbMTNdLGVbMl0sZVs2XSxlWzEwXSxlWzE0XSxlWzNdLGVbN10sZVsxMV0sZVsxNV0pfTt3ZS5mcm9tQXJyYXk9d2UudW5wYWNrO3dlLmZyb21Db2x1bW5NYWpvckFycmF5PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHdlLmNsb25lKGUsdCl9O3dlLmZyb21Sb3dNYWpvckFycmF5PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGcodCk/KHRbMF09ZVswXSx0WzFdPWVbNF0sdFsyXT1lWzhdLHRbM109ZVsxMl0sdFs0XT1lWzFdLHRbNV09ZVs1XSx0WzZdPWVbOV0sdFs3XT1lWzEzXSx0WzhdPWVbMl0sdFs5XT1lWzZdLHRbMTBdPWVbMTBdLHRbMTFdPWVbMTRdLHRbMTJdPWVbM10sdFsxM109ZVs3XSx0WzE0XT1lWzExXSx0WzE1XT1lWzE1XSx0KTpuZXcgd2UoZVswXSxlWzFdLGVbMl0sZVszXSxlWzRdLGVbNV0sZVs2XSxlWzddLGVbOF0sZVs5XSxlWzEwXSxlWzExXSxlWzEyXSxlWzEzXSxlWzE0XSxlWzE1XSl9O3dlLmZyb21Sb3RhdGlvblRyYW5zbGF0aW9uPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdD10Pz9zLlpFUk8sZyhuKT8oblswXT1lWzBdLG5bMV09ZVsxXSxuWzJdPWVbMl0sblszXT0wLG5bNF09ZVszXSxuWzVdPWVbNF0sbls2XT1lWzVdLG5bN109MCxuWzhdPWVbNl0sbls5XT1lWzddLG5bMTBdPWVbOF0sblsxMV09MCxuWzEyXT10LngsblsxM109dC55LG5bMTRdPXQueixuWzE1XT0xLG4pOm5ldyB3ZShlWzBdLGVbM10sZVs2XSx0LngsZVsxXSxlWzRdLGVbN10sdC55LGVbMl0sZVs1XSxlWzhdLHQueiwwLDAsMCwxKX07d2UuZnJvbVRyYW5zbGF0aW9uUXVhdGVybmlvblJvdGF0aW9uU2NhbGU9ZnVuY3Rpb24oZSx0LG4sbyl7ZyhvKXx8KG89bmV3IHdlKTtsZXQgYT1uLngscj1uLnksaT1uLnosZj10LngqdC54LGQ9dC54KnQueSxjPXQueCp0LnosdT10LngqdC53LGw9dC55KnQueSxoPXQueSp0LnosbT10LnkqdC53LGI9dC56KnQueixwPXQueip0LncseT10LncqdC53LFQ9Zi1sLWIreSxfPTIqKGQtcCksRT0yKihjK20pLHc9MiooZCtwKSxSPS1mK2wtYit5LFM9MiooaC11KSxDPTIqKGMtbSksST0yKihoK3UpLE49LWYtbCtiK3k7cmV0dXJuIG9bMF09VCphLG9bMV09dyphLG9bMl09QyphLG9bM109MCxvWzRdPV8qcixvWzVdPVIqcixvWzZdPUkqcixvWzddPTAsb1s4XT1FKmksb1s5XT1TKmksb1sxMF09TippLG9bMTFdPTAsb1sxMl09ZS54LG9bMTNdPWUueSxvWzE0XT1lLnosb1sxNV09MSxvfTt3ZS5mcm9tVHJhbnNsYXRpb25Sb3RhdGlvblNjYWxlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHdlLmZyb21UcmFuc2xhdGlvblF1YXRlcm5pb25Sb3RhdGlvblNjYWxlKGUudHJhbnNsYXRpb24sZS5yb3RhdGlvbixlLnNjYWxlLHQpfTt3ZS5mcm9tVHJhbnNsYXRpb249ZnVuY3Rpb24oZSx0KXtyZXR1cm4gd2UuZnJvbVJvdGF0aW9uVHJhbnNsYXRpb24oSi5JREVOVElUWSxlLHQpfTt3ZS5mcm9tU2NhbGU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZyh0KT8odFswXT1lLngsdFsxXT0wLHRbMl09MCx0WzNdPTAsdFs0XT0wLHRbNV09ZS55LHRbNl09MCx0WzddPTAsdFs4XT0wLHRbOV09MCx0WzEwXT1lLnosdFsxMV09MCx0WzEyXT0wLHRbMTNdPTAsdFsxNF09MCx0WzE1XT0xLHQpOm5ldyB3ZShlLngsMCwwLDAsMCxlLnksMCwwLDAsMCxlLnosMCwwLDAsMCwxKX07d2UuZnJvbVVuaWZvcm1TY2FsZT1mdW5jdGlvbihlLHQpe3JldHVybiBnKHQpPyh0WzBdPWUsdFsxXT0wLHRbMl09MCx0WzNdPTAsdFs0XT0wLHRbNV09ZSx0WzZdPTAsdFs3XT0wLHRbOF09MCx0WzldPTAsdFsxMF09ZSx0WzExXT0wLHRbMTJdPTAsdFsxM109MCx0WzE0XT0wLHRbMTVdPTEsdCk6bmV3IHdlKGUsMCwwLDAsMCxlLDAsMCwwLDAsZSwwLDAsMCwwLDEpfTt3ZS5mcm9tUm90YXRpb249ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZyh0KXx8KHQ9bmV3IHdlKSx0WzBdPWVbMF0sdFsxXT1lWzFdLHRbMl09ZVsyXSx0WzNdPTAsdFs0XT1lWzNdLHRbNV09ZVs0XSx0WzZdPWVbNV0sdFs3XT0wLHRbOF09ZVs2XSx0WzldPWVbN10sdFsxMF09ZVs4XSx0WzExXT0wLHRbMTJdPTAsdFsxM109MCx0WzE0XT0wLHRbMTVdPTEsdH07WGM9bmV3IHMsWWM9bmV3IHMsbWY9bmV3IHM7d2UuZnJvbUNhbWVyYT1mdW5jdGlvbihlLHQpe2xldCBuPWUucG9zaXRpb24sbz1lLmRpcmVjdGlvbixhPWUudXA7cy5ub3JtYWxpemUobyxYYykscy5ub3JtYWxpemUocy5jcm9zcyhYYyxhLFljKSxZYykscy5ub3JtYWxpemUocy5jcm9zcyhZYyxYYyxtZiksbWYpO2xldCByPVljLngsaT1ZYy55LGY9WWMueixkPVhjLngsYz1YYy55LHU9WGMueixsPW1mLngsaD1tZi55LG09bWYueixiPW4ueCxwPW4ueSx5PW4ueixUPXIqLWIraSotcCtmKi15LF89bCotYitoKi1wK20qLXksRT1kKmIrYypwK3UqeTtyZXR1cm4gZyh0KT8odFswXT1yLHRbMV09bCx0WzJdPS1kLHRbM109MCx0WzRdPWksdFs1XT1oLHRbNl09LWMsdFs3XT0wLHRbOF09Zix0WzldPW0sdFsxMF09LXUsdFsxMV09MCx0WzEyXT1ULHRbMTNdPV8sdFsxNF09RSx0WzE1XT0xLHQpOm5ldyB3ZShyLGksZixULGwsaCxtLF8sLWQsLWMsLXUsRSwwLDAsMCwxKX07d2UuY29tcHV0ZVBlcnNwZWN0aXZlRmllbGRPZlZpZXc9ZnVuY3Rpb24oZSx0LG4sbyxhKXtsZXQgaT0xL01hdGgudGFuKGUqLjUpLGY9aS90LGQ9KG8rbikvKG4tbyksYz0yKm8qbi8obi1vKTtyZXR1cm4gYVswXT1mLGFbMV09MCxhWzJdPTAsYVszXT0wLGFbNF09MCxhWzVdPWksYVs2XT0wLGFbN109MCxhWzhdPTAsYVs5XT0wLGFbMTBdPWQsYVsxMV09LTEsYVsxMl09MCxhWzEzXT0wLGFbMTRdPWMsYVsxNV09MCxhfTt3ZS5jb21wdXRlT3J0aG9ncmFwaGljT2ZmQ2VudGVyPWZ1bmN0aW9uKGUsdCxuLG8sYSxyLGkpe2xldCBmPTEvKHQtZSksZD0xLyhvLW4pLGM9MS8oci1hKSx1PS0odCtlKSpmLGw9LShvK24pKmQsaD0tKHIrYSkqYztyZXR1cm4gZio9MixkKj0yLGMqPS0yLGlbMF09ZixpWzFdPTAsaVsyXT0wLGlbM109MCxpWzRdPTAsaVs1XT1kLGlbNl09MCxpWzddPTAsaVs4XT0wLGlbOV09MCxpWzEwXT1jLGlbMTFdPTAsaVsxMl09dSxpWzEzXT1sLGlbMTRdPWgsaVsxNV09MSxpfTt3ZS5jb21wdXRlUGVyc3BlY3RpdmVPZmZDZW50ZXI9ZnVuY3Rpb24oZSx0LG4sbyxhLHIsaSl7bGV0IGY9MiphLyh0LWUpLGQ9MiphLyhvLW4pLGM9KHQrZSkvKHQtZSksdT0obytuKS8oby1uKSxsPS0ocithKS8oci1hKSxoPS0xLG09LTIqciphLyhyLWEpO3JldHVybiBpWzBdPWYsaVsxXT0wLGlbMl09MCxpWzNdPTAsaVs0XT0wLGlbNV09ZCxpWzZdPTAsaVs3XT0wLGlbOF09YyxpWzldPXUsaVsxMF09bCxpWzExXT1oLGlbMTJdPTAsaVsxM109MCxpWzE0XT1tLGlbMTVdPTAsaX07d2UuY29tcHV0ZUluZmluaXRlUGVyc3BlY3RpdmVPZmZDZW50ZXI9ZnVuY3Rpb24oZSx0LG4sbyxhLHIpe2xldCBpPTIqYS8odC1lKSxmPTIqYS8oby1uKSxkPSh0K2UpLyh0LWUpLGM9KG8rbikvKG8tbiksdT0tMSxsPS0xLGg9LTIqYTtyZXR1cm4gclswXT1pLHJbMV09MCxyWzJdPTAsclszXT0wLHJbNF09MCxyWzVdPWYscls2XT0wLHJbN109MCxyWzhdPWQscls5XT1jLHJbMTBdPXUsclsxMV09bCxyWzEyXT0wLHJbMTNdPTAsclsxNF09aCxyWzE1XT0wLHJ9O3dlLmNvbXB1dGVWaWV3cG9ydFRyYW5zZm9ybWF0aW9uPWZ1bmN0aW9uKGUsdCxuLG8pe2cobyl8fChvPW5ldyB3ZSksZT1lPz9DZS5FTVBUWV9PQkpFQ1Q7bGV0IGE9ZS54Pz8wLHI9ZS55Pz8wLGk9ZS53aWR0aD8/MCxmPWUuaGVpZ2h0Pz8wO3Q9dD8/MCxuPW4/PzE7bGV0IGQ9aSouNSxjPWYqLjUsdT0obi10KSouNSxsPWQsaD1jLG09dSxiPWErZCxwPXIrYyx5PXQrdSxUPTE7cmV0dXJuIG9bMF09bCxvWzFdPTAsb1syXT0wLG9bM109MCxvWzRdPTAsb1s1XT1oLG9bNl09MCxvWzddPTAsb1s4XT0wLG9bOV09MCxvWzEwXT1tLG9bMTFdPTAsb1sxMl09YixvWzEzXT1wLG9bMTRdPXksb1sxNV09VCxvfTt3ZS5jb21wdXRlVmlldz1mdW5jdGlvbihlLHQsbixvLGEpe3JldHVybiBhWzBdPW8ueCxhWzFdPW4ueCxhWzJdPS10LngsYVszXT0wLGFbNF09by55LGFbNV09bi55LGFbNl09LXQueSxhWzddPTAsYVs4XT1vLnosYVs5XT1uLnosYVsxMF09LXQueixhWzExXT0wLGFbMTJdPS1zLmRvdChvLGUpLGFbMTNdPS1zLmRvdChuLGUpLGFbMTRdPXMuZG90KHQsZSksYVsxNV09MSxhfTt3ZS50b0FycmF5PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGcodCk/KHRbMF09ZVswXSx0WzFdPWVbMV0sdFsyXT1lWzJdLHRbM109ZVszXSx0WzRdPWVbNF0sdFs1XT1lWzVdLHRbNl09ZVs2XSx0WzddPWVbN10sdFs4XT1lWzhdLHRbOV09ZVs5XSx0WzEwXT1lWzEwXSx0WzExXT1lWzExXSx0WzEyXT1lWzEyXSx0WzEzXT1lWzEzXSx0WzE0XT1lWzE0XSx0WzE1XT1lWzE1XSx0KTpbZVswXSxlWzFdLGVbMl0sZVszXSxlWzRdLGVbNV0sZVs2XSxlWzddLGVbOF0sZVs5XSxlWzEwXSxlWzExXSxlWzEyXSxlWzEzXSxlWzE0XSxlWzE1XV19O3dlLmdldEVsZW1lbnRJbmRleD1mdW5jdGlvbihlLHQpe3JldHVybiBlKjQrdH07d2UuZ2V0Q29sdW1uPWZ1bmN0aW9uKGUsdCxuKXtsZXQgbz10KjQsYT1lW29dLHI9ZVtvKzFdLGk9ZVtvKzJdLGY9ZVtvKzNdO3JldHVybiBuLng9YSxuLnk9cixuLno9aSxuLnc9ZixufTt3ZS5zZXRDb2x1bW49ZnVuY3Rpb24oZSx0LG4sbyl7bz13ZS5jbG9uZShlLG8pO2xldCBhPXQqNDtyZXR1cm4gb1thXT1uLngsb1thKzFdPW4ueSxvW2ErMl09bi56LG9bYSszXT1uLncsb307d2UuZ2V0Um93PWZ1bmN0aW9uKGUsdCxuKXtsZXQgbz1lW3RdLGE9ZVt0KzRdLHI9ZVt0KzhdLGk9ZVt0KzEyXTtyZXR1cm4gbi54PW8sbi55PWEsbi56PXIsbi53PWksbn07d2Uuc2V0Um93PWZ1bmN0aW9uKGUsdCxuLG8pe3JldHVybiBvPXdlLmNsb25lKGUsbyksb1t0XT1uLngsb1t0KzRdPW4ueSxvW3QrOF09bi56LG9bdCsxMl09bi53LG99O3dlLnNldFRyYW5zbGF0aW9uPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gblswXT1lWzBdLG5bMV09ZVsxXSxuWzJdPWVbMl0sblszXT1lWzNdLG5bNF09ZVs0XSxuWzVdPWVbNV0sbls2XT1lWzZdLG5bN109ZVs3XSxuWzhdPWVbOF0sbls5XT1lWzldLG5bMTBdPWVbMTBdLG5bMTFdPWVbMTFdLG5bMTJdPXQueCxuWzEzXT10LnksblsxNF09dC56LG5bMTVdPWVbMTVdLG59O0pTPW5ldyBzO3dlLnNldFNjYWxlPWZ1bmN0aW9uKGUsdCxuKXtsZXQgbz13ZS5nZXRTY2FsZShlLEpTKSxhPXQueC9vLngscj10Lnkvby55LGk9dC56L28uejtyZXR1cm4gblswXT1lWzBdKmEsblsxXT1lWzFdKmEsblsyXT1lWzJdKmEsblszXT1lWzNdLG5bNF09ZVs0XSpyLG5bNV09ZVs1XSpyLG5bNl09ZVs2XSpyLG5bN109ZVs3XSxuWzhdPWVbOF0qaSxuWzldPWVbOV0qaSxuWzEwXT1lWzEwXSppLG5bMTFdPWVbMTFdLG5bMTJdPWVbMTJdLG5bMTNdPWVbMTNdLG5bMTRdPWVbMTRdLG5bMTVdPWVbMTVdLG59O1pTPW5ldyBzO3dlLnNldFVuaWZvcm1TY2FsZT1mdW5jdGlvbihlLHQsbil7bGV0IG89d2UuZ2V0U2NhbGUoZSxaUyksYT10L28ueCxyPXQvby55LGk9dC9vLno7cmV0dXJuIG5bMF09ZVswXSphLG5bMV09ZVsxXSphLG5bMl09ZVsyXSphLG5bM109ZVszXSxuWzRdPWVbNF0qcixuWzVdPWVbNV0qcixuWzZdPWVbNl0qcixuWzddPWVbN10sbls4XT1lWzhdKmksbls5XT1lWzldKmksblsxMF09ZVsxMF0qaSxuWzExXT1lWzExXSxuWzEyXT1lWzEyXSxuWzEzXT1lWzEzXSxuWzE0XT1lWzE0XSxuWzE1XT1lWzE1XSxufTtXbT1uZXcgczt3ZS5nZXRTY2FsZT1mdW5jdGlvbihlLHQpe3JldHVybiB0Lng9cy5tYWduaXR1ZGUocy5mcm9tRWxlbWVudHMoZVswXSxlWzFdLGVbMl0sV20pKSx0Lnk9cy5tYWduaXR1ZGUocy5mcm9tRWxlbWVudHMoZVs0XSxlWzVdLGVbNl0sV20pKSx0Lno9cy5tYWduaXR1ZGUocy5mcm9tRWxlbWVudHMoZVs4XSxlWzldLGVbMTBdLFdtKSksdH07VDE9bmV3IHM7d2UuZ2V0TWF4aW11bVNjYWxlPWZ1bmN0aW9uKGUpe3JldHVybiB3ZS5nZXRTY2FsZShlLFQxKSxzLm1heGltdW1Db21wb25lbnQoVDEpfTtRUz1uZXcgczt3ZS5zZXRSb3RhdGlvbj1mdW5jdGlvbihlLHQsbil7bGV0IG89d2UuZ2V0U2NhbGUoZSxRUyk7cmV0dXJuIG5bMF09dFswXSpvLngsblsxXT10WzFdKm8ueCxuWzJdPXRbMl0qby54LG5bM109ZVszXSxuWzRdPXRbM10qby55LG5bNV09dFs0XSpvLnksbls2XT10WzVdKm8ueSxuWzddPWVbN10sbls4XT10WzZdKm8ueixuWzldPXRbN10qby56LG5bMTBdPXRbOF0qby56LG5bMTFdPWVbMTFdLG5bMTJdPWVbMTJdLG5bMTNdPWVbMTNdLG5bMTRdPWVbMTRdLG5bMTVdPWVbMTVdLG59OyRTPW5ldyBzO3dlLmdldFJvdGF0aW9uPWZ1bmN0aW9uKGUsdCl7bGV0IG49d2UuZ2V0U2NhbGUoZSwkUyk7cmV0dXJuIHRbMF09ZVswXS9uLngsdFsxXT1lWzFdL24ueCx0WzJdPWVbMl0vbi54LHRbM109ZVs0XS9uLnksdFs0XT1lWzVdL24ueSx0WzVdPWVbNl0vbi55LHRbNl09ZVs4XS9uLnosdFs3XT1lWzldL24ueix0WzhdPWVbMTBdL24ueix0fTt3ZS5tdWx0aXBseT1mdW5jdGlvbihlLHQsbil7bGV0IG89ZVswXSxhPWVbMV0scj1lWzJdLGk9ZVszXSxmPWVbNF0sZD1lWzVdLGM9ZVs2XSx1PWVbN10sbD1lWzhdLGg9ZVs5XSxtPWVbMTBdLGI9ZVsxMV0scD1lWzEyXSx5PWVbMTNdLFQ9ZVsxNF0sXz1lWzE1XSxFPXRbMF0sdz10WzFdLFI9dFsyXSxTPXRbM10sQz10WzRdLEk9dFs1XSxOPXRbNl0sUD10WzddLEY9dFs4XSxBPXRbOV0seD10WzEwXSxNPXRbMTFdLHY9dFsxMl0sVT10WzEzXSx6PXRbMTRdLEQ9dFsxNV0sRz1vKkUrZip3K2wqUitwKlMsSD1hKkUrZCp3K2gqUit5KlMsTz1yKkUrYyp3K20qUitUKlMsWj1pKkUrdSp3K2IqUitfKlMsb2U9bypDK2YqSStsKk4rcCpQLGNlPWEqQytkKkkraCpOK3kqUCxmZT1yKkMrYypJK20qTitUKlAsZWU9aSpDK3UqSStiKk4rXypQLGJlPW8qRitmKkErbCp4K3AqTSxsZT1hKkYrZCpBK2gqeCt5Kk0scGU9cipGK2MqQSttKngrVCpNLHVlPWkqRit1KkErYip4K18qTSxhZT1vKnYrZipVK2wqeitwKkQsQWU9YSp2K2QqVStoKnoreSpELE5lPXIqditjKlUrbSp6K1QqRCxldD1pKnYrdSpVK2IqeitfKkQ7cmV0dXJuIG5bMF09RyxuWzFdPUgsblsyXT1PLG5bM109WixuWzRdPW9lLG5bNV09Y2Usbls2XT1mZSxuWzddPWVlLG5bOF09YmUsbls5XT1sZSxuWzEwXT1wZSxuWzExXT11ZSxuWzEyXT1hZSxuWzEzXT1BZSxuWzE0XT1OZSxuWzE1XT1ldCxufTt3ZS5hZGQ9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBuWzBdPWVbMF0rdFswXSxuWzFdPWVbMV0rdFsxXSxuWzJdPWVbMl0rdFsyXSxuWzNdPWVbM10rdFszXSxuWzRdPWVbNF0rdFs0XSxuWzVdPWVbNV0rdFs1XSxuWzZdPWVbNl0rdFs2XSxuWzddPWVbN10rdFs3XSxuWzhdPWVbOF0rdFs4XSxuWzldPWVbOV0rdFs5XSxuWzEwXT1lWzEwXSt0WzEwXSxuWzExXT1lWzExXSt0WzExXSxuWzEyXT1lWzEyXSt0WzEyXSxuWzEzXT1lWzEzXSt0WzEzXSxuWzE0XT1lWzE0XSt0WzE0XSxuWzE1XT1lWzE1XSt0WzE1XSxufTt3ZS5zdWJ0cmFjdD1mdW5jdGlvbihlLHQsbil7cmV0dXJuIG5bMF09ZVswXS10WzBdLG5bMV09ZVsxXS10WzFdLG5bMl09ZVsyXS10WzJdLG5bM109ZVszXS10WzNdLG5bNF09ZVs0XS10WzRdLG5bNV09ZVs1XS10WzVdLG5bNl09ZVs2XS10WzZdLG5bN109ZVs3XS10WzddLG5bOF09ZVs4XS10WzhdLG5bOV09ZVs5XS10WzldLG5bMTBdPWVbMTBdLXRbMTBdLG5bMTFdPWVbMTFdLXRbMTFdLG5bMTJdPWVbMTJdLXRbMTJdLG5bMTNdPWVbMTNdLXRbMTNdLG5bMTRdPWVbMTRdLXRbMTRdLG5bMTVdPWVbMTVdLXRbMTVdLG59O3dlLm11bHRpcGx5VHJhbnNmb3JtYXRpb249ZnVuY3Rpb24oZSx0LG4pe2xldCBvPWVbMF0sYT1lWzFdLHI9ZVsyXSxpPWVbNF0sZj1lWzVdLGQ9ZVs2XSxjPWVbOF0sdT1lWzldLGw9ZVsxMF0saD1lWzEyXSxtPWVbMTNdLGI9ZVsxNF0scD10WzBdLHk9dFsxXSxUPXRbMl0sXz10WzRdLEU9dFs1XSx3PXRbNl0sUj10WzhdLFM9dFs5XSxDPXRbMTBdLEk9dFsxMl0sTj10WzEzXSxQPXRbMTRdLEY9bypwK2kqeStjKlQsQT1hKnArZip5K3UqVCx4PXIqcCtkKnkrbCpULE09bypfK2kqRStjKncsdj1hKl8rZipFK3UqdyxVPXIqXytkKkUrbCp3LHo9bypSK2kqUytjKkMsRD1hKlIrZipTK3UqQyxHPXIqUitkKlMrbCpDLEg9bypJK2kqTitjKlAraCxPPWEqSStmKk4rdSpQK20sWj1yKkkrZCpOK2wqUCtiO3JldHVybiBuWzBdPUYsblsxXT1BLG5bMl09eCxuWzNdPTAsbls0XT1NLG5bNV09dixuWzZdPVUsbls3XT0wLG5bOF09eixuWzldPUQsblsxMF09RyxuWzExXT0wLG5bMTJdPUgsblsxM109TyxuWzE0XT1aLG5bMTVdPTEsbn07d2UubXVsdGlwbHlCeU1hdHJpeDM9ZnVuY3Rpb24oZSx0LG4pe2xldCBvPWVbMF0sYT1lWzFdLHI9ZVsyXSxpPWVbNF0sZj1lWzVdLGQ9ZVs2XSxjPWVbOF0sdT1lWzldLGw9ZVsxMF0saD10WzBdLG09dFsxXSxiPXRbMl0scD10WzNdLHk9dFs0XSxUPXRbNV0sXz10WzZdLEU9dFs3XSx3PXRbOF0sUj1vKmgraSptK2MqYixTPWEqaCtmKm0rdSpiLEM9cipoK2QqbStsKmIsST1vKnAraSp5K2MqVCxOPWEqcCtmKnkrdSpULFA9cipwK2QqeStsKlQsRj1vKl8raSpFK2MqdyxBPWEqXytmKkUrdSp3LHg9cipfK2QqRStsKnc7cmV0dXJuIG5bMF09UixuWzFdPVMsblsyXT1DLG5bM109MCxuWzRdPUksbls1XT1OLG5bNl09UCxuWzddPTAsbls4XT1GLG5bOV09QSxuWzEwXT14LG5bMTFdPTAsblsxMl09ZVsxMl0sblsxM109ZVsxM10sblsxNF09ZVsxNF0sblsxNV09ZVsxNV0sbn07d2UubXVsdGlwbHlCeVRyYW5zbGF0aW9uPWZ1bmN0aW9uKGUsdCxuKXtsZXQgbz10LngsYT10Lnkscj10LnosaT1vKmVbMF0rYSplWzRdK3IqZVs4XStlWzEyXSxmPW8qZVsxXSthKmVbNV0rciplWzldK2VbMTNdLGQ9byplWzJdK2EqZVs2XStyKmVbMTBdK2VbMTRdO3JldHVybiBuWzBdPWVbMF0sblsxXT1lWzFdLG5bMl09ZVsyXSxuWzNdPWVbM10sbls0XT1lWzRdLG5bNV09ZVs1XSxuWzZdPWVbNl0sbls3XT1lWzddLG5bOF09ZVs4XSxuWzldPWVbOV0sblsxMF09ZVsxMF0sblsxMV09ZVsxMV0sblsxMl09aSxuWzEzXT1mLG5bMTRdPWQsblsxNV09ZVsxNV0sbn07d2UubXVsdGlwbHlCeVNjYWxlPWZ1bmN0aW9uKGUsdCxuKXtsZXQgbz10LngsYT10Lnkscj10Lno7cmV0dXJuIG89PT0xJiZhPT09MSYmcj09PTE/d2UuY2xvbmUoZSxuKTooblswXT1vKmVbMF0sblsxXT1vKmVbMV0sblsyXT1vKmVbMl0sblszXT1lWzNdLG5bNF09YSplWzRdLG5bNV09YSplWzVdLG5bNl09YSplWzZdLG5bN109ZVs3XSxuWzhdPXIqZVs4XSxuWzldPXIqZVs5XSxuWzEwXT1yKmVbMTBdLG5bMTFdPWVbMTFdLG5bMTJdPWVbMTJdLG5bMTNdPWVbMTNdLG5bMTRdPWVbMTRdLG5bMTVdPWVbMTVdLG4pfTt3ZS5tdWx0aXBseUJ5VW5pZm9ybVNjYWxlPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gblswXT1lWzBdKnQsblsxXT1lWzFdKnQsblsyXT1lWzJdKnQsblszXT1lWzNdLG5bNF09ZVs0XSp0LG5bNV09ZVs1XSp0LG5bNl09ZVs2XSp0LG5bN109ZVs3XSxuWzhdPWVbOF0qdCxuWzldPWVbOV0qdCxuWzEwXT1lWzEwXSp0LG5bMTFdPWVbMTFdLG5bMTJdPWVbMTJdLG5bMTNdPWVbMTNdLG5bMTRdPWVbMTRdLG5bMTVdPWVbMTVdLG59O3dlLm11bHRpcGx5QnlWZWN0b3I9ZnVuY3Rpb24oZSx0LG4pe2xldCBvPXQueCxhPXQueSxyPXQueixpPXQudyxmPWVbMF0qbytlWzRdKmErZVs4XSpyK2VbMTJdKmksZD1lWzFdKm8rZVs1XSphK2VbOV0qcitlWzEzXSppLGM9ZVsyXSpvK2VbNl0qYStlWzEwXSpyK2VbMTRdKmksdT1lWzNdKm8rZVs3XSphK2VbMTFdKnIrZVsxNV0qaTtyZXR1cm4gbi54PWYsbi55PWQsbi56PWMsbi53PXUsbn07d2UubXVsdGlwbHlCeVBvaW50QXNWZWN0b3I9ZnVuY3Rpb24oZSx0LG4pe2xldCBvPXQueCxhPXQueSxyPXQueixpPWVbMF0qbytlWzRdKmErZVs4XSpyLGY9ZVsxXSpvK2VbNV0qYStlWzldKnIsZD1lWzJdKm8rZVs2XSphK2VbMTBdKnI7cmV0dXJuIG4ueD1pLG4ueT1mLG4uej1kLG59O3dlLm11bHRpcGx5QnlQb2ludD1mdW5jdGlvbihlLHQsbil7bGV0IG89dC54LGE9dC55LHI9dC56LGk9ZVswXSpvK2VbNF0qYStlWzhdKnIrZVsxMl0sZj1lWzFdKm8rZVs1XSphK2VbOV0qcitlWzEzXSxkPWVbMl0qbytlWzZdKmErZVsxMF0qcitlWzE0XTtyZXR1cm4gbi54PWksbi55PWYsbi56PWQsbn07d2UubXVsdGlwbHlCeVNjYWxhcj1mdW5jdGlvbihlLHQsbil7cmV0dXJuIG5bMF09ZVswXSp0LG5bMV09ZVsxXSp0LG5bMl09ZVsyXSp0LG5bM109ZVszXSp0LG5bNF09ZVs0XSp0LG5bNV09ZVs1XSp0LG5bNl09ZVs2XSp0LG5bN109ZVs3XSp0LG5bOF09ZVs4XSp0LG5bOV09ZVs5XSp0LG5bMTBdPWVbMTBdKnQsblsxMV09ZVsxMV0qdCxuWzEyXT1lWzEyXSp0LG5bMTNdPWVbMTNdKnQsblsxNF09ZVsxNF0qdCxuWzE1XT1lWzE1XSp0LG59O3dlLm5lZ2F0ZT1mdW5jdGlvbihlLHQpe3JldHVybiB0WzBdPS1lWzBdLHRbMV09LWVbMV0sdFsyXT0tZVsyXSx0WzNdPS1lWzNdLHRbNF09LWVbNF0sdFs1XT0tZVs1XSx0WzZdPS1lWzZdLHRbN109LWVbN10sdFs4XT0tZVs4XSx0WzldPS1lWzldLHRbMTBdPS1lWzEwXSx0WzExXT0tZVsxMV0sdFsxMl09LWVbMTJdLHRbMTNdPS1lWzEzXSx0WzE0XT0tZVsxNF0sdFsxNV09LWVbMTVdLHR9O3dlLnRyYW5zcG9zZT1mdW5jdGlvbihlLHQpe2xldCBuPWVbMV0sbz1lWzJdLGE9ZVszXSxyPWVbNl0saT1lWzddLGY9ZVsxMV07cmV0dXJuIHRbMF09ZVswXSx0WzFdPWVbNF0sdFsyXT1lWzhdLHRbM109ZVsxMl0sdFs0XT1uLHRbNV09ZVs1XSx0WzZdPWVbOV0sdFs3XT1lWzEzXSx0WzhdPW8sdFs5XT1yLHRbMTBdPWVbMTBdLHRbMTFdPWVbMTRdLHRbMTJdPWEsdFsxM109aSx0WzE0XT1mLHRbMTVdPWVbMTVdLHR9O3dlLmFicz1mdW5jdGlvbihlLHQpe3JldHVybiB0WzBdPU1hdGguYWJzKGVbMF0pLHRbMV09TWF0aC5hYnMoZVsxXSksdFsyXT1NYXRoLmFicyhlWzJdKSx0WzNdPU1hdGguYWJzKGVbM10pLHRbNF09TWF0aC5hYnMoZVs0XSksdFs1XT1NYXRoLmFicyhlWzVdKSx0WzZdPU1hdGguYWJzKGVbNl0pLHRbN109TWF0aC5hYnMoZVs3XSksdFs4XT1NYXRoLmFicyhlWzhdKSx0WzldPU1hdGguYWJzKGVbOV0pLHRbMTBdPU1hdGguYWJzKGVbMTBdKSx0WzExXT1NYXRoLmFicyhlWzExXSksdFsxMl09TWF0aC5hYnMoZVsxMl0pLHRbMTNdPU1hdGguYWJzKGVbMTNdKSx0WzE0XT1NYXRoLmFicyhlWzE0XSksdFsxNV09TWF0aC5hYnMoZVsxNV0pLHR9O3dlLmVxdWFscz1mdW5jdGlvbihlLHQpe3JldHVybiBlPT09dHx8ZyhlKSYmZyh0KSYmZVsxMl09PT10WzEyXSYmZVsxM109PT10WzEzXSYmZVsxNF09PT10WzE0XSYmZVswXT09PXRbMF0mJmVbMV09PT10WzFdJiZlWzJdPT09dFsyXSYmZVs0XT09PXRbNF0mJmVbNV09PT10WzVdJiZlWzZdPT09dFs2XSYmZVs4XT09PXRbOF0mJmVbOV09PT10WzldJiZlWzEwXT09PXRbMTBdJiZlWzNdPT09dFszXSYmZVs3XT09PXRbN10mJmVbMTFdPT09dFsxMV0mJmVbMTVdPT09dFsxNV19O3dlLmVxdWFsc0Vwc2lsb249ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBuPW4/PzAsZT09PXR8fGcoZSkmJmcodCkmJk1hdGguYWJzKGVbMF0tdFswXSk8PW4mJk1hdGguYWJzKGVbMV0tdFsxXSk8PW4mJk1hdGguYWJzKGVbMl0tdFsyXSk8PW4mJk1hdGguYWJzKGVbM10tdFszXSk8PW4mJk1hdGguYWJzKGVbNF0tdFs0XSk8PW4mJk1hdGguYWJzKGVbNV0tdFs1XSk8PW4mJk1hdGguYWJzKGVbNl0tdFs2XSk8PW4mJk1hdGguYWJzKGVbN10tdFs3XSk8PW4mJk1hdGguYWJzKGVbOF0tdFs4XSk8PW4mJk1hdGguYWJzKGVbOV0tdFs5XSk8PW4mJk1hdGguYWJzKGVbMTBdLXRbMTBdKTw9biYmTWF0aC5hYnMoZVsxMV0tdFsxMV0pPD1uJiZNYXRoLmFicyhlWzEyXS10WzEyXSk8PW4mJk1hdGguYWJzKGVbMTNdLXRbMTNdKTw9biYmTWF0aC5hYnMoZVsxNF0tdFsxNF0pPD1uJiZNYXRoLmFicyhlWzE1XS10WzE1XSk8PW59O3dlLmdldFRyYW5zbGF0aW9uPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQueD1lWzEyXSx0Lnk9ZVsxM10sdC56PWVbMTRdLHR9O3dlLmdldE1hdHJpeDM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdFswXT1lWzBdLHRbMV09ZVsxXSx0WzJdPWVbMl0sdFszXT1lWzRdLHRbNF09ZVs1XSx0WzVdPWVbNl0sdFs2XT1lWzhdLHRbN109ZVs5XSx0WzhdPWVbMTBdLHR9O2VDPW5ldyBKLHRDPW5ldyBKLG5DPW5ldyBkdCxvQz1uZXcgZHQoMCwwLDAsMSk7d2UuaW52ZXJzZT1mdW5jdGlvbihlLHQpe2xldCBuPWVbMF0sbz1lWzRdLGE9ZVs4XSxyPWVbMTJdLGk9ZVsxXSxmPWVbNV0sZD1lWzldLGM9ZVsxM10sdT1lWzJdLGw9ZVs2XSxoPWVbMTBdLG09ZVsxNF0sYj1lWzNdLHA9ZVs3XSx5PWVbMTFdLFQ9ZVsxNV0sXz1oKlQsRT1tKnksdz1sKlQsUj1tKnAsUz1sKnksQz1oKnAsST11KlQsTj1tKmIsUD11KnksRj1oKmIsQT11KnAseD1sKmIsTT1fKmYrUipkK1MqYy0oRSpmK3cqZCtDKmMpLHY9RSppK0kqZCtGKmMtKF8qaStOKmQrUCpjKSxVPXcqaStOKmYrQSpjLShSKmkrSSpmK3gqYyksej1DKmkrUCpmK3gqZC0oUyppK0YqZitBKmQpLEQ9RSpvK3cqYStDKnItKF8qbytSKmErUypyKSxHPV8qbitOKmErUCpyLShFKm4rSSphK0YqciksSD1SKm4rSSpvK3gqci0odypuK04qbytBKnIpLE89UypuK0YqbytBKmEtKEMqbitQKm8reCphKTtfPWEqYyxFPXIqZCx3PW8qYyxSPXIqZixTPW8qZCxDPWEqZixJPW4qYyxOPXIqaSxQPW4qZCxGPWEqaSxBPW4qZix4PW8qaTtsZXQgWj1fKnArUip5K1MqVC0oRSpwK3cqeStDKlQpLG9lPUUqYitJKnkrRipULShfKmIrTip5K1AqVCksY2U9dypiK04qcCtBKlQtKFIqYitJKnAreCpUKSxmZT1DKmIrUCpwK3gqeS0oUypiK0YqcCtBKnkpLGVlPXcqaCtDKm0rRSpsLShTKm0rXypsK1IqaCksYmU9UCptK18qdStOKmgtKEkqaCtGKm0rRSp1KSxsZT1JKmwreCptK1IqdS0oQSptK3cqdStOKmwpLHBlPUEqaCtTKnUrRipsLShQKmwreCpoK0MqdSksdWU9bipNK28qdithKlUrcip6O2lmKE1hdGguYWJzKHVlKTxrLkVQU0lMT04yMSl7aWYoSi5lcXVhbHNFcHNpbG9uKHdlLmdldE1hdHJpeDMoZSxlQyksdEMsay5FUFNJTE9ONykmJmR0LmVxdWFscyh3ZS5nZXRSb3coZSwzLG5DKSxvQykpcmV0dXJuIHRbMF09MCx0WzFdPTAsdFsyXT0wLHRbM109MCx0WzRdPTAsdFs1XT0wLHRbNl09MCx0WzddPTAsdFs4XT0wLHRbOV09MCx0WzEwXT0wLHRbMTFdPTAsdFsxMl09LWVbMTJdLHRbMTNdPS1lWzEzXSx0WzE0XT0tZVsxNF0sdFsxNV09MSx0O3Rocm93IG5ldyB1dCgibWF0cml4IGlzIG5vdCBpbnZlcnRpYmxlIGJlY2F1c2UgaXRzIGRldGVybWluYXRlIGlzIHplcm8uIil9cmV0dXJuIHVlPTEvdWUsdFswXT1NKnVlLHRbMV09dip1ZSx0WzJdPVUqdWUsdFszXT16KnVlLHRbNF09RCp1ZSx0WzVdPUcqdWUsdFs2XT1IKnVlLHRbN109Typ1ZSx0WzhdPVoqdWUsdFs5XT1vZSp1ZSx0WzEwXT1jZSp1ZSx0WzExXT1mZSp1ZSx0WzEyXT1lZSp1ZSx0WzEzXT1iZSp1ZSx0WzE0XT1sZSp1ZSx0WzE1XT1wZSp1ZSx0fTt3ZS5pbnZlcnNlVHJhbnNmb3JtYXRpb249ZnVuY3Rpb24oZSx0KXtsZXQgbj1lWzBdLG89ZVsxXSxhPWVbMl0scj1lWzRdLGk9ZVs1XSxmPWVbNl0sZD1lWzhdLGM9ZVs5XSx1PWVbMTBdLGw9ZVsxMl0saD1lWzEzXSxtPWVbMTRdLGI9LW4qbC1vKmgtYSptLHA9LXIqbC1pKmgtZiptLHk9LWQqbC1jKmgtdSptO3JldHVybiB0WzBdPW4sdFsxXT1yLHRbMl09ZCx0WzNdPTAsdFs0XT1vLHRbNV09aSx0WzZdPWMsdFs3XT0wLHRbOF09YSx0WzldPWYsdFsxMF09dSx0WzExXT0wLHRbMTJdPWIsdFsxM109cCx0WzE0XT15LHRbMTVdPTEsdH07YUM9bmV3IHdlO3dlLmludmVyc2VUcmFuc3Bvc2U9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gd2UuaW52ZXJzZSh3ZS50cmFuc3Bvc2UoZSxhQyksdCl9O3dlLklERU5USVRZPU9iamVjdC5mcmVlemUobmV3IHdlKDEsMCwwLDAsMCwxLDAsMCwwLDAsMSwwLDAsMCwwLDEpKTt3ZS5aRVJPPU9iamVjdC5mcmVlemUobmV3IHdlKDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDApKTt3ZS5DT0xVTU4wUk9XMD0wO3dlLkNPTFVNTjBST1cxPTE7d2UuQ09MVU1OMFJPVzI9Mjt3ZS5DT0xVTU4wUk9XMz0zO3dlLkNPTFVNTjFST1cwPTQ7d2UuQ09MVU1OMVJPVzE9NTt3ZS5DT0xVTU4xUk9XMj02O3dlLkNPTFVNTjFST1czPTc7d2UuQ09MVU1OMlJPVzA9ODt3ZS5DT0xVTU4yUk9XMT05O3dlLkNPTFVNTjJST1cyPTEwO3dlLkNPTFVNTjJST1czPTExO3dlLkNPTFVNTjNST1cwPTEyO3dlLkNPTFVNTjNST1cxPTEzO3dlLkNPTFVNTjNST1cyPTE0O3dlLkNPTFVNTjNST1czPTE1O09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHdlLnByb3RvdHlwZSx7bGVuZ3RoOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gd2UucGFja2VkTGVuZ3RofX19KTt3ZS5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oZSl7cmV0dXJuIHdlLmNsb25lKHRoaXMsZSl9O3dlLnByb3RvdHlwZS5lcXVhbHM9ZnVuY3Rpb24oZSl7cmV0dXJuIHdlLmVxdWFscyh0aGlzLGUpfTt3ZS5lcXVhbHNBcnJheT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGVbMF09PT10W25dJiZlWzFdPT09dFtuKzFdJiZlWzJdPT09dFtuKzJdJiZlWzNdPT09dFtuKzNdJiZlWzRdPT09dFtuKzRdJiZlWzVdPT09dFtuKzVdJiZlWzZdPT09dFtuKzZdJiZlWzddPT09dFtuKzddJiZlWzhdPT09dFtuKzhdJiZlWzldPT09dFtuKzldJiZlWzEwXT09PXRbbisxMF0mJmVbMTFdPT09dFtuKzExXSYmZVsxMl09PT10W24rMTJdJiZlWzEzXT09PXRbbisxM10mJmVbMTRdPT09dFtuKzE0XSYmZVsxNV09PT10W24rMTVdfTt3ZS5wcm90b3R5cGUuZXF1YWxzRXBzaWxvbj1mdW5jdGlvbihlLHQpe3JldHVybiB3ZS5lcXVhbHNFcHNpbG9uKHRoaXMsZSx0KX07d2UucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuYCgke3RoaXNbMF19LCAke3RoaXNbNF19LCAke3RoaXNbOF19LCAke3RoaXNbMTJdfSkKKCR7dGhpc1sxXX0sICR7dGhpc1s1XX0sICR7dGhpc1s5XX0sICR7dGhpc1sxM119KQooJHt0aGlzWzJdfSwgJHt0aGlzWzZdfSwgJHt0aGlzWzEwXX0sICR7dGhpc1sxNF19KQooJHt0aGlzWzNdfSwgJHt0aGlzWzddfSwgJHt0aGlzWzExXX0sICR7dGhpc1sxNV19KWB9OyQ9d2V9KTtmdW5jdGlvbiByQyhlLHQsbil7bGV0IG89MCxhPWUubGVuZ3RoLTEscixpO2Zvcig7bzw9YTspe2lmKHI9fn4oKG8rYSkvMiksaT1uKGVbcl0sdCksaTwwKXtvPXIrMTtjb250aW51ZX1pZihpPjApe2E9ci0xO2NvbnRpbnVlfXJldHVybiByfXJldHVybn4oYSsxKX12YXIgX2EsdGw9WCgoKT0+e19hPXJDfSk7ZnVuY3Rpb24gaUMoZSx0LG4sbyxhKXt0aGlzLnhQb2xlV2FuZGVyPWUsdGhpcy55UG9sZVdhbmRlcj10LHRoaXMueFBvbGVPZmZzZXQ9bix0aGlzLnlQb2xlT2Zmc2V0PW8sdGhpcy51dDFNaW51c1V0Yz1hfXZhciBiZixYbT1YKCgpPT57YmY9aUN9KTtmdW5jdGlvbiBjQyhlKXtyZXR1cm4gZSU0PT09MCYmZSUxMDAhPT0wfHxlJTQwMD09PTB9dmFyIHBmLFltPVgoKCk9PntwZj1jQ30pO2Z1bmN0aW9uIHNDKGUsdCxuLG8sYSxyLGksZil7ZT1lPz8xLHQ9dD8/MSxuPW4/PzEsbz1vPz8wLGE9YT8/MCxyPXI/PzAsaT1pPz8wLGY9Zj8/ITEsdGhpcy55ZWFyPWUsdGhpcy5tb250aD10LHRoaXMuZGF5PW4sdGhpcy5ob3VyPW8sdGhpcy5taW51dGU9YSx0aGlzLnNlY29uZD1yLHRoaXMubWlsbGlzZWNvbmQ9aSx0aGlzLmlzTGVhcFNlY29uZD1mO2Z1bmN0aW9uIHAoKXtNbi50eXBlT2YubnVtYmVyLmdyZWF0ZXJUaGFuT3JFcXVhbHMoIlllYXIiLGUsMSksTW4udHlwZU9mLm51bWJlci5sZXNzVGhhbk9yRXF1YWxzKCJZZWFyIixlLDk5OTkpLE1uLnR5cGVPZi5udW1iZXIuZ3JlYXRlclRoYW5PckVxdWFscygiTW9udGgiLHQsMSksTW4udHlwZU9mLm51bWJlci5sZXNzVGhhbk9yRXF1YWxzKCJNb250aCIsdCwxMiksTW4udHlwZU9mLm51bWJlci5ncmVhdGVyVGhhbk9yRXF1YWxzKCJEYXkiLG4sMSksTW4udHlwZU9mLm51bWJlci5sZXNzVGhhbk9yRXF1YWxzKCJEYXkiLG4sMzEpLE1uLnR5cGVPZi5udW1iZXIuZ3JlYXRlclRoYW5PckVxdWFscygiSG91ciIsbywwKSxNbi50eXBlT2YubnVtYmVyLmxlc3NUaGFuT3JFcXVhbHMoIkhvdXIiLG8sMjMpLE1uLnR5cGVPZi5udW1iZXIuZ3JlYXRlclRoYW5PckVxdWFscygiTWludXRlIixhLDApLE1uLnR5cGVPZi5udW1iZXIubGVzc1RoYW5PckVxdWFscygiTWludXRlIixhLDU5KSxNbi50eXBlT2YuYm9vbCgiSXNMZWFwU2Vjb25kIixmKSxNbi50eXBlT2YubnVtYmVyLmdyZWF0ZXJUaGFuT3JFcXVhbHMoIlNlY29uZCIsciwwKSxNbi50eXBlT2YubnVtYmVyLmxlc3NUaGFuT3JFcXVhbHMoIlNlY29uZCIscixmPzYwOjU5KSxNbi50eXBlT2YubnVtYmVyLmdyZWF0ZXJUaGFuT3JFcXVhbHMoIk1pbGxpc2Vjb25kIixpLDApLE1uLnR5cGVPZi5udW1iZXIubGVzc1RoYW4oIk1pbGxpc2Vjb25kIixpLDFlMyl9ZnVuY3Rpb24geSgpe2xldCBUPXQ9PT0yJiZwZihlKT9FMVt0LTFdKzE6RTFbdC0xXTtpZihuPlQpdGhyb3cgbmV3IFd0KCJNb250aCBhbmQgRGF5IHJlcHJlc2VudHMgaW52YWxpZCBkYXRlIil9fXZhciBFMSxKbSxSMT1YKCgpPT57VW0oKTtKaSgpO1ltKCk7RTE9WzMxLDI4LDMxLDMwLDMxLDMwLDMxLDMxLDMwLDMxLDMwLDMxXTtKbT1zQ30pO2Z1bmN0aW9uIGZDKGUsdCl7dGhpcy5qdWxpYW5EYXRlPWUsdGhpcy5vZmZzZXQ9dH12YXIgUXQsWm09WCgoKT0+e1F0PWZDfSk7dmFyIGRDLGduLG5sPVgoKCk9PntkQz17U0VDT05EU19QRVJfTUlMTElTRUNPTkQ6LjAwMSxTRUNPTkRTX1BFUl9NSU5VVEU6NjAsTUlOVVRFU19QRVJfSE9VUjo2MCxIT1VSU19QRVJfREFZOjI0LFNFQ09ORFNfUEVSX0hPVVI6MzYwMCxNSU5VVEVTX1BFUl9EQVk6MTQ0MCxTRUNPTkRTX1BFUl9EQVk6ODY0MDAsREFZU19QRVJfSlVMSUFOX0NFTlRVUlk6MzY1MjUsUElDT1NFQ09ORDoxZS05LE1PRElGSUVEX0pVTElBTl9EQVRFX0RJRkZFUkVOQ0U6MjQwMDAwMDVlLTF9LGduPU9iamVjdC5mcmVlemUoZEMpfSk7dmFyIHVDLHl0LG9sPVgoKCk9Pnt1Qz17VVRDOjAsVEFJOjF9LHl0PU9iamVjdC5mcmVlemUodUMpfSk7ZnVuY3Rpb24gZWIoZSx0KXtyZXR1cm4gQmUuY29tcGFyZShlLmp1bGlhbkRhdGUsdC5qdWxpYW5EYXRlKX1mdW5jdGlvbiBybChlKXtKYy5qdWxpYW5EYXRlPWU7bGV0IHQ9QmUubGVhcFNlY29uZHMsbj1fYSh0LEpjLGViKTtuPDAmJihuPX5uKSxuPj10Lmxlbmd0aCYmKG49dC5sZW5ndGgtMSk7bGV0IG89dFtuXS5vZmZzZXQ7bj4wJiZCZS5zZWNvbmRzRGlmZmVyZW5jZSh0W25dLmp1bGlhbkRhdGUsZSk+byYmKG4tLSxvPXRbbl0ub2Zmc2V0KSxCZS5hZGRTZWNvbmRzKGUsbyxlKX1mdW5jdGlvbiB4MShlLHQpe0pjLmp1bGlhbkRhdGU9ZTtsZXQgbj1CZS5sZWFwU2Vjb25kcyxvPV9hKG4sSmMsZWIpO2lmKG88MCYmKG89fm8pLG89PT0wKXJldHVybiBCZS5hZGRTZWNvbmRzKGUsLW5bMF0ub2Zmc2V0LHQpO2lmKG8+PW4ubGVuZ3RoKXJldHVybiBCZS5hZGRTZWNvbmRzKGUsLW5bby0xXS5vZmZzZXQsdCk7bGV0IGE9QmUuc2Vjb25kc0RpZmZlcmVuY2UobltvXS5qdWxpYW5EYXRlLGUpO2lmKGE9PT0wKXJldHVybiBCZS5hZGRTZWNvbmRzKGUsLW5bb10ub2Zmc2V0LHQpO2lmKCEoYTw9MSkpcmV0dXJuIEJlLmFkZFNlY29uZHMoZSwtblstLW9dLm9mZnNldCx0KX1mdW5jdGlvbiBkaShlLHQsbil7bGV0IG89dC9nbi5TRUNPTkRTX1BFUl9EQVl8MDtyZXR1cm4gZSs9byx0LT1nbi5TRUNPTkRTX1BFUl9EQVkqbyx0PDAmJihlLS0sdCs9Z24uU0VDT05EU19QRVJfREFZKSxuLmRheU51bWJlcj1lLG4uc2Vjb25kc09mRGF5PXQsbn1mdW5jdGlvbiB0YihlLHQsbixvLGEscixpKXtsZXQgZj0odC0xNCkvMTJ8MCxkPWUrNDgwMCtmLGM9KDE0NjEqZC80fDApKygzNjcqKHQtMi0xMipmKS8xMnwwKS0oMyooKGQrMTAwKS8xMDB8MCkvNHwwKStuLTMyMDc1O289by0xMixvPDAmJihvKz0yNCk7bGV0IHU9cisobypnbi5TRUNPTkRTX1BFUl9IT1VSK2EqZ24uU0VDT05EU19QRVJfTUlOVVRFK2kqZ24uU0VDT05EU19QRVJfTUlMTElTRUNPTkQpO3JldHVybiB1Pj00MzIwMCYmKGMtPTEpLFtjLHVdfWZ1bmN0aW9uIEJlKGUsdCxuKXt0aGlzLmRheU51bWJlcj12b2lkIDAsdGhpcy5zZWNvbmRzT2ZEYXk9dm9pZCAwLGU9ZT8/MCx0PXQ/PzAsbj1uPz95dC5VVEM7bGV0IG89ZXwwO3Q9dCsoZS1vKSpnbi5TRUNPTkRTX1BFUl9EQVksZGkobyx0LHRoaXMpLG49PT15dC5VVEMmJnJsKHRoaXMpfXZhciBPMSxRbSwkbSxKYyxsQyxoQyxtQyxiQyxwQyxuYixnQyxfQyx5QyxhbCxKbixpbD1YKCgpPT57dGwoKTtzZSgpO1IxKCk7WW0oKTtabSgpO25sKCk7b2woKTtPMT1uZXcgSm0sUW09WzMxLDI4LDMxLDMwLDMxLDMwLDMxLDMxLDMwLDMxLDMwLDMxXSwkbT0yOTtKYz1uZXcgUXQ7bEM9L14oXGR7NH0pJC8saEM9L14oXGR7NH0pLShcZHsyfSkkLyxtQz0vXihcZHs0fSktPyhcZHszfSkkLyxiQz0vXihcZHs0fSktP1coXGR7Mn0pLT8oXGR7MX0pPyQvLHBDPS9eKFxkezR9KS0/KFxkezJ9KS0/KFxkezJ9KSQvLG5iPS8oW1orXC1dKT8oXGR7Mn0pPzo/KFxkezJ9KT8kLyxnQz0vXihcZHsyfSkoXC5cZCspPy8uc291cmNlK25iLnNvdXJjZSxfQz0vXihcZHsyfSk6PyhcZHsyfSkoXC5cZCspPy8uc291cmNlK25iLnNvdXJjZSx5Qz0vXihcZHsyfSk6PyhcZHsyfSk6PyhcZHsyfSkoXC5cZCspPy8uc291cmNlK25iLnNvdXJjZTtCZS5mcm9tR3JlZ29yaWFuRGF0ZT1mdW5jdGlvbihlLHQpe2xldCBuPXRiKGUueWVhcixlLm1vbnRoLGUuZGF5LGUuaG91cixlLm1pbnV0ZSxlLnNlY29uZCxlLm1pbGxpc2Vjb25kKTtyZXR1cm4gZyh0KT8oZGkoblswXSxuWzFdLHQpLHJsKHQpLHQpOm5ldyBCZShuWzBdLG5bMV0seXQuVVRDKX07QmUuZnJvbURhdGU9ZnVuY3Rpb24oZSx0KXtsZXQgbj10YihlLmdldFVUQ0Z1bGxZZWFyKCksZS5nZXRVVENNb250aCgpKzEsZS5nZXRVVENEYXRlKCksZS5nZXRVVENIb3VycygpLGUuZ2V0VVRDTWludXRlcygpLGUuZ2V0VVRDU2Vjb25kcygpLGUuZ2V0VVRDTWlsbGlzZWNvbmRzKCkpO3JldHVybiBnKHQpPyhkaShuWzBdLG5bMV0sdCkscmwodCksdCk6bmV3IEJlKG5bMF0sblsxXSx5dC5VVEMpfTtCZS5mcm9tSXNvODYwMT1mdW5jdGlvbihlLHQpe2U9ZS5yZXBsYWNlKCIsIiwiLiIpO2xldCBuPWUuc3BsaXQoIlQiKSxvLGE9MSxyPTEsaT0wLGY9MCxkPTAsYz0wLHU9blswXSxsPW5bMV0saCxtO2lmKG49dS5tYXRjaChwQyksbiE9PW51bGwpbz0rblsxXSxhPStuWzJdLHI9K25bM107ZWxzZSBpZihuPXUubWF0Y2goaEMpLG4hPT1udWxsKW89K25bMV0sYT0rblsyXTtlbHNlIGlmKG49dS5tYXRjaChsQyksbiE9PW51bGwpbz0rblsxXTtlbHNle2xldCBUO2lmKG49dS5tYXRjaChtQyksbiE9PW51bGwpbz0rblsxXSxUPStuWzJdLG09cGYobyk7ZWxzZSBpZihuPXUubWF0Y2goYkMpLG4hPT1udWxsKXtvPStuWzFdO2xldCBfPStuWzJdLEU9K25bM118fDAsdz1uZXcgRGF0ZShEYXRlLlVUQyhvLDAsNCkpO1Q9Xyo3K0Utdy5nZXRVVENEYXkoKS0zfWg9bmV3IERhdGUoRGF0ZS5VVEMobywwLDEpKSxoLnNldFVUQ0RhdGUoVCksYT1oLmdldFVUQ01vbnRoKCkrMSxyPWguZ2V0VVRDRGF0ZSgpfW09cGYobyk7bGV0IGI7aWYoZyhsKSl7bj1sLm1hdGNoKHlDKSxuIT09bnVsbD8oaT0rblsxXSxmPStuWzJdLGQ9K25bM10sYz0rKG5bNF18fDApKjFlMyxiPTUpOihuPWwubWF0Y2goX0MpLG4hPT1udWxsPyhpPStuWzFdLGY9K25bMl0sZD0rKG5bM118fDApKjYwLGI9NCk6KG49bC5tYXRjaChnQyksbiE9PW51bGwmJihpPStuWzFdLGY9KyhuWzJdfHwwKSo2MCxiPTMpKSk7bGV0IFQ9bltiXSxfPStuW2IrMV0sRT0rKG5bYisyXXx8MCk7c3dpdGNoKFQpe2Nhc2UiKyI6aT1pLV8sZj1mLUU7YnJlYWs7Y2FzZSItIjppPWkrXyxmPWYrRTticmVhaztjYXNlIloiOmJyZWFrO2RlZmF1bHQ6Zj1mK25ldyBEYXRlKERhdGUuVVRDKG8sYS0xLHIsaSxmKSkuZ2V0VGltZXpvbmVPZmZzZXQoKTticmVha319bGV0IHA9ZD09PTYwO2ZvcihwJiZkLS07Zj49NjA7KWYtPTYwLGkrKztmb3IoO2k+PTI0OylpLT0yNCxyKys7Zm9yKGg9bSYmYT09PTI/JG06UW1bYS0xXTtyPmg7KXItPWgsYSsrLGE+MTImJihhLT0xMixvKyspLGg9bSYmYT09PTI/JG06UW1bYS0xXTtmb3IoO2Y8MDspZis9NjAsaS0tO2Zvcig7aTwwOylpKz0yNCxyLS07Zm9yKDtyPDE7KWEtLSxhPDEmJihhKz0xMixvLS0pLGg9bSYmYT09PTI/JG06UW1bYS0xXSxyKz1oO2xldCB5PXRiKG8sYSxyLGksZixkLGMpO3JldHVybiBnKHQpPyhkaSh5WzBdLHlbMV0sdCkscmwodCkpOnQ9bmV3IEJlKHlbMF0seVsxXSx5dC5VVEMpLHAmJkJlLmFkZFNlY29uZHModCwxLHQpLHR9O0JlLm5vdz1mdW5jdGlvbihlKXtyZXR1cm4gQmUuZnJvbURhdGUobmV3IERhdGUsZSl9O2FsPW5ldyBCZSgwLDAseXQuVEFJKTtCZS50b0dyZWdvcmlhbkRhdGU9ZnVuY3Rpb24oZSx0KXtsZXQgbj0hMSxvPXgxKGUsYWwpO2cobyl8fChCZS5hZGRTZWNvbmRzKGUsLTEsYWwpLG89eDEoYWwsYWwpLG49ITApO2xldCBhPW8uZGF5TnVtYmVyLHI9by5zZWNvbmRzT2ZEYXk7cj49NDMyMDAmJihhKz0xKTtsZXQgaT1hKzY4NTY5fDAsZj00KmkvMTQ2MDk3fDA7aT1pLSgoMTQ2MDk3KmYrMykvNHwwKXwwO2xldCBkPTRlMyooaSsxKS8xNDYxMDAxfDA7aT1pLSgxNDYxKmQvNHwwKSszMXwwO2xldCBjPTgwKmkvMjQ0N3wwLHU9aS0oMjQ0NypjLzgwfDApfDA7aT1jLzExfDA7bGV0IGw9YysyLTEyKml8MCxoPTEwMCooZi00OSkrZCtpfDAsbT1yL2duLlNFQ09ORFNfUEVSX0hPVVJ8MCxiPXItbSpnbi5TRUNPTkRTX1BFUl9IT1VSLHA9Yi9nbi5TRUNPTkRTX1BFUl9NSU5VVEV8MDtiPWItcCpnbi5TRUNPTkRTX1BFUl9NSU5VVEU7bGV0IHk9YnwwLFQ9KGIteSkvZ24uU0VDT05EU19QRVJfTUlMTElTRUNPTkQ7cmV0dXJuIG0rPTEyLG0+MjMmJihtLT0yNCksbiYmKHkrPTEpLGcodCk/KHQueWVhcj1oLHQubW9udGg9bCx0LmRheT11LHQuaG91cj1tLHQubWludXRlPXAsdC5zZWNvbmQ9eSx0Lm1pbGxpc2Vjb25kPVQsdC5pc0xlYXBTZWNvbmQ9bix0KTpuZXcgSm0oaCxsLHUsbSxwLHksVCxuKX07QmUudG9EYXRlPWZ1bmN0aW9uKGUpe2xldCB0PUJlLnRvR3JlZ29yaWFuRGF0ZShlLE8xKSxuPXQuc2Vjb25kO3JldHVybiB0LmlzTGVhcFNlY29uZCYmKG4tPTEpLG5ldyBEYXRlKERhdGUuVVRDKHQueWVhcix0Lm1vbnRoLTEsdC5kYXksdC5ob3VyLHQubWludXRlLG4sdC5taWxsaXNlY29uZCkpfTtCZS50b0lzbzg2MDE9ZnVuY3Rpb24oZSx0KXtsZXQgbj1CZS50b0dyZWdvcmlhbkRhdGUoZSxPMSksbz1uLnllYXIsYT1uLm1vbnRoLHI9bi5kYXksaT1uLmhvdXIsZj1uLm1pbnV0ZSxkPW4uc2Vjb25kLGM9bi5taWxsaXNlY29uZDtvPT09MWU0JiZhPT09MSYmcj09PTEmJmk9PT0wJiZmPT09MCYmZD09PTAmJmM9PT0wJiYobz05OTk5LGE9MTIscj0zMSxpPTI0KTtsZXQgdTtpZighZyh0KSYmYyE9PTApe2xldCBsPWMqLjAxO3JldHVybiB1PWw8MWUtNj9sLnRvRml4ZWQoMjApLnJlcGxhY2UoIi4iLCIiKS5yZXBsYWNlKC8wKyQvLCIiKTpsLnRvU3RyaW5nKCkucmVwbGFjZSgiLiIsIiIpLGAke28udG9TdHJpbmcoKS5wYWRTdGFydCg0LCIwIil9LSR7YS50b1N0cmluZygpLnBhZFN0YXJ0KDIsIjAiKX0tJHtyLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwiMCIpfVQke2kudG9TdHJpbmcoKS5wYWRTdGFydCgyLCIwIil9OiR7Zi50b1N0cmluZygpLnBhZFN0YXJ0KDIsIjAiKX06JHtkLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwiMCIpfS4ke3V9WmB9cmV0dXJuIWcodCl8fHQ9PT0wP2Ake28udG9TdHJpbmcoKS5wYWRTdGFydCg0LCIwIil9LSR7YS50b1N0cmluZygpLnBhZFN0YXJ0KDIsIjAiKX0tJHtyLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwiMCIpfVQke2kudG9TdHJpbmcoKS5wYWRTdGFydCgyLCIwIil9OiR7Zi50b1N0cmluZygpLnBhZFN0YXJ0KDIsIjAiKX06JHtkLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwiMCIpfVpgOih1PShjKi4wMSkudG9GaXhlZCh0KS5yZXBsYWNlKCIuIiwiIikuc2xpY2UoMCx0KSxgJHtvLnRvU3RyaW5nKCkucGFkU3RhcnQoNCwiMCIpfS0ke2EudG9TdHJpbmcoKS5wYWRTdGFydCgyLCIwIil9LSR7ci50b1N0cmluZygpLnBhZFN0YXJ0KDIsIjAiKX1UJHtpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwiMCIpfToke2YudG9TdHJpbmcoKS5wYWRTdGFydCgyLCIwIil9OiR7ZC50b1N0cmluZygpLnBhZFN0YXJ0KDIsIjAiKX0uJHt1fVpgKX07QmUuY2xvbmU9ZnVuY3Rpb24oZSx0KXtpZihnKGUpKXJldHVybiBnKHQpPyh0LmRheU51bWJlcj1lLmRheU51bWJlcix0LnNlY29uZHNPZkRheT1lLnNlY29uZHNPZkRheSx0KTpuZXcgQmUoZS5kYXlOdW1iZXIsZS5zZWNvbmRzT2ZEYXkseXQuVEFJKX07QmUuY29tcGFyZT1mdW5jdGlvbihlLHQpe2xldCBuPWUuZGF5TnVtYmVyLXQuZGF5TnVtYmVyO3JldHVybiBuIT09MD9uOmUuc2Vjb25kc09mRGF5LXQuc2Vjb25kc09mRGF5fTtCZS5lcXVhbHM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT09PXR8fGcoZSkmJmcodCkmJmUuZGF5TnVtYmVyPT09dC5kYXlOdW1iZXImJmUuc2Vjb25kc09mRGF5PT09dC5zZWNvbmRzT2ZEYXl9O0JlLmVxdWFsc0Vwc2lsb249ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBuPW4/PzAsZT09PXR8fGcoZSkmJmcodCkmJk1hdGguYWJzKEJlLnNlY29uZHNEaWZmZXJlbmNlKGUsdCkpPD1ufTtCZS50b3RhbERheXM9ZnVuY3Rpb24oZSl7cmV0dXJuIGUuZGF5TnVtYmVyK2Uuc2Vjb25kc09mRGF5L2duLlNFQ09ORFNfUEVSX0RBWX07QmUuc2Vjb25kc0RpZmZlcmVuY2U9ZnVuY3Rpb24oZSx0KXtyZXR1cm4oZS5kYXlOdW1iZXItdC5kYXlOdW1iZXIpKmduLlNFQ09ORFNfUEVSX0RBWSsoZS5zZWNvbmRzT2ZEYXktdC5zZWNvbmRzT2ZEYXkpfTtCZS5kYXlzRGlmZmVyZW5jZT1mdW5jdGlvbihlLHQpe2xldCBuPWUuZGF5TnVtYmVyLXQuZGF5TnVtYmVyLG89KGUuc2Vjb25kc09mRGF5LXQuc2Vjb25kc09mRGF5KS9nbi5TRUNPTkRTX1BFUl9EQVk7cmV0dXJuIG4rb307QmUuY29tcHV0ZVRhaU1pbnVzVXRjPWZ1bmN0aW9uKGUpe0pjLmp1bGlhbkRhdGU9ZTtsZXQgdD1CZS5sZWFwU2Vjb25kcyxuPV9hKHQsSmMsZWIpO3JldHVybiBuPDAmJihuPX5uLC0tbixuPDAmJihuPTApKSx0W25dLm9mZnNldH07QmUuYWRkU2Vjb25kcz1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGRpKGUuZGF5TnVtYmVyLGUuc2Vjb25kc09mRGF5K3Qsbil9O0JlLmFkZE1pbnV0ZXM9ZnVuY3Rpb24oZSx0LG4pe2xldCBvPWUuc2Vjb25kc09mRGF5K3QqZ24uU0VDT05EU19QRVJfTUlOVVRFO3JldHVybiBkaShlLmRheU51bWJlcixvLG4pfTtCZS5hZGRIb3Vycz1mdW5jdGlvbihlLHQsbil7bGV0IG89ZS5zZWNvbmRzT2ZEYXkrdCpnbi5TRUNPTkRTX1BFUl9IT1VSO3JldHVybiBkaShlLmRheU51bWJlcixvLG4pfTtCZS5hZGREYXlzPWZ1bmN0aW9uKGUsdCxuKXtsZXQgbz1lLmRheU51bWJlcit0O3JldHVybiBkaShvLGUuc2Vjb25kc09mRGF5LG4pfTtCZS5sZXNzVGhhbj1mdW5jdGlvbihlLHQpe3JldHVybiBCZS5jb21wYXJlKGUsdCk8MH07QmUubGVzc1RoYW5PckVxdWFscz1mdW5jdGlvbihlLHQpe3JldHVybiBCZS5jb21wYXJlKGUsdCk8PTB9O0JlLmdyZWF0ZXJUaGFuPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIEJlLmNvbXBhcmUoZSx0KT4wfTtCZS5ncmVhdGVyVGhhbk9yRXF1YWxzPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIEJlLmNvbXBhcmUoZSx0KT49MH07QmUucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKGUpe3JldHVybiBCZS5jbG9uZSh0aGlzLGUpfTtCZS5wcm90b3R5cGUuZXF1YWxzPWZ1bmN0aW9uKGUpe3JldHVybiBCZS5lcXVhbHModGhpcyxlKX07QmUucHJvdG90eXBlLmVxdWFsc0Vwc2lsb249ZnVuY3Rpb24oZSx0KXtyZXR1cm4gQmUuZXF1YWxzRXBzaWxvbih0aGlzLGUsdCl9O0JlLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiBCZS50b0lzbzg2MDEodGhpcyl9O0JlLmxlYXBTZWNvbmRzPVtuZXcgUXQobmV3IEJlKDI0NDEzMTcsNDMyMTAseXQuVEFJKSwxMCksbmV3IFF0KG5ldyBCZSgyNDQxNDk5LDQzMjExLHl0LlRBSSksMTEpLG5ldyBRdChuZXcgQmUoMjQ0MTY4Myw0MzIxMix5dC5UQUkpLDEyKSxuZXcgUXQobmV3IEJlKDI0NDIwNDgsNDMyMTMseXQuVEFJKSwxMyksbmV3IFF0KG5ldyBCZSgyNDQyNDEzLDQzMjE0LHl0LlRBSSksMTQpLG5ldyBRdChuZXcgQmUoMjQ0Mjc3OCw0MzIxNSx5dC5UQUkpLDE1KSxuZXcgUXQobmV3IEJlKDI0NDMxNDQsNDMyMTYseXQuVEFJKSwxNiksbmV3IFF0KG5ldyBCZSgyNDQzNTA5LDQzMjE3LHl0LlRBSSksMTcpLG5ldyBRdChuZXcgQmUoMjQ0Mzg3NCw0MzIxOCx5dC5UQUkpLDE4KSxuZXcgUXQobmV3IEJlKDI0NDQyMzksNDMyMTkseXQuVEFJKSwxOSksbmV3IFF0KG5ldyBCZSgyNDQ0Nzg2LDQzMjIwLHl0LlRBSSksMjApLG5ldyBRdChuZXcgQmUoMjQ0NTE1MSw0MzIyMSx5dC5UQUkpLDIxKSxuZXcgUXQobmV3IEJlKDI0NDU1MTYsNDMyMjIseXQuVEFJKSwyMiksbmV3IFF0KG5ldyBCZSgyNDQ2MjQ3LDQzMjIzLHl0LlRBSSksMjMpLG5ldyBRdChuZXcgQmUoMjQ0NzE2MSw0MzIyNCx5dC5UQUkpLDI0KSxuZXcgUXQobmV3IEJlKDI0NDc4OTIsNDMyMjUseXQuVEFJKSwyNSksbmV3IFF0KG5ldyBCZSgyNDQ4MjU3LDQzMjI2LHl0LlRBSSksMjYpLG5ldyBRdChuZXcgQmUoMjQ0ODgwNCw0MzIyNyx5dC5UQUkpLDI3KSxuZXcgUXQobmV3IEJlKDI0NDkxNjksNDMyMjgseXQuVEFJKSwyOCksbmV3IFF0KG5ldyBCZSgyNDQ5NTM0LDQzMjI5LHl0LlRBSSksMjkpLG5ldyBRdChuZXcgQmUoMjQ1MDA4Myw0MzIzMCx5dC5UQUkpLDMwKSxuZXcgUXQobmV3IEJlKDI0NTA2MzAsNDMyMzEseXQuVEFJKSwzMSksbmV3IFF0KG5ldyBCZSgyNDUxMTc5LDQzMjMyLHl0LlRBSSksMzIpLG5ldyBRdChuZXcgQmUoMjQ1MzczNiw0MzIzMyx5dC5UQUkpLDMzKSxuZXcgUXQobmV3IEJlKDI0NTQ4MzIsNDMyMzQseXQuVEFJKSwzNCksbmV3IFF0KG5ldyBCZSgyNDU2MTA5LDQzMjM1LHl0LlRBSSksMzUpLG5ldyBRdChuZXcgQmUoMjQ1NzIwNCw0MzIzNix5dC5UQUkpLDM2KSxuZXcgUXQobmV3IEJlKDI0NTc3NTQsNDMyMzcseXQuVEFJKSwzNyldO0puPUJlfSk7dmFyIFMxPWVvKChaYyxRYyk9PnsvKiEgaHR0cHM6Ly9tdGhzLmJlL3B1bnljb2RlIHYxLjQuMCBieSBAbWF0aGlhcyAqLyhmdW5jdGlvbihlKXt2YXIgdD10eXBlb2YgWmM9PSJvYmplY3QiJiZaYyYmIVpjLm5vZGVUeXBlJiZaYyxuPXR5cGVvZiBRYz09Im9iamVjdCImJlFjJiYhUWMubm9kZVR5cGUmJlFjLG89dHlwZW9mIGdsb2JhbD09Im9iamVjdCImJmdsb2JhbDsoby5nbG9iYWw9PT1vfHxvLndpbmRvdz09PW98fG8uc2VsZj09PW8pJiYoZT1vKTt2YXIgYSxyPTIxNDc0ODM2NDcsaT0zNixmPTEsZD0yNixjPTM4LHU9NzAwLGw9NzIsaD0xMjgsbT0iLSIsYj0vXnhuLS0vLHA9L1teXHgyMC1ceDdFXS8seT0vW1x4MkVcdTMwMDJcdUZGMEVcdUZGNjFdL2csVD17b3ZlcmZsb3c6Ik92ZXJmbG93OiBpbnB1dCBuZWVkcyB3aWRlciBpbnRlZ2VycyB0byBwcm9jZXNzIiwibm90LWJhc2ljIjoiSWxsZWdhbCBpbnB1dCA+PSAweDgwIChub3QgYSBiYXNpYyBjb2RlIHBvaW50KSIsImludmFsaWQtaW5wdXQiOiJJbnZhbGlkIGlucHV0In0sXz1pLWYsRT1NYXRoLmZsb29yLHc9U3RyaW5nLmZyb21DaGFyQ29kZSxSO2Z1bmN0aW9uIFMoRCl7dGhyb3cgbmV3IFJhbmdlRXJyb3IoVFtEXSl9ZnVuY3Rpb24gQyhELEcpe2Zvcih2YXIgSD1ELmxlbmd0aCxPPVtdO0gtLTspT1tIXT1HKERbSF0pO3JldHVybiBPfWZ1bmN0aW9uIEkoRCxHKXt2YXIgSD1ELnNwbGl0KCJAIiksTz0iIjtILmxlbmd0aD4xJiYoTz1IWzBdKyJAIixEPUhbMV0pLEQ9RC5yZXBsYWNlKHksIi4iKTt2YXIgWj1ELnNwbGl0KCIuIiksb2U9QyhaLEcpLmpvaW4oIi4iKTtyZXR1cm4gTytvZX1mdW5jdGlvbiBOKEQpe2Zvcih2YXIgRz1bXSxIPTAsTz1ELmxlbmd0aCxaLG9lO0g8TzspWj1ELmNoYXJDb2RlQXQoSCsrKSxaPj01NTI5NiYmWjw9NTYzMTkmJkg8Tz8ob2U9RC5jaGFyQ29kZUF0KEgrKyksKG9lJjY0NTEyKT09NTYzMjA/Ry5wdXNoKCgoWiYxMDIzKTw8MTApKyhvZSYxMDIzKSs2NTUzNik6KEcucHVzaChaKSxILS0pKTpHLnB1c2goWik7cmV0dXJuIEd9ZnVuY3Rpb24gUChEKXtyZXR1cm4gQyhELGZ1bmN0aW9uKEcpe3ZhciBIPSIiO3JldHVybiBHPjY1NTM1JiYoRy09NjU1MzYsSCs9dyhHPj4+MTAmMTAyM3w1NTI5NiksRz01NjMyMHxHJjEwMjMpLEgrPXcoRyksSH0pLmpvaW4oIiIpfWZ1bmN0aW9uIEYoRCl7cmV0dXJuIEQtNDg8MTA/RC0yMjpELTY1PDI2P0QtNjU6RC05NzwyNj9ELTk3Oml9ZnVuY3Rpb24gQShELEcpe3JldHVybiBEKzIyKzc1KihEPDI2KS0oKEchPTApPDw1KX1mdW5jdGlvbiB4KEQsRyxIKXt2YXIgTz0wO2ZvcihEPUg/RShEL3UpOkQ+PjEsRCs9RShEL0cpO0Q+XypkPj4xO08rPWkpRD1FKEQvXyk7cmV0dXJuIEUoTysoXysxKSpELyhEK2MpKX1mdW5jdGlvbiBNKEQpe3ZhciBHPVtdLEg9RC5sZW5ndGgsTyxaPTAsb2U9aCxjZT1sLGZlLGVlLGJlLGxlLHBlLHVlLGFlLEFlLE5lO2ZvcihmZT1ELmxhc3RJbmRleE9mKG0pLGZlPDAmJihmZT0wKSxlZT0wO2VlPGZlOysrZWUpRC5jaGFyQ29kZUF0KGVlKT49MTI4JiZTKCJub3QtYmFzaWMiKSxHLnB1c2goRC5jaGFyQ29kZUF0KGVlKSk7Zm9yKGJlPWZlPjA/ZmUrMTowO2JlPEg7KXtmb3IobGU9WixwZT0xLHVlPWk7YmU+PUgmJlMoImludmFsaWQtaW5wdXQiKSxhZT1GKEQuY2hhckNvZGVBdChiZSsrKSksKGFlPj1pfHxhZT5FKChyLVopL3BlKSkmJlMoIm92ZXJmbG93IiksWis9YWUqcGUsQWU9dWU8PWNlP2Y6dWU+PWNlK2Q/ZDp1ZS1jZSwhKGFlPEFlKTt1ZSs9aSlOZT1pLUFlLHBlPkUoci9OZSkmJlMoIm92ZXJmbG93IikscGUqPU5lO089Ry5sZW5ndGgrMSxjZT14KFotbGUsTyxsZT09MCksRShaL08pPnItb2UmJlMoIm92ZXJmbG93Iiksb2UrPUUoWi9PKSxaJT1PLEcuc3BsaWNlKForKywwLG9lKX1yZXR1cm4gUChHKX1mdW5jdGlvbiB2KEQpe3ZhciBHLEgsTyxaLG9lLGNlLGZlLGVlLGJlLGxlLHBlLHVlPVtdLGFlLEFlLE5lLGV0O2ZvcihEPU4oRCksYWU9RC5sZW5ndGgsRz1oLEg9MCxvZT1sLGNlPTA7Y2U8YWU7KytjZSlwZT1EW2NlXSxwZTwxMjgmJnVlLnB1c2godyhwZSkpO2ZvcihPPVo9dWUubGVuZ3RoLFomJnVlLnB1c2gobSk7TzxhZTspe2ZvcihmZT1yLGNlPTA7Y2U8YWU7KytjZSlwZT1EW2NlXSxwZT49RyYmcGU8ZmUmJihmZT1wZSk7Zm9yKEFlPU8rMSxmZS1HPkUoKHItSCkvQWUpJiZTKCJvdmVyZmxvdyIpLEgrPShmZS1HKSpBZSxHPWZlLGNlPTA7Y2U8YWU7KytjZSlpZihwZT1EW2NlXSxwZTxHJiYrK0g+ciYmUygib3ZlcmZsb3ciKSxwZT09Ryl7Zm9yKGVlPUgsYmU9aTtsZT1iZTw9b2U/ZjpiZT49b2UrZD9kOmJlLW9lLCEoZWU8bGUpO2JlKz1pKWV0PWVlLWxlLE5lPWktbGUsdWUucHVzaCh3KEEobGUrZXQlTmUsMCkpKSxlZT1FKGV0L05lKTt1ZS5wdXNoKHcoQShlZSwwKSkpLG9lPXgoSCxBZSxPPT1aKSxIPTAsKytPfSsrSCwrK0d9cmV0dXJuIHVlLmpvaW4oIiIpfWZ1bmN0aW9uIFUoRCl7cmV0dXJuIEkoRCxmdW5jdGlvbihHKXtyZXR1cm4gYi50ZXN0KEcpP00oRy5zbGljZSg0KS50b0xvd2VyQ2FzZSgpKTpHfSl9ZnVuY3Rpb24geihEKXtyZXR1cm4gSShELGZ1bmN0aW9uKEcpe3JldHVybiBwLnRlc3QoRyk/InhuLS0iK3YoRyk6R30pfWlmKGE9e3ZlcnNpb246IjEuMy4yIix1Y3MyOntkZWNvZGU6TixlbmNvZGU6UH0sZGVjb2RlOk0sZW5jb2RlOnYsdG9BU0NJSTp6LHRvVW5pY29kZTpVfSx0eXBlb2YgZGVmaW5lPT0iZnVuY3Rpb24iJiZ0eXBlb2YgZGVmaW5lLmFtZD09Im9iamVjdCImJmRlZmluZS5hbWQpZGVmaW5lKCJwdW55Y29kZSIsZnVuY3Rpb24oKXtyZXR1cm4gYX0pO2Vsc2UgaWYodCYmbilpZihRYy5leHBvcnRzPT10KW4uZXhwb3J0cz1hO2Vsc2UgZm9yKFIgaW4gYSlhLmhhc093blByb3BlcnR5KFIpJiYodFtSXT1hW1JdKTtlbHNlIGUucHVueWNvZGU9YX0pKFpjKX0pO3ZhciBNMT1lbygoQzEsY2wpPT57LyohCiAqIFVSSS5qcyAtIE11dGF0aW5nIFVSTHMKICogSVB2NiBTdXBwb3J0CiAqCiAqIFZlcnNpb246IDEuMTkuMTEKICoKICogQXV0aG9yOiBSb2RuZXkgUmVobQogKiBXZWI6IGh0dHA6Ly9tZWRpYWxpemUuZ2l0aHViLmlvL1VSSS5qcy8KICoKICogTGljZW5zZWQgdW5kZXIKICogICBNSVQgTGljZW5zZSBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL21pdC1saWNlbnNlCiAqCiAqLyhmdW5jdGlvbihlLHQpeyJ1c2Ugc3RyaWN0Ijt0eXBlb2YgY2w9PSJvYmplY3QiJiZjbC5leHBvcnRzP2NsLmV4cG9ydHM9dCgpOnR5cGVvZiBkZWZpbmU9PSJmdW5jdGlvbiImJmRlZmluZS5hbWQ/ZGVmaW5lKHQpOmUuSVB2Nj10KGUpfSkoQzEsZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiO3ZhciB0PWUmJmUuSVB2NjtmdW5jdGlvbiBuKGEpe3ZhciByPWEudG9Mb3dlckNhc2UoKSxpPXIuc3BsaXQoIjoiKSxmPWkubGVuZ3RoLGQ9ODtpWzBdPT09IiImJmlbMV09PT0iIiYmaVsyXT09PSIiPyhpLnNoaWZ0KCksaS5zaGlmdCgpKTppWzBdPT09IiImJmlbMV09PT0iIj9pLnNoaWZ0KCk6aVtmLTFdPT09IiImJmlbZi0yXT09PSIiJiZpLnBvcCgpLGY9aS5sZW5ndGgsaVtmLTFdLmluZGV4T2YoIi4iKSE9PS0xJiYoZD03KTt2YXIgYztmb3IoYz0wO2M8ZiYmaVtjXSE9PSIiO2MrKyk7aWYoYzxkKWZvcihpLnNwbGljZShjLDEsIjAwMDAiKTtpLmxlbmd0aDxkOylpLnNwbGljZShjLDAsIjAwMDAiKTtmb3IodmFyIHUsbD0wO2w8ZDtsKyspe3U9aVtsXS5zcGxpdCgiIik7Zm9yKHZhciBoPTA7aDwzJiYodVswXT09PSIwIiYmdS5sZW5ndGg+MSk7aCsrKXUuc3BsaWNlKDAsMSk7aVtsXT11LmpvaW4oIiIpfXZhciBtPS0xLGI9MCxwPTAseT0tMSxUPSExO2ZvcihsPTA7bDxkO2wrKylUP2lbbF09PT0iMCI/cCs9MTooVD0hMSxwPmImJihtPXksYj1wKSk6aVtsXT09PSIwIiYmKFQ9ITAseT1sLHA9MSk7cD5iJiYobT15LGI9cCksYj4xJiZpLnNwbGljZShtLGIsIiIpLGY9aS5sZW5ndGg7dmFyIF89IiI7Zm9yKGlbMF09PT0iIiYmKF89IjoiKSxsPTA7bDxmJiYoXys9aVtsXSxsIT09Zi0xKTtsKyspXys9IjoiO3JldHVybiBpW2YtMV09PT0iIiYmKF8rPSI6IiksX31mdW5jdGlvbiBvKCl7cmV0dXJuIGUuSVB2Nj09PXRoaXMmJihlLklQdjY9dCksdGhpc31yZXR1cm57YmVzdDpuLG5vQ29uZmxpY3Q6b319KX0pO3ZhciBJMT1lbygoTjEsc2wpPT57LyohCiAqIFVSSS5qcyAtIE11dGF0aW5nIFVSTHMKICogU2Vjb25kIExldmVsIERvbWFpbiAoU0xEKSBTdXBwb3J0CiAqCiAqIFZlcnNpb246IDEuMTkuMTEKICoKICogQXV0aG9yOiBSb2RuZXkgUmVobQogKiBXZWI6IGh0dHA6Ly9tZWRpYWxpemUuZ2l0aHViLmlvL1VSSS5qcy8KICoKICogTGljZW5zZWQgdW5kZXIKICogICBNSVQgTGljZW5zZSBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL21pdC1saWNlbnNlCiAqCiAqLyhmdW5jdGlvbihlLHQpeyJ1c2Ugc3RyaWN0Ijt0eXBlb2Ygc2w9PSJvYmplY3QiJiZzbC5leHBvcnRzP3NsLmV4cG9ydHM9dCgpOnR5cGVvZiBkZWZpbmU9PSJmdW5jdGlvbiImJmRlZmluZS5hbWQ/ZGVmaW5lKHQpOmUuU2Vjb25kTGV2ZWxEb21haW5zPXQoZSl9KShOMSxmdW5jdGlvbihlKXsidXNlIHN0cmljdCI7dmFyIHQ9ZSYmZS5TZWNvbmRMZXZlbERvbWFpbnMsbj17bGlzdDp7YWM6IiBjb20gZ292IG1pbCBuZXQgb3JnICIsYWU6IiBhYyBjbyBnb3YgbWlsIG5hbWUgbmV0IG9yZyBwcm8gc2NoICIsYWY6IiBjb20gZWR1IGdvdiBuZXQgb3JnICIsYWw6IiBjb20gZWR1IGdvdiBtaWwgbmV0IG9yZyAiLGFvOiIgY28gZWQgZ3YgaXQgb2cgcGIgIixhcjoiIGNvbSBlZHUgZ29iIGdvdiBpbnQgbWlsIG5ldCBvcmcgdHVyICIsYXQ6IiBhYyBjbyBndiBvciAiLGF1OiIgYXNuIGNvbSBjc2lybyBlZHUgZ292IGlkIG5ldCBvcmcgIixiYToiIGNvIGNvbSBlZHUgZ292IG1pbCBuZXQgb3JnIHJzIHVuYmkgdW5tbyB1bnNhIHVudHogdW56ZSAiLGJiOiIgYml6IGNvIGNvbSBlZHUgZ292IGluZm8gbmV0IG9yZyBzdG9yZSB0diAiLGJoOiIgYml6IGNjIGNvbSBlZHUgZ292IGluZm8gbmV0IG9yZyAiLGJuOiIgY29tIGVkdSBnb3YgbmV0IG9yZyAiLGJvOiIgY29tIGVkdSBnb2IgZ292IGludCBtaWwgbmV0IG9yZyB0diAiLGJyOiIgYWRtIGFkdiBhZ3IgYW0gYXJxIGFydCBhdG8gYiBiaW8gYmxvZyBibWQgY2ltIGNuZyBjbnQgY29tIGNvb3AgZWNuIGVkdSBlbmcgZXNwIGV0YyBldGkgZmFyIGZsb2cgZm0gZm5kIGZvdCBmc3QgZzEyIGdnZiBnb3YgaW1iIGluZCBpbmYgam9yIGp1cyBsZWwgbWF0IG1lZCBtaWwgbXVzIG5ldCBub20gbm90IG50ciBvZG8gb3JnIHBwZyBwcm8gcHNjIHBzaSBxc2wgcmVjIHNsZyBzcnYgdG1wIHRyZCB0dXIgdHYgdmV0IHZsb2cgd2lraSB6bGcgIixiczoiIGNvbSBlZHUgZ292IG5ldCBvcmcgIixiejoiIGR1IGV0IG9tIG92IHJnICIsY2E6IiBhYiBiYyBtYiBuYiBuZiBubCBucyBudCBudSBvbiBwZSBxYyBzayB5ayAiLGNrOiIgYml6IGNvIGVkdSBnZW4gZ292IGluZm8gbmV0IG9yZyAiLGNuOiIgYWMgYWggYmogY29tIGNxIGVkdSBmaiBnZCBnb3YgZ3MgZ3ggZ3ogaGEgaGIgaGUgaGkgaGwgaG4gamwganMganggbG4gbWlsIG5ldCBubSBueCBvcmcgcWggc2Mgc2Qgc2ggc24gc3ggdGogdHcgeGogeHogeW4gemogIixjbzoiIGNvbSBlZHUgZ292IG1pbCBuZXQgbm9tIG9yZyAiLGNyOiIgYWMgYyBjbyBlZCBmaSBnbyBvciBzYSAiLGN5OiIgYWMgYml6IGNvbSBla2xvZ2VzIGdvdiBsdGQgbmFtZSBuZXQgb3JnIHBhcmxpYW1lbnQgcHJlc3MgcHJvIHRtICIsZG86IiBhcnQgY29tIGVkdSBnb2IgZ292IG1pbCBuZXQgb3JnIHNsZCB3ZWIgIixkejoiIGFydCBhc3NvIGNvbSBlZHUgZ292IG5ldCBvcmcgcG9sICIsZWM6IiBjb20gZWR1IGZpbiBnb3YgaW5mbyBtZWQgbWlsIG5ldCBvcmcgcHJvICIsZWc6IiBjb20gZWR1IGV1biBnb3YgbWlsIG5hbWUgbmV0IG9yZyBzY2kgIixlcjoiIGNvbSBlZHUgZ292IGluZCBtaWwgbmV0IG9yZyByb2NoZXN0IHcgIixlczoiIGNvbSBlZHUgZ29iIG5vbSBvcmcgIixldDoiIGJpeiBjb20gZWR1IGdvdiBpbmZvIG5hbWUgbmV0IG9yZyAiLGZqOiIgYWMgYml6IGNvbSBpbmZvIG1pbCBuYW1lIG5ldCBvcmcgcHJvICIsZms6IiBhYyBjbyBnb3YgbmV0IG5vbSBvcmcgIixmcjoiIGFzc28gY29tIGYgZ291diBub20gcHJkIHByZXNzZSB0bSAiLGdnOiIgY28gbmV0IG9yZyAiLGdoOiIgY29tIGVkdSBnb3YgbWlsIG9yZyAiLGduOiIgYWMgY29tIGdvdiBuZXQgb3JnICIsZ3I6IiBjb20gZWR1IGdvdiBtaWwgbmV0IG9yZyAiLGd0OiIgY29tIGVkdSBnb2IgaW5kIG1pbCBuZXQgb3JnICIsZ3U6IiBjb20gZWR1IGdvdiBuZXQgb3JnICIsaGs6IiBjb20gZWR1IGdvdiBpZHYgbmV0IG9yZyAiLGh1OiIgMjAwMCBhZ3JhciBib2x0IGNhc2lubyBjaXR5IGNvIGVyb3RpY2EgZXJvdGlrYSBmaWxtIGZvcnVtIGdhbWVzIGhvdGVsIGluZm8gaW5nYXRsYW4gam9nYXN6IGtvbnl2ZWxvIGxha2FzIG1lZGlhIG5ld3Mgb3JnIHByaXYgcmVrbGFtIHNleCBzaG9wIHNwb3J0IHN1bGkgc3pleCB0bSB0b3pzZGUgdXRhemFzIHZpZGVvICIsaWQ6IiBhYyBjbyBnbyBtaWwgbmV0IG9yIHNjaCB3ZWIgIixpbDoiIGFjIGNvIGdvdiBpZGYgazEyIG11bmkgbmV0IG9yZyAiLGluOiIgYWMgY28gZWR1IGVybmV0IGZpcm0gZ2VuIGdvdiBpIGluZCBtaWwgbmV0IG5pYyBvcmcgcmVzICIsaXE6IiBjb20gZWR1IGdvdiBpIG1pbCBuZXQgb3JnICIsaXI6IiBhYyBjbyBkbnNzZWMgZ292IGkgaWQgbmV0IG9yZyBzY2ggIixpdDoiIGVkdSBnb3YgIixqZToiIGNvIG5ldCBvcmcgIixqbzoiIGNvbSBlZHUgZ292IG1pbCBuYW1lIG5ldCBvcmcgc2NoICIsanA6IiBhYyBhZCBjbyBlZCBnbyBnciBsZyBuZSBvciAiLGtlOiIgYWMgY28gZ28gaW5mbyBtZSBtb2JpIG5lIG9yIHNjICIsa2g6IiBjb20gZWR1IGdvdiBtaWwgbmV0IG9yZyBwZXIgIixraToiIGJpeiBjb20gZGUgZWR1IGdvdiBpbmZvIG1vYiBuZXQgb3JnIHRlbCAiLGttOiIgYXNzbyBjb20gY29vcCBlZHUgZ291diBrIG1lZGVjaW4gbWlsIG5vbSBub3RhaXJlcyBwaGFybWFjaWVucyBwcmVzc2UgdG0gdmV0ZXJpbmFpcmUgIixrbjoiIGVkdSBnb3YgbmV0IG9yZyAiLGtyOiIgYWMgYnVzYW4gY2h1bmdidWsgY2h1bmduYW0gY28gZGFlZ3UgZGFlamVvbiBlcyBnYW5nd29uIGdvIGd3YW5nanUgZ3llb25nYnVrIGd5ZW9uZ2dpIGd5ZW9uZ25hbSBocyBpbmNoZW9uIGplanUgamVvbmJ1ayBqZW9ubmFtIGsga2cgbWlsIG1zIG5lIG9yIHBlIHJlIHNjIHNlb3VsIHVsc2FuICIsa3c6IiBjb20gZWR1IGdvdiBuZXQgb3JnICIsa3k6IiBjb20gZWR1IGdvdiBuZXQgb3JnICIsa3o6IiBjb20gZWR1IGdvdiBtaWwgbmV0IG9yZyAiLGxiOiIgY29tIGVkdSBnb3YgbmV0IG9yZyAiLGxrOiIgYXNzbiBjb20gZWR1IGdvdiBncnAgaG90ZWwgaW50IGx0ZCBuZXQgbmdvIG9yZyBzY2ggc29jIHdlYiAiLGxyOiIgY29tIGVkdSBnb3YgbmV0IG9yZyAiLGx2OiIgYXNuIGNvbSBjb25mIGVkdSBnb3YgaWQgbWlsIG5ldCBvcmcgIixseToiIGNvbSBlZHUgZ292IGlkIG1lZCBuZXQgb3JnIHBsYyBzY2ggIixtYToiIGFjIGNvIGdvdiBtIG5ldCBvcmcgcHJlc3MgIixtYzoiIGFzc28gdG0gIixtZToiIGFjIGNvIGVkdSBnb3YgaXRzIG5ldCBvcmcgcHJpdiAiLG1nOiIgY29tIGVkdSBnb3YgbWlsIG5vbSBvcmcgcHJkIHRtICIsbWs6IiBjb20gZWR1IGdvdiBpbmYgbmFtZSBuZXQgb3JnIHBybyAiLG1sOiIgY29tIGVkdSBnb3YgbmV0IG9yZyBwcmVzc2UgIixtbjoiIGVkdSBnb3Ygb3JnICIsbW86IiBjb20gZWR1IGdvdiBuZXQgb3JnICIsbXQ6IiBjb20gZWR1IGdvdiBuZXQgb3JnICIsbXY6IiBhZXJvIGJpeiBjb20gY29vcCBlZHUgZ292IGluZm8gaW50IG1pbCBtdXNldW0gbmFtZSBuZXQgb3JnIHBybyAiLG13OiIgYWMgY28gY29tIGNvb3AgZWR1IGdvdiBpbnQgbXVzZXVtIG5ldCBvcmcgIixteDoiIGNvbSBlZHUgZ29iIG5ldCBvcmcgIixteToiIGNvbSBlZHUgZ292IG1pbCBuYW1lIG5ldCBvcmcgc2NoICIsbmY6IiBhcnRzIGNvbSBmaXJtIGluZm8gbmV0IG90aGVyIHBlciByZWMgc3RvcmUgd2ViICIsbmc6IiBiaXogY29tIGVkdSBnb3YgbWlsIG1vYmkgbmFtZSBuZXQgb3JnIHNjaCAiLG5pOiIgYWMgY28gY29tIGVkdSBnb2IgbWlsIG5ldCBub20gb3JnICIsbnA6IiBjb20gZWR1IGdvdiBtaWwgbmV0IG9yZyAiLG5yOiIgYml6IGNvbSBlZHUgZ292IGluZm8gbmV0IG9yZyAiLG9tOiIgYWMgYml6IGNvIGNvbSBlZHUgZ292IG1lZCBtaWwgbXVzZXVtIG5ldCBvcmcgcHJvIHNjaCAiLHBlOiIgY29tIGVkdSBnb2IgbWlsIG5ldCBub20gb3JnIHNsZCAiLHBoOiIgY29tIGVkdSBnb3YgaSBtaWwgbmV0IG5nbyBvcmcgIixwazoiIGJpeiBjb20gZWR1IGZhbSBnb2IgZ29rIGdvbiBnb3AgZ29zIGdvdiBuZXQgb3JnIHdlYiAiLHBsOiIgYXJ0IGJpYWx5c3RvayBiaXogY29tIGVkdSBnZGEgZ2RhbnNrIGdvcnpvdyBnb3YgaW5mbyBrYXRvd2ljZSBrcmFrb3cgbG9keiBsdWJsaW4gbWlsIG5ldCBuZ28gb2xzenR5biBvcmcgcG96bmFuIHB3ciByYWRvbSBzbHVwc2sgc3pjemVjaW4gdG9ydW4gd2Fyc3phd2Egd2F3IHdyb2Mgd3JvY2xhdyB6Z29yYSAiLHByOiIgYWMgYml6IGNvbSBlZHUgZXN0IGdvdiBpbmZvIGlzbGEgbmFtZSBuZXQgb3JnIHBybyBwcm9mICIscHM6IiBjb20gZWR1IGdvdiBuZXQgb3JnIHBsbyBzZWMgIixwdzoiIGJlbGF1IGNvIGVkIGdvIG5lIG9yICIscm86IiBhcnRzIGNvbSBmaXJtIGluZm8gbm9tIG50IG9yZyByZWMgc3RvcmUgdG0gd3d3ICIscnM6IiBhYyBjbyBlZHUgZ292IGluIG9yZyAiLHNiOiIgY29tIGVkdSBnb3YgbmV0IG9yZyAiLHNjOiIgY29tIGVkdSBnb3YgbmV0IG9yZyAiLHNoOiIgY28gY29tIGVkdSBnb3YgbmV0IG5vbSBvcmcgIixzbDoiIGNvbSBlZHUgZ292IG5ldCBvcmcgIixzdDoiIGNvIGNvbSBjb25zdWxhZG8gZWR1IGVtYmFpeGFkYSBnb3YgbWlsIG5ldCBvcmcgcHJpbmNpcGUgc2FvdG9tZSBzdG9yZSAiLHN2OiIgY29tIGVkdSBnb2Igb3JnIHJlZCAiLHN6OiIgYWMgY28gb3JnICIsdHI6IiBhdiBiYnMgYmVsIGJpeiBjb20gZHIgZWR1IGdlbiBnb3YgaW5mbyBrMTIgbmFtZSBuZXQgb3JnIHBvbCB0ZWwgdHNrIHR2IHdlYiAiLHR0OiIgYWVybyBiaXogY2F0IGNvIGNvbSBjb29wIGVkdSBnb3YgaW5mbyBpbnQgam9icyBtaWwgbW9iaSBtdXNldW0gbmFtZSBuZXQgb3JnIHBybyB0ZWwgdHJhdmVsICIsdHc6IiBjbHViIGNvbSBlYml6IGVkdSBnYW1lIGdvdiBpZHYgbWlsIG5ldCBvcmcgIixtdToiIGFjIGNvIGNvbSBnb3YgbmV0IG9yIG9yZyAiLG16OiIgYWMgY28gZWR1IGdvdiBvcmcgIixuYToiIGNvIGNvbSAiLG56OiIgYWMgY28gY3JpIGdlZWsgZ2VuIGdvdnQgaGVhbHRoIGl3aSBtYW9yaSBtaWwgbmV0IG9yZyBwYXJsaWFtZW50IHNjaG9vbCAiLHBhOiIgYWJvIGFjIGNvbSBlZHUgZ29iIGluZyBtZWQgbmV0IG5vbSBvcmcgc2xkICIscHQ6IiBjb20gZWR1IGdvdiBpbnQgbmV0IG5vbWUgb3JnIHB1YmwgIixweToiIGNvbSBlZHUgZ292IG1pbCBuZXQgb3JnICIscWE6IiBjb20gZWR1IGdvdiBtaWwgbmV0IG9yZyAiLHJlOiIgYXNzbyBjb20gbm9tICIscnU6IiBhYyBhZHlnZXlhIGFsdGFpIGFtdXIgYXJraGFuZ2Vsc2sgYXN0cmFraGFuIGJhc2hraXJpYSBiZWxnb3JvZCBiaXIgYnJ5YW5zayBidXJ5YXRpYSBjYmcgY2hlbCBjaGVseWFiaW5zayBjaGl0YSBjaHVrb3RrYSBjaHV2YXNoaWEgY29tIGRhZ2VzdGFuIGUtYnVyZyBlZHUgZ292IGdyb3pueSBpbnQgaXJrdXRzayBpdmFub3ZvIGl6aGV2c2sgamFyIGpvc2hrYXItb2xhIGthbG15a2lhIGthbHVnYSBrYW1jaGF0a2Ega2FyZWxpYSBrYXphbiBrY2hyIGtlbWVyb3ZvIGtoYWJhcm92c2sga2hha2Fzc2lhIGtodiBraXJvdiBrb2VuaWcga29taSBrb3N0cm9tYSBrcmFub3lhcnNrIGt1YmFuIGt1cmdhbiBrdXJzayBsaXBldHNrIG1hZ2FkYW4gbWFyaSBtYXJpLWVsIG1hcmluZSBtaWwgbW9yZG92aWEgbW9zcmVnIG1zayBtdXJtYW5zayBuYWxjaGlrIG5ldCBubm92IG5vdiBub3Zvc2liaXJzayBuc2sgb21zayBvcmVuYnVyZyBvcmcgb3J5b2wgcGVuemEgcGVybSBwcCBwc2tvdiBwdHogcm5kIHJ5YXphbiBzYWtoYWxpbiBzYW1hcmEgc2FyYXRvdiBzaW1iaXJzayBzbW9sZW5zayBzcGIgc3RhdnJvcG9sIHN0diBzdXJndXQgdGFtYm92IHRhdGFyc3RhbiB0b20gdG9tc2sgdHNhcml0c3luIHRzayB0dWxhIHR1dmEgdHZlciB0eXVtZW4gdWRtIHVkbXVydGlhIHVsYW4tdWRlIHZsYWRpa2F2a2F6IHZsYWRpbWlyIHZsYWRpdm9zdG9rIHZvbGdvZ3JhZCB2b2xvZ2RhIHZvcm9uZXpoIHZybiB2eWF0a2EgeWFrdXRpYSB5YW1hbCB5ZWthdGVyaW5idXJnIHl1emhuby1zYWtoYWxpbnNrICIscnc6IiBhYyBjbyBjb20gZWR1IGdvdXYgZ292IGludCBtaWwgbmV0ICIsc2E6IiBjb20gZWR1IGdvdiBtZWQgbmV0IG9yZyBwdWIgc2NoICIsc2Q6IiBjb20gZWR1IGdvdiBpbmZvIG1lZCBuZXQgb3JnIHR2ICIsc2U6IiBhIGFjIGIgYmQgYyBkIGUgZiBnIGggaSBrIGwgbSBuIG8gb3JnIHAgcGFydGkgcHAgcHJlc3MgciBzIHQgdG0gdSB3IHggeSB6ICIsc2c6IiBjb20gZWR1IGdvdiBpZG4gbmV0IG9yZyBwZXIgIixzbjoiIGFydCBjb20gZWR1IGdvdXYgb3JnIHBlcnNvIHVuaXYgIixzeToiIGNvbSBlZHUgZ292IG1pbCBuZXQgbmV3cyBvcmcgIix0aDoiIGFjIGNvIGdvIGluIG1pIG5ldCBvciAiLHRqOiIgYWMgYml6IGNvIGNvbSBlZHUgZ28gZ292IGluZm8gaW50IG1pbCBuYW1lIG5ldCBuaWMgb3JnIHRlc3Qgd2ViICIsdG46IiBhZ3JpbmV0IGNvbSBkZWZlbnNlIGVkdW5ldCBlbnMgZmluIGdvdiBpbmQgaW5mbyBpbnRsIG1pbmNvbSBuYXQgbmV0IG9yZyBwZXJzbyBybnJ0IHJucyBybnUgdG91cmlzbSAiLHR6OiIgYWMgY28gZ28gbmUgb3IgIix1YToiIGJpeiBjaGVya2Fzc3kgY2hlcm5pZ292IGNoZXJub3Z0c3kgY2sgY24gY28gY29tIGNyaW1lYSBjdiBkbiBkbmVwcm9wZXRyb3ZzayBkb25ldHNrIGRwIGVkdSBnb3YgaWYgaW4gaXZhbm8tZnJhbmtpdnNrIGtoIGtoYXJrb3Yga2hlcnNvbiBraG1lbG5pdHNraXkga2lldiBraXJvdm9ncmFkIGttIGtyIGtzIGt2IGxnIGx1Z2Fuc2sgbHV0c2sgbHZpdiBtZSBtayBuZXQgbmlrb2xhZXYgb2Qgb2Rlc3NhIG9yZyBwbCBwb2x0YXZhIHBwIHJvdm5vIHJ2IHNlYmFzdG9wb2wgc3VteSB0ZSB0ZXJub3BpbCB1emhnb3JvZCB2aW5uaWNhIHZuIHphcG9yaXpoemhlIHpoaXRvbWlyIHpwIHp0ICIsdWc6IiBhYyBjbyBnbyBuZSBvciBvcmcgc2MgIix1azoiIGFjIGJsIGJyaXRpc2gtbGlicmFyeSBjbyBjeW0gZ292IGdvdnQgaWNuZXQgamV0IGxlYSBsdGQgbWUgbWlsIG1vZCBuYXRpb25hbC1saWJyYXJ5LXNjb3RsYW5kIG5lbCBuZXQgbmhzIG5pYyBubHMgb3JnIG9yZ24gcGFybGlhbWVudCBwbGMgcG9saWNlIHNjaCBzY290IHNvYyAiLHVzOiIgZG5pIGZlZCBpc2Ega2lkcyBuc24gIix1eToiIGNvbSBlZHUgZ3ViIG1pbCBuZXQgb3JnICIsdmU6IiBjbyBjb20gZWR1IGdvYiBpbmZvIG1pbCBuZXQgb3JnIHdlYiAiLHZpOiIgY28gY29tIGsxMiBuZXQgb3JnICIsdm46IiBhYyBiaXogY29tIGVkdSBnb3YgaGVhbHRoIGluZm8gaW50IG5hbWUgbmV0IG9yZyBwcm8gIix5ZToiIGNvIGNvbSBnb3YgbHRkIG1lIG5ldCBvcmcgcGxjICIseXU6IiBhYyBjbyBlZHUgZ292IG9yZyAiLHphOiIgYWMgYWdyaWMgYWx0IGJvdXJzZSBjaXR5IGNvIGN5YmVybmV0IGRiIGVkdSBnb3YgZ3JvbmRhciBpYWNjZXNzIGltdCBpbmNhIGxhbmRlc2lnbiBsYXcgbWlsIG5ldCBuZ28gbmlzIG5vbSBvbGl2ZXR0aSBvcmcgcGl4IHNjaG9vbCB0bSB3ZWIgIix6bToiIGFjIGNvIGNvbSBlZHUgZ292IG5ldCBvcmcgc2NoICIsY29tOiJhciBiciBjbiBkZSBldSBnYiBnciBodSBqcG4ga3Igbm8gcWMgcnUgc2Egc2UgdWsgdXMgdXkgemEgIixuZXQ6ImdiIGpwIHNlIHVrICIsb3JnOiJhZSIsZGU6ImNvbSAifSxoYXM6ZnVuY3Rpb24obyl7dmFyIGE9by5sYXN0SW5kZXhPZigiLiIpO2lmKGE8PTB8fGE+PW8ubGVuZ3RoLTEpcmV0dXJuITE7dmFyIHI9by5sYXN0SW5kZXhPZigiLiIsYS0xKTtpZihyPD0wfHxyPj1hLTEpcmV0dXJuITE7dmFyIGk9bi5saXN0W28uc2xpY2UoYSsxKV07cmV0dXJuIGk/aS5pbmRleE9mKCIgIitvLnNsaWNlKHIrMSxhKSsiICIpPj0wOiExfSxpczpmdW5jdGlvbihvKXt2YXIgYT1vLmxhc3RJbmRleE9mKCIuIik7aWYoYTw9MHx8YT49by5sZW5ndGgtMSlyZXR1cm4hMTt2YXIgcj1vLmxhc3RJbmRleE9mKCIuIixhLTEpO2lmKHI+PTApcmV0dXJuITE7dmFyIGk9bi5saXN0W28uc2xpY2UoYSsxKV07cmV0dXJuIGk/aS5pbmRleE9mKCIgIitvLnNsaWNlKDAsYSkrIiAiKT49MDohMX0sZ2V0OmZ1bmN0aW9uKG8pe3ZhciBhPW8ubGFzdEluZGV4T2YoIi4iKTtpZihhPD0wfHxhPj1vLmxlbmd0aC0xKXJldHVybiBudWxsO3ZhciByPW8ubGFzdEluZGV4T2YoIi4iLGEtMSk7aWYocjw9MHx8cj49YS0xKXJldHVybiBudWxsO3ZhciBpPW4ubGlzdFtvLnNsaWNlKGErMSldO3JldHVybiFpfHxpLmluZGV4T2YoIiAiK28uc2xpY2UocisxLGEpKyIgIik8MD9udWxsOm8uc2xpY2UocisxKX0sbm9Db25mbGljdDpmdW5jdGlvbigpe3JldHVybiBlLlNlY29uZExldmVsRG9tYWlucz09PXRoaXMmJihlLlNlY29uZExldmVsRG9tYWlucz10KSx0aGlzfX07cmV0dXJuIG59KX0pO3ZhciB1aT1lbygoUDEsZmwpPT57LyohCiAqIFVSSS5qcyAtIE11dGF0aW5nIFVSTHMKICoKICogVmVyc2lvbjogMS4xOS4xMQogKgogKiBBdXRob3I6IFJvZG5leSBSZWhtCiAqIFdlYjogaHR0cDovL21lZGlhbGl6ZS5naXRodWIuaW8vVVJJLmpzLwogKgogKiBMaWNlbnNlZCB1bmRlcgogKiAgIE1JVCBMaWNlbnNlIGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvbWl0LWxpY2Vuc2UKICoKICovKGZ1bmN0aW9uKGUsdCl7InVzZSBzdHJpY3QiO3R5cGVvZiBmbD09Im9iamVjdCImJmZsLmV4cG9ydHM/ZmwuZXhwb3J0cz10KFMxKCksTTEoKSxJMSgpKTp0eXBlb2YgZGVmaW5lPT0iZnVuY3Rpb24iJiZkZWZpbmUuYW1kP2RlZmluZShbIi4vcHVueWNvZGUiLCIuL0lQdjYiLCIuL1NlY29uZExldmVsRG9tYWlucyJdLHQpOmUuVVJJPXQoZS5wdW55Y29kZSxlLklQdjYsZS5TZWNvbmRMZXZlbERvbWFpbnMsZSl9KShQMSxmdW5jdGlvbihlLHQsbixvKXsidXNlIHN0cmljdCI7dmFyIGE9byYmby5VUkk7ZnVuY3Rpb24gcihBLHgpe3ZhciBNPWFyZ3VtZW50cy5sZW5ndGg+PTEsdj1hcmd1bWVudHMubGVuZ3RoPj0yO2lmKCEodGhpcyBpbnN0YW5jZW9mIHIpKXJldHVybiBNP3Y/bmV3IHIoQSx4KTpuZXcgcihBKTpuZXcgcjtpZihBPT09dm9pZCAwKXtpZihNKXRocm93IG5ldyBUeXBlRXJyb3IoInVuZGVmaW5lZCBpcyBub3QgYSB2YWxpZCBhcmd1bWVudCBmb3IgVVJJIik7dHlwZW9mIGxvY2F0aW9uPCJ1Ij9BPWxvY2F0aW9uLmhyZWYrIiI6QT0iIn1pZihBPT09bnVsbCYmTSl0aHJvdyBuZXcgVHlwZUVycm9yKCJudWxsIGlzIG5vdCBhIHZhbGlkIGFyZ3VtZW50IGZvciBVUkkiKTtyZXR1cm4gdGhpcy5ocmVmKEEpLHghPT12b2lkIDA/dGhpcy5hYnNvbHV0ZVRvKHgpOnRoaXN9ZnVuY3Rpb24gaShBKXtyZXR1cm4vXlswLTldKyQvLnRlc3QoQSl9ci52ZXJzaW9uPSIxLjE5LjExIjt2YXIgZj1yLnByb3RvdHlwZSxkPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7ZnVuY3Rpb24gYyhBKXtyZXR1cm4gQS5yZXBsYWNlKC8oWy4qKz9ePSE6JHt9KCl8W1xdXC9cXF0pL2csIlxcJDEiKX1mdW5jdGlvbiB1KEEpe3JldHVybiBBPT09dm9pZCAwPyJVbmRlZmluZWQiOlN0cmluZyhPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoQSkpLnNsaWNlKDgsLTEpfWZ1bmN0aW9uIGwoQSl7cmV0dXJuIHUoQSk9PT0iQXJyYXkifWZ1bmN0aW9uIGgoQSx4KXt2YXIgTT17fSx2LFU7aWYodSh4KT09PSJSZWdFeHAiKU09bnVsbDtlbHNlIGlmKGwoeCkpZm9yKHY9MCxVPXgubGVuZ3RoO3Y8VTt2KyspTVt4W3ZdXT0hMDtlbHNlIE1beF09ITA7Zm9yKHY9MCxVPUEubGVuZ3RoO3Y8VTt2Kyspe3ZhciB6PU0mJk1bQVt2XV0hPT12b2lkIDB8fCFNJiZ4LnRlc3QoQVt2XSk7eiYmKEEuc3BsaWNlKHYsMSksVS0tLHYtLSl9cmV0dXJuIEF9ZnVuY3Rpb24gbShBLHgpe3ZhciBNLHY7aWYobCh4KSl7Zm9yKE09MCx2PXgubGVuZ3RoO008djtNKyspaWYoIW0oQSx4W01dKSlyZXR1cm4hMTtyZXR1cm4hMH12YXIgVT11KHgpO2ZvcihNPTAsdj1BLmxlbmd0aDtNPHY7TSsrKWlmKFU9PT0iUmVnRXhwIil7aWYodHlwZW9mIEFbTV09PSJzdHJpbmciJiZBW01dLm1hdGNoKHgpKXJldHVybiEwfWVsc2UgaWYoQVtNXT09PXgpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gYihBLHgpe2lmKCFsKEEpfHwhbCh4KXx8QS5sZW5ndGghPT14Lmxlbmd0aClyZXR1cm4hMTtBLnNvcnQoKSx4LnNvcnQoKTtmb3IodmFyIE09MCx2PUEubGVuZ3RoO008djtNKyspaWYoQVtNXSE9PXhbTV0pcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gcChBKXt2YXIgeD0vXlwvK3xcLyskL2c7cmV0dXJuIEEucmVwbGFjZSh4LCIiKX1yLl9wYXJ0cz1mdW5jdGlvbigpe3JldHVybntwcm90b2NvbDpudWxsLHVzZXJuYW1lOm51bGwscGFzc3dvcmQ6bnVsbCxob3N0bmFtZTpudWxsLHVybjpudWxsLHBvcnQ6bnVsbCxwYXRoOm51bGwscXVlcnk6bnVsbCxmcmFnbWVudDpudWxsLHByZXZlbnRJbnZhbGlkSG9zdG5hbWU6ci5wcmV2ZW50SW52YWxpZEhvc3RuYW1lLGR1cGxpY2F0ZVF1ZXJ5UGFyYW1ldGVyczpyLmR1cGxpY2F0ZVF1ZXJ5UGFyYW1ldGVycyxlc2NhcGVRdWVyeVNwYWNlOnIuZXNjYXBlUXVlcnlTcGFjZX19LHIucHJldmVudEludmFsaWRIb3N0bmFtZT0hMSxyLmR1cGxpY2F0ZVF1ZXJ5UGFyYW1ldGVycz0hMSxyLmVzY2FwZVF1ZXJ5U3BhY2U9ITAsci5wcm90b2NvbF9leHByZXNzaW9uPS9eW2Etel1bYS16MC05ListXSokL2ksci5pZG5fZXhwcmVzc2lvbj0vW15hLXowLTlcLl8tXS9pLHIucHVueWNvZGVfZXhwcmVzc2lvbj0vKHhuLS0pL2ksci5pcDRfZXhwcmVzc2lvbj0vXlxkezEsM31cLlxkezEsM31cLlxkezEsM31cLlxkezEsM30kLyxyLmlwNl9leHByZXNzaW9uPS9eXHMqKCgoWzAtOUEtRmEtZl17MSw0fTopezd9KFswLTlBLUZhLWZdezEsNH18OikpfCgoWzAtOUEtRmEtZl17MSw0fTopezZ9KDpbMC05QS1GYS1mXXsxLDR9fCgoMjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XT9cZCkoXC4oMjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XT9cZCkpezN9KXw6KSl8KChbMC05QS1GYS1mXXsxLDR9Oil7NX0oKCg6WzAtOUEtRmEtZl17MSw0fSl7MSwyfSl8OigoMjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XT9cZCkoXC4oMjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XT9cZCkpezN9KXw6KSl8KChbMC05QS1GYS1mXXsxLDR9Oil7NH0oKCg6WzAtOUEtRmEtZl17MSw0fSl7MSwzfSl8KCg6WzAtOUEtRmEtZl17MSw0fSk/OigoMjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XT9cZCkoXC4oMjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XT9cZCkpezN9KSl8OikpfCgoWzAtOUEtRmEtZl17MSw0fTopezN9KCgoOlswLTlBLUZhLWZdezEsNH0pezEsNH0pfCgoOlswLTlBLUZhLWZdezEsNH0pezAsMn06KCgyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldP1xkKShcLigyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldP1xkKSl7M30pKXw6KSl8KChbMC05QS1GYS1mXXsxLDR9Oil7Mn0oKCg6WzAtOUEtRmEtZl17MSw0fSl7MSw1fSl8KCg6WzAtOUEtRmEtZl17MSw0fSl7MCwzfTooKDI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV0/XGQpKFwuKDI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV0/XGQpKXszfSkpfDopKXwoKFswLTlBLUZhLWZdezEsNH06KXsxfSgoKDpbMC05QS1GYS1mXXsxLDR9KXsxLDZ9KXwoKDpbMC05QS1GYS1mXXsxLDR9KXswLDR9OigoMjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XT9cZCkoXC4oMjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XT9cZCkpezN9KSl8OikpfCg6KCgoOlswLTlBLUZhLWZdezEsNH0pezEsN30pfCgoOlswLTlBLUZhLWZdezEsNH0pezAsNX06KCgyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldP1xkKShcLigyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldP1xkKSl7M30pKXw6KSkpKCUuKyk/XHMqJC8sci5maW5kX3VyaV9leHByZXNzaW9uPS9cYigoPzpbYS16XVtcdy1dKzooPzpcL3sxLDN9fFthLXowLTklXSl8d3d3XGR7MCwzfVsuXXxbYS16MC05LlwtXStbLl1bYS16XXsyLDR9XC8pKD86W15ccygpPD5dK3xcKChbXlxzKCk8Pl0rfChcKFteXHMoKTw+XStcKSkpKlwpKSsoPzpcKChbXlxzKCk8Pl0rfChcKFteXHMoKTw+XStcKSkpKlwpfFteXHNgISgpXFtcXXt9OzonIi4sPD4/wqvCu+KAnOKAneKAmOKAmV0pKS9pZyxyLmZpbmRVcmk9e3N0YXJ0Oi9cYig/OihbYS16XVthLXowLTkuKy1dKjpcL1wvKXx3d3dcLikvZ2ksZW5kOi9bXHNcclxuXXwkLyx0cmltOi9bYCEoKVxbXF17fTs6JyIuLDw+P8KrwrvigJzigJ3igJ7igJjigJldKyQvLHBhcmVuczovKFwoW15cKV0qXCl8XFtbXlxdXSpcXXxce1tefV0qXH18PFtePl0qPikvZ30sci5sZWFkaW5nX3doaXRlc3BhY2VfZXhwcmVzc2lvbj0vXltceDAwLVx4MjBcdTAwYTBcdTE2ODBcdTIwMDAtXHUyMDBhXHUyMDI4XHUyMDI5XHUyMDJmXHUyMDVmXHUzMDAwXHVmZWZmXSsvLHIuYXNjaWlfdGFiX3doaXRlc3BhY2U9L1tcdTAwMDlcdTAwMEFcdTAwMERdKy9nLHIuZGVmYXVsdFBvcnRzPXtodHRwOiI4MCIsaHR0cHM6IjQ0MyIsZnRwOiIyMSIsZ29waGVyOiI3MCIsd3M6IjgwIix3c3M6IjQ0MyJ9LHIuaG9zdFByb3RvY29scz1bImh0dHAiLCJodHRwcyJdLHIuaW52YWxpZF9ob3N0bmFtZV9jaGFyYWN0ZXJzPS9bXmEtekEtWjAtOVwuXC06X10vLHIuZG9tQXR0cmlidXRlcz17YToiaHJlZiIsYmxvY2txdW90ZToiY2l0ZSIsbGluazoiaHJlZiIsYmFzZToiaHJlZiIsc2NyaXB0OiJzcmMiLGZvcm06ImFjdGlvbiIsaW1nOiJzcmMiLGFyZWE6ImhyZWYiLGlmcmFtZToic3JjIixlbWJlZDoic3JjIixzb3VyY2U6InNyYyIsdHJhY2s6InNyYyIsaW5wdXQ6InNyYyIsYXVkaW86InNyYyIsdmlkZW86InNyYyJ9LHIuZ2V0RG9tQXR0cmlidXRlPWZ1bmN0aW9uKEEpe2lmKCEoIUF8fCFBLm5vZGVOYW1lKSl7dmFyIHg9QS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO2lmKCEoeD09PSJpbnB1dCImJkEudHlwZSE9PSJpbWFnZSIpKXJldHVybiByLmRvbUF0dHJpYnV0ZXNbeF19fTtmdW5jdGlvbiB5KEEpe3JldHVybiBlc2NhcGUoQSl9ZnVuY3Rpb24gVChBKXtyZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KEEpLnJlcGxhY2UoL1shJygpKl0vZyx5KS5yZXBsYWNlKC9cKi9nLCIlMkEiKX1yLmVuY29kZT1ULHIuZGVjb2RlPWRlY29kZVVSSUNvbXBvbmVudCxyLmlzbzg4NTk9ZnVuY3Rpb24oKXtyLmVuY29kZT1lc2NhcGUsci5kZWNvZGU9dW5lc2NhcGV9LHIudW5pY29kZT1mdW5jdGlvbigpe3IuZW5jb2RlPVQsci5kZWNvZGU9ZGVjb2RlVVJJQ29tcG9uZW50fSxyLmNoYXJhY3RlcnM9e3BhdGhuYW1lOntlbmNvZGU6e2V4cHJlc3Npb246LyUoMjR8MjZ8MkJ8MkN8M0J8M0R8M0F8NDApL2lnLG1hcDp7IiUyNCI6IiQiLCIlMjYiOiImIiwiJTJCIjoiKyIsIiUyQyI6IiwiLCIlM0IiOiI7IiwiJTNEIjoiPSIsIiUzQSI6IjoiLCIlNDAiOiJAIn19LGRlY29kZTp7ZXhwcmVzc2lvbjovW1wvXD8jXS9nLG1hcDp7Ii8iOiIlMkYiLCI/IjoiJTNGIiwiIyI6IiUyMyJ9fX0scmVzZXJ2ZWQ6e2VuY29kZTp7ZXhwcmVzc2lvbjovJSgyMXwyM3wyNHwyNnwyN3wyOHwyOXwyQXwyQnwyQ3wyRnwzQXwzQnwzRHwzRnw0MHw1Qnw1RCkvaWcsbWFwOnsiJTNBIjoiOiIsIiUyRiI6Ii8iLCIlM0YiOiI/IiwiJTIzIjoiIyIsIiU1QiI6IlsiLCIlNUQiOiJdIiwiJTQwIjoiQCIsIiUyMSI6IiEiLCIlMjQiOiIkIiwiJTI2IjoiJiIsIiUyNyI6IiciLCIlMjgiOiIoIiwiJTI5IjoiKSIsIiUyQSI6IioiLCIlMkIiOiIrIiwiJTJDIjoiLCIsIiUzQiI6IjsiLCIlM0QiOiI9In19fSx1cm5wYXRoOntlbmNvZGU6e2V4cHJlc3Npb246LyUoMjF8MjR8Mjd8Mjh8Mjl8MkF8MkJ8MkN8M0J8M0R8NDApL2lnLG1hcDp7IiUyMSI6IiEiLCIlMjQiOiIkIiwiJTI3IjoiJyIsIiUyOCI6IigiLCIlMjkiOiIpIiwiJTJBIjoiKiIsIiUyQiI6IisiLCIlMkMiOiIsIiwiJTNCIjoiOyIsIiUzRCI6Ij0iLCIlNDAiOiJAIn19LGRlY29kZTp7ZXhwcmVzc2lvbjovW1wvXD8jOl0vZyxtYXA6eyIvIjoiJTJGIiwiPyI6IiUzRiIsIiMiOiIlMjMiLCI6IjoiJTNBIn19fX0sci5lbmNvZGVRdWVyeT1mdW5jdGlvbihBLHgpe3ZhciBNPXIuZW5jb2RlKEErIiIpO3JldHVybiB4PT09dm9pZCAwJiYoeD1yLmVzY2FwZVF1ZXJ5U3BhY2UpLHg/TS5yZXBsYWNlKC8lMjAvZywiKyIpOk19LHIuZGVjb2RlUXVlcnk9ZnVuY3Rpb24oQSx4KXtBKz0iIix4PT09dm9pZCAwJiYoeD1yLmVzY2FwZVF1ZXJ5U3BhY2UpO3RyeXtyZXR1cm4gci5kZWNvZGUoeD9BLnJlcGxhY2UoL1wrL2csIiUyMCIpOkEpfWNhdGNoe3JldHVybiBBfX07dmFyIF89e2VuY29kZToiZW5jb2RlIixkZWNvZGU6ImRlY29kZSJ9LEUsdz1mdW5jdGlvbihBLHgpe3JldHVybiBmdW5jdGlvbihNKXt0cnl7cmV0dXJuIHJbeF0oTSsiIikucmVwbGFjZShyLmNoYXJhY3RlcnNbQV1beF0uZXhwcmVzc2lvbixmdW5jdGlvbih2KXtyZXR1cm4gci5jaGFyYWN0ZXJzW0FdW3hdLm1hcFt2XX0pfWNhdGNoe3JldHVybiBNfX19O2ZvcihFIGluIF8pcltFKyJQYXRoU2VnbWVudCJdPXcoInBhdGhuYW1lIixfW0VdKSxyW0UrIlVyblBhdGhTZWdtZW50Il09dygidXJucGF0aCIsX1tFXSk7dmFyIFI9ZnVuY3Rpb24oQSx4LE0pe3JldHVybiBmdW5jdGlvbih2KXt2YXIgVTtNP1U9ZnVuY3Rpb24oSCl7cmV0dXJuIHJbeF0ocltNXShIKSl9OlU9clt4XTtmb3IodmFyIHo9KHYrIiIpLnNwbGl0KEEpLEQ9MCxHPXoubGVuZ3RoO0Q8RztEKyspeltEXT1VKHpbRF0pO3JldHVybiB6LmpvaW4oQSl9fTtyLmRlY29kZVBhdGg9UigiLyIsImRlY29kZVBhdGhTZWdtZW50Iiksci5kZWNvZGVVcm5QYXRoPVIoIjoiLCJkZWNvZGVVcm5QYXRoU2VnbWVudCIpLHIucmVjb2RlUGF0aD1SKCIvIiwiZW5jb2RlUGF0aFNlZ21lbnQiLCJkZWNvZGUiKSxyLnJlY29kZVVyblBhdGg9UigiOiIsImVuY29kZVVyblBhdGhTZWdtZW50IiwiZGVjb2RlIiksci5lbmNvZGVSZXNlcnZlZD13KCJyZXNlcnZlZCIsImVuY29kZSIpLHIucGFyc2U9ZnVuY3Rpb24oQSx4KXt2YXIgTTtyZXR1cm4geHx8KHg9e3ByZXZlbnRJbnZhbGlkSG9zdG5hbWU6ci5wcmV2ZW50SW52YWxpZEhvc3RuYW1lfSksQT1BLnJlcGxhY2Uoci5sZWFkaW5nX3doaXRlc3BhY2VfZXhwcmVzc2lvbiwiIiksQT1BLnJlcGxhY2Uoci5hc2NpaV90YWJfd2hpdGVzcGFjZSwiIiksTT1BLmluZGV4T2YoIiMiKSxNPi0xJiYoeC5mcmFnbWVudD1BLnN1YnN0cmluZyhNKzEpfHxudWxsLEE9QS5zdWJzdHJpbmcoMCxNKSksTT1BLmluZGV4T2YoIj8iKSxNPi0xJiYoeC5xdWVyeT1BLnN1YnN0cmluZyhNKzEpfHxudWxsLEE9QS5zdWJzdHJpbmcoMCxNKSksQT1BLnJlcGxhY2UoL14oaHR0cHM/fGZ0cHx3c3M/KT86K1svXFxdKi9pLCIkMTovLyIpLEE9QS5yZXBsYWNlKC9eWy9cXF17Mix9L2ksIi8vIiksQS5zdWJzdHJpbmcoMCwyKT09PSIvLyI/KHgucHJvdG9jb2w9bnVsbCxBPUEuc3Vic3RyaW5nKDIpLEE9ci5wYXJzZUF1dGhvcml0eShBLHgpKTooTT1BLmluZGV4T2YoIjoiKSxNPi0xJiYoeC5wcm90b2NvbD1BLnN1YnN0cmluZygwLE0pfHxudWxsLHgucHJvdG9jb2wmJiF4LnByb3RvY29sLm1hdGNoKHIucHJvdG9jb2xfZXhwcmVzc2lvbik/eC5wcm90b2NvbD12b2lkIDA6QS5zdWJzdHJpbmcoTSsxLE0rMykucmVwbGFjZSgvXFwvZywiLyIpPT09Ii8vIj8oQT1BLnN1YnN0cmluZyhNKzMpLEE9ci5wYXJzZUF1dGhvcml0eShBLHgpKTooQT1BLnN1YnN0cmluZyhNKzEpLHgudXJuPSEwKSkpLHgucGF0aD1BLHh9LHIucGFyc2VIb3N0PWZ1bmN0aW9uKEEseCl7QXx8KEE9IiIpLEE9QS5yZXBsYWNlKC9cXC9nLCIvIik7dmFyIE09QS5pbmRleE9mKCIvIiksdixVO2lmKE09PT0tMSYmKE09QS5sZW5ndGgpLEEuY2hhckF0KDApPT09IlsiKXY9QS5pbmRleE9mKCJdIikseC5ob3N0bmFtZT1BLnN1YnN0cmluZygxLHYpfHxudWxsLHgucG9ydD1BLnN1YnN0cmluZyh2KzIsTSl8fG51bGwseC5wb3J0PT09Ii8iJiYoeC5wb3J0PW51bGwpO2Vsc2V7dmFyIHo9QS5pbmRleE9mKCI6IiksRD1BLmluZGV4T2YoIi8iKSxHPUEuaW5kZXhPZigiOiIseisxKTtHIT09LTEmJihEPT09LTF8fEc8RCk/KHguaG9zdG5hbWU9QS5zdWJzdHJpbmcoMCxNKXx8bnVsbCx4LnBvcnQ9bnVsbCk6KFU9QS5zdWJzdHJpbmcoMCxNKS5zcGxpdCgiOiIpLHguaG9zdG5hbWU9VVswXXx8bnVsbCx4LnBvcnQ9VVsxXXx8bnVsbCl9cmV0dXJuIHguaG9zdG5hbWUmJkEuc3Vic3RyaW5nKE0pLmNoYXJBdCgwKSE9PSIvIiYmKE0rKyxBPSIvIitBKSx4LnByZXZlbnRJbnZhbGlkSG9zdG5hbWUmJnIuZW5zdXJlVmFsaWRIb3N0bmFtZSh4Lmhvc3RuYW1lLHgucHJvdG9jb2wpLHgucG9ydCYmci5lbnN1cmVWYWxpZFBvcnQoeC5wb3J0KSxBLnN1YnN0cmluZyhNKXx8Ii8ifSxyLnBhcnNlQXV0aG9yaXR5PWZ1bmN0aW9uKEEseCl7cmV0dXJuIEE9ci5wYXJzZVVzZXJpbmZvKEEseCksci5wYXJzZUhvc3QoQSx4KX0sci5wYXJzZVVzZXJpbmZvPWZ1bmN0aW9uKEEseCl7dmFyIE09QSx2PUEuaW5kZXhPZigiXFwiKTt2IT09LTEmJihBPUEucmVwbGFjZSgvXFwvZywiLyIpKTt2YXIgVT1BLmluZGV4T2YoIi8iKSx6PUEubGFzdEluZGV4T2YoIkAiLFU+LTE/VTpBLmxlbmd0aC0xKSxEO3JldHVybiB6Pi0xJiYoVT09PS0xfHx6PFUpPyhEPUEuc3Vic3RyaW5nKDAseikuc3BsaXQoIjoiKSx4LnVzZXJuYW1lPURbMF0/ci5kZWNvZGUoRFswXSk6bnVsbCxELnNoaWZ0KCkseC5wYXNzd29yZD1EWzBdP3IuZGVjb2RlKEQuam9pbigiOiIpKTpudWxsLEE9TS5zdWJzdHJpbmcoeisxKSk6KHgudXNlcm5hbWU9bnVsbCx4LnBhc3N3b3JkPW51bGwpLEF9LHIucGFyc2VRdWVyeT1mdW5jdGlvbihBLHgpe2lmKCFBKXJldHVybnt9O2lmKEE9QS5yZXBsYWNlKC8mKy9nLCImIikucmVwbGFjZSgvXlw/KiYqfCYrJC9nLCIiKSwhQSlyZXR1cm57fTtmb3IodmFyIE09e30sdj1BLnNwbGl0KCImIiksVT12Lmxlbmd0aCx6LEQsRyxIPTA7SDxVO0grKyl6PXZbSF0uc3BsaXQoIj0iKSxEPXIuZGVjb2RlUXVlcnkoei5zaGlmdCgpLHgpLEc9ei5sZW5ndGg/ci5kZWNvZGVRdWVyeSh6LmpvaW4oIj0iKSx4KTpudWxsLEQhPT0iX19wcm90b19fIiYmKGQuY2FsbChNLEQpPygodHlwZW9mIE1bRF09PSJzdHJpbmcifHxNW0RdPT09bnVsbCkmJihNW0RdPVtNW0RdXSksTVtEXS5wdXNoKEcpKTpNW0RdPUcpO3JldHVybiBNfSxyLmJ1aWxkPWZ1bmN0aW9uKEEpe3ZhciB4PSIiLE09ITE7cmV0dXJuIEEucHJvdG9jb2wmJih4Kz1BLnByb3RvY29sKyI6IiksIUEudXJuJiYoeHx8QS5ob3N0bmFtZSkmJih4Kz0iLy8iLE09ITApLHgrPXIuYnVpbGRBdXRob3JpdHkoQSl8fCIiLHR5cGVvZiBBLnBhdGg9PSJzdHJpbmciJiYoQS5wYXRoLmNoYXJBdCgwKSE9PSIvIiYmTSYmKHgrPSIvIikseCs9QS5wYXRoKSx0eXBlb2YgQS5xdWVyeT09InN0cmluZyImJkEucXVlcnkmJih4Kz0iPyIrQS5xdWVyeSksdHlwZW9mIEEuZnJhZ21lbnQ9PSJzdHJpbmciJiZBLmZyYWdtZW50JiYoeCs9IiMiK0EuZnJhZ21lbnQpLHh9LHIuYnVpbGRIb3N0PWZ1bmN0aW9uKEEpe3ZhciB4PSIiO2lmKEEuaG9zdG5hbWUpci5pcDZfZXhwcmVzc2lvbi50ZXN0KEEuaG9zdG5hbWUpP3grPSJbIitBLmhvc3RuYW1lKyJdIjp4Kz1BLmhvc3RuYW1lO2Vsc2UgcmV0dXJuIiI7cmV0dXJuIEEucG9ydCYmKHgrPSI6IitBLnBvcnQpLHh9LHIuYnVpbGRBdXRob3JpdHk9ZnVuY3Rpb24oQSl7cmV0dXJuIHIuYnVpbGRVc2VyaW5mbyhBKStyLmJ1aWxkSG9zdChBKX0sci5idWlsZFVzZXJpbmZvPWZ1bmN0aW9uKEEpe3ZhciB4PSIiO3JldHVybiBBLnVzZXJuYW1lJiYoeCs9ci5lbmNvZGUoQS51c2VybmFtZSkpLEEucGFzc3dvcmQmJih4Kz0iOiIrci5lbmNvZGUoQS5wYXNzd29yZCkpLHgmJih4Kz0iQCIpLHh9LHIuYnVpbGRRdWVyeT1mdW5jdGlvbihBLHgsTSl7dmFyIHY9IiIsVSx6LEQsRztmb3IoeiBpbiBBKWlmKHohPT0iX19wcm90b19fIiYmZC5jYWxsKEEseikpaWYobChBW3pdKSlmb3IoVT17fSxEPTAsRz1BW3pdLmxlbmd0aDtEPEc7RCsrKUFbel1bRF0hPT12b2lkIDAmJlVbQVt6XVtEXSsiIl09PT12b2lkIDAmJih2Kz0iJiIrci5idWlsZFF1ZXJ5UGFyYW1ldGVyKHosQVt6XVtEXSxNKSx4IT09ITAmJihVW0Fbel1bRF0rIiJdPSEwKSk7ZWxzZSBBW3pdIT09dm9pZCAwJiYodis9IiYiK3IuYnVpbGRRdWVyeVBhcmFtZXRlcih6LEFbel0sTSkpO3JldHVybiB2LnN1YnN0cmluZygxKX0sci5idWlsZFF1ZXJ5UGFyYW1ldGVyPWZ1bmN0aW9uKEEseCxNKXtyZXR1cm4gci5lbmNvZGVRdWVyeShBLE0pKyh4IT09bnVsbD8iPSIrci5lbmNvZGVRdWVyeSh4LE0pOiIiKX0sci5hZGRRdWVyeT1mdW5jdGlvbihBLHgsTSl7aWYodHlwZW9mIHg9PSJvYmplY3QiKWZvcih2YXIgdiBpbiB4KWQuY2FsbCh4LHYpJiZyLmFkZFF1ZXJ5KEEsdix4W3ZdKTtlbHNlIGlmKHR5cGVvZiB4PT0ic3RyaW5nIil7aWYoQVt4XT09PXZvaWQgMCl7QVt4XT1NO3JldHVybn1lbHNlIHR5cGVvZiBBW3hdPT0ic3RyaW5nIiYmKEFbeF09W0FbeF1dKTtsKE0pfHwoTT1bTV0pLEFbeF09KEFbeF18fFtdKS5jb25jYXQoTSl9ZWxzZSB0aHJvdyBuZXcgVHlwZUVycm9yKCJVUkkuYWRkUXVlcnkoKSBhY2NlcHRzIGFuIG9iamVjdCwgc3RyaW5nIGFzIHRoZSBuYW1lIHBhcmFtZXRlciIpfSxyLnNldFF1ZXJ5PWZ1bmN0aW9uKEEseCxNKXtpZih0eXBlb2YgeD09Im9iamVjdCIpZm9yKHZhciB2IGluIHgpZC5jYWxsKHgsdikmJnIuc2V0UXVlcnkoQSx2LHhbdl0pO2Vsc2UgaWYodHlwZW9mIHg9PSJzdHJpbmciKUFbeF09TT09PXZvaWQgMD9udWxsOk07ZWxzZSB0aHJvdyBuZXcgVHlwZUVycm9yKCJVUkkuc2V0UXVlcnkoKSBhY2NlcHRzIGFuIG9iamVjdCwgc3RyaW5nIGFzIHRoZSBuYW1lIHBhcmFtZXRlciIpfSxyLnJlbW92ZVF1ZXJ5PWZ1bmN0aW9uKEEseCxNKXt2YXIgdixVLHo7aWYobCh4KSlmb3Iodj0wLFU9eC5sZW5ndGg7djxVO3YrKylBW3hbdl1dPXZvaWQgMDtlbHNlIGlmKHUoeCk9PT0iUmVnRXhwIilmb3IoeiBpbiBBKXgudGVzdCh6KSYmKEFbel09dm9pZCAwKTtlbHNlIGlmKHR5cGVvZiB4PT0ib2JqZWN0Iilmb3IoeiBpbiB4KWQuY2FsbCh4LHopJiZyLnJlbW92ZVF1ZXJ5KEEseix4W3pdKTtlbHNlIGlmKHR5cGVvZiB4PT0ic3RyaW5nIilNIT09dm9pZCAwP3UoTSk9PT0iUmVnRXhwIj8hbChBW3hdKSYmTS50ZXN0KEFbeF0pP0FbeF09dm9pZCAwOkFbeF09aChBW3hdLE0pOkFbeF09PT1TdHJpbmcoTSkmJighbChNKXx8TS5sZW5ndGg9PT0xKT9BW3hdPXZvaWQgMDpsKEFbeF0pJiYoQVt4XT1oKEFbeF0sTSkpOkFbeF09dm9pZCAwO2Vsc2UgdGhyb3cgbmV3IFR5cGVFcnJvcigiVVJJLnJlbW92ZVF1ZXJ5KCkgYWNjZXB0cyBhbiBvYmplY3QsIHN0cmluZywgUmVnRXhwIGFzIHRoZSBmaXJzdCBwYXJhbWV0ZXIiKX0sci5oYXNRdWVyeT1mdW5jdGlvbihBLHgsTSx2KXtzd2l0Y2godSh4KSl7Y2FzZSJTdHJpbmciOmJyZWFrO2Nhc2UiUmVnRXhwIjpmb3IodmFyIFUgaW4gQSlpZihkLmNhbGwoQSxVKSYmeC50ZXN0KFUpJiYoTT09PXZvaWQgMHx8ci5oYXNRdWVyeShBLFUsTSkpKXJldHVybiEwO3JldHVybiExO2Nhc2UiT2JqZWN0Ijpmb3IodmFyIHogaW4geClpZihkLmNhbGwoeCx6KSYmIXIuaGFzUXVlcnkoQSx6LHhbel0pKXJldHVybiExO3JldHVybiEwO2RlZmF1bHQ6dGhyb3cgbmV3IFR5cGVFcnJvcigiVVJJLmhhc1F1ZXJ5KCkgYWNjZXB0cyBhIHN0cmluZywgcmVndWxhciBleHByZXNzaW9uIG9yIG9iamVjdCBhcyB0aGUgbmFtZSBwYXJhbWV0ZXIiKX1zd2l0Y2godShNKSl7Y2FzZSJVbmRlZmluZWQiOnJldHVybiB4IGluIEE7Y2FzZSJCb29sZWFuIjp2YXIgRD0hIShsKEFbeF0pP0FbeF0ubGVuZ3RoOkFbeF0pO3JldHVybiBNPT09RDtjYXNlIkZ1bmN0aW9uIjpyZXR1cm4hIU0oQVt4XSx4LEEpO2Nhc2UiQXJyYXkiOmlmKCFsKEFbeF0pKXJldHVybiExO3ZhciBHPXY/bTpiO3JldHVybiBHKEFbeF0sTSk7Y2FzZSJSZWdFeHAiOnJldHVybiBsKEFbeF0pP3Y/bShBW3hdLE0pOiExOiEhKEFbeF0mJkFbeF0ubWF0Y2goTSkpO2Nhc2UiTnVtYmVyIjpNPVN0cmluZyhNKTtjYXNlIlN0cmluZyI6cmV0dXJuIGwoQVt4XSk/dj9tKEFbeF0sTSk6ITE6QVt4XT09PU07ZGVmYXVsdDp0aHJvdyBuZXcgVHlwZUVycm9yKCJVUkkuaGFzUXVlcnkoKSBhY2NlcHRzIHVuZGVmaW5lZCwgYm9vbGVhbiwgc3RyaW5nLCBudW1iZXIsIFJlZ0V4cCwgRnVuY3Rpb24gYXMgdGhlIHZhbHVlIHBhcmFtZXRlciIpfX0sci5qb2luUGF0aHM9ZnVuY3Rpb24oKXtmb3IodmFyIEE9W10seD1bXSxNPTAsdj0wO3Y8YXJndW1lbnRzLmxlbmd0aDt2Kyspe3ZhciBVPW5ldyByKGFyZ3VtZW50c1t2XSk7QS5wdXNoKFUpO2Zvcih2YXIgej1VLnNlZ21lbnQoKSxEPTA7RDx6Lmxlbmd0aDtEKyspdHlwZW9mIHpbRF09PSJzdHJpbmciJiZ4LnB1c2goeltEXSkseltEXSYmTSsrfWlmKCF4Lmxlbmd0aHx8IU0pcmV0dXJuIG5ldyByKCIiKTt2YXIgRz1uZXcgcigiIikuc2VnbWVudCh4KTtyZXR1cm4oQVswXS5wYXRoKCk9PT0iInx8QVswXS5wYXRoKCkuc2xpY2UoMCwxKT09PSIvIikmJkcucGF0aCgiLyIrRy5wYXRoKCkpLEcubm9ybWFsaXplKCl9LHIuY29tbW9uUGF0aD1mdW5jdGlvbihBLHgpe3ZhciBNPU1hdGgubWluKEEubGVuZ3RoLHgubGVuZ3RoKSx2O2Zvcih2PTA7djxNO3YrKylpZihBLmNoYXJBdCh2KSE9PXguY2hhckF0KHYpKXt2LS07YnJlYWt9cmV0dXJuIHY8MT9BLmNoYXJBdCgwKT09PXguY2hhckF0KDApJiZBLmNoYXJBdCgwKT09PSIvIj8iLyI6IiI6KChBLmNoYXJBdCh2KSE9PSIvInx8eC5jaGFyQXQodikhPT0iLyIpJiYodj1BLnN1YnN0cmluZygwLHYpLmxhc3RJbmRleE9mKCIvIikpLEEuc3Vic3RyaW5nKDAsdisxKSl9LHIud2l0aGluU3RyaW5nPWZ1bmN0aW9uKEEseCxNKXtNfHwoTT17fSk7dmFyIHY9TS5zdGFydHx8ci5maW5kVXJpLnN0YXJ0LFU9TS5lbmR8fHIuZmluZFVyaS5lbmQsej1NLnRyaW18fHIuZmluZFVyaS50cmltLEQ9TS5wYXJlbnN8fHIuZmluZFVyaS5wYXJlbnMsRz0vW2EtejAtOS1dPVsiJ10/JC9pO2Zvcih2Lmxhc3RJbmRleD0wOzspe3ZhciBIPXYuZXhlYyhBKTtpZighSClicmVhazt2YXIgTz1ILmluZGV4O2lmKE0uaWdub3JlSHRtbCl7dmFyIFo9QS5zbGljZShNYXRoLm1heChPLTMsMCksTyk7aWYoWiYmRy50ZXN0KFopKWNvbnRpbnVlfWZvcih2YXIgb2U9TytBLnNsaWNlKE8pLnNlYXJjaChVKSxjZT1BLnNsaWNlKE8sb2UpLGZlPS0xOzspe3ZhciBlZT1ELmV4ZWMoY2UpO2lmKCFlZSlicmVhazt2YXIgYmU9ZWUuaW5kZXgrZWVbMF0ubGVuZ3RoO2ZlPU1hdGgubWF4KGZlLGJlKX1pZihmZT4tMT9jZT1jZS5zbGljZSgwLGZlKStjZS5zbGljZShmZSkucmVwbGFjZSh6LCIiKTpjZT1jZS5yZXBsYWNlKHosIiIpLCEoY2UubGVuZ3RoPD1IWzBdLmxlbmd0aCkmJiEoTS5pZ25vcmUmJk0uaWdub3JlLnRlc3QoY2UpKSl7b2U9TytjZS5sZW5ndGg7dmFyIGxlPXgoY2UsTyxvZSxBKTtpZihsZT09PXZvaWQgMCl7di5sYXN0SW5kZXg9b2U7Y29udGludWV9bGU9U3RyaW5nKGxlKSxBPUEuc2xpY2UoMCxPKStsZStBLnNsaWNlKG9lKSx2Lmxhc3RJbmRleD1PK2xlLmxlbmd0aH19cmV0dXJuIHYubGFzdEluZGV4PTAsQX0sci5lbnN1cmVWYWxpZEhvc3RuYW1lPWZ1bmN0aW9uKEEseCl7dmFyIE09ISFBLHY9ISF4LFU9ITE7aWYodiYmKFU9bShyLmhvc3RQcm90b2NvbHMseCkpLFUmJiFNKXRocm93IG5ldyBUeXBlRXJyb3IoIkhvc3RuYW1lIGNhbm5vdCBiZSBlbXB0eSwgaWYgcHJvdG9jb2wgaXMgIit4KTtpZihBJiZBLm1hdGNoKHIuaW52YWxpZF9ob3N0bmFtZV9jaGFyYWN0ZXJzKSl7aWYoIWUpdGhyb3cgbmV3IFR5cGVFcnJvcignSG9zdG5hbWUgIicrQSsnIiBjb250YWlucyBjaGFyYWN0ZXJzIG90aGVyIHRoYW4gW0EtWjAtOS4tOl9dIGFuZCBQdW55Y29kZS5qcyBpcyBub3QgYXZhaWxhYmxlJyk7aWYoZS50b0FTQ0lJKEEpLm1hdGNoKHIuaW52YWxpZF9ob3N0bmFtZV9jaGFyYWN0ZXJzKSl0aHJvdyBuZXcgVHlwZUVycm9yKCdIb3N0bmFtZSAiJytBKyciIGNvbnRhaW5zIGNoYXJhY3RlcnMgb3RoZXIgdGhhbiBbQS1aMC05Li06X10nKX19LHIuZW5zdXJlVmFsaWRQb3J0PWZ1bmN0aW9uKEEpe2lmKEEpe3ZhciB4PU51bWJlcihBKTtpZighKGkoeCkmJng+MCYmeDw2NTUzNikpdGhyb3cgbmV3IFR5cGVFcnJvcignUG9ydCAiJytBKyciIGlzIG5vdCBhIHZhbGlkIHBvcnQnKX19LHIubm9Db25mbGljdD1mdW5jdGlvbihBKXtpZihBKXt2YXIgeD17VVJJOnRoaXMubm9Db25mbGljdCgpfTtyZXR1cm4gby5VUklUZW1wbGF0ZSYmdHlwZW9mIG8uVVJJVGVtcGxhdGUubm9Db25mbGljdD09ImZ1bmN0aW9uIiYmKHguVVJJVGVtcGxhdGU9by5VUklUZW1wbGF0ZS5ub0NvbmZsaWN0KCkpLG8uSVB2NiYmdHlwZW9mIG8uSVB2Ni5ub0NvbmZsaWN0PT0iZnVuY3Rpb24iJiYoeC5JUHY2PW8uSVB2Ni5ub0NvbmZsaWN0KCkpLG8uU2Vjb25kTGV2ZWxEb21haW5zJiZ0eXBlb2Ygby5TZWNvbmRMZXZlbERvbWFpbnMubm9Db25mbGljdD09ImZ1bmN0aW9uIiYmKHguU2Vjb25kTGV2ZWxEb21haW5zPW8uU2Vjb25kTGV2ZWxEb21haW5zLm5vQ29uZmxpY3QoKSkseH1lbHNlIG8uVVJJPT09dGhpcyYmKG8uVVJJPWEpO3JldHVybiB0aGlzfSxmLmJ1aWxkPWZ1bmN0aW9uKEEpe3JldHVybiBBPT09ITA/dGhpcy5fZGVmZXJyZWRfYnVpbGQ9ITA6KEE9PT12b2lkIDB8fHRoaXMuX2RlZmVycmVkX2J1aWxkKSYmKHRoaXMuX3N0cmluZz1yLmJ1aWxkKHRoaXMuX3BhcnRzKSx0aGlzLl9kZWZlcnJlZF9idWlsZD0hMSksdGhpc30sZi5jbG9uZT1mdW5jdGlvbigpe3JldHVybiBuZXcgcih0aGlzKX0sZi52YWx1ZU9mPWYudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5idWlsZCghMSkuX3N0cmluZ307ZnVuY3Rpb24gUyhBKXtyZXR1cm4gZnVuY3Rpb24oeCxNKXtyZXR1cm4geD09PXZvaWQgMD90aGlzLl9wYXJ0c1tBXXx8IiI6KHRoaXMuX3BhcnRzW0FdPXh8fG51bGwsdGhpcy5idWlsZCghTSksdGhpcyl9fWZ1bmN0aW9uIEMoQSx4KXtyZXR1cm4gZnVuY3Rpb24oTSx2KXtyZXR1cm4gTT09PXZvaWQgMD90aGlzLl9wYXJ0c1tBXXx8IiI6KE0hPT1udWxsJiYoTT1NKyIiLE0uY2hhckF0KDApPT09eCYmKE09TS5zdWJzdHJpbmcoMSkpKSx0aGlzLl9wYXJ0c1tBXT1NLHRoaXMuYnVpbGQoIXYpLHRoaXMpfX1mLnByb3RvY29sPVMoInByb3RvY29sIiksZi51c2VybmFtZT1TKCJ1c2VybmFtZSIpLGYucGFzc3dvcmQ9UygicGFzc3dvcmQiKSxmLmhvc3RuYW1lPVMoImhvc3RuYW1lIiksZi5wb3J0PVMoInBvcnQiKSxmLnF1ZXJ5PUMoInF1ZXJ5IiwiPyIpLGYuZnJhZ21lbnQ9QygiZnJhZ21lbnQiLCIjIiksZi5zZWFyY2g9ZnVuY3Rpb24oQSx4KXt2YXIgTT10aGlzLnF1ZXJ5KEEseCk7cmV0dXJuIHR5cGVvZiBNPT0ic3RyaW5nIiYmTS5sZW5ndGg/Ij8iK006TX0sZi5oYXNoPWZ1bmN0aW9uKEEseCl7dmFyIE09dGhpcy5mcmFnbWVudChBLHgpO3JldHVybiB0eXBlb2YgTT09InN0cmluZyImJk0ubGVuZ3RoPyIjIitNOk19LGYucGF0aG5hbWU9ZnVuY3Rpb24oQSx4KXtpZihBPT09dm9pZCAwfHxBPT09ITApe3ZhciBNPXRoaXMuX3BhcnRzLnBhdGh8fCh0aGlzLl9wYXJ0cy5ob3N0bmFtZT8iLyI6IiIpO3JldHVybiBBPyh0aGlzLl9wYXJ0cy51cm4/ci5kZWNvZGVVcm5QYXRoOnIuZGVjb2RlUGF0aCkoTSk6TX1lbHNlIHJldHVybiB0aGlzLl9wYXJ0cy51cm4/dGhpcy5fcGFydHMucGF0aD1BP3IucmVjb2RlVXJuUGF0aChBKToiIjp0aGlzLl9wYXJ0cy5wYXRoPUE/ci5yZWNvZGVQYXRoKEEpOiIvIix0aGlzLmJ1aWxkKCF4KSx0aGlzfSxmLnBhdGg9Zi5wYXRobmFtZSxmLmhyZWY9ZnVuY3Rpb24oQSx4KXt2YXIgTTtpZihBPT09dm9pZCAwKXJldHVybiB0aGlzLnRvU3RyaW5nKCk7dGhpcy5fc3RyaW5nPSIiLHRoaXMuX3BhcnRzPXIuX3BhcnRzKCk7dmFyIHY9QSBpbnN0YW5jZW9mIHIsVT10eXBlb2YgQT09Im9iamVjdCImJihBLmhvc3RuYW1lfHxBLnBhdGh8fEEucGF0aG5hbWUpO2lmKEEubm9kZU5hbWUpe3ZhciB6PXIuZ2V0RG9tQXR0cmlidXRlKEEpO0E9QVt6XXx8IiIsVT0hMX1pZighdiYmVSYmQS5wYXRobmFtZSE9PXZvaWQgMCYmKEE9QS50b1N0cmluZygpKSx0eXBlb2YgQT09InN0cmluZyJ8fEEgaW5zdGFuY2VvZiBTdHJpbmcpdGhpcy5fcGFydHM9ci5wYXJzZShTdHJpbmcoQSksdGhpcy5fcGFydHMpO2Vsc2UgaWYodnx8VSl7dmFyIEQ9dj9BLl9wYXJ0czpBO2ZvcihNIGluIEQpTSE9PSJxdWVyeSImJmQuY2FsbCh0aGlzLl9wYXJ0cyxNKSYmKHRoaXMuX3BhcnRzW01dPURbTV0pO0QucXVlcnkmJnRoaXMucXVlcnkoRC5xdWVyeSwhMSl9ZWxzZSB0aHJvdyBuZXcgVHlwZUVycm9yKCJpbnZhbGlkIGlucHV0Iik7cmV0dXJuIHRoaXMuYnVpbGQoIXgpLHRoaXN9LGYuaXM9ZnVuY3Rpb24oQSl7dmFyIHg9ITEsTT0hMSx2PSExLFU9ITEsej0hMSxEPSExLEc9ITEsSD0hdGhpcy5fcGFydHMudXJuO3N3aXRjaCh0aGlzLl9wYXJ0cy5ob3N0bmFtZSYmKEg9ITEsTT1yLmlwNF9leHByZXNzaW9uLnRlc3QodGhpcy5fcGFydHMuaG9zdG5hbWUpLHY9ci5pcDZfZXhwcmVzc2lvbi50ZXN0KHRoaXMuX3BhcnRzLmhvc3RuYW1lKSx4PU18fHYsVT0heCx6PVUmJm4mJm4uaGFzKHRoaXMuX3BhcnRzLmhvc3RuYW1lKSxEPVUmJnIuaWRuX2V4cHJlc3Npb24udGVzdCh0aGlzLl9wYXJ0cy5ob3N0bmFtZSksRz1VJiZyLnB1bnljb2RlX2V4cHJlc3Npb24udGVzdCh0aGlzLl9wYXJ0cy5ob3N0bmFtZSkpLEEudG9Mb3dlckNhc2UoKSl7Y2FzZSJyZWxhdGl2ZSI6cmV0dXJuIEg7Y2FzZSJhYnNvbHV0ZSI6cmV0dXJuIUg7Y2FzZSJkb21haW4iOmNhc2UibmFtZSI6cmV0dXJuIFU7Y2FzZSJzbGQiOnJldHVybiB6O2Nhc2UiaXAiOnJldHVybiB4O2Nhc2UiaXA0IjpjYXNlImlwdjQiOmNhc2UiaW5ldDQiOnJldHVybiBNO2Nhc2UiaXA2IjpjYXNlImlwdjYiOmNhc2UiaW5ldDYiOnJldHVybiB2O2Nhc2UiaWRuIjpyZXR1cm4gRDtjYXNlInVybCI6cmV0dXJuIXRoaXMuX3BhcnRzLnVybjtjYXNlInVybiI6cmV0dXJuISF0aGlzLl9wYXJ0cy51cm47Y2FzZSJwdW55Y29kZSI6cmV0dXJuIEd9cmV0dXJuIG51bGx9O3ZhciBJPWYucHJvdG9jb2wsTj1mLnBvcnQsUD1mLmhvc3RuYW1lO2YucHJvdG9jb2w9ZnVuY3Rpb24oQSx4KXtpZihBJiYoQT1BLnJlcGxhY2UoLzooXC9cLyk/JC8sIiIpLCFBLm1hdGNoKHIucHJvdG9jb2xfZXhwcmVzc2lvbikpKXRocm93IG5ldyBUeXBlRXJyb3IoJ1Byb3RvY29sICInK0ErYCIgY29udGFpbnMgY2hhcmFjdGVycyBvdGhlciB0aGFuIFtBLVowLTkuKy1dIG9yIGRvZXNuJ3Qgc3RhcnQgd2l0aCBbQS1aXWApO3JldHVybiBJLmNhbGwodGhpcyxBLHgpfSxmLnNjaGVtZT1mLnByb3RvY29sLGYucG9ydD1mdW5jdGlvbihBLHgpe3JldHVybiB0aGlzLl9wYXJ0cy51cm4/QT09PXZvaWQgMD8iIjp0aGlzOihBIT09dm9pZCAwJiYoQT09PTAmJihBPW51bGwpLEEmJihBKz0iIixBLmNoYXJBdCgwKT09PSI6IiYmKEE9QS5zdWJzdHJpbmcoMSkpLHIuZW5zdXJlVmFsaWRQb3J0KEEpKSksTi5jYWxsKHRoaXMsQSx4KSl9LGYuaG9zdG5hbWU9ZnVuY3Rpb24oQSx4KXtpZih0aGlzLl9wYXJ0cy51cm4pcmV0dXJuIEE9PT12b2lkIDA/IiI6dGhpcztpZihBIT09dm9pZCAwKXt2YXIgTT17cHJldmVudEludmFsaWRIb3N0bmFtZTp0aGlzLl9wYXJ0cy5wcmV2ZW50SW52YWxpZEhvc3RuYW1lfSx2PXIucGFyc2VIb3N0KEEsTSk7aWYodiE9PSIvIil0aHJvdyBuZXcgVHlwZUVycm9yKCdIb3N0bmFtZSAiJytBKyciIGNvbnRhaW5zIGNoYXJhY3RlcnMgb3RoZXIgdGhhbiBbQS1aMC05Li1dJyk7QT1NLmhvc3RuYW1lLHRoaXMuX3BhcnRzLnByZXZlbnRJbnZhbGlkSG9zdG5hbWUmJnIuZW5zdXJlVmFsaWRIb3N0bmFtZShBLHRoaXMuX3BhcnRzLnByb3RvY29sKX1yZXR1cm4gUC5jYWxsKHRoaXMsQSx4KX0sZi5vcmlnaW49ZnVuY3Rpb24oQSx4KXtpZih0aGlzLl9wYXJ0cy51cm4pcmV0dXJuIEE9PT12b2lkIDA/IiI6dGhpcztpZihBPT09dm9pZCAwKXt2YXIgTT10aGlzLnByb3RvY29sKCksdj10aGlzLmF1dGhvcml0eSgpO3JldHVybiB2PyhNP00rIjovLyI6IiIpK3RoaXMuYXV0aG9yaXR5KCk6IiJ9ZWxzZXt2YXIgVT1yKEEpO3JldHVybiB0aGlzLnByb3RvY29sKFUucHJvdG9jb2woKSkuYXV0aG9yaXR5KFUuYXV0aG9yaXR5KCkpLmJ1aWxkKCF4KSx0aGlzfX0sZi5ob3N0PWZ1bmN0aW9uKEEseCl7aWYodGhpcy5fcGFydHMudXJuKXJldHVybiBBPT09dm9pZCAwPyIiOnRoaXM7aWYoQT09PXZvaWQgMClyZXR1cm4gdGhpcy5fcGFydHMuaG9zdG5hbWU/ci5idWlsZEhvc3QodGhpcy5fcGFydHMpOiIiO3ZhciBNPXIucGFyc2VIb3N0KEEsdGhpcy5fcGFydHMpO2lmKE0hPT0iLyIpdGhyb3cgbmV3IFR5cGVFcnJvcignSG9zdG5hbWUgIicrQSsnIiBjb250YWlucyBjaGFyYWN0ZXJzIG90aGVyIHRoYW4gW0EtWjAtOS4tXScpO3JldHVybiB0aGlzLmJ1aWxkKCF4KSx0aGlzfSxmLmF1dGhvcml0eT1mdW5jdGlvbihBLHgpe2lmKHRoaXMuX3BhcnRzLnVybilyZXR1cm4gQT09PXZvaWQgMD8iIjp0aGlzO2lmKEE9PT12b2lkIDApcmV0dXJuIHRoaXMuX3BhcnRzLmhvc3RuYW1lP3IuYnVpbGRBdXRob3JpdHkodGhpcy5fcGFydHMpOiIiO3ZhciBNPXIucGFyc2VBdXRob3JpdHkoQSx0aGlzLl9wYXJ0cyk7aWYoTSE9PSIvIil0aHJvdyBuZXcgVHlwZUVycm9yKCdIb3N0bmFtZSAiJytBKyciIGNvbnRhaW5zIGNoYXJhY3RlcnMgb3RoZXIgdGhhbiBbQS1aMC05Li1dJyk7cmV0dXJuIHRoaXMuYnVpbGQoIXgpLHRoaXN9LGYudXNlcmluZm89ZnVuY3Rpb24oQSx4KXtpZih0aGlzLl9wYXJ0cy51cm4pcmV0dXJuIEE9PT12b2lkIDA/IiI6dGhpcztpZihBPT09dm9pZCAwKXt2YXIgTT1yLmJ1aWxkVXNlcmluZm8odGhpcy5fcGFydHMpO3JldHVybiBNJiZNLnN1YnN0cmluZygwLE0ubGVuZ3RoLTEpfWVsc2UgcmV0dXJuIEFbQS5sZW5ndGgtMV0hPT0iQCImJihBKz0iQCIpLHIucGFyc2VVc2VyaW5mbyhBLHRoaXMuX3BhcnRzKSx0aGlzLmJ1aWxkKCF4KSx0aGlzfSxmLnJlc291cmNlPWZ1bmN0aW9uKEEseCl7dmFyIE07cmV0dXJuIEE9PT12b2lkIDA/dGhpcy5wYXRoKCkrdGhpcy5zZWFyY2goKSt0aGlzLmhhc2goKTooTT1yLnBhcnNlKEEpLHRoaXMuX3BhcnRzLnBhdGg9TS5wYXRoLHRoaXMuX3BhcnRzLnF1ZXJ5PU0ucXVlcnksdGhpcy5fcGFydHMuZnJhZ21lbnQ9TS5mcmFnbWVudCx0aGlzLmJ1aWxkKCF4KSx0aGlzKX0sZi5zdWJkb21haW49ZnVuY3Rpb24oQSx4KXtpZih0aGlzLl9wYXJ0cy51cm4pcmV0dXJuIEE9PT12b2lkIDA/IiI6dGhpcztpZihBPT09dm9pZCAwKXtpZighdGhpcy5fcGFydHMuaG9zdG5hbWV8fHRoaXMuaXMoIklQIikpcmV0dXJuIiI7dmFyIE09dGhpcy5fcGFydHMuaG9zdG5hbWUubGVuZ3RoLXRoaXMuZG9tYWluKCkubGVuZ3RoLTE7cmV0dXJuIHRoaXMuX3BhcnRzLmhvc3RuYW1lLnN1YnN0cmluZygwLE0pfHwiIn1lbHNle3ZhciB2PXRoaXMuX3BhcnRzLmhvc3RuYW1lLmxlbmd0aC10aGlzLmRvbWFpbigpLmxlbmd0aCxVPXRoaXMuX3BhcnRzLmhvc3RuYW1lLnN1YnN0cmluZygwLHYpLHo9bmV3IFJlZ0V4cCgiXiIrYyhVKSk7aWYoQSYmQS5jaGFyQXQoQS5sZW5ndGgtMSkhPT0iLiImJihBKz0iLiIpLEEuaW5kZXhPZigiOiIpIT09LTEpdGhyb3cgbmV3IFR5cGVFcnJvcigiRG9tYWlucyBjYW5ub3QgY29udGFpbiBjb2xvbnMiKTtyZXR1cm4gQSYmci5lbnN1cmVWYWxpZEhvc3RuYW1lKEEsdGhpcy5fcGFydHMucHJvdG9jb2wpLHRoaXMuX3BhcnRzLmhvc3RuYW1lPXRoaXMuX3BhcnRzLmhvc3RuYW1lLnJlcGxhY2UoeixBKSx0aGlzLmJ1aWxkKCF4KSx0aGlzfX0sZi5kb21haW49ZnVuY3Rpb24oQSx4KXtpZih0aGlzLl9wYXJ0cy51cm4pcmV0dXJuIEE9PT12b2lkIDA/IiI6dGhpcztpZih0eXBlb2YgQT09ImJvb2xlYW4iJiYoeD1BLEE9dm9pZCAwKSxBPT09dm9pZCAwKXtpZighdGhpcy5fcGFydHMuaG9zdG5hbWV8fHRoaXMuaXMoIklQIikpcmV0dXJuIiI7dmFyIE09dGhpcy5fcGFydHMuaG9zdG5hbWUubWF0Y2goL1wuL2cpO2lmKE0mJk0ubGVuZ3RoPDIpcmV0dXJuIHRoaXMuX3BhcnRzLmhvc3RuYW1lO3ZhciB2PXRoaXMuX3BhcnRzLmhvc3RuYW1lLmxlbmd0aC10aGlzLnRsZCh4KS5sZW5ndGgtMTtyZXR1cm4gdj10aGlzLl9wYXJ0cy5ob3N0bmFtZS5sYXN0SW5kZXhPZigiLiIsdi0xKSsxLHRoaXMuX3BhcnRzLmhvc3RuYW1lLnN1YnN0cmluZyh2KXx8IiJ9ZWxzZXtpZighQSl0aHJvdyBuZXcgVHlwZUVycm9yKCJjYW5ub3Qgc2V0IGRvbWFpbiBlbXB0eSIpO2lmKEEuaW5kZXhPZigiOiIpIT09LTEpdGhyb3cgbmV3IFR5cGVFcnJvcigiRG9tYWlucyBjYW5ub3QgY29udGFpbiBjb2xvbnMiKTtpZihyLmVuc3VyZVZhbGlkSG9zdG5hbWUoQSx0aGlzLl9wYXJ0cy5wcm90b2NvbCksIXRoaXMuX3BhcnRzLmhvc3RuYW1lfHx0aGlzLmlzKCJJUCIpKXRoaXMuX3BhcnRzLmhvc3RuYW1lPUE7ZWxzZXt2YXIgVT1uZXcgUmVnRXhwKGModGhpcy5kb21haW4oKSkrIiQiKTt0aGlzLl9wYXJ0cy5ob3N0bmFtZT10aGlzLl9wYXJ0cy5ob3N0bmFtZS5yZXBsYWNlKFUsQSl9cmV0dXJuIHRoaXMuYnVpbGQoIXgpLHRoaXN9fSxmLnRsZD1mdW5jdGlvbihBLHgpe2lmKHRoaXMuX3BhcnRzLnVybilyZXR1cm4gQT09PXZvaWQgMD8iIjp0aGlzO2lmKHR5cGVvZiBBPT0iYm9vbGVhbiImJih4PUEsQT12b2lkIDApLEE9PT12b2lkIDApe2lmKCF0aGlzLl9wYXJ0cy5ob3N0bmFtZXx8dGhpcy5pcygiSVAiKSlyZXR1cm4iIjt2YXIgTT10aGlzLl9wYXJ0cy5ob3N0bmFtZS5sYXN0SW5kZXhPZigiLiIpLHY9dGhpcy5fcGFydHMuaG9zdG5hbWUuc3Vic3RyaW5nKE0rMSk7cmV0dXJuIHghPT0hMCYmbiYmbi5saXN0W3YudG9Mb3dlckNhc2UoKV0mJm4uZ2V0KHRoaXMuX3BhcnRzLmhvc3RuYW1lKXx8dn1lbHNle3ZhciBVO2lmKEEpaWYoQS5tYXRjaCgvW15hLXpBLVowLTktXS8pKWlmKG4mJm4uaXMoQSkpVT1uZXcgUmVnRXhwKGModGhpcy50bGQoKSkrIiQiKSx0aGlzLl9wYXJ0cy5ob3N0bmFtZT10aGlzLl9wYXJ0cy5ob3N0bmFtZS5yZXBsYWNlKFUsQSk7ZWxzZSB0aHJvdyBuZXcgVHlwZUVycm9yKCdUTEQgIicrQSsnIiBjb250YWlucyBjaGFyYWN0ZXJzIG90aGVyIHRoYW4gW0EtWjAtOV0nKTtlbHNle2lmKCF0aGlzLl9wYXJ0cy5ob3N0bmFtZXx8dGhpcy5pcygiSVAiKSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoImNhbm5vdCBzZXQgVExEIG9uIG5vbi1kb21haW4gaG9zdCIpO1U9bmV3IFJlZ0V4cChjKHRoaXMudGxkKCkpKyIkIiksdGhpcy5fcGFydHMuaG9zdG5hbWU9dGhpcy5fcGFydHMuaG9zdG5hbWUucmVwbGFjZShVLEEpfWVsc2UgdGhyb3cgbmV3IFR5cGVFcnJvcigiY2Fubm90IHNldCBUTEQgZW1wdHkiKTtyZXR1cm4gdGhpcy5idWlsZCgheCksdGhpc319LGYuZGlyZWN0b3J5PWZ1bmN0aW9uKEEseCl7aWYodGhpcy5fcGFydHMudXJuKXJldHVybiBBPT09dm9pZCAwPyIiOnRoaXM7aWYoQT09PXZvaWQgMHx8QT09PSEwKXtpZighdGhpcy5fcGFydHMucGF0aCYmIXRoaXMuX3BhcnRzLmhvc3RuYW1lKXJldHVybiIiO2lmKHRoaXMuX3BhcnRzLnBhdGg9PT0iLyIpcmV0dXJuIi8iO3ZhciBNPXRoaXMuX3BhcnRzLnBhdGgubGVuZ3RoLXRoaXMuZmlsZW5hbWUoKS5sZW5ndGgtMSx2PXRoaXMuX3BhcnRzLnBhdGguc3Vic3RyaW5nKDAsTSl8fCh0aGlzLl9wYXJ0cy5ob3N0bmFtZT8iLyI6IiIpO3JldHVybiBBP3IuZGVjb2RlUGF0aCh2KTp2fWVsc2V7dmFyIFU9dGhpcy5fcGFydHMucGF0aC5sZW5ndGgtdGhpcy5maWxlbmFtZSgpLmxlbmd0aCx6PXRoaXMuX3BhcnRzLnBhdGguc3Vic3RyaW5nKDAsVSksRD1uZXcgUmVnRXhwKCJeIitjKHopKTtyZXR1cm4gdGhpcy5pcygicmVsYXRpdmUiKXx8KEF8fChBPSIvIiksQS5jaGFyQXQoMCkhPT0iLyImJihBPSIvIitBKSksQSYmQS5jaGFyQXQoQS5sZW5ndGgtMSkhPT0iLyImJihBKz0iLyIpLEE9ci5yZWNvZGVQYXRoKEEpLHRoaXMuX3BhcnRzLnBhdGg9dGhpcy5fcGFydHMucGF0aC5yZXBsYWNlKEQsQSksdGhpcy5idWlsZCgheCksdGhpc319LGYuZmlsZW5hbWU9ZnVuY3Rpb24oQSx4KXtpZih0aGlzLl9wYXJ0cy51cm4pcmV0dXJuIEE9PT12b2lkIDA/IiI6dGhpcztpZih0eXBlb2YgQSE9InN0cmluZyIpe2lmKCF0aGlzLl9wYXJ0cy5wYXRofHx0aGlzLl9wYXJ0cy5wYXRoPT09Ii8iKXJldHVybiIiO3ZhciBNPXRoaXMuX3BhcnRzLnBhdGgubGFzdEluZGV4T2YoIi8iKSx2PXRoaXMuX3BhcnRzLnBhdGguc3Vic3RyaW5nKE0rMSk7cmV0dXJuIEE/ci5kZWNvZGVQYXRoU2VnbWVudCh2KTp2fWVsc2V7dmFyIFU9ITE7QS5jaGFyQXQoMCk9PT0iLyImJihBPUEuc3Vic3RyaW5nKDEpKSxBLm1hdGNoKC9cLj9cLy8pJiYoVT0hMCk7dmFyIHo9bmV3IFJlZ0V4cChjKHRoaXMuZmlsZW5hbWUoKSkrIiQiKTtyZXR1cm4gQT1yLnJlY29kZVBhdGgoQSksdGhpcy5fcGFydHMucGF0aD10aGlzLl9wYXJ0cy5wYXRoLnJlcGxhY2UoeixBKSxVP3RoaXMubm9ybWFsaXplUGF0aCh4KTp0aGlzLmJ1aWxkKCF4KSx0aGlzfX0sZi5zdWZmaXg9ZnVuY3Rpb24oQSx4KXtpZih0aGlzLl9wYXJ0cy51cm4pcmV0dXJuIEE9PT12b2lkIDA/IiI6dGhpcztpZihBPT09dm9pZCAwfHxBPT09ITApe2lmKCF0aGlzLl9wYXJ0cy5wYXRofHx0aGlzLl9wYXJ0cy5wYXRoPT09Ii8iKXJldHVybiIiO3ZhciBNPXRoaXMuZmlsZW5hbWUoKSx2PU0ubGFzdEluZGV4T2YoIi4iKSxVLHo7cmV0dXJuIHY9PT0tMT8iIjooVT1NLnN1YnN0cmluZyh2KzEpLHo9L15bYS16MC05JV0rJC9pLnRlc3QoVSk/VToiIixBP3IuZGVjb2RlUGF0aFNlZ21lbnQoeik6eil9ZWxzZXtBLmNoYXJBdCgwKT09PSIuIiYmKEE9QS5zdWJzdHJpbmcoMSkpO3ZhciBEPXRoaXMuc3VmZml4KCksRztpZihEKUE/Rz1uZXcgUmVnRXhwKGMoRCkrIiQiKTpHPW5ldyBSZWdFeHAoYygiLiIrRCkrIiQiKTtlbHNle2lmKCFBKXJldHVybiB0aGlzO3RoaXMuX3BhcnRzLnBhdGgrPSIuIityLnJlY29kZVBhdGgoQSl9cmV0dXJuIEcmJihBPXIucmVjb2RlUGF0aChBKSx0aGlzLl9wYXJ0cy5wYXRoPXRoaXMuX3BhcnRzLnBhdGgucmVwbGFjZShHLEEpKSx0aGlzLmJ1aWxkKCF4KSx0aGlzfX0sZi5zZWdtZW50PWZ1bmN0aW9uKEEseCxNKXt2YXIgdj10aGlzLl9wYXJ0cy51cm4/IjoiOiIvIixVPXRoaXMucGF0aCgpLHo9VS5zdWJzdHJpbmcoMCwxKT09PSIvIixEPVUuc3BsaXQodik7aWYoQSE9PXZvaWQgMCYmdHlwZW9mIEEhPSJudW1iZXIiJiYoTT14LHg9QSxBPXZvaWQgMCksQSE9PXZvaWQgMCYmdHlwZW9mIEEhPSJudW1iZXIiKXRocm93IG5ldyBFcnJvcignQmFkIHNlZ21lbnQgIicrQSsnIiwgbXVzdCBiZSAwLWJhc2VkIGludGVnZXInKTtpZih6JiZELnNoaWZ0KCksQTwwJiYoQT1NYXRoLm1heChELmxlbmd0aCtBLDApKSx4PT09dm9pZCAwKXJldHVybiBBPT09dm9pZCAwP0Q6RFtBXTtpZihBPT09bnVsbHx8RFtBXT09PXZvaWQgMClpZihsKHgpKXtEPVtdO2Zvcih2YXIgRz0wLEg9eC5sZW5ndGg7RzxIO0crKykheFtHXS5sZW5ndGgmJighRC5sZW5ndGh8fCFEW0QubGVuZ3RoLTFdLmxlbmd0aCl8fChELmxlbmd0aCYmIURbRC5sZW5ndGgtMV0ubGVuZ3RoJiZELnBvcCgpLEQucHVzaChwKHhbR10pKSl9ZWxzZSh4fHx0eXBlb2YgeD09InN0cmluZyIpJiYoeD1wKHgpLERbRC5sZW5ndGgtMV09PT0iIj9EW0QubGVuZ3RoLTFdPXg6RC5wdXNoKHgpKTtlbHNlIHg/RFtBXT1wKHgpOkQuc3BsaWNlKEEsMSk7cmV0dXJuIHomJkQudW5zaGlmdCgiIiksdGhpcy5wYXRoKEQuam9pbih2KSxNKX0sZi5zZWdtZW50Q29kZWQ9ZnVuY3Rpb24oQSx4LE0pe3ZhciB2LFUsejtpZih0eXBlb2YgQSE9Im51bWJlciImJihNPXgseD1BLEE9dm9pZCAwKSx4PT09dm9pZCAwKXtpZih2PXRoaXMuc2VnbWVudChBLHgsTSksIWwodikpdj12IT09dm9pZCAwP3IuZGVjb2RlKHYpOnZvaWQgMDtlbHNlIGZvcihVPTAsej12Lmxlbmd0aDtVPHo7VSsrKXZbVV09ci5kZWNvZGUodltVXSk7cmV0dXJuIHZ9aWYoIWwoeCkpeD10eXBlb2YgeD09InN0cmluZyJ8fHggaW5zdGFuY2VvZiBTdHJpbmc/ci5lbmNvZGUoeCk6eDtlbHNlIGZvcihVPTAsej14Lmxlbmd0aDtVPHo7VSsrKXhbVV09ci5lbmNvZGUoeFtVXSk7cmV0dXJuIHRoaXMuc2VnbWVudChBLHgsTSl9O3ZhciBGPWYucXVlcnk7cmV0dXJuIGYucXVlcnk9ZnVuY3Rpb24oQSx4KXtpZihBPT09ITApcmV0dXJuIHIucGFyc2VRdWVyeSh0aGlzLl9wYXJ0cy5xdWVyeSx0aGlzLl9wYXJ0cy5lc2NhcGVRdWVyeVNwYWNlKTtpZih0eXBlb2YgQT09ImZ1bmN0aW9uIil7dmFyIE09ci5wYXJzZVF1ZXJ5KHRoaXMuX3BhcnRzLnF1ZXJ5LHRoaXMuX3BhcnRzLmVzY2FwZVF1ZXJ5U3BhY2UpLHY9QS5jYWxsKHRoaXMsTSk7cmV0dXJuIHRoaXMuX3BhcnRzLnF1ZXJ5PXIuYnVpbGRRdWVyeSh2fHxNLHRoaXMuX3BhcnRzLmR1cGxpY2F0ZVF1ZXJ5UGFyYW1ldGVycyx0aGlzLl9wYXJ0cy5lc2NhcGVRdWVyeVNwYWNlKSx0aGlzLmJ1aWxkKCF4KSx0aGlzfWVsc2UgcmV0dXJuIEEhPT12b2lkIDAmJnR5cGVvZiBBIT0ic3RyaW5nIj8odGhpcy5fcGFydHMucXVlcnk9ci5idWlsZFF1ZXJ5KEEsdGhpcy5fcGFydHMuZHVwbGljYXRlUXVlcnlQYXJhbWV0ZXJzLHRoaXMuX3BhcnRzLmVzY2FwZVF1ZXJ5U3BhY2UpLHRoaXMuYnVpbGQoIXgpLHRoaXMpOkYuY2FsbCh0aGlzLEEseCl9LGYuc2V0UXVlcnk9ZnVuY3Rpb24oQSx4LE0pe3ZhciB2PXIucGFyc2VRdWVyeSh0aGlzLl9wYXJ0cy5xdWVyeSx0aGlzLl9wYXJ0cy5lc2NhcGVRdWVyeVNwYWNlKTtpZih0eXBlb2YgQT09InN0cmluZyJ8fEEgaW5zdGFuY2VvZiBTdHJpbmcpdltBXT14IT09dm9pZCAwP3g6bnVsbDtlbHNlIGlmKHR5cGVvZiBBPT0ib2JqZWN0Iilmb3IodmFyIFUgaW4gQSlkLmNhbGwoQSxVKSYmKHZbVV09QVtVXSk7ZWxzZSB0aHJvdyBuZXcgVHlwZUVycm9yKCJVUkkuYWRkUXVlcnkoKSBhY2NlcHRzIGFuIG9iamVjdCwgc3RyaW5nIGFzIHRoZSBuYW1lIHBhcmFtZXRlciIpO3JldHVybiB0aGlzLl9wYXJ0cy5xdWVyeT1yLmJ1aWxkUXVlcnkodix0aGlzLl9wYXJ0cy5kdXBsaWNhdGVRdWVyeVBhcmFtZXRlcnMsdGhpcy5fcGFydHMuZXNjYXBlUXVlcnlTcGFjZSksdHlwZW9mIEEhPSJzdHJpbmciJiYoTT14KSx0aGlzLmJ1aWxkKCFNKSx0aGlzfSxmLmFkZFF1ZXJ5PWZ1bmN0aW9uKEEseCxNKXt2YXIgdj1yLnBhcnNlUXVlcnkodGhpcy5fcGFydHMucXVlcnksdGhpcy5fcGFydHMuZXNjYXBlUXVlcnlTcGFjZSk7cmV0dXJuIHIuYWRkUXVlcnkodixBLHg9PT12b2lkIDA/bnVsbDp4KSx0aGlzLl9wYXJ0cy5xdWVyeT1yLmJ1aWxkUXVlcnkodix0aGlzLl9wYXJ0cy5kdXBsaWNhdGVRdWVyeVBhcmFtZXRlcnMsdGhpcy5fcGFydHMuZXNjYXBlUXVlcnlTcGFjZSksdHlwZW9mIEEhPSJzdHJpbmciJiYoTT14KSx0aGlzLmJ1aWxkKCFNKSx0aGlzfSxmLnJlbW92ZVF1ZXJ5PWZ1bmN0aW9uKEEseCxNKXt2YXIgdj1yLnBhcnNlUXVlcnkodGhpcy5fcGFydHMucXVlcnksdGhpcy5fcGFydHMuZXNjYXBlUXVlcnlTcGFjZSk7cmV0dXJuIHIucmVtb3ZlUXVlcnkodixBLHgpLHRoaXMuX3BhcnRzLnF1ZXJ5PXIuYnVpbGRRdWVyeSh2LHRoaXMuX3BhcnRzLmR1cGxpY2F0ZVF1ZXJ5UGFyYW1ldGVycyx0aGlzLl9wYXJ0cy5lc2NhcGVRdWVyeVNwYWNlKSx0eXBlb2YgQSE9InN0cmluZyImJihNPXgpLHRoaXMuYnVpbGQoIU0pLHRoaXN9LGYuaGFzUXVlcnk9ZnVuY3Rpb24oQSx4LE0pe3ZhciB2PXIucGFyc2VRdWVyeSh0aGlzLl9wYXJ0cy5xdWVyeSx0aGlzLl9wYXJ0cy5lc2NhcGVRdWVyeVNwYWNlKTtyZXR1cm4gci5oYXNRdWVyeSh2LEEseCxNKX0sZi5zZXRTZWFyY2g9Zi5zZXRRdWVyeSxmLmFkZFNlYXJjaD1mLmFkZFF1ZXJ5LGYucmVtb3ZlU2VhcmNoPWYucmVtb3ZlUXVlcnksZi5oYXNTZWFyY2g9Zi5oYXNRdWVyeSxmLm5vcm1hbGl6ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9wYXJ0cy51cm4/dGhpcy5ub3JtYWxpemVQcm90b2NvbCghMSkubm9ybWFsaXplUGF0aCghMSkubm9ybWFsaXplUXVlcnkoITEpLm5vcm1hbGl6ZUZyYWdtZW50KCExKS5idWlsZCgpOnRoaXMubm9ybWFsaXplUHJvdG9jb2woITEpLm5vcm1hbGl6ZUhvc3RuYW1lKCExKS5ub3JtYWxpemVQb3J0KCExKS5ub3JtYWxpemVQYXRoKCExKS5ub3JtYWxpemVRdWVyeSghMSkubm9ybWFsaXplRnJhZ21lbnQoITEpLmJ1aWxkKCl9LGYubm9ybWFsaXplUHJvdG9jb2w9ZnVuY3Rpb24oQSl7cmV0dXJuIHR5cGVvZiB0aGlzLl9wYXJ0cy5wcm90b2NvbD09InN0cmluZyImJih0aGlzLl9wYXJ0cy5wcm90b2NvbD10aGlzLl9wYXJ0cy5wcm90b2NvbC50b0xvd2VyQ2FzZSgpLHRoaXMuYnVpbGQoIUEpKSx0aGlzfSxmLm5vcm1hbGl6ZUhvc3RuYW1lPWZ1bmN0aW9uKEEpe3JldHVybiB0aGlzLl9wYXJ0cy5ob3N0bmFtZSYmKHRoaXMuaXMoIklETiIpJiZlP3RoaXMuX3BhcnRzLmhvc3RuYW1lPWUudG9BU0NJSSh0aGlzLl9wYXJ0cy5ob3N0bmFtZSk6dGhpcy5pcygiSVB2NiIpJiZ0JiYodGhpcy5fcGFydHMuaG9zdG5hbWU9dC5iZXN0KHRoaXMuX3BhcnRzLmhvc3RuYW1lKSksdGhpcy5fcGFydHMuaG9zdG5hbWU9dGhpcy5fcGFydHMuaG9zdG5hbWUudG9Mb3dlckNhc2UoKSx0aGlzLmJ1aWxkKCFBKSksdGhpc30sZi5ub3JtYWxpemVQb3J0PWZ1bmN0aW9uKEEpe3JldHVybiB0eXBlb2YgdGhpcy5fcGFydHMucHJvdG9jb2w9PSJzdHJpbmciJiZ0aGlzLl9wYXJ0cy5wb3J0PT09ci5kZWZhdWx0UG9ydHNbdGhpcy5fcGFydHMucHJvdG9jb2xdJiYodGhpcy5fcGFydHMucG9ydD1udWxsLHRoaXMuYnVpbGQoIUEpKSx0aGlzfSxmLm5vcm1hbGl6ZVBhdGg9ZnVuY3Rpb24oQSl7dmFyIHg9dGhpcy5fcGFydHMucGF0aDtpZigheClyZXR1cm4gdGhpcztpZih0aGlzLl9wYXJ0cy51cm4pcmV0dXJuIHRoaXMuX3BhcnRzLnBhdGg9ci5yZWNvZGVVcm5QYXRoKHRoaXMuX3BhcnRzLnBhdGgpLHRoaXMuYnVpbGQoIUEpLHRoaXM7aWYodGhpcy5fcGFydHMucGF0aD09PSIvIilyZXR1cm4gdGhpczt4PXIucmVjb2RlUGF0aCh4KTt2YXIgTSx2PSIiLFUsejtmb3IoeC5jaGFyQXQoMCkhPT0iLyImJihNPSEwLHg9Ii8iK3gpLCh4LnNsaWNlKC0zKT09PSIvLi4ifHx4LnNsaWNlKC0yKT09PSIvLiIpJiYoeCs9Ii8iKSx4PXgucmVwbGFjZSgvKFwvKFwuXC8pKyl8KFwvXC4kKS9nLCIvIikucmVwbGFjZSgvXC97Mix9L2csIi8iKSxNJiYodj14LnN1YnN0cmluZygxKS5tYXRjaCgvXihcLlwuXC8pKy8pfHwiIix2JiYodj12WzBdKSk7VT14LnNlYXJjaCgvXC9cLlwuKFwvfCQpLyksVSE9PS0xOyl7aWYoVT09PTApe3g9eC5zdWJzdHJpbmcoMyk7Y29udGludWV9ej14LnN1YnN0cmluZygwLFUpLmxhc3RJbmRleE9mKCIvIiksej09PS0xJiYoej1VKSx4PXguc3Vic3RyaW5nKDAseikreC5zdWJzdHJpbmcoVSszKX1yZXR1cm4gTSYmdGhpcy5pcygicmVsYXRpdmUiKSYmKHg9dit4LnN1YnN0cmluZygxKSksdGhpcy5fcGFydHMucGF0aD14LHRoaXMuYnVpbGQoIUEpLHRoaXN9LGYubm9ybWFsaXplUGF0aG5hbWU9Zi5ub3JtYWxpemVQYXRoLGYubm9ybWFsaXplUXVlcnk9ZnVuY3Rpb24oQSl7cmV0dXJuIHR5cGVvZiB0aGlzLl9wYXJ0cy5xdWVyeT09InN0cmluZyImJih0aGlzLl9wYXJ0cy5xdWVyeS5sZW5ndGg/dGhpcy5xdWVyeShyLnBhcnNlUXVlcnkodGhpcy5fcGFydHMucXVlcnksdGhpcy5fcGFydHMuZXNjYXBlUXVlcnlTcGFjZSkpOnRoaXMuX3BhcnRzLnF1ZXJ5PW51bGwsdGhpcy5idWlsZCghQSkpLHRoaXN9LGYubm9ybWFsaXplRnJhZ21lbnQ9ZnVuY3Rpb24oQSl7cmV0dXJuIHRoaXMuX3BhcnRzLmZyYWdtZW50fHwodGhpcy5fcGFydHMuZnJhZ21lbnQ9bnVsbCx0aGlzLmJ1aWxkKCFBKSksdGhpc30sZi5ub3JtYWxpemVTZWFyY2g9Zi5ub3JtYWxpemVRdWVyeSxmLm5vcm1hbGl6ZUhhc2g9Zi5ub3JtYWxpemVGcmFnbWVudCxmLmlzbzg4NTk9ZnVuY3Rpb24oKXt2YXIgQT1yLmVuY29kZSx4PXIuZGVjb2RlO3IuZW5jb2RlPWVzY2FwZSxyLmRlY29kZT1kZWNvZGVVUklDb21wb25lbnQ7dHJ5e3RoaXMubm9ybWFsaXplKCl9ZmluYWxseXtyLmVuY29kZT1BLHIuZGVjb2RlPXh9cmV0dXJuIHRoaXN9LGYudW5pY29kZT1mdW5jdGlvbigpe3ZhciBBPXIuZW5jb2RlLHg9ci5kZWNvZGU7ci5lbmNvZGU9VCxyLmRlY29kZT11bmVzY2FwZTt0cnl7dGhpcy5ub3JtYWxpemUoKX1maW5hbGx5e3IuZW5jb2RlPUEsci5kZWNvZGU9eH1yZXR1cm4gdGhpc30sZi5yZWFkYWJsZT1mdW5jdGlvbigpe3ZhciBBPXRoaXMuY2xvbmUoKTtBLnVzZXJuYW1lKCIiKS5wYXNzd29yZCgiIikubm9ybWFsaXplKCk7dmFyIHg9IiI7aWYoQS5fcGFydHMucHJvdG9jb2wmJih4Kz1BLl9wYXJ0cy5wcm90b2NvbCsiOi8vIiksQS5fcGFydHMuaG9zdG5hbWUmJihBLmlzKCJwdW55Y29kZSIpJiZlPyh4Kz1lLnRvVW5pY29kZShBLl9wYXJ0cy5ob3N0bmFtZSksQS5fcGFydHMucG9ydCYmKHgrPSI6IitBLl9wYXJ0cy5wb3J0KSk6eCs9QS5ob3N0KCkpLEEuX3BhcnRzLmhvc3RuYW1lJiZBLl9wYXJ0cy5wYXRoJiZBLl9wYXJ0cy5wYXRoLmNoYXJBdCgwKSE9PSIvIiYmKHgrPSIvIikseCs9QS5wYXRoKCEwKSxBLl9wYXJ0cy5xdWVyeSl7Zm9yKHZhciBNPSIiLHY9MCxVPUEuX3BhcnRzLnF1ZXJ5LnNwbGl0KCImIiksej1VLmxlbmd0aDt2PHo7disrKXt2YXIgRD0oVVt2XXx8IiIpLnNwbGl0KCI9Iik7TSs9IiYiK3IuZGVjb2RlUXVlcnkoRFswXSx0aGlzLl9wYXJ0cy5lc2NhcGVRdWVyeVNwYWNlKS5yZXBsYWNlKC8mL2csIiUyNiIpLERbMV0hPT12b2lkIDAmJihNKz0iPSIrci5kZWNvZGVRdWVyeShEWzFdLHRoaXMuX3BhcnRzLmVzY2FwZVF1ZXJ5U3BhY2UpLnJlcGxhY2UoLyYvZywiJTI2IikpfXgrPSI/IitNLnN1YnN0cmluZygxKX1yZXR1cm4geCs9ci5kZWNvZGVRdWVyeShBLmhhc2goKSwhMCkseH0sZi5hYnNvbHV0ZVRvPWZ1bmN0aW9uKEEpe3ZhciB4PXRoaXMuY2xvbmUoKSxNPVsicHJvdG9jb2wiLCJ1c2VybmFtZSIsInBhc3N3b3JkIiwiaG9zdG5hbWUiLCJwb3J0Il0sdixVLHo7aWYodGhpcy5fcGFydHMudXJuKXRocm93IG5ldyBFcnJvcigiVVJOcyBkbyBub3QgaGF2ZSBhbnkgZ2VuZXJhbGx5IGRlZmluZWQgaGllcmFyY2hpY2FsIGNvbXBvbmVudHMiKTtpZihBIGluc3RhbmNlb2Ygcnx8KEE9bmV3IHIoQSkpLHguX3BhcnRzLnByb3RvY29sfHwoeC5fcGFydHMucHJvdG9jb2w9QS5fcGFydHMucHJvdG9jb2wsdGhpcy5fcGFydHMuaG9zdG5hbWUpKXJldHVybiB4O2ZvcihVPTA7ej1NW1VdO1UrKyl4Ll9wYXJ0c1t6XT1BLl9wYXJ0c1t6XTtyZXR1cm4geC5fcGFydHMucGF0aD8oeC5fcGFydHMucGF0aC5zdWJzdHJpbmcoLTIpPT09Ii4uIiYmKHguX3BhcnRzLnBhdGgrPSIvIikseC5wYXRoKCkuY2hhckF0KDApIT09Ii8iJiYodj1BLmRpcmVjdG9yeSgpLHY9dnx8KEEucGF0aCgpLmluZGV4T2YoIi8iKT09PTA/Ii8iOiIiKSx4Ll9wYXJ0cy5wYXRoPSh2P3YrIi8iOiIiKSt4Ll9wYXJ0cy5wYXRoLHgubm9ybWFsaXplUGF0aCgpKSk6KHguX3BhcnRzLnBhdGg9QS5fcGFydHMucGF0aCx4Ll9wYXJ0cy5xdWVyeXx8KHguX3BhcnRzLnF1ZXJ5PUEuX3BhcnRzLnF1ZXJ5KSkseC5idWlsZCgpLHh9LGYucmVsYXRpdmVUbz1mdW5jdGlvbihBKXt2YXIgeD10aGlzLmNsb25lKCkubm9ybWFsaXplKCksTSx2LFUseixEO2lmKHguX3BhcnRzLnVybil0aHJvdyBuZXcgRXJyb3IoIlVSTnMgZG8gbm90IGhhdmUgYW55IGdlbmVyYWxseSBkZWZpbmVkIGhpZXJhcmNoaWNhbCBjb21wb25lbnRzIik7aWYoQT1uZXcgcihBKS5ub3JtYWxpemUoKSxNPXguX3BhcnRzLHY9QS5fcGFydHMsej14LnBhdGgoKSxEPUEucGF0aCgpLHouY2hhckF0KDApIT09Ii8iKXRocm93IG5ldyBFcnJvcigiVVJJIGlzIGFscmVhZHkgcmVsYXRpdmUiKTtpZihELmNoYXJBdCgwKSE9PSIvIil0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBjYWxjdWxhdGUgYSBVUkkgcmVsYXRpdmUgdG8gYW5vdGhlciByZWxhdGl2ZSBVUkkiKTtpZihNLnByb3RvY29sPT09di5wcm90b2NvbCYmKE0ucHJvdG9jb2w9bnVsbCksTS51c2VybmFtZSE9PXYudXNlcm5hbWV8fE0ucGFzc3dvcmQhPT12LnBhc3N3b3JkfHxNLnByb3RvY29sIT09bnVsbHx8TS51c2VybmFtZSE9PW51bGx8fE0ucGFzc3dvcmQhPT1udWxsKXJldHVybiB4LmJ1aWxkKCk7aWYoTS5ob3N0bmFtZT09PXYuaG9zdG5hbWUmJk0ucG9ydD09PXYucG9ydClNLmhvc3RuYW1lPW51bGwsTS5wb3J0PW51bGw7ZWxzZSByZXR1cm4geC5idWlsZCgpO2lmKHo9PT1EKXJldHVybiBNLnBhdGg9IiIseC5idWlsZCgpO2lmKFU9ci5jb21tb25QYXRoKHosRCksIVUpcmV0dXJuIHguYnVpbGQoKTt2YXIgRz12LnBhdGguc3Vic3RyaW5nKFUubGVuZ3RoKS5yZXBsYWNlKC9bXlwvXSokLywiIikucmVwbGFjZSgvLio/XC8vZywiLi4vIik7cmV0dXJuIE0ucGF0aD1HK00ucGF0aC5zdWJzdHJpbmcoVS5sZW5ndGgpfHwiLi8iLHguYnVpbGQoKX0sZi5lcXVhbHM9ZnVuY3Rpb24oQSl7dmFyIHg9dGhpcy5jbG9uZSgpLE09bmV3IHIoQSksdj17fSxVPXt9LHo9e30sRCxHLEg7aWYoeC5ub3JtYWxpemUoKSxNLm5vcm1hbGl6ZSgpLHgudG9TdHJpbmcoKT09PU0udG9TdHJpbmcoKSlyZXR1cm4hMDtpZihEPXgucXVlcnkoKSxHPU0ucXVlcnkoKSx4LnF1ZXJ5KCIiKSxNLnF1ZXJ5KCIiKSx4LnRvU3RyaW5nKCkhPT1NLnRvU3RyaW5nKCl8fEQubGVuZ3RoIT09Ry5sZW5ndGgpcmV0dXJuITE7dj1yLnBhcnNlUXVlcnkoRCx0aGlzLl9wYXJ0cy5lc2NhcGVRdWVyeVNwYWNlKSxVPXIucGFyc2VRdWVyeShHLHRoaXMuX3BhcnRzLmVzY2FwZVF1ZXJ5U3BhY2UpO2ZvcihIIGluIHYpaWYoZC5jYWxsKHYsSCkpe2lmKGwodltIXSkpe2lmKCFiKHZbSF0sVVtIXSkpcmV0dXJuITF9ZWxzZSBpZih2W0hdIT09VVtIXSlyZXR1cm4hMTt6W0hdPSEwfWZvcihIIGluIFUpaWYoZC5jYWxsKFUsSCkmJiF6W0hdKXJldHVybiExO3JldHVybiEwfSxmLnByZXZlbnRJbnZhbGlkSG9zdG5hbWU9ZnVuY3Rpb24oQSl7cmV0dXJuIHRoaXMuX3BhcnRzLnByZXZlbnRJbnZhbGlkSG9zdG5hbWU9ISFBLHRoaXN9LGYuZHVwbGljYXRlUXVlcnlQYXJhbWV0ZXJzPWZ1bmN0aW9uKEEpe3JldHVybiB0aGlzLl9wYXJ0cy5kdXBsaWNhdGVRdWVyeVBhcmFtZXRlcnM9ISFBLHRoaXN9LGYuZXNjYXBlUXVlcnlTcGFjZT1mdW5jdGlvbihBKXtyZXR1cm4gdGhpcy5fcGFydHMuZXNjYXBlUXVlcnlTcGFjZT0hIUEsdGhpc30scn0pfSk7ZnVuY3Rpb24gQUMoZSl7cmV0dXJuKGUubGVuZ3RoPT09MHx8ZVtlLmxlbmd0aC0xXSE9PSIvIikmJihlPWAke2V9L2ApLGV9dmFyIGsxLHYxPVgoKCk9PntrMT1BQ30pO2Z1bmN0aW9uIEYxKGUsdCl7aWYoZT09PW51bGx8fHR5cGVvZiBlIT0ib2JqZWN0IilyZXR1cm4gZTt0PXQ/PyExO2xldCBuPW5ldyBlLmNvbnN0cnVjdG9yO2ZvcihsZXQgbyBpbiBlKWlmKGUuaGFzT3duUHJvcGVydHkobykpe2xldCBhPWVbb107dCYmKGE9RjEoYSx0KSksbltvXT1hfXJldHVybiBufXZhciAkYyxEMT1YKCgpPT57JGM9RjF9KTtmdW5jdGlvbiBCMShlLHQsbil7bj1uPz8hMTtsZXQgbz17fSxhPWcoZSkscj1nKHQpLGksZixkO2lmKGEpZm9yKGkgaW4gZSllLmhhc093blByb3BlcnR5KGkpJiYoZj1lW2ldLHImJm4mJnR5cGVvZiBmPT0ib2JqZWN0IiYmdC5oYXNPd25Qcm9wZXJ0eShpKT8oZD10W2ldLHR5cGVvZiBkPT0ib2JqZWN0Ij9vW2ldPUIxKGYsZCxuKTpvW2ldPWYpOm9baV09Zik7aWYocilmb3IoaSBpbiB0KXQuaGFzT3duUHJvcGVydHkoaSkmJiFvLmhhc093blByb3BlcnR5KGkpJiYoZD10W2ldLG9baV09ZCk7cmV0dXJuIG99dmFyIHlhLGRsPVgoKCk9PntzZSgpO3lhPUIxfSk7ZnVuY3Rpb24gd0MoKXtsZXQgZSx0LG49bmV3IFByb21pc2UoZnVuY3Rpb24obyxhKXtlPW8sdD1hfSk7cmV0dXJue3Jlc29sdmU6ZSxyZWplY3Q6dCxwcm9taXNlOm59fXZhciBRaSxvYj1YKCgpPT57UWk9d0N9KTtmdW5jdGlvbiBhYihlLHQpe2xldCBuO3JldHVybiB0eXBlb2YgZG9jdW1lbnQ8InUiJiYobj1kb2N1bWVudCksYWIuX2ltcGxlbWVudGF0aW9uKGUsdCxuKX12YXIgVTEsZ2YscmI9WCgoKT0+e1UxPWNhKHVpKCksMSk7c2UoKTthYi5faW1wbGVtZW50YXRpb249ZnVuY3Rpb24oZSx0LG4pe2lmKCFnKHQpKXtpZih0eXBlb2Ygbj4idSIpcmV0dXJuIGU7dD1uLmJhc2VVUkk/P24ubG9jYXRpb24uaHJlZn1sZXQgbz1uZXcgVTEuZGVmYXVsdChlKTtyZXR1cm4gby5zY2hlbWUoKSE9PSIiP28udG9TdHJpbmcoKTpvLmFic29sdXRlVG8odCkudG9TdHJpbmcoKX07Z2Y9YWJ9KTtmdW5jdGlvbiBUQyhlLHQpe2xldCBuPSIiLG89ZS5sYXN0SW5kZXhPZigiLyIpO3JldHVybiBvIT09LTEmJihuPWUuc3Vic3RyaW5nKDAsbysxKSksdCYmKGU9bmV3IEwxLmRlZmF1bHQoZSksZS5xdWVyeSgpLmxlbmd0aCE9PTAmJihuKz1gPyR7ZS5xdWVyeSgpfWApLGUuZnJhZ21lbnQoKS5sZW5ndGghPT0wJiYobis9YCMke2UuZnJhZ21lbnQoKX1gKSksbn12YXIgTDEsajEsejE9WCgoKT0+e0wxPWNhKHVpKCksMSk7ajE9VEN9KTtmdW5jdGlvbiBFQyhlKXtsZXQgdD1uZXcgRzEuZGVmYXVsdChlKTt0Lm5vcm1hbGl6ZSgpO2xldCBuPXQucGF0aCgpLG89bi5sYXN0SW5kZXhPZigiLyIpO3JldHVybiBvIT09LTEmJihuPW4uc3Vic3RyKG8rMSkpLG89bi5sYXN0SW5kZXhPZigiLiIpLG89PT0tMT9uPSIiOm49bi5zdWJzdHIobysxKSxufXZhciBHMSxWMSxIMT1YKCgpPT57RzE9Y2EodWkoKSwxKTtWMT1FQ30pO2Z1bmN0aW9uIFJDKGUsdCxuKXtnKHQpfHwodD1lLndpZHRoKSxnKG4pfHwobj1lLmhlaWdodCk7bGV0IG89SzFbdF07ZyhvKXx8KG89e30sSzFbdF09byk7bGV0IGE9b1tuXTtpZighZyhhKSl7bGV0IHI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIik7ci53aWR0aD10LHIuaGVpZ2h0PW4sYT1yLmdldENvbnRleHQoIjJkIix7d2lsbFJlYWRGcmVxdWVudGx5OiEwfSksYS5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb249ImNvcHkiLG9bbl09YX1yZXR1cm4gYS5kcmF3SW1hZ2UoZSwwLDAsdCxuKSxhLmdldEltYWdlRGF0YSgwLDAsdCxuKS5kYXRhfXZhciBLMSxpYixxMT1YKCgpPT57c2UoKTtLMT17fTtpYj1SQ30pO2Z1bmN0aW9uIE9DKGUpe3JldHVybiB4Qy50ZXN0KGUpfXZhciB4Qyx1bCxjYj1YKCgpPT57eEM9L15ibG9iOi9pO3VsPU9DfSk7ZnVuY3Rpb24gU0MoZSl7Zyhvcil8fChvcj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIikpLG9yLmhyZWY9d2luZG93LmxvY2F0aW9uLmhyZWY7bGV0IHQ9b3IuaG9zdCxuPW9yLnByb3RvY29sO3JldHVybiBvci5ocmVmPWUsb3IuaHJlZj1vci5ocmVmLG4hPT1vci5wcm90b2NvbHx8dCE9PW9yLmhvc3R9dmFyIG9yLF9mLHNiPVgoKCk9PntzZSgpO19mPVNDfSk7ZnVuY3Rpb24gTUMoZSl7cmV0dXJuIENDLnRlc3QoZSl9dmFyIENDLGxsLGZiPVgoKCk9PntDQz0vXmRhdGE6L2k7bGw9TUN9KTtmdW5jdGlvbiBOQyhlKXtsZXQgdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzY3JpcHQiKTtyZXR1cm4gdC5hc3luYz0hMCx0LnNyYz1lLG5ldyBQcm9taXNlKChuLG8pPT57d2luZG93LmNyb3NzT3JpZ2luSXNvbGF0ZWQmJnQuc2V0QXR0cmlidXRlKCJjcm9zc29yaWdpbiIsImFub255bW91cyIpO2xldCBhPWRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJoZWFkIilbMF07dC5vbmxvYWQ9ZnVuY3Rpb24oKXt0Lm9ubG9hZD12b2lkIDAsYS5yZW1vdmVDaGlsZCh0KSxuKCl9LHQub25lcnJvcj1mdW5jdGlvbihyKXtvKHIpfSxhLmFwcGVuZENoaWxkKHQpfSl9dmFyIFcxLFgxPVgoKCk9PntXMT1OQ30pO2Z1bmN0aW9uIElDKGUpe2xldCB0PSIiO2ZvcihsZXQgbiBpbiBlKWlmKGUuaGFzT3duUHJvcGVydHkobikpe2xldCBvPWVbbl0sYT1gJHtlbmNvZGVVUklDb21wb25lbnQobil9PWA7aWYoQXJyYXkuaXNBcnJheShvKSlmb3IobGV0IHI9MCxpPW8ubGVuZ3RoO3I8aTsrK3IpdCs9YCR7YStlbmNvZGVVUklDb21wb25lbnQob1tyXSl9JmA7ZWxzZSB0Kz1gJHthK2VuY29kZVVSSUNvbXBvbmVudChvKX0mYH1yZXR1cm4gdD10LnNsaWNlKDAsLTEpLHR9dmFyIFkxLEoxPVgoKCk9PntZMT1JQ30pO2Z1bmN0aW9uIFBDKGUpe2xldCB0PXt9O2lmKGU9PT0iIilyZXR1cm4gdDtsZXQgbj1lLnJlcGxhY2UoL1wrL2csIiUyMCIpLnNwbGl0KC9bJjtdLyk7Zm9yKGxldCBvPTAsYT1uLmxlbmd0aDtvPGE7KytvKXtsZXQgcj1uW29dLnNwbGl0KCI9IiksaT1kZWNvZGVVUklDb21wb25lbnQoclswXSksZj1yWzFdO2coZik/Zj1kZWNvZGVVUklDb21wb25lbnQoZik6Zj0iIjtsZXQgZD10W2ldO3R5cGVvZiBkPT0ic3RyaW5nIj90W2ldPVtkLGZdOkFycmF5LmlzQXJyYXkoZCk/ZC5wdXNoKGYpOnRbaV09Zn1yZXR1cm4gdH12YXIgWjEsUTE9WCgoKT0+e3NlKCk7WjE9UEN9KTt2YXIga0MsQ24saGw9WCgoKT0+e2tDPXtVTklTU1VFRDowLElTU1VFRDoxLEFDVElWRToyLFJFQ0VJVkVEOjMsQ0FOQ0VMTEVEOjQsRkFJTEVEOjV9LENuPU9iamVjdC5mcmVlemUoa0MpfSk7dmFyIHZDLCQxLGVBPVgoKCk9Pnt2Qz17VEVSUkFJTjowLElNQUdFUlk6MSxUSUxFUzNEOjIsT1RIRVI6M30sJDE9T2JqZWN0LmZyZWV6ZSh2Qyl9KTtmdW5jdGlvbiBtbChlKXtlPWU/P0NlLkVNUFRZX09CSkVDVDtsZXQgdD1lLnRocm90dGxlQnlTZXJ2ZXI/PyExLG49ZS50aHJvdHRsZT8/ITE7dGhpcy51cmw9ZS51cmwsdGhpcy5yZXF1ZXN0RnVuY3Rpb249ZS5yZXF1ZXN0RnVuY3Rpb24sdGhpcy5jYW5jZWxGdW5jdGlvbj1lLmNhbmNlbEZ1bmN0aW9uLHRoaXMucHJpb3JpdHlGdW5jdGlvbj1lLnByaW9yaXR5RnVuY3Rpb24sdGhpcy5wcmlvcml0eT1lLnByaW9yaXR5Pz8wLHRoaXMudGhyb3R0bGU9bix0aGlzLnRocm90dGxlQnlTZXJ2ZXI9dCx0aGlzLnR5cGU9ZS50eXBlPz8kMS5PVEhFUix0aGlzLnNlcnZlcktleT1lLnNlcnZlcktleSx0aGlzLnN0YXRlPUNuLlVOSVNTVUVELHRoaXMuZGVmZXJyZWQ9dm9pZCAwLHRoaXMuY2FuY2VsbGVkPSExfXZhciB0QSxuQT1YKCgpPT57bXQoKTtzZSgpO2hsKCk7ZUEoKTttbC5wcm90b3R5cGUuY2FuY2VsPWZ1bmN0aW9uKCl7dGhpcy5jYW5jZWxsZWQ9ITB9O21sLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbihlKXtyZXR1cm4gZyhlKT8oZS51cmw9dGhpcy51cmwsZS5yZXF1ZXN0RnVuY3Rpb249dGhpcy5yZXF1ZXN0RnVuY3Rpb24sZS5jYW5jZWxGdW5jdGlvbj10aGlzLmNhbmNlbEZ1bmN0aW9uLGUucHJpb3JpdHlGdW5jdGlvbj10aGlzLnByaW9yaXR5RnVuY3Rpb24sZS5wcmlvcml0eT10aGlzLnByaW9yaXR5LGUudGhyb3R0bGU9dGhpcy50aHJvdHRsZSxlLnRocm90dGxlQnlTZXJ2ZXI9dGhpcy50aHJvdHRsZUJ5U2VydmVyLGUudHlwZT10aGlzLnR5cGUsZS5zZXJ2ZXJLZXk9dGhpcy5zZXJ2ZXJLZXksZS5zdGF0ZT1Dbi5VTklTU1VFRCxlLmRlZmVycmVkPXZvaWQgMCxlLmNhbmNlbGxlZD0hMSxlKTpuZXcgbWwodGhpcyl9O3RBPW1sfSk7ZnVuY3Rpb24gRkMoZSl7bGV0IHQ9e307aWYoIWUpcmV0dXJuIHQ7bGV0IG49ZS5zcGxpdChgXHIKYCk7Zm9yKGxldCBvPTA7bzxuLmxlbmd0aDsrK28pe2xldCBhPW5bb10scj1hLmluZGV4T2YoIjogIik7aWYocj4wKXtsZXQgaT1hLnN1YnN0cmluZygwLHIpLGY9YS5zdWJzdHJpbmcocisyKTt0W2ldPWZ9fXJldHVybiB0fXZhciBvQSxhQT1YKCgpPT57b0E9RkN9KTtmdW5jdGlvbiByQShlLHQsbil7dGhpcy5zdGF0dXNDb2RlPWUsdGhpcy5yZXNwb25zZT10LHRoaXMucmVzcG9uc2VIZWFkZXJzPW4sdHlwZW9mIHRoaXMucmVzcG9uc2VIZWFkZXJzPT0ic3RyaW5nIiYmKHRoaXMucmVzcG9uc2VIZWFkZXJzPW9BKHRoaXMucmVzcG9uc2VIZWFkZXJzKSl9dmFyIHlmLGlBPVgoKCk9PntzZSgpO2FBKCk7ckEucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7bGV0IGU9IlJlcXVlc3QgaGFzIGZhaWxlZC4iO3JldHVybiBnKHRoaXMuc3RhdHVzQ29kZSkmJihlKz1gIFN0YXR1cyBDb2RlOiAke3RoaXMuc3RhdHVzQ29kZX1gKSxlfTt5Zj1yQX0pO2Z1bmN0aW9uIEFmKCl7dGhpcy5fbGlzdGVuZXJzPW5ldyBNYXAsdGhpcy5fdG9SZW1vdmU9bmV3IE1hcCx0aGlzLl90b0FkZD1uZXcgTWFwLHRoaXMuX2ludm9raW5nTGlzdGVuZXJzPSExLHRoaXMuX2xpc3RlbmVyQ291bnQ9MH1mdW5jdGlvbiB1YihlLHQsbixvKXt0LmhhcyhuKXx8dC5zZXQobixuZXcgU2V0KTtsZXQgYT10LmdldChuKTtyZXR1cm4gYS5oYXMobyk/ITE6KGEuYWRkKG8pLCEwKX1mdW5jdGlvbiBkYihlLHQsbixvKXtsZXQgYT10LmdldChuKTtpZighYXx8IWEuaGFzKG8pKXJldHVybiExO2lmKGUuX2ludm9raW5nTGlzdGVuZXJzKXtpZighdWIoZSxlLl90b1JlbW92ZSxuLG8pKXJldHVybiExfWVsc2UgYS5kZWxldGUobyksYS5zaXplPT09MCYmdC5kZWxldGUobik7cmV0dXJuITB9dmFyIGJsLGxiPVgoKCk9PntzZSgpO09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEFmLnByb3RvdHlwZSx7bnVtYmVyT2ZMaXN0ZW5lcnM6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9saXN0ZW5lckNvdW50fX19KTtBZi5wcm90b3R5cGUuYWRkRXZlbnRMaXN0ZW5lcj1mdW5jdGlvbihlLHQpe2xldCBuPXRoaXMsbz1uLl9pbnZva2luZ0xpc3RlbmVycz9uLl90b0FkZDpuLl9saXN0ZW5lcnM7cmV0dXJuIHViKHRoaXMsbyxlLHQpJiZuLl9saXN0ZW5lckNvdW50KyssZnVuY3Rpb24oKXtuLnJlbW92ZUV2ZW50TGlzdGVuZXIoZSx0KX19O0FmLnByb3RvdHlwZS5yZW1vdmVFdmVudExpc3RlbmVyPWZ1bmN0aW9uKGUsdCl7bGV0IG49ZGIodGhpcyx0aGlzLl9saXN0ZW5lcnMsZSx0KSxvPWRiKHRoaXMsdGhpcy5fdG9BZGQsZSx0KSxhPW58fG87cmV0dXJuIGEmJnRoaXMuX2xpc3RlbmVyQ291bnQtLSxhfTtBZi5wcm90b3R5cGUucmFpc2VFdmVudD1mdW5jdGlvbigpe3RoaXMuX2ludm9raW5nTGlzdGVuZXJzPSEwO2ZvcihsZXRbZSx0XW9mIHRoaXMuX2xpc3RlbmVycy5lbnRyaWVzKCkpaWYoZyhlKSlmb3IobGV0IG4gb2YgdCllLmFwcGx5KG4sYXJndW1lbnRzKTt0aGlzLl9pbnZva2luZ0xpc3RlbmVycz0hMTtmb3IobGV0W2UsdF1vZiB0aGlzLl90b0FkZC5lbnRyaWVzKCkpZm9yKGxldCBuIG9mIHQpdWIodGhpcyx0aGlzLl9saXN0ZW5lcnMsZSxuKTt0aGlzLl90b0FkZC5jbGVhcigpO2ZvcihsZXRbZSx0XW9mIHRoaXMuX3RvUmVtb3ZlLmVudHJpZXMoKSlmb3IobGV0IG4gb2YgdClkYih0aGlzLHRoaXMuX2xpc3RlbmVycyxlLG4pO3RoaXMuX3RvUmVtb3ZlLmNsZWFyKCl9O2JsPUFmfSk7ZnVuY3Rpb24gJGkoZSl7dGhpcy5fY29tcGFyYXRvcj1lLmNvbXBhcmF0b3IsdGhpcy5fYXJyYXk9W10sdGhpcy5fbGVuZ3RoPTAsdGhpcy5fbWF4aW11bUxlbmd0aD12b2lkIDB9ZnVuY3Rpb24gaGIoZSx0LG4pe2xldCBvPWVbdF07ZVt0XT1lW25dLGVbbl09b312YXIgY0Esc0E9WCgoKT0+e3NlKCk7T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoJGkucHJvdG90eXBlLHtsZW5ndGg6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9sZW5ndGh9fSxpbnRlcm5hbEFycmF5OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXJyYXl9fSxtYXhpbXVtTGVuZ3RoOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbWF4aW11bUxlbmd0aH0sc2V0OmZ1bmN0aW9uKGUpe2xldCB0PXRoaXMuX2xlbmd0aDtpZihlPHQpe2xldCBuPXRoaXMuX2FycmF5O2ZvcihsZXQgbz1lO288dDsrK28pbltvXT12b2lkIDA7dGhpcy5fbGVuZ3RoPWUsbi5sZW5ndGg9ZX10aGlzLl9tYXhpbXVtTGVuZ3RoPWV9fSxjb21wYXJhdG9yOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY29tcGFyYXRvcn19fSk7JGkucHJvdG90eXBlLnJlc2VydmU9ZnVuY3Rpb24oZSl7ZT1lPz90aGlzLl9sZW5ndGgsdGhpcy5fYXJyYXkubGVuZ3RoPWV9OyRpLnByb3RvdHlwZS5oZWFwaWZ5PWZ1bmN0aW9uKGUpe2U9ZT8/MDtsZXQgdD10aGlzLl9sZW5ndGgsbj10aGlzLl9jb21wYXJhdG9yLG89dGhpcy5fYXJyYXksYT0tMSxyPSEwO2Zvcig7cjspe2xldCBpPTIqKGUrMSksZj1pLTE7Zjx0JiZuKG9bZl0sb1tlXSk8MD9hPWY6YT1lLGk8dCYmbihvW2ldLG9bYV0pPDAmJihhPWkpLGEhPT1lPyhoYihvLGEsZSksZT1hKTpyPSExfX07JGkucHJvdG90eXBlLnJlc29ydD1mdW5jdGlvbigpe2xldCBlPXRoaXMuX2xlbmd0aDtmb3IobGV0IHQ9TWF0aC5jZWlsKGUvMik7dD49MDstLXQpdGhpcy5oZWFwaWZ5KHQpfTskaS5wcm90b3R5cGUuaW5zZXJ0PWZ1bmN0aW9uKGUpe2xldCB0PXRoaXMuX2FycmF5LG49dGhpcy5fY29tcGFyYXRvcixvPXRoaXMuX21heGltdW1MZW5ndGgsYT10aGlzLl9sZW5ndGgrKztmb3IoYTx0Lmxlbmd0aD90W2FdPWU6dC5wdXNoKGUpO2EhPT0wOyl7bGV0IGk9TWF0aC5mbG9vcigoYS0xKS8yKTtpZihuKHRbYV0sdFtpXSk8MCloYih0LGEsaSksYT1pO2Vsc2UgYnJlYWt9bGV0IHI7cmV0dXJuIGcobykmJnRoaXMuX2xlbmd0aD5vJiYocj10W29dLHRoaXMuX2xlbmd0aD1vKSxyfTskaS5wcm90b3R5cGUucG9wPWZ1bmN0aW9uKGUpe2lmKGU9ZT8/MCx0aGlzLl9sZW5ndGg9PT0wKXJldHVybjtsZXQgdD10aGlzLl9hcnJheSxuPXRbZV07cmV0dXJuIGhiKHQsZSwtLXRoaXMuX2xlbmd0aCksdGhpcy5oZWFwaWZ5KGUpLHRbdGhpcy5fbGVuZ3RoXT12b2lkIDAsbn07Y0E9JGl9KTtmdW5jdGlvbiBEQyhlLHQpe3JldHVybiBlLnByaW9yaXR5LXQucHJpb3JpdHl9ZnVuY3Rpb24gRW4oKXt9ZnVuY3Rpb24gZkEoZSl7ZyhlLnByaW9yaXR5RnVuY3Rpb24pJiYoZS5wcmlvcml0eT1lLnByaW9yaXR5RnVuY3Rpb24oKSl9ZnVuY3Rpb24gZEEoZSl7cmV0dXJuIGUuc3RhdGU9PT1Dbi5VTklTU1VFRCYmKGUuc3RhdGU9Q24uSVNTVUVELGUuZGVmZXJyZWQ9UWkoKSksZS5kZWZlcnJlZC5wcm9taXNlfWZ1bmN0aW9uIFVDKGUpe3JldHVybiBmdW5jdGlvbih0KXtpZihlLnN0YXRlPT09Q24uQ0FOQ0VMTEVEKXJldHVybjtsZXQgbj1lLmRlZmVycmVkOy0tWHQubnVtYmVyT2ZBY3RpdmVSZXF1ZXN0cywtLXZyW2Uuc2VydmVyS2V5XSxnbC5yYWlzZUV2ZW50KCksZS5zdGF0ZT1Dbi5SRUNFSVZFRCxlLmRlZmVycmVkPXZvaWQgMCxuLnJlc29sdmUodCl9fWZ1bmN0aW9uIExDKGUpe3JldHVybiBmdW5jdGlvbih0KXtlLnN0YXRlIT09Q24uQ0FOQ0VMTEVEJiYoKytYdC5udW1iZXJPZkZhaWxlZFJlcXVlc3RzLC0tWHQubnVtYmVyT2ZBY3RpdmVSZXF1ZXN0cywtLXZyW2Uuc2VydmVyS2V5XSxnbC5yYWlzZUV2ZW50KHQpLGUuc3RhdGU9Q24uRkFJTEVELGUuZGVmZXJyZWQucmVqZWN0KHQpKX19ZnVuY3Rpb24gdUEoZSl7bGV0IHQ9ZEEoZSk7cmV0dXJuIGUuc3RhdGU9Q24uQUNUSVZFLGFyLnB1c2goZSksKytYdC5udW1iZXJPZkFjdGl2ZVJlcXVlc3RzLCsrWHQubnVtYmVyT2ZBY3RpdmVSZXF1ZXN0c0V2ZXIsKyt2cltlLnNlcnZlcktleV0sZS5yZXF1ZXN0RnVuY3Rpb24oKS50aGVuKFVDKGUpKS5jYXRjaChMQyhlKSksdH1mdW5jdGlvbiBlYyhlKXtsZXQgdD1lLnN0YXRlPT09Q24uQUNUSVZFO2lmKGUuc3RhdGU9Q24uQ0FOQ0VMTEVELCsrWHQubnVtYmVyT2ZDYW5jZWxsZWRSZXF1ZXN0cyxnKGUuZGVmZXJyZWQpKXtsZXQgbj1lLmRlZmVycmVkO2UuZGVmZXJyZWQ9dm9pZCAwLG4ucmVqZWN0KCl9dCYmKC0tWHQubnVtYmVyT2ZBY3RpdmVSZXF1ZXN0cywtLXZyW2Uuc2VydmVyS2V5XSwrK1h0Lm51bWJlck9mQ2FuY2VsbGVkQWN0aXZlUmVxdWVzdHMpLGcoZS5jYW5jZWxGdW5jdGlvbikmJmUuY2FuY2VsRnVuY3Rpb24oKX1mdW5jdGlvbiBqQygpe0VuLmRlYnVnU2hvd1N0YXRpc3RpY3MmJihYdC5udW1iZXJPZkFjdGl2ZVJlcXVlc3RzPT09MCYmWHQubGFzdE51bWJlck9mQWN0aXZlUmVxdWVzdHM+MCYmKFh0Lm51bWJlck9mQXR0ZW1wdGVkUmVxdWVzdHM+MCYmKGNvbnNvbGUubG9nKGBOdW1iZXIgb2YgYXR0ZW1wdGVkIHJlcXVlc3RzOiAke1h0Lm51bWJlck9mQXR0ZW1wdGVkUmVxdWVzdHN9YCksWHQubnVtYmVyT2ZBdHRlbXB0ZWRSZXF1ZXN0cz0wKSxYdC5udW1iZXJPZkNhbmNlbGxlZFJlcXVlc3RzPjAmJihjb25zb2xlLmxvZyhgTnVtYmVyIG9mIGNhbmNlbGxlZCByZXF1ZXN0czogJHtYdC5udW1iZXJPZkNhbmNlbGxlZFJlcXVlc3RzfWApLFh0Lm51bWJlck9mQ2FuY2VsbGVkUmVxdWVzdHM9MCksWHQubnVtYmVyT2ZDYW5jZWxsZWRBY3RpdmVSZXF1ZXN0cz4wJiYoY29uc29sZS5sb2coYE51bWJlciBvZiBjYW5jZWxsZWQgYWN0aXZlIHJlcXVlc3RzOiAke1h0Lm51bWJlck9mQ2FuY2VsbGVkQWN0aXZlUmVxdWVzdHN9YCksWHQubnVtYmVyT2ZDYW5jZWxsZWRBY3RpdmVSZXF1ZXN0cz0wKSxYdC5udW1iZXJPZkZhaWxlZFJlcXVlc3RzPjAmJihjb25zb2xlLmxvZyhgTnVtYmVyIG9mIGZhaWxlZCByZXF1ZXN0czogJHtYdC5udW1iZXJPZkZhaWxlZFJlcXVlc3RzfWApLFh0Lm51bWJlck9mRmFpbGVkUmVxdWVzdHM9MCkpLFh0Lmxhc3ROdW1iZXJPZkFjdGl2ZVJlcXVlc3RzPVh0Lm51bWJlck9mQWN0aXZlUmVxdWVzdHMpfXZhciBwbCxYdCxlcyxJbyxhcix2cixCQyxnbCxfbCxsQT1YKCgpPT57cGw9Y2EodWkoKSwxKTtvYigpO3NlKCk7bGIoKTtzQSgpO2NiKCk7ZmIoKTtobCgpO1h0PXtudW1iZXJPZkF0dGVtcHRlZFJlcXVlc3RzOjAsbnVtYmVyT2ZBY3RpdmVSZXF1ZXN0czowLG51bWJlck9mQ2FuY2VsbGVkUmVxdWVzdHM6MCxudW1iZXJPZkNhbmNlbGxlZEFjdGl2ZVJlcXVlc3RzOjAsbnVtYmVyT2ZGYWlsZWRSZXF1ZXN0czowLG51bWJlck9mQWN0aXZlUmVxdWVzdHNFdmVyOjAsbGFzdE51bWJlck9mQWN0aXZlUmVxdWVzdHM6MH0sZXM9MjAsSW89bmV3IGNBKHtjb21wYXJhdG9yOkRDfSk7SW8ubWF4aW11bUxlbmd0aD1lcztJby5yZXNlcnZlKGVzKTthcj1bXSx2cj17fSxCQz10eXBlb2YgZG9jdW1lbnQ8InUiP25ldyBwbC5kZWZhdWx0KGRvY3VtZW50LmxvY2F0aW9uLmhyZWYpOm5ldyBwbC5kZWZhdWx0LGdsPW5ldyBibDtFbi5tYXhpbXVtUmVxdWVzdHM9NTA7RW4ubWF4aW11bVJlcXVlc3RzUGVyU2VydmVyPTE4O0VuLnJlcXVlc3RzQnlTZXJ2ZXI9e307RW4udGhyb3R0bGVSZXF1ZXN0cz0hMDtFbi5kZWJ1Z1Nob3dTdGF0aXN0aWNzPSExO0VuLnJlcXVlc3RDb21wbGV0ZWRFdmVudD1nbDtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhFbix7c3RhdGlzdGljczp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIFh0fX0scHJpb3JpdHlIZWFwTGVuZ3RoOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZXN9LHNldDpmdW5jdGlvbihlKXtpZihlPGVzKWZvcig7SW8ubGVuZ3RoPmU7KXtsZXQgdD1Jby5wb3AoKTtlYyh0KX1lcz1lLElvLm1heGltdW1MZW5ndGg9ZSxJby5yZXNlcnZlKGUpfX19KTtFbi5zZXJ2ZXJIYXNPcGVuU2xvdHM9ZnVuY3Rpb24oZSx0KXt0PXQ/PzE7bGV0IG49RW4ucmVxdWVzdHNCeVNlcnZlcltlXT8/RW4ubWF4aW11bVJlcXVlc3RzUGVyU2VydmVyO3JldHVybiB2cltlXSt0PD1ufTtFbi5oZWFwSGFzT3BlblNsb3RzPWZ1bmN0aW9uKGUpe3JldHVybiBJby5sZW5ndGgrZTw9ZXN9O0VuLnVwZGF0ZT1mdW5jdGlvbigpe2xldCBlLHQsbj0wLG89YXIubGVuZ3RoO2ZvcihlPTA7ZTxvOysrZSl7aWYodD1hcltlXSx0LmNhbmNlbGxlZCYmZWModCksdC5zdGF0ZSE9PUNuLkFDVElWRSl7KytuO2NvbnRpbnVlfW4+MCYmKGFyW2Utbl09dCl9YXIubGVuZ3RoLT1uO2xldCBhPUlvLmludGVybmFsQXJyYXkscj1Jby5sZW5ndGg7Zm9yKGU9MDtlPHI7KytlKWZBKGFbZV0pO0lvLnJlc29ydCgpO2xldCBpPU1hdGgubWF4KEVuLm1heGltdW1SZXF1ZXN0cy1hci5sZW5ndGgsMCksZj0wO2Zvcig7ZjxpJiZJby5sZW5ndGg+MDspe2lmKHQ9SW8ucG9wKCksdC5jYW5jZWxsZWQpe2VjKHQpO2NvbnRpbnVlfWlmKHQudGhyb3R0bGVCeVNlcnZlciYmIUVuLnNlcnZlckhhc09wZW5TbG90cyh0LnNlcnZlcktleSkpe2VjKHQpO2NvbnRpbnVlfXVBKHQpLCsrZn1qQygpfTtFbi5nZXRTZXJ2ZXJLZXk9ZnVuY3Rpb24oZSl7bGV0IHQ9bmV3IHBsLmRlZmF1bHQoZSk7dC5zY2hlbWUoKT09PSIiJiYodD10LmFic29sdXRlVG8oQkMpLHQubm9ybWFsaXplKCkpO2xldCBuPXQuYXV0aG9yaXR5KCk7LzovLnRlc3Qobil8fChuPWAke259OiR7dC5zY2hlbWUoKT09PSJodHRwcyI/IjQ0MyI6IjgwIn1gKTtsZXQgbz12cltuXTtyZXR1cm4gZyhvKXx8KHZyW25dPTApLG59O0VuLnJlcXVlc3Q9ZnVuY3Rpb24oZSl7aWYobGwoZS51cmwpfHx1bChlLnVybCkpcmV0dXJuIGdsLnJhaXNlRXZlbnQoKSxlLnN0YXRlPUNuLlJFQ0VJVkVELGUucmVxdWVzdEZ1bmN0aW9uKCk7aWYoKytYdC5udW1iZXJPZkF0dGVtcHRlZFJlcXVlc3RzLGcoZS5zZXJ2ZXJLZXkpfHwoZS5zZXJ2ZXJLZXk9RW4uZ2V0U2VydmVyS2V5KGUudXJsKSksRW4udGhyb3R0bGVSZXF1ZXN0cyYmZS50aHJvdHRsZUJ5U2VydmVyJiYhRW4uc2VydmVySGFzT3BlblNsb3RzKGUuc2VydmVyS2V5KSlyZXR1cm47aWYoIUVuLnRocm90dGxlUmVxdWVzdHN8fCFlLnRocm90dGxlKXJldHVybiB1QShlKTtpZihhci5sZW5ndGg+PUVuLm1heGltdW1SZXF1ZXN0cylyZXR1cm47ZkEoZSk7bGV0IHQ9SW8uaW5zZXJ0KGUpO2lmKGcodCkpe2lmKHQ9PT1lKXJldHVybjtlYyh0KX1yZXR1cm4gZEEoZSl9O0VuLmNsZWFyRm9yU3BlY3M9ZnVuY3Rpb24oKXtmb3IoO0lvLmxlbmd0aD4wOyl7bGV0IHQ9SW8ucG9wKCk7ZWModCl9bGV0IGU9YXIubGVuZ3RoO2ZvcihsZXQgdD0wO3Q8ZTsrK3QpZWMoYXJbdF0pO2FyLmxlbmd0aD0wLHZyPXt9LFh0Lm51bWJlck9mQXR0ZW1wdGVkUmVxdWVzdHM9MCxYdC5udW1iZXJPZkFjdGl2ZVJlcXVlc3RzPTAsWHQubnVtYmVyT2ZDYW5jZWxsZWRSZXF1ZXN0cz0wLFh0Lm51bWJlck9mQ2FuY2VsbGVkQWN0aXZlUmVxdWVzdHM9MCxYdC5udW1iZXJPZkZhaWxlZFJlcXVlc3RzPTAsWHQubnVtYmVyT2ZBY3RpdmVSZXF1ZXN0c0V2ZXI9MCxYdC5sYXN0TnVtYmVyT2ZBY3RpdmVSZXF1ZXN0cz0wfTtFbi5udW1iZXJPZkFjdGl2ZVJlcXVlc3RzQnlTZXJ2ZXI9ZnVuY3Rpb24oZSl7cmV0dXJuIHZyW2VdfTtFbi5yZXF1ZXN0SGVhcD1JbztfbD1Fbn0pO2Z1bmN0aW9uIHpDKGUpe2xldCB0PW5ldyBoQS5kZWZhdWx0KGUpO3Qubm9ybWFsaXplKCk7bGV0IG49dC5hdXRob3JpdHkoKTtpZihuLmxlbmd0aCE9PTApe2lmKHQuYXV0aG9yaXR5KG4pLG4uaW5kZXhPZigiQCIpIT09LTEmJihuPW4uc3BsaXQoIkAiKVsxXSksbi5pbmRleE9mKCI6Iik9PT0tMSl7bGV0IG89dC5zY2hlbWUoKTtpZihvLmxlbmd0aD09PTAmJihvPXdpbmRvdy5sb2NhdGlvbi5wcm90b2NvbCxvPW8uc3Vic3RyaW5nKDAsby5sZW5ndGgtMSkpLG89PT0iaHR0cCIpbis9Ijo4MCI7ZWxzZSBpZihvPT09Imh0dHBzIiluKz0iOjQ0MyI7ZWxzZSByZXR1cm59cmV0dXJuIG59fXZhciBoQSx3Zix0cyxtYixtQT1YKCgpPT57aEE9Y2EodWkoKSwxKTtzZSgpO3dmPXt9LHRzPXt9O3dmLmFkZD1mdW5jdGlvbihlLHQpe2xldCBuPWAke2UudG9Mb3dlckNhc2UoKX06JHt0fWA7Zyh0c1tuXSl8fCh0c1tuXT0hMCl9O3dmLnJlbW92ZT1mdW5jdGlvbihlLHQpe2xldCBuPWAke2UudG9Mb3dlckNhc2UoKX06JHt0fWA7Zyh0c1tuXSkmJmRlbGV0ZSB0c1tuXX07d2YuY29udGFpbnM9ZnVuY3Rpb24oZSl7bGV0IHQ9ekMoZSk7cmV0dXJuISEoZyh0KSYmZyh0c1t0XSkpfTt3Zi5jbGVhcj1mdW5jdGlvbigpe3RzPXt9fTttYj13Zn0pO2Z1bmN0aW9uIERlKGUpe2U9ZT8/Q2UuRU1QVFlfT0JKRUNULHR5cGVvZiBlPT0ic3RyaW5nIiYmKGU9e3VybDplfSksdGhpcy5fdXJsPXZvaWQgMCx0aGlzLl90ZW1wbGF0ZVZhbHVlcz1ycihlLnRlbXBsYXRlVmFsdWVzLHt9KSx0aGlzLl9xdWVyeVBhcmFtZXRlcnM9cnIoZS5xdWVyeVBhcmFtZXRlcnMse30pLHRoaXMuaGVhZGVycz1ycihlLmhlYWRlcnMse30pLHRoaXMucmVxdWVzdD1lLnJlcXVlc3Q/P25ldyB0QSx0aGlzLnByb3h5PWUucHJveHksdGhpcy5yZXRyeUNhbGxiYWNrPWUucmV0cnlDYWxsYmFjayx0aGlzLnJldHJ5QXR0ZW1wdHM9ZS5yZXRyeUF0dGVtcHRzPz8wLHRoaXMuX3JldHJ5Q291bnQ9MCxlLnBhcnNlVXJsPz8hMD90aGlzLnBhcnNlVXJsKGUudXJsLCEwLCEwKTp0aGlzLl91cmw9ZS51cmwsdGhpcy5fY3JlZGl0cz1lLmNyZWRpdHN9ZnVuY3Rpb24gcnIoZSx0KXtyZXR1cm4gZyhlKT8kYyhlKTp0fWZ1bmN0aW9uIEdDKGUpe3JldHVybiBlLmxlbmd0aD09PTA/e306ZS5pbmRleE9mKCI9Iik9PT0tMT97W2VdOnZvaWQgMH06WjEoZSl9ZnVuY3Rpb24gQWwoZSx0LG4pe2lmKCFuKXJldHVybiB5YShlLHQpO2xldCBvPSRjKGUsITApO2ZvcihsZXQgYSBpbiB0KWlmKHQuaGFzT3duUHJvcGVydHkoYSkpe2xldCByPW9bYV0saT10W2FdO2cocik/KEFycmF5LmlzQXJyYXkocil8fChyPW9bYV09W3JdKSxvW2FdPXIuY29uY2F0KGkpKTpvW2FdPUFycmF5LmlzQXJyYXkoaSk/aS5zbGljZSgpOml9cmV0dXJuIG99ZnVuY3Rpb24gVkMoZSl7bGV0IHQ9T2JqZWN0LmtleXMoZSk7cmV0dXJuIHQubGVuZ3RoPT09MD8iIjp0Lmxlbmd0aD09PTEmJiFnKGVbdFswXV0pP2A/JHt0WzBdfWA6YD8ke1kxKGUpfWB9ZnVuY3Rpb24gX0EoZSx0LG4pe2xldCBvPXt9O29bdF09bixlLnNldFF1ZXJ5UGFyYW1ldGVycyhvKTtsZXQgYT1lLnJlcXVlc3Qscj1lLnVybDthLnVybD1yLGEucmVxdWVzdEZ1bmN0aW9uPWZ1bmN0aW9uKCl7bGV0IGY9UWkoKTtyZXR1cm4gd2luZG93W25dPWZ1bmN0aW9uKGQpe2YucmVzb2x2ZShkKTt0cnl7ZGVsZXRlIHdpbmRvd1tuXX1jYXRjaHt3aW5kb3dbbl09dm9pZCAwfX0sRGUuX0ltcGxlbWVudGF0aW9ucy5sb2FkQW5kRXhlY3V0ZVNjcmlwdChyLG4sZiksZi5wcm9taXNlfTtsZXQgaT1fbC5yZXF1ZXN0KGEpO2lmKGcoaSkpcmV0dXJuIGkuY2F0Y2goZnVuY3Rpb24oZil7cmV0dXJuIGEuc3RhdGUhPT1Dbi5GQUlMRUQ/UHJvbWlzZS5yZWplY3QoZik6ZS5yZXRyeU9uRXJyb3IoZikudGhlbihmdW5jdGlvbihkKXtyZXR1cm4gZD8oYS5zdGF0ZT1Dbi5VTklTU1VFRCxhLmRlZmVycmVkPXZvaWQgMCxfQShlLHQsbikpOlByb21pc2UucmVqZWN0KGYpfSl9KX1mdW5jdGlvbiBiYihlKXtpZihlLnN0YXRlPT09Q24uSVNTVUVEfHxlLnN0YXRlPT09Q24uQUNUSVZFKXRocm93IG5ldyB1dCgiVGhlIFJlc291cmNlIGlzIGFscmVhZHkgYmVpbmcgZmV0Y2hlZC4iKTtlLnN0YXRlPUNuLlVOSVNTVUVELGUuZGVmZXJyZWQ9dm9pZCAwfWZ1bmN0aW9uIHlsKGUsdCl7bGV0IG49ZGVjb2RlVVJJQ29tcG9uZW50KHQpO3JldHVybiBlP2F0b2Iobik6bn1mdW5jdGlvbiBiQShlLHQpe2xldCBuPXlsKGUsdCksbz1uZXcgQXJyYXlCdWZmZXIobi5sZW5ndGgpLGE9bmV3IFVpbnQ4QXJyYXkobyk7Zm9yKGxldCByPTA7cjxuLmxlbmd0aDtyKyspYVtyXT1uLmNoYXJDb2RlQXQocik7cmV0dXJuIG99ZnVuY3Rpb24gS0MoZSx0KXt0PXQ/PyIiO2xldCBuPWVbMV0sbz0hIWVbMl0sYT1lWzNdLHIsaTtzd2l0Y2godCl7Y2FzZSIiOmNhc2UidGV4dCI6cmV0dXJuIHlsKG8sYSk7Y2FzZSJhcnJheWJ1ZmZlciI6cmV0dXJuIGJBKG8sYSk7Y2FzZSJibG9iIjpyZXR1cm4gcj1iQShvLGEpLG5ldyBCbG9iKFtyXSx7dHlwZTpufSk7Y2FzZSJkb2N1bWVudCI6cmV0dXJuIGk9bmV3IERPTVBhcnNlcixpLnBhcnNlRnJvbVN0cmluZyh5bChvLGEpLG4pO2Nhc2UianNvbiI6cmV0dXJuIEpTT04ucGFyc2UoeWwobyxhKSk7ZGVmYXVsdDp9fWZ1bmN0aW9uIHFDKGUsdCxuLG8sYSxyLGkpe2ZldGNoKGUse21ldGhvZDpuLGhlYWRlcnM6YX0pLnRoZW4oYXN5bmMgZj0+e2lmKCFmLm9rKXtsZXQgZD17fTtmLmhlYWRlcnMuZm9yRWFjaCgoYyx1KT0+e2RbdV09Y30pLHIucmVqZWN0KG5ldyB5ZihmLnN0YXR1cyxmLGQpKTtyZXR1cm59c3dpdGNoKHQpe2Nhc2UidGV4dCI6ci5yZXNvbHZlKGYudGV4dCgpKTticmVhaztjYXNlImpzb24iOnIucmVzb2x2ZShmLmpzb24oKSk7YnJlYWs7ZGVmYXVsdDpyLnJlc29sdmUobmV3IFVpbnQ4QXJyYXkoYXdhaXQgZi5hcnJheUJ1ZmZlcigpKS5idWZmZXIpO2JyZWFrfX0pLmNhdGNoKCgpPT57ci5yZWplY3QobmV3IHlmKX0pfXZhciBwQSxnQSxucyxIQyxXQyxBYSxvcz1YKCgpPT57cEE9Y2EodWkoKSwxKTt2MSgpO1VtKCk7RDEoKTtkbCgpO210KCk7b2IoKTtzZSgpO3JiKCk7ejEoKTtIMSgpO3ExKCk7Y2IoKTtzYigpO2ZiKCk7WDEoKTtHZSgpO0oxKCk7UTEoKTtuQSgpO2lBKCk7bEEoKTtobCgpO2phKCk7bUEoKTtnQT0oZnVuY3Rpb24oKXt0cnl7bGV0IGU9bmV3IFhNTEh0dHBSZXF1ZXN0O3JldHVybiBlLm9wZW4oIkdFVCIsIiMiLCEwKSxlLnJlc3BvbnNlVHlwZT0iYmxvYiIsZS5yZXNwb25zZVR5cGU9PT0iYmxvYiJ9Y2F0Y2h7cmV0dXJuITF9fSkoKTtEZS5jcmVhdGVJZk5lZWRlZD1mdW5jdGlvbihlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIERlP2UuZ2V0RGVyaXZlZFJlc291cmNlKHtyZXF1ZXN0OmUucmVxdWVzdH0pOnR5cGVvZiBlIT0ic3RyaW5nIj9lOm5ldyBEZSh7dXJsOmV9KX07RGUuc3VwcG9ydHNJbWFnZUJpdG1hcE9wdGlvbnM9ZnVuY3Rpb24oKXtyZXR1cm4gZyhucyk/bnM6dHlwZW9mIGNyZWF0ZUltYWdlQml0bWFwIT0iZnVuY3Rpb24iPyhucz1Qcm9taXNlLnJlc29sdmUoITEpLG5zKToobnM9RGUuZmV0Y2hCbG9iKHt1cmw6ImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQUVBQUFBQkNBSUFBQUNRZDFQZUFBQUFCR2RCVFVFQUFFNGczckVpRGdBQUFDQmpTRkpOQUFCNkpnQUFnSVFBQVBvQUFBQ0E2QUFBZFRBQUFPcGdBQUE2bUFBQUYzQ2N1bEU4QUFBQURFbEVRVlFJMTJOZzZHQUFBQUVVQUluZ0UzWmlBQUFBQUVsRlRrU3VRbUNDIn0pLnRoZW4oZnVuY3Rpb24odCl7bGV0IG49e2ltYWdlT3JpZW50YXRpb246ImZsaXBZIixwcmVtdWx0aXBseUFscGhhOiJub25lIixjb2xvclNwYWNlQ29udmVyc2lvbjoibm9uZSJ9O3JldHVybiBQcm9taXNlLmFsbChbY3JlYXRlSW1hZ2VCaXRtYXAodCxuKSxjcmVhdGVJbWFnZUJpdG1hcCh0KV0pfSkudGhlbihmdW5jdGlvbih0KXtsZXQgbj1pYih0WzBdKSxvPWliKHRbMV0pO3JldHVybiBuWzFdIT09b1sxXX0pLmNhdGNoKGZ1bmN0aW9uKCl7cmV0dXJuITF9KSxucyl9O09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKERlLHtpc0Jsb2JTdXBwb3J0ZWQ6e2dldDpmdW5jdGlvbigpe3JldHVybiBnQX19fSk7T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoRGUucHJvdG90eXBlLHtxdWVyeVBhcmFtZXRlcnM6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9xdWVyeVBhcmFtZXRlcnN9fSx0ZW1wbGF0ZVZhbHVlczp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3RlbXBsYXRlVmFsdWVzfX0sdXJsOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRVcmxDb21wb25lbnQoITAsITApfSxzZXQ6ZnVuY3Rpb24oZSl7dGhpcy5wYXJzZVVybChlLCExLCExKX19LGV4dGVuc2lvbjp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIFYxKHRoaXMuX3VybCl9fSxpc0RhdGFVcmk6e2dldDpmdW5jdGlvbigpe3JldHVybiBsbCh0aGlzLl91cmwpfX0saXNCbG9iVXJpOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdWwodGhpcy5fdXJsKX19LGlzQ3Jvc3NPcmlnaW5Vcmw6e2dldDpmdW5jdGlvbigpe3JldHVybiBfZih0aGlzLl91cmwpfX0saGFzSGVhZGVyczp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuaGVhZGVycykubGVuZ3RoPjB9fSxjcmVkaXRzOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY3JlZGl0c319fSk7RGUucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0VXJsQ29tcG9uZW50KCEwLCEwKX07RGUucHJvdG90eXBlLnBhcnNlVXJsPWZ1bmN0aW9uKGUsdCxuLG8pe2xldCBhPW5ldyBwQS5kZWZhdWx0KGUpLHI9R0MoYS5xdWVyeSgpKTt0aGlzLl9xdWVyeVBhcmFtZXRlcnM9dD9BbChyLHRoaXMucXVlcnlQYXJhbWV0ZXJzLG4pOnIsYS5zZWFyY2goIiIpLGEuZnJhZ21lbnQoIiIpLGcobykmJmEuc2NoZW1lKCk9PT0iIiYmKGE9YS5hYnNvbHV0ZVRvKGdmKG8pKSksdGhpcy5fdXJsPWEudG9TdHJpbmcoKX07RGUucHJvdG90eXBlLmdldFVybENvbXBvbmVudD1mdW5jdGlvbihlLHQpe2lmKHRoaXMuaXNEYXRhVXJpKXJldHVybiB0aGlzLl91cmw7bGV0IG49dGhpcy5fdXJsO2UmJihuPWAke259JHtWQyh0aGlzLnF1ZXJ5UGFyYW1ldGVycyl9YCksbj1uLnJlcGxhY2UoLyU3Qi9nLCJ7IikucmVwbGFjZSgvJTdEL2csIn0iKTtsZXQgbz10aGlzLl90ZW1wbGF0ZVZhbHVlcztyZXR1cm4gT2JqZWN0LmtleXMobykubGVuZ3RoPjAmJihuPW4ucmVwbGFjZSgveyguKj8pfS9nLGZ1bmN0aW9uKGEscil7bGV0IGk9b1tyXTtyZXR1cm4gZyhpKT9lbmNvZGVVUklDb21wb25lbnQoaSk6YX0pKSx0JiZnKHRoaXMucHJveHkpJiYobj10aGlzLnByb3h5LmdldFVSTChuKSksbn07RGUucHJvdG90eXBlLnNldFF1ZXJ5UGFyYW1ldGVycz1mdW5jdGlvbihlLHQpe3Q/dGhpcy5fcXVlcnlQYXJhbWV0ZXJzPUFsKHRoaXMuX3F1ZXJ5UGFyYW1ldGVycyxlLCExKTp0aGlzLl9xdWVyeVBhcmFtZXRlcnM9QWwoZSx0aGlzLl9xdWVyeVBhcmFtZXRlcnMsITEpfTtEZS5wcm90b3R5cGUuYXBwZW5kUXVlcnlQYXJhbWV0ZXJzPWZ1bmN0aW9uKGUpe3RoaXMuX3F1ZXJ5UGFyYW1ldGVycz1BbChlLHRoaXMuX3F1ZXJ5UGFyYW1ldGVycywhMCl9O0RlLnByb3RvdHlwZS5zZXRUZW1wbGF0ZVZhbHVlcz1mdW5jdGlvbihlLHQpe3Q/dGhpcy5fdGVtcGxhdGVWYWx1ZXM9eWEodGhpcy5fdGVtcGxhdGVWYWx1ZXMsZSk6dGhpcy5fdGVtcGxhdGVWYWx1ZXM9eWEoZSx0aGlzLl90ZW1wbGF0ZVZhbHVlcyl9O0RlLnByb3RvdHlwZS5nZXREZXJpdmVkUmVzb3VyY2U9ZnVuY3Rpb24oZSl7bGV0IHQ9dGhpcy5jbG9uZSgpO2lmKHQuX3JldHJ5Q291bnQ9MCxnKGUudXJsKSl7bGV0IG49ZS5wcmVzZXJ2ZVF1ZXJ5UGFyYW1ldGVycz8/ITE7dC5wYXJzZVVybChlLnVybCwhMCxuLHRoaXMuX3VybCl9cmV0dXJuIGcoZS5xdWVyeVBhcmFtZXRlcnMpJiYodC5fcXVlcnlQYXJhbWV0ZXJzPXlhKGUucXVlcnlQYXJhbWV0ZXJzLHQucXVlcnlQYXJhbWV0ZXJzKSksZyhlLnRlbXBsYXRlVmFsdWVzKSYmKHQuX3RlbXBsYXRlVmFsdWVzPXlhKGUudGVtcGxhdGVWYWx1ZXMsdC50ZW1wbGF0ZVZhbHVlcykpLGcoZS5oZWFkZXJzKSYmKHQuaGVhZGVycz15YShlLmhlYWRlcnMsdC5oZWFkZXJzKSksZyhlLnByb3h5KSYmKHQucHJveHk9ZS5wcm94eSksZyhlLnJlcXVlc3QpJiYodC5yZXF1ZXN0PWUucmVxdWVzdCksZyhlLnJldHJ5Q2FsbGJhY2spJiYodC5yZXRyeUNhbGxiYWNrPWUucmV0cnlDYWxsYmFjayksZyhlLnJldHJ5QXR0ZW1wdHMpJiYodC5yZXRyeUF0dGVtcHRzPWUucmV0cnlBdHRlbXB0cyksdH07RGUucHJvdG90eXBlLnJldHJ5T25FcnJvcj1mdW5jdGlvbihlKXtsZXQgdD10aGlzLnJldHJ5Q2FsbGJhY2s7aWYodHlwZW9mIHQhPSJmdW5jdGlvbiJ8fHRoaXMuX3JldHJ5Q291bnQ+PXRoaXMucmV0cnlBdHRlbXB0cylyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCExKTtsZXQgbj10aGlzO3JldHVybiBQcm9taXNlLnJlc29sdmUodCh0aGlzLGUpKS50aGVuKGZ1bmN0aW9uKG8pe3JldHVybisrbi5fcmV0cnlDb3VudCxvfSl9O0RlLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbihlKXtyZXR1cm4gZyhlKT8oZS5fdXJsPXRoaXMuX3VybCxlLl9xdWVyeVBhcmFtZXRlcnM9JGModGhpcy5fcXVlcnlQYXJhbWV0ZXJzKSxlLl90ZW1wbGF0ZVZhbHVlcz0kYyh0aGlzLl90ZW1wbGF0ZVZhbHVlcyksZS5oZWFkZXJzPSRjKHRoaXMuaGVhZGVycyksZS5wcm94eT10aGlzLnByb3h5LGUucmV0cnlDYWxsYmFjaz10aGlzLnJldHJ5Q2FsbGJhY2ssZS5yZXRyeUF0dGVtcHRzPXRoaXMucmV0cnlBdHRlbXB0cyxlLl9yZXRyeUNvdW50PTAsZS5yZXF1ZXN0PXRoaXMucmVxdWVzdC5jbG9uZSgpLGUpOm5ldyBEZSh7dXJsOnRoaXMuX3VybCxxdWVyeVBhcmFtZXRlcnM6dGhpcy5xdWVyeVBhcmFtZXRlcnMsdGVtcGxhdGVWYWx1ZXM6dGhpcy50ZW1wbGF0ZVZhbHVlcyxoZWFkZXJzOnRoaXMuaGVhZGVycyxwcm94eTp0aGlzLnByb3h5LHJldHJ5Q2FsbGJhY2s6dGhpcy5yZXRyeUNhbGxiYWNrLHJldHJ5QXR0ZW1wdHM6dGhpcy5yZXRyeUF0dGVtcHRzLHJlcXVlc3Q6dGhpcy5yZXF1ZXN0LmNsb25lKCkscGFyc2VVcmw6ITEsY3JlZGl0czpnKHRoaXMuY3JlZGl0cyk/dGhpcy5jcmVkaXRzLnNsaWNlKCk6dm9pZCAwfSl9O0RlLnByb3RvdHlwZS5nZXRCYXNlVXJpPWZ1bmN0aW9uKGUpe3JldHVybiBqMSh0aGlzLmdldFVybENvbXBvbmVudChlKSxlKX07RGUucHJvdG90eXBlLmFwcGVuZEZvcndhcmRTbGFzaD1mdW5jdGlvbigpe3RoaXMuX3VybD1rMSh0aGlzLl91cmwpfTtEZS5wcm90b3R5cGUuZmV0Y2hBcnJheUJ1ZmZlcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmZldGNoKHtyZXNwb25zZVR5cGU6ImFycmF5YnVmZmVyIn0pfTtEZS5mZXRjaEFycmF5QnVmZmVyPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgRGUoZSkuZmV0Y2hBcnJheUJ1ZmZlcigpfTtEZS5wcm90b3R5cGUuZmV0Y2hCbG9iPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZmV0Y2goe3Jlc3BvbnNlVHlwZToiYmxvYiJ9KX07RGUuZmV0Y2hCbG9iPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgRGUoZSkuZmV0Y2hCbG9iKCl9O0RlLnByb3RvdHlwZS5mZXRjaEltYWdlPWZ1bmN0aW9uKGUpe2U9ZT8/Q2UuRU1QVFlfT0JKRUNUO2xldCB0PWUucHJlZmVySW1hZ2VCaXRtYXA/PyExLG49ZS5wcmVmZXJCbG9iPz8hMSxvPWUuZmxpcFk/PyExLGE9ZS5za2lwQ29sb3JTcGFjZUNvbnZlcnNpb24/PyExO2lmKGJiKHRoaXMucmVxdWVzdCksIWdBfHx0aGlzLmlzRGF0YVVyaXx8dGhpcy5pc0Jsb2JVcml8fCF0aGlzLmhhc0hlYWRlcnMmJiFuKXJldHVybiB0aGlzLl9mZXRjaEltYWdlKHtyZXNvdXJjZTp0aGlzLGZsaXBZOm8sc2tpcENvbG9yU3BhY2VDb252ZXJzaW9uOmEscHJlZmVySW1hZ2VCaXRtYXA6dH0pO2xldCByPXRoaXMuZmV0Y2hCbG9iKCk7aWYoIWcocikpcmV0dXJuO2xldCBpLGYsZCxjO3JldHVybiBEZS5zdXBwb3J0c0ltYWdlQml0bWFwT3B0aW9ucygpLnRoZW4oZnVuY3Rpb24odSl7cmV0dXJuIGk9dSxmPWkmJnQscn0pLnRoZW4oZnVuY3Rpb24odSl7aWYoIWcodSkpcmV0dXJuO2lmKGM9dSxmKXJldHVybiBEZS5jcmVhdGVJbWFnZUJpdG1hcEZyb21CbG9iKHUse2ZsaXBZOm8scHJlbXVsdGlwbHlBbHBoYTohMSxza2lwQ29sb3JTcGFjZUNvbnZlcnNpb246YX0pO2xldCBsPXdpbmRvdy5VUkwuY3JlYXRlT2JqZWN0VVJMKHUpO3JldHVybiBkPW5ldyBEZSh7dXJsOmx9KSxkLl9mZXRjaEltYWdlKHtmbGlwWTpvLHNraXBDb2xvclNwYWNlQ29udmVyc2lvbjphLHByZWZlckltYWdlQml0bWFwOiExfSl9KS50aGVuKGZ1bmN0aW9uKHUpe2lmKGcodSkpcmV0dXJuIHUuYmxvYj1jLGZ8fHdpbmRvdy5VUkwucmV2b2tlT2JqZWN0VVJMKGQudXJsKSx1fSkuY2F0Y2goZnVuY3Rpb24odSl7cmV0dXJuIGcoZCkmJndpbmRvdy5VUkwucmV2b2tlT2JqZWN0VVJMKGQudXJsKSx1LmJsb2I9YyxQcm9taXNlLnJlamVjdCh1KX0pfTtEZS5wcm90b3R5cGUuX2ZldGNoSW1hZ2U9ZnVuY3Rpb24oZSl7bGV0IHQ9dGhpcyxuPWUuZmxpcFksbz1lLnNraXBDb2xvclNwYWNlQ29udmVyc2lvbixhPWUucHJlZmVySW1hZ2VCaXRtYXAscj10LnJlcXVlc3Q7ci51cmw9dC51cmwsci5yZXF1ZXN0RnVuY3Rpb249ZnVuY3Rpb24oKXtsZXQgZj0hMTshdC5pc0RhdGFVcmkmJiF0LmlzQmxvYlVyaSYmKGY9dC5pc0Nyb3NzT3JpZ2luVXJsKTtsZXQgZD1RaSgpO3JldHVybiBEZS5fSW1wbGVtZW50YXRpb25zLmNyZWF0ZUltYWdlKHIsZixkLG4sbyxhKSxkLnByb21pc2V9O2xldCBpPV9sLnJlcXVlc3Qocik7aWYoZyhpKSlyZXR1cm4gaS5jYXRjaChmdW5jdGlvbihmKXtyZXR1cm4gci5zdGF0ZSE9PUNuLkZBSUxFRD9Qcm9taXNlLnJlamVjdChmKTp0LnJldHJ5T25FcnJvcihmKS50aGVuKGZ1bmN0aW9uKGQpe3JldHVybiBkPyhyLnN0YXRlPUNuLlVOSVNTVUVELHIuZGVmZXJyZWQ9dm9pZCAwLHQuX2ZldGNoSW1hZ2Uoe2ZsaXBZOm4sc2tpcENvbG9yU3BhY2VDb252ZXJzaW9uOm8scHJlZmVySW1hZ2VCaXRtYXA6YX0pKTpQcm9taXNlLnJlamVjdChmKX0pfSl9O0RlLmZldGNoSW1hZ2U9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBEZShlKS5mZXRjaEltYWdlKHtmbGlwWTplLmZsaXBZLHNraXBDb2xvclNwYWNlQ29udmVyc2lvbjplLnNraXBDb2xvclNwYWNlQ29udmVyc2lvbixwcmVmZXJCbG9iOmUucHJlZmVyQmxvYixwcmVmZXJJbWFnZUJpdG1hcDplLnByZWZlckltYWdlQml0bWFwfSl9O0RlLnByb3RvdHlwZS5mZXRjaFRleHQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5mZXRjaCh7cmVzcG9uc2VUeXBlOiJ0ZXh0In0pfTtEZS5mZXRjaFRleHQ9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBEZShlKS5mZXRjaFRleHQoKX07RGUucHJvdG90eXBlLmZldGNoSnNvbj1mdW5jdGlvbigpe2xldCBlPXRoaXMuZmV0Y2goe3Jlc3BvbnNlVHlwZToidGV4dCIsaGVhZGVyczp7QWNjZXB0OiJhcHBsaWNhdGlvbi9qc29uLCovKjtxPTAuMDEifX0pO2lmKGcoZSkpcmV0dXJuIGUudGhlbihmdW5jdGlvbih0KXtpZihnKHQpKXJldHVybiBKU09OLnBhcnNlKHQpfSl9O0RlLmZldGNoSnNvbj1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IERlKGUpLmZldGNoSnNvbigpfTtEZS5wcm90b3R5cGUuZmV0Y2hYTUw9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5mZXRjaCh7cmVzcG9uc2VUeXBlOiJkb2N1bWVudCIsb3ZlcnJpZGVNaW1lVHlwZToidGV4dC94bWwifSl9O0RlLmZldGNoWE1MPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgRGUoZSkuZmV0Y2hYTUwoKX07RGUucHJvdG90eXBlLmZldGNoSnNvbnA9ZnVuY3Rpb24oZSl7ZT1lPz8iY2FsbGJhY2siLGJiKHRoaXMucmVxdWVzdCk7bGV0IHQ7ZG8gdD1gbG9hZEpzb25wJHtrLm5leHRSYW5kb21OdW1iZXIoKS50b1N0cmluZygpLnN1YnN0cmluZygyLDgpfWA7d2hpbGUoZyh3aW5kb3dbdF0pKTtyZXR1cm4gX0EodGhpcyxlLHQpfTtEZS5mZXRjaEpzb25wPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgRGUoZSkuZmV0Y2hKc29ucChlLmNhbGxiYWNrUGFyYW1ldGVyTmFtZSl9O0RlLnByb3RvdHlwZS5fbWFrZVJlcXVlc3Q9ZnVuY3Rpb24oZSl7bGV0IHQ9dGhpcztiYih0LnJlcXVlc3QpO2xldCBuPXQucmVxdWVzdCxvPXQudXJsO24udXJsPW8sbi5yZXF1ZXN0RnVuY3Rpb249ZnVuY3Rpb24oKXtsZXQgcj1lLnJlc3BvbnNlVHlwZSxpPXlhKGUuaGVhZGVycyx0LmhlYWRlcnMpLGY9ZS5vdmVycmlkZU1pbWVUeXBlLGQ9ZS5tZXRob2QsYz1lLmRhdGEsdT1RaSgpLGw9RGUuX0ltcGxlbWVudGF0aW9ucy5sb2FkV2l0aFhocihvLHIsZCxjLGksdSxmKTtyZXR1cm4gZyhsKSYmZyhsLmFib3J0KSYmKG4uY2FuY2VsRnVuY3Rpb249ZnVuY3Rpb24oKXtsLmFib3J0KCl9KSx1LnByb21pc2V9O2xldCBhPV9sLnJlcXVlc3Qobik7aWYoZyhhKSlyZXR1cm4gYS50aGVuKGZ1bmN0aW9uKHIpe3JldHVybiBuLmNhbmNlbEZ1bmN0aW9uPXZvaWQgMCxyfSkuY2F0Y2goZnVuY3Rpb24ocil7cmV0dXJuIG4uY2FuY2VsRnVuY3Rpb249dm9pZCAwLG4uc3RhdGUhPT1Dbi5GQUlMRUQ/UHJvbWlzZS5yZWplY3Qocik6dC5yZXRyeU9uRXJyb3IocikudGhlbihmdW5jdGlvbihpKXtyZXR1cm4gaT8obi5zdGF0ZT1Dbi5VTklTU1VFRCxuLmRlZmVycmVkPXZvaWQgMCx0LmZldGNoKGUpKTpQcm9taXNlLnJlamVjdChyKX0pfSl9O0hDPS9eZGF0YTooLio/KSg7YmFzZTY0KT8sKC4qKSQvO0RlLnByb3RvdHlwZS5mZXRjaD1mdW5jdGlvbihlKXtyZXR1cm4gZT1ycihlLHt9KSxlLm1ldGhvZD0iR0VUIix0aGlzLl9tYWtlUmVxdWVzdChlKX07RGUuZmV0Y2g9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBEZShlKS5mZXRjaCh7cmVzcG9uc2VUeXBlOmUucmVzcG9uc2VUeXBlLG92ZXJyaWRlTWltZVR5cGU6ZS5vdmVycmlkZU1pbWVUeXBlfSl9O0RlLnByb3RvdHlwZS5kZWxldGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGU9cnIoZSx7fSksZS5tZXRob2Q9IkRFTEVURSIsdGhpcy5fbWFrZVJlcXVlc3QoZSl9O0RlLmRlbGV0ZT1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IERlKGUpLmRlbGV0ZSh7cmVzcG9uc2VUeXBlOmUucmVzcG9uc2VUeXBlLG92ZXJyaWRlTWltZVR5cGU6ZS5vdmVycmlkZU1pbWVUeXBlLGRhdGE6ZS5kYXRhfSl9O0RlLnByb3RvdHlwZS5oZWFkPWZ1bmN0aW9uKGUpe3JldHVybiBlPXJyKGUse30pLGUubWV0aG9kPSJIRUFEIix0aGlzLl9tYWtlUmVxdWVzdChlKX07RGUuaGVhZD1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IERlKGUpLmhlYWQoe3Jlc3BvbnNlVHlwZTplLnJlc3BvbnNlVHlwZSxvdmVycmlkZU1pbWVUeXBlOmUub3ZlcnJpZGVNaW1lVHlwZX0pfTtEZS5wcm90b3R5cGUub3B0aW9ucz1mdW5jdGlvbihlKXtyZXR1cm4gZT1ycihlLHt9KSxlLm1ldGhvZD0iT1BUSU9OUyIsdGhpcy5fbWFrZVJlcXVlc3QoZSl9O0RlLm9wdGlvbnM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBEZShlKS5vcHRpb25zKHtyZXNwb25zZVR5cGU6ZS5yZXNwb25zZVR5cGUsb3ZlcnJpZGVNaW1lVHlwZTplLm92ZXJyaWRlTWltZVR5cGV9KX07RGUucHJvdG90eXBlLnBvc3Q9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gTW4uZGVmaW5lZCgiZGF0YSIsZSksdD1ycih0LHt9KSx0Lm1ldGhvZD0iUE9TVCIsdC5kYXRhPWUsdGhpcy5fbWFrZVJlcXVlc3QodCl9O0RlLnBvc3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBEZShlKS5wb3N0KGUuZGF0YSx7cmVzcG9uc2VUeXBlOmUucmVzcG9uc2VUeXBlLG92ZXJyaWRlTWltZVR5cGU6ZS5vdmVycmlkZU1pbWVUeXBlfSl9O0RlLnByb3RvdHlwZS5wdXQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gTW4uZGVmaW5lZCgiZGF0YSIsZSksdD1ycih0LHt9KSx0Lm1ldGhvZD0iUFVUIix0LmRhdGE9ZSx0aGlzLl9tYWtlUmVxdWVzdCh0KX07RGUucHV0PWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgRGUoZSkucHV0KGUuZGF0YSx7cmVzcG9uc2VUeXBlOmUucmVzcG9uc2VUeXBlLG92ZXJyaWRlTWltZVR5cGU6ZS5vdmVycmlkZU1pbWVUeXBlfSl9O0RlLnByb3RvdHlwZS5wYXRjaD1mdW5jdGlvbihlLHQpe3JldHVybiBNbi5kZWZpbmVkKCJkYXRhIixlKSx0PXJyKHQse30pLHQubWV0aG9kPSJQQVRDSCIsdC5kYXRhPWUsdGhpcy5fbWFrZVJlcXVlc3QodCl9O0RlLnBhdGNoPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgRGUoZSkucGF0Y2goZS5kYXRhLHtyZXNwb25zZVR5cGU6ZS5yZXNwb25zZVR5cGUsb3ZlcnJpZGVNaW1lVHlwZTplLm92ZXJyaWRlTWltZVR5cGV9KX07RGUuX0ltcGxlbWVudGF0aW9ucz17fTtEZS5fSW1wbGVtZW50YXRpb25zLmxvYWRJbWFnZUVsZW1lbnQ9ZnVuY3Rpb24oZSx0LG4pe2xldCBvPW5ldyBJbWFnZTtvLm9ubG9hZD1mdW5jdGlvbigpe28ubmF0dXJhbFdpZHRoPT09MCYmby5uYXR1cmFsSGVpZ2h0PT09MCYmby53aWR0aD09PTAmJm8uaGVpZ2h0PT09MCYmKG8ud2lkdGg9MzAwLG8uaGVpZ2h0PTE1MCksbi5yZXNvbHZlKG8pfSxvLm9uZXJyb3I9ZnVuY3Rpb24oYSl7bi5yZWplY3QoYSl9LHQmJihtYi5jb250YWlucyhlKT9vLmNyb3NzT3JpZ2luPSJ1c2UtY3JlZGVudGlhbHMiOm8uY3Jvc3NPcmlnaW49IiIpLG8uc3JjPWV9O0RlLl9JbXBsZW1lbnRhdGlvbnMuY3JlYXRlSW1hZ2U9ZnVuY3Rpb24oZSx0LG4sbyxhLHIsaSl7bGV0IGY9ZS51cmw7RGUuc3VwcG9ydHNJbWFnZUJpdG1hcE9wdGlvbnMoKS50aGVuKGZ1bmN0aW9uKGQpe2lmKCEoZCYmcikpe0RlLl9JbXBsZW1lbnRhdGlvbnMubG9hZEltYWdlRWxlbWVudChmLHQsbik7cmV0dXJufWxldCBjPSJibG9iIix1PSJHRVQiLGw9UWkoKSxoPURlLl9JbXBsZW1lbnRhdGlvbnMubG9hZFdpdGhYaHIoZixjLHUsdm9pZCAwLGksbCx2b2lkIDAsdm9pZCAwLHZvaWQgMCk7cmV0dXJuIGcoaCkmJmcoaC5hYm9ydCkmJihlLmNhbmNlbEZ1bmN0aW9uPWZ1bmN0aW9uKCl7aC5hYm9ydCgpfSksbC5wcm9taXNlLnRoZW4oZnVuY3Rpb24obSl7aWYoIWcobSkpe24ucmVqZWN0KG5ldyB1dChgU3VjY2Vzc2Z1bGx5IHJldHJpZXZlZCAke2Z9IGJ1dCBpdCBjb250YWluZWQgbm8gY29udGVudC5gKSk7cmV0dXJufXJldHVybiBEZS5jcmVhdGVJbWFnZUJpdG1hcEZyb21CbG9iKG0se2ZsaXBZOm8scHJlbXVsdGlwbHlBbHBoYTohMSxza2lwQ29sb3JTcGFjZUNvbnZlcnNpb246YX0pfSkudGhlbihmdW5jdGlvbihtKXtuLnJlc29sdmUobSl9KX0pLmNhdGNoKGZ1bmN0aW9uKGQpe24ucmVqZWN0KGQpfSl9O0RlLmNyZWF0ZUltYWdlQml0bWFwRnJvbUJsb2I9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gTW4uZGVmaW5lZCgib3B0aW9ucyIsdCksTW4udHlwZU9mLmJvb2woIm9wdGlvbnMuZmxpcFkiLHQuZmxpcFkpLE1uLnR5cGVPZi5ib29sKCJvcHRpb25zLnByZW11bHRpcGx5QWxwaGEiLHQucHJlbXVsdGlwbHlBbHBoYSksTW4udHlwZU9mLmJvb2woIm9wdGlvbnMuc2tpcENvbG9yU3BhY2VDb252ZXJzaW9uIix0LnNraXBDb2xvclNwYWNlQ29udmVyc2lvbiksY3JlYXRlSW1hZ2VCaXRtYXAoZSx7aW1hZ2VPcmllbnRhdGlvbjp0LmZsaXBZPyJmbGlwWSI6Im5vbmUiLHByZW11bHRpcGx5QWxwaGE6dC5wcmVtdWx0aXBseUFscGhhPyJwcmVtdWx0aXBseSI6Im5vbmUiLGNvbG9yU3BhY2VDb252ZXJzaW9uOnQuc2tpcENvbG9yU3BhY2VDb252ZXJzaW9uPyJub25lIjoiZGVmYXVsdCJ9KX07V0M9dHlwZW9mIFhNTEh0dHBSZXF1ZXN0PiJ1IjtEZS5fSW1wbGVtZW50YXRpb25zLmxvYWRXaXRoWGhyPWZ1bmN0aW9uKGUsdCxuLG8sYSxyLGkpe2xldCBmPUhDLmV4ZWMoZSk7aWYoZiE9PW51bGwpe3IucmVzb2x2ZShLQyhmLHQpKTtyZXR1cm59aWYoV0Mpe3FDKGUsdCxuLG8sYSxyLGkpO3JldHVybn1sZXQgZD1uZXcgWE1MSHR0cFJlcXVlc3Q7aWYobWIuY29udGFpbnMoZSkmJihkLndpdGhDcmVkZW50aWFscz0hMCksZC5vcGVuKG4sZSwhMCksZyhpKSYmZyhkLm92ZXJyaWRlTWltZVR5cGUpJiZkLm92ZXJyaWRlTWltZVR5cGUoaSksZyhhKSlmb3IobGV0IHUgaW4gYSlhLmhhc093blByb3BlcnR5KHUpJiZkLnNldFJlcXVlc3RIZWFkZXIodSxhW3VdKTtnKHQpJiYoZC5yZXNwb25zZVR5cGU9dCk7bGV0IGM9ITE7cmV0dXJuIHR5cGVvZiBlPT0ic3RyaW5nIiYmKGM9ZS5pbmRleE9mKCJmaWxlOi8vIik9PT0wfHx0eXBlb2Ygd2luZG93PCJ1IiYmd2luZG93LmxvY2F0aW9uLm9yaWdpbj09PSJmaWxlOi8vIiksZC5vbmxvYWQ9ZnVuY3Rpb24oKXtpZigoZC5zdGF0dXM8MjAwfHxkLnN0YXR1cz49MzAwKSYmIShjJiZkLnN0YXR1cz09PTApKXtyLnJlamVjdChuZXcgeWYoZC5zdGF0dXMsZC5yZXNwb25zZSxkLmdldEFsbFJlc3BvbnNlSGVhZGVycygpKSk7cmV0dXJufWxldCB1PWQucmVzcG9uc2UsbD1kLnJlc3BvbnNlVHlwZTtpZihuPT09IkhFQUQifHxuPT09Ik9QVElPTlMiKXtsZXQgbT1kLmdldEFsbFJlc3BvbnNlSGVhZGVycygpLnRyaW0oKS5zcGxpdCgvW1xyXG5dKy8pLGI9e307bS5mb3JFYWNoKGZ1bmN0aW9uKHApe2xldCB5PXAuc3BsaXQoIjogIiksVD15LnNoaWZ0KCk7YltUXT15LmpvaW4oIjogIil9KSxyLnJlc29sdmUoYik7cmV0dXJufWlmKGQuc3RhdHVzPT09MjA0KXIucmVzb2x2ZSh2b2lkIDApO2Vsc2UgaWYoZyh1KSYmKCFnKHQpfHxsPT09dCkpci5yZXNvbHZlKHUpO2Vsc2UgaWYodD09PSJqc29uIiYmdHlwZW9mIHU9PSJzdHJpbmciKXRyeXtyLnJlc29sdmUoSlNPTi5wYXJzZSh1KSl9Y2F0Y2goaCl7ci5yZWplY3QoaCl9ZWxzZShsPT09IiJ8fGw9PT0iZG9jdW1lbnQiKSYmZyhkLnJlc3BvbnNlWE1MKSYmZC5yZXNwb25zZVhNTC5oYXNDaGlsZE5vZGVzKCk/ci5yZXNvbHZlKGQucmVzcG9uc2VYTUwpOihsPT09IiJ8fGw9PT0idGV4dCIpJiZnKGQucmVzcG9uc2VUZXh0KT9yLnJlc29sdmUoZC5yZXNwb25zZVRleHQpOnIucmVqZWN0KG5ldyB1dCgiSW52YWxpZCBYTUxIdHRwUmVxdWVzdCByZXNwb25zZSB0eXBlLiIpKX0sZC5vbmVycm9yPWZ1bmN0aW9uKHUpe3IucmVqZWN0KG5ldyB5Zil9LGQuc2VuZChvKSxkfTtEZS5fSW1wbGVtZW50YXRpb25zLmxvYWRBbmRFeGVjdXRlU2NyaXB0PWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gVzEoZSx0KS5jYXRjaChmdW5jdGlvbihvKXtuLnJlamVjdChvKX0pfTtEZS5fRGVmYXVsdEltcGxlbWVudGF0aW9ucz17fTtEZS5fRGVmYXVsdEltcGxlbWVudGF0aW9ucy5jcmVhdGVJbWFnZT1EZS5fSW1wbGVtZW50YXRpb25zLmNyZWF0ZUltYWdlO0RlLl9EZWZhdWx0SW1wbGVtZW50YXRpb25zLmxvYWRXaXRoWGhyPURlLl9JbXBsZW1lbnRhdGlvbnMubG9hZFdpdGhYaHI7RGUuX0RlZmF1bHRJbXBsZW1lbnRhdGlvbnMubG9hZEFuZEV4ZWN1dGVTY3JpcHQ9RGUuX0ltcGxlbWVudGF0aW9ucy5sb2FkQW5kRXhlY3V0ZVNjcmlwdDtEZS5ERUZBVUxUPU9iamVjdC5mcmVlemUobmV3IERlKHt1cmw6dHlwZW9mIGRvY3VtZW50PiJ1Ij8iIjpkb2N1bWVudC5sb2NhdGlvbi5ocmVmLnNwbGl0KCI/IilbMF19KSk7QWE9RGV9KTtmdW5jdGlvbiBFZihlKXtlPWU/P0NlLkVNUFRZX09CSkVDVCx0aGlzLl9kYXRlcz12b2lkIDAsdGhpcy5fc2FtcGxlcz12b2lkIDAsdGhpcy5fZGF0ZUNvbHVtbj0tMSx0aGlzLl94UG9sZVdhbmRlclJhZGlhbnNDb2x1bW49LTEsdGhpcy5feVBvbGVXYW5kZXJSYWRpYW5zQ29sdW1uPS0xLHRoaXMuX3V0MU1pbnVzVXRjU2Vjb25kc0NvbHVtbj0tMSx0aGlzLl94Q2VsZXN0aWFsUG9sZU9mZnNldFJhZGlhbnNDb2x1bW49LTEsdGhpcy5feUNlbGVzdGlhbFBvbGVPZmZzZXRSYWRpYW5zQ29sdW1uPS0xLHRoaXMuX3RhaU1pbnVzVXRjU2Vjb25kc0NvbHVtbj0tMSx0aGlzLl9jb2x1bW5Db3VudD0wLHRoaXMuX2xhc3RJbmRleD0tMSx0aGlzLl9hZGROZXdMZWFwU2Vjb25kcz1lLmFkZE5ld0xlYXBTZWNvbmRzPz8hMCxnKGUuZGF0YSk/eUEodGhpcyxlLmRhdGEpOnlBKHRoaXMse2NvbHVtbk5hbWVzOlsiZGF0ZUlzbzg2MDEiLCJtb2RpZmllZEp1bGlhbkRhdGVVdGMiLCJ4UG9sZVdhbmRlclJhZGlhbnMiLCJ5UG9sZVdhbmRlclJhZGlhbnMiLCJ1dDFNaW51c1V0Y1NlY29uZHMiLCJsZW5ndGhPZkRheUNvcnJlY3Rpb25TZWNvbmRzIiwieENlbGVzdGlhbFBvbGVPZmZzZXRSYWRpYW5zIiwieUNlbGVzdGlhbFBvbGVPZmZzZXRSYWRpYW5zIiwidGFpTWludXNVdGNTZWNvbmRzIl0sc2FtcGxlczpbXX0pfWZ1bmN0aW9uIFhDKGUsdCl7cmV0dXJuIEpuLmNvbXBhcmUoZS5qdWxpYW5EYXRlLHQpfWZ1bmN0aW9uIHlBKGUsdCl7aWYoIWcodC5jb2x1bW5OYW1lcykpdGhyb3cgbmV3IHV0KCJFcnJvciBpbiBsb2FkZWQgRU9QIGRhdGE6IFRoZSBjb2x1bW5OYW1lcyBwcm9wZXJ0eSBpcyByZXF1aXJlZC4iKTtpZighZyh0LnNhbXBsZXMpKXRocm93IG5ldyB1dCgiRXJyb3IgaW4gbG9hZGVkIEVPUCBkYXRhOiBUaGUgc2FtcGxlcyBwcm9wZXJ0eSBpcyByZXF1aXJlZC4iKTtsZXQgbj10LmNvbHVtbk5hbWVzLmluZGV4T2YoIm1vZGlmaWVkSnVsaWFuRGF0ZVV0YyIpLG89dC5jb2x1bW5OYW1lcy5pbmRleE9mKCJ4UG9sZVdhbmRlclJhZGlhbnMiKSxhPXQuY29sdW1uTmFtZXMuaW5kZXhPZigieVBvbGVXYW5kZXJSYWRpYW5zIikscj10LmNvbHVtbk5hbWVzLmluZGV4T2YoInV0MU1pbnVzVXRjU2Vjb25kcyIpLGk9dC5jb2x1bW5OYW1lcy5pbmRleE9mKCJ4Q2VsZXN0aWFsUG9sZU9mZnNldFJhZGlhbnMiKSxmPXQuY29sdW1uTmFtZXMuaW5kZXhPZigieUNlbGVzdGlhbFBvbGVPZmZzZXRSYWRpYW5zIiksZD10LmNvbHVtbk5hbWVzLmluZGV4T2YoInRhaU1pbnVzVXRjU2Vjb25kcyIpO2lmKG48MHx8bzwwfHxhPDB8fHI8MHx8aTwwfHxmPDB8fGQ8MCl0aHJvdyBuZXcgdXQoIkVycm9yIGluIGxvYWRlZCBFT1AgZGF0YTogVGhlIGNvbHVtbk5hbWVzIHByb3BlcnR5IG11c3QgaW5jbHVkZSBtb2RpZmllZEp1bGlhbkRhdGVVdGMsIHhQb2xlV2FuZGVyUmFkaWFucywgeVBvbGVXYW5kZXJSYWRpYW5zLCB1dDFNaW51c1V0Y1NlY29uZHMsIHhDZWxlc3RpYWxQb2xlT2Zmc2V0UmFkaWFucywgeUNlbGVzdGlhbFBvbGVPZmZzZXRSYWRpYW5zLCBhbmQgdGFpTWludXNVdGNTZWNvbmRzIGNvbHVtbnMiKTtsZXQgYz1lLl9zYW1wbGVzPXQuc2FtcGxlcyx1PWUuX2RhdGVzPVtdO2UuX2RhdGVDb2x1bW49bixlLl94UG9sZVdhbmRlclJhZGlhbnNDb2x1bW49byxlLl95UG9sZVdhbmRlclJhZGlhbnNDb2x1bW49YSxlLl91dDFNaW51c1V0Y1NlY29uZHNDb2x1bW49cixlLl94Q2VsZXN0aWFsUG9sZU9mZnNldFJhZGlhbnNDb2x1bW49aSxlLl95Q2VsZXN0aWFsUG9sZU9mZnNldFJhZGlhbnNDb2x1bW49ZixlLl90YWlNaW51c1V0Y1NlY29uZHNDb2x1bW49ZCxlLl9jb2x1bW5Db3VudD10LmNvbHVtbk5hbWVzLmxlbmd0aCxlLl9sYXN0SW5kZXg9dm9pZCAwO2xldCBsLGg9ZS5fYWRkTmV3TGVhcFNlY29uZHM7Zm9yKGxldCBtPTAsYj1jLmxlbmd0aDttPGI7bSs9ZS5fY29sdW1uQ291bnQpe2xldCBwPWNbbStuXSx5PWNbbStkXSxUPXArZ24uTU9ESUZJRURfSlVMSUFOX0RBVEVfRElGRkVSRU5DRSxfPW5ldyBKbihULHkseXQuVEFJKTtpZih1LnB1c2goXyksaCl7aWYoeSE9PWwmJmcobCkpe2xldCBFPUpuLmxlYXBTZWNvbmRzLHc9X2EoRSxfLFhDKTtpZih3PDApe2xldCBSPW5ldyBRdChfLHkpO0Uuc3BsaWNlKH53LDAsUil9fWw9eX19fWZ1bmN0aW9uIEFBKGUsdCxuLG8sYSl7bGV0IHI9bipvO2EueFBvbGVXYW5kZXI9dFtyK2UuX3hQb2xlV2FuZGVyUmFkaWFuc0NvbHVtbl0sYS55UG9sZVdhbmRlcj10W3IrZS5feVBvbGVXYW5kZXJSYWRpYW5zQ29sdW1uXSxhLnhQb2xlT2Zmc2V0PXRbcitlLl94Q2VsZXN0aWFsUG9sZU9mZnNldFJhZGlhbnNDb2x1bW5dLGEueVBvbGVPZmZzZXQ9dFtyK2UuX3lDZWxlc3RpYWxQb2xlT2Zmc2V0UmFkaWFuc0NvbHVtbl0sYS51dDFNaW51c1V0Yz10W3IrZS5fdXQxTWludXNVdGNTZWNvbmRzQ29sdW1uXX1mdW5jdGlvbiBUZihlLHQsbil7cmV0dXJuIHQrZSoobi10KX1mdW5jdGlvbiB3QShlLHQsbixvLGEscixpKXtsZXQgZj1lLl9jb2x1bW5Db3VudDtpZihyPnQubGVuZ3RoLTEpcmV0dXJuIGkueFBvbGVXYW5kZXI9MCxpLnlQb2xlV2FuZGVyPTAsaS54UG9sZU9mZnNldD0wLGkueVBvbGVPZmZzZXQ9MCxpLnV0MU1pbnVzVXRjPTAsaTtsZXQgZD10W2FdLGM9dFtyXTtpZihkLmVxdWFscyhjKXx8by5lcXVhbHMoZCkpcmV0dXJuIEFBKGUsbixhLGYsaSksaTtpZihvLmVxdWFscyhjKSlyZXR1cm4gQUEoZSxuLHIsZixpKSxpO2xldCB1PUpuLnNlY29uZHNEaWZmZXJlbmNlKG8sZCkvSm4uc2Vjb25kc0RpZmZlcmVuY2UoYyxkKSxsPWEqZixoPXIqZixtPW5bbCtlLl91dDFNaW51c1V0Y1NlY29uZHNDb2x1bW5dLGI9bltoK2UuX3V0MU1pbnVzVXRjU2Vjb25kc0NvbHVtbl0scD1iLW07aWYocD4uNXx8cDwtLjUpe2xldCB5PW5bbCtlLl90YWlNaW51c1V0Y1NlY29uZHNDb2x1bW5dLFQ9bltoK2UuX3RhaU1pbnVzVXRjU2Vjb25kc0NvbHVtbl07eSE9PVQmJihjLmVxdWFscyhvKT9tPWI6Yi09VC15KX1yZXR1cm4gaS54UG9sZVdhbmRlcj1UZih1LG5bbCtlLl94UG9sZVdhbmRlclJhZGlhbnNDb2x1bW5dLG5baCtlLl94UG9sZVdhbmRlclJhZGlhbnNDb2x1bW5dKSxpLnlQb2xlV2FuZGVyPVRmKHUsbltsK2UuX3lQb2xlV2FuZGVyUmFkaWFuc0NvbHVtbl0sbltoK2UuX3lQb2xlV2FuZGVyUmFkaWFuc0NvbHVtbl0pLGkueFBvbGVPZmZzZXQ9VGYodSxuW2wrZS5feENlbGVzdGlhbFBvbGVPZmZzZXRSYWRpYW5zQ29sdW1uXSxuW2grZS5feENlbGVzdGlhbFBvbGVPZmZzZXRSYWRpYW5zQ29sdW1uXSksaS55UG9sZU9mZnNldD1UZih1LG5bbCtlLl95Q2VsZXN0aWFsUG9sZU9mZnNldFJhZGlhbnNDb2x1bW5dLG5baCtlLl95Q2VsZXN0aWFsUG9sZU9mZnNldFJhZGlhbnNDb2x1bW5dKSxpLnV0MU1pbnVzVXRjPVRmKHUsbSxiKSxpfXZhciBUQSxFQT1YKCgpPT57dGwoKTttdCgpO3NlKCk7WG0oKTtpbCgpO1ptKCk7b3MoKTtqYSgpO25sKCk7b2woKTtFZi5mcm9tVXJsPWFzeW5jIGZ1bmN0aW9uKGUsdCl7dD10Pz9DZS5FTVBUWV9PQkpFQ1Q7bGV0IG49QWEuY3JlYXRlSWZOZWVkZWQoZSksbzt0cnl7bz1hd2FpdCBuLmZldGNoSnNvbigpfWNhdGNoe3Rocm93IG5ldyB1dChgQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgcmV0cmlldmluZyB0aGUgRU9QIGRhdGEgZnJvbSB0aGUgVVJMICR7bi51cmx9LmApfXJldHVybiBuZXcgRWYoe2FkZE5ld0xlYXBTZWNvbmRzOnQuYWRkTmV3TGVhcFNlY29uZHMsZGF0YTpvfSl9O0VmLk5PTkU9T2JqZWN0LmZyZWV6ZSh7Y29tcHV0ZTpmdW5jdGlvbihlLHQpe3JldHVybiBnKHQpPyh0LnhQb2xlV2FuZGVyPTAsdC55UG9sZVdhbmRlcj0wLHQueFBvbGVPZmZzZXQ9MCx0LnlQb2xlT2Zmc2V0PTAsdC51dDFNaW51c1V0Yz0wKTp0PW5ldyBiZigwLDAsMCwwLDApLHR9fSk7RWYucHJvdG90eXBlLmNvbXB1dGU9ZnVuY3Rpb24oZSx0KXtpZighZyh0aGlzLl9zYW1wbGVzKSlyZXR1cm47aWYoZyh0KXx8KHQ9bmV3IGJmKDAsMCwwLDAsMCkpLHRoaXMuX3NhbXBsZXMubGVuZ3RoPT09MClyZXR1cm4gdC54UG9sZVdhbmRlcj0wLHQueVBvbGVXYW5kZXI9MCx0LnhQb2xlT2Zmc2V0PTAsdC55UG9sZU9mZnNldD0wLHQudXQxTWludXNVdGM9MCx0O2xldCBuPXRoaXMuX2RhdGVzLG89dGhpcy5fbGFzdEluZGV4LGE9MCxyPTA7aWYoZyhvKSl7bGV0IGY9bltvXSxkPW5bbysxXSxjPUpuLmxlc3NUaGFuT3JFcXVhbHMoZixlKSx1PSFnKGQpLGw9dXx8Sm4uZ3JlYXRlclRoYW5PckVxdWFscyhkLGUpO2lmKGMmJmwpcmV0dXJuIGE9bywhdSYmZC5lcXVhbHMoZSkmJisrYSxyPWErMSx3QSh0aGlzLG4sdGhpcy5fc2FtcGxlcyxlLGEscix0KSx0fWxldCBpPV9hKG4sZSxKbi5jb21wYXJlLHRoaXMuX2RhdGVDb2x1bW4pO3JldHVybiBpPj0wPyhpPG4ubGVuZ3RoLTEmJm5baSsxXS5lcXVhbHMoZSkmJisraSxhPWkscj1pKToocj1+aSxhPXItMSxhPDAmJihhPTApKSx0aGlzLl9sYXN0SW5kZXg9YSx3QSh0aGlzLG4sdGhpcy5fc2FtcGxlcyxlLGEscix0KSx0fTtUQT1FZn0pO2Z1bmN0aW9uIFBvKGUsdCxuKXt0aGlzLmhlYWRpbmc9ZT8/MCx0aGlzLnBpdGNoPXQ/PzAsdGhpcy5yb2xsPW4/PzB9dmFyIHdsLFJBPVgoKCk9PntzZSgpO0dlKCk7UG8uZnJvbVF1YXRlcm5pb249ZnVuY3Rpb24oZSx0KXtnKHQpfHwodD1uZXcgUG8pO2xldCBuPTIqKGUudyplLnktZS56KmUueCksbz0xLTIqKGUueCplLngrZS55KmUueSksYT0yKihlLncqZS54K2UueSplLnopLHI9MS0yKihlLnkqZS55K2UueiplLnopLGk9MiooZS53KmUueitlLngqZS55KTtyZXR1cm4gdC5oZWFkaW5nPS1NYXRoLmF0YW4yKGksciksdC5yb2xsPU1hdGguYXRhbjIoYSxvKSx0LnBpdGNoPS1rLmFzaW5DbGFtcGVkKG4pLHR9O1BvLmZyb21EZWdyZWVzPWZ1bmN0aW9uKGUsdCxuLG8pe3JldHVybiBnKG8pfHwobz1uZXcgUG8pLG8uaGVhZGluZz1lKmsuUkFESUFOU19QRVJfREVHUkVFLG8ucGl0Y2g9dCprLlJBRElBTlNfUEVSX0RFR1JFRSxvLnJvbGw9biprLlJBRElBTlNfUEVSX0RFR1JFRSxvfTtQby5jbG9uZT1mdW5jdGlvbihlLHQpe2lmKGcoZSkpcmV0dXJuIGcodCk/KHQuaGVhZGluZz1lLmhlYWRpbmcsdC5waXRjaD1lLnBpdGNoLHQucm9sbD1lLnJvbGwsdCk6bmV3IFBvKGUuaGVhZGluZyxlLnBpdGNoLGUucm9sbCl9O1BvLmVxdWFscz1mdW5jdGlvbihlLHQpe3JldHVybiBlPT09dHx8ZyhlKSYmZyh0KSYmZS5oZWFkaW5nPT09dC5oZWFkaW5nJiZlLnBpdGNoPT09dC5waXRjaCYmZS5yb2xsPT09dC5yb2xsfTtQby5lcXVhbHNFcHNpbG9uPWZ1bmN0aW9uKGUsdCxuLG8pe3JldHVybiBlPT09dHx8ZyhlKSYmZyh0KSYmay5lcXVhbHNFcHNpbG9uKGUuaGVhZGluZyx0LmhlYWRpbmcsbixvKSYmay5lcXVhbHNFcHNpbG9uKGUucGl0Y2gsdC5waXRjaCxuLG8pJiZrLmVxdWFsc0Vwc2lsb24oZS5yb2xsLHQucm9sbCxuLG8pfTtQby5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oZSl7cmV0dXJuIFBvLmNsb25lKHRoaXMsZSl9O1BvLnByb3RvdHlwZS5lcXVhbHM9ZnVuY3Rpb24oZSl7cmV0dXJuIFBvLmVxdWFscyh0aGlzLGUpfTtQby5wcm90b3R5cGUuZXF1YWxzRXBzaWxvbj1mdW5jdGlvbihlLHQsbil7cmV0dXJuIFBvLmVxdWFsc0Vwc2lsb24odGhpcyxlLHQsbil9O1BvLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybmAoJHt0aGlzLmhlYWRpbmd9LCAke3RoaXMucGl0Y2h9LCAke3RoaXMucm9sbH0pYH07d2w9UG99KTtmdW5jdGlvbiBZQygpe2xldCBlPWRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJzY3JpcHQiKTtmb3IobGV0IHQ9MCxuPWUubGVuZ3RoO3Q8bjsrK3Qpe2xldCBvPWVbdF0uZ2V0QXR0cmlidXRlKCJzcmMiKSxhPU9BLmV4ZWMobyk7aWYoYSE9PW51bGwpcmV0dXJuIGFbMV19fWZ1bmN0aW9uIFNBKGUpe3JldHVybiB0eXBlb2YgZG9jdW1lbnQ+InUiP2U6KGcoVGwpfHwoVGw9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpKSxUbC5ocmVmPWUsVGwuaHJlZil9ZnVuY3Rpb24gQ0EoKXtpZihnKHRjKSlyZXR1cm4gdGM7bGV0IGU7cmV0dXJuIHR5cGVvZiBDRVNJVU1fQkFTRV9VUkw8InUiP2U9Q0VTSVVNX0JBU0VfVVJMOmcoeEE/LnVybCk/ZT1nZigiLiIseEEudXJsKTp0eXBlb2YgZGVmaW5lPT0ib2JqZWN0IiYmZyhkZWZpbmUuYW1kKSYmIWRlZmluZS5hbWQudG9VcmxVbmRlZmluZWQmJmcoYmEudG9VcmwpP2U9Z2YoIi4uIixuYygiQ29yZS9idWlsZE1vZHVsZVVybC5qcyIpKTplPVlDKCksdGM9bmV3IEFhKHt1cmw6U0EoZSl9KSx0Yy5hcHBlbmRGb3J3YXJkU2xhc2goKSx0Y31mdW5jdGlvbiBKQyhlKXtyZXR1cm4gU0EoYmEudG9VcmwoYC4uLyR7ZX1gKSl9ZnVuY3Rpb24gTUEoZSl7cmV0dXJuIENBKCkuZ2V0RGVyaXZlZFJlc291cmNlKHt1cmw6ZX0pLnVybH1mdW5jdGlvbiBuYyhlKXtyZXR1cm4gZyhFbCl8fCh0eXBlb2YgZGVmaW5lPT0ib2JqZWN0IiYmZyhkZWZpbmUuYW1kKSYmIWRlZmluZS5hbWQudG9VcmxVbmRlZmluZWQmJmcoYmEudG9VcmwpP0VsPUpDOkVsPU1BKSxFbChlKX12YXIgeEEsT0EsVGwsdGMsRWwsaXIsUmw9WCgoKT0+e3NlKCk7cmIoKTtvcygpO3hBPXt9LE9BPS8oKD86LipcLyl8XilDZXNpdW1cLmpzKD86XD98XCN8JCkvO25jLl9jZXNpdW1TY3JpcHRSZWdleD1PQTtuYy5fYnVpbGRNb2R1bGVVcmxGcm9tQmFzZVVybD1NQTtuYy5fY2xlYXJCYXNlUmVzb3VyY2U9ZnVuY3Rpb24oKXt0Yz12b2lkIDB9O25jLnNldEJhc2VVcmw9ZnVuY3Rpb24oZSl7dGM9QWEuREVGQVVMVC5nZXREZXJpdmVkUmVzb3VyY2Uoe3VybDplfSl9O25jLmdldENlc2l1bUJhc2VVcmw9Q0E7aXI9bmN9KTtmdW5jdGlvbiBaQyhlLHQsbil7dGhpcy54PWUsdGhpcy55PXQsdGhpcy5zPW59dmFyIHhsLHBiPVgoKCk9Pnt4bD1aQ30pO2Z1bmN0aW9uIHliKGUpe2U9ZT8/Q2UuRU1QVFlfT0JKRUNULHRoaXMuX3h5c0ZpbGVVcmxUZW1wbGF0ZT1BYS5jcmVhdGVJZk5lZWRlZChlLnh5c0ZpbGVVcmxUZW1wbGF0ZSksdGhpcy5faW50ZXJwb2xhdGlvbk9yZGVyPWUuaW50ZXJwb2xhdGlvbk9yZGVyPz85LHRoaXMuX3NhbXBsZVplcm9KdWxpYW5FcGhlbWVyaXNEYXRlPWUuc2FtcGxlWmVyb0p1bGlhbkVwaGVtZXJpc0RhdGU/PzI0NDIzOTY1ZS0xLHRoaXMuX3NhbXBsZVplcm9EYXRlVFQ9bmV3IEpuKHRoaXMuX3NhbXBsZVplcm9KdWxpYW5FcGhlbWVyaXNEYXRlLDAseXQuVEFJKSx0aGlzLl9zdGVwU2l6ZURheXM9ZS5zdGVwU2l6ZURheXM/PzEsdGhpcy5fc2FtcGxlc1Blclh5c0ZpbGU9ZS5zYW1wbGVzUGVyWHlzRmlsZT8/MWUzLHRoaXMuX3RvdGFsU2FtcGxlcz1lLnRvdGFsU2FtcGxlcz8/Mjc0MjYsdGhpcy5fc2FtcGxlcz1uZXcgQXJyYXkodGhpcy5fdG90YWxTYW1wbGVzKjMpLHRoaXMuX2NodW5rRG93bmxvYWRzSW5Qcm9ncmVzcz1bXTtsZXQgdD10aGlzLl9pbnRlcnBvbGF0aW9uT3JkZXIsbj10aGlzLl9kZW5vbWluYXRvcnM9bmV3IEFycmF5KHQrMSksbz10aGlzLl94VGFibGU9bmV3IEFycmF5KHQrMSksYT1NYXRoLnBvdyh0aGlzLl9zdGVwU2l6ZURheXMsdCk7Zm9yKGxldCByPTA7cjw9dDsrK3Ipe25bcl09YSxvW3JdPXIqdGhpcy5fc3RlcFNpemVEYXlzO2ZvcihsZXQgaT0wO2k8PXQ7KytpKWkhPT1yJiYobltyXSo9ci1pKTtuW3JdPTEvbltyXX10aGlzLl93b3JrPW5ldyBBcnJheSh0KzEpLHRoaXMuX2NvZWY9bmV3IEFycmF5KHQrMSl9ZnVuY3Rpb24gZ2IoZSx0LG4pe2xldCBvPVFDO3JldHVybiBvLmRheU51bWJlcj10LG8uc2Vjb25kc09mRGF5PW4sSm4uZGF5c0RpZmZlcmVuY2UobyxlLl9zYW1wbGVaZXJvRGF0ZVRUKX1mdW5jdGlvbiBfYihlLHQpe2lmKGUuX2NodW5rRG93bmxvYWRzSW5Qcm9ncmVzc1t0XSlyZXR1cm4gZS5fY2h1bmtEb3dubG9hZHNJblByb2dyZXNzW3RdO2xldCBuLG89ZS5feHlzRmlsZVVybFRlbXBsYXRlO2cobyk/bj1vLmdldERlcml2ZWRSZXNvdXJjZSh7dGVtcGxhdGVWYWx1ZXM6ezA6dH19KTpuPW5ldyBBYSh7dXJsOmlyKGBBc3NldHMvSUFVMjAwNl9YWVMvSUFVMjAwNl9YWVNfJHt0fS5qc29uYCl9KTtsZXQgYT1uLmZldGNoSnNvbigpLnRoZW4oZnVuY3Rpb24ocil7ZS5fY2h1bmtEb3dubG9hZHNJblByb2dyZXNzW3RdPSExO2xldCBpPWUuX3NhbXBsZXMsZj1yLnNhbXBsZXMsZD10KmUuX3NhbXBsZXNQZXJYeXNGaWxlKjM7Zm9yKGxldCBjPTAsdT1mLmxlbmd0aDtjPHU7KytjKWlbZCtjXT1mW2NdfSk7cmV0dXJuIGUuX2NodW5rRG93bmxvYWRzSW5Qcm9ncmVzc1t0XT1hLGF9dmFyIFFDLE5BLElBPVgoKCk9PntSbCgpO210KCk7c2UoKTtwYigpO2lsKCk7b3MoKTtvbCgpO1FDPW5ldyBKbigwLDAseXQuVEFJKTt5Yi5wcm90b3R5cGUucHJlbG9hZD1mdW5jdGlvbihlLHQsbixvKXtsZXQgYT1nYih0aGlzLGUsdCkscj1nYih0aGlzLG4sbyksaT1hL3RoaXMuX3N0ZXBTaXplRGF5cy10aGlzLl9pbnRlcnBvbGF0aW9uT3JkZXIvMnwwO2k8MCYmKGk9MCk7bGV0IGY9ci90aGlzLl9zdGVwU2l6ZURheXMtdGhpcy5faW50ZXJwb2xhdGlvbk9yZGVyLzJ8MCt0aGlzLl9pbnRlcnBvbGF0aW9uT3JkZXI7Zj49dGhpcy5fdG90YWxTYW1wbGVzJiYoZj10aGlzLl90b3RhbFNhbXBsZXMtMSk7bGV0IGQ9aS90aGlzLl9zYW1wbGVzUGVyWHlzRmlsZXwwLGM9Zi90aGlzLl9zYW1wbGVzUGVyWHlzRmlsZXwwLHU9W107Zm9yKGxldCBsPWQ7bDw9YzsrK2wpdS5wdXNoKF9iKHRoaXMsbCkpO3JldHVybiBQcm9taXNlLmFsbCh1KX07eWIucHJvdG90eXBlLmNvbXB1dGVYeXNSYWRpYW5zPWZ1bmN0aW9uKGUsdCxuKXtsZXQgbz1nYih0aGlzLGUsdCk7aWYobzwwKXJldHVybjtsZXQgYT1vL3RoaXMuX3N0ZXBTaXplRGF5c3wwO2lmKGE+PXRoaXMuX3RvdGFsU2FtcGxlcylyZXR1cm47bGV0IHI9dGhpcy5faW50ZXJwb2xhdGlvbk9yZGVyLGk9YS0oci8yfDApO2k8MCYmKGk9MCk7bGV0IGY9aStyO2Y+PXRoaXMuX3RvdGFsU2FtcGxlcyYmKGY9dGhpcy5fdG90YWxTYW1wbGVzLTEsaT1mLXIsaTwwJiYoaT0wKSk7bGV0IGQ9ITEsYz10aGlzLl9zYW1wbGVzO2lmKGcoY1tpKjNdKXx8KF9iKHRoaXMsaS90aGlzLl9zYW1wbGVzUGVyWHlzRmlsZXwwKSxkPSEwKSxnKGNbZiozXSl8fChfYih0aGlzLGYvdGhpcy5fc2FtcGxlc1Blclh5c0ZpbGV8MCksZD0hMCksZClyZXR1cm47ZyhuKT8obi54PTAsbi55PTAsbi5zPTApOm49bmV3IHhsKDAsMCwwKTtsZXQgdT1vLWkqdGhpcy5fc3RlcFNpemVEYXlzLGw9dGhpcy5fd29yayxoPXRoaXMuX2Rlbm9taW5hdG9ycyxtPXRoaXMuX2NvZWYsYj10aGlzLl94VGFibGUscCx5O2ZvcihwPTA7cDw9cjsrK3ApbFtwXT11LWJbcF07Zm9yKHA9MDtwPD1yOysrcCl7Zm9yKG1bcF09MSx5PTA7eTw9cjsrK3kpeSE9PXAmJihtW3BdKj1sW3ldKTttW3BdKj1oW3BdO2xldCBUPShpK3ApKjM7bi54Kz1tW3BdKmNbVCsrXSxuLnkrPW1bcF0qY1tUKytdLG4ucys9bVtwXSpjW1RdfXJldHVybiBufTtOQT15Yn0pO3ZhciBsaSxCbixZbyxQQSxrQT1YKCgpPT57c2UoKTtCbj17cmVxdWVzdEZ1bGxzY3JlZW46dm9pZCAwLGV4aXRGdWxsc2NyZWVuOnZvaWQgMCxmdWxsc2NyZWVuRW5hYmxlZDp2b2lkIDAsZnVsbHNjcmVlbkVsZW1lbnQ6dm9pZCAwLGZ1bGxzY3JlZW5jaGFuZ2U6dm9pZCAwLGZ1bGxzY3JlZW5lcnJvcjp2b2lkIDB9LFlvPXt9O09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFlvLHtlbGVtZW50OntnZXQ6ZnVuY3Rpb24oKXtpZihZby5zdXBwb3J0c0Z1bGxzY3JlZW4oKSlyZXR1cm4gZG9jdW1lbnRbQm4uZnVsbHNjcmVlbkVsZW1lbnRdfX0sY2hhbmdlRXZlbnROYW1lOntnZXQ6ZnVuY3Rpb24oKXtpZihZby5zdXBwb3J0c0Z1bGxzY3JlZW4oKSlyZXR1cm4gQm4uZnVsbHNjcmVlbmNoYW5nZX19LGVycm9yRXZlbnROYW1lOntnZXQ6ZnVuY3Rpb24oKXtpZihZby5zdXBwb3J0c0Z1bGxzY3JlZW4oKSlyZXR1cm4gQm4uZnVsbHNjcmVlbmVycm9yfX0sZW5hYmxlZDp7Z2V0OmZ1bmN0aW9uKCl7aWYoWW8uc3VwcG9ydHNGdWxsc2NyZWVuKCkpcmV0dXJuIGRvY3VtZW50W0JuLmZ1bGxzY3JlZW5FbmFibGVkXX19LGZ1bGxzY3JlZW46e2dldDpmdW5jdGlvbigpe2lmKFlvLnN1cHBvcnRzRnVsbHNjcmVlbigpKXJldHVybiBZby5lbGVtZW50IT09bnVsbH19fSk7WW8uc3VwcG9ydHNGdWxsc2NyZWVuPWZ1bmN0aW9uKCl7aWYoZyhsaSkpcmV0dXJuIGxpO2xpPSExO2xldCBlPWRvY3VtZW50LmJvZHk7aWYodHlwZW9mIGUucmVxdWVzdEZ1bGxzY3JlZW49PSJmdW5jdGlvbiIpcmV0dXJuIEJuLnJlcXVlc3RGdWxsc2NyZWVuPSJyZXF1ZXN0RnVsbHNjcmVlbiIsQm4uZXhpdEZ1bGxzY3JlZW49ImV4aXRGdWxsc2NyZWVuIixCbi5mdWxsc2NyZWVuRW5hYmxlZD0iZnVsbHNjcmVlbkVuYWJsZWQiLEJuLmZ1bGxzY3JlZW5FbGVtZW50PSJmdWxsc2NyZWVuRWxlbWVudCIsQm4uZnVsbHNjcmVlbmNoYW5nZT0iZnVsbHNjcmVlbmNoYW5nZSIsQm4uZnVsbHNjcmVlbmVycm9yPSJmdWxsc2NyZWVuZXJyb3IiLGxpPSEwLGxpO2xldCB0PVsid2Via2l0IiwibW96IiwibyIsIm1zIiwia2h0bWwiXSxuO2ZvcihsZXQgbz0wLGE9dC5sZW5ndGg7bzxhOysrbyl7bGV0IHI9dFtvXTtuPWAke3J9UmVxdWVzdEZ1bGxzY3JlZW5gLHR5cGVvZiBlW25dPT0iZnVuY3Rpb24iPyhCbi5yZXF1ZXN0RnVsbHNjcmVlbj1uLGxpPSEwKToobj1gJHtyfVJlcXVlc3RGdWxsU2NyZWVuYCx0eXBlb2YgZVtuXT09ImZ1bmN0aW9uIiYmKEJuLnJlcXVlc3RGdWxsc2NyZWVuPW4sbGk9ITApKSxuPWAke3J9RXhpdEZ1bGxzY3JlZW5gLHR5cGVvZiBkb2N1bWVudFtuXT09ImZ1bmN0aW9uIj9Cbi5leGl0RnVsbHNjcmVlbj1uOihuPWAke3J9Q2FuY2VsRnVsbFNjcmVlbmAsdHlwZW9mIGRvY3VtZW50W25dPT0iZnVuY3Rpb24iJiYoQm4uZXhpdEZ1bGxzY3JlZW49bikpLG49YCR7cn1GdWxsc2NyZWVuRW5hYmxlZGAsZG9jdW1lbnRbbl0hPT12b2lkIDA/Qm4uZnVsbHNjcmVlbkVuYWJsZWQ9bjoobj1gJHtyfUZ1bGxTY3JlZW5FbmFibGVkYCxkb2N1bWVudFtuXSE9PXZvaWQgMCYmKEJuLmZ1bGxzY3JlZW5FbmFibGVkPW4pKSxuPWAke3J9RnVsbHNjcmVlbkVsZW1lbnRgLGRvY3VtZW50W25dIT09dm9pZCAwP0JuLmZ1bGxzY3JlZW5FbGVtZW50PW46KG49YCR7cn1GdWxsU2NyZWVuRWxlbWVudGAsZG9jdW1lbnRbbl0hPT12b2lkIDAmJihCbi5mdWxsc2NyZWVuRWxlbWVudD1uKSksbj1gJHtyfWZ1bGxzY3JlZW5jaGFuZ2VgLGRvY3VtZW50W2BvbiR7bn1gXSE9PXZvaWQgMCYmKHI9PT0ibXMiJiYobj0iTVNGdWxsc2NyZWVuQ2hhbmdlIiksQm4uZnVsbHNjcmVlbmNoYW5nZT1uKSxuPWAke3J9ZnVsbHNjcmVlbmVycm9yYCxkb2N1bWVudFtgb24ke259YF0hPT12b2lkIDAmJihyPT09Im1zIiYmKG49Ik1TRnVsbHNjcmVlbkVycm9yIiksQm4uZnVsbHNjcmVlbmVycm9yPW4pfXJldHVybiBsaX07WW8ucmVxdWVzdEZ1bGxzY3JlZW49ZnVuY3Rpb24oZSx0KXtZby5zdXBwb3J0c0Z1bGxzY3JlZW4oKSYmZVtCbi5yZXF1ZXN0RnVsbHNjcmVlbl0oe3ZyRGlzcGxheTp0fSl9O1lvLmV4aXRGdWxsc2NyZWVuPWZ1bmN0aW9uKCl7WW8uc3VwcG9ydHNGdWxsc2NyZWVuKCkmJmRvY3VtZW50W0JuLmV4aXRGdWxsc2NyZWVuXSgpfTtZby5fbmFtZXM9Qm47UEE9WW99KTtmdW5jdGlvbiBSZihlKXtsZXQgdD1lLnNwbGl0KCIuIik7Zm9yKGxldCBuPTAsbz10Lmxlbmd0aDtuPG87KytuKXRbbl09cGFyc2VJbnQodFtuXSwxMCk7cmV0dXJuIHR9ZnVuY3Rpb24gUmIoKXtpZighZyhPbCkmJihPbD0hMSwhUGwoKSkpe2xldCBlPS8gQ2hyb21lXC8oW1wuMC05XSspLy5leGVjKHdhLnVzZXJBZ2VudCk7ZSE9PW51bGwmJihPbD0hMCx2QT1SZihlWzFdKSl9cmV0dXJuIE9sfWZ1bmN0aW9uICRDKCl7cmV0dXJuIFJiKCkmJnZBfWZ1bmN0aW9uIERBKCl7aWYoIWcoU2wpJiYoU2w9ITEsIVJiKCkmJiFQbCgpJiYvIFNhZmFyaVwvW1wuMC05XSsvLnRlc3Qod2EudXNlckFnZW50KSkpe2xldCBlPS8gVmVyc2lvblwvKFtcLjAtOV0rKS8uZXhlYyh3YS51c2VyQWdlbnQpO2UhPT1udWxsJiYoU2w9ITAsRkE9UmYoZVsxXSkpfXJldHVybiBTbH1mdW5jdGlvbiBlTSgpe3JldHVybiBEQSgpJiZGQX1mdW5jdGlvbiBCQSgpe2lmKCFnKENsKSl7Q2w9ITE7bGV0IGU9LyBBcHBsZVdlYktpdFwvKFtcLjAtOV0rKShcKz8pLy5leGVjKHdhLnVzZXJBZ2VudCk7ZSE9PW51bGwmJihDbD0hMCxFYj1SZihlWzFdKSxFYi5pc05pZ2h0bHk9ISFlWzJdKX1yZXR1cm4gQ2x9ZnVuY3Rpb24gdE0oKXtyZXR1cm4gQkEoKSYmRWJ9ZnVuY3Rpb24gUGwoKXtpZighZyhNbCkpe01sPSExO2xldCBlPS8gRWRnXC8oW1wuMC05XSspLy5leGVjKHdhLnVzZXJBZ2VudCk7ZSE9PW51bGwmJihNbD0hMCxVQT1SZihlWzFdKSl9cmV0dXJuIE1sfWZ1bmN0aW9uIG5NKCl7cmV0dXJuIFBsKCkmJlVBfWZ1bmN0aW9uIGtsKCl7aWYoIWcoTmwpKXtObD0hMTtsZXQgZT0vRmlyZWZveFwvKFtcLjAtOV0rKS8uZXhlYyh3YS51c2VyQWdlbnQpO2UhPT1udWxsJiYoTmw9ITAseGI9UmYoZVsxXSkpfXJldHVybiBObH1mdW5jdGlvbiBvTSgpe3JldHVybiBnKEFiKXx8KEFiPS9XaW5kb3dzL2kudGVzdCh3YS5hcHBWZXJzaW9uKSksQWJ9ZnVuY3Rpb24gYU0oKXtyZXR1cm4gZyh3Yil8fCh3Yj1uYXZpZ2F0b3IucGxhdGZvcm09PT0iaVBob25lInx8bmF2aWdhdG9yLnBsYXRmb3JtPT09ImlQb2QifHxuYXZpZ2F0b3IucGxhdGZvcm09PT0iaVBhZCIpLHdifWZ1bmN0aW9uIHJNKCl7cmV0dXJuIGtsKCkmJnhifWZ1bmN0aW9uIGlNKCl7cmV0dXJuIGcoVGIpfHwoVGI9IWtsKCkmJnR5cGVvZiBQb2ludGVyRXZlbnQ8InUiJiYoIWcod2EucG9pbnRlckVuYWJsZWQpfHx3YS5wb2ludGVyRW5hYmxlZCkpLFRifWZ1bmN0aW9uIGpBKCl7aWYoIWcoSWwpKXtsZXQgZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKTtlLnNldEF0dHJpYnV0ZSgic3R5bGUiLCJpbWFnZS1yZW5kZXJpbmc6IC1tb3otY3Jpc3AtZWRnZXM7aW1hZ2UtcmVuZGVyaW5nOiBwaXhlbGF0ZWQ7Iik7bGV0IHQ9ZS5zdHlsZS5pbWFnZVJlbmRlcmluZztJbD1nKHQpJiZ0IT09IiIsSWwmJihMQT10KX1yZXR1cm4gSWx9ZnVuY3Rpb24gY00oKXtyZXR1cm4gakEoKT9MQTp2b2lkIDB9ZnVuY3Rpb24gTG8oKXtyZXR1cm4gTG8uX3Jlc3VsdH12YXIgd2EsT2wsdkEsU2wsRkEsQ2wsRWIsTWwsVUEsTmwseGIsQWIsd2IsVGIsTEEsSWwsYXMsVGEsY3Isdmw9WCgoKT0+e3NlKCk7a0EoKTt0eXBlb2YgbmF2aWdhdG9yPCJ1Ij93YT1uYXZpZ2F0b3I6d2E9e307TG8uX3Byb21pc2U9dm9pZCAwO0xvLl9yZXN1bHQ9dm9pZCAwO0xvLmluaXRpYWxpemU9ZnVuY3Rpb24oKXtyZXR1cm4gZyhMby5fcHJvbWlzZSl8fChMby5fcHJvbWlzZT1uZXcgUHJvbWlzZShlPT57bGV0IHQ9bmV3IEltYWdlO3Qub25sb2FkPWZ1bmN0aW9uKCl7TG8uX3Jlc3VsdD10LndpZHRoPjAmJnQuaGVpZ2h0PjAsZShMby5fcmVzdWx0KX0sdC5vbmVycm9yPWZ1bmN0aW9uKCl7TG8uX3Jlc3VsdD0hMSxlKExvLl9yZXN1bHQpfSx0LnNyYz0iZGF0YTppbWFnZS93ZWJwO2Jhc2U2NCxVa2xHUmlJQUFBQlhSVUpRVmxBNElCWUFBQUF3QVFDZEFTb0JBQUVBRHNEK0phUUFBM0FBQUFBQSJ9KSksTG8uX3Byb21pc2V9O09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKExvLHtpbml0aWFsaXplZDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGcoTG8uX3Jlc3VsdCl9fX0pO2FzPVtdO3R5cGVvZiBBcnJheUJ1ZmZlcjwidSImJihhcy5wdXNoKEludDhBcnJheSxVaW50OEFycmF5LEludDE2QXJyYXksVWludDE2QXJyYXksSW50MzJBcnJheSxVaW50MzJBcnJheSxGbG9hdDMyQXJyYXksRmxvYXQ2NEFycmF5KSx0eXBlb2YgVWludDhDbGFtcGVkQXJyYXk8InUiJiZhcy5wdXNoKFVpbnQ4Q2xhbXBlZEFycmF5KSx0eXBlb2YgVWludDhDbGFtcGVkQXJyYXk8InUiJiZhcy5wdXNoKFVpbnQ4Q2xhbXBlZEFycmF5KSx0eXBlb2YgQmlnSW50NjRBcnJheTwidSImJmFzLnB1c2goQmlnSW50NjRBcnJheSksdHlwZW9mIEJpZ1VpbnQ2NEFycmF5PCJ1IiYmYXMucHVzaChCaWdVaW50NjRBcnJheSkpO1RhPXtpc0Nocm9tZTpSYixjaHJvbWVWZXJzaW9uOiRDLGlzU2FmYXJpOkRBLHNhZmFyaVZlcnNpb246ZU0saXNXZWJraXQ6QkEsd2Via2l0VmVyc2lvbjp0TSxpc0VkZ2U6UGwsZWRnZVZlcnNpb246bk0saXNGaXJlZm94OmtsLGZpcmVmb3hWZXJzaW9uOnJNLGlzV2luZG93czpvTSxpc0lQYWRPcklPUzphTSxoYXJkd2FyZUNvbmN1cnJlbmN5OndhLmhhcmR3YXJlQ29uY3VycmVuY3k/PzMsc3VwcG9ydHNQb2ludGVyRXZlbnRzOmlNLHN1cHBvcnRzSW1hZ2VSZW5kZXJpbmdQaXhlbGF0ZWQ6akEsc3VwcG9ydHNXZWJQOkxvLGltYWdlUmVuZGVyaW5nVmFsdWU6Y00sdHlwZWRBcnJheVR5cGVzOmFzfTtUYS5zdXBwb3J0c0Jhc2lzPWZ1bmN0aW9uKGUpe3JldHVybiBUYS5zdXBwb3J0c1dlYkFzc2VtYmx5KCkmJmUuY29udGV4dC5zdXBwb3J0c0Jhc2lzfTtUYS5zdXBwb3J0c0Z1bGxzY3JlZW49ZnVuY3Rpb24oKXtyZXR1cm4gUEEuc3VwcG9ydHNGdWxsc2NyZWVuKCl9O1RhLnN1cHBvcnRzVHlwZWRBcnJheXM9ZnVuY3Rpb24oKXtyZXR1cm4gdHlwZW9mIEFycmF5QnVmZmVyPCJ1In07VGEuc3VwcG9ydHNCaWdJbnQ2NEFycmF5PWZ1bmN0aW9uKCl7cmV0dXJuIHR5cGVvZiBCaWdJbnQ2NEFycmF5PCJ1In07VGEuc3VwcG9ydHNCaWdVaW50NjRBcnJheT1mdW5jdGlvbigpe3JldHVybiB0eXBlb2YgQmlnVWludDY0QXJyYXk8InUifTtUYS5zdXBwb3J0c0JpZ0ludD1mdW5jdGlvbigpe3JldHVybiB0eXBlb2YgQmlnSW50PCJ1In07VGEuc3VwcG9ydHNXZWJXb3JrZXJzPWZ1bmN0aW9uKCl7cmV0dXJuIHR5cGVvZiBXb3JrZXI8InUifTtUYS5zdXBwb3J0c1dlYkFzc2VtYmx5PWZ1bmN0aW9uKCl7cmV0dXJuIHR5cGVvZiBXZWJBc3NlbWJseTwidSJ9O1RhLnN1cHBvcnRzV2ViZ2wyPWZ1bmN0aW9uKGUpe3JldHVybiBlLmNvbnRleHQud2ViZ2wyfTtUYS5zdXBwb3J0c0VzbVdlYldvcmtlcnM9ZnVuY3Rpb24oKXtyZXR1cm4ha2woKXx8cGFyc2VJbnQoeGIpPj0xMTR9O2NyPVRhfSk7ZnVuY3Rpb24gUmUoZSx0LG4sbyl7dGhpcy54PWU/PzAsdGhpcy55PXQ/PzAsdGhpcy56PW4/PzAsdGhpcy53PW8/PzB9dmFyIHhmLHNNLGZNLHpBLEdBLE9iLFZBLEZsLFNiLHphLEhBLERsLENiLEtBLE1iLE5iLGRNLHVNLE9mLHJzLGxNLHFBLEJsLFVsLEZyLERyLFplLEpvPVgoKCk9PntJZSgpO3NlKCk7dmwoKTtHZSgpO0RuKCk7eGY9bmV3IHM7UmUuZnJvbUF4aXNBbmdsZT1mdW5jdGlvbihlLHQsbil7bGV0IG89dC8yLGE9TWF0aC5zaW4obyk7eGY9cy5ub3JtYWxpemUoZSx4Zik7bGV0IHI9eGYueCphLGk9eGYueSphLGY9eGYueiphLGQ9TWF0aC5jb3Mobyk7cmV0dXJuIGcobik/KG4ueD1yLG4ueT1pLG4uej1mLG4udz1kLG4pOm5ldyBSZShyLGksZixkKX07c009WzEsMiwwXSxmTT1uZXcgQXJyYXkoMyk7UmUuZnJvbVJvdGF0aW9uTWF0cml4PWZ1bmN0aW9uKGUsdCl7bGV0IG4sbyxhLHIsaSxmPWVbSi5DT0xVTU4wUk9XMF0sZD1lW0ouQ09MVU1OMVJPVzFdLGM9ZVtKLkNPTFVNTjJST1cyXSx1PWYrZCtjO2lmKHU+MCluPU1hdGguc3FydCh1KzEpLGk9LjUqbixuPS41L24sbz0oZVtKLkNPTFVNTjFST1cyXS1lW0ouQ09MVU1OMlJPVzFdKSpuLGE9KGVbSi5DT0xVTU4yUk9XMF0tZVtKLkNPTFVNTjBST1cyXSkqbixyPShlW0ouQ09MVU1OMFJPVzFdLWVbSi5DT0xVTU4xUk9XMF0pKm47ZWxzZXtsZXQgbD1zTSxoPTA7ZD5mJiYoaD0xKSxjPmYmJmM+ZCYmKGg9Mik7bGV0IG09bFtoXSxiPWxbbV07bj1NYXRoLnNxcnQoZVtKLmdldEVsZW1lbnRJbmRleChoLGgpXS1lW0ouZ2V0RWxlbWVudEluZGV4KG0sbSldLWVbSi5nZXRFbGVtZW50SW5kZXgoYixiKV0rMSk7bGV0IHA9Zk07cFtoXT0uNSpuLG49LjUvbixpPShlW0ouZ2V0RWxlbWVudEluZGV4KGIsbSldLWVbSi5nZXRFbGVtZW50SW5kZXgobSxiKV0pKm4scFttXT0oZVtKLmdldEVsZW1lbnRJbmRleChtLGgpXStlW0ouZ2V0RWxlbWVudEluZGV4KGgsbSldKSpuLHBbYl09KGVbSi5nZXRFbGVtZW50SW5kZXgoYixoKV0rZVtKLmdldEVsZW1lbnRJbmRleChoLGIpXSkqbixvPS1wWzBdLGE9LXBbMV0scj0tcFsyXX1yZXR1cm4gZyh0KT8odC54PW8sdC55PWEsdC56PXIsdC53PWksdCk6bmV3IFJlKG8sYSxyLGkpfTt6QT1uZXcgUmUsR0E9bmV3IFJlLE9iPW5ldyBSZSxWQT1uZXcgUmU7UmUuZnJvbUhlYWRpbmdQaXRjaFJvbGw9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gVkE9UmUuZnJvbUF4aXNBbmdsZShzLlVOSVRfWCxlLnJvbGwsekEpLE9iPVJlLmZyb21BeGlzQW5nbGUocy5VTklUX1ksLWUucGl0Y2gsdCksdD1SZS5tdWx0aXBseShPYixWQSxPYiksR0E9UmUuZnJvbUF4aXNBbmdsZShzLlVOSVRfWiwtZS5oZWFkaW5nLHpBKSxSZS5tdWx0aXBseShHQSx0LHQpfTtGbD1uZXcgcyxTYj1uZXcgcyx6YT1uZXcgUmUsSEE9bmV3IFJlLERsPW5ldyBSZTtSZS5wYWNrZWRMZW5ndGg9NDtSZS5wYWNrPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gbj1uPz8wLHRbbisrXT1lLngsdFtuKytdPWUueSx0W24rK109ZS56LHRbbl09ZS53LHR9O1JlLnVucGFjaz1mdW5jdGlvbihlLHQsbil7cmV0dXJuIHQ9dD8/MCxnKG4pfHwobj1uZXcgUmUpLG4ueD1lW3RdLG4ueT1lW3QrMV0sbi56PWVbdCsyXSxuLnc9ZVt0KzNdLG59O1JlLnBhY2tlZEludGVycG9sYXRpb25MZW5ndGg9MztSZS5jb252ZXJ0UGFja2VkQXJyYXlGb3JJbnRlcnBvbGF0aW9uPWZ1bmN0aW9uKGUsdCxuLG8pe1JlLnVucGFjayhlLG4qNCxEbCksUmUuY29uanVnYXRlKERsLERsKTtmb3IobGV0IGE9MCxyPW4tdCsxO2E8cjthKyspe2xldCBpPWEqMztSZS51bnBhY2soZSwodCthKSo0LHphKSxSZS5tdWx0aXBseSh6YSxEbCx6YSksemEudzwwJiZSZS5uZWdhdGUoemEsemEpLFJlLmNvbXB1dGVBeGlzKHphLEZsKTtsZXQgZj1SZS5jb21wdXRlQW5nbGUoemEpO2cobyl8fChvPVtdKSxvW2ldPUZsLngqZixvW2krMV09RmwueSpmLG9baSsyXT1GbC56KmZ9fTtSZS51bnBhY2tJbnRlcnBvbGF0aW9uUmVzdWx0PWZ1bmN0aW9uKGUsdCxuLG8sYSl7ZyhhKXx8KGE9bmV3IFJlKSxzLmZyb21BcnJheShlLDAsU2IpO2xldCByPXMubWFnbml0dWRlKFNiKTtyZXR1cm4gUmUudW5wYWNrKHQsbyo0LEhBKSxyPT09MD9SZS5jbG9uZShSZS5JREVOVElUWSx6YSk6UmUuZnJvbUF4aXNBbmdsZShTYixyLHphKSxSZS5tdWx0aXBseSh6YSxIQSxhKX07UmUuY2xvbmU9ZnVuY3Rpb24oZSx0KXtpZihnKGUpKXJldHVybiBnKHQpPyh0Lng9ZS54LHQueT1lLnksdC56PWUueix0Lnc9ZS53LHQpOm5ldyBSZShlLngsZS55LGUueixlLncpfTtSZS5jb25qdWdhdGU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdC54PS1lLngsdC55PS1lLnksdC56PS1lLnosdC53PWUudyx0fTtSZS5tYWduaXR1ZGVTcXVhcmVkPWZ1bmN0aW9uKGUpe3JldHVybiBlLngqZS54K2UueSplLnkrZS56KmUueitlLncqZS53fTtSZS5tYWduaXR1ZGU9ZnVuY3Rpb24oZSl7cmV0dXJuIE1hdGguc3FydChSZS5tYWduaXR1ZGVTcXVhcmVkKGUpKX07UmUubm9ybWFsaXplPWZ1bmN0aW9uKGUsdCl7bGV0IG49MS9SZS5tYWduaXR1ZGUoZSksbz1lLngqbixhPWUueSpuLHI9ZS56Km4saT1lLncqbjtyZXR1cm4gdC54PW8sdC55PWEsdC56PXIsdC53PWksdH07UmUuaW52ZXJzZT1mdW5jdGlvbihlLHQpe2xldCBuPVJlLm1hZ25pdHVkZVNxdWFyZWQoZSk7cmV0dXJuIHQ9UmUuY29uanVnYXRlKGUsdCksUmUubXVsdGlwbHlCeVNjYWxhcih0LDEvbix0KX07UmUuYWRkPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gbi54PWUueCt0Lngsbi55PWUueSt0Lnksbi56PWUueit0Lnosbi53PWUudyt0Lncsbn07UmUuc3VidHJhY3Q9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBuLng9ZS54LXQueCxuLnk9ZS55LXQueSxuLno9ZS56LXQueixuLnc9ZS53LXQudyxufTtSZS5uZWdhdGU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdC54PS1lLngsdC55PS1lLnksdC56PS1lLnosdC53PS1lLncsdH07UmUuZG90PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUueCp0LngrZS55KnQueStlLnoqdC56K2Uudyp0Lnd9O1JlLm11bHRpcGx5PWZ1bmN0aW9uKGUsdCxuKXtsZXQgbz1lLngsYT1lLnkscj1lLnosaT1lLncsZj10LngsZD10LnksYz10LnosdT10LncsbD1pKmYrbyp1K2EqYy1yKmQsaD1pKmQtbypjK2EqdStyKmYsbT1pKmMrbypkLWEqZityKnUsYj1pKnUtbypmLWEqZC1yKmM7cmV0dXJuIG4ueD1sLG4ueT1oLG4uej1tLG4udz1iLG59O1JlLm11bHRpcGx5QnlTY2FsYXI9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBuLng9ZS54KnQsbi55PWUueSp0LG4uej1lLnoqdCxuLnc9ZS53KnQsbn07UmUuZGl2aWRlQnlTY2FsYXI9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBuLng9ZS54L3Qsbi55PWUueS90LG4uej1lLnovdCxuLnc9ZS53L3Qsbn07UmUuY29tcHV0ZUF4aXM9ZnVuY3Rpb24oZSx0KXtsZXQgbj1lLnc7aWYoTWF0aC5hYnMobi0xKTxrLkVQU0lMT042fHxNYXRoLmFicyhuKzEpPGsuRVBTSUxPTjYpcmV0dXJuIHQueD0xLHQueT10Lno9MCx0O2xldCBvPTEvTWF0aC5zcXJ0KDEtbipuKTtyZXR1cm4gdC54PWUueCpvLHQueT1lLnkqbyx0Lno9ZS56Km8sdH07UmUuY29tcHV0ZUFuZ2xlPWZ1bmN0aW9uKGUpe3JldHVybiBNYXRoLmFicyhlLnctMSk8ay5FUFNJTE9ONj8wOjIqTWF0aC5hY29zKGUudyl9O0NiPW5ldyBSZTtSZS5sZXJwPWZ1bmN0aW9uKGUsdCxuLG8pe3JldHVybiBDYj1SZS5tdWx0aXBseUJ5U2NhbGFyKHQsbixDYiksbz1SZS5tdWx0aXBseUJ5U2NhbGFyKGUsMS1uLG8pLFJlLmFkZChDYixvLG8pfTtLQT1uZXcgUmUsTWI9bmV3IFJlLE5iPW5ldyBSZTtSZS5zbGVycD1mdW5jdGlvbihlLHQsbixvKXtsZXQgYT1SZS5kb3QoZSx0KSxyPXQ7aWYoYTwwJiYoYT0tYSxyPUtBPVJlLm5lZ2F0ZSh0LEtBKSksMS1hPGsuRVBTSUxPTjYpcmV0dXJuIFJlLmxlcnAoZSxyLG4sbyk7bGV0IGk9TWF0aC5hY29zKGEpO3JldHVybiBNYj1SZS5tdWx0aXBseUJ5U2NhbGFyKGUsTWF0aC5zaW4oKDEtbikqaSksTWIpLE5iPVJlLm11bHRpcGx5QnlTY2FsYXIocixNYXRoLnNpbihuKmkpLE5iKSxvPVJlLmFkZChNYixOYixvKSxSZS5tdWx0aXBseUJ5U2NhbGFyKG8sMS9NYXRoLnNpbihpKSxvKX07UmUubG9nPWZ1bmN0aW9uKGUsdCl7bGV0IG49ay5hY29zQ2xhbXBlZChlLncpLG89MDtyZXR1cm4gbiE9PTAmJihvPW4vTWF0aC5zaW4obikpLHMubXVsdGlwbHlCeVNjYWxhcihlLG8sdCl9O1JlLmV4cD1mdW5jdGlvbihlLHQpe2xldCBuPXMubWFnbml0dWRlKGUpLG89MDtyZXR1cm4gbiE9PTAmJihvPU1hdGguc2luKG4pL24pLHQueD1lLngqbyx0Lnk9ZS55Km8sdC56PWUueipvLHQudz1NYXRoLmNvcyhuKSx0fTtkTT1uZXcgcyx1TT1uZXcgcyxPZj1uZXcgUmUscnM9bmV3IFJlO1JlLmNvbXB1dGVJbm5lclF1YWRyYW5nbGU9ZnVuY3Rpb24oZSx0LG4sbyl7bGV0IGE9UmUuY29uanVnYXRlKHQsT2YpO1JlLm11bHRpcGx5KGEsbixycyk7bGV0IHI9UmUubG9nKHJzLGRNKTtSZS5tdWx0aXBseShhLGUscnMpO2xldCBpPVJlLmxvZyhycyx1TSk7cmV0dXJuIHMuYWRkKHIsaSxyKSxzLm11bHRpcGx5QnlTY2FsYXIociwuMjUscikscy5uZWdhdGUocixyKSxSZS5leHAocixPZiksUmUubXVsdGlwbHkodCxPZixvKX07UmUuc3F1YWQ9ZnVuY3Rpb24oZSx0LG4sbyxhLHIpe2xldCBpPVJlLnNsZXJwKGUsdCxhLE9mKSxmPVJlLnNsZXJwKG4sbyxhLHJzKTtyZXR1cm4gUmUuc2xlcnAoaSxmLDIqYSooMS1hKSxyKX07bE09bmV3IFJlLHFBPTEuOTAxMTA3NDUzNTE3MzAwMyxCbD1jci5zdXBwb3J0c1R5cGVkQXJyYXlzKCk/bmV3IEZsb2F0MzJBcnJheSg4KTpbXSxVbD1jci5zdXBwb3J0c1R5cGVkQXJyYXlzKCk/bmV3IEZsb2F0MzJBcnJheSg4KTpbXSxGcj1jci5zdXBwb3J0c1R5cGVkQXJyYXlzKCk/bmV3IEZsb2F0MzJBcnJheSg4KTpbXSxEcj1jci5zdXBwb3J0c1R5cGVkQXJyYXlzKCk/bmV3IEZsb2F0MzJBcnJheSg4KTpbXTtmb3IobGV0IGU9MDtlPDc7KytlKXtsZXQgdD1lKzEsbj0yKnQrMTtCbFtlXT0xLyh0Km4pLFVsW2VdPXQvbn1CbFs3XT1xQS8xMzY7VWxbN109cUEqOC8xNztSZS5mYXN0U2xlcnA9ZnVuY3Rpb24oZSx0LG4sbyl7bGV0IGE9UmUuZG90KGUsdCkscjthPj0wP3I9MToocj0tMSxhPS1hKTtsZXQgaT1hLTEsZj0xLW4sZD1uKm4sYz1mKmY7Zm9yKGxldCBtPTc7bT49MDstLW0pRnJbbV09KEJsW21dKmQtVWxbbV0pKmksRHJbbV09KEJsW21dKmMtVWxbbV0pKmk7bGV0IHU9cipuKigxK0ZyWzBdKigxK0ZyWzFdKigxK0ZyWzJdKigxK0ZyWzNdKigxK0ZyWzRdKigxK0ZyWzVdKigxK0ZyWzZdKigxK0ZyWzddKSkpKSkpKSksbD1mKigxK0RyWzBdKigxK0RyWzFdKigxK0RyWzJdKigxK0RyWzNdKigxK0RyWzRdKigxK0RyWzVdKigxK0RyWzZdKigxK0RyWzddKSkpKSkpKSksaD1SZS5tdWx0aXBseUJ5U2NhbGFyKGUsbCxsTSk7cmV0dXJuIFJlLm11bHRpcGx5QnlTY2FsYXIodCx1LG8pLFJlLmFkZChoLG8sbyl9O1JlLmZhc3RTcXVhZD1mdW5jdGlvbihlLHQsbixvLGEscil7bGV0IGk9UmUuZmFzdFNsZXJwKGUsdCxhLE9mKSxmPVJlLmZhc3RTbGVycChuLG8sYSxycyk7cmV0dXJuIFJlLmZhc3RTbGVycChpLGYsMiphKigxLWEpLHIpfTtSZS5lcXVhbHM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT09PXR8fGcoZSkmJmcodCkmJmUueD09PXQueCYmZS55PT09dC55JiZlLno9PT10LnomJmUudz09PXQud307UmUuZXF1YWxzRXBzaWxvbj1mdW5jdGlvbihlLHQsbil7cmV0dXJuIG49bj8/MCxlPT09dHx8ZyhlKSYmZyh0KSYmTWF0aC5hYnMoZS54LXQueCk8PW4mJk1hdGguYWJzKGUueS10LnkpPD1uJiZNYXRoLmFicyhlLnotdC56KTw9biYmTWF0aC5hYnMoZS53LXQudyk8PW59O1JlLlpFUk89T2JqZWN0LmZyZWV6ZShuZXcgUmUoMCwwLDAsMCkpO1JlLklERU5USVRZPU9iamVjdC5mcmVlemUobmV3IFJlKDAsMCwwLDEpKTtSZS5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oZSl7cmV0dXJuIFJlLmNsb25lKHRoaXMsZSl9O1JlLnByb3RvdHlwZS5lcXVhbHM9ZnVuY3Rpb24oZSl7cmV0dXJuIFJlLmVxdWFscyh0aGlzLGUpfTtSZS5wcm90b3R5cGUuZXF1YWxzRXBzaWxvbj1mdW5jdGlvbihlLHQpe3JldHVybiBSZS5lcXVhbHNFcHNpbG9uKHRoaXMsZSx0KX07UmUucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuYCgke3RoaXMueH0sICR7dGhpcy55fSwgJHt0aGlzLnp9LCAke3RoaXMud30pYH07WmU9UmV9KTt2YXIgYnQsSWIsaXMsUGIsWm8saGksbWksYmksaE0sbU0sYk0scE0sZ00sX00seU0sV0EsQU0sd00sVE0sRU0sUk0seE0sT00sU00sQ00sTU0sTGwsRmIsTk0sSU0sUE0samwsa00sdk0sRk0sRE0sa2IsdmIsQk0sVU0sTE0sak0sWEEsRGIsek0sR00sQmIsWUEsY28sc3I9WCgoKT0+e2p0KCk7SWUoKTtnYSgpO1R0KCk7c2UoKTtKaSgpO0VBKCk7WG0oKTtXZSgpO1JBKCk7SUEoKTtwYigpO2lsKCk7R2UoKTtEbigpO3BuKCk7Sm8oKTtubCgpO2J0PXt9LEliPXt1cDp7c291dGg6ImVhc3QiLG5vcnRoOiJ3ZXN0Iix3ZXN0OiJzb3V0aCIsZWFzdDoibm9ydGgifSxkb3duOntzb3V0aDoid2VzdCIsbm9ydGg6ImVhc3QiLHdlc3Q6Im5vcnRoIixlYXN0OiJzb3V0aCJ9LHNvdXRoOnt1cDoid2VzdCIsZG93bjoiZWFzdCIsd2VzdDoiZG93biIsZWFzdDoidXAifSxub3J0aDp7dXA6ImVhc3QiLGRvd246Indlc3QiLHdlc3Q6InVwIixlYXN0OiJkb3duIn0sd2VzdDp7dXA6Im5vcnRoIixkb3duOiJzb3V0aCIsbm9ydGg6ImRvd24iLHNvdXRoOiJ1cCJ9LGVhc3Q6e3VwOiJzb3V0aCIsZG93bjoibm9ydGgiLG5vcnRoOiJ1cCIsc291dGg6ImRvd24ifX0saXM9e25vcnRoOlstMSwwLDBdLGVhc3Q6WzAsMSwwXSx1cDpbMCwwLDFdLHNvdXRoOlsxLDAsMF0sd2VzdDpbMCwtMSwwXSxkb3duOlswLDAsLTFdfSxQYj17fSxabz17ZWFzdDpuZXcgcyxub3J0aDpuZXcgcyx1cDpuZXcgcyx3ZXN0Om5ldyBzLHNvdXRoOm5ldyBzLGRvd246bmV3IHN9LGhpPW5ldyBzLG1pPW5ldyBzLGJpPW5ldyBzO2J0LmxvY2FsRnJhbWVUb0ZpeGVkRnJhbWVHZW5lcmF0b3I9ZnVuY3Rpb24oZSx0KXtpZighSWIuaGFzT3duUHJvcGVydHkoZSl8fCFJYltlXS5oYXNPd25Qcm9wZXJ0eSh0KSl0aHJvdyBuZXcgV3QoImZpcnN0QXhpcyBhbmQgc2Vjb25kQXhpcyBtdXN0IGJlIGVhc3QsIG5vcnRoLCB1cCwgd2VzdCwgc291dGggb3IgZG93bi4iKTtsZXQgbj1JYltlXVt0XSxvLGE9ZSt0O3JldHVybiBnKFBiW2FdKT9vPVBiW2FdOihvPWZ1bmN0aW9uKHIsaSxmKXtpZihnKGYpfHwoZj1uZXcgJCkscy5lcXVhbHNFcHNpbG9uKHIscy5aRVJPLGsuRVBTSUxPTjE0KSlzLnVucGFjayhpc1tlXSwwLGhpKSxzLnVucGFjayhpc1t0XSwwLG1pKSxzLnVucGFjayhpc1tuXSwwLGJpKTtlbHNlIGlmKGsuZXF1YWxzRXBzaWxvbihyLngsMCxrLkVQU0lMT04xNCkmJmsuZXF1YWxzRXBzaWxvbihyLnksMCxrLkVQU0lMT04xNCkpe2xldCBkPWsuc2lnbihyLnopO3MudW5wYWNrKGlzW2VdLDAsaGkpLGUhPT0iZWFzdCImJmUhPT0id2VzdCImJnMubXVsdGlwbHlCeVNjYWxhcihoaSxkLGhpKSxzLnVucGFjayhpc1t0XSwwLG1pKSx0IT09ImVhc3QiJiZ0IT09Indlc3QiJiZzLm11bHRpcGx5QnlTY2FsYXIobWksZCxtaSkscy51bnBhY2soaXNbbl0sMCxiaSksbiE9PSJlYXN0IiYmbiE9PSJ3ZXN0IiYmcy5tdWx0aXBseUJ5U2NhbGFyKGJpLGQsYmkpfWVsc2V7aT1pPz9xLmRlZmF1bHQsaS5nZW9kZXRpY1N1cmZhY2VOb3JtYWwocixaby51cCk7bGV0IGQ9Wm8udXAsYz1aby5lYXN0O2MueD0tci55LGMueT1yLngsYy56PTAscy5ub3JtYWxpemUoYyxaby5lYXN0KSxzLmNyb3NzKGQsYyxaby5ub3J0aCkscy5tdWx0aXBseUJ5U2NhbGFyKFpvLnVwLC0xLFpvLmRvd24pLHMubXVsdGlwbHlCeVNjYWxhcihaby5lYXN0LC0xLFpvLndlc3QpLHMubXVsdGlwbHlCeVNjYWxhcihaby5ub3J0aCwtMSxaby5zb3V0aCksaGk9Wm9bZV0sbWk9Wm9bdF0sYmk9Wm9bbl19cmV0dXJuIGZbMF09aGkueCxmWzFdPWhpLnksZlsyXT1oaS56LGZbM109MCxmWzRdPW1pLngsZls1XT1taS55LGZbNl09bWkueixmWzddPTAsZls4XT1iaS54LGZbOV09YmkueSxmWzEwXT1iaS56LGZbMTFdPTAsZlsxMl09ci54LGZbMTNdPXIueSxmWzE0XT1yLnosZlsxNV09MSxmfSxQYlthXT1vKSxvfTtidC5lYXN0Tm9ydGhVcFRvRml4ZWRGcmFtZT1idC5sb2NhbEZyYW1lVG9GaXhlZEZyYW1lR2VuZXJhdG9yKCJlYXN0Iiwibm9ydGgiKTtidC5ub3J0aEVhc3REb3duVG9GaXhlZEZyYW1lPWJ0LmxvY2FsRnJhbWVUb0ZpeGVkRnJhbWVHZW5lcmF0b3IoIm5vcnRoIiwiZWFzdCIpO2J0Lm5vcnRoVXBFYXN0VG9GaXhlZEZyYW1lPWJ0LmxvY2FsRnJhbWVUb0ZpeGVkRnJhbWVHZW5lcmF0b3IoIm5vcnRoIiwidXAiKTtidC5ub3J0aFdlc3RVcFRvRml4ZWRGcmFtZT1idC5sb2NhbEZyYW1lVG9GaXhlZEZyYW1lR2VuZXJhdG9yKCJub3J0aCIsIndlc3QiKTtoTT1uZXcgWmUsbU09bmV3IHMoMSwxLDEpLGJNPW5ldyAkO2J0LmhlYWRpbmdQaXRjaFJvbGxUb0ZpeGVkRnJhbWU9ZnVuY3Rpb24oZSx0LG4sbyxhKXtvPW8/P2J0LmVhc3ROb3J0aFVwVG9GaXhlZEZyYW1lO2xldCByPVplLmZyb21IZWFkaW5nUGl0Y2hSb2xsKHQsaE0pLGk9JC5mcm9tVHJhbnNsYXRpb25RdWF0ZXJuaW9uUm90YXRpb25TY2FsZShzLlpFUk8scixtTSxiTSk7cmV0dXJuIGE9byhlLG4sYSksJC5tdWx0aXBseShhLGksYSl9O3BNPW5ldyAkLGdNPW5ldyBKO2J0LmhlYWRpbmdQaXRjaFJvbGxRdWF0ZXJuaW9uPWZ1bmN0aW9uKGUsdCxuLG8sYSl7bGV0IHI9YnQuaGVhZGluZ1BpdGNoUm9sbFRvRml4ZWRGcmFtZShlLHQsbixvLHBNKSxpPSQuZ2V0TWF0cml4MyhyLGdNKTtyZXR1cm4gWmUuZnJvbVJvdGF0aW9uTWF0cml4KGksYSl9O19NPW5ldyBzKDEsMSwxKSx5TT1uZXcgcyxXQT1uZXcgJCxBTT1uZXcgJCx3TT1uZXcgSixUTT1uZXcgWmU7YnQuZml4ZWRGcmFtZVRvSGVhZGluZ1BpdGNoUm9sbD1mdW5jdGlvbihlLHQsbixvKXt0PXQ/P3EuZGVmYXVsdCxuPW4/P2J0LmVhc3ROb3J0aFVwVG9GaXhlZEZyYW1lLGcobyl8fChvPW5ldyB3bCk7bGV0IGE9JC5nZXRUcmFuc2xhdGlvbihlLHlNKTtpZihzLmVxdWFscyhhLHMuWkVSTykpcmV0dXJuIG8uaGVhZGluZz0wLG8ucGl0Y2g9MCxvLnJvbGw9MCxvO2xldCByPSQuaW52ZXJzZVRyYW5zZm9ybWF0aW9uKG4oYSx0LFdBKSxXQSksaT0kLnNldFNjYWxlKGUsX00sQU0pO2k9JC5zZXRUcmFuc2xhdGlvbihpLHMuWkVSTyxpKSxyPSQubXVsdGlwbHkocixpLHIpO2xldCBmPVplLmZyb21Sb3RhdGlvbk1hdHJpeCgkLmdldE1hdHJpeDMocix3TSksVE0pO3JldHVybiBmPVplLm5vcm1hbGl6ZShmLGYpLHdsLmZyb21RdWF0ZXJuaW9uKGYsbyl9O0VNPTYqMzYwMCsyNDYwKzUwLjU0ODQxLFJNPTg2NDAxODQ4MTI4NjZlLTYseE09LjA5MzEwNCxPTT0tNjJlLTcsU009MTE3NzI3NTgzODQ2NjhlLTMyLENNPTcyOTIxMTU4NTUzZS0xNSxNTT1rLlRXT19QSS84NjQwMCxMbD1uZXcgSm47YnQuY29tcHV0ZUljcmZUb0NlbnRyYWxCb2R5Rml4ZWRNYXRyaXg9ZnVuY3Rpb24oZSx0KXtsZXQgbj1idC5jb21wdXRlSWNyZlRvRml4ZWRNYXRyaXgoZSx0KTtyZXR1cm4gZyhuKXx8KG49YnQuY29tcHV0ZVRlbWVUb1BzZXVkb0ZpeGVkTWF0cml4KGUsdCkpLG59O2J0LmNvbXB1dGVUZW1lVG9Qc2V1ZG9GaXhlZE1hdHJpeD1mdW5jdGlvbihlLHQpe0xsPUpuLmFkZFNlY29uZHMoZSwtSm4uY29tcHV0ZVRhaU1pbnVzVXRjKGUpLExsKTtsZXQgbj1MbC5kYXlOdW1iZXIsbz1MbC5zZWNvbmRzT2ZEYXksYSxyPW4tMjQ1MTU0NTtvPj00MzIwMD9hPShyKy41KS9nbi5EQVlTX1BFUl9KVUxJQU5fQ0VOVFVSWTphPShyLS41KS9nbi5EQVlTX1BFUl9KVUxJQU5fQ0VOVFVSWTtsZXQgZj0oRU0rYSooUk0rYSooeE0rYSpPTSkpKSpNTSVrLlRXT19QSSxkPUNNK1NNKihuLTI0NTE1NDU1ZS0xKSxjPShvK2duLlNFQ09ORFNfUEVSX0RBWSouNSklZ24uU0VDT05EU19QRVJfREFZLHU9ZitkKmMsbD1NYXRoLmNvcyh1KSxoPU1hdGguc2luKHUpO3JldHVybiBnKHQpPyh0WzBdPWwsdFsxXT0taCx0WzJdPTAsdFszXT1oLHRbNF09bCx0WzVdPTAsdFs2XT0wLHRbN109MCx0WzhdPTEsdCk6bmV3IEoobCxoLDAsLWgsbCwwLDAsMCwxKX07YnQuaWF1MjAwNlh5c0RhdGE9bmV3IE5BO2J0LmVhcnRoT3JpZW50YXRpb25QYXJhbWV0ZXJzPVRBLk5PTkU7RmI9MzIuMTg0LE5NPTI0NTE1NDU7YnQucHJlbG9hZEljcmZGaXhlZD1mdW5jdGlvbihlKXtsZXQgdD1lLnN0YXJ0LmRheU51bWJlcixuPWUuc3RhcnQuc2Vjb25kc09mRGF5K0ZiLG89ZS5zdG9wLmRheU51bWJlcixhPWUuc3RvcC5zZWNvbmRzT2ZEYXkrRmI7cmV0dXJuIGJ0LmlhdTIwMDZYeXNEYXRhLnByZWxvYWQodCxuLG8sYSl9O2J0LmNvbXB1dGVJY3JmVG9GaXhlZE1hdHJpeD1mdW5jdGlvbihlLHQpe2codCl8fCh0PW5ldyBKKTtsZXQgbj1idC5jb21wdXRlRml4ZWRUb0ljcmZNYXRyaXgoZSx0KTtpZihnKG4pKXJldHVybiBKLnRyYW5zcG9zZShuLHQpfTtJTT0zMi4xODQsUE09MjQ1MTU0NSxqbD1uZXcgd2wsa009bmV3IEosdk09bmV3IEpuO2J0LmNvbXB1dGVNb29uRml4ZWRUb0ljcmZNYXRyaXg9ZnVuY3Rpb24oZSx0KXtnKHQpfHwodD1uZXcgSik7bGV0IG49Sm4uYWRkU2Vjb25kcyhlLElNLHZNKSxvPUpuLnRvdGFsRGF5cyhuKS1QTSxhPWsudG9SYWRpYW5zKDEyLjExMiktay50b1JhZGlhbnMoLjA1Mjk5MikqbyxyPWsudG9SYWRpYW5zKDI0LjIyNCktay50b1JhZGlhbnMoLjEwNTk4NCkqbyxpPWsudG9SYWRpYW5zKDIyNy42NDUpK2sudG9SYWRpYW5zKDEzLjAxMikqbyxmPWsudG9SYWRpYW5zKDI2MS4xMDUpK2sudG9SYWRpYW5zKDEzLjM0MDcxNikqbyxkPWsudG9SYWRpYW5zKDM1OCkray50b1JhZGlhbnMoLjk4NTYpKm87cmV0dXJuIGpsLnBpdGNoPWsudG9SYWRpYW5zKDE4MCktay50b1JhZGlhbnMoMy44NzgpKk1hdGguc2luKGEpLWsudG9SYWRpYW5zKC4xMikqTWF0aC5zaW4ocikray50b1JhZGlhbnMoLjA3KSpNYXRoLnNpbihpKS1rLnRvUmFkaWFucyguMDE3KSpNYXRoLnNpbihmKSxqbC5yb2xsPWsudG9SYWRpYW5zKDY2LjUzLTkwKStrLnRvUmFkaWFucygxLjU0MykqTWF0aC5jb3MoYSkray50b1JhZGlhbnMoLjI0KSpNYXRoLmNvcyhyKS1rLnRvUmFkaWFucyguMDI4KSpNYXRoLmNvcyhpKStrLnRvUmFkaWFucyguMDA3KSpNYXRoLmNvcyhmKSxqbC5oZWFkaW5nPWsudG9SYWRpYW5zKDI0NC4zNzUtOTApK2sudG9SYWRpYW5zKDEzLjE3NjM1ODMxKSpvK2sudG9SYWRpYW5zKDMuNTU4KSpNYXRoLnNpbihhKStrLnRvUmFkaWFucyguMTIxKSpNYXRoLnNpbihyKS1rLnRvUmFkaWFucyguMDY0KSpNYXRoLnNpbihpKStrLnRvUmFkaWFucyguMDE2KSpNYXRoLnNpbihmKStrLnRvUmFkaWFucyguMDI1KSpNYXRoLnNpbihkKSxKLmZyb21IZWFkaW5nUGl0Y2hSb2xsKGpsLGtNKX07YnQuY29tcHV0ZUljcmZUb01vb25GaXhlZE1hdHJpeD1mdW5jdGlvbihlLHQpe2codCl8fCh0PW5ldyBKKTtsZXQgbj1idC5jb21wdXRlTW9vbkZpeGVkVG9JY3JmTWF0cml4KGUsdCk7aWYoZyhuKSlyZXR1cm4gSi50cmFuc3Bvc2Uobix0KX07Rk09bmV3IHhsKDAsMCwwKSxETT1uZXcgYmYoMCwwLDAsMCwwLDApLGtiPW5ldyBKLHZiPW5ldyBKO2J0LmNvbXB1dGVGaXhlZFRvSWNyZk1hdHJpeD1mdW5jdGlvbihlLHQpe2codCl8fCh0PW5ldyBKKTtsZXQgbj1idC5lYXJ0aE9yaWVudGF0aW9uUGFyYW1ldGVycy5jb21wdXRlKGUsRE0pO2lmKCFnKG4pKXJldHVybjtsZXQgbz1lLmRheU51bWJlcixhPWUuc2Vjb25kc09mRGF5K0ZiLHI9YnQuaWF1MjAwNlh5c0RhdGEuY29tcHV0ZVh5c1JhZGlhbnMobyxhLEZNKTtpZighZyhyKSlyZXR1cm47bGV0IGk9ci54K24ueFBvbGVPZmZzZXQsZj1yLnkrbi55UG9sZU9mZnNldCxkPTEvKDErTWF0aC5zcXJ0KDEtaSppLWYqZikpLGM9a2I7Y1swXT0xLWQqaSppLGNbM109LWQqaSpmLGNbNl09aSxjWzFdPS1kKmkqZixjWzRdPTEtZCpmKmYsY1s3XT1mLGNbMl09LWksY1s1XT0tZixjWzhdPTEtZCooaSppK2YqZik7bGV0IHU9Si5mcm9tUm90YXRpb25aKC1yLnMsdmIpLGw9Si5tdWx0aXBseShjLHUsa2IpLGg9ZS5kYXlOdW1iZXIsbT1lLnNlY29uZHNPZkRheS1Kbi5jb21wdXRlVGFpTWludXNVdGMoZSkrbi51dDFNaW51c1V0YyxiPWgtMjQ1MTU0NSxwPW0vZ24uU0VDT05EU19QRVJfREFZLHk9Ljc3OTA1NzI3MzI2NCtwKy4wMDI3Mzc4MTE5MTEzNTQ0OCooYitwKTt5PXklMSprLlRXT19QSTtsZXQgVD1KLmZyb21Sb3RhdGlvblooeSx2YiksXz1KLm11bHRpcGx5KGwsVCxrYiksRT1NYXRoLmNvcyhuLnhQb2xlV2FuZGVyKSx3PU1hdGguY29zKG4ueVBvbGVXYW5kZXIpLFI9TWF0aC5zaW4obi54UG9sZVdhbmRlciksUz1NYXRoLnNpbihuLnlQb2xlV2FuZGVyKSxDPW8tTk0rYS9nbi5TRUNPTkRTX1BFUl9EQVk7Qy89MzY1MjU7bGV0IEk9LTQ3ZS02KkMqay5SQURJQU5TX1BFUl9ERUdSRUUvMzYwMCxOPU1hdGguY29zKEkpLFA9TWF0aC5zaW4oSSksRj12YjtyZXR1cm4gRlswXT1FKk4sRlsxXT1FKlAsRlsyXT1SLEZbM109LXcqUCtTKlIqTixGWzRdPXcqTitTKlIqUCxGWzVdPS1TKkUsRls2XT0tUypQLXcqUipOLEZbN109UypOLXcqUipQLEZbOF09dypFLEoubXVsdGlwbHkoXyxGLHQpfTtCTT1uZXcgZHQ7YnQucG9pbnRUb1dpbmRvd0Nvb3JkaW5hdGVzPWZ1bmN0aW9uKGUsdCxuLG8pe3JldHVybiBvPWJ0LnBvaW50VG9HTFdpbmRvd0Nvb3JkaW5hdGVzKGUsdCxuLG8pLG8ueT0yKnRbNV0tby55LG99O2J0LnBvaW50VG9HTFdpbmRvd0Nvb3JkaW5hdGVzPWZ1bmN0aW9uKGUsdCxuLG8pe2cobyl8fChvPW5ldyBZKTtsZXQgYT1CTTtyZXR1cm4gJC5tdWx0aXBseUJ5VmVjdG9yKGUsZHQuZnJvbUVsZW1lbnRzKG4ueCxuLnksbi56LDEsYSksYSksZHQubXVsdGlwbHlCeVNjYWxhcihhLDEvYS53LGEpLCQubXVsdGlwbHlCeVZlY3Rvcih0LGEsYSksWS5mcm9tQ2FydGVzaWFuNChhLG8pfTtVTT1uZXcgcyxMTT1uZXcgcyxqTT1uZXcgcztidC5yb3RhdGlvbk1hdHJpeEZyb21Qb3NpdGlvblZlbG9jaXR5PWZ1bmN0aW9uKGUsdCxuLG8pe2xldCBhPShuPz9xLmRlZmF1bHQpLmdlb2RldGljU3VyZmFjZU5vcm1hbChlLFVNKSxyPXMuY3Jvc3ModCxhLExNKTtzLmVxdWFsc0Vwc2lsb24ocixzLlpFUk8say5FUFNJTE9ONikmJihyPXMuY2xvbmUocy5VTklUX1gscikpO2xldCBpPXMuY3Jvc3Mocix0LGpNKTtyZXR1cm4gcy5ub3JtYWxpemUoaSxpKSxzLmNyb3NzKHQsaSxyKSxzLm5lZ2F0ZShyLHIpLHMubm9ybWFsaXplKHIsciksZyhvKXx8KG89bmV3IEopLG9bMF09dC54LG9bMV09dC55LG9bMl09dC56LG9bM109ci54LG9bNF09ci55LG9bNV09ci56LG9bNl09aS54LG9bN109aS55LG9bOF09aS56LG99O2J0LlNXSVpaTEVfM0RfVE9fMkRfTUFUUklYPU9iamVjdC5mcmVlemUobmV3ICQoMCwwLDEsMCwxLDAsMCwwLDAsMSwwLDAsMCwwLDAsMSkpO1hBPW5ldyByZSxEYj1uZXcgcyx6TT1uZXcgcyxHTT1uZXcgSixCYj1uZXcgJCxZQT1uZXcgJDtidC5iYXNpc1RvMkQ9ZnVuY3Rpb24oZSx0LG4pe2xldCBvPSQuZ2V0VHJhbnNsYXRpb24odCx6TSksYT1lLmVsbGlwc29pZCxyO2lmKHMuZXF1YWxzKG8scy5aRVJPKSlyPXMuY2xvbmUocy5aRVJPLERiKTtlbHNle2xldCB1PWEuY2FydGVzaWFuVG9DYXJ0b2dyYXBoaWMobyxYQSk7cj1lLnByb2plY3QodSxEYikscy5mcm9tRWxlbWVudHMoci56LHIueCxyLnkscil9bGV0IGk9YnQuZWFzdE5vcnRoVXBUb0ZpeGVkRnJhbWUobyxhLEJiKSxmPSQuaW52ZXJzZVRyYW5zZm9ybWF0aW9uKGksWUEpLGQ9JC5nZXRNYXRyaXgzKHQsR00pLGM9JC5tdWx0aXBseUJ5TWF0cml4MyhmLGQsbik7cmV0dXJuICQubXVsdGlwbHkoYnQuU1dJWlpMRV8zRF9UT18yRF9NQVRSSVgsYyxuKSwkLnNldFRyYW5zbGF0aW9uKG4scixuKSxufTtidC5lbGxpcHNvaWRUbzJETW9kZWxNYXRyaXg9ZnVuY3Rpb24oZSx0LG4pe2xldCBvPWUuZWxsaXBzb2lkLGE9YnQuZWFzdE5vcnRoVXBUb0ZpeGVkRnJhbWUodCxvLEJiKSxyPSQuaW52ZXJzZVRyYW5zZm9ybWF0aW9uKGEsWUEpLGk9by5jYXJ0ZXNpYW5Ub0NhcnRvZ3JhcGhpYyh0LFhBKSxmPWUucHJvamVjdChpLERiKTtzLmZyb21FbGVtZW50cyhmLnosZi54LGYueSxmKTtsZXQgZD0kLmZyb21UcmFuc2xhdGlvbihmLEJiKTtyZXR1cm4gJC5tdWx0aXBseShidC5TV0laWkxFXzNEX1RPXzJEX01BVFJJWCxyLG4pLCQubXVsdGlwbHkoZCxuLG4pLG59O2NvPWJ0fSk7ZnVuY3Rpb24gYXQoZSx0LG4sbyl7dGhpcy53ZXN0PWU/PzAsdGhpcy5zb3V0aD10Pz8wLHRoaXMuZWFzdD1uPz8wLHRoaXMubm9ydGg9bz8/MH12YXIgVk0sSE0sS00scU0sV00sVWIsWE0sU2UsX249WCgoKT0+e0llKCk7VHQoKTtzZSgpO1dlKCk7R2UoKTtzcigpO3BuKCk7T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoYXQucHJvdG90eXBlLHt3aWR0aDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGF0LmNvbXB1dGVXaWR0aCh0aGlzKX19LGhlaWdodDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGF0LmNvbXB1dGVIZWlnaHQodGhpcyl9fX0pO2F0LnBhY2tlZExlbmd0aD00O2F0LnBhY2s9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBuPW4/PzAsdFtuKytdPWUud2VzdCx0W24rK109ZS5zb3V0aCx0W24rK109ZS5lYXN0LHRbbl09ZS5ub3J0aCx0fTthdC51bnBhY2s9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB0PXQ/PzAsZyhuKXx8KG49bmV3IGF0KSxuLndlc3Q9ZVt0KytdLG4uc291dGg9ZVt0KytdLG4uZWFzdD1lW3QrK10sbi5ub3J0aD1lW3RdLG59O2F0LmNvbXB1dGVXaWR0aD1mdW5jdGlvbihlKXtsZXQgdD1lLmVhc3Qsbj1lLndlc3Q7cmV0dXJuIHQ8biYmKHQrPWsuVFdPX1BJKSx0LW59O2F0LmNvbXB1dGVIZWlnaHQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGUubm9ydGgtZS5zb3V0aH07YXQuZnJvbURlZ3JlZXM9ZnVuY3Rpb24oZSx0LG4sbyxhKXtyZXR1cm4gZT1rLnRvUmFkaWFucyhlPz8wKSx0PWsudG9SYWRpYW5zKHQ/PzApLG49ay50b1JhZGlhbnMobj8/MCksbz1rLnRvUmFkaWFucyhvPz8wKSxnKGEpPyhhLndlc3Q9ZSxhLnNvdXRoPXQsYS5lYXN0PW4sYS5ub3J0aD1vLGEpOm5ldyBhdChlLHQsbixvKX07YXQuZnJvbVJhZGlhbnM9ZnVuY3Rpb24oZSx0LG4sbyxhKXtyZXR1cm4gZyhhKT8oYS53ZXN0PWU/PzAsYS5zb3V0aD10Pz8wLGEuZWFzdD1uPz8wLGEubm9ydGg9bz8/MCxhKTpuZXcgYXQoZSx0LG4sbyl9O2F0LmZyb21DYXJ0b2dyYXBoaWNBcnJheT1mdW5jdGlvbihlLHQpe2xldCBuPU51bWJlci5NQVhfVkFMVUUsbz0tTnVtYmVyLk1BWF9WQUxVRSxhPU51bWJlci5NQVhfVkFMVUUscj0tTnVtYmVyLk1BWF9WQUxVRSxpPU51bWJlci5NQVhfVkFMVUUsZj0tTnVtYmVyLk1BWF9WQUxVRTtmb3IobGV0IGQ9MCxjPWUubGVuZ3RoO2Q8YztkKyspe2xldCB1PWVbZF07bj1NYXRoLm1pbihuLHUubG9uZ2l0dWRlKSxvPU1hdGgubWF4KG8sdS5sb25naXR1ZGUpLGk9TWF0aC5taW4oaSx1LmxhdGl0dWRlKSxmPU1hdGgubWF4KGYsdS5sYXRpdHVkZSk7bGV0IGw9dS5sb25naXR1ZGU+PTA/dS5sb25naXR1ZGU6dS5sb25naXR1ZGUray5UV09fUEk7YT1NYXRoLm1pbihhLGwpLHI9TWF0aC5tYXgocixsKX1yZXR1cm4gby1uPnItYSYmKG49YSxvPXIsbz5rLlBJJiYobz1vLWsuVFdPX1BJKSxuPmsuUEkmJihuPW4tay5UV09fUEkpKSxnKHQpPyh0Lndlc3Q9bix0LnNvdXRoPWksdC5lYXN0PW8sdC5ub3J0aD1mLHQpOm5ldyBhdChuLGksbyxmKX07YXQuZnJvbUNhcnRlc2lhbkFycmF5PWZ1bmN0aW9uKGUsdCxuKXt0PXQ/P3EuZGVmYXVsdDtsZXQgbz1OdW1iZXIuTUFYX1ZBTFVFLGE9LU51bWJlci5NQVhfVkFMVUUscj1OdW1iZXIuTUFYX1ZBTFVFLGk9LU51bWJlci5NQVhfVkFMVUUsZj1OdW1iZXIuTUFYX1ZBTFVFLGQ9LU51bWJlci5NQVhfVkFMVUU7Zm9yKGxldCBjPTAsdT1lLmxlbmd0aDtjPHU7YysrKXtsZXQgbD10LmNhcnRlc2lhblRvQ2FydG9ncmFwaGljKGVbY10pO289TWF0aC5taW4obyxsLmxvbmdpdHVkZSksYT1NYXRoLm1heChhLGwubG9uZ2l0dWRlKSxmPU1hdGgubWluKGYsbC5sYXRpdHVkZSksZD1NYXRoLm1heChkLGwubGF0aXR1ZGUpO2xldCBoPWwubG9uZ2l0dWRlPj0wP2wubG9uZ2l0dWRlOmwubG9uZ2l0dWRlK2suVFdPX1BJO3I9TWF0aC5taW4ocixoKSxpPU1hdGgubWF4KGksaCl9cmV0dXJuIGEtbz5pLXImJihvPXIsYT1pLGE+ay5QSSYmKGE9YS1rLlRXT19QSSksbz5rLlBJJiYobz1vLWsuVFdPX1BJKSksZyhuKT8obi53ZXN0PW8sbi5zb3V0aD1mLG4uZWFzdD1hLG4ubm9ydGg9ZCxuKTpuZXcgYXQobyxmLGEsZCl9O1ZNPW5ldyBzLEhNPW5ldyBzLEtNPW5ldyBzLHFNPW5ldyBzLFdNPW5ldyBzLFViPW5ldyBBcnJheSg1KTtmb3IobGV0IGU9MDtlPFViLmxlbmd0aDsrK2UpVWJbZV09bmV3IHM7YXQuZnJvbUJvdW5kaW5nU3BoZXJlPWZ1bmN0aW9uKGUsdCxuKXtsZXQgbz1lLmNlbnRlcixhPWUucmFkaXVzO2lmKGcodCl8fCh0PXEuZGVmYXVsdCksZyhuKXx8KG49bmV3IGF0KSxzLmVxdWFscyhvLHMuWkVSTykpcmV0dXJuIGF0LmNsb25lKGF0Lk1BWF9WQUxVRSxuKSxuO2xldCByPWNvLmVhc3ROb3J0aFVwVG9GaXhlZEZyYW1lKG8sdCxWTSksaT0kLm11bHRpcGx5QnlQb2ludEFzVmVjdG9yKHIscy5VTklUX1gsSE0pO3Mubm9ybWFsaXplKGksaSk7bGV0IGY9JC5tdWx0aXBseUJ5UG9pbnRBc1ZlY3RvcihyLHMuVU5JVF9ZLEtNKTtzLm5vcm1hbGl6ZShmLGYpLHMubXVsdGlwbHlCeVNjYWxhcihmLGEsZikscy5tdWx0aXBseUJ5U2NhbGFyKGksYSxpKTtsZXQgZD1zLm5lZ2F0ZShmLFdNKSxjPXMubmVnYXRlKGkscU0pLHU9VWIsbD11WzBdO3JldHVybiBzLmFkZChvLGYsbCksbD11WzFdLHMuYWRkKG8sYyxsKSxsPXVbMl0scy5hZGQobyxkLGwpLGw9dVszXSxzLmFkZChvLGksbCksdVs0XT1vLGF0LmZyb21DYXJ0ZXNpYW5BcnJheSh1LHQsbil9O2F0LmNsb25lPWZ1bmN0aW9uKGUsdCl7aWYoZyhlKSlyZXR1cm4gZyh0KT8odC53ZXN0PWUud2VzdCx0LnNvdXRoPWUuc291dGgsdC5lYXN0PWUuZWFzdCx0Lm5vcnRoPWUubm9ydGgsdCk6bmV3IGF0KGUud2VzdCxlLnNvdXRoLGUuZWFzdCxlLm5vcnRoKX07YXQuZXF1YWxzRXBzaWxvbj1mdW5jdGlvbihlLHQsbil7cmV0dXJuIG49bj8/MCxlPT09dHx8ZyhlKSYmZyh0KSYmTWF0aC5hYnMoZS53ZXN0LXQud2VzdCk8PW4mJk1hdGguYWJzKGUuc291dGgtdC5zb3V0aCk8PW4mJk1hdGguYWJzKGUuZWFzdC10LmVhc3QpPD1uJiZNYXRoLmFicyhlLm5vcnRoLXQubm9ydGgpPD1ufTthdC5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oZSl7cmV0dXJuIGF0LmNsb25lKHRoaXMsZSl9O2F0LnByb3RvdHlwZS5lcXVhbHM9ZnVuY3Rpb24oZSl7cmV0dXJuIGF0LmVxdWFscyh0aGlzLGUpfTthdC5lcXVhbHM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT09PXR8fGcoZSkmJmcodCkmJmUud2VzdD09PXQud2VzdCYmZS5zb3V0aD09PXQuc291dGgmJmUuZWFzdD09PXQuZWFzdCYmZS5ub3J0aD09PXQubm9ydGh9O2F0LnByb3RvdHlwZS5lcXVhbHNFcHNpbG9uPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGF0LmVxdWFsc0Vwc2lsb24odGhpcyxlLHQpfTthdC5fdmFsaWRhdGU9ZnVuY3Rpb24oZSl7fTthdC5zb3V0aHdlc3Q9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZyh0KT8odC5sb25naXR1ZGU9ZS53ZXN0LHQubGF0aXR1ZGU9ZS5zb3V0aCx0LmhlaWdodD0wLHQpOm5ldyByZShlLndlc3QsZS5zb3V0aCl9O2F0Lm5vcnRod2VzdD1mdW5jdGlvbihlLHQpe3JldHVybiBnKHQpPyh0LmxvbmdpdHVkZT1lLndlc3QsdC5sYXRpdHVkZT1lLm5vcnRoLHQuaGVpZ2h0PTAsdCk6bmV3IHJlKGUud2VzdCxlLm5vcnRoKX07YXQubm9ydGhlYXN0PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGcodCk/KHQubG9uZ2l0dWRlPWUuZWFzdCx0LmxhdGl0dWRlPWUubm9ydGgsdC5oZWlnaHQ9MCx0KTpuZXcgcmUoZS5lYXN0LGUubm9ydGgpfTthdC5zb3V0aGVhc3Q9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZyh0KT8odC5sb25naXR1ZGU9ZS5lYXN0LHQubGF0aXR1ZGU9ZS5zb3V0aCx0LmhlaWdodD0wLHQpOm5ldyByZShlLmVhc3QsZS5zb3V0aCl9O2F0LmNlbnRlcj1mdW5jdGlvbihlLHQpe2xldCBuPWUuZWFzdCxvPWUud2VzdDtuPG8mJihuKz1rLlRXT19QSSk7bGV0IGE9ay5uZWdhdGl2ZVBpVG9QaSgobytuKSouNSkscj0oZS5zb3V0aCtlLm5vcnRoKSouNTtyZXR1cm4gZyh0KT8odC5sb25naXR1ZGU9YSx0LmxhdGl0dWRlPXIsdC5oZWlnaHQ9MCx0KTpuZXcgcmUoYSxyKX07YXQuaW50ZXJzZWN0aW9uPWZ1bmN0aW9uKGUsdCxuKXtsZXQgbz1lLmVhc3QsYT1lLndlc3Qscj10LmVhc3QsaT10Lndlc3Q7bzxhJiZyPjA/bys9ay5UV09fUEk6cjxpJiZvPjAmJihyKz1rLlRXT19QSSksbzxhJiZpPDA/aSs9ay5UV09fUEk6cjxpJiZhPDAmJihhKz1rLlRXT19QSSk7bGV0IGY9ay5uZWdhdGl2ZVBpVG9QaShNYXRoLm1heChhLGkpKSxkPWsubmVnYXRpdmVQaVRvUGkoTWF0aC5taW4obyxyKSk7aWYoKGUud2VzdDxlLmVhc3R8fHQud2VzdDx0LmVhc3QpJiZkPD1mKXJldHVybjtsZXQgYz1NYXRoLm1heChlLnNvdXRoLHQuc291dGgpLHU9TWF0aC5taW4oZS5ub3J0aCx0Lm5vcnRoKTtpZighKGM+PXUpKXJldHVybiBnKG4pPyhuLndlc3Q9ZixuLnNvdXRoPWMsbi5lYXN0PWQsbi5ub3J0aD11LG4pOm5ldyBhdChmLGMsZCx1KX07YXQuc2ltcGxlSW50ZXJzZWN0aW9uPWZ1bmN0aW9uKGUsdCxuKXtsZXQgbz1NYXRoLm1heChlLndlc3QsdC53ZXN0KSxhPU1hdGgubWF4KGUuc291dGgsdC5zb3V0aCkscj1NYXRoLm1pbihlLmVhc3QsdC5lYXN0KSxpPU1hdGgubWluKGUubm9ydGgsdC5ub3J0aCk7aWYoIShhPj1pfHxvPj1yKSlyZXR1cm4gZyhuKT8obi53ZXN0PW8sbi5zb3V0aD1hLG4uZWFzdD1yLG4ubm9ydGg9aSxuKTpuZXcgYXQobyxhLHIsaSl9O2F0LnVuaW9uPWZ1bmN0aW9uKGUsdCxuKXtnKG4pfHwobj1uZXcgYXQpO2xldCBvPWUuZWFzdCxhPWUud2VzdCxyPXQuZWFzdCxpPXQud2VzdDtvPGEmJnI+MD9vKz1rLlRXT19QSTpyPGkmJm8+MCYmKHIrPWsuVFdPX1BJKSxvPGEmJmk8MD9pKz1rLlRXT19QSTpyPGkmJmE8MCYmKGErPWsuVFdPX1BJKTtsZXQgZj1rLm5lZ2F0aXZlUGlUb1BpKE1hdGgubWluKGEsaSkpLGQ9ay5uZWdhdGl2ZVBpVG9QaShNYXRoLm1heChvLHIpKTtyZXR1cm4gbi53ZXN0PWYsbi5zb3V0aD1NYXRoLm1pbihlLnNvdXRoLHQuc291dGgpLG4uZWFzdD1kLG4ubm9ydGg9TWF0aC5tYXgoZS5ub3J0aCx0Lm5vcnRoKSxufTthdC5leHBhbmQ9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBnKG4pfHwobj1uZXcgYXQpLG4ud2VzdD1NYXRoLm1pbihlLndlc3QsdC5sb25naXR1ZGUpLG4uc291dGg9TWF0aC5taW4oZS5zb3V0aCx0LmxhdGl0dWRlKSxuLmVhc3Q9TWF0aC5tYXgoZS5lYXN0LHQubG9uZ2l0dWRlKSxuLm5vcnRoPU1hdGgubWF4KGUubm9ydGgsdC5sYXRpdHVkZSksbn07YXQuY29udGFpbnM9ZnVuY3Rpb24oZSx0KXtsZXQgbj10LmxvbmdpdHVkZSxvPXQubGF0aXR1ZGUsYT1lLndlc3Qscj1lLmVhc3Q7cmV0dXJuIHI8YSYmKHIrPWsuVFdPX1BJLG48MCYmKG4rPWsuVFdPX1BJKSksKG4+YXx8ay5lcXVhbHNFcHNpbG9uKG4sYSxrLkVQU0lMT04xNCkpJiYobjxyfHxrLmVxdWFsc0Vwc2lsb24obixyLGsuRVBTSUxPTjE0KSkmJm8+PWUuc291dGgmJm88PWUubm9ydGh9O1hNPW5ldyByZTthdC5zdWJzYW1wbGU9ZnVuY3Rpb24oZSx0LG4sbyl7dD10Pz9xLmRlZmF1bHQsbj1uPz8wLGcobyl8fChvPVtdKTtsZXQgYT0wLHI9ZS5ub3J0aCxpPWUuc291dGgsZj1lLmVhc3QsZD1lLndlc3QsYz1YTTtjLmhlaWdodD1uLGMubG9uZ2l0dWRlPWQsYy5sYXRpdHVkZT1yLG9bYV09dC5jYXJ0b2dyYXBoaWNUb0NhcnRlc2lhbihjLG9bYV0pLGErKyxjLmxvbmdpdHVkZT1mLG9bYV09dC5jYXJ0b2dyYXBoaWNUb0NhcnRlc2lhbihjLG9bYV0pLGErKyxjLmxhdGl0dWRlPWksb1thXT10LmNhcnRvZ3JhcGhpY1RvQ2FydGVzaWFuKGMsb1thXSksYSsrLGMubG9uZ2l0dWRlPWQsb1thXT10LmNhcnRvZ3JhcGhpY1RvQ2FydGVzaWFuKGMsb1thXSksYSsrLHI8MD9jLmxhdGl0dWRlPXI6aT4wP2MubGF0aXR1ZGU9aTpjLmxhdGl0dWRlPTA7Zm9yKGxldCB1PTE7dTw4OysrdSljLmxvbmdpdHVkZT0tTWF0aC5QSSt1KmsuUElfT1ZFUl9UV08sYXQuY29udGFpbnMoZSxjKSYmKG9bYV09dC5jYXJ0b2dyYXBoaWNUb0NhcnRlc2lhbihjLG9bYV0pLGErKyk7cmV0dXJuIGMubGF0aXR1ZGU9PT0wJiYoYy5sb25naXR1ZGU9ZCxvW2FdPXQuY2FydG9ncmFwaGljVG9DYXJ0ZXNpYW4oYyxvW2FdKSxhKyssYy5sb25naXR1ZGU9ZixvW2FdPXQuY2FydG9ncmFwaGljVG9DYXJ0ZXNpYW4oYyxvW2FdKSxhKyspLG8ubGVuZ3RoPWEsb307YXQuc3Vic2VjdGlvbj1mdW5jdGlvbihlLHQsbixvLGEscil7aWYoZyhyKXx8KHI9bmV3IGF0KSxlLndlc3Q8PWUuZWFzdCl7bGV0IGY9ZS5lYXN0LWUud2VzdDtyLndlc3Q9ZS53ZXN0K3QqZixyLmVhc3Q9ZS53ZXN0K28qZn1lbHNle2xldCBmPWsuVFdPX1BJK2UuZWFzdC1lLndlc3Q7ci53ZXN0PWsubmVnYXRpdmVQaVRvUGkoZS53ZXN0K3QqZiksci5lYXN0PWsubmVnYXRpdmVQaVRvUGkoZS53ZXN0K28qZil9bGV0IGk9ZS5ub3J0aC1lLnNvdXRoO3JldHVybiByLnNvdXRoPWUuc291dGgrbippLHIubm9ydGg9ZS5zb3V0aCthKmksdD09PTEmJihyLndlc3Q9ZS5lYXN0KSxvPT09MSYmKHIuZWFzdD1lLmVhc3QpLG49PT0xJiYoci5zb3V0aD1lLm5vcnRoKSxhPT09MSYmKHIubm9ydGg9ZS5ub3J0aCkscn07YXQuTUFYX1ZBTFVFPU9iamVjdC5mcmVlemUobmV3IGF0KC1NYXRoLlBJLC1rLlBJX09WRVJfVFdPLE1hdGguUEksay5QSV9PVkVSX1RXTykpO1NlPWF0fSk7ZnVuY3Rpb24gUWUoZSx0KXt0aGlzLmNlbnRlcj1zLmNsb25lKGU/P3MuWkVSTyksdGhpcy5yYWRpdXM9dD8/MH12YXIgemIsR2IsVmIsSGIsS2IscWIsV2IsYm8sWGIsWWIsSmIsWmIsWU0sSkEsSk0sWk0sTGIsamIsUU0sJE0sZU4sdE4sbk4sb04sYU4sck4saU4sY04sc04sZk4sWkEsZE4sdU4sbE4saE4sbU4sJEEsUUEsZ2UsTXQ9WCgoKT0+e0llKCk7VHQoKTtzZSgpO1dlKCk7a3IoKTtaaSgpO2xmKCk7R2UoKTtEbigpO3BuKCk7X24oKTt6Yj1uZXcgcyxHYj1uZXcgcyxWYj1uZXcgcyxIYj1uZXcgcyxLYj1uZXcgcyxxYj1uZXcgcyxXYj1uZXcgcyxibz1uZXcgcyxYYj1uZXcgcyxZYj1uZXcgcyxKYj1uZXcgcyxaYj1uZXcgcyxZTT00LzMqay5QSTtRZS5mcm9tUG9pbnRzPWZ1bmN0aW9uKGUsdCl7aWYoZyh0KXx8KHQ9bmV3IFFlKSwhZyhlKXx8ZS5sZW5ndGg9PT0wKXJldHVybiB0LmNlbnRlcj1zLmNsb25lKHMuWkVSTyx0LmNlbnRlciksdC5yYWRpdXM9MCx0O2xldCBuPXMuY2xvbmUoZVswXSxXYiksbz1zLmNsb25lKG4semIpLGE9cy5jbG9uZShuLEdiKSxyPXMuY2xvbmUobixWYiksaT1zLmNsb25lKG4sSGIpLGY9cy5jbG9uZShuLEtiKSxkPXMuY2xvbmUobixxYiksYz1lLmxlbmd0aCx1O2Zvcih1PTE7dTxjO3UrKyl7cy5jbG9uZShlW3VdLG4pO2xldCBJPW4ueCxOPW4ueSxQPW4uejtJPG8ueCYmcy5jbG9uZShuLG8pLEk+aS54JiZzLmNsb25lKG4saSksTjxhLnkmJnMuY2xvbmUobixhKSxOPmYueSYmcy5jbG9uZShuLGYpLFA8ci56JiZzLmNsb25lKG4sciksUD5kLnomJnMuY2xvbmUobixkKX1sZXQgbD1zLm1hZ25pdHVkZVNxdWFyZWQocy5zdWJ0cmFjdChpLG8sYm8pKSxoPXMubWFnbml0dWRlU3F1YXJlZChzLnN1YnRyYWN0KGYsYSxibykpLG09cy5tYWduaXR1ZGVTcXVhcmVkKHMuc3VidHJhY3QoZCxyLGJvKSksYj1vLHA9aSx5PWw7aD55JiYoeT1oLGI9YSxwPWYpLG0+eSYmKHk9bSxiPXIscD1kKTtsZXQgVD1YYjtULng9KGIueCtwLngpKi41LFQueT0oYi55K3AueSkqLjUsVC56PShiLnorcC56KSouNTtsZXQgXz1zLm1hZ25pdHVkZVNxdWFyZWQocy5zdWJ0cmFjdChwLFQsYm8pKSxFPU1hdGguc3FydChfKSx3PVliO3cueD1vLngsdy55PWEueSx3Lno9ci56O2xldCBSPUpiO1IueD1pLngsUi55PWYueSxSLno9ZC56O2xldCBTPXMubWlkcG9pbnQodyxSLFpiKSxDPTA7Zm9yKHU9MDt1PGM7dSsrKXtzLmNsb25lKGVbdV0sbik7bGV0IEk9cy5tYWduaXR1ZGUocy5zdWJ0cmFjdChuLFMsYm8pKTtJPkMmJihDPUkpO2xldCBOPXMubWFnbml0dWRlU3F1YXJlZChzLnN1YnRyYWN0KG4sVCxibykpO2lmKE4+Xyl7bGV0IFA9TWF0aC5zcXJ0KE4pO0U9KEUrUCkqLjUsXz1FKkU7bGV0IEY9UC1FO1QueD0oRSpULngrRipuLngpL1AsVC55PShFKlQueStGKm4ueSkvUCxULno9KEUqVC56K0Yqbi56KS9QfX1yZXR1cm4gRTxDPyhzLmNsb25lKFQsdC5jZW50ZXIpLHQucmFkaXVzPUUpOihzLmNsb25lKFMsdC5jZW50ZXIpLHQucmFkaXVzPUMpLHR9O0pBPW5ldyBpbyxKTT1uZXcgcyxaTT1uZXcgcyxMYj1uZXcgcmUsamI9bmV3IHJlO1FlLmZyb21SZWN0YW5nbGUyRD1mdW5jdGlvbihlLHQsbil7cmV0dXJuIFFlLmZyb21SZWN0YW5nbGVXaXRoSGVpZ2h0czJEKGUsdCwwLDAsbil9O1FlLmZyb21SZWN0YW5nbGVXaXRoSGVpZ2h0czJEPWZ1bmN0aW9uKGUsdCxuLG8sYSl7aWYoZyhhKXx8KGE9bmV3IFFlKSwhZyhlKSlyZXR1cm4gYS5jZW50ZXI9cy5jbG9uZShzLlpFUk8sYS5jZW50ZXIpLGEucmFkaXVzPTAsYTtKQS5fZWxsaXBzb2lkPXEuZGVmYXVsdCx0PXQ/P0pBLFNlLnNvdXRod2VzdChlLExiKSxMYi5oZWlnaHQ9bixTZS5ub3J0aGVhc3QoZSxqYiksamIuaGVpZ2h0PW87bGV0IHI9dC5wcm9qZWN0KExiLEpNKSxpPXQucHJvamVjdChqYixaTSksZj1pLngtci54LGQ9aS55LXIueSxjPWkuei1yLno7YS5yYWRpdXM9TWF0aC5zcXJ0KGYqZitkKmQrYypjKSouNTtsZXQgdT1hLmNlbnRlcjtyZXR1cm4gdS54PXIueCtmKi41LHUueT1yLnkrZCouNSx1Lno9ci56K2MqLjUsYX07UU09W107UWUuZnJvbVJlY3RhbmdsZTNEPWZ1bmN0aW9uKGUsdCxuLG8pe2lmKHQ9dD8/cS5kZWZhdWx0LG49bj8/MCxnKG8pfHwobz1uZXcgUWUpLCFnKGUpKXJldHVybiBvLmNlbnRlcj1zLmNsb25lKHMuWkVSTyxvLmNlbnRlciksby5yYWRpdXM9MCxvO2xldCBhPVNlLnN1YnNhbXBsZShlLHQsbixRTSk7cmV0dXJuIFFlLmZyb21Qb2ludHMoYSxvKX07UWUuZnJvbVZlcnRpY2VzPWZ1bmN0aW9uKGUsdCxuLG8pe2lmKGcobyl8fChvPW5ldyBRZSksIWcoZSl8fGUubGVuZ3RoPT09MClyZXR1cm4gby5jZW50ZXI9cy5jbG9uZShzLlpFUk8sby5jZW50ZXIpLG8ucmFkaXVzPTAsbzt0PXQ/P3MuWkVSTyxuPW4/PzM7bGV0IGE9V2I7YS54PWVbMF0rdC54LGEueT1lWzFdK3QueSxhLno9ZVsyXSt0Lno7bGV0IHI9cy5jbG9uZShhLHpiKSxpPXMuY2xvbmUoYSxHYiksZj1zLmNsb25lKGEsVmIpLGQ9cy5jbG9uZShhLEhiKSxjPXMuY2xvbmUoYSxLYiksdT1zLmNsb25lKGEscWIpLGw9ZS5sZW5ndGgsaDtmb3IoaD0wO2g8bDtoKz1uKXtsZXQgUD1lW2hdK3QueCxGPWVbaCsxXSt0LnksQT1lW2grMl0rdC56O2EueD1QLGEueT1GLGEuej1BLFA8ci54JiZzLmNsb25lKGEsciksUD5kLngmJnMuY2xvbmUoYSxkKSxGPGkueSYmcy5jbG9uZShhLGkpLEY+Yy55JiZzLmNsb25lKGEsYyksQTxmLnomJnMuY2xvbmUoYSxmKSxBPnUueiYmcy5jbG9uZShhLHUpfWxldCBtPXMubWFnbml0dWRlU3F1YXJlZChzLnN1YnRyYWN0KGQscixibykpLGI9cy5tYWduaXR1ZGVTcXVhcmVkKHMuc3VidHJhY3QoYyxpLGJvKSkscD1zLm1hZ25pdHVkZVNxdWFyZWQocy5zdWJ0cmFjdCh1LGYsYm8pKSx5PXIsVD1kLF89bTtiPl8mJihfPWIseT1pLFQ9YykscD5fJiYoXz1wLHk9ZixUPXUpO2xldCBFPVhiO0UueD0oeS54K1QueCkqLjUsRS55PSh5LnkrVC55KSouNSxFLno9KHkueitULnopKi41O2xldCB3PXMubWFnbml0dWRlU3F1YXJlZChzLnN1YnRyYWN0KFQsRSxibykpLFI9TWF0aC5zcXJ0KHcpLFM9WWI7Uy54PXIueCxTLnk9aS55LFMuej1mLno7bGV0IEM9SmI7Qy54PWQueCxDLnk9Yy55LEMuej11Lno7bGV0IEk9cy5taWRwb2ludChTLEMsWmIpLE49MDtmb3IoaD0wO2g8bDtoKz1uKXthLng9ZVtoXSt0LngsYS55PWVbaCsxXSt0LnksYS56PWVbaCsyXSt0Lno7bGV0IFA9cy5tYWduaXR1ZGUocy5zdWJ0cmFjdChhLEksYm8pKTtQPk4mJihOPVApO2xldCBGPXMubWFnbml0dWRlU3F1YXJlZChzLnN1YnRyYWN0KGEsRSxibykpO2lmKEY+dyl7bGV0IEE9TWF0aC5zcXJ0KEYpO1I9KFIrQSkqLjUsdz1SKlI7bGV0IHg9QS1SO0UueD0oUipFLngreCphLngpL0EsRS55PShSKkUueSt4KmEueSkvQSxFLno9KFIqRS56K3gqYS56KS9BfX1yZXR1cm4gUjxOPyhzLmNsb25lKEUsby5jZW50ZXIpLG8ucmFkaXVzPVIpOihzLmNsb25lKEksby5jZW50ZXIpLG8ucmFkaXVzPU4pLG99O1FlLmZyb21FbmNvZGVkQ2FydGVzaWFuVmVydGljZXM9ZnVuY3Rpb24oZSx0LG4pe2lmKGcobil8fChuPW5ldyBRZSksIWcoZSl8fCFnKHQpfHxlLmxlbmd0aCE9PXQubGVuZ3RofHxlLmxlbmd0aD09PTApcmV0dXJuIG4uY2VudGVyPXMuY2xvbmUocy5aRVJPLG4uY2VudGVyKSxuLnJhZGl1cz0wLG47bGV0IG89V2I7by54PWVbMF0rdFswXSxvLnk9ZVsxXSt0WzFdLG8uej1lWzJdK3RbMl07bGV0IGE9cy5jbG9uZShvLHpiKSxyPXMuY2xvbmUobyxHYiksaT1zLmNsb25lKG8sVmIpLGY9cy5jbG9uZShvLEhiKSxkPXMuY2xvbmUobyxLYiksYz1zLmNsb25lKG8scWIpLHU9ZS5sZW5ndGgsbDtmb3IobD0wO2w8dTtsKz0zKXtsZXQgTj1lW2xdK3RbbF0sUD1lW2wrMV0rdFtsKzFdLEY9ZVtsKzJdK3RbbCsyXTtvLng9TixvLnk9UCxvLno9RixOPGEueCYmcy5jbG9uZShvLGEpLE4+Zi54JiZzLmNsb25lKG8sZiksUDxyLnkmJnMuY2xvbmUobyxyKSxQPmQueSYmcy5jbG9uZShvLGQpLEY8aS56JiZzLmNsb25lKG8saSksRj5jLnomJnMuY2xvbmUobyxjKX1sZXQgaD1zLm1hZ25pdHVkZVNxdWFyZWQocy5zdWJ0cmFjdChmLGEsYm8pKSxtPXMubWFnbml0dWRlU3F1YXJlZChzLnN1YnRyYWN0KGQscixibykpLGI9cy5tYWduaXR1ZGVTcXVhcmVkKHMuc3VidHJhY3QoYyxpLGJvKSkscD1hLHk9ZixUPWg7bT5UJiYoVD1tLHA9cix5PWQpLGI+VCYmKFQ9YixwPWkseT1jKTtsZXQgXz1YYjtfLng9KHAueCt5LngpKi41LF8ueT0ocC55K3kueSkqLjUsXy56PShwLnoreS56KSouNTtsZXQgRT1zLm1hZ25pdHVkZVNxdWFyZWQocy5zdWJ0cmFjdCh5LF8sYm8pKSx3PU1hdGguc3FydChFKSxSPVliO1IueD1hLngsUi55PXIueSxSLno9aS56O2xldCBTPUpiO1MueD1mLngsUy55PWQueSxTLno9Yy56O2xldCBDPXMubWlkcG9pbnQoUixTLFpiKSxJPTA7Zm9yKGw9MDtsPHU7bCs9Myl7by54PWVbbF0rdFtsXSxvLnk9ZVtsKzFdK3RbbCsxXSxvLno9ZVtsKzJdK3RbbCsyXTtsZXQgTj1zLm1hZ25pdHVkZShzLnN1YnRyYWN0KG8sQyxibykpO04+SSYmKEk9Tik7bGV0IFA9cy5tYWduaXR1ZGVTcXVhcmVkKHMuc3VidHJhY3QobyxfLGJvKSk7aWYoUD5FKXtsZXQgRj1NYXRoLnNxcnQoUCk7dz0odytGKSouNSxFPXcqdztsZXQgQT1GLXc7Xy54PSh3Kl8ueCtBKm8ueCkvRixfLnk9KHcqXy55K0Eqby55KS9GLF8uej0odypfLnorQSpvLnopL0Z9fXJldHVybiB3PEk/KHMuY2xvbmUoXyxuLmNlbnRlciksbi5yYWRpdXM9dyk6KHMuY2xvbmUoQyxuLmNlbnRlciksbi5yYWRpdXM9SSksbn07UWUuZnJvbUNvcm5lclBvaW50cz1mdW5jdGlvbihlLHQsbil7ZyhuKXx8KG49bmV3IFFlKTtsZXQgbz1zLm1pZHBvaW50KGUsdCxuLmNlbnRlcik7cmV0dXJuIG4ucmFkaXVzPXMuZGlzdGFuY2Uobyx0KSxufTtRZS5mcm9tRWxsaXBzb2lkPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGcodCl8fCh0PW5ldyBRZSkscy5jbG9uZShzLlpFUk8sdC5jZW50ZXIpLHQucmFkaXVzPWUubWF4aW11bVJhZGl1cyx0fTskTT1uZXcgcztRZS5mcm9tQm91bmRpbmdTcGhlcmVzPWZ1bmN0aW9uKGUsdCl7aWYoZyh0KXx8KHQ9bmV3IFFlKSwhZyhlKXx8ZS5sZW5ndGg9PT0wKXJldHVybiB0LmNlbnRlcj1zLmNsb25lKHMuWkVSTyx0LmNlbnRlciksdC5yYWRpdXM9MCx0O2xldCBuPWUubGVuZ3RoO2lmKG49PT0xKXJldHVybiBRZS5jbG9uZShlWzBdLHQpO2lmKG49PT0yKXJldHVybiBRZS51bmlvbihlWzBdLGVbMV0sdCk7bGV0IG89W10sYTtmb3IoYT0wO2E8bjthKyspby5wdXNoKGVbYV0uY2VudGVyKTt0PVFlLmZyb21Qb2ludHMobyx0KTtsZXQgcj10LmNlbnRlcixpPXQucmFkaXVzO2ZvcihhPTA7YTxuO2ErKyl7bGV0IGY9ZVthXTtpPU1hdGgubWF4KGkscy5kaXN0YW5jZShyLGYuY2VudGVyLCRNKStmLnJhZGl1cyl9cmV0dXJuIHQucmFkaXVzPWksdH07ZU49bmV3IHMsdE49bmV3IHMsbk49bmV3IHM7UWUuZnJvbU9yaWVudGVkQm91bmRpbmdCb3g9ZnVuY3Rpb24oZSx0KXtnKHQpfHwodD1uZXcgUWUpO2xldCBuPWUuaGFsZkF4ZXMsbz1KLmdldENvbHVtbihuLDAsZU4pLGE9Si5nZXRDb2x1bW4obiwxLHROKSxyPUouZ2V0Q29sdW1uKG4sMixuTik7cmV0dXJuIHMuYWRkKG8sYSxvKSxzLmFkZChvLHIsbyksdC5jZW50ZXI9cy5jbG9uZShlLmNlbnRlcix0LmNlbnRlciksdC5yYWRpdXM9cy5tYWduaXR1ZGUobyksdH07b049bmV3IHMsYU49bmV3IHM7UWUuZnJvbVRyYW5zZm9ybWF0aW9uPWZ1bmN0aW9uKGUsdCl7Zyh0KXx8KHQ9bmV3IFFlKTtsZXQgbj0kLmdldFRyYW5zbGF0aW9uKGUsb04pLG89JC5nZXRTY2FsZShlLGFOKSxhPS41KnMubWFnbml0dWRlKG8pO3JldHVybiB0LmNlbnRlcj1zLmNsb25lKG4sdC5jZW50ZXIpLHQucmFkaXVzPWEsdH07UWUuY2xvbmU9ZnVuY3Rpb24oZSx0KXtpZihnKGUpKXJldHVybiBnKHQpPyh0LmNlbnRlcj1zLmNsb25lKGUuY2VudGVyLHQuY2VudGVyKSx0LnJhZGl1cz1lLnJhZGl1cyx0KTpuZXcgUWUoZS5jZW50ZXIsZS5yYWRpdXMpfTtRZS5wYWNrZWRMZW5ndGg9NDtRZS5wYWNrPWZ1bmN0aW9uKGUsdCxuKXtuPW4/PzA7bGV0IG89ZS5jZW50ZXI7cmV0dXJuIHRbbisrXT1vLngsdFtuKytdPW8ueSx0W24rK109by56LHRbbl09ZS5yYWRpdXMsdH07UWUudW5wYWNrPWZ1bmN0aW9uKGUsdCxuKXt0PXQ/PzAsZyhuKXx8KG49bmV3IFFlKTtsZXQgbz1uLmNlbnRlcjtyZXR1cm4gby54PWVbdCsrXSxvLnk9ZVt0KytdLG8uej1lW3QrK10sbi5yYWRpdXM9ZVt0XSxufTtyTj1uZXcgcyxpTj1uZXcgcztRZS51bmlvbj1mdW5jdGlvbihlLHQsbil7ZyhuKXx8KG49bmV3IFFlKTtsZXQgbz1lLmNlbnRlcixhPWUucmFkaXVzLHI9dC5jZW50ZXIsaT10LnJhZGl1cyxmPXMuc3VidHJhY3QocixvLHJOKSxkPXMubWFnbml0dWRlKGYpO2lmKGE+PWQraSlyZXR1cm4gZS5jbG9uZShuKSxuO2lmKGk+PWQrYSlyZXR1cm4gdC5jbG9uZShuKSxuO2xldCBjPShhK2QraSkqLjUsdT1zLm11bHRpcGx5QnlTY2FsYXIoZiwoLWErYykvZCxpTik7cmV0dXJuIHMuYWRkKHUsbyx1KSxzLmNsb25lKHUsbi5jZW50ZXIpLG4ucmFkaXVzPWMsbn07Y049bmV3IHM7UWUuZXhwYW5kPWZ1bmN0aW9uKGUsdCxuKXtuPVFlLmNsb25lKGUsbik7bGV0IG89cy5tYWduaXR1ZGUocy5zdWJ0cmFjdCh0LG4uY2VudGVyLGNOKSk7cmV0dXJuIG8+bi5yYWRpdXMmJihuLnJhZGl1cz1vKSxufTtRZS5pbnRlcnNlY3RQbGFuZT1mdW5jdGlvbihlLHQpe2xldCBuPWUuY2VudGVyLG89ZS5yYWRpdXMsYT10Lm5vcm1hbCxyPXMuZG90KGEsbikrdC5kaXN0YW5jZTtyZXR1cm4gcjwtbz9Tbi5PVVRTSURFOnI8bz9Tbi5JTlRFUlNFQ1RJTkc6U24uSU5TSURFfTtRZS50cmFuc2Zvcm09ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBnKG4pfHwobj1uZXcgUWUpLG4uY2VudGVyPSQubXVsdGlwbHlCeVBvaW50KHQsZS5jZW50ZXIsbi5jZW50ZXIpLG4ucmFkaXVzPSQuZ2V0TWF4aW11bVNjYWxlKHQpKmUucmFkaXVzLG59O3NOPW5ldyBzO1FlLmRpc3RhbmNlU3F1YXJlZFRvPWZ1bmN0aW9uKGUsdCl7bGV0IG49cy5zdWJ0cmFjdChlLmNlbnRlcix0LHNOKSxvPXMubWFnbml0dWRlKG4pLWUucmFkaXVzO3JldHVybiBvPD0wPzA6bypvfTtRZS50cmFuc2Zvcm1XaXRob3V0U2NhbGU9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBnKG4pfHwobj1uZXcgUWUpLG4uY2VudGVyPSQubXVsdGlwbHlCeVBvaW50KHQsZS5jZW50ZXIsbi5jZW50ZXIpLG4ucmFkaXVzPWUucmFkaXVzLG59O2ZOPW5ldyBzO1FlLmNvbXB1dGVQbGFuZURpc3RhbmNlcz1mdW5jdGlvbihlLHQsbixvKXtnKG8pfHwobz1uZXcgVG8pO2xldCBhPXMuc3VidHJhY3QoZS5jZW50ZXIsdCxmTikscj1zLmRvdChuLGEpO3JldHVybiBvLnN0YXJ0PXItZS5yYWRpdXMsby5zdG9wPXIrZS5yYWRpdXMsb307WkE9bmV3IHMsZE49bmV3IHMsdU49bmV3IHMsbE49bmV3IHMsaE49bmV3IHMsbU49bmV3IHJlLCRBPW5ldyBBcnJheSg4KTtmb3IobGV0IGU9MDtlPDg7KytlKSRBW2VdPW5ldyBzO1FBPW5ldyBpbztRZS5wcm9qZWN0VG8yRD1mdW5jdGlvbihlLHQsbil7UUEuX2VsbGlwc29pZD1xLmRlZmF1bHQsdD10Pz9RQTtsZXQgbz10LmVsbGlwc29pZCxhPWUuY2VudGVyLHI9ZS5yYWRpdXMsaTtzLmVxdWFscyhhLHMuWkVSTyk/aT1zLmNsb25lKHMuVU5JVF9YLFpBKTppPW8uZ2VvZGV0aWNTdXJmYWNlTm9ybWFsKGEsWkEpO2xldCBmPXMuY3Jvc3Mocy5VTklUX1osaSxkTik7cy5ub3JtYWxpemUoZixmKTtsZXQgZD1zLmNyb3NzKGksZix1Tik7cy5ub3JtYWxpemUoZCxkKSxzLm11bHRpcGx5QnlTY2FsYXIoaSxyLGkpLHMubXVsdGlwbHlCeVNjYWxhcihkLHIsZCkscy5tdWx0aXBseUJ5U2NhbGFyKGYscixmKTtsZXQgYz1zLm5lZ2F0ZShkLGhOKSx1PXMubmVnYXRlKGYsbE4pLGw9JEEsaD1sWzBdO3MuYWRkKGksZCxoKSxzLmFkZChoLGYsaCksaD1sWzFdLHMuYWRkKGksZCxoKSxzLmFkZChoLHUsaCksaD1sWzJdLHMuYWRkKGksYyxoKSxzLmFkZChoLHUsaCksaD1sWzNdLHMuYWRkKGksYyxoKSxzLmFkZChoLGYsaCkscy5uZWdhdGUoaSxpKSxoPWxbNF0scy5hZGQoaSxkLGgpLHMuYWRkKGgsZixoKSxoPWxbNV0scy5hZGQoaSxkLGgpLHMuYWRkKGgsdSxoKSxoPWxbNl0scy5hZGQoaSxjLGgpLHMuYWRkKGgsdSxoKSxoPWxbN10scy5hZGQoaSxjLGgpLHMuYWRkKGgsZixoKTtsZXQgbT1sLmxlbmd0aDtmb3IobGV0IFQ9MDtUPG07KytUKXtsZXQgXz1sW1RdO3MuYWRkKGEsXyxfKTtsZXQgRT1vLmNhcnRlc2lhblRvQ2FydG9ncmFwaGljKF8sbU4pO3QucHJvamVjdChFLF8pfW49UWUuZnJvbVBvaW50cyhsLG4pLGE9bi5jZW50ZXI7bGV0IGI9YS54LHA9YS55LHk9YS56O3JldHVybiBhLng9eSxhLnk9YixhLno9cCxufTtRZS5pc09jY2x1ZGVkPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIXQuaXNCb3VuZGluZ1NwaGVyZVZpc2libGUoZSl9O1FlLmVxdWFscz1mdW5jdGlvbihlLHQpe3JldHVybiBlPT09dHx8ZyhlKSYmZyh0KSYmcy5lcXVhbHMoZS5jZW50ZXIsdC5jZW50ZXIpJiZlLnJhZGl1cz09PXQucmFkaXVzfTtRZS5wcm90b3R5cGUuaW50ZXJzZWN0UGxhbmU9ZnVuY3Rpb24oZSl7cmV0dXJuIFFlLmludGVyc2VjdFBsYW5lKHRoaXMsZSl9O1FlLnByb3RvdHlwZS5kaXN0YW5jZVNxdWFyZWRUbz1mdW5jdGlvbihlKXtyZXR1cm4gUWUuZGlzdGFuY2VTcXVhcmVkVG8odGhpcyxlKX07UWUucHJvdG90eXBlLmNvbXB1dGVQbGFuZURpc3RhbmNlcz1mdW5jdGlvbihlLHQsbil7cmV0dXJuIFFlLmNvbXB1dGVQbGFuZURpc3RhbmNlcyh0aGlzLGUsdCxuKX07UWUucHJvdG90eXBlLmlzT2NjbHVkZWQ9ZnVuY3Rpb24oZSl7cmV0dXJuIFFlLmlzT2NjbHVkZWQodGhpcyxlKX07UWUucHJvdG90eXBlLmVxdWFscz1mdW5jdGlvbihlKXtyZXR1cm4gUWUuZXF1YWxzKHRoaXMsZSl9O1FlLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbihlKXtyZXR1cm4gUWUuY2xvbmUodGhpcyxlKX07UWUucHJvdG90eXBlLnZvbHVtZT1mdW5jdGlvbigpe2xldCBlPXRoaXMucmFkaXVzO3JldHVybiBZTSplKmUqZX07Z2U9UWV9KTt2YXIgYk4sUGUsb2M9WCgoKT0+e2JOPXtERVBUSF9CVUZGRVJfQklUOjI1NixTVEVOQ0lMX0JVRkZFUl9CSVQ6MTAyNCxDT0xPUl9CVUZGRVJfQklUOjE2Mzg0LFBPSU5UUzowLExJTkVTOjEsTElORV9MT09QOjIsTElORV9TVFJJUDozLFRSSUFOR0xFUzo0LFRSSUFOR0xFX1NUUklQOjUsVFJJQU5HTEVfRkFOOjYsWkVSTzowLE9ORToxLFNSQ19DT0xPUjo3NjgsT05FX01JTlVTX1NSQ19DT0xPUjo3NjksU1JDX0FMUEhBOjc3MCxPTkVfTUlOVVNfU1JDX0FMUEhBOjc3MSxEU1RfQUxQSEE6NzcyLE9ORV9NSU5VU19EU1RfQUxQSEE6NzczLERTVF9DT0xPUjo3NzQsT05FX01JTlVTX0RTVF9DT0xPUjo3NzUsU1JDX0FMUEhBX1NBVFVSQVRFOjc3NixGVU5DX0FERDozMjc3NCxCTEVORF9FUVVBVElPTjozMjc3NyxCTEVORF9FUVVBVElPTl9SR0I6MzI3NzcsQkxFTkRfRVFVQVRJT05fQUxQSEE6MzQ4NzcsRlVOQ19TVUJUUkFDVDozMjc3OCxGVU5DX1JFVkVSU0VfU1VCVFJBQ1Q6MzI3NzksQkxFTkRfRFNUX1JHQjozMjk2OCxCTEVORF9TUkNfUkdCOjMyOTY5LEJMRU5EX0RTVF9BTFBIQTozMjk3MCxCTEVORF9TUkNfQUxQSEE6MzI5NzEsQ09OU1RBTlRfQ09MT1I6MzI3NjksT05FX01JTlVTX0NPTlNUQU5UX0NPTE9SOjMyNzcwLENPTlNUQU5UX0FMUEhBOjMyNzcxLE9ORV9NSU5VU19DT05TVEFOVF9BTFBIQTozMjc3MixCTEVORF9DT0xPUjozMjc3MyxBUlJBWV9CVUZGRVI6MzQ5NjIsRUxFTUVOVF9BUlJBWV9CVUZGRVI6MzQ5NjMsQVJSQVlfQlVGRkVSX0JJTkRJTkc6MzQ5NjQsRUxFTUVOVF9BUlJBWV9CVUZGRVJfQklORElORzozNDk2NSxTVFJFQU1fRFJBVzozNTA0MCxTVEFUSUNfRFJBVzozNTA0NCxEWU5BTUlDX0RSQVc6MzUwNDgsQlVGRkVSX1NJWkU6MzQ2NjAsQlVGRkVSX1VTQUdFOjM0NjYxLENVUlJFTlRfVkVSVEVYX0FUVFJJQjozNDM0MixGUk9OVDoxMDI4LEJBQ0s6MTAyOSxGUk9OVF9BTkRfQkFDSzoxMDMyLENVTExfRkFDRToyODg0LEJMRU5EOjMwNDIsRElUSEVSOjMwMjQsU1RFTkNJTF9URVNUOjI5NjAsREVQVEhfVEVTVDoyOTI5LFNDSVNTT1JfVEVTVDozMDg5LFBPTFlHT05fT0ZGU0VUX0ZJTEw6MzI4MjMsU0FNUExFX0FMUEhBX1RPX0NPVkVSQUdFOjMyOTI2LFNBTVBMRV9DT1ZFUkFHRTozMjkyOCxOT19FUlJPUjowLElOVkFMSURfRU5VTToxMjgwLElOVkFMSURfVkFMVUU6MTI4MSxJTlZBTElEX09QRVJBVElPTjoxMjgyLE9VVF9PRl9NRU1PUlk6MTI4NSxDVzoyMzA0LENDVzoyMzA1LExJTkVfV0lEVEg6Mjg0OSxBTElBU0VEX1BPSU5UX1NJWkVfUkFOR0U6MzM5MDEsQUxJQVNFRF9MSU5FX1dJRFRIX1JBTkdFOjMzOTAyLENVTExfRkFDRV9NT0RFOjI4ODUsRlJPTlRfRkFDRToyODg2LERFUFRIX1JBTkdFOjI5MjgsREVQVEhfV1JJVEVNQVNLOjI5MzAsREVQVEhfQ0xFQVJfVkFMVUU6MjkzMSxERVBUSF9GVU5DOjI5MzIsU1RFTkNJTF9DTEVBUl9WQUxVRToyOTYxLFNURU5DSUxfRlVOQzoyOTYyLFNURU5DSUxfRkFJTDoyOTY0LFNURU5DSUxfUEFTU19ERVBUSF9GQUlMOjI5NjUsU1RFTkNJTF9QQVNTX0RFUFRIX1BBU1M6Mjk2NixTVEVOQ0lMX1JFRjoyOTY3LFNURU5DSUxfVkFMVUVfTUFTSzoyOTYzLFNURU5DSUxfV1JJVEVNQVNLOjI5NjgsU1RFTkNJTF9CQUNLX0ZVTkM6MzQ4MTYsU1RFTkNJTF9CQUNLX0ZBSUw6MzQ4MTcsU1RFTkNJTF9CQUNLX1BBU1NfREVQVEhfRkFJTDozNDgxOCxTVEVOQ0lMX0JBQ0tfUEFTU19ERVBUSF9QQVNTOjM0ODE5LFNURU5DSUxfQkFDS19SRUY6MzYwMDMsU1RFTkNJTF9CQUNLX1ZBTFVFX01BU0s6MzYwMDQsU1RFTkNJTF9CQUNLX1dSSVRFTUFTSzozNjAwNSxWSUVXUE9SVDoyOTc4LFNDSVNTT1JfQk9YOjMwODgsQ09MT1JfQ0xFQVJfVkFMVUU6MzEwNixDT0xPUl9XUklURU1BU0s6MzEwNyxVTlBBQ0tfQUxJR05NRU5UOjMzMTcsUEFDS19BTElHTk1FTlQ6MzMzMyxNQVhfVEVYVFVSRV9TSVpFOjMzNzksTUFYX1ZJRVdQT1JUX0RJTVM6MzM4NixTVUJQSVhFTF9CSVRTOjM0MDgsUkVEX0JJVFM6MzQxMCxHUkVFTl9CSVRTOjM0MTEsQkxVRV9CSVRTOjM0MTIsQUxQSEFfQklUUzozNDEzLERFUFRIX0JJVFM6MzQxNCxTVEVOQ0lMX0JJVFM6MzQxNSxQT0xZR09OX09GRlNFVF9VTklUUzoxMDc1MixQT0xZR09OX09GRlNFVF9GQUNUT1I6MzI4MjQsVEVYVFVSRV9CSU5ESU5HXzJEOjMyODczLFNBTVBMRV9CVUZGRVJTOjMyOTM2LFNBTVBMRVM6MzI5MzcsU0FNUExFX0NPVkVSQUdFX1ZBTFVFOjMyOTM4LFNBTVBMRV9DT1ZFUkFHRV9JTlZFUlQ6MzI5MzksQ09NUFJFU1NFRF9URVhUVVJFX0ZPUk1BVFM6MzQ0NjcsRE9OVF9DQVJFOjQzNTIsRkFTVEVTVDo0MzUzLE5JQ0VTVDo0MzU0LEdFTkVSQVRFX01JUE1BUF9ISU5UOjMzMTcwLEJZVEU6NTEyMCxVTlNJR05FRF9CWVRFOjUxMjEsU0hPUlQ6NTEyMixVTlNJR05FRF9TSE9SVDo1MTIzLElOVDo1MTI0LFVOU0lHTkVEX0lOVDo1MTI1LEZMT0FUOjUxMjYsREVQVEhfQ09NUE9ORU5UOjY0MDIsQUxQSEE6NjQwNixSR0I6NjQwNyxSR0JBOjY0MDgsTFVNSU5BTkNFOjY0MDksTFVNSU5BTkNFX0FMUEhBOjY0MTAsVU5TSUdORURfU0hPUlRfNF80XzRfNDozMjgxOSxVTlNJR05FRF9TSE9SVF81XzVfNV8xOjMyODIwLFVOU0lHTkVEX1NIT1JUXzVfNl81OjMzNjM1LEZSQUdNRU5UX1NIQURFUjozNTYzMixWRVJURVhfU0hBREVSOjM1NjMzLE1BWF9WRVJURVhfQVRUUklCUzozNDkyMSxNQVhfVkVSVEVYX1VOSUZPUk1fVkVDVE9SUzozNjM0NyxNQVhfVkFSWUlOR19WRUNUT1JTOjM2MzQ4LE1BWF9DT01CSU5FRF9URVhUVVJFX0lNQUdFX1VOSVRTOjM1NjYxLE1BWF9WRVJURVhfVEVYVFVSRV9JTUFHRV9VTklUUzozNTY2MCxNQVhfVEVYVFVSRV9JTUFHRV9VTklUUzozNDkzMCxNQVhfRlJBR01FTlRfVU5JRk9STV9WRUNUT1JTOjM2MzQ5LFNIQURFUl9UWVBFOjM1NjYzLERFTEVURV9TVEFUVVM6MzU3MTIsTElOS19TVEFUVVM6MzU3MTQsVkFMSURBVEVfU1RBVFVTOjM1NzE1LEFUVEFDSEVEX1NIQURFUlM6MzU3MTcsQUNUSVZFX1VOSUZPUk1TOjM1NzE4LEFDVElWRV9BVFRSSUJVVEVTOjM1NzIxLFNIQURJTkdfTEFOR1VBR0VfVkVSU0lPTjozNTcyNCxDVVJSRU5UX1BST0dSQU06MzU3MjUsTkVWRVI6NTEyLExFU1M6NTEzLEVRVUFMOjUxNCxMRVFVQUw6NTE1LEdSRUFURVI6NTE2LE5PVEVRVUFMOjUxNyxHRVFVQUw6NTE4LEFMV0FZUzo1MTksS0VFUDo3NjgwLFJFUExBQ0U6NzY4MSxJTkNSOjc2ODIsREVDUjo3NjgzLElOVkVSVDo1Mzg2LElOQ1JfV1JBUDozNDA1NSxERUNSX1dSQVA6MzQwNTYsVkVORE9SOjc5MzYsUkVOREVSRVI6NzkzNyxWRVJTSU9OOjc5MzgsTkVBUkVTVDo5NzI4LExJTkVBUjo5NzI5LE5FQVJFU1RfTUlQTUFQX05FQVJFU1Q6OTk4NCxMSU5FQVJfTUlQTUFQX05FQVJFU1Q6OTk4NSxORUFSRVNUX01JUE1BUF9MSU5FQVI6OTk4NixMSU5FQVJfTUlQTUFQX0xJTkVBUjo5OTg3LFRFWFRVUkVfTUFHX0ZJTFRFUjoxMDI0MCxURVhUVVJFX01JTl9GSUxURVI6MTAyNDEsVEVYVFVSRV9XUkFQX1M6MTAyNDIsVEVYVFVSRV9XUkFQX1Q6MTAyNDMsVEVYVFVSRV8yRDozNTUzLFRFWFRVUkU6NTg5MCxURVhUVVJFX0NVQkVfTUFQOjM0MDY3LFRFWFRVUkVfQklORElOR19DVUJFX01BUDozNDA2OCxURVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1g6MzQwNjksVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9YOjM0MDcwLFRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWTozNDA3MSxURVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1k6MzQwNzIsVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9aOjM0MDczLFRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWjozNDA3NCxNQVhfQ1VCRV9NQVBfVEVYVFVSRV9TSVpFOjM0MDc2LFRFWFRVUkUwOjMzOTg0LFRFWFRVUkUxOjMzOTg1LFRFWFRVUkUyOjMzOTg2LFRFWFRVUkUzOjMzOTg3LFRFWFRVUkU0OjMzOTg4LFRFWFRVUkU1OjMzOTg5LFRFWFRVUkU2OjMzOTkwLFRFWFRVUkU3OjMzOTkxLFRFWFRVUkU4OjMzOTkyLFRFWFRVUkU5OjMzOTkzLFRFWFRVUkUxMDozMzk5NCxURVhUVVJFMTE6MzM5OTUsVEVYVFVSRTEyOjMzOTk2LFRFWFRVUkUxMzozMzk5NyxURVhUVVJFMTQ6MzM5OTgsVEVYVFVSRTE1OjMzOTk5LFRFWFRVUkUxNjozNGUzLFRFWFRVUkUxNzozNDAwMSxURVhUVVJFMTg6MzQwMDIsVEVYVFVSRTE5OjM0MDAzLFRFWFRVUkUyMDozNDAwNCxURVhUVVJFMjE6MzQwMDUsVEVYVFVSRTIyOjM0MDA2LFRFWFRVUkUyMzozNDAwNyxURVhUVVJFMjQ6MzQwMDgsVEVYVFVSRTI1OjM0MDA5LFRFWFRVUkUyNjozNDAxMCxURVhUVVJFMjc6MzQwMTEsVEVYVFVSRTI4OjM0MDEyLFRFWFRVUkUyOTozNDAxMyxURVhUVVJFMzA6MzQwMTQsVEVYVFVSRTMxOjM0MDE1LEFDVElWRV9URVhUVVJFOjM0MDE2LFJFUEVBVDoxMDQ5NyxDTEFNUF9UT19FREdFOjMzMDcxLE1JUlJPUkVEX1JFUEVBVDozMzY0OCxGTE9BVF9WRUMyOjM1NjY0LEZMT0FUX1ZFQzM6MzU2NjUsRkxPQVRfVkVDNDozNTY2NixJTlRfVkVDMjozNTY2NyxJTlRfVkVDMzozNTY2OCxJTlRfVkVDNDozNTY2OSxCT09MOjM1NjcwLEJPT0xfVkVDMjozNTY3MSxCT09MX1ZFQzM6MzU2NzIsQk9PTF9WRUM0OjM1NjczLEZMT0FUX01BVDI6MzU2NzQsRkxPQVRfTUFUMzozNTY3NSxGTE9BVF9NQVQ0OjM1Njc2LFNBTVBMRVJfMkQ6MzU2NzgsU0FNUExFUl9DVUJFOjM1NjgwLFZFUlRFWF9BVFRSSUJfQVJSQVlfRU5BQkxFRDozNDMzOCxWRVJURVhfQVRUUklCX0FSUkFZX1NJWkU6MzQzMzksVkVSVEVYX0FUVFJJQl9BUlJBWV9TVFJJREU6MzQzNDAsVkVSVEVYX0FUVFJJQl9BUlJBWV9UWVBFOjM0MzQxLFZFUlRFWF9BVFRSSUJfQVJSQVlfTk9STUFMSVpFRDozNDkyMixWRVJURVhfQVRUUklCX0FSUkFZX1BPSU5URVI6MzQzNzMsVkVSVEVYX0FUVFJJQl9BUlJBWV9CVUZGRVJfQklORElORzozNDk3NSxJTVBMRU1FTlRBVElPTl9DT0xPUl9SRUFEX1RZUEU6MzU3MzgsSU1QTEVNRU5UQVRJT05fQ09MT1JfUkVBRF9GT1JNQVQ6MzU3MzksQ09NUElMRV9TVEFUVVM6MzU3MTMsTE9XX0ZMT0FUOjM2MzM2LE1FRElVTV9GTE9BVDozNjMzNyxISUdIX0ZMT0FUOjM2MzM4LExPV19JTlQ6MzYzMzksTUVESVVNX0lOVDozNjM0MCxISUdIX0lOVDozNjM0MSxGUkFNRUJVRkZFUjozNjE2MCxSRU5ERVJCVUZGRVI6MzYxNjEsUkdCQTQ6MzI4NTQsUkdCNV9BMTozMjg1NSxSR0I1NjU6MzYxOTQsREVQVEhfQ09NUE9ORU5UMTY6MzMxODksU1RFTkNJTF9JTkRFWDo2NDAxLFNURU5DSUxfSU5ERVg4OjM2MTY4LERFUFRIX1NURU5DSUw6MzQwNDEsUkVOREVSQlVGRkVSX1dJRFRIOjM2MTYyLFJFTkRFUkJVRkZFUl9IRUlHSFQ6MzYxNjMsUkVOREVSQlVGRkVSX0lOVEVSTkFMX0ZPUk1BVDozNjE2NCxSRU5ERVJCVUZGRVJfUkVEX1NJWkU6MzYxNzYsUkVOREVSQlVGRkVSX0dSRUVOX1NJWkU6MzYxNzcsUkVOREVSQlVGRkVSX0JMVUVfU0laRTozNjE3OCxSRU5ERVJCVUZGRVJfQUxQSEFfU0laRTozNjE3OSxSRU5ERVJCVUZGRVJfREVQVEhfU0laRTozNjE4MCxSRU5ERVJCVUZGRVJfU1RFTkNJTF9TSVpFOjM2MTgxLEZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfT0JKRUNUX1RZUEU6MzYwNDgsRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9PQkpFQ1RfTkFNRTozNjA0OSxGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX1RFWFRVUkVfTEVWRUw6MzYwNTAsRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9URVhUVVJFX0NVQkVfTUFQX0ZBQ0U6MzYwNTEsQ09MT1JfQVRUQUNITUVOVDA6MzYwNjQsREVQVEhfQVRUQUNITUVOVDozNjA5NixTVEVOQ0lMX0FUVEFDSE1FTlQ6MzYxMjgsREVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5UOjMzMzA2LE5PTkU6MCxGUkFNRUJVRkZFUl9DT01QTEVURTozNjA1MyxGUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1FTlQ6MzYwNTQsRlJBTUVCVUZGRVJfSU5DT01QTEVURV9NSVNTSU5HX0FUVEFDSE1FTlQ6MzYwNTUsRlJBTUVCVUZGRVJfSU5DT01QTEVURV9ESU1FTlNJT05TOjM2MDU3LEZSQU1FQlVGRkVSX1VOU1VQUE9SVEVEOjM2MDYxLEZSQU1FQlVGRkVSX0JJTkRJTkc6MzYwMDYsUkVOREVSQlVGRkVSX0JJTkRJTkc6MzYwMDcsTUFYX1JFTkRFUkJVRkZFUl9TSVpFOjM0MDI0LElOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OOjEyODYsVU5QQUNLX0ZMSVBfWV9XRUJHTDozNzQ0MCxVTlBBQ0tfUFJFTVVMVElQTFlfQUxQSEFfV0VCR0w6Mzc0NDEsQ09OVEVYVF9MT1NUX1dFQkdMOjM3NDQyLFVOUEFDS19DT0xPUlNQQUNFX0NPTlZFUlNJT05fV0VCR0w6Mzc0NDMsQlJPV1NFUl9ERUZBVUxUX1dFQkdMOjM3NDQ0LENPTVBSRVNTRURfUkdCX1MzVENfRFhUMV9FWFQ6MzM3NzYsQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUMV9FWFQ6MzM3NzcsQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUM19FWFQ6MzM3NzgsQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUNV9FWFQ6MzM3NzksQ09NUFJFU1NFRF9SR0JfUFZSVENfNEJQUFYxX0lNRzozNTg0MCxDT01QUkVTU0VEX1JHQl9QVlJUQ18yQlBQVjFfSU1HOjM1ODQxLENPTVBSRVNTRURfUkdCQV9QVlJUQ180QlBQVjFfSU1HOjM1ODQyLENPTVBSRVNTRURfUkdCQV9QVlJUQ18yQlBQVjFfSU1HOjM1ODQzLENPTVBSRVNTRURfUkdCQV9BU1RDXzR4NF9XRUJHTDozNzgwOCxDT01QUkVTU0VEX1JHQl9FVEMxX1dFQkdMOjM2MTk2LENPTVBSRVNTRURfUkdCQV9CUFRDX1VOT1JNOjM2NDkyLEhBTEZfRkxPQVRfT0VTOjM2MTkzLERPVUJMRTo1MTMwLFJFQURfQlVGRkVSOjMwNzQsVU5QQUNLX1JPV19MRU5HVEg6MzMxNCxVTlBBQ0tfU0tJUF9ST1dTOjMzMTUsVU5QQUNLX1NLSVBfUElYRUxTOjMzMTYsUEFDS19ST1dfTEVOR1RIOjMzMzAsUEFDS19TS0lQX1JPV1M6MzMzMSxQQUNLX1NLSVBfUElYRUxTOjMzMzIsQ09MT1I6NjE0NCxERVBUSDo2MTQ1LFNURU5DSUw6NjE0NixSRUQ6NjQwMyxSR0I4OjMyODQ5LFJHQkE4OjMyODU2LFJHQjEwX0EyOjMyODU3LFRFWFRVUkVfQklORElOR18zRDozMjg3NCxVTlBBQ0tfU0tJUF9JTUFHRVM6MzI4NzcsVU5QQUNLX0lNQUdFX0hFSUdIVDozMjg3OCxURVhUVVJFXzNEOjMyODc5LFRFWFRVUkVfV1JBUF9SOjMyODgyLE1BWF8zRF9URVhUVVJFX1NJWkU6MzI4ODMsVU5TSUdORURfSU5UXzJfMTBfMTBfMTBfUkVWOjMzNjQwLE1BWF9FTEVNRU5UU19WRVJUSUNFUzozM2UzLE1BWF9FTEVNRU5UU19JTkRJQ0VTOjMzMDAxLFRFWFRVUkVfTUlOX0xPRDozMzA4MixURVhUVVJFX01BWF9MT0Q6MzMwODMsVEVYVFVSRV9CQVNFX0xFVkVMOjMzMDg0LFRFWFRVUkVfTUFYX0xFVkVMOjMzMDg1LE1JTjozMjc3NSxNQVg6MzI3NzYsREVQVEhfQ09NUE9ORU5UMjQ6MzMxOTAsTUFYX1RFWFRVUkVfTE9EX0JJQVM6MzQwNDUsVEVYVFVSRV9DT01QQVJFX01PREU6MzQ4OTIsVEVYVFVSRV9DT01QQVJFX0ZVTkM6MzQ4OTMsQ1VSUkVOVF9RVUVSWTozNDkxNyxRVUVSWV9SRVNVTFQ6MzQ5MTgsUVVFUllfUkVTVUxUX0FWQUlMQUJMRTozNDkxOSxTVFJFQU1fUkVBRDozNTA0MSxTVFJFQU1fQ09QWTozNTA0MixTVEFUSUNfUkVBRDozNTA0NSxTVEFUSUNfQ09QWTozNTA0NixEWU5BTUlDX1JFQUQ6MzUwNDksRFlOQU1JQ19DT1BZOjM1MDUwLE1BWF9EUkFXX0JVRkZFUlM6MzQ4NTIsRFJBV19CVUZGRVIwOjM0ODUzLERSQVdfQlVGRkVSMTozNDg1NCxEUkFXX0JVRkZFUjI6MzQ4NTUsRFJBV19CVUZGRVIzOjM0ODU2LERSQVdfQlVGRkVSNDozNDg1NyxEUkFXX0JVRkZFUjU6MzQ4NTgsRFJBV19CVUZGRVI2OjM0ODU5LERSQVdfQlVGRkVSNzozNDg2MCxEUkFXX0JVRkZFUjg6MzQ4NjEsRFJBV19CVUZGRVI5OjM0ODYyLERSQVdfQlVGRkVSMTA6MzQ4NjMsRFJBV19CVUZGRVIxMTozNDg2NCxEUkFXX0JVRkZFUjEyOjM0ODY1LERSQVdfQlVGRkVSMTM6MzQ4NjYsRFJBV19CVUZGRVIxNDozNDg2NyxEUkFXX0JVRkZFUjE1OjM0ODY4LE1BWF9GUkFHTUVOVF9VTklGT1JNX0NPTVBPTkVOVFM6MzU2NTcsTUFYX1ZFUlRFWF9VTklGT1JNX0NPTVBPTkVOVFM6MzU2NTgsU0FNUExFUl8zRDozNTY3OSxTQU1QTEVSXzJEX1NIQURPVzozNTY4MixGUkFHTUVOVF9TSEFERVJfREVSSVZBVElWRV9ISU5UOjM1NzIzLFBJWEVMX1BBQ0tfQlVGRkVSOjM1MDUxLFBJWEVMX1VOUEFDS19CVUZGRVI6MzUwNTIsUElYRUxfUEFDS19CVUZGRVJfQklORElORzozNTA1MyxQSVhFTF9VTlBBQ0tfQlVGRkVSX0JJTkRJTkc6MzUwNTUsRkxPQVRfTUFUMngzOjM1Njg1LEZMT0FUX01BVDJ4NDozNTY4NixGTE9BVF9NQVQzeDI6MzU2ODcsRkxPQVRfTUFUM3g0OjM1Njg4LEZMT0FUX01BVDR4MjozNTY4OSxGTE9BVF9NQVQ0eDM6MzU2OTAsU1JHQjozNTkwNCxTUkdCODozNTkwNSxTUkdCOF9BTFBIQTg6MzU5MDcsQ09NUEFSRV9SRUZfVE9fVEVYVFVSRTozNDg5NCxSR0JBMzJGOjM0ODM2LFJHQjMyRjozNDgzNyxSR0JBMTZGOjM0ODQyLFJHQjE2RjozNDg0MyxWRVJURVhfQVRUUklCX0FSUkFZX0lOVEVHRVI6MzUwNjksTUFYX0FSUkFZX1RFWFRVUkVfTEFZRVJTOjM1MDcxLE1JTl9QUk9HUkFNX1RFWEVMX09GRlNFVDozNTA3NixNQVhfUFJPR1JBTV9URVhFTF9PRkZTRVQ6MzUwNzcsTUFYX1ZBUllJTkdfQ09NUE9ORU5UUzozNTY1OSxURVhUVVJFXzJEX0FSUkFZOjM1ODY2LFRFWFRVUkVfQklORElOR18yRF9BUlJBWTozNTg2OSxSMTFGX0cxMUZfQjEwRjozNTg5OCxVTlNJR05FRF9JTlRfMTBGXzExRl8xMUZfUkVWOjM1ODk5LFJHQjlfRTU6MzU5MDEsVU5TSUdORURfSU5UXzVfOV85XzlfUkVWOjM1OTAyLFRSQU5TRk9STV9GRUVEQkFDS19CVUZGRVJfTU9ERTozNTk2NyxNQVhfVFJBTlNGT1JNX0ZFRURCQUNLX1NFUEFSQVRFX0NPTVBPTkVOVFM6MzU5NjgsVFJBTlNGT1JNX0ZFRURCQUNLX1ZBUllJTkdTOjM1OTcxLFRSQU5TRk9STV9GRUVEQkFDS19CVUZGRVJfU1RBUlQ6MzU5NzIsVFJBTlNGT1JNX0ZFRURCQUNLX0JVRkZFUl9TSVpFOjM1OTczLFRSQU5TRk9STV9GRUVEQkFDS19QUklNSVRJVkVTX1dSSVRURU46MzU5NzYsUkFTVEVSSVpFUl9ESVNDQVJEOjM1OTc3LE1BWF9UUkFOU0ZPUk1fRkVFREJBQ0tfSU5URVJMRUFWRURfQ09NUE9ORU5UUzozNTk3OCxNQVhfVFJBTlNGT1JNX0ZFRURCQUNLX1NFUEFSQVRFX0FUVFJJQlM6MzU5NzksSU5URVJMRUFWRURfQVRUUklCUzozNTk4MCxTRVBBUkFURV9BVFRSSUJTOjM1OTgxLFRSQU5TRk9STV9GRUVEQkFDS19CVUZGRVI6MzU5ODIsVFJBTlNGT1JNX0ZFRURCQUNLX0JVRkZFUl9CSU5ESU5HOjM1OTgzLFJHQkEzMlVJOjM2MjA4LFJHQjMyVUk6MzYyMDksUkdCQTE2VUk6MzYyMTQsUkdCMTZVSTozNjIxNSxSR0JBOFVJOjM2MjIwLFJHQjhVSTozNjIyMSxSR0JBMzJJOjM2MjI2LFJHQjMySTozNjIyNyxSR0JBMTZJOjM2MjMyLFJHQjE2STozNjIzMyxSR0JBOEk6MzYyMzgsUkdCOEk6MzYyMzksUkVEX0lOVEVHRVI6MzYyNDQsUkdCX0lOVEVHRVI6MzYyNDgsUkdCQV9JTlRFR0VSOjM2MjQ5LFNBTVBMRVJfMkRfQVJSQVk6MzYyODksU0FNUExFUl8yRF9BUlJBWV9TSEFET1c6MzYyOTIsU0FNUExFUl9DVUJFX1NIQURPVzozNjI5MyxVTlNJR05FRF9JTlRfVkVDMjozNjI5NCxVTlNJR05FRF9JTlRfVkVDMzozNjI5NSxVTlNJR05FRF9JTlRfVkVDNDozNjI5NixJTlRfU0FNUExFUl8yRDozNjI5OCxJTlRfU0FNUExFUl8zRDozNjI5OSxJTlRfU0FNUExFUl9DVUJFOjM2MzAwLElOVF9TQU1QTEVSXzJEX0FSUkFZOjM2MzAzLFVOU0lHTkVEX0lOVF9TQU1QTEVSXzJEOjM2MzA2LFVOU0lHTkVEX0lOVF9TQU1QTEVSXzNEOjM2MzA3LFVOU0lHTkVEX0lOVF9TQU1QTEVSX0NVQkU6MzYzMDgsVU5TSUdORURfSU5UX1NBTVBMRVJfMkRfQVJSQVk6MzYzMTEsREVQVEhfQ09NUE9ORU5UMzJGOjM2MDEyLERFUFRIMzJGX1NURU5DSUw4OjM2MDEzLEZMT0FUXzMyX1VOU0lHTkVEX0lOVF8yNF84X1JFVjozNjI2OSxGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX0NPTE9SX0VOQ09ESU5HOjMzMjk2LEZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfQ09NUE9ORU5UX1RZUEU6MzMyOTcsRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9SRURfU0laRTozMzI5OCxGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX0dSRUVOX1NJWkU6MzMyOTksRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9CTFVFX1NJWkU6MzMzMDAsRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9BTFBIQV9TSVpFOjMzMzAxLEZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfREVQVEhfU0laRTozMzMwMixGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX1NURU5DSUxfU0laRTozMzMwMyxGUkFNRUJVRkZFUl9ERUZBVUxUOjMzMzA0LFVOU0lHTkVEX0lOVF8yNF84OjM0MDQyLERFUFRIMjRfU1RFTkNJTDg6MzUwNTYsVU5TSUdORURfTk9STUFMSVpFRDozNTg2MyxEUkFXX0ZSQU1FQlVGRkVSX0JJTkRJTkc6MzYwMDYsUkVBRF9GUkFNRUJVRkZFUjozNjAwOCxEUkFXX0ZSQU1FQlVGRkVSOjM2MDA5LFJFQURfRlJBTUVCVUZGRVJfQklORElORzozNjAxMCxSRU5ERVJCVUZGRVJfU0FNUExFUzozNjAxMSxGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX1RFWFRVUkVfTEFZRVI6MzYwNTIsTUFYX0NPTE9SX0FUVEFDSE1FTlRTOjM2MDYzLENPTE9SX0FUVEFDSE1FTlQxOjM2MDY1LENPTE9SX0FUVEFDSE1FTlQyOjM2MDY2LENPTE9SX0FUVEFDSE1FTlQzOjM2MDY3LENPTE9SX0FUVEFDSE1FTlQ0OjM2MDY4LENPTE9SX0FUVEFDSE1FTlQ1OjM2MDY5LENPTE9SX0FUVEFDSE1FTlQ2OjM2MDcwLENPTE9SX0FUVEFDSE1FTlQ3OjM2MDcxLENPTE9SX0FUVEFDSE1FTlQ4OjM2MDcyLENPTE9SX0FUVEFDSE1FTlQ5OjM2MDczLENPTE9SX0FUVEFDSE1FTlQxMDozNjA3NCxDT0xPUl9BVFRBQ0hNRU5UMTE6MzYwNzUsQ09MT1JfQVRUQUNITUVOVDEyOjM2MDc2LENPTE9SX0FUVEFDSE1FTlQxMzozNjA3NyxDT0xPUl9BVFRBQ0hNRU5UMTQ6MzYwNzgsQ09MT1JfQVRUQUNITUVOVDE1OjM2MDc5LEZSQU1FQlVGRkVSX0lOQ09NUExFVEVfTVVMVElTQU1QTEU6MzYxODIsTUFYX1NBTVBMRVM6MzYxODMsSEFMRl9GTE9BVDo1MTMxLFJHOjMzMzE5LFJHX0lOVEVHRVI6MzMzMjAsUjg6MzMzMjEsUkc4OjMzMzIzLFIxNkY6MzMzMjUsUjMyRjozMzMyNixSRzE2RjozMzMyNyxSRzMyRjozMzMyOCxSOEk6MzMzMjksUjhVSTozMzMzMCxSMTZJOjMzMzMxLFIxNlVJOjMzMzMyLFIzMkk6MzMzMzMsUjMyVUk6MzMzMzQsUkc4STozMzMzNSxSRzhVSTozMzMzNixSRzE2STozMzMzNyxSRzE2VUk6MzMzMzgsUkczMkk6MzMzMzksUkczMlVJOjMzMzQwLFZFUlRFWF9BUlJBWV9CSU5ESU5HOjM0MjI5LFI4X1NOT1JNOjM2NzU2LFJHOF9TTk9STTozNjc1NyxSR0I4X1NOT1JNOjM2NzU4LFJHQkE4X1NOT1JNOjM2NzU5LFNJR05FRF9OT1JNQUxJWkVEOjM2NzY0LENPUFlfUkVBRF9CVUZGRVI6MzY2NjIsQ09QWV9XUklURV9CVUZGRVI6MzY2NjMsQ09QWV9SRUFEX0JVRkZFUl9CSU5ESU5HOjM2NjYyLENPUFlfV1JJVEVfQlVGRkVSX0JJTkRJTkc6MzY2NjMsVU5JRk9STV9CVUZGRVI6MzUzNDUsVU5JRk9STV9CVUZGRVJfQklORElORzozNTM2OCxVTklGT1JNX0JVRkZFUl9TVEFSVDozNTM2OSxVTklGT1JNX0JVRkZFUl9TSVpFOjM1MzcwLE1BWF9WRVJURVhfVU5JRk9STV9CTE9DS1M6MzUzNzEsTUFYX0ZSQUdNRU5UX1VOSUZPUk1fQkxPQ0tTOjM1MzczLE1BWF9DT01CSU5FRF9VTklGT1JNX0JMT0NLUzozNTM3NCxNQVhfVU5JRk9STV9CVUZGRVJfQklORElOR1M6MzUzNzUsTUFYX1VOSUZPUk1fQkxPQ0tfU0laRTozNTM3NixNQVhfQ09NQklORURfVkVSVEVYX1VOSUZPUk1fQ09NUE9ORU5UUzozNTM3NyxNQVhfQ09NQklORURfRlJBR01FTlRfVU5JRk9STV9DT01QT05FTlRTOjM1Mzc5LFVOSUZPUk1fQlVGRkVSX09GRlNFVF9BTElHTk1FTlQ6MzUzODAsQUNUSVZFX1VOSUZPUk1fQkxPQ0tTOjM1MzgyLFVOSUZPUk1fVFlQRTozNTM4MyxVTklGT1JNX1NJWkU6MzUzODQsVU5JRk9STV9CTE9DS19JTkRFWDozNTM4NixVTklGT1JNX09GRlNFVDozNTM4NyxVTklGT1JNX0FSUkFZX1NUUklERTozNTM4OCxVTklGT1JNX01BVFJJWF9TVFJJREU6MzUzODksVU5JRk9STV9JU19ST1dfTUFKT1I6MzUzOTAsVU5JRk9STV9CTE9DS19CSU5ESU5HOjM1MzkxLFVOSUZPUk1fQkxPQ0tfREFUQV9TSVpFOjM1MzkyLFVOSUZPUk1fQkxPQ0tfQUNUSVZFX1VOSUZPUk1TOjM1Mzk0LFVOSUZPUk1fQkxPQ0tfQUNUSVZFX1VOSUZPUk1fSU5ESUNFUzozNTM5NSxVTklGT1JNX0JMT0NLX1JFRkVSRU5DRURfQllfVkVSVEVYX1NIQURFUjozNTM5NixVTklGT1JNX0JMT0NLX1JFRkVSRU5DRURfQllfRlJBR01FTlRfU0hBREVSOjM1Mzk4LElOVkFMSURfSU5ERVg6NDI5NDk2NzI5NSxNQVhfVkVSVEVYX09VVFBVVF9DT01QT05FTlRTOjM3MTU0LE1BWF9GUkFHTUVOVF9JTlBVVF9DT01QT05FTlRTOjM3MTU3LE1BWF9TRVJWRVJfV0FJVF9USU1FT1VUOjM3MTM3LE9CSkVDVF9UWVBFOjM3MTM4LFNZTkNfQ09ORElUSU9OOjM3MTM5LFNZTkNfU1RBVFVTOjM3MTQwLFNZTkNfRkxBR1M6MzcxNDEsU1lOQ19GRU5DRTozNzE0MixTWU5DX0dQVV9DT01NQU5EU19DT01QTEVURTozNzE0MyxVTlNJR05BTEVEOjM3MTQ0LFNJR05BTEVEOjM3MTQ1LEFMUkVBRFlfU0lHTkFMRUQ6MzcxNDYsVElNRU9VVF9FWFBJUkVEOjM3MTQ3LENPTkRJVElPTl9TQVRJU0ZJRUQ6MzcxNDgsV0FJVF9GQUlMRUQ6MzcxNDksU1lOQ19GTFVTSF9DT01NQU5EU19CSVQ6MSxWRVJURVhfQVRUUklCX0FSUkFZX0RJVklTT1I6MzUwNzAsQU5ZX1NBTVBMRVNfUEFTU0VEOjM1ODg3LEFOWV9TQU1QTEVTX1BBU1NFRF9DT05TRVJWQVRJVkU6MzYyMDIsU0FNUExFUl9CSU5ESU5HOjM1MDk3LFJHQjEwX0EyVUk6MzY5NzUsSU5UXzJfMTBfMTBfMTBfUkVWOjM2MjU1LFRSQU5TRk9STV9GRUVEQkFDSzozNjM4NixUUkFOU0ZPUk1fRkVFREJBQ0tfUEFVU0VEOjM2Mzg3LFRSQU5TRk9STV9GRUVEQkFDS19BQ1RJVkU6MzYzODgsVFJBTlNGT1JNX0ZFRURCQUNLX0JJTkRJTkc6MzYzODksQ09NUFJFU1NFRF9SMTFfRUFDOjM3NDg4LENPTVBSRVNTRURfU0lHTkVEX1IxMV9FQUM6Mzc0ODksQ09NUFJFU1NFRF9SRzExX0VBQzozNzQ5MCxDT01QUkVTU0VEX1NJR05FRF9SRzExX0VBQzozNzQ5MSxDT01QUkVTU0VEX1JHQjhfRVRDMjozNzQ5MixDT01QUkVTU0VEX1NSR0I4X0VUQzI6Mzc0OTMsQ09NUFJFU1NFRF9SR0I4X1BVTkNIVEhST1VHSF9BTFBIQTFfRVRDMjozNzQ5NCxDT01QUkVTU0VEX1NSR0I4X1BVTkNIVEhST1VHSF9BTFBIQTFfRVRDMjozNzQ5NSxDT01QUkVTU0VEX1JHQkE4X0VUQzJfRUFDOjM3NDk2LENPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0VUQzJfRUFDOjM3NDk3LFRFWFRVUkVfSU1NVVRBQkxFX0ZPUk1BVDozNzE2NyxNQVhfRUxFTUVOVF9JTkRFWDozNjIwMyxURVhUVVJFX0lNTVVUQUJMRV9MRVZFTFM6MzM1MDMsTUFYX1RFWFRVUkVfTUFYX0FOSVNPVFJPUFlfRVhUOjM0MDQ3fSxQZT1PYmplY3QuZnJlZXplKGJOKX0pO3ZhciBvdCxuZSx2dD1YKCgpPT57c2UoKTtvYygpO290PXtCWVRFOlBlLkJZVEUsVU5TSUdORURfQllURTpQZS5VTlNJR05FRF9CWVRFLFNIT1JUOlBlLlNIT1JULFVOU0lHTkVEX1NIT1JUOlBlLlVOU0lHTkVEX1NIT1JULElOVDpQZS5JTlQsVU5TSUdORURfSU5UOlBlLlVOU0lHTkVEX0lOVCxGTE9BVDpQZS5GTE9BVCxET1VCTEU6UGUuRE9VQkxFfTtvdC5nZXRTaXplSW5CeXRlcz1mdW5jdGlvbihlKXtzd2l0Y2goZSl7Y2FzZSBvdC5CWVRFOnJldHVybiBJbnQ4QXJyYXkuQllURVNfUEVSX0VMRU1FTlQ7Y2FzZSBvdC5VTlNJR05FRF9CWVRFOnJldHVybiBVaW50OEFycmF5LkJZVEVTX1BFUl9FTEVNRU5UO2Nhc2Ugb3QuU0hPUlQ6cmV0dXJuIEludDE2QXJyYXkuQllURVNfUEVSX0VMRU1FTlQ7Y2FzZSBvdC5VTlNJR05FRF9TSE9SVDpyZXR1cm4gVWludDE2QXJyYXkuQllURVNfUEVSX0VMRU1FTlQ7Y2FzZSBvdC5JTlQ6cmV0dXJuIEludDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQ7Y2FzZSBvdC5VTlNJR05FRF9JTlQ6cmV0dXJuIFVpbnQzMkFycmF5LkJZVEVTX1BFUl9FTEVNRU5UO2Nhc2Ugb3QuRkxPQVQ6cmV0dXJuIEZsb2F0MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVDtjYXNlIG90LkRPVUJMRTpyZXR1cm4gRmxvYXQ2NEFycmF5LkJZVEVTX1BFUl9FTEVNRU5UfX07b3QuZnJvbVR5cGVkQXJyYXk9ZnVuY3Rpb24oZSl7aWYoZSBpbnN0YW5jZW9mIEludDhBcnJheSlyZXR1cm4gb3QuQllURTtpZihlIGluc3RhbmNlb2YgVWludDhBcnJheSlyZXR1cm4gb3QuVU5TSUdORURfQllURTtpZihlIGluc3RhbmNlb2YgSW50MTZBcnJheSlyZXR1cm4gb3QuU0hPUlQ7aWYoZSBpbnN0YW5jZW9mIFVpbnQxNkFycmF5KXJldHVybiBvdC5VTlNJR05FRF9TSE9SVDtpZihlIGluc3RhbmNlb2YgSW50MzJBcnJheSlyZXR1cm4gb3QuSU5UO2lmKGUgaW5zdGFuY2VvZiBVaW50MzJBcnJheSlyZXR1cm4gb3QuVU5TSUdORURfSU5UO2lmKGUgaW5zdGFuY2VvZiBGbG9hdDMyQXJyYXkpcmV0dXJuIG90LkZMT0FUO2lmKGUgaW5zdGFuY2VvZiBGbG9hdDY0QXJyYXkpcmV0dXJuIG90LkRPVUJMRX07b3QudmFsaWRhdGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGcoZSkmJihlPT09b3QuQllURXx8ZT09PW90LlVOU0lHTkVEX0JZVEV8fGU9PT1vdC5TSE9SVHx8ZT09PW90LlVOU0lHTkVEX1NIT1JUfHxlPT09b3QuSU5UfHxlPT09b3QuVU5TSUdORURfSU5UfHxlPT09b3QuRkxPQVR8fGU9PT1vdC5ET1VCTEUpfTtvdC5jcmVhdGVUeXBlZEFycmF5PWZ1bmN0aW9uKGUsdCl7c3dpdGNoKGUpe2Nhc2Ugb3QuQllURTpyZXR1cm4gbmV3IEludDhBcnJheSh0KTtjYXNlIG90LlVOU0lHTkVEX0JZVEU6cmV0dXJuIG5ldyBVaW50OEFycmF5KHQpO2Nhc2Ugb3QuU0hPUlQ6cmV0dXJuIG5ldyBJbnQxNkFycmF5KHQpO2Nhc2Ugb3QuVU5TSUdORURfU0hPUlQ6cmV0dXJuIG5ldyBVaW50MTZBcnJheSh0KTtjYXNlIG90LklOVDpyZXR1cm4gbmV3IEludDMyQXJyYXkodCk7Y2FzZSBvdC5VTlNJR05FRF9JTlQ6cmV0dXJuIG5ldyBVaW50MzJBcnJheSh0KTtjYXNlIG90LkZMT0FUOnJldHVybiBuZXcgRmxvYXQzMkFycmF5KHQpO2Nhc2Ugb3QuRE9VQkxFOnJldHVybiBuZXcgRmxvYXQ2NEFycmF5KHQpfX07b3QuY3JlYXRlQXJyYXlCdWZmZXJWaWV3PWZ1bmN0aW9uKGUsdCxuLG8pe3N3aXRjaChuPW4/PzAsbz1vPz8odC5ieXRlTGVuZ3RoLW4pL290LmdldFNpemVJbkJ5dGVzKGUpLGUpe2Nhc2Ugb3QuQllURTpyZXR1cm4gbmV3IEludDhBcnJheSh0LG4sbyk7Y2FzZSBvdC5VTlNJR05FRF9CWVRFOnJldHVybiBuZXcgVWludDhBcnJheSh0LG4sbyk7Y2FzZSBvdC5TSE9SVDpyZXR1cm4gbmV3IEludDE2QXJyYXkodCxuLG8pO2Nhc2Ugb3QuVU5TSUdORURfU0hPUlQ6cmV0dXJuIG5ldyBVaW50MTZBcnJheSh0LG4sbyk7Y2FzZSBvdC5JTlQ6cmV0dXJuIG5ldyBJbnQzMkFycmF5KHQsbixvKTtjYXNlIG90LlVOU0lHTkVEX0lOVDpyZXR1cm4gbmV3IFVpbnQzMkFycmF5KHQsbixvKTtjYXNlIG90LkZMT0FUOnJldHVybiBuZXcgRmxvYXQzMkFycmF5KHQsbixvKTtjYXNlIG90LkRPVUJMRTpyZXR1cm4gbmV3IEZsb2F0NjRBcnJheSh0LG4sbyl9fTtvdC5mcm9tTmFtZT1mdW5jdGlvbihlKXtzd2l0Y2goZSl7Y2FzZSJCWVRFIjpyZXR1cm4gb3QuQllURTtjYXNlIlVOU0lHTkVEX0JZVEUiOnJldHVybiBvdC5VTlNJR05FRF9CWVRFO2Nhc2UiU0hPUlQiOnJldHVybiBvdC5TSE9SVDtjYXNlIlVOU0lHTkVEX1NIT1JUIjpyZXR1cm4gb3QuVU5TSUdORURfU0hPUlQ7Y2FzZSJJTlQiOnJldHVybiBvdC5JTlQ7Y2FzZSJVTlNJR05FRF9JTlQiOnJldHVybiBvdC5VTlNJR05FRF9JTlQ7Y2FzZSJGTE9BVCI6cmV0dXJuIG90LkZMT0FUO2Nhc2UiRE9VQkxFIjpyZXR1cm4gb3QuRE9VQkxFfX07bmU9T2JqZWN0LmZyZWV6ZShvdCl9KTt2YXIgcE4sQnIsemw9WCgoKT0+e3BOPXtOT05FOjAsVFJJQU5HTEVTOjEsTElORVM6MixQT0xZTElORVM6M30sQnI9T2JqZWN0LmZyZWV6ZShwTil9KTtmdW5jdGlvbiBIZShlLHQsbixvKXt0aGlzWzBdPWU/PzAsdGhpc1sxXT1uPz8wLHRoaXNbMl09dD8/MCx0aGlzWzNdPW8/PzB9dmFyIGdOLF9OLGV3LHR3LHlOLEFOLFFvLFNmPVgoKCk9PntqdCgpO3NlKCk7SGUucGFja2VkTGVuZ3RoPTQ7SGUucGFjaz1mdW5jdGlvbihlLHQsbil7cmV0dXJuIG49bj8/MCx0W24rK109ZVswXSx0W24rK109ZVsxXSx0W24rK109ZVsyXSx0W24rK109ZVszXSx0fTtIZS51bnBhY2s9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB0PXQ/PzAsZyhuKXx8KG49bmV3IEhlKSxuWzBdPWVbdCsrXSxuWzFdPWVbdCsrXSxuWzJdPWVbdCsrXSxuWzNdPWVbdCsrXSxufTtIZS5wYWNrQXJyYXk9ZnVuY3Rpb24oZSx0KXtsZXQgbj1lLmxlbmd0aCxvPW4qNDtnKHQpPyFBcnJheS5pc0FycmF5KHQpJiZ0Lmxlbmd0aCE9PW98fHQubGVuZ3RoIT09byYmKHQubGVuZ3RoPW8pOnQ9bmV3IEFycmF5KG8pO2ZvcihsZXQgYT0wO2E8bjsrK2EpSGUucGFjayhlW2FdLHQsYSo0KTtyZXR1cm4gdH07SGUudW5wYWNrQXJyYXk9ZnVuY3Rpb24oZSx0KXtsZXQgbj1lLmxlbmd0aDtnKHQpP3QubGVuZ3RoPW4vNDp0PW5ldyBBcnJheShuLzQpO2ZvcihsZXQgbz0wO288bjtvKz00KXtsZXQgYT1vLzQ7dFthXT1IZS51bnBhY2soZSxvLHRbYV0pfXJldHVybiB0fTtIZS5jbG9uZT1mdW5jdGlvbihlLHQpe2lmKGcoZSkpcmV0dXJuIGcodCk/KHRbMF09ZVswXSx0WzFdPWVbMV0sdFsyXT1lWzJdLHRbM109ZVszXSx0KTpuZXcgSGUoZVswXSxlWzJdLGVbMV0sZVszXSl9O0hlLmZyb21BcnJheT1IZS51bnBhY2s7SGUuZnJvbUNvbHVtbk1ham9yQXJyYXk9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gSGUuY2xvbmUoZSx0KX07SGUuZnJvbVJvd01ham9yQXJyYXk9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZyh0KT8odFswXT1lWzBdLHRbMV09ZVsyXSx0WzJdPWVbMV0sdFszXT1lWzNdLHQpOm5ldyBIZShlWzBdLGVbMV0sZVsyXSxlWzNdKX07SGUuZnJvbVNjYWxlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGcodCk/KHRbMF09ZS54LHRbMV09MCx0WzJdPTAsdFszXT1lLnksdCk6bmV3IEhlKGUueCwwLDAsZS55KX07SGUuZnJvbVVuaWZvcm1TY2FsZT1mdW5jdGlvbihlLHQpe3JldHVybiBnKHQpPyh0WzBdPWUsdFsxXT0wLHRbMl09MCx0WzNdPWUsdCk6bmV3IEhlKGUsMCwwLGUpfTtIZS5mcm9tUm90YXRpb249ZnVuY3Rpb24oZSx0KXtsZXQgbj1NYXRoLmNvcyhlKSxvPU1hdGguc2luKGUpO3JldHVybiBnKHQpPyh0WzBdPW4sdFsxXT1vLHRbMl09LW8sdFszXT1uLHQpOm5ldyBIZShuLC1vLG8sbil9O0hlLnRvQXJyYXk9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZyh0KT8odFswXT1lWzBdLHRbMV09ZVsxXSx0WzJdPWVbMl0sdFszXT1lWzNdLHQpOltlWzBdLGVbMV0sZVsyXSxlWzNdXX07SGUuZ2V0RWxlbWVudEluZGV4PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUqMit0fTtIZS5nZXRDb2x1bW49ZnVuY3Rpb24oZSx0LG4pe2xldCBvPXQqMixhPWVbb10scj1lW28rMV07cmV0dXJuIG4ueD1hLG4ueT1yLG59O0hlLnNldENvbHVtbj1mdW5jdGlvbihlLHQsbixvKXtvPUhlLmNsb25lKGUsbyk7bGV0IGE9dCoyO3JldHVybiBvW2FdPW4ueCxvW2ErMV09bi55LG99O0hlLmdldFJvdz1mdW5jdGlvbihlLHQsbil7bGV0IG89ZVt0XSxhPWVbdCsyXTtyZXR1cm4gbi54PW8sbi55PWEsbn07SGUuc2V0Um93PWZ1bmN0aW9uKGUsdCxuLG8pe3JldHVybiBvPUhlLmNsb25lKGUsbyksb1t0XT1uLngsb1t0KzJdPW4ueSxvfTtnTj1uZXcgWTtIZS5zZXRTY2FsZT1mdW5jdGlvbihlLHQsbil7bGV0IG89SGUuZ2V0U2NhbGUoZSxnTiksYT10Lngvby54LHI9dC55L28ueTtyZXR1cm4gblswXT1lWzBdKmEsblsxXT1lWzFdKmEsblsyXT1lWzJdKnIsblszXT1lWzNdKnIsbn07X049bmV3IFk7SGUuc2V0VW5pZm9ybVNjYWxlPWZ1bmN0aW9uKGUsdCxuKXtsZXQgbz1IZS5nZXRTY2FsZShlLF9OKSxhPXQvby54LHI9dC9vLnk7cmV0dXJuIG5bMF09ZVswXSphLG5bMV09ZVsxXSphLG5bMl09ZVsyXSpyLG5bM109ZVszXSpyLG59O2V3PW5ldyBZO0hlLmdldFNjYWxlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQueD1ZLm1hZ25pdHVkZShZLmZyb21FbGVtZW50cyhlWzBdLGVbMV0sZXcpKSx0Lnk9WS5tYWduaXR1ZGUoWS5mcm9tRWxlbWVudHMoZVsyXSxlWzNdLGV3KSksdH07dHc9bmV3IFk7SGUuZ2V0TWF4aW11bVNjYWxlPWZ1bmN0aW9uKGUpe3JldHVybiBIZS5nZXRTY2FsZShlLHR3KSxZLm1heGltdW1Db21wb25lbnQodHcpfTt5Tj1uZXcgWTtIZS5zZXRSb3RhdGlvbj1mdW5jdGlvbihlLHQsbil7bGV0IG89SGUuZ2V0U2NhbGUoZSx5Tik7cmV0dXJuIG5bMF09dFswXSpvLngsblsxXT10WzFdKm8ueCxuWzJdPXRbMl0qby55LG5bM109dFszXSpvLnksbn07QU49bmV3IFk7SGUuZ2V0Um90YXRpb249ZnVuY3Rpb24oZSx0KXtsZXQgbj1IZS5nZXRTY2FsZShlLEFOKTtyZXR1cm4gdFswXT1lWzBdL24ueCx0WzFdPWVbMV0vbi54LHRbMl09ZVsyXS9uLnksdFszXT1lWzNdL24ueSx0fTtIZS5tdWx0aXBseT1mdW5jdGlvbihlLHQsbil7bGV0IG89ZVswXSp0WzBdK2VbMl0qdFsxXSxhPWVbMF0qdFsyXStlWzJdKnRbM10scj1lWzFdKnRbMF0rZVszXSp0WzFdLGk9ZVsxXSp0WzJdK2VbM10qdFszXTtyZXR1cm4gblswXT1vLG5bMV09cixuWzJdPWEsblszXT1pLG59O0hlLmFkZD1mdW5jdGlvbihlLHQsbil7cmV0dXJuIG5bMF09ZVswXSt0WzBdLG5bMV09ZVsxXSt0WzFdLG5bMl09ZVsyXSt0WzJdLG5bM109ZVszXSt0WzNdLG59O0hlLnN1YnRyYWN0PWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gblswXT1lWzBdLXRbMF0sblsxXT1lWzFdLXRbMV0sblsyXT1lWzJdLXRbMl0sblszXT1lWzNdLXRbM10sbn07SGUubXVsdGlwbHlCeVZlY3Rvcj1mdW5jdGlvbihlLHQsbil7bGV0IG89ZVswXSp0LngrZVsyXSp0LnksYT1lWzFdKnQueCtlWzNdKnQueTtyZXR1cm4gbi54PW8sbi55PWEsbn07SGUubXVsdGlwbHlCeVNjYWxhcj1mdW5jdGlvbihlLHQsbil7cmV0dXJuIG5bMF09ZVswXSp0LG5bMV09ZVsxXSp0LG5bMl09ZVsyXSp0LG5bM109ZVszXSp0LG59O0hlLm11bHRpcGx5QnlTY2FsZT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIG5bMF09ZVswXSp0LngsblsxXT1lWzFdKnQueCxuWzJdPWVbMl0qdC55LG5bM109ZVszXSp0Lnksbn07SGUubXVsdGlwbHlCeVVuaWZvcm1TY2FsZT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIG5bMF09ZVswXSp0LG5bMV09ZVsxXSp0LG5bMl09ZVsyXSp0LG5bM109ZVszXSp0LG59O0hlLm5lZ2F0ZT1mdW5jdGlvbihlLHQpe3JldHVybiB0WzBdPS1lWzBdLHRbMV09LWVbMV0sdFsyXT0tZVsyXSx0WzNdPS1lWzNdLHR9O0hlLnRyYW5zcG9zZT1mdW5jdGlvbihlLHQpe2xldCBuPWVbMF0sbz1lWzJdLGE9ZVsxXSxyPWVbM107cmV0dXJuIHRbMF09bix0WzFdPW8sdFsyXT1hLHRbM109cix0fTtIZS5hYnM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdFswXT1NYXRoLmFicyhlWzBdKSx0WzFdPU1hdGguYWJzKGVbMV0pLHRbMl09TWF0aC5hYnMoZVsyXSksdFszXT1NYXRoLmFicyhlWzNdKSx0fTtIZS5lcXVhbHM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT09PXR8fGcoZSkmJmcodCkmJmVbMF09PT10WzBdJiZlWzFdPT09dFsxXSYmZVsyXT09PXRbMl0mJmVbM109PT10WzNdfTtIZS5lcXVhbHNBcnJheT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGVbMF09PT10W25dJiZlWzFdPT09dFtuKzFdJiZlWzJdPT09dFtuKzJdJiZlWzNdPT09dFtuKzNdfTtIZS5lcXVhbHNFcHNpbG9uPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gbj1uPz8wLGU9PT10fHxnKGUpJiZnKHQpJiZNYXRoLmFicyhlWzBdLXRbMF0pPD1uJiZNYXRoLmFicyhlWzFdLXRbMV0pPD1uJiZNYXRoLmFicyhlWzJdLXRbMl0pPD1uJiZNYXRoLmFicyhlWzNdLXRbM10pPD1ufTtIZS5JREVOVElUWT1PYmplY3QuZnJlZXplKG5ldyBIZSgxLDAsMCwxKSk7SGUuWkVSTz1PYmplY3QuZnJlZXplKG5ldyBIZSgwLDAsMCwwKSk7SGUuQ09MVU1OMFJPVzA9MDtIZS5DT0xVTU4wUk9XMT0xO0hlLkNPTFVNTjFST1cwPTI7SGUuQ09MVU1OMVJPVzE9MztPYmplY3QuZGVmaW5lUHJvcGVydGllcyhIZS5wcm90b3R5cGUse2xlbmd0aDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEhlLnBhY2tlZExlbmd0aH19fSk7SGUucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKGUpe3JldHVybiBIZS5jbG9uZSh0aGlzLGUpfTtIZS5wcm90b3R5cGUuZXF1YWxzPWZ1bmN0aW9uKGUpe3JldHVybiBIZS5lcXVhbHModGhpcyxlKX07SGUucHJvdG90eXBlLmVxdWFsc0Vwc2lsb249ZnVuY3Rpb24oZSx0KXtyZXR1cm4gSGUuZXF1YWxzRXBzaWxvbih0aGlzLGUsdCl9O0hlLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybmAoJHt0aGlzWzBdfSwgJHt0aGlzWzJdfSkKKCR7dGhpc1sxXX0sICR7dGhpc1szXX0pYH07UW89SGV9KTt2YXIgRW8sVWUsY249WCgoKT0+e29jKCk7RW89e1BPSU5UUzpQZS5QT0lOVFMsTElORVM6UGUuTElORVMsTElORV9MT09QOlBlLkxJTkVfTE9PUCxMSU5FX1NUUklQOlBlLkxJTkVfU1RSSVAsVFJJQU5HTEVTOlBlLlRSSUFOR0xFUyxUUklBTkdMRV9TVFJJUDpQZS5UUklBTkdMRV9TVFJJUCxUUklBTkdMRV9GQU46UGUuVFJJQU5HTEVfRkFOfTtFby5pc0xpbmVzPWZ1bmN0aW9uKGUpe3JldHVybiBlPT09RW8uTElORVN8fGU9PT1Fby5MSU5FX0xPT1B8fGU9PT1Fby5MSU5FX1NUUklQfTtFby5pc1RyaWFuZ2xlcz1mdW5jdGlvbihlKXtyZXR1cm4gZT09PUVvLlRSSUFOR0xFU3x8ZT09PUVvLlRSSUFOR0xFX1NUUklQfHxlPT09RW8uVFJJQU5HTEVfRkFOfTtFby52YWxpZGF0ZT1mdW5jdGlvbihlKXtyZXR1cm4gZT09PUVvLlBPSU5UU3x8ZT09PUVvLkxJTkVTfHxlPT09RW8uTElORV9MT09QfHxlPT09RW8uTElORV9TVFJJUHx8ZT09PUVvLlRSSUFOR0xFU3x8ZT09PUVvLlRSSUFOR0xFX1NUUklQfHxlPT09RW8uVFJJQU5HTEVfRkFOfTtVZT1PYmplY3QuZnJlZXplKEVvKX0pO2Z1bmN0aW9uIFFiKGUpe2U9ZT8/Q2UuRU1QVFlfT0JKRUNULHRoaXMuYXR0cmlidXRlcz1lLmF0dHJpYnV0ZXMsdGhpcy5pbmRpY2VzPWUuaW5kaWNlcyx0aGlzLnByaW1pdGl2ZVR5cGU9ZS5wcmltaXRpdmVUeXBlPz9VZS5UUklBTkdMRVMsdGhpcy5ib3VuZGluZ1NwaGVyZT1lLmJvdW5kaW5nU3BoZXJlLHRoaXMuZ2VvbWV0cnlUeXBlPWUuZ2VvbWV0cnlUeXBlPz9Cci5OT05FLHRoaXMuYm91bmRpbmdTcGhlcmVDVj1lLmJvdW5kaW5nU3BoZXJlQ1YsdGhpcy5vZmZzZXRBdHRyaWJ1dGU9ZS5vZmZzZXRBdHRyaWJ1dGV9dmFyIHdOLFROLG53LEVOLFJOLHhOLE9OLFNOLENOLE1OLHZlLCR0PVgoKCk9PntqdCgpO0llKCk7VHQoKTttdCgpO3NlKCk7emwoKTtTZigpO0RuKCk7cG4oKTtjbigpO0pvKCk7X24oKTtzcigpO1FiLmNvbXB1dGVOdW1iZXJPZlZlcnRpY2VzPWZ1bmN0aW9uKGUpe2xldCB0PS0xO2ZvcihsZXQgbiBpbiBlLmF0dHJpYnV0ZXMpaWYoZS5hdHRyaWJ1dGVzLmhhc093blByb3BlcnR5KG4pJiZnKGUuYXR0cmlidXRlc1tuXSkmJmcoZS5hdHRyaWJ1dGVzW25dLnZhbHVlcykpe2xldCBvPWUuYXR0cmlidXRlc1tuXTt0PW8udmFsdWVzLmxlbmd0aC9vLmNvbXBvbmVudHNQZXJBdHRyaWJ1dGV9cmV0dXJuIHR9O3dOPW5ldyByZSxUTj1uZXcgcyxudz1uZXcgJCxFTj1bbmV3IHJlLG5ldyByZSxuZXcgcmVdLFJOPVtuZXcgWSxuZXcgWSxuZXcgWV0seE49W25ldyBZLG5ldyBZLG5ldyBZXSxPTj1uZXcgcyxTTj1uZXcgWmUsQ049bmV3ICQsTU49bmV3IFFvO1FiLl90ZXh0dXJlQ29vcmRpbmF0ZVJvdGF0aW9uUG9pbnRzPWZ1bmN0aW9uKGUsdCxuLG8pe2xldCBhLHI9U2UuY2VudGVyKG8sd04pLGk9cmUudG9DYXJ0ZXNpYW4ocixuLFROKSxmPWNvLmVhc3ROb3J0aFVwVG9GaXhlZEZyYW1lKGksbixudyksZD0kLmludmVyc2UoZixudyksYz1STix1PUVOO3VbMF0ubG9uZ2l0dWRlPW8ud2VzdCx1WzBdLmxhdGl0dWRlPW8uc291dGgsdVsxXS5sb25naXR1ZGU9by53ZXN0LHVbMV0ubGF0aXR1ZGU9by5ub3J0aCx1WzJdLmxvbmdpdHVkZT1vLmVhc3QsdVsyXS5sYXRpdHVkZT1vLnNvdXRoO2xldCBsPU9OO2ZvcihhPTA7YTwzO2ErKylyZS50b0NhcnRlc2lhbih1W2FdLG4sbCksbD0kLm11bHRpcGx5QnlQb2ludEFzVmVjdG9yKGQsbCxsKSxjW2FdLng9bC54LGNbYV0ueT1sLnk7bGV0IGg9WmUuZnJvbUF4aXNBbmdsZShzLlVOSVRfWiwtdCxTTiksbT1KLmZyb21RdWF0ZXJuaW9uKGgsQ04pLGI9ZS5sZW5ndGgscD1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkseT1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksVD1OdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFksXz1OdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFk7Zm9yKGE9MDthPGI7YSsrKWw9JC5tdWx0aXBseUJ5UG9pbnRBc1ZlY3RvcihkLGVbYV0sbCksbD1KLm11bHRpcGx5QnlWZWN0b3IobSxsLGwpLHA9TWF0aC5taW4ocCxsLngpLHk9TWF0aC5taW4oeSxsLnkpLFQ9TWF0aC5tYXgoVCxsLngpLF89TWF0aC5tYXgoXyxsLnkpO2xldCBFPVFvLmZyb21Sb3RhdGlvbih0LE1OKSx3PXhOO3dbMF0ueD1wLHdbMF0ueT15LHdbMV0ueD1wLHdbMV0ueT1fLHdbMl0ueD1ULHdbMl0ueT15O2xldCBSPWNbMF0sUz1jWzJdLngtUi54LEM9Y1sxXS55LVIueTtmb3IoYT0wO2E8MzthKyspe2xldCBBPXdbYV07UW8ubXVsdGlwbHlCeVZlY3RvcihFLEEsQSksQS54PShBLngtUi54KS9TLEEueT0oQS55LVIueSkvQ31sZXQgST13WzBdLE49d1sxXSxQPXdbMl0sRj1uZXcgQXJyYXkoNik7cmV0dXJuIFkucGFjayhJLEYpLFkucGFjayhOLEYsMiksWS5wYWNrKFAsRiw0KSxGfTt2ZT1RYn0pO2Z1bmN0aW9uIE5OKGUpe2U9ZT8/Q2UuRU1QVFlfT0JKRUNULHRoaXMuY29tcG9uZW50RGF0YXR5cGU9ZS5jb21wb25lbnREYXRhdHlwZSx0aGlzLmNvbXBvbmVudHNQZXJBdHRyaWJ1dGU9ZS5jb21wb25lbnRzUGVyQXR0cmlidXRlLHRoaXMubm9ybWFsaXplPWUubm9ybWFsaXplPz8hMSx0aGlzLnZhbHVlcz1lLnZhbHVlc312YXIgaWUsZW49WCgoKT0+e210KCk7aWU9Tk59KTtmdW5jdGlvbiBJTihlKXtlPWU/P0NlLkVNUFRZX09CSkVDVCx0aGlzLnBvc2l0aW9uPWUucG9zaXRpb24sdGhpcy5ub3JtYWw9ZS5ub3JtYWwsdGhpcy5zdD1lLnN0LHRoaXMuYml0YW5nZW50PWUuYml0YW5nZW50LHRoaXMudGFuZ2VudD1lLnRhbmdlbnQsdGhpcy5jb2xvcj1lLmNvbG9yfXZhciBudCx1bj1YKCgpPT57bXQoKTtudD1JTn0pO3ZhciBZdCxvdyxhdz1YKCgpPT57anQoKTtJZSgpO2dhKCk7U2YoKTtEbigpO3BuKCk7WXQ9e1NDQUxBUjoiU0NBTEFSIixWRUMyOiJWRUMyIixWRUMzOiJWRUMzIixWRUM0OiJWRUM0IixNQVQyOiJNQVQyIixNQVQzOiJNQVQzIixNQVQ0OiJNQVQ0In07WXQuZ2V0TWF0aFR5cGU9ZnVuY3Rpb24oZSl7c3dpdGNoKGUpe2Nhc2UgWXQuU0NBTEFSOnJldHVybiBOdW1iZXI7Y2FzZSBZdC5WRUMyOnJldHVybiBZO2Nhc2UgWXQuVkVDMzpyZXR1cm4gcztjYXNlIFl0LlZFQzQ6cmV0dXJuIGR0O2Nhc2UgWXQuTUFUMjpyZXR1cm4gUW87Y2FzZSBZdC5NQVQzOnJldHVybiBKO2Nhc2UgWXQuTUFUNDpyZXR1cm4gJH19O1l0LmdldE51bWJlck9mQ29tcG9uZW50cz1mdW5jdGlvbihlKXtzd2l0Y2goZSl7Y2FzZSBZdC5TQ0FMQVI6cmV0dXJuIDE7Y2FzZSBZdC5WRUMyOnJldHVybiAyO2Nhc2UgWXQuVkVDMzpyZXR1cm4gMztjYXNlIFl0LlZFQzQ6Y2FzZSBZdC5NQVQyOnJldHVybiA0O2Nhc2UgWXQuTUFUMzpyZXR1cm4gOTtjYXNlIFl0Lk1BVDQ6cmV0dXJuIDE2fX07WXQuZ2V0QXR0cmlidXRlTG9jYXRpb25Db3VudD1mdW5jdGlvbihlKXtzd2l0Y2goZSl7Y2FzZSBZdC5TQ0FMQVI6Y2FzZSBZdC5WRUMyOmNhc2UgWXQuVkVDMzpjYXNlIFl0LlZFQzQ6cmV0dXJuIDE7Y2FzZSBZdC5NQVQyOnJldHVybiAyO2Nhc2UgWXQuTUFUMzpyZXR1cm4gMztjYXNlIFl0Lk1BVDQ6cmV0dXJuIDR9fTtZdC5nZXRHbHNsVHlwZT1mdW5jdGlvbihlKXtzd2l0Y2goZSl7Y2FzZSBZdC5TQ0FMQVI6cmV0dXJuImZsb2F0IjtjYXNlIFl0LlZFQzI6cmV0dXJuInZlYzIiO2Nhc2UgWXQuVkVDMzpyZXR1cm4idmVjMyI7Y2FzZSBZdC5WRUM0OnJldHVybiJ2ZWM0IjtjYXNlIFl0Lk1BVDI6cmV0dXJuIm1hdDIiO2Nhc2UgWXQuTUFUMzpyZXR1cm4ibWF0MyI7Y2FzZSBZdC5NQVQ0OnJldHVybiJtYXQ0In19O293PU9iamVjdC5mcmVlemUoWXQpfSk7ZnVuY3Rpb24gR2woZSl7cmV0dXJuIGl3WzBdPWUsaXdbMF19ZnVuY3Rpb24gJGIoZSl7cmV0dXJuIGU+PjFeLShlJjEpfXZhciBydyxQTixlcCx0bixDZixpdyx0cCxWdCxVcj1YKCgpPT57anQoKTtJZSgpO3Z0KCk7c2UoKTtHZSgpO2F3KCk7cnc9MS8yNTYsUE49NjU1MzYsZXA9MjU2LHRuPXt9O3RuLm9jdEVuY29kZUluUmFuZ2U9ZnVuY3Rpb24oZSx0LG4pe2lmKG4ueD1lLngvKE1hdGguYWJzKGUueCkrTWF0aC5hYnMoZS55KStNYXRoLmFicyhlLnopKSxuLnk9ZS55LyhNYXRoLmFicyhlLngpK01hdGguYWJzKGUueSkrTWF0aC5hYnMoZS56KSksZS56PDApe2xldCBvPW4ueCxhPW4ueTtuLng9KDEtTWF0aC5hYnMoYSkpKmsuc2lnbk5vdFplcm8obyksbi55PSgxLU1hdGguYWJzKG8pKSprLnNpZ25Ob3RaZXJvKGEpfXJldHVybiBuLng9ay50b1NOb3JtKG4ueCx0KSxuLnk9ay50b1NOb3JtKG4ueSx0KSxufTt0bi5vY3RFbmNvZGU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdG4ub2N0RW5jb2RlSW5SYW5nZShlLDI1NSx0KX07Q2Y9bmV3IFksaXc9bmV3IFVpbnQ4QXJyYXkoMSk7dG4ub2N0RW5jb2RlVG9DYXJ0ZXNpYW40PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRuLm9jdEVuY29kZUluUmFuZ2UoZSw2NTUzNSxDZiksdC54PUdsKENmLngqcncpLHQueT1HbChDZi54KSx0Lno9R2woQ2YueSpydyksdC53PUdsKENmLnkpLHR9O3RuLm9jdERlY29kZUluUmFuZ2U9ZnVuY3Rpb24oZSx0LG4sbyl7aWYoby54PWsuZnJvbVNOb3JtKGUsbiksby55PWsuZnJvbVNOb3JtKHQsbiksby56PTEtKE1hdGguYWJzKG8ueCkrTWF0aC5hYnMoby55KSksby56PDApe2xldCBhPW8ueDtvLng9KDEtTWF0aC5hYnMoby55KSkqay5zaWduTm90WmVybyhhKSxvLnk9KDEtTWF0aC5hYnMoYSkpKmsuc2lnbk5vdFplcm8oby55KX1yZXR1cm4gcy5ub3JtYWxpemUobyxvKX07dG4ub2N0RGVjb2RlPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdG4ub2N0RGVjb2RlSW5SYW5nZShlLHQsMjU1LG4pfTt0bi5vY3REZWNvZGVGcm9tQ2FydGVzaWFuND1mdW5jdGlvbihlLHQpe2xldCBuPWUueCxvPWUueSxhPWUueixyPWUudyxpPW4qZXArbyxmPWEqZXArcjtyZXR1cm4gdG4ub2N0RGVjb2RlSW5SYW5nZShpLGYsNjU1MzUsdCl9O3RuLm9jdFBhY2tGbG9hdD1mdW5jdGlvbihlKXtyZXR1cm4gMjU2KmUueCtlLnl9O3RwPW5ldyBZO3RuLm9jdEVuY29kZUZsb2F0PWZ1bmN0aW9uKGUpe3JldHVybiB0bi5vY3RFbmNvZGUoZSx0cCksdG4ub2N0UGFja0Zsb2F0KHRwKX07dG4ub2N0RGVjb2RlRmxvYXQ9ZnVuY3Rpb24oZSx0KXtsZXQgbj1lLzI1NixvPU1hdGguZmxvb3IobiksYT0obi1vKSoyNTY7cmV0dXJuIHRuLm9jdERlY29kZShvLGEsdCl9O3RuLm9jdFBhY2s9ZnVuY3Rpb24oZSx0LG4sbyl7bGV0IGE9dG4ub2N0RW5jb2RlRmxvYXQoZSkscj10bi5vY3RFbmNvZGVGbG9hdCh0KSxpPXRuLm9jdEVuY29kZShuLHRwKTtyZXR1cm4gby54PTY1NTM2KmkueCthLG8ueT02NTUzNippLnkrcixvfTt0bi5vY3RVbnBhY2s9ZnVuY3Rpb24oZSx0LG4sbyl7bGV0IGE9ZS54LzY1NTM2LHI9TWF0aC5mbG9vcihhKSxpPShhLXIpKjY1NTM2O2E9ZS55LzY1NTM2O2xldCBmPU1hdGguZmxvb3IoYSksZD0oYS1mKSo2NTUzNjt0bi5vY3REZWNvZGVGbG9hdChpLHQpLHRuLm9jdERlY29kZUZsb2F0KGQsbiksdG4ub2N0RGVjb2RlKHIsZixvKX07dG4uY29tcHJlc3NUZXh0dXJlQ29vcmRpbmF0ZXM9ZnVuY3Rpb24oZSl7bGV0IHQ9ZS54KjQwOTV8MCxuPWUueSo0MDk1fDA7cmV0dXJuIDQwOTYqdCtufTt0bi5kZWNvbXByZXNzVGV4dHVyZUNvb3JkaW5hdGVzPWZ1bmN0aW9uKGUsdCl7bGV0IG49ZS80MDk2LG89TWF0aC5mbG9vcihuKTtyZXR1cm4gdC54PW8vNDA5NSx0Lnk9KGUtbyo0MDk2KS80MDk1LHR9O3RuLnppZ1phZ0RlbHRhRGVjb2RlPWZ1bmN0aW9uKGUsdCxuKXtsZXQgbz1lLmxlbmd0aCxhPTAscj0wLGk9MDtmb3IobGV0IGY9MDtmPG87KytmKWErPSRiKGVbZl0pLHIrPSRiKHRbZl0pLGVbZl09YSx0W2ZdPXIsZyhuKSYmKGkrPSRiKG5bZl0pLG5bZl09aSl9O3RuLmRlcXVhbnRpemU9ZnVuY3Rpb24oZSx0LG4sbyl7bGV0IGE9b3cuZ2V0TnVtYmVyT2ZDb21wb25lbnRzKG4pLHI7c3dpdGNoKHQpe2Nhc2UgbmUuQllURTpyPTEyNzticmVhaztjYXNlIG5lLlVOU0lHTkVEX0JZVEU6cj0yNTU7YnJlYWs7Y2FzZSBuZS5TSE9SVDpyPTMyNzY3O2JyZWFrO2Nhc2UgbmUuVU5TSUdORURfU0hPUlQ6cj02NTUzNTticmVhaztjYXNlIG5lLklOVDpyPTIxNDc0ODM2NDc7YnJlYWs7Y2FzZSBuZS5VTlNJR05FRF9JTlQ6cj00Mjk0OTY3Mjk1O2JyZWFrfWxldCBpPW5ldyBGbG9hdDMyQXJyYXkobyphKTtmb3IobGV0IGY9MDtmPG87ZisrKWZvcihsZXQgZD0wO2Q8YTtkKyspe2xldCBjPWYqYStkO2lbY109TWF0aC5tYXgoZVtjXS9yLC0xKX1yZXR1cm4gaX07dG4uZW5jb2RlUkdCOD1mdW5jdGlvbihlKXtyZXR1cm4gTWF0aC5yb3VuZChrLmNsYW1wKGUucmVkKjI1NSwwLDI1NSkpKlBOK01hdGgucm91bmQoay5jbGFtcChlLmdyZWVuKjI1NSwwLDI1NSkpKmVwK01hdGgucm91bmQoay5jbGFtcChlLmJsdWUqMjU1LDAsMjU1KSl9O3RuLmRlY29kZVJHQjg9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT1NYXRoLmZsb29yKGUpLHQucmVkPShlPj4xNiYyNTUpLzI1NSx0LmdyZWVuPShlPj44JjI1NSkvMjU1LHQuYmx1ZT0oZSYyNTUpLzI1NSx0fTt0bi5kZWNvZGVSR0I1NjU9ZnVuY3Rpb24oZSx0KXtsZXQgbj1lLmxlbmd0aDtnKHQpfHwodD1uZXcgRmxvYXQzMkFycmF5KG4qMykpO2xldCBvPTMxLGE9NjMscj0xLzMxLGk9MS82Mztmb3IobGV0IGY9MDtmPG47ZisrKXtsZXQgZD1lW2ZdLGM9ZD4+MTEsdT1kPj41JmEsbD1kJm8saD0zKmY7dFtoXT1jKnIsdFtoKzFdPXUqaSx0W2grMl09bCpyfXJldHVybiB0fTtWdD10bn0pO2Z1bmN0aW9uIGtOKGUsdCxuLG8sYSl7ZyhhKXx8KGE9bmV3IHMpO2xldCByLGksZixkLGMsdSxsLGg7aWYoZyh0LnopKXtpZihzLmVxdWFsc0Vwc2lsb24oZSx0LGsuRVBTSUxPTjE0KSlyZXR1cm4gcy5jbG9uZShzLlVOSVRfWCxhKTtpZihzLmVxdWFsc0Vwc2lsb24oZSxuLGsuRVBTSUxPTjE0KSlyZXR1cm4gcy5jbG9uZShzLlVOSVRfWSxhKTtpZihzLmVxdWFsc0Vwc2lsb24oZSxvLGsuRVBTSUxPTjE0KSlyZXR1cm4gcy5jbG9uZShzLlVOSVRfWixhKTtyPXMuc3VidHJhY3Qobix0LGN3KSxpPXMuc3VidHJhY3Qobyx0LHN3KSxmPXMuc3VidHJhY3QoZSx0LGZ3KSxkPXMuZG90KHIsciksYz1zLmRvdChyLGkpLHU9cy5kb3QocixmKSxsPXMuZG90KGksaSksaD1zLmRvdChpLGYpfWVsc2V7aWYoWS5lcXVhbHNFcHNpbG9uKGUsdCxrLkVQU0lMT04xNCkpcmV0dXJuIHMuY2xvbmUocy5VTklUX1gsYSk7aWYoWS5lcXVhbHNFcHNpbG9uKGUsbixrLkVQU0lMT04xNCkpcmV0dXJuIHMuY2xvbmUocy5VTklUX1ksYSk7aWYoWS5lcXVhbHNFcHNpbG9uKGUsbyxrLkVQU0lMT04xNCkpcmV0dXJuIHMuY2xvbmUocy5VTklUX1osYSk7cj1ZLnN1YnRyYWN0KG4sdCxjdyksaT1ZLnN1YnRyYWN0KG8sdCxzdyksZj1ZLnN1YnRyYWN0KGUsdCxmdyksZD1ZLmRvdChyLHIpLGM9WS5kb3QocixpKSx1PVkuZG90KHIsZiksbD1ZLmRvdChpLGkpLGg9WS5kb3QoaSxmKX1hLnk9bCp1LWMqaCxhLno9ZCpoLWMqdTtsZXQgbT1kKmwtYypjO2lmKG0hPT0wKXJldHVybiBhLnkvPW0sYS56Lz1tLGEueD0xLWEueS1hLnosYX12YXIgY3csc3csZncsZHcsdXc9WCgoKT0+e2p0KCk7SWUoKTtzZSgpO0dlKCk7Y3c9bmV3IHMsc3c9bmV3IHMsZnc9bmV3IHM7ZHc9a059KTtmdW5jdGlvbiBmcigpe3RoaXMuaGlnaD1zLmNsb25lKHMuWkVSTyksdGhpcy5sb3c9cy5jbG9uZShzLlpFUk8pfXZhciBMcixucCxhYyxvcD1YKCgpPT57SWUoKTtzZSgpO2ZyLmVuY29kZT1mdW5jdGlvbihlLHQpe2codCl8fCh0PXtoaWdoOjAsbG93OjB9KTtsZXQgbjtyZXR1cm4gZT49MD8obj1NYXRoLmZsb29yKGUvNjU1MzYpKjY1NTM2LHQuaGlnaD1uLHQubG93PWUtbik6KG49TWF0aC5mbG9vcigtZS82NTUzNikqNjU1MzYsdC5oaWdoPS1uLHQubG93PWUrbiksdH07THI9e2hpZ2g6MCxsb3c6MH07ZnIuZnJvbUNhcnRlc2lhbj1mdW5jdGlvbihlLHQpe2codCl8fCh0PW5ldyBmcik7bGV0IG49dC5oaWdoLG89dC5sb3c7cmV0dXJuIGZyLmVuY29kZShlLngsTHIpLG4ueD1Mci5oaWdoLG8ueD1Mci5sb3csZnIuZW5jb2RlKGUueSxMciksbi55PUxyLmhpZ2gsby55PUxyLmxvdyxmci5lbmNvZGUoZS56LExyKSxuLno9THIuaGlnaCxvLno9THIubG93LHR9O25wPW5ldyBmcjtmci53cml0ZUVsZW1lbnRzPWZ1bmN0aW9uKGUsdCxuKXtmci5mcm9tQ2FydGVzaWFuKGUsbnApO2xldCBvPW5wLmhpZ2gsYT1ucC5sb3c7dFtuXT1vLngsdFtuKzFdPW8ueSx0W24rMl09by56LHRbbiszXT1hLngsdFtuKzRdPWEueSx0W24rNV09YS56fTthYz1mcn0pO3ZhciBzbyxrZSxubj1YKCgpPT57c2UoKTtHZSgpO29jKCk7c289e1VOU0lHTkVEX0JZVEU6UGUuVU5TSUdORURfQllURSxVTlNJR05FRF9TSE9SVDpQZS5VTlNJR05FRF9TSE9SVCxVTlNJR05FRF9JTlQ6UGUuVU5TSUdORURfSU5UfTtzby5nZXRTaXplSW5CeXRlcz1mdW5jdGlvbihlKXtzd2l0Y2goZSl7Y2FzZSBzby5VTlNJR05FRF9CWVRFOnJldHVybiBVaW50OEFycmF5LkJZVEVTX1BFUl9FTEVNRU5UO2Nhc2Ugc28uVU5TSUdORURfU0hPUlQ6cmV0dXJuIFVpbnQxNkFycmF5LkJZVEVTX1BFUl9FTEVNRU5UO2Nhc2Ugc28uVU5TSUdORURfSU5UOnJldHVybiBVaW50MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVH19O3NvLmZyb21TaXplSW5CeXRlcz1mdW5jdGlvbihlKXtzd2l0Y2goZSl7Y2FzZSAyOnJldHVybiBzby5VTlNJR05FRF9TSE9SVDtjYXNlIDQ6cmV0dXJuIHNvLlVOU0lHTkVEX0lOVDtjYXNlIDE6cmV0dXJuIHNvLlVOU0lHTkVEX0JZVEV9fTtzby52YWxpZGF0ZT1mdW5jdGlvbihlKXtyZXR1cm4gZyhlKSYmKGU9PT1zby5VTlNJR05FRF9CWVRFfHxlPT09c28uVU5TSUdORURfU0hPUlR8fGU9PT1zby5VTlNJR05FRF9JTlQpfTtzby5jcmVhdGVUeXBlZEFycmF5PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU+PWsuU0lYVFlfRk9VUl9LSUxPQllURVM/bmV3IFVpbnQzMkFycmF5KHQpOm5ldyBVaW50MTZBcnJheSh0KX07c28uY3JlYXRlVHlwZWRBcnJheUZyb21BcnJheUJ1ZmZlcj1mdW5jdGlvbihlLHQsbixvKXtyZXR1cm4gZT49ay5TSVhUWV9GT1VSX0tJTE9CWVRFUz9uZXcgVWludDMyQXJyYXkodCxuLG8pOm5ldyBVaW50MTZBcnJheSh0LG4sbyl9O3NvLmZyb21UeXBlZEFycmF5PWZ1bmN0aW9uKGUpe2lmKGUgaW5zdGFuY2VvZiBVaW50OEFycmF5KXJldHVybiBzby5VTlNJR05FRF9CWVRFO2lmKGUgaW5zdGFuY2VvZiBVaW50MTZBcnJheSlyZXR1cm4gc28uVU5TSUdORURfU0hPUlQ7aWYoZSBpbnN0YW5jZW9mIFVpbnQzMkFycmF5KXJldHVybiBzby5VTlNJR05FRF9JTlR9O2tlPU9iamVjdC5mcmVlemUoc28pfSk7ZnVuY3Rpb24gbHcoZSx0LG4pe2xldCBvPWUrdDtyZXR1cm4gay5zaWduKGUpIT09ay5zaWduKHQpJiZNYXRoLmFicyhvL01hdGgubWF4KE1hdGguYWJzKGUpLE1hdGguYWJzKHQpKSk8bj8wOm99dmFyIGFwLEVhLFZsPVgoKCk9PntHZSgpO2FwPXt9O2FwLmNvbXB1dGVEaXNjcmltaW5hbnQ9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB0KnQtNCplKm59O2FwLmNvbXB1dGVSZWFsUm9vdHM9ZnVuY3Rpb24oZSx0LG4pe2xldCBvO2lmKGU9PT0wKXJldHVybiB0PT09MD9bXTpbLW4vdF07aWYodD09PTApe2lmKG49PT0wKXJldHVyblswLDBdO2xldCBkPU1hdGguYWJzKG4pLGM9TWF0aC5hYnMoZSk7aWYoZDxjJiZkL2M8ay5FUFNJTE9OMTQpcmV0dXJuWzAsMF07aWYoZD5jJiZjL2Q8ay5FUFNJTE9OMTQpcmV0dXJuW107aWYobz0tbi9lLG88MClyZXR1cm5bXTtsZXQgdT1NYXRoLnNxcnQobyk7cmV0dXJuWy11LHVdfWVsc2UgaWYobj09PTApcmV0dXJuIG89LXQvZSxvPDA/W28sMF06WzAsb107bGV0IGE9dCp0LHI9NCplKm4saT1sdyhhLC1yLGsuRVBTSUxPTjE0KTtpZihpPDApcmV0dXJuW107bGV0IGY9LS41Kmx3KHQsay5zaWduKHQpKk1hdGguc3FydChpKSxrLkVQU0lMT04xNCk7cmV0dXJuIHQ+MD9bZi9lLG4vZl06W24vZixmL2VdfTtFYT1hcH0pO2Z1bmN0aW9uIHJwKGUsdCxuLG8pe2xldCBhPWUscj10LzMsaT1uLzMsZj1vLGQ9YSppLGM9cipmLHU9cipyLGw9aSppLGg9YSppLXUsbT1hKmYtcippLGI9cipmLWwscD00KmgqYi1tKm0seSxUO2lmKHA8MCl7bGV0IE8sWixvZTt1KmM+PWQqbD8oTz1hLFo9aCxvZT0tMipyKmgrYSptKTooTz1mLFo9YixvZT0tZiptKzIqaSpiKTtsZXQgZmU9LShvZTwwPy0xOjEpKk1hdGguYWJzKE8pKk1hdGguc3FydCgtcCk7VD0tb2UrZmU7bGV0IGVlPVQvMixiZT1lZTwwPy1NYXRoLnBvdygtZWUsMS8zKTpNYXRoLnBvdyhlZSwxLzMpLGxlPVQ9PT1mZT8tYmU6LVovYmU7cmV0dXJuIHk9Wjw9MD9iZStsZTotb2UvKGJlKmJlK2xlKmxlK1opLHUqYz49ZCpsP1soeS1yKS9hXTpbLWYvKHkraSldfWxldCBfPWgsRT0tMipyKmgrYSptLHc9YixSPS1mKm0rMippKmIsUz1NYXRoLnNxcnQocCksQz1NYXRoLnNxcnQoMykvMixJPU1hdGguYWJzKE1hdGguYXRhbjIoYSpTLC1FKS8zKTt5PTIqTWF0aC5zcXJ0KC1fKTtsZXQgTj1NYXRoLmNvcyhJKTtUPXkqTjtsZXQgUD15KigtTi8yLUMqTWF0aC5zaW4oSSkpLEY9VCtQPjIqcj9ULXI6UC1yLEE9YSx4PUYvQTtJPU1hdGguYWJzKE1hdGguYXRhbjIoZipTLC1SKS8zKSx5PTIqTWF0aC5zcXJ0KC13KSxOPU1hdGguY29zKEkpLFQ9eSpOLFA9eSooLU4vMi1DKk1hdGguc2luKEkpKTtsZXQgTT0tZix2PVQrUDwyKmk/VCtpOlAraSxVPU0vdix6PUEqdixEPS1GKnYtQSpNLEc9RipNLEg9KGkqRC1yKkcpLygtcipEK2kqeik7cmV0dXJuIHg8PUg/eDw9VT9IPD1VP1t4LEgsVV06W3gsVSxIXTpbVSx4LEhdOng8PVU/W0gseCxVXTpIPD1VP1tILFUseF06W1UsSCx4XX12YXIgaXAsSGwsaHc9WCgoKT0+e1ZsKCk7aXA9e307aXAuY29tcHV0ZURpc2NyaW1pbmFudD1mdW5jdGlvbihlLHQsbixvKXtsZXQgYT1lKmUscj10KnQsaT1uKm4sZj1vKm87cmV0dXJuIDE4KmUqdCpuKm8rcippLTI3KmEqZi00KihlKmkqbityKnQqbyl9O2lwLmNvbXB1dGVSZWFsUm9vdHM9ZnVuY3Rpb24oZSx0LG4sbyl7bGV0IGEscjtpZihlPT09MClyZXR1cm4gRWEuY29tcHV0ZVJlYWxSb290cyh0LG4sbyk7aWYodD09PTApe2lmKG49PT0wKXtpZihvPT09MClyZXR1cm5bMCwwLDBdO3I9LW8vZTtsZXQgaT1yPDA/LU1hdGgucG93KC1yLDEvMyk6TWF0aC5wb3cociwxLzMpO3JldHVybltpLGksaV19ZWxzZSBpZihvPT09MClyZXR1cm4gYT1FYS5jb21wdXRlUmVhbFJvb3RzKGUsMCxuKSxhLkxlbmd0aD09PTA/WzBdOlthWzBdLDAsYVsxXV07cmV0dXJuIHJwKGUsMCxuLG8pfWVsc2V7aWYobj09PTApcmV0dXJuIG89PT0wPyhyPS10L2UscjwwP1tyLDAsMF06WzAsMCxyXSk6cnAoZSx0LDAsbyk7aWYobz09PTApcmV0dXJuIGE9RWEuY29tcHV0ZVJlYWxSb290cyhlLHQsbiksYS5sZW5ndGg9PT0wP1swXTphWzFdPD0wP1thWzBdLGFbMV0sMF06YVswXT49MD9bMCxhWzBdLGFbMV1dOlthWzBdLDAsYVsxXV19cmV0dXJuIHJwKGUsdCxuLG8pfTtIbD1pcH0pO2Z1bmN0aW9uIEdhKGUsdCxuLG8pe2xldCBhPWUqZSxyPXQtMyphLzgsaT1uLXQqZS8yK2EqZS84LGY9by1uKmUvNCt0KmEvMTYtMyphKmEvMjU2LGQ9SGwuY29tcHV0ZVJlYWxSb290cygxLDIqcixyKnItNCpmLC1pKmkpO2lmKGQubGVuZ3RoPjApe2xldCBjPS1lLzQsdT1kW2QubGVuZ3RoLTFdO2lmKE1hdGguYWJzKHUpPGsuRVBTSUxPTjE0KXtsZXQgbD1FYS5jb21wdXRlUmVhbFJvb3RzKDEscixmKTtpZihsLmxlbmd0aD09PTIpe2xldCBoPWxbMF0sbT1sWzFdLGI7aWYoaD49MCYmbT49MCl7bGV0IHA9TWF0aC5zcXJ0KGgpLHk9TWF0aC5zcXJ0KG0pO3JldHVybltjLXksYy1wLGMrcCxjK3ldfWVsc2V7aWYoaD49MCYmbTwwKXJldHVybiBiPU1hdGguc3FydChoKSxbYy1iLGMrYl07aWYoaDwwJiZtPj0wKXJldHVybiBiPU1hdGguc3FydChtKSxbYy1iLGMrYl19fXJldHVybltdfWVsc2UgaWYodT4wKXtsZXQgbD1NYXRoLnNxcnQodSksaD0ocit1LWkvbCkvMixtPShyK3UraS9sKS8yLGI9RWEuY29tcHV0ZVJlYWxSb290cygxLGwsaCkscD1FYS5jb21wdXRlUmVhbFJvb3RzKDEsLWwsbSk7cmV0dXJuIGIubGVuZ3RoIT09MD8oYlswXSs9YyxiWzFdKz1jLHAubGVuZ3RoIT09MD8ocFswXSs9YyxwWzFdKz1jLGJbMV08PXBbMF0/W2JbMF0sYlsxXSxwWzBdLHBbMV1dOnBbMV08PWJbMF0/W3BbMF0scFsxXSxiWzBdLGJbMV1dOmJbMF0+PXBbMF0mJmJbMV08PXBbMV0/W3BbMF0sYlswXSxiWzFdLHBbMV1dOnBbMF0+PWJbMF0mJnBbMV08PWJbMV0/W2JbMF0scFswXSxwWzFdLGJbMV1dOmJbMF0+cFswXSYmYlswXTxwWzFdP1twWzBdLGJbMF0scFsxXSxiWzFdXTpbYlswXSxwWzBdLGJbMV0scFsxXV0pOmIpOnAubGVuZ3RoIT09MD8ocFswXSs9YyxwWzFdKz1jLHApOltdfX1yZXR1cm5bXX1mdW5jdGlvbiBNZihlLHQsbixvKXtsZXQgYT1uKm4scj10KnQsaT1lKmUsZj0tMip0LGQ9biplK3ItNCpvLGM9aSpvLW4qdCplK2EsdT1IbC5jb21wdXRlUmVhbFJvb3RzKDEsZixkLGMpO2lmKHUubGVuZ3RoPjApe2xldCBsPXVbMF0saD10LWwsbT1oKmgsYj1lLzIscD1oLzIseT1tLTQqbyxUPW0rNCpNYXRoLmFicyhvKSxfPWktNCpsLEU9aSs0Kk1hdGguYWJzKGwpLHcsUjtpZihsPDB8fHkqRTxfKlQpe2xldCBBPU1hdGguc3FydChfKTt3PUEvMixSPUE9PT0wPzA6KGUqcC1uKS9BfWVsc2V7bGV0IEE9TWF0aC5zcXJ0KHkpO3c9QT09PTA/MDooZSpwLW4pL0EsUj1BLzJ9bGV0IFMsQztiPT09MCYmdz09PTA/KFM9MCxDPTApOmsuc2lnbihiKT09PWsuc2lnbih3KT8oUz1iK3csQz1sL1MpOihDPWItdyxTPWwvQyk7bGV0IEksTjtwPT09MCYmUj09PTA/KEk9MCxOPTApOmsuc2lnbihwKT09PWsuc2lnbihSKT8oST1wK1IsTj1vL0kpOihOPXAtUixJPW8vTik7bGV0IFA9RWEuY29tcHV0ZVJlYWxSb290cygxLFMsSSksRj1FYS5jb21wdXRlUmVhbFJvb3RzKDEsQyxOKTtpZihQLmxlbmd0aCE9PTApcmV0dXJuIEYubGVuZ3RoIT09MD9QWzFdPD1GWzBdP1tQWzBdLFBbMV0sRlswXSxGWzFdXTpGWzFdPD1QWzBdP1tGWzBdLEZbMV0sUFswXSxQWzFdXTpQWzBdPj1GWzBdJiZQWzFdPD1GWzFdP1tGWzBdLFBbMF0sUFsxXSxGWzFdXTpGWzBdPj1QWzBdJiZGWzFdPD1QWzFdP1tQWzBdLEZbMF0sRlsxXSxQWzFdXTpQWzBdPkZbMF0mJlBbMF08RlsxXT9bRlswXSxQWzBdLEZbMV0sUFsxXV06W1BbMF0sRlswXSxQWzFdLEZbMV1dOlA7aWYoRi5sZW5ndGghPT0wKXJldHVybiBGfXJldHVybltdfXZhciBjcCxtdyxidz1YKCgpPT57aHcoKTtHZSgpO1ZsKCk7Y3A9e307Y3AuY29tcHV0ZURpc2NyaW1pbmFudD1mdW5jdGlvbihlLHQsbixvLGEpe2xldCByPWUqZSxpPXIqZSxmPXQqdCxkPWYqdCxjPW4qbix1PWMqbixsPW8qbyxoPWwqbyxtPWEqYSxiPW0qYTtyZXR1cm4gZipjKmwtNCpkKmgtNCplKnUqbCsxOCplKnQqbipoLTI3KnIqbCpsKzI1NippKmIrYSooMTgqZCpuKm8tNCpmKnUrMTYqZSpjKmMtODAqZSp0KmMqby02KmUqZipsKzE0NCpyKm4qbCkrbSooMTQ0KmUqZipuLTI3KmYqZi0xMjgqcipjLTE5MipyKnQqbyl9O2NwLmNvbXB1dGVSZWFsUm9vdHM9ZnVuY3Rpb24oZSx0LG4sbyxhKXtpZihNYXRoLmFicyhlKTxrLkVQU0lMT04xNSlyZXR1cm4gSGwuY29tcHV0ZVJlYWxSb290cyh0LG4sbyxhKTtsZXQgcj10L2UsaT1uL2UsZj1vL2UsZD1hL2UsYz1yPDA/MTowO3N3aXRjaChjKz1pPDA/YysxOmMsYys9ZjwwP2MrMTpjLGMrPWQ8MD9jKzE6YyxjKXtjYXNlIDA6cmV0dXJuIEdhKHIsaSxmLGQpO2Nhc2UgMTpyZXR1cm4gTWYocixpLGYsZCk7Y2FzZSAyOnJldHVybiBNZihyLGksZixkKTtjYXNlIDM6cmV0dXJuIEdhKHIsaSxmLGQpO2Nhc2UgNDpyZXR1cm4gR2EocixpLGYsZCk7Y2FzZSA1OnJldHVybiBNZihyLGksZixkKTtjYXNlIDY6cmV0dXJuIEdhKHIsaSxmLGQpO2Nhc2UgNzpyZXR1cm4gR2EocixpLGYsZCk7Y2FzZSA4OnJldHVybiBNZihyLGksZixkKTtjYXNlIDk6cmV0dXJuIEdhKHIsaSxmLGQpO2Nhc2UgMTA6cmV0dXJuIEdhKHIsaSxmLGQpO2Nhc2UgMTE6cmV0dXJuIE1mKHIsaSxmLGQpO2Nhc2UgMTI6cmV0dXJuIEdhKHIsaSxmLGQpO2Nhc2UgMTM6cmV0dXJuIEdhKHIsaSxmLGQpO2Nhc2UgMTQ6cmV0dXJuIEdhKHIsaSxmLGQpO2Nhc2UgMTU6cmV0dXJuIEdhKHIsaSxmLGQpO2RlZmF1bHQ6cmV0dXJufX07bXc9Y3B9KTtmdW5jdGlvbiBLbChlLHQpe3Q9cy5jbG9uZSh0Pz9zLlpFUk8pLHMuZXF1YWxzKHQscy5aRVJPKXx8cy5ub3JtYWxpemUodCx0KSx0aGlzLm9yaWdpbj1zLmNsb25lKGU/P3MuWkVSTyksdGhpcy5kaXJlY3Rpb249dH12YXIgZHIsTmY9WCgoKT0+e0llKCk7c2UoKTtLbC5jbG9uZT1mdW5jdGlvbihlLHQpe2lmKGcoZSkpcmV0dXJuIGcodCk/KHQub3JpZ2luPXMuY2xvbmUoZS5vcmlnaW4pLHQuZGlyZWN0aW9uPXMuY2xvbmUoZS5kaXJlY3Rpb24pLHQpOm5ldyBLbChlLm9yaWdpbixlLmRpcmVjdGlvbil9O0tsLmdldFBvaW50PWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZyhuKXx8KG49bmV3IHMpLG49cy5tdWx0aXBseUJ5U2NhbGFyKGUuZGlyZWN0aW9uLHQsbikscy5hZGQoZS5vcmlnaW4sbixuKX07ZHI9S2x9KTtmdW5jdGlvbiBCTihlLHQsbixvKXtsZXQgYT10KnQtNCplKm47aWYoYTwwKXJldHVybjtpZihhPjApe2xldCBpPTEvKDIqZSksZj1NYXRoLnNxcnQoYSksZD0oLXQrZikqaSxjPSgtdC1mKSppO3JldHVybiBkPGM/KG8ucm9vdDA9ZCxvLnJvb3QxPWMpOihvLnJvb3QwPWMsby5yb290MT1kKSxvfWxldCByPS10LygyKmUpO2lmKHIhPT0wKXJldHVybiBvLnJvb3QwPW8ucm9vdDE9cixvfWZ1bmN0aW9uIFJ3KGUsdCxuKXtnKG4pfHwobj1uZXcgVG8pO2xldCBvPWUub3JpZ2luLGE9ZS5kaXJlY3Rpb24scj10LmNlbnRlcixpPXQucmFkaXVzKnQucmFkaXVzLGY9cy5zdWJ0cmFjdChvLHIsRXcpLGQ9cy5kb3QoYSxhKSxjPTIqcy5kb3QoYSxmKSx1PXMubWFnbml0dWRlU3F1YXJlZChmKS1pLGw9Qk4oZCxjLHUsVU4pO2lmKGcobCkpcmV0dXJuIG4uc3RhcnQ9bC5yb290MCxuLnN0b3A9bC5yb290MSxufWZ1bmN0aW9uIHNwKGUsdCxuLG8sYSl7aWYoYS5zdGFydD0obi1lKS90LGEuc3RvcD0oby1lKS90LGEuc3RvcDxhLnN0YXJ0KXtsZXQgcj1hLnN0b3A7YS5zdG9wPWEuc3RhcnQsYS5zdGFydD1yfXJldHVybiBhfWZ1bmN0aW9uIHJjKGUsdCxuKXtsZXQgbz1lK3Q7cmV0dXJuIGsuc2lnbihlKSE9PWsuc2lnbih0KSYmTWF0aC5hYnMoby9NYXRoLm1heChNYXRoLmFicyhlKSxNYXRoLmFicyh0KSkpPG4/MDpvfXZhciBsbix2TixGTixFdyxwdyxndyxETixVTixMTixqTix6TixHTixWTixITixmcCxfdyx5dyxxbCxLTixxTixXTixYTixZTixKTixBdyx3dyxUdyxaTixRTiwkTixubyxwaT1YKCgpPT57SWUoKTtUdCgpO3NlKCk7bGYoKTtHZSgpO0RuKCk7VmwoKTtidygpO05mKCk7bG49e307bG4ucmF5UGxhbmU9ZnVuY3Rpb24oZSx0LG4pe2cobil8fChuPW5ldyBzKTtsZXQgbz1lLm9yaWdpbixhPWUuZGlyZWN0aW9uLHI9dC5ub3JtYWwsaT1zLmRvdChyLGEpO2lmKE1hdGguYWJzKGkpPGsuRVBTSUxPTjE1KXJldHVybjtsZXQgZj0oLXQuZGlzdGFuY2Utcy5kb3QocixvKSkvaTtpZighKGY8MCkpcmV0dXJuIG49cy5tdWx0aXBseUJ5U2NhbGFyKGEsZixuKSxzLmFkZChvLG4sbil9O3ZOPW5ldyBzLEZOPW5ldyBzLEV3PW5ldyBzLHB3PW5ldyBzLGd3PW5ldyBzO2xuLnJheVRyaWFuZ2xlUGFyYW1ldHJpYz1mdW5jdGlvbihlLHQsbixvLGEpe2E9YT8/ITE7bGV0IHI9ZS5vcmlnaW4saT1lLmRpcmVjdGlvbixmPXMuc3VidHJhY3Qobix0LHZOKSxkPXMuc3VidHJhY3Qobyx0LEZOKSxjPXMuY3Jvc3MoaSxkLEV3KSx1PXMuZG90KGYsYyksbCxoLG0sYixwO2lmKGEpe2lmKHU8ay5FUFNJTE9ONnx8KGw9cy5zdWJ0cmFjdChyLHQscHcpLG09cy5kb3QobCxjKSxtPDB8fG0+dSl8fChoPXMuY3Jvc3MobCxmLGd3KSxiPXMuZG90KGksaCksYjwwfHxtK2I+dSkpcmV0dXJuO3A9cy5kb3QoZCxoKS91fWVsc2V7aWYoTWF0aC5hYnModSk8ay5FUFNJTE9ONilyZXR1cm47bGV0IHk9MS91O2lmKGw9cy5zdWJ0cmFjdChyLHQscHcpLG09cy5kb3QobCxjKSp5LG08MHx8bT4xfHwoaD1zLmNyb3NzKGwsZixndyksYj1zLmRvdChpLGgpKnksYjwwfHxtK2I+MSkpcmV0dXJuO3A9cy5kb3QoZCxoKSp5fXJldHVybiBwfTtsbi5yYXlUcmlhbmdsZT1mdW5jdGlvbihlLHQsbixvLGEscil7bGV0IGk9bG4ucmF5VHJpYW5nbGVQYXJhbWV0cmljKGUsdCxuLG8sYSk7aWYoISghZyhpKXx8aTwwKSlyZXR1cm4gZyhyKXx8KHI9bmV3IHMpLHMubXVsdGlwbHlCeVNjYWxhcihlLmRpcmVjdGlvbixpLHIpLHMuYWRkKGUub3JpZ2luLHIscil9O0ROPW5ldyBkcjtsbi5saW5lU2VnbWVudFRyaWFuZ2xlPWZ1bmN0aW9uKGUsdCxuLG8sYSxyLGkpe2xldCBmPUROO3MuY2xvbmUoZSxmLm9yaWdpbikscy5zdWJ0cmFjdCh0LGUsZi5kaXJlY3Rpb24pLHMubm9ybWFsaXplKGYuZGlyZWN0aW9uLGYuZGlyZWN0aW9uKTtsZXQgZD1sbi5yYXlUcmlhbmdsZVBhcmFtZXRyaWMoZixuLG8sYSxyKTtpZighKCFnKGQpfHxkPDB8fGQ+cy5kaXN0YW5jZShlLHQpKSlyZXR1cm4gZyhpKXx8KGk9bmV3IHMpLHMubXVsdGlwbHlCeVNjYWxhcihmLmRpcmVjdGlvbixkLGkpLHMuYWRkKGYub3JpZ2luLGksaSl9O1VOPXtyb290MDowLHJvb3QxOjB9O2xuLnJheVNwaGVyZT1mdW5jdGlvbihlLHQsbil7aWYobj1SdyhlLHQsbiksISghZyhuKXx8bi5zdG9wPDApKXJldHVybiBuLnN0YXJ0PU1hdGgubWF4KG4uc3RhcnQsMCksbn07TE49bmV3IGRyO2xuLmxpbmVTZWdtZW50U3BoZXJlPWZ1bmN0aW9uKGUsdCxuLG8pe2xldCBhPUxOO3MuY2xvbmUoZSxhLm9yaWdpbik7bGV0IHI9cy5zdWJ0cmFjdCh0LGUsYS5kaXJlY3Rpb24pLGk9cy5tYWduaXR1ZGUocik7aWYocy5ub3JtYWxpemUocixyKSxvPVJ3KGEsbixvKSwhKCFnKG8pfHxvLnN0b3A8MHx8by5zdGFydD5pKSlyZXR1cm4gby5zdGFydD1NYXRoLm1heChvLnN0YXJ0LDApLG8uc3RvcD1NYXRoLm1pbihvLnN0b3AsaSksb307ak49bmV3IHMsek49bmV3IHM7bG4ucmF5RWxsaXBzb2lkPWZ1bmN0aW9uKGUsdCl7bGV0IG49dC5vbmVPdmVyUmFkaWksbz1zLm11bHRpcGx5Q29tcG9uZW50cyhuLGUub3JpZ2luLGpOKSxhPXMubXVsdGlwbHlDb21wb25lbnRzKG4sZS5kaXJlY3Rpb24sek4pLHI9cy5tYWduaXR1ZGVTcXVhcmVkKG8pLGk9cy5kb3QobyxhKSxmLGQsYyx1LGw7aWYocj4xKXtpZihpPj0wKXJldHVybjtsZXQgaD1pKmk7aWYoZj1yLTEsZD1zLm1hZ25pdHVkZVNxdWFyZWQoYSksYz1kKmYsaDxjKXJldHVybjtpZihoPmMpe3U9aSppLWMsbD0taStNYXRoLnNxcnQodSk7bGV0IGI9bC9kLHA9Zi9sO3JldHVybiBiPHA/bmV3IFRvKGIscCk6e3N0YXJ0OnAsc3RvcDpifX1sZXQgbT1NYXRoLnNxcnQoZi9kKTtyZXR1cm4gbmV3IFRvKG0sbSl9ZWxzZSBpZihyPDEpcmV0dXJuIGY9ci0xLGQ9cy5tYWduaXR1ZGVTcXVhcmVkKGEpLGM9ZCpmLHU9aSppLWMsbD0taStNYXRoLnNxcnQodSksbmV3IFRvKDAsbC9kKTtpZihpPDApcmV0dXJuIGQ9cy5tYWduaXR1ZGVTcXVhcmVkKGEpLG5ldyBUbygwLC1pL2QpfTtHTj1uZXcgVG8sVk49bmV3IFRvLEhOPW5ldyBUbztsbi5yYXlBeGlzQWxpZ25lZEJvdW5kaW5nQm94PWZ1bmN0aW9uKGUsdCxuKXtnKG4pfHwobj1uZXcgVG8pO2xldCBvPXNwKGUub3JpZ2luLngsZS5kaXJlY3Rpb24ueCx0Lm1pbmltdW0ueCx0Lm1heGltdW0ueCxHTiksYT1zcChlLm9yaWdpbi55LGUuZGlyZWN0aW9uLnksdC5taW5pbXVtLnksdC5tYXhpbXVtLnksVk4pLHI9c3AoZS5vcmlnaW4ueixlLmRpcmVjdGlvbi56LHQubWluaW11bS56LHQubWF4aW11bS56LEhOKTtpZihuLnN0YXJ0PW8uc3RhcnQ+YS5zdGFydD9vLnN0YXJ0OmEuc3RhcnQsbi5zdG9wPW8uc3RvcDxhLnN0b3A/by5zdG9wOmEuc3RvcCwhKG8uc3RhcnQ+YS5zdG9wfHxhLnN0YXJ0Pm8uc3RvcCkmJiEobi5zdGFydD5yLnN0b3B8fHIuc3RhcnQ+bi5zdG9wKSlyZXR1cm4gci5zdGFydD5uLnN0YXJ0JiYobi5zdGFydD1yLnN0YXJ0KSxyLnN0b3A8bi5zdG9wJiYobi5zdG9wPXIuc3RvcCksbn07bG4ucXVhZHJhdGljVmVjdG9yRXhwcmVzc2lvbj1mdW5jdGlvbihlLHQsbixvLGEpe2xldCByPW8qbyxpPWEqYSxmPShlW0ouQ09MVU1OMVJPVzFdLWVbSi5DT0xVTU4yUk9XMl0pKmksZD1hKihvKnJjKGVbSi5DT0xVTU4xUk9XMF0sZVtKLkNPTFVNTjBST1cxXSxrLkVQU0lMT04xNSkrdC55KSxjPWVbSi5DT0xVTU4wUk9XMF0qcitlW0ouQ09MVU1OMlJPVzJdKmkrbyp0Lngrbix1PWkqcmMoZVtKLkNPTFVNTjJST1cxXSxlW0ouQ09MVU1OMVJPVzJdLGsuRVBTSUxPTjE1KSxsPWEqKG8qcmMoZVtKLkNPTFVNTjJST1cwXSxlW0ouQ09MVU1OMFJPVzJdKSt0LnopLGgsbT1bXTtpZihsPT09MCYmdT09PTApe2lmKGg9RWEuY29tcHV0ZVJlYWxSb290cyhmLGQsYyksaC5sZW5ndGg9PT0wKXJldHVybiBtO2xldCBJPWhbMF0sTj1NYXRoLnNxcnQoTWF0aC5tYXgoMS1JKkksMCkpO2lmKG0ucHVzaChuZXcgcyhvLGEqSSxhKi1OKSksbS5wdXNoKG5ldyBzKG8sYSpJLGEqTikpLGgubGVuZ3RoPT09Mil7bGV0IFA9aFsxXSxGPU1hdGguc3FydChNYXRoLm1heCgxLVAqUCwwKSk7bS5wdXNoKG5ldyBzKG8sYSpQLGEqLUYpKSxtLnB1c2gobmV3IHMobyxhKlAsYSpGKSl9cmV0dXJuIG19bGV0IGI9bCpsLHA9dSp1LHk9ZipmLFQ9bCp1LF89eStwLEU9MiooZCpmK1QpLHc9MipjKmYrZCpkLXArYixSPTIqKGMqZC1UKSxTPWMqYy1iO2lmKF89PT0wJiZFPT09MCYmdz09PTAmJlI9PT0wKXJldHVybiBtO2g9bXcuY29tcHV0ZVJlYWxSb290cyhfLEUsdyxSLFMpO2xldCBDPWgubGVuZ3RoO2lmKEM9PT0wKXJldHVybiBtO2ZvcihsZXQgST0wO0k8QzsrK0kpe2xldCBOPWhbSV0sUD1OKk4sRj1NYXRoLm1heCgxLVAsMCksQT1NYXRoLnNxcnQoRikseDtrLnNpZ24oZik9PT1rLnNpZ24oYyk/eD1yYyhmKlArYyxkKk4say5FUFNJTE9OMTIpOmsuc2lnbihjKT09PWsuc2lnbihkKk4pP3g9cmMoZipQLGQqTitjLGsuRVBTSUxPTjEyKTp4PXJjKGYqUCtkKk4sYyxrLkVQU0lMT04xMik7bGV0IE09cmModSpOLGwsay5FUFNJTE9OMTUpLHY9eCpNO3Y8MD9tLnB1c2gobmV3IHMobyxhKk4sYSpBKSk6dj4wP20ucHVzaChuZXcgcyhvLGEqTixhKi1BKSk6QSE9PTA/KG0ucHVzaChuZXcgcyhvLGEqTixhKi1BKSksbS5wdXNoKG5ldyBzKG8sYSpOLGEqQSkpLCsrSSk6bS5wdXNoKG5ldyBzKG8sYSpOLGEqQSkpfXJldHVybiBtfTtmcD1uZXcgcyxfdz1uZXcgcyx5dz1uZXcgcyxxbD1uZXcgcyxLTj1uZXcgcyxxTj1uZXcgSixXTj1uZXcgSixYTj1uZXcgSixZTj1uZXcgSixKTj1uZXcgSixBdz1uZXcgSix3dz1uZXcgSixUdz1uZXcgcyxaTj1uZXcgcyxRTj1uZXcgcmU7bG4uZ3JhemluZ0FsdGl0dWRlTG9jYXRpb249ZnVuY3Rpb24oZSx0KXtsZXQgbj1lLm9yaWdpbixvPWUuZGlyZWN0aW9uO2lmKCFzLmVxdWFscyhuLHMuWkVSTykpe2xldCBTPXQuZ2VvZGV0aWNTdXJmYWNlTm9ybWFsKG4sZnApO2lmKHMuZG90KG8sUyk+PTApcmV0dXJuIG59bGV0IGE9Zyh0aGlzLnJheUVsbGlwc29pZChlLHQpKSxyPXQudHJhbnNmb3JtUG9zaXRpb25Ub1NjYWxlZFNwYWNlKG8sZnApLGk9cy5ub3JtYWxpemUocixyKSxmPXMubW9zdE9ydGhvZ29uYWxBeGlzKHIscWwpLGQ9cy5ub3JtYWxpemUocy5jcm9zcyhmLGksX3cpLF93KSxjPXMubm9ybWFsaXplKHMuY3Jvc3MoaSxkLHl3KSx5dyksdT1xTjt1WzBdPWkueCx1WzFdPWkueSx1WzJdPWkueix1WzNdPWQueCx1WzRdPWQueSx1WzVdPWQueix1WzZdPWMueCx1WzddPWMueSx1WzhdPWMuejtsZXQgbD1KLnRyYW5zcG9zZSh1LFdOKSxoPUouZnJvbVNjYWxlKHQucmFkaWksWE4pLG09Si5mcm9tU2NhbGUodC5vbmVPdmVyUmFkaWksWU4pLGI9Sk47YlswXT0wLGJbMV09LW8ueixiWzJdPW8ueSxiWzNdPW8ueixiWzRdPTAsYls1XT0tby54LGJbNl09LW8ueSxiWzddPW8ueCxiWzhdPTA7bGV0IHA9Si5tdWx0aXBseShKLm11bHRpcGx5KGwsbSxBdyksYixBdykseT1KLm11bHRpcGx5KEoubXVsdGlwbHkocCxoLHd3KSx1LHd3KSxUPUoubXVsdGlwbHlCeVZlY3RvcihwLG4sS04pLF89bG4ucXVhZHJhdGljVmVjdG9yRXhwcmVzc2lvbih5LHMubmVnYXRlKFQsZnApLDAsMCwxKSxFLHcsUj1fLmxlbmd0aDtpZihSPjApe2xldCBTPXMuY2xvbmUocy5aRVJPLFpOKSxDPU51bWJlci5ORUdBVElWRV9JTkZJTklUWTtmb3IobGV0IE49MDtOPFI7KytOKXtFPUoubXVsdGlwbHlCeVZlY3RvcihoLEoubXVsdGlwbHlCeVZlY3Rvcih1LF9bTl0sVHcpLFR3KTtsZXQgUD1zLm5vcm1hbGl6ZShzLnN1YnRyYWN0KEUsbixxbCkscWwpLEY9cy5kb3QoUCxvKTtGPkMmJihDPUYsUz1zLmNsb25lKEUsUykpfWxldCBJPXQuY2FydGVzaWFuVG9DYXJ0b2dyYXBoaWMoUyxRTik7cmV0dXJuIEM9ay5jbGFtcChDLDAsMSksdz1zLm1hZ25pdHVkZShzLnN1YnRyYWN0KFMsbixxbCkpKk1hdGguc3FydCgxLUMqQyksdz1hPy13OncsSS5oZWlnaHQ9dyx0LmNhcnRvZ3JhcGhpY1RvQ2FydGVzaWFuKEksbmV3IHMpfX07JE49bmV3IHM7bG4ubGluZVNlZ21lbnRQbGFuZT1mdW5jdGlvbihlLHQsbixvKXtnKG8pfHwobz1uZXcgcyk7bGV0IGE9cy5zdWJ0cmFjdCh0LGUsJE4pLHI9bi5ub3JtYWwsaT1zLmRvdChyLGEpO2lmKE1hdGguYWJzKGkpPGsuRVBTSUxPTjYpcmV0dXJuO2xldCBmPXMuZG90KHIsZSksZD0tKG4uZGlzdGFuY2UrZikvaTtpZighKGQ8MHx8ZD4xKSlyZXR1cm4gcy5tdWx0aXBseUJ5U2NhbGFyKGEsZCxvKSxzLmFkZChlLG8sbyksb307bG4udHJpYW5nbGVQbGFuZUludGVyc2VjdGlvbj1mdW5jdGlvbihlLHQsbixvKXtsZXQgYT1vLm5vcm1hbCxyPW8uZGlzdGFuY2UsaT1zLmRvdChhLGUpK3I8MCxmPXMuZG90KGEsdCkrcjwwLGQ9cy5kb3QoYSxuKStyPDAsYz0wO2MrPWk/MTowLGMrPWY/MTowLGMrPWQ/MTowO2xldCB1LGw7aWYoKGM9PT0xfHxjPT09MikmJih1PW5ldyBzLGw9bmV3IHMpLGM9PT0xKXtpZihpKXJldHVybiBsbi5saW5lU2VnbWVudFBsYW5lKGUsdCxvLHUpLGxuLmxpbmVTZWdtZW50UGxhbmUoZSxuLG8sbCkse3Bvc2l0aW9uczpbZSx0LG4sdSxsXSxpbmRpY2VzOlswLDMsNCwxLDIsNCwxLDQsM119O2lmKGYpcmV0dXJuIGxuLmxpbmVTZWdtZW50UGxhbmUodCxuLG8sdSksbG4ubGluZVNlZ21lbnRQbGFuZSh0LGUsbyxsKSx7cG9zaXRpb25zOltlLHQsbix1LGxdLGluZGljZXM6WzEsMyw0LDIsMCw0LDIsNCwzXX07aWYoZClyZXR1cm4gbG4ubGluZVNlZ21lbnRQbGFuZShuLGUsbyx1KSxsbi5saW5lU2VnbWVudFBsYW5lKG4sdCxvLGwpLHtwb3NpdGlvbnM6W2UsdCxuLHUsbF0saW5kaWNlczpbMiwzLDQsMCwxLDQsMCw0LDNdfX1lbHNlIGlmKGM9PT0yKWlmKGkpaWYoZil7aWYoIWQpcmV0dXJuIGxuLmxpbmVTZWdtZW50UGxhbmUoZSxuLG8sdSksbG4ubGluZVNlZ21lbnRQbGFuZSh0LG4sbyxsKSx7cG9zaXRpb25zOltlLHQsbix1LGxdLGluZGljZXM6WzAsMSw0LDAsNCwzLDIsMyw0XX19ZWxzZSByZXR1cm4gbG4ubGluZVNlZ21lbnRQbGFuZShuLHQsbyx1KSxsbi5saW5lU2VnbWVudFBsYW5lKGUsdCxvLGwpLHtwb3NpdGlvbnM6W2UsdCxuLHUsbF0saW5kaWNlczpbMiwwLDQsMiw0LDMsMSwzLDRdfTtlbHNlIHJldHVybiBsbi5saW5lU2VnbWVudFBsYW5lKHQsZSxvLHUpLGxuLmxpbmVTZWdtZW50UGxhbmUobixlLG8sbCkse3Bvc2l0aW9uczpbZSx0LG4sdSxsXSxpbmRpY2VzOlsxLDIsNCwxLDQsMywwLDMsNF19fTtubz1sbn0pO2Z1bmN0aW9uIGZvKGUsdCl7dGhpcy5ub3JtYWw9cy5jbG9uZShlKSx0aGlzLmRpc3RhbmNlPXR9dmFyIGVJLHRJLG5JLG9JLGFJLHNuLGdpPVgoKCk9PntJZSgpO2dhKCk7c2UoKTtwbigpO2ZvLmZyb21Qb2ludE5vcm1hbD1mdW5jdGlvbihlLHQsbil7bGV0IG89LXMuZG90KHQsZSk7cmV0dXJuIGcobik/KHMuY2xvbmUodCxuLm5vcm1hbCksbi5kaXN0YW5jZT1vLG4pOm5ldyBmbyh0LG8pfTtlST1uZXcgcztmby5mcm9tQ2FydGVzaWFuND1mdW5jdGlvbihlLHQpe2xldCBuPXMuZnJvbUNhcnRlc2lhbjQoZSxlSSksbz1lLnc7cmV0dXJuIGcodCk/KHMuY2xvbmUobix0Lm5vcm1hbCksdC5kaXN0YW5jZT1vLHQpOm5ldyBmbyhuLG8pfTtmby5nZXRQb2ludERpc3RhbmNlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHMuZG90KGUubm9ybWFsLHQpK2UuZGlzdGFuY2V9O3RJPW5ldyBzO2ZvLnByb2plY3RQb2ludE9udG9QbGFuZT1mdW5jdGlvbihlLHQsbil7ZyhuKXx8KG49bmV3IHMpO2xldCBvPWZvLmdldFBvaW50RGlzdGFuY2UoZSx0KSxhPXMubXVsdGlwbHlCeVNjYWxhcihlLm5vcm1hbCxvLHRJKTtyZXR1cm4gcy5zdWJ0cmFjdCh0LGEsbil9O25JPW5ldyAkLG9JPW5ldyBkdCxhST1uZXcgcztmby50cmFuc2Zvcm09ZnVuY3Rpb24oZSx0LG4pe2xldCBvPWUubm9ybWFsLGE9ZS5kaXN0YW5jZSxyPSQuaW52ZXJzZVRyYW5zcG9zZSh0LG5JKSxpPWR0LmZyb21FbGVtZW50cyhvLngsby55LG8ueixhLG9JKTtpPSQubXVsdGlwbHlCeVZlY3RvcihyLGksaSk7bGV0IGY9cy5mcm9tQ2FydGVzaWFuNChpLGFJKTtyZXR1cm4gaT1kdC5kaXZpZGVCeVNjYWxhcihpLHMubWFnbml0dWRlKGYpLGkpLGZvLmZyb21DYXJ0ZXNpYW40KGksbil9O2ZvLmNsb25lPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGcodCk/KHMuY2xvbmUoZS5ub3JtYWwsdC5ub3JtYWwpLHQuZGlzdGFuY2U9ZS5kaXN0YW5jZSx0KTpuZXcgZm8oZS5ub3JtYWwsZS5kaXN0YW5jZSl9O2ZvLmVxdWFscz1mdW5jdGlvbihlLHQpe3JldHVybiBlLmRpc3RhbmNlPT09dC5kaXN0YW5jZSYmcy5lcXVhbHMoZS5ub3JtYWwsdC5ub3JtYWwpfTtmby5PUklHSU5fWFlfUExBTkU9T2JqZWN0LmZyZWV6ZShuZXcgZm8ocy5VTklUX1osMCkpO2ZvLk9SSUdJTl9ZWl9QTEFORT1PYmplY3QuZnJlZXplKG5ldyBmbyhzLlVOSVRfWCwwKSk7Zm8uT1JJR0lOX1pYX1BMQU5FPU9iamVjdC5mcmVlemUobmV3IGZvKHMuVU5JVF9ZLDApKTtzbj1mb30pO3ZhciBkcCx4dyxPdz1YKCgpPT57bXQoKTtzZSgpO2RwPXt9O2RwLmNhbGN1bGF0ZUFDTVI9ZnVuY3Rpb24oZSl7ZT1lPz9DZS5FTVBUWV9PQkpFQ1Q7bGV0IHQ9ZS5pbmRpY2VzLG49ZS5tYXhpbXVtSW5kZXgsbz1lLmNhY2hlU2l6ZT8/MjQsYT10Lmxlbmd0aDtpZighZyhuKSl7bj0wO2xldCBmPTAsZD10W2ZdO2Zvcig7ZjxhOylkPm4mJihuPWQpLCsrZixkPXRbZl19bGV0IHI9W107Zm9yKGxldCBmPTA7ZjxuKzE7ZisrKXJbZl09MDtsZXQgaT1vKzE7Zm9yKGxldCBmPTA7ZjxhOysrZilpLXJbdFtmXV0+byYmKHJbdFtmXV09aSwrK2kpO3JldHVybihpLW8rMSkvKGEvMyl9O2RwLnRpcHNpZnk9ZnVuY3Rpb24oZSl7ZT1lPz9DZS5FTVBUWV9PQkpFQ1Q7bGV0IHQ9ZS5pbmRpY2VzLG49ZS5tYXhpbXVtSW5kZXgsbz1lLmNhY2hlU2l6ZT8/MjQsYTtmdW5jdGlvbiByKEYsQSx4LE0pe2Zvcig7QS5sZW5ndGg+PTE7KXtsZXQgdj1BW0EubGVuZ3RoLTFdO2lmKEEuc3BsaWNlKEEubGVuZ3RoLTEsMSksRlt2XS5udW1MaXZlVHJpYW5nbGVzPjApcmV0dXJuIHZ9Zm9yKDthPE07KXtpZihGW2FdLm51bUxpdmVUcmlhbmdsZXM+MClyZXR1cm4rK2EsYS0xOysrYX1yZXR1cm4tMX1mdW5jdGlvbiBpKEYsQSx4LE0sdixVLHope2xldCBEPS0xLEcsSD0tMSxPPTA7Zm9yKDtPPHgubGVuZ3RoOyl7bGV0IFo9eFtPXTtNW1pdLm51bUxpdmVUcmlhbmdsZXMmJihHPTAsdi1NW1pdLnRpbWVTdGFtcCsyKk1bWl0ubnVtTGl2ZVRyaWFuZ2xlczw9QSYmKEc9di1NW1pdLnRpbWVTdGFtcCksKEc+SHx8SD09PS0xKSYmKEg9RyxEPVopKSwrK099cmV0dXJuIEQ9PT0tMT9yKE0sVSxGLHopOkR9bGV0IGY9dC5sZW5ndGgsZD0wLGM9MCx1PXRbY10sbD1mO2lmKGcobikpZD1uKzE7ZWxzZXtmb3IoO2M8bDspdT5kJiYoZD11KSwrK2MsdT10W2NdO2lmKGQ9PT0tMSlyZXR1cm4gMDsrK2R9bGV0IGg9W10sbTtmb3IobT0wO208ZDttKyspaFttXT17bnVtTGl2ZVRyaWFuZ2xlczowLHRpbWVTdGFtcDowLHZlcnRleFRyaWFuZ2xlczpbXX07Yz0wO2xldCBiPTA7Zm9yKDtjPGw7KWhbdFtjXV0udmVydGV4VHJpYW5nbGVzLnB1c2goYiksKytoW3RbY11dLm51bUxpdmVUcmlhbmdsZXMsaFt0W2MrMV1dLnZlcnRleFRyaWFuZ2xlcy5wdXNoKGIpLCsraFt0W2MrMV1dLm51bUxpdmVUcmlhbmdsZXMsaFt0W2MrMl1dLnZlcnRleFRyaWFuZ2xlcy5wdXNoKGIpLCsraFt0W2MrMl1dLm51bUxpdmVUcmlhbmdsZXMsKytiLGMrPTM7bGV0IHA9MCx5PW8rMTthPTE7bGV0IFQ9W10sXz1bXSxFLHcsUj0wLFM9W10sQz1mLzMsST1bXTtmb3IobT0wO208QzttKyspSVttXT0hMTtsZXQgTixQO2Zvcig7cCE9PS0xOyl7VD1bXSx3PWhbcF0sUD13LnZlcnRleFRyaWFuZ2xlcy5sZW5ndGg7Zm9yKGxldCBGPTA7RjxQOysrRilpZihiPXcudmVydGV4VHJpYW5nbGVzW0ZdLCFJW2JdKXtJW2JdPSEwLGM9YitiK2I7Zm9yKGxldCBBPTA7QTwzOysrQSlOPXRbY10sVC5wdXNoKE4pLF8ucHVzaChOKSxTW1JdPU4sKytSLEU9aFtOXSwtLUUubnVtTGl2ZVRyaWFuZ2xlcyx5LUUudGltZVN0YW1wPm8mJihFLnRpbWVTdGFtcD15LCsreSksKytjfXA9aSh0LG8sVCxoLHksXyxkKX1yZXR1cm4gU307eHc9ZHB9KTtmdW5jdGlvbiAkbChlLHQsbixvLGEpe2VbdCsrXT1uLGVbdCsrXT1vLGVbdCsrXT1vLGVbdCsrXT1hLGVbdCsrXT1hLGVbdF09bn1mdW5jdGlvbiBySShlKXtsZXQgdD1lLmxlbmd0aCxuPXQvMyo2LG89a2UuY3JlYXRlVHlwZWRBcnJheSh0LG4pLGE9MDtmb3IobGV0IHI9MDtyPHQ7cis9MyxhKz02KSRsKG8sYSxlW3JdLGVbcisxXSxlW3IrMl0pO3JldHVybiBvfWZ1bmN0aW9uIGlJKGUpe2xldCB0PWUubGVuZ3RoO2lmKHQ+PTMpe2xldCBuPSh0LTIpKjYsbz1rZS5jcmVhdGVUeXBlZEFycmF5KHQsbik7JGwobywwLGVbMF0sZVsxXSxlWzJdKTtsZXQgYT02O2ZvcihsZXQgcj0zO3I8dDsrK3IsYSs9NikkbChvLGEsZVtyLTFdLGVbcl0sZVtyLTJdKTtyZXR1cm4gb31yZXR1cm4gbmV3IFVpbnQxNkFycmF5fWZ1bmN0aW9uIGNJKGUpe2lmKGUubGVuZ3RoPjApe2xldCB0PWUubGVuZ3RoLTEsbj0odC0xKSo2LG89a2UuY3JlYXRlVHlwZWRBcnJheSh0LG4pLGE9ZVswXSxyPTA7Zm9yKGxldCBpPTE7aTx0OysraSxyKz02KSRsKG8scixhLGVbaV0sZVtpKzFdKTtyZXR1cm4gb31yZXR1cm4gbmV3IFVpbnQxNkFycmF5fWZ1bmN0aW9uIFN3KGUpe2xldCB0PXt9O2ZvcihsZXQgbiBpbiBlKWlmKGUuaGFzT3duUHJvcGVydHkobikmJmcoZVtuXSkmJmcoZVtuXS52YWx1ZXMpKXtsZXQgbz1lW25dO3Rbbl09bmV3IGllKHtjb21wb25lbnREYXRhdHlwZTpvLmNvbXBvbmVudERhdGF0eXBlLGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6by5jb21wb25lbnRzUGVyQXR0cmlidXRlLG5vcm1hbGl6ZTpvLm5vcm1hbGl6ZSx2YWx1ZXM6W119KX1yZXR1cm4gdH1mdW5jdGlvbiBzSShlLHQsbil7Zm9yKGxldCBvIGluIHQpaWYodC5oYXNPd25Qcm9wZXJ0eShvKSYmZyh0W29dKSYmZyh0W29dLnZhbHVlcykpe2xldCBhPXRbb107Zm9yKGxldCByPTA7cjxhLmNvbXBvbmVudHNQZXJBdHRyaWJ1dGU7KytyKWVbb10udmFsdWVzLnB1c2goYS52YWx1ZXNbbiphLmNvbXBvbmVudHNQZXJBdHRyaWJ1dGUrcl0pfX1mdW5jdGlvbiBscChlLHQpe2lmKGcodCkpe2xldCBuPXQudmFsdWVzLG89bi5sZW5ndGg7Zm9yKGxldCBhPTA7YTxvO2ErPTMpcy51bnBhY2sobixhLEhhKSwkLm11bHRpcGx5QnlQb2ludChlLEhhLEhhKSxzLnBhY2soSGEsbixhKX19ZnVuY3Rpb24gaHAoZSx0KXtpZihnKHQpKXtsZXQgbj10LnZhbHVlcyxvPW4ubGVuZ3RoO2ZvcihsZXQgYT0wO2E8bzthKz0zKXMudW5wYWNrKG4sYSxIYSksSi5tdWx0aXBseUJ5VmVjdG9yKGUsSGEsSGEpLEhhPXMubm9ybWFsaXplKEhhLEhhKSxzLnBhY2soSGEsbixhKX19ZnVuY3Rpb24gZEkoZSx0KXtsZXQgbj1lLmxlbmd0aCxvPXt9LGE9ZVswXVt0XS5hdHRyaWJ1dGVzLHI7Zm9yKHIgaW4gYSlpZihhLmhhc093blByb3BlcnR5KHIpJiZnKGFbcl0pJiZnKGFbcl0udmFsdWVzKSl7bGV0IGk9YVtyXSxmPWkudmFsdWVzLmxlbmd0aCxkPSEwO2ZvcihsZXQgYz0xO2M8bjsrK2Mpe2xldCB1PWVbY11bdF0uYXR0cmlidXRlc1tyXTtpZighZyh1KXx8aS5jb21wb25lbnREYXRhdHlwZSE9PXUuY29tcG9uZW50RGF0YXR5cGV8fGkuY29tcG9uZW50c1BlckF0dHJpYnV0ZSE9PXUuY29tcG9uZW50c1BlckF0dHJpYnV0ZXx8aS5ub3JtYWxpemUhPT11Lm5vcm1hbGl6ZSl7ZD0hMTticmVha31mKz11LnZhbHVlcy5sZW5ndGh9ZCYmKG9bcl09bmV3IGllKHtjb21wb25lbnREYXRhdHlwZTppLmNvbXBvbmVudERhdGF0eXBlLGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6aS5jb21wb25lbnRzUGVyQXR0cmlidXRlLG5vcm1hbGl6ZTppLm5vcm1hbGl6ZSx2YWx1ZXM6bmUuY3JlYXRlVHlwZWRBcnJheShpLmNvbXBvbmVudERhdGF0eXBlLGYpfSkpfXJldHVybiBvfWZ1bmN0aW9uIG1wKGUsdCl7bGV0IG49ZS5sZW5ndGgsbyxhLHIsaSxmPWVbMF0ubW9kZWxNYXRyaXgsZD1nKGVbMF1bdF0uaW5kaWNlcyksYz1lWzBdW3RdLnByaW1pdGl2ZVR5cGUsdT1kSShlLHQpLGwsaCxtO2ZvcihvIGluIHUpaWYodS5oYXNPd25Qcm9wZXJ0eShvKSlmb3IobD11W29dLnZhbHVlcyxpPTAsYT0wO2E8bjsrK2EpZm9yKGg9ZVthXVt0XS5hdHRyaWJ1dGVzW29dLnZhbHVlcyxtPWgubGVuZ3RoLHI9MDtyPG07KytyKWxbaSsrXT1oW3JdO2xldCBiO2lmKGQpe2xldCBfPTA7Zm9yKGE9MDthPG47KythKV8rPWVbYV1bdF0uaW5kaWNlcy5sZW5ndGg7bGV0IEU9dmUuY29tcHV0ZU51bWJlck9mVmVydGljZXMobmV3IHZlKHthdHRyaWJ1dGVzOnUscHJpbWl0aXZlVHlwZTpVZS5QT0lOVFN9KSksdz1rZS5jcmVhdGVUeXBlZEFycmF5KEUsXyksUj0wLFM9MDtmb3IoYT0wO2E8bjsrK2Epe2xldCBDPWVbYV1bdF0uaW5kaWNlcyxJPUMubGVuZ3RoO2ZvcihpPTA7aTxJOysraSl3W1IrK109UytDW2ldO1MrPXZlLmNvbXB1dGVOdW1iZXJPZlZlcnRpY2VzKGVbYV1bdF0pfWI9d31sZXQgcD1uZXcgcyx5PTAsVDtmb3IoYT0wO2E8bjsrK2Epe2lmKFQ9ZVthXVt0XS5ib3VuZGluZ1NwaGVyZSwhZyhUKSl7cD12b2lkIDA7YnJlYWt9cy5hZGQoVC5jZW50ZXIscCxwKX1pZihnKHApKWZvcihzLmRpdmlkZUJ5U2NhbGFyKHAsbixwKSxhPTA7YTxuOysrYSl7VD1lW2FdW3RdLmJvdW5kaW5nU3BoZXJlO2xldCBfPXMubWFnbml0dWRlKHMuc3VidHJhY3QoVC5jZW50ZXIscCx1SSkpK1QucmFkaXVzO18+eSYmKHk9Xyl9cmV0dXJuIG5ldyB2ZSh7YXR0cmlidXRlczp1LGluZGljZXM6YixwcmltaXRpdmVUeXBlOmMsYm91bmRpbmdTcGhlcmU6ZyhwKT9uZXcgZ2UocCx5KTp2b2lkIDB9KX1mdW5jdGlvbiBtSShlKXtpZihnKGUuaW5kaWNlcykpcmV0dXJuIGU7bGV0IHQ9dmUuY29tcHV0ZU51bWJlck9mVmVydGljZXMoZSksbj1rZS5jcmVhdGVUeXBlZEFycmF5KHQsdCk7Zm9yKGxldCBvPTA7bzx0OysrbyluW29dPW87cmV0dXJuIGUuaW5kaWNlcz1uLGV9ZnVuY3Rpb24gYkkoZSl7bGV0IHQ9dmUuY29tcHV0ZU51bWJlck9mVmVydGljZXMoZSksbj1rZS5jcmVhdGVUeXBlZEFycmF5KHQsKHQtMikqMyk7blswXT0xLG5bMV09MCxuWzJdPTI7bGV0IG89Mztmb3IobGV0IGE9MzthPHQ7KythKW5bbysrXT1hLTEsbltvKytdPTAsbltvKytdPWE7cmV0dXJuIGUuaW5kaWNlcz1uLGUucHJpbWl0aXZlVHlwZT1VZS5UUklBTkdMRVMsZX1mdW5jdGlvbiBwSShlKXtsZXQgdD12ZS5jb21wdXRlTnVtYmVyT2ZWZXJ0aWNlcyhlKSxuPWtlLmNyZWF0ZVR5cGVkQXJyYXkodCwodC0yKSozKTtuWzBdPTAsblsxXT0xLG5bMl09Mix0PjMmJihuWzNdPTAsbls0XT0yLG5bNV09Myk7bGV0IG89Njtmb3IobGV0IGE9MzthPHQtMTthKz0yKW5bbysrXT1hLG5bbysrXT1hLTEsbltvKytdPWErMSxhKzI8dCYmKG5bbysrXT1hLG5bbysrXT1hKzEsbltvKytdPWErMik7cmV0dXJuIGUuaW5kaWNlcz1uLGUucHJpbWl0aXZlVHlwZT1VZS5UUklBTkdMRVMsZX1mdW5jdGlvbiBnSShlKXtpZihnKGUuaW5kaWNlcykpcmV0dXJuIGU7bGV0IHQ9dmUuY29tcHV0ZU51bWJlck9mVmVydGljZXMoZSksbj1rZS5jcmVhdGVUeXBlZEFycmF5KHQsdCk7Zm9yKGxldCBvPTA7bzx0OysrbyluW29dPW87cmV0dXJuIGUuaW5kaWNlcz1uLGV9ZnVuY3Rpb24gX0koZSl7bGV0IHQ9dmUuY29tcHV0ZU51bWJlck9mVmVydGljZXMoZSksbj1rZS5jcmVhdGVUeXBlZEFycmF5KHQsKHQtMSkqMik7blswXT0wLG5bMV09MTtsZXQgbz0yO2ZvcihsZXQgYT0yO2E8dDsrK2EpbltvKytdPWEtMSxuW28rK109YTtyZXR1cm4gZS5pbmRpY2VzPW4sZS5wcmltaXRpdmVUeXBlPVVlLkxJTkVTLGV9ZnVuY3Rpb24geUkoZSl7bGV0IHQ9dmUuY29tcHV0ZU51bWJlck9mVmVydGljZXMoZSksbj1rZS5jcmVhdGVUeXBlZEFycmF5KHQsdCoyKTtuWzBdPTAsblsxXT0xO2xldCBvPTI7Zm9yKGxldCBhPTI7YTx0OysrYSluW28rK109YS0xLG5bbysrXT1hO3JldHVybiBuW28rK109dC0xLG5bb109MCxlLmluZGljZXM9bixlLnByaW1pdGl2ZVR5cGU9VWUuTElORVMsZX1mdW5jdGlvbiBBSShlKXtzd2l0Y2goZS5wcmltaXRpdmVUeXBlKXtjYXNlIFVlLlRSSUFOR0xFX0ZBTjpyZXR1cm4gYkkoZSk7Y2FzZSBVZS5UUklBTkdMRV9TVFJJUDpyZXR1cm4gcEkoZSk7Y2FzZSBVZS5UUklBTkdMRVM6cmV0dXJuIG1JKGUpO2Nhc2UgVWUuTElORV9TVFJJUDpyZXR1cm4gX0koZSk7Y2FzZSBVZS5MSU5FX0xPT1A6cmV0dXJuIHlJKGUpO2Nhc2UgVWUuTElORVM6cmV0dXJuIGdJKGUpfXJldHVybiBlfWZ1bmN0aW9uIF9pKGUsdCl7TWF0aC5hYnMoZS55KTxrLkVQU0lMT042JiYodD9lLnk9LWsuRVBTSUxPTjY6ZS55PWsuRVBTSUxPTjYpfWZ1bmN0aW9uIHdJKGUsdCxuKXtpZihlLnkhPT0wJiZ0LnkhPT0wJiZuLnkhPT0wKXtfaShlLGUueTwwKSxfaSh0LHQueTwwKSxfaShuLG4ueTwwKTtyZXR1cm59bGV0IG89TWF0aC5hYnMoZS55KSxhPU1hdGguYWJzKHQueSkscj1NYXRoLmFicyhuLnkpLGk7bz5hP28+cj9pPWsuc2lnbihlLnkpOmk9ay5zaWduKG4ueSk6YT5yP2k9ay5zaWduKHQueSk6aT1rLnNpZ24obi55KTtsZXQgZj1pPDA7X2koZSxmKSxfaSh0LGYpLF9pKG4sZil9ZnVuY3Rpb24geGEoZSx0LG4sbyl7cy5hZGQoZSxzLm11bHRpcGx5QnlTY2FsYXIocy5zdWJ0cmFjdCh0LGUsUHcpLGUueS8oZS55LXQueSksUHcpLG4pLHMuY2xvbmUobixvKSxfaShuLCEwKSxfaShvLCExKX1mdW5jdGlvbiBUSShlLHQsbil7aWYoZS54Pj0wfHx0Lng+PTB8fG4ueD49MClyZXR1cm47d0koZSx0LG4pO2xldCBvPWUueTwwLGE9dC55PDAscj1uLnk8MCxpPTA7aSs9bz8xOjAsaSs9YT8xOjAsaSs9cj8xOjA7bGV0IGY9YnAuaW5kaWNlcztpPT09MT8oZlsxXT0zLGZbMl09NCxmWzVdPTYsZls3XT02LGZbOF09NSxvPyh4YShlLHQsaWMsc2MpLHhhKGUsbixjYyxmYyksZlswXT0wLGZbM109MSxmWzRdPTIsZls2XT0xKTphPyh4YSh0LG4saWMsc2MpLHhhKHQsZSxjYyxmYyksZlswXT0xLGZbM109MixmWzRdPTAsZls2XT0yKTpyJiYoeGEobixlLGljLHNjKSx4YShuLHQsY2MsZmMpLGZbMF09MixmWzNdPTAsZls0XT0xLGZbNl09MCkpOmk9PT0yJiYoZlsyXT00LGZbNF09NCxmWzVdPTMsZls3XT01LGZbOF09NixvP2E/cnx8KHhhKG4sZSxpYyxzYykseGEobix0LGNjLGZjKSxmWzBdPTAsZlsxXT0xLGZbM109MCxmWzZdPTIpOih4YSh0LG4saWMsc2MpLHhhKHQsZSxjYyxmYyksZlswXT0yLGZbMV09MCxmWzNdPTIsZls2XT0xKTooeGEoZSx0LGljLHNjKSx4YShlLG4sY2MsZmMpLGZbMF09MSxmWzFdPTIsZlszXT0xLGZbNl09MCkpO2xldCBkPWJwLnBvc2l0aW9ucztyZXR1cm4gZFswXT1lLGRbMV09dCxkWzJdPW4sZC5sZW5ndGg9MywoaT09PTF8fGk9PT0yKSYmKGRbM109aWMsZFs0XT1jYyxkWzVdPXNjLGRbNl09ZmMsZC5sZW5ndGg9NyksYnB9ZnVuY3Rpb24ga3coZSx0KXtsZXQgbj1lLmF0dHJpYnV0ZXM7aWYobi5wb3NpdGlvbi52YWx1ZXMubGVuZ3RoPT09MClyZXR1cm47Zm9yKGxldCBhIGluIG4paWYobi5oYXNPd25Qcm9wZXJ0eShhKSYmZyhuW2FdKSYmZyhuW2FdLnZhbHVlcykpe2xldCByPW5bYV07ci52YWx1ZXM9bmUuY3JlYXRlVHlwZWRBcnJheShyLmNvbXBvbmVudERhdGF0eXBlLHIudmFsdWVzKX1sZXQgbz12ZS5jb21wdXRlTnVtYmVyT2ZWZXJ0aWNlcyhlKTtyZXR1cm4gZS5pbmRpY2VzPWtlLmNyZWF0ZVR5cGVkQXJyYXkobyxlLmluZGljZXMpLHQmJihlLmJvdW5kaW5nU3BoZXJlPWdlLmZyb21WZXJ0aWNlcyhuLnBvc2l0aW9uLnZhbHVlcykpLGV9ZnVuY3Rpb24gZHMoZSl7bGV0IHQ9ZS5hdHRyaWJ1dGVzLG49e307Zm9yKGxldCBvIGluIHQpaWYodC5oYXNPd25Qcm9wZXJ0eShvKSYmZyh0W29dKSYmZyh0W29dLnZhbHVlcykpe2xldCBhPXRbb107bltvXT1uZXcgaWUoe2NvbXBvbmVudERhdGF0eXBlOmEuY29tcG9uZW50RGF0YXR5cGUsY29tcG9uZW50c1BlckF0dHJpYnV0ZTphLmNvbXBvbmVudHNQZXJBdHRyaWJ1dGUsbm9ybWFsaXplOmEubm9ybWFsaXplLHZhbHVlczpbXX0pfXJldHVybiBuZXcgdmUoe2F0dHJpYnV0ZXM6bixpbmRpY2VzOltdLHByaW1pdGl2ZVR5cGU6ZS5wcmltaXRpdmVUeXBlfSl9ZnVuY3Rpb24geXAoZSx0LG4pe2xldCBvPWcoZS5nZW9tZXRyeS5ib3VuZGluZ1NwaGVyZSk7dD1rdyh0LG8pLG49a3cobixvKSxnKG4pJiYhZyh0KT9lLmdlb21ldHJ5PW46IWcobikmJmcodCk/ZS5nZW9tZXRyeT10OihlLndlc3RIZW1pc3BoZXJlR2VvbWV0cnk9dCxlLmVhc3RIZW1pc3BoZXJlR2VvbWV0cnk9bixlLmdlb21ldHJ5PXZvaWQgMCl9ZnVuY3Rpb24gQXAoZSx0KXtsZXQgbj1uZXcgZSxvPW5ldyBlLGE9bmV3IGU7cmV0dXJuIGZ1bmN0aW9uKHIsaSxmLGQsYyx1LGwsaCl7bGV0IG09ZS5mcm9tQXJyYXkoYyxyKnQsbiksYj1lLmZyb21BcnJheShjLGkqdCxvKSxwPWUuZnJvbUFycmF5KGMsZip0LGEpO2UubXVsdGlwbHlCeVNjYWxhcihtLGQueCxtKSxlLm11bHRpcGx5QnlTY2FsYXIoYixkLnksYiksZS5tdWx0aXBseUJ5U2NhbGFyKHAsZC56LHApO2xldCB5PWUuYWRkKG0sYixtKTtlLmFkZCh5LHAseSksaCYmZS5ub3JtYWxpemUoeSx5KSxlLnBhY2soeSx1LGwqdCl9fWZ1bmN0aW9uIEpsKGUsdCxuLG8sYSxyLGksZixkLGMsdSxsLGgsbSxiLHApe2lmKCFnKHIpJiYhZyhpKSYmIWcoZikmJiFnKGQpJiYhZyhjKSYmbT09PTApcmV0dXJuO2xldCB5PXMuZnJvbUFycmF5KGEsZSozLGtmKSxUPXMuZnJvbUFycmF5KGEsdCozLHBwKSxfPXMuZnJvbUFycmF5KGEsbiozLGdwKSxFPWR3KG8seSxULF8seEkpO2lmKGcoRSkpe2lmKGcocikmJlFsKGUsdCxuLEUscixsLm5vcm1hbC52YWx1ZXMscCwhMCksZyhjKSl7bGV0IHc9cy5mcm9tQXJyYXkoYyxlKjMsa2YpLFI9cy5mcm9tQXJyYXkoYyx0KjMscHApLFM9cy5mcm9tQXJyYXkoYyxuKjMsZ3ApO3MubXVsdGlwbHlCeVNjYWxhcih3LEUueCx3KSxzLm11bHRpcGx5QnlTY2FsYXIoUixFLnksUikscy5tdWx0aXBseUJ5U2NhbGFyKFMsRS56LFMpO2xldCBDOyFzLmVxdWFscyh3LHMuWkVSTyl8fCFzLmVxdWFscyhSLHMuWkVSTyl8fCFzLmVxdWFscyhTLHMuWkVSTyk/KEM9cy5hZGQodyxSLHcpLHMuYWRkKEMsUyxDKSxzLm5vcm1hbGl6ZShDLEMpKTooQz1rZixDLng9MCxDLnk9MCxDLno9MCkscy5wYWNrKEMsbC5leHRydWRlRGlyZWN0aW9uLnZhbHVlcyxwKjMpfWlmKGcodSkmJlJJKGUsdCxuLEUsdSxsLmFwcGx5T2Zmc2V0LnZhbHVlcyxwKSxnKGkpJiZRbChlLHQsbixFLGksbC50YW5nZW50LnZhbHVlcyxwLCEwKSxnKGYpJiZRbChlLHQsbixFLGYsbC5iaXRhbmdlbnQudmFsdWVzLHAsITApLGcoZCkmJkx3KGUsdCxuLEUsZCxsLnN0LnZhbHVlcyxwKSxtPjApZm9yKGxldCB3PTA7dzxtO3crKyl7bGV0IFI9aFt3XTtPSShlLHQsbixFLHAsYltSXSxsW1JdKX19fWZ1bmN0aW9uIE9JKGUsdCxuLG8sYSxyLGkpe2xldCBmPXIuY29tcG9uZW50c1BlckF0dHJpYnV0ZSxkPXIudmFsdWVzLGM9aS52YWx1ZXM7c3dpdGNoKGYpe2Nhc2UgNDpFSShlLHQsbixvLGQsYyxhLCExKTticmVhaztjYXNlIDM6UWwoZSx0LG4sbyxkLGMsYSwhMSk7YnJlYWs7Y2FzZSAyOkx3KGUsdCxuLG8sZCxjLGEsITEpO2JyZWFrO2RlZmF1bHQ6Y1thXT1kW2VdKm8ueCtkW3RdKm8ueStkW25dKm8uen19ZnVuY3Rpb24gdXIoZSx0LG4sbyxhLHIpe2xldCBpPWUucG9zaXRpb24udmFsdWVzLmxlbmd0aC8zO2lmKGEhPT0tMSl7bGV0IGY9b1thXSxkPW5bZl07cmV0dXJuIGQ9PT0tMT8obltmXT1pLGUucG9zaXRpb24udmFsdWVzLnB1c2goci54LHIueSxyLnopLHQucHVzaChpKSxpKToodC5wdXNoKGQpLGQpfXJldHVybiBlLnBvc2l0aW9uLnZhbHVlcy5wdXNoKHIueCxyLnksci56KSx0LnB1c2goaSksaX1mdW5jdGlvbiB2dyhlKXtsZXQgdD1lLmdlb21ldHJ5LG49dC5hdHRyaWJ1dGVzLG89bi5wb3NpdGlvbi52YWx1ZXMsYT1nKG4ubm9ybWFsKT9uLm5vcm1hbC52YWx1ZXM6dm9pZCAwLHI9ZyhuLmJpdGFuZ2VudCk/bi5iaXRhbmdlbnQudmFsdWVzOnZvaWQgMCxpPWcobi50YW5nZW50KT9uLnRhbmdlbnQudmFsdWVzOnZvaWQgMCxmPWcobi5zdCk/bi5zdC52YWx1ZXM6dm9pZCAwLGQ9ZyhuLmV4dHJ1ZGVEaXJlY3Rpb24pP24uZXh0cnVkZURpcmVjdGlvbi52YWx1ZXM6dm9pZCAwLGM9ZyhuLmFwcGx5T2Zmc2V0KT9uLmFwcGx5T2Zmc2V0LnZhbHVlczp2b2lkIDAsdT10LmluZGljZXMsbD1bXTtmb3IobGV0IEMgaW4gbiluLmhhc093blByb3BlcnR5KEMpJiYhU0lbQ10mJmcobltDXSkmJmwucHVzaChDKTtsZXQgaD1sLmxlbmd0aCxtPWRzKHQpLGI9ZHModCkscCx5LFQsXyxFLHc9W107dy5sZW5ndGg9by5sZW5ndGgvMztsZXQgUj1bXTtmb3IoUi5sZW5ndGg9by5sZW5ndGgvMyxFPTA7RTx3Lmxlbmd0aDsrK0Upd1tFXT0tMSxSW0VdPS0xO2xldCBTPXUubGVuZ3RoO2ZvcihFPTA7RTxTO0UrPTMpe2xldCBDPXVbRV0sST11W0UrMV0sTj11W0UrMl0sUD1zLmZyb21BcnJheShvLEMqMyksRj1zLmZyb21BcnJheShvLEkqMyksQT1zLmZyb21BcnJheShvLE4qMykseD1USShQLEYsQSk7aWYoZyh4KSYmeC5wb3NpdGlvbnMubGVuZ3RoPjMpe2xldCBNPXgucG9zaXRpb25zLHY9eC5pbmRpY2VzLFU9di5sZW5ndGg7Zm9yKGxldCB6PTA7ejxVOysreil7bGV0IEQ9dlt6XSxHPU1bRF07Ry55PDA/KHA9Yi5hdHRyaWJ1dGVzLHk9Yi5pbmRpY2VzLFQ9dyk6KHA9bS5hdHRyaWJ1dGVzLHk9bS5pbmRpY2VzLFQ9UiksXz11cihwLHksVCx1LEQ8Mz9FK0Q6LTEsRyksSmwoQyxJLE4sRyxvLGEsaSxyLGYsZCxjLHAsbCxoLG4sXyl9fWVsc2UgZyh4KSYmKFA9eC5wb3NpdGlvbnNbMF0sRj14LnBvc2l0aW9uc1sxXSxBPXgucG9zaXRpb25zWzJdKSxQLnk8MD8ocD1iLmF0dHJpYnV0ZXMseT1iLmluZGljZXMsVD13KToocD1tLmF0dHJpYnV0ZXMseT1tLmluZGljZXMsVD1SKSxfPXVyKHAseSxULHUsRSxQKSxKbChDLEksTixQLG8sYSxpLHIsZixkLGMscCxsLGgsbixfKSxfPXVyKHAseSxULHUsRSsxLEYpLEpsKEMsSSxOLEYsbyxhLGkscixmLGQsYyxwLGwsaCxuLF8pLF89dXIocCx5LFQsdSxFKzIsQSksSmwoQyxJLE4sQSxvLGEsaSxyLGYsZCxjLHAsbCxoLG4sXyl9eXAoZSxiLG0pfWZ1bmN0aW9uIGZzKGUsdCxuLG8sYSxyLGkpe2lmKCFnKGkpKXJldHVybjtsZXQgZj1zLmZyb21BcnJheShvLGUqMyxrZik7cy5lcXVhbHNFcHNpbG9uKGYsbixrLkVQU0lMT04xMCk/ci5hcHBseU9mZnNldC52YWx1ZXNbYV09aVtlXTpyLmFwcGx5T2Zmc2V0LnZhbHVlc1thXT1pW3RdfWZ1bmN0aW9uIEZ3KGUpe2xldCB0PWUuZ2VvbWV0cnksbj10LmF0dHJpYnV0ZXMsbz1uLnBvc2l0aW9uLnZhbHVlcyxhPWcobi5hcHBseU9mZnNldCk/bi5hcHBseU9mZnNldC52YWx1ZXM6dm9pZCAwLHI9dC5pbmRpY2VzLGk9ZHModCksZj1kcyh0KSxkLGM9ci5sZW5ndGgsdT1bXTt1Lmxlbmd0aD1vLmxlbmd0aC8zO2xldCBsPVtdO2ZvcihsLmxlbmd0aD1vLmxlbmd0aC8zLGQ9MDtkPHUubGVuZ3RoOysrZCl1W2RdPS0xLGxbZF09LTE7Zm9yKGQ9MDtkPGM7ZCs9Mil7bGV0IGg9cltkXSxtPXJbZCsxXSxiPXMuZnJvbUFycmF5KG8saCozLGtmKSxwPXMuZnJvbUFycmF5KG8sbSozLHBwKSx5O01hdGguYWJzKGIueSk8ay5FUFNJTE9ONiYmKGIueTwwP2IueT0tay5FUFNJTE9ONjpiLnk9ay5FUFNJTE9ONiksTWF0aC5hYnMocC55KTxrLkVQU0lMT042JiYocC55PDA/cC55PS1rLkVQU0lMT042OnAueT1rLkVQU0lMT042KTtsZXQgVD1pLmF0dHJpYnV0ZXMsXz1pLmluZGljZXMsRT1sLHc9Zi5hdHRyaWJ1dGVzLFI9Zi5pbmRpY2VzLFM9dSxDPW5vLmxpbmVTZWdtZW50UGxhbmUoYixwLGp3LGdwKTtpZihnKEMpKXtsZXQgST1zLm11bHRpcGx5QnlTY2FsYXIocy5VTklUX1ksNSprLkVQU0lMT045LENJKTtiLnk8MCYmKHMubmVnYXRlKEksSSksVD1mLmF0dHJpYnV0ZXMsXz1mLmluZGljZXMsRT11LHc9aS5hdHRyaWJ1dGVzLFI9aS5pbmRpY2VzLFM9bCk7bGV0IE49cy5hZGQoQyxJLE1JKTt5PXVyKFQsXyxFLHIsZCxiKSxmcyhoLG0sYixvLHksVCxhKSx5PXVyKFQsXyxFLHIsLTEsTiksZnMoaCxtLE4sbyx5LFQsYSkscy5uZWdhdGUoSSxJKSxzLmFkZChDLEksTikseT11cih3LFIsUyxyLC0xLE4pLGZzKGgsbSxOLG8seSx3LGEpLHk9dXIodyxSLFMscixkKzEscCksZnMoaCxtLHAsbyx5LHcsYSl9ZWxzZXtsZXQgSSxOLFA7Yi55PDA/KEk9Zi5hdHRyaWJ1dGVzLE49Zi5pbmRpY2VzLFA9dSk6KEk9aS5hdHRyaWJ1dGVzLE49aS5pbmRpY2VzLFA9bCkseT11cihJLE4sUCxyLGQsYiksZnMoaCxtLGIsbyx5LEksYSkseT11cihJLE4sUCxyLGQrMSxwKSxmcyhoLG0scCxvLHksSSxhKX19eXAoZSxmLGkpfWZ1bmN0aW9uIFV3KGUpe2xldCB0PWUuYXR0cmlidXRlcyxuPXQucG9zaXRpb24udmFsdWVzLG89dC5wcmV2UG9zaXRpb24udmFsdWVzLGE9dC5uZXh0UG9zaXRpb24udmFsdWVzLHI9bi5sZW5ndGg7Zm9yKGxldCBpPTA7aTxyO2krPTMpe2xldCBmPXMudW5wYWNrKG4saSx6dyk7aWYoZi54PjApY29udGludWU7bGV0IGQ9cy51bnBhY2sobyxpLEd3KTsoZi55PDAmJmQueT4wfHxmLnk+MCYmZC55PDApJiYoaS0zPjA/KG9baV09bltpLTNdLG9baSsxXT1uW2ktMl0sb1tpKzJdPW5baS0xXSk6cy5wYWNrKGYsbyxpKSk7bGV0IGM9cy51bnBhY2soYSxpLF9wKTsoZi55PDAmJmMueT4wfHxmLnk+MCYmYy55PDApJiYoaSszPHI/KGFbaV09bltpKzNdLGFbaSsxXT1uW2krNF0sYVtpKzJdPW5baSs1XSk6cy5wYWNrKGYsYSxpKSl9fWZ1bmN0aW9uIEZJKGUpe2xldCB0PWUuZ2VvbWV0cnksbj10LmF0dHJpYnV0ZXMsbz1uLnBvc2l0aW9uLnZhbHVlcyxhPW4ucHJldlBvc2l0aW9uLnZhbHVlcyxyPW4ubmV4dFBvc2l0aW9uLnZhbHVlcyxpPW4uZXhwYW5kQW5kV2lkdGgudmFsdWVzLGY9ZyhuLnN0KT9uLnN0LnZhbHVlczp2b2lkIDAsZD1nKG4uY29sb3IpP24uY29sb3IudmFsdWVzOnZvaWQgMCxjPWRzKHQpLHU9ZHModCksbCxoLG0sYj0hMSxwPW8ubGVuZ3RoLzM7Zm9yKGw9MDtsPHA7bCs9NCl7bGV0IHk9bCxUPWwrMixfPXMuZnJvbUFycmF5KG8seSozLHp3KSxFPXMuZnJvbUFycmF5KG8sVCozLEd3KTtpZihNYXRoLmFicyhfLnkpPFpsKWZvcihfLnk9WmwqKEUueTwwPy0xOjEpLG9bbCozKzFdPV8ueSxvWyhsKzEpKjMrMV09Xy55LGg9eSozO2g8eSozKzEyO2grPTMpYVtoXT1vW2wqM10sYVtoKzFdPW9bbCozKzFdLGFbaCsyXT1vW2wqMysyXTtpZihNYXRoLmFicyhFLnkpPFpsKWZvcihFLnk9WmwqKF8ueTwwPy0xOjEpLG9bKGwrMikqMysxXT1FLnksb1sobCszKSozKzFdPUUueSxoPXkqMztoPHkqMysxMjtoKz0zKXJbaF09b1sobCsyKSozXSxyW2grMV09b1sobCsyKSozKzFdLHJbaCsyXT1vWyhsKzIpKjMrMl07bGV0IHc9Yy5hdHRyaWJ1dGVzLFI9Yy5pbmRpY2VzLFM9dS5hdHRyaWJ1dGVzLEM9dS5pbmRpY2VzLEk9bm8ubGluZVNlZ21lbnRQbGFuZShfLEUsancsSUkpO2lmKGcoSSkpe2I9ITA7bGV0IE49cy5tdWx0aXBseUJ5U2NhbGFyKHMuVU5JVF9ZLHZJLFBJKTtfLnk8MCYmKHMubmVnYXRlKE4sTiksdz11LmF0dHJpYnV0ZXMsUj11LmluZGljZXMsUz1jLmF0dHJpYnV0ZXMsQz1jLmluZGljZXMpO2xldCBQPXMuYWRkKEksTixrSSk7dy5wb3NpdGlvbi52YWx1ZXMucHVzaChfLngsXy55LF8ueixfLngsXy55LF8ueiksdy5wb3NpdGlvbi52YWx1ZXMucHVzaChQLngsUC55LFAueiksdy5wb3NpdGlvbi52YWx1ZXMucHVzaChQLngsUC55LFAueiksdy5wcmV2UG9zaXRpb24udmFsdWVzLnB1c2goYVt5KjNdLGFbeSozKzFdLGFbeSozKzJdKSx3LnByZXZQb3NpdGlvbi52YWx1ZXMucHVzaChhW3kqMyszXSxhW3kqMys0XSxhW3kqMys1XSksdy5wcmV2UG9zaXRpb24udmFsdWVzLnB1c2goXy54LF8ueSxfLnosXy54LF8ueSxfLnopLHcubmV4dFBvc2l0aW9uLnZhbHVlcy5wdXNoKFAueCxQLnksUC56KSx3Lm5leHRQb3NpdGlvbi52YWx1ZXMucHVzaChQLngsUC55LFAueiksdy5uZXh0UG9zaXRpb24udmFsdWVzLnB1c2goUC54LFAueSxQLnopLHcubmV4dFBvc2l0aW9uLnZhbHVlcy5wdXNoKFAueCxQLnksUC56KSxzLm5lZ2F0ZShOLE4pLHMuYWRkKEksTixQKSxTLnBvc2l0aW9uLnZhbHVlcy5wdXNoKFAueCxQLnksUC56KSxTLnBvc2l0aW9uLnZhbHVlcy5wdXNoKFAueCxQLnksUC56KSxTLnBvc2l0aW9uLnZhbHVlcy5wdXNoKEUueCxFLnksRS56LEUueCxFLnksRS56KSxTLnByZXZQb3NpdGlvbi52YWx1ZXMucHVzaChQLngsUC55LFAueiksUy5wcmV2UG9zaXRpb24udmFsdWVzLnB1c2goUC54LFAueSxQLnopLFMucHJldlBvc2l0aW9uLnZhbHVlcy5wdXNoKFAueCxQLnksUC56KSxTLnByZXZQb3NpdGlvbi52YWx1ZXMucHVzaChQLngsUC55LFAueiksUy5uZXh0UG9zaXRpb24udmFsdWVzLnB1c2goRS54LEUueSxFLnosRS54LEUueSxFLnopLFMubmV4dFBvc2l0aW9uLnZhbHVlcy5wdXNoKHJbVCozXSxyW1QqMysxXSxyW1QqMysyXSksUy5uZXh0UG9zaXRpb24udmFsdWVzLnB1c2gocltUKjMrM10scltUKjMrNF0scltUKjMrNV0pO2xldCBGPVkuZnJvbUFycmF5KGkseSoyLER3KSxBPU1hdGguYWJzKEYueSk7dy5leHBhbmRBbmRXaWR0aC52YWx1ZXMucHVzaCgtMSxBLDEsQSksdy5leHBhbmRBbmRXaWR0aC52YWx1ZXMucHVzaCgtMSwtQSwxLC1BKSxTLmV4cGFuZEFuZFdpZHRoLnZhbHVlcy5wdXNoKC0xLEEsMSxBKSxTLmV4cGFuZEFuZFdpZHRoLnZhbHVlcy5wdXNoKC0xLC1BLDEsLUEpO2xldCB4PXMubWFnbml0dWRlU3F1YXJlZChzLnN1YnRyYWN0KEksXyxfcCkpO2lmKHgvPXMubWFnbml0dWRlU3F1YXJlZChzLnN1YnRyYWN0KEUsXyxfcCkpLGcoZCkpe2xldCBNPWR0LmZyb21BcnJheShkLHkqNCxCdyksdj1kdC5mcm9tQXJyYXkoZCxUKjQsQncpLFU9ay5sZXJwKE0ueCx2LngseCksej1rLmxlcnAoTS55LHYueSx4KSxEPWsubGVycChNLnosdi56LHgpLEc9ay5sZXJwKE0udyx2LncseCk7Zm9yKGg9eSo0O2g8eSo0Kzg7KytoKXcuY29sb3IudmFsdWVzLnB1c2goZFtoXSk7Zm9yKHcuY29sb3IudmFsdWVzLnB1c2goVSx6LEQsRyksdy5jb2xvci52YWx1ZXMucHVzaChVLHosRCxHKSxTLmNvbG9yLnZhbHVlcy5wdXNoKFUseixELEcpLFMuY29sb3IudmFsdWVzLnB1c2goVSx6LEQsRyksaD1UKjQ7aDxUKjQrODsrK2gpUy5jb2xvci52YWx1ZXMucHVzaChkW2hdKX1pZihnKGYpKXtsZXQgTT1ZLmZyb21BcnJheShmLHkqMixEdyksdj1ZLmZyb21BcnJheShmLChsKzMpKjIsTkkpLFU9ay5sZXJwKE0ueCx2LngseCk7Zm9yKGg9eSoyO2g8eSoyKzQ7KytoKXcuc3QudmFsdWVzLnB1c2goZltoXSk7Zm9yKHcuc3QudmFsdWVzLnB1c2goVSxNLnkpLHcuc3QudmFsdWVzLnB1c2goVSx2LnkpLFMuc3QudmFsdWVzLnB1c2goVSxNLnkpLFMuc3QudmFsdWVzLnB1c2goVSx2LnkpLGg9VCoyO2g8VCoyKzQ7KytoKVMuc3QudmFsdWVzLnB1c2goZltoXSl9bT13LnBvc2l0aW9uLnZhbHVlcy5sZW5ndGgvMy00LFIucHVzaChtLG0rMixtKzEpLFIucHVzaChtKzEsbSsyLG0rMyksbT1TLnBvc2l0aW9uLnZhbHVlcy5sZW5ndGgvMy00LEMucHVzaChtLG0rMixtKzEpLEMucHVzaChtKzEsbSsyLG0rMyl9ZWxzZXtsZXQgTixQO2ZvcihfLnk8MD8oTj11LmF0dHJpYnV0ZXMsUD11LmluZGljZXMpOihOPWMuYXR0cmlidXRlcyxQPWMuaW5kaWNlcyksTi5wb3NpdGlvbi52YWx1ZXMucHVzaChfLngsXy55LF8ueiksTi5wb3NpdGlvbi52YWx1ZXMucHVzaChfLngsXy55LF8ueiksTi5wb3NpdGlvbi52YWx1ZXMucHVzaChFLngsRS55LEUueiksTi5wb3NpdGlvbi52YWx1ZXMucHVzaChFLngsRS55LEUueiksaD1sKjM7aDxsKjMrMTI7KytoKU4ucHJldlBvc2l0aW9uLnZhbHVlcy5wdXNoKGFbaF0pLE4ubmV4dFBvc2l0aW9uLnZhbHVlcy5wdXNoKHJbaF0pO2ZvcihoPWwqMjtoPGwqMis4OysraClOLmV4cGFuZEFuZFdpZHRoLnZhbHVlcy5wdXNoKGlbaF0pLGcoZikmJk4uc3QudmFsdWVzLnB1c2goZltoXSk7aWYoZyhkKSlmb3IoaD1sKjQ7aDxsKjQrMTY7KytoKU4uY29sb3IudmFsdWVzLnB1c2goZFtoXSk7bT1OLnBvc2l0aW9uLnZhbHVlcy5sZW5ndGgvMy00LFAucHVzaChtLG0rMixtKzEpLFAucHVzaChtKzEsbSsyLG0rMyl9fWImJihVdyh1KSxVdyhjKSkseXAoZSx1LGMpfXZhciBqbyxDdyxmSSx1cCxIYSxXbCxYbCx1SSxSYSxJZixjcyxzcyxsSSxNdyxoSSxQZixWYSxOdyxJdyxZbCxQdyxpYyxjYyxzYyxmYyxicCxFSSxRbCxMdyxSSSxrZixwcCxncCx4SSxTSSxqdyxDSSxNSSxEdyxOSSx6dyxHdyxfcCxJSSxQSSxrSSxCdyx2SSxabCxIdCxscj1YKCgpPT57VXIoKTt1dygpO010KCk7anQoKTtJZSgpO2dhKCk7VHQoKTt2dCgpO3NlKCk7b3AoKTtrcigpOyR0KCk7ZW4oKTt6bCgpO25uKCk7WmkoKTtwaSgpO0dlKCk7RG4oKTtwbigpO2dpKCk7Y24oKTtPdygpO2pvPXt9O2pvLnRvV2lyZWZyYW1lPWZ1bmN0aW9uKGUpe2xldCB0PWUuaW5kaWNlcztpZihnKHQpKXtzd2l0Y2goZS5wcmltaXRpdmVUeXBlKXtjYXNlIFVlLlRSSUFOR0xFUzplLmluZGljZXM9ckkodCk7YnJlYWs7Y2FzZSBVZS5UUklBTkdMRV9TVFJJUDplLmluZGljZXM9aUkodCk7YnJlYWs7Y2FzZSBVZS5UUklBTkdMRV9GQU46ZS5pbmRpY2VzPWNJKHQpO2JyZWFrfWUucHJpbWl0aXZlVHlwZT1VZS5MSU5FU31yZXR1cm4gZX07am8uY3JlYXRlTGluZVNlZ21lbnRzRm9yVmVjdG9ycz1mdW5jdGlvbihlLHQsbil7dD10Pz8ibm9ybWFsIixuPW4/PzFlNDtsZXQgbz1lLmF0dHJpYnV0ZXMucG9zaXRpb24udmFsdWVzLGE9ZS5hdHRyaWJ1dGVzW3RdLnZhbHVlcyxyPW8ubGVuZ3RoLGk9bmV3IEZsb2F0NjRBcnJheSgyKnIpLGY9MDtmb3IobGV0IHU9MDt1PHI7dSs9MylpW2YrK109b1t1XSxpW2YrK109b1t1KzFdLGlbZisrXT1vW3UrMl0saVtmKytdPW9bdV0rYVt1XSpuLGlbZisrXT1vW3UrMV0rYVt1KzFdKm4saVtmKytdPW9bdSsyXSthW3UrMl0qbjtsZXQgZCxjPWUuYm91bmRpbmdTcGhlcmU7cmV0dXJuIGcoYykmJihkPW5ldyBnZShjLmNlbnRlcixjLnJhZGl1cytuKSksbmV3IHZlKHthdHRyaWJ1dGVzOntwb3NpdGlvbjpuZXcgaWUoe2NvbXBvbmVudERhdGF0eXBlOm5lLkRPVUJMRSxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOml9KX0scHJpbWl0aXZlVHlwZTpVZS5MSU5FUyxib3VuZGluZ1NwaGVyZTpkfSl9O2pvLmNyZWF0ZUF0dHJpYnV0ZUxvY2F0aW9ucz1mdW5jdGlvbihlKXtsZXQgdD1bInBvc2l0aW9uIiwicG9zaXRpb25IaWdoIiwicG9zaXRpb25Mb3ciLCJwb3NpdGlvbjNESGlnaCIsInBvc2l0aW9uM0RMb3ciLCJwb3NpdGlvbjJESGlnaCIsInBvc2l0aW9uMkRMb3ciLCJwaWNrQ29sb3IiLCJub3JtYWwiLCJzdCIsInRhbmdlbnQiLCJiaXRhbmdlbnQiLCJleHRydWRlRGlyZWN0aW9uIiwiY29tcHJlc3NlZEF0dHJpYnV0ZXMiXSxuPWUuYXR0cmlidXRlcyxvPXt9LGE9MCxyLGk9dC5sZW5ndGg7Zm9yKHI9MDtyPGk7KytyKXtsZXQgZj10W3JdO2cobltmXSkmJihvW2ZdPWErKyl9Zm9yKGxldCBmIGluIG4pbi5oYXNPd25Qcm9wZXJ0eShmKSYmIWcob1tmXSkmJihvW2ZdPWErKyk7cmV0dXJuIG99O2pvLnJlb3JkZXJGb3JQcmVWZXJ0ZXhDYWNoZT1mdW5jdGlvbihlKXtsZXQgdD12ZS5jb21wdXRlTnVtYmVyT2ZWZXJ0aWNlcyhlKSxuPWUuaW5kaWNlcztpZihnKG4pKXtsZXQgbz1uZXcgSW50MzJBcnJheSh0KTtmb3IobGV0IGg9MDtoPHQ7aCsrKW9baF09LTE7bGV0IGE9bixyPWEubGVuZ3RoLGk9a2UuY3JlYXRlVHlwZWRBcnJheSh0LHIpLGY9MCxkPTAsYz0wLHU7Zm9yKDtmPHI7KXU9b1thW2ZdXSx1IT09LTE/aVtkXT11Oih1PWFbZl0sb1t1XT1jLGlbZF09YywrK2MpLCsrZiwrK2Q7ZS5pbmRpY2VzPWk7bGV0IGw9ZS5hdHRyaWJ1dGVzO2ZvcihsZXQgaCBpbiBsKWlmKGwuaGFzT3duUHJvcGVydHkoaCkmJmcobFtoXSkmJmcobFtoXS52YWx1ZXMpKXtsZXQgbT1sW2hdLGI9bS52YWx1ZXMscD0wLHk9bS5jb21wb25lbnRzUGVyQXR0cmlidXRlLFQ9bmUuY3JlYXRlVHlwZWRBcnJheShtLmNvbXBvbmVudERhdGF0eXBlLGMqeSk7Zm9yKDtwPHQ7KXtsZXQgXz1vW3BdO2lmKF8hPT0tMSlmb3IobGV0IEU9MDtFPHk7RSsrKVRbeSpfK0VdPWJbeSpwK0VdOysrcH1tLnZhbHVlcz1UfX1yZXR1cm4gZX07am8ucmVvcmRlckZvclBvc3RWZXJ0ZXhDYWNoZT1mdW5jdGlvbihlLHQpe2xldCBuPWUuaW5kaWNlcztpZihlLnByaW1pdGl2ZVR5cGU9PT1VZS5UUklBTkdMRVMmJmcobikpe2xldCBvPW4ubGVuZ3RoLGE9MDtmb3IobGV0IHI9MDtyPG87cisrKW5bcl0+YSYmKGE9bltyXSk7ZS5pbmRpY2VzPXh3LnRpcHNpZnkoe2luZGljZXM6bixtYXhpbXVtSW5kZXg6YSxjYWNoZVNpemU6dH0pfXJldHVybiBlfTtqby5maXRUb1Vuc2lnbmVkU2hvcnRJbmRpY2VzPWZ1bmN0aW9uKGUpe2xldCB0PVtdLG49dmUuY29tcHV0ZU51bWJlck9mVmVydGljZXMoZSk7aWYoZyhlLmluZGljZXMpJiZuPj1rLlNJWFRZX0ZPVVJfS0lMT0JZVEVTKXtsZXQgbz1bXSxhPVtdLHI9MCxpPVN3KGUuYXR0cmlidXRlcyksZj1lLmluZGljZXMsZD1mLmxlbmd0aCxjO2UucHJpbWl0aXZlVHlwZT09PVVlLlRSSUFOR0xFUz9jPTM6ZS5wcmltaXRpdmVUeXBlPT09VWUuTElORVM/Yz0yOmUucHJpbWl0aXZlVHlwZT09PVVlLlBPSU5UUyYmKGM9MSk7Zm9yKGxldCB1PTA7dTxkO3UrPWMpe2ZvcihsZXQgbD0wO2w8YzsrK2wpe2xldCBoPWZbdStsXSxtPW9baF07ZyhtKXx8KG09cisrLG9baF09bSxzSShpLGUuYXR0cmlidXRlcyxoKSksYS5wdXNoKG0pfXIrYz49ay5TSVhUWV9GT1VSX0tJTE9CWVRFUyYmKHQucHVzaChuZXcgdmUoe2F0dHJpYnV0ZXM6aSxpbmRpY2VzOmEscHJpbWl0aXZlVHlwZTplLnByaW1pdGl2ZVR5cGUsYm91bmRpbmdTcGhlcmU6ZS5ib3VuZGluZ1NwaGVyZSxib3VuZGluZ1NwaGVyZUNWOmUuYm91bmRpbmdTcGhlcmVDVn0pKSxvPVtdLGE9W10scj0wLGk9U3coZS5hdHRyaWJ1dGVzKSl9YS5sZW5ndGghPT0wJiZ0LnB1c2gobmV3IHZlKHthdHRyaWJ1dGVzOmksaW5kaWNlczphLHByaW1pdGl2ZVR5cGU6ZS5wcmltaXRpdmVUeXBlLGJvdW5kaW5nU3BoZXJlOmUuYm91bmRpbmdTcGhlcmUsYm91bmRpbmdTcGhlcmVDVjplLmJvdW5kaW5nU3BoZXJlQ1Z9KSl9ZWxzZSB0LnB1c2goZSk7cmV0dXJuIHR9O0N3PW5ldyBzLGZJPW5ldyByZTtqby5wcm9qZWN0VG8yRD1mdW5jdGlvbihlLHQsbixvLGEpe2xldCByPWUuYXR0cmlidXRlc1t0XTthPWcoYSk/YTpuZXcgaW87bGV0IGk9YS5lbGxpcHNvaWQsZj1yLnZhbHVlcyxkPW5ldyBGbG9hdDY0QXJyYXkoZi5sZW5ndGgpLGM9MDtmb3IobGV0IHU9MDt1PGYubGVuZ3RoO3UrPTMpe2xldCBsPXMuZnJvbUFycmF5KGYsdSxDdyksaD1pLmNhcnRlc2lhblRvQ2FydG9ncmFwaGljKGwsZkkpLG09YS5wcm9qZWN0KGgsQ3cpO2RbYysrXT1tLngsZFtjKytdPW0ueSxkW2MrK109bS56fXJldHVybiBlLmF0dHJpYnV0ZXNbbl09cixlLmF0dHJpYnV0ZXNbb109bmV3IGllKHtjb21wb25lbnREYXRhdHlwZTpuZS5ET1VCTEUsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczpkfSksZGVsZXRlIGUuYXR0cmlidXRlc1t0XSxlfTt1cD17aGlnaDowLGxvdzowfTtqby5lbmNvZGVBdHRyaWJ1dGU9ZnVuY3Rpb24oZSx0LG4sbyl7bGV0IGE9ZS5hdHRyaWJ1dGVzW3RdLHI9YS52YWx1ZXMsaT1yLmxlbmd0aCxmPW5ldyBGbG9hdDMyQXJyYXkoaSksZD1uZXcgRmxvYXQzMkFycmF5KGkpO2ZvcihsZXQgdT0wO3U8aTsrK3UpYWMuZW5jb2RlKHJbdV0sdXApLGZbdV09dXAuaGlnaCxkW3VdPXVwLmxvdztsZXQgYz1hLmNvbXBvbmVudHNQZXJBdHRyaWJ1dGU7cmV0dXJuIGUuYXR0cmlidXRlc1tuXT1uZXcgaWUoe2NvbXBvbmVudERhdGF0eXBlOm5lLkZMT0FULGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Yyx2YWx1ZXM6Zn0pLGUuYXR0cmlidXRlc1tvXT1uZXcgaWUoe2NvbXBvbmVudERhdGF0eXBlOm5lLkZMT0FULGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Yyx2YWx1ZXM6ZH0pLGRlbGV0ZSBlLmF0dHJpYnV0ZXNbdF0sZX07SGE9bmV3IHM7V2w9bmV3ICQsWGw9bmV3IEo7am8udHJhbnNmb3JtVG9Xb3JsZENvb3JkaW5hdGVzPWZ1bmN0aW9uKGUpe2xldCB0PWUubW9kZWxNYXRyaXg7aWYoJC5lcXVhbHModCwkLklERU5USVRZKSlyZXR1cm4gZTtsZXQgbj1lLmdlb21ldHJ5LmF0dHJpYnV0ZXM7bHAodCxuLnBvc2l0aW9uKSxscCh0LG4ucHJldlBvc2l0aW9uKSxscCh0LG4ubmV4dFBvc2l0aW9uKSwoZyhuLm5vcm1hbCl8fGcobi50YW5nZW50KXx8ZyhuLmJpdGFuZ2VudCkpJiYoJC5pbnZlcnNlKHQsV2wpLCQudHJhbnNwb3NlKFdsLFdsKSwkLmdldE1hdHJpeDMoV2wsWGwpLGhwKFhsLG4ubm9ybWFsKSxocChYbCxuLnRhbmdlbnQpLGhwKFhsLG4uYml0YW5nZW50KSk7bGV0IG89ZS5nZW9tZXRyeS5ib3VuZGluZ1NwaGVyZTtyZXR1cm4gZyhvKSYmKGUuZ2VvbWV0cnkuYm91bmRpbmdTcGhlcmU9Z2UudHJhbnNmb3JtKG8sdCxvKSksZS5tb2RlbE1hdHJpeD0kLmNsb25lKCQuSURFTlRJVFkpLGV9O3VJPW5ldyBzO2pvLmNvbWJpbmVJbnN0YW5jZXM9ZnVuY3Rpb24oZSl7bGV0IHQ9W10sbj1bXSxvPWUubGVuZ3RoO2ZvcihsZXQgcj0wO3I8bzsrK3Ipe2xldCBpPWVbcl07ZyhpLmdlb21ldHJ5KT90LnB1c2goaSk6ZyhpLndlc3RIZW1pc3BoZXJlR2VvbWV0cnkpJiZnKGkuZWFzdEhlbWlzcGhlcmVHZW9tZXRyeSkmJm4ucHVzaChpKX1sZXQgYT1bXTtyZXR1cm4gdC5sZW5ndGg+MCYmYS5wdXNoKG1wKHQsImdlb21ldHJ5IikpLG4ubGVuZ3RoPjAmJihhLnB1c2gobXAobiwid2VzdEhlbWlzcGhlcmVHZW9tZXRyeSIpKSxhLnB1c2gobXAobiwiZWFzdEhlbWlzcGhlcmVHZW9tZXRyeSIpKSksYX07UmE9bmV3IHMsSWY9bmV3IHMsY3M9bmV3IHMsc3M9bmV3IHM7am8uY29tcHV0ZU5vcm1hbD1mdW5jdGlvbihlKXtsZXQgdD1lLmluZGljZXMsbj1lLmF0dHJpYnV0ZXMsbz1uLnBvc2l0aW9uLnZhbHVlcyxhPW4ucG9zaXRpb24udmFsdWVzLmxlbmd0aC8zLHI9dC5sZW5ndGgsaT1uZXcgQXJyYXkoYSksZj1uZXcgQXJyYXkoci8zKSxkPW5ldyBBcnJheShyKSxjO2ZvcihjPTA7YzxhO2MrKylpW2NdPXtpbmRleE9mZnNldDowLGNvdW50OjAsY3VycmVudENvdW50OjB9O2xldCB1PTA7Zm9yKGM9MDtjPHI7Yys9Myl7bGV0IGI9dFtjXSxwPXRbYysxXSx5PXRbYysyXSxUPWIqMyxfPXAqMyxFPXkqMztJZi54PW9bVF0sSWYueT1vW1QrMV0sSWYuej1vW1QrMl0sY3MueD1vW19dLGNzLnk9b1tfKzFdLGNzLno9b1tfKzJdLHNzLng9b1tFXSxzcy55PW9bRSsxXSxzcy56PW9bRSsyXSxpW2JdLmNvdW50KyssaVtwXS5jb3VudCsrLGlbeV0uY291bnQrKyxzLnN1YnRyYWN0KGNzLElmLGNzKSxzLnN1YnRyYWN0KHNzLElmLHNzKSxmW3VdPXMuY3Jvc3MoY3Msc3MsbmV3IHMpLHUrK31sZXQgbD0wO2ZvcihjPTA7YzxhO2MrKylpW2NdLmluZGV4T2Zmc2V0Kz1sLGwrPWlbY10uY291bnQ7dT0wO2xldCBoO2ZvcihjPTA7YzxyO2MrPTMpe2g9aVt0W2NdXTtsZXQgYj1oLmluZGV4T2Zmc2V0K2guY3VycmVudENvdW50O2RbYl09dSxoLmN1cnJlbnRDb3VudCsrLGg9aVt0W2MrMV1dLGI9aC5pbmRleE9mZnNldCtoLmN1cnJlbnRDb3VudCxkW2JdPXUsaC5jdXJyZW50Q291bnQrKyxoPWlbdFtjKzJdXSxiPWguaW5kZXhPZmZzZXQraC5jdXJyZW50Q291bnQsZFtiXT11LGguY3VycmVudENvdW50KyssdSsrfWxldCBtPW5ldyBGbG9hdDMyQXJyYXkoYSozKTtmb3IoYz0wO2M8YTtjKyspe2xldCBiPWMqMztpZihoPWlbY10scy5jbG9uZShzLlpFUk8sUmEpLGguY291bnQ+MCl7Zm9yKHU9MDt1PGguY291bnQ7dSsrKXMuYWRkKFJhLGZbZFtoLmluZGV4T2Zmc2V0K3VdXSxSYSk7cy5lcXVhbHNFcHNpbG9uKHMuWkVSTyxSYSxrLkVQU0lMT04xMCkmJnMuY2xvbmUoZltkW2guaW5kZXhPZmZzZXRdXSxSYSl9cy5lcXVhbHNFcHNpbG9uKHMuWkVSTyxSYSxrLkVQU0lMT04xMCkmJihSYS56PTEpLHMubm9ybWFsaXplKFJhLFJhKSxtW2JdPVJhLngsbVtiKzFdPVJhLnksbVtiKzJdPVJhLnp9cmV0dXJuIGUuYXR0cmlidXRlcy5ub3JtYWw9bmV3IGllKHtjb21wb25lbnREYXRhdHlwZTpuZS5GTE9BVCxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOm19KSxlfTtsST1uZXcgcyxNdz1uZXcgcyxoST1uZXcgcztqby5jb21wdXRlVGFuZ2VudEFuZEJpdGFuZ2VudD1mdW5jdGlvbihlKXtsZXQgdD1lLmF0dHJpYnV0ZXMsbj1lLmluZGljZXMsbz1lLmF0dHJpYnV0ZXMucG9zaXRpb24udmFsdWVzLGE9ZS5hdHRyaWJ1dGVzLm5vcm1hbC52YWx1ZXMscj1lLmF0dHJpYnV0ZXMuc3QudmFsdWVzLGk9ZS5hdHRyaWJ1dGVzLnBvc2l0aW9uLnZhbHVlcy5sZW5ndGgvMyxmPW4ubGVuZ3RoLGQ9bmV3IEFycmF5KGkqMyksYztmb3IoYz0wO2M8ZC5sZW5ndGg7YysrKWRbY109MDtsZXQgdSxsLGg7Zm9yKGM9MDtjPGY7Yys9Myl7bGV0IHA9bltjXSx5PW5bYysxXSxUPW5bYysyXTt1PXAqMyxsPXkqMyxoPVQqMztsZXQgXz1wKjIsRT15KjIsdz1UKjIsUj1vW3VdLFM9b1t1KzFdLEM9b1t1KzJdLEk9cltfXSxOPXJbXysxXSxQPXJbRSsxXS1OLEY9clt3KzFdLU4sQT0xLygocltFXS1JKSpGLShyW3ddLUkpKlApLHg9KEYqKG9bbF0tUiktUCoob1toXS1SKSkqQSxNPShGKihvW2wrMV0tUyktUCoob1toKzFdLVMpKSpBLHY9KEYqKG9bbCsyXS1DKS1QKihvW2grMl0tQykpKkE7ZFt1XSs9eCxkW3UrMV0rPU0sZFt1KzJdKz12LGRbbF0rPXgsZFtsKzFdKz1NLGRbbCsyXSs9dixkW2hdKz14LGRbaCsxXSs9TSxkW2grMl0rPXZ9bGV0IG09bmV3IEZsb2F0MzJBcnJheShpKjMpLGI9bmV3IEZsb2F0MzJBcnJheShpKjMpO2ZvcihjPTA7YzxpO2MrKyl7dT1jKjMsbD11KzEsaD11KzI7bGV0IHA9cy5mcm9tQXJyYXkoYSx1LGxJKSx5PXMuZnJvbUFycmF5KGQsdSxoSSksVD1zLmRvdChwLHkpO3MubXVsdGlwbHlCeVNjYWxhcihwLFQsTXcpLHMubm9ybWFsaXplKHMuc3VidHJhY3QoeSxNdyx5KSx5KSxtW3VdPXkueCxtW2xdPXkueSxtW2hdPXkueixzLm5vcm1hbGl6ZShzLmNyb3NzKHAseSx5KSx5KSxiW3VdPXkueCxiW2xdPXkueSxiW2hdPXkuen1yZXR1cm4gZS5hdHRyaWJ1dGVzLnRhbmdlbnQ9bmV3IGllKHtjb21wb25lbnREYXRhdHlwZTpuZS5GTE9BVCxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOm19KSxlLmF0dHJpYnV0ZXMuYml0YW5nZW50PW5ldyBpZSh7Y29tcG9uZW50RGF0YXR5cGU6bmUuRkxPQVQsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczpifSksZX07UGY9bmV3IFksVmE9bmV3IHMsTnc9bmV3IHMsSXc9bmV3IHMsWWw9bmV3IFk7am8uY29tcHJlc3NWZXJ0aWNlcz1mdW5jdGlvbihlKXtsZXQgdD1lLmF0dHJpYnV0ZXMuZXh0cnVkZURpcmVjdGlvbixuLG87aWYoZyh0KSl7bGV0IFM9dC52YWx1ZXM7bz1TLmxlbmd0aC8zO2xldCBDPW5ldyBGbG9hdDMyQXJyYXkobyoyKSxJPTA7Zm9yKG49MDtuPG87KytuKXtpZihzLmZyb21BcnJheShTLG4qMyxWYSkscy5lcXVhbHMoVmEscy5aRVJPKSl7SSs9Mjtjb250aW51ZX1ZbD1WdC5vY3RFbmNvZGVJblJhbmdlKFZhLDY1NTM1LFlsKSxDW0krK109WWwueCxDW0krK109WWwueX1yZXR1cm4gZS5hdHRyaWJ1dGVzLmNvbXByZXNzZWRBdHRyaWJ1dGVzPW5ldyBpZSh7Y29tcG9uZW50RGF0YXR5cGU6bmUuRkxPQVQsY29tcG9uZW50c1BlckF0dHJpYnV0ZToyLHZhbHVlczpDfSksZGVsZXRlIGUuYXR0cmlidXRlcy5leHRydWRlRGlyZWN0aW9uLGV9bGV0IGE9ZS5hdHRyaWJ1dGVzLm5vcm1hbCxyPWUuYXR0cmlidXRlcy5zdCxpPWcoYSksZj1nKHIpO2lmKCFpJiYhZilyZXR1cm4gZTtsZXQgZD1lLmF0dHJpYnV0ZXMudGFuZ2VudCxjPWUuYXR0cmlidXRlcy5iaXRhbmdlbnQsdT1nKGQpLGw9ZyhjKSxoLG0sYixwO2kmJihoPWEudmFsdWVzKSxmJiYobT1yLnZhbHVlcyksdSYmKGI9ZC52YWx1ZXMpLGwmJihwPWMudmFsdWVzKSxvPShpP2gubGVuZ3RoOm0ubGVuZ3RoKS8oaT8zOjIpO2xldCBfPW8sRT1mJiZpPzI6MTtFKz11fHxsPzE6MCxfKj1FO2xldCB3PW5ldyBGbG9hdDMyQXJyYXkoXyksUj0wO2ZvcihuPTA7bjxvOysrbil7ZiYmKFkuZnJvbUFycmF5KG0sbioyLFBmKSx3W1IrK109VnQuY29tcHJlc3NUZXh0dXJlQ29vcmRpbmF0ZXMoUGYpKTtsZXQgUz1uKjM7aSYmZyhiKSYmZyhwKT8ocy5mcm9tQXJyYXkoaCxTLFZhKSxzLmZyb21BcnJheShiLFMsTncpLHMuZnJvbUFycmF5KHAsUyxJdyksVnQub2N0UGFjayhWYSxOdyxJdyxQZiksd1tSKytdPVBmLngsd1tSKytdPVBmLnkpOihpJiYocy5mcm9tQXJyYXkoaCxTLFZhKSx3W1IrK109VnQub2N0RW5jb2RlRmxvYXQoVmEpKSx1JiYocy5mcm9tQXJyYXkoYixTLFZhKSx3W1IrK109VnQub2N0RW5jb2RlRmxvYXQoVmEpKSxsJiYocy5mcm9tQXJyYXkocCxTLFZhKSx3W1IrK109VnQub2N0RW5jb2RlRmxvYXQoVmEpKSl9cmV0dXJuIGUuYXR0cmlidXRlcy5jb21wcmVzc2VkQXR0cmlidXRlcz1uZXcgaWUoe2NvbXBvbmVudERhdGF0eXBlOm5lLkZMT0FULGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6RSx2YWx1ZXM6d30pLGkmJmRlbGV0ZSBlLmF0dHJpYnV0ZXMubm9ybWFsLGYmJmRlbGV0ZSBlLmF0dHJpYnV0ZXMuc3QsbCYmZGVsZXRlIGUuYXR0cmlidXRlcy5iaXRhbmdlbnQsdSYmZGVsZXRlIGUuYXR0cmlidXRlcy50YW5nZW50LGV9O1B3PW5ldyBzO2ljPW5ldyBzLGNjPW5ldyBzLHNjPW5ldyBzLGZjPW5ldyBzLGJwPXtwb3NpdGlvbnM6bmV3IEFycmF5KDcpLGluZGljZXM6bmV3IEFycmF5KDkpfTtFST1BcChkdCw0KSxRbD1BcChzLDMpLEx3PUFwKFksMiksUkk9ZnVuY3Rpb24oZSx0LG4sbyxhLHIsaSl7bGV0IGY9YVtlXSpvLngsZD1hW3RdKm8ueSxjPWFbbl0qby56O3JbaV09ZitkK2M+ay5FUFNJTE9ONj8xOjB9LGtmPW5ldyBzLHBwPW5ldyBzLGdwPW5ldyBzLHhJPW5ldyBzO1NJPXtwb3NpdGlvbjohMCxub3JtYWw6ITAsYml0YW5nZW50OiEwLHRhbmdlbnQ6ITAsc3Q6ITAsZXh0cnVkZURpcmVjdGlvbjohMCxhcHBseU9mZnNldDohMH07anc9c24uZnJvbVBvaW50Tm9ybWFsKHMuWkVSTyxzLlVOSVRfWSksQ0k9bmV3IHMsTUk9bmV3IHM7RHc9bmV3IFksTkk9bmV3IFksenc9bmV3IHMsR3c9bmV3IHMsX3A9bmV3IHMsSUk9bmV3IHMsUEk9bmV3IHMsa0k9bmV3IHMsQnc9bmV3IGR0O3ZJPTUqay5FUFNJTE9OOSxabD1rLkVQU0lMT042O2pvLnNwbGl0TG9uZ2l0dWRlPWZ1bmN0aW9uKGUpe2xldCB0PWUuZ2VvbWV0cnksbj10LmJvdW5kaW5nU3BoZXJlO2lmKGcobikmJihuLmNlbnRlci54LW4ucmFkaXVzPjB8fGdlLmludGVyc2VjdFBsYW5lKG4sc24uT1JJR0lOX1pYX1BMQU5FKSE9PVNuLklOVEVSU0VDVElORykpcmV0dXJuIGU7aWYodC5nZW9tZXRyeVR5cGUhPT1Cci5OT05FKXN3aXRjaCh0Lmdlb21ldHJ5VHlwZSl7Y2FzZSBCci5QT0xZTElORVM6RkkoZSk7YnJlYWs7Y2FzZSBCci5UUklBTkdMRVM6dncoZSk7YnJlYWs7Y2FzZSBCci5MSU5FUzpGdyhlKTticmVha31lbHNlIEFJKHQpLHQucHJpbWl0aXZlVHlwZT09PVVlLlRSSUFOR0xFUz92dyhlKTp0LnByaW1pdGl2ZVR5cGU9PT1VZS5MSU5FUyYmRncoZSk7cmV0dXJuIGV9O0h0PWpvfSk7ZnVuY3Rpb24gdmYoZSx0LG4pe2U9ZT8/MCx0PXQ/PzAsbj1uPz8wLHRoaXMudmFsdWU9bmV3IEZsb2F0MzJBcnJheShbZSx0LG5dKX12YXIgVncsSHc9WCgoKT0+e3Z0KCk7c2UoKTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyh2Zi5wcm90b3R5cGUse2NvbXBvbmVudERhdGF0eXBlOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbmUuRkxPQVR9fSxjb21wb25lbnRzUGVyQXR0cmlidXRlOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gM319LG5vcm1hbGl6ZTp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuITF9fX0pO3ZmLmZyb21DYXJ0ZXNpYW4zPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgdmYoZS54LGUueSxlLnopfTt2Zi50b1ZhbHVlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGcodCl8fCh0PW5ldyBGbG9hdDMyQXJyYXkoW2UueCxlLnksZS56XSkpLHRbMF09ZS54LHRbMV09ZS55LHRbMl09ZS56LHR9O1Z3PXZmfSk7ZnVuY3Rpb24gJG8oZSl7dGhpcy5fZWxsaXBzb2lkPWU/P3EuV0dTODQsdGhpcy5fc2VtaW1ham9yQXhpcz10aGlzLl9lbGxpcHNvaWQubWF4aW11bVJhZGl1cyx0aGlzLl9vbmVPdmVyU2VtaW1ham9yQXhpcz0xL3RoaXMuX3NlbWltYWpvckF4aXN9dmFyIFJuLHlpPVgoKCk9PntJZSgpO1R0KCk7c2UoKTtXZSgpO0dlKCk7T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoJG8ucHJvdG90eXBlLHtlbGxpcHNvaWQ6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9lbGxpcHNvaWR9fX0pOyRvLm1lcmNhdG9yQW5nbGVUb0dlb2RldGljTGF0aXR1ZGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGsuUElfT1ZFUl9UV08tMipNYXRoLmF0YW4oTWF0aC5leHAoLWUpKX07JG8uZ2VvZGV0aWNMYXRpdHVkZVRvTWVyY2F0b3JBbmdsZT1mdW5jdGlvbihlKXtlPiRvLk1heGltdW1MYXRpdHVkZT9lPSRvLk1heGltdW1MYXRpdHVkZTplPC0kby5NYXhpbXVtTGF0aXR1ZGUmJihlPS0kby5NYXhpbXVtTGF0aXR1ZGUpO2xldCB0PU1hdGguc2luKGUpO3JldHVybiAuNSpNYXRoLmxvZygoMSt0KS8oMS10KSl9OyRvLk1heGltdW1MYXRpdHVkZT0kby5tZXJjYXRvckFuZ2xlVG9HZW9kZXRpY0xhdGl0dWRlKE1hdGguUEkpOyRvLnByb3RvdHlwZS5wcm9qZWN0PWZ1bmN0aW9uKGUsdCl7bGV0IG49dGhpcy5fc2VtaW1ham9yQXhpcyxvPWUubG9uZ2l0dWRlKm4sYT0kby5nZW9kZXRpY0xhdGl0dWRlVG9NZXJjYXRvckFuZ2xlKGUubGF0aXR1ZGUpKm4scj1lLmhlaWdodDtyZXR1cm4gZyh0KT8odC54PW8sdC55PWEsdC56PXIsdCk6bmV3IHMobyxhLHIpfTskby5wcm90b3R5cGUudW5wcm9qZWN0PWZ1bmN0aW9uKGUsdCl7bGV0IG49dGhpcy5fb25lT3ZlclNlbWltYWpvckF4aXMsbz1lLngqbixhPSRvLm1lcmNhdG9yQW5nbGVUb0dlb2RldGljTGF0aXR1ZGUoZS55Km4pLHI9ZS56O3JldHVybiBnKHQpPyh0LmxvbmdpdHVkZT1vLHQubGF0aXR1ZGU9YSx0LmhlaWdodD1yLHQpOm5ldyByZShvLGEscil9O1JuPSRvfSk7ZnVuY3Rpb24gREkoZSx0LG4pe2xldCBvPSFuLGE9ZS5sZW5ndGgscjtpZighbyYmYT4xKXtsZXQgaT1lWzBdLm1vZGVsTWF0cml4O2ZvcihyPTE7cjxhOysrcilpZighJC5lcXVhbHMoaSxlW3JdLm1vZGVsTWF0cml4KSl7bz0hMDticmVha319aWYobylmb3Iocj0wO3I8YTsrK3IpZyhlW3JdLmdlb21ldHJ5KSYmSHQudHJhbnNmb3JtVG9Xb3JsZENvb3JkaW5hdGVzKGVbcl0pO2Vsc2UgJC5tdWx0aXBseVRyYW5zZm9ybWF0aW9uKHQsZVswXS5tb2RlbE1hdHJpeCx0KX1mdW5jdGlvbiB3cChlLHQpe2xldCBuPWUuYXR0cmlidXRlcyxvPW4ucG9zaXRpb24sYT1vLnZhbHVlcy5sZW5ndGgvby5jb21wb25lbnRzUGVyQXR0cmlidXRlO24uYmF0Y2hJZD1uZXcgaWUoe2NvbXBvbmVudERhdGF0eXBlOm5lLkZMT0FULGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6MSx2YWx1ZXM6bmV3IEZsb2F0MzJBcnJheShhKX0pO2xldCByPW4uYmF0Y2hJZC52YWx1ZXM7Zm9yKGxldCBpPTA7aTxhOysraSlyW2ldPXR9ZnVuY3Rpb24gQkkoZSl7bGV0IHQ9ZS5sZW5ndGg7Zm9yKGxldCBuPTA7bjx0Oysrbil7bGV0IG89ZVtuXTtnKG8uZ2VvbWV0cnkpP3dwKG8uZ2VvbWV0cnksbik6ZyhvLndlc3RIZW1pc3BoZXJlR2VvbWV0cnkpJiZnKG8uZWFzdEhlbWlzcGhlcmVHZW9tZXRyeSkmJih3cChvLndlc3RIZW1pc3BoZXJlR2VvbWV0cnksbiksd3Aoby5lYXN0SGVtaXNwaGVyZUdlb21ldHJ5LG4pKX19ZnVuY3Rpb24gVUkoZSl7bGV0IHQ9ZS5pbnN0YW5jZXMsbj1lLnByb2plY3Rpb24sbz1lLmVsZW1lbnRJbmRleFVpbnRTdXBwb3J0ZWQsYT1lLnNjZW5lM0RPbmx5LHI9ZS52ZXJ0ZXhDYWNoZU9wdGltaXplLGk9ZS5jb21wcmVzc1ZlcnRpY2VzLGY9ZS5tb2RlbE1hdHJpeCxkLGMsdSxsPXQubGVuZ3RoO2ZvcihkPTA7ZDxsOysrZClpZihnKHRbZF0uZ2VvbWV0cnkpKXt1PXRbZF0uZ2VvbWV0cnkucHJpbWl0aXZlVHlwZTticmVha31pZihESSh0LGYsYSksIWEpZm9yKGQ9MDtkPGw7KytkKWcodFtkXS5nZW9tZXRyeSkmJkh0LnNwbGl0TG9uZ2l0dWRlKHRbZF0pO2lmKEJJKHQpLHIpZm9yKGQ9MDtkPGw7KytkKXtsZXQgbT10W2RdO2cobS5nZW9tZXRyeSk/KEh0LnJlb3JkZXJGb3JQb3N0VmVydGV4Q2FjaGUobS5nZW9tZXRyeSksSHQucmVvcmRlckZvclByZVZlcnRleENhY2hlKG0uZ2VvbWV0cnkpKTpnKG0ud2VzdEhlbWlzcGhlcmVHZW9tZXRyeSkmJmcobS5lYXN0SGVtaXNwaGVyZUdlb21ldHJ5KSYmKEh0LnJlb3JkZXJGb3JQb3N0VmVydGV4Q2FjaGUobS53ZXN0SGVtaXNwaGVyZUdlb21ldHJ5KSxIdC5yZW9yZGVyRm9yUHJlVmVydGV4Q2FjaGUobS53ZXN0SGVtaXNwaGVyZUdlb21ldHJ5KSxIdC5yZW9yZGVyRm9yUG9zdFZlcnRleENhY2hlKG0uZWFzdEhlbWlzcGhlcmVHZW9tZXRyeSksSHQucmVvcmRlckZvclByZVZlcnRleENhY2hlKG0uZWFzdEhlbWlzcGhlcmVHZW9tZXRyeSkpfWxldCBoPUh0LmNvbWJpbmVJbnN0YW5jZXModCk7Zm9yKGw9aC5sZW5ndGgsZD0wO2Q8bDsrK2Qpe2M9aFtkXTtsZXQgbT1jLmF0dHJpYnV0ZXM7aWYoYSlmb3IobGV0IGIgaW4gbSltLmhhc093blByb3BlcnR5KGIpJiZtW2JdLmNvbXBvbmVudERhdGF0eXBlPT09bmUuRE9VQkxFJiZIdC5lbmNvZGVBdHRyaWJ1dGUoYyxiLGAke2J9M0RIaWdoYCxgJHtifTNETG93YCk7ZWxzZSBmb3IobGV0IGIgaW4gbSlpZihtLmhhc093blByb3BlcnR5KGIpJiZtW2JdLmNvbXBvbmVudERhdGF0eXBlPT09bmUuRE9VQkxFKXtsZXQgcD1gJHtifTNEYCx5PWAke2J9MkRgO0h0LnByb2plY3RUbzJEKGMsYixwLHksbiksZyhjLmJvdW5kaW5nU3BoZXJlKSYmYj09PSJwb3NpdGlvbiImJihjLmJvdW5kaW5nU3BoZXJlQ1Y9Z2UuZnJvbVZlcnRpY2VzKGMuYXR0cmlidXRlcy5wb3NpdGlvbjJELnZhbHVlcykpLEh0LmVuY29kZUF0dHJpYnV0ZShjLHAsYCR7cH1IaWdoYCxgJHtwfUxvd2ApLEh0LmVuY29kZUF0dHJpYnV0ZShjLHksYCR7eX1IaWdoYCxgJHt5fUxvd2ApfWkmJkh0LmNvbXByZXNzVmVydGljZXMoYyl9aWYoIW8pe2xldCBtPVtdO2ZvcihsPWgubGVuZ3RoLGQ9MDtkPGw7KytkKWM9aFtkXSxtPW0uY29uY2F0KEh0LmZpdFRvVW5zaWduZWRTaG9ydEluZGljZXMoYykpO2g9bX1yZXR1cm4gaH1mdW5jdGlvbiBUcChlLHQsbixvKXtsZXQgYSxyLGksZj1vLmxlbmd0aC0xO2lmKGY+PTApe2xldCBjPW9bZl07YT1jLm9mZnNldCtjLmNvdW50LGk9Yy5pbmRleCxyPW5baV0uaW5kaWNlcy5sZW5ndGh9ZWxzZSBhPTAsaT0wLHI9bltpXS5pbmRpY2VzLmxlbmd0aDtsZXQgZD1lLmxlbmd0aDtmb3IobGV0IGM9MDtjPGQ7KytjKXtsZXQgbD1lW2NdW3RdO2lmKCFnKGwpKWNvbnRpbnVlO2xldCBoPWwuaW5kaWNlcy5sZW5ndGg7YStoPnImJihhPTAscj1uWysraV0uaW5kaWNlcy5sZW5ndGgpLG8ucHVzaCh7aW5kZXg6aSxvZmZzZXQ6YSxjb3VudDpofSksYSs9aH19ZnVuY3Rpb24gTEkoZSx0KXtsZXQgbj1bXTtyZXR1cm4gVHAoZSwiZ2VvbWV0cnkiLHQsbiksVHAoZSwid2VzdEhlbWlzcGhlcmVHZW9tZXRyeSIsdCxuKSxUcChlLCJlYXN0SGVtaXNwaGVyZUdlb21ldHJ5Iix0LG4pLG59ZnVuY3Rpb24gakkoZSx0KXtsZXQgbj1lLmF0dHJpYnV0ZXM7Zm9yKGxldCBvIGluIG4paWYobi5oYXNPd25Qcm9wZXJ0eShvKSl7bGV0IGE9bltvXTtnKGEpJiZnKGEudmFsdWVzKSYmdC5wdXNoKGEudmFsdWVzLmJ1ZmZlcil9ZyhlLmluZGljZXMpJiZ0LnB1c2goZS5pbmRpY2VzLmJ1ZmZlcil9ZnVuY3Rpb24gekkoZSx0KXtsZXQgbj1lLmxlbmd0aDtmb3IobGV0IG89MDtvPG47KytvKWpJKGVbb10sdCl9ZnVuY3Rpb24gR0koZSl7bGV0IHQ9MSxuPWUubGVuZ3RoO2ZvcihsZXQgbz0wO288bjtvKyspe2xldCBhPWVbb107aWYoKyt0LCFnKGEpKWNvbnRpbnVlO2xldCByPWEuYXR0cmlidXRlczt0Kz03KzIqZ2UucGFja2VkTGVuZ3RoKyhnKGEuaW5kaWNlcyk/YS5pbmRpY2VzLmxlbmd0aDowKTtmb3IobGV0IGkgaW4gcilpZihyLmhhc093blByb3BlcnR5KGkpJiZnKHJbaV0pKXtsZXQgZj1yW2ldO3QrPTUrZi52YWx1ZXMubGVuZ3RofX1yZXR1cm4gdH1mdW5jdGlvbiBWSShlLHQpe2xldCBuPWUubGVuZ3RoLG89bmV3IEZsb2F0NjRBcnJheSgxK24qMTkpLGE9MDtvW2ErK109bjtmb3IobGV0IHI9MDtyPG47cisrKXtsZXQgaT1lW3JdO2lmKCQucGFjayhpLm1vZGVsTWF0cml4LG8sYSksYSs9JC5wYWNrZWRMZW5ndGgsZyhpLmF0dHJpYnV0ZXMpJiZnKGkuYXR0cmlidXRlcy5vZmZzZXQpKXtsZXQgZj1pLmF0dHJpYnV0ZXMub2Zmc2V0LnZhbHVlO29bYV09ZlswXSxvW2ErMV09ZlsxXSxvW2ErMl09ZlsyXX1hKz0zfXJldHVybiB0LnB1c2goby5idWZmZXIpLG99ZnVuY3Rpb24gSEkoZSl7bGV0IHQ9ZSxuPW5ldyBBcnJheSh0WzBdKSxvPTAsYT0xO2Zvcig7YTx0Lmxlbmd0aDspe2xldCByPSQudW5wYWNrKHQsYSksaTthKz0kLnBhY2tlZExlbmd0aCxnKHRbYV0pJiYoaT17b2Zmc2V0Om5ldyBWdyh0W2FdLHRbYSsxXSx0W2ErMl0pfSksYSs9MyxuW28rK109e21vZGVsTWF0cml4OnIsYXR0cmlidXRlczppfX1yZXR1cm4gbn1mdW5jdGlvbiBLdyhlKXtsZXQgdD1lLmxlbmd0aCxuPTErKGdlLnBhY2tlZExlbmd0aCsxKSp0LG89bmV3IEZsb2F0MzJBcnJheShuKSxhPTA7b1thKytdPXQ7Zm9yKGxldCByPTA7cjx0Oysrcil7bGV0IGk9ZVtyXTtnKGkpPyhvW2ErK109MSxnZS5wYWNrKGVbcl0sbyxhKSk6b1thKytdPTAsYSs9Z2UucGFja2VkTGVuZ3RofXJldHVybiBvfWZ1bmN0aW9uIHF3KGUpe2xldCB0PW5ldyBBcnJheShlWzBdKSxuPTAsbz0xO2Zvcig7bzxlLmxlbmd0aDspZVtvKytdPT09MSYmKHRbbl09Z2UudW5wYWNrKGUsbykpLCsrbixvKz1nZS5wYWNrZWRMZW5ndGg7cmV0dXJuIHR9dmFyIGpyLHVzLEVwPVgoKCk9PntNdCgpO3Z0KCk7c2UoKTtXZSgpO2tyKCk7JHQoKTtlbigpO3VuKCk7bHIoKTtubigpO3BuKCk7SHcoKTt5aSgpO2pyPXt9O2pyLmNvbWJpbmVHZW9tZXRyeT1mdW5jdGlvbihlKXtsZXQgdCxuLG89ZS5pbnN0YW5jZXMsYT1vLmxlbmd0aCxyLGksZj0hMTthPjAmJih0PVVJKGUpLHQubGVuZ3RoPjAmJihuPUh0LmNyZWF0ZUF0dHJpYnV0ZUxvY2F0aW9ucyh0WzBdKSxlLmNyZWF0ZVBpY2tPZmZzZXRzJiYocj1MSShvLHQpKSksZyhvWzBdLmF0dHJpYnV0ZXMpJiZnKG9bMF0uYXR0cmlidXRlcy5vZmZzZXQpJiYoaT1uZXcgQXJyYXkoYSksZj0hMCkpO2xldCBkPW5ldyBBcnJheShhKSxjPW5ldyBBcnJheShhKTtmb3IobGV0IHU9MDt1PGE7Kyt1KXtsZXQgbD1vW3VdLGg9bC5nZW9tZXRyeTtnKGgpJiYoZFt1XT1oLmJvdW5kaW5nU3BoZXJlLGNbdV09aC5ib3VuZGluZ1NwaGVyZUNWLGYmJihpW3VdPWwuZ2VvbWV0cnkub2Zmc2V0QXR0cmlidXRlKSk7bGV0IG09bC5lYXN0SGVtaXNwaGVyZUdlb21ldHJ5LGI9bC53ZXN0SGVtaXNwaGVyZUdlb21ldHJ5O2cobSkmJmcoYikmJihnKG0uYm91bmRpbmdTcGhlcmUpJiZnKGIuYm91bmRpbmdTcGhlcmUpJiYoZFt1XT1nZS51bmlvbihtLmJvdW5kaW5nU3BoZXJlLGIuYm91bmRpbmdTcGhlcmUpKSxnKG0uYm91bmRpbmdTcGhlcmVDVikmJmcoYi5ib3VuZGluZ1NwaGVyZUNWKSYmKGNbdV09Z2UudW5pb24obS5ib3VuZGluZ1NwaGVyZUNWLGIuYm91bmRpbmdTcGhlcmVDVikpKX1yZXR1cm57Z2VvbWV0cmllczp0LG1vZGVsTWF0cml4OmUubW9kZWxNYXRyaXgsYXR0cmlidXRlTG9jYXRpb25zOm4scGlja09mZnNldHM6cixvZmZzZXRJbnN0YW5jZUV4dGVuZDppLGJvdW5kaW5nU3BoZXJlczpkLGJvdW5kaW5nU3BoZXJlc0NWOmN9fTtqci5wYWNrQ3JlYXRlR2VvbWV0cnlSZXN1bHRzPWZ1bmN0aW9uKGUsdCl7bGV0IG49bmV3IEZsb2F0NjRBcnJheShHSShlKSksbz1bXSxhPXt9LHI9ZS5sZW5ndGgsaT0wO25baSsrXT1yO2ZvcihsZXQgZj0wO2Y8cjtmKyspe2xldCBkPWVbZl0sYz1nKGQpO2lmKG5baSsrXT1jPzE6MCwhYyljb250aW51ZTtuW2krK109ZC5wcmltaXRpdmVUeXBlLG5baSsrXT1kLmdlb21ldHJ5VHlwZSxuW2krK109ZC5vZmZzZXRBdHRyaWJ1dGU/Py0xO2xldCB1PWcoZC5ib3VuZGluZ1NwaGVyZSk/MTowO25baSsrXT11LHUmJmdlLnBhY2soZC5ib3VuZGluZ1NwaGVyZSxuLGkpLGkrPWdlLnBhY2tlZExlbmd0aDtsZXQgbD1nKGQuYm91bmRpbmdTcGhlcmVDVik/MTowO25baSsrXT1sLGwmJmdlLnBhY2soZC5ib3VuZGluZ1NwaGVyZUNWLG4saSksaSs9Z2UucGFja2VkTGVuZ3RoO2xldCBoPWQuYXR0cmlidXRlcyxtPVtdO2ZvcihsZXQgcCBpbiBoKWguaGFzT3duUHJvcGVydHkocCkmJmcoaFtwXSkmJihtLnB1c2gocCksZyhhW3BdKXx8KGFbcF09by5sZW5ndGgsby5wdXNoKHApKSk7bltpKytdPW0ubGVuZ3RoO2ZvcihsZXQgcD0wO3A8bS5sZW5ndGg7cCsrKXtsZXQgeT1tW3BdLFQ9aFt5XTtuW2krK109YVt5XSxuW2krK109VC5jb21wb25lbnREYXRhdHlwZSxuW2krK109VC5jb21wb25lbnRzUGVyQXR0cmlidXRlLG5baSsrXT1ULm5vcm1hbGl6ZT8xOjAsbltpKytdPVQudmFsdWVzLmxlbmd0aCxuLnNldChULnZhbHVlcyxpKSxpKz1ULnZhbHVlcy5sZW5ndGh9bGV0IGI9ZyhkLmluZGljZXMpP2QuaW5kaWNlcy5sZW5ndGg6MDtuW2krK109YixiPjAmJihuLnNldChkLmluZGljZXMsaSksaSs9Yil9cmV0dXJuIHQucHVzaChuLmJ1ZmZlcikse3N0cmluZ1RhYmxlOm8scGFja2VkRGF0YTpufX07anIudW5wYWNrQ3JlYXRlR2VvbWV0cnlSZXN1bHRzPWZ1bmN0aW9uKGUpe2xldCB0PWUuc3RyaW5nVGFibGUsbj1lLnBhY2tlZERhdGEsbyxhPW5ldyBBcnJheShuWzBdKSxyPTAsaT0xO2Zvcig7aTxuLmxlbmd0aDspe2lmKCEobltpKytdPT09MSkpe2FbcisrXT12b2lkIDA7Y29udGludWV9bGV0IGQ9bltpKytdLGM9bltpKytdLHU9bltpKytdO3U9PT0tMSYmKHU9dm9pZCAwKTtsZXQgbCxoO25baSsrXT09PTEmJihsPWdlLnVucGFjayhuLGkpKSxpKz1nZS5wYWNrZWRMZW5ndGgsbltpKytdPT09MSYmKGg9Z2UudW5wYWNrKG4saSkpLGkrPWdlLnBhY2tlZExlbmd0aDtsZXQgcCx5LFQsXz1uZXcgbnQsRT1uW2krK107Zm9yKG89MDtvPEU7bysrKXtsZXQgUj10W25baSsrXV0sUz1uW2krK107VD1uW2krK107bGV0IEM9bltpKytdIT09MDtwPW5baSsrXSx5PW5lLmNyZWF0ZVR5cGVkQXJyYXkoUyxwKTtmb3IobGV0IEk9MDtJPHA7SSsrKXlbSV09bltpKytdO19bUl09bmV3IGllKHtjb21wb25lbnREYXRhdHlwZTpTLGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6VCxub3JtYWxpemU6Qyx2YWx1ZXM6eX0pfWxldCB3O2lmKHA9bltpKytdLHA+MCl7bGV0IFI9eS5sZW5ndGgvVDtmb3Iodz1rZS5jcmVhdGVUeXBlZEFycmF5KFIscCksbz0wO288cDtvKyspd1tvXT1uW2krK119YVtyKytdPW5ldyB2ZSh7cHJpbWl0aXZlVHlwZTpkLGdlb21ldHJ5VHlwZTpjLGJvdW5kaW5nU3BoZXJlOmwsYm91bmRpbmdTcGhlcmVDVjpoLGluZGljZXM6dyxhdHRyaWJ1dGVzOl8sb2Zmc2V0QXR0cmlidXRlOnV9KX1yZXR1cm4gYX07anIucGFja0NvbWJpbmVHZW9tZXRyeVBhcmFtZXRlcnM9ZnVuY3Rpb24oZSx0KXtsZXQgbj1lLmNyZWF0ZUdlb21ldHJ5UmVzdWx0cyxvPW4ubGVuZ3RoO2ZvcihsZXQgYT0wO2E8bzthKyspdC5wdXNoKG5bYV0ucGFja2VkRGF0YS5idWZmZXIpO3JldHVybntjcmVhdGVHZW9tZXRyeVJlc3VsdHM6ZS5jcmVhdGVHZW9tZXRyeVJlc3VsdHMscGFja2VkSW5zdGFuY2VzOlZJKGUuaW5zdGFuY2VzLHQpLGVsbGlwc29pZDplLmVsbGlwc29pZCxpc0dlb2dyYXBoaWM6ZS5wcm9qZWN0aW9uIGluc3RhbmNlb2YgaW8sZWxlbWVudEluZGV4VWludFN1cHBvcnRlZDplLmVsZW1lbnRJbmRleFVpbnRTdXBwb3J0ZWQsc2NlbmUzRE9ubHk6ZS5zY2VuZTNET25seSx2ZXJ0ZXhDYWNoZU9wdGltaXplOmUudmVydGV4Q2FjaGVPcHRpbWl6ZSxjb21wcmVzc1ZlcnRpY2VzOmUuY29tcHJlc3NWZXJ0aWNlcyxtb2RlbE1hdHJpeDplLm1vZGVsTWF0cml4LGNyZWF0ZVBpY2tPZmZzZXRzOmUuY3JlYXRlUGlja09mZnNldHN9fTtqci51bnBhY2tDb21iaW5lR2VvbWV0cnlQYXJhbWV0ZXJzPWZ1bmN0aW9uKGUpe2xldCB0PUhJKGUucGFja2VkSW5zdGFuY2VzKSxuPWUuY3JlYXRlR2VvbWV0cnlSZXN1bHRzLG89bi5sZW5ndGgsYT0wO2ZvcihsZXQgZj0wO2Y8bztmKyspe2xldCBkPWpyLnVucGFja0NyZWF0ZUdlb21ldHJ5UmVzdWx0cyhuW2ZdKSxjPWQubGVuZ3RoO2ZvcihsZXQgdT0wO3U8Yzt1Kyspe2xldCBsPWRbdV0saD10W2FdO2guZ2VvbWV0cnk9bCwrK2F9fWxldCByPXEuY2xvbmUoZS5lbGxpcHNvaWQpLGk9ZS5pc0dlb2dyYXBoaWM/bmV3IGlvKHIpOm5ldyBSbihyKTtyZXR1cm57aW5zdGFuY2VzOnQsZWxsaXBzb2lkOnIscHJvamVjdGlvbjppLGVsZW1lbnRJbmRleFVpbnRTdXBwb3J0ZWQ6ZS5lbGVtZW50SW5kZXhVaW50U3VwcG9ydGVkLHNjZW5lM0RPbmx5OmUuc2NlbmUzRE9ubHksdmVydGV4Q2FjaGVPcHRpbWl6ZTplLnZlcnRleENhY2hlT3B0aW1pemUsY29tcHJlc3NWZXJ0aWNlczplLmNvbXByZXNzVmVydGljZXMsbW9kZWxNYXRyaXg6JC5jbG9uZShlLm1vZGVsTWF0cml4KSxjcmVhdGVQaWNrT2Zmc2V0czplLmNyZWF0ZVBpY2tPZmZzZXRzfX07anIucGFja0NvbWJpbmVHZW9tZXRyeVJlc3VsdHM9ZnVuY3Rpb24oZSx0KXtnKGUuZ2VvbWV0cmllcykmJnpJKGUuZ2VvbWV0cmllcyx0KTtsZXQgbj1LdyhlLmJvdW5kaW5nU3BoZXJlcyksbz1LdyhlLmJvdW5kaW5nU3BoZXJlc0NWKTtyZXR1cm4gdC5wdXNoKG4uYnVmZmVyLG8uYnVmZmVyKSx7Z2VvbWV0cmllczplLmdlb21ldHJpZXMsYXR0cmlidXRlTG9jYXRpb25zOmUuYXR0cmlidXRlTG9jYXRpb25zLG1vZGVsTWF0cml4OmUubW9kZWxNYXRyaXgscGlja09mZnNldHM6ZS5waWNrT2Zmc2V0cyxvZmZzZXRJbnN0YW5jZUV4dGVuZDplLm9mZnNldEluc3RhbmNlRXh0ZW5kLGJvdW5kaW5nU3BoZXJlczpuLGJvdW5kaW5nU3BoZXJlc0NWOm99fTtqci51bnBhY2tDb21iaW5lR2VvbWV0cnlSZXN1bHRzPWZ1bmN0aW9uKGUpe3JldHVybntnZW9tZXRyaWVzOmUuZ2VvbWV0cmllcyxhdHRyaWJ1dGVMb2NhdGlvbnM6ZS5hdHRyaWJ1dGVMb2NhdGlvbnMsbW9kZWxNYXRyaXg6ZS5tb2RlbE1hdHJpeCxwaWNrT2Zmc2V0czplLnBpY2tPZmZzZXRzLG9mZnNldEluc3RhbmNlRXh0ZW5kOmUub2Zmc2V0SW5zdGFuY2VFeHRlbmQsYm91bmRpbmdTcGhlcmVzOnF3KGUuYm91bmRpbmdTcGhlcmVzKSxib3VuZGluZ1NwaGVyZXNDVjpxdyhlLmJvdW5kaW5nU3BoZXJlc0NWKX19O3VzPWpyfSk7ZnVuY3Rpb24gS0koZSl7bGV0IHQsbj1lLm5hbWUsbz1lLm1lc3NhZ2U7ZyhuKSYmZyhvKT90PWAke259OiAke299YDp0PWUudG9TdHJpbmcoKTtsZXQgYT1lLnN0YWNrO3JldHVybiBnKGEpJiYodCs9YAoke2F9YCksdH12YXIgV3csWHc9WCgoKT0+e3NlKCk7V3c9S0l9KTt2YXIgUnA9e307cnQoUnAse2RlZmF1bHQ6KCk9PkF0fSk7ZnVuY3Rpb24gcUkoZSl7YXN5bmMgZnVuY3Rpb24gdCh7ZGF0YTpvfSl7bGV0IGE9W10scj17aWQ6by5pZCxyZXN1bHQ6dm9pZCAwLGVycm9yOnZvaWQgMH07c2VsZi5DRVNJVU1fQkFTRV9VUkw9by5iYXNlVXJsO3RyeXtsZXQgaT1hd2FpdCBlKG8ucGFyYW1ldGVycyxhKTtyLnJlc3VsdD1pfWNhdGNoKGkpe2kgaW5zdGFuY2VvZiBFcnJvcj9yLmVycm9yPXtuYW1lOmkubmFtZSxtZXNzYWdlOmkubWVzc2FnZSxzdGFjazppLnN0YWNrfTpyLmVycm9yPWl9by5jYW5UcmFuc2ZlckFycmF5QnVmZmVyfHwoYS5sZW5ndGg9MCk7dHJ5e3Bvc3RNZXNzYWdlKHIsYSl9Y2F0Y2goaSl7ci5yZXN1bHQ9dm9pZCAwLHIuZXJyb3I9YHBvc3RNZXNzYWdlIGZhaWxlZCB3aXRoIGVycm9yOiAke1d3KGkpfQogIHdpdGggcmVzcG9uc2VNZXNzYWdlOiAke0pTT04uc3RyaW5naWZ5KHIpfWAscG9zdE1lc3NhZ2Uocil9fWZ1bmN0aW9uIG4obyl7cG9zdE1lc3NhZ2Uoe2lkOm8uZGF0YT8uaWQsZXJyb3I6YHBvc3RNZXNzYWdlIGZhaWxlZCB3aXRoIGVycm9yOiAke0pTT04uc3RyaW5naWZ5KG8pfWB9KX1yZXR1cm4gc2VsZi5vbm1lc3NhZ2U9dCxzZWxmLm9ubWVzc2FnZWVycm9yPW4sc2VsZn12YXIgQXQsVW49WCgoKT0+e1h3KCk7QXQ9cUl9KTt2YXIgeHA9e307cnQoeHAse2RlZmF1bHQ6KCk9PlhJfSk7ZnVuY3Rpb24gV0koZSx0KXtsZXQgbj11cy51bnBhY2tDb21iaW5lR2VvbWV0cnlQYXJhbWV0ZXJzKGUpLG89dXMuY29tYmluZUdlb21ldHJ5KG4pO3JldHVybiB1cy5wYWNrQ29tYmluZUdlb21ldHJ5UmVzdWx0cyhvLHQpfXZhciBYSSxPcD1YKCgpPT57RXAoKTtVbigpO1hJPUF0KFdJKX0pO3ZhciBZSSxzdCx6bz1YKCgpPT57WUk9e05PTkU6MCxUT1A6MSxBTEw6Mn0sc3Q9T2JqZWN0LmZyZWV6ZShZSSl9KTtmdW5jdGlvbiBabihlKXtlPWU/P0NlLkVNUFRZX09CSkVDVCx0aGlzLnBvc2l0aW9uPWUucG9zaXRpb24/PyExLHRoaXMubm9ybWFsPWUubm9ybWFsPz8hMSx0aGlzLnN0PWUuc3Q/PyExLHRoaXMuYml0YW5nZW50PWUuYml0YW5nZW50Pz8hMSx0aGlzLnRhbmdlbnQ9ZS50YW5nZW50Pz8hMSx0aGlzLmNvbG9yPWUuY29sb3I/PyExfXZhciBoZSxrbz1YKCgpPT57bXQoKTtzZSgpO1puLlBPU0lUSU9OX09OTFk9T2JqZWN0LmZyZWV6ZShuZXcgWm4oe3Bvc2l0aW9uOiEwfSkpO1puLlBPU0lUSU9OX0FORF9OT1JNQUw9T2JqZWN0LmZyZWV6ZShuZXcgWm4oe3Bvc2l0aW9uOiEwLG5vcm1hbDohMH0pKTtabi5QT1NJVElPTl9OT1JNQUxfQU5EX1NUPU9iamVjdC5mcmVlemUobmV3IFpuKHtwb3NpdGlvbjohMCxub3JtYWw6ITAsc3Q6ITB9KSk7Wm4uUE9TSVRJT05fQU5EX1NUPU9iamVjdC5mcmVlemUobmV3IFpuKHtwb3NpdGlvbjohMCxzdDohMH0pKTtabi5QT1NJVElPTl9BTkRfQ09MT1I9T2JqZWN0LmZyZWV6ZShuZXcgWm4oe3Bvc2l0aW9uOiEwLGNvbG9yOiEwfSkpO1puLkFMTD1PYmplY3QuZnJlZXplKG5ldyBabih7cG9zaXRpb246ITAsbm9ybWFsOiEwLHN0OiEwLHRhbmdlbnQ6ITAsYml0YW5nZW50OiEwfSkpO1puLkRFRkFVTFQ9Wm4uUE9TSVRJT05fTk9STUFMX0FORF9TVDtabi5wYWNrZWRMZW5ndGg9Njtabi5wYWNrPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gbj1uPz8wLHRbbisrXT1lLnBvc2l0aW9uPzE6MCx0W24rK109ZS5ub3JtYWw/MTowLHRbbisrXT1lLnN0PzE6MCx0W24rK109ZS50YW5nZW50PzE6MCx0W24rK109ZS5iaXRhbmdlbnQ/MTowLHRbbl09ZS5jb2xvcj8xOjAsdH07Wm4udW5wYWNrPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdD10Pz8wLGcobil8fChuPW5ldyBabiksbi5wb3NpdGlvbj1lW3QrK109PT0xLG4ubm9ybWFsPWVbdCsrXT09PTEsbi5zdD1lW3QrK109PT0xLG4udGFuZ2VudD1lW3QrK109PT0xLG4uYml0YW5nZW50PWVbdCsrXT09PTEsbi5jb2xvcj1lW3RdPT09MSxufTtabi5jbG9uZT1mdW5jdGlvbihlLHQpe2lmKGcoZSkpcmV0dXJuIGcodCl8fCh0PW5ldyBabiksdC5wb3NpdGlvbj1lLnBvc2l0aW9uLHQubm9ybWFsPWUubm9ybWFsLHQuc3Q9ZS5zdCx0LnRhbmdlbnQ9ZS50YW5nZW50LHQuYml0YW5nZW50PWUuYml0YW5nZW50LHQuY29sb3I9ZS5jb2xvcix0fTtoZT1abn0pO2Z1bmN0aW9uIHNhKGUpe2U9ZT8/Q2UuRU1QVFlfT0JKRUNUO2xldCB0PWUubWluaW11bSxuPWUubWF4aW11bSxvPWUudmVydGV4Rm9ybWF0Pz9oZS5ERUZBVUxUO3RoaXMuX21pbmltdW09cy5jbG9uZSh0KSx0aGlzLl9tYXhpbXVtPXMuY2xvbmUobiksdGhpcy5fdmVydGV4Rm9ybWF0PW8sdGhpcy5fb2Zmc2V0QXR0cmlidXRlPWUub2Zmc2V0QXR0cmlidXRlLHRoaXMuX3dvcmtlck5hbWU9ImNyZWF0ZUJveEdlb21ldHJ5In12YXIgSkksSncsWncsUXcsWXcsU3AsRmYsQ3A9WCgoKT0+e010KCk7SWUoKTt2dCgpO210KCk7c2UoKTskdCgpO2VuKCk7dW4oKTt6bygpO2NuKCk7a28oKTtKST1uZXcgcztzYS5mcm9tRGltZW5zaW9ucz1mdW5jdGlvbihlKXtlPWU/P0NlLkVNUFRZX09CSkVDVDtsZXQgdD1lLmRpbWVuc2lvbnMsbj1zLm11bHRpcGx5QnlTY2FsYXIodCwuNSxuZXcgcyk7cmV0dXJuIG5ldyBzYSh7bWluaW11bTpzLm5lZ2F0ZShuLG5ldyBzKSxtYXhpbXVtOm4sdmVydGV4Rm9ybWF0OmUudmVydGV4Rm9ybWF0LG9mZnNldEF0dHJpYnV0ZTplLm9mZnNldEF0dHJpYnV0ZX0pfTtzYS5mcm9tQXhpc0FsaWduZWRCb3VuZGluZ0JveD1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IHNhKHttaW5pbXVtOmUubWluaW11bSxtYXhpbXVtOmUubWF4aW11bX0pfTtzYS5wYWNrZWRMZW5ndGg9MipzLnBhY2tlZExlbmd0aCtoZS5wYWNrZWRMZW5ndGgrMTtzYS5wYWNrPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gbj1uPz8wLHMucGFjayhlLl9taW5pbXVtLHQsbikscy5wYWNrKGUuX21heGltdW0sdCxuK3MucGFja2VkTGVuZ3RoKSxoZS5wYWNrKGUuX3ZlcnRleEZvcm1hdCx0LG4rMipzLnBhY2tlZExlbmd0aCksdFtuKzIqcy5wYWNrZWRMZW5ndGgraGUucGFja2VkTGVuZ3RoXT1lLl9vZmZzZXRBdHRyaWJ1dGU/Py0xLHR9O0p3PW5ldyBzLFp3PW5ldyBzLFF3PW5ldyBoZSxZdz17bWluaW11bTpKdyxtYXhpbXVtOlp3LHZlcnRleEZvcm1hdDpRdyxvZmZzZXRBdHRyaWJ1dGU6dm9pZCAwfTtzYS51bnBhY2s9ZnVuY3Rpb24oZSx0LG4pe3Q9dD8/MDtsZXQgbz1zLnVucGFjayhlLHQsSncpLGE9cy51bnBhY2soZSx0K3MucGFja2VkTGVuZ3RoLFp3KSxyPWhlLnVucGFjayhlLHQrMipzLnBhY2tlZExlbmd0aCxRdyksaT1lW3QrMipzLnBhY2tlZExlbmd0aCtoZS5wYWNrZWRMZW5ndGhdO3JldHVybiBnKG4pPyhuLl9taW5pbXVtPXMuY2xvbmUobyxuLl9taW5pbXVtKSxuLl9tYXhpbXVtPXMuY2xvbmUoYSxuLl9tYXhpbXVtKSxuLl92ZXJ0ZXhGb3JtYXQ9aGUuY2xvbmUocixuLl92ZXJ0ZXhGb3JtYXQpLG4uX29mZnNldEF0dHJpYnV0ZT1pPT09LTE/dm9pZCAwOmksbik6KFl3Lm9mZnNldEF0dHJpYnV0ZT1pPT09LTE/dm9pZCAwOmksbmV3IHNhKFl3KSl9O3NhLmNyZWF0ZUdlb21ldHJ5PWZ1bmN0aW9uKGUpe2xldCB0PWUuX21pbmltdW0sbj1lLl9tYXhpbXVtLG89ZS5fdmVydGV4Rm9ybWF0O2lmKHMuZXF1YWxzKHQsbikpcmV0dXJuO2xldCBhPW5ldyBudCxyLGk7aWYoby5wb3NpdGlvbiYmKG8uc3R8fG8ubm9ybWFsfHxvLnRhbmdlbnR8fG8uYml0YW5nZW50KSl7aWYoby5wb3NpdGlvbiYmKGk9bmV3IEZsb2F0NjRBcnJheSg3MiksaVswXT10LngsaVsxXT10LnksaVsyXT1uLnosaVszXT1uLngsaVs0XT10LnksaVs1XT1uLnosaVs2XT1uLngsaVs3XT1uLnksaVs4XT1uLnosaVs5XT10LngsaVsxMF09bi55LGlbMTFdPW4ueixpWzEyXT10LngsaVsxM109dC55LGlbMTRdPXQueixpWzE1XT1uLngsaVsxNl09dC55LGlbMTddPXQueixpWzE4XT1uLngsaVsxOV09bi55LGlbMjBdPXQueixpWzIxXT10LngsaVsyMl09bi55LGlbMjNdPXQueixpWzI0XT1uLngsaVsyNV09dC55LGlbMjZdPXQueixpWzI3XT1uLngsaVsyOF09bi55LGlbMjldPXQueixpWzMwXT1uLngsaVszMV09bi55LGlbMzJdPW4ueixpWzMzXT1uLngsaVszNF09dC55LGlbMzVdPW4ueixpWzM2XT10LngsaVszN109dC55LGlbMzhdPXQueixpWzM5XT10LngsaVs0MF09bi55LGlbNDFdPXQueixpWzQyXT10LngsaVs0M109bi55LGlbNDRdPW4ueixpWzQ1XT10LngsaVs0Nl09dC55LGlbNDddPW4ueixpWzQ4XT10LngsaVs0OV09bi55LGlbNTBdPXQueixpWzUxXT1uLngsaVs1Ml09bi55LGlbNTNdPXQueixpWzU0XT1uLngsaVs1NV09bi55LGlbNTZdPW4ueixpWzU3XT10LngsaVs1OF09bi55LGlbNTldPW4ueixpWzYwXT10LngsaVs2MV09dC55LGlbNjJdPXQueixpWzYzXT1uLngsaVs2NF09dC55LGlbNjVdPXQueixpWzY2XT1uLngsaVs2N109dC55LGlbNjhdPW4ueixpWzY5XT10LngsaVs3MF09dC55LGlbNzFdPW4ueixhLnBvc2l0aW9uPW5ldyBpZSh7Y29tcG9uZW50RGF0YXR5cGU6bmUuRE9VQkxFLGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6aX0pKSxvLm5vcm1hbCl7bGV0IGM9bmV3IEZsb2F0MzJBcnJheSg3Mik7Y1swXT0wLGNbMV09MCxjWzJdPTEsY1szXT0wLGNbNF09MCxjWzVdPTEsY1s2XT0wLGNbN109MCxjWzhdPTEsY1s5XT0wLGNbMTBdPTAsY1sxMV09MSxjWzEyXT0wLGNbMTNdPTAsY1sxNF09LTEsY1sxNV09MCxjWzE2XT0wLGNbMTddPS0xLGNbMThdPTAsY1sxOV09MCxjWzIwXT0tMSxjWzIxXT0wLGNbMjJdPTAsY1syM109LTEsY1syNF09MSxjWzI1XT0wLGNbMjZdPTAsY1syN109MSxjWzI4XT0wLGNbMjldPTAsY1szMF09MSxjWzMxXT0wLGNbMzJdPTAsY1szM109MSxjWzM0XT0wLGNbMzVdPTAsY1szNl09LTEsY1szN109MCxjWzM4XT0wLGNbMzldPS0xLGNbNDBdPTAsY1s0MV09MCxjWzQyXT0tMSxjWzQzXT0wLGNbNDRdPTAsY1s0NV09LTEsY1s0Nl09MCxjWzQ3XT0wLGNbNDhdPTAsY1s0OV09MSxjWzUwXT0wLGNbNTFdPTAsY1s1Ml09MSxjWzUzXT0wLGNbNTRdPTAsY1s1NV09MSxjWzU2XT0wLGNbNTddPTAsY1s1OF09MSxjWzU5XT0wLGNbNjBdPTAsY1s2MV09LTEsY1s2Ml09MCxjWzYzXT0wLGNbNjRdPS0xLGNbNjVdPTAsY1s2Nl09MCxjWzY3XT0tMSxjWzY4XT0wLGNbNjldPTAsY1s3MF09LTEsY1s3MV09MCxhLm5vcm1hbD1uZXcgaWUoe2NvbXBvbmVudERhdGF0eXBlOm5lLkZMT0FULGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6Y30pfWlmKG8uc3Qpe2xldCBjPW5ldyBGbG9hdDMyQXJyYXkoNDgpO2NbMF09MCxjWzFdPTAsY1syXT0xLGNbM109MCxjWzRdPTEsY1s1XT0xLGNbNl09MCxjWzddPTEsY1s4XT0xLGNbOV09MCxjWzEwXT0wLGNbMTFdPTAsY1sxMl09MCxjWzEzXT0xLGNbMTRdPTEsY1sxNV09MSxjWzE2XT0wLGNbMTddPTAsY1sxOF09MSxjWzE5XT0wLGNbMjBdPTEsY1syMV09MSxjWzIyXT0wLGNbMjNdPTEsY1syNF09MSxjWzI1XT0wLGNbMjZdPTAsY1syN109MCxjWzI4XT0wLGNbMjldPTEsY1szMF09MSxjWzMxXT0xLGNbMzJdPTEsY1szM109MCxjWzM0XT0wLGNbMzVdPTAsY1szNl09MCxjWzM3XT0xLGNbMzhdPTEsY1szOV09MSxjWzQwXT0wLGNbNDFdPTAsY1s0Ml09MSxjWzQzXT0wLGNbNDRdPTEsY1s0NV09MSxjWzQ2XT0wLGNbNDddPTEsYS5zdD1uZXcgaWUoe2NvbXBvbmVudERhdGF0eXBlOm5lLkZMT0FULGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Mix2YWx1ZXM6Y30pfWlmKG8udGFuZ2VudCl7bGV0IGM9bmV3IEZsb2F0MzJBcnJheSg3Mik7Y1swXT0xLGNbMV09MCxjWzJdPTAsY1szXT0xLGNbNF09MCxjWzVdPTAsY1s2XT0xLGNbN109MCxjWzhdPTAsY1s5XT0xLGNbMTBdPTAsY1sxMV09MCxjWzEyXT0tMSxjWzEzXT0wLGNbMTRdPTAsY1sxNV09LTEsY1sxNl09MCxjWzE3XT0wLGNbMThdPS0xLGNbMTldPTAsY1syMF09MCxjWzIxXT0tMSxjWzIyXT0wLGNbMjNdPTAsY1syNF09MCxjWzI1XT0xLGNbMjZdPTAsY1syN109MCxjWzI4XT0xLGNbMjldPTAsY1szMF09MCxjWzMxXT0xLGNbMzJdPTAsY1szM109MCxjWzM0XT0xLGNbMzVdPTAsY1szNl09MCxjWzM3XT0tMSxjWzM4XT0wLGNbMzldPTAsY1s0MF09LTEsY1s0MV09MCxjWzQyXT0wLGNbNDNdPS0xLGNbNDRdPTAsY1s0NV09MCxjWzQ2XT0tMSxjWzQ3XT0wLGNbNDhdPS0xLGNbNDldPTAsY1s1MF09MCxjWzUxXT0tMSxjWzUyXT0wLGNbNTNdPTAsY1s1NF09LTEsY1s1NV09MCxjWzU2XT0wLGNbNTddPS0xLGNbNThdPTAsY1s1OV09MCxjWzYwXT0xLGNbNjFdPTAsY1s2Ml09MCxjWzYzXT0xLGNbNjRdPTAsY1s2NV09MCxjWzY2XT0xLGNbNjddPTAsY1s2OF09MCxjWzY5XT0xLGNbNzBdPTAsY1s3MV09MCxhLnRhbmdlbnQ9bmV3IGllKHtjb21wb25lbnREYXRhdHlwZTpuZS5GTE9BVCxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOmN9KX1pZihvLmJpdGFuZ2VudCl7bGV0IGM9bmV3IEZsb2F0MzJBcnJheSg3Mik7Y1swXT0wLGNbMV09MSxjWzJdPTAsY1szXT0wLGNbNF09MSxjWzVdPTAsY1s2XT0wLGNbN109MSxjWzhdPTAsY1s5XT0wLGNbMTBdPTEsY1sxMV09MCxjWzEyXT0wLGNbMTNdPTEsY1sxNF09MCxjWzE1XT0wLGNbMTZdPTEsY1sxN109MCxjWzE4XT0wLGNbMTldPTEsY1syMF09MCxjWzIxXT0wLGNbMjJdPTEsY1syM109MCxjWzI0XT0wLGNbMjVdPTAsY1syNl09MSxjWzI3XT0wLGNbMjhdPTAsY1syOV09MSxjWzMwXT0wLGNbMzFdPTAsY1szMl09MSxjWzMzXT0wLGNbMzRdPTAsY1szNV09MSxjWzM2XT0wLGNbMzddPTAsY1szOF09MSxjWzM5XT0wLGNbNDBdPTAsY1s0MV09MSxjWzQyXT0wLGNbNDNdPTAsY1s0NF09MSxjWzQ1XT0wLGNbNDZdPTAsY1s0N109MSxjWzQ4XT0wLGNbNDldPTAsY1s1MF09MSxjWzUxXT0wLGNbNTJdPTAsY1s1M109MSxjWzU0XT0wLGNbNTVdPTAsY1s1Nl09MSxjWzU3XT0wLGNbNThdPTAsY1s1OV09MSxjWzYwXT0wLGNbNjFdPTAsY1s2Ml09MSxjWzYzXT0wLGNbNjRdPTAsY1s2NV09MSxjWzY2XT0wLGNbNjddPTAsY1s2OF09MSxjWzY5XT0wLGNbNzBdPTAsY1s3MV09MSxhLmJpdGFuZ2VudD1uZXcgaWUoe2NvbXBvbmVudERhdGF0eXBlOm5lLkZMT0FULGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6Y30pfXI9bmV3IFVpbnQxNkFycmF5KDM2KSxyWzBdPTAsclsxXT0xLHJbMl09MixyWzNdPTAscls0XT0yLHJbNV09MyxyWzZdPTYscls3XT01LHJbOF09NCxyWzldPTcsclsxMF09NixyWzExXT00LHJbMTJdPTgsclsxM109OSxyWzE0XT0xMCxyWzE1XT04LHJbMTZdPTEwLHJbMTddPTExLHJbMThdPTE0LHJbMTldPTEzLHJbMjBdPTEyLHJbMjFdPTE1LHJbMjJdPTE0LHJbMjNdPTEyLHJbMjRdPTE4LHJbMjVdPTE3LHJbMjZdPTE2LHJbMjddPTE5LHJbMjhdPTE4LHJbMjldPTE2LHJbMzBdPTIwLHJbMzFdPTIxLHJbMzJdPTIyLHJbMzNdPTIwLHJbMzRdPTIyLHJbMzVdPTIzfWVsc2UgaT1uZXcgRmxvYXQ2NEFycmF5KDI0KSxpWzBdPXQueCxpWzFdPXQueSxpWzJdPXQueixpWzNdPW4ueCxpWzRdPXQueSxpWzVdPXQueixpWzZdPW4ueCxpWzddPW4ueSxpWzhdPXQueixpWzldPXQueCxpWzEwXT1uLnksaVsxMV09dC56LGlbMTJdPXQueCxpWzEzXT10LnksaVsxNF09bi56LGlbMTVdPW4ueCxpWzE2XT10LnksaVsxN109bi56LGlbMThdPW4ueCxpWzE5XT1uLnksaVsyMF09bi56LGlbMjFdPXQueCxpWzIyXT1uLnksaVsyM109bi56LGEucG9zaXRpb249bmV3IGllKHtjb21wb25lbnREYXRhdHlwZTpuZS5ET1VCTEUsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczppfSkscj1uZXcgVWludDE2QXJyYXkoMzYpLHJbMF09NCxyWzFdPTUsclsyXT02LHJbM109NCxyWzRdPTYscls1XT03LHJbNl09MSxyWzddPTAscls4XT0zLHJbOV09MSxyWzEwXT0zLHJbMTFdPTIsclsxMl09MSxyWzEzXT02LHJbMTRdPTUsclsxNV09MSxyWzE2XT0yLHJbMTddPTYsclsxOF09MixyWzE5XT0zLHJbMjBdPTcsclsyMV09MixyWzIyXT03LHJbMjNdPTYsclsyNF09MyxyWzI1XT0wLHJbMjZdPTQsclsyN109MyxyWzI4XT00LHJbMjldPTcsclszMF09MCxyWzMxXT0xLHJbMzJdPTUsclszM109MCxyWzM0XT01LHJbMzVdPTQ7bGV0IGY9cy5zdWJ0cmFjdChuLHQsSkkpLGQ9cy5tYWduaXR1ZGUoZikqLjU7aWYoZyhlLl9vZmZzZXRBdHRyaWJ1dGUpKXtsZXQgYz1pLmxlbmd0aCx1PWUuX29mZnNldEF0dHJpYnV0ZT09PXN0Lk5PTkU/MDoxLGw9bmV3IFVpbnQ4QXJyYXkoYy8zKS5maWxsKHUpO2EuYXBwbHlPZmZzZXQ9bmV3IGllKHtjb21wb25lbnREYXRhdHlwZTpuZS5VTlNJR05FRF9CWVRFLGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6MSx2YWx1ZXM6bH0pfXJldHVybiBuZXcgdmUoe2F0dHJpYnV0ZXM6YSxpbmRpY2VzOnIscHJpbWl0aXZlVHlwZTpVZS5UUklBTkdMRVMsYm91bmRpbmdTcGhlcmU6bmV3IGdlKHMuWkVSTyxkKSxvZmZzZXRBdHRyaWJ1dGU6ZS5fb2Zmc2V0QXR0cmlidXRlfSl9O3NhLmdldFVuaXRCb3g9ZnVuY3Rpb24oKXtyZXR1cm4gZyhTcCl8fChTcD1zYS5jcmVhdGVHZW9tZXRyeShzYS5mcm9tRGltZW5zaW9ucyh7ZGltZW5zaW9uczpuZXcgcygxLDEsMSksdmVydGV4Rm9ybWF0OmhlLlBPU0lUSU9OX09OTFl9KSkpLFNwfTtGZj1zYX0pO3ZhciBNcD17fTtydChNcCx7ZGVmYXVsdDooKT0+UUl9KTtmdW5jdGlvbiBaSShlLHQpe3JldHVybiBnKHQpJiYoZT1GZi51bnBhY2soZSx0KSksRmYuY3JlYXRlR2VvbWV0cnkoZSl9dmFyIFFJLE5wPVgoKCk9PntDcCgpO3NlKCk7UUk9Wkl9KTtmdW5jdGlvbiBocihlKXtlPWU/P0NlLkVNUFRZX09CSkVDVDtsZXQgdD1lLm1pbmltdW0sbj1lLm1heGltdW07dGhpcy5fbWluPXMuY2xvbmUodCksdGhpcy5fbWF4PXMuY2xvbmUobiksdGhpcy5fb2Zmc2V0QXR0cmlidXRlPWUub2Zmc2V0QXR0cmlidXRlLHRoaXMuX3dvcmtlck5hbWU9ImNyZWF0ZUJveE91dGxpbmVHZW9tZXRyeSJ9dmFyICRJLGVULHRULCR3LElwLG5UPVgoKCk9PntNdCgpO0llKCk7dnQoKTttdCgpO3NlKCk7JHQoKTtlbigpO3VuKCk7em8oKTtjbigpOyRJPW5ldyBzO2hyLmZyb21EaW1lbnNpb25zPWZ1bmN0aW9uKGUpe2U9ZT8/Q2UuRU1QVFlfT0JKRUNUO2xldCB0PWUuZGltZW5zaW9ucyxuPXMubXVsdGlwbHlCeVNjYWxhcih0LC41LG5ldyBzKTtyZXR1cm4gbmV3IGhyKHttaW5pbXVtOnMubmVnYXRlKG4sbmV3IHMpLG1heGltdW06bixvZmZzZXRBdHRyaWJ1dGU6ZS5vZmZzZXRBdHRyaWJ1dGV9KX07aHIuZnJvbUF4aXNBbGlnbmVkQm91bmRpbmdCb3g9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBocih7bWluaW11bTplLm1pbmltdW0sbWF4aW11bTplLm1heGltdW19KX07aHIucGFja2VkTGVuZ3RoPTIqcy5wYWNrZWRMZW5ndGgrMTtoci5wYWNrPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gbj1uPz8wLHMucGFjayhlLl9taW4sdCxuKSxzLnBhY2soZS5fbWF4LHQsbitzLnBhY2tlZExlbmd0aCksdFtuK3MucGFja2VkTGVuZ3RoKjJdPWUuX29mZnNldEF0dHJpYnV0ZT8/LTEsdH07ZVQ9bmV3IHMsdFQ9bmV3IHMsJHc9e21pbmltdW06ZVQsbWF4aW11bTp0VCxvZmZzZXRBdHRyaWJ1dGU6dm9pZCAwfTtoci51bnBhY2s9ZnVuY3Rpb24oZSx0LG4pe3Q9dD8/MDtsZXQgbz1zLnVucGFjayhlLHQsZVQpLGE9cy51bnBhY2soZSx0K3MucGFja2VkTGVuZ3RoLHRUKSxyPWVbdCtzLnBhY2tlZExlbmd0aCoyXTtyZXR1cm4gZyhuKT8obi5fbWluPXMuY2xvbmUobyxuLl9taW4pLG4uX21heD1zLmNsb25lKGEsbi5fbWF4KSxuLl9vZmZzZXRBdHRyaWJ1dGU9cj09PS0xP3ZvaWQgMDpyLG4pOigkdy5vZmZzZXRBdHRyaWJ1dGU9cj09PS0xP3ZvaWQgMDpyLG5ldyBocigkdykpfTtoci5jcmVhdGVHZW9tZXRyeT1mdW5jdGlvbihlKXtsZXQgdD1lLl9taW4sbj1lLl9tYXg7aWYocy5lcXVhbHModCxuKSlyZXR1cm47bGV0IG89bmV3IG50LGE9bmV3IFVpbnQxNkFycmF5KDI0KSxyPW5ldyBGbG9hdDY0QXJyYXkoMjQpO3JbMF09dC54LHJbMV09dC55LHJbMl09dC56LHJbM109bi54LHJbNF09dC55LHJbNV09dC56LHJbNl09bi54LHJbN109bi55LHJbOF09dC56LHJbOV09dC54LHJbMTBdPW4ueSxyWzExXT10LnosclsxMl09dC54LHJbMTNdPXQueSxyWzE0XT1uLnosclsxNV09bi54LHJbMTZdPXQueSxyWzE3XT1uLnosclsxOF09bi54LHJbMTldPW4ueSxyWzIwXT1uLnosclsyMV09dC54LHJbMjJdPW4ueSxyWzIzXT1uLnosby5wb3NpdGlvbj1uZXcgaWUoe2NvbXBvbmVudERhdGF0eXBlOm5lLkRPVUJMRSxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOnJ9KSxhWzBdPTQsYVsxXT01LGFbMl09NSxhWzNdPTYsYVs0XT02LGFbNV09NyxhWzZdPTcsYVs3XT00LGFbOF09MCxhWzldPTEsYVsxMF09MSxhWzExXT0yLGFbMTJdPTIsYVsxM109MyxhWzE0XT0zLGFbMTVdPTAsYVsxNl09MCxhWzE3XT00LGFbMThdPTEsYVsxOV09NSxhWzIwXT0yLGFbMjFdPTYsYVsyMl09MyxhWzIzXT03O2xldCBpPXMuc3VidHJhY3Qobix0LCRJKSxmPXMubWFnbml0dWRlKGkpKi41O2lmKGcoZS5fb2Zmc2V0QXR0cmlidXRlKSl7bGV0IGQ9ci5sZW5ndGgsYz1lLl9vZmZzZXRBdHRyaWJ1dGU9PT1zdC5OT05FPzA6MSx1PW5ldyBVaW50OEFycmF5KGQvMykuZmlsbChjKTtvLmFwcGx5T2Zmc2V0PW5ldyBpZSh7Y29tcG9uZW50RGF0YXR5cGU6bmUuVU5TSUdORURfQllURSxjb21wb25lbnRzUGVyQXR0cmlidXRlOjEsdmFsdWVzOnV9KX1yZXR1cm4gbmV3IHZlKHthdHRyaWJ1dGVzOm8saW5kaWNlczphLHByaW1pdGl2ZVR5cGU6VWUuTElORVMsYm91bmRpbmdTcGhlcmU6bmV3IGdlKHMuWkVSTyxmKSxvZmZzZXRBdHRyaWJ1dGU6ZS5fb2Zmc2V0QXR0cmlidXRlfSl9O0lwPWhyfSk7dmFyIFBwPXt9O3J0KFBwLHtkZWZhdWx0OigpPT50UH0pO2Z1bmN0aW9uIGVQKGUsdCl7cmV0dXJuIGcodCkmJihlPUlwLnVucGFjayhlLHQpKSxJcC5jcmVhdGVHZW9tZXRyeShlKX12YXIgdFAsa3A9WCgoKT0+e25UKCk7c2UoKTt0UD1lUH0pO2Z1bmN0aW9uIGxzKGUsdCxuLG8sYSxyLGksZixkLGMpe2xldCB1PWUrdDtzLm11bHRpcGx5QnlTY2FsYXIobyxNYXRoLmNvcyh1KSxlaCkscy5tdWx0aXBseUJ5U2NhbGFyKG4sTWF0aC5zaW4odSksb1QpLHMuYWRkKGVoLG9ULGVoKTtsZXQgbD1NYXRoLmNvcyhlKTtsPWwqbDtsZXQgaD1NYXRoLnNpbihlKTtoPWgqaDtsZXQgYj1yL01hdGguc3FydChpKmwrYSpoKS9mO3JldHVybiBaZS5mcm9tQXhpc0FuZ2xlKGVoLGIsYVQpLEouZnJvbVF1YXRlcm5pb24oYVQsclQpLEoubXVsdGlwbHlCeVZlY3RvcihyVCxkLGMpLHMubm9ybWFsaXplKGMsYykscy5tdWx0aXBseUJ5U2NhbGFyKGMsZixjKSxjfXZhciBGcCxlaCxvVCxhVCxyVCxpVCxjVCx2cCxuUCxvUCxhUCxyUCxLYSxEcD1YKCgpPT57SWUoKTtHZSgpO0RuKCk7Sm8oKTtGcD17fSxlaD1uZXcgcyxvVD1uZXcgcyxhVD1uZXcgWmUsclQ9bmV3IEo7aVQ9bmV3IHMsY1Q9bmV3IHMsdnA9bmV3IHMsblA9bmV3IHM7RnAucmFpc2VQb3NpdGlvbnNUb0hlaWdodD1mdW5jdGlvbihlLHQsbil7bGV0IG89dC5lbGxpcHNvaWQsYT10LmhlaWdodCxyPXQuZXh0cnVkZWRIZWlnaHQsaT1uP2UubGVuZ3RoLzMqMjplLmxlbmd0aC8zLGY9bmV3IEZsb2F0NjRBcnJheShpKjMpLGQ9ZS5sZW5ndGgsYz1uP2Q6MDtmb3IobGV0IHU9MDt1PGQ7dSs9Myl7bGV0IGw9dSsxLGg9dSsyLG09cy5mcm9tQXJyYXkoZSx1LGlUKTtvLnNjYWxlVG9HZW9kZXRpY1N1cmZhY2UobSxtKTtsZXQgYj1zLmNsb25lKG0sY1QpLHA9by5nZW9kZXRpY1N1cmZhY2VOb3JtYWwobSxuUCkseT1zLm11bHRpcGx5QnlTY2FsYXIocCxhLHZwKTtzLmFkZChtLHksbSksbiYmKHMubXVsdGlwbHlCeVNjYWxhcihwLHIseSkscy5hZGQoYix5LGIpLGZbdStjXT1iLngsZltsK2NdPWIueSxmW2grY109Yi56KSxmW3VdPW0ueCxmW2xdPW0ueSxmW2hdPW0uen1yZXR1cm4gZn07b1A9bmV3IHMsYVA9bmV3IHMsclA9bmV3IHM7RnAuY29tcHV0ZUVsbGlwc2VQb3NpdGlvbnM9ZnVuY3Rpb24oZSx0LG4pe2xldCBvPWUuc2VtaU1pbm9yQXhpcyxhPWUuc2VtaU1ham9yQXhpcyxyPWUucm90YXRpb24saT1lLmNlbnRlcixmPWUuZ3JhbnVsYXJpdHkqOCxkPW8qbyxjPWEqYSx1PWEqbyxsPXMubWFnbml0dWRlKGkpLGg9cy5ub3JtYWxpemUoaSxvUCksbT1zLmNyb3NzKHMuVU5JVF9aLGksYVApO209cy5ub3JtYWxpemUobSxtKTtsZXQgYj1zLmNyb3NzKGgsbSxyUCkscD0xK01hdGguY2VpbChrLlBJX09WRVJfVFdPL2YpLHk9ay5QSV9PVkVSX1RXTy8ocC0xKSxUPWsuUElfT1ZFUl9UV08tcCp5O1Q8MCYmKHAtPU1hdGguY2VpbChNYXRoLmFicyhUKS95KSk7bGV0IF89MioocCoocCsyKSksRT10P25ldyBBcnJheShfKjMpOnZvaWQgMCx3PTAsUj1pVCxTPWNULEM9cCo0KjMsST1DLTEsTj0wLFA9bj9uZXcgQXJyYXkoQyk6dm9pZCAwLEYsQSx4LE0sdjtmb3IoVD1rLlBJX09WRVJfVFdPLFI9bHMoVCxyLGIsbSxkLHUsYyxsLGgsUiksdCYmKEVbdysrXT1SLngsRVt3KytdPVIueSxFW3crK109Ui56KSxuJiYoUFtJLS1dPVIueixQW0ktLV09Ui55LFBbSS0tXT1SLngpLFQ9ay5QSV9PVkVSX1RXTy15LEY9MTtGPHArMTsrK0Ype2lmKFI9bHMoVCxyLGIsbSxkLHUsYyxsLGgsUiksUz1scyhNYXRoLlBJLVQscixiLG0sZCx1LGMsbCxoLFMpLHQpe2ZvcihFW3crK109Ui54LEVbdysrXT1SLnksRVt3KytdPVIueix4PTIqRisyLEE9MTtBPHgtMTsrK0EpTT1BLyh4LTEpLHY9cy5sZXJwKFIsUyxNLHZwKSxFW3crK109di54LEVbdysrXT12LnksRVt3KytdPXYuejtFW3crK109Uy54LEVbdysrXT1TLnksRVt3KytdPVMuen1uJiYoUFtJLS1dPVIueixQW0ktLV09Ui55LFBbSS0tXT1SLngsUFtOKytdPVMueCxQW04rK109Uy55LFBbTisrXT1TLnopLFQ9ay5QSV9PVkVSX1RXTy0oRisxKSp5fWZvcihGPXA7Rj4xOy0tRil7aWYoVD1rLlBJX09WRVJfVFdPLShGLTEpKnksUj1scygtVCxyLGIsbSxkLHUsYyxsLGgsUiksUz1scyhUK01hdGguUEkscixiLG0sZCx1LGMsbCxoLFMpLHQpe2ZvcihFW3crK109Ui54LEVbdysrXT1SLnksRVt3KytdPVIueix4PTIqKEYtMSkrMixBPTE7QTx4LTE7KytBKU09QS8oeC0xKSx2PXMubGVycChSLFMsTSx2cCksRVt3KytdPXYueCxFW3crK109di55LEVbdysrXT12Lno7RVt3KytdPVMueCxFW3crK109Uy55LEVbdysrXT1TLnp9biYmKFBbSS0tXT1SLnosUFtJLS1dPVIueSxQW0ktLV09Ui54LFBbTisrXT1TLngsUFtOKytdPVMueSxQW04rK109Uy56KX1UPWsuUElfT1ZFUl9UV08sUj1scygtVCxyLGIsbSxkLHUsYyxsLGgsUik7bGV0IFU9e307cmV0dXJuIHQmJihFW3crK109Ui54LEVbdysrXT1SLnksRVt3KytdPVIueixVLnBvc2l0aW9ucz1FLFUubnVtUHRzPXApLG4mJihQW0ktLV09Ui56LFBbSS0tXT1SLnksUFtJLS1dPVIueCxVLm91dGVyUG9zaXRpb25zPVApLFV9O0thPUZwfSk7ZnVuY3Rpb24gaVAoZSl7ZT1lPz9DZS5FTVBUWV9PQkpFQ1QsdGhpcy5nZW9tZXRyeT1lLmdlb21ldHJ5LHRoaXMubW9kZWxNYXRyaXg9JC5jbG9uZShlLm1vZGVsTWF0cml4Pz8kLklERU5USVRZKSx0aGlzLmlkPWUuaWQsdGhpcy5waWNrUHJpbWl0aXZlPWUucGlja1ByaW1pdGl2ZSx0aGlzLmF0dHJpYnV0ZXM9ZS5hdHRyaWJ1dGVzPz97fSx0aGlzLndlc3RIZW1pc3BoZXJlR2VvbWV0cnk9dm9pZCAwLHRoaXMuZWFzdEhlbWlzcGhlcmVHZW9tZXRyeT12b2lkIDB9dmFyIHBvLGRjPVgoKCk9PnttdCgpO3BuKCk7cG89aVB9KTtmdW5jdGlvbiBwVChlLHQsbil7bGV0IG89dC52ZXJ0ZXhGb3JtYXQsYT10LmNlbnRlcixyPXQuc2VtaU1ham9yQXhpcyxpPXQuc2VtaU1pbm9yQXhpcyxmPXQuZWxsaXBzb2lkLGQ9dC5zdFJvdGF0aW9uLGM9bj9lLmxlbmd0aC8zKjI6ZS5sZW5ndGgvMyx1PXQuc2hhZG93Vm9sdW1lLGw9by5zdD9uZXcgRmxvYXQzMkFycmF5KGMqMik6dm9pZCAwLGg9by5ub3JtYWw/bmV3IEZsb2F0MzJBcnJheShjKjMpOnZvaWQgMCxtPW8udGFuZ2VudD9uZXcgRmxvYXQzMkFycmF5KGMqMyk6dm9pZCAwLGI9by5iaXRhbmdlbnQ/bmV3IEZsb2F0MzJBcnJheShjKjMpOnZvaWQgMCxwPXU/bmV3IEZsb2F0MzJBcnJheShjKjMpOnZvaWQgMCx5PTAsVD1kVCxfPXVULEU9bFQsdz1uZXcgaW8oZiksUj13LnByb2plY3QoZi5jYXJ0ZXNpYW5Ub0NhcnRvZ3JhcGhpYyhhLG9oKSxoVCksUz1mLnNjYWxlVG9HZW9kZXRpY1N1cmZhY2UoYSxocyk7Zi5nZW9kZXRpY1N1cmZhY2VOb3JtYWwoUyxTKTtsZXQgQz1mVCxJPWNQO2lmKGQhPT0wKXtsZXQgdj1aZS5mcm9tQXhpc0FuZ2xlKFMsZCxMcCk7Qz1KLmZyb21RdWF0ZXJuaW9uKHYsQyksdj1aZS5mcm9tQXhpc0FuZ2xlKFMsLWQsTHApLEk9Si5mcm9tUXVhdGVybmlvbih2LEkpfWVsc2UgQz1KLmNsb25lKEouSURFTlRJVFksQyksST1KLmNsb25lKEouSURFTlRJVFksSSk7bGV0IE49WS5mcm9tRWxlbWVudHMoTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLE51bWJlci5QT1NJVElWRV9JTkZJTklUWSxtVCksUD1ZLmZyb21FbGVtZW50cyhOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFksTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZLGJUKSxGPWUubGVuZ3RoLEE9bj9GOjAseD1BLzMqMjtmb3IobGV0IHY9MDt2PEY7dis9Myl7bGV0IFU9disxLHo9disyLEQ9cy5mcm9tQXJyYXkoZSx2LGhzKTtpZihvLnN0KXtsZXQgRz1KLm11bHRpcGx5QnlWZWN0b3IoQyxELEJwKSxIPXcucHJvamVjdChmLmNhcnRlc2lhblRvQ2FydG9ncmFwaGljKEcsb2gpLFVwKTtzLnN1YnRyYWN0KEgsUixIKSxvby54PShILngrcikvKDIqciksb28ueT0oSC55K2kpLygyKmkpLE4ueD1NYXRoLm1pbihvby54LE4ueCksTi55PU1hdGgubWluKG9vLnksTi55KSxQLng9TWF0aC5tYXgob28ueCxQLngpLFAueT1NYXRoLm1heChvby55LFAueSksbiYmKGxbeSt4XT1vby54LGxbeSsxK3hdPW9vLnkpLGxbeSsrXT1vby54LGxbeSsrXT1vby55fShvLm5vcm1hbHx8by50YW5nZW50fHxvLmJpdGFuZ2VudHx8dSkmJihUPWYuZ2VvZGV0aWNTdXJmYWNlTm9ybWFsKEQsVCksdSYmKHBbditBXT0tVC54LHBbVStBXT0tVC55LHBbeitBXT0tVC56KSwoby5ub3JtYWx8fG8udGFuZ2VudHx8by5iaXRhbmdlbnQpJiYoKG8udGFuZ2VudHx8by5iaXRhbmdlbnQpJiYoXz1zLm5vcm1hbGl6ZShzLmNyb3NzKHMuVU5JVF9aLFQsXyksXyksSi5tdWx0aXBseUJ5VmVjdG9yKEksXyxfKSksby5ub3JtYWwmJihoW3ZdPVQueCxoW1VdPVQueSxoW3pdPVQueixuJiYoaFt2K0FdPS1ULngsaFtVK0FdPS1ULnksaFt6K0FdPS1ULnopKSxvLnRhbmdlbnQmJihtW3ZdPV8ueCxtW1VdPV8ueSxtW3pdPV8ueixuJiYobVt2K0FdPS1fLngsbVtVK0FdPS1fLnksbVt6K0FdPS1fLnopKSxvLmJpdGFuZ2VudCYmKEU9cy5ub3JtYWxpemUocy5jcm9zcyhULF8sRSksRSksYlt2XT1FLngsYltVXT1FLnksYlt6XT1FLnosbiYmKGJbditBXT1FLngsYltVK0FdPUUueSxiW3orQV09RS56KSkpKX1pZihvLnN0KXtGPWwubGVuZ3RoO2ZvcihsZXQgdj0wO3Y8Rjt2Kz0yKWxbdl09KGxbdl0tTi54KS8oUC54LU4ueCksbFt2KzFdPShsW3YrMV0tTi55KS8oUC55LU4ueSl9bGV0IE09bmV3IG50O2lmKG8ucG9zaXRpb24pe2xldCB2PUthLnJhaXNlUG9zaXRpb25zVG9IZWlnaHQoZSx0LG4pO00ucG9zaXRpb249bmV3IGllKHtjb21wb25lbnREYXRhdHlwZTpuZS5ET1VCTEUsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczp2fSl9aWYoby5zdCYmKE0uc3Q9bmV3IGllKHtjb21wb25lbnREYXRhdHlwZTpuZS5GTE9BVCxjb21wb25lbnRzUGVyQXR0cmlidXRlOjIsdmFsdWVzOmx9KSksby5ub3JtYWwmJihNLm5vcm1hbD1uZXcgaWUoe2NvbXBvbmVudERhdGF0eXBlOm5lLkZMT0FULGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6aH0pKSxvLnRhbmdlbnQmJihNLnRhbmdlbnQ9bmV3IGllKHtjb21wb25lbnREYXRhdHlwZTpuZS5GTE9BVCxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOm19KSksby5iaXRhbmdlbnQmJihNLmJpdGFuZ2VudD1uZXcgaWUoe2NvbXBvbmVudERhdGF0eXBlOm5lLkZMT0FULGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6Yn0pKSx1JiYoTS5leHRydWRlRGlyZWN0aW9uPW5ldyBpZSh7Y29tcG9uZW50RGF0YXR5cGU6bmUuRkxPQVQsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczpwfSkpLG4mJmcodC5vZmZzZXRBdHRyaWJ1dGUpKXtsZXQgdj1uZXcgVWludDhBcnJheShjKTtpZih0Lm9mZnNldEF0dHJpYnV0ZT09PXN0LlRPUCl2PXYuZmlsbCgxLDAsYy8yKTtlbHNle2xldCBVPXQub2Zmc2V0QXR0cmlidXRlPT09c3QuTk9ORT8wOjE7dj12LmZpbGwoVSl9TS5hcHBseU9mZnNldD1uZXcgaWUoe2NvbXBvbmVudERhdGF0eXBlOm5lLlVOU0lHTkVEX0JZVEUsY29tcG9uZW50c1BlckF0dHJpYnV0ZToxLHZhbHVlczp2fSl9cmV0dXJuIE19ZnVuY3Rpb24gZ1QoZSl7bGV0IHQ9bmV3IEFycmF5KDEyKihlKihlKzEpKS02KSxuPTAsbyxhLHIsaSxmO2ZvcihvPTAscj0xLGk9MDtpPDM7aSsrKXRbbisrXT1yKyssdFtuKytdPW8sdFtuKytdPXI7Zm9yKGk9MjtpPGUrMTsrK2kpe2ZvcihyPWkqKGkrMSktMSxvPShpLTEpKmktMSx0W24rK109cisrLHRbbisrXT1vLHRbbisrXT1yLGE9MippLGY9MDtmPGEtMTsrK2YpdFtuKytdPXIsdFtuKytdPW8rKyx0W24rK109byx0W24rK109cisrLHRbbisrXT1vLHRbbisrXT1yO3RbbisrXT1yKyssdFtuKytdPW8sdFtuKytdPXJ9Zm9yKGE9ZSoyLCsrciwrK28saT0wO2k8YS0xOysraSl0W24rK109cix0W24rK109bysrLHRbbisrXT1vLHRbbisrXT1yKyssdFtuKytdPW8sdFtuKytdPXI7Zm9yKHRbbisrXT1yLHRbbisrXT1vKyssdFtuKytdPW8sdFtuKytdPXIrKyx0W24rK109bysrLHRbbisrXT1vLCsrbyxpPWUtMTtpPjE7LS1pKXtmb3IodFtuKytdPW8rKyx0W24rK109byx0W24rK109cixhPTIqaSxmPTA7ZjxhLTE7KytmKXRbbisrXT1yLHRbbisrXT1vKyssdFtuKytdPW8sdFtuKytdPXIrKyx0W24rK109byx0W24rK109cjt0W24rK109bysrLHRbbisrXT1vKyssdFtuKytdPXIrK31mb3IoaT0wO2k8MztpKyspdFtuKytdPW8rKyx0W24rK109byx0W24rK109cjtyZXR1cm4gdH1mdW5jdGlvbiBzUChlKXtsZXQgdD1lLmNlbnRlcjt1Yz1zLm11bHRpcGx5QnlTY2FsYXIoZS5lbGxpcHNvaWQuZ2VvZGV0aWNTdXJmYWNlTm9ybWFsKHQsdWMpLGUuaGVpZ2h0LHVjKSx1Yz1zLmFkZCh0LHVjLHVjKTtsZXQgbj1uZXcgZ2UodWMsZS5zZW1pTWFqb3JBeGlzKSxvPUthLmNvbXB1dGVFbGxpcHNlUG9zaXRpb25zKGUsITAsITEpLGE9by5wb3NpdGlvbnMscj1vLm51bVB0cyxpPXBUKGEsZSwhMSksZj1nVChyKTtyZXR1cm4gZj1rZS5jcmVhdGVUeXBlZEFycmF5KGEubGVuZ3RoLzMsZikse2JvdW5kaW5nU3BoZXJlOm4sYXR0cmlidXRlczppLGluZGljZXM6Zn19ZnVuY3Rpb24gZlAoZSx0KXtsZXQgbj10LnZlcnRleEZvcm1hdCxvPXQuY2VudGVyLGE9dC5zZW1pTWFqb3JBeGlzLHI9dC5zZW1pTWlub3JBeGlzLGk9dC5lbGxpcHNvaWQsZj10LmhlaWdodCxkPXQuZXh0cnVkZWRIZWlnaHQsYz10LnN0Um90YXRpb24sdT1lLmxlbmd0aC8zKjIsbD1uZXcgRmxvYXQ2NEFycmF5KHUqMyksaD1uLnN0P25ldyBGbG9hdDMyQXJyYXkodSoyKTp2b2lkIDAsbT1uLm5vcm1hbD9uZXcgRmxvYXQzMkFycmF5KHUqMyk6dm9pZCAwLGI9bi50YW5nZW50P25ldyBGbG9hdDMyQXJyYXkodSozKTp2b2lkIDAscD1uLmJpdGFuZ2VudD9uZXcgRmxvYXQzMkFycmF5KHUqMyk6dm9pZCAwLHk9dC5zaGFkb3dWb2x1bWUsVD15P25ldyBGbG9hdDMyQXJyYXkodSozKTp2b2lkIDAsXz0wLEU9ZFQsdz11VCxSPWxULFM9bmV3IGlvKGkpLEM9Uy5wcm9qZWN0KGkuY2FydGVzaWFuVG9DYXJ0b2dyYXBoaWMobyxvaCksaFQpLEk9aS5zY2FsZVRvR2VvZGV0aWNTdXJmYWNlKG8saHMpO2kuZ2VvZGV0aWNTdXJmYWNlTm9ybWFsKEksSSk7bGV0IE49WmUuZnJvbUF4aXNBbmdsZShJLGMsTHApLFA9Si5mcm9tUXVhdGVybmlvbihOLGZUKSxGPVkuZnJvbUVsZW1lbnRzKE51bWJlci5QT1NJVElWRV9JTkZJTklUWSxOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksbVQpLEE9WS5mcm9tRWxlbWVudHMoTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZLE51bWJlci5ORUdBVElWRV9JTkZJTklUWSxiVCkseD1lLmxlbmd0aCxNPXgvMyoyO2ZvcihsZXQgVT0wO1U8eDtVKz0zKXtsZXQgej1VKzEsRD1VKzIsRz1zLmZyb21BcnJheShlLFUsaHMpLEg7aWYobi5zdCl7bGV0IFo9Si5tdWx0aXBseUJ5VmVjdG9yKFAsRyxCcCksb2U9Uy5wcm9qZWN0KGkuY2FydGVzaWFuVG9DYXJ0b2dyYXBoaWMoWixvaCksVXApO3Muc3VidHJhY3Qob2UsQyxvZSksb28ueD0ob2UueCthKS8oMiphKSxvby55PShvZS55K3IpLygyKnIpLEYueD1NYXRoLm1pbihvby54LEYueCksRi55PU1hdGgubWluKG9vLnksRi55KSxBLng9TWF0aC5tYXgob28ueCxBLngpLEEueT1NYXRoLm1heChvby55LEEueSksaFtfK01dPW9vLngsaFtfKzErTV09b28ueSxoW18rK109b28ueCxoW18rK109b28ueX1HPWkuc2NhbGVUb0dlb2RldGljU3VyZmFjZShHLEcpLEg9cy5jbG9uZShHLEJwKSxFPWkuZ2VvZGV0aWNTdXJmYWNlTm9ybWFsKEcsRSkseSYmKFRbVSt4XT0tRS54LFRbeit4XT0tRS55LFRbRCt4XT0tRS56KTtsZXQgTz1zLm11bHRpcGx5QnlTY2FsYXIoRSxmLHNUKTtpZihHPXMuYWRkKEcsTyxHKSxPPXMubXVsdGlwbHlCeVNjYWxhcihFLGQsTyksSD1zLmFkZChILE8sSCksbi5wb3NpdGlvbiYmKGxbVSt4XT1ILngsbFt6K3hdPUgueSxsW0QreF09SC56LGxbVV09Ry54LGxbel09Ry55LGxbRF09Ry56KSxuLm5vcm1hbHx8bi50YW5nZW50fHxuLmJpdGFuZ2VudCl7Uj1zLmNsb25lKEUsUik7bGV0IFo9cy5mcm9tQXJyYXkoZSwoVSszKSV4LHNUKTtzLnN1YnRyYWN0KFosRyxaKTtsZXQgb2U9cy5zdWJ0cmFjdChILEcsVXApO0U9cy5ub3JtYWxpemUocy5jcm9zcyhvZSxaLEUpLEUpLG4ubm9ybWFsJiYobVtVXT1FLngsbVt6XT1FLnksbVtEXT1FLnosbVtVK3hdPUUueCxtW3oreF09RS55LG1bRCt4XT1FLnopLG4udGFuZ2VudCYmKHc9cy5ub3JtYWxpemUocy5jcm9zcyhSLEUsdyksdyksYltVXT13LngsYlt6XT13LnksYltEXT13LnosYltVK3hdPXcueCxiW1UrMSt4XT13LnksYltVKzIreF09dy56KSxuLmJpdGFuZ2VudCYmKHBbVV09Ui54LHBbel09Ui55LHBbRF09Ui56LHBbVSt4XT1SLngscFt6K3hdPVIueSxwW0QreF09Ui56KX19aWYobi5zdCl7eD1oLmxlbmd0aDtmb3IobGV0IFU9MDtVPHg7VSs9MiloW1VdPShoW1VdLUYueCkvKEEueC1GLngpLGhbVSsxXT0oaFtVKzFdLUYueSkvKEEueS1GLnkpfWxldCB2PW5ldyBudDtpZihuLnBvc2l0aW9uJiYodi5wb3NpdGlvbj1uZXcgaWUoe2NvbXBvbmVudERhdGF0eXBlOm5lLkRPVUJMRSxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOmx9KSksbi5zdCYmKHYuc3Q9bmV3IGllKHtjb21wb25lbnREYXRhdHlwZTpuZS5GTE9BVCxjb21wb25lbnRzUGVyQXR0cmlidXRlOjIsdmFsdWVzOmh9KSksbi5ub3JtYWwmJih2Lm5vcm1hbD1uZXcgaWUoe2NvbXBvbmVudERhdGF0eXBlOm5lLkZMT0FULGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6bX0pKSxuLnRhbmdlbnQmJih2LnRhbmdlbnQ9bmV3IGllKHtjb21wb25lbnREYXRhdHlwZTpuZS5GTE9BVCxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOmJ9KSksbi5iaXRhbmdlbnQmJih2LmJpdGFuZ2VudD1uZXcgaWUoe2NvbXBvbmVudERhdGF0eXBlOm5lLkZMT0FULGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6cH0pKSx5JiYodi5leHRydWRlRGlyZWN0aW9uPW5ldyBpZSh7Y29tcG9uZW50RGF0YXR5cGU6bmUuRkxPQVQsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczpUfSkpLGcodC5vZmZzZXRBdHRyaWJ1dGUpKXtsZXQgVT1uZXcgVWludDhBcnJheSh1KTtpZih0Lm9mZnNldEF0dHJpYnV0ZT09PXN0LlRPUClVPVUuZmlsbCgxLDAsdS8yKTtlbHNle2xldCB6PXQub2Zmc2V0QXR0cmlidXRlPT09c3QuTk9ORT8wOjE7VT1VLmZpbGwoeil9di5hcHBseU9mZnNldD1uZXcgaWUoe2NvbXBvbmVudERhdGF0eXBlOm5lLlVOU0lHTkVEX0JZVEUsY29tcG9uZW50c1BlckF0dHJpYnV0ZToxLHZhbHVlczpVfSl9cmV0dXJuIHZ9ZnVuY3Rpb24gZFAoZSl7bGV0IHQ9ZS5sZW5ndGgvMyxuPWtlLmNyZWF0ZVR5cGVkQXJyYXkodCx0KjYpLG89MDtmb3IobGV0IGE9MDthPHQ7YSsrKXtsZXQgcj1hLGk9YSt0LGY9KHIrMSkldCxkPWYrdDtuW28rK109cixuW28rK109aSxuW28rK109ZixuW28rK109ZixuW28rK109aSxuW28rK109ZH1yZXR1cm4gbn1mdW5jdGlvbiB1UChlKXtsZXQgdD1lLmNlbnRlcixuPWUuZWxsaXBzb2lkLG89ZS5zZW1pTWFqb3JBeGlzLGE9cy5tdWx0aXBseUJ5U2NhbGFyKG4uZ2VvZGV0aWNTdXJmYWNlTm9ybWFsKHQsaHMpLGUuaGVpZ2h0LGhzKTt0aC5jZW50ZXI9cy5hZGQodCxhLHRoLmNlbnRlciksdGgucmFkaXVzPW8sYT1zLm11bHRpcGx5QnlTY2FsYXIobi5nZW9kZXRpY1N1cmZhY2VOb3JtYWwodCxhKSxlLmV4dHJ1ZGVkSGVpZ2h0LGEpLG5oLmNlbnRlcj1zLmFkZCh0LGEsbmguY2VudGVyKSxuaC5yYWRpdXM9bztsZXQgcj1LYS5jb21wdXRlRWxsaXBzZVBvc2l0aW9ucyhlLCEwLCEwKSxpPXIucG9zaXRpb25zLGY9ci5udW1QdHMsZD1yLm91dGVyUG9zaXRpb25zLGM9Z2UudW5pb24odGgsbmgpLHU9cFQoaSxlLCEwKSxsPWdUKGYpLGg9bC5sZW5ndGg7bC5sZW5ndGg9aCoyO2xldCBtPWkubGVuZ3RoLzM7Zm9yKGxldCB3PTA7dzxoO3crPTMpbFt3K2hdPWxbdysyXSttLGxbdysxK2hdPWxbdysxXSttLGxbdysyK2hdPWxbd10rbTtsZXQgYj1rZS5jcmVhdGVUeXBlZEFycmF5KG0qMi8zLGwpLHA9bmV3IHZlKHthdHRyaWJ1dGVzOnUsaW5kaWNlczpiLHByaW1pdGl2ZVR5cGU6VWUuVFJJQU5HTEVTfSkseT1mUChkLGUpO2w9ZFAoZCk7bGV0IFQ9a2UuY3JlYXRlVHlwZWRBcnJheShkLmxlbmd0aCoyLzMsbCksXz1uZXcgdmUoe2F0dHJpYnV0ZXM6eSxpbmRpY2VzOlQscHJpbWl0aXZlVHlwZTpVZS5UUklBTkdMRVN9KSxFPUh0LmNvbWJpbmVJbnN0YW5jZXMoW25ldyBwbyh7Z2VvbWV0cnk6cH0pLG5ldyBwbyh7Z2VvbWV0cnk6X30pXSk7cmV0dXJue2JvdW5kaW5nU3BoZXJlOmMsYXR0cmlidXRlczpFWzBdLmF0dHJpYnV0ZXMsaW5kaWNlczpFWzBdLmluZGljZXN9fWZ1bmN0aW9uIF9UKGUsdCxuLG8sYSxyLGkpe2xldCBkPUthLmNvbXB1dGVFbGxpcHNlUG9zaXRpb25zKHtjZW50ZXI6ZSxzZW1pTWFqb3JBeGlzOnQsc2VtaU1pbm9yQXhpczpuLHJvdGF0aW9uOm8sZ3JhbnVsYXJpdHk6YX0sITEsITApLm91dGVyUG9zaXRpb25zLGM9ZC5sZW5ndGgvMyx1PW5ldyBBcnJheShjKTtmb3IobGV0IGg9MDtoPGM7KytoKXVbaF09cy5mcm9tQXJyYXkoZCxoKjMpO2xldCBsPVNlLmZyb21DYXJ0ZXNpYW5BcnJheSh1LHIsaSk7cmV0dXJuIGwud2lkdGg+ay5QSSYmKGwubm9ydGg9bC5ub3J0aD4wP2suUElfT1ZFUl9UV08tay5FUFNJTE9ONzpsLm5vcnRoLGwuc291dGg9bC5zb3V0aDwwP2suRVBTSUxPTjctay5QSV9PVkVSX1RXTzpsLnNvdXRoLGwuZWFzdD1rLlBJLGwud2VzdD0tay5QSSksbH1mdW5jdGlvbiBicihlKXtlPWU/P0NlLkVNUFRZX09CSkVDVDtsZXQgdD1lLmNlbnRlcixuPWUuZWxsaXBzb2lkPz9xLmRlZmF1bHQsbz1lLnNlbWlNYWpvckF4aXMsYT1lLnNlbWlNaW5vckF4aXMscj1lLmdyYW51bGFyaXR5Pz9rLlJBRElBTlNfUEVSX0RFR1JFRSxpPWUudmVydGV4Rm9ybWF0Pz9oZS5ERUZBVUxULGY9ZS5oZWlnaHQ/PzAsZD1lLmV4dHJ1ZGVkSGVpZ2h0Pz9mO3RoaXMuX2NlbnRlcj1zLmNsb25lKHQpLHRoaXMuX3NlbWlNYWpvckF4aXM9byx0aGlzLl9zZW1pTWlub3JBeGlzPWEsdGhpcy5fZWxsaXBzb2lkPXEuY2xvbmUobiksdGhpcy5fcm90YXRpb249ZS5yb3RhdGlvbj8/MCx0aGlzLl9zdFJvdGF0aW9uPWUuc3RSb3RhdGlvbj8/MCx0aGlzLl9oZWlnaHQ9TWF0aC5tYXgoZCxmKSx0aGlzLl9ncmFudWxhcml0eT1yLHRoaXMuX3ZlcnRleEZvcm1hdD1oZS5jbG9uZShpKSx0aGlzLl9leHRydWRlZEhlaWdodD1NYXRoLm1pbihkLGYpLHRoaXMuX3NoYWRvd1ZvbHVtZT1lLnNoYWRvd1ZvbHVtZT8/ITEsdGhpcy5fd29ya2VyTmFtZT0iY3JlYXRlRWxsaXBzZUdlb21ldHJ5Iix0aGlzLl9vZmZzZXRBdHRyaWJ1dGU9ZS5vZmZzZXRBdHRyaWJ1dGUsdGhpcy5fcmVjdGFuZ2xlPXZvaWQgMCx0aGlzLl90ZXh0dXJlQ29vcmRpbmF0ZVJvdGF0aW9uUG9pbnRzPXZvaWQgMH1mdW5jdGlvbiBsUChlKXtsZXQgdD0tZS5fc3RSb3RhdGlvbjtpZih0PT09MClyZXR1cm5bMCwwLDAsMSwxLDBdO2xldCBvPUthLmNvbXB1dGVFbGxpcHNlUG9zaXRpb25zKHtjZW50ZXI6ZS5fY2VudGVyLHNlbWlNYWpvckF4aXM6ZS5fc2VtaU1ham9yQXhpcyxzZW1pTWlub3JBeGlzOmUuX3NlbWlNaW5vckF4aXMscm90YXRpb246ZS5fcm90YXRpb24sZ3JhbnVsYXJpdHk6ZS5fZ3JhbnVsYXJpdHl9LCExLCEwKS5vdXRlclBvc2l0aW9ucyxhPW8ubGVuZ3RoLzMscj1uZXcgQXJyYXkoYSk7Zm9yKGxldCBkPTA7ZDxhOysrZClyW2RdPXMuZnJvbUFycmF5KG8sZCozKTtsZXQgaT1lLl9lbGxpcHNvaWQsZj1lLnJlY3RhbmdsZTtyZXR1cm4gdmUuX3RleHR1cmVDb29yZGluYXRlUm90YXRpb25Qb2ludHMocix0LGksZil9dmFyIGhzLEJwLFVwLHNULG9vLGZULGNQLExwLGRULHVULGxULG9oLGhULG1ULGJULHVjLHRoLG5oLHlULEFULHdULG1yLHFhLGpwPVgoKCk9PntNdCgpO2p0KCk7SWUoKTtUdCgpO3Z0KCk7bXQoKTtzZSgpO0RwKCk7V2UoKTtrcigpOyR0KCk7ZW4oKTt1bigpO2RjKCk7em8oKTtscigpO25uKCk7R2UoKTtEbigpO2NuKCk7Sm8oKTtfbigpO2tvKCk7aHM9bmV3IHMsQnA9bmV3IHMsVXA9bmV3IHMsc1Q9bmV3IHMsb289bmV3IFksZlQ9bmV3IEosY1A9bmV3IEosTHA9bmV3IFplLGRUPW5ldyBzLHVUPW5ldyBzLGxUPW5ldyBzLG9oPW5ldyByZSxoVD1uZXcgcyxtVD1uZXcgWSxiVD1uZXcgWTt1Yz1uZXcgczt0aD1uZXcgZ2Usbmg9bmV3IGdlO2JyLnBhY2tlZExlbmd0aD1zLnBhY2tlZExlbmd0aCtxLnBhY2tlZExlbmd0aCtoZS5wYWNrZWRMZW5ndGgrOTtici5wYWNrPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gbj1uPz8wLHMucGFjayhlLl9jZW50ZXIsdCxuKSxuKz1zLnBhY2tlZExlbmd0aCxxLnBhY2soZS5fZWxsaXBzb2lkLHQsbiksbis9cS5wYWNrZWRMZW5ndGgsaGUucGFjayhlLl92ZXJ0ZXhGb3JtYXQsdCxuKSxuKz1oZS5wYWNrZWRMZW5ndGgsdFtuKytdPWUuX3NlbWlNYWpvckF4aXMsdFtuKytdPWUuX3NlbWlNaW5vckF4aXMsdFtuKytdPWUuX3JvdGF0aW9uLHRbbisrXT1lLl9zdFJvdGF0aW9uLHRbbisrXT1lLl9oZWlnaHQsdFtuKytdPWUuX2dyYW51bGFyaXR5LHRbbisrXT1lLl9leHRydWRlZEhlaWdodCx0W24rK109ZS5fc2hhZG93Vm9sdW1lPzE6MCx0W25dPWUuX29mZnNldEF0dHJpYnV0ZT8/LTEsdH07eVQ9bmV3IHMsQVQ9bmV3IHEsd1Q9bmV3IGhlLG1yPXtjZW50ZXI6eVQsZWxsaXBzb2lkOkFULHZlcnRleEZvcm1hdDp3VCxzZW1pTWFqb3JBeGlzOnZvaWQgMCxzZW1pTWlub3JBeGlzOnZvaWQgMCxyb3RhdGlvbjp2b2lkIDAsc3RSb3RhdGlvbjp2b2lkIDAsaGVpZ2h0OnZvaWQgMCxncmFudWxhcml0eTp2b2lkIDAsZXh0cnVkZWRIZWlnaHQ6dm9pZCAwLHNoYWRvd1ZvbHVtZTp2b2lkIDAsb2Zmc2V0QXR0cmlidXRlOnZvaWQgMH07YnIudW5wYWNrPWZ1bmN0aW9uKGUsdCxuKXt0PXQ/PzA7bGV0IG89cy51bnBhY2soZSx0LHlUKTt0Kz1zLnBhY2tlZExlbmd0aDtsZXQgYT1xLnVucGFjayhlLHQsQVQpO3QrPXEucGFja2VkTGVuZ3RoO2xldCByPWhlLnVucGFjayhlLHQsd1QpO3QrPWhlLnBhY2tlZExlbmd0aDtsZXQgaT1lW3QrK10sZj1lW3QrK10sZD1lW3QrK10sYz1lW3QrK10sdT1lW3QrK10sbD1lW3QrK10saD1lW3QrK10sbT1lW3QrK109PT0xLGI9ZVt0XTtyZXR1cm4gZyhuKT8obi5fY2VudGVyPXMuY2xvbmUobyxuLl9jZW50ZXIpLG4uX2VsbGlwc29pZD1xLmNsb25lKGEsbi5fZWxsaXBzb2lkKSxuLl92ZXJ0ZXhGb3JtYXQ9aGUuY2xvbmUocixuLl92ZXJ0ZXhGb3JtYXQpLG4uX3NlbWlNYWpvckF4aXM9aSxuLl9zZW1pTWlub3JBeGlzPWYsbi5fcm90YXRpb249ZCxuLl9zdFJvdGF0aW9uPWMsbi5faGVpZ2h0PXUsbi5fZ3JhbnVsYXJpdHk9bCxuLl9leHRydWRlZEhlaWdodD1oLG4uX3NoYWRvd1ZvbHVtZT1tLG4uX29mZnNldEF0dHJpYnV0ZT1iPT09LTE/dm9pZCAwOmIsbik6KG1yLmhlaWdodD11LG1yLmV4dHJ1ZGVkSGVpZ2h0PWgsbXIuZ3JhbnVsYXJpdHk9bCxtci5zdFJvdGF0aW9uPWMsbXIucm90YXRpb249ZCxtci5zZW1pTWFqb3JBeGlzPWksbXIuc2VtaU1pbm9yQXhpcz1mLG1yLnNoYWRvd1ZvbHVtZT1tLG1yLm9mZnNldEF0dHJpYnV0ZT1iPT09LTE/dm9pZCAwOmIsbmV3IGJyKG1yKSl9O2JyLmNvbXB1dGVSZWN0YW5nbGU9ZnVuY3Rpb24oZSx0KXtlPWU/P0NlLkVNUFRZX09CSkVDVDtsZXQgbj1lLmNlbnRlcixvPWUuZWxsaXBzb2lkPz9xLmRlZmF1bHQsYT1lLnNlbWlNYWpvckF4aXMscj1lLnNlbWlNaW5vckF4aXMsaT1lLmdyYW51bGFyaXR5Pz9rLlJBRElBTlNfUEVSX0RFR1JFRSxmPWUucm90YXRpb24/PzA7cmV0dXJuIF9UKG4sYSxyLGYsaSxvLHQpfTtici5jcmVhdGVHZW9tZXRyeT1mdW5jdGlvbihlKXtpZihlLl9zZW1pTWFqb3JBeGlzPD0wfHxlLl9zZW1pTWlub3JBeGlzPD0wKXJldHVybjtsZXQgdD1lLl9oZWlnaHQsbj1lLl9leHRydWRlZEhlaWdodCxvPSFrLmVxdWFsc0Vwc2lsb24odCxuLDAsay5FUFNJTE9OMik7ZS5fY2VudGVyPWUuX2VsbGlwc29pZC5zY2FsZVRvR2VvZGV0aWNTdXJmYWNlKGUuX2NlbnRlcixlLl9jZW50ZXIpO2xldCBhPXtjZW50ZXI6ZS5fY2VudGVyLHNlbWlNYWpvckF4aXM6ZS5fc2VtaU1ham9yQXhpcyxzZW1pTWlub3JBeGlzOmUuX3NlbWlNaW5vckF4aXMsZWxsaXBzb2lkOmUuX2VsbGlwc29pZCxyb3RhdGlvbjplLl9yb3RhdGlvbixoZWlnaHQ6dCxncmFudWxhcml0eTplLl9ncmFudWxhcml0eSx2ZXJ0ZXhGb3JtYXQ6ZS5fdmVydGV4Rm9ybWF0LHN0Um90YXRpb246ZS5fc3RSb3RhdGlvbn0scjtpZihvKWEuZXh0cnVkZWRIZWlnaHQ9bixhLnNoYWRvd1ZvbHVtZT1lLl9zaGFkb3dWb2x1bWUsYS5vZmZzZXRBdHRyaWJ1dGU9ZS5fb2Zmc2V0QXR0cmlidXRlLHI9dVAoYSk7ZWxzZSBpZihyPXNQKGEpLGcoZS5fb2Zmc2V0QXR0cmlidXRlKSl7bGV0IGk9ci5hdHRyaWJ1dGVzLnBvc2l0aW9uLnZhbHVlcy5sZW5ndGgsZj1lLl9vZmZzZXRBdHRyaWJ1dGU9PT1zdC5OT05FPzA6MSxkPW5ldyBVaW50OEFycmF5KGkvMykuZmlsbChmKTtyLmF0dHJpYnV0ZXMuYXBwbHlPZmZzZXQ9bmV3IGllKHtjb21wb25lbnREYXRhdHlwZTpuZS5VTlNJR05FRF9CWVRFLGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6MSx2YWx1ZXM6ZH0pfXJldHVybiBuZXcgdmUoe2F0dHJpYnV0ZXM6ci5hdHRyaWJ1dGVzLGluZGljZXM6ci5pbmRpY2VzLHByaW1pdGl2ZVR5cGU6VWUuVFJJQU5HTEVTLGJvdW5kaW5nU3BoZXJlOnIuYm91bmRpbmdTcGhlcmUsb2Zmc2V0QXR0cmlidXRlOmUuX29mZnNldEF0dHJpYnV0ZX0pfTtici5jcmVhdGVTaGFkb3dWb2x1bWU9ZnVuY3Rpb24oZSx0LG4pe2xldCBvPWUuX2dyYW51bGFyaXR5LGE9ZS5fZWxsaXBzb2lkLHI9dChvLGEpLGk9bihvLGEpO3JldHVybiBuZXcgYnIoe2NlbnRlcjplLl9jZW50ZXIsc2VtaU1ham9yQXhpczplLl9zZW1pTWFqb3JBeGlzLHNlbWlNaW5vckF4aXM6ZS5fc2VtaU1pbm9yQXhpcyxlbGxpcHNvaWQ6YSxyb3RhdGlvbjplLl9yb3RhdGlvbixzdFJvdGF0aW9uOmUuX3N0Um90YXRpb24sZ3JhbnVsYXJpdHk6byxleHRydWRlZEhlaWdodDpyLGhlaWdodDppLHZlcnRleEZvcm1hdDpoZS5QT1NJVElPTl9PTkxZLHNoYWRvd1ZvbHVtZTohMH0pfTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhici5wcm90b3R5cGUse3JlY3RhbmdsZTp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGcodGhpcy5fcmVjdGFuZ2xlKXx8KHRoaXMuX3JlY3RhbmdsZT1fVCh0aGlzLl9jZW50ZXIsdGhpcy5fc2VtaU1ham9yQXhpcyx0aGlzLl9zZW1pTWlub3JBeGlzLHRoaXMuX3JvdGF0aW9uLHRoaXMuX2dyYW51bGFyaXR5LHRoaXMuX2VsbGlwc29pZCkpLHRoaXMuX3JlY3RhbmdsZX19LHRleHR1cmVDb29yZGluYXRlUm90YXRpb25Qb2ludHM6e2dldDpmdW5jdGlvbigpe3JldHVybiBnKHRoaXMuX3RleHR1cmVDb29yZGluYXRlUm90YXRpb25Qb2ludHMpfHwodGhpcy5fdGV4dHVyZUNvb3JkaW5hdGVSb3RhdGlvblBvaW50cz1sUCh0aGlzKSksdGhpcy5fdGV4dHVyZUNvb3JkaW5hdGVSb3RhdGlvblBvaW50c319fSk7cWE9YnJ9KTtmdW5jdGlvbiB6cihlKXtlPWU/P0NlLkVNUFRZX09CSkVDVDtsZXQgdD1lLnJhZGl1cyxuPXtjZW50ZXI6ZS5jZW50ZXIsc2VtaU1ham9yQXhpczp0LHNlbWlNaW5vckF4aXM6dCxlbGxpcHNvaWQ6ZS5lbGxpcHNvaWQsaGVpZ2h0OmUuaGVpZ2h0LGV4dHJ1ZGVkSGVpZ2h0OmUuZXh0cnVkZWRIZWlnaHQsZ3JhbnVsYXJpdHk6ZS5ncmFudWxhcml0eSx2ZXJ0ZXhGb3JtYXQ6ZS52ZXJ0ZXhGb3JtYXQsc3RSb3RhdGlvbjplLnN0Um90YXRpb24sc2hhZG93Vm9sdW1lOmUuc2hhZG93Vm9sdW1lfTt0aGlzLl9lbGxpcHNlR2VvbWV0cnk9bmV3IHFhKG4pLHRoaXMuX3dvcmtlck5hbWU9ImNyZWF0ZUNpcmNsZUdlb21ldHJ5In12YXIgVFQsUm8senAsRVQ9WCgoKT0+e0llKCk7bXQoKTtzZSgpO2pwKCk7V2UoKTtrbygpO3pyLnBhY2tlZExlbmd0aD1xYS5wYWNrZWRMZW5ndGg7enIucGFjaz1mdW5jdGlvbihlLHQsbil7cmV0dXJuIHFhLnBhY2soZS5fZWxsaXBzZUdlb21ldHJ5LHQsbil9O1RUPW5ldyBxYSh7Y2VudGVyOm5ldyBzLHNlbWlNYWpvckF4aXM6MSxzZW1pTWlub3JBeGlzOjF9KSxSbz17Y2VudGVyOm5ldyBzLHJhZGl1czp2b2lkIDAsZWxsaXBzb2lkOnEuY2xvbmUocS5kZWZhdWx0KSxoZWlnaHQ6dm9pZCAwLGV4dHJ1ZGVkSGVpZ2h0OnZvaWQgMCxncmFudWxhcml0eTp2b2lkIDAsdmVydGV4Rm9ybWF0Om5ldyBoZSxzdFJvdGF0aW9uOnZvaWQgMCxzZW1pTWFqb3JBeGlzOnZvaWQgMCxzZW1pTWlub3JBeGlzOnZvaWQgMCxzaGFkb3dWb2x1bWU6dm9pZCAwfTt6ci51bnBhY2s9ZnVuY3Rpb24oZSx0LG4pe2xldCBvPXFhLnVucGFjayhlLHQsVFQpO3JldHVybiBSby5jZW50ZXI9cy5jbG9uZShvLl9jZW50ZXIsUm8uY2VudGVyKSxSby5lbGxpcHNvaWQ9cS5jbG9uZShvLl9lbGxpcHNvaWQsUm8uZWxsaXBzb2lkKSxSby5lbGxpcHNvaWQ9cS5jbG9uZShvLl9lbGxpcHNvaWQsVFQuX2VsbGlwc29pZCksUm8uaGVpZ2h0PW8uX2hlaWdodCxSby5leHRydWRlZEhlaWdodD1vLl9leHRydWRlZEhlaWdodCxSby5ncmFudWxhcml0eT1vLl9ncmFudWxhcml0eSxSby52ZXJ0ZXhGb3JtYXQ9aGUuY2xvbmUoby5fdmVydGV4Rm9ybWF0LFJvLnZlcnRleEZvcm1hdCksUm8uc3RSb3RhdGlvbj1vLl9zdFJvdGF0aW9uLFJvLnNoYWRvd1ZvbHVtZT1vLl9zaGFkb3dWb2x1bWUsZyhuKT8oUm8uc2VtaU1ham9yQXhpcz1vLl9zZW1pTWFqb3JBeGlzLFJvLnNlbWlNaW5vckF4aXM9by5fc2VtaU1pbm9yQXhpcyxuLl9lbGxpcHNlR2VvbWV0cnk9bmV3IHFhKFJvKSxuKTooUm8ucmFkaXVzPW8uX3NlbWlNYWpvckF4aXMsbmV3IHpyKFJvKSl9O3pyLmNyZWF0ZUdlb21ldHJ5PWZ1bmN0aW9uKGUpe3JldHVybiBxYS5jcmVhdGVHZW9tZXRyeShlLl9lbGxpcHNlR2VvbWV0cnkpfTt6ci5jcmVhdGVTaGFkb3dWb2x1bWU9ZnVuY3Rpb24oZSx0LG4pe2xldCBvPWUuX2VsbGlwc2VHZW9tZXRyeS5fZ3JhbnVsYXJpdHksYT1lLl9lbGxpcHNlR2VvbWV0cnkuX2VsbGlwc29pZCxyPXQobyxhKSxpPW4obyxhKTtyZXR1cm4gbmV3IHpyKHtjZW50ZXI6ZS5fZWxsaXBzZUdlb21ldHJ5Ll9jZW50ZXIscmFkaXVzOmUuX2VsbGlwc2VHZW9tZXRyeS5fc2VtaU1ham9yQXhpcyxlbGxpcHNvaWQ6YSxzdFJvdGF0aW9uOmUuX2VsbGlwc2VHZW9tZXRyeS5fc3RSb3RhdGlvbixncmFudWxhcml0eTpvLGV4dHJ1ZGVkSGVpZ2h0OnIsaGVpZ2h0OmksdmVydGV4Rm9ybWF0OmhlLlBPU0lUSU9OX09OTFksc2hhZG93Vm9sdW1lOiEwfSl9O09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHpyLnByb3RvdHlwZSx7cmVjdGFuZ2xlOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZWxsaXBzZUdlb21ldHJ5LnJlY3RhbmdsZX19LHRleHR1cmVDb29yZGluYXRlUm90YXRpb25Qb2ludHM6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9lbGxpcHNlR2VvbWV0cnkudGV4dHVyZUNvb3JkaW5hdGVSb3RhdGlvblBvaW50c319fSk7enA9enJ9KTt2YXIgR3A9e307cnQoR3Ase2RlZmF1bHQ6KCk9Pm1QfSk7ZnVuY3Rpb24gaFAoZSx0KXtyZXR1cm4gZyh0KSYmKGU9enAudW5wYWNrKGUsdCkpLGUuX2VsbGlwc2VHZW9tZXRyeS5fY2VudGVyPXMuY2xvbmUoZS5fZWxsaXBzZUdlb21ldHJ5Ll9jZW50ZXIpLGUuX2VsbGlwc2VHZW9tZXRyeS5fZWxsaXBzb2lkPXEuY2xvbmUoZS5fZWxsaXBzZUdlb21ldHJ5Ll9lbGxpcHNvaWQpLHpwLmNyZWF0ZUdlb21ldHJ5KGUpfXZhciBtUCxWcD1YKCgpPT57SWUoKTtFVCgpO3NlKCk7V2UoKTttUD1oUH0pO2Z1bmN0aW9uIGJQKGUpe2xldCB0PWUuY2VudGVyO2xjPXMubXVsdGlwbHlCeVNjYWxhcihlLmVsbGlwc29pZC5nZW9kZXRpY1N1cmZhY2VOb3JtYWwodCxsYyksZS5oZWlnaHQsbGMpLGxjPXMuYWRkKHQsbGMsbGMpO2xldCBuPW5ldyBnZShsYyxlLnNlbWlNYWpvckF4aXMpLG89S2EuY29tcHV0ZUVsbGlwc2VQb3NpdGlvbnMoZSwhMSwhMCkub3V0ZXJQb3NpdGlvbnMsYT1uZXcgbnQoe3Bvc2l0aW9uOm5ldyBpZSh7Y29tcG9uZW50RGF0YXR5cGU6bmUuRE9VQkxFLGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6S2EucmFpc2VQb3NpdGlvbnNUb0hlaWdodChvLGUsITEpfSl9KSxyPW8ubGVuZ3RoLzMsaT1rZS5jcmVhdGVUeXBlZEFycmF5KHIscioyKSxmPTA7Zm9yKGxldCBkPTA7ZDxyOysrZClpW2YrK109ZCxpW2YrK109KGQrMSklcjtyZXR1cm57Ym91bmRpbmdTcGhlcmU6bixhdHRyaWJ1dGVzOmEsaW5kaWNlczppfX1mdW5jdGlvbiBwUChlKXtsZXQgdD1lLmNlbnRlcixuPWUuZWxsaXBzb2lkLG89ZS5zZW1pTWFqb3JBeGlzLGE9cy5tdWx0aXBseUJ5U2NhbGFyKG4uZ2VvZGV0aWNTdXJmYWNlTm9ybWFsKHQsUlQpLGUuaGVpZ2h0LFJUKTthaC5jZW50ZXI9cy5hZGQodCxhLGFoLmNlbnRlciksYWgucmFkaXVzPW8sYT1zLm11bHRpcGx5QnlTY2FsYXIobi5nZW9kZXRpY1N1cmZhY2VOb3JtYWwodCxhKSxlLmV4dHJ1ZGVkSGVpZ2h0LGEpLHJoLmNlbnRlcj1zLmFkZCh0LGEscmguY2VudGVyKSxyaC5yYWRpdXM9bztsZXQgcj1LYS5jb21wdXRlRWxsaXBzZVBvc2l0aW9ucyhlLCExLCEwKS5vdXRlclBvc2l0aW9ucyxpPW5ldyBudCh7cG9zaXRpb246bmV3IGllKHtjb21wb25lbnREYXRhdHlwZTpuZS5ET1VCTEUsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczpLYS5yYWlzZVBvc2l0aW9uc1RvSGVpZ2h0KHIsZSwhMCl9KX0pO3I9aS5wb3NpdGlvbi52YWx1ZXM7bGV0IGY9Z2UudW5pb24oYWgscmgpLGQ9ci5sZW5ndGgvMztpZihnKGUub2Zmc2V0QXR0cmlidXRlKSl7bGV0IGI9bmV3IFVpbnQ4QXJyYXkoZCk7aWYoZS5vZmZzZXRBdHRyaWJ1dGU9PT1zdC5UT1ApYj1iLmZpbGwoMSwwLGQvMik7ZWxzZXtsZXQgcD1lLm9mZnNldEF0dHJpYnV0ZT09PXN0Lk5PTkU/MDoxO2I9Yi5maWxsKHApfWkuYXBwbHlPZmZzZXQ9bmV3IGllKHtjb21wb25lbnREYXRhdHlwZTpuZS5VTlNJR05FRF9CWVRFLGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6MSx2YWx1ZXM6Yn0pfWxldCBjPWUubnVtYmVyT2ZWZXJ0aWNhbExpbmVzPz8xNjtjPWsuY2xhbXAoYywwLGQvMik7bGV0IHU9a2UuY3JlYXRlVHlwZWRBcnJheShkLGQqMitjKjIpO2QvPTI7bGV0IGw9MCxoO2ZvcihoPTA7aDxkOysraCl1W2wrK109aCx1W2wrK109KGgrMSklZCx1W2wrK109aCtkLHVbbCsrXT0oaCsxKSVkK2Q7bGV0IG07aWYoYz4wKXtsZXQgYj1NYXRoLm1pbihjLGQpO209TWF0aC5yb3VuZChkL2IpO2xldCBwPU1hdGgubWluKG0qYyxkKTtmb3IoaD0wO2g8cDtoKz1tKXVbbCsrXT1oLHVbbCsrXT1oK2R9cmV0dXJue2JvdW5kaW5nU3BoZXJlOmYsYXR0cmlidXRlczppLGluZGljZXM6dX19ZnVuY3Rpb24gbXMoZSl7ZT1lPz9DZS5FTVBUWV9PQkpFQ1Q7bGV0IHQ9ZS5jZW50ZXIsbj1lLmVsbGlwc29pZD8/cS5kZWZhdWx0LG89ZS5zZW1pTWFqb3JBeGlzLGE9ZS5zZW1pTWlub3JBeGlzLHI9ZS5ncmFudWxhcml0eT8/ay5SQURJQU5TX1BFUl9ERUdSRUUsaT1lLmhlaWdodD8/MCxmPWUuZXh0cnVkZWRIZWlnaHQ/P2k7dGhpcy5fY2VudGVyPXMuY2xvbmUodCksdGhpcy5fc2VtaU1ham9yQXhpcz1vLHRoaXMuX3NlbWlNaW5vckF4aXM9YSx0aGlzLl9lbGxpcHNvaWQ9cS5jbG9uZShuKSx0aGlzLl9yb3RhdGlvbj1lLnJvdGF0aW9uPz8wLHRoaXMuX2hlaWdodD1NYXRoLm1heChmLGkpLHRoaXMuX2dyYW51bGFyaXR5PXIsdGhpcy5fZXh0cnVkZWRIZWlnaHQ9TWF0aC5taW4oZixpKSx0aGlzLl9udW1iZXJPZlZlcnRpY2FsTGluZXM9TWF0aC5tYXgoZS5udW1iZXJPZlZlcnRpY2FsTGluZXM/PzE2LDApLHRoaXMuX29mZnNldEF0dHJpYnV0ZT1lLm9mZnNldEF0dHJpYnV0ZSx0aGlzLl93b3JrZXJOYW1lPSJjcmVhdGVFbGxpcHNlT3V0bGluZUdlb21ldHJ5In12YXIgUlQsbGMsYWgscmgseFQsT1QsR3IsV2EsSHA9WCgoKT0+e010KCk7SWUoKTt2dCgpO210KCk7c2UoKTtEcCgpO1dlKCk7JHQoKTtlbigpO3VuKCk7em8oKTtubigpO0dlKCk7Y24oKTtSVD1uZXcgcyxsYz1uZXcgczthaD1uZXcgZ2Uscmg9bmV3IGdlO21zLnBhY2tlZExlbmd0aD1zLnBhY2tlZExlbmd0aCtxLnBhY2tlZExlbmd0aCs4O21zLnBhY2s9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBuPW4/PzAscy5wYWNrKGUuX2NlbnRlcix0LG4pLG4rPXMucGFja2VkTGVuZ3RoLHEucGFjayhlLl9lbGxpcHNvaWQsdCxuKSxuKz1xLnBhY2tlZExlbmd0aCx0W24rK109ZS5fc2VtaU1ham9yQXhpcyx0W24rK109ZS5fc2VtaU1pbm9yQXhpcyx0W24rK109ZS5fcm90YXRpb24sdFtuKytdPWUuX2hlaWdodCx0W24rK109ZS5fZ3JhbnVsYXJpdHksdFtuKytdPWUuX2V4dHJ1ZGVkSGVpZ2h0LHRbbisrXT1lLl9udW1iZXJPZlZlcnRpY2FsTGluZXMsdFtuXT1lLl9vZmZzZXRBdHRyaWJ1dGU/Py0xLHR9O3hUPW5ldyBzLE9UPW5ldyBxLEdyPXtjZW50ZXI6eFQsZWxsaXBzb2lkOk9ULHNlbWlNYWpvckF4aXM6dm9pZCAwLHNlbWlNaW5vckF4aXM6dm9pZCAwLHJvdGF0aW9uOnZvaWQgMCxoZWlnaHQ6dm9pZCAwLGdyYW51bGFyaXR5OnZvaWQgMCxleHRydWRlZEhlaWdodDp2b2lkIDAsbnVtYmVyT2ZWZXJ0aWNhbExpbmVzOnZvaWQgMCxvZmZzZXRBdHRyaWJ1dGU6dm9pZCAwfTttcy51bnBhY2s9ZnVuY3Rpb24oZSx0LG4pe3Q9dD8/MDtsZXQgbz1zLnVucGFjayhlLHQseFQpO3QrPXMucGFja2VkTGVuZ3RoO2xldCBhPXEudW5wYWNrKGUsdCxPVCk7dCs9cS5wYWNrZWRMZW5ndGg7bGV0IHI9ZVt0KytdLGk9ZVt0KytdLGY9ZVt0KytdLGQ9ZVt0KytdLGM9ZVt0KytdLHU9ZVt0KytdLGw9ZVt0KytdLGg9ZVt0XTtyZXR1cm4gZyhuKT8obi5fY2VudGVyPXMuY2xvbmUobyxuLl9jZW50ZXIpLG4uX2VsbGlwc29pZD1xLmNsb25lKGEsbi5fZWxsaXBzb2lkKSxuLl9zZW1pTWFqb3JBeGlzPXIsbi5fc2VtaU1pbm9yQXhpcz1pLG4uX3JvdGF0aW9uPWYsbi5faGVpZ2h0PWQsbi5fZ3JhbnVsYXJpdHk9YyxuLl9leHRydWRlZEhlaWdodD11LG4uX251bWJlck9mVmVydGljYWxMaW5lcz1sLG4uX29mZnNldEF0dHJpYnV0ZT1oPT09LTE/dm9pZCAwOmgsbik6KEdyLmhlaWdodD1kLEdyLmV4dHJ1ZGVkSGVpZ2h0PXUsR3IuZ3JhbnVsYXJpdHk9YyxHci5yb3RhdGlvbj1mLEdyLnNlbWlNYWpvckF4aXM9cixHci5zZW1pTWlub3JBeGlzPWksR3IubnVtYmVyT2ZWZXJ0aWNhbExpbmVzPWwsR3Iub2Zmc2V0QXR0cmlidXRlPWg9PT0tMT92b2lkIDA6aCxuZXcgbXMoR3IpKX07bXMuY3JlYXRlR2VvbWV0cnk9ZnVuY3Rpb24oZSl7aWYoZS5fc2VtaU1ham9yQXhpczw9MHx8ZS5fc2VtaU1pbm9yQXhpczw9MClyZXR1cm47bGV0IHQ9ZS5faGVpZ2h0LG49ZS5fZXh0cnVkZWRIZWlnaHQsbz0hay5lcXVhbHNFcHNpbG9uKHQsbiwwLGsuRVBTSUxPTjIpO2UuX2NlbnRlcj1lLl9lbGxpcHNvaWQuc2NhbGVUb0dlb2RldGljU3VyZmFjZShlLl9jZW50ZXIsZS5fY2VudGVyKTtsZXQgYT17Y2VudGVyOmUuX2NlbnRlcixzZW1pTWFqb3JBeGlzOmUuX3NlbWlNYWpvckF4aXMsc2VtaU1pbm9yQXhpczplLl9zZW1pTWlub3JBeGlzLGVsbGlwc29pZDplLl9lbGxpcHNvaWQscm90YXRpb246ZS5fcm90YXRpb24saGVpZ2h0OnQsZ3JhbnVsYXJpdHk6ZS5fZ3JhbnVsYXJpdHksbnVtYmVyT2ZWZXJ0aWNhbExpbmVzOmUuX251bWJlck9mVmVydGljYWxMaW5lc30scjtpZihvKWEuZXh0cnVkZWRIZWlnaHQ9bixhLm9mZnNldEF0dHJpYnV0ZT1lLl9vZmZzZXRBdHRyaWJ1dGUscj1wUChhKTtlbHNlIGlmKHI9YlAoYSksZyhlLl9vZmZzZXRBdHRyaWJ1dGUpKXtsZXQgaT1yLmF0dHJpYnV0ZXMucG9zaXRpb24udmFsdWVzLmxlbmd0aCxmPWUuX29mZnNldEF0dHJpYnV0ZT09PXN0Lk5PTkU/MDoxLGQ9bmV3IFVpbnQ4QXJyYXkoaS8zKS5maWxsKGYpO3IuYXR0cmlidXRlcy5hcHBseU9mZnNldD1uZXcgaWUoe2NvbXBvbmVudERhdGF0eXBlOm5lLlVOU0lHTkVEX0JZVEUsY29tcG9uZW50c1BlckF0dHJpYnV0ZToxLHZhbHVlczpkfSl9cmV0dXJuIG5ldyB2ZSh7YXR0cmlidXRlczpyLmF0dHJpYnV0ZXMsaW5kaWNlczpyLmluZGljZXMscHJpbWl0aXZlVHlwZTpVZS5MSU5FUyxib3VuZGluZ1NwaGVyZTpyLmJvdW5kaW5nU3BoZXJlLG9mZnNldEF0dHJpYnV0ZTplLl9vZmZzZXRBdHRyaWJ1dGV9KX07V2E9bXN9KTtmdW5jdGlvbiBicyhlKXtlPWU/P0NlLkVNUFRZX09CSkVDVDtsZXQgdD1lLnJhZGl1cyxuPXtjZW50ZXI6ZS5jZW50ZXIsc2VtaU1ham9yQXhpczp0LHNlbWlNaW5vckF4aXM6dCxlbGxpcHNvaWQ6ZS5lbGxpcHNvaWQsaGVpZ2h0OmUuaGVpZ2h0LGV4dHJ1ZGVkSGVpZ2h0OmUuZXh0cnVkZWRIZWlnaHQsZ3JhbnVsYXJpdHk6ZS5ncmFudWxhcml0eSxudW1iZXJPZlZlcnRpY2FsTGluZXM6ZS5udW1iZXJPZlZlcnRpY2FsTGluZXN9O3RoaXMuX2VsbGlwc2VHZW9tZXRyeT1uZXcgV2EobiksdGhpcy5fd29ya2VyTmFtZT0iY3JlYXRlQ2lyY2xlT3V0bGluZUdlb21ldHJ5In12YXIgZ1AsZmEsS3AsU1Q9WCgoKT0+e0llKCk7bXQoKTtzZSgpO0hwKCk7V2UoKTticy5wYWNrZWRMZW5ndGg9V2EucGFja2VkTGVuZ3RoO2JzLnBhY2s9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBXYS5wYWNrKGUuX2VsbGlwc2VHZW9tZXRyeSx0LG4pfTtnUD1uZXcgV2Eoe2NlbnRlcjpuZXcgcyxzZW1pTWFqb3JBeGlzOjEsc2VtaU1pbm9yQXhpczoxfSksZmE9e2NlbnRlcjpuZXcgcyxyYWRpdXM6dm9pZCAwLGVsbGlwc29pZDpxLmNsb25lKHEuVU5JVF9TUEhFUkUpLGhlaWdodDp2b2lkIDAsZXh0cnVkZWRIZWlnaHQ6dm9pZCAwLGdyYW51bGFyaXR5OnZvaWQgMCxudW1iZXJPZlZlcnRpY2FsTGluZXM6dm9pZCAwLHNlbWlNYWpvckF4aXM6dm9pZCAwLHNlbWlNaW5vckF4aXM6dm9pZCAwfTticy51bnBhY2s9ZnVuY3Rpb24oZSx0LG4pe2xldCBvPVdhLnVucGFjayhlLHQsZ1ApO3JldHVybiBmYS5jZW50ZXI9cy5jbG9uZShvLl9jZW50ZXIsZmEuY2VudGVyKSxmYS5lbGxpcHNvaWQ9cS5jbG9uZShvLl9lbGxpcHNvaWQsZmEuZWxsaXBzb2lkKSxmYS5oZWlnaHQ9by5faGVpZ2h0LGZhLmV4dHJ1ZGVkSGVpZ2h0PW8uX2V4dHJ1ZGVkSGVpZ2h0LGZhLmdyYW51bGFyaXR5PW8uX2dyYW51bGFyaXR5LGZhLm51bWJlck9mVmVydGljYWxMaW5lcz1vLl9udW1iZXJPZlZlcnRpY2FsTGluZXMsZyhuKT8oZmEuc2VtaU1ham9yQXhpcz1vLl9zZW1pTWFqb3JBeGlzLGZhLnNlbWlNaW5vckF4aXM9by5fc2VtaU1pbm9yQXhpcyxuLl9lbGxpcHNlR2VvbWV0cnk9bmV3IFdhKGZhKSxuKTooZmEucmFkaXVzPW8uX3NlbWlNYWpvckF4aXMsbmV3IGJzKGZhKSl9O2JzLmNyZWF0ZUdlb21ldHJ5PWZ1bmN0aW9uKGUpe3JldHVybiBXYS5jcmVhdGVHZW9tZXRyeShlLl9lbGxpcHNlR2VvbWV0cnkpfTtLcD1ic30pO3ZhciBxcD17fTtydChxcCx7ZGVmYXVsdDooKT0+eVB9KTtmdW5jdGlvbiBfUChlLHQpe3JldHVybiBnKHQpJiYoZT1LcC51bnBhY2soZSx0KSksZS5fZWxsaXBzZUdlb21ldHJ5Ll9jZW50ZXI9cy5jbG9uZShlLl9lbGxpcHNlR2VvbWV0cnkuX2NlbnRlciksZS5fZWxsaXBzZUdlb21ldHJ5Ll9lbGxpcHNvaWQ9cS5jbG9uZShlLl9lbGxpcHNlR2VvbWV0cnkuX2VsbGlwc29pZCksS3AuY3JlYXRlR2VvbWV0cnkoZSl9dmFyIHlQLFdwPVgoKCk9PntJZSgpO1NUKCk7c2UoKTtXZSgpO3lQPV9QfSk7ZnVuY3Rpb24gQVAoZSx0LG4sbyl7aWYoIWcoZSkpcmV0dXJuO249bj8/ITE7bGV0IGE9ZyhvKSxyPWUubGVuZ3RoO2lmKHI8MilyZXR1cm4gZTtsZXQgaSxmPWVbMF0sZCxjLHU9MCxsPS0xO2ZvcihpPTE7aTxyOysraSlkPWVbaV0sdChmLGQsQ1QpPyhnKGMpfHwoYz1lLnNsaWNlKDAsaSksdT1pLTEsbD0wKSxhJiZvLnB1c2goaSkpOihnKGMpJiYoYy5wdXNoKGQpLHU9aSxhJiYobD1vLmxlbmd0aCkpLGY9ZCk7cmV0dXJuIG4mJnQoZVswXSxlW3ItMV0sQ1QpJiYoYSYmKGcoYyk/by5zcGxpY2UobCwwLHUpOm8ucHVzaChyLTEpKSxnKGMpP2MubGVuZ3RoLT0xOmM9ZS5zbGljZSgwLC0xKSksZyhjKT9jOmV9dmFyIENULE5uLFhhPVgoKCk9PntzZSgpO0dlKCk7Q1Q9ay5FUFNJTE9OMTA7Tm49QVB9KTtmdW5jdGlvbiBMbihlLHQsbixvKXt0aGlzLng9ZT8/MCx0aGlzLnk9dD8/MCx0aGlzLndpZHRoPW4/PzAsdGhpcy5oZWlnaHQ9bz8/MH12YXIgTVQsd1AsVFAsWWEsRGY9WCgoKT0+e2p0KCk7VHQoKTtzZSgpO1dlKCk7a3IoKTtaaSgpO19uKCk7TG4ucGFja2VkTGVuZ3RoPTQ7TG4ucGFjaz1mdW5jdGlvbihlLHQsbil7cmV0dXJuIG49bj8/MCx0W24rK109ZS54LHRbbisrXT1lLnksdFtuKytdPWUud2lkdGgsdFtuXT1lLmhlaWdodCx0fTtMbi51bnBhY2s9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB0PXQ/PzAsZyhuKXx8KG49bmV3IExuKSxuLng9ZVt0KytdLG4ueT1lW3QrK10sbi53aWR0aD1lW3QrK10sbi5oZWlnaHQ9ZVt0XSxufTtMbi5mcm9tUG9pbnRzPWZ1bmN0aW9uKGUsdCl7aWYoZyh0KXx8KHQ9bmV3IExuKSwhZyhlKXx8ZS5sZW5ndGg9PT0wKXJldHVybiB0Lng9MCx0Lnk9MCx0LndpZHRoPTAsdC5oZWlnaHQ9MCx0O2xldCBuPWUubGVuZ3RoLG89ZVswXS54LGE9ZVswXS55LHI9ZVswXS54LGk9ZVswXS55O2ZvcihsZXQgZj0xO2Y8bjtmKyspe2xldCBkPWVbZl0sYz1kLngsdT1kLnk7bz1NYXRoLm1pbihjLG8pLHI9TWF0aC5tYXgoYyxyKSxhPU1hdGgubWluKHUsYSksaT1NYXRoLm1heCh1LGkpfXJldHVybiB0Lng9byx0Lnk9YSx0LndpZHRoPXItbyx0LmhlaWdodD1pLWEsdH07TVQ9bmV3IGlvLHdQPW5ldyByZSxUUD1uZXcgcmU7TG4uZnJvbVJlY3RhbmdsZT1mdW5jdGlvbihlLHQsbil7aWYoZyhuKXx8KG49bmV3IExuKSwhZyhlKSlyZXR1cm4gbi54PTAsbi55PTAsbi53aWR0aD0wLG4uaGVpZ2h0PTAsbjtNVC5fZWxsaXBzb2lkPXEuZGVmYXVsdCx0PXQ/P01UO2xldCBvPXQucHJvamVjdChTZS5zb3V0aHdlc3QoZSx3UCkpLGE9dC5wcm9qZWN0KFNlLm5vcnRoZWFzdChlLFRQKSk7cmV0dXJuIFkuc3VidHJhY3QoYSxvLGEpLG4ueD1vLngsbi55PW8ueSxuLndpZHRoPWEueCxuLmhlaWdodD1hLnksbn07TG4uY2xvbmU9ZnVuY3Rpb24oZSx0KXtpZihnKGUpKXJldHVybiBnKHQpPyh0Lng9ZS54LHQueT1lLnksdC53aWR0aD1lLndpZHRoLHQuaGVpZ2h0PWUuaGVpZ2h0LHQpOm5ldyBMbihlLngsZS55LGUud2lkdGgsZS5oZWlnaHQpfTtMbi51bmlvbj1mdW5jdGlvbihlLHQsbil7ZyhuKXx8KG49bmV3IExuKTtsZXQgbz1NYXRoLm1pbihlLngsdC54KSxhPU1hdGgubWluKGUueSx0LnkpLHI9TWF0aC5tYXgoZS54K2Uud2lkdGgsdC54K3Qud2lkdGgpLGk9TWF0aC5tYXgoZS55K2UuaGVpZ2h0LHQueSt0LmhlaWdodCk7cmV0dXJuIG4ueD1vLG4ueT1hLG4ud2lkdGg9ci1vLG4uaGVpZ2h0PWktYSxufTtMbi5leHBhbmQ9ZnVuY3Rpb24oZSx0LG4pe249TG4uY2xvbmUoZSxuKTtsZXQgbz10Lngtbi54LGE9dC55LW4ueTtyZXR1cm4gbz5uLndpZHRoP24ud2lkdGg9bzpvPDAmJihuLndpZHRoLT1vLG4ueD10LngpLGE+bi5oZWlnaHQ/bi5oZWlnaHQ9YTphPDAmJihuLmhlaWdodC09YSxuLnk9dC55KSxufTtMbi5pbnRlcnNlY3Q9ZnVuY3Rpb24oZSx0KXtsZXQgbj1lLngsbz1lLnksYT10Lngscj10Lnk7cmV0dXJuIG4+YSt0LndpZHRofHxuK2Uud2lkdGg8YXx8bytlLmhlaWdodDxyfHxvPnIrdC5oZWlnaHQ/U24uT1VUU0lERTpTbi5JTlRFUlNFQ1RJTkd9O0xuLmVxdWFscz1mdW5jdGlvbihlLHQpe3JldHVybiBlPT09dHx8ZyhlKSYmZyh0KSYmZS54PT09dC54JiZlLnk9PT10LnkmJmUud2lkdGg9PT10LndpZHRoJiZlLmhlaWdodD09PXQuaGVpZ2h0fTtMbi5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oZSl7cmV0dXJuIExuLmNsb25lKHRoaXMsZSl9O0xuLnByb3RvdHlwZS5pbnRlcnNlY3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIExuLmludGVyc2VjdCh0aGlzLGUpfTtMbi5wcm90b3R5cGUuZXF1YWxzPWZ1bmN0aW9uKGUpe3JldHVybiBMbi5lcXVhbHModGhpcyxlKX07WWE9TG59KTtmdW5jdGlvbiBnbyhlLHQsbil7dGhpcy5taW5pbXVtPXMuY2xvbmUoZT8/cy5aRVJPKSx0aGlzLm1heGltdW09cy5jbG9uZSh0Pz9zLlpFUk8pLGcobik/bj1zLmNsb25lKG4pOm49cy5taWRwb2ludCh0aGlzLm1pbmltdW0sdGhpcy5tYXhpbXVtLG5ldyBzKSx0aGlzLmNlbnRlcj1ufXZhciBpaCx1byxBaT1YKCgpPT57SWUoKTtzZSgpO1ppKCk7Z28uZnJvbUNvcm5lcnM9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBnKG4pfHwobj1uZXcgZ28pLG4ubWluaW11bT1zLmNsb25lKGUsbi5taW5pbXVtKSxuLm1heGltdW09cy5jbG9uZSh0LG4ubWF4aW11bSksbi5jZW50ZXI9cy5taWRwb2ludChlLHQsbi5jZW50ZXIpLG59O2dvLmZyb21Qb2ludHM9ZnVuY3Rpb24oZSx0KXtpZihnKHQpfHwodD1uZXcgZ28pLCFnKGUpfHxlLmxlbmd0aD09PTApcmV0dXJuIHQubWluaW11bT1zLmNsb25lKHMuWkVSTyx0Lm1pbmltdW0pLHQubWF4aW11bT1zLmNsb25lKHMuWkVSTyx0Lm1heGltdW0pLHQuY2VudGVyPXMuY2xvbmUocy5aRVJPLHQuY2VudGVyKSx0O2xldCBuPWVbMF0ueCxvPWVbMF0ueSxhPWVbMF0ueixyPWVbMF0ueCxpPWVbMF0ueSxmPWVbMF0ueixkPWUubGVuZ3RoO2ZvcihsZXQgbD0xO2w8ZDtsKyspe2xldCBoPWVbbF0sbT1oLngsYj1oLnkscD1oLno7bj1NYXRoLm1pbihtLG4pLHI9TWF0aC5tYXgobSxyKSxvPU1hdGgubWluKGIsbyksaT1NYXRoLm1heChiLGkpLGE9TWF0aC5taW4ocCxhKSxmPU1hdGgubWF4KHAsZil9bGV0IGM9dC5taW5pbXVtO2MueD1uLGMueT1vLGMuej1hO2xldCB1PXQubWF4aW11bTtyZXR1cm4gdS54PXIsdS55PWksdS56PWYsdC5jZW50ZXI9cy5taWRwb2ludChjLHUsdC5jZW50ZXIpLHR9O2dvLmNsb25lPWZ1bmN0aW9uKGUsdCl7aWYoZyhlKSlyZXR1cm4gZyh0KT8odC5taW5pbXVtPXMuY2xvbmUoZS5taW5pbXVtLHQubWluaW11bSksdC5tYXhpbXVtPXMuY2xvbmUoZS5tYXhpbXVtLHQubWF4aW11bSksdC5jZW50ZXI9cy5jbG9uZShlLmNlbnRlcix0LmNlbnRlciksdCk6bmV3IGdvKGUubWluaW11bSxlLm1heGltdW0sZS5jZW50ZXIpfTtnby5lcXVhbHM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT09PXR8fGcoZSkmJmcodCkmJnMuZXF1YWxzKGUuY2VudGVyLHQuY2VudGVyKSYmcy5lcXVhbHMoZS5taW5pbXVtLHQubWluaW11bSkmJnMuZXF1YWxzKGUubWF4aW11bSx0Lm1heGltdW0pfTtpaD1uZXcgcztnby5pbnRlcnNlY3RQbGFuZT1mdW5jdGlvbihlLHQpe2loPXMuc3VidHJhY3QoZS5tYXhpbXVtLGUubWluaW11bSxpaCk7bGV0IG49cy5tdWx0aXBseUJ5U2NhbGFyKGloLC41LGloKSxvPXQubm9ybWFsLGE9bi54Kk1hdGguYWJzKG8ueCkrbi55Kk1hdGguYWJzKG8ueSkrbi56Kk1hdGguYWJzKG8ueikscj1zLmRvdChlLmNlbnRlcixvKSt0LmRpc3RhbmNlO3JldHVybiByLWE+MD9Tbi5JTlNJREU6cithPDA/U24uT1VUU0lERTpTbi5JTlRFUlNFQ1RJTkd9O2dvLmludGVyc2VjdEF4aXNBbGlnbmVkQm91bmRpbmdCb3g9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5taW5pbXVtLng8PXQubWF4aW11bS54JiZlLm1heGltdW0ueD49dC5taW5pbXVtLngmJmUubWluaW11bS55PD10Lm1heGltdW0ueSYmZS5tYXhpbXVtLnk+PXQubWluaW11bS55JiZlLm1pbmltdW0uejw9dC5tYXhpbXVtLnomJmUubWF4aW11bS56Pj10Lm1pbmltdW0uen07Z28ucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKGUpe3JldHVybiBnby5jbG9uZSh0aGlzLGUpfTtnby5wcm90b3R5cGUuaW50ZXJzZWN0UGxhbmU9ZnVuY3Rpb24oZSl7cmV0dXJuIGdvLmludGVyc2VjdFBsYW5lKHRoaXMsZSl9O2dvLnByb3RvdHlwZS5pbnRlcnNlY3RBeGlzQWxpZ25lZEJvdW5kaW5nQm94PWZ1bmN0aW9uKGUpe3JldHVybiBnby5pbnRlcnNlY3RBeGlzQWxpZ25lZEJvdW5kaW5nQm94KHRoaXMsZSl9O2dvLnByb3RvdHlwZS5lcXVhbHM9ZnVuY3Rpb24oZSl7cmV0dXJuIGdvLmVxdWFscyh0aGlzLGUpfTt1bz1nb30pO2Z1bmN0aW9uIHByKGUsdCl7dD10Pz9xLmRlZmF1bHQsZT10LnNjYWxlVG9HZW9kZXRpY1N1cmZhY2UoZSk7bGV0IG49Y28uZWFzdE5vcnRoVXBUb0ZpeGVkRnJhbWUoZSx0KTt0aGlzLl9lbGxpcHNvaWQ9dCx0aGlzLl9vcmlnaW49ZSx0aGlzLl94QXhpcz1zLmZyb21DYXJ0ZXNpYW40KCQuZ2V0Q29sdW1uKG4sMCxYcCkpLHRoaXMuX3lBeGlzPXMuZnJvbUNhcnRlc2lhbjQoJC5nZXRDb2x1bW4obiwxLFhwKSk7bGV0IG89cy5mcm9tQ2FydGVzaWFuNCgkLmdldENvbHVtbihuLDIsWHApKTt0aGlzLl9wbGFuZT1zbi5mcm9tUG9pbnROb3JtYWwoZSxvKX12YXIgWHAsRVAsTlQsY2gsUlAseG8scHM9WCgoKT0+e0FpKCk7anQoKTtJZSgpO2dhKCk7c2UoKTtXZSgpO3BpKCk7cG4oKTtnaSgpO05mKCk7c3IoKTtYcD1uZXcgZHQ7T2JqZWN0LmRlZmluZVByb3BlcnRpZXMocHIucHJvdG90eXBlLHtlbGxpcHNvaWQ6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9lbGxpcHNvaWR9fSxvcmlnaW46e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9vcmlnaW59fSxwbGFuZTp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3BsYW5lfX0seEF4aXM6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl94QXhpc319LHlBeGlzOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5feUF4aXN9fSx6QXhpczp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3BsYW5lLm5vcm1hbH19fSk7RVA9bmV3IHVvO3ByLmZyb21Qb2ludHM9ZnVuY3Rpb24oZSx0KXtsZXQgbj11by5mcm9tUG9pbnRzKGUsRVApO3JldHVybiBuZXcgcHIobi5jZW50ZXIsdCl9O05UPW5ldyBkcixjaD1uZXcgcztwci5wcm90b3R5cGUucHJvamVjdFBvaW50T250b1BsYW5lPWZ1bmN0aW9uKGUsdCl7bGV0IG49TlQ7bi5vcmlnaW49ZSxzLm5vcm1hbGl6ZShlLG4uZGlyZWN0aW9uKTtsZXQgbz1uby5yYXlQbGFuZShuLHRoaXMuX3BsYW5lLGNoKTtpZihnKG8pfHwocy5uZWdhdGUobi5kaXJlY3Rpb24sbi5kaXJlY3Rpb24pLG89bm8ucmF5UGxhbmUobix0aGlzLl9wbGFuZSxjaCkpLGcobykpe2xldCBhPXMuc3VidHJhY3Qobyx0aGlzLl9vcmlnaW4sbykscj1zLmRvdCh0aGlzLl94QXhpcyxhKSxpPXMuZG90KHRoaXMuX3lBeGlzLGEpO3JldHVybiBnKHQpPyh0Lng9cix0Lnk9aSx0KTpuZXcgWShyLGkpfX07cHIucHJvdG90eXBlLnByb2plY3RQb2ludHNPbnRvUGxhbmU9ZnVuY3Rpb24oZSx0KXtnKHQpfHwodD1bXSk7bGV0IG49MCxvPWUubGVuZ3RoO2ZvcihsZXQgYT0wO2E8bzthKyspe2xldCByPXRoaXMucHJvamVjdFBvaW50T250b1BsYW5lKGVbYV0sdFtuXSk7ZyhyKSYmKHRbbl09cixuKyspfXJldHVybiB0Lmxlbmd0aD1uLHR9O3ByLnByb3RvdHlwZS5wcm9qZWN0UG9pbnRUb05lYXJlc3RPblBsYW5lPWZ1bmN0aW9uKGUsdCl7Zyh0KXx8KHQ9bmV3IFkpO2xldCBuPU5UO24ub3JpZ2luPWUscy5jbG9uZSh0aGlzLl9wbGFuZS5ub3JtYWwsbi5kaXJlY3Rpb24pO2xldCBvPW5vLnJheVBsYW5lKG4sdGhpcy5fcGxhbmUsY2gpO2cobyl8fChzLm5lZ2F0ZShuLmRpcmVjdGlvbixuLmRpcmVjdGlvbiksbz1uby5yYXlQbGFuZShuLHRoaXMuX3BsYW5lLGNoKSk7bGV0IGE9cy5zdWJ0cmFjdChvLHRoaXMuX29yaWdpbixvKSxyPXMuZG90KHRoaXMuX3hBeGlzLGEpLGk9cy5kb3QodGhpcy5feUF4aXMsYSk7cmV0dXJuIHQueD1yLHQueT1pLHR9O3ByLnByb3RvdHlwZS5wcm9qZWN0UG9pbnRzVG9OZWFyZXN0T25QbGFuZT1mdW5jdGlvbihlLHQpe2codCl8fCh0PVtdKTtsZXQgbj1lLmxlbmd0aDt0Lmxlbmd0aD1uO2ZvcihsZXQgbz0wO288bjtvKyspdFtvXT10aGlzLnByb2plY3RQb2ludFRvTmVhcmVzdE9uUGxhbmUoZVtvXSx0W29dKTtyZXR1cm4gdH07UlA9bmV3IHM7cHIucHJvdG90eXBlLnByb2plY3RQb2ludE9udG9FbGxpcHNvaWQ9ZnVuY3Rpb24oZSx0KXtnKHQpfHwodD1uZXcgcyk7bGV0IG49dGhpcy5fZWxsaXBzb2lkLG89dGhpcy5fb3JpZ2luLGE9dGhpcy5feEF4aXMscj10aGlzLl95QXhpcyxpPVJQO3JldHVybiBzLm11bHRpcGx5QnlTY2FsYXIoYSxlLngsaSksdD1zLmFkZChvLGksdCkscy5tdWx0aXBseUJ5U2NhbGFyKHIsZS55LGkpLHMuYWRkKHQsaSx0KSxuLnNjYWxlVG9HZW9jZW50cmljU3VyZmFjZSh0LHQpLHR9O3ByLnByb3RvdHlwZS5wcm9qZWN0UG9pbnRzT250b0VsbGlwc29pZD1mdW5jdGlvbihlLHQpe2xldCBuPWUubGVuZ3RoO2codCk/dC5sZW5ndGg9bjp0PW5ldyBBcnJheShuKTtmb3IobGV0IG89MDtvPG47KytvKXRbb109dGhpcy5wcm9qZWN0UG9pbnRPbnRvRWxsaXBzb2lkKGVbb10sdFtvXSk7cmV0dXJuIHR9O3hvPXByfSk7ZnVuY3Rpb24gVXQoZSx0KXt0aGlzLmNlbnRlcj1zLmNsb25lKGU/P3MuWkVSTyksdGhpcy5oYWxmQXhlcz1KLmNsb25lKHQ/P0ouWkVSTyl9ZnVuY3Rpb24gSVQoZSx0LG4sbyxhLHIsaSxmLGQsYyx1KXtnKHUpfHwodT1uZXcgVXQpO2xldCBsPXUuaGFsZkF4ZXM7Si5zZXRDb2x1bW4obCwwLHQsbCksSi5zZXRDb2x1bW4obCwxLG4sbCksSi5zZXRDb2x1bW4obCwyLG8sbCk7bGV0IGg9RFQ7aC54PShhK3IpLzIsaC55PShpK2YpLzIsaC56PShkK2MpLzI7bGV0IG09a1A7bS54PShyLWEpLzIsbS55PShmLWkpLzIsbS56PShjLWQpLzI7bGV0IGI9dS5jZW50ZXI7cmV0dXJuIGg9Si5tdWx0aXBseUJ5VmVjdG9yKGwsaCxoKSxzLmFkZChlLGgsYiksSi5tdWx0aXBseUJ5U2NhbGUobCxtLGwpLHV9dmFyIHhQLE9QLFNQLENQLE1QLE5QLElQLFBQLERULGtQLFBULHZQLEZQLERQLEJQLFVQLExQLGpQLGtULHpQLHZULEdQLFZQLEhQLEtQLHFQLFdQLFhQLFlQLEpQLFpQLFFQLCRQLGUzLHQzLG4zLEJULFVULExULG8zLEZULGEzLHIzLGkzLGMzLHMzLGYzLGQzLHUzLHluLHdpPVgoKCk9PntNdCgpO2p0KCk7SWUoKTtUdCgpO3NlKCk7V2UoKTtwcygpO1ppKCk7bGYoKTtHZSgpO0RuKCk7cG4oKTtnaSgpO19uKCk7VXQucGFja2VkTGVuZ3RoPXMucGFja2VkTGVuZ3RoK0oucGFja2VkTGVuZ3RoO1V0LnBhY2s9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBuPW4/PzAscy5wYWNrKGUuY2VudGVyLHQsbiksSi5wYWNrKGUuaGFsZkF4ZXMsdCxuK3MucGFja2VkTGVuZ3RoKSx0fTtVdC51bnBhY2s9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB0PXQ/PzAsZyhuKXx8KG49bmV3IFV0KSxzLnVucGFjayhlLHQsbi5jZW50ZXIpLEoudW5wYWNrKGUsdCtzLnBhY2tlZExlbmd0aCxuLmhhbGZBeGVzKSxufTt4UD1uZXcgcyxPUD1uZXcgcyxTUD1uZXcgcyxDUD1uZXcgcyxNUD1uZXcgcyxOUD1uZXcgcyxJUD1uZXcgSixQUD17dW5pdGFyeTpuZXcgSixkaWFnb25hbDpuZXcgSn07VXQuZnJvbVBvaW50cz1mdW5jdGlvbihlLHQpe2lmKGcodCl8fCh0PW5ldyBVdCksIWcoZSl8fGUubGVuZ3RoPT09MClyZXR1cm4gdC5oYWxmQXhlcz1KLlpFUk8sdC5jZW50ZXI9cy5aRVJPLHQ7bGV0IG4sbz1lLmxlbmd0aCxhPXMuY2xvbmUoZVswXSx4UCk7Zm9yKG49MTtuPG87bisrKXMuYWRkKGEsZVtuXSxhKTtsZXQgcj0xL287cy5tdWx0aXBseUJ5U2NhbGFyKGEscixhKTtsZXQgaT0wLGY9MCxkPTAsYz0wLHU9MCxsPTAsaDtmb3Iobj0wO248bztuKyspaD1zLnN1YnRyYWN0KGVbbl0sYSxPUCksaSs9aC54KmgueCxmKz1oLngqaC55LGQrPWgueCpoLnosYys9aC55KmgueSx1Kz1oLnkqaC56LGwrPWgueipoLno7aSo9cixmKj1yLGQqPXIsYyo9cix1Kj1yLGwqPXI7bGV0IG09SVA7bVswXT1pLG1bMV09ZixtWzJdPWQsbVszXT1mLG1bNF09YyxtWzVdPXUsbVs2XT1kLG1bN109dSxtWzhdPWw7bGV0IGI9Si5jb21wdXRlRWlnZW5EZWNvbXBvc2l0aW9uKG0sUFApLHA9Si5jbG9uZShiLnVuaXRhcnksdC5oYWxmQXhlcykseT1KLmdldENvbHVtbihwLDAsQ1ApLFQ9Si5nZXRDb2x1bW4ocCwxLE1QKSxfPUouZ2V0Q29sdW1uKHAsMixOUCksRT0tTnVtYmVyLk1BWF9WQUxVRSx3PS1OdW1iZXIuTUFYX1ZBTFVFLFI9LU51bWJlci5NQVhfVkFMVUUsUz1OdW1iZXIuTUFYX1ZBTFVFLEM9TnVtYmVyLk1BWF9WQUxVRSxJPU51bWJlci5NQVhfVkFMVUU7Zm9yKG49MDtuPG87bisrKWg9ZVtuXSxFPU1hdGgubWF4KHMuZG90KHksaCksRSksdz1NYXRoLm1heChzLmRvdChULGgpLHcpLFI9TWF0aC5tYXgocy5kb3QoXyxoKSxSKSxTPU1hdGgubWluKHMuZG90KHksaCksUyksQz1NYXRoLm1pbihzLmRvdChULGgpLEMpLEk9TWF0aC5taW4ocy5kb3QoXyxoKSxJKTt5PXMubXVsdGlwbHlCeVNjYWxhcih5LC41KihTK0UpLHkpLFQ9cy5tdWx0aXBseUJ5U2NhbGFyKFQsLjUqKEMrdyksVCksXz1zLm11bHRpcGx5QnlTY2FsYXIoXywuNSooSStSKSxfKTtsZXQgTj1zLmFkZCh5LFQsdC5jZW50ZXIpO3MuYWRkKE4sXyxOKTtsZXQgUD1TUDtyZXR1cm4gUC54PUUtUyxQLnk9dy1DLFAuej1SLUkscy5tdWx0aXBseUJ5U2NhbGFyKFAsLjUsUCksSi5tdWx0aXBseUJ5U2NhbGUodC5oYWxmQXhlcyxQLHQuaGFsZkF4ZXMpLHR9O0RUPW5ldyBzLGtQPW5ldyBzO1BUPW5ldyByZSx2UD1uZXcgcyxGUD1uZXcgcmUsRFA9bmV3IHJlLEJQPW5ldyByZSxVUD1uZXcgcmUsTFA9bmV3IHJlLGpQPW5ldyBzLGtUPW5ldyBzLHpQPW5ldyBzLHZUPW5ldyBzLEdQPW5ldyBzLFZQPW5ldyBZLEhQPW5ldyBZLEtQPW5ldyBZLHFQPW5ldyBZLFdQPW5ldyBZLFhQPW5ldyBzLFlQPW5ldyBzLEpQPW5ldyBzLFpQPW5ldyBzLFFQPW5ldyBZLCRQPW5ldyBzLGUzPW5ldyBzLHQzPW5ldyBzLG4zPW5ldyBzbihzLlVOSVRfWCwwKTtVdC5mcm9tUmVjdGFuZ2xlPWZ1bmN0aW9uKGUsdCxuLG8sYSl7dD10Pz8wLG49bj8/MCxvPW8/P3EuZGVmYXVsdDtsZXQgcixpLGYsZCxjLHUsbDtpZihlLndpZHRoPD1rLlBJKXtsZXQgQz1TZS5jZW50ZXIoZSxQVCksST1vLmNhcnRvZ3JhcGhpY1RvQ2FydGVzaWFuKEMsdlApLE49bmV3IHhvKEksbyk7bD1OLnBsYW5lO2xldCBQPUMubG9uZ2l0dWRlLEY9ZS5zb3V0aDwwJiZlLm5vcnRoPjA/MDpDLmxhdGl0dWRlLEE9cmUuZnJvbVJhZGlhbnMoUCxlLm5vcnRoLG4sRlApLHg9cmUuZnJvbVJhZGlhbnMoZS53ZXN0LGUubm9ydGgsbixEUCksTT1yZS5mcm9tUmFkaWFucyhlLndlc3QsRixuLEJQKSx2PXJlLmZyb21SYWRpYW5zKGUud2VzdCxlLnNvdXRoLG4sVVApLFU9cmUuZnJvbVJhZGlhbnMoUCxlLnNvdXRoLG4sTFApLHo9by5jYXJ0b2dyYXBoaWNUb0NhcnRlc2lhbihBLGpQKSxEPW8uY2FydG9ncmFwaGljVG9DYXJ0ZXNpYW4oeCxrVCksRz1vLmNhcnRvZ3JhcGhpY1RvQ2FydGVzaWFuKE0selApLEg9by5jYXJ0b2dyYXBoaWNUb0NhcnRlc2lhbih2LHZUKSxPPW8uY2FydG9ncmFwaGljVG9DYXJ0ZXNpYW4oVSxHUCksWj1OLnByb2plY3RQb2ludFRvTmVhcmVzdE9uUGxhbmUoeixWUCksb2U9Ti5wcm9qZWN0UG9pbnRUb05lYXJlc3RPblBsYW5lKEQsSFApLGNlPU4ucHJvamVjdFBvaW50VG9OZWFyZXN0T25QbGFuZShHLEtQKSxmZT1OLnByb2plY3RQb2ludFRvTmVhcmVzdE9uUGxhbmUoSCxxUCksZWU9Ti5wcm9qZWN0UG9pbnRUb05lYXJlc3RPblBsYW5lKE8sV1ApO3JldHVybiByPU1hdGgubWluKG9lLngsY2UueCxmZS54KSxpPS1yLGQ9TWF0aC5tYXgob2UueSxaLnkpLGY9TWF0aC5taW4oZmUueSxlZS55KSx4LmhlaWdodD12LmhlaWdodD10LEQ9by5jYXJ0b2dyYXBoaWNUb0NhcnRlc2lhbih4LGtUKSxIPW8uY2FydG9ncmFwaGljVG9DYXJ0ZXNpYW4odix2VCksYz1NYXRoLm1pbihzbi5nZXRQb2ludERpc3RhbmNlKGwsRCksc24uZ2V0UG9pbnREaXN0YW5jZShsLEgpKSx1PW4sSVQoTi5vcmlnaW4sTi54QXhpcyxOLnlBeGlzLE4uekF4aXMscixpLGYsZCxjLHUsYSl9bGV0IGg9ZS5zb3V0aD4wLG09ZS5ub3J0aDwwLGI9aD9lLnNvdXRoOm0/ZS5ub3J0aDowLHA9U2UuY2VudGVyKGUsUFQpLmxvbmdpdHVkZSx5PXMuZnJvbVJhZGlhbnMocCxiLG4sbyxYUCk7eS56PTA7bGV0IF89TWF0aC5hYnMoeS54KTxrLkVQU0lMT04xMCYmTWF0aC5hYnMoeS55KTxrLkVQU0lMT04xMD9zLlVOSVRfWDpzLm5vcm1hbGl6ZSh5LFlQKSxFPXMuVU5JVF9aLHc9cy5jcm9zcyhfLEUsSlApO2w9c24uZnJvbVBvaW50Tm9ybWFsKHksXyxuMyk7bGV0IFI9cy5mcm9tUmFkaWFucyhwK2suUElfT1ZFUl9UV08sYixuLG8sWlApO2k9cy5kb3Qoc24ucHJvamVjdFBvaW50T250b1BsYW5lKGwsUixRUCksdykscj0taSxkPXMuZnJvbVJhZGlhbnMoMCxlLm5vcnRoLG0/dDpuLG8sJFApLnosZj1zLmZyb21SYWRpYW5zKDAsZS5zb3V0aCxoP3Q6bixvLGUzKS56O2xldCBTPXMuZnJvbVJhZGlhbnMoZS5lYXN0LGIsbixvLHQzKTtyZXR1cm4gYz1zbi5nZXRQb2ludERpc3RhbmNlKGwsUyksdT0wLElUKHksdyxFLF8scixpLGYsZCxjLHUsYSl9O1V0LmZyb21UcmFuc2Zvcm1hdGlvbj1mdW5jdGlvbihlLHQpe3JldHVybiBnKHQpfHwodD1uZXcgVXQpLHQuY2VudGVyPSQuZ2V0VHJhbnNsYXRpb24oZSx0LmNlbnRlciksdC5oYWxmQXhlcz0kLmdldE1hdHJpeDMoZSx0LmhhbGZBeGVzKSx0LmhhbGZBeGVzPUoubXVsdGlwbHlCeVNjYWxhcih0LmhhbGZBeGVzLC41LHQuaGFsZkF4ZXMpLHR9O1V0LmNsb25lPWZ1bmN0aW9uKGUsdCl7aWYoZyhlKSlyZXR1cm4gZyh0KT8ocy5jbG9uZShlLmNlbnRlcix0LmNlbnRlciksSi5jbG9uZShlLmhhbGZBeGVzLHQuaGFsZkF4ZXMpLHQpOm5ldyBVdChlLmNlbnRlcixlLmhhbGZBeGVzKX07VXQuaW50ZXJzZWN0UGxhbmU9ZnVuY3Rpb24oZSx0KXtsZXQgbj1lLmNlbnRlcixvPXQubm9ybWFsLGE9ZS5oYWxmQXhlcyxyPW8ueCxpPW8ueSxmPW8ueixkPU1hdGguYWJzKHIqYVtKLkNPTFVNTjBST1cwXStpKmFbSi5DT0xVTU4wUk9XMV0rZiphW0ouQ09MVU1OMFJPVzJdKStNYXRoLmFicyhyKmFbSi5DT0xVTU4xUk9XMF0raSphW0ouQ09MVU1OMVJPVzFdK2YqYVtKLkNPTFVNTjFST1cyXSkrTWF0aC5hYnMociphW0ouQ09MVU1OMlJPVzBdK2kqYVtKLkNPTFVNTjJST1cxXStmKmFbSi5DT0xVTU4yUk9XMl0pLGM9cy5kb3QobyxuKSt0LmRpc3RhbmNlO3JldHVybiBjPD0tZD9Tbi5PVVRTSURFOmM+PWQ/U24uSU5TSURFOlNuLklOVEVSU0VDVElOR307QlQ9bmV3IHMsVVQ9bmV3IHMsTFQ9bmV3IHMsbzM9bmV3IHMsRlQ9bmV3IHMsYTM9bmV3IHM7VXQuZGlzdGFuY2VTcXVhcmVkVG89ZnVuY3Rpb24oZSx0KXtsZXQgbj1zLnN1YnRyYWN0KHQsZS5jZW50ZXIsRFQpLG89ZS5oYWxmQXhlcyxhPUouZ2V0Q29sdW1uKG8sMCxCVCkscj1KLmdldENvbHVtbihvLDEsVVQpLGk9Si5nZXRDb2x1bW4obywyLExUKSxmPXMubWFnbml0dWRlKGEpLGQ9cy5tYWduaXR1ZGUociksYz1zLm1hZ25pdHVkZShpKSx1PSEwLGw9ITAsaD0hMDtmPjA/cy5kaXZpZGVCeVNjYWxhcihhLGYsYSk6dT0hMSxkPjA/cy5kaXZpZGVCeVNjYWxhcihyLGQscik6bD0hMSxjPjA/cy5kaXZpZGVCeVNjYWxhcihpLGMsaSk6aD0hMTtsZXQgbT0hdSshbCshaCxiLHAseTtpZihtPT09MSl7bGV0IHc9YTtiPXIscD1pLGw/aHx8KHc9aSxwPWEpOih3PXIsYj1hKSx5PXMuY3Jvc3MoYixwLEZUKSx3PT09YT9hPXk6dz09PXI/cj15Onc9PT1pJiYoaT15KX1lbHNlIGlmKG09PT0yKXtiPWEsbD9iPXI6aCYmKGI9aSk7bGV0IHc9cy5VTklUX1k7dy5lcXVhbHNFcHNpbG9uKGIsay5FUFNJTE9OMykmJih3PXMuVU5JVF9YKSxwPXMuY3Jvc3MoYix3LG8zKSxzLm5vcm1hbGl6ZShwLHApLHk9cy5jcm9zcyhiLHAsRlQpLHMubm9ybWFsaXplKHkseSksYj09PWE/KHI9cCxpPXkpOmI9PT1yPyhpPXAsYT15KTpiPT09aSYmKGE9cCxyPXkpfWVsc2UgbT09PTMmJihhPXMuVU5JVF9YLHI9cy5VTklUX1ksaT1zLlVOSVRfWik7bGV0IFQ9YTM7VC54PXMuZG90KG4sYSksVC55PXMuZG90KG4sciksVC56PXMuZG90KG4saSk7bGV0IF89MCxFO3JldHVybiBULng8LWY/KEU9VC54K2YsXys9RSpFKTpULng+ZiYmKEU9VC54LWYsXys9RSpFKSxULnk8LWQ/KEU9VC55K2QsXys9RSpFKTpULnk+ZCYmKEU9VC55LWQsXys9RSpFKSxULno8LWM/KEU9VC56K2MsXys9RSpFKTpULno+YyYmKEU9VC56LWMsXys9RSpFKSxffTtyMz1uZXcgcyxpMz1uZXcgcztVdC5jb21wdXRlUGxhbmVEaXN0YW5jZXM9ZnVuY3Rpb24oZSx0LG4sbyl7ZyhvKXx8KG89bmV3IFRvKTtsZXQgYT1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkscj1OdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFksaT1lLmNlbnRlcixmPWUuaGFsZkF4ZXMsZD1KLmdldENvbHVtbihmLDAsQlQpLGM9Si5nZXRDb2x1bW4oZiwxLFVUKSx1PUouZ2V0Q29sdW1uKGYsMixMVCksbD1zLmFkZChkLGMscjMpO3MuYWRkKGwsdSxsKSxzLmFkZChsLGksbCk7bGV0IGg9cy5zdWJ0cmFjdChsLHQsaTMpLG09cy5kb3QobixoKTtyZXR1cm4gYT1NYXRoLm1pbihtLGEpLHI9TWF0aC5tYXgobSxyKSxzLmFkZChpLGQsbCkscy5hZGQobCxjLGwpLHMuc3VidHJhY3QobCx1LGwpLHMuc3VidHJhY3QobCx0LGgpLG09cy5kb3QobixoKSxhPU1hdGgubWluKG0sYSkscj1NYXRoLm1heChtLHIpLHMuYWRkKGksZCxsKSxzLnN1YnRyYWN0KGwsYyxsKSxzLmFkZChsLHUsbCkscy5zdWJ0cmFjdChsLHQsaCksbT1zLmRvdChuLGgpLGE9TWF0aC5taW4obSxhKSxyPU1hdGgubWF4KG0scikscy5hZGQoaSxkLGwpLHMuc3VidHJhY3QobCxjLGwpLHMuc3VidHJhY3QobCx1LGwpLHMuc3VidHJhY3QobCx0LGgpLG09cy5kb3QobixoKSxhPU1hdGgubWluKG0sYSkscj1NYXRoLm1heChtLHIpLHMuc3VidHJhY3QoaSxkLGwpLHMuYWRkKGwsYyxsKSxzLmFkZChsLHUsbCkscy5zdWJ0cmFjdChsLHQsaCksbT1zLmRvdChuLGgpLGE9TWF0aC5taW4obSxhKSxyPU1hdGgubWF4KG0scikscy5zdWJ0cmFjdChpLGQsbCkscy5hZGQobCxjLGwpLHMuc3VidHJhY3QobCx1LGwpLHMuc3VidHJhY3QobCx0LGgpLG09cy5kb3QobixoKSxhPU1hdGgubWluKG0sYSkscj1NYXRoLm1heChtLHIpLHMuc3VidHJhY3QoaSxkLGwpLHMuc3VidHJhY3QobCxjLGwpLHMuYWRkKGwsdSxsKSxzLnN1YnRyYWN0KGwsdCxoKSxtPXMuZG90KG4saCksYT1NYXRoLm1pbihtLGEpLHI9TWF0aC5tYXgobSxyKSxzLnN1YnRyYWN0KGksZCxsKSxzLnN1YnRyYWN0KGwsYyxsKSxzLnN1YnRyYWN0KGwsdSxsKSxzLnN1YnRyYWN0KGwsdCxoKSxtPXMuZG90KG4saCksYT1NYXRoLm1pbihtLGEpLHI9TWF0aC5tYXgobSxyKSxvLnN0YXJ0PWEsby5zdG9wPXIsb307YzM9bmV3IHMsczM9bmV3IHMsZjM9bmV3IHM7VXQuY29tcHV0ZUNvcm5lcnM9ZnVuY3Rpb24oZSx0KXtnKHQpfHwodD1bbmV3IHMsbmV3IHMsbmV3IHMsbmV3IHMsbmV3IHMsbmV3IHMsbmV3IHMsbmV3IHNdKTtsZXQgbj1lLmNlbnRlcixvPWUuaGFsZkF4ZXMsYT1KLmdldENvbHVtbihvLDAsYzMpLHI9Si5nZXRDb2x1bW4obywxLHMzKSxpPUouZ2V0Q29sdW1uKG8sMixmMyk7cmV0dXJuIHMuY2xvbmUobix0WzBdKSxzLnN1YnRyYWN0KHRbMF0sYSx0WzBdKSxzLnN1YnRyYWN0KHRbMF0scix0WzBdKSxzLnN1YnRyYWN0KHRbMF0saSx0WzBdKSxzLmNsb25lKG4sdFsxXSkscy5zdWJ0cmFjdCh0WzFdLGEsdFsxXSkscy5zdWJ0cmFjdCh0WzFdLHIsdFsxXSkscy5hZGQodFsxXSxpLHRbMV0pLHMuY2xvbmUobix0WzJdKSxzLnN1YnRyYWN0KHRbMl0sYSx0WzJdKSxzLmFkZCh0WzJdLHIsdFsyXSkscy5zdWJ0cmFjdCh0WzJdLGksdFsyXSkscy5jbG9uZShuLHRbM10pLHMuc3VidHJhY3QodFszXSxhLHRbM10pLHMuYWRkKHRbM10scix0WzNdKSxzLmFkZCh0WzNdLGksdFszXSkscy5jbG9uZShuLHRbNF0pLHMuYWRkKHRbNF0sYSx0WzRdKSxzLnN1YnRyYWN0KHRbNF0scix0WzRdKSxzLnN1YnRyYWN0KHRbNF0saSx0WzRdKSxzLmNsb25lKG4sdFs1XSkscy5hZGQodFs1XSxhLHRbNV0pLHMuc3VidHJhY3QodFs1XSxyLHRbNV0pLHMuYWRkKHRbNV0saSx0WzVdKSxzLmNsb25lKG4sdFs2XSkscy5hZGQodFs2XSxhLHRbNl0pLHMuYWRkKHRbNl0scix0WzZdKSxzLnN1YnRyYWN0KHRbNl0saSx0WzZdKSxzLmNsb25lKG4sdFs3XSkscy5hZGQodFs3XSxhLHRbN10pLHMuYWRkKHRbN10scix0WzddKSxzLmFkZCh0WzddLGksdFs3XSksdH07ZDM9bmV3IEo7VXQuY29tcHV0ZVRyYW5zZm9ybWF0aW9uPWZ1bmN0aW9uKGUsdCl7Zyh0KXx8KHQ9bmV3ICQpO2xldCBuPWUuY2VudGVyLG89Si5tdWx0aXBseUJ5VW5pZm9ybVNjYWxlKGUuaGFsZkF4ZXMsMixkMyk7cmV0dXJuICQuZnJvbVJvdGF0aW9uVHJhbnNsYXRpb24obyxuLHQpfTt1Mz1uZXcgZ2U7VXQuaXNPY2NsdWRlZD1mdW5jdGlvbihlLHQpe2xldCBuPWdlLmZyb21PcmllbnRlZEJvdW5kaW5nQm94KGUsdTMpO3JldHVybiF0LmlzQm91bmRpbmdTcGhlcmVWaXNpYmxlKG4pfTtVdC5wcm90b3R5cGUuaW50ZXJzZWN0UGxhbmU9ZnVuY3Rpb24oZSl7cmV0dXJuIFV0LmludGVyc2VjdFBsYW5lKHRoaXMsZSl9O1V0LnByb3RvdHlwZS5kaXN0YW5jZVNxdWFyZWRUbz1mdW5jdGlvbihlKXtyZXR1cm4gVXQuZGlzdGFuY2VTcXVhcmVkVG8odGhpcyxlKX07VXQucHJvdG90eXBlLmNvbXB1dGVQbGFuZURpc3RhbmNlcz1mdW5jdGlvbihlLHQsbil7cmV0dXJuIFV0LmNvbXB1dGVQbGFuZURpc3RhbmNlcyh0aGlzLGUsdCxuKX07VXQucHJvdG90eXBlLmNvbXB1dGVDb3JuZXJzPWZ1bmN0aW9uKGUpe3JldHVybiBVdC5jb21wdXRlQ29ybmVycyh0aGlzLGUpfTtVdC5wcm90b3R5cGUuY29tcHV0ZVRyYW5zZm9ybWF0aW9uPWZ1bmN0aW9uKGUpe3JldHVybiBVdC5jb21wdXRlVHJhbnNmb3JtYXRpb24odGhpcyxlKX07VXQucHJvdG90eXBlLmlzT2NjbHVkZWQ9ZnVuY3Rpb24oZSl7cmV0dXJuIFV0LmlzT2NjbHVkZWQodGhpcyxlKX07VXQuZXF1YWxzPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU9PT10fHxnKGUpJiZnKHQpJiZzLmVxdWFscyhlLmNlbnRlcix0LmNlbnRlcikmJkouZXF1YWxzKGUuaGFsZkF4ZXMsdC5oYWxmQXhlcyl9O1V0LnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbihlKXtyZXR1cm4gVXQuY2xvbmUodGhpcyxlKX07VXQucHJvdG90eXBlLmVxdWFscz1mdW5jdGlvbihlKXtyZXR1cm4gVXQuZXF1YWxzKHRoaXMsZSl9O3luPVV0fSk7ZnVuY3Rpb24gSFQoZSx0LG4sbyxhKXtsZXQgcj1zLnN1YnRyYWN0KGUsdCxsMyksaT1zLmRvdChuLHIpLGY9cy5kb3QobyxyKTtyZXR1cm4gWS5mcm9tRWxlbWVudHMoaSxmLGEpfXZhciBCZixsMyxqVCx6VCxHVCxWVCxncyxZcD1YKCgpPT57anQoKTtJZSgpO0RuKCk7d2koKTtCZj17fSxsMz1uZXcgcyxqVD1uZXcgcyx6VD1uZXcgcyxHVD1uZXcgcyxWVD1uZXcgeW47QmYudmFsaWRPdXRsaW5lPWZ1bmN0aW9uKGUpe2xldCBuPXluLmZyb21Qb2ludHMoZSxWVCkuaGFsZkF4ZXMsbz1KLmdldENvbHVtbihuLDAsalQpLGE9Si5nZXRDb2x1bW4obiwxLHpUKSxyPUouZ2V0Q29sdW1uKG4sMixHVCksaT1zLm1hZ25pdHVkZShvKSxmPXMubWFnbml0dWRlKGEpLGQ9cy5tYWduaXR1ZGUocik7cmV0dXJuIShpPT09MCYmKGY9PT0wfHxkPT09MCl8fGY9PT0wJiZkPT09MCl9O0JmLmNvbXB1dGVQcm9qZWN0VG8yREFyZ3VtZW50cz1mdW5jdGlvbihlLHQsbixvKXtsZXQgYT15bi5mcm9tUG9pbnRzKGUsVlQpLHI9YS5oYWxmQXhlcyxpPUouZ2V0Q29sdW1uKHIsMCxqVCksZj1KLmdldENvbHVtbihyLDEselQpLGQ9Si5nZXRDb2x1bW4ociwyLEdUKSxjPXMubWFnbml0dWRlKGkpLHU9cy5tYWduaXR1ZGUoZiksbD1zLm1hZ25pdHVkZShkKSxoPU1hdGgubWluKGMsdSxsKTtpZihjPT09MCYmKHU9PT0wfHxsPT09MCl8fHU9PT0wJiZsPT09MClyZXR1cm4hMTtsZXQgbSxiO3JldHVybihoPT09dXx8aD09PWwpJiYobT1pKSxoPT09Yz9tPWY6aD09PWwmJihiPWYpLChoPT09Y3x8aD09PXUpJiYoYj1kKSxzLm5vcm1hbGl6ZShtLG4pLHMubm9ybWFsaXplKGIsbykscy5jbG9uZShhLmNlbnRlcix0KSwhMH07QmYuY3JlYXRlUHJvamVjdFBvaW50c1RvMkRGdW5jdGlvbj1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGZ1bmN0aW9uKG8pe2xldCBhPW5ldyBBcnJheShvLmxlbmd0aCk7Zm9yKGxldCByPTA7cjxvLmxlbmd0aDtyKyspYVtyXT1IVChvW3JdLGUsdCxuKTtyZXR1cm4gYX19O0JmLmNyZWF0ZVByb2plY3RQb2ludFRvMkRGdW5jdGlvbj1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGZ1bmN0aW9uKG8sYSl7cmV0dXJuIEhUKG8sZSx0LG4sYSl9fTtncz1CZn0pO3ZhciBoMyx3dCxoYz1YKCgpPT57aDM9e05PTkU6MCxHRU9ERVNJQzoxLFJIVU1COjJ9LHd0PU9iamVjdC5mcmVlemUoaDMpfSk7ZnVuY3Rpb24gWnAoZSx0LG4pe2lmKGU9PT0wKXJldHVybiB0Km47bGV0IG89ZSplLGE9bypvLHI9YSpvLGk9cipvLGY9aSpvLGQ9ZipvLGM9bix1PU1hdGguc2luKDIqYyksbD1NYXRoLnNpbig0KmMpLGg9TWF0aC5zaW4oNipjKSxtPU1hdGguc2luKDgqYyksYj1NYXRoLnNpbigxMCpjKSxwPU1hdGguc2luKDEyKmMpO3JldHVybiB0KigoMS1vLzQtMyphLzY0LTUqci8yNTYtMTc1KmkvMTYzODQtNDQxKmYvNjU1MzYtNDg1MSpkLzEwNDg1NzYpKmMtKDMqby84KzMqYS8zMis0NSpyLzEwMjQrMTA1KmkvNDA5NisyMjA1KmYvMTMxMDcyKzYyMzcqZC81MjQyODgpKnUrKDE1KmEvMjU2KzQ1KnIvMTAyNCs1MjUqaS8xNjM4NCsxNTc1KmYvNjU1MzYrMTU1OTI1KmQvODM4ODYwOCkqbC0oMzUqci8zMDcyKzE3NSppLzEyMjg4KzM2NzUqZi8yNjIxNDQrMTM0NzUqZC8xMDQ4NTc2KSpoKygzMTUqaS8xMzEwNzIrMjIwNSpmLzUyNDI4OCs0MzY1OSpkLzgzODg2MDgpKm0tKDY5MypmLzEzMTA3MjArNjIzNypkLzUyNDI4ODApKmIrMTAwMSpkLzgzODg2MDgqcCl9ZnVuY3Rpb24gbTMoZSx0LG4pe2xldCBvPWUvbjtpZih0PT09MClyZXR1cm4gbztsZXQgYT1vKm8scj1hKm8saT1yKm8sZj10LGQ9ZipmLGM9ZCpkLHU9YypkLGw9dSpkLGg9bCpkLG09aCpkLGI9TWF0aC5zaW4oMipvKSxwPU1hdGguY29zKDIqbykseT1NYXRoLnNpbig0Km8pLFQ9TWF0aC5jb3MoNCpvKSxfPU1hdGguc2luKDYqbyksRT1NYXRoLmNvcyg2Km8pLHc9TWF0aC5zaW4oOCpvKSxSPU1hdGguY29zKDgqbyksUz1NYXRoLnNpbigxMCpvKSxDPU1hdGguY29zKDEwKm8pLEk9TWF0aC5zaW4oMTIqbyk7cmV0dXJuIG8rbypkLzQrNypvKmMvNjQrMTUqbyp1LzI1Nis1NzkqbypsLzE2Mzg0KzE1MTUqbypoLzY1NTM2KzE2ODM3Km8qbS8xMDQ4NTc2KygzKm8qYy8xNis0NSpvKnUvMjU2LW8qKDMyKmEtNTYxKSpsLzQwOTYtbyooMjMyKmEtMTY3NykqaC8xNjM4NCtvKigzOTk5ODUtOTA1NjAqYSs1MTIqaSkqbS81MjQyODgwKSpwKygyMSpvKnUvMjU2KzQ4MypvKmwvNDA5Ni1vKigyMjQqYS0xOTY5KSpoLzE2Mzg0LW8qKDMzMTUyKmEtMTEyNTk5KSptLzEwNDg1NzYpKlQrKDE1MSpvKmwvNDA5Nis0NjgxKm8qaC82NTUzNisxNDc5Km8qbS8xNjM4NC00NTMqciptLzMyNzY4KSpFKygxMDk3Km8qaC82NTUzNis0Mjc4MypvKm0vMTA0ODU3NikqUis4MDExKm8qbS8xMDQ4NTc2KkMrKDMqZC84KzMqYy8xNisyMTMqdS8yMDQ4LTMqYSp1LzY0KzI1NSpsLzQwOTYtMzMqYSpsLzUxMisyMDg2MSpoLzUyNDI4OC0zMyphKmgvNTEyK2kqaC8xMDI0KzI4MjczKm0vMTA0ODU3Ni00NzEqYSptLzgxOTIrOSppKm0vNDA5NikqYisoMjEqYy8yNTYrMjEqdS8yNTYrNTMzKmwvODE5Mi0yMSphKmwvNTEyKzE5NypoLzQwOTYtMzE1KmEqaC80MDk2KzU4NDAzOSptLzE2Nzc3MjE2LTEyNTE3KmEqbS8xMzEwNzIrNyppKm0vMjA0OCkqeSsoMTUxKnUvNjE0NCsxNTEqbC80MDk2KzUwMTkqaC8xMzEwNzItNDUzKmEqaC8xNjM4NCsyNjk2NSptLzc4NjQzMi04NjA3KmEqbS8xMzEwNzIpKl8rKDEwOTcqbC8xMzEwNzIrMTA5NypoLzY1NTM2KzIyNTc5NyptLzEwNDg1NzYwLTEwOTcqYSptLzY1NTM2KSp3Kyg4MDExKmgvMjYyMTQ0MCs4MDExKm0vMTA0ODU3NikqUysyOTMzOTMqbS8yNTE2NTgyNDAqSX1mdW5jdGlvbiBfcyhlLHQpe2lmKGU9PT0wKXJldHVybiBNYXRoLmxvZyhNYXRoLnRhbiguNSooay5QSV9PVkVSX1RXTyt0KSkpO2xldCBuPWUqTWF0aC5zaW4odCk7cmV0dXJuIE1hdGgubG9nKE1hdGgudGFuKC41KihrLlBJX09WRVJfVFdPK3QpKSktZS8yKk1hdGgubG9nKCgxK24pLygxLW4pKX1mdW5jdGlvbiBiMyhlLHQsbixvLGEpe2xldCByPV9zKGUuX2VsbGlwdGljaXR5LG4pLGk9X3MoZS5fZWxsaXB0aWNpdHksYSk7cmV0dXJuIE1hdGguYXRhbjIoay5uZWdhdGl2ZVBpVG9QaShvLXQpLGktcil9ZnVuY3Rpb24gcDMoZSx0LG4sbyxhLHIsaSl7bGV0IGY9ZS5faGVhZGluZyxkPXItbyxjPTA7aWYoay5lcXVhbHNFcHNpbG9uKE1hdGguYWJzKGYpLGsuUElfT1ZFUl9UV08say5FUFNJTE9OOCkpaWYodD09PW4pYz10Kk1hdGguY29zKGEpKmsubmVnYXRpdmVQaVRvUGkoZCk7ZWxzZXtsZXQgdT1NYXRoLnNpbihhKTtjPXQqTWF0aC5jb3MoYSkqay5uZWdhdGl2ZVBpVG9QaShkKS9NYXRoLnNxcnQoMS1lLl9lbGxpcHRpY2l0eVNxdWFyZWQqdSp1KX1lbHNle2xldCB1PVpwKGUuX2VsbGlwdGljaXR5LHQsYSk7Yz0oWnAoZS5fZWxsaXB0aWNpdHksdCxpKS11KS9NYXRoLmNvcyhmKX1yZXR1cm4gTWF0aC5hYnMoYyl9ZnVuY3Rpb24gS1QoZSx0LG4sbyl7bGV0IGE9cy5ub3JtYWxpemUoby5jYXJ0b2dyYXBoaWNUb0NhcnRlc2lhbih0LEpwKSxnMykscj1zLm5vcm1hbGl6ZShvLmNhcnRvZ3JhcGhpY1RvQ2FydGVzaWFuKG4sSnApLEpwKSxpPW8ubWF4aW11bVJhZGl1cyxmPW8ubWluaW11bVJhZGl1cyxkPWkqaSxjPWYqZjtlLl9lbGxpcHRpY2l0eVNxdWFyZWQ9KGQtYykvZCxlLl9lbGxpcHRpY2l0eT1NYXRoLnNxcnQoZS5fZWxsaXB0aWNpdHlTcXVhcmVkKSxlLl9zdGFydD1yZS5jbG9uZSh0LGUuX3N0YXJ0KSxlLl9zdGFydC5oZWlnaHQ9MCxlLl9lbmQ9cmUuY2xvbmUobixlLl9lbmQpLGUuX2VuZC5oZWlnaHQ9MCxlLl9oZWFkaW5nPWIzKGUsdC5sb25naXR1ZGUsdC5sYXRpdHVkZSxuLmxvbmdpdHVkZSxuLmxhdGl0dWRlKSxlLl9kaXN0YW5jZT1wMyhlLG8ubWF4aW11bVJhZGl1cyxvLm1pbmltdW1SYWRpdXMsdC5sb25naXR1ZGUsdC5sYXRpdHVkZSxuLmxvbmdpdHVkZSxuLmxhdGl0dWRlKX1mdW5jdGlvbiBxVChlLHQsbixvLGEscil7aWYobj09PTApcmV0dXJuIHJlLmNsb25lKGUscik7bGV0IGk9YSphLGYsZCxjO2lmKE1hdGguYWJzKGsuUElfT1ZFUl9UV08tTWF0aC5hYnModCkpPmsuRVBTSUxPTjgpe2xldCB1PVpwKGEsbyxlLmxhdGl0dWRlKSxsPW4qTWF0aC5jb3ModCksaD11K2w7aWYoZD1tMyhoLGEsbyksTWF0aC5hYnModCk8ay5FUFNJTE9OMTApZj1rLm5lZ2F0aXZlUGlUb1BpKGUubG9uZ2l0dWRlKTtlbHNle2xldCBtPV9zKGEsZS5sYXRpdHVkZSksYj1fcyhhLGQpO2M9TWF0aC50YW4odCkqKGItbSksZj1rLm5lZ2F0aXZlUGlUb1BpKGUubG9uZ2l0dWRlK2MpfX1lbHNle2Q9ZS5sYXRpdHVkZTtsZXQgdTtpZihhPT09MCl1PW8qTWF0aC5jb3MoZS5sYXRpdHVkZSk7ZWxzZXtsZXQgbD1NYXRoLnNpbihlLmxhdGl0dWRlKTt1PW8qTWF0aC5jb3MoZS5sYXRpdHVkZSkvTWF0aC5zcXJ0KDEtaSpsKmwpfWM9bi91LHQ+MD9mPWsubmVnYXRpdmVQaVRvUGkoZS5sb25naXR1ZGUrYyk6Zj1rLm5lZ2F0aXZlUGlUb1BpKGUubG9uZ2l0dWRlLWMpfXJldHVybiBnKHIpPyhyLmxvbmdpdHVkZT1mLHIubGF0aXR1ZGU9ZCxyLmhlaWdodD0wLHIpOm5ldyByZShmLGQsMCl9ZnVuY3Rpb24gVnIoZSx0LG4pe2xldCBvPW4/P3EuZGVmYXVsdDt0aGlzLl9lbGxpcHNvaWQ9byx0aGlzLl9zdGFydD1uZXcgcmUsdGhpcy5fZW5kPW5ldyByZSx0aGlzLl9oZWFkaW5nPXZvaWQgMCx0aGlzLl9kaXN0YW5jZT12b2lkIDAsdGhpcy5fZWxsaXB0aWNpdHk9dm9pZCAwLHRoaXMuX2VsbGlwdGljaXR5U3F1YXJlZD12b2lkIDAsZyhlKSYmZyh0KSYmS1QodGhpcyxlLHQsbyl9dmFyIGczLEpwLGVhLFVmPVgoKCk9PntJZSgpO1R0KCk7c2UoKTtXZSgpO0dlKCk7ZzM9bmV3IHMsSnA9bmV3IHM7T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoVnIucHJvdG90eXBlLHtlbGxpcHNvaWQ6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9lbGxpcHNvaWR9fSxzdXJmYWNlRGlzdGFuY2U6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9kaXN0YW5jZX19LHN0YXJ0OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RhcnR9fSxlbmQ6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9lbmR9fSxoZWFkaW5nOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faGVhZGluZ319fSk7VnIuZnJvbVN0YXJ0SGVhZGluZ0Rpc3RhbmNlPWZ1bmN0aW9uKGUsdCxuLG8sYSl7bGV0IHI9bz8/cS5kZWZhdWx0LGk9ci5tYXhpbXVtUmFkaXVzLGY9ci5taW5pbXVtUmFkaXVzLGQ9aSppLGM9ZipmLHU9TWF0aC5zcXJ0KChkLWMpL2QpO3Q9ay5uZWdhdGl2ZVBpVG9QaSh0KTtsZXQgbD1xVChlLHQsbixyLm1heGltdW1SYWRpdXMsdSk7cmV0dXJuIWcoYSl8fGcobykmJiFvLmVxdWFscyhhLmVsbGlwc29pZCk/bmV3IFZyKGUsbCxyKTooYS5zZXRFbmRQb2ludHMoZSxsKSxhKX07VnIucHJvdG90eXBlLnNldEVuZFBvaW50cz1mdW5jdGlvbihlLHQpe0tUKHRoaXMsZSx0LHRoaXMuX2VsbGlwc29pZCl9O1ZyLnByb3RvdHlwZS5pbnRlcnBvbGF0ZVVzaW5nRnJhY3Rpb249ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5pbnRlcnBvbGF0ZVVzaW5nU3VyZmFjZURpc3RhbmNlKGUqdGhpcy5fZGlzdGFuY2UsdCl9O1ZyLnByb3RvdHlwZS5pbnRlcnBvbGF0ZVVzaW5nU3VyZmFjZURpc3RhbmNlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHFUKHRoaXMuX3N0YXJ0LHRoaXMuX2hlYWRpbmcsZSx0aGlzLl9lbGxpcHNvaWQubWF4aW11bVJhZGl1cyx0aGlzLl9lbGxpcHRpY2l0eSx0KX07VnIucHJvdG90eXBlLmZpbmRJbnRlcnNlY3Rpb25XaXRoTG9uZ2l0dWRlPWZ1bmN0aW9uKGUsdCl7bGV0IG49dGhpcy5fZWxsaXB0aWNpdHksbz10aGlzLl9oZWFkaW5nLGE9TWF0aC5hYnMobykscj10aGlzLl9zdGFydDtpZihlPWsubmVnYXRpdmVQaVRvUGkoZSksay5lcXVhbHNFcHNpbG9uKE1hdGguYWJzKGUpLE1hdGguUEksay5FUFNJTE9OMTQpJiYoZT1rLnNpZ24oci5sb25naXR1ZGUpKk1hdGguUEkpLGcodCl8fCh0PW5ldyByZSksTWF0aC5hYnMoay5QSV9PVkVSX1RXTy1hKTw9ay5FUFNJTE9OOClyZXR1cm4gdC5sb25naXR1ZGU9ZSx0LmxhdGl0dWRlPXIubGF0aXR1ZGUsdC5oZWlnaHQ9MCx0O2lmKGsuZXF1YWxzRXBzaWxvbihNYXRoLmFicyhrLlBJX09WRVJfVFdPLWEpLGsuUElfT1ZFUl9UV08say5FUFNJTE9OOCkpcmV0dXJuIGsuZXF1YWxzRXBzaWxvbihlLHIubG9uZ2l0dWRlLGsuRVBTSUxPTjEyKT92b2lkIDA6KHQubG9uZ2l0dWRlPWUsdC5sYXRpdHVkZT1rLlBJX09WRVJfVFdPKmsuc2lnbihrLlBJX09WRVJfVFdPLW8pLHQuaGVpZ2h0PTAsdCk7bGV0IGk9ci5sYXRpdHVkZSxmPW4qTWF0aC5zaW4oaSksZD1NYXRoLnRhbiguNSooay5QSV9PVkVSX1RXTytpKSkqTWF0aC5leHAoKGUtci5sb25naXR1ZGUpL01hdGgudGFuKG8pKSxjPSgxK2YpLygxLWYpLHU9ci5sYXRpdHVkZSxsO2Rve2w9dTtsZXQgaD1uKk1hdGguc2luKGwpLG09KDEraCkvKDEtaCk7dT0yKk1hdGguYXRhbihkKk1hdGgucG93KG0vYyxuLzIpKS1rLlBJX09WRVJfVFdPfXdoaWxlKCFrLmVxdWFsc0Vwc2lsb24odSxsLGsuRVBTSUxPTjEyKSk7cmV0dXJuIHQubG9uZ2l0dWRlPWUsdC5sYXRpdHVkZT11LHQuaGVpZ2h0PTAsdH07VnIucHJvdG90eXBlLmZpbmRJbnRlcnNlY3Rpb25XaXRoTGF0aXR1ZGU9ZnVuY3Rpb24oZSx0KXtsZXQgbj10aGlzLl9lbGxpcHRpY2l0eSxvPXRoaXMuX2hlYWRpbmcsYT10aGlzLl9zdGFydDtpZihrLmVxdWFsc0Vwc2lsb24oTWF0aC5hYnMobyksay5QSV9PVkVSX1RXTyxrLkVQU0lMT044KSlyZXR1cm47bGV0IHI9X3MobixhLmxhdGl0dWRlKSxpPV9zKG4sZSksZj1NYXRoLnRhbihvKSooaS1yKSxkPWsubmVnYXRpdmVQaVRvUGkoYS5sb25naXR1ZGUrZik7cmV0dXJuIGcodCk/KHQubG9uZ2l0dWRlPWQsdC5sYXRpdHVkZT1lLHQuaGVpZ2h0PTAsdCk6bmV3IHJlKGQsZSwwKX07ZWE9VnJ9KTtmdW5jdGlvbiBfMyhlLHQpe3RoaXMucG9zaXRpb25zPWcoZSk/ZTpbXSx0aGlzLmhvbGVzPWcodCk/dDpbXX12YXIgV1QsWFQ9WCgoKT0+e3NlKCk7V1Q9XzN9KTtmdW5jdGlvbiBlMChlLHQsbj0yKXtsZXQgbz10JiZ0Lmxlbmd0aCxhPW8/dFswXSpuOmUubGVuZ3RoLHI9SlQoZSwwLGEsbiwhMCksaT1bXTtpZighcnx8ci5uZXh0PT09ci5wcmV2KXJldHVybiBpO2xldCBmLGQsYztpZihvJiYocj1FMyhlLHQscixuKSksZS5sZW5ndGg+ODAqbil7Zj0xLzAsZD0xLzA7bGV0IHU9LTEvMCxsPS0xLzA7Zm9yKGxldCBoPW47aDxhO2grPW4pe2xldCBtPWVbaF0sYj1lW2grMV07bTxmJiYoZj1tKSxiPGQmJihkPWIpLG0+dSYmKHU9bSksYj5sJiYobD1iKX1jPU1hdGgubWF4KHUtZixsLWQpLGM9YyE9PTA/MzI3NjcvYzowfXJldHVybiBMZihyLGksbixmLGQsYywwKSxpfWZ1bmN0aW9uIEpUKGUsdCxuLG8sYSl7bGV0IHI7aWYoYT09PXYzKGUsdCxuLG8pPjApZm9yKGxldCBpPXQ7aTxuO2krPW8pcj1ZVChpL298MCxlW2ldLGVbaSsxXSxyKTtlbHNlIGZvcihsZXQgaT1uLW87aT49dDtpLT1vKXI9WVQoaS9vfDAsZVtpXSxlW2krMV0scik7cmV0dXJuIHImJmRoKHIsci5uZXh0KSYmKHpmKHIpLHI9ci5uZXh0KSxyfWZ1bmN0aW9uIG1jKGUsdCl7aWYoIWUpcmV0dXJuIGU7dHx8KHQ9ZSk7bGV0IG49ZSxvO2RvIGlmKG89ITEsIW4uc3RlaW5lciYmKGRoKG4sbi5uZXh0KXx8am4obi5wcmV2LG4sbi5uZXh0KT09PTApKXtpZih6ZihuKSxuPXQ9bi5wcmV2LG49PT1uLm5leHQpYnJlYWs7bz0hMH1lbHNlIG49bi5uZXh0O3doaWxlKG98fG4hPT10KTtyZXR1cm4gdH1mdW5jdGlvbiBMZihlLHQsbixvLGEscixpKXtpZighZSlyZXR1cm47IWkmJnImJkMzKGUsbyxhLHIpO2xldCBmPWU7Zm9yKDtlLnByZXYhPT1lLm5leHQ7KXtsZXQgZD1lLnByZXYsYz1lLm5leHQ7aWYocj9BMyhlLG8sYSxyKTp5MyhlKSl7dC5wdXNoKGQuaSxlLmksYy5pKSx6ZihlKSxlPWMubmV4dCxmPWMubmV4dDtjb250aW51ZX1pZihlPWMsZT09PWYpe2k/aT09PTE/KGU9dzMobWMoZSksdCksTGYoZSx0LG4sbyxhLHIsMikpOmk9PT0yJiZUMyhlLHQsbixvLGEscik6TGYobWMoZSksdCxuLG8sYSxyLDEpO2JyZWFrfX19ZnVuY3Rpb24geTMoZSl7bGV0IHQ9ZS5wcmV2LG49ZSxvPWUubmV4dDtpZihqbih0LG4sbyk+PTApcmV0dXJuITE7bGV0IGE9dC54LHI9bi54LGk9by54LGY9dC55LGQ9bi55LGM9by55LHU9YTxyP2E8aT9hOmk6cjxpP3I6aSxsPWY8ZD9mPGM/ZjpjOmQ8Yz9kOmMsaD1hPnI/YT5pP2E6aTpyPmk/cjppLG09Zj5kP2Y+Yz9mOmM6ZD5jP2Q6YyxiPW8ubmV4dDtmb3IoO2IhPT10Oyl7aWYoYi54Pj11JiZiLng8PWgmJmIueT49bCYmYi55PD1tJiZ5cyhhLGYscixkLGksYyxiLngsYi55KSYmam4oYi5wcmV2LGIsYi5uZXh0KT49MClyZXR1cm4hMTtiPWIubmV4dH1yZXR1cm4hMH1mdW5jdGlvbiBBMyhlLHQsbixvKXtsZXQgYT1lLnByZXYscj1lLGk9ZS5uZXh0O2lmKGpuKGEscixpKT49MClyZXR1cm4hMTtsZXQgZj1hLngsZD1yLngsYz1pLngsdT1hLnksbD1yLnksaD1pLnksbT1mPGQ/ZjxjP2Y6YzpkPGM/ZDpjLGI9dTxsP3U8aD91Omg6bDxoP2w6aCxwPWY+ZD9mPmM/ZjpjOmQ+Yz9kOmMseT11Pmw/dT5oP3U6aDpsPmg/bDpoLFQ9UXAobSxiLHQsbixvKSxfPVFwKHAseSx0LG4sbyksRT1lLnByZXZaLHc9ZS5uZXh0Wjtmb3IoO0UmJkUuej49VCYmdyYmdy56PD1fOyl7aWYoRS54Pj1tJiZFLng8PXAmJkUueT49YiYmRS55PD15JiZFIT09YSYmRSE9PWkmJnlzKGYsdSxkLGwsYyxoLEUueCxFLnkpJiZqbihFLnByZXYsRSxFLm5leHQpPj0wfHwoRT1FLnByZXZaLHcueD49bSYmdy54PD1wJiZ3Lnk+PWImJncueTw9eSYmdyE9PWEmJnchPT1pJiZ5cyhmLHUsZCxsLGMsaCx3Lngsdy55KSYmam4ody5wcmV2LHcsdy5uZXh0KT49MCkpcmV0dXJuITE7dz13Lm5leHRafWZvcig7RSYmRS56Pj1UOyl7aWYoRS54Pj1tJiZFLng8PXAmJkUueT49YiYmRS55PD15JiZFIT09YSYmRSE9PWkmJnlzKGYsdSxkLGwsYyxoLEUueCxFLnkpJiZqbihFLnByZXYsRSxFLm5leHQpPj0wKXJldHVybiExO0U9RS5wcmV2Wn1mb3IoO3cmJncuejw9Xzspe2lmKHcueD49bSYmdy54PD1wJiZ3Lnk+PWImJncueTw9eSYmdyE9PWEmJnchPT1pJiZ5cyhmLHUsZCxsLGMsaCx3Lngsdy55KSYmam4ody5wcmV2LHcsdy5uZXh0KT49MClyZXR1cm4hMTt3PXcubmV4dFp9cmV0dXJuITB9ZnVuY3Rpb24gdzMoZSx0KXtsZXQgbj1lO2Rve2xldCBvPW4ucHJldixhPW4ubmV4dC5uZXh0OyFkaChvLGEpJiZaVChvLG4sbi5uZXh0LGEpJiZqZihvLGEpJiZqZihhLG8pJiYodC5wdXNoKG8uaSxuLmksYS5pKSx6ZihuKSx6ZihuLm5leHQpLG49ZT1hKSxuPW4ubmV4dH13aGlsZShuIT09ZSk7cmV0dXJuIG1jKG4pfWZ1bmN0aW9uIFQzKGUsdCxuLG8sYSxyKXtsZXQgaT1lO2Rve2xldCBmPWkubmV4dC5uZXh0O2Zvcig7ZiE9PWkucHJldjspe2lmKGkuaSE9PWYuaSYmSTMoaSxmKSl7bGV0IGQ9UVQoaSxmKTtpPW1jKGksaS5uZXh0KSxkPW1jKGQsZC5uZXh0KSxMZihpLHQsbixvLGEsciwwKSxMZihkLHQsbixvLGEsciwwKTtyZXR1cm59Zj1mLm5leHR9aT1pLm5leHR9d2hpbGUoaSE9PWUpfWZ1bmN0aW9uIEUzKGUsdCxuLG8pe2xldCBhPVtdO2ZvcihsZXQgcj0wLGk9dC5sZW5ndGg7cjxpO3IrKyl7bGV0IGY9dFtyXSpvLGQ9cjxpLTE/dFtyKzFdKm86ZS5sZW5ndGgsYz1KVChlLGYsZCxvLCExKTtjPT09Yy5uZXh0JiYoYy5zdGVpbmVyPSEwKSxhLnB1c2goTjMoYykpfWEuc29ydChSMyk7Zm9yKGxldCByPTA7cjxhLmxlbmd0aDtyKyspbj14MyhhW3JdLG4pO3JldHVybiBufWZ1bmN0aW9uIFIzKGUsdCl7cmV0dXJuIGUueC10Lnh9ZnVuY3Rpb24geDMoZSx0KXtsZXQgbj1PMyhlLHQpO2lmKCFuKXJldHVybiB0O2xldCBvPVFUKG4sZSk7cmV0dXJuIG1jKG8sby5uZXh0KSxtYyhuLG4ubmV4dCl9ZnVuY3Rpb24gTzMoZSx0KXtsZXQgbj10LG89ZS54LGE9ZS55LHI9LTEvMCxpO2Rve2lmKGE8PW4ueSYmYT49bi5uZXh0LnkmJm4ubmV4dC55IT09bi55KXtsZXQgbD1uLngrKGEtbi55KSoobi5uZXh0Lngtbi54KS8obi5uZXh0Lnktbi55KTtpZihsPD1vJiZsPnImJihyPWwsaT1uLng8bi5uZXh0Lng/bjpuLm5leHQsbD09PW8pKXJldHVybiBpfW49bi5uZXh0fXdoaWxlKG4hPT10KTtpZighaSlyZXR1cm4gbnVsbDtsZXQgZj1pLGQ9aS54LGM9aS55LHU9MS8wO249aTtkb3tpZihvPj1uLngmJm4ueD49ZCYmbyE9PW4ueCYmeXMoYTxjP286cixhLGQsYyxhPGM/cjpvLGEsbi54LG4ueSkpe2xldCBsPU1hdGguYWJzKGEtbi55KS8oby1uLngpO2pmKG4sZSkmJihsPHV8fGw9PT11JiYobi54PmkueHx8bi54PT09aS54JiZTMyhpLG4pKSkmJihpPW4sdT1sKX1uPW4ubmV4dH13aGlsZShuIT09Zik7cmV0dXJuIGl9ZnVuY3Rpb24gUzMoZSx0KXtyZXR1cm4gam4oZS5wcmV2LGUsdC5wcmV2KTwwJiZqbih0Lm5leHQsZSxlLm5leHQpPDB9ZnVuY3Rpb24gQzMoZSx0LG4sbyl7bGV0IGE9ZTtkbyBhLno9PT0wJiYoYS56PVFwKGEueCxhLnksdCxuLG8pKSxhLnByZXZaPWEucHJldixhLm5leHRaPWEubmV4dCxhPWEubmV4dDt3aGlsZShhIT09ZSk7YS5wcmV2Wi5uZXh0Wj1udWxsLGEucHJldlo9bnVsbCxNMyhhKX1mdW5jdGlvbiBNMyhlKXtsZXQgdCxuPTE7ZG97bGV0IG89ZSxhO2U9bnVsbDtsZXQgcj1udWxsO2Zvcih0PTA7bzspe3QrKztsZXQgaT1vLGY9MDtmb3IobGV0IGM9MDtjPG4mJihmKyssaT1pLm5leHRaLCEhaSk7YysrKTtsZXQgZD1uO2Zvcig7Zj4wfHxkPjAmJmk7KWYhPT0wJiYoZD09PTB8fCFpfHxvLno8PWkueik/KGE9byxvPW8ubmV4dFosZi0tKTooYT1pLGk9aS5uZXh0WixkLS0pLHI/ci5uZXh0Wj1hOmU9YSxhLnByZXZaPXIscj1hO289aX1yLm5leHRaPW51bGwsbio9Mn13aGlsZSh0PjEpO3JldHVybiBlfWZ1bmN0aW9uIFFwKGUsdCxuLG8sYSl7cmV0dXJuIGU9KGUtbikqYXwwLHQ9KHQtbykqYXwwLGU9KGV8ZTw8OCkmMTY3MTE5MzUsZT0oZXxlPDw0KSYyNTI2NDUxMzUsZT0oZXxlPDwyKSY4NTg5OTM0NTksZT0oZXxlPDwxKSYxNDMxNjU1NzY1LHQ9KHR8dDw8OCkmMTY3MTE5MzUsdD0odHx0PDw0KSYyNTI2NDUxMzUsdD0odHx0PDwyKSY4NTg5OTM0NTksdD0odHx0PDwxKSYxNDMxNjU1NzY1LGV8dDw8MX1mdW5jdGlvbiBOMyhlKXtsZXQgdD1lLG49ZTtkbyh0Lng8bi54fHx0Lng9PT1uLngmJnQueTxuLnkpJiYobj10KSx0PXQubmV4dDt3aGlsZSh0IT09ZSk7cmV0dXJuIG59ZnVuY3Rpb24geXMoZSx0LG4sbyxhLHIsaSxmKXtyZXR1cm4oYS1pKSoodC1mKT49KGUtaSkqKHItZikmJihlLWkpKihvLWYpPj0obi1pKSoodC1mKSYmKG4taSkqKHItZik+PShhLWkpKihvLWYpfWZ1bmN0aW9uIEkzKGUsdCl7cmV0dXJuIGUubmV4dC5pIT09dC5pJiZlLnByZXYuaSE9PXQuaSYmIVAzKGUsdCkmJihqZihlLHQpJiZqZih0LGUpJiZrMyhlLHQpJiYoam4oZS5wcmV2LGUsdC5wcmV2KXx8am4oZSx0LnByZXYsdCkpfHxkaChlLHQpJiZqbihlLnByZXYsZSxlLm5leHQpPjAmJmpuKHQucHJldix0LHQubmV4dCk+MCl9ZnVuY3Rpb24gam4oZSx0LG4pe3JldHVybih0LnktZS55KSoobi54LXQueCktKHQueC1lLngpKihuLnktdC55KX1mdW5jdGlvbiBkaChlLHQpe3JldHVybiBlLng9PT10LngmJmUueT09PXQueX1mdW5jdGlvbiBaVChlLHQsbixvKXtsZXQgYT1maChqbihlLHQsbikpLHI9Zmgoam4oZSx0LG8pKSxpPWZoKGpuKG4sbyxlKSksZj1maChqbihuLG8sdCkpO3JldHVybiEhKGEhPT1yJiZpIT09Znx8YT09PTAmJnNoKGUsbix0KXx8cj09PTAmJnNoKGUsbyx0KXx8aT09PTAmJnNoKG4sZSxvKXx8Zj09PTAmJnNoKG4sdCxvKSl9ZnVuY3Rpb24gc2goZSx0LG4pe3JldHVybiB0Lng8PU1hdGgubWF4KGUueCxuLngpJiZ0Lng+PU1hdGgubWluKGUueCxuLngpJiZ0Lnk8PU1hdGgubWF4KGUueSxuLnkpJiZ0Lnk+PU1hdGgubWluKGUueSxuLnkpfWZ1bmN0aW9uIGZoKGUpe3JldHVybiBlPjA/MTplPDA/LTE6MH1mdW5jdGlvbiBQMyhlLHQpe2xldCBuPWU7ZG97aWYobi5pIT09ZS5pJiZuLm5leHQuaSE9PWUuaSYmbi5pIT09dC5pJiZuLm5leHQuaSE9PXQuaSYmWlQobixuLm5leHQsZSx0KSlyZXR1cm4hMDtuPW4ubmV4dH13aGlsZShuIT09ZSk7cmV0dXJuITF9ZnVuY3Rpb24gamYoZSx0KXtyZXR1cm4gam4oZS5wcmV2LGUsZS5uZXh0KTwwP2puKGUsdCxlLm5leHQpPj0wJiZqbihlLGUucHJldix0KT49MDpqbihlLHQsZS5wcmV2KTwwfHxqbihlLGUubmV4dCx0KTwwfWZ1bmN0aW9uIGszKGUsdCl7bGV0IG49ZSxvPSExLGE9KGUueCt0LngpLzIscj0oZS55K3QueSkvMjtkbyBuLnk+ciE9bi5uZXh0Lnk+ciYmbi5uZXh0LnkhPT1uLnkmJmE8KG4ubmV4dC54LW4ueCkqKHItbi55KS8obi5uZXh0Lnktbi55KStuLngmJihvPSFvKSxuPW4ubmV4dDt3aGlsZShuIT09ZSk7cmV0dXJuIG99ZnVuY3Rpb24gUVQoZSx0KXtsZXQgbj0kcChlLmksZS54LGUueSksbz0kcCh0LmksdC54LHQueSksYT1lLm5leHQscj10LnByZXY7cmV0dXJuIGUubmV4dD10LHQucHJldj1lLG4ubmV4dD1hLGEucHJldj1uLG8ubmV4dD1uLG4ucHJldj1vLHIubmV4dD1vLG8ucHJldj1yLG99ZnVuY3Rpb24gWVQoZSx0LG4sbyl7bGV0IGE9JHAoZSx0LG4pO3JldHVybiBvPyhhLm5leHQ9by5uZXh0LGEucHJldj1vLG8ubmV4dC5wcmV2PWEsby5uZXh0PWEpOihhLnByZXY9YSxhLm5leHQ9YSksYX1mdW5jdGlvbiB6ZihlKXtlLm5leHQucHJldj1lLnByZXYsZS5wcmV2Lm5leHQ9ZS5uZXh0LGUucHJldlomJihlLnByZXZaLm5leHRaPWUubmV4dFopLGUubmV4dFomJihlLm5leHRaLnByZXZaPWUucHJldlopfWZ1bmN0aW9uICRwKGUsdCxuKXtyZXR1cm57aTplLHg6dCx5Om4scHJldjpudWxsLG5leHQ6bnVsbCx6OjAscHJldlo6bnVsbCxuZXh0WjpudWxsLHN0ZWluZXI6ITF9fWZ1bmN0aW9uIHYzKGUsdCxuLG8pe2xldCBhPTA7Zm9yKGxldCByPXQsaT1uLW87cjxuO3IrPW8pYSs9KGVbaV0tZVtyXSkqKGVbcisxXStlW2krMV0pLGk9cjtyZXR1cm4gYX12YXIgJFQ9WCgoKT0+e30pO3ZhciB1aCx2byxiYz1YKCgpPT57b2MoKTt1aD17Q0xPQ0tXSVNFOlBlLkNXLENPVU5URVJfQ0xPQ0tXSVNFOlBlLkNDV307dWgudmFsaWRhdGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT11aC5DTE9DS1dJU0V8fGU9PT11aC5DT1VOVEVSX0NMT0NLV0lTRX07dm89T2JqZWN0LmZyZWV6ZSh1aCl9KTt2YXIgRjMsRDMsVGksb0UsYUUsckUsZUUsdEUsbkUsSHIsaUUsY0Usc0UsQXMsQjMsVTMsTDMsdDAsU3QsSmE9WCgoKT0+eyRUKCk7anQoKTtJZSgpO1R0KCk7dnQoKTtzZSgpO1dlKCk7VWYoKTskdCgpO2VuKCk7R2UoKTtjbigpO2JjKCk7RjM9bmV3IHMsRDM9bmV3IHMsVGk9e307VGkuY29tcHV0ZUFyZWEyRD1mdW5jdGlvbihlKXtsZXQgdD1lLmxlbmd0aCxuPTA7Zm9yKGxldCBvPXQtMSxhPTA7YTx0O289YSsrKXtsZXQgcj1lW29dLGk9ZVthXTtuKz1yLngqaS55LWkueCpyLnl9cmV0dXJuIG4qLjV9O1RpLmNvbXB1dGVXaW5kaW5nT3JkZXIyRD1mdW5jdGlvbihlKXtyZXR1cm4gVGkuY29tcHV0ZUFyZWEyRChlKT4wP3ZvLkNPVU5URVJfQ0xPQ0tXSVNFOnZvLkNMT0NLV0lTRX07VGkudHJpYW5ndWxhdGU9ZnVuY3Rpb24oZSx0KXtsZXQgbj1ZLnBhY2tBcnJheShlKTtyZXR1cm4gZTAobix0LDIpfTtvRT1uZXcgcyxhRT1uZXcgcyxyRT1uZXcgcyxlRT1uZXcgcyx0RT1uZXcgcyxuRT1uZXcgcyxIcj1uZXcgcyxpRT1uZXcgWSxjRT1uZXcgWSxzRT1uZXcgWSxBcz1uZXcgWTtUaS5jb21wdXRlU3ViZGl2aXNpb249ZnVuY3Rpb24oZSx0LG4sbyxhKXthPWE/P2suUkFESUFOU19QRVJfREVHUkVFO2xldCByPWcobyksaT1uLnNsaWNlKDApLGYsZD10Lmxlbmd0aCxjPW5ldyBBcnJheShkKjMpLHU9bmV3IEFycmF5KGQqMiksbD0wLGg9MDtmb3IoZj0wO2Y8ZDtmKyspe2xldCBFPXRbZl07aWYoY1tsKytdPUUueCxjW2wrK109RS55LGNbbCsrXT1FLnoscil7bGV0IHc9b1tmXTt1W2grK109dy54LHVbaCsrXT13Lnl9fWxldCBtPVtdLGI9e30scD1lLm1heGltdW1SYWRpdXMseT1rLmNob3JkTGVuZ3RoKGEscCksVD15Knk7Zm9yKDtpLmxlbmd0aD4wOyl7bGV0IEU9aS5wb3AoKSx3PWkucG9wKCksUj1pLnBvcCgpLFM9cy5mcm9tQXJyYXkoYyxSKjMsb0UpLEM9cy5mcm9tQXJyYXkoYyx3KjMsYUUpLEk9cy5mcm9tQXJyYXkoYyxFKjMsckUpLE4sUCxGO3ImJihOPVkuZnJvbUFycmF5KHUsUioyLGlFKSxQPVkuZnJvbUFycmF5KHUsdyoyLGNFKSxGPVkuZnJvbUFycmF5KHUsRSoyLHNFKSk7bGV0IEE9cy5tdWx0aXBseUJ5U2NhbGFyKHMubm9ybWFsaXplKFMsZUUpLHAsZUUpLHg9cy5tdWx0aXBseUJ5U2NhbGFyKHMubm9ybWFsaXplKEMsdEUpLHAsdEUpLE09cy5tdWx0aXBseUJ5U2NhbGFyKHMubm9ybWFsaXplKEksbkUpLHAsbkUpLHY9cy5tYWduaXR1ZGVTcXVhcmVkKHMuc3VidHJhY3QoQSx4LEhyKSksVT1zLm1hZ25pdHVkZVNxdWFyZWQocy5zdWJ0cmFjdCh4LE0sSHIpKSx6PXMubWFnbml0dWRlU3F1YXJlZChzLnN1YnRyYWN0KE0sQSxIcikpLEQ9TWF0aC5tYXgodixVLHopLEcsSCxPO0Q+VD92PT09RD8oRz1gJHtNYXRoLm1pbihSLHcpfSAke01hdGgubWF4KFIsdyl9YCxmPWJbR10sZyhmKXx8KEg9cy5hZGQoUyxDLEhyKSxzLm11bHRpcGx5QnlTY2FsYXIoSCwuNSxIKSxjLnB1c2goSC54LEgueSxILnopLGY9Yy5sZW5ndGgvMy0xLGJbR109ZixyJiYoTz1ZLmFkZChOLFAsQXMpLFkubXVsdGlwbHlCeVNjYWxhcihPLC41LE8pLHUucHVzaChPLngsTy55KSkpLGkucHVzaChSLGYsRSksaS5wdXNoKGYsdyxFKSk6VT09PUQ/KEc9YCR7TWF0aC5taW4odyxFKX0gJHtNYXRoLm1heCh3LEUpfWAsZj1iW0ddLGcoZil8fChIPXMuYWRkKEMsSSxIcikscy5tdWx0aXBseUJ5U2NhbGFyKEgsLjUsSCksYy5wdXNoKEgueCxILnksSC56KSxmPWMubGVuZ3RoLzMtMSxiW0ddPWYsciYmKE89WS5hZGQoUCxGLEFzKSxZLm11bHRpcGx5QnlTY2FsYXIoTywuNSxPKSx1LnB1c2goTy54LE8ueSkpKSxpLnB1c2godyxmLFIpLGkucHVzaChmLEUsUikpOno9PT1EJiYoRz1gJHtNYXRoLm1pbihFLFIpfSAke01hdGgubWF4KEUsUil9YCxmPWJbR10sZyhmKXx8KEg9cy5hZGQoSSxTLEhyKSxzLm11bHRpcGx5QnlTY2FsYXIoSCwuNSxIKSxjLnB1c2goSC54LEgueSxILnopLGY9Yy5sZW5ndGgvMy0xLGJbR109ZixyJiYoTz1ZLmFkZChGLE4sQXMpLFkubXVsdGlwbHlCeVNjYWxhcihPLC41LE8pLHUucHVzaChPLngsTy55KSkpLGkucHVzaChFLGYsdyksaS5wdXNoKGYsUix3KSk6KG0ucHVzaChSKSxtLnB1c2godyksbS5wdXNoKEUpKX1sZXQgXz17YXR0cmlidXRlczp7cG9zaXRpb246bmV3IGllKHtjb21wb25lbnREYXRhdHlwZTpuZS5ET1VCTEUsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczpjfSl9LGluZGljZXM6bSxwcmltaXRpdmVUeXBlOlVlLlRSSUFOR0xFU307cmV0dXJuIHImJihfLmF0dHJpYnV0ZXMuc3Q9bmV3IGllKHtjb21wb25lbnREYXRhdHlwZTpuZS5GTE9BVCxjb21wb25lbnRzUGVyQXR0cmlidXRlOjIsdmFsdWVzOnV9KSksbmV3IHZlKF8pfTtCMz1uZXcgcmUsVTM9bmV3IHJlLEwzPW5ldyByZSx0MD1uZXcgcmU7VGkuY29tcHV0ZVJodW1iTGluZVN1YmRpdmlzaW9uPWZ1bmN0aW9uKGUsdCxuLG8sYSl7YT1hPz9rLlJBRElBTlNfUEVSX0RFR1JFRTtsZXQgcj1nKG8pLGk9bi5zbGljZSgwKSxmLGQ9dC5sZW5ndGgsYz1uZXcgQXJyYXkoZCozKSx1PW5ldyBBcnJheShkKjIpLGw9MCxoPTA7Zm9yKGY9MDtmPGQ7ZisrKXtsZXQgUj10W2ZdO2lmKGNbbCsrXT1SLngsY1tsKytdPVIueSxjW2wrK109Ui56LHIpe2xldCBTPW9bZl07dVtoKytdPVMueCx1W2grK109Uy55fX1sZXQgbT1bXSxiPXt9LHA9ZS5tYXhpbXVtUmFkaXVzLHk9ay5jaG9yZExlbmd0aChhLHApLFQ9bmV3IGVhKHZvaWQgMCx2b2lkIDAsZSksXz1uZXcgZWEodm9pZCAwLHZvaWQgMCxlKSxFPW5ldyBlYSh2b2lkIDAsdm9pZCAwLGUpO2Zvcig7aS5sZW5ndGg+MDspe2xldCBSPWkucG9wKCksUz1pLnBvcCgpLEM9aS5wb3AoKSxJPXMuZnJvbUFycmF5KGMsQyozLG9FKSxOPXMuZnJvbUFycmF5KGMsUyozLGFFKSxQPXMuZnJvbUFycmF5KGMsUiozLHJFKSxGLEEseDtyJiYoRj1ZLmZyb21BcnJheSh1LEMqMixpRSksQT1ZLmZyb21BcnJheSh1LFMqMixjRSkseD1ZLmZyb21BcnJheSh1LFIqMixzRSkpO2xldCBNPWUuY2FydGVzaWFuVG9DYXJ0b2dyYXBoaWMoSSxCMyksdj1lLmNhcnRlc2lhblRvQ2FydG9ncmFwaGljKE4sVTMpLFU9ZS5jYXJ0ZXNpYW5Ub0NhcnRvZ3JhcGhpYyhQLEwzKTtULnNldEVuZFBvaW50cyhNLHYpO2xldCB6PVQuc3VyZmFjZURpc3RhbmNlO18uc2V0RW5kUG9pbnRzKHYsVSk7bGV0IEQ9Xy5zdXJmYWNlRGlzdGFuY2U7RS5zZXRFbmRQb2ludHMoVSxNKTtsZXQgRz1FLnN1cmZhY2VEaXN0YW5jZSxIPU1hdGgubWF4KHosRCxHKSxPLFosb2UsY2UsZmU7SD55P3o9PT1IPyhPPWAke01hdGgubWluKEMsUyl9ICR7TWF0aC5tYXgoQyxTKX1gLGY9YltPXSxnKGYpfHwoWj1ULmludGVycG9sYXRlVXNpbmdGcmFjdGlvbiguNSx0MCksb2U9KE0uaGVpZ2h0K3YuaGVpZ2h0KSouNSxjZT1zLmZyb21SYWRpYW5zKFoubG9uZ2l0dWRlLFoubGF0aXR1ZGUsb2UsZSxIciksYy5wdXNoKGNlLngsY2UueSxjZS56KSxmPWMubGVuZ3RoLzMtMSxiW09dPWYsciYmKGZlPVkuYWRkKEYsQSxBcyksWS5tdWx0aXBseUJ5U2NhbGFyKGZlLC41LGZlKSx1LnB1c2goZmUueCxmZS55KSkpLGkucHVzaChDLGYsUiksaS5wdXNoKGYsUyxSKSk6RD09PUg/KE89YCR7TWF0aC5taW4oUyxSKX0gJHtNYXRoLm1heChTLFIpfWAsZj1iW09dLGcoZil8fChaPV8uaW50ZXJwb2xhdGVVc2luZ0ZyYWN0aW9uKC41LHQwKSxvZT0odi5oZWlnaHQrVS5oZWlnaHQpKi41LGNlPXMuZnJvbVJhZGlhbnMoWi5sb25naXR1ZGUsWi5sYXRpdHVkZSxvZSxlLEhyKSxjLnB1c2goY2UueCxjZS55LGNlLnopLGY9Yy5sZW5ndGgvMy0xLGJbT109ZixyJiYoZmU9WS5hZGQoQSx4LEFzKSxZLm11bHRpcGx5QnlTY2FsYXIoZmUsLjUsZmUpLHUucHVzaChmZS54LGZlLnkpKSksaS5wdXNoKFMsZixDKSxpLnB1c2goZixSLEMpKTpHPT09SCYmKE89YCR7TWF0aC5taW4oUixDKX0gJHtNYXRoLm1heChSLEMpfWAsZj1iW09dLGcoZil8fChaPUUuaW50ZXJwb2xhdGVVc2luZ0ZyYWN0aW9uKC41LHQwKSxvZT0oVS5oZWlnaHQrTS5oZWlnaHQpKi41LGNlPXMuZnJvbVJhZGlhbnMoWi5sb25naXR1ZGUsWi5sYXRpdHVkZSxvZSxlLEhyKSxjLnB1c2goY2UueCxjZS55LGNlLnopLGY9Yy5sZW5ndGgvMy0xLGJbT109ZixyJiYoZmU9WS5hZGQoeCxGLEFzKSxZLm11bHRpcGx5QnlTY2FsYXIoZmUsLjUsZmUpLHUucHVzaChmZS54LGZlLnkpKSksaS5wdXNoKFIsZixTKSxpLnB1c2goZixDLFMpKToobS5wdXNoKEMpLG0ucHVzaChTKSxtLnB1c2goUikpfWxldCB3PXthdHRyaWJ1dGVzOntwb3NpdGlvbjpuZXcgaWUoe2NvbXBvbmVudERhdGF0eXBlOm5lLkRPVUJMRSxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOmN9KX0saW5kaWNlczptLHByaW1pdGl2ZVR5cGU6VWUuVFJJQU5HTEVTfTtyZXR1cm4gciYmKHcuYXR0cmlidXRlcy5zdD1uZXcgaWUoe2NvbXBvbmVudERhdGF0eXBlOm5lLkZMT0FULGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Mix2YWx1ZXM6dX0pKSxuZXcgdmUodyl9O1RpLnNjYWxlVG9HZW9kZXRpY0hlaWdodD1mdW5jdGlvbihlLHQsbixvKXtuPW4/P3EuZGVmYXVsdDtsZXQgYT1GMyxyPUQzO2lmKHQ9dD8/MCxvPW8/PyEwLGcoZSkpe2xldCBpPWUubGVuZ3RoO2ZvcihsZXQgZj0wO2Y8aTtmKz0zKXMuZnJvbUFycmF5KGUsZixyKSxvJiYocj1uLnNjYWxlVG9HZW9kZXRpY1N1cmZhY2UocixyKSksdCE9PTAmJihhPW4uZ2VvZGV0aWNTdXJmYWNlTm9ybWFsKHIsYSkscy5tdWx0aXBseUJ5U2NhbGFyKGEsdCxhKSxzLmFkZChyLGEscikpLGVbZl09ci54LGVbZisxXT1yLnksZVtmKzJdPXIuen1yZXR1cm4gZX07U3Q9VGl9KTtmdW5jdGlvbiBFaSgpe3RoaXMuX2FycmF5PVtdLHRoaXMuX29mZnNldD0wLHRoaXMuX2xlbmd0aD0wfXZhciBuMCxmRT1YKCgpPT57T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoRWkucHJvdG90eXBlLHtsZW5ndGg6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9sZW5ndGh9fX0pO0VpLnByb3RvdHlwZS5lbnF1ZXVlPWZ1bmN0aW9uKGUpe3RoaXMuX2FycmF5LnB1c2goZSksdGhpcy5fbGVuZ3RoKyt9O0VpLnByb3RvdHlwZS5kZXF1ZXVlPWZ1bmN0aW9uKCl7aWYodGhpcy5fbGVuZ3RoPT09MClyZXR1cm47bGV0IGU9dGhpcy5fYXJyYXksdD10aGlzLl9vZmZzZXQsbj1lW3RdO3JldHVybiBlW3RdPXZvaWQgMCx0KyssdD4xMCYmdCoyPmUubGVuZ3RoJiYodGhpcy5fYXJyYXk9ZS5zbGljZSh0KSx0PTApLHRoaXMuX29mZnNldD10LHRoaXMuX2xlbmd0aC0tLG59O0VpLnByb3RvdHlwZS5wZWVrPWZ1bmN0aW9uKCl7aWYodGhpcy5fbGVuZ3RoIT09MClyZXR1cm4gdGhpcy5fYXJyYXlbdGhpcy5fb2Zmc2V0XX07RWkucHJvdG90eXBlLmNvbnRhaW5zPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9hcnJheS5pbmRleE9mKGUpIT09LTF9O0VpLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3RoaXMuX2FycmF5Lmxlbmd0aD10aGlzLl9vZmZzZXQ9dGhpcy5fbGVuZ3RoPTB9O0VpLnByb3RvdHlwZS5zb3J0PWZ1bmN0aW9uKGUpe3RoaXMuX29mZnNldD4wJiYodGhpcy5fYXJyYXk9dGhpcy5fYXJyYXkuc2xpY2UodGhpcy5fb2Zmc2V0KSx0aGlzLl9vZmZzZXQ9MCksdGhpcy5fYXJyYXkuc29ydChlKX07bjA9RWl9KTtmdW5jdGlvbiBsRShlLHQsbixvKXtyZXR1cm4gWS5zdWJ0cmFjdCh0LGUscGMpLFkubXVsdGlwbHlCeVNjYWxhcihwYyxuL28scGMpLFkuYWRkKGUscGMscGMpLFtwYy54LHBjLnldfWZ1bmN0aW9uIGozKGUsdCxuLG8pe3JldHVybiBzLnN1YnRyYWN0KHQsZSxSaSkscy5tdWx0aXBseUJ5U2NhbGFyKFJpLG4vbyxSaSkscy5hZGQoZSxSaSxSaSksW1JpLngsUmkueSxSaS56XX1mdW5jdGlvbiBYMyhlLHQsbil7bGV0IG89bi5jYXJ0ZXNpYW5Ub0NhcnRvZ3JhcGhpYyhlLGhoKSxhPW4uY2FydGVzaWFuVG9DYXJ0b2dyYXBoaWModCxtaCk7aWYoTWF0aC5zaWduKG8ubGF0aXR1ZGUpPT09TWF0aC5zaWduKGEubGF0aXR1ZGUpKXJldHVybjtsaC5zZXRFbmRQb2ludHMobyxhKTtsZXQgcj1saC5maW5kSW50ZXJzZWN0aW9uV2l0aExhdGl0dWRlKDAsVzMpO2lmKCFnKHIpKXJldHVybjtsZXQgaT1NYXRoLm1pbihvLmxvbmdpdHVkZSxhLmxvbmdpdHVkZSksZj1NYXRoLm1heChvLmxvbmdpdHVkZSxhLmxvbmdpdHVkZSk7aWYoTWF0aC5hYnMoZi1pKT5rLlBJKXtsZXQgZD1pO2k9ZixmPWR9aWYoIShyLmxvbmdpdHVkZTxpfHxyLmxvbmdpdHVkZT5mKSlyZXR1cm4gbi5jYXJ0b2dyYXBoaWNUb0NhcnRlc2lhbihyKX1mdW5jdGlvbiBZMyhlLHQsbixvKXtpZihvPT09d3QuUkhVTUIpcmV0dXJuIFgzKGUsdCxuKTtsZXQgYT1uby5saW5lU2VnbWVudFBsYW5lKGUsdCxzbi5PUklHSU5fWFlfUExBTkUpO2lmKGcoYSkpcmV0dXJuIG4uc2NhbGVUb0dlb2RldGljU3VyZmFjZShhLGEpfWZ1bmN0aW9uIFozKGUsdCxuKXtsZXQgbz1bXSxhLHIsaSxmLGQsYz0wO2Zvcig7YzxlLmxlbmd0aDspe2E9ZVtjXSxyPWVbKGMrMSklZS5sZW5ndGhdLGk9ay5zaWduKGEueiksZj1rLnNpZ24oci56KTtsZXQgdT1sPT50LmNhcnRlc2lhblRvQ2FydG9ncmFwaGljKGwsSjMpLmxvbmdpdHVkZTtpZihpPT09MClvLnB1c2goe3Bvc2l0aW9uOmMsdHlwZTppLHZpc2l0ZWQ6ITEsbmV4dDpmLHRoZXRhOnUoYSl9KTtlbHNlIGlmKGYhPT0wKXtpZihkPVkzKGEscix0LG4pLCsrYywhZyhkKSljb250aW51ZTtlLnNwbGljZShjLDAsZCksby5wdXNoKHtwb3NpdGlvbjpjLHR5cGU6aSx2aXNpdGVkOiExLG5leHQ6Zix0aGV0YTp1KGQpfSl9KytjfXJldHVybiBvfWZ1bmN0aW9uIGhFKGUsdCxuLG8sYSxyLGkpe2xldCBmPVtdLGQ9cixjPWw9Pmg9PmgucG9zaXRpb249PT1sLHU9W107ZG97bGV0IGw9bltkXTtmLnB1c2gobCk7bGV0IGg9by5maW5kSW5kZXgoYyhkKSksbT1vW2hdO2lmKCFnKG0pKXsrK2Q7Y29udGludWV9bGV0e3Zpc2l0ZWQ6Yix0eXBlOnAsbmV4dDp5fT1tO2lmKG0udmlzaXRlZD0hMCxwPT09MCl7aWYoeT09PTApe2xldCB3PW9baC0oaT8xOi0xKV07aWYodz8ucG9zaXRpb249PT1kKzEpdy52aXNpdGVkPSEwO2Vsc2V7KytkO2NvbnRpbnVlfX1pZighYiYmaSYmeT4wfHxyPT09ZCYmIWkmJnk8MCl7KytkO2NvbnRpbnVlfX1pZighKGk/cD49MDpwPD0wKSl7KytkO2NvbnRpbnVlfWJ8fHUucHVzaChkKTtsZXQgXz1oKyhpPzE6LTEpLEU9b1tfXTtpZighZyhFKSl7KytkO2NvbnRpbnVlfWQ9RS5wb3NpdGlvbn13aGlsZShkPG4ubGVuZ3RoJiZkPj0wJiZkIT09ciYmZi5sZW5ndGg8bi5sZW5ndGgpO2Uuc3BsaWNlKHQsYSxmKTtmb3IobGV0IGwgb2YgdSl0PWhFKGUsKyt0LG4sbywwLGwsIWkpO3JldHVybiB0fXZhciB4bixwYyxSaSxoaCxtaCx6MyxHMyxsaCxWMyxIMyxLMyxxMyxXMyxKMyxRMywkMyxlayx0ayxkRSx1RSxuayxvayxsdCxHZj1YKCgpPT57aGMoKTtYYSgpO2p0KCk7SWUoKTtUdCgpO3Z0KCk7c2UoKTtXZSgpO1VmKCk7JHQoKTtlbigpO3VuKCk7bHIoKTtubigpO3BpKCk7R2UoKTtEbigpO2dpKCk7WFQoKTtKYSgpO2NuKCk7Sm8oKTtmRSgpO2JjKCk7eG49e307eG4uY29tcHV0ZUhpZXJhcmNoeVBhY2tlZExlbmd0aD1mdW5jdGlvbihlLHQpe2xldCBuPTAsbz1bZV07Zm9yKDtvLmxlbmd0aD4wOyl7bGV0IGE9by5wb3AoKTtpZighZyhhKSljb250aW51ZTtuKz0yO2xldCByPWEucG9zaXRpb25zLGk9YS5ob2xlcztpZihnKHIpJiZyLmxlbmd0aD4wJiYobis9ci5sZW5ndGgqdC5wYWNrZWRMZW5ndGgpLGcoaSkpe2xldCBmPWkubGVuZ3RoO2ZvcihsZXQgZD0wO2Q8ZjsrK2Qpby5wdXNoKGlbZF0pfX1yZXR1cm4gbn07eG4ucGFja1BvbHlnb25IaWVyYXJjaHk9ZnVuY3Rpb24oZSx0LG4sbyl7bGV0IGE9W2VdO2Zvcig7YS5sZW5ndGg+MDspe2xldCByPWEucG9wKCk7aWYoIWcocikpY29udGludWU7bGV0IGk9ci5wb3NpdGlvbnMsZj1yLmhvbGVzO2lmKHRbbisrXT1nKGkpP2kubGVuZ3RoOjAsdFtuKytdPWcoZik/Zi5sZW5ndGg6MCxnKGkpKXtsZXQgZD1pLmxlbmd0aDtmb3IobGV0IGM9MDtjPGQ7KytjLG4rPW8ucGFja2VkTGVuZ3RoKW8ucGFjayhpW2NdLHQsbil9aWYoZyhmKSl7bGV0IGQ9Zi5sZW5ndGg7Zm9yKGxldCBjPTA7YzxkOysrYylhLnB1c2goZltjXSl9fXJldHVybiBufTt4bi51bnBhY2tQb2x5Z29uSGllcmFyY2h5PWZ1bmN0aW9uKGUsdCxuKXtsZXQgbz1lW3QrK10sYT1lW3QrK10scj1uZXcgQXJyYXkobyksaT1hPjA/bmV3IEFycmF5KGEpOnZvaWQgMDtmb3IobGV0IGY9MDtmPG87KytmLHQrPW4ucGFja2VkTGVuZ3RoKXJbZl09bi51bnBhY2soZSx0KTtmb3IobGV0IGY9MDtmPGE7KytmKWlbZl09eG4udW5wYWNrUG9seWdvbkhpZXJhcmNoeShlLHQsbiksdD1pW2ZdLnN0YXJ0aW5nSW5kZXgsZGVsZXRlIGlbZl0uc3RhcnRpbmdJbmRleDtyZXR1cm57cG9zaXRpb25zOnIsaG9sZXM6aSxzdGFydGluZ0luZGV4OnR9fTtwYz1uZXcgWTtSaT1uZXcgczt4bi5zdWJkaXZpZGVMaW5lQ291bnQ9ZnVuY3Rpb24oZSx0LG4pe2xldCBhPXMuZGlzdGFuY2UoZSx0KS9uLHI9TWF0aC5tYXgoMCxNYXRoLmNlaWwoay5sb2cyKGEpKSk7cmV0dXJuIE1hdGgucG93KDIscil9O2hoPW5ldyByZSxtaD1uZXcgcmUsejM9bmV3IHJlLEczPW5ldyBzLGxoPW5ldyBlYTt4bi5zdWJkaXZpZGVSaHVtYkxpbmVDb3VudD1mdW5jdGlvbihlLHQsbixvKXtsZXQgYT1lLmNhcnRlc2lhblRvQ2FydG9ncmFwaGljKHQsaGgpLHI9ZS5jYXJ0ZXNpYW5Ub0NhcnRvZ3JhcGhpYyhuLG1oKSxmPW5ldyBlYShhLHIsZSkuc3VyZmFjZURpc3RhbmNlL28sZD1NYXRoLm1heCgwLE1hdGguY2VpbChrLmxvZzIoZikpKTtyZXR1cm4gTWF0aC5wb3coMixkKX07eG4uc3ViZGl2aWRlVGV4Y29vcmRMaW5lPWZ1bmN0aW9uKGUsdCxuLG8sYSxyKXtsZXQgaT14bi5zdWJkaXZpZGVMaW5lQ291bnQobixvLGEpLGY9WS5kaXN0YW5jZShlLHQpLGQ9Zi9pLGM9cjtjLmxlbmd0aD1pKjI7bGV0IHU9MDtmb3IobGV0IGw9MDtsPGk7bCsrKXtsZXQgaD1sRShlLHQsbCpkLGYpO2NbdSsrXT1oWzBdLGNbdSsrXT1oWzFdfXJldHVybiBjfTt4bi5zdWJkaXZpZGVMaW5lPWZ1bmN0aW9uKGUsdCxuLG8pe2xldCBhPXhuLnN1YmRpdmlkZUxpbmVDb3VudChlLHQsbikscj1zLmRpc3RhbmNlKGUsdCksaT1yL2E7ZyhvKXx8KG89W10pO2xldCBmPW87Zi5sZW5ndGg9YSozO2xldCBkPTA7Zm9yKGxldCBjPTA7YzxhO2MrKyl7bGV0IHU9ajMoZSx0LGMqaSxyKTtmW2QrK109dVswXSxmW2QrK109dVsxXSxmW2QrK109dVsyXX1yZXR1cm4gZn07eG4uc3ViZGl2aWRlVGV4Y29vcmRSaHVtYkxpbmU9ZnVuY3Rpb24oZSx0LG4sbyxhLHIsaSl7bGV0IGY9bi5jYXJ0ZXNpYW5Ub0NhcnRvZ3JhcGhpYyhvLGhoKSxkPW4uY2FydGVzaWFuVG9DYXJ0b2dyYXBoaWMoYSxtaCk7bGguc2V0RW5kUG9pbnRzKGYsZCk7bGV0IGM9bGguc3VyZmFjZURpc3RhbmNlL3IsdT1NYXRoLm1heCgwLE1hdGguY2VpbChrLmxvZzIoYykpKSxsPU1hdGgucG93KDIsdSksaD1ZLmRpc3RhbmNlKGUsdCksbT1oL2wsYj1pO2IubGVuZ3RoPWwqMjtsZXQgcD0wO2ZvcihsZXQgeT0wO3k8bDt5Kyspe2xldCBUPWxFKGUsdCx5Km0saCk7YltwKytdPVRbMF0sYltwKytdPVRbMV19cmV0dXJuIGJ9O3huLnN1YmRpdmlkZVJodW1iTGluZT1mdW5jdGlvbihlLHQsbixvLGEpe2xldCByPWUuY2FydGVzaWFuVG9DYXJ0b2dyYXBoaWModCxoaCksaT1lLmNhcnRlc2lhblRvQ2FydG9ncmFwaGljKG4sbWgpLGY9bmV3IGVhKHIsaSxlKTtpZihnKGEpfHwoYT1bXSksZi5zdXJmYWNlRGlzdGFuY2U8PW8pcmV0dXJuIGEubGVuZ3RoPTMsYVswXT10LngsYVsxXT10LnksYVsyXT10LnosYTtsZXQgZD1mLnN1cmZhY2VEaXN0YW5jZS9vLGM9TWF0aC5tYXgoMCxNYXRoLmNlaWwoay5sb2cyKGQpKSksdT1NYXRoLnBvdygyLGMpLGw9Zi5zdXJmYWNlRGlzdGFuY2UvdSxoPWE7aC5sZW5ndGg9dSozO2xldCBtPTA7Zm9yKGxldCBiPTA7Yjx1O2IrKyl7bGV0IHA9Zi5pbnRlcnBvbGF0ZVVzaW5nU3VyZmFjZURpc3RhbmNlKGIqbCx6MykseT1lLmNhcnRvZ3JhcGhpY1RvQ2FydGVzaWFuKHAsRzMpO2hbbSsrXT15LngsaFttKytdPXkueSxoW20rK109eS56fXJldHVybiBofTtWMz1uZXcgcyxIMz1uZXcgcyxLMz1uZXcgcyxxMz1uZXcgczt4bi5zY2FsZVRvR2VvZGV0aWNIZWlnaHRFeHRydWRlZD1mdW5jdGlvbihlLHQsbixvLGEpe289bz8/cS5kZWZhdWx0O2xldCByPVYzLGk9SDMsZj1LMyxkPXEzO2lmKGcoZSkmJmcoZS5hdHRyaWJ1dGVzKSYmZyhlLmF0dHJpYnV0ZXMucG9zaXRpb24pKXtsZXQgYz1lLmF0dHJpYnV0ZXMucG9zaXRpb24udmFsdWVzLHU9Yy5sZW5ndGgvMjtmb3IobGV0IGw9MDtsPHU7bCs9MylzLmZyb21BcnJheShjLGwsZiksby5nZW9kZXRpY1N1cmZhY2VOb3JtYWwoZixyKSxkPW8uc2NhbGVUb0dlb2RldGljU3VyZmFjZShmLGQpLGk9cy5tdWx0aXBseUJ5U2NhbGFyKHIsbixpKSxpPXMuYWRkKGQsaSxpKSxjW2wrdV09aS54LGNbbCsxK3VdPWkueSxjW2wrMit1XT1pLnosYSYmKGQ9cy5jbG9uZShmLGQpKSxpPXMubXVsdGlwbHlCeVNjYWxhcihyLHQsaSksaT1zLmFkZChkLGksaSksY1tsXT1pLngsY1tsKzFdPWkueSxjW2wrMl09aS56fXJldHVybiBlfTt4bi5wb2x5Z29uT3V0bGluZXNGcm9tSGllcmFyY2h5PWZ1bmN0aW9uKGUsdCxuKXtsZXQgbz1bXSxhPW5ldyBuMDthLmVucXVldWUoZSk7bGV0IHIsaSxmO2Zvcig7YS5sZW5ndGghPT0wOyl7bGV0IGQ9YS5kZXF1ZXVlKCksYz1kLnBvc2l0aW9ucztpZih0KWZvcihmPWMubGVuZ3RoLHI9MDtyPGY7cisrKW4uc2NhbGVUb0dlb2RldGljU3VyZmFjZShjW3JdLGNbcl0pO2lmKGM9Tm4oYyxzLmVxdWFsc0Vwc2lsb24sITApLGMubGVuZ3RoPDMpY29udGludWU7bGV0IHU9ZC5ob2xlcz9kLmhvbGVzLmxlbmd0aDowO2ZvcihyPTA7cjx1O3IrKyl7bGV0IGw9ZC5ob2xlc1tyXSxoPWwucG9zaXRpb25zO2lmKHQpZm9yKGY9aC5sZW5ndGgsaT0wO2k8ZjsrK2kpbi5zY2FsZVRvR2VvZGV0aWNTdXJmYWNlKGhbaV0saFtpXSk7aWYoaD1ObihoLHMuZXF1YWxzRXBzaWxvbiwhMCksaC5sZW5ndGg8Myljb250aW51ZTtvLnB1c2goaCk7bGV0IG09MDtmb3IoZyhsLmhvbGVzKSYmKG09bC5ob2xlcy5sZW5ndGgpLGk9MDtpPG07aSsrKWEuZW5xdWV1ZShsLmhvbGVzW2ldKX1vLnB1c2goYyl9cmV0dXJuIG99O1czPW5ldyByZTtKMz1uZXcgcmU7eG4uc3BsaXRQb2x5Z29uc09uRXF1YXRvcj1mdW5jdGlvbihlLHQsbixvKXtnKG8pfHwobz1bXSksby5zcGxpY2UoMCwwLC4uLmUpLG8ubGVuZ3RoPWUubGVuZ3RoO2xldCBhPTA7Zm9yKDthPG8ubGVuZ3RoOyl7bGV0IHI9b1thXSxpPXIuc2xpY2UoKTtpZihyLmxlbmd0aDwzKXtvW2FdPWksKythO2NvbnRpbnVlfWxldCBmPVozKGksdCxuKTtpZihpLmxlbmd0aD09PXIubGVuZ3RofHxmLmxlbmd0aDw9MSl7b1thXT1pLCsrYTtjb250aW51ZX1mLnNvcnQoKGMsdSk9PmMudGhldGEtdS50aGV0YSk7bGV0IGQ9aVswXS56Pj0wO2E9aEUobyxhLGksZiwxLDAsZCl9cmV0dXJuIG99O3huLnBvbHlnb25zRnJvbUhpZXJhcmNoeT1mdW5jdGlvbihlLHQsbixvLGEscil7bGV0IGk9W10sZj1bXSxkPW5ldyBuMDtkLmVucXVldWUoZSk7bGV0IGM9ZyhyKTtmb3IoO2QubGVuZ3RoIT09MDspe2xldCB1PWQuZGVxdWV1ZSgpLGw9dS5wb3NpdGlvbnMsaD11LmhvbGVzLG0sYjtpZihvKWZvcihiPWwubGVuZ3RoLG09MDttPGI7bSsrKWEuc2NhbGVUb0dlb2RldGljU3VyZmFjZShsW21dLGxbbV0pO2lmKHR8fChsPU5uKGwscy5lcXVhbHNFcHNpbG9uLCEwKSksbC5sZW5ndGg8Myljb250aW51ZTtsZXQgcD1uKGwpO2lmKCFnKHApKWNvbnRpbnVlO2xldCB5PVtdLFQ9U3QuY29tcHV0ZVdpbmRpbmdPcmRlcjJEKHApO2lmKFQ9PT12by5DTE9DS1dJU0UmJihwLnJldmVyc2UoKSxsPWwuc2xpY2UoKS5yZXZlcnNlKCkpLGMpe2M9ITE7bGV0IFM9W2xdO2lmKFM9cihTLFMpLFMubGVuZ3RoPjEpe2ZvcihsZXQgQyBvZiBTKWQuZW5xdWV1ZShuZXcgV1QoQyxoKSk7Y29udGludWV9fWxldCBfPWwuc2xpY2UoKSxFPWcoaCk/aC5sZW5ndGg6MCx3PVtdLFI7Zm9yKG09MDttPEU7bSsrKXtsZXQgUz1oW21dLEM9Uy5wb3NpdGlvbnM7aWYobylmb3IoYj1DLmxlbmd0aCxSPTA7UjxiOysrUilhLnNjYWxlVG9HZW9kZXRpY1N1cmZhY2UoQ1tSXSxDW1JdKTtpZih0fHwoQz1ObihDLHMuZXF1YWxzRXBzaWxvbiwhMCkpLEMubGVuZ3RoPDMpY29udGludWU7bGV0IEk9bihDKTtpZighZyhJKSljb250aW51ZTtUPVN0LmNvbXB1dGVXaW5kaW5nT3JkZXIyRChJKSxUPT09dm8uQ0xPQ0tXSVNFJiYoSS5yZXZlcnNlKCksQz1DLnNsaWNlKCkucmV2ZXJzZSgpKSx3LnB1c2goQykseS5wdXNoKF8ubGVuZ3RoKSxfPV8uY29uY2F0KEMpLHA9cC5jb25jYXQoSSk7bGV0IE49MDtmb3IoZyhTLmhvbGVzKSYmKE49Uy5ob2xlcy5sZW5ndGgpLFI9MDtSPE47UisrKWQuZW5xdWV1ZShTLmhvbGVzW1JdKX1pLnB1c2goe291dGVyUmluZzpsLGhvbGVzOnd9KSxmLnB1c2goe3Bvc2l0aW9uczpfLHBvc2l0aW9uczJEOnAsaG9sZXM6eX0pfXJldHVybntoaWVyYXJjaHk6aSxwb2x5Z29uczpmfX07UTM9bmV3IFksJDM9bmV3IHMsZWs9bmV3IFplLHRrPW5ldyBKO3huLmNvbXB1dGVCb3VuZGluZ1JlY3RhbmdsZT1mdW5jdGlvbihlLHQsbixvLGEpe2xldCByPVplLmZyb21BeGlzQW5nbGUoZSxvLGVrKSxpPUouZnJvbVF1YXRlcm5pb24ocix0ayksZj1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksZD1OdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFksYz1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksdT1OdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFksbD1uLmxlbmd0aDtmb3IobGV0IGg9MDtoPGw7KytoKXtsZXQgbT1zLmNsb25lKG5baF0sJDMpO0oubXVsdGlwbHlCeVZlY3RvcihpLG0sbSk7bGV0IGI9dChtLFEzKTtnKGIpJiYoZj1NYXRoLm1pbihmLGIueCksZD1NYXRoLm1heChkLGIueCksYz1NYXRoLm1pbihjLGIueSksdT1NYXRoLm1heCh1LGIueSkpfXJldHVybiBhLng9ZixhLnk9YyxhLndpZHRoPWQtZixhLmhlaWdodD11LWMsYX07eG4uY3JlYXRlR2VvbWV0cnlGcm9tUG9zaXRpb25zPWZ1bmN0aW9uKGUsdCxuLG8sYSxyLGkpe2xldCBmPVN0LnRyaWFuZ3VsYXRlKHQucG9zaXRpb25zMkQsdC5ob2xlcyk7Zi5sZW5ndGg8MyYmKGY9WzAsMSwyXSk7bGV0IGQ9dC5wb3NpdGlvbnMsYz1nKG4pLHU9Yz9uLnBvc2l0aW9uczp2b2lkIDA7aWYoYSl7bGV0IGw9ZC5sZW5ndGgsaD1uZXcgQXJyYXkobCozKSxtPTA7Zm9yKGxldCB5PTA7eTxsO3krKyl7bGV0IFQ9ZFt5XTtoW20rK109VC54LGhbbSsrXT1ULnksaFttKytdPVQuen1sZXQgYj17YXR0cmlidXRlczp7cG9zaXRpb246bmV3IGllKHtjb21wb25lbnREYXRhdHlwZTpuZS5ET1VCTEUsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczpofSl9LGluZGljZXM6ZixwcmltaXRpdmVUeXBlOlVlLlRSSUFOR0xFU307YyYmKGIuYXR0cmlidXRlcy5zdD1uZXcgaWUoe2NvbXBvbmVudERhdGF0eXBlOm5lLkZMT0FULGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Mix2YWx1ZXM6WS5wYWNrQXJyYXkodSl9KSk7bGV0IHA9bmV3IHZlKGIpO3JldHVybiByLm5vcm1hbD9IdC5jb21wdXRlTm9ybWFsKHApOnB9aWYoaT09PXd0LkdFT0RFU0lDKXJldHVybiBTdC5jb21wdXRlU3ViZGl2aXNpb24oZSxkLGYsdSxvKTtpZihpPT09d3QuUkhVTUIpcmV0dXJuIFN0LmNvbXB1dGVSaHVtYkxpbmVTdWJkaXZpc2lvbihlLGQsZix1LG8pfTtkRT1bXSx1RT1bXSxuaz1uZXcgcyxvaz1uZXcgczt4bi5jb21wdXRlV2FsbEdlb21ldHJ5PWZ1bmN0aW9uKGUsdCxuLG8sYSxyKXtsZXQgaSxmLGQsYyx1LGwsaCxtLGIscD1lLmxlbmd0aCx5PTAsVD0wLF89Zyh0KSxFPV8/dC5wb3NpdGlvbnM6dm9pZCAwO2lmKGEpZm9yKGY9cCozKjIsaT1uZXcgQXJyYXkoZioyKSxfJiYoYj1wKjIqMixtPW5ldyBBcnJheShiKjIpKSxkPTA7ZDxwO2QrKyljPWVbZF0sdT1lWyhkKzEpJXBdLGlbeV09aVt5K2ZdPWMueCwrK3ksaVt5XT1pW3krZl09Yy55LCsreSxpW3ldPWlbeStmXT1jLnosKyt5LGlbeV09aVt5K2ZdPXUueCwrK3ksaVt5XT1pW3krZl09dS55LCsreSxpW3ldPWlbeStmXT11LnosKyt5LF8mJihsPUVbZF0saD1FWyhkKzEpJXBdLG1bVF09bVtUK2JdPWwueCwrK1QsbVtUXT1tW1QrYl09bC55LCsrVCxtW1RdPW1bVCtiXT1oLngsKytULG1bVF09bVtUK2JdPWgueSwrK1QpO2Vsc2V7bGV0IEk9ay5jaG9yZExlbmd0aChvLG4ubWF4aW11bVJhZGl1cyksTj0wO2lmKHI9PT13dC5HRU9ERVNJQylmb3IoZD0wO2Q8cDtkKyspTis9eG4uc3ViZGl2aWRlTGluZUNvdW50KGVbZF0sZVsoZCsxKSVwXSxJKTtlbHNlIGlmKHI9PT13dC5SSFVNQilmb3IoZD0wO2Q8cDtkKyspTis9eG4uc3ViZGl2aWRlUmh1bWJMaW5lQ291bnQobixlW2RdLGVbKGQrMSklcF0sSSk7Zm9yKGY9KE4rcCkqMyxpPW5ldyBBcnJheShmKjIpLF8mJihiPShOK3ApKjIsbT1uZXcgQXJyYXkoYioyKSksZD0wO2Q8cDtkKyspe2M9ZVtkXSx1PWVbKGQrMSklcF07bGV0IFAsRjtfJiYobD1FW2RdLGg9RVsoZCsxKSVwXSkscj09PXd0LkdFT0RFU0lDPyhQPXhuLnN1YmRpdmlkZUxpbmUoYyx1LEksdUUpLF8mJihGPXhuLnN1YmRpdmlkZVRleGNvb3JkTGluZShsLGgsYyx1LEksZEUpKSk6cj09PXd0LlJIVU1CJiYoUD14bi5zdWJkaXZpZGVSaHVtYkxpbmUobixjLHUsSSx1RSksXyYmKEY9eG4uc3ViZGl2aWRlVGV4Y29vcmRSaHVtYkxpbmUobCxoLG4sYyx1LEksZEUpKSk7bGV0IEE9UC5sZW5ndGg7Zm9yKGxldCB4PTA7eDxBOysreCwrK3kpaVt5XT1QW3hdLGlbeStmXT1QW3hdO2lmKGlbeV09dS54LGlbeStmXT11LngsKyt5LGlbeV09dS55LGlbeStmXT11LnksKyt5LGlbeV09dS56LGlbeStmXT11LnosKyt5LF8pe2xldCB4PUYubGVuZ3RoO2ZvcihsZXQgTT0wO008eDsrK00sKytUKW1bVF09RltNXSxtW1QrYl09RltNXTttW1RdPWgueCxtW1QrYl09aC54LCsrVCxtW1RdPWgueSxtW1QrYl09aC55LCsrVH19fXA9aS5sZW5ndGg7bGV0IHc9a2UuY3JlYXRlVHlwZWRBcnJheShwLzMscC1lLmxlbmd0aCo2KSxSPTA7Zm9yKHAvPTYsZD0wO2Q8cDtkKyspe2xldCBJPWQsTj1JKzEsUD1JK3AsRj1QKzE7Yz1zLmZyb21BcnJheShpLEkqMyxuayksdT1zLmZyb21BcnJheShpLE4qMyxvayksIXMuZXF1YWxzRXBzaWxvbihjLHUsay5FUFNJTE9OMTAsay5FUFNJTE9OMTApJiYod1tSKytdPUksd1tSKytdPVAsd1tSKytdPU4sd1tSKytdPU4sd1tSKytdPVAsd1tSKytdPUYpfWxldCBTPXthdHRyaWJ1dGVzOm5ldyBudCh7cG9zaXRpb246bmV3IGllKHtjb21wb25lbnREYXRhdHlwZTpuZS5ET1VCTEUsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczppfSl9KSxpbmRpY2VzOncscHJpbWl0aXZlVHlwZTpVZS5UUklBTkdMRVN9O3JldHVybiBfJiYoUy5hdHRyaWJ1dGVzLnN0PW5ldyBpZSh7Y29tcG9uZW50RGF0YXR5cGU6bmUuRkxPQVQsY29tcG9uZW50c1BlckF0dHJpYnV0ZToyLHZhbHVlczptfSkpLG5ldyB2ZShTKX07bHQ9eG59KTtmdW5jdGlvbiBwayhlLHQsbixvLGEscixpLGYsZCl7bGV0IGM9ZS5wb3NpdGlvbnMsdT1TdC50cmlhbmd1bGF0ZShlLnBvc2l0aW9uczJELGUuaG9sZXMpO3UubGVuZ3RoPDMmJih1PVswLDEsMl0pO2xldCBsPWtlLmNyZWF0ZVR5cGVkQXJyYXkoYy5sZW5ndGgsdS5sZW5ndGgpO2wuc2V0KHUpO2xldCBoPWhrO2lmKG8hPT0wKXtsZXQgRj1aZS5mcm9tQXhpc0FuZ2xlKGksbyxtRSk7aWYoaD1KLmZyb21RdWF0ZXJuaW9uKEYsaCksdC50YW5nZW50fHx0LmJpdGFuZ2VudCl7Rj1aZS5mcm9tQXhpc0FuZ2xlKGksLW8sbUUpO2xldCBBPUouZnJvbVF1YXRlcm5pb24oRixtayk7Zj1zLm5vcm1hbGl6ZShKLm11bHRpcGx5QnlWZWN0b3IoQSxmLGYpLGYpLHQuYml0YW5nZW50JiYoZD1zLm5vcm1hbGl6ZShzLmNyb3NzKGksZixkKSxkKSl9fWVsc2UgaD1KLmNsb25lKEouSURFTlRJVFksaCk7bGV0IG09Y2s7dC5zdCYmKG0ueD1uLngsbS55PW4ueSk7bGV0IGI9Yy5sZW5ndGgscD1iKjMseT1uZXcgRmxvYXQ2NEFycmF5KHApLFQ9dC5ub3JtYWw/bmV3IEZsb2F0MzJBcnJheShwKTp2b2lkIDAsXz10LnRhbmdlbnQ/bmV3IEZsb2F0MzJBcnJheShwKTp2b2lkIDAsRT10LmJpdGFuZ2VudD9uZXcgRmxvYXQzMkFycmF5KHApOnZvaWQgMCx3PXQuc3Q/bmV3IEZsb2F0MzJBcnJheShiKjIpOnZvaWQgMCxSPTAsUz0wLEM9MCxJPTAsTj0wO2ZvcihsZXQgRj0wO0Y8YjtGKyspe2xldCBBPWNbRl07aWYoeVtSKytdPUEueCx5W1IrK109QS55LHlbUisrXT1BLnosdC5zdClpZihnKGEpJiZhLnBvc2l0aW9ucy5sZW5ndGg9PT1iKXdbTisrXT1hLnBvc2l0aW9uc1tGXS54LHdbTisrXT1hLnBvc2l0aW9uc1tGXS55O2Vsc2V7bGV0IHg9Si5tdWx0aXBseUJ5VmVjdG9yKGgsQSxhayksTT1yKHgsaWspO1kuc3VidHJhY3QoTSxtLE0pO2xldCB2PWsuY2xhbXAoTS54L24ud2lkdGgsMCwxKSxVPWsuY2xhbXAoTS55L24uaGVpZ2h0LDAsMSk7d1tOKytdPXYsd1tOKytdPVV9dC5ub3JtYWwmJihUW1MrK109aS54LFRbUysrXT1pLnksVFtTKytdPWkueiksdC50YW5nZW50JiYoX1tJKytdPWYueCxfW0krK109Zi55LF9bSSsrXT1mLnopLHQuYml0YW5nZW50JiYoRVtDKytdPWQueCxFW0MrK109ZC55LEVbQysrXT1kLnopfWxldCBQPW5ldyBudDtyZXR1cm4gdC5wb3NpdGlvbiYmKFAucG9zaXRpb249bmV3IGllKHtjb21wb25lbnREYXRhdHlwZTpuZS5ET1VCTEUsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczp5fSkpLHQubm9ybWFsJiYoUC5ub3JtYWw9bmV3IGllKHtjb21wb25lbnREYXRhdHlwZTpuZS5GTE9BVCxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOlR9KSksdC50YW5nZW50JiYoUC50YW5nZW50PW5ldyBpZSh7Y29tcG9uZW50RGF0YXR5cGU6bmUuRkxPQVQsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczpffSkpLHQuYml0YW5nZW50JiYoUC5iaXRhbmdlbnQ9bmV3IGllKHtjb21wb25lbnREYXRhdHlwZTpuZS5GTE9BVCxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOkV9KSksdC5zdCYmKFAuc3Q9bmV3IGllKHtjb21wb25lbnREYXRhdHlwZTpuZS5GTE9BVCxjb21wb25lbnRzUGVyQXR0cmlidXRlOjIsdmFsdWVzOnd9KSksbmV3IHZlKHthdHRyaWJ1dGVzOlAsaW5kaWNlczpsLHByaW1pdGl2ZVR5cGU6VWUuVFJJQU5HTEVTfSl9ZnVuY3Rpb24gZ2MoZSl7ZT1lPz9DZS5FTVBUWV9PQkpFQ1Q7bGV0IHQ9ZS5wb2x5Z29uSGllcmFyY2h5LG49ZS50ZXh0dXJlQ29vcmRpbmF0ZXMsbz1lLnZlcnRleEZvcm1hdD8/aGUuREVGQVVMVDt0aGlzLl92ZXJ0ZXhGb3JtYXQ9aGUuY2xvbmUobyksdGhpcy5fcG9seWdvbkhpZXJhcmNoeT10LHRoaXMuX3N0Um90YXRpb249ZS5zdFJvdGF0aW9uPz8wLHRoaXMuX2VsbGlwc29pZD1xLmNsb25lKGUuZWxsaXBzb2lkPz9xLmRlZmF1bHQpLHRoaXMuX3dvcmtlck5hbWU9ImNyZWF0ZUNvcGxhbmFyUG9seWdvbkdlb21ldHJ5Iix0aGlzLl90ZXh0dXJlQ29vcmRpbmF0ZXM9bix0aGlzLnBhY2tlZExlbmd0aD1sdC5jb21wdXRlSGllcmFyY2h5UGFja2VkTGVuZ3RoKHQscykraGUucGFja2VkTGVuZ3RoK3EucGFja2VkTGVuZ3RoKyhnKG4pP2x0LmNvbXB1dGVIaWVyYXJjaHlQYWNrZWRMZW5ndGgobixZKToxKSsyfXZhciBhayxyayxpayxjayxzayxmayxkayxWZix1ayxsayxtRSxoayxtayxiayxnayxfayx5ayxvMCxiRT1YKCgpPT57WGEoKTtEZigpO010KCk7anQoKTtJZSgpO3Z0KCk7WXAoKTttdCgpO3NlKCk7V2UoKTskdCgpO2VuKCk7dW4oKTtkYygpO2xyKCk7bm4oKTtHZSgpO0RuKCk7R2YoKTtKYSgpO2NuKCk7Sm8oKTtrbygpO2FrPW5ldyBzLHJrPW5ldyBZYSxpaz1uZXcgWSxjaz1uZXcgWSxzaz1uZXcgcyxmaz1uZXcgcyxkaz1uZXcgcyxWZj1uZXcgcyx1az1uZXcgcyxsaz1uZXcgcyxtRT1uZXcgWmUsaGs9bmV3IEosbWs9bmV3IEosYms9bmV3IHM7Z2MuZnJvbVBvc2l0aW9ucz1mdW5jdGlvbihlKXtlPWU/P0NlLkVNUFRZX09CSkVDVDtsZXQgdD17cG9seWdvbkhpZXJhcmNoeTp7cG9zaXRpb25zOmUucG9zaXRpb25zfSx2ZXJ0ZXhGb3JtYXQ6ZS52ZXJ0ZXhGb3JtYXQsc3RSb3RhdGlvbjplLnN0Um90YXRpb24sZWxsaXBzb2lkOmUuZWxsaXBzb2lkLHRleHR1cmVDb29yZGluYXRlczplLnRleHR1cmVDb29yZGluYXRlc307cmV0dXJuIG5ldyBnYyh0KX07Z2MucGFjaz1mdW5jdGlvbihlLHQsbil7cmV0dXJuIG49bj8/MCxuPWx0LnBhY2tQb2x5Z29uSGllcmFyY2h5KGUuX3BvbHlnb25IaWVyYXJjaHksdCxuLHMpLHEucGFjayhlLl9lbGxpcHNvaWQsdCxuKSxuKz1xLnBhY2tlZExlbmd0aCxoZS5wYWNrKGUuX3ZlcnRleEZvcm1hdCx0LG4pLG4rPWhlLnBhY2tlZExlbmd0aCx0W24rK109ZS5fc3RSb3RhdGlvbixnKGUuX3RleHR1cmVDb29yZGluYXRlcyk/bj1sdC5wYWNrUG9seWdvbkhpZXJhcmNoeShlLl90ZXh0dXJlQ29vcmRpbmF0ZXMsdCxuLFkpOnRbbisrXT0tMSx0W24rK109ZS5wYWNrZWRMZW5ndGgsdH07Z2s9cS5jbG9uZShxLlVOSVRfU1BIRVJFKSxfaz1uZXcgaGUseWs9e3BvbHlnb25IaWVyYXJjaHk6e319O2djLnVucGFjaz1mdW5jdGlvbihlLHQsbil7dD10Pz8wO2xldCBvPWx0LnVucGFja1BvbHlnb25IaWVyYXJjaHkoZSx0LHMpO3Q9by5zdGFydGluZ0luZGV4LGRlbGV0ZSBvLnN0YXJ0aW5nSW5kZXg7bGV0IGE9cS51bnBhY2soZSx0LGdrKTt0Kz1xLnBhY2tlZExlbmd0aDtsZXQgcj1oZS51bnBhY2soZSx0LF9rKTt0Kz1oZS5wYWNrZWRMZW5ndGg7bGV0IGk9ZVt0KytdLGY9ZVt0XT09PS0xP3ZvaWQgMDpsdC51bnBhY2tQb2x5Z29uSGllcmFyY2h5KGUsdCxZKTtnKGYpPyh0PWYuc3RhcnRpbmdJbmRleCxkZWxldGUgZi5zdGFydGluZ0luZGV4KTp0Kys7bGV0IGQ9ZVt0KytdO3JldHVybiBnKG4pfHwobj1uZXcgZ2MoeWspKSxuLl9wb2x5Z29uSGllcmFyY2h5PW8sbi5fZWxsaXBzb2lkPXEuY2xvbmUoYSxuLl9lbGxpcHNvaWQpLG4uX3ZlcnRleEZvcm1hdD1oZS5jbG9uZShyLG4uX3ZlcnRleEZvcm1hdCksbi5fc3RSb3RhdGlvbj1pLG4uX3RleHR1cmVDb29yZGluYXRlcz1mLG4ucGFja2VkTGVuZ3RoPWQsbn07Z2MuY3JlYXRlR2VvbWV0cnk9ZnVuY3Rpb24oZSl7bGV0IHQ9ZS5fdmVydGV4Rm9ybWF0LG49ZS5fcG9seWdvbkhpZXJhcmNoeSxvPWUuX3N0Um90YXRpb24sYT1lLl90ZXh0dXJlQ29vcmRpbmF0ZXMscj1nKGEpLGk9bi5wb3NpdGlvbnM7aWYoaT1ObihpLHMuZXF1YWxzRXBzaWxvbiwhMCksaS5sZW5ndGg8MylyZXR1cm47bGV0IGY9c2ssZD1mayxjPWRrLHU9dWssbD1saztpZighZ3MuY29tcHV0ZVByb2plY3RUbzJEQXJndW1lbnRzKGksVmYsdSxsKSlyZXR1cm47aWYoZj1zLmNyb3NzKHUsbCxmKSxmPXMubm9ybWFsaXplKGYsZiksIXMuZXF1YWxzRXBzaWxvbihWZixzLlpFUk8say5FUFNJTE9ONikpe2xldCBOPWUuX2VsbGlwc29pZC5nZW9kZXRpY1N1cmZhY2VOb3JtYWwoVmYsYmspO3MuZG90KGYsTik8MCYmKGY9cy5uZWdhdGUoZixmKSx1PXMubmVnYXRlKHUsdSkpfWxldCBtPWdzLmNyZWF0ZVByb2plY3RQb2ludHNUbzJERnVuY3Rpb24oVmYsdSxsKSxiPWdzLmNyZWF0ZVByb2plY3RQb2ludFRvMkRGdW5jdGlvbihWZix1LGwpO3QudGFuZ2VudCYmKGQ9cy5jbG9uZSh1LGQpKSx0LmJpdGFuZ2VudCYmKGM9cy5jbG9uZShsLGMpKTtsZXQgcD1sdC5wb2x5Z29uc0Zyb21IaWVyYXJjaHkobixyLG0sITEpLHk9cC5oaWVyYXJjaHksVD1wLnBvbHlnb25zLF89ZnVuY3Rpb24oTil7cmV0dXJuIE59LEU9cj9sdC5wb2x5Z29uc0Zyb21IaWVyYXJjaHkoYSwhMCxfLCExKS5wb2x5Z29uczp2b2lkIDA7aWYoeS5sZW5ndGg9PT0wKXJldHVybjtpPXlbMF0ub3V0ZXJSaW5nO2xldCB3PWdlLmZyb21Qb2ludHMoaSksUj1sdC5jb21wdXRlQm91bmRpbmdSZWN0YW5nbGUoZixiLGksbyxyayksUz1bXTtmb3IobGV0IE49MDtOPFQubGVuZ3RoO04rKyl7bGV0IFA9bmV3IHBvKHtnZW9tZXRyeTpwayhUW05dLHQsUixvLHI/RVtOXTp2b2lkIDAsYixmLGQsYyl9KTtTLnB1c2goUCl9bGV0IEM9SHQuY29tYmluZUluc3RhbmNlcyhTKVswXTtDLmF0dHJpYnV0ZXMucG9zaXRpb24udmFsdWVzPW5ldyBGbG9hdDY0QXJyYXkoQy5hdHRyaWJ1dGVzLnBvc2l0aW9uLnZhbHVlcyksQy5pbmRpY2VzPWtlLmNyZWF0ZVR5cGVkQXJyYXkoQy5hdHRyaWJ1dGVzLnBvc2l0aW9uLnZhbHVlcy5sZW5ndGgvMyxDLmluZGljZXMpO2xldCBJPUMuYXR0cmlidXRlcztyZXR1cm4gdC5wb3NpdGlvbnx8ZGVsZXRlIEkucG9zaXRpb24sbmV3IHZlKHthdHRyaWJ1dGVzOkksaW5kaWNlczpDLmluZGljZXMscHJpbWl0aXZlVHlwZTpDLnByaW1pdGl2ZVR5cGUsYm91bmRpbmdTcGhlcmU6d30pfTtvMD1nY30pO3ZhciBhMD17fTtydChhMCx7ZGVmYXVsdDooKT0+d2t9KTtmdW5jdGlvbiBBayhlLHQpe3JldHVybiBnKHQpJiYoZT1vMC51bnBhY2soZSx0KSksbzAuY3JlYXRlR2VvbWV0cnkoZSl9dmFyIHdrLHIwPVgoKCk9PntiRSgpO3NlKCk7d2s9QWt9KTtmdW5jdGlvbiBUayhlKXtsZXQgdD1lLmxlbmd0aCxuPW5ldyBGbG9hdDY0QXJyYXkodCozKSxvPWtlLmNyZWF0ZVR5cGVkQXJyYXkodCx0KjIpLGE9MCxyPTA7Zm9yKGxldCBmPTA7Zjx0O2YrKyl7bGV0IGQ9ZVtmXTtuW2ErK109ZC54LG5bYSsrXT1kLnksblthKytdPWQueixvW3IrK109ZixvW3IrK109KGYrMSkldH1sZXQgaT1uZXcgbnQoe3Bvc2l0aW9uOm5ldyBpZSh7Y29tcG9uZW50RGF0YXR5cGU6bmUuRE9VQkxFLGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6bn0pfSk7cmV0dXJuIG5ldyB2ZSh7YXR0cmlidXRlczppLGluZGljZXM6byxwcmltaXRpdmVUeXBlOlVlLkxJTkVTfSl9ZnVuY3Rpb24gX2MoZSl7ZT1lPz9DZS5FTVBUWV9PQkpFQ1Q7bGV0IHQ9ZS5wb2x5Z29uSGllcmFyY2h5O3RoaXMuX3BvbHlnb25IaWVyYXJjaHk9dCx0aGlzLl93b3JrZXJOYW1lPSJjcmVhdGVDb3BsYW5hclBvbHlnb25PdXRsaW5lR2VvbWV0cnkiLHRoaXMucGFja2VkTGVuZ3RoPWx0LmNvbXB1dGVIaWVyYXJjaHlQYWNrZWRMZW5ndGgodCxzKSsxfXZhciBFayxpMCxwRT1YKCgpPT57WGEoKTtNdCgpO0llKCk7dnQoKTtZcCgpO210KCk7c2UoKTskdCgpO2VuKCk7dW4oKTtkYygpO2xyKCk7bm4oKTtHZigpO2NuKCk7X2MuZnJvbVBvc2l0aW9ucz1mdW5jdGlvbihlKXtlPWU/P0NlLkVNUFRZX09CSkVDVDtsZXQgdD17cG9seWdvbkhpZXJhcmNoeTp7cG9zaXRpb25zOmUucG9zaXRpb25zfX07cmV0dXJuIG5ldyBfYyh0KX07X2MucGFjaz1mdW5jdGlvbihlLHQsbil7cmV0dXJuIG49bj8/MCxuPWx0LnBhY2tQb2x5Z29uSGllcmFyY2h5KGUuX3BvbHlnb25IaWVyYXJjaHksdCxuLHMpLHRbbl09ZS5wYWNrZWRMZW5ndGgsdH07RWs9e3BvbHlnb25IaWVyYXJjaHk6e319O19jLnVucGFjaz1mdW5jdGlvbihlLHQsbil7dD10Pz8wO2xldCBvPWx0LnVucGFja1BvbHlnb25IaWVyYXJjaHkoZSx0LHMpO3Q9by5zdGFydGluZ0luZGV4LGRlbGV0ZSBvLnN0YXJ0aW5nSW5kZXg7bGV0IGE9ZVt0XTtyZXR1cm4gZyhuKXx8KG49bmV3IF9jKEVrKSksbi5fcG9seWdvbkhpZXJhcmNoeT1vLG4ucGFja2VkTGVuZ3RoPWEsbn07X2MuY3JlYXRlR2VvbWV0cnk9ZnVuY3Rpb24oZSl7bGV0IHQ9ZS5fcG9seWdvbkhpZXJhcmNoeSxuPXQucG9zaXRpb25zO2lmKG49Tm4obixzLmVxdWFsc0Vwc2lsb24sITApLG4ubGVuZ3RoPDN8fCFncy52YWxpZE91dGxpbmUobikpcmV0dXJuO2xldCBhPWx0LnBvbHlnb25PdXRsaW5lc0Zyb21IaWVyYXJjaHkodCwhMSk7aWYoYS5sZW5ndGg9PT0wKXJldHVybjtsZXQgcj1bXTtmb3IobGV0IGQ9MDtkPGEubGVuZ3RoO2QrKyl7bGV0IGM9bmV3IHBvKHtnZW9tZXRyeTpUayhhW2RdKX0pO3IucHVzaChjKX1sZXQgaT1IdC5jb21iaW5lSW5zdGFuY2VzKHIpWzBdLGY9Z2UuZnJvbVBvaW50cyh0LnBvc2l0aW9ucyk7cmV0dXJuIG5ldyB2ZSh7YXR0cmlidXRlczppLmF0dHJpYnV0ZXMsaW5kaWNlczppLmluZGljZXMscHJpbWl0aXZlVHlwZTppLnByaW1pdGl2ZVR5cGUsYm91bmRpbmdTcGhlcmU6Zn0pfTtpMD1fY30pO3ZhciBjMD17fTtydChjMCx7ZGVmYXVsdDooKT0+eGt9KTtmdW5jdGlvbiBSayhlLHQpe3JldHVybiBnKHQpJiYoZT1pMC51bnBhY2soZSx0KSksZS5fZWxsaXBzb2lkPXEuY2xvbmUoZS5fZWxsaXBzb2lkKSxpMC5jcmVhdGVHZW9tZXRyeShlKX12YXIgeGssczA9WCgoKT0+e3BFKCk7c2UoKTtXZSgpO3hrPVJrfSk7dmFyIE9rLGhuLHljPVgoKCk9PntPaz17Uk9VTkRFRDowLE1JVEVSRUQ6MSxCRVZFTEVEOjJ9LGhuPU9iamVjdC5mcmVlemUoT2spfSk7ZnVuY3Rpb24gU2soZSl7bGV0IHQ9ZS5fdVNxdWFyZWQsbj1lLl9lbGxpcHNvaWQubWF4aW11bVJhZGl1cyxvPWUuX2VsbGlwc29pZC5taW5pbXVtUmFkaXVzLGE9KG4tbykvbixyPU1hdGguY29zKGUuX3N0YXJ0SGVhZGluZyksaT1NYXRoLnNpbihlLl9zdGFydEhlYWRpbmcpLGY9KDEtYSkqTWF0aC50YW4oZS5fc3RhcnQubGF0aXR1ZGUpLGQ9MS9NYXRoLnNxcnQoMStmKmYpLGM9ZCpmLHU9TWF0aC5hdGFuMihmLHIpLGw9ZCppLGg9bCpsLG09MS1oLGI9TWF0aC5zcXJ0KG0pLHA9dC80LHk9cCpwLFQ9eSpwLF89eSp5LEU9MStwLTMqeS80KzUqVC80LTE3NSpfLzY0LHc9MS1wKzE1KnkvOC0zNSpULzgsUj0xLTMqcCszNSp5LzQsUz0xLTUqcCxDPUUqdS13Kk1hdGguc2luKDIqdSkqcC8yLVIqTWF0aC5zaW4oNCp1KSp5LzE2LVMqTWF0aC5zaW4oNip1KSpULzQ4LU1hdGguc2luKDgqdSkqNSpfLzUxMixJPWUuX2NvbnN0YW50cztJLmE9bixJLmI9byxJLmY9YSxJLmNvc2luZUhlYWRpbmc9cixJLnNpbmVIZWFkaW5nPWksSS50YW5VPWYsSS5jb3NpbmVVPWQsSS5zaW5lVT1jLEkuc2lnbWE9dSxJLnNpbmVBbHBoYT1sLEkuc2luZVNxdWFyZWRBbHBoYT1oLEkuY29zaW5lU3F1YXJlZEFscGhhPW0sSS5jb3NpbmVBbHBoYT1iLEkudTJPdmVyND1wLEkudTRPdmVyMTY9eSxJLnU2T3ZlcjY0PVQsSS51OE92ZXIyNTY9XyxJLmEwPUUsSS5hMT13LEkuYTI9UixJLmEzPVMsSS5kaXN0YW5jZVJhdGlvPUN9ZnVuY3Rpb24gQ2soZSx0KXtyZXR1cm4gZSp0Kig0K2UqKDQtMyp0KSkvMTZ9ZnVuY3Rpb24gZ0UoZSx0LG4sbyxhLHIsaSl7bGV0IGY9Q2soZSxuKTtyZXR1cm4oMS1mKSplKnQqKG8rZiphKihpK2YqciooMippKmktMSkpKX1mdW5jdGlvbiBNayhlLHQsbixvLGEscixpKXtsZXQgZj0odC1uKS90LGQ9ci1vLGM9TWF0aC5hdGFuKCgxLWYpKk1hdGgudGFuKGEpKSx1PU1hdGguYXRhbigoMS1mKSpNYXRoLnRhbihpKSksbD1NYXRoLmNvcyhjKSxoPU1hdGguc2luKGMpLG09TWF0aC5jb3ModSksYj1NYXRoLnNpbih1KSxwPWwqbSx5PWwqYixUPWgqYixfPWgqbSxFPWQsdz1rLlRXT19QSSxSPU1hdGguY29zKEUpLFM9TWF0aC5zaW4oRSksQyxJLE4sUCxGO2Rve1I9TWF0aC5jb3MoRSksUz1NYXRoLnNpbihFKTtsZXQgSD15LV8qUjtOPU1hdGguc3FydChtKm0qUypTK0gqSCksST1UK3AqUixDPU1hdGguYXRhbjIoTixJKTtsZXQgTztOPT09MD8oTz0wLFA9MSk6KE89cCpTL04sUD0xLU8qTyksdz1FLEY9SS0yKlQvUCxpc0Zpbml0ZShGKXx8KEY9MCksRT1kK2dFKGYsTyxQLEMsTixJLEYpfXdoaWxlKE1hdGguYWJzKEUtdyk+ay5FUFNJTE9OMTIpO2xldCBBPVAqKHQqdC1uKm4pLyhuKm4pLHg9MStBKig0MDk2K0EqKEEqKDMyMC0xNzUqQSktNzY4KSkvMTYzODQsTT1BKigyNTYrQSooQSooNzQtNDcqQSktMTI4KSkvMTAyNCx2PUYqRixVPU0qTiooRitNKihJKigyKnYtMSktTSpGKig0Kk4qTi0zKSooNCp2LTMpLzYpLzQpLHo9bip4KihDLVUpLEQ9TWF0aC5hdGFuMihtKlMseS1fKlIpLEc9TWF0aC5hdGFuMihsKlMseSpSLV8pO2UuX2Rpc3RhbmNlPXosZS5fc3RhcnRIZWFkaW5nPUQsZS5fZW5kSGVhZGluZz1HLGUuX3VTcXVhcmVkPUF9ZnVuY3Rpb24gX0UoZSx0LG4sbyl7bGV0IGE9cy5ub3JtYWxpemUoby5jYXJ0b2dyYXBoaWNUb0NhcnRlc2lhbih0LGYwKSxOaykscj1zLm5vcm1hbGl6ZShvLmNhcnRvZ3JhcGhpY1RvQ2FydGVzaWFuKG4sZjApLGYwKTtNayhlLG8ubWF4aW11bVJhZGl1cyxvLm1pbmltdW1SYWRpdXMsdC5sb25naXR1ZGUsdC5sYXRpdHVkZSxuLmxvbmdpdHVkZSxuLmxhdGl0dWRlKSxlLl9zdGFydD1yZS5jbG9uZSh0LGUuX3N0YXJ0KSxlLl9lbmQ9cmUuY2xvbmUobixlLl9lbmQpLGUuX3N0YXJ0LmhlaWdodD0wLGUuX2VuZC5oZWlnaHQ9MCxTayhlKX1mdW5jdGlvbiBIZihlLHQsbil7bGV0IG89bj8/cS5kZWZhdWx0O3RoaXMuX2VsbGlwc29pZD1vLHRoaXMuX3N0YXJ0PW5ldyByZSx0aGlzLl9lbmQ9bmV3IHJlLHRoaXMuX2NvbnN0YW50cz17fSx0aGlzLl9zdGFydEhlYWRpbmc9dm9pZCAwLHRoaXMuX2VuZEhlYWRpbmc9dm9pZCAwLHRoaXMuX2Rpc3RhbmNlPXZvaWQgMCx0aGlzLl91U3F1YXJlZD12b2lkIDAsZyhlKSYmZyh0KSYmX0UodGhpcyxlLHQsbyl9dmFyIE5rLGYwLGJoLGQwPVgoKCk9PntJZSgpO1R0KCk7c2UoKTtXZSgpO0dlKCk7Tms9bmV3IHMsZjA9bmV3IHM7T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoSGYucHJvdG90eXBlLHtlbGxpcHNvaWQ6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9lbGxpcHNvaWR9fSxzdXJmYWNlRGlzdGFuY2U6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9kaXN0YW5jZX19LHN0YXJ0OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RhcnR9fSxlbmQ6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9lbmR9fSxzdGFydEhlYWRpbmc6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdGFydEhlYWRpbmd9fSxlbmRIZWFkaW5nOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZW5kSGVhZGluZ319fSk7SGYucHJvdG90eXBlLnNldEVuZFBvaW50cz1mdW5jdGlvbihlLHQpe19FKHRoaXMsZSx0LHRoaXMuX2VsbGlwc29pZCl9O0hmLnByb3RvdHlwZS5pbnRlcnBvbGF0ZVVzaW5nRnJhY3Rpb249ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5pbnRlcnBvbGF0ZVVzaW5nU3VyZmFjZURpc3RhbmNlKHRoaXMuX2Rpc3RhbmNlKmUsdCl9O0hmLnByb3RvdHlwZS5pbnRlcnBvbGF0ZVVzaW5nU3VyZmFjZURpc3RhbmNlPWZ1bmN0aW9uKGUsdCl7bGV0IG49dGhpcy5fY29uc3RhbnRzLG89bi5kaXN0YW5jZVJhdGlvK2Uvbi5iLGE9TWF0aC5jb3MoMipvKSxyPU1hdGguY29zKDQqbyksaT1NYXRoLmNvcyg2Km8pLGY9TWF0aC5zaW4oMipvKSxkPU1hdGguc2luKDQqbyksYz1NYXRoLnNpbig2Km8pLHU9TWF0aC5zaW4oOCpvKSxsPW8qbyxoPW8qbCxtPW4udThPdmVyMjU2LGI9bi51Mk92ZXI0LHA9bi51Nk92ZXI2NCx5PW4udTRPdmVyMTYsVD0yKmgqbSphLzMrbyooMS1iKzcqeS80LTE1KnAvNCs1NzkqbS82NC0oeS0xNSpwLzQrMTg3Km0vMTYpKmEtKDUqcC80LTExNSptLzE2KSpyLTI5Km0qaS8xNikrKGIvMi15KzcxKnAvMzItODUqbS8xNikqZisoNSp5LzE2LTUqcC80KzM4MyptLzk2KSpkLWwqKChwLTExKm0vMikqZis1Km0qZC8yKSsoMjkqcC85Ni0yOSptLzE2KSpjKzUzOSptKnUvMTUzNixfPU1hdGguYXNpbihNYXRoLnNpbihUKSpuLmNvc2luZUFscGhhKSxFPU1hdGguYXRhbihuLmEvbi5iKk1hdGgudGFuKF8pKTtUPVQtbi5zaWdtYTtsZXQgdz1NYXRoLmNvcygyKm4uc2lnbWErVCksUj1NYXRoLnNpbihUKSxTPU1hdGguY29zKFQpLEM9bi5jb3NpbmVVKlMsST1uLnNpbmVVKlIsUD1NYXRoLmF0YW4yKFIqbi5zaW5lSGVhZGluZyxDLUkqbi5jb3NpbmVIZWFkaW5nKS1nRShuLmYsbi5zaW5lQWxwaGEsbi5jb3NpbmVTcXVhcmVkQWxwaGEsVCxSLFMsdyk7cmV0dXJuIGcodCk/KHQubG9uZ2l0dWRlPXRoaXMuX3N0YXJ0LmxvbmdpdHVkZStQLHQubGF0aXR1ZGU9RSx0LmhlaWdodD0wLHQpOm5ldyByZSh0aGlzLl9zdGFydC5sb25naXR1ZGUrUCxFLDApfTtiaD1IZn0pO2Z1bmN0aW9uIFRFKGUsdCxuKXtsZXQgbz1sMDtvLmxlbmd0aD1lO2xldCBhO2lmKHQ9PT1uKXtmb3IoYT0wO2E8ZTthKyspb1thXT10O3JldHVybiBvfWxldCBpPShuLXQpL2U7Zm9yKGE9MDthPGU7YSsrKXtsZXQgZj10K2EqaTtvW2FdPWZ9cmV0dXJuIG99ZnVuY3Rpb24gTGsoZSx0LG4sbyxhLHIsaSxmKXtsZXQgZD1vLnNjYWxlVG9HZW9kZXRpY1N1cmZhY2UoZSxoMCksYz1vLnNjYWxlVG9HZW9kZXRpY1N1cmZhY2UodCxVayksdT1Hby5udW1iZXJPZlBvaW50cyhlLHQsbiksbD1vLmNhcnRlc2lhblRvQ2FydG9ncmFwaGljKGQsZ2gpLGg9by5jYXJ0ZXNpYW5Ub0NhcnRvZ3JhcGhpYyhjLHBoKSxtPVRFKHUsYSxyKTt1MC5zZXRFbmRQb2ludHMobCxoKTtsZXQgYj11MC5zdXJmYWNlRGlzdGFuY2UvdSxwPWY7bC5oZWlnaHQ9YTtsZXQgeT1vLmNhcnRvZ3JhcGhpY1RvQ2FydGVzaWFuKGwseGkpO3MucGFjayh5LGkscCkscCs9Mztmb3IobGV0IFQ9MTtUPHU7VCsrKXtsZXQgXz11MC5pbnRlcnBvbGF0ZVVzaW5nU3VyZmFjZURpc3RhbmNlKFQqYixwaCk7Xy5oZWlnaHQ9bVtUXSx5PW8uY2FydG9ncmFwaGljVG9DYXJ0ZXNpYW4oXyx4aSkscy5wYWNrKHksaSxwKSxwKz0zfXJldHVybiBwfWZ1bmN0aW9uIGprKGUsdCxuLG8sYSxyLGksZil7bGV0IGQ9by5jYXJ0ZXNpYW5Ub0NhcnRvZ3JhcGhpYyhlLGdoKSxjPW8uY2FydGVzaWFuVG9DYXJ0b2dyYXBoaWModCxwaCksdT1Hby5udW1iZXJPZlBvaW50c1JodW1iTGluZShkLGMsbik7ZC5oZWlnaHQ9MCxjLmhlaWdodD0wO2xldCBsPVRFKHUsYSxyKTtLZi5lbGxpcHNvaWQuZXF1YWxzKG8pfHwoS2Y9bmV3IGVhKHZvaWQgMCx2b2lkIDAsbykpLEtmLnNldEVuZFBvaW50cyhkLGMpO2xldCBoPUtmLnN1cmZhY2VEaXN0YW5jZS91LG09ZjtkLmhlaWdodD1hO2xldCBiPW8uY2FydG9ncmFwaGljVG9DYXJ0ZXNpYW4oZCx4aSk7cy5wYWNrKGIsaSxtKSxtKz0zO2ZvcihsZXQgcD0xO3A8dTtwKyspe2xldCB5PUtmLmludGVycG9sYXRlVXNpbmdTdXJmYWNlRGlzdGFuY2UocCpoLHBoKTt5LmhlaWdodD1sW3BdLGI9by5jYXJ0b2dyYXBoaWNUb0NhcnRlc2lhbih5LHhpKSxzLnBhY2soYixpLG0pLG0rPTN9cmV0dXJuIG19dmFyIEdvLElrLFBrLGtrLHlFLHZrLEFFLEZrLERrLEJrLGwwLGdoLHBoLHhpLGgwLFVrLHUwLEtmLHdFLHprLEFuLHdzPVgoKCk9PntJZSgpO1R0KCk7c2UoKTtXZSgpO2QwKCk7VWYoKTtwaSgpO0dlKCk7cG4oKTtnaSgpO0dvPXt9O0dvLm51bWJlck9mUG9pbnRzPWZ1bmN0aW9uKGUsdCxuKXtsZXQgbz1zLmRpc3RhbmNlKGUsdCk7cmV0dXJuIE1hdGguY2VpbChvL24pfTtHby5udW1iZXJPZlBvaW50c1JodW1iTGluZT1mdW5jdGlvbihlLHQsbil7bGV0IG89TWF0aC5wb3coZS5sb25naXR1ZGUtdC5sb25naXR1ZGUsMikrTWF0aC5wb3coZS5sYXRpdHVkZS10LmxhdGl0dWRlLDIpO3JldHVybiBNYXRoLm1heCgxLE1hdGguY2VpbChNYXRoLnNxcnQoby8obipuKSkpKX07SWs9bmV3IHJlO0dvLmV4dHJhY3RIZWlnaHRzPWZ1bmN0aW9uKGUsdCl7bGV0IG49ZS5sZW5ndGgsbz1uZXcgQXJyYXkobik7Zm9yKGxldCBhPTA7YTxuO2ErKyl7bGV0IHI9ZVthXTtvW2FdPXQuY2FydGVzaWFuVG9DYXJ0b2dyYXBoaWMocixJaykuaGVpZ2h0fXJldHVybiBvfTtQaz1uZXcgJCxraz1uZXcgcyx5RT1uZXcgcyx2az1uZXcgc24ocy5VTklUX1gsMCksQUU9bmV3IHMsRms9bmV3IHNuKHMuVU5JVF9YLDApLERrPW5ldyBzLEJrPW5ldyBzLGwwPVtdO2doPW5ldyByZSxwaD1uZXcgcmUseGk9bmV3IHMsaDA9bmV3IHMsVWs9bmV3IHMsdTA9bmV3IGJoLEtmPW5ldyBlYTtHby53cmFwTG9uZ2l0dWRlPWZ1bmN0aW9uKGUsdCl7bGV0IG49W10sbz1bXTtpZihnKGUpJiZlLmxlbmd0aD4wKXt0PXQ/PyQuSURFTlRJVFk7bGV0IGE9JC5pbnZlcnNlVHJhbnNmb3JtYXRpb24odCxQaykscj0kLm11bHRpcGx5QnlQb2ludChhLHMuWkVSTyxrayksaT1zLm5vcm1hbGl6ZSgkLm11bHRpcGx5QnlQb2ludEFzVmVjdG9yKGEscy5VTklUX1kseUUpLHlFKSxmPXNuLmZyb21Qb2ludE5vcm1hbChyLGksdmspLGQ9cy5ub3JtYWxpemUoJC5tdWx0aXBseUJ5UG9pbnRBc1ZlY3RvcihhLHMuVU5JVF9YLEFFKSxBRSksYz1zbi5mcm9tUG9pbnROb3JtYWwocixkLEZrKSx1PTE7bi5wdXNoKHMuY2xvbmUoZVswXSkpO2xldCBsPW5bMF0saD1lLmxlbmd0aDtmb3IobGV0IG09MTttPGg7KyttKXtsZXQgYj1lW21dO2lmKHNuLmdldFBvaW50RGlzdGFuY2UoYyxsKTwwfHxzbi5nZXRQb2ludERpc3RhbmNlKGMsYik8MCl7bGV0IHA9bm8ubGluZVNlZ21lbnRQbGFuZShsLGIsZixEayk7aWYoZyhwKSl7bGV0IHk9cy5tdWx0aXBseUJ5U2NhbGFyKGksNWUtOSxCayk7c24uZ2V0UG9pbnREaXN0YW5jZShmLGwpPDAmJnMubmVnYXRlKHkseSksbi5wdXNoKHMuYWRkKHAseSxuZXcgcykpLG8ucHVzaCh1KzEpLHMubmVnYXRlKHkseSksbi5wdXNoKHMuYWRkKHAseSxuZXcgcykpLHU9MX19bi5wdXNoKHMuY2xvbmUoZVttXSkpLHUrKyxsPWJ9by5wdXNoKHUpfXJldHVybntwb3NpdGlvbnM6bixsZW5ndGhzOm99fTtHby5nZW5lcmF0ZUFyYz1mdW5jdGlvbihlKXtnKGUpfHwoZT17fSk7bGV0IHQ9ZS5wb3NpdGlvbnMsbj10Lmxlbmd0aCxvPWUuZWxsaXBzb2lkPz9xLmRlZmF1bHQsYT1lLmhlaWdodD8/MCxyPUFycmF5LmlzQXJyYXkoYSk7aWYobjwxKXJldHVybltdO2lmKG49PT0xKXtsZXQgcD1vLnNjYWxlVG9HZW9kZXRpY1N1cmZhY2UodFswXSxoMCk7aWYoYT1yP2FbMF06YSxhIT09MCl7bGV0IHk9by5nZW9kZXRpY1N1cmZhY2VOb3JtYWwocCx4aSk7cy5tdWx0aXBseUJ5U2NhbGFyKHksYSx5KSxzLmFkZChwLHkscCl9cmV0dXJuW3AueCxwLnkscC56XX1sZXQgaT1lLm1pbkRpc3RhbmNlO2lmKCFnKGkpKXtsZXQgcD1lLmdyYW51bGFyaXR5Pz9rLlJBRElBTlNfUEVSX0RFR1JFRTtpPWsuY2hvcmRMZW5ndGgocCxvLm1heGltdW1SYWRpdXMpfWxldCBmPTAsZDtmb3IoZD0wO2Q8bi0xO2QrKylmKz1Hby5udW1iZXJPZlBvaW50cyh0W2RdLHRbZCsxXSxpKTtsZXQgYz0oZisxKSozLHU9bmV3IEFycmF5KGMpLGw9MDtmb3IoZD0wO2Q8bi0xO2QrKyl7bGV0IHA9dFtkXSx5PXRbZCsxXSxUPXI/YVtkXTphLF89cj9hW2QrMV06YTtsPUxrKHAseSxpLG8sVCxfLHUsbCl9bDAubGVuZ3RoPTA7bGV0IGg9dFtuLTFdLG09by5jYXJ0ZXNpYW5Ub0NhcnRvZ3JhcGhpYyhoLGdoKTttLmhlaWdodD1yP2Fbbi0xXTphO2xldCBiPW8uY2FydG9ncmFwaGljVG9DYXJ0ZXNpYW4obSx4aSk7cmV0dXJuIHMucGFjayhiLHUsYy0zKSx1fTt3RT1uZXcgcmUsems9bmV3IHJlO0dvLmdlbmVyYXRlUmh1bWJBcmM9ZnVuY3Rpb24oZSl7ZyhlKXx8KGU9e30pO2xldCB0PWUucG9zaXRpb25zLG49dC5sZW5ndGgsbz1lLmVsbGlwc29pZD8/cS5kZWZhdWx0LGE9ZS5oZWlnaHQ/PzAscj1BcnJheS5pc0FycmF5KGEpO2lmKG48MSlyZXR1cm5bXTtpZihuPT09MSl7bGV0IFQ9by5zY2FsZVRvR2VvZGV0aWNTdXJmYWNlKHRbMF0saDApO2lmKGE9cj9hWzBdOmEsYSE9PTApe2xldCBfPW8uZ2VvZGV0aWNTdXJmYWNlTm9ybWFsKFQseGkpO3MubXVsdGlwbHlCeVNjYWxhcihfLGEsXykscy5hZGQoVCxfLFQpfXJldHVybltULngsVC55LFQuel19bGV0IGk9ZS5ncmFudWxhcml0eT8/ay5SQURJQU5TX1BFUl9ERUdSRUUsZj0wLGQsYz1vLmNhcnRlc2lhblRvQ2FydG9ncmFwaGljKHRbMF0sd0UpLHU7Zm9yKGQ9MDtkPG4tMTtkKyspdT1vLmNhcnRlc2lhblRvQ2FydG9ncmFwaGljKHRbZCsxXSx6ayksZis9R28ubnVtYmVyT2ZQb2ludHNSaHVtYkxpbmUoYyx1LGkpLGM9cmUuY2xvbmUodSx3RSk7bGV0IGw9KGYrMSkqMyxoPW5ldyBBcnJheShsKSxtPTA7Zm9yKGQ9MDtkPG4tMTtkKyspe2xldCBUPXRbZF0sXz10W2QrMV0sRT1yP2FbZF06YSx3PXI/YVtkKzFdOmE7bT1qayhULF8saSxvLEUsdyxoLG0pfWwwLmxlbmd0aD0wO2xldCBiPXRbbi0xXSxwPW8uY2FydGVzaWFuVG9DYXJ0b2dyYXBoaWMoYixnaCk7cC5oZWlnaHQ9cj9hW24tMV06YTtsZXQgeT1vLmNhcnRvZ3JhcGhpY1RvQ2FydGVzaWFuKHAseGkpO3JldHVybiBzLnBhY2soeSxoLGwtMyksaH07R28uZ2VuZXJhdGVDYXJ0ZXNpYW5BcmM9ZnVuY3Rpb24oZSl7bGV0IHQ9R28uZ2VuZXJhdGVBcmMoZSksbj10Lmxlbmd0aC8zLG89bmV3IEFycmF5KG4pO2ZvcihsZXQgYT0wO2E8bjthKyspb1thXT1zLnVucGFjayh0LGEqMyk7cmV0dXJuIG99O0dvLmdlbmVyYXRlQ2FydGVzaWFuUmh1bWJBcmM9ZnVuY3Rpb24oZSl7bGV0IHQ9R28uZ2VuZXJhdGVSaHVtYkFyYyhlKSxuPXQubGVuZ3RoLzMsbz1uZXcgQXJyYXkobik7Zm9yKGxldCBhPTA7YTxuO2ErKylvW2FdPXMudW5wYWNrKHQsYSozKTtyZXR1cm4gb307QW49R299KTtmdW5jdGlvbiBxZihlLHQpe2coRUVbZV0pfHwoRUVbZV09ITAsY29uc29sZS53YXJuKHQ/P2UpKX12YXIgRUUsX2gsbTA9WCgoKT0+e3NlKCk7RUU9e307cWYuZ2VvbWV0cnlPdXRsaW5lcz0iRW50aXR5IGdlb21ldHJ5IG91dGxpbmVzIGFyZSB1bnN1cHBvcnRlZCBvbiB0ZXJyYWluLiBPdXRsaW5lcyB3aWxsIGJlIGRpc2FibGVkLiBUbyBlbmFibGUgb3V0bGluZXMsIGRpc2FibGUgZ2VvbWV0cnkgdGVycmFpbiBjbGFtcGluZyBieSBleHBsaWNpdGx5IHNldHRpbmcgaGVpZ2h0IHRvIDAuIjtxZi5nZW9tZXRyeVpJbmRleD0iRW50aXR5IGdlb21ldHJ5IHdpdGggekluZGV4IGFyZSB1bnN1cHBvcnRlZCB3aGVuIGhlaWdodCBvciBleHRydWRlZEhlaWdodCBhcmUgZGVmaW5lZC4gIHpJbmRleCB3aWxsIGJlIGlnbm9yZWQiO3FmLmdlb21ldHJ5SGVpZ2h0UmVmZXJlbmNlPSJFbnRpdHkgY29ycmlkb3IsIGVsbGlwc2UsIHBvbHlnb24gb3IgcmVjdGFuZ2xlIHdpdGggaGVpZ2h0UmVmZXJlbmNlIG11c3QgYWxzbyBoYXZlIGEgZGVmaW5lZCBoZWlnaHQuICBoZWlnaHRSZWZlcmVuY2Ugd2lsbCBiZSBpZ25vcmVkIjtxZi5nZW9tZXRyeUV4dHJ1ZGVkSGVpZ2h0UmVmZXJlbmNlPSJFbnRpdHkgY29ycmlkb3IsIGVsbGlwc2UsIHBvbHlnb24gb3IgcmVjdGFuZ2xlIHdpdGggZXh0cnVkZWRIZWlnaHRSZWZlcmVuY2UgbXVzdCBhbHNvIGhhdmUgYSBkZWZpbmVkIGV4dHJ1ZGVkSGVpZ2h0LiAgZXh0cnVkZWRIZWlnaHRSZWZlcmVuY2Ugd2lsbCBiZSBpZ25vcmVkIjtfaD1xZn0pO2Z1bmN0aW9uIFprKGUsdCl7bGV0IG49bmV3IEFycmF5KGUubGVuZ3RoKTtmb3IobGV0IG89MDtvPGUubGVuZ3RoO28rKyl7bGV0IGE9ZVtvXTtiMD10LmNhcnRlc2lhblRvQ2FydG9ncmFwaGljKGEsYjApLG5bb109YjAuaGVpZ2h0LGVbb109dC5zY2FsZVRvR2VvZGV0aWNTdXJmYWNlKGEsYSl9cmV0dXJuIG59ZnVuY3Rpb24gcDAoZSx0LG4sbyl7bGV0IGE9ZVswXSxyPWVbMV0saT1zLmFuZ2xlQmV0d2VlbihhLHIpLGY9TWF0aC5jZWlsKGkvbyksZD1uZXcgQXJyYXkoZiksYztpZih0PT09bil7Zm9yKGM9MDtjPGY7YysrKWRbY109dDtyZXR1cm4gZC5wdXNoKG4pLGR9bGV0IGw9KG4tdCkvZjtmb3IoYz0xO2M8ZjtjKyspe2xldCBoPXQrYypsO2RbY109aH1yZXR1cm4gZFswXT10LGQucHVzaChuKSxkfWZ1bmN0aW9uIFFrKGUsdCxuLG8pe2xldCBhPW5ldyB4byhuLG8pLHI9YS5wcm9qZWN0UG9pbnRPbnRvUGxhbmUocy5hZGQobixlLEFoKSxBaCksaT1hLnByb2plY3RQb2ludE9udG9QbGFuZShzLmFkZChuLHQsd2gpLHdoKSxmPVkuYW5nbGVCZXR3ZWVuKHIsaSk7cmV0dXJuIGkueCpyLnktaS55KnIueD49MD8tZjpmfWZ1bmN0aW9uIEtyKGUsdCxuLG8sYSxyLGksZil7bGV0IGQ9bnYsYz1vdjtBYz1jby5lYXN0Tm9ydGhVcFRvRml4ZWRGcmFtZShlLGEsQWMpLGQ9JC5tdWx0aXBseUJ5UG9pbnRBc1ZlY3RvcihBYywkayxkKSxkPXMubm9ybWFsaXplKGQsZCk7bGV0IHU9UWsoZCx0LGUsYSk7ZzA9Si5mcm9tUm90YXRpb25aKHUsZzApLFJFLno9cixBYz0kLm11bHRpcGx5VHJhbnNmb3JtYXRpb24oQWMsJC5mcm9tUm90YXRpb25UcmFuc2xhdGlvbihnMCxSRSxldiksQWMpO2xldCBsPXR2O2xbMF09aTtmb3IobGV0IGg9MDtoPGY7aCsrKWZvcihsZXQgbT0wO208bi5sZW5ndGg7bSs9MyljPXMuZnJvbUFycmF5KG4sbSxjKSxjPUoubXVsdGlwbHlCeVZlY3RvcihsLGMsYyksYz0kLm11bHRpcGx5QnlQb2ludChBYyxjLGMpLG8ucHVzaChjLngsYy55LGMueik7cmV0dXJuIG99ZnVuY3Rpb24gXzAoZSx0LG4sbyxhLHIsaSl7Zm9yKGxldCBmPTA7ZjxlLmxlbmd0aDtmKz0zKXtsZXQgZD1zLmZyb21BcnJheShlLGYsYXYpO289S3IoZCx0LG4sbyxhLHJbZi8zXSxpLDEpfXJldHVybiBvfWZ1bmN0aW9uIHJ2KGUsdCl7bGV0IG49ZS5sZW5ndGgsbz1uZXcgQXJyYXkobio2KSxhPTAscj10LngrdC53aWR0aC8yLGk9dC55K3QuaGVpZ2h0LzIsZj1lWzBdO29bYSsrXT1mLngtcixvW2ErK109MCxvW2ErK109Zi55LWk7Zm9yKGxldCBkPTE7ZDxuO2QrKyl7Zj1lW2RdO2xldCBjPWYueC1yLHU9Zi55LWk7b1thKytdPWMsb1thKytdPTAsb1thKytdPXUsb1thKytdPWMsb1thKytdPTAsb1thKytdPXV9cmV0dXJuIGY9ZVswXSxvW2ErK109Zi54LXIsb1thKytdPTAsb1thKytdPWYueS1pLG99ZnVuY3Rpb24geEUoZSx0KXtsZXQgbj1lLmxlbmd0aCxvPW5ldyBBcnJheShuKjMpLGE9MCxyPXQueCt0LndpZHRoLzIsaT10LnkrdC5oZWlnaHQvMjtmb3IobGV0IGY9MDtmPG47ZisrKW9bYSsrXT1lW2ZdLngtcixvW2ErK109MCxvW2ErK109ZVtmXS55LWk7cmV0dXJuIG99ZnVuY3Rpb24gTUUoZSx0LG4sbyxhLHIsaSxmLGQsYyl7bGV0IHU9cy5hbmdsZUJldHdlZW4ocy5zdWJ0cmFjdCh0LGUsVHMpLHMuc3VidHJhY3QobixlLHloKSksbD1vPT09aG4uQkVWRUxFRD8wOk1hdGguY2VpbCh1L2sudG9SYWRpYW5zKDUpKSxoO2E/aD1KLmZyb21RdWF0ZXJuaW9uKFplLmZyb21BeGlzQW5nbGUocy5uZWdhdGUoZSxUcyksdS8obCsxKSxPRSksQ0UpOmg9Si5mcm9tUXVhdGVybmlvbihaZS5mcm9tQXhpc0FuZ2xlKGUsdS8obCsxKSxPRSksQ0UpO2xldCBtLGI7aWYodD1zLmNsb25lKHQsU0UpLGw+MCl7bGV0IHA9Yz8yOjE7Zm9yKGxldCB5PTA7eTxsO3krKyl0PUoubXVsdGlwbHlCeVZlY3RvcihoLHQsdCksbT1zLnN1YnRyYWN0KHQsZSxUcyksbT1zLm5vcm1hbGl6ZShtLG0pLGF8fChtPXMubmVnYXRlKG0sbSkpLGI9ci5zY2FsZVRvR2VvZGV0aWNTdXJmYWNlKHQseWgpLGk9S3IoYixtLGYsaSxyLGQsMSxwKX1lbHNlIG09cy5zdWJ0cmFjdCh0LGUsVHMpLG09cy5ub3JtYWxpemUobSxtKSxhfHwobT1zLm5lZ2F0ZShtLG0pKSxiPXIuc2NhbGVUb0dlb2RldGljU3VyZmFjZSh0LHloKSxpPUtyKGIsbSxmLGkscixkLDEsMSksbj1zLmNsb25lKG4sU0UpLG09cy5zdWJ0cmFjdChuLGUsVHMpLG09cy5ub3JtYWxpemUobSxtKSxhfHwobT1zLm5lZ2F0ZShtLG0pKSxiPXIuc2NhbGVUb0dlb2RldGljU3VyZmFjZShuLHloKSxpPUtyKGIsbSxmLGkscixkLDEsMSk7cmV0dXJuIGl9dmFyIF9vLEdrLFZrLEhrLEtrLHFrLFdrLFhrLFlrLEprLFRzLHloLFdmLGIwLEFoLHdoLCRrLEFjLGV2LGcwLHR2LG52LG92LFJFLGF2LE9FLFNFLENFLGl2LGN2LE9pLFRoPVgoKCk9PntqdCgpO0llKCk7Z2EoKTtUdCgpO3ljKCk7cHMoKTtHZSgpO0RuKCk7cG4oKTt3cygpO0pvKCk7c3IoKTttMCgpO19vPVtuZXcgcyxuZXcgc10sR2s9bmV3IHMsVms9bmV3IHMsSGs9bmV3IHMsS2s9bmV3IHMscWs9bmV3IHMsV2s9bmV3IHMsWGs9bmV3IHMsWWs9bmV3IHMsSms9bmV3IHMsVHM9bmV3IHMseWg9bmV3IHMsV2Y9e30sYjA9bmV3IHJlO0FoPW5ldyBzLHdoPW5ldyBzOyRrPW5ldyBzKC0xLDAsMCksQWM9bmV3ICQsZXY9bmV3ICQsZzA9bmV3IEosdHY9Si5JREVOVElUWS5jbG9uZSgpLG52PW5ldyBzLG92PW5ldyBkdCxSRT1uZXcgczthdj1uZXcgcztPRT1uZXcgWmUsU0U9bmV3IHMsQ0U9bmV3IEo7V2YucmVtb3ZlRHVwbGljYXRlc0Zyb21TaGFwZT1mdW5jdGlvbihlKXtsZXQgdD1lLmxlbmd0aCxuPVtdO2ZvcihsZXQgbz10LTEsYT0wO2E8dDtvPWErKyl7bGV0IHI9ZVtvXSxpPWVbYV07WS5lcXVhbHMocixpKXx8bi5wdXNoKGkpfXJldHVybiBufTtXZi5hbmdsZUlzR3JlYXRlclRoYW5QaT1mdW5jdGlvbihlLHQsbixvKXtsZXQgYT1uZXcgeG8obixvKSxyPWEucHJvamVjdFBvaW50T250b1BsYW5lKHMuYWRkKG4sZSxBaCksQWgpLGk9YS5wcm9qZWN0UG9pbnRPbnRvUGxhbmUocy5hZGQobix0LHdoKSx3aCk7cmV0dXJuIGkueCpyLnktaS55KnIueD49MH07aXY9bmV3IHMsY3Y9bmV3IHM7V2YuY29tcHV0ZVBvc2l0aW9ucz1mdW5jdGlvbihlLHQsbixvLGEpe2xldCByPW8uX2VsbGlwc29pZCxpPVprKGUsciksZj1vLl9ncmFudWxhcml0eSxkPW8uX2Nvcm5lclR5cGUsYz1hP3J2KHQsbik6eEUodCxuKSx1PWE/eEUodCxuKTp2b2lkIDAsbD1uLmhlaWdodC8yLGg9bi53aWR0aC8yLG09ZS5sZW5ndGgsYj1bXSxwPWE/W106dm9pZCAwLHk9R2ssVD1WayxfPUhrLEU9S2ssdz1xayxSPVdrLFM9WGssQz1ZayxJPUprLE49ZVswXSxQPWVbMV07RT1yLmdlb2RldGljU3VyZmFjZU5vcm1hbChOLEUpLHk9cy5zdWJ0cmFjdChQLE4seSkseT1zLm5vcm1hbGl6ZSh5LHkpLEM9cy5jcm9zcyhFLHksQyksQz1zLm5vcm1hbGl6ZShDLEMpO2xldCBGPWlbMF0sQT1pWzFdO2EmJihwPUtyKE4sQyx1LHAscixGK2wsMSwxKSksST1zLmNsb25lKE4sSSksTj1QLFQ9cy5uZWdhdGUoeSxUKTtsZXQgeCxNO2ZvcihsZXQgej0xO3o8bS0xO3orKyl7bGV0IEQ9YT8yOjE7aWYoUD1lW3orMV0sTi5lcXVhbHMoUCkpe19oKCJQb3NpdGlvbnMgYXJlIHRvbyBjbG9zZSBhbmQgYXJlIGNvbnNpZGVyZWQgZXF1aXZhbGVudCB3aXRoIHJvdW5kaW5nIGVycm9yLiIpO2NvbnRpbnVlfXk9cy5zdWJ0cmFjdChQLE4seSkseT1zLm5vcm1hbGl6ZSh5LHkpLEU9ci5nZW9kZXRpY1N1cmZhY2VOb3JtYWwoTixFKTtsZXQgRz1zLm11bHRpcGx5QnlTY2FsYXIoRSxzLmRvdCh5LEUpLGl2KTtzLnN1YnRyYWN0KHksRyxHKSxzLm5vcm1hbGl6ZShHLEcpO2xldCBIPXMubXVsdGlwbHlCeVNjYWxhcihFLHMuZG90KFQsRSksY3YpO2lmKHMuc3VidHJhY3QoVCxILEgpLHMubm9ybWFsaXplKEgsSCksIWsuZXF1YWxzRXBzaWxvbihNYXRoLmFicyhzLmRvdChHLEgpKSwxLGsuRVBTSUxPTjcpKXtfPXMuYWRkKHksVCxfKSxfPXMubm9ybWFsaXplKF8sXyksXz1zLmNyb3NzKF8sRSxfKSxfPXMuY3Jvc3MoRSxfLF8pLF89cy5ub3JtYWxpemUoXyxfKTtsZXQgWj0xL01hdGgubWF4KC4yNSxzLm1hZ25pdHVkZShzLmNyb3NzKF8sVCxUcykpKSxvZT1XZi5hbmdsZUlzR3JlYXRlclRoYW5QaSh5LFQsTixyKTtvZT8odz1zLmFkZChOLHMubXVsdGlwbHlCeVNjYWxhcihfLFoqaCxfKSx3KSxSPXMuYWRkKHcscy5tdWx0aXBseUJ5U2NhbGFyKEMsaCxSKSxSKSxfb1swXT1zLmNsb25lKEksX29bMF0pLF9vWzFdPXMuY2xvbmUoUixfb1sxXSkseD1wMChfbyxGK2wsQStsLGYpLE09QW4uZ2VuZXJhdGVBcmMoe3Bvc2l0aW9uczpfbyxncmFudWxhcml0eTpmLGVsbGlwc29pZDpyfSksYj1fMChNLEMsYyxiLHIseCwxKSxDPXMuY3Jvc3MoRSx5LEMpLEM9cy5ub3JtYWxpemUoQyxDKSxTPXMuYWRkKHcscy5tdWx0aXBseUJ5U2NhbGFyKEMsaCxTKSxTKSxkPT09aG4uUk9VTkRFRHx8ZD09PWhuLkJFVkVMRUQ/TUUodyxSLFMsZCxvZSxyLGIsYyxBK2wsYSk6KF89cy5uZWdhdGUoXyxfKSxiPUtyKE4sXyxjLGIscixBK2wsWixEKSksST1zLmNsb25lKFMsSSkpOih3PXMuYWRkKE4scy5tdWx0aXBseUJ5U2NhbGFyKF8sWipoLF8pLHcpLFI9cy5hZGQodyxzLm11bHRpcGx5QnlTY2FsYXIoQywtaCxSKSxSKSxfb1swXT1zLmNsb25lKEksX29bMF0pLF9vWzFdPXMuY2xvbmUoUixfb1sxXSkseD1wMChfbyxGK2wsQStsLGYpLE09QW4uZ2VuZXJhdGVBcmMoe3Bvc2l0aW9uczpfbyxncmFudWxhcml0eTpmLGVsbGlwc29pZDpyfSksYj1fMChNLEMsYyxiLHIseCwxKSxDPXMuY3Jvc3MoRSx5LEMpLEM9cy5ub3JtYWxpemUoQyxDKSxTPXMuYWRkKHcscy5tdWx0aXBseUJ5U2NhbGFyKEMsLWgsUyksUyksZD09PWhuLlJPVU5ERUR8fGQ9PT1obi5CRVZFTEVEP01FKHcsUixTLGQsb2UscixiLGMsQStsLGEpOmI9S3IoTixfLGMsYixyLEErbCxaLEQpLEk9cy5jbG9uZShTLEkpKSxUPXMubmVnYXRlKHksVCl9ZWxzZSBiPUtyKEksQyxjLGIscixGK2wsMSwxKSxJPU47Rj1BLEE9aVt6KzFdLE49UH1fb1swXT1zLmNsb25lKEksX29bMF0pLF9vWzFdPXMuY2xvbmUoTixfb1sxXSkseD1wMChfbyxGK2wsQStsLGYpLE09QW4uZ2VuZXJhdGVBcmMoe3Bvc2l0aW9uczpfbyxncmFudWxhcml0eTpmLGVsbGlwc29pZDpyfSksYj1fMChNLEMsYyxiLHIseCwxKSxhJiYocD1LcihOLEMsdSxwLHIsQStsLDEsMSkpLG09Yi5sZW5ndGg7bGV0IHY9YT9tK3AubGVuZ3RoOm0sVT1uZXcgRmxvYXQ2NEFycmF5KHYpO3JldHVybiBVLnNldChiKSxhJiZVLnNldChwLG0pLFV9O09pPVdmfSk7ZnVuY3Rpb24gRWgoZSx0LG4sbyxhKXtsZXQgcj1zLmFuZ2xlQmV0d2VlbihzLnN1YnRyYWN0KHQsZSxFcykscy5zdWJ0cmFjdChuLGUsdkUpKSxpPW89PT1obi5CRVZFTEVEPzE6TWF0aC5jZWlsKHIvay50b1JhZGlhbnMoNSkpKzEsZj1pKjMsZD1uZXcgQXJyYXkoZik7ZFtmLTNdPW4ueCxkW2YtMl09bi55LGRbZi0xXT1uLno7bGV0IGM7YT9jPUouZnJvbVF1YXRlcm5pb24oWmUuZnJvbUF4aXNBbmdsZShzLm5lZ2F0ZShlLEVzKSxyL2ksSUUpLFBFKTpjPUouZnJvbVF1YXRlcm5pb24oWmUuZnJvbUF4aXNBbmdsZShlLHIvaSxJRSksUEUpO2xldCB1PTA7dD1zLmNsb25lKHQsRXMpO2ZvcihsZXQgbD0wO2w8aTtsKyspdD1KLm11bHRpcGx5QnlWZWN0b3IoYyx0LHQpLGRbdSsrXT10LngsZFt1KytdPXQueSxkW3UrK109dC56O3JldHVybiBkfWZ1bmN0aW9uIHB2KGUpe2xldCB0PUZFLG49REUsbz1CRSxhPWVbMV07bj1zLmZyb21BcnJheShlWzFdLGEubGVuZ3RoLTMsbiksbz1zLmZyb21BcnJheShlWzBdLDAsbyksdD1zLm1pZHBvaW50KG4sbyx0KTtsZXQgcj1FaCh0LG4sbyxobi5ST1VOREVELCExKSxpPWUubGVuZ3RoLTEsZj1lW2ktMV07YT1lW2ldLG49cy5mcm9tQXJyYXkoZixmLmxlbmd0aC0zLG4pLG89cy5mcm9tQXJyYXkoYSwwLG8pLHQ9cy5taWRwb2ludChuLG8sdCk7bGV0IGQ9RWgodCxuLG8saG4uUk9VTkRFRCwhMSk7cmV0dXJuW3IsZF19ZnVuY3Rpb24ga0UoZSx0LG4sbyl7bGV0IGE9RXM7cmV0dXJuIG8/YT1zLmFkZChlLHQsYSk6KHQ9cy5uZWdhdGUodCx0KSxhPXMuYWRkKGUsdCxhKSksW2EueCxhLnksYS56LG4ueCxuLnksbi56XX1mdW5jdGlvbiB5MChlLHQsbixvKXtsZXQgYT1uZXcgQXJyYXkoZS5sZW5ndGgpLHI9bmV3IEFycmF5KGUubGVuZ3RoKSxpPXMubXVsdGlwbHlCeVNjYWxhcih0LG4sRXMpLGY9cy5uZWdhdGUoaSx2RSksZD0wLGM9ZS5sZW5ndGgtMTtmb3IobGV0IHU9MDt1PGUubGVuZ3RoO3UrPTMpe2xldCBsPXMuZnJvbUFycmF5KGUsdSxzdiksaD1zLmFkZChsLGYsTkUpO2FbZCsrXT1oLngsYVtkKytdPWgueSxhW2QrK109aC56O2xldCBtPXMuYWRkKGwsaSxORSk7cltjLS1dPW0ueixyW2MtLV09bS55LHJbYy0tXT1tLnh9cmV0dXJuIG8ucHVzaChhLHIpLG99dmFyIEEwLEVzLHZFLHN2LE5FLFZvLEZFLERFLEJFLGZ2LGR2LHV2LGx2LGh2LG12LGJ2LElFLFBFLGd2LF92LEp0LHcwPVgoKCk9PntJZSgpO3ljKCk7c2UoKTtHZSgpO0RuKCk7d3MoKTtUaCgpO0pvKCk7QTA9e30sRXM9bmV3IHMsdkU9bmV3IHMsc3Y9bmV3IHMsTkU9bmV3IHMsVm89W25ldyBzLG5ldyBzXSxGRT1uZXcgcyxERT1uZXcgcyxCRT1uZXcgcyxmdj1uZXcgcyxkdj1uZXcgcyx1dj1uZXcgcyxsdj1uZXcgcyxodj1uZXcgcyxtdj1uZXcgcyxidj1uZXcgcyxJRT1uZXcgWmUsUEU9bmV3IEo7QTAuYWRkQXR0cmlidXRlPWZ1bmN0aW9uKGUsdCxuLG8pe2xldCBhPXQueCxyPXQueSxpPXQuejtnKG4pJiYoZVtuXT1hLGVbbisxXT1yLGVbbisyXT1pKSxnKG8pJiYoZVtvXT1pLGVbby0xXT1yLGVbby0yXT1hKX07Z3Y9bmV3IHMsX3Y9bmV3IHM7QTAuY29tcHV0ZVBvc2l0aW9ucz1mdW5jdGlvbihlKXtsZXQgdD1lLmdyYW51bGFyaXR5LG49ZS5wb3NpdGlvbnMsbz1lLmVsbGlwc29pZCxhPWUud2lkdGgvMixyPWUuY29ybmVyVHlwZSxpPWUuc2F2ZUF0dHJpYnV0ZXMsZj1GRSxkPURFLGM9QkUsdT1mdixsPWR2LGg9dXYsbT1sdixiPWh2LHA9bXYseT1idixUPVtdLF89aT9bXTp2b2lkIDAsRT1pP1tdOnZvaWQgMCx3PW5bMF0sUj1uWzFdO2Q9cy5ub3JtYWxpemUocy5zdWJ0cmFjdChSLHcsZCksZCksZj1vLmdlb2RldGljU3VyZmFjZU5vcm1hbCh3LGYpLHU9cy5ub3JtYWxpemUocy5jcm9zcyhmLGQsdSksdSksaSYmKF8ucHVzaCh1LngsdS55LHUueiksRS5wdXNoKGYueCxmLnksZi56KSksbT1zLmNsb25lKHcsbSksdz1SLGM9cy5uZWdhdGUoZCxjKTtsZXQgUyxDPVtdLEksTj1uLmxlbmd0aDtmb3IoST0xO0k8Ti0xO0krKyl7Zj1vLmdlb2RldGljU3VyZmFjZU5vcm1hbCh3LGYpLFI9bltJKzFdLGQ9cy5ub3JtYWxpemUocy5zdWJ0cmFjdChSLHcsZCksZCk7bGV0IEY9cy5tdWx0aXBseUJ5U2NhbGFyKGYscy5kb3QoZCxmKSxndik7cy5zdWJ0cmFjdChkLEYsRikscy5ub3JtYWxpemUoRixGKTtsZXQgQT1zLm11bHRpcGx5QnlTY2FsYXIoZixzLmRvdChjLGYpLF92KTtpZihzLnN1YnRyYWN0KGMsQSxBKSxzLm5vcm1hbGl6ZShBLEEpLCFrLmVxdWFsc0Vwc2lsb24oTWF0aC5hYnMocy5kb3QoRixBKSksMSxrLkVQU0lMT043KSl7bD1zLm5vcm1hbGl6ZShzLmFkZChkLGMsbCksbCksbD1zLmNyb3NzKGwsZixsKSxsPXMuY3Jvc3MoZixsLGwpLGw9cy5ub3JtYWxpemUobCxsKTtsZXQgTT1hL01hdGgubWF4KC4yNSxzLm1hZ25pdHVkZShzLmNyb3NzKGwsYyxFcykpKSx2PU9pLmFuZ2xlSXNHcmVhdGVyVGhhblBpKGQsYyx3LG8pO2w9cy5tdWx0aXBseUJ5U2NhbGFyKGwsTSxsKSx2PyhiPXMuYWRkKHcsbCxiKSx5PXMuYWRkKGIscy5tdWx0aXBseUJ5U2NhbGFyKHUsYSx5KSx5KSxwPXMuYWRkKGIscy5tdWx0aXBseUJ5U2NhbGFyKHUsYSoyLHApLHApLFZvWzBdPXMuY2xvbmUobSxWb1swXSksVm9bMV09cy5jbG9uZSh5LFZvWzFdKSxTPUFuLmdlbmVyYXRlQXJjKHtwb3NpdGlvbnM6Vm8sZ3JhbnVsYXJpdHk6dCxlbGxpcHNvaWQ6b30pLFQ9eTAoUyx1LGEsVCksaSYmKF8ucHVzaCh1LngsdS55LHUueiksRS5wdXNoKGYueCxmLnksZi56KSksaD1zLmNsb25lKHAsaCksdT1zLm5vcm1hbGl6ZShzLmNyb3NzKGYsZCx1KSx1KSxwPXMuYWRkKGIscy5tdWx0aXBseUJ5U2NhbGFyKHUsYSoyLHApLHApLG09cy5hZGQoYixzLm11bHRpcGx5QnlTY2FsYXIodSxhLG0pLG0pLHI9PT1obi5ST1VOREVEfHxyPT09aG4uQkVWRUxFRD9DLnB1c2goe2xlZnRQb3NpdGlvbnM6RWgoYixoLHAscix2KX0pOkMucHVzaCh7bGVmdFBvc2l0aW9uczprRSh3LHMubmVnYXRlKGwsbCkscCx2KX0pKToocD1zLmFkZCh3LGwscCkseT1zLmFkZChwLHMubmVnYXRlKHMubXVsdGlwbHlCeVNjYWxhcih1LGEseSkseSkseSksYj1zLmFkZChwLHMubmVnYXRlKHMubXVsdGlwbHlCeVNjYWxhcih1LGEqMixiKSxiKSxiKSxWb1swXT1zLmNsb25lKG0sVm9bMF0pLFZvWzFdPXMuY2xvbmUoeSxWb1sxXSksUz1Bbi5nZW5lcmF0ZUFyYyh7cG9zaXRpb25zOlZvLGdyYW51bGFyaXR5OnQsZWxsaXBzb2lkOm99KSxUPXkwKFMsdSxhLFQpLGkmJihfLnB1c2godS54LHUueSx1LnopLEUucHVzaChmLngsZi55LGYueikpLGg9cy5jbG9uZShiLGgpLHU9cy5ub3JtYWxpemUocy5jcm9zcyhmLGQsdSksdSksYj1zLmFkZChwLHMubmVnYXRlKHMubXVsdGlwbHlCeVNjYWxhcih1LGEqMixiKSxiKSxiKSxtPXMuYWRkKHAscy5uZWdhdGUocy5tdWx0aXBseUJ5U2NhbGFyKHUsYSxtKSxtKSxtKSxyPT09aG4uUk9VTkRFRHx8cj09PWhuLkJFVkVMRUQ/Qy5wdXNoKHtyaWdodFBvc2l0aW9uczpFaChwLGgsYixyLHYpfSk6Qy5wdXNoKHtyaWdodFBvc2l0aW9uczprRSh3LGwsYix2KX0pKSxjPXMubmVnYXRlKGQsYyl9dz1SfWY9by5nZW9kZXRpY1N1cmZhY2VOb3JtYWwodyxmKSxWb1swXT1zLmNsb25lKG0sVm9bMF0pLFZvWzFdPXMuY2xvbmUodyxWb1sxXSksUz1Bbi5nZW5lcmF0ZUFyYyh7cG9zaXRpb25zOlZvLGdyYW51bGFyaXR5OnQsZWxsaXBzb2lkOm99KSxUPXkwKFMsdSxhLFQpLGkmJihfLnB1c2godS54LHUueSx1LnopLEUucHVzaChmLngsZi55LGYueikpO2xldCBQO3JldHVybiByPT09aG4uUk9VTkRFRCYmKFA9cHYoVCkpLHtwb3NpdGlvbnM6VCxjb3JuZXJzOkMsbGVmdHM6Xyxub3JtYWxzOkUsZW5kUG9zaXRpb25zOlB9fTtKdD1BMH0pO2Z1bmN0aW9uIFZFKGUsdCl7Zm9yKGxldCBuPTA7bjxlLmxlbmd0aDtuKyspZVtuXT10LnNjYWxlVG9HZW9kZXRpY1N1cmZhY2UoZVtuXSxlW25dKTtyZXR1cm4gZX1mdW5jdGlvbiBaYShlLHQsbixvLGEscil7bGV0IGk9ZS5ub3JtYWxzLGY9ZS50YW5nZW50cyxkPWUuYml0YW5nZW50cyxjPXMubm9ybWFsaXplKHMuY3Jvc3Mobix0LFNpKSxTaSk7ci5ub3JtYWwmJkp0LmFkZEF0dHJpYnV0ZShpLHQsbyxhKSxyLnRhbmdlbnQmJkp0LmFkZEF0dHJpYnV0ZShmLGMsbyxhKSxyLmJpdGFuZ2VudCYmSnQuYWRkQXR0cmlidXRlKGQsbixvLGEpfWZ1bmN0aW9uIEhFKGUsdCxuKXtsZXQgbz1lLnBvc2l0aW9ucyxhPWUuY29ybmVycyxyPWUuZW5kUG9zaXRpb25zLGk9ZS5sZWZ0cyxmPWUubm9ybWFscyxkPW5ldyBudCxjLHU9MCxsPTAsaCxtPTAsYjtmb3IoaD0wO2g8by5sZW5ndGg7aCs9MiliPW9baF0ubGVuZ3RoLTMsdSs9YixtKz1iKjIsbCs9b1toKzFdLmxlbmd0aC0zO2Zvcih1Kz0zLGwrPTMsaD0wO2g8YS5sZW5ndGg7aCsrKXtjPWFbaF07bGV0IGVlPWFbaF0ubGVmdFBvc2l0aW9ucztnKGVlKT8oYj1lZS5sZW5ndGgsdSs9YixtKz1iKTooYj1hW2hdLnJpZ2h0UG9zaXRpb25zLmxlbmd0aCxsKz1iLG0rPWIpfWxldCBwPWcocikseTtwJiYoeT1yWzBdLmxlbmd0aC0zLHUrPXksbCs9eSx5Lz0zLG0rPXkqNik7bGV0IFQ9dStsLF89bmV3IEZsb2F0NjRBcnJheShUKSxFPXQubm9ybWFsP25ldyBGbG9hdDMyQXJyYXkoVCk6dm9pZCAwLHc9dC50YW5nZW50P25ldyBGbG9hdDMyQXJyYXkoVCk6dm9pZCAwLFI9dC5iaXRhbmdlbnQ/bmV3IEZsb2F0MzJBcnJheShUKTp2b2lkIDAsUz17bm9ybWFsczpFLHRhbmdlbnRzOncsYml0YW5nZW50czpSfSxDPTAsST1ULTEsTixQLEYsQSx4PWpFLE09ekUsdixVLHo9eS8yLEQ9a2UuY3JlYXRlVHlwZWRBcnJheShULzMsbSksRz0wO2lmKHApe1U9Umgsdj14aDtsZXQgZWU9clswXTtmb3IoeD1zLmZyb21BcnJheShmLDAseCksTT1zLmZyb21BcnJheShpLDAsTSksaD0wO2g8ejtoKyspVT1zLmZyb21BcnJheShlZSwoei0xLWgpKjMsVSksdj1zLmZyb21BcnJheShlZSwoeitoKSozLHYpLEp0LmFkZEF0dHJpYnV0ZShfLHYsQyksSnQuYWRkQXR0cmlidXRlKF8sVSx2b2lkIDAsSSksWmEoUyx4LE0sQyxJLHQpLFA9Qy8zLEE9UCsxLE49KEktMikvMyxGPU4tMSxEW0crK109TixEW0crK109UCxEW0crK109RixEW0crK109RixEW0crK109UCxEW0crK109QSxDKz0zLEktPTN9bGV0IEg9MCxPPTAsWj1vW0grK10sb2U9b1tIKytdO18uc2V0KFosQyksXy5zZXQob2UsSS1vZS5sZW5ndGgrMSksTT1zLmZyb21BcnJheShpLE8sTSk7bGV0IGNlLGZlO2ZvcihiPW9lLmxlbmd0aC0zLGg9MDtoPGI7aCs9MyljZT1uLmdlb2RldGljU3VyZmFjZU5vcm1hbChzLmZyb21BcnJheShaLGgsU2kpLFNpKSxmZT1uLmdlb2RldGljU3VyZmFjZU5vcm1hbChzLmZyb21BcnJheShvZSxiLWgsUnMpLFJzKSx4PXMubm9ybWFsaXplKHMuYWRkKGNlLGZlLHgpLHgpLFphKFMseCxNLEMsSSx0KSxQPUMvMyxBPVArMSxOPShJLTIpLzMsRj1OLTEsRFtHKytdPU4sRFtHKytdPVAsRFtHKytdPUYsRFtHKytdPUYsRFtHKytdPVAsRFtHKytdPUEsQys9MyxJLT0zO2ZvcihjZT1uLmdlb2RldGljU3VyZmFjZU5vcm1hbChzLmZyb21BcnJheShaLGIsU2kpLFNpKSxmZT1uLmdlb2RldGljU3VyZmFjZU5vcm1hbChzLmZyb21BcnJheShvZSxiLFJzKSxScykseD1zLm5vcm1hbGl6ZShzLmFkZChjZSxmZSx4KSx4KSxPKz0zLGg9MDtoPGEubGVuZ3RoO2grKyl7bGV0IGVlO2M9YVtoXTtsZXQgYmU9Yy5sZWZ0UG9zaXRpb25zLGxlPWMucmlnaHRQb3NpdGlvbnMscGUsdWUsYWU9R0UsQWU9UmgsTmU9eGg7aWYoeD1zLmZyb21BcnJheShmLE8seCksZyhiZSkpe2ZvcihaYShTLHgsTSx2b2lkIDAsSSx0KSxJLT0zLHBlPUEsdWU9RixlZT0wO2VlPGJlLmxlbmd0aC8zO2VlKyspYWU9cy5mcm9tQXJyYXkoYmUsZWUqMyxhZSksRFtHKytdPXBlLERbRysrXT11ZS1lZS0xLERbRysrXT11ZS1lZSxKdC5hZGRBdHRyaWJ1dGUoXyxhZSx2b2lkIDAsSSksQWU9cy5mcm9tQXJyYXkoXywodWUtZWUtMSkqMyxBZSksTmU9cy5mcm9tQXJyYXkoXyxwZSozLE5lKSxNPXMubm9ybWFsaXplKHMuc3VidHJhY3QoQWUsTmUsTSksTSksWmEoUyx4LE0sdm9pZCAwLEksdCksSS09MzthZT1zLmZyb21BcnJheShfLHBlKjMsYWUpLEFlPXMuc3VidHJhY3Qocy5mcm9tQXJyYXkoXyx1ZSozLEFlKSxhZSxBZSksTmU9cy5zdWJ0cmFjdChzLmZyb21BcnJheShfLCh1ZS1lZSkqMyxOZSksYWUsTmUpLE09cy5ub3JtYWxpemUocy5hZGQoQWUsTmUsTSksTSksWmEoUyx4LE0sQyx2b2lkIDAsdCksQys9M31lbHNle2ZvcihaYShTLHgsTSxDLHZvaWQgMCx0KSxDKz0zLHBlPUYsdWU9QSxlZT0wO2VlPGxlLmxlbmd0aC8zO2VlKyspYWU9cy5mcm9tQXJyYXkobGUsZWUqMyxhZSksRFtHKytdPXBlLERbRysrXT11ZStlZSxEW0crK109dWUrZWUrMSxKdC5hZGRBdHRyaWJ1dGUoXyxhZSxDKSxBZT1zLmZyb21BcnJheShfLHBlKjMsQWUpLE5lPXMuZnJvbUFycmF5KF8sKHVlK2VlKSozLE5lKSxNPXMubm9ybWFsaXplKHMuc3VidHJhY3QoQWUsTmUsTSksTSksWmEoUyx4LE0sQyx2b2lkIDAsdCksQys9MzthZT1zLmZyb21BcnJheShfLHBlKjMsYWUpLEFlPXMuc3VidHJhY3Qocy5mcm9tQXJyYXkoXywodWUrZWUpKjMsQWUpLGFlLEFlKSxOZT1zLnN1YnRyYWN0KHMuZnJvbUFycmF5KF8sdWUqMyxOZSksYWUsTmUpLE09cy5ub3JtYWxpemUocy5uZWdhdGUocy5hZGQoTmUsQWUsTSksTSksTSksWmEoUyx4LE0sdm9pZCAwLEksdCksSS09M31mb3IoWj1vW0grK10sb2U9b1tIKytdLFouc3BsaWNlKDAsMyksb2Uuc3BsaWNlKG9lLmxlbmd0aC0zLDMpLF8uc2V0KFosQyksXy5zZXQob2UsSS1vZS5sZW5ndGgrMSksYj1vZS5sZW5ndGgtMyxPKz0zLE09cy5mcm9tQXJyYXkoaSxPLE0pLGVlPTA7ZWU8b2UubGVuZ3RoO2VlKz0zKWNlPW4uZ2VvZGV0aWNTdXJmYWNlTm9ybWFsKHMuZnJvbUFycmF5KFosZWUsU2kpLFNpKSxmZT1uLmdlb2RldGljU3VyZmFjZU5vcm1hbChzLmZyb21BcnJheShvZSxiLWVlLFJzKSxScykseD1zLm5vcm1hbGl6ZShzLmFkZChjZSxmZSx4KSx4KSxaYShTLHgsTSxDLEksdCksQT1DLzMsUD1BLTEsRj0oSS0yKS8zLE49RisxLERbRysrXT1OLERbRysrXT1QLERbRysrXT1GLERbRysrXT1GLERbRysrXT1QLERbRysrXT1BLEMrPTMsSS09MztDLT0zLEkrPTN9aWYoeD1zLmZyb21BcnJheShmLGYubGVuZ3RoLTMseCksWmEoUyx4LE0sQyxJLHQpLHApe0MrPTMsSS09MyxVPVJoLHY9eGg7bGV0IGVlPXJbMV07Zm9yKGg9MDtoPHo7aCsrKVU9cy5mcm9tQXJyYXkoZWUsKHktaC0xKSozLFUpLHY9cy5mcm9tQXJyYXkoZWUsaCozLHYpLEp0LmFkZEF0dHJpYnV0ZShfLFUsdm9pZCAwLEkpLEp0LmFkZEF0dHJpYnV0ZShfLHYsQyksWmEoUyx4LE0sQyxJLHQpLEE9Qy8zLFA9QS0xLEY9KEktMikvMyxOPUYrMSxEW0crK109TixEW0crK109UCxEW0crK109RixEW0crK109RixEW0crK109UCxEW0crK109QSxDKz0zLEktPTN9aWYoZC5wb3NpdGlvbj1uZXcgaWUoe2NvbXBvbmVudERhdGF0eXBlOm5lLkRPVUJMRSxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOl99KSx0LnN0KXtsZXQgZWU9bmV3IEZsb2F0MzJBcnJheShULzMqMiksYmUsbGUscGU9MDtpZihwKXt1Lz0zLGwvPTM7bGV0IHVlPU1hdGguUEkvKHkrMSk7bGU9MS8odS15KzEpLGJlPTEvKGwteSsxKTtsZXQgYWUsQWU9eS8yO2ZvcihoPUFlKzE7aDx5KzE7aCsrKWFlPWsuUElfT1ZFUl9UV08rdWUqaCxlZVtwZSsrXT1iZSooMStNYXRoLmNvcyhhZSkpLGVlW3BlKytdPS41KigxK01hdGguc2luKGFlKSk7Zm9yKGg9MTtoPGwteSsxO2grKyllZVtwZSsrXT1oKmJlLGVlW3BlKytdPTA7Zm9yKGg9eTtoPkFlO2gtLSlhZT1rLlBJX09WRVJfVFdPLWgqdWUsZWVbcGUrK109MS1iZSooMStNYXRoLmNvcyhhZSkpLGVlW3BlKytdPS41KigxK01hdGguc2luKGFlKSk7Zm9yKGg9QWU7aD4wO2gtLSlhZT1rLlBJX09WRVJfVFdPLXVlKmgsZWVbcGUrK109MS1sZSooMStNYXRoLmNvcyhhZSkpLGVlW3BlKytdPS41KigxK01hdGguc2luKGFlKSk7Zm9yKGg9dS15O2g+MDtoLS0pZWVbcGUrK109aCpsZSxlZVtwZSsrXT0xO2ZvcihoPTE7aDxBZSsxO2grKylhZT1rLlBJX09WRVJfVFdPK3VlKmgsZWVbcGUrK109bGUqKDErTWF0aC5jb3MoYWUpKSxlZVtwZSsrXT0uNSooMStNYXRoLnNpbihhZSkpfWVsc2V7Zm9yKHUvPTMsbC89MyxsZT0xLyh1LTEpLGJlPTEvKGwtMSksaD0wO2g8bDtoKyspZWVbcGUrK109aCpiZSxlZVtwZSsrXT0wO2ZvcihoPXU7aD4wO2gtLSllZVtwZSsrXT0oaC0xKSpsZSxlZVtwZSsrXT0xfWQuc3Q9bmV3IGllKHtjb21wb25lbnREYXRhdHlwZTpuZS5GTE9BVCxjb21wb25lbnRzUGVyQXR0cmlidXRlOjIsdmFsdWVzOmVlfSl9cmV0dXJuIHQubm9ybWFsJiYoZC5ub3JtYWw9bmV3IGllKHtjb21wb25lbnREYXRhdHlwZTpuZS5GTE9BVCxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOlMubm9ybWFsc30pKSx0LnRhbmdlbnQmJihkLnRhbmdlbnQ9bmV3IGllKHtjb21wb25lbnREYXRhdHlwZTpuZS5GTE9BVCxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOlMudGFuZ2VudHN9KSksdC5iaXRhbmdlbnQmJihkLmJpdGFuZ2VudD1uZXcgaWUoe2NvbXBvbmVudERhdGF0eXBlOm5lLkZMT0FULGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6Uy5iaXRhbmdlbnRzfSkpLHthdHRyaWJ1dGVzOmQsaW5kaWNlczpEfX1mdW5jdGlvbiBBdihlLHQpe2lmKCF0Lm5vcm1hbCYmIXQudGFuZ2VudCYmIXQuYml0YW5nZW50JiYhdC5zdClyZXR1cm4gZTtsZXQgbj1lLnBvc2l0aW9uLnZhbHVlcyxvLGE7KHQubm9ybWFsfHx0LmJpdGFuZ2VudCkmJihvPWUubm9ybWFsLnZhbHVlcyxhPWUuYml0YW5nZW50LnZhbHVlcyk7bGV0IHI9ZS5wb3NpdGlvbi52YWx1ZXMubGVuZ3RoLzE4LGk9ciozLGY9cioyLGQ9aSoyLGM7aWYodC5ub3JtYWx8fHQuYml0YW5nZW50fHx0LnRhbmdlbnQpe2xldCB1PXQubm9ybWFsP25ldyBGbG9hdDMyQXJyYXkoaSo2KTp2b2lkIDAsbD10LnRhbmdlbnQ/bmV3IEZsb2F0MzJBcnJheShpKjYpOnZvaWQgMCxoPXQuYml0YW5nZW50P25ldyBGbG9hdDMyQXJyYXkoaSo2KTp2b2lkIDAsbT1qRSxiPXpFLHA9UmgseT14aCxUPXl2LF89R0UsRT1kO2ZvcihjPTA7YzxpO2MrPTMpe2xldCB3PUUrZDttPXMuZnJvbUFycmF5KG4sYyxtKSxiPXMuZnJvbUFycmF5KG4sYytpLGIpLHA9cy5mcm9tQXJyYXkobiwoYyszKSVpLHApLGI9cy5zdWJ0cmFjdChiLG0sYikscD1zLnN1YnRyYWN0KHAsbSxwKSx5PXMubm9ybWFsaXplKHMuY3Jvc3MoYixwLHkpLHkpLHQubm9ybWFsJiYoSnQuYWRkQXR0cmlidXRlKHUseSx3KSxKdC5hZGRBdHRyaWJ1dGUodSx5LHcrMyksSnQuYWRkQXR0cmlidXRlKHUseSxFKSxKdC5hZGRBdHRyaWJ1dGUodSx5LEUrMykpLCh0LnRhbmdlbnR8fHQuYml0YW5nZW50KSYmKF89cy5mcm9tQXJyYXkobyxjLF8pLHQuYml0YW5nZW50JiYoSnQuYWRkQXR0cmlidXRlKGgsXyx3KSxKdC5hZGRBdHRyaWJ1dGUoaCxfLHcrMyksSnQuYWRkQXR0cmlidXRlKGgsXyxFKSxKdC5hZGRBdHRyaWJ1dGUoaCxfLEUrMykpLHQudGFuZ2VudCYmKFQ9cy5ub3JtYWxpemUocy5jcm9zcyhfLHksVCksVCksSnQuYWRkQXR0cmlidXRlKGwsVCx3KSxKdC5hZGRBdHRyaWJ1dGUobCxULHcrMyksSnQuYWRkQXR0cmlidXRlKGwsVCxFKSxKdC5hZGRBdHRyaWJ1dGUobCxULEUrMykpKSxFKz02fWlmKHQubm9ybWFsKXtmb3IodS5zZXQobyksYz0wO2M8aTtjKz0zKXVbYytpXT0tb1tjXSx1W2MraSsxXT0tb1tjKzFdLHVbYytpKzJdPS1vW2MrMl07ZS5ub3JtYWwudmFsdWVzPXV9ZWxzZSBlLm5vcm1hbD12b2lkIDA7aWYodC5iaXRhbmdlbnQ/KGguc2V0KGEpLGguc2V0KGEsaSksZS5iaXRhbmdlbnQudmFsdWVzPWgpOmUuYml0YW5nZW50PXZvaWQgMCx0LnRhbmdlbnQpe2xldCB3PWUudGFuZ2VudC52YWx1ZXM7bC5zZXQodyksbC5zZXQodyxpKSxlLnRhbmdlbnQudmFsdWVzPWx9fWlmKHQuc3Qpe2xldCB1PWUuc3QudmFsdWVzLGw9bmV3IEZsb2F0MzJBcnJheShmKjYpO2wuc2V0KHUpLGwuc2V0KHUsZik7bGV0IGg9ZioyO2ZvcihsZXQgbT0wO208MjttKyspe2ZvcihsW2grK109dVswXSxsW2grK109dVsxXSxjPTI7YzxmO2MrPTIpe2xldCBiPXVbY10scD11W2MrMV07bFtoKytdPWIsbFtoKytdPXAsbFtoKytdPWIsbFtoKytdPXB9bFtoKytdPXVbMF0sbFtoKytdPXVbMV19ZS5zdC52YWx1ZXM9bH1yZXR1cm4gZX1mdW5jdGlvbiBUMChlLHQsbil7blt0KytdPWVbMF0sblt0KytdPWVbMV0sblt0KytdPWVbMl07Zm9yKGxldCBvPTM7bzxlLmxlbmd0aDtvKz0zKXtsZXQgYT1lW29dLHI9ZVtvKzFdLGk9ZVtvKzJdO25bdCsrXT1hLG5bdCsrXT1yLG5bdCsrXT1pLG5bdCsrXT1hLG5bdCsrXT1yLG5bdCsrXT1pfXJldHVybiBuW3QrK109ZVswXSxuW3QrK109ZVsxXSxuW3QrK109ZVsyXSxufWZ1bmN0aW9uIHd2KGUsdCl7bGV0IG49bmV3IGhlKHtwb3NpdGlvbjp0LnBvc2l0aW9uLG5vcm1hbDp0Lm5vcm1hbHx8dC5iaXRhbmdlbnR8fGUuc2hhZG93Vm9sdW1lLHRhbmdlbnQ6dC50YW5nZW50LGJpdGFuZ2VudDp0Lm5vcm1hbHx8dC5iaXRhbmdlbnQsc3Q6dC5zdH0pLG89ZS5lbGxpcHNvaWQsYT1KdC5jb21wdXRlUG9zaXRpb25zKGUpLHI9SEUoYSxuLG8pLGk9ZS5oZWlnaHQsZj1lLmV4dHJ1ZGVkSGVpZ2h0LGQ9ci5hdHRyaWJ1dGVzLGM9ci5pbmRpY2VzLHU9ZC5wb3NpdGlvbi52YWx1ZXMsbD11Lmxlbmd0aCxoPW5ldyBGbG9hdDY0QXJyYXkobCo2KSxtPW5ldyBGbG9hdDY0QXJyYXkobCk7bS5zZXQodSk7bGV0IGI9bmV3IEZsb2F0NjRBcnJheShsKjQpO3U9U3Quc2NhbGVUb0dlb2RldGljSGVpZ2h0KHUsaSxvKSxiPVQwKHUsMCxiKSxtPVN0LnNjYWxlVG9HZW9kZXRpY0hlaWdodChtLGYsbyksYj1UMChtLGwqMixiKSxoLnNldCh1KSxoLnNldChtLGwpLGguc2V0KGIsbCoyKSxkLnBvc2l0aW9uLnZhbHVlcz1oLGQ9QXYoZCx0KTtsZXQgcCx5PWwvMztpZihlLnNoYWRvd1ZvbHVtZSl7bGV0IE49ZC5ub3JtYWwudmFsdWVzO2w9Ti5sZW5ndGg7bGV0IFA9bmV3IEZsb2F0MzJBcnJheShsKjYpO2ZvcihwPTA7cDxsO3ArKylOW3BdPS1OW3BdO1Auc2V0KE4sbCksUD1UMChOLGwqNCxQKSxkLmV4dHJ1ZGVEaXJlY3Rpb249bmV3IGllKHtjb21wb25lbnREYXRhdHlwZTpuZS5GTE9BVCxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOlB9KSx0Lm5vcm1hbHx8KGQubm9ybWFsPXZvaWQgMCl9aWYoZyhlLm9mZnNldEF0dHJpYnV0ZSkpe2xldCBOPW5ldyBVaW50OEFycmF5KHkqNik7aWYoZS5vZmZzZXRBdHRyaWJ1dGU9PT1zdC5UT1ApTj1OLmZpbGwoMSwwLHkpLmZpbGwoMSx5KjIseSo0KTtlbHNle2xldCBQPWUub2Zmc2V0QXR0cmlidXRlPT09c3QuTk9ORT8wOjE7Tj1OLmZpbGwoUCl9ZC5hcHBseU9mZnNldD1uZXcgaWUoe2NvbXBvbmVudERhdGF0eXBlOm5lLlVOU0lHTkVEX0JZVEUsY29tcG9uZW50c1BlckF0dHJpYnV0ZToxLHZhbHVlczpOfSl9bGV0IFQ9Yy5sZW5ndGgsXz15K3ksRT1rZS5jcmVhdGVUeXBlZEFycmF5KGgubGVuZ3RoLzMsVCoyK18qMyk7RS5zZXQoYyk7bGV0IHc9VDtmb3IocD0wO3A8VDtwKz0zKXtsZXQgTj1jW3BdLFA9Y1twKzFdLEY9Y1twKzJdO0VbdysrXT1GK3ksRVt3KytdPVAreSxFW3crK109Tit5fWxldCBSLFMsQyxJO2ZvcihwPTA7cDxfO3ArPTIpUj1wK18sUz1SK18sQz1SKzEsST1TKzEsRVt3KytdPVIsRVt3KytdPVMsRVt3KytdPUMsRVt3KytdPUMsRVt3KytdPVMsRVt3KytdPUk7cmV0dXJue2F0dHJpYnV0ZXM6ZCxpbmRpY2VzOkV9fWZ1bmN0aW9uIExFKGUsdCxuLG8sYSxyKXtsZXQgaT1zLnN1YnRyYWN0KHQsZSxVRSk7cy5ub3JtYWxpemUoaSxpKTtsZXQgZj1uLmdlb2RldGljU3VyZmFjZU5vcm1hbChlLFhmKSxkPXMuY3Jvc3MoaSxmLFVFKTtzLm11bHRpcGx5QnlTY2FsYXIoZCxvLGQpO2xldCBjPWEubGF0aXR1ZGUsdT1hLmxvbmdpdHVkZSxsPXIubGF0aXR1ZGUsaD1yLmxvbmdpdHVkZTtzLmFkZChlLGQsWGYpLG4uY2FydGVzaWFuVG9DYXJ0b2dyYXBoaWMoWGYsU2EpO2xldCBtPVNhLmxhdGl0dWRlLGI9U2EubG9uZ2l0dWRlO2M9TWF0aC5taW4oYyxtKSx1PU1hdGgubWluKHUsYiksbD1NYXRoLm1heChsLG0pLGg9TWF0aC5tYXgoaCxiKSxzLnN1YnRyYWN0KGUsZCxYZiksbi5jYXJ0ZXNpYW5Ub0NhcnRvZ3JhcGhpYyhYZixTYSksbT1TYS5sYXRpdHVkZSxiPVNhLmxvbmdpdHVkZSxjPU1hdGgubWluKGMsbSksdT1NYXRoLm1pbih1LGIpLGw9TWF0aC5tYXgobCxtKSxoPU1hdGgubWF4KGgsYiksYS5sYXRpdHVkZT1jLGEubG9uZ2l0dWRlPXUsci5sYXRpdHVkZT1sLHIubG9uZ2l0dWRlPWh9ZnVuY3Rpb24gS0UoZSx0LG4sbyxhKXtlPVZFKGUsdCk7bGV0IHI9Tm4oZSxzLmVxdWFsc0Vwc2lsb24pLGk9ci5sZW5ndGg7aWYoaTwyfHxuPD0wKXJldHVybiBuZXcgU2U7bGV0IGY9biouNTt0YS5sYXRpdHVkZT1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksdGEubG9uZ2l0dWRlPU51bWJlci5QT1NJVElWRV9JTkZJTklUWSxuYS5sYXRpdHVkZT1OdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFksbmEubG9uZ2l0dWRlPU51bWJlci5ORUdBVElWRV9JTkZJTklUWTtsZXQgZCxjO2lmKG89PT1obi5ST1VOREVEKXtsZXQgaD1yWzBdO3Muc3VidHJhY3QoaCxyWzFdLE9hKSxzLm5vcm1hbGl6ZShPYSxPYSkscy5tdWx0aXBseUJ5U2NhbGFyKE9hLGYsT2EpLHMuYWRkKGgsT2EsWWYpLHQuY2FydGVzaWFuVG9DYXJ0b2dyYXBoaWMoWWYsU2EpLGQ9U2EubGF0aXR1ZGUsYz1TYS5sb25naXR1ZGUsdGEubGF0aXR1ZGU9TWF0aC5taW4odGEubGF0aXR1ZGUsZCksdGEubG9uZ2l0dWRlPU1hdGgubWluKHRhLmxvbmdpdHVkZSxjKSxuYS5sYXRpdHVkZT1NYXRoLm1heChuYS5sYXRpdHVkZSxkKSxuYS5sb25naXR1ZGU9TWF0aC5tYXgobmEubG9uZ2l0dWRlLGMpfWZvcihsZXQgaD0wO2g8aS0xOysraClMRShyW2hdLHJbaCsxXSx0LGYsdGEsbmEpO2xldCB1PXJbaS0xXTtzLnN1YnRyYWN0KHUscltpLTJdLE9hKSxzLm5vcm1hbGl6ZShPYSxPYSkscy5tdWx0aXBseUJ5U2NhbGFyKE9hLGYsT2EpLHMuYWRkKHUsT2EsWWYpLExFKHUsWWYsdCxmLHRhLG5hKSxvPT09aG4uUk9VTkRFRCYmKHQuY2FydGVzaWFuVG9DYXJ0b2dyYXBoaWMoWWYsU2EpLGQ9U2EubGF0aXR1ZGUsYz1TYS5sb25naXR1ZGUsdGEubGF0aXR1ZGU9TWF0aC5taW4odGEubGF0aXR1ZGUsZCksdGEubG9uZ2l0dWRlPU1hdGgubWluKHRhLmxvbmdpdHVkZSxjKSxuYS5sYXRpdHVkZT1NYXRoLm1heChuYS5sYXRpdHVkZSxkKSxuYS5sb25naXR1ZGU9TWF0aC5tYXgobmEubG9uZ2l0dWRlLGMpKTtsZXQgbD1nKGEpP2E6bmV3IFNlO3JldHVybiBsLm5vcnRoPW5hLmxhdGl0dWRlLGwuc291dGg9dGEubGF0aXR1ZGUsbC5lYXN0PW5hLmxvbmdpdHVkZSxsLndlc3Q9dGEubG9uZ2l0dWRlLGx9ZnVuY3Rpb24gV3IoZSl7ZT1lPz9DZS5FTVBUWV9PQkpFQ1Q7bGV0IHQ9ZS5wb3NpdGlvbnMsbj1lLndpZHRoLG89ZS5oZWlnaHQ/PzAsYT1lLmV4dHJ1ZGVkSGVpZ2h0Pz9vO3RoaXMuX3Bvc2l0aW9ucz10LHRoaXMuX2VsbGlwc29pZD1xLmNsb25lKGUuZWxsaXBzb2lkPz9xLmRlZmF1bHQpLHRoaXMuX3ZlcnRleEZvcm1hdD1oZS5jbG9uZShlLnZlcnRleEZvcm1hdD8/aGUuREVGQVVMVCksdGhpcy5fd2lkdGg9bix0aGlzLl9oZWlnaHQ9TWF0aC5tYXgobyxhKSx0aGlzLl9leHRydWRlZEhlaWdodD1NYXRoLm1pbihvLGEpLHRoaXMuX2Nvcm5lclR5cGU9ZS5jb3JuZXJUeXBlPz9obi5ST1VOREVELHRoaXMuX2dyYW51bGFyaXR5PWUuZ3JhbnVsYXJpdHk/P2suUkFESUFOU19QRVJfREVHUkVFLHRoaXMuX3NoYWRvd1ZvbHVtZT1lLnNoYWRvd1ZvbHVtZT8/ITEsdGhpcy5fd29ya2VyTmFtZT0iY3JlYXRlQ29ycmlkb3JHZW9tZXRyeSIsdGhpcy5fb2Zmc2V0QXR0cmlidXRlPWUub2Zmc2V0QXR0cmlidXRlLHRoaXMuX3JlY3RhbmdsZT12b2lkIDAsdGhpcy5wYWNrZWRMZW5ndGg9MSt0Lmxlbmd0aCpzLnBhY2tlZExlbmd0aCtxLnBhY2tlZExlbmd0aCtoZS5wYWNrZWRMZW5ndGgrN312YXIgakUsekUsUmgseGgseXYsR0UsU2ksUnMsVUUsWGYsU2EsT2EsWWYsdGEsbmEscUUsV0UscXIsRTAsWEU9WCgoKT0+e1hhKCk7TXQoKTtJZSgpO1R0KCk7dnQoKTt5YygpO3cwKCk7bXQoKTtzZSgpO1dlKCk7JHQoKTtlbigpO3VuKCk7em8oKTtubigpO0dlKCk7SmEoKTtjbigpO19uKCk7a28oKTtqRT1uZXcgcyx6RT1uZXcgcyxSaD1uZXcgcyx4aD1uZXcgcyx5dj1uZXcgcyxHRT1uZXcgcyxTaT1uZXcgcyxScz1uZXcgcztVRT1uZXcgcyxYZj1uZXcgcyxTYT1uZXcgcmU7T2E9bmV3IHMsWWY9bmV3IHMsdGE9bmV3IHJlLG5hPW5ldyByZTtXci5wYWNrPWZ1bmN0aW9uKGUsdCxuKXtuPW4/PzA7bGV0IG89ZS5fcG9zaXRpb25zLGE9by5sZW5ndGg7dFtuKytdPWE7Zm9yKGxldCByPTA7cjxhOysrcixuKz1zLnBhY2tlZExlbmd0aClzLnBhY2sob1tyXSx0LG4pO3JldHVybiBxLnBhY2soZS5fZWxsaXBzb2lkLHQsbiksbis9cS5wYWNrZWRMZW5ndGgsaGUucGFjayhlLl92ZXJ0ZXhGb3JtYXQsdCxuKSxuKz1oZS5wYWNrZWRMZW5ndGgsdFtuKytdPWUuX3dpZHRoLHRbbisrXT1lLl9oZWlnaHQsdFtuKytdPWUuX2V4dHJ1ZGVkSGVpZ2h0LHRbbisrXT1lLl9jb3JuZXJUeXBlLHRbbisrXT1lLl9ncmFudWxhcml0eSx0W24rK109ZS5fc2hhZG93Vm9sdW1lPzE6MCx0W25dPWUuX29mZnNldEF0dHJpYnV0ZT8/LTEsdH07cUU9cS5jbG9uZShxLlVOSVRfU1BIRVJFKSxXRT1uZXcgaGUscXI9e3Bvc2l0aW9uczp2b2lkIDAsZWxsaXBzb2lkOnFFLHZlcnRleEZvcm1hdDpXRSx3aWR0aDp2b2lkIDAsaGVpZ2h0OnZvaWQgMCxleHRydWRlZEhlaWdodDp2b2lkIDAsY29ybmVyVHlwZTp2b2lkIDAsZ3JhbnVsYXJpdHk6dm9pZCAwLHNoYWRvd1ZvbHVtZTp2b2lkIDAsb2Zmc2V0QXR0cmlidXRlOnZvaWQgMH07V3IudW5wYWNrPWZ1bmN0aW9uKGUsdCxuKXt0PXQ/PzA7bGV0IG89ZVt0KytdLGE9bmV3IEFycmF5KG8pO2ZvcihsZXQgYj0wO2I8bzsrK2IsdCs9cy5wYWNrZWRMZW5ndGgpYVtiXT1zLnVucGFjayhlLHQpO2xldCByPXEudW5wYWNrKGUsdCxxRSk7dCs9cS5wYWNrZWRMZW5ndGg7bGV0IGk9aGUudW5wYWNrKGUsdCxXRSk7dCs9aGUucGFja2VkTGVuZ3RoO2xldCBmPWVbdCsrXSxkPWVbdCsrXSxjPWVbdCsrXSx1PWVbdCsrXSxsPWVbdCsrXSxoPWVbdCsrXT09PTEsbT1lW3RdO3JldHVybiBnKG4pPyhuLl9wb3NpdGlvbnM9YSxuLl9lbGxpcHNvaWQ9cS5jbG9uZShyLG4uX2VsbGlwc29pZCksbi5fdmVydGV4Rm9ybWF0PWhlLmNsb25lKGksbi5fdmVydGV4Rm9ybWF0KSxuLl93aWR0aD1mLG4uX2hlaWdodD1kLG4uX2V4dHJ1ZGVkSGVpZ2h0PWMsbi5fY29ybmVyVHlwZT11LG4uX2dyYW51bGFyaXR5PWwsbi5fc2hhZG93Vm9sdW1lPWgsbi5fb2Zmc2V0QXR0cmlidXRlPW09PT0tMT92b2lkIDA6bSxuKToocXIucG9zaXRpb25zPWEscXIud2lkdGg9Zixxci5oZWlnaHQ9ZCxxci5leHRydWRlZEhlaWdodD1jLHFyLmNvcm5lclR5cGU9dSxxci5ncmFudWxhcml0eT1sLHFyLnNoYWRvd1ZvbHVtZT1oLHFyLm9mZnNldEF0dHJpYnV0ZT1tPT09LTE/dm9pZCAwOm0sbmV3IFdyKHFyKSl9O1dyLmNvbXB1dGVSZWN0YW5nbGU9ZnVuY3Rpb24oZSx0KXtlPWU/P0NlLkVNUFRZX09CSkVDVDtsZXQgbj1lLnBvc2l0aW9ucyxvPWUud2lkdGgsYT1lLmVsbGlwc29pZD8/cS5kZWZhdWx0LHI9ZS5jb3JuZXJUeXBlPz9obi5ST1VOREVEO3JldHVybiBLRShuLGEsbyxyLHQpfTtXci5jcmVhdGVHZW9tZXRyeT1mdW5jdGlvbihlKXtsZXQgdD1lLl9wb3NpdGlvbnMsbj1lLl93aWR0aCxvPWUuX2VsbGlwc29pZDt0PVZFKHQsbyk7bGV0IGE9Tm4odCxzLmVxdWFsc0Vwc2lsb24pO2lmKGEubGVuZ3RoPDJ8fG48PTApcmV0dXJuO2xldCByPWUuX2hlaWdodCxpPWUuX2V4dHJ1ZGVkSGVpZ2h0LGY9IWsuZXF1YWxzRXBzaWxvbihyLGksMCxrLkVQU0lMT04yKSxkPWUuX3ZlcnRleEZvcm1hdCxjPXtlbGxpcHNvaWQ6byxwb3NpdGlvbnM6YSx3aWR0aDpuLGNvcm5lclR5cGU6ZS5fY29ybmVyVHlwZSxncmFudWxhcml0eTplLl9ncmFudWxhcml0eSxzYXZlQXR0cmlidXRlczohMH0sdTtpZihmKWMuaGVpZ2h0PXIsYy5leHRydWRlZEhlaWdodD1pLGMuc2hhZG93Vm9sdW1lPWUuX3NoYWRvd1ZvbHVtZSxjLm9mZnNldEF0dHJpYnV0ZT1lLl9vZmZzZXRBdHRyaWJ1dGUsdT13dihjLGQpO2Vsc2V7bGV0IG09SnQuY29tcHV0ZVBvc2l0aW9ucyhjKTtpZih1PUhFKG0sZCxvKSx1LmF0dHJpYnV0ZXMucG9zaXRpb24udmFsdWVzPVN0LnNjYWxlVG9HZW9kZXRpY0hlaWdodCh1LmF0dHJpYnV0ZXMucG9zaXRpb24udmFsdWVzLHIsbyksZyhlLl9vZmZzZXRBdHRyaWJ1dGUpKXtsZXQgYj1lLl9vZmZzZXRBdHRyaWJ1dGU9PT1zdC5OT05FPzA6MSxwPXUuYXR0cmlidXRlcy5wb3NpdGlvbi52YWx1ZXMubGVuZ3RoLHk9bmV3IFVpbnQ4QXJyYXkocC8zKS5maWxsKGIpO3UuYXR0cmlidXRlcy5hcHBseU9mZnNldD1uZXcgaWUoe2NvbXBvbmVudERhdGF0eXBlOm5lLlVOU0lHTkVEX0JZVEUsY29tcG9uZW50c1BlckF0dHJpYnV0ZToxLHZhbHVlczp5fSl9fWxldCBsPXUuYXR0cmlidXRlcyxoPWdlLmZyb21WZXJ0aWNlcyhsLnBvc2l0aW9uLnZhbHVlcyx2b2lkIDAsMyk7cmV0dXJuIGQucG9zaXRpb258fCh1LmF0dHJpYnV0ZXMucG9zaXRpb24udmFsdWVzPXZvaWQgMCksbmV3IHZlKHthdHRyaWJ1dGVzOmwsaW5kaWNlczp1LmluZGljZXMscHJpbWl0aXZlVHlwZTpVZS5UUklBTkdMRVMsYm91bmRpbmdTcGhlcmU6aCxvZmZzZXRBdHRyaWJ1dGU6ZS5fb2Zmc2V0QXR0cmlidXRlfSl9O1dyLmNyZWF0ZVNoYWRvd1ZvbHVtZT1mdW5jdGlvbihlLHQsbil7bGV0IG89ZS5fZ3JhbnVsYXJpdHksYT1lLl9lbGxpcHNvaWQscj10KG8sYSksaT1uKG8sYSk7cmV0dXJuIG5ldyBXcih7cG9zaXRpb25zOmUuX3Bvc2l0aW9ucyx3aWR0aDplLl93aWR0aCxjb3JuZXJUeXBlOmUuX2Nvcm5lclR5cGUsZWxsaXBzb2lkOmEsZ3JhbnVsYXJpdHk6byxleHRydWRlZEhlaWdodDpyLGhlaWdodDppLHZlcnRleEZvcm1hdDpoZS5QT1NJVElPTl9PTkxZLHNoYWRvd1ZvbHVtZTohMH0pfTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhXci5wcm90b3R5cGUse3JlY3RhbmdsZTp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGcodGhpcy5fcmVjdGFuZ2xlKXx8KHRoaXMuX3JlY3RhbmdsZT1LRSh0aGlzLl9wb3NpdGlvbnMsdGhpcy5fZWxsaXBzb2lkLHRoaXMuX3dpZHRoLHRoaXMuX2Nvcm5lclR5cGUpKSx0aGlzLl9yZWN0YW5nbGV9fSx0ZXh0dXJlQ29vcmRpbmF0ZVJvdGF0aW9uUG9pbnRzOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm5bMCwwLDAsMSwxLDBdfX19KTtFMD1Xcn0pO3ZhciBSMD17fTtydChSMCx7ZGVmYXVsdDooKT0+RXZ9KTtmdW5jdGlvbiBUdihlLHQpe3JldHVybiBnKHQpJiYoZT1FMC51bnBhY2soZSx0KSksZS5fZWxsaXBzb2lkPXEuY2xvbmUoZS5fZWxsaXBzb2lkKSxFMC5jcmVhdGVHZW9tZXRyeShlKX12YXIgRXYseDA9WCgoKT0+e1hFKCk7c2UoKTtXZSgpO0V2PVR2fSk7ZnVuY3Rpb24geHYoZSx0KXtmb3IobGV0IG49MDtuPGUubGVuZ3RoO24rKyllW25dPXQuc2NhbGVUb0dlb2RldGljU3VyZmFjZShlW25dLGVbbl0pO3JldHVybiBlfWZ1bmN0aW9uIFpFKGUsdCl7bGV0IG49W10sbz1lLnBvc2l0aW9ucyxhPWUuY29ybmVycyxyPWUuZW5kUG9zaXRpb25zLGk9bmV3IG50LGYsZD0wLGM9MCx1LGw9MCxoO2Zvcih1PTA7dTxvLmxlbmd0aDt1Kz0yKWg9b1t1XS5sZW5ndGgtMyxkKz1oLGwrPWgvMyo0LGMrPW9bdSsxXS5sZW5ndGgtMztmb3IoZCs9MyxjKz0zLHU9MDt1PGEubGVuZ3RoO3UrKyl7Zj1hW3VdO2xldCB2PWFbdV0ubGVmdFBvc2l0aW9ucztnKHYpPyhoPXYubGVuZ3RoLGQrPWgsbCs9aC8zKjIpOihoPWFbdV0ucmlnaHRQb3NpdGlvbnMubGVuZ3RoLGMrPWgsbCs9aC8zKjIpfWxldCBtPWcociksYjttJiYoYj1yWzBdLmxlbmd0aC0zLGQrPWIsYys9YixiLz0zLGwrPWIqNCk7bGV0IHA9ZCtjLHk9bmV3IEZsb2F0NjRBcnJheShwKSxUPTAsXz1wLTEsRSx3LFIsUyxDLEksTj1iLzIsUD1rZS5jcmVhdGVUeXBlZEFycmF5KHAvMyxsKzQpLEY9MDtpZihQW0YrK109VC8zLFBbRisrXT0oXy0yKS8zLG0pe24ucHVzaChULzMpLEk9WUUsQz1KRTtsZXQgdj1yWzBdO2Zvcih1PTA7dTxOO3UrKylJPXMuZnJvbUFycmF5KHYsKE4tMS11KSozLEkpLEM9cy5mcm9tQXJyYXkodiwoTit1KSozLEMpLEp0LmFkZEF0dHJpYnV0ZSh5LEMsVCksSnQuYWRkQXR0cmlidXRlKHksSSx2b2lkIDAsXyksdz1ULzMsUz13KzEsRT0oXy0yKS8zLFI9RS0xLFBbRisrXT1FLFBbRisrXT1SLFBbRisrXT13LFBbRisrXT1TLFQrPTMsXy09M31sZXQgQT0wLHg9b1tBKytdLE09b1tBKytdO2Zvcih5LnNldCh4LFQpLHkuc2V0KE0sXy1NLmxlbmd0aCsxKSxoPU0ubGVuZ3RoLTMsbi5wdXNoKFQvMywoXy0yKS8zKSx1PTA7dTxoO3UrPTMpdz1ULzMsUz13KzEsRT0oXy0yKS8zLFI9RS0xLFBbRisrXT1FLFBbRisrXT1SLFBbRisrXT13LFBbRisrXT1TLFQrPTMsXy09Mztmb3IodT0wO3U8YS5sZW5ndGg7dSsrKXtsZXQgdjtmPWFbdV07bGV0IFU9Zi5sZWZ0UG9zaXRpb25zLHo9Zi5yaWdodFBvc2l0aW9ucyxELEc9UnY7aWYoZyhVKSl7Zm9yKF8tPTMsRD1SLG4ucHVzaChTKSx2PTA7djxVLmxlbmd0aC8zO3YrKylHPXMuZnJvbUFycmF5KFUsdiozLEcpLFBbRisrXT1ELXYtMSxQW0YrK109RC12LEp0LmFkZEF0dHJpYnV0ZSh5LEcsdm9pZCAwLF8pLF8tPTM7bi5wdXNoKEQtTWF0aC5mbG9vcihVLmxlbmd0aC82KSksdD09PWhuLkJFVkVMRUQmJm4ucHVzaCgoXy0yKS8zKzEpLFQrPTN9ZWxzZXtmb3IoVCs9MyxEPVMsbi5wdXNoKFIpLHY9MDt2PHoubGVuZ3RoLzM7disrKUc9cy5mcm9tQXJyYXkoeix2KjMsRyksUFtGKytdPUQrdixQW0YrK109RCt2KzEsSnQuYWRkQXR0cmlidXRlKHksRyxUKSxUKz0zO24ucHVzaChEK01hdGguZmxvb3Ioei5sZW5ndGgvNikpLHQ9PT1obi5CRVZFTEVEJiZuLnB1c2goVC8zLTEpLF8tPTN9Zm9yKHg9b1tBKytdLE09b1tBKytdLHguc3BsaWNlKDAsMyksTS5zcGxpY2UoTS5sZW5ndGgtMywzKSx5LnNldCh4LFQpLHkuc2V0KE0sXy1NLmxlbmd0aCsxKSxoPU0ubGVuZ3RoLTMsdj0wO3Y8TS5sZW5ndGg7dis9MylTPVQvMyx3PVMtMSxSPShfLTIpLzMsRT1SKzEsUFtGKytdPUUsUFtGKytdPVIsUFtGKytdPXcsUFtGKytdPVMsVCs9MyxfLT0zO1QtPTMsXys9MyxuLnB1c2goVC8zLChfLTIpLzMpfWlmKG0pe1QrPTMsXy09MyxJPVlFLEM9SkU7bGV0IHY9clsxXTtmb3IodT0wO3U8Tjt1KyspST1zLmZyb21BcnJheSh2LChiLXUtMSkqMyxJKSxDPXMuZnJvbUFycmF5KHYsdSozLEMpLEp0LmFkZEF0dHJpYnV0ZSh5LEksdm9pZCAwLF8pLEp0LmFkZEF0dHJpYnV0ZSh5LEMsVCksUz1ULzMsdz1TLTEsUj0oXy0yKS8zLEU9UisxLFBbRisrXT1FLFBbRisrXT1SLFBbRisrXT13LFBbRisrXT1TLFQrPTMsXy09MztuLnB1c2goVC8zKX1lbHNlIG4ucHVzaChULzMsKF8tMikvMyk7cmV0dXJuIFBbRisrXT1ULzMsUFtGKytdPShfLTIpLzMsaS5wb3NpdGlvbj1uZXcgaWUoe2NvbXBvbmVudERhdGF0eXBlOm5lLkRPVUJMRSxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOnl9KSx7YXR0cmlidXRlczppLGluZGljZXM6UCx3YWxsSW5kaWNlczpufX1mdW5jdGlvbiBPdihlKXtsZXQgdD1lLmVsbGlwc29pZCxuPUp0LmNvbXB1dGVQb3NpdGlvbnMoZSksbz1aRShuLGUuY29ybmVyVHlwZSksYT1vLndhbGxJbmRpY2VzLHI9ZS5oZWlnaHQsaT1lLmV4dHJ1ZGVkSGVpZ2h0LGY9by5hdHRyaWJ1dGVzLGQ9by5pbmRpY2VzLGM9Zi5wb3NpdGlvbi52YWx1ZXMsdT1jLmxlbmd0aCxsPW5ldyBGbG9hdDY0QXJyYXkodSk7bC5zZXQoYyk7bGV0IGg9bmV3IEZsb2F0NjRBcnJheSh1KjIpO2lmKGM9U3Quc2NhbGVUb0dlb2RldGljSGVpZ2h0KGMscix0KSxsPVN0LnNjYWxlVG9HZW9kZXRpY0hlaWdodChsLGksdCksaC5zZXQoYyksaC5zZXQobCx1KSxmLnBvc2l0aW9uLnZhbHVlcz1oLHUvPTMsZyhlLm9mZnNldEF0dHJpYnV0ZSkpe2xldCBFPW5ldyBVaW50OEFycmF5KHUqMik7aWYoZS5vZmZzZXRBdHRyaWJ1dGU9PT1zdC5UT1ApRT1FLmZpbGwoMSwwLHUpO2Vsc2V7bGV0IHc9ZS5vZmZzZXRBdHRyaWJ1dGU9PT1zdC5OT05FPzA6MTtFPUUuZmlsbCh3KX1mLmFwcGx5T2Zmc2V0PW5ldyBpZSh7Y29tcG9uZW50RGF0YXR5cGU6bmUuVU5TSUdORURfQllURSxjb21wb25lbnRzUGVyQXR0cmlidXRlOjEsdmFsdWVzOkV9KX1sZXQgbSxiPWQubGVuZ3RoLHA9a2UuY3JlYXRlVHlwZWRBcnJheShoLmxlbmd0aC8zLChiK2EubGVuZ3RoKSoyKTtwLnNldChkKTtsZXQgeT1iO2ZvcihtPTA7bTxiO20rPTIpe2xldCBFPWRbbV0sdz1kW20rMV07cFt5KytdPUUrdSxwW3krK109dyt1fWxldCBULF87Zm9yKG09MDttPGEubGVuZ3RoO20rKylUPWFbbV0sXz1UK3UscFt5KytdPVQscFt5KytdPV87cmV0dXJue2F0dHJpYnV0ZXM6ZixpbmRpY2VzOnB9fWZ1bmN0aW9uIEpmKGUpe2U9ZT8/Q2UuRU1QVFlfT0JKRUNUO2xldCB0PWUucG9zaXRpb25zLG49ZS53aWR0aCxvPWUuaGVpZ2h0Pz8wLGE9ZS5leHRydWRlZEhlaWdodD8/bzt0aGlzLl9wb3NpdGlvbnM9dCx0aGlzLl9lbGxpcHNvaWQ9cS5jbG9uZShlLmVsbGlwc29pZD8/cS5kZWZhdWx0KSx0aGlzLl93aWR0aD1uLHRoaXMuX2hlaWdodD1NYXRoLm1heChvLGEpLHRoaXMuX2V4dHJ1ZGVkSGVpZ2h0PU1hdGgubWluKG8sYSksdGhpcy5fY29ybmVyVHlwZT1lLmNvcm5lclR5cGU/P2huLlJPVU5ERUQsdGhpcy5fZ3JhbnVsYXJpdHk9ZS5ncmFudWxhcml0eT8/ay5SQURJQU5TX1BFUl9ERUdSRUUsdGhpcy5fb2Zmc2V0QXR0cmlidXRlPWUub2Zmc2V0QXR0cmlidXRlLHRoaXMuX3dvcmtlck5hbWU9ImNyZWF0ZUNvcnJpZG9yT3V0bGluZUdlb21ldHJ5Iix0aGlzLnBhY2tlZExlbmd0aD0xK3QubGVuZ3RoKnMucGFja2VkTGVuZ3RoK3EucGFja2VkTGVuZ3RoKzZ9dmFyIFlFLEpFLFJ2LFFFLENpLE8wLCRFPVgoKCk9PntYYSgpO010KCk7SWUoKTt2dCgpO3ljKCk7dzAoKTttdCgpO3NlKCk7V2UoKTskdCgpO2VuKCk7dW4oKTt6bygpO25uKCk7R2UoKTtKYSgpO2NuKCk7WUU9bmV3IHMsSkU9bmV3IHMsUnY9bmV3IHM7SmYucGFjaz1mdW5jdGlvbihlLHQsbil7bj1uPz8wO2xldCBvPWUuX3Bvc2l0aW9ucyxhPW8ubGVuZ3RoO3RbbisrXT1hO2ZvcihsZXQgcj0wO3I8YTsrK3Isbis9cy5wYWNrZWRMZW5ndGgpcy5wYWNrKG9bcl0sdCxuKTtyZXR1cm4gcS5wYWNrKGUuX2VsbGlwc29pZCx0LG4pLG4rPXEucGFja2VkTGVuZ3RoLHRbbisrXT1lLl93aWR0aCx0W24rK109ZS5faGVpZ2h0LHRbbisrXT1lLl9leHRydWRlZEhlaWdodCx0W24rK109ZS5fY29ybmVyVHlwZSx0W24rK109ZS5fZ3JhbnVsYXJpdHksdFtuXT1lLl9vZmZzZXRBdHRyaWJ1dGU/Py0xLHR9O1FFPXEuY2xvbmUocS5VTklUX1NQSEVSRSksQ2k9e3Bvc2l0aW9uczp2b2lkIDAsZWxsaXBzb2lkOlFFLHdpZHRoOnZvaWQgMCxoZWlnaHQ6dm9pZCAwLGV4dHJ1ZGVkSGVpZ2h0OnZvaWQgMCxjb3JuZXJUeXBlOnZvaWQgMCxncmFudWxhcml0eTp2b2lkIDAsb2Zmc2V0QXR0cmlidXRlOnZvaWQgMH07SmYudW5wYWNrPWZ1bmN0aW9uKGUsdCxuKXt0PXQ/PzA7bGV0IG89ZVt0KytdLGE9bmV3IEFycmF5KG8pO2ZvcihsZXQgaD0wO2g8bzsrK2gsdCs9cy5wYWNrZWRMZW5ndGgpYVtoXT1zLnVucGFjayhlLHQpO2xldCByPXEudW5wYWNrKGUsdCxRRSk7dCs9cS5wYWNrZWRMZW5ndGg7bGV0IGk9ZVt0KytdLGY9ZVt0KytdLGQ9ZVt0KytdLGM9ZVt0KytdLHU9ZVt0KytdLGw9ZVt0XTtyZXR1cm4gZyhuKT8obi5fcG9zaXRpb25zPWEsbi5fZWxsaXBzb2lkPXEuY2xvbmUocixuLl9lbGxpcHNvaWQpLG4uX3dpZHRoPWksbi5faGVpZ2h0PWYsbi5fZXh0cnVkZWRIZWlnaHQ9ZCxuLl9jb3JuZXJUeXBlPWMsbi5fZ3JhbnVsYXJpdHk9dSxuLl9vZmZzZXRBdHRyaWJ1dGU9bD09PS0xP3ZvaWQgMDpsLG4pOihDaS5wb3NpdGlvbnM9YSxDaS53aWR0aD1pLENpLmhlaWdodD1mLENpLmV4dHJ1ZGVkSGVpZ2h0PWQsQ2kuY29ybmVyVHlwZT1jLENpLmdyYW51bGFyaXR5PXUsQ2kub2Zmc2V0QXR0cmlidXRlPWw9PT0tMT92b2lkIDA6bCxuZXcgSmYoQ2kpKX07SmYuY3JlYXRlR2VvbWV0cnk9ZnVuY3Rpb24oZSl7bGV0IHQ9ZS5fcG9zaXRpb25zLG49ZS5fd2lkdGgsbz1lLl9lbGxpcHNvaWQ7dD14dih0LG8pO2xldCBhPU5uKHQscy5lcXVhbHNFcHNpbG9uKTtpZihhLmxlbmd0aDwyfHxuPD0wKXJldHVybjtsZXQgcj1lLl9oZWlnaHQsaT1lLl9leHRydWRlZEhlaWdodCxmPSFrLmVxdWFsc0Vwc2lsb24ocixpLDAsay5FUFNJTE9OMiksZD17ZWxsaXBzb2lkOm8scG9zaXRpb25zOmEsd2lkdGg6bixjb3JuZXJUeXBlOmUuX2Nvcm5lclR5cGUsZ3JhbnVsYXJpdHk6ZS5fZ3JhbnVsYXJpdHksc2F2ZUF0dHJpYnV0ZXM6ITF9LGM7aWYoZilkLmhlaWdodD1yLGQuZXh0cnVkZWRIZWlnaHQ9aSxkLm9mZnNldEF0dHJpYnV0ZT1lLl9vZmZzZXRBdHRyaWJ1dGUsYz1PdihkKTtlbHNle2xldCBoPUp0LmNvbXB1dGVQb3NpdGlvbnMoZCk7aWYoYz1aRShoLGQuY29ybmVyVHlwZSksYy5hdHRyaWJ1dGVzLnBvc2l0aW9uLnZhbHVlcz1TdC5zY2FsZVRvR2VvZGV0aWNIZWlnaHQoYy5hdHRyaWJ1dGVzLnBvc2l0aW9uLnZhbHVlcyxyLG8pLGcoZS5fb2Zmc2V0QXR0cmlidXRlKSl7bGV0IG09Yy5hdHRyaWJ1dGVzLnBvc2l0aW9uLnZhbHVlcy5sZW5ndGgsYj1lLl9vZmZzZXRBdHRyaWJ1dGU9PT1zdC5OT05FPzA6MSxwPW5ldyBVaW50OEFycmF5KG0vMykuZmlsbChiKTtjLmF0dHJpYnV0ZXMuYXBwbHlPZmZzZXQ9bmV3IGllKHtjb21wb25lbnREYXRhdHlwZTpuZS5VTlNJR05FRF9CWVRFLGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6MSx2YWx1ZXM6cH0pfX1sZXQgdT1jLmF0dHJpYnV0ZXMsbD1nZS5mcm9tVmVydGljZXModS5wb3NpdGlvbi52YWx1ZXMsdm9pZCAwLDMpO3JldHVybiBuZXcgdmUoe2F0dHJpYnV0ZXM6dSxpbmRpY2VzOmMuaW5kaWNlcyxwcmltaXRpdmVUeXBlOlVlLkxJTkVTLGJvdW5kaW5nU3BoZXJlOmwsb2Zmc2V0QXR0cmlidXRlOmUuX29mZnNldEF0dHJpYnV0ZX0pfTtPMD1KZn0pO3ZhciBTMD17fTtydChTMCx7ZGVmYXVsdDooKT0+Q3Z9KTtmdW5jdGlvbiBTdihlLHQpe3JldHVybiBnKHQpJiYoZT1PMC51bnBhY2soZSx0KSksZS5fZWxsaXBzb2lkPXEuY2xvbmUoZS5fZWxsaXBzb2lkKSxPMC5jcmVhdGVHZW9tZXRyeShlKX12YXIgQ3YsQzA9WCgoKT0+eyRFKCk7c2UoKTtXZSgpO0N2PVN2fSk7dmFyIGU4LE9oLE0wPVgoKCk9PntHZSgpO2U4PXt9O2U4LmNvbXB1dGVQb3NpdGlvbnM9ZnVuY3Rpb24oZSx0LG4sbyxhKXtsZXQgcj1lKi41LGk9LXIsZj1vK28sZD1hPzIqZjpmLGM9bmV3IEZsb2F0NjRBcnJheShkKjMpLHUsbD0wLGg9MCxtPWE/ZiozOjAsYj1hPyhmK28pKjM6byozO2Zvcih1PTA7dTxvO3UrKyl7bGV0IHA9dS9vKmsuVFdPX1BJLHk9TWF0aC5jb3MocCksVD1NYXRoLnNpbihwKSxfPXkqbixFPVQqbix3PXkqdCxSPVQqdDtjW2grbV09XyxjW2grbSsxXT1FLGNbaCttKzJdPWksY1toK2JdPXcsY1toK2IrMV09UixjW2grYisyXT1yLGgrPTMsYSYmKGNbbCsrXT1fLGNbbCsrXT1FLGNbbCsrXT1pLGNbbCsrXT13LGNbbCsrXT1SLGNbbCsrXT1yKX1yZXR1cm4gY307T2g9ZTh9KTtmdW5jdGlvbiBYcihlKXtlPWU/P0NlLkVNUFRZX09CSkVDVDtsZXQgdD1lLmxlbmd0aCxuPWUudG9wUmFkaXVzLG89ZS5ib3R0b21SYWRpdXMsYT1lLnZlcnRleEZvcm1hdD8/aGUuREVGQVVMVCxyPWUuc2xpY2VzPz8xMjg7dGhpcy5fbGVuZ3RoPXQsdGhpcy5fdG9wUmFkaXVzPW4sdGhpcy5fYm90dG9tUmFkaXVzPW8sdGhpcy5fdmVydGV4Rm9ybWF0PWhlLmNsb25lKGEpLHRoaXMuX3NsaWNlcz1yLHRoaXMuX29mZnNldEF0dHJpYnV0ZT1lLm9mZnNldEF0dHJpYnV0ZSx0aGlzLl93b3JrZXJOYW1lPSJjcmVhdGVDeWxpbmRlckdlb21ldHJ5In12YXIgTjAsTXYsTnYsSXYsUHYsdDgseHMsSTAsWmYsUDA9WCgoKT0+e010KCk7anQoKTtJZSgpO3Z0KCk7TTAoKTttdCgpO3NlKCk7JHQoKTtlbigpO3VuKCk7em8oKTtubigpO0dlKCk7Y24oKTtrbygpO04wPW5ldyBZLE12PW5ldyBzLE52PW5ldyBzLEl2PW5ldyBzLFB2PW5ldyBzO1hyLnBhY2tlZExlbmd0aD1oZS5wYWNrZWRMZW5ndGgrNTtYci5wYWNrPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gbj1uPz8wLGhlLnBhY2soZS5fdmVydGV4Rm9ybWF0LHQsbiksbis9aGUucGFja2VkTGVuZ3RoLHRbbisrXT1lLl9sZW5ndGgsdFtuKytdPWUuX3RvcFJhZGl1cyx0W24rK109ZS5fYm90dG9tUmFkaXVzLHRbbisrXT1lLl9zbGljZXMsdFtuXT1lLl9vZmZzZXRBdHRyaWJ1dGU/Py0xLHR9O3Q4PW5ldyBoZSx4cz17dmVydGV4Rm9ybWF0OnQ4LGxlbmd0aDp2b2lkIDAsdG9wUmFkaXVzOnZvaWQgMCxib3R0b21SYWRpdXM6dm9pZCAwLHNsaWNlczp2b2lkIDAsb2Zmc2V0QXR0cmlidXRlOnZvaWQgMH07WHIudW5wYWNrPWZ1bmN0aW9uKGUsdCxuKXt0PXQ/PzA7bGV0IG89aGUudW5wYWNrKGUsdCx0OCk7dCs9aGUucGFja2VkTGVuZ3RoO2xldCBhPWVbdCsrXSxyPWVbdCsrXSxpPWVbdCsrXSxmPWVbdCsrXSxkPWVbdF07cmV0dXJuIGcobik/KG4uX3ZlcnRleEZvcm1hdD1oZS5jbG9uZShvLG4uX3ZlcnRleEZvcm1hdCksbi5fbGVuZ3RoPWEsbi5fdG9wUmFkaXVzPXIsbi5fYm90dG9tUmFkaXVzPWksbi5fc2xpY2VzPWYsbi5fb2Zmc2V0QXR0cmlidXRlPWQ9PT0tMT92b2lkIDA6ZCxuKTooeHMubGVuZ3RoPWEseHMudG9wUmFkaXVzPXIseHMuYm90dG9tUmFkaXVzPWkseHMuc2xpY2VzPWYseHMub2Zmc2V0QXR0cmlidXRlPWQ9PT0tMT92b2lkIDA6ZCxuZXcgWHIoeHMpKX07WHIuY3JlYXRlR2VvbWV0cnk9ZnVuY3Rpb24oZSl7bGV0IHQ9ZS5fbGVuZ3RoLG49ZS5fdG9wUmFkaXVzLG89ZS5fYm90dG9tUmFkaXVzLGE9ZS5fdmVydGV4Rm9ybWF0LHI9ZS5fc2xpY2VzO2lmKHQ8PTB8fG48MHx8bzwwfHxuPT09MCYmbz09PTApcmV0dXJuO2xldCBpPXIrcixmPXIraSxkPWkraSxjPU9oLmNvbXB1dGVQb3NpdGlvbnModCxuLG8sciwhMCksdT1hLnN0P25ldyBGbG9hdDMyQXJyYXkoZCoyKTp2b2lkIDAsbD1hLm5vcm1hbD9uZXcgRmxvYXQzMkFycmF5KGQqMyk6dm9pZCAwLGg9YS50YW5nZW50P25ldyBGbG9hdDMyQXJyYXkoZCozKTp2b2lkIDAsbT1hLmJpdGFuZ2VudD9uZXcgRmxvYXQzMkFycmF5KGQqMyk6dm9pZCAwLGIscD1hLm5vcm1hbHx8YS50YW5nZW50fHxhLmJpdGFuZ2VudDtpZihwKXtsZXQgQz1hLnRhbmdlbnR8fGEuYml0YW5nZW50LEk9MCxOPTAsUD0wLEY9TWF0aC5hdGFuMihvLW4sdCksQT1NdjtBLno9TWF0aC5zaW4oRik7bGV0IHg9TWF0aC5jb3MoRiksTT1Jdix2PU52O2ZvcihiPTA7YjxyO2IrKyl7bGV0IFU9Yi9yKmsuVFdPX1BJLHo9eCpNYXRoLmNvcyhVKSxEPXgqTWF0aC5zaW4oVSk7cCYmKEEueD16LEEueT1ELEMmJihNPXMubm9ybWFsaXplKHMuY3Jvc3Mocy5VTklUX1osQSxNKSxNKSksYS5ub3JtYWwmJihsW0krK109QS54LGxbSSsrXT1BLnksbFtJKytdPUEueixsW0krK109QS54LGxbSSsrXT1BLnksbFtJKytdPUEueiksYS50YW5nZW50JiYoaFtOKytdPU0ueCxoW04rK109TS55LGhbTisrXT1NLnosaFtOKytdPU0ueCxoW04rK109TS55LGhbTisrXT1NLnopLGEuYml0YW5nZW50JiYodj1zLm5vcm1hbGl6ZShzLmNyb3NzKEEsTSx2KSx2KSxtW1ArK109di54LG1bUCsrXT12LnksbVtQKytdPXYueixtW1ArK109di54LG1bUCsrXT12LnksbVtQKytdPXYueikpfWZvcihiPTA7YjxyO2IrKylhLm5vcm1hbCYmKGxbSSsrXT0wLGxbSSsrXT0wLGxbSSsrXT0tMSksYS50YW5nZW50JiYoaFtOKytdPTEsaFtOKytdPTAsaFtOKytdPTApLGEuYml0YW5nZW50JiYobVtQKytdPTAsbVtQKytdPS0xLG1bUCsrXT0wKTtmb3IoYj0wO2I8cjtiKyspYS5ub3JtYWwmJihsW0krK109MCxsW0krK109MCxsW0krK109MSksYS50YW5nZW50JiYoaFtOKytdPTEsaFtOKytdPTAsaFtOKytdPTApLGEuYml0YW5nZW50JiYobVtQKytdPTAsbVtQKytdPTEsbVtQKytdPTApfWxldCB5PTEyKnItMTIsVD1rZS5jcmVhdGVUeXBlZEFycmF5KGQseSksXz0wLEU9MDtmb3IoYj0wO2I8ci0xO2IrKylUW18rK109RSxUW18rK109RSsyLFRbXysrXT1FKzMsVFtfKytdPUUsVFtfKytdPUUrMyxUW18rK109RSsxLEUrPTI7Zm9yKFRbXysrXT1pLTIsVFtfKytdPTAsVFtfKytdPTEsVFtfKytdPWktMixUW18rK109MSxUW18rK109aS0xLGI9MTtiPHItMTtiKyspVFtfKytdPWkrYisxLFRbXysrXT1pK2IsVFtfKytdPWk7Zm9yKGI9MTtiPHItMTtiKyspVFtfKytdPWYsVFtfKytdPWYrYixUW18rK109ZitiKzE7bGV0IHc9MDtpZihhLnN0KXtsZXQgQz1NYXRoLm1heChuLG8pO2ZvcihiPTA7YjxkO2IrKyl7bGV0IEk9cy5mcm9tQXJyYXkoYyxiKjMsUHYpO3VbdysrXT0oSS54K0MpLygyKkMpLHVbdysrXT0oSS55K0MpLygyKkMpfX1sZXQgUj1uZXcgbnQ7YS5wb3NpdGlvbiYmKFIucG9zaXRpb249bmV3IGllKHtjb21wb25lbnREYXRhdHlwZTpuZS5ET1VCTEUsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczpjfSkpLGEubm9ybWFsJiYoUi5ub3JtYWw9bmV3IGllKHtjb21wb25lbnREYXRhdHlwZTpuZS5GTE9BVCxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOmx9KSksYS50YW5nZW50JiYoUi50YW5nZW50PW5ldyBpZSh7Y29tcG9uZW50RGF0YXR5cGU6bmUuRkxPQVQsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczpofSkpLGEuYml0YW5nZW50JiYoUi5iaXRhbmdlbnQ9bmV3IGllKHtjb21wb25lbnREYXRhdHlwZTpuZS5GTE9BVCxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOm19KSksYS5zdCYmKFIuc3Q9bmV3IGllKHtjb21wb25lbnREYXRhdHlwZTpuZS5GTE9BVCxjb21wb25lbnRzUGVyQXR0cmlidXRlOjIsdmFsdWVzOnV9KSksTjAueD10Ki41LE4wLnk9TWF0aC5tYXgobyxuKTtsZXQgUz1uZXcgZ2Uocy5aRVJPLFkubWFnbml0dWRlKE4wKSk7aWYoZyhlLl9vZmZzZXRBdHRyaWJ1dGUpKXt0PWMubGVuZ3RoO2xldCBDPWUuX29mZnNldEF0dHJpYnV0ZT09PXN0Lk5PTkU/MDoxLEk9bmV3IFVpbnQ4QXJyYXkodC8zKS5maWxsKEMpO1IuYXBwbHlPZmZzZXQ9bmV3IGllKHtjb21wb25lbnREYXRhdHlwZTpuZS5VTlNJR05FRF9CWVRFLGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6MSx2YWx1ZXM6SX0pfXJldHVybiBuZXcgdmUoe2F0dHJpYnV0ZXM6UixpbmRpY2VzOlQscHJpbWl0aXZlVHlwZTpVZS5UUklBTkdMRVMsYm91bmRpbmdTcGhlcmU6UyxvZmZzZXRBdHRyaWJ1dGU6ZS5fb2Zmc2V0QXR0cmlidXRlfSl9O1hyLmdldFVuaXRDeWxpbmRlcj1mdW5jdGlvbigpe3JldHVybiBnKEkwKXx8KEkwPVhyLmNyZWF0ZUdlb21ldHJ5KG5ldyBYcih7dG9wUmFkaXVzOjEsYm90dG9tUmFkaXVzOjEsbGVuZ3RoOjEsdmVydGV4Rm9ybWF0OmhlLlBPU0lUSU9OX09OTFl9KSkpLEkwfTtaZj1Ycn0pO3ZhciBrMD17fTtydChrMCx7ZGVmYXVsdDooKT0+dnZ9KTtmdW5jdGlvbiBrdihlLHQpe3JldHVybiBnKHQpJiYoZT1aZi51bnBhY2soZSx0KSksWmYuY3JlYXRlR2VvbWV0cnkoZSl9dmFyIHZ2LHYwPVgoKCk9PntQMCgpO3NlKCk7dnY9a3Z9KTtmdW5jdGlvbiBPcyhlKXtlPWU/P0NlLkVNUFRZX09CSkVDVDtsZXQgdD1lLmxlbmd0aCxuPWUudG9wUmFkaXVzLG89ZS5ib3R0b21SYWRpdXMsYT1lLnNsaWNlcz8/MTI4LHI9TWF0aC5tYXgoZS5udW1iZXJPZlZlcnRpY2FsTGluZXM/PzE2LDApO3RoaXMuX2xlbmd0aD10LHRoaXMuX3RvcFJhZGl1cz1uLHRoaXMuX2JvdHRvbVJhZGl1cz1vLHRoaXMuX3NsaWNlcz1hLHRoaXMuX251bWJlck9mVmVydGljYWxMaW5lcz1yLHRoaXMuX29mZnNldEF0dHJpYnV0ZT1lLm9mZnNldEF0dHJpYnV0ZSx0aGlzLl93b3JrZXJOYW1lPSJjcmVhdGVDeWxpbmRlck91dGxpbmVHZW9tZXRyeSJ9dmFyIEYwLHdjLEQwLG44PVgoKCk9PntNdCgpO2p0KCk7SWUoKTt2dCgpO00wKCk7bXQoKTtzZSgpOyR0KCk7ZW4oKTt1bigpO3pvKCk7bm4oKTtjbigpO0YwPW5ldyBZO09zLnBhY2tlZExlbmd0aD02O09zLnBhY2s9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBuPW4/PzAsdFtuKytdPWUuX2xlbmd0aCx0W24rK109ZS5fdG9wUmFkaXVzLHRbbisrXT1lLl9ib3R0b21SYWRpdXMsdFtuKytdPWUuX3NsaWNlcyx0W24rK109ZS5fbnVtYmVyT2ZWZXJ0aWNhbExpbmVzLHRbbl09ZS5fb2Zmc2V0QXR0cmlidXRlPz8tMSx0fTt3Yz17bGVuZ3RoOnZvaWQgMCx0b3BSYWRpdXM6dm9pZCAwLGJvdHRvbVJhZGl1czp2b2lkIDAsc2xpY2VzOnZvaWQgMCxudW1iZXJPZlZlcnRpY2FsTGluZXM6dm9pZCAwLG9mZnNldEF0dHJpYnV0ZTp2b2lkIDB9O09zLnVucGFjaz1mdW5jdGlvbihlLHQsbil7dD10Pz8wO2xldCBvPWVbdCsrXSxhPWVbdCsrXSxyPWVbdCsrXSxpPWVbdCsrXSxmPWVbdCsrXSxkPWVbdF07cmV0dXJuIGcobik/KG4uX2xlbmd0aD1vLG4uX3RvcFJhZGl1cz1hLG4uX2JvdHRvbVJhZGl1cz1yLG4uX3NsaWNlcz1pLG4uX251bWJlck9mVmVydGljYWxMaW5lcz1mLG4uX29mZnNldEF0dHJpYnV0ZT1kPT09LTE/dm9pZCAwOmQsbik6KHdjLmxlbmd0aD1vLHdjLnRvcFJhZGl1cz1hLHdjLmJvdHRvbVJhZGl1cz1yLHdjLnNsaWNlcz1pLHdjLm51bWJlck9mVmVydGljYWxMaW5lcz1mLHdjLm9mZnNldEF0dHJpYnV0ZT1kPT09LTE/dm9pZCAwOmQsbmV3IE9zKHdjKSl9O09zLmNyZWF0ZUdlb21ldHJ5PWZ1bmN0aW9uKGUpe2xldCB0PWUuX2xlbmd0aCxuPWUuX3RvcFJhZGl1cyxvPWUuX2JvdHRvbVJhZGl1cyxhPWUuX3NsaWNlcyxyPWUuX251bWJlck9mVmVydGljYWxMaW5lcztpZih0PD0wfHxuPDB8fG88MHx8bj09PTAmJm89PT0wKXJldHVybjtsZXQgaT1hKjIsZj1PaC5jb21wdXRlUG9zaXRpb25zKHQsbixvLGEsITEpLGQ9YSoyLGM7aWYocj4wKXtsZXQgcD1NYXRoLm1pbihyLGEpO2M9TWF0aC5yb3VuZChhL3ApLGQrPXB9bGV0IHU9a2UuY3JlYXRlVHlwZWRBcnJheShpLGQqMiksbD0wLGg7Zm9yKGg9MDtoPGEtMTtoKyspdVtsKytdPWgsdVtsKytdPWgrMSx1W2wrK109aCthLHVbbCsrXT1oKzErYTtpZih1W2wrK109YS0xLHVbbCsrXT0wLHVbbCsrXT1hK2EtMSx1W2wrK109YSxyPjApZm9yKGg9MDtoPGE7aCs9Yyl1W2wrK109aCx1W2wrK109aCthO2xldCBtPW5ldyBudDttLnBvc2l0aW9uPW5ldyBpZSh7Y29tcG9uZW50RGF0YXR5cGU6bmUuRE9VQkxFLGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6Zn0pLEYwLng9dCouNSxGMC55PU1hdGgubWF4KG8sbik7bGV0IGI9bmV3IGdlKHMuWkVSTyxZLm1hZ25pdHVkZShGMCkpO2lmKGcoZS5fb2Zmc2V0QXR0cmlidXRlKSl7dD1mLmxlbmd0aDtsZXQgcD1lLl9vZmZzZXRBdHRyaWJ1dGU9PT1zdC5OT05FPzA6MSx5PW5ldyBVaW50OEFycmF5KHQvMykuZmlsbChwKTttLmFwcGx5T2Zmc2V0PW5ldyBpZSh7Y29tcG9uZW50RGF0YXR5cGU6bmUuVU5TSUdORURfQllURSxjb21wb25lbnRzUGVyQXR0cmlidXRlOjEsdmFsdWVzOnl9KX1yZXR1cm4gbmV3IHZlKHthdHRyaWJ1dGVzOm0saW5kaWNlczp1LHByaW1pdGl2ZVR5cGU6VWUuTElORVMsYm91bmRpbmdTcGhlcmU6YixvZmZzZXRBdHRyaWJ1dGU6ZS5fb2Zmc2V0QXR0cmlidXRlfSl9O0QwPU9zfSk7dmFyIEIwPXt9O3J0KEIwLHtkZWZhdWx0OigpPT5Edn0pO2Z1bmN0aW9uIEZ2KGUsdCl7cmV0dXJuIGcodCkmJihlPUQwLnVucGFjayhlLHQpKSxEMC5jcmVhdGVHZW9tZXRyeShlKX12YXIgRHYsVTA9WCgoKT0+e244KCk7c2UoKTtEdj1Gdn0pO3ZhciBMMD17fTtydChMMCx7ZGVmYXVsdDooKT0+VXZ9KTtmdW5jdGlvbiBCdihlLHQpe3JldHVybiBnKHQpJiYoZT1xYS51bnBhY2soZSx0KSksZS5fY2VudGVyPXMuY2xvbmUoZS5fY2VudGVyKSxlLl9lbGxpcHNvaWQ9cS5jbG9uZShlLl9lbGxpcHNvaWQpLHFhLmNyZWF0ZUdlb21ldHJ5KGUpfXZhciBVdixqMD1YKCgpPT57SWUoKTtzZSgpO2pwKCk7V2UoKTtVdj1Cdn0pO3ZhciB6MD17fTtydCh6MCx7ZGVmYXVsdDooKT0+anZ9KTtmdW5jdGlvbiBMdihlLHQpe3JldHVybiBnKHQpJiYoZT1XYS51bnBhY2soZSx0KSksZS5fY2VudGVyPXMuY2xvbmUoZS5fY2VudGVyKSxlLl9lbGxpcHNvaWQ9cS5jbG9uZShlLl9lbGxpcHNvaWQpLFdhLmNyZWF0ZUdlb21ldHJ5KGUpfXZhciBqdixHMD1YKCgpPT57SWUoKTtzZSgpO0hwKCk7V2UoKTtqdj1Mdn0pO2Z1bmN0aW9uIFlyKGUpe2U9ZT8/Q2UuRU1QVFlfT0JKRUNUO2xldCB0PWUucmFkaWk/P3F2LG49ZS5pbm5lclJhZGlpPz90LG89ZS5taW5pbXVtQ2xvY2s/PzAsYT1lLm1heGltdW1DbG9jaz8/ay5UV09fUEkscj1lLm1pbmltdW1Db25lPz8wLGk9ZS5tYXhpbXVtQ29uZT8/ay5QSSxmPU1hdGgucm91bmQoZS5zdGFja1BhcnRpdGlvbnM/PzY0KSxkPU1hdGgucm91bmQoZS5zbGljZVBhcnRpdGlvbnM/PzY0KSxjPWUudmVydGV4Rm9ybWF0Pz9oZS5ERUZBVUxUO3RoaXMuX3JhZGlpPXMuY2xvbmUodCksdGhpcy5faW5uZXJSYWRpaT1zLmNsb25lKG4pLHRoaXMuX21pbmltdW1DbG9jaz1vLHRoaXMuX21heGltdW1DbG9jaz1hLHRoaXMuX21pbmltdW1Db25lPXIsdGhpcy5fbWF4aW11bUNvbmU9aSx0aGlzLl9zdGFja1BhcnRpdGlvbnM9Zix0aGlzLl9zbGljZVBhcnRpdGlvbnM9ZCx0aGlzLl92ZXJ0ZXhGb3JtYXQ9aGUuY2xvbmUoYyksdGhpcy5fb2Zmc2V0QXR0cmlidXRlPWUub2Zmc2V0QXR0cmlidXRlLHRoaXMuX3dvcmtlck5hbWU9ImNyZWF0ZUVsbGlwc29pZEdlb21ldHJ5In12YXIgenYsR3YsVnYsSHYsS3YscXYsbzgsYTgscjgsaTgsYzgsTWksVjAsZGEsU2g9WCgoKT0+e010KCk7anQoKTtJZSgpO3Z0KCk7bXQoKTtzZSgpO1dlKCk7JHQoKTtlbigpO3VuKCk7em8oKTtubigpO0dlKCk7Y24oKTtrbygpO3p2PW5ldyBzLEd2PW5ldyBzLFZ2PW5ldyBzLEh2PW5ldyBzLEt2PW5ldyBzLHF2PW5ldyBzKDEsMSwxKSxvOD1NYXRoLmNvcyxhOD1NYXRoLnNpbjtZci5wYWNrZWRMZW5ndGg9MipzLnBhY2tlZExlbmd0aCtoZS5wYWNrZWRMZW5ndGgrNztZci5wYWNrPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gbj1uPz8wLHMucGFjayhlLl9yYWRpaSx0LG4pLG4rPXMucGFja2VkTGVuZ3RoLHMucGFjayhlLl9pbm5lclJhZGlpLHQsbiksbis9cy5wYWNrZWRMZW5ndGgsaGUucGFjayhlLl92ZXJ0ZXhGb3JtYXQsdCxuKSxuKz1oZS5wYWNrZWRMZW5ndGgsdFtuKytdPWUuX21pbmltdW1DbG9jayx0W24rK109ZS5fbWF4aW11bUNsb2NrLHRbbisrXT1lLl9taW5pbXVtQ29uZSx0W24rK109ZS5fbWF4aW11bUNvbmUsdFtuKytdPWUuX3N0YWNrUGFydGl0aW9ucyx0W24rK109ZS5fc2xpY2VQYXJ0aXRpb25zLHRbbl09ZS5fb2Zmc2V0QXR0cmlidXRlPz8tMSx0fTtyOD1uZXcgcyxpOD1uZXcgcyxjOD1uZXcgaGUsTWk9e3JhZGlpOnI4LGlubmVyUmFkaWk6aTgsdmVydGV4Rm9ybWF0OmM4LG1pbmltdW1DbG9jazp2b2lkIDAsbWF4aW11bUNsb2NrOnZvaWQgMCxtaW5pbXVtQ29uZTp2b2lkIDAsbWF4aW11bUNvbmU6dm9pZCAwLHN0YWNrUGFydGl0aW9uczp2b2lkIDAsc2xpY2VQYXJ0aXRpb25zOnZvaWQgMCxvZmZzZXRBdHRyaWJ1dGU6dm9pZCAwfTtZci51bnBhY2s9ZnVuY3Rpb24oZSx0LG4pe3Q9dD8/MDtsZXQgbz1zLnVucGFjayhlLHQscjgpO3QrPXMucGFja2VkTGVuZ3RoO2xldCBhPXMudW5wYWNrKGUsdCxpOCk7dCs9cy5wYWNrZWRMZW5ndGg7bGV0IHI9aGUudW5wYWNrKGUsdCxjOCk7dCs9aGUucGFja2VkTGVuZ3RoO2xldCBpPWVbdCsrXSxmPWVbdCsrXSxkPWVbdCsrXSxjPWVbdCsrXSx1PWVbdCsrXSxsPWVbdCsrXSxoPWVbdF07cmV0dXJuIGcobik/KG4uX3JhZGlpPXMuY2xvbmUobyxuLl9yYWRpaSksbi5faW5uZXJSYWRpaT1zLmNsb25lKGEsbi5faW5uZXJSYWRpaSksbi5fdmVydGV4Rm9ybWF0PWhlLmNsb25lKHIsbi5fdmVydGV4Rm9ybWF0KSxuLl9taW5pbXVtQ2xvY2s9aSxuLl9tYXhpbXVtQ2xvY2s9ZixuLl9taW5pbXVtQ29uZT1kLG4uX21heGltdW1Db25lPWMsbi5fc3RhY2tQYXJ0aXRpb25zPXUsbi5fc2xpY2VQYXJ0aXRpb25zPWwsbi5fb2Zmc2V0QXR0cmlidXRlPWg9PT0tMT92b2lkIDA6aCxuKTooTWkubWluaW11bUNsb2NrPWksTWkubWF4aW11bUNsb2NrPWYsTWkubWluaW11bUNvbmU9ZCxNaS5tYXhpbXVtQ29uZT1jLE1pLnN0YWNrUGFydGl0aW9ucz11LE1pLnNsaWNlUGFydGl0aW9ucz1sLE1pLm9mZnNldEF0dHJpYnV0ZT1oPT09LTE/dm9pZCAwOmgsbmV3IFlyKE1pKSl9O1lyLmNyZWF0ZUdlb21ldHJ5PWZ1bmN0aW9uKGUpe2xldCB0PWUuX3JhZGlpO2lmKHQueDw9MHx8dC55PD0wfHx0Lno8PTApcmV0dXJuO2xldCBuPWUuX2lubmVyUmFkaWk7aWYobi54PD0wfHxuLnk8PTB8fG4uejw9MClyZXR1cm47bGV0IG89ZS5fbWluaW11bUNsb2NrLGE9ZS5fbWF4aW11bUNsb2NrLHI9ZS5fbWluaW11bUNvbmUsaT1lLl9tYXhpbXVtQ29uZSxmPWUuX3ZlcnRleEZvcm1hdCxkPWUuX3NsaWNlUGFydGl0aW9ucysxLGM9ZS5fc3RhY2tQYXJ0aXRpb25zKzE7ZD1NYXRoLnJvdW5kKGQqTWF0aC5hYnMoYS1vKS9rLlRXT19QSSksYz1NYXRoLnJvdW5kKGMqTWF0aC5hYnMoaS1yKS9rLlBJKSxkPDImJihkPTIpLGM8MiYmKGM9Mik7bGV0IHUsbCxoPTAsbT1bcl0sYj1bb107Zm9yKHU9MDt1PGM7dSsrKW0ucHVzaChyK3UqKGktcikvKGMtMSkpO2ZvcihtLnB1c2goaSksbD0wO2w8ZDtsKyspYi5wdXNoKG8rbCooYS1vKS8oZC0xKSk7Yi5wdXNoKGEpO2xldCBwPW0ubGVuZ3RoLHk9Yi5sZW5ndGgsVD0wLF89MSxFPW4ueCE9PXQueHx8bi55IT09dC55fHxuLnohPT10Lnosdz0hMSxSPSExLFM9ITE7RSYmKF89MixyPjAmJih3PSEwLFQrPWQtMSksaTxNYXRoLlBJJiYoUj0hMCxUKz1kLTEpLChhLW8pJWsuVFdPX1BJPyhTPSEwLFQrPShjLTEpKjIrMSk6VCs9MSk7bGV0IEM9eSpwKl8sST1uZXcgRmxvYXQ2NEFycmF5KEMqMyksTj1uZXcgQXJyYXkoQykuZmlsbCghMSksUD1uZXcgQXJyYXkoQykuZmlsbCghMSksRj1kKmMqXyxBPTYqKEYrVCsxLShkK2MpKl8pLHg9a2UuY3JlYXRlVHlwZWRBcnJheShGLEEpLE09Zi5ub3JtYWw/bmV3IEZsb2F0MzJBcnJheShDKjMpOnZvaWQgMCx2PWYudGFuZ2VudD9uZXcgRmxvYXQzMkFycmF5KEMqMyk6dm9pZCAwLFU9Zi5iaXRhbmdlbnQ/bmV3IEZsb2F0MzJBcnJheShDKjMpOnZvaWQgMCx6PWYuc3Q/bmV3IEZsb2F0MzJBcnJheShDKjIpOnZvaWQgMCxEPW5ldyBBcnJheShwKSxHPW5ldyBBcnJheShwKTtmb3IodT0wO3U8cDt1KyspRFt1XT1hOChtW3VdKSxHW3VdPW84KG1bdV0pO2xldCBIPW5ldyBBcnJheSh5KSxPPW5ldyBBcnJheSh5KTtmb3IobD0wO2w8eTtsKyspT1tsXT1vOChiW2xdKSxIW2xdPWE4KGJbbF0pO2Zvcih1PTA7dTxwO3UrKylmb3IobD0wO2w8eTtsKyspSVtoKytdPXQueCpEW3VdKk9bbF0sSVtoKytdPXQueSpEW3VdKkhbbF0sSVtoKytdPXQueipHW3VdO2xldCBaPUMvMjtpZihFKWZvcih1PTA7dTxwO3UrKylmb3IobD0wO2w8eTtsKyspSVtoKytdPW4ueCpEW3VdKk9bbF0sSVtoKytdPW4ueSpEW3VdKkhbbF0sSVtoKytdPW4ueipHW3VdLE5bWl09ITAsdT4wJiZ1IT09cC0xJiZsIT09MCYmbCE9PXktMSYmKFBbWl09ITApLForKztoPTA7bGV0IG9lLGNlO2Zvcih1PTE7dTxwLTI7dSsrKWZvcihvZT11KnksY2U9KHUrMSkqeSxsPTE7bDx5LTI7bCsrKXhbaCsrXT1jZStsLHhbaCsrXT1jZStsKzEseFtoKytdPW9lK2wrMSx4W2grK109Y2UrbCx4W2grK109b2UrbCsxLHhbaCsrXT1vZStsO2lmKEUpe2xldCB0dD1wKnk7Zm9yKHU9MTt1PHAtMjt1KyspZm9yKG9lPXR0K3UqeSxjZT10dCsodSsxKSp5LGw9MTtsPHktMjtsKyspeFtoKytdPWNlK2wseFtoKytdPW9lK2wseFtoKytdPW9lK2wrMSx4W2grK109Y2UrbCx4W2grK109b2UrbCsxLHhbaCsrXT1jZStsKzF9bGV0IGZlLGVlO2lmKEUpe2lmKHcpZm9yKGVlPXAqeSx1PTE7dTx5LTI7dSsrKXhbaCsrXT11LHhbaCsrXT11KzEseFtoKytdPWVlK3UrMSx4W2grK109dSx4W2grK109ZWUrdSsxLHhbaCsrXT1lZSt1O2lmKFIpZm9yKGZlPXAqeS15LGVlPXAqeSpfLXksdT0xO3U8eS0yO3UrKyl4W2grK109ZmUrdSsxLHhbaCsrXT1mZSt1LHhbaCsrXT1lZSt1LHhbaCsrXT1mZSt1KzEseFtoKytdPWVlK3UseFtoKytdPWVlK3UrMX1pZihTKXtmb3IodT0xO3U8cC0yO3UrKyllZT15KnAreSp1LGZlPXkqdSx4W2grK109ZWUseFtoKytdPWZlK3kseFtoKytdPWZlLHhbaCsrXT1lZSx4W2grK109ZWUreSx4W2grK109ZmUreTtmb3IodT0xO3U8cC0yO3UrKyllZT15KnAreSoodSsxKS0xLGZlPXkqKHUrMSktMSx4W2grK109ZmUreSx4W2grK109ZWUseFtoKytdPWZlLHhbaCsrXT1mZSt5LHhbaCsrXT1lZSt5LHhbaCsrXT1lZX1sZXQgYmU9bmV3IG50O2YucG9zaXRpb24mJihiZS5wb3NpdGlvbj1uZXcgaWUoe2NvbXBvbmVudERhdGF0eXBlOm5lLkRPVUJMRSxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOkl9KSk7bGV0IGxlPTAscGU9MCx1ZT0wLGFlPTAsQWU9Qy8yLE5lLGV0PXEuZnJvbUNhcnRlc2lhbjModCksS2U9cS5mcm9tQ2FydGVzaWFuMyhuKTtpZihmLnN0fHxmLm5vcm1hbHx8Zi50YW5nZW50fHxmLmJpdGFuZ2VudCl7Zm9yKHU9MDt1PEM7dSsrKXtOZT1OW3VdP0tlOmV0O2xldCB0dD1zLmZyb21BcnJheShJLHUqMyx6diksWGU9TmUuZ2VvZGV0aWNTdXJmYWNlTm9ybWFsKHR0LEd2KTtpZihQW3VdJiZzLm5lZ2F0ZShYZSxYZSksZi5zdCl7bGV0IExlPVkubmVnYXRlKFhlLEt2KTt6W2xlKytdPU1hdGguYXRhbjIoTGUueSxMZS54KS9rLlRXT19QSSsuNSx6W2xlKytdPU1hdGguYXNpbihYZS56KS9NYXRoLlBJKy41fWlmKGYubm9ybWFsJiYoTVtwZSsrXT1YZS54LE1bcGUrK109WGUueSxNW3BlKytdPVhlLnopLGYudGFuZ2VudHx8Zi5iaXRhbmdlbnQpe2xldCBMZT1WdixqZT0wLGl0O2lmKE5bdV0mJihqZT1BZSksIXcmJnU+PWplJiZ1PGplK3kqMj9pdD1zLlVOSVRfWDppdD1zLlVOSVRfWixzLmNyb3NzKGl0LFhlLExlKSxzLm5vcm1hbGl6ZShMZSxMZSksZi50YW5nZW50JiYodlt1ZSsrXT1MZS54LHZbdWUrK109TGUueSx2W3VlKytdPUxlLnopLGYuYml0YW5nZW50KXtsZXQgWWU9cy5jcm9zcyhYZSxMZSxIdik7cy5ub3JtYWxpemUoWWUsWWUpLFVbYWUrK109WWUueCxVW2FlKytdPVllLnksVVthZSsrXT1ZZS56fX19Zi5zdCYmKGJlLnN0PW5ldyBpZSh7Y29tcG9uZW50RGF0YXR5cGU6bmUuRkxPQVQsY29tcG9uZW50c1BlckF0dHJpYnV0ZToyLHZhbHVlczp6fSkpLGYubm9ybWFsJiYoYmUubm9ybWFsPW5ldyBpZSh7Y29tcG9uZW50RGF0YXR5cGU6bmUuRkxPQVQsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczpNfSkpLGYudGFuZ2VudCYmKGJlLnRhbmdlbnQ9bmV3IGllKHtjb21wb25lbnREYXRhdHlwZTpuZS5GTE9BVCxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOnZ9KSksZi5iaXRhbmdlbnQmJihiZS5iaXRhbmdlbnQ9bmV3IGllKHtjb21wb25lbnREYXRhdHlwZTpuZS5GTE9BVCxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOlV9KSl9aWYoZyhlLl9vZmZzZXRBdHRyaWJ1dGUpKXtsZXQgdHQ9SS5sZW5ndGgsWGU9ZS5fb2Zmc2V0QXR0cmlidXRlPT09c3QuTk9ORT8wOjEsTGU9bmV3IFVpbnQ4QXJyYXkodHQvMykuZmlsbChYZSk7YmUuYXBwbHlPZmZzZXQ9bmV3IGllKHtjb21wb25lbnREYXRhdHlwZTpuZS5VTlNJR05FRF9CWVRFLGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6MSx2YWx1ZXM6TGV9KX1yZXR1cm4gbmV3IHZlKHthdHRyaWJ1dGVzOmJlLGluZGljZXM6eCxwcmltaXRpdmVUeXBlOlVlLlRSSUFOR0xFUyxib3VuZGluZ1NwaGVyZTpnZS5mcm9tRWxsaXBzb2lkKGV0KSxvZmZzZXRBdHRyaWJ1dGU6ZS5fb2Zmc2V0QXR0cmlidXRlfSl9O1lyLmdldFVuaXRFbGxpcHNvaWQ9ZnVuY3Rpb24oKXtyZXR1cm4gZyhWMCl8fChWMD1Zci5jcmVhdGVHZW9tZXRyeShuZXcgWXIoe3JhZGlpOm5ldyBzKDEsMSwxKSx2ZXJ0ZXhGb3JtYXQ6aGUuUE9TSVRJT05fT05MWX0pKSksVjB9O2RhPVlyfSk7dmFyIEgwPXt9O3J0KEgwLHtkZWZhdWx0OigpPT5Ydn0pO2Z1bmN0aW9uIFd2KGUsdCl7cmV0dXJuIGcodCkmJihlPWRhLnVucGFjayhlLHQpKSxkYS5jcmVhdGVHZW9tZXRyeShlKX12YXIgWHYsSzA9WCgoKT0+e3NlKCk7U2goKTtYdj1Xdn0pO2Z1bmN0aW9uIFNzKGUpe2U9ZT8/Q2UuRU1QVFlfT0JKRUNUO2xldCB0PWUucmFkaWk/P1l2LG49ZS5pbm5lclJhZGlpPz90LG89ZS5taW5pbXVtQ2xvY2s/PzAsYT1lLm1heGltdW1DbG9jaz8/ay5UV09fUEkscj1lLm1pbmltdW1Db25lPz8wLGk9ZS5tYXhpbXVtQ29uZT8/ay5QSSxmPU1hdGgucm91bmQoZS5zdGFja1BhcnRpdGlvbnM/PzEwKSxkPU1hdGgucm91bmQoZS5zbGljZVBhcnRpdGlvbnM/PzgpLGM9TWF0aC5yb3VuZChlLnN1YmRpdmlzaW9ucz8/MTI4KTt0aGlzLl9yYWRpaT1zLmNsb25lKHQpLHRoaXMuX2lubmVyUmFkaWk9cy5jbG9uZShuKSx0aGlzLl9taW5pbXVtQ2xvY2s9byx0aGlzLl9tYXhpbXVtQ2xvY2s9YSx0aGlzLl9taW5pbXVtQ29uZT1yLHRoaXMuX21heGltdW1Db25lPWksdGhpcy5fc3RhY2tQYXJ0aXRpb25zPWYsdGhpcy5fc2xpY2VQYXJ0aXRpb25zPWQsdGhpcy5fc3ViZGl2aXNpb25zPWMsdGhpcy5fb2Zmc2V0QXR0cmlidXRlPWUub2Zmc2V0QXR0cmlidXRlLHRoaXMuX3dvcmtlck5hbWU9ImNyZWF0ZUVsbGlwc29pZE91dGxpbmVHZW9tZXRyeSJ9dmFyIFl2LENoLE1oLHM4LGY4LEpyLFFhLHEwPVgoKCk9PntNdCgpO0llKCk7dnQoKTttdCgpO3NlKCk7V2UoKTskdCgpO2VuKCk7dW4oKTt6bygpO25uKCk7R2UoKTtjbigpO1l2PW5ldyBzKDEsMSwxKSxDaD1NYXRoLmNvcyxNaD1NYXRoLnNpbjtTcy5wYWNrZWRMZW5ndGg9MipzLnBhY2tlZExlbmd0aCs4O1NzLnBhY2s9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBuPW4/PzAscy5wYWNrKGUuX3JhZGlpLHQsbiksbis9cy5wYWNrZWRMZW5ndGgscy5wYWNrKGUuX2lubmVyUmFkaWksdCxuKSxuKz1zLnBhY2tlZExlbmd0aCx0W24rK109ZS5fbWluaW11bUNsb2NrLHRbbisrXT1lLl9tYXhpbXVtQ2xvY2ssdFtuKytdPWUuX21pbmltdW1Db25lLHRbbisrXT1lLl9tYXhpbXVtQ29uZSx0W24rK109ZS5fc3RhY2tQYXJ0aXRpb25zLHRbbisrXT1lLl9zbGljZVBhcnRpdGlvbnMsdFtuKytdPWUuX3N1YmRpdmlzaW9ucyx0W25dPWUuX29mZnNldEF0dHJpYnV0ZT8/LTEsdH07czg9bmV3IHMsZjg9bmV3IHMsSnI9e3JhZGlpOnM4LGlubmVyUmFkaWk6ZjgsbWluaW11bUNsb2NrOnZvaWQgMCxtYXhpbXVtQ2xvY2s6dm9pZCAwLG1pbmltdW1Db25lOnZvaWQgMCxtYXhpbXVtQ29uZTp2b2lkIDAsc3RhY2tQYXJ0aXRpb25zOnZvaWQgMCxzbGljZVBhcnRpdGlvbnM6dm9pZCAwLHN1YmRpdmlzaW9uczp2b2lkIDAsb2Zmc2V0QXR0cmlidXRlOnZvaWQgMH07U3MudW5wYWNrPWZ1bmN0aW9uKGUsdCxuKXt0PXQ/PzA7bGV0IG89cy51bnBhY2soZSx0LHM4KTt0Kz1zLnBhY2tlZExlbmd0aDtsZXQgYT1zLnVucGFjayhlLHQsZjgpO3QrPXMucGFja2VkTGVuZ3RoO2xldCByPWVbdCsrXSxpPWVbdCsrXSxmPWVbdCsrXSxkPWVbdCsrXSxjPWVbdCsrXSx1PWVbdCsrXSxsPWVbdCsrXSxoPWVbdF07cmV0dXJuIGcobik/KG4uX3JhZGlpPXMuY2xvbmUobyxuLl9yYWRpaSksbi5faW5uZXJSYWRpaT1zLmNsb25lKGEsbi5faW5uZXJSYWRpaSksbi5fbWluaW11bUNsb2NrPXIsbi5fbWF4aW11bUNsb2NrPWksbi5fbWluaW11bUNvbmU9ZixuLl9tYXhpbXVtQ29uZT1kLG4uX3N0YWNrUGFydGl0aW9ucz1jLG4uX3NsaWNlUGFydGl0aW9ucz11LG4uX3N1YmRpdmlzaW9ucz1sLG4uX29mZnNldEF0dHJpYnV0ZT1oPT09LTE/dm9pZCAwOmgsbik6KEpyLm1pbmltdW1DbG9jaz1yLEpyLm1heGltdW1DbG9jaz1pLEpyLm1pbmltdW1Db25lPWYsSnIubWF4aW11bUNvbmU9ZCxKci5zdGFja1BhcnRpdGlvbnM9YyxKci5zbGljZVBhcnRpdGlvbnM9dSxKci5zdWJkaXZpc2lvbnM9bCxKci5vZmZzZXRBdHRyaWJ1dGU9aD09PS0xP3ZvaWQgMDpoLG5ldyBTcyhKcikpfTtTcy5jcmVhdGVHZW9tZXRyeT1mdW5jdGlvbihlKXtsZXQgdD1lLl9yYWRpaTtpZih0Lng8PTB8fHQueTw9MHx8dC56PD0wKXJldHVybjtsZXQgbj1lLl9pbm5lclJhZGlpO2lmKG4ueDw9MHx8bi55PD0wfHxuLno8PTApcmV0dXJuO2xldCBvPWUuX21pbmltdW1DbG9jayxhPWUuX21heGltdW1DbG9jayxyPWUuX21pbmltdW1Db25lLGk9ZS5fbWF4aW11bUNvbmUsZj1lLl9zdWJkaXZpc2lvbnMsZD1xLmZyb21DYXJ0ZXNpYW4zKHQpLGM9ZS5fc2xpY2VQYXJ0aXRpb25zKzEsdT1lLl9zdGFja1BhcnRpdGlvbnMrMTtjPU1hdGgucm91bmQoYypNYXRoLmFicyhhLW8pL2suVFdPX1BJKSx1PU1hdGgucm91bmQodSpNYXRoLmFicyhpLXIpL2suUEkpLGM8MiYmKGM9MiksdTwyJiYodT0yKTtsZXQgbD0wLGg9MSxtPW4ueCE9PXQueHx8bi55IT09dC55fHxuLnohPT10LnosYj0hMSxwPSExO20mJihoPTIscj4wJiYoYj0hMCxsKz1jKSxpPE1hdGguUEkmJihwPSEwLGwrPWMpKTtsZXQgeT1mKmgqKHUrYyksVD1uZXcgRmxvYXQ2NEFycmF5KHkqMyksXz0yKih5K2wtKGMrdSkqaCksRT1rZS5jcmVhdGVUeXBlZEFycmF5KHksXyksdyxSLFMsQyxJPTAsTj1uZXcgQXJyYXkodSksUD1uZXcgQXJyYXkodSk7Zm9yKHc9MDt3PHU7dysrKUM9cit3KihpLXIpLyh1LTEpLE5bd109TWgoQyksUFt3XT1DaChDKTtsZXQgRj1uZXcgQXJyYXkoZiksQT1uZXcgQXJyYXkoZik7Zm9yKHc9MDt3PGY7dysrKVM9byt3KihhLW8pLyhmLTEpLEZbd109TWgoUyksQVt3XT1DaChTKTtmb3Iodz0wO3c8dTt3KyspZm9yKFI9MDtSPGY7UisrKVRbSSsrXT10LngqTlt3XSpBW1JdLFRbSSsrXT10LnkqTlt3XSpGW1JdLFRbSSsrXT10LnoqUFt3XTtpZihtKWZvcih3PTA7dzx1O3crKylmb3IoUj0wO1I8ZjtSKyspVFtJKytdPW4ueCpOW3ddKkFbUl0sVFtJKytdPW4ueSpOW3ddKkZbUl0sVFtJKytdPW4ueipQW3ddO2ZvcihOLmxlbmd0aD1mLFAubGVuZ3RoPWYsdz0wO3c8Zjt3KyspQz1yK3cqKGktcikvKGYtMSksTlt3XT1NaChDKSxQW3ddPUNoKEMpO2ZvcihGLmxlbmd0aD1jLEEubGVuZ3RoPWMsdz0wO3c8Yzt3KyspUz1vK3cqKGEtbykvKGMtMSksRlt3XT1NaChTKSxBW3ddPUNoKFMpO2Zvcih3PTA7dzxmO3crKylmb3IoUj0wO1I8YztSKyspVFtJKytdPXQueCpOW3ddKkFbUl0sVFtJKytdPXQueSpOW3ddKkZbUl0sVFtJKytdPXQueipQW3ddO2lmKG0pZm9yKHc9MDt3PGY7dysrKWZvcihSPTA7UjxjO1IrKylUW0krK109bi54Kk5bd10qQVtSXSxUW0krK109bi55Kk5bd10qRltSXSxUW0krK109bi56KlBbd107Zm9yKEk9MCx3PTA7dzx1Kmg7dysrKXtsZXQgdj13KmY7Zm9yKFI9MDtSPGYtMTtSKyspRVtJKytdPXYrUixFW0krK109ditSKzF9bGV0IHg9dSpmKmg7Zm9yKHc9MDt3PGM7dysrKWZvcihSPTA7UjxmLTE7UisrKUVbSSsrXT14K3crUipjLEVbSSsrXT14K3crKFIrMSkqYztpZihtKWZvcih4PXUqZipoK2MqZix3PTA7dzxjO3crKylmb3IoUj0wO1I8Zi0xO1IrKylFW0krK109eCt3K1IqYyxFW0krK109eCt3KyhSKzEpKmM7aWYobSl7bGV0IHY9dSpmKmgsVT12K2YqYztpZihiKWZvcih3PTA7dzxjO3crKylFW0krK109dit3LEVbSSsrXT1VK3c7aWYocClmb3Iodis9ZipjLWMsVSs9ZipjLWMsdz0wO3c8Yzt3KyspRVtJKytdPXYrdyxFW0krK109VSt3fWxldCBNPW5ldyBudCh7cG9zaXRpb246bmV3IGllKHtjb21wb25lbnREYXRhdHlwZTpuZS5ET1VCTEUsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczpUfSl9KTtpZihnKGUuX29mZnNldEF0dHJpYnV0ZSkpe2xldCB2PVQubGVuZ3RoLFU9ZS5fb2Zmc2V0QXR0cmlidXRlPT09c3QuTk9ORT8wOjEsej1uZXcgVWludDhBcnJheSh2LzMpLmZpbGwoVSk7TS5hcHBseU9mZnNldD1uZXcgaWUoe2NvbXBvbmVudERhdGF0eXBlOm5lLlVOU0lHTkVEX0JZVEUsY29tcG9uZW50c1BlckF0dHJpYnV0ZToxLHZhbHVlczp6fSl9cmV0dXJuIG5ldyB2ZSh7YXR0cmlidXRlczpNLGluZGljZXM6RSxwcmltaXRpdmVUeXBlOlVlLkxJTkVTLGJvdW5kaW5nU3BoZXJlOmdlLmZyb21FbGxpcHNvaWQoZCksb2Zmc2V0QXR0cmlidXRlOmUuX29mZnNldEF0dHJpYnV0ZX0pfTtRYT1Tc30pO3ZhciBXMD17fTtydChXMCx7ZGVmYXVsdDooKT0+WnZ9KTtmdW5jdGlvbiBKdihlLHQpe3JldHVybiBnKGUuYnVmZmVyLHQpJiYoZT1RYS51bnBhY2soZSx0KSksUWEuY3JlYXRlR2VvbWV0cnkoZSl9dmFyIFp2LFgwPVgoKCk9PntzZSgpO3EwKCk7WnY9SnZ9KTtmdW5jdGlvbiBDYShlKXt0aGlzLnBsYW5lcz1lPz9bXX12YXIgUWYsTmksUXYsZDgsTmgsWTA9WCgoKT0+e0llKCk7Z2EoKTtzZSgpO1ppKCk7Z2koKTtRZj1bbmV3IHMsbmV3IHMsbmV3IHNdO3MuY2xvbmUocy5VTklUX1gsUWZbMF0pO3MuY2xvbmUocy5VTklUX1ksUWZbMV0pO3MuY2xvbmUocy5VTklUX1osUWZbMl0pO05pPW5ldyBzLFF2PW5ldyBzLGQ4PW5ldyBzbihuZXcgcygxLDAsMCksMCk7Q2EuZnJvbUJvdW5kaW5nU3BoZXJlPWZ1bmN0aW9uKGUsdCl7Zyh0KXx8KHQ9bmV3IENhKTtsZXQgbj1RZi5sZW5ndGgsbz10LnBsYW5lcztvLmxlbmd0aD0yKm47bGV0IGE9ZS5jZW50ZXIscj1lLnJhZGl1cyxpPTA7Zm9yKGxldCBmPTA7ZjxuOysrZil7bGV0IGQ9UWZbZl0sYz1vW2ldLHU9b1tpKzFdO2coYyl8fChjPW9baV09bmV3IGR0KSxnKHUpfHwodT1vW2krMV09bmV3IGR0KSxzLm11bHRpcGx5QnlTY2FsYXIoZCwtcixOaSkscy5hZGQoYSxOaSxOaSksYy54PWQueCxjLnk9ZC55LGMuej1kLnosYy53PS1zLmRvdChkLE5pKSxzLm11bHRpcGx5QnlTY2FsYXIoZCxyLE5pKSxzLmFkZChhLE5pLE5pKSx1Lng9LWQueCx1Lnk9LWQueSx1Lno9LWQueix1Lnc9LXMuZG90KHMubmVnYXRlKGQsUXYpLE5pKSxpKz0yfXJldHVybiB0fTtDYS5wcm90b3R5cGUuY29tcHV0ZVZpc2liaWxpdHk9ZnVuY3Rpb24oZSl7bGV0IHQ9dGhpcy5wbGFuZXMsbj0hMTtmb3IobGV0IG89MCxhPXQubGVuZ3RoO288YTsrK28pe2xldCByPWUuaW50ZXJzZWN0UGxhbmUoc24uZnJvbUNhcnRlc2lhbjQodFtvXSxkOCkpO2lmKHI9PT1Tbi5PVVRTSURFKXJldHVybiBTbi5PVVRTSURFO3I9PT1Tbi5JTlRFUlNFQ1RJTkcmJihuPSEwKX1yZXR1cm4gbj9Tbi5JTlRFUlNFQ1RJTkc6U24uSU5TSURFfTtDYS5wcm90b3R5cGUuY29tcHV0ZVZpc2liaWxpdHlXaXRoUGxhbmVNYXNrPWZ1bmN0aW9uKGUsdCl7aWYodD09PUNhLk1BU0tfT1VUU0lERXx8dD09PUNhLk1BU0tfSU5TSURFKXJldHVybiB0O2xldCBuPUNhLk1BU0tfSU5TSURFLG89dGhpcy5wbGFuZXM7Zm9yKGxldCBhPTAscj1vLmxlbmd0aDthPHI7KythKXtsZXQgaT1hPDMxPzE8PGE6MDtpZihhPDMxJiYodCZpKT09PTApY29udGludWU7bGV0IGY9ZS5pbnRlcnNlY3RQbGFuZShzbi5mcm9tQ2FydGVzaWFuNChvW2FdLGQ4KSk7aWYoZj09PVNuLk9VVFNJREUpcmV0dXJuIENhLk1BU0tfT1VUU0lERTtmPT09U24uSU5URVJTRUNUSU5HJiYobnw9aSl9cmV0dXJuIG59O0NhLk1BU0tfT1VUU0lERT00Mjk0OTY3Mjk1O0NhLk1BU0tfSU5TSURFPTA7Q2EuTUFTS19JTkRFVEVSTUlOQVRFPTIxNDc0ODM2NDc7Tmg9Q2F9KTtmdW5jdGlvbiBncihlKXtlPWU/P0NlLkVNUFRZX09CSkVDVCx0aGlzLmxlZnQ9ZS5sZWZ0LHRoaXMuX2xlZnQ9dm9pZCAwLHRoaXMucmlnaHQ9ZS5yaWdodCx0aGlzLl9yaWdodD12b2lkIDAsdGhpcy50b3A9ZS50b3AsdGhpcy5fdG9wPXZvaWQgMCx0aGlzLmJvdHRvbT1lLmJvdHRvbSx0aGlzLl9ib3R0b209dm9pZCAwLHRoaXMubmVhcj1lLm5lYXI/PzEsdGhpcy5fbmVhcj10aGlzLm5lYXIsdGhpcy5mYXI9ZS5mYXI/PzVlOCx0aGlzLl9mYXI9dGhpcy5mYXIsdGhpcy5fY3VsbGluZ1ZvbHVtZT1uZXcgTmgsdGhpcy5fb3J0aG9ncmFwaGljTWF0cml4PW5ldyAkfWZ1bmN0aW9uIHU4KGUpeyhlLnRvcCE9PWUuX3RvcHx8ZS5ib3R0b20hPT1lLl9ib3R0b218fGUubGVmdCE9PWUuX2xlZnR8fGUucmlnaHQhPT1lLl9yaWdodHx8ZS5uZWFyIT09ZS5fbmVhcnx8ZS5mYXIhPT1lLl9mYXIpJiYoZS5fbGVmdD1lLmxlZnQsZS5fcmlnaHQ9ZS5yaWdodCxlLl90b3A9ZS50b3AsZS5fYm90dG9tPWUuYm90dG9tLGUuX25lYXI9ZS5uZWFyLGUuX2Zhcj1lLmZhcixlLl9vcnRob2dyYXBoaWNNYXRyaXg9JC5jb21wdXRlT3J0aG9ncmFwaGljT2ZmQ2VudGVyKGUubGVmdCxlLnJpZ2h0LGUuYm90dG9tLGUudG9wLGUubmVhcixlLmZhcixlLl9vcnRob2dyYXBoaWNNYXRyaXgpKX12YXIgJHYsZTksdDksSjAsbDgsaDg9WCgoKT0+e0llKCk7Z2EoKTtZMCgpO210KCk7c2UoKTtHZSgpO3BuKCk7T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZ3IucHJvdG90eXBlLHtwcm9qZWN0aW9uTWF0cml4OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdTgodGhpcyksdGhpcy5fb3J0aG9ncmFwaGljTWF0cml4fX19KTskdj1uZXcgcyxlOT1uZXcgcyx0OT1uZXcgcyxKMD1uZXcgcztnci5wcm90b3R5cGUuY29tcHV0ZUN1bGxpbmdWb2x1bWU9ZnVuY3Rpb24oZSx0LG4pe2xldCBvPXRoaXMuX2N1bGxpbmdWb2x1bWUucGxhbmVzLGE9dGhpcy50b3Ascj10aGlzLmJvdHRvbSxpPXRoaXMucmlnaHQsZj10aGlzLmxlZnQsZD10aGlzLm5lYXIsYz10aGlzLmZhcix1PXMuY3Jvc3ModCxuLCR2KTtzLm5vcm1hbGl6ZSh1LHUpO2xldCBsPWU5O3MubXVsdGlwbHlCeVNjYWxhcih0LGQsbCkscy5hZGQoZSxsLGwpO2xldCBoPXQ5O3MubXVsdGlwbHlCeVNjYWxhcih1LGYsaCkscy5hZGQobCxoLGgpO2xldCBtPW9bMF07cmV0dXJuIGcobSl8fChtPW9bMF09bmV3IGR0KSxtLng9dS54LG0ueT11LnksbS56PXUueixtLnc9LXMuZG90KHUsaCkscy5tdWx0aXBseUJ5U2NhbGFyKHUsaSxoKSxzLmFkZChsLGgsaCksbT1vWzFdLGcobSl8fChtPW9bMV09bmV3IGR0KSxtLng9LXUueCxtLnk9LXUueSxtLno9LXUueixtLnc9LXMuZG90KHMubmVnYXRlKHUsSjApLGgpLHMubXVsdGlwbHlCeVNjYWxhcihuLHIsaCkscy5hZGQobCxoLGgpLG09b1syXSxnKG0pfHwobT1vWzJdPW5ldyBkdCksbS54PW4ueCxtLnk9bi55LG0uej1uLnosbS53PS1zLmRvdChuLGgpLHMubXVsdGlwbHlCeVNjYWxhcihuLGEsaCkscy5hZGQobCxoLGgpLG09b1szXSxnKG0pfHwobT1vWzNdPW5ldyBkdCksbS54PS1uLngsbS55PS1uLnksbS56PS1uLnosbS53PS1zLmRvdChzLm5lZ2F0ZShuLEowKSxoKSxtPW9bNF0sZyhtKXx8KG09b1s0XT1uZXcgZHQpLG0ueD10LngsbS55PXQueSxtLno9dC56LG0udz0tcy5kb3QodCxsKSxzLm11bHRpcGx5QnlTY2FsYXIodCxjLGgpLHMuYWRkKGUsaCxoKSxtPW9bNV0sZyhtKXx8KG09b1s1XT1uZXcgZHQpLG0ueD0tdC54LG0ueT0tdC55LG0uej0tdC56LG0udz0tcy5kb3Qocy5uZWdhdGUodCxKMCksaCksdGhpcy5fY3VsbGluZ1ZvbHVtZX07Z3IucHJvdG90eXBlLmdldFBpeGVsRGltZW5zaW9ucz1mdW5jdGlvbihlLHQsbixvLGEpe3U4KHRoaXMpO2xldCByPXRoaXMucmlnaHQtdGhpcy5sZWZ0LGk9dGhpcy50b3AtdGhpcy5ib3R0b20sZj1vKnIvZSxkPW8qaS90O3JldHVybiBhLng9ZixhLnk9ZCxhfTtnci5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oZSl7cmV0dXJuIGcoZSl8fChlPW5ldyBnciksZS5sZWZ0PXRoaXMubGVmdCxlLnJpZ2h0PXRoaXMucmlnaHQsZS50b3A9dGhpcy50b3AsZS5ib3R0b209dGhpcy5ib3R0b20sZS5uZWFyPXRoaXMubmVhcixlLmZhcj10aGlzLmZhcixlLl9sZWZ0PXZvaWQgMCxlLl9yaWdodD12b2lkIDAsZS5fdG9wPXZvaWQgMCxlLl9ib3R0b209dm9pZCAwLGUuX25lYXI9dm9pZCAwLGUuX2Zhcj12b2lkIDAsZX07Z3IucHJvdG90eXBlLmVxdWFscz1mdW5jdGlvbihlKXtyZXR1cm4gZyhlKSYmZSBpbnN0YW5jZW9mIGdyJiZ0aGlzLnJpZ2h0PT09ZS5yaWdodCYmdGhpcy5sZWZ0PT09ZS5sZWZ0JiZ0aGlzLnRvcD09PWUudG9wJiZ0aGlzLmJvdHRvbT09PWUuYm90dG9tJiZ0aGlzLm5lYXI9PT1lLm5lYXImJnRoaXMuZmFyPT09ZS5mYXJ9O2dyLnByb3RvdHlwZS5lcXVhbHNFcHNpbG9uPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZT09PXRoaXN8fGcoZSkmJmUgaW5zdGFuY2VvZiBnciYmay5lcXVhbHNFcHNpbG9uKHRoaXMucmlnaHQsZS5yaWdodCx0LG4pJiZrLmVxdWFsc0Vwc2lsb24odGhpcy5sZWZ0LGUubGVmdCx0LG4pJiZrLmVxdWFsc0Vwc2lsb24odGhpcy50b3AsZS50b3AsdCxuKSYmay5lcXVhbHNFcHNpbG9uKHRoaXMuYm90dG9tLGUuYm90dG9tLHQsbikmJmsuZXF1YWxzRXBzaWxvbih0aGlzLm5lYXIsZS5uZWFyLHQsbikmJmsuZXF1YWxzRXBzaWxvbih0aGlzLmZhcixlLmZhcix0LG4pfTtsOD1ncn0pO2Z1bmN0aW9uIG9hKGUpe2U9ZT8/Q2UuRU1QVFlfT0JKRUNULHRoaXMuX29mZkNlbnRlckZydXN0dW09bmV3IGw4LHRoaXMud2lkdGg9ZS53aWR0aCx0aGlzLl93aWR0aD12b2lkIDAsdGhpcy5hc3BlY3RSYXRpbz1lLmFzcGVjdFJhdGlvLHRoaXMuX2FzcGVjdFJhdGlvPXZvaWQgMCx0aGlzLm5lYXI9ZS5uZWFyPz8xLHRoaXMuX25lYXI9dGhpcy5uZWFyLHRoaXMuZmFyPWUuZmFyPz81ZTgsdGhpcy5fZmFyPXRoaXMuZmFyfWZ1bmN0aW9uIElpKGUpe2xldCB0PWUuX29mZkNlbnRlckZydXN0dW07aWYoZS53aWR0aCE9PWUuX3dpZHRofHxlLmFzcGVjdFJhdGlvIT09ZS5fYXNwZWN0UmF0aW98fGUubmVhciE9PWUuX25lYXJ8fGUuZmFyIT09ZS5fZmFyKXtlLl9hc3BlY3RSYXRpbz1lLmFzcGVjdFJhdGlvLGUuX3dpZHRoPWUud2lkdGgsZS5fbmVhcj1lLm5lYXIsZS5fZmFyPWUuZmFyO2xldCBuPTEvZS5hc3BlY3RSYXRpbzt0LnJpZ2h0PWUud2lkdGgqLjUsdC5sZWZ0PS10LnJpZ2h0LHQudG9wPW4qdC5yaWdodCx0LmJvdHRvbT0tdC50b3AsdC5uZWFyPWUubmVhcix0LmZhcj1lLmZhcn19dmFyIEZvLFowPVgoKCk9PnttdCgpO3NlKCk7R2UoKTtoOCgpO29hLnBhY2tlZExlbmd0aD00O29hLnBhY2s9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBuPW4/PzAsdFtuKytdPWUud2lkdGgsdFtuKytdPWUuYXNwZWN0UmF0aW8sdFtuKytdPWUubmVhcix0W25dPWUuZmFyLHR9O29hLnVucGFjaz1mdW5jdGlvbihlLHQsbil7cmV0dXJuIHQ9dD8/MCxnKG4pfHwobj1uZXcgb2EpLG4ud2lkdGg9ZVt0KytdLG4uYXNwZWN0UmF0aW89ZVt0KytdLG4ubmVhcj1lW3QrK10sbi5mYXI9ZVt0XSxufTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhvYS5wcm90b3R5cGUse3Byb2plY3Rpb25NYXRyaXg6e2dldDpmdW5jdGlvbigpe3JldHVybiBJaSh0aGlzKSx0aGlzLl9vZmZDZW50ZXJGcnVzdHVtLnByb2plY3Rpb25NYXRyaXh9fSxvZmZDZW50ZXJGcnVzdHVtOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gSWkodGhpcyksdGhpcy5fb2ZmQ2VudGVyRnJ1c3R1bX19fSk7b2EucHJvdG90eXBlLmNvbXB1dGVDdWxsaW5nVm9sdW1lPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gSWkodGhpcyksdGhpcy5fb2ZmQ2VudGVyRnJ1c3R1bS5jb21wdXRlQ3VsbGluZ1ZvbHVtZShlLHQsbil9O29hLnByb3RvdHlwZS5nZXRQaXhlbERpbWVuc2lvbnM9ZnVuY3Rpb24oZSx0LG4sbyxhKXtyZXR1cm4gSWkodGhpcyksdGhpcy5fb2ZmQ2VudGVyRnJ1c3R1bS5nZXRQaXhlbERpbWVuc2lvbnMoZSx0LG4sbyxhKX07b2EucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKGUpe3JldHVybiBnKGUpfHwoZT1uZXcgb2EpLGUuYXNwZWN0UmF0aW89dGhpcy5hc3BlY3RSYXRpbyxlLndpZHRoPXRoaXMud2lkdGgsZS5uZWFyPXRoaXMubmVhcixlLmZhcj10aGlzLmZhcixlLl9hc3BlY3RSYXRpbz12b2lkIDAsZS5fd2lkdGg9dm9pZCAwLGUuX25lYXI9dm9pZCAwLGUuX2Zhcj12b2lkIDAsdGhpcy5fb2ZmQ2VudGVyRnJ1c3R1bS5jbG9uZShlLl9vZmZDZW50ZXJGcnVzdHVtKSxlfTtvYS5wcm90b3R5cGUuZXF1YWxzPWZ1bmN0aW9uKGUpe3JldHVybiFnKGUpfHwhKGUgaW5zdGFuY2VvZiBvYSk/ITE6KElpKHRoaXMpLElpKGUpLHRoaXMud2lkdGg9PT1lLndpZHRoJiZ0aGlzLmFzcGVjdFJhdGlvPT09ZS5hc3BlY3RSYXRpbyYmdGhpcy5fb2ZmQ2VudGVyRnJ1c3R1bS5lcXVhbHMoZS5fb2ZmQ2VudGVyRnJ1c3R1bSkpfTtvYS5wcm90b3R5cGUuZXF1YWxzRXBzaWxvbj1mdW5jdGlvbihlLHQsbil7cmV0dXJuIWcoZSl8fCEoZSBpbnN0YW5jZW9mIG9hKT8hMTooSWkodGhpcyksSWkoZSksay5lcXVhbHNFcHNpbG9uKHRoaXMud2lkdGgsZS53aWR0aCx0LG4pJiZrLmVxdWFsc0Vwc2lsb24odGhpcy5hc3BlY3RSYXRpbyxlLmFzcGVjdFJhdGlvLHQsbikmJnRoaXMuX29mZkNlbnRlckZydXN0dW0uZXF1YWxzRXBzaWxvbihlLl9vZmZDZW50ZXJGcnVzdHVtLHQsbikpfTtGbz1vYX0pO2Z1bmN0aW9uIF9yKGUpe2U9ZT8/Q2UuRU1QVFlfT0JKRUNULHRoaXMubGVmdD1lLmxlZnQsdGhpcy5fbGVmdD12b2lkIDAsdGhpcy5yaWdodD1lLnJpZ2h0LHRoaXMuX3JpZ2h0PXZvaWQgMCx0aGlzLnRvcD1lLnRvcCx0aGlzLl90b3A9dm9pZCAwLHRoaXMuYm90dG9tPWUuYm90dG9tLHRoaXMuX2JvdHRvbT12b2lkIDAsdGhpcy5uZWFyPWUubmVhcj8/MSx0aGlzLl9uZWFyPXRoaXMubmVhcix0aGlzLmZhcj1lLmZhcj8/NWU4LHRoaXMuX2Zhcj10aGlzLmZhcix0aGlzLl9jdWxsaW5nVm9sdW1lPW5ldyBOaCx0aGlzLl9wZXJzcGVjdGl2ZU1hdHJpeD1uZXcgJCx0aGlzLl9pbmZpbml0ZVBlcnNwZWN0aXZlPW5ldyAkfWZ1bmN0aW9uIFEwKGUpe2xldHt0b3A6dCxib3R0b206bixyaWdodDpvLGxlZnQ6YSxuZWFyOnIsZmFyOml9PWU7KHQhPT1lLl90b3B8fG4hPT1lLl9ib3R0b218fGEhPT1lLl9sZWZ0fHxvIT09ZS5fcmlnaHR8fHIhPT1lLl9uZWFyfHxpIT09ZS5fZmFyKSYmKGUuX2xlZnQ9YSxlLl9yaWdodD1vLGUuX3RvcD10LGUuX2JvdHRvbT1uLGUuX25lYXI9cixlLl9mYXI9aSxlLl9wZXJzcGVjdGl2ZU1hdHJpeD0kLmNvbXB1dGVQZXJzcGVjdGl2ZU9mZkNlbnRlcihhLG8sbix0LHIsaSxlLl9wZXJzcGVjdGl2ZU1hdHJpeCksZS5faW5maW5pdGVQZXJzcGVjdGl2ZT0kLmNvbXB1dGVJbmZpbml0ZVBlcnNwZWN0aXZlT2ZmQ2VudGVyKGEsbyxuLHQscixlLl9pbmZpbml0ZVBlcnNwZWN0aXZlKSl9dmFyIG45LG85LGE5LHI5LG04LGI4PVgoKCk9PntJZSgpO2dhKCk7WTAoKTttdCgpO3NlKCk7R2UoKTtwbigpO09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKF9yLnByb3RvdHlwZSx7cHJvamVjdGlvbk1hdHJpeDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIFEwKHRoaXMpLHRoaXMuX3BlcnNwZWN0aXZlTWF0cml4fX0saW5maW5pdGVQcm9qZWN0aW9uTWF0cml4OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gUTAodGhpcyksdGhpcy5faW5maW5pdGVQZXJzcGVjdGl2ZX19fSk7bjk9bmV3IHMsbzk9bmV3IHMsYTk9bmV3IHMscjk9bmV3IHM7X3IucHJvdG90eXBlLmNvbXB1dGVDdWxsaW5nVm9sdW1lPWZ1bmN0aW9uKGUsdCxuKXtsZXQgbz10aGlzLl9jdWxsaW5nVm9sdW1lLnBsYW5lcyxhPXRoaXMudG9wLHI9dGhpcy5ib3R0b20saT10aGlzLnJpZ2h0LGY9dGhpcy5sZWZ0LGQ9dGhpcy5uZWFyLGM9dGhpcy5mYXIsdT1zLmNyb3NzKHQsbixuOSksbD1vOTtzLm11bHRpcGx5QnlTY2FsYXIodCxkLGwpLHMuYWRkKGUsbCxsKTtsZXQgaD1hOTtzLm11bHRpcGx5QnlTY2FsYXIodCxjLGgpLHMuYWRkKGUsaCxoKTtsZXQgbT1yOTtzLm11bHRpcGx5QnlTY2FsYXIodSxmLG0pLHMuYWRkKGwsbSxtKSxzLnN1YnRyYWN0KG0sZSxtKSxzLm5vcm1hbGl6ZShtLG0pLHMuY3Jvc3MobSxuLG0pLHMubm9ybWFsaXplKG0sbSk7bGV0IGI9b1swXTtyZXR1cm4gZyhiKXx8KGI9b1swXT1uZXcgZHQpLGIueD1tLngsYi55PW0ueSxiLno9bS56LGIudz0tcy5kb3QobSxlKSxzLm11bHRpcGx5QnlTY2FsYXIodSxpLG0pLHMuYWRkKGwsbSxtKSxzLnN1YnRyYWN0KG0sZSxtKSxzLmNyb3NzKG4sbSxtKSxzLm5vcm1hbGl6ZShtLG0pLGI9b1sxXSxnKGIpfHwoYj1vWzFdPW5ldyBkdCksYi54PW0ueCxiLnk9bS55LGIuej1tLnosYi53PS1zLmRvdChtLGUpLHMubXVsdGlwbHlCeVNjYWxhcihuLHIsbSkscy5hZGQobCxtLG0pLHMuc3VidHJhY3QobSxlLG0pLHMuY3Jvc3ModSxtLG0pLHMubm9ybWFsaXplKG0sbSksYj1vWzJdLGcoYil8fChiPW9bMl09bmV3IGR0KSxiLng9bS54LGIueT1tLnksYi56PW0ueixiLnc9LXMuZG90KG0sZSkscy5tdWx0aXBseUJ5U2NhbGFyKG4sYSxtKSxzLmFkZChsLG0sbSkscy5zdWJ0cmFjdChtLGUsbSkscy5jcm9zcyhtLHUsbSkscy5ub3JtYWxpemUobSxtKSxiPW9bM10sZyhiKXx8KGI9b1szXT1uZXcgZHQpLGIueD1tLngsYi55PW0ueSxiLno9bS56LGIudz0tcy5kb3QobSxlKSxiPW9bNF0sZyhiKXx8KGI9b1s0XT1uZXcgZHQpLGIueD10LngsYi55PXQueSxiLno9dC56LGIudz0tcy5kb3QodCxsKSxzLm5lZ2F0ZSh0LG0pLGI9b1s1XSxnKGIpfHwoYj1vWzVdPW5ldyBkdCksYi54PW0ueCxiLnk9bS55LGIuej1tLnosYi53PS1zLmRvdChtLGgpLHRoaXMuX2N1bGxpbmdWb2x1bWV9O19yLnByb3RvdHlwZS5nZXRQaXhlbERpbWVuc2lvbnM9ZnVuY3Rpb24oZSx0LG4sbyxhKXtRMCh0aGlzKTtsZXQgcj0xL3RoaXMubmVhcixpPXRoaXMudG9wKnIsZj0yKm8qbippL3Q7aT10aGlzLnJpZ2h0KnI7bGV0IGQ9MipvKm4qaS9lO3JldHVybiBhLng9ZCxhLnk9ZixhfTtfci5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oZSl7cmV0dXJuIGcoZSl8fChlPW5ldyBfciksZS5yaWdodD10aGlzLnJpZ2h0LGUubGVmdD10aGlzLmxlZnQsZS50b3A9dGhpcy50b3AsZS5ib3R0b209dGhpcy5ib3R0b20sZS5uZWFyPXRoaXMubmVhcixlLmZhcj10aGlzLmZhcixlLl9sZWZ0PXZvaWQgMCxlLl9yaWdodD12b2lkIDAsZS5fdG9wPXZvaWQgMCxlLl9ib3R0b209dm9pZCAwLGUuX25lYXI9dm9pZCAwLGUuX2Zhcj12b2lkIDAsZX07X3IucHJvdG90eXBlLmVxdWFscz1mdW5jdGlvbihlKXtyZXR1cm4gZyhlKSYmZSBpbnN0YW5jZW9mIF9yJiZ0aGlzLnJpZ2h0PT09ZS5yaWdodCYmdGhpcy5sZWZ0PT09ZS5sZWZ0JiZ0aGlzLnRvcD09PWUudG9wJiZ0aGlzLmJvdHRvbT09PWUuYm90dG9tJiZ0aGlzLm5lYXI9PT1lLm5lYXImJnRoaXMuZmFyPT09ZS5mYXJ9O19yLnByb3RvdHlwZS5lcXVhbHNFcHNpbG9uPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZT09PXRoaXN8fGcoZSkmJmUgaW5zdGFuY2VvZiBfciYmay5lcXVhbHNFcHNpbG9uKHRoaXMucmlnaHQsZS5yaWdodCx0LG4pJiZrLmVxdWFsc0Vwc2lsb24odGhpcy5sZWZ0LGUubGVmdCx0LG4pJiZrLmVxdWFsc0Vwc2lsb24odGhpcy50b3AsZS50b3AsdCxuKSYmay5lcXVhbHNFcHNpbG9uKHRoaXMuYm90dG9tLGUuYm90dG9tLHQsbikmJmsuZXF1YWxzRXBzaWxvbih0aGlzLm5lYXIsZS5uZWFyLHQsbikmJmsuZXF1YWxzRXBzaWxvbih0aGlzLmZhcixlLmZhcix0LG4pfTttOD1fcn0pO2Z1bmN0aW9uIGFhKGUpe2U9ZT8/Q2UuRU1QVFlfT0JKRUNULHRoaXMuX29mZkNlbnRlckZydXN0dW09bmV3IG04LHRoaXMuZm92PWUuZm92LHRoaXMuX2Zvdj12b2lkIDAsdGhpcy5fZm92eT12b2lkIDAsdGhpcy5fc3NlRGVub21pbmF0b3I9dm9pZCAwLHRoaXMuYXNwZWN0UmF0aW89ZS5hc3BlY3RSYXRpbyx0aGlzLl9hc3BlY3RSYXRpbz12b2lkIDAsdGhpcy5uZWFyPWUubmVhcj8/MSx0aGlzLl9uZWFyPXRoaXMubmVhcix0aGlzLmZhcj1lLmZhcj8/NWU4LHRoaXMuX2Zhcj10aGlzLmZhcix0aGlzLnhPZmZzZXQ9ZS54T2Zmc2V0Pz8wLHRoaXMuX3hPZmZzZXQ9dGhpcy54T2Zmc2V0LHRoaXMueU9mZnNldD1lLnlPZmZzZXQ/PzAsdGhpcy5feU9mZnNldD10aGlzLnlPZmZzZXR9ZnVuY3Rpb24gJGEoZSl7aWYoIShlLmZvdiE9PWUuX2Zvdnx8ZS5hc3BlY3RSYXRpbyE9PWUuX2FzcGVjdFJhdGlvfHxlLm5lYXIhPT1lLl9uZWFyfHxlLmZhciE9PWUuX2Zhcnx8ZS54T2Zmc2V0IT09ZS5feE9mZnNldHx8ZS55T2Zmc2V0IT09ZS5feU9mZnNldCkpcmV0dXJuO2UuX2FzcGVjdFJhdGlvPWUuYXNwZWN0UmF0aW8sZS5fZm92PWUuZm92LGUuX2Zvdnk9ZS5hc3BlY3RSYXRpbzw9MT9lLmZvdjpNYXRoLmF0YW4oTWF0aC50YW4oZS5mb3YqLjUpL2UuYXNwZWN0UmF0aW8pKjIsZS5fbmVhcj1lLm5lYXIsZS5fZmFyPWUuZmFyLGUuX3NzZURlbm9taW5hdG9yPTIqTWF0aC50YW4oLjUqZS5fZm92eSksZS5feE9mZnNldD1lLnhPZmZzZXQsZS5feU9mZnNldD1lLnlPZmZzZXQ7bGV0IG49ZS5fb2ZmQ2VudGVyRnJ1c3R1bTtuLnRvcD1lLm5lYXIqTWF0aC50YW4oLjUqZS5fZm92eSksbi5ib3R0b209LW4udG9wLG4ucmlnaHQ9ZS5hc3BlY3RSYXRpbypuLnRvcCxuLmxlZnQ9LW4ucmlnaHQsbi5uZWFyPWUubmVhcixuLmZhcj1lLmZhcixuLnJpZ2h0Kz1lLnhPZmZzZXQsbi5sZWZ0Kz1lLnhPZmZzZXQsbi50b3ArPWUueU9mZnNldCxuLmJvdHRvbSs9ZS55T2Zmc2V0fXZhciBEbywkMD1YKCgpPT57bXQoKTtzZSgpO0dlKCk7YjgoKTthYS5wYWNrZWRMZW5ndGg9NjthYS5wYWNrPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gbj1uPz8wLHRbbisrXT1lLmZvdix0W24rK109ZS5hc3BlY3RSYXRpbyx0W24rK109ZS5uZWFyLHRbbisrXT1lLmZhcix0W24rK109ZS54T2Zmc2V0LHRbbl09ZS55T2Zmc2V0LHR9O2FhLnVucGFjaz1mdW5jdGlvbihlLHQsbil7cmV0dXJuIHQ9dD8/MCxnKG4pfHwobj1uZXcgYWEpLG4uZm92PWVbdCsrXSxuLmFzcGVjdFJhdGlvPWVbdCsrXSxuLm5lYXI9ZVt0KytdLG4uZmFyPWVbdCsrXSxuLnhPZmZzZXQ9ZVt0KytdLG4ueU9mZnNldD1lW3RdLG59O09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGFhLnByb3RvdHlwZSx7cHJvamVjdGlvbk1hdHJpeDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuICRhKHRoaXMpLHRoaXMuX29mZkNlbnRlckZydXN0dW0ucHJvamVjdGlvbk1hdHJpeH19LGluZmluaXRlUHJvamVjdGlvbk1hdHJpeDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuICRhKHRoaXMpLHRoaXMuX29mZkNlbnRlckZydXN0dW0uaW5maW5pdGVQcm9qZWN0aW9uTWF0cml4fX0sZm92eTp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuICRhKHRoaXMpLHRoaXMuX2Zvdnl9fSxzc2VEZW5vbWluYXRvcjp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuICRhKHRoaXMpLHRoaXMuX3NzZURlbm9taW5hdG9yfX0sb2ZmQ2VudGVyRnJ1c3R1bTp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuICRhKHRoaXMpLHRoaXMuX29mZkNlbnRlckZydXN0dW19fX0pO2FhLnByb3RvdHlwZS5jb21wdXRlQ3VsbGluZ1ZvbHVtZT1mdW5jdGlvbihlLHQsbil7cmV0dXJuICRhKHRoaXMpLHRoaXMuX29mZkNlbnRlckZydXN0dW0uY29tcHV0ZUN1bGxpbmdWb2x1bWUoZSx0LG4pfTthYS5wcm90b3R5cGUuZ2V0UGl4ZWxEaW1lbnNpb25zPWZ1bmN0aW9uKGUsdCxuLG8sYSl7cmV0dXJuICRhKHRoaXMpLHRoaXMuX29mZkNlbnRlckZydXN0dW0uZ2V0UGl4ZWxEaW1lbnNpb25zKGUsdCxuLG8sYSl9O2FhLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbihlKXtyZXR1cm4gZyhlKXx8KGU9bmV3IGFhKSxlLmFzcGVjdFJhdGlvPXRoaXMuYXNwZWN0UmF0aW8sZS5mb3Y9dGhpcy5mb3YsZS5uZWFyPXRoaXMubmVhcixlLmZhcj10aGlzLmZhcixlLl9hc3BlY3RSYXRpbz12b2lkIDAsZS5fZm92PXZvaWQgMCxlLl9uZWFyPXZvaWQgMCxlLl9mYXI9dm9pZCAwLHRoaXMuX29mZkNlbnRlckZydXN0dW0uY2xvbmUoZS5fb2ZmQ2VudGVyRnJ1c3R1bSksZX07YWEucHJvdG90eXBlLmVxdWFscz1mdW5jdGlvbihlKXtyZXR1cm4hZyhlKXx8IShlIGluc3RhbmNlb2YgYWEpPyExOigkYSh0aGlzKSwkYShlKSx0aGlzLmZvdj09PWUuZm92JiZ0aGlzLmFzcGVjdFJhdGlvPT09ZS5hc3BlY3RSYXRpbyYmdGhpcy5fb2ZmQ2VudGVyRnJ1c3R1bS5lcXVhbHMoZS5fb2ZmQ2VudGVyRnJ1c3R1bSkpfTthYS5wcm90b3R5cGUuZXF1YWxzRXBzaWxvbj1mdW5jdGlvbihlLHQsbil7cmV0dXJuIWcoZSl8fCEoZSBpbnN0YW5jZW9mIGFhKT8hMTooJGEodGhpcyksJGEoZSksay5lcXVhbHNFcHNpbG9uKHRoaXMuZm92LGUuZm92LHQsbikmJmsuZXF1YWxzRXBzaWxvbih0aGlzLmFzcGVjdFJhdGlvLGUuYXNwZWN0UmF0aW8sdCxuKSYmdGhpcy5fb2ZmQ2VudGVyRnJ1c3R1bS5lcXVhbHNFcHNpbG9uKGUuX29mZkNlbnRlckZydXN0dW0sdCxuKSl9O0RvPWFhfSk7ZnVuY3Rpb24gVGMoZSl7bGV0IHQ9ZS5mcnVzdHVtLG49ZS5vcmllbnRhdGlvbixvPWUub3JpZ2luLGE9ZS52ZXJ0ZXhGb3JtYXQ/P2hlLkRFRkFVTFQscj1lLl9kcmF3TmVhclBsYW5lPz8hMCxpLGY7dCBpbnN0YW5jZW9mIERvPyhpPUloLGY9RG8ucGFja2VkTGVuZ3RoKTp0IGluc3RhbmNlb2YgRm8mJihpPWk5LGY9Rm8ucGFja2VkTGVuZ3RoKSx0aGlzLl9mcnVzdHVtVHlwZT1pLHRoaXMuX2ZydXN0dW09dC5jbG9uZSgpLHRoaXMuX29yaWdpbj1zLmNsb25lKG8pLHRoaXMuX29yaWVudGF0aW9uPVplLmNsb25lKG4pLHRoaXMuX2RyYXdOZWFyUGxhbmU9cix0aGlzLl92ZXJ0ZXhGb3JtYXQ9YSx0aGlzLl93b3JrZXJOYW1lPSJjcmVhdGVGcnVzdHVtR2VvbWV0cnkiLHRoaXMucGFja2VkTGVuZ3RoPTIrZitzLnBhY2tlZExlbmd0aCtaZS5wYWNrZWRMZW5ndGgraGUucGFja2VkTGVuZ3RofWZ1bmN0aW9uIENzKGUsdCxuLG8sYSxyLGksZil7bGV0IGQ9ZS8zKjI7Zm9yKGxldCBjPTA7Yzw0OysrYylnKHQpJiYodFtlXT1yLngsdFtlKzFdPXIueSx0W2UrMl09ci56KSxnKG4pJiYobltlXT1pLngsbltlKzFdPWkueSxuW2UrMl09aS56KSxnKG8pJiYob1tlXT1mLngsb1tlKzFdPWYueSxvW2UrMl09Zi56KSxlKz0zO2FbZF09MCxhW2QrMV09MCxhW2QrMl09MSxhW2QrM109MCxhW2QrNF09MSxhW2QrNV09MSxhW2QrNl09MCxhW2QrN109MX12YXIgSWgsaTksYzksczksZjksZDksdTksbDksaDksZWcscDgsZzgsXzgsbTksYjkscDksUGksJGYseTgsZWQsdGc9WCgoKT0+e010KCk7SWUoKTtnYSgpO3Z0KCk7c2UoKTskdCgpO2VuKCk7dW4oKTtEbigpO3BuKCk7WjAoKTskMCgpO2NuKCk7Sm8oKTtrbygpO0loPTAsaTk9MTtUYy5wYWNrPWZ1bmN0aW9uKGUsdCxuKXtuPW4/PzA7bGV0IG89ZS5fZnJ1c3R1bVR5cGUsYT1lLl9mcnVzdHVtO3JldHVybiB0W24rK109byxvPT09SWg/KERvLnBhY2soYSx0LG4pLG4rPURvLnBhY2tlZExlbmd0aCk6KEZvLnBhY2soYSx0LG4pLG4rPUZvLnBhY2tlZExlbmd0aCkscy5wYWNrKGUuX29yaWdpbix0LG4pLG4rPXMucGFja2VkTGVuZ3RoLFplLnBhY2soZS5fb3JpZW50YXRpb24sdCxuKSxuKz1aZS5wYWNrZWRMZW5ndGgsaGUucGFjayhlLl92ZXJ0ZXhGb3JtYXQsdCxuKSxuKz1oZS5wYWNrZWRMZW5ndGgsdFtuXT1lLl9kcmF3TmVhclBsYW5lPzE6MCx0fTtjOT1uZXcgRG8sczk9bmV3IEZvLGY5PW5ldyBaZSxkOT1uZXcgcyx1OT1uZXcgaGU7VGMudW5wYWNrPWZ1bmN0aW9uKGUsdCxuKXt0PXQ/PzA7bGV0IG89ZVt0KytdLGE7bz09PUloPyhhPURvLnVucGFjayhlLHQsYzkpLHQrPURvLnBhY2tlZExlbmd0aCk6KGE9Rm8udW5wYWNrKGUsdCxzOSksdCs9Rm8ucGFja2VkTGVuZ3RoKTtsZXQgcj1zLnVucGFjayhlLHQsZDkpO3QrPXMucGFja2VkTGVuZ3RoO2xldCBpPVplLnVucGFjayhlLHQsZjkpO3QrPVplLnBhY2tlZExlbmd0aDtsZXQgZj1oZS51bnBhY2soZSx0LHU5KTt0Kz1oZS5wYWNrZWRMZW5ndGg7bGV0IGQ9ZVt0XT09PTE7aWYoIWcobikpcmV0dXJuIG5ldyBUYyh7ZnJ1c3R1bTphLG9yaWdpbjpyLG9yaWVudGF0aW9uOmksdmVydGV4Rm9ybWF0OmYsX2RyYXdOZWFyUGxhbmU6ZH0pO2xldCBjPW89PT1uLl9mcnVzdHVtVHlwZT9uLl9mcnVzdHVtOnZvaWQgMDtyZXR1cm4gbi5fZnJ1c3R1bT1hLmNsb25lKGMpLG4uX2ZydXN0dW1UeXBlPW8sbi5fb3JpZ2luPXMuY2xvbmUocixuLl9vcmlnaW4pLG4uX29yaWVudGF0aW9uPVplLmNsb25lKGksbi5fb3JpZW50YXRpb24pLG4uX3ZlcnRleEZvcm1hdD1oZS5jbG9uZShmLG4uX3ZlcnRleEZvcm1hdCksbi5fZHJhd05lYXJQbGFuZT1kLG59O2w5PW5ldyBKLGg5PW5ldyAkLGVnPW5ldyAkLHA4PW5ldyBzLGc4PW5ldyBzLF84PW5ldyBzLG05PW5ldyBzLGI5PW5ldyBzLHA5PW5ldyBzLFBpPW5ldyBBcnJheSgzKSwkZj1uZXcgQXJyYXkoNCk7JGZbMF09bmV3IGR0KC0xLC0xLDEsMSk7JGZbMV09bmV3IGR0KDEsLTEsMSwxKTskZlsyXT1uZXcgZHQoMSwxLDEsMSk7JGZbM109bmV3IGR0KC0xLDEsMSwxKTt5OD1uZXcgQXJyYXkoNCk7Zm9yKGxldCBlPTA7ZTw0OysrZSl5OFtlXT1uZXcgZHQ7VGMuX2NvbXB1dGVOZWFyRmFyUGxhbmVzPWZ1bmN0aW9uKGUsdCxuLG8sYSxyLGksZil7bGV0IGQ9Si5mcm9tUXVhdGVybmlvbih0LGw5KSxjPXI/P3A4LHU9aT8/ZzgsbD1mPz9fODtjPUouZ2V0Q29sdW1uKGQsMCxjKSx1PUouZ2V0Q29sdW1uKGQsMSx1KSxsPUouZ2V0Q29sdW1uKGQsMixsKSxzLm5vcm1hbGl6ZShjLGMpLHMubm9ybWFsaXplKHUsdSkscy5ub3JtYWxpemUobCxsKSxzLm5lZ2F0ZShjLGMpO2xldCBoPSQuY29tcHV0ZVZpZXcoZSxsLHUsYyxoOSksbSxiLHA9by5wcm9qZWN0aW9uTWF0cml4O2lmKG49PT1JaCl7bGV0IHk9JC5tdWx0aXBseShwLGgsZWcpO2I9JC5pbnZlcnNlKHksZWcpfWVsc2UgbT0kLmludmVyc2VUcmFuc2Zvcm1hdGlvbihoLGVnKTtnKGIpPyhQaVswXT1vLm5lYXIsUGlbMV09by5mYXIpOihQaVswXT0wLFBpWzFdPW8ubmVhcixQaVsyXT1vLmZhcik7Zm9yKGxldCB5PTA7eTwyOysreSlmb3IobGV0IFQ9MDtUPDQ7KytUKXtsZXQgXz1kdC5jbG9uZSgkZltUXSx5OFtUXSk7aWYoZyhiKSl7Xz0kLm11bHRpcGx5QnlWZWN0b3IoYixfLF8pO2xldCBFPTEvXy53O3MubXVsdGlwbHlCeVNjYWxhcihfLEUsXykscy5zdWJ0cmFjdChfLGUsXykscy5ub3JtYWxpemUoXyxfKTtsZXQgdz1zLmRvdChsLF8pO3MubXVsdGlwbHlCeVNjYWxhcihfLFBpW3ldL3csXykscy5hZGQoXyxlLF8pfWVsc2V7bGV0IEU9by5vZmZDZW50ZXJGcnVzdHVtO2coRSkmJihvPUUpO2xldCB3PVBpW3ldLFI9UGlbeSsxXTtfLng9KF8ueCooby5yaWdodC1vLmxlZnQpK28ubGVmdCtvLnJpZ2h0KSouNSxfLnk9KF8ueSooby50b3Atby5ib3R0b20pK28uYm90dG9tK28udG9wKSouNSxfLno9KF8ueioody1SKS13LVIpKi41LF8udz0xLCQubXVsdGlwbHlCeVZlY3RvcihtLF8sXyl9YVsxMip5K1QqM109Xy54LGFbMTIqeStUKjMrMV09Xy55LGFbMTIqeStUKjMrMl09Xy56fX07VGMuY3JlYXRlR2VvbWV0cnk9ZnVuY3Rpb24oZSl7bGV0IHQ9ZS5fZnJ1c3R1bVR5cGUsbj1lLl9mcnVzdHVtLG89ZS5fb3JpZ2luLGE9ZS5fb3JpZW50YXRpb24scj1lLl9kcmF3TmVhclBsYW5lLGk9ZS5fdmVydGV4Rm9ybWF0LGY9cj82OjUsZD1uZXcgRmxvYXQ2NEFycmF5KDcyKTtUYy5fY29tcHV0ZU5lYXJGYXJQbGFuZXMobyxhLHQsbixkKTtsZXQgYz0yNDtkW2NdPWRbMTJdLGRbYysxXT1kWzEzXSxkW2MrMl09ZFsxNF0sZFtjKzNdPWRbMF0sZFtjKzRdPWRbMV0sZFtjKzVdPWRbMl0sZFtjKzZdPWRbOV0sZFtjKzddPWRbMTBdLGRbYys4XT1kWzExXSxkW2MrOV09ZFsyMV0sZFtjKzEwXT1kWzIyXSxkW2MrMTFdPWRbMjNdLGMrPTEyLGRbY109ZFsxNV0sZFtjKzFdPWRbMTZdLGRbYysyXT1kWzE3XSxkW2MrM109ZFszXSxkW2MrNF09ZFs0XSxkW2MrNV09ZFs1XSxkW2MrNl09ZFswXSxkW2MrN109ZFsxXSxkW2MrOF09ZFsyXSxkW2MrOV09ZFsxMl0sZFtjKzEwXT1kWzEzXSxkW2MrMTFdPWRbMTRdLGMrPTEyLGRbY109ZFszXSxkW2MrMV09ZFs0XSxkW2MrMl09ZFs1XSxkW2MrM109ZFsxNV0sZFtjKzRdPWRbMTZdLGRbYys1XT1kWzE3XSxkW2MrNl09ZFsxOF0sZFtjKzddPWRbMTldLGRbYys4XT1kWzIwXSxkW2MrOV09ZFs2XSxkW2MrMTBdPWRbN10sZFtjKzExXT1kWzhdLGMrPTEyLGRbY109ZFs2XSxkW2MrMV09ZFs3XSxkW2MrMl09ZFs4XSxkW2MrM109ZFsxOF0sZFtjKzRdPWRbMTldLGRbYys1XT1kWzIwXSxkW2MrNl09ZFsyMV0sZFtjKzddPWRbMjJdLGRbYys4XT1kWzIzXSxkW2MrOV09ZFs5XSxkW2MrMTBdPWRbMTBdLGRbYysxMV09ZFsxMV0scnx8KGQ9ZC5zdWJhcnJheSgxMikpO2xldCB1PW5ldyBudCh7cG9zaXRpb246bmV3IGllKHtjb21wb25lbnREYXRhdHlwZTpuZS5ET1VCTEUsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczpkfSl9KTtpZihnKGkubm9ybWFsKXx8ZyhpLnRhbmdlbnQpfHxnKGkuYml0YW5nZW50KXx8ZyhpLnN0KSl7bGV0IGg9ZyhpLm5vcm1hbCk/bmV3IEZsb2F0MzJBcnJheSgxMipmKTp2b2lkIDAsbT1nKGkudGFuZ2VudCk/bmV3IEZsb2F0MzJBcnJheSgxMipmKTp2b2lkIDAsYj1nKGkuYml0YW5nZW50KT9uZXcgRmxvYXQzMkFycmF5KDEyKmYpOnZvaWQgMCxwPWcoaS5zdCk/bmV3IEZsb2F0MzJBcnJheSg4KmYpOnZvaWQgMCx5PXA4LFQ9ZzgsXz1fOCxFPXMubmVnYXRlKHksbTkpLHc9cy5uZWdhdGUoVCxiOSksUj1zLm5lZ2F0ZShfLHA5KTtjPTAsciYmKENzKGMsaCxtLGIscCxSLHksVCksYys9MTIpLENzKGMsaCxtLGIscCxfLEUsVCksYys9MTIsQ3MoYyxoLG0sYixwLEUsUixUKSxjKz0xMixDcyhjLGgsbSxiLHAsdyxSLEUpLGMrPTEyLENzKGMsaCxtLGIscCx5LF8sVCksYys9MTIsQ3MoYyxoLG0sYixwLFQsXyxFKSxnKGgpJiYodS5ub3JtYWw9bmV3IGllKHtjb21wb25lbnREYXRhdHlwZTpuZS5GTE9BVCxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOmh9KSksZyhtKSYmKHUudGFuZ2VudD1uZXcgaWUoe2NvbXBvbmVudERhdGF0eXBlOm5lLkZMT0FULGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6bX0pKSxnKGIpJiYodS5iaXRhbmdlbnQ9bmV3IGllKHtjb21wb25lbnREYXRhdHlwZTpuZS5GTE9BVCxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOmJ9KSksZyhwKSYmKHUuc3Q9bmV3IGllKHtjb21wb25lbnREYXRhdHlwZTpuZS5GTE9BVCxjb21wb25lbnRzUGVyQXR0cmlidXRlOjIsdmFsdWVzOnB9KSl9bGV0IGw9bmV3IFVpbnQxNkFycmF5KDYqZik7Zm9yKGxldCBoPTA7aDxmOysraCl7bGV0IG09aCo2LGI9aCo0O2xbbV09YixsW20rMV09YisxLGxbbSsyXT1iKzIsbFttKzNdPWIsbFttKzRdPWIrMixsW20rNV09YiszfXJldHVybiBuZXcgdmUoe2F0dHJpYnV0ZXM6dSxpbmRpY2VzOmwscHJpbWl0aXZlVHlwZTpVZS5UUklBTkdMRVMsYm91bmRpbmdTcGhlcmU6Z2UuZnJvbVZlcnRpY2VzKGQpfSl9O2VkPVRjfSk7dmFyIG5nPXt9O3J0KG5nLHtkZWZhdWx0OigpPT5fOX0pO2Z1bmN0aW9uIGc5KGUsdCl7cmV0dXJuIGcodCkmJihlPWVkLnVucGFjayhlLHQpKSxlZC5jcmVhdGVHZW9tZXRyeShlKX12YXIgXzksb2c9WCgoKT0+e3NlKCk7dGcoKTtfOT1nOX0pO2Z1bmN0aW9uIHRkKGUpe2xldCB0PWUuZnJ1c3R1bSxuPWUub3JpZW50YXRpb24sbz1lLm9yaWdpbixhPWUuX2RyYXdOZWFyUGxhbmU/PyEwLHIsaTt0IGluc3RhbmNlb2YgRG8/KHI9YWcsaT1Eby5wYWNrZWRMZW5ndGgpOnQgaW5zdGFuY2VvZiBGbyYmKHI9eTksaT1Gby5wYWNrZWRMZW5ndGgpLHRoaXMuX2ZydXN0dW1UeXBlPXIsdGhpcy5fZnJ1c3R1bT10LmNsb25lKCksdGhpcy5fb3JpZ2luPXMuY2xvbmUobyksdGhpcy5fb3JpZW50YXRpb249WmUuY2xvbmUobiksdGhpcy5fZHJhd05lYXJQbGFuZT1hLHRoaXMuX3dvcmtlck5hbWU9ImNyZWF0ZUZydXN0dW1PdXRsaW5lR2VvbWV0cnkiLHRoaXMucGFja2VkTGVuZ3RoPTIraStzLnBhY2tlZExlbmd0aCtaZS5wYWNrZWRMZW5ndGh9dmFyIGFnLHk5LEE5LHc5LFQ5LEU5LHJnLEE4PVgoKCk9PntNdCgpO0llKCk7dnQoKTtzZSgpO3RnKCk7JHQoKTtlbigpO3VuKCk7WjAoKTskMCgpO2NuKCk7Sm8oKTthZz0wLHk5PTE7dGQucGFjaz1mdW5jdGlvbihlLHQsbil7bj1uPz8wO2xldCBvPWUuX2ZydXN0dW1UeXBlLGE9ZS5fZnJ1c3R1bTtyZXR1cm4gdFtuKytdPW8sbz09PWFnPyhEby5wYWNrKGEsdCxuKSxuKz1Eby5wYWNrZWRMZW5ndGgpOihGby5wYWNrKGEsdCxuKSxuKz1Gby5wYWNrZWRMZW5ndGgpLHMucGFjayhlLl9vcmlnaW4sdCxuKSxuKz1zLnBhY2tlZExlbmd0aCxaZS5wYWNrKGUuX29yaWVudGF0aW9uLHQsbiksbis9WmUucGFja2VkTGVuZ3RoLHRbbl09ZS5fZHJhd05lYXJQbGFuZT8xOjAsdH07QTk9bmV3IERvLHc5PW5ldyBGbyxUOT1uZXcgWmUsRTk9bmV3IHM7dGQudW5wYWNrPWZ1bmN0aW9uKGUsdCxuKXt0PXQ/PzA7bGV0IG89ZVt0KytdLGE7bz09PWFnPyhhPURvLnVucGFjayhlLHQsQTkpLHQrPURvLnBhY2tlZExlbmd0aCk6KGE9Rm8udW5wYWNrKGUsdCx3OSksdCs9Rm8ucGFja2VkTGVuZ3RoKTtsZXQgcj1zLnVucGFjayhlLHQsRTkpO3QrPXMucGFja2VkTGVuZ3RoO2xldCBpPVplLnVucGFjayhlLHQsVDkpO3QrPVplLnBhY2tlZExlbmd0aDtsZXQgZj1lW3RdPT09MTtpZighZyhuKSlyZXR1cm4gbmV3IHRkKHtmcnVzdHVtOmEsb3JpZ2luOnIsb3JpZW50YXRpb246aSxfZHJhd05lYXJQbGFuZTpmfSk7bGV0IGQ9bz09PW4uX2ZydXN0dW1UeXBlP24uX2ZydXN0dW06dm9pZCAwO3JldHVybiBuLl9mcnVzdHVtPWEuY2xvbmUoZCksbi5fZnJ1c3R1bVR5cGU9byxuLl9vcmlnaW49cy5jbG9uZShyLG4uX29yaWdpbiksbi5fb3JpZW50YXRpb249WmUuY2xvbmUoaSxuLl9vcmllbnRhdGlvbiksbi5fZHJhd05lYXJQbGFuZT1mLG59O3RkLmNyZWF0ZUdlb21ldHJ5PWZ1bmN0aW9uKGUpe2xldCB0PWUuX2ZydXN0dW1UeXBlLG49ZS5fZnJ1c3R1bSxvPWUuX29yaWdpbixhPWUuX29yaWVudGF0aW9uLHI9ZS5fZHJhd05lYXJQbGFuZSxpPW5ldyBGbG9hdDY0QXJyYXkoMjQpO2VkLl9jb21wdXRlTmVhckZhclBsYW5lcyhvLGEsdCxuLGkpO2xldCBmPW5ldyBudCh7cG9zaXRpb246bmV3IGllKHtjb21wb25lbnREYXRhdHlwZTpuZS5ET1VCTEUsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczppfSl9KSxkLGMsdT1yPzI6MSxsPW5ldyBVaW50MTZBcnJheSg4Kih1KzEpKSxoPXI/MDoxO2Zvcig7aDwyOysraClkPXI/aCo4OjAsYz1oKjQsbFtkXT1jLGxbZCsxXT1jKzEsbFtkKzJdPWMrMSxsW2QrM109YysyLGxbZCs0XT1jKzIsbFtkKzVdPWMrMyxsW2QrNl09YyszLGxbZCs3XT1jO2ZvcihoPTA7aDwyOysraClkPSh1K2gpKjgsYz1oKjQsbFtkXT1jLGxbZCsxXT1jKzQsbFtkKzJdPWMrMSxsW2QrM109Yys1LGxbZCs0XT1jKzIsbFtkKzVdPWMrNixsW2QrNl09YyszLGxbZCs3XT1jKzc7cmV0dXJuIG5ldyB2ZSh7YXR0cmlidXRlczpmLGluZGljZXM6bCxwcmltaXRpdmVUeXBlOlVlLkxJTkVTLGJvdW5kaW5nU3BoZXJlOmdlLmZyb21WZXJ0aWNlcyhpKX0pfTtyZz10ZH0pO3ZhciBpZz17fTtydChpZyx7ZGVmYXVsdDooKT0+eDl9KTtmdW5jdGlvbiBSOShlLHQpe3JldHVybiBnKHQpJiYoZT1yZy51bnBhY2soZSx0KSkscmcuY3JlYXRlR2VvbWV0cnkoZSl9dmFyIHg5LGNnPVgoKCk9PntzZSgpO0E4KCk7eDk9Ujl9KTtmdW5jdGlvbiBraShlKXtlPWU/P0NlLkVNUFRZX09CSkVDVCx0aGlzLl9lbGxpcHNvaWQ9ZS5lbGxpcHNvaWQ/P3EuZGVmYXVsdCx0aGlzLl9yZWN0YW5nbGU9ZS5yZWN0YW5nbGU/P1NlLk1BWF9WQUxVRSx0aGlzLl9wcm9qZWN0aW9uPW5ldyBpbyh0aGlzLl9lbGxpcHNvaWQpLHRoaXMuX251bWJlck9mTGV2ZWxaZXJvVGlsZXNYPWUubnVtYmVyT2ZMZXZlbFplcm9UaWxlc1g/PzIsdGhpcy5fbnVtYmVyT2ZMZXZlbFplcm9UaWxlc1k9ZS5udW1iZXJPZkxldmVsWmVyb1RpbGVzWT8/MX12YXIgdzgsVDg9WCgoKT0+e2p0KCk7bXQoKTtzZSgpO1dlKCk7a3IoKTtHZSgpO19uKCk7T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoa2kucHJvdG90eXBlLHtlbGxpcHNvaWQ6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9lbGxpcHNvaWR9fSxyZWN0YW5nbGU6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZWN0YW5nbGV9fSxwcm9qZWN0aW9uOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcHJvamVjdGlvbn19fSk7a2kucHJvdG90eXBlLmdldE51bWJlck9mWFRpbGVzQXRMZXZlbD1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fbnVtYmVyT2ZMZXZlbFplcm9UaWxlc1g8PGV9O2tpLnByb3RvdHlwZS5nZXROdW1iZXJPZllUaWxlc0F0TGV2ZWw9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX251bWJlck9mTGV2ZWxaZXJvVGlsZXNZPDxlfTtraS5wcm90b3R5cGUucmVjdGFuZ2xlVG9OYXRpdmVSZWN0YW5nbGU9ZnVuY3Rpb24oZSx0KXtsZXQgbj1rLnRvRGVncmVlcyhlLndlc3QpLG89ay50b0RlZ3JlZXMoZS5zb3V0aCksYT1rLnRvRGVncmVlcyhlLmVhc3QpLHI9ay50b0RlZ3JlZXMoZS5ub3J0aCk7cmV0dXJuIGcodCk/KHQud2VzdD1uLHQuc291dGg9byx0LmVhc3Q9YSx0Lm5vcnRoPXIsdCk6bmV3IFNlKG4sbyxhLHIpfTtraS5wcm90b3R5cGUudGlsZVhZVG9OYXRpdmVSZWN0YW5nbGU9ZnVuY3Rpb24oZSx0LG4sbyl7bGV0IGE9dGhpcy50aWxlWFlUb1JlY3RhbmdsZShlLHQsbixvKTtyZXR1cm4gYS53ZXN0PWsudG9EZWdyZWVzKGEud2VzdCksYS5zb3V0aD1rLnRvRGVncmVlcyhhLnNvdXRoKSxhLmVhc3Q9ay50b0RlZ3JlZXMoYS5lYXN0KSxhLm5vcnRoPWsudG9EZWdyZWVzKGEubm9ydGgpLGF9O2tpLnByb3RvdHlwZS50aWxlWFlUb1JlY3RhbmdsZT1mdW5jdGlvbihlLHQsbixvKXtsZXQgYT10aGlzLl9yZWN0YW5nbGUscj10aGlzLmdldE51bWJlck9mWFRpbGVzQXRMZXZlbChuKSxpPXRoaXMuZ2V0TnVtYmVyT2ZZVGlsZXNBdExldmVsKG4pLGY9YS53aWR0aC9yLGQ9ZSpmK2Eud2VzdCxjPShlKzEpKmYrYS53ZXN0LHU9YS5oZWlnaHQvaSxsPWEubm9ydGgtdCp1LGg9YS5ub3J0aC0odCsxKSp1O3JldHVybiBnKG8pfHwobz1uZXcgU2UoZCxoLGMsbCkpLG8ud2VzdD1kLG8uc291dGg9aCxvLmVhc3Q9YyxvLm5vcnRoPWwsb307a2kucHJvdG90eXBlLnBvc2l0aW9uVG9UaWxlWFk9ZnVuY3Rpb24oZSx0LG4pe2xldCBvPXRoaXMuX3JlY3RhbmdsZTtpZighU2UuY29udGFpbnMobyxlKSlyZXR1cm47bGV0IGE9dGhpcy5nZXROdW1iZXJPZlhUaWxlc0F0TGV2ZWwodCkscj10aGlzLmdldE51bWJlck9mWVRpbGVzQXRMZXZlbCh0KSxpPW8ud2lkdGgvYSxmPW8uaGVpZ2h0L3IsZD1lLmxvbmdpdHVkZTtvLmVhc3Q8by53ZXN0JiYoZCs9ay5UV09fUEkpO2xldCBjPShkLW8ud2VzdCkvaXwwO2M+PWEmJihjPWEtMSk7bGV0IHU9KG8ubm9ydGgtZS5sYXRpdHVkZSkvZnwwO3JldHVybiB1Pj1yJiYodT1yLTEpLGcobik/KG4ueD1jLG4ueT11LG4pOm5ldyBZKGMsdSl9O3c4PWtpfSk7ZnVuY3Rpb24gUzgoZSl7cmUuZnJvbVJhZGlhbnMoZS5lYXN0LGUubm9ydGgsMCxuZFswXSkscmUuZnJvbVJhZGlhbnMoZS53ZXN0LGUubm9ydGgsMCxuZFsxXSkscmUuZnJvbVJhZGlhbnMoZS5lYXN0LGUuc291dGgsMCxuZFsyXSkscmUuZnJvbVJhZGlhbnMoZS53ZXN0LGUuc291dGgsMCxuZFszXSk7bGV0IHQ9MCxuPTAsbz0wLGE9MCxyPXFuLl90ZXJyYWluSGVpZ2h0c01heExldmVsLGk7Zm9yKGk9MDtpPD1yOysraSl7bGV0IGY9ITE7Zm9yKGxldCBkPTA7ZDw0OysrZCl7bGV0IGM9bmRbZF07aWYoUzkucG9zaXRpb25Ub1RpbGVYWShjLGksb2QpLGQ9PT0wKW89b2QueCxhPW9kLnk7ZWxzZSBpZihvIT09b2QueHx8YSE9PW9kLnkpe2Y9ITA7YnJlYWt9fWlmKGYpYnJlYWs7dD1vLG49YX1pZihpIT09MClyZXR1cm57eDp0LHk6bixsZXZlbDppPnI/cjppLTF9fXZhciBFOCxSOCx4OCxzZyxPOSxPOCxTOSxuZCxvZCxxbixQaCxmZz1YKCgpPT57TXQoKTtSbCgpO2p0KCk7SWUoKTtUdCgpO3NlKCk7V2UoKTtUOCgpO19uKCk7b3MoKTtFOD1uZXcgcyxSOD1uZXcgcyx4OD1uZXcgcmUsc2c9bmV3IHMsTzk9bmV3IHMsTzg9bmV3IGdlLFM5PW5ldyB3OCxuZD1bbmV3IHJlLG5ldyByZSxuZXcgcmUsbmV3IHJlXSxvZD1uZXcgWSxxbj17fTtxbi5pbml0aWFsaXplPWZ1bmN0aW9uKCl7bGV0IGU9cW4uX2luaXRQcm9taXNlO3JldHVybiBnKGUpfHwoZT1BYS5mZXRjaEpzb24oaXIoIkFzc2V0cy9hcHByb3hpbWF0ZVRlcnJhaW5IZWlnaHRzLmpzb24iKSkudGhlbihmdW5jdGlvbih0KXtxbi5fdGVycmFpbkhlaWdodHM9dH0pLHFuLl9pbml0UHJvbWlzZT1lKSxlfTtxbi5nZXRNaW5pbXVtTWF4aW11bUhlaWdodHM9ZnVuY3Rpb24oZSx0KXt0PXQ/P3EuZGVmYXVsdDtsZXQgbj1TOChlKSxvPXFuLl9kZWZhdWx0TWluVGVycmFpbkhlaWdodCxhPXFuLl9kZWZhdWx0TWF4VGVycmFpbkhlaWdodDtpZihnKG4pKXtsZXQgcj1gJHtuLmxldmVsfS0ke24ueH0tJHtuLnl9YCxpPXFuLl90ZXJyYWluSGVpZ2h0c1tyXTtnKGkpJiYobz1pWzBdLGE9aVsxXSksdC5jYXJ0b2dyYXBoaWNUb0NhcnRlc2lhbihTZS5ub3J0aGVhc3QoZSx4OCksRTgpLHQuY2FydG9ncmFwaGljVG9DYXJ0ZXNpYW4oU2Uuc291dGh3ZXN0KGUseDgpLFI4KSxzLm1pZHBvaW50KFI4LEU4LHNnKTtsZXQgZj10LnNjYWxlVG9HZW9kZXRpY1N1cmZhY2Uoc2csTzkpO2lmKGcoZikpe2xldCBkPXMuZGlzdGFuY2Uoc2csZik7bz1NYXRoLm1pbihvLC1kKX1lbHNlIG89cW4uX2RlZmF1bHRNaW5UZXJyYWluSGVpZ2h0fXJldHVybiBvPU1hdGgubWF4KHFuLl9kZWZhdWx0TWluVGVycmFpbkhlaWdodCxvKSx7bWluaW11bVRlcnJhaW5IZWlnaHQ6byxtYXhpbXVtVGVycmFpbkhlaWdodDphfX07cW4uZ2V0Qm91bmRpbmdTcGhlcmU9ZnVuY3Rpb24oZSx0KXt0PXQ/P3EuZGVmYXVsdDtsZXQgbj1TOChlKSxvPXFuLl9kZWZhdWx0TWF4VGVycmFpbkhlaWdodDtpZihnKG4pKXtsZXQgcj1gJHtuLmxldmVsfS0ke24ueH0tJHtuLnl9YCxpPXFuLl90ZXJyYWluSGVpZ2h0c1tyXTtnKGkpJiYobz1pWzFdKX1sZXQgYT1nZS5mcm9tUmVjdGFuZ2xlM0QoZSx0LDApO3JldHVybiBnZS5mcm9tUmVjdGFuZ2xlM0QoZSx0LG8sTzgpLGdlLnVuaW9uKGEsTzgsYSl9O3FuLl90ZXJyYWluSGVpZ2h0c01heExldmVsPTY7cW4uX2RlZmF1bHRNYXhUZXJyYWluSGVpZ2h0PTllMztxbi5fZGVmYXVsdE1pblRlcnJhaW5IZWlnaHQ9LTFlNTtxbi5fdGVycmFpbkhlaWdodHM9dm9pZCAwO3FuLl9pbml0UHJvbWlzZT12b2lkIDA7T2JqZWN0LmRlZmluZVByb3BlcnRpZXMocW4se2luaXRpYWxpemVkOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZyhxbi5fdGVycmFpbkhlaWdodHMpfX19KTtQaD1xbn0pO2Z1bmN0aW9uIEZpKGUpe2U9ZT8/Q2UuRU1QVFlfT0JKRUNUO2xldCB0PWUucG9zaXRpb25zO3RoaXMud2lkdGg9ZS53aWR0aD8/MSx0aGlzLl9wb3NpdGlvbnM9dCx0aGlzLmdyYW51bGFyaXR5PWUuZ3JhbnVsYXJpdHk/Pzk5OTksdGhpcy5sb29wPWUubG9vcD8/ITEsdGhpcy5hcmNUeXBlPWUuYXJjVHlwZT8/d3QuR0VPREVTSUMsdGhpcy5fZWxsaXBzb2lkPXEuZGVmYXVsdCx0aGlzLl9wcm9qZWN0aW9uSW5kZXg9MCx0aGlzLl93b3JrZXJOYW1lPSJjcmVhdGVHcm91bmRQb2x5bGluZUdlb21ldHJ5Iix0aGlzLl9zY2VuZTNET25seT0hMX1mdW5jdGlvbiBwZyhlLHQsbixvLGEpe2xldCByPUhvKG8sZSwwLE05KSxpPUhvKG8sZSxuLE04KSxmPUhvKG8sdCwwLE44KSxkPVpyKGkscixNOCksYz1acihmLHIsTjgpO3JldHVybiBzLmNyb3NzKGMsZCxhKSxzLm5vcm1hbGl6ZShhLGEpfWZ1bmN0aW9uIGRnKGUsdCxuLG8sYSxyLGksZixkLGMsdSl7aWYoYT09PTApcmV0dXJuO2xldCBsO3I9PT13dC5HRU9ERVNJQz9sPW5ldyBiaChlLHQsaSk6cj09PXd0LlJIVU1CJiYobD1uZXcgZWEoZSx0LGkpKTtsZXQgaD1sLnN1cmZhY2VEaXN0YW5jZTtpZihoPGEpcmV0dXJuO2xldCBtPXBnKGUsdCxvLGksazkpLGI9TWF0aC5jZWlsKGgvYSkscD1oL2IseT1wLFQ9Yi0xLF89Zi5sZW5ndGg7Zm9yKGxldCBFPTA7RTxUO0UrKyl7bGV0IHc9bC5pbnRlcnBvbGF0ZVVzaW5nU3VyZmFjZURpc3RhbmNlKHksTjkpLFI9SG8oaSx3LG4sSTkpLFM9SG8oaSx3LG8sUDkpO3MucGFjayhtLGYsXykscy5wYWNrKFIsZCxfKSxzLnBhY2soUyxjLF8pLHUucHVzaCh3LmxhdGl0dWRlKSx1LnB1c2gody5sb25naXR1ZGUpLF8rPTMseSs9cH19ZnVuY3Rpb24gSG8oZSx0LG4sbyl7cmV0dXJuIHJlLmNsb25lKHQsdWcpLHVnLmhlaWdodD1uLHJlLnRvQ2FydGVzaWFuKHVnLGUsbyl9ZnVuY3Rpb24gWnIoZSx0LG4pe3JldHVybiBzLnN1YnRyYWN0KGUsdCxuKSxzLm5vcm1hbGl6ZShuLG4pLG59ZnVuY3Rpb24gSTgoZSx0LG4sbyl7cmV0dXJuIG89WnIoZSx0LG8pLG89cy5jcm9zcyhvLG4sbyksbz1zLm5vcm1hbGl6ZShvLG8pLG89cy5jcm9zcyhuLG8sbyksb31mdW5jdGlvbiBsZyhlLHQsbixvLGEpe2xldCByPVpyKG4sdCxKOCksaT1JOChlLHQscix2OSksZj1JOChvLHQscixGOSk7aWYoay5lcXVhbHNFcHNpbG9uKHMuZG90KGksZiksVTksay5FUFNJTE9ONSkpcmV0dXJuIGE9cy5jcm9zcyhyLGksYSksYT1zLm5vcm1hbGl6ZShhLGEpLGE7YT1zLmFkZChmLGksYSksYT1zLm5vcm1hbGl6ZShhLGEpO2xldCBkPXMuY3Jvc3MocixhLEQ5KTtyZXR1cm4gcy5kb3QoZixkKTxCOSYmKGE9cy5uZWdhdGUoYSxhKSksYX1mdW5jdGlvbiB2OChlLHQsbixvKXtsZXQgYT1acihuLHQsSDkpLHI9cy5kb3QoYSxlKTtpZihyPlc4fHxyPEM4KXtsZXQgaT1acihvLG4sSjgpLGY9cjxDOD9rLlBJX09WRVJfVFdPOi1rLlBJX09WRVJfVFdPLGQ9WmUuZnJvbUF4aXNBbmdsZShpLGYscTkpLGM9Si5mcm9tUXVhdGVybmlvbihkLEs5KTtyZXR1cm4gSi5tdWx0aXBseUJ5VmVjdG9yKGMsZSxlKSwhMH1yZXR1cm4hMX1mdW5jdGlvbiBhZChlLHQsbixvLGEpe2xldCByPXJlLnRvQ2FydGVzaWFuKHQsZS5fZWxsaXBzb2lkLFc5KSxpPXMuYWRkKHIsbixEOCksZj0hMSxkPWUuX2VsbGlwc29pZCxjPWQuY2FydGVzaWFuVG9DYXJ0b2dyYXBoaWMoaSxGOCk7TWF0aC5hYnModC5sb25naXR1ZGUtYy5sb25naXR1ZGUpPmsuUElfT1ZFUl9UV08mJihmPSEwLGk9cy5zdWJ0cmFjdChyLG4sRDgpLGM9ZC5jYXJ0ZXNpYW5Ub0NhcnRvZ3JhcGhpYyhpLEY4KSksYy5oZWlnaHQ9MDtsZXQgdT1lLnByb2plY3QoYyxhKTtyZXR1cm4gYT1zLnN1YnRyYWN0KHUsbyxhKSxhLno9MCxhPXMubm9ybWFsaXplKGEsYSksZiYmcy5uZWdhdGUoYSxhKSxhfWZ1bmN0aW9uIFU4KGUsdCxuLG8sYSxyKXtsZXQgaT1zLnN1YnRyYWN0KHQsZSxYOSk7cy5ub3JtYWxpemUoaSxpKTtsZXQgZj1uLVg4LGQ9cy5tdWx0aXBseUJ5U2NhbGFyKGksZixCOCk7cy5hZGQoZSxkLGEpO2xldCBjPW8tWTg7ZD1zLm11bHRpcGx5QnlTY2FsYXIoaSxjLEI4KSxzLmFkZCh0LGQscil9ZnVuY3Rpb24gRmgoZSx0KXtsZXQgbj1zbi5nZXRQb2ludERpc3RhbmNlKERoLGUpLG89c24uZ2V0UG9pbnREaXN0YW5jZShEaCx0KSxhPVk5O2suZXF1YWxzRXBzaWxvbihuLDAsay5FUFNJTE9OMik/KGE9WnIodCxlLGEpLHMubXVsdGlwbHlCeVNjYWxhcihhLGsuRVBTSUxPTjIsYSkscy5hZGQoZSxhLGUpKTprLmVxdWFsc0Vwc2lsb24obywwLGsuRVBTSUxPTjIpJiYoYT1acihlLHQsYSkscy5tdWx0aXBseUJ5U2NhbGFyKGEsay5FUFNJTE9OMixhKSxzLmFkZCh0LGEsdCkpfWZ1bmN0aW9uIEo5KGUsdCl7bGV0IG49TWF0aC5hYnMoZS5sb25naXR1ZGUpLG89TWF0aC5hYnModC5sb25naXR1ZGUpO2lmKGsuZXF1YWxzRXBzaWxvbihuLGsuUEksay5FUFNJTE9OMTEpKXtsZXQgYT1rLnNpZ24odC5sb25naXR1ZGUpO3JldHVybiBlLmxvbmdpdHVkZT1hKihuLWsuRVBTSUxPTjExKSwxfWVsc2UgaWYoay5lcXVhbHNFcHNpbG9uKG8say5QSSxrLkVQU0lMT04xMSkpe2xldCBhPWsuc2lnbihlLmxvbmdpdHVkZSk7cmV0dXJuIHQubG9uZ2l0dWRlPWEqKG8tay5FUFNJTE9OMTEpLDJ9cmV0dXJuIDB9ZnVuY3Rpb24gYkYoZSx0LG4sbyxhLHIsaSl7bGV0IGYsZCxjPXQuX2VsbGlwc29pZCx1PW4ubGVuZ3RoLzMtMSxsPXUqOCxoPWwqNCxtPXUqMzYsYj1sPjY1NTM1P25ldyBVaW50MzJBcnJheShtKTpuZXcgVWludDE2QXJyYXkobSkscD1uZXcgRmxvYXQ2NEFycmF5KGwqMykseT1uZXcgRmxvYXQzMkFycmF5KGgpLFQ9bmV3IEZsb2F0MzJBcnJheShoKSxfPW5ldyBGbG9hdDMyQXJyYXkoaCksRT1uZXcgRmxvYXQzMkFycmF5KGgpLHc9bmV3IEZsb2F0MzJBcnJheShoKSxSLFMsQyxJO2kmJihSPW5ldyBGbG9hdDMyQXJyYXkoaCksUz1uZXcgRmxvYXQzMkFycmF5KGgpLEM9bmV3IEZsb2F0MzJBcnJheShoKSxJPW5ldyBGbG9hdDMyQXJyYXkobCoyKSk7bGV0IE49ci5sZW5ndGgvMixQPTAsRj1aODtGLmhlaWdodD0wO2xldCBBPVE4O0EuaGVpZ2h0PTA7bGV0IHg9TDgsTT1oZztpZihpKWZvcihkPTAsZj0xO2Y8TjtmKyspRi5sYXRpdHVkZT1yW2RdLEYubG9uZ2l0dWRlPXJbZCsxXSxBLmxhdGl0dWRlPXJbZCsyXSxBLmxvbmdpdHVkZT1yW2QrM10seD10LnByb2plY3QoRix4KSxNPXQucHJvamVjdChBLE0pLFArPXMuZGlzdGFuY2UoeCxNKSxkKz0yO2xldCB2PW8ubGVuZ3RoLzM7TT1zLnVucGFjayhvLDAsTSk7bGV0IFU9MDtmb3IoZD0zLGY9MTtmPHY7ZisrKXg9cy5jbG9uZShNLHgpLE09cy51bnBhY2sobyxkLE0pLFUrPXMuZGlzdGFuY2UoeCxNKSxkKz0zO2xldCB6O2Q9MztsZXQgRD0wLEc9MCxIPTAsTz0wLFo9ITEsb2U9cy51bnBhY2sobiwwLHo4KSxjZT1zLnVucGFjayhvLDAsaGcpLGZlPXMudW5wYWNrKGEsMCxHOCk7aWYoZSl7bGV0IE5lPXMudW5wYWNrKG4sbi5sZW5ndGgtNixqOCk7djgoZmUsTmUsb2UsY2UpJiYoZmU9cy5uZWdhdGUoZmUsZmUpKX1sZXQgZWU9MCxiZT0wLGxlPTA7Zm9yKGY9MDtmPHU7ZisrKXtsZXQgTmU9cy5jbG9uZShvZSxqOCksZXQ9cy5jbG9uZShjZSxMOCksS2U9cy5jbG9uZShmZSxaOSk7WiYmKEtlPXMubmVnYXRlKEtlLEtlKSksb2U9cy51bnBhY2sobixkLHo4KSxjZT1zLnVucGFjayhvLGQsaGcpLGZlPXMudW5wYWNrKGEsZCxHOCksWj12OChmZSxOZSxvZSxjZSksRi5sYXRpdHVkZT1yW0RdLEYubG9uZ2l0dWRlPXJbRCsxXSxBLmxhdGl0dWRlPXJbRCsyXSxBLmxvbmdpdHVkZT1yW0QrM107bGV0IHR0LFhlLExlLGplO2lmKGkpe2xldCB4dD1KOShGLEEpO3R0PXQucHJvamVjdChGLGFGKSxYZT10LnByb2plY3QoQSxyRik7bGV0IE9uPVpyKFhlLHR0LEg4KTtPbi55PU1hdGguYWJzKE9uLnkpLExlPW1nLGplPWJnLHh0PT09MHx8cy5kb3QoT24scy5VTklUX1kpPlc4PyhMZT1hZCh0LEYsS2UsdHQsbWcpLGplPWFkKHQsQSxmZSxYZSxiZykpOnh0PT09MT8oamU9YWQodCxBLGZlLFhlLGJnKSxMZS54PTAsTGUueT1rLnNpZ24oRi5sb25naXR1ZGUtTWF0aC5hYnMoQS5sb25naXR1ZGUpKSxMZS56PTApOihMZT1hZCh0LEYsS2UsdHQsbWcpLGplLng9MCxqZS55PWsuc2lnbihGLmxvbmdpdHVkZS1BLmxvbmdpdHVkZSksamUuej0wKX1sZXQgaXQ9cy5kaXN0YW5jZShldCxjZSksWWU9YWMuZnJvbUNhcnRlc2lhbihOZSx1RiksZnQ9cy5zdWJ0cmFjdChvZSxOZSxpRiksSXQ9cy5ub3JtYWxpemUoZnQsVjgpLEN0PXMuc3VidHJhY3QoZXQsTmUsY0YpO0N0PXMubm9ybWFsaXplKEN0LEN0KTtsZXQgaHQ9cy5jcm9zcyhJdCxDdCxWOCk7aHQ9cy5ub3JtYWxpemUoaHQsaHQpO2xldCBLdD1zLmNyb3NzKEN0LEtlLGZGKTtLdD1zLm5vcm1hbGl6ZShLdCxLdCk7bGV0IFB0PXMuc3VidHJhY3QoY2Usb2Usc0YpO1B0PXMubm9ybWFsaXplKFB0LFB0KTtsZXQgTHQ9cy5jcm9zcyhmZSxQdCxkRik7THQ9cy5ub3JtYWxpemUoTHQsTHQpO2xldCBxZT1pdC9VLFZlPWVlL1UsUnQ9MCxGdCxxdCxadCxvbj0wLHduPTA7aWYoaSl7UnQ9cy5kaXN0YW5jZSh0dCxYZSksRnQ9YWMuZnJvbUNhcnRlc2lhbih0dCxsRikscXQ9cy5zdWJ0cmFjdChYZSx0dCxIOCksWnQ9cy5ub3JtYWxpemUocXQsaEYpO2xldCB4dD1adC54O1p0Lng9WnQueSxadC55PS14dCxvbj1SdC9QLHduPWJlL1B9Zm9yKHo9MDt6PDg7eisrKXtsZXQgeHQ9Tyt6KjQsT249Ryt6KjIsa249eHQrMyxBbz16PDQ/MTotMSxHdD16PT09Mnx8ej09PTN8fHo9PT02fHx6PT09Nz8xOi0xO3MucGFjayhZZS5oaWdoLHkseHQpLHlba25dPWZ0Lngscy5wYWNrKFllLmxvdyxULHh0KSxUW2tuXT1mdC55LHMucGFjayhLdCxfLHh0KSxfW2tuXT1mdC56LHMucGFjayhMdCxFLHh0KSxFW2tuXT1xZSpBbyxzLnBhY2soaHQsdyx4dCk7bGV0IGRuPVZlKkd0O2RuPT09MCYmR3Q8MCYmKGRuPTkpLHdba25dPWRuLGkmJihSW3h0XT1GdC5oaWdoLngsUlt4dCsxXT1GdC5oaWdoLnksUlt4dCsyXT1GdC5sb3cueCxSW3h0KzNdPUZ0Lmxvdy55LENbeHRdPS1MZS55LENbeHQrMV09TGUueCxDW3h0KzJdPWplLnksQ1t4dCszXT0tamUueCxTW3h0XT1xdC54LFNbeHQrMV09cXQueSxTW3h0KzJdPVp0LngsU1t4dCszXT1adC55LElbT25dPW9uKkFvLGRuPXduKkd0LGRuPT09MCYmR3Q8MCYmKGRuPTkpLElbT24rMV09ZG4pfWxldCBEdD1uRixhbj1vRix6dD1lRixmbj10RixWbj1TZS5mcm9tQ2FydG9ncmFwaGljQXJyYXkoUTksJDkpLEhuPVBoLmdldE1pbmltdW1NYXhpbXVtSGVpZ2h0cyhWbixjKSxQbj1Ibi5taW5pbXVtVGVycmFpbkhlaWdodCxybz1Ibi5tYXhpbXVtVGVycmFpbkhlaWdodDtsZSs9TWF0aC5hYnMoUG4pLGxlKz1NYXRoLmFicyhybyksVTgoTmUsZXQsUG4scm8sRHQsenQpLFU4KG9lLGNlLFBuLHJvLGFuLGZuKTtsZXQga3Q9cy5tdWx0aXBseUJ5U2NhbGFyKGh0LGsuRVBTSUxPTjUsSzgpO3MuYWRkKER0LGt0LER0KSxzLmFkZChhbixrdCxhbikscy5hZGQoenQsa3QsenQpLHMuYWRkKGZuLGt0LGZuKSxGaChEdCxhbiksRmgoenQsZm4pLHMucGFjayhEdCxwLEgpLHMucGFjayhhbixwLEgrMykscy5wYWNrKGZuLHAsSCs2KSxzLnBhY2soenQscCxIKzkpLGt0PXMubXVsdGlwbHlCeVNjYWxhcihodCwtMiprLkVQU0lMT041LEs4KSxzLmFkZChEdCxrdCxEdCkscy5hZGQoYW4sa3QsYW4pLHMuYWRkKHp0LGt0LHp0KSxzLmFkZChmbixrdCxmbiksRmgoRHQsYW4pLEZoKHp0LGZuKSxzLnBhY2soRHQscCxIKzEyKSxzLnBhY2soYW4scCxIKzE1KSxzLnBhY2soZm4scCxIKzE4KSxzLnBhY2soenQscCxIKzIxKSxEKz0yLGQrPTMsRys9MTYsSCs9MjQsTys9MzIsZWUrPWl0LGJlKz1SdH1kPTA7bGV0IHBlPTA7Zm9yKGY9MDtmPHU7ZisrKXtmb3Ioej0wO3o8cTg7eisrKWJbZCt6XT0kOFt6XStwZTtwZSs9OCxkKz1xOH1sZXQgdWU9bUY7Z2UuZnJvbVZlcnRpY2VzKG4scy5aRVJPLDMsdWVbMF0pLGdlLmZyb21WZXJ0aWNlcyhvLHMuWkVSTywzLHVlWzFdKTtsZXQgYWU9Z2UuZnJvbUJvdW5kaW5nU3BoZXJlcyh1ZSk7YWUucmFkaXVzKz1sZS8odSoyKTtsZXQgQWU9e3Bvc2l0aW9uOm5ldyBpZSh7Y29tcG9uZW50RGF0YXR5cGU6bmUuRE9VQkxFLGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myxub3JtYWxpemU6ITEsdmFsdWVzOnB9KSxzdGFydEhpQW5kRm9yd2FyZE9mZnNldFg6dmkoeSksc3RhcnRMb0FuZEZvcndhcmRPZmZzZXRZOnZpKFQpLHN0YXJ0Tm9ybWFsQW5kRm9yd2FyZE9mZnNldFo6dmkoXyksZW5kTm9ybWFsQW5kVGV4dHVyZUNvb3JkaW5hdGVOb3JtYWxpemF0aW9uWDp2aShFKSxyaWdodE5vcm1hbEFuZFRleHR1cmVDb29yZGluYXRlTm9ybWFsaXphdGlvblk6dmkodyl9O3JldHVybiBpJiYoQWUuc3RhcnRIaUxvMkQ9dmkoUiksQWUub2Zmc2V0QW5kUmlnaHQyRD12aShTKSxBZS5zdGFydEVuZE5vcm1hbHMyRD12aShDKSxBZS50ZXhjb29yZE5vcm1hbGl6YXRpb24yRD1uZXcgaWUoe2NvbXBvbmVudERhdGF0eXBlOm5lLkZMT0FULGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Mixub3JtYWxpemU6ITEsdmFsdWVzOkl9KSksbmV3IHZlKHthdHRyaWJ1dGVzOkFlLGluZGljZXM6Yixib3VuZGluZ1NwaGVyZTphZX0pfWZ1bmN0aW9uIHZpKGUpe3JldHVybiBuZXcgaWUoe2NvbXBvbmVudERhdGF0eXBlOm5lLkZMT0FULGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6NCxub3JtYWxpemU6ITEsdmFsdWVzOmV9KX12YXIgZ2csQzksVzgsQzgsWDgsWTgsTTksTTgsTjgsTjksSTksUDksazksdWcsdjksRjksRDksSjgsQjksVTksRGgsTDksajksejksRzksVjksa2gsdmgsUDgsazgsSDksSzkscTksRjgsVzksRDgsWDksQjgsWTksWjgsUTgsTDgsaGcsajgsejgsWjksRzgsUTksJDksZUYsdEYsbkYsb0YsYUYsckYsbWcsYmcsaUYsY0Ysc0YsVjgsZkYsZEYsdUYsbEYsSDgsaEYsSzgsbUYsJDgscTgsX2csZVI9WCgoKT0+e2ZnKCk7aGMoKTtYYSgpO010KCk7SWUoKTtUdCgpO3Z0KCk7bXQoKTtzZSgpO1dlKCk7ZDAoKTtVZigpO29wKCk7a3IoKTskdCgpO2VuKCk7cGkoKTtHZSgpO0RuKCk7Z2koKTtKbygpO19uKCk7eWkoKTtnZz1baW8sUm5dLEM5PWdnLmxlbmd0aCxXOD1NYXRoLmNvcyhrLnRvUmFkaWFucygzMCkpLEM4PU1hdGguY29zKGsudG9SYWRpYW5zKDE1MCkpLFg4PTAsWTg9MWUzO09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEZpLnByb3RvdHlwZSx7cGFja2VkTGVuZ3RoOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gMSt0aGlzLl9wb3NpdGlvbnMubGVuZ3RoKjMrMSsxKzErcS5wYWNrZWRMZW5ndGgrMSsxfX19KTtGaS5zZXRQcm9qZWN0aW9uQW5kRWxsaXBzb2lkPWZ1bmN0aW9uKGUsdCl7bGV0IG49MDtmb3IobGV0IG89MDtvPEM5O28rKylpZih0IGluc3RhbmNlb2YgZ2dbb10pe249bzticmVha31lLl9wcm9qZWN0aW9uSW5kZXg9bixlLl9lbGxpcHNvaWQ9dC5lbGxpcHNvaWR9O005PW5ldyBzLE04PW5ldyBzLE44PW5ldyBzO045PW5ldyByZSxJOT1uZXcgcyxQOT1uZXcgcyxrOT1uZXcgczt1Zz1uZXcgcmU7RmkucGFjaz1mdW5jdGlvbihlLHQsbil7bGV0IG89bj8/MCxhPWUuX3Bvc2l0aW9ucyxyPWEubGVuZ3RoO3RbbysrXT1yO2ZvcihsZXQgaT0wO2k8cjsrK2kpe2xldCBmPWFbaV07cy5wYWNrKGYsdCxvKSxvKz0zfXJldHVybiB0W28rK109ZS5ncmFudWxhcml0eSx0W28rK109ZS5sb29wPzE6MCx0W28rK109ZS5hcmNUeXBlLHEucGFjayhlLl9lbGxpcHNvaWQsdCxvKSxvKz1xLnBhY2tlZExlbmd0aCx0W28rK109ZS5fcHJvamVjdGlvbkluZGV4LHRbbysrXT1lLl9zY2VuZTNET25seT8xOjAsdH07RmkudW5wYWNrPWZ1bmN0aW9uKGUsdCxuKXtsZXQgbz10Pz8wLGE9ZVtvKytdLHI9bmV3IEFycmF5KGEpO2ZvcihsZXQgaD0wO2g8YTtoKyspcltoXT1zLnVucGFjayhlLG8pLG8rPTM7bGV0IGk9ZVtvKytdLGY9ZVtvKytdPT09MSxkPWVbbysrXSxjPXEudW5wYWNrKGUsbyk7bys9cS5wYWNrZWRMZW5ndGg7bGV0IHU9ZVtvKytdLGw9ZVtvKytdPT09MTtyZXR1cm4gZyhuKXx8KG49bmV3IEZpKHtwb3NpdGlvbnM6cn0pKSxuLl9wb3NpdGlvbnM9cixuLmdyYW51bGFyaXR5PWksbi5sb29wPWYsbi5hcmNUeXBlPWQsbi5fZWxsaXBzb2lkPWMsbi5fcHJvamVjdGlvbkluZGV4PXUsbi5fc2NlbmUzRE9ubHk9bCxufTt2OT1uZXcgcyxGOT1uZXcgcyxEOT1uZXcgcyxKOD1uZXcgcyxCOT0wLFU5PS0xO0RoPXNuLmZyb21Qb2ludE5vcm1hbChzLlpFUk8scy5VTklUX1kpLEw5PW5ldyBzLGo5PW5ldyBzLHo5PW5ldyBzLEc5PW5ldyBzLFY5PW5ldyBzLGtoPW5ldyBzLHZoPW5ldyByZSxQOD1uZXcgcmUsazg9bmV3IHJlO0ZpLmNyZWF0ZUdlb21ldHJ5PWZ1bmN0aW9uKGUpe2xldCB0PSFlLl9zY2VuZTNET25seSxuPWUubG9vcCxvPWUuX2VsbGlwc29pZCxhPWUuZ3JhbnVsYXJpdHkscj1lLmFyY1R5cGUsaT1uZXcgZ2dbZS5fcHJvamVjdGlvbkluZGV4XShvKSxmPVg4LGQ9WTgsYyx1LGw9ZS5fcG9zaXRpb25zLGg9bC5sZW5ndGg7aD09PTImJihuPSExKTtsZXQgbSxiLHAseSxUPW5ldyBlYSh2b2lkIDAsdm9pZCAwLG8pLF8sRSx3LFI9W2xbMF1dO2Zvcih1PTA7dTxoLTE7dSsrKW09bFt1XSxiPWxbdSsxXSxfPW5vLmxpbmVTZWdtZW50UGxhbmUobSxiLERoLGtoKSxnKF8pJiYhcy5lcXVhbHNFcHNpbG9uKF8sbSxrLkVQU0lMT043KSYmIXMuZXF1YWxzRXBzaWxvbihfLGIsay5FUFNJTE9ONykmJihlLmFyY1R5cGU9PT13dC5HRU9ERVNJQz9SLnB1c2gocy5jbG9uZShfKSk6ZS5hcmNUeXBlPT09d3QuUkhVTUImJih3PW8uY2FydGVzaWFuVG9DYXJ0b2dyYXBoaWMoXyx2aCkubG9uZ2l0dWRlLHA9by5jYXJ0ZXNpYW5Ub0NhcnRvZ3JhcGhpYyhtLHZoKSx5PW8uY2FydGVzaWFuVG9DYXJ0b2dyYXBoaWMoYixQOCksVC5zZXRFbmRQb2ludHMocCx5KSxFPVQuZmluZEludGVyc2VjdGlvbldpdGhMb25naXR1ZGUodyxrOCksXz1vLmNhcnRvZ3JhcGhpY1RvQ2FydGVzaWFuKEUsa2gpLGcoXykmJiFzLmVxdWFsc0Vwc2lsb24oXyxtLGsuRVBTSUxPTjcpJiYhcy5lcXVhbHNFcHNpbG9uKF8sYixrLkVQU0lMT043KSYmUi5wdXNoKHMuY2xvbmUoXykpKSksUi5wdXNoKGIpO24mJihtPWxbaC0xXSxiPWxbMF0sXz1uby5saW5lU2VnbWVudFBsYW5lKG0sYixEaCxraCksZyhfKSYmIXMuZXF1YWxzRXBzaWxvbihfLG0say5FUFNJTE9ONykmJiFzLmVxdWFsc0Vwc2lsb24oXyxiLGsuRVBTSUxPTjcpJiYoZS5hcmNUeXBlPT09d3QuR0VPREVTSUM/Ui5wdXNoKHMuY2xvbmUoXykpOmUuYXJjVHlwZT09PXd0LlJIVU1CJiYodz1vLmNhcnRlc2lhblRvQ2FydG9ncmFwaGljKF8sdmgpLmxvbmdpdHVkZSxwPW8uY2FydGVzaWFuVG9DYXJ0b2dyYXBoaWMobSx2aCkseT1vLmNhcnRlc2lhblRvQ2FydG9ncmFwaGljKGIsUDgpLFQuc2V0RW5kUG9pbnRzKHAseSksRT1ULmZpbmRJbnRlcnNlY3Rpb25XaXRoTG9uZ2l0dWRlKHcsazgpLF89by5jYXJ0b2dyYXBoaWNUb0NhcnRlc2lhbihFLGtoKSxnKF8pJiYhcy5lcXVhbHNFcHNpbG9uKF8sbSxrLkVQU0lMT043KSYmIXMuZXF1YWxzRXBzaWxvbihfLGIsay5FUFNJTE9ONykmJlIucHVzaChzLmNsb25lKF8pKSkpKTtsZXQgUz1SLmxlbmd0aCxDPW5ldyBBcnJheShTKTtmb3IodT0wO3U8Uzt1Kyspe2xldCBaPXJlLmZyb21DYXJ0ZXNpYW4oUlt1XSxvKTtaLmhlaWdodD0wLENbdV09Wn1pZihDPU5uKEMscmUuZXF1YWxzRXBzaWxvbiksUz1DLmxlbmd0aCxTPDIpcmV0dXJuO2xldCBJPVtdLE49W10sUD1bXSxGPVtdLEE9TDkseD1qOSxNPXo5LHY9RzksVT1WOSx6PUNbMF0sRD1DWzFdLEc9Q1tTLTFdO2ZvcihBPUhvKG8sRyxmLEEpLHY9SG8obyxELGYsdikseD1IbyhvLHosZix4KSxNPUhvKG8seixkLE0pLG4/VT1sZyhBLHgsTSx2LFUpOlU9cGcoeixELGQsbyxVKSxzLnBhY2soVSxOLDApLHMucGFjayh4LFAsMCkscy5wYWNrKE0sRiwwKSxJLnB1c2goei5sYXRpdHVkZSksSS5wdXNoKHoubG9uZ2l0dWRlKSxkZyh6LEQsZixkLGEscixvLE4sUCxGLEkpLHU9MTt1PFMtMTsrK3Upe0E9cy5jbG9uZSh4LEEpLHg9cy5jbG9uZSh2LHgpO2xldCBaPUNbdV07SG8obyxaLGQsTSksSG8obyxDW3UrMV0sZix2KSxsZyhBLHgsTSx2LFUpLGM9Ti5sZW5ndGgscy5wYWNrKFUsTixjKSxzLnBhY2soeCxQLGMpLHMucGFjayhNLEYsYyksSS5wdXNoKFoubGF0aXR1ZGUpLEkucHVzaChaLmxvbmdpdHVkZSksZGcoQ1t1XSxDW3UrMV0sZixkLGEscixvLE4sUCxGLEkpfWxldCBIPUNbUy0xXSxPPUNbUy0yXTtpZih4PUhvKG8sSCxmLHgpLE09SG8obyxILGQsTSksbil7bGV0IFo9Q1swXTtBPUhvKG8sTyxmLEEpLHY9SG8obyxaLGYsdiksVT1sZyhBLHgsTSx2LFUpfWVsc2UgVT1wZyhPLEgsZCxvLFUpO2lmKGM9Ti5sZW5ndGgscy5wYWNrKFUsTixjKSxzLnBhY2soeCxQLGMpLHMucGFjayhNLEYsYyksSS5wdXNoKEgubGF0aXR1ZGUpLEkucHVzaChILmxvbmdpdHVkZSksbil7Zm9yKGRnKEgseixmLGQsYSxyLG8sTixQLEYsSSksYz1OLmxlbmd0aCx1PTA7dTwzOysrdSlOW2MrdV09Tlt1XSxQW2MrdV09UFt1XSxGW2MrdV09Rlt1XTtJLnB1c2goei5sYXRpdHVkZSksSS5wdXNoKHoubG9uZ2l0dWRlKX1yZXR1cm4gYkYobixpLFAsRixOLEksdCl9O0g5PW5ldyBzLEs5PW5ldyBKLHE5PW5ldyBaZTtGOD1uZXcgcmUsVzk9bmV3IHMsRDg9bmV3IHM7WDk9bmV3IHMsQjg9bmV3IHM7WTk9bmV3IHM7Wjg9bmV3IHJlLFE4PW5ldyByZSxMOD1uZXcgcyxoZz1uZXcgcyxqOD1uZXcgcyx6OD1uZXcgcyxaOT1uZXcgcyxHOD1uZXcgcyxROT1bWjgsUThdLCQ5PW5ldyBTZSxlRj1uZXcgcyx0Rj1uZXcgcyxuRj1uZXcgcyxvRj1uZXcgcyxhRj1uZXcgcyxyRj1uZXcgcyxtZz1uZXcgcyxiZz1uZXcgcyxpRj1uZXcgcyxjRj1uZXcgcyxzRj1uZXcgcyxWOD1uZXcgcyxmRj1uZXcgcyxkRj1uZXcgcyx1Rj1uZXcgYWMsbEY9bmV3IGFjLEg4PW5ldyBzLGhGPW5ldyBzLEs4PW5ldyBzLG1GPVtuZXcgZ2UsbmV3IGdlXSwkOD1bMCwyLDEsMCwzLDIsMCw3LDMsMCw0LDcsMCw1LDQsMCwxLDUsNSw3LDQsNSw2LDcsNSwyLDYsNSwxLDIsMyw2LDIsMyw3LDZdLHE4PSQ4Lmxlbmd0aDtGaS5fcHJvamVjdE5vcm1hbD1hZDtfZz1GaX0pO3ZhciB5Zz17fTtydCh5Zyx7ZGVmYXVsdDooKT0+Z0Z9KTtmdW5jdGlvbiBwRihlLHQpe3JldHVybiBQaC5pbml0aWFsaXplKCkudGhlbihmdW5jdGlvbigpe3JldHVybiBnKHQpJiYoZT1fZy51bnBhY2soZSx0KSksX2cuY3JlYXRlR2VvbWV0cnkoZSl9KX12YXIgZ0YsQWc9WCgoKT0+e2ZnKCk7c2UoKTtlUigpO2dGPXBGfSk7ZnVuY3Rpb24gTXMoZSl7ZT1lPz9DZS5FTVBUWV9PQkpFQ1Q7bGV0IHQ9ZS52ZXJ0ZXhGb3JtYXQ/P2hlLkRFRkFVTFQ7dGhpcy5fdmVydGV4Rm9ybWF0PXQsdGhpcy5fd29ya2VyTmFtZT0iY3JlYXRlUGxhbmVHZW9tZXRyeSJ9dmFyIHRSLF9GLEJoLFVoLHdnLG5SPVgoKCk9PntNdCgpO0llKCk7dnQoKTttdCgpO3NlKCk7JHQoKTtlbigpO3VuKCk7Y24oKTtrbygpO01zLnBhY2tlZExlbmd0aD1oZS5wYWNrZWRMZW5ndGg7TXMucGFjaz1mdW5jdGlvbihlLHQsbil7cmV0dXJuIG49bj8/MCxoZS5wYWNrKGUuX3ZlcnRleEZvcm1hdCx0LG4pLHR9O3RSPW5ldyBoZSxfRj17dmVydGV4Rm9ybWF0OnRSfTtNcy51bnBhY2s9ZnVuY3Rpb24oZSx0LG4pe3Q9dD8/MDtsZXQgbz1oZS51bnBhY2soZSx0LHRSKTtyZXR1cm4gZyhuKT8obi5fdmVydGV4Rm9ybWF0PWhlLmNsb25lKG8sbi5fdmVydGV4Rm9ybWF0KSxuKTpuZXcgTXMoX0YpfTtCaD1uZXcgcygtLjUsLS41LDApLFVoPW5ldyBzKC41LC41LDApO01zLmNyZWF0ZUdlb21ldHJ5PWZ1bmN0aW9uKGUpe2xldCB0PWUuX3ZlcnRleEZvcm1hdCxuPW5ldyBudCxvLGE7aWYodC5wb3NpdGlvbil7aWYoYT1uZXcgRmxvYXQ2NEFycmF5KDEyKSxhWzBdPUJoLngsYVsxXT1CaC55LGFbMl09MCxhWzNdPVVoLngsYVs0XT1CaC55LGFbNV09MCxhWzZdPVVoLngsYVs3XT1VaC55LGFbOF09MCxhWzldPUJoLngsYVsxMF09VWgueSxhWzExXT0wLG4ucG9zaXRpb249bmV3IGllKHtjb21wb25lbnREYXRhdHlwZTpuZS5ET1VCTEUsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczphfSksdC5ub3JtYWwpe2xldCByPW5ldyBGbG9hdDMyQXJyYXkoMTIpO3JbMF09MCxyWzFdPTAsclsyXT0xLHJbM109MCxyWzRdPTAscls1XT0xLHJbNl09MCxyWzddPTAscls4XT0xLHJbOV09MCxyWzEwXT0wLHJbMTFdPTEsbi5ub3JtYWw9bmV3IGllKHtjb21wb25lbnREYXRhdHlwZTpuZS5GTE9BVCxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOnJ9KX1pZih0LnN0KXtsZXQgcj1uZXcgRmxvYXQzMkFycmF5KDgpO3JbMF09MCxyWzFdPTAsclsyXT0xLHJbM109MCxyWzRdPTEscls1XT0xLHJbNl09MCxyWzddPTEsbi5zdD1uZXcgaWUoe2NvbXBvbmVudERhdGF0eXBlOm5lLkZMT0FULGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Mix2YWx1ZXM6cn0pfWlmKHQudGFuZ2VudCl7bGV0IHI9bmV3IEZsb2F0MzJBcnJheSgxMik7clswXT0xLHJbMV09MCxyWzJdPTAsclszXT0xLHJbNF09MCxyWzVdPTAscls2XT0xLHJbN109MCxyWzhdPTAscls5XT0xLHJbMTBdPTAsclsxMV09MCxuLnRhbmdlbnQ9bmV3IGllKHtjb21wb25lbnREYXRhdHlwZTpuZS5GTE9BVCxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOnJ9KX1pZih0LmJpdGFuZ2VudCl7bGV0IHI9bmV3IEZsb2F0MzJBcnJheSgxMik7clswXT0wLHJbMV09MSxyWzJdPTAsclszXT0wLHJbNF09MSxyWzVdPTAscls2XT0wLHJbN109MSxyWzhdPTAscls5XT0wLHJbMTBdPTEsclsxMV09MCxuLmJpdGFuZ2VudD1uZXcgaWUoe2NvbXBvbmVudERhdGF0eXBlOm5lLkZMT0FULGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6cn0pfW89bmV3IFVpbnQxNkFycmF5KDYpLG9bMF09MCxvWzFdPTEsb1syXT0yLG9bM109MCxvWzRdPTIsb1s1XT0zfXJldHVybiBuZXcgdmUoe2F0dHJpYnV0ZXM6bixpbmRpY2VzOm8scHJpbWl0aXZlVHlwZTpVZS5UUklBTkdMRVMsYm91bmRpbmdTcGhlcmU6bmV3IGdlKHMuWkVSTyxNYXRoLnNxcnQoMikpfSl9O3dnPU1zfSk7dmFyIFRnPXt9O3J0KFRnLHtkZWZhdWx0OigpPT5BRn0pO2Z1bmN0aW9uIHlGKGUsdCl7cmV0dXJuIGcodCkmJihlPXdnLnVucGFjayhlLHQpKSx3Zy5jcmVhdGVHZW9tZXRyeShlKX12YXIgQUYsRWc9WCgoKT0+e3NlKCk7blIoKTtBRj15Rn0pO2Z1bmN0aW9uIE5zKCl7dGhpcy5fd29ya2VyTmFtZT0iY3JlYXRlUGxhbmVPdXRsaW5lR2VvbWV0cnkifXZhciBEaSxMaCxSZyxvUj1YKCgpPT57TXQoKTtJZSgpO3Z0KCk7c2UoKTskdCgpO2VuKCk7dW4oKTtjbigpO05zLnBhY2tlZExlbmd0aD0wO05zLnBhY2s9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdH07TnMudW5wYWNrPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZyhuKT9uOm5ldyBOc307RGk9bmV3IHMoLS41LC0uNSwwKSxMaD1uZXcgcyguNSwuNSwwKTtOcy5jcmVhdGVHZW9tZXRyeT1mdW5jdGlvbigpe2xldCBlPW5ldyBudCx0PW5ldyBVaW50MTZBcnJheSg4KSxuPW5ldyBGbG9hdDY0QXJyYXkoMTIpO3JldHVybiBuWzBdPURpLngsblsxXT1EaS55LG5bMl09RGkueixuWzNdPUxoLngsbls0XT1EaS55LG5bNV09RGkueixuWzZdPUxoLngsbls3XT1MaC55LG5bOF09RGkueixuWzldPURpLngsblsxMF09TGgueSxuWzExXT1EaS56LGUucG9zaXRpb249bmV3IGllKHtjb21wb25lbnREYXRhdHlwZTpuZS5ET1VCTEUsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczpufSksdFswXT0wLHRbMV09MSx0WzJdPTEsdFszXT0yLHRbNF09Mix0WzVdPTMsdFs2XT0zLHRbN109MCxuZXcgdmUoe2F0dHJpYnV0ZXM6ZSxpbmRpY2VzOnQscHJpbWl0aXZlVHlwZTpVZS5MSU5FUyxib3VuZGluZ1NwaGVyZTpuZXcgZ2Uocy5aRVJPLE1hdGguc3FydCgyKSl9KX07Umc9TnN9KTt2YXIgeGc9e307cnQoeGcse2RlZmF1bHQ6KCk9PlRGfSk7ZnVuY3Rpb24gd0YoZSx0KXtyZXR1cm4gZyh0KSYmKGU9UmcudW5wYWNrKGUsdCkpLFJnLmNyZWF0ZUdlb21ldHJ5KGUpfXZhciBURixPZz1YKCgpPT57c2UoKTtvUigpO1RGPXdGfSk7ZnVuY3Rpb24gem4oZSx0KXt0aGlzLnBvc2l0aW9uPWUsZyh0aGlzLnBvc2l0aW9uKXx8KHRoaXMucG9zaXRpb249bmV3IFkpLHRoaXMudGFuZ2VudFBsYW5lPXQsZyh0aGlzLnRhbmdlbnRQbGFuZSl8fCh0aGlzLnRhbmdlbnRQbGFuZT16bi5OT1JUSF9QT0xFX1RBTkdFTlRfUExBTkUpfXZhciBJcyxFRixSRix4RixPRix1YSxhUj1YKCgpPT57anQoKTtJZSgpO1R0KCk7c2UoKTtXZSgpO3BzKCk7cGkoKTtHZSgpO05mKCk7T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoem4ucHJvdG90eXBlLHtlbGxpcHNvaWQ6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnRhbmdlbnRQbGFuZS5lbGxpcHNvaWR9fSx4OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wb3NpdGlvbi54fX0seTp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucG9zaXRpb24ueX19LGNvbmZvcm1hbExhdGl0dWRlOntnZXQ6ZnVuY3Rpb24oKXtsZXQgZT1ZLm1hZ25pdHVkZSh0aGlzLnBvc2l0aW9uKSx0PTIqdGhpcy5lbGxpcHNvaWQubWF4aW11bVJhZGl1cztyZXR1cm4gdGhpcy50YW5nZW50UGxhbmUucGxhbmUubm9ybWFsLnoqKGsuUElfT1ZFUl9UV08tMipNYXRoLmF0YW4yKGUsdCkpfX0sbG9uZ2l0dWRlOntnZXQ6ZnVuY3Rpb24oKXtsZXQgZT1rLlBJX09WRVJfVFdPK01hdGguYXRhbjIodGhpcy55LHRoaXMueCk7cmV0dXJuIGU+TWF0aC5QSSYmKGUtPWsuVFdPX1BJKSxlfX19KTtJcz1uZXcgcmUsRUY9bmV3IHM7em4ucHJvdG90eXBlLmdldExhdGl0dWRlPWZ1bmN0aW9uKGUpe2coZSl8fChlPXEuZGVmYXVsdCksSXMubGF0aXR1ZGU9dGhpcy5jb25mb3JtYWxMYXRpdHVkZSxJcy5sb25naXR1ZGU9dGhpcy5sb25naXR1ZGUsSXMuaGVpZ2h0PTA7bGV0IHQ9dGhpcy5lbGxpcHNvaWQuY2FydG9ncmFwaGljVG9DYXJ0ZXNpYW4oSXMsRUYpO3JldHVybiBlLmNhcnRlc2lhblRvQ2FydG9ncmFwaGljKHQsSXMpLElzLmxhdGl0dWRlfTtSRj1uZXcgZHIseEY9bmV3IHMsT0Y9bmV3IHM7em4uZnJvbUNhcnRlc2lhbj1mdW5jdGlvbihlLHQpe2xldCBuPWsuc2lnbk5vdFplcm8oZS56KSxvPXpuLk5PUlRIX1BPTEVfVEFOR0VOVF9QTEFORSxhPXpuLlNPVVRIX1BPTEU7bjwwJiYobz16bi5TT1VUSF9QT0xFX1RBTkdFTlRfUExBTkUsYT16bi5OT1JUSF9QT0xFKTtsZXQgcj1SRjtyLm9yaWdpbj1vLmVsbGlwc29pZC5zY2FsZVRvR2VvY2VudHJpY1N1cmZhY2UoZSxyLm9yaWdpbiksci5kaXJlY3Rpb249cy5zdWJ0cmFjdChyLm9yaWdpbixhLHhGKSxzLm5vcm1hbGl6ZShyLmRpcmVjdGlvbixyLmRpcmVjdGlvbik7bGV0IGk9bm8ucmF5UGxhbmUocixvLnBsYW5lLE9GKSxmPXMuc3VidHJhY3QoaSxhLGkpLGQ9cy5kb3Qoby54QXhpcyxmKSxjPW4qcy5kb3Qoby55QXhpcyxmKTtyZXR1cm4gZyh0KT8odC5wb3NpdGlvbj1uZXcgWShkLGMpLHQudGFuZ2VudFBsYW5lPW8sdCk6bmV3IHpuKG5ldyBZKGQsYyksbyl9O3puLmZyb21DYXJ0ZXNpYW5BcnJheT1mdW5jdGlvbihlLHQpe2xldCBuPWUubGVuZ3RoO2codCk/dC5sZW5ndGg9bjp0PW5ldyBBcnJheShuKTtmb3IobGV0IG89MDtvPG47bysrKXRbb109em4uZnJvbUNhcnRlc2lhbihlW29dLHRbb10pO3JldHVybiB0fTt6bi5jbG9uZT1mdW5jdGlvbihlLHQpe2lmKGcoZSkpcmV0dXJuIGcodCk/KHQucG9zaXRpb249ZS5wb3NpdGlvbix0LnRhbmdlbnRQbGFuZT1lLnRhbmdlbnRQbGFuZSx0KTpuZXcgem4oZS5wb3NpdGlvbixlLnRhbmdlbnRQbGFuZSl9O3puLkhBTEZfVU5JVF9TUEhFUkU9T2JqZWN0LmZyZWV6ZShuZXcgcSguNSwuNSwuNSkpO3puLk5PUlRIX1BPTEU9T2JqZWN0LmZyZWV6ZShuZXcgcygwLDAsLjUpKTt6bi5TT1VUSF9QT0xFPU9iamVjdC5mcmVlemUobmV3IHMoMCwwLC0uNSkpO3puLk5PUlRIX1BPTEVfVEFOR0VOVF9QTEFORT1PYmplY3QuZnJlZXplKG5ldyB4byh6bi5OT1JUSF9QT0xFLHpuLkhBTEZfVU5JVF9TUEhFUkUpKTt6bi5TT1VUSF9QT0xFX1RBTkdFTlRfUExBTkU9T2JqZWN0LmZyZWV6ZShuZXcgeG8oem4uU09VVEhfUE9MRSx6bi5IQUxGX1VOSVRfU1BIRVJFKSk7dWE9em59KTtmdW5jdGlvbiBDRihlLHQsbixvKXtsZXQgcj1vLmNhcnRlc2lhblRvQ2FydG9ncmFwaGljKGUsU0YpLmhlaWdodCxpPW8uY2FydGVzaWFuVG9DYXJ0b2dyYXBoaWModCxyUik7aS5oZWlnaHQ9cixvLmNhcnRvZ3JhcGhpY1RvQ2FydGVzaWFuKGksdCk7bGV0IGY9by5jYXJ0ZXNpYW5Ub0NhcnRvZ3JhcGhpYyhuLHJSKTtmLmhlaWdodD1yLTEwMCxvLmNhcnRvZ3JhcGhpY1RvQ2FydGVzaWFuKGYsbil9ZnVuY3Rpb24gU2coZSl7bGV0IHQ9ZS52ZXJ0ZXhGb3JtYXQsbj1lLmdlb21ldHJ5LG89ZS5zaGFkb3dWb2x1bWUsYT1uLmF0dHJpYnV0ZXMucG9zaXRpb24udmFsdWVzLHI9ZyhuLmF0dHJpYnV0ZXMuc3QpP24uYXR0cmlidXRlcy5zdC52YWx1ZXM6dm9pZCAwLGk9YS5sZW5ndGgsZj1lLndhbGwsZD1lLnRvcHx8ZixjPWUuYm90dG9tfHxmO2lmKHQuc3R8fHQubm9ybWFsfHx0LnRhbmdlbnR8fHQuYml0YW5nZW50fHxvKXtsZXQgdT1lLmJvdW5kaW5nUmVjdGFuZ2xlLGw9ZS5yb3RhdGlvbkF4aXMsaD1lLnByb2plY3RUbzJkLG09ZS5lbGxpcHNvaWQsYj1lLnN0Um90YXRpb24scD1lLnBlclBvc2l0aW9uSGVpZ2h0LHk9RkY7eS54PXUueCx5Lnk9dS55O2xldCBUPXQuc3Q/bmV3IEZsb2F0MzJBcnJheSgyKihpLzMpKTp2b2lkIDAsXzt0Lm5vcm1hbCYmKHAmJmQmJiFmP189bi5hdHRyaWJ1dGVzLm5vcm1hbC52YWx1ZXM6Xz1uZXcgRmxvYXQzMkFycmF5KGkpKTtsZXQgRT10LnRhbmdlbnQ/bmV3IEZsb2F0MzJBcnJheShpKTp2b2lkIDAsdz10LmJpdGFuZ2VudD9uZXcgRmxvYXQzMkFycmF5KGkpOnZvaWQgMCxSPW8/bmV3IEZsb2F0MzJBcnJheShpKTp2b2lkIDAsUz0wLEM9MCxJPU5GLE49SUYsUD1QRixGPSEwLEE9VUYseD1MRjtpZihiIT09MCl7bGV0IFU9WmUuZnJvbUF4aXNBbmdsZShsLGIsY1IpO0E9Si5mcm9tUXVhdGVybmlvbihVLEEpLFU9WmUuZnJvbUF4aXNBbmdsZShsLC1iLGNSKSx4PUouZnJvbVF1YXRlcm5pb24oVSx4KX1lbHNlIEE9Si5jbG9uZShKLklERU5USVRZLEEpLHg9Si5jbG9uZShKLklERU5USVRZLHgpO2xldCBNPTAsdj0wO2QmJmMmJihNPWkvMix2PWkvMyxpLz0yKTtmb3IobGV0IFU9MDtVPGk7VSs9Myl7bGV0IHo9cy5mcm9tQXJyYXkoYSxVLEJGKTtpZih0LnN0JiYhZyhyKSl7bGV0IEQ9Si5tdWx0aXBseUJ5VmVjdG9yKEEseixNRik7RD1tLnNjYWxlVG9HZW9kZXRpY1N1cmZhY2UoRCxEKTtsZXQgRz1oKFtEXSxERilbMF07WS5zdWJ0cmFjdChHLHksRyk7bGV0IEg9ay5jbGFtcChHLngvdS53aWR0aCwwLDEpLE89ay5jbGFtcChHLnkvdS5oZWlnaHQsMCwxKTtjJiYoVFtTK3ZdPUgsVFtTKzErdl09TyksZCYmKFRbU109SCxUW1MrMV09TyksUys9Mn1pZih0Lm5vcm1hbHx8dC50YW5nZW50fHx0LmJpdGFuZ2VudHx8byl7bGV0IEQ9QysxLEc9QysyO2lmKGYpe2lmKFUrMzxpKXtsZXQgSD1zLmZyb21BcnJheShhLFUrMyxrRik7aWYoRil7bGV0IE89cy5mcm9tQXJyYXkoYSxVK2ksdkYpO3AmJkNGKHosSCxPLG0pLHMuc3VidHJhY3QoSCx6LEgpLHMuc3VidHJhY3QoTyx6LE8pLEk9cy5ub3JtYWxpemUocy5jcm9zcyhPLEgsSSksSSksRj0hMX1zLmVxdWFsc0Vwc2lsb24oSCx6LGsuRVBTSUxPTjEwKSYmKEY9ITApfSh0LnRhbmdlbnR8fHQuYml0YW5nZW50KSYmKFA9bS5nZW9kZXRpY1N1cmZhY2VOb3JtYWwoeixQKSx0LnRhbmdlbnQmJihOPXMubm9ybWFsaXplKHMuY3Jvc3MoUCxJLE4pLE4pKSl9ZWxzZSBJPW0uZ2VvZGV0aWNTdXJmYWNlTm9ybWFsKHosSSksKHQudGFuZ2VudHx8dC5iaXRhbmdlbnQpJiYocCYmKGpoPXMuZnJvbUFycmF5KF8sQyxqaCkseXI9cy5jcm9zcyhzLlVOSVRfWixqaCx5cikseXI9cy5ub3JtYWxpemUoSi5tdWx0aXBseUJ5VmVjdG9yKHgseXIseXIpLHlyKSx0LmJpdGFuZ2VudCYmKFBzPXMubm9ybWFsaXplKHMuY3Jvc3MoamgseXIsUHMpLFBzKSkpLE49cy5jcm9zcyhzLlVOSVRfWixJLE4pLE49cy5ub3JtYWxpemUoSi5tdWx0aXBseUJ5VmVjdG9yKHgsTixOKSxOKSx0LmJpdGFuZ2VudCYmKFA9cy5ub3JtYWxpemUocy5jcm9zcyhJLE4sUCksUCkpKTt0Lm5vcm1hbCYmKGUud2FsbD8oX1tDK01dPUkueCxfW0QrTV09SS55LF9bRytNXT1JLnopOmMmJihfW0MrTV09LUkueCxfW0QrTV09LUkueSxfW0crTV09LUkueiksKGQmJiFwfHxmKSYmKF9bQ109SS54LF9bRF09SS55LF9bR109SS56KSksbyYmKGYmJihJPW0uZ2VvZGV0aWNTdXJmYWNlTm9ybWFsKHosSSkpLFJbQytNXT0tSS54LFJbRCtNXT0tSS55LFJbRytNXT0tSS56KSx0LnRhbmdlbnQmJihlLndhbGw/KEVbQytNXT1OLngsRVtEK01dPU4ueSxFW0crTV09Ti56KTpjJiYoRVtDK01dPS1OLngsRVtEK01dPS1OLnksRVtHK01dPS1OLnopLGQmJihwPyhFW0NdPXlyLngsRVtEXT15ci55LEVbR109eXIueik6KEVbQ109Ti54LEVbRF09Ti55LEVbR109Ti56KSkpLHQuYml0YW5nZW50JiYoYyYmKHdbQytNXT1QLngsd1tEK01dPVAueSx3W0crTV09UC56KSxkJiYocD8od1tDXT1Qcy54LHdbRF09UHMueSx3W0ddPVBzLnopOih3W0NdPVAueCx3W0RdPVAueSx3W0ddPVAueikpKSxDKz0zfX10LnN0JiYhZyhyKSYmKG4uYXR0cmlidXRlcy5zdD1uZXcgaWUoe2NvbXBvbmVudERhdGF0eXBlOm5lLkZMT0FULGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Mix2YWx1ZXM6VH0pKSx0Lm5vcm1hbCYmKG4uYXR0cmlidXRlcy5ub3JtYWw9bmV3IGllKHtjb21wb25lbnREYXRhdHlwZTpuZS5GTE9BVCxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOl99KSksdC50YW5nZW50JiYobi5hdHRyaWJ1dGVzLnRhbmdlbnQ9bmV3IGllKHtjb21wb25lbnREYXRhdHlwZTpuZS5GTE9BVCxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOkV9KSksdC5iaXRhbmdlbnQmJihuLmF0dHJpYnV0ZXMuYml0YW5nZW50PW5ldyBpZSh7Y29tcG9uZW50RGF0YXR5cGU6bmUuRkxPQVQsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczp3fSkpLG8mJihuLmF0dHJpYnV0ZXMuZXh0cnVkZURpcmVjdGlvbj1uZXcgaWUoe2NvbXBvbmVudERhdGF0eXBlOm5lLkZMT0FULGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6Un0pKX1pZihlLmV4dHJ1ZGUmJmcoZS5vZmZzZXRBdHRyaWJ1dGUpKXtsZXQgdT1hLmxlbmd0aC8zLGw9bmV3IFVpbnQ4QXJyYXkodSk7aWYoZS5vZmZzZXRBdHRyaWJ1dGU9PT1zdC5UT1ApZCYmY3x8Zj9sPWwuZmlsbCgxLDAsdS8yKTpkJiYobD1sLmZpbGwoMSkpO2Vsc2V7bGV0IGg9ZS5vZmZzZXRBdHRyaWJ1dGU9PT1zdC5OT05FPzA6MTtsPWwuZmlsbChoKX1uLmF0dHJpYnV0ZXMuYXBwbHlPZmZzZXQ9bmV3IGllKHtjb21wb25lbnREYXRhdHlwZTpuZS5VTlNJR05FRF9CWVRFLGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6MSx2YWx1ZXM6bH0pfXJldHVybiBufWZ1bmN0aW9uIGpGKGUsdCxuLG8sYSxyLGksZixkLGMpe2xldCB1PXt3YWxsczpbXX0sbDtpZihpfHxmKXtsZXQgXz1sdC5jcmVhdGVHZW9tZXRyeUZyb21Qb3NpdGlvbnMoZSx0LG4sbyxyLGQsYyksRT1fLmF0dHJpYnV0ZXMucG9zaXRpb24udmFsdWVzLHc9Xy5pbmRpY2VzLFIsUztpZihpJiZmKXtsZXQgQz1FLmNvbmNhdChFKTtSPUMubGVuZ3RoLzMsUz1rZS5jcmVhdGVUeXBlZEFycmF5KFIsdy5sZW5ndGgqMiksUy5zZXQodyk7bGV0IEk9dy5sZW5ndGgsTj1SLzI7Zm9yKGw9MDtsPEk7bCs9Myl7bGV0IFA9U1tsXStOLEY9U1tsKzFdK04sQT1TW2wrMl0rTjtTW2wrSV09QSxTW2wrMStJXT1GLFNbbCsyK0ldPVB9aWYoXy5hdHRyaWJ1dGVzLnBvc2l0aW9uLnZhbHVlcz1DLHImJmQubm9ybWFsKXtsZXQgUD1fLmF0dHJpYnV0ZXMubm9ybWFsLnZhbHVlcztfLmF0dHJpYnV0ZXMubm9ybWFsLnZhbHVlcz1uZXcgRmxvYXQzMkFycmF5KEMubGVuZ3RoKSxfLmF0dHJpYnV0ZXMubm9ybWFsLnZhbHVlcy5zZXQoUCl9aWYoZC5zdCYmZyhuKSl7bGV0IFA9Xy5hdHRyaWJ1dGVzLnN0LnZhbHVlcztfLmF0dHJpYnV0ZXMuc3QudmFsdWVzPW5ldyBGbG9hdDMyQXJyYXkoUioyKSxfLmF0dHJpYnV0ZXMuc3QudmFsdWVzPVAuY29uY2F0KFApfV8uaW5kaWNlcz1TfWVsc2UgaWYoZil7Zm9yKFI9RS5sZW5ndGgvMyxTPWtlLmNyZWF0ZVR5cGVkQXJyYXkoUix3Lmxlbmd0aCksbD0wO2w8dy5sZW5ndGg7bCs9MylTW2xdPXdbbCsyXSxTW2wrMV09d1tsKzFdLFNbbCsyXT13W2xdO18uaW5kaWNlcz1TfXUudG9wQW5kQm90dG9tPW5ldyBwbyh7Z2VvbWV0cnk6X30pfWxldCBoPWEub3V0ZXJSaW5nLG09eG8uZnJvbVBvaW50cyhoLGUpLGI9bS5wcm9qZWN0UG9pbnRzT250b1BsYW5lKGgsc1IpLHA9U3QuY29tcHV0ZVdpbmRpbmdPcmRlcjJEKGIpO3A9PT12by5DTE9DS1dJU0UmJihoPWguc2xpY2UoKS5yZXZlcnNlKCkpO2xldCB5PWx0LmNvbXB1dGVXYWxsR2VvbWV0cnkoaCxuLGUsbyxyLGMpO3Uud2FsbHMucHVzaChuZXcgcG8oe2dlb21ldHJ5Onl9KSk7bGV0IFQ9YS5ob2xlcztmb3IobD0wO2w8VC5sZW5ndGg7bCsrKXtsZXQgXz1UW2xdO2I9bS5wcm9qZWN0UG9pbnRzT250b1BsYW5lKF8sc1IpLHA9U3QuY29tcHV0ZVdpbmRpbmdPcmRlcjJEKGIpLHA9PT12by5DT1VOVEVSX0NMT0NLV0lTRSYmKF89Xy5zbGljZSgpLnJldmVyc2UoKSkseT1sdC5jb21wdXRlV2FsbEdlb21ldHJ5KF8sbixlLG8scixjKSx1LndhbGxzLnB1c2gobmV3IHBvKHtnZW9tZXRyeTp5fSkpfXJldHVybiB1fWZ1bmN0aW9uIE5hKGUpe2xldCB0PWUucG9seWdvbkhpZXJhcmNoeSxuPWUudmVydGV4Rm9ybWF0Pz9oZS5ERUZBVUxULG89ZS5lbGxpcHNvaWQ/P3EuZGVmYXVsdCxhPWUuZ3JhbnVsYXJpdHk/P2suUkFESUFOU19QRVJfREVHUkVFLHI9ZS5zdFJvdGF0aW9uPz8wLGk9ZS50ZXh0dXJlQ29vcmRpbmF0ZXMsZj1lLnBlclBvc2l0aW9uSGVpZ2h0Pz8hMSxkPWYmJmcoZS5leHRydWRlZEhlaWdodCksYz1lLmhlaWdodD8/MCx1PWUuZXh0cnVkZWRIZWlnaHQ/P2M7aWYoIWQpe2xldCBsPU1hdGgubWF4KGMsdSk7dT1NYXRoLm1pbihjLHUpLGM9bH10aGlzLl92ZXJ0ZXhGb3JtYXQ9aGUuY2xvbmUobiksdGhpcy5fZWxsaXBzb2lkPXEuY2xvbmUobyksdGhpcy5fZ3JhbnVsYXJpdHk9YSx0aGlzLl9zdFJvdGF0aW9uPXIsdGhpcy5faGVpZ2h0PWMsdGhpcy5fZXh0cnVkZWRIZWlnaHQ9dSx0aGlzLl9jbG9zZVRvcD1lLmNsb3NlVG9wPz8hMCx0aGlzLl9jbG9zZUJvdHRvbT1lLmNsb3NlQm90dG9tPz8hMCx0aGlzLl9wb2x5Z29uSGllcmFyY2h5PXQsdGhpcy5fcGVyUG9zaXRpb25IZWlnaHQ9Zix0aGlzLl9wZXJQb3NpdGlvbkhlaWdodEV4dHJ1ZGU9ZCx0aGlzLl9zaGFkb3dWb2x1bWU9ZS5zaGFkb3dWb2x1bWU/PyExLHRoaXMuX3dvcmtlck5hbWU9ImNyZWF0ZVBvbHlnb25HZW9tZXRyeSIsdGhpcy5fb2Zmc2V0QXR0cmlidXRlPWUub2Zmc2V0QXR0cmlidXRlLHRoaXMuX2FyY1R5cGU9ZS5hcmNUeXBlPz93dC5HRU9ERVNJQyx0aGlzLl9yZWN0YW5nbGU9dm9pZCAwLHRoaXMuX3RleHR1cmVDb29yZGluYXRlUm90YXRpb25Qb2ludHM9dm9pZCAwLHRoaXMuX3RleHR1cmVDb29yZGluYXRlcz1pLHRoaXMucGFja2VkTGVuZ3RoPWx0LmNvbXB1dGVIaWVyYXJjaHlQYWNrZWRMZW5ndGgodCxzKStxLnBhY2tlZExlbmd0aCtoZS5wYWNrZWRMZW5ndGgrKGk/bHQuY29tcHV0ZUhpZXJhcmNoeVBhY2tlZExlbmd0aChpLFkpOjEpKzEyfWZ1bmN0aW9uIGZSKGUsdCxuLG8sYSxyKXtsZXQgaT1lLmxvbmdpdHVkZSxmPWk+PTA/aTppK2suVFdPX1BJO2Eud2VzdE92ZXJJZGw9TWF0aC5taW4oYS53ZXN0T3ZlcklkbCxmKSxhLmVhc3RPdmVySWRsPU1hdGgubWF4KGEuZWFzdE92ZXJJZGwsZiksci53ZXN0PU1hdGgubWluKHIud2VzdCxpKSxyLmVhc3Q9TWF0aC5tYXgoci5lYXN0LGkpO2xldCBkPWUuZ2V0TGF0aXR1ZGUobiksYz1kO2lmKHIuc291dGg9TWF0aC5taW4oci5zb3V0aCxkKSxyLm5vcnRoPU1hdGgubWF4KHIubm9ydGgsZCksbyE9PXd0LlJIVU1CKXtsZXQgaD1ZLnN1YnRyYWN0KHQucG9zaXRpb24sZS5wb3NpdGlvbixIRiksbT1ZLmRvdCh0LnBvc2l0aW9uLGgpL1kuZG90KGgsaCk7aWYobT4wJiZtPDEpe2xldCBiPVkuYWRkKHQucG9zaXRpb24sWS5tdWx0aXBseUJ5U2NhbGFyKGgsLW0saCksS0YpLHA9dWEuY2xvbmUodCxxRik7cC5wb3NpdGlvbj1iO2xldCB5PXAuZ2V0TGF0aXR1ZGUobik7ci5zb3V0aD1NYXRoLm1pbihyLnNvdXRoLHkpLHIubm9ydGg9TWF0aC5tYXgoci5ub3J0aCx5KSxNYXRoLmFicyhkKT5NYXRoLmFicyh5KSYmKGM9eSl9fWxldCB1PXQueCplLnktZS54KnQueSxsPU1hdGguc2lnbih1KTtsIT09MCYmKGwqPVkuYW5nbGVCZXR3ZWVuKHQucG9zaXRpb24sZS5wb3NpdGlvbikpLGM+PTAmJihhLm5vcnRoQW5nbGUrPWwpLGM8PTAmJihhLnNvdXRoQW5nbGUrPWwpfWZ1bmN0aW9uIFlGKGUsdCxuKXtyZXR1cm4gZS5oZWlnaHQ+PWsuUEl8fGUud2lkdGg+PWsuUEk/dWEuZnJvbUNhcnRlc2lhbih0WzBdLFhGKS50YW5nZW50UGxhbmU6eG8uZnJvbVBvaW50cyh0LG4pfWZ1bmN0aW9uIEpGKGUsdCxuKXtyZXR1cm4obyxhKT0+e2lmKGUuaGVpZ2h0Pj1rLlBJfHxlLndpZHRoPj1rLlBJKXtpZihlLnNvdXRoPDAmJmUubm9ydGg+MCl7ZyhhKXx8KGE9W10pO2ZvcihsZXQgaT0wO2k8by5sZW5ndGg7KytpKXtsZXQgZj1uLmNhcnRlc2lhblRvQ2FydG9ncmFwaGljKG9baV0sdVIpO2FbaV09bmV3IFkoZi5sb25naXR1ZGUvay5QSSxmLmxhdGl0dWRlL2suUElfT1ZFUl9UV08pfXJldHVybiBhLmxlbmd0aD1vLmxlbmd0aCxhfXJldHVybiB1YS5mcm9tQ2FydGVzaWFuQXJyYXkobyxhKX1yZXR1cm4geG8uZnJvbVBvaW50cyh0LG4pLnByb2plY3RQb2ludHNPbnRvUGxhbmUobyxhKX19ZnVuY3Rpb24gWkYoZSx0LG4pe2lmKGUuaGVpZ2h0Pj1rLlBJfHxlLndpZHRoPj1rLlBJKXJldHVybihhLHIpPT57aWYoZS5zb3V0aDwwJiZlLm5vcnRoPjApe2xldCBpPW4uY2FydGVzaWFuVG9DYXJ0b2dyYXBoaWMoYSx1Uik7cmV0dXJuIGcocil8fChyPW5ldyBZKSxyLng9aS5sb25naXR1ZGUvay5QSSxyLnk9aS5sYXRpdHVkZS9rLlBJX09WRVJfVFdPLHJ9cmV0dXJuIHVhLmZyb21DYXJ0ZXNpYW4oYSxyKX07bGV0IG89eG8uZnJvbVBvaW50cyh0LG4pO3JldHVybihhLHIpPT5vLnByb2plY3RQb2ludHNPbnRvUGxhbmUoYSxyKX1mdW5jdGlvbiBRRihlLHQsbixvKXtyZXR1cm4oYSxyKT0+IW8mJihlLmhlaWdodD49ay5QSV9PVkVSX1RXT3x8ZS53aWR0aD49MiprLlBJX09WRVJfVEhSRUUpP2x0LnNwbGl0UG9seWdvbnNPbkVxdWF0b3IoYSx0LG4scik6YX1mdW5jdGlvbiAkRihlLHQsbixvKXtpZih0LmhlaWdodD49ay5QSXx8dC53aWR0aD49ay5QSSlyZXR1cm4gWWEuZnJvbVJlY3RhbmdsZSh0LHZvaWQgMCxpUik7bGV0IGE9ZSxyPXhvLmZyb21Qb2ludHMoYSxuKTtyZXR1cm4gbHQuY29tcHV0ZUJvdW5kaW5nUmVjdGFuZ2xlKHIucGxhbmUubm9ybWFsLHIucHJvamVjdFBvaW50T250b1BsYW5lLmJpbmQociksYSxvLGlSKX1mdW5jdGlvbiBlRChlKXtsZXQgdD0tZS5fc3RSb3RhdGlvbjtpZih0PT09MClyZXR1cm5bMCwwLDAsMSwxLDBdO2xldCBuPWUuX2VsbGlwc29pZCxvPWUuX3BvbHlnb25IaWVyYXJjaHkucG9zaXRpb25zLGE9ZS5yZWN0YW5nbGU7cmV0dXJuIHZlLl90ZXh0dXJlQ29vcmRpbmF0ZVJvdGF0aW9uUG9pbnRzKG8sdCxuLGEpfXZhciBTRixyUixpUixNRixORixJRixQRixrRix2RixqaCx5cixQcyxGRixERixCRixjUixVRixMRixzUix6RixHRixWRixIRixLRixxRixkUixXRixNYSxYRix1UixDZyxsUj1YKCgpPT57aGMoKTtEZigpO010KCk7anQoKTtJZSgpO1R0KCk7dnQoKTttdCgpO3NlKCk7V2UoKTtwcygpOyR0KCk7ZW4oKTtkYygpO3pvKCk7bHIoKTtubigpO0dlKCk7RG4oKTtHZigpO0phKCk7Sm8oKTtfbigpO2FSKCk7a28oKTtiYygpO1NGPW5ldyByZSxyUj1uZXcgcmU7aVI9bmV3IFlhLE1GPW5ldyBzLE5GPW5ldyBzLElGPW5ldyBzLFBGPW5ldyBzLGtGPW5ldyBzLHZGPW5ldyBzLGpoPW5ldyBzLHlyPW5ldyBzLFBzPW5ldyBzLEZGPW5ldyBZLERGPW5ldyBZLEJGPW5ldyBzLGNSPW5ldyBaZSxVRj1uZXcgSixMRj1uZXcgSjtzUj1bXTtOYS5mcm9tUG9zaXRpb25zPWZ1bmN0aW9uKGUpe2U9ZT8/Q2UuRU1QVFlfT0JKRUNUO2xldCB0PXtwb2x5Z29uSGllcmFyY2h5Ontwb3NpdGlvbnM6ZS5wb3NpdGlvbnN9LGhlaWdodDplLmhlaWdodCxleHRydWRlZEhlaWdodDplLmV4dHJ1ZGVkSGVpZ2h0LHZlcnRleEZvcm1hdDplLnZlcnRleEZvcm1hdCxzdFJvdGF0aW9uOmUuc3RSb3RhdGlvbixlbGxpcHNvaWQ6ZS5lbGxpcHNvaWQsZ3JhbnVsYXJpdHk6ZS5ncmFudWxhcml0eSxwZXJQb3NpdGlvbkhlaWdodDplLnBlclBvc2l0aW9uSGVpZ2h0LGNsb3NlVG9wOmUuY2xvc2VUb3AsY2xvc2VCb3R0b206ZS5jbG9zZUJvdHRvbSxvZmZzZXRBdHRyaWJ1dGU6ZS5vZmZzZXRBdHRyaWJ1dGUsYXJjVHlwZTplLmFyY1R5cGUsdGV4dHVyZUNvb3JkaW5hdGVzOmUudGV4dHVyZUNvb3JkaW5hdGVzfTtyZXR1cm4gbmV3IE5hKHQpfTtOYS5wYWNrPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gbj1uPz8wLG49bHQucGFja1BvbHlnb25IaWVyYXJjaHkoZS5fcG9seWdvbkhpZXJhcmNoeSx0LG4scykscS5wYWNrKGUuX2VsbGlwc29pZCx0LG4pLG4rPXEucGFja2VkTGVuZ3RoLGhlLnBhY2soZS5fdmVydGV4Rm9ybWF0LHQsbiksbis9aGUucGFja2VkTGVuZ3RoLHRbbisrXT1lLl9oZWlnaHQsdFtuKytdPWUuX2V4dHJ1ZGVkSGVpZ2h0LHRbbisrXT1lLl9ncmFudWxhcml0eSx0W24rK109ZS5fc3RSb3RhdGlvbix0W24rK109ZS5fcGVyUG9zaXRpb25IZWlnaHRFeHRydWRlPzE6MCx0W24rK109ZS5fcGVyUG9zaXRpb25IZWlnaHQ/MTowLHRbbisrXT1lLl9jbG9zZVRvcD8xOjAsdFtuKytdPWUuX2Nsb3NlQm90dG9tPzE6MCx0W24rK109ZS5fc2hhZG93Vm9sdW1lPzE6MCx0W24rK109ZS5fb2Zmc2V0QXR0cmlidXRlPz8tMSx0W24rK109ZS5fYXJjVHlwZSxnKGUuX3RleHR1cmVDb29yZGluYXRlcyk/bj1sdC5wYWNrUG9seWdvbkhpZXJhcmNoeShlLl90ZXh0dXJlQ29vcmRpbmF0ZXMsdCxuLFkpOnRbbisrXT0tMSx0W24rK109ZS5wYWNrZWRMZW5ndGgsdH07ekY9cS5jbG9uZShxLlVOSVRfU1BIRVJFKSxHRj1uZXcgaGUsVkY9e3BvbHlnb25IaWVyYXJjaHk6e319O05hLnVucGFjaz1mdW5jdGlvbihlLHQsbil7dD10Pz8wO2xldCBvPWx0LnVucGFja1BvbHlnb25IaWVyYXJjaHkoZSx0LHMpO3Q9by5zdGFydGluZ0luZGV4LGRlbGV0ZSBvLnN0YXJ0aW5nSW5kZXg7bGV0IGE9cS51bnBhY2soZSx0LHpGKTt0Kz1xLnBhY2tlZExlbmd0aDtsZXQgcj1oZS51bnBhY2soZSx0LEdGKTt0Kz1oZS5wYWNrZWRMZW5ndGg7bGV0IGk9ZVt0KytdLGY9ZVt0KytdLGQ9ZVt0KytdLGM9ZVt0KytdLHU9ZVt0KytdPT09MSxsPWVbdCsrXT09PTEsaD1lW3QrK109PT0xLG09ZVt0KytdPT09MSxiPWVbdCsrXT09PTEscD1lW3QrK10seT1lW3QrK10sVD1lW3RdPT09LTE/dm9pZCAwOmx0LnVucGFja1BvbHlnb25IaWVyYXJjaHkoZSx0LFkpO2coVCk/KHQ9VC5zdGFydGluZ0luZGV4LGRlbGV0ZSBULnN0YXJ0aW5nSW5kZXgpOnQrKztsZXQgXz1lW3QrK107cmV0dXJuIGcobil8fChuPW5ldyBOYShWRikpLG4uX3BvbHlnb25IaWVyYXJjaHk9byxuLl9lbGxpcHNvaWQ9cS5jbG9uZShhLG4uX2VsbGlwc29pZCksbi5fdmVydGV4Rm9ybWF0PWhlLmNsb25lKHIsbi5fdmVydGV4Rm9ybWF0KSxuLl9oZWlnaHQ9aSxuLl9leHRydWRlZEhlaWdodD1mLG4uX2dyYW51bGFyaXR5PWQsbi5fc3RSb3RhdGlvbj1jLG4uX3BlclBvc2l0aW9uSGVpZ2h0RXh0cnVkZT11LG4uX3BlclBvc2l0aW9uSGVpZ2h0PWwsbi5fY2xvc2VUb3A9aCxuLl9jbG9zZUJvdHRvbT1tLG4uX3NoYWRvd1ZvbHVtZT1iLG4uX29mZnNldEF0dHJpYnV0ZT1wPT09LTE/dm9pZCAwOnAsbi5fYXJjVHlwZT15LG4uX3RleHR1cmVDb29yZGluYXRlcz1ULG4ucGFja2VkTGVuZ3RoPV8sbn07SEY9bmV3IFksS0Y9bmV3IFkscUY9bmV3IHVhO2RSPW5ldyB1YSxXRj1uZXcgdWEsTWE9e25vcnRoQW5nbGU6MCxzb3V0aEFuZ2xlOjAsd2VzdE92ZXJJZGw6MCxlYXN0T3ZlcklkbDowfTtOYS5jb21wdXRlUmVjdGFuZ2xlRnJvbVBvc2l0aW9ucz1mdW5jdGlvbihlLHQsbixvKXtpZihnKG8pfHwobz1uZXcgU2UpLGUubGVuZ3RoPDMpcmV0dXJuIG87by53ZXN0PU51bWJlci5QT1NJVElWRV9JTkZJTklUWSxvLmVhc3Q9TnVtYmVyLk5FR0FUSVZFX0lORklOSVRZLG8uc291dGg9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLG8ubm9ydGg9TnVtYmVyLk5FR0FUSVZFX0lORklOSVRZLE1hLm5vcnRoQW5nbGU9MCxNYS5zb3V0aEFuZ2xlPTAsTWEud2VzdE92ZXJJZGw9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLE1hLmVhc3RPdmVySWRsPU51bWJlci5ORUdBVElWRV9JTkZJTklUWTtsZXQgYT1lLmxlbmd0aCxyPXVhLmZyb21DYXJ0ZXNpYW4oZVswXSxXRik7Zm9yKGxldCBpPTE7aTxhO2krKyl7bGV0IGY9dWEuZnJvbUNhcnRlc2lhbihlW2ldLGRSKTtmUihmLHIsdCxuLE1hLG8pLHI9dWEuY2xvbmUoZixyKX1yZXR1cm4gZlIodWEuZnJvbUNhcnRlc2lhbihlWzBdLGRSKSxyLHQsbixNYSxvKSxvLmVhc3Qtby53ZXN0Pk1hLmVhc3RPdmVySWRsLU1hLndlc3RPdmVySWRsJiYoby53ZXN0PU1hLndlc3RPdmVySWRsLG8uZWFzdD1NYS5lYXN0T3ZlcklkbCxvLmVhc3Q+ay5QSSYmKG8uZWFzdD1vLmVhc3Qtay5UV09fUEkpLG8ud2VzdD5rLlBJJiYoby53ZXN0PW8ud2VzdC1rLlRXT19QSSkpLGsuZXF1YWxzRXBzaWxvbihNYXRoLmFicyhNYS5ub3J0aEFuZ2xlKSxrLlRXT19QSSxrLkVQU0lMT04xMCkmJihvLm5vcnRoPWsuUElfT1ZFUl9UV08sby5lYXN0PWsuUEksby53ZXN0PS1rLlBJKSxrLmVxdWFsc0Vwc2lsb24oTWF0aC5hYnMoTWEuc291dGhBbmdsZSksay5UV09fUEksay5FUFNJTE9OMTApJiYoby5zb3V0aD0tay5QSV9PVkVSX1RXTyxvLmVhc3Q9ay5QSSxvLndlc3Q9LWsuUEkpLG99O1hGPW5ldyB1YTt1Uj1uZXcgcmU7TmEuY3JlYXRlR2VvbWV0cnk9ZnVuY3Rpb24oZSl7bGV0IHQ9ZS5fdmVydGV4Rm9ybWF0LG49ZS5fZWxsaXBzb2lkLG89ZS5fZ3JhbnVsYXJpdHksYT1lLl9zdFJvdGF0aW9uLHI9ZS5fcG9seWdvbkhpZXJhcmNoeSxpPWUuX3BlclBvc2l0aW9uSGVpZ2h0LGY9ZS5fY2xvc2VUb3AsZD1lLl9jbG9zZUJvdHRvbSxjPWUuX2FyY1R5cGUsdT1lLl90ZXh0dXJlQ29vcmRpbmF0ZXMsbD1nKHUpLGg9ci5wb3NpdGlvbnM7aWYoaC5sZW5ndGg8MylyZXR1cm47bGV0IG09ZS5yZWN0YW5nbGUsYj1sdC5wb2x5Z29uc0Zyb21IaWVyYXJjaHkocixsLEpGKG0saCxuKSwhaSxuLFFGKG0sbixjLGkpKSxwPWIuaGllcmFyY2h5LHk9Yi5wb2x5Z29ucyxUPWZ1bmN0aW9uKE0pe3JldHVybiBNfSxfPWw/bHQucG9seWdvbnNGcm9tSGllcmFyY2h5KHUsITAsVCwhMSxuKS5wb2x5Z29uczp2b2lkIDA7aWYocC5sZW5ndGg9PT0wKXJldHVybjtsZXQgRT1wWzBdLm91dGVyUmluZyx3PSRGKEUsbSxuLGEpLFI9W10sUz1lLl9oZWlnaHQsQz1lLl9leHRydWRlZEhlaWdodCxJPWUuX3BlclBvc2l0aW9uSGVpZ2h0RXh0cnVkZXx8IWsuZXF1YWxzRXBzaWxvbihTLEMsMCxrLkVQU0lMT04yKSxOPXtwZXJQb3NpdGlvbkhlaWdodDppLHZlcnRleEZvcm1hdDp0LGdlb21ldHJ5OnZvaWQgMCxyb3RhdGlvbkF4aXM6WUYobSxFLG4pLnBsYW5lLm5vcm1hbCxwcm9qZWN0VG8yZDpaRihtLEUsbiksYm91bmRpbmdSZWN0YW5nbGU6dyxlbGxpcHNvaWQ6bixzdFJvdGF0aW9uOmEsdGV4dHVyZUNvb3JkaW5hdGVzOnZvaWQgMCxib3R0b206ITEsdG9wOiEwLHdhbGw6ITEsZXh0cnVkZTohMSxhcmNUeXBlOmN9LFA7aWYoSSlmb3IoTi5leHRydWRlPSEwLE4udG9wPWYsTi5ib3R0b209ZCxOLnNoYWRvd1ZvbHVtZT1lLl9zaGFkb3dWb2x1bWUsTi5vZmZzZXRBdHRyaWJ1dGU9ZS5fb2Zmc2V0QXR0cmlidXRlLFA9MDtQPHkubGVuZ3RoO1ArKyl7bGV0IE09akYobix5W1BdLGw/X1tQXTp2b2lkIDAsbyxwW1BdLGksZixkLHQsYyksdjtmJiZkPyh2PU0udG9wQW5kQm90dG9tLE4uZ2VvbWV0cnk9bHQuc2NhbGVUb0dlb2RldGljSGVpZ2h0RXh0cnVkZWQodi5nZW9tZXRyeSxTLEMsbixpKSk6Zj8odj1NLnRvcEFuZEJvdHRvbSx2Lmdlb21ldHJ5LmF0dHJpYnV0ZXMucG9zaXRpb24udmFsdWVzPVN0LnNjYWxlVG9HZW9kZXRpY0hlaWdodCh2Lmdlb21ldHJ5LmF0dHJpYnV0ZXMucG9zaXRpb24udmFsdWVzLFMsbiwhaSksTi5nZW9tZXRyeT12Lmdlb21ldHJ5KTpkJiYodj1NLnRvcEFuZEJvdHRvbSx2Lmdlb21ldHJ5LmF0dHJpYnV0ZXMucG9zaXRpb24udmFsdWVzPVN0LnNjYWxlVG9HZW9kZXRpY0hlaWdodCh2Lmdlb21ldHJ5LmF0dHJpYnV0ZXMucG9zaXRpb24udmFsdWVzLEMsbiwhMCksTi5nZW9tZXRyeT12Lmdlb21ldHJ5KSwoZnx8ZCkmJihOLndhbGw9ITEsdi5nZW9tZXRyeT1TZyhOKSxSLnB1c2godikpO2xldCBVPU0ud2FsbHM7Ti53YWxsPSEwO2ZvcihsZXQgej0wO3o8VS5sZW5ndGg7eisrKXtsZXQgRD1VW3pdO04uZ2VvbWV0cnk9bHQuc2NhbGVUb0dlb2RldGljSGVpZ2h0RXh0cnVkZWQoRC5nZW9tZXRyeSxTLEMsbixpKSxELmdlb21ldHJ5PVNnKE4pLFIucHVzaChEKX19ZWxzZSBmb3IoUD0wO1A8eS5sZW5ndGg7UCsrKXtsZXQgTT1uZXcgcG8oe2dlb21ldHJ5Omx0LmNyZWF0ZUdlb21ldHJ5RnJvbVBvc2l0aW9ucyhuLHlbUF0sbD9fW1BdOnZvaWQgMCxvLGksdCxjKX0pO2lmKE0uZ2VvbWV0cnkuYXR0cmlidXRlcy5wb3NpdGlvbi52YWx1ZXM9U3Quc2NhbGVUb0dlb2RldGljSGVpZ2h0KE0uZ2VvbWV0cnkuYXR0cmlidXRlcy5wb3NpdGlvbi52YWx1ZXMsUyxuLCFpKSxOLmdlb21ldHJ5PU0uZ2VvbWV0cnksTS5nZW9tZXRyeT1TZyhOKSxnKGUuX29mZnNldEF0dHJpYnV0ZSkpe2xldCB2PU0uZ2VvbWV0cnkuYXR0cmlidXRlcy5wb3NpdGlvbi52YWx1ZXMubGVuZ3RoLFU9ZS5fb2Zmc2V0QXR0cmlidXRlPT09c3QuTk9ORT8wOjEsej1uZXcgVWludDhBcnJheSh2LzMpLmZpbGwoVSk7TS5nZW9tZXRyeS5hdHRyaWJ1dGVzLmFwcGx5T2Zmc2V0PW5ldyBpZSh7Y29tcG9uZW50RGF0YXR5cGU6bmUuVU5TSUdORURfQllURSxjb21wb25lbnRzUGVyQXR0cmlidXRlOjEsdmFsdWVzOnp9KX1SLnB1c2goTSl9bGV0IEY9SHQuY29tYmluZUluc3RhbmNlcyhSKVswXTtGLmF0dHJpYnV0ZXMucG9zaXRpb24udmFsdWVzPW5ldyBGbG9hdDY0QXJyYXkoRi5hdHRyaWJ1dGVzLnBvc2l0aW9uLnZhbHVlcyksRi5pbmRpY2VzPWtlLmNyZWF0ZVR5cGVkQXJyYXkoRi5hdHRyaWJ1dGVzLnBvc2l0aW9uLnZhbHVlcy5sZW5ndGgvMyxGLmluZGljZXMpO2xldCBBPUYuYXR0cmlidXRlcyx4PWdlLmZyb21WZXJ0aWNlcyhBLnBvc2l0aW9uLnZhbHVlcyk7cmV0dXJuIHQucG9zaXRpb258fGRlbGV0ZSBBLnBvc2l0aW9uLG5ldyB2ZSh7YXR0cmlidXRlczpBLGluZGljZXM6Ri5pbmRpY2VzLHByaW1pdGl2ZVR5cGU6Ri5wcmltaXRpdmVUeXBlLGJvdW5kaW5nU3BoZXJlOngsb2Zmc2V0QXR0cmlidXRlOmUuX29mZnNldEF0dHJpYnV0ZX0pfTtOYS5jcmVhdGVTaGFkb3dWb2x1bWU9ZnVuY3Rpb24oZSx0LG4pe2xldCBvPWUuX2dyYW51bGFyaXR5LGE9ZS5fZWxsaXBzb2lkLHI9dChvLGEpLGk9bihvLGEpO3JldHVybiBuZXcgTmEoe3BvbHlnb25IaWVyYXJjaHk6ZS5fcG9seWdvbkhpZXJhcmNoeSxlbGxpcHNvaWQ6YSxzdFJvdGF0aW9uOmUuX3N0Um90YXRpb24sZ3JhbnVsYXJpdHk6byxwZXJQb3NpdGlvbkhlaWdodDohMSxleHRydWRlZEhlaWdodDpyLGhlaWdodDppLHZlcnRleEZvcm1hdDpoZS5QT1NJVElPTl9PTkxZLHNoYWRvd1ZvbHVtZTohMCxhcmNUeXBlOmUuX2FyY1R5cGV9KX07T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoTmEucHJvdG90eXBlLHtyZWN0YW5nbGU6e2dldDpmdW5jdGlvbigpe2lmKCFnKHRoaXMuX3JlY3RhbmdsZSkpe2xldCBlPXRoaXMuX3BvbHlnb25IaWVyYXJjaHkucG9zaXRpb25zO3RoaXMuX3JlY3RhbmdsZT1OYS5jb21wdXRlUmVjdGFuZ2xlRnJvbVBvc2l0aW9ucyhlLHRoaXMuX2VsbGlwc29pZCx0aGlzLl9hcmNUeXBlKX1yZXR1cm4gdGhpcy5fcmVjdGFuZ2xlfX0sdGV4dHVyZUNvb3JkaW5hdGVSb3RhdGlvblBvaW50czp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGcodGhpcy5fdGV4dHVyZUNvb3JkaW5hdGVSb3RhdGlvblBvaW50cyl8fCh0aGlzLl90ZXh0dXJlQ29vcmRpbmF0ZVJvdGF0aW9uUG9pbnRzPWVEKHRoaXMpKSx0aGlzLl90ZXh0dXJlQ29vcmRpbmF0ZVJvdGF0aW9uUG9pbnRzfX19KTtDZz1OYX0pO3ZhciBNZz17fTtydChNZyx7ZGVmYXVsdDooKT0+bkR9KTtmdW5jdGlvbiB0RChlLHQpe3JldHVybiBnKHQpJiYoZT1DZy51bnBhY2soZSx0KSksZS5fZWxsaXBzb2lkPXEuY2xvbmUoZS5fZWxsaXBzb2lkKSxDZy5jcmVhdGVHZW9tZXRyeShlKX12YXIgbkQsTmc9WCgoKT0+e3NlKCk7V2UoKTtsUigpO25EPXREfSk7ZnVuY3Rpb24gb0QoZSx0LG4sbyxhKXtsZXQgaT14by5mcm9tUG9pbnRzKHQsZSkucHJvamVjdFBvaW50c09udG9QbGFuZSh0LGhSKTtTdC5jb21wdXRlV2luZGluZ09yZGVyMkQoaSk9PT12by5DTE9DS1dJU0UmJihpLnJldmVyc2UoKSx0PXQuc2xpY2UoKS5yZXZlcnNlKCkpO2xldCBkLGMsdT10Lmxlbmd0aCxsPTA7aWYobylmb3IoZD1uZXcgRmxvYXQ2NEFycmF5KHUqMiozKSxjPTA7Yzx1O2MrKyl7bGV0IGI9dFtjXSxwPXRbKGMrMSkldV07ZFtsKytdPWIueCxkW2wrK109Yi55LGRbbCsrXT1iLnosZFtsKytdPXAueCxkW2wrK109cC55LGRbbCsrXT1wLnp9ZWxzZXtsZXQgYj0wO2lmKGE9PT13dC5HRU9ERVNJQylmb3IoYz0wO2M8dTtjKyspYis9bHQuc3ViZGl2aWRlTGluZUNvdW50KHRbY10sdFsoYysxKSV1XSxuKTtlbHNlIGlmKGE9PT13dC5SSFVNQilmb3IoYz0wO2M8dTtjKyspYis9bHQuc3ViZGl2aWRlUmh1bWJMaW5lQ291bnQoZSx0W2NdLHRbKGMrMSkldV0sbik7Zm9yKGQ9bmV3IEZsb2F0NjRBcnJheShiKjMpLGM9MDtjPHU7YysrKXtsZXQgcDthPT09d3QuR0VPREVTSUM/cD1sdC5zdWJkaXZpZGVMaW5lKHRbY10sdFsoYysxKSV1XSxuLHpoKTphPT09d3QuUkhVTUImJihwPWx0LnN1YmRpdmlkZVJodW1iTGluZShlLHRbY10sdFsoYysxKSV1XSxuLHpoKSk7bGV0IHk9cC5sZW5ndGg7Zm9yKGxldCBUPTA7VDx5OysrVClkW2wrK109cFtUXX19dT1kLmxlbmd0aC8zO2xldCBoPXUqMixtPWtlLmNyZWF0ZVR5cGVkQXJyYXkodSxoKTtmb3IobD0wLGM9MDtjPHUtMTtjKyspbVtsKytdPWMsbVtsKytdPWMrMTtyZXR1cm4gbVtsKytdPXUtMSxtW2wrK109MCxuZXcgcG8oe2dlb21ldHJ5Om5ldyB2ZSh7YXR0cmlidXRlczpuZXcgbnQoe3Bvc2l0aW9uOm5ldyBpZSh7Y29tcG9uZW50RGF0YXR5cGU6bmUuRE9VQkxFLGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6ZH0pfSksaW5kaWNlczptLHByaW1pdGl2ZVR5cGU6VWUuTElORVN9KX0pfWZ1bmN0aW9uIGFEKGUsdCxuLG8sYSl7bGV0IGk9eG8uZnJvbVBvaW50cyh0LGUpLnByb2plY3RQb2ludHNPbnRvUGxhbmUodCxoUik7U3QuY29tcHV0ZVdpbmRpbmdPcmRlcjJEKGkpPT09dm8uQ0xPQ0tXSVNFJiYoaS5yZXZlcnNlKCksdD10LnNsaWNlKCkucmV2ZXJzZSgpKTtsZXQgZCxjLHU9dC5sZW5ndGgsbD1uZXcgQXJyYXkodSksaD0wO2lmKG8pZm9yKGQ9bmV3IEZsb2F0NjRBcnJheSh1KjIqMyoyKSxjPTA7Yzx1OysrYyl7bFtjXT1oLzM7bGV0IHk9dFtjXSxUPXRbKGMrMSkldV07ZFtoKytdPXkueCxkW2grK109eS55LGRbaCsrXT15LnosZFtoKytdPVQueCxkW2grK109VC55LGRbaCsrXT1ULnp9ZWxzZXtsZXQgeT0wO2lmKGE9PT13dC5HRU9ERVNJQylmb3IoYz0wO2M8dTtjKyspeSs9bHQuc3ViZGl2aWRlTGluZUNvdW50KHRbY10sdFsoYysxKSV1XSxuKTtlbHNlIGlmKGE9PT13dC5SSFVNQilmb3IoYz0wO2M8dTtjKyspeSs9bHQuc3ViZGl2aWRlUmh1bWJMaW5lQ291bnQoZSx0W2NdLHRbKGMrMSkldV0sbik7Zm9yKGQ9bmV3IEZsb2F0NjRBcnJheSh5KjMqMiksYz0wO2M8dTsrK2Mpe2xbY109aC8zO2xldCBUO2E9PT13dC5HRU9ERVNJQz9UPWx0LnN1YmRpdmlkZUxpbmUodFtjXSx0WyhjKzEpJXVdLG4semgpOmE9PT13dC5SSFVNQiYmKFQ9bHQuc3ViZGl2aWRlUmh1bWJMaW5lKGUsdFtjXSx0WyhjKzEpJXVdLG4semgpKTtsZXQgXz1ULmxlbmd0aDtmb3IobGV0IEU9MDtFPF87KytFKWRbaCsrXT1UW0VdfX11PWQubGVuZ3RoLzY7bGV0IG09bC5sZW5ndGgsYj0odSoyK20pKjIscD1rZS5jcmVhdGVUeXBlZEFycmF5KHUrbSxiKTtmb3IoaD0wLGM9MDtjPHU7KytjKXBbaCsrXT1jLHBbaCsrXT0oYysxKSV1LHBbaCsrXT1jK3UscFtoKytdPShjKzEpJXUrdTtmb3IoYz0wO2M8bTtjKyspe2xldCB5PWxbY107cFtoKytdPXkscFtoKytdPXkrdX1yZXR1cm4gbmV3IHBvKHtnZW9tZXRyeTpuZXcgdmUoe2F0dHJpYnV0ZXM6bmV3IG50KHtwb3NpdGlvbjpuZXcgaWUoe2NvbXBvbmVudERhdGF0eXBlOm5lLkRPVUJMRSxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOmR9KX0pLGluZGljZXM6cCxwcmltaXRpdmVUeXBlOlVlLkxJTkVTfSl9KX1mdW5jdGlvbiBFYyhlKXtsZXQgdD1lLnBvbHlnb25IaWVyYXJjaHksbj1lLmVsbGlwc29pZD8/cS5kZWZhdWx0LG89ZS5ncmFudWxhcml0eT8/ay5SQURJQU5TX1BFUl9ERUdSRUUsYT1lLnBlclBvc2l0aW9uSGVpZ2h0Pz8hMSxyPWEmJmcoZS5leHRydWRlZEhlaWdodCksaT1lLmFyY1R5cGU/P3d0LkdFT0RFU0lDLGY9ZS5oZWlnaHQ/PzAsZD1lLmV4dHJ1ZGVkSGVpZ2h0Pz9mO2lmKCFyKXtsZXQgYz1NYXRoLm1heChmLGQpO2Q9TWF0aC5taW4oZixkKSxmPWN9dGhpcy5fZWxsaXBzb2lkPXEuY2xvbmUobiksdGhpcy5fZ3JhbnVsYXJpdHk9byx0aGlzLl9oZWlnaHQ9Zix0aGlzLl9leHRydWRlZEhlaWdodD1kLHRoaXMuX2FyY1R5cGU9aSx0aGlzLl9wb2x5Z29uSGllcmFyY2h5PXQsdGhpcy5fcGVyUG9zaXRpb25IZWlnaHQ9YSx0aGlzLl9wZXJQb3NpdGlvbkhlaWdodEV4dHJ1ZGU9cix0aGlzLl9vZmZzZXRBdHRyaWJ1dGU9ZS5vZmZzZXRBdHRyaWJ1dGUsdGhpcy5fd29ya2VyTmFtZT0iY3JlYXRlUG9seWdvbk91dGxpbmVHZW9tZXRyeSIsdGhpcy5wYWNrZWRMZW5ndGg9bHQuY29tcHV0ZUhpZXJhcmNoeVBhY2tlZExlbmd0aCh0LHMpK3EucGFja2VkTGVuZ3RoKzh9dmFyIGhSLHpoLHJELGlELElnLG1SPVgoKCk9PntoYygpO010KCk7SWUoKTt2dCgpO210KCk7c2UoKTtXZSgpO3BzKCk7JHQoKTtlbigpO3VuKCk7ZGMoKTt6bygpO2xyKCk7bm4oKTtHZSgpO0dmKCk7SmEoKTtjbigpO2JjKCk7aFI9W10semg9W107RWMucGFjaz1mdW5jdGlvbihlLHQsbil7cmV0dXJuIG49bj8/MCxuPWx0LnBhY2tQb2x5Z29uSGllcmFyY2h5KGUuX3BvbHlnb25IaWVyYXJjaHksdCxuLHMpLHEucGFjayhlLl9lbGxpcHNvaWQsdCxuKSxuKz1xLnBhY2tlZExlbmd0aCx0W24rK109ZS5faGVpZ2h0LHRbbisrXT1lLl9leHRydWRlZEhlaWdodCx0W24rK109ZS5fZ3JhbnVsYXJpdHksdFtuKytdPWUuX3BlclBvc2l0aW9uSGVpZ2h0RXh0cnVkZT8xOjAsdFtuKytdPWUuX3BlclBvc2l0aW9uSGVpZ2h0PzE6MCx0W24rK109ZS5fYXJjVHlwZSx0W24rK109ZS5fb2Zmc2V0QXR0cmlidXRlPz8tMSx0W25dPWUucGFja2VkTGVuZ3RoLHR9O3JEPXEuY2xvbmUocS5VTklUX1NQSEVSRSksaUQ9e3BvbHlnb25IaWVyYXJjaHk6e319O0VjLnVucGFjaz1mdW5jdGlvbihlLHQsbil7dD10Pz8wO2xldCBvPWx0LnVucGFja1BvbHlnb25IaWVyYXJjaHkoZSx0LHMpO3Q9by5zdGFydGluZ0luZGV4LGRlbGV0ZSBvLnN0YXJ0aW5nSW5kZXg7bGV0IGE9cS51bnBhY2soZSx0LHJEKTt0Kz1xLnBhY2tlZExlbmd0aDtsZXQgcj1lW3QrK10saT1lW3QrK10sZj1lW3QrK10sZD1lW3QrK109PT0xLGM9ZVt0KytdPT09MSx1PWVbdCsrXSxsPWVbdCsrXSxoPWVbdF07cmV0dXJuIGcobil8fChuPW5ldyBFYyhpRCkpLG4uX3BvbHlnb25IaWVyYXJjaHk9byxuLl9lbGxpcHNvaWQ9cS5jbG9uZShhLG4uX2VsbGlwc29pZCksbi5faGVpZ2h0PXIsbi5fZXh0cnVkZWRIZWlnaHQ9aSxuLl9ncmFudWxhcml0eT1mLG4uX3BlclBvc2l0aW9uSGVpZ2h0PWMsbi5fcGVyUG9zaXRpb25IZWlnaHRFeHRydWRlPWQsbi5fYXJjVHlwZT11LG4uX29mZnNldEF0dHJpYnV0ZT1sPT09LTE/dm9pZCAwOmwsbi5wYWNrZWRMZW5ndGg9aCxufTtFYy5mcm9tUG9zaXRpb25zPWZ1bmN0aW9uKGUpe2U9ZT8/Q2UuRU1QVFlfT0JKRUNUO2xldCB0PXtwb2x5Z29uSGllcmFyY2h5Ontwb3NpdGlvbnM6ZS5wb3NpdGlvbnN9LGhlaWdodDplLmhlaWdodCxleHRydWRlZEhlaWdodDplLmV4dHJ1ZGVkSGVpZ2h0LGVsbGlwc29pZDplLmVsbGlwc29pZCxncmFudWxhcml0eTplLmdyYW51bGFyaXR5LHBlclBvc2l0aW9uSGVpZ2h0OmUucGVyUG9zaXRpb25IZWlnaHQsYXJjVHlwZTplLmFyY1R5cGUsb2Zmc2V0QXR0cmlidXRlOmUub2Zmc2V0QXR0cmlidXRlfTtyZXR1cm4gbmV3IEVjKHQpfTtFYy5jcmVhdGVHZW9tZXRyeT1mdW5jdGlvbihlKXtsZXQgdD1lLl9lbGxpcHNvaWQsbj1lLl9ncmFudWxhcml0eSxvPWUuX3BvbHlnb25IaWVyYXJjaHksYT1lLl9wZXJQb3NpdGlvbkhlaWdodCxyPWUuX2FyY1R5cGUsaT1sdC5wb2x5Z29uT3V0bGluZXNGcm9tSGllcmFyY2h5KG8sIWEsdCk7aWYoaS5sZW5ndGg9PT0wKXJldHVybjtsZXQgZixkPVtdLGM9ay5jaG9yZExlbmd0aChuLHQubWF4aW11bVJhZGl1cyksdT1lLl9oZWlnaHQsbD1lLl9leHRydWRlZEhlaWdodCxoPWUuX3BlclBvc2l0aW9uSGVpZ2h0RXh0cnVkZXx8IWsuZXF1YWxzRXBzaWxvbih1LGwsMCxrLkVQU0lMT04yKSxtLGI7aWYoaClmb3IoYj0wO2I8aS5sZW5ndGg7YisrKXtpZihmPWFEKHQsaVtiXSxjLGEsciksZi5nZW9tZXRyeT1sdC5zY2FsZVRvR2VvZGV0aWNIZWlnaHRFeHRydWRlZChmLmdlb21ldHJ5LHUsbCx0LGEpLGcoZS5fb2Zmc2V0QXR0cmlidXRlKSl7bGV0IFQ9Zi5nZW9tZXRyeS5hdHRyaWJ1dGVzLnBvc2l0aW9uLnZhbHVlcy5sZW5ndGgvMyxfPW5ldyBVaW50OEFycmF5KFQpO2UuX29mZnNldEF0dHJpYnV0ZT09PXN0LlRPUD9fPV8uZmlsbCgxLDAsVC8yKToobT1lLl9vZmZzZXRBdHRyaWJ1dGU9PT1zdC5OT05FPzA6MSxfPV8uZmlsbChtKSksZi5nZW9tZXRyeS5hdHRyaWJ1dGVzLmFwcGx5T2Zmc2V0PW5ldyBpZSh7Y29tcG9uZW50RGF0YXR5cGU6bmUuVU5TSUdORURfQllURSxjb21wb25lbnRzUGVyQXR0cmlidXRlOjEsdmFsdWVzOl99KX1kLnB1c2goZil9ZWxzZSBmb3IoYj0wO2I8aS5sZW5ndGg7YisrKXtpZihmPW9EKHQsaVtiXSxjLGEsciksZi5nZW9tZXRyeS5hdHRyaWJ1dGVzLnBvc2l0aW9uLnZhbHVlcz1TdC5zY2FsZVRvR2VvZGV0aWNIZWlnaHQoZi5nZW9tZXRyeS5hdHRyaWJ1dGVzLnBvc2l0aW9uLnZhbHVlcyx1LHQsIWEpLGcoZS5fb2Zmc2V0QXR0cmlidXRlKSl7bGV0IFQ9Zi5nZW9tZXRyeS5hdHRyaWJ1dGVzLnBvc2l0aW9uLnZhbHVlcy5sZW5ndGg7bT1lLl9vZmZzZXRBdHRyaWJ1dGU9PT1zdC5OT05FPzA6MTtsZXQgXz1uZXcgVWludDhBcnJheShULzMpLmZpbGwobSk7Zi5nZW9tZXRyeS5hdHRyaWJ1dGVzLmFwcGx5T2Zmc2V0PW5ldyBpZSh7Y29tcG9uZW50RGF0YXR5cGU6bmUuVU5TSUdORURfQllURSxjb21wb25lbnRzUGVyQXR0cmlidXRlOjEsdmFsdWVzOl99KX1kLnB1c2goZil9bGV0IHA9SHQuY29tYmluZUluc3RhbmNlcyhkKVswXSx5PWdlLmZyb21WZXJ0aWNlcyhwLmF0dHJpYnV0ZXMucG9zaXRpb24udmFsdWVzKTtyZXR1cm4gbmV3IHZlKHthdHRyaWJ1dGVzOnAuYXR0cmlidXRlcyxpbmRpY2VzOnAuaW5kaWNlcyxwcmltaXRpdmVUeXBlOnAucHJpbWl0aXZlVHlwZSxib3VuZGluZ1NwaGVyZTp5LG9mZnNldEF0dHJpYnV0ZTplLl9vZmZzZXRBdHRyaWJ1dGV9KX07SWc9RWN9KTt2YXIgUGc9e307cnQoUGcse2RlZmF1bHQ6KCk9PnNEfSk7ZnVuY3Rpb24gY0QoZSx0KXtyZXR1cm4gZyh0KSYmKGU9SWcudW5wYWNrKGUsdCkpLGUuX2VsbGlwc29pZD1xLmNsb25lKGUuX2VsbGlwc29pZCksSWcuY3JlYXRlR2VvbWV0cnkoZSl9dmFyIHNELGtnPVgoKCk9PntzZSgpO1dlKCk7bVIoKTtzRD1jRH0pO2Z1bmN0aW9uIHZnKGUsdCxuKXtyZXR1cm4gbjwwJiYobis9MSksbj4xJiYobi09MSksbio2PDE/ZSsodC1lKSo2Km46bioyPDE/dDpuKjM8Mj9lKyh0LWUpKigyLzMtbikqNjplfWZ1bmN0aW9uIFYoZSx0LG4sbyl7dGhpcy5yZWQ9ZT8/MSx0aGlzLmdyZWVuPXQ/PzEsdGhpcy5ibHVlPW4/PzEsdGhpcy5hbHBoYT1vPz8xfXZhciBGZyxEZyxRcixmRCxkRCx1RCxsRCwkZSxrcz1YKCgpPT57bXQoKTtzZSgpO3ZsKCk7R2UoKTtWLmZyb21DYXJ0ZXNpYW40PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGcodCk/KHQucmVkPWUueCx0LmdyZWVuPWUueSx0LmJsdWU9ZS56LHQuYWxwaGE9ZS53LHQpOm5ldyBWKGUueCxlLnksZS56LGUudyl9O1YuZnJvbUJ5dGVzPWZ1bmN0aW9uKGUsdCxuLG8sYSl7cmV0dXJuIGU9Vi5ieXRlVG9GbG9hdChlPz8yNTUpLHQ9Vi5ieXRlVG9GbG9hdCh0Pz8yNTUpLG49Vi5ieXRlVG9GbG9hdChuPz8yNTUpLG89Vi5ieXRlVG9GbG9hdChvPz8yNTUpLGcoYSk/KGEucmVkPWUsYS5ncmVlbj10LGEuYmx1ZT1uLGEuYWxwaGE9byxhKTpuZXcgVihlLHQsbixvKX07Vi5mcm9tQWxwaGE9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBnKG4pPyhuLnJlZD1lLnJlZCxuLmdyZWVuPWUuZ3JlZW4sbi5ibHVlPWUuYmx1ZSxuLmFscGhhPXQsbik6bmV3IFYoZS5yZWQsZS5ncmVlbixlLmJsdWUsdCl9O2NyLnN1cHBvcnRzVHlwZWRBcnJheXMoKSYmKEZnPW5ldyBBcnJheUJ1ZmZlcig0KSxEZz1uZXcgVWludDMyQXJyYXkoRmcpLFFyPW5ldyBVaW50OEFycmF5KEZnKSk7Vi5mcm9tUmdiYT1mdW5jdGlvbihlLHQpe3JldHVybiBEZ1swXT1lLFYuZnJvbUJ5dGVzKFFyWzBdLFFyWzFdLFFyWzJdLFFyWzNdLHQpfTtWLmZyb21Ic2w9ZnVuY3Rpb24oZSx0LG4sbyxhKXtlPShlPz8wKSUxLHQ9dD8/MCxuPW4/PzAsbz1vPz8xO2xldCByPW4saT1uLGY9bjtpZih0IT09MCl7bGV0IGQ7bjwuNT9kPW4qKDErdCk6ZD1uK3Qtbip0O2xldCBjPTIqbi1kO3I9dmcoYyxkLGUrMS8zKSxpPXZnKGMsZCxlKSxmPXZnKGMsZCxlLTEvMyl9cmV0dXJuIGcoYSk/KGEucmVkPXIsYS5ncmVlbj1pLGEuYmx1ZT1mLGEuYWxwaGE9byxhKTpuZXcgVihyLGksZixvKX07Vi5mcm9tUmFuZG9tPWZ1bmN0aW9uKGUsdCl7ZT1lPz9DZS5FTVBUWV9PQkpFQ1Q7bGV0IG49ZS5yZWQ7aWYoIWcobikpe2xldCBpPWUubWluaW11bVJlZD8/MCxmPWUubWF4aW11bVJlZD8/MTtuPWkray5uZXh0UmFuZG9tTnVtYmVyKCkqKGYtaSl9bGV0IG89ZS5ncmVlbjtpZighZyhvKSl7bGV0IGk9ZS5taW5pbXVtR3JlZW4/PzAsZj1lLm1heGltdW1HcmVlbj8/MTtvPWkray5uZXh0UmFuZG9tTnVtYmVyKCkqKGYtaSl9bGV0IGE9ZS5ibHVlO2lmKCFnKGEpKXtsZXQgaT1lLm1pbmltdW1CbHVlPz8wLGY9ZS5tYXhpbXVtQmx1ZT8/MTthPWkray5uZXh0UmFuZG9tTnVtYmVyKCkqKGYtaSl9bGV0IHI9ZS5hbHBoYTtpZighZyhyKSl7bGV0IGk9ZS5taW5pbXVtQWxwaGE/PzAsZj1lLm1heGltdW1BbHBoYT8/MTtyPWkray5uZXh0UmFuZG9tTnVtYmVyKCkqKGYtaSl9cmV0dXJuIGcodCk/KHQucmVkPW4sdC5ncmVlbj1vLHQuYmx1ZT1hLHQuYWxwaGE9cix0KTpuZXcgVihuLG8sYSxyKX07ZkQ9L14jKFswLTlhLWZdKShbMC05YS1mXSkoWzAtOWEtZl0pKFswLTlhLWZdKT8kL2ksZEQ9L14jKFswLTlhLWZdezJ9KShbMC05YS1mXXsyfSkoWzAtOWEtZl17Mn0pKFswLTlhLWZdezJ9KT8kL2ksdUQ9L15yZ2JhP1xzKlwoXHMqKFswLTkuXSslPylccypbLFxzXStccyooWzAtOS5dKyU/KVxzKlssXHNdK1xzKihbMC05Ll0rJT8pKD86XHMqWyxccy9dK1xzKihbMC05Ll0rKSk/XHMqXCkkL2ksbEQ9L15oc2xhP1xzKlwoXHMqKFswLTkuXSspXHMqWyxcc10rXHMqKFswLTkuXSslKVxzKlssXHNdK1xzKihbMC05Ll0rJSkoPzpccypbLFxzL10rXHMqKFswLTkuXSspKT9ccypcKSQvaTtWLmZyb21Dc3NDb2xvclN0cmluZz1mdW5jdGlvbihlLHQpe2codCl8fCh0PW5ldyBWKSxlPWUudHJpbSgpO2xldCBuPVZbZS50b1VwcGVyQ2FzZSgpXTtpZihnKG4pKXJldHVybiBWLmNsb25lKG4sdCksdDtsZXQgbz1mRC5leGVjKGUpO3JldHVybiBvIT09bnVsbD8odC5yZWQ9cGFyc2VJbnQob1sxXSwxNikvMTUsdC5ncmVlbj1wYXJzZUludChvWzJdLDE2KS8xNSx0LmJsdWU9cGFyc2VJbnQob1szXSwxNikvMTUsdC5hbHBoYT1wYXJzZUludChvWzRdPz8iZiIsMTYpLzE1LHQpOihvPWRELmV4ZWMoZSksbyE9PW51bGw/KHQucmVkPXBhcnNlSW50KG9bMV0sMTYpLzI1NSx0LmdyZWVuPXBhcnNlSW50KG9bMl0sMTYpLzI1NSx0LmJsdWU9cGFyc2VJbnQob1szXSwxNikvMjU1LHQuYWxwaGE9cGFyc2VJbnQob1s0XT8/ImZmIiwxNikvMjU1LHQpOihvPXVELmV4ZWMoZSksbyE9PW51bGw/KHQucmVkPXBhcnNlRmxvYXQob1sxXSkvKG9bMV0uc3Vic3RyKC0xKT09PSIlIj8xMDA6MjU1KSx0LmdyZWVuPXBhcnNlRmxvYXQob1syXSkvKG9bMl0uc3Vic3RyKC0xKT09PSIlIj8xMDA6MjU1KSx0LmJsdWU9cGFyc2VGbG9hdChvWzNdKS8ob1szXS5zdWJzdHIoLTEpPT09IiUiPzEwMDoyNTUpLHQuYWxwaGE9cGFyc2VGbG9hdChvWzRdPz8iMS4wIiksdCk6KG89bEQuZXhlYyhlKSxvIT09bnVsbD9WLmZyb21Ic2wocGFyc2VGbG9hdChvWzFdKS8zNjAscGFyc2VGbG9hdChvWzJdKS8xMDAscGFyc2VGbG9hdChvWzNdKS8xMDAscGFyc2VGbG9hdChvWzRdPz8iMS4wIiksdCk6KHQ9dm9pZCAwLHQpKSkpfTtWLnBhY2tlZExlbmd0aD00O1YucGFjaz1mdW5jdGlvbihlLHQsbil7cmV0dXJuIG49bj8/MCx0W24rK109ZS5yZWQsdFtuKytdPWUuZ3JlZW4sdFtuKytdPWUuYmx1ZSx0W25dPWUuYWxwaGEsdH07Vi51bnBhY2s9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB0PXQ/PzAsZyhuKXx8KG49bmV3IFYpLG4ucmVkPWVbdCsrXSxuLmdyZWVuPWVbdCsrXSxuLmJsdWU9ZVt0KytdLG4uYWxwaGE9ZVt0XSxufTtWLmJ5dGVUb0Zsb2F0PWZ1bmN0aW9uKGUpe3JldHVybiBlLzI1NX07Vi5mbG9hdFRvQnl0ZT1mdW5jdGlvbihlKXtyZXR1cm4gZT09PTE/MjU1OmUqMjU2fDB9O1YuY2xvbmU9ZnVuY3Rpb24oZSx0KXtpZihnKGUpKXJldHVybiBnKHQpPyh0LnJlZD1lLnJlZCx0LmdyZWVuPWUuZ3JlZW4sdC5ibHVlPWUuYmx1ZSx0LmFscGhhPWUuYWxwaGEsdCk6bmV3IFYoZS5yZWQsZS5ncmVlbixlLmJsdWUsZS5hbHBoYSl9O1YuZXF1YWxzPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU9PT10fHxnKGUpJiZnKHQpJiZlLnJlZD09PXQucmVkJiZlLmdyZWVuPT09dC5ncmVlbiYmZS5ibHVlPT09dC5ibHVlJiZlLmFscGhhPT09dC5hbHBoYX07Vi5lcXVhbHNBcnJheT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGUucmVkPT09dFtuXSYmZS5ncmVlbj09PXRbbisxXSYmZS5ibHVlPT09dFtuKzJdJiZlLmFscGhhPT09dFtuKzNdfTtWLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbihlKXtyZXR1cm4gVi5jbG9uZSh0aGlzLGUpfTtWLnByb3RvdHlwZS5lcXVhbHM9ZnVuY3Rpb24oZSl7cmV0dXJuIFYuZXF1YWxzKHRoaXMsZSl9O1YucHJvdG90eXBlLmVxdWFsc0Vwc2lsb249ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcz09PWV8fGcoZSkmJk1hdGguYWJzKHRoaXMucmVkLWUucmVkKTw9dCYmTWF0aC5hYnModGhpcy5ncmVlbi1lLmdyZWVuKTw9dCYmTWF0aC5hYnModGhpcy5ibHVlLWUuYmx1ZSk8PXQmJk1hdGguYWJzKHRoaXMuYWxwaGEtZS5hbHBoYSk8PXR9O1YucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuYCgke3RoaXMucmVkfSwgJHt0aGlzLmdyZWVufSwgJHt0aGlzLmJsdWV9LCAke3RoaXMuYWxwaGF9KWB9O1YucHJvdG90eXBlLnRvQ3NzQ29sb3JTdHJpbmc9ZnVuY3Rpb24oKXtsZXQgZT1WLmZsb2F0VG9CeXRlKHRoaXMucmVkKSx0PVYuZmxvYXRUb0J5dGUodGhpcy5ncmVlbiksbj1WLmZsb2F0VG9CeXRlKHRoaXMuYmx1ZSk7cmV0dXJuIHRoaXMuYWxwaGE9PT0xP2ByZ2IoJHtlfSwke3R9LCR7bn0pYDpgcmdiYSgke2V9LCR7dH0sJHtufSwke3RoaXMuYWxwaGF9KWB9O1YucHJvdG90eXBlLnRvQ3NzSGV4U3RyaW5nPWZ1bmN0aW9uKCl7bGV0IGU9Vi5mbG9hdFRvQnl0ZSh0aGlzLnJlZCkudG9TdHJpbmcoMTYpO2UubGVuZ3RoPDImJihlPWAwJHtlfWApO2xldCB0PVYuZmxvYXRUb0J5dGUodGhpcy5ncmVlbikudG9TdHJpbmcoMTYpO3QubGVuZ3RoPDImJih0PWAwJHt0fWApO2xldCBuPVYuZmxvYXRUb0J5dGUodGhpcy5ibHVlKS50b1N0cmluZygxNik7aWYobi5sZW5ndGg8MiYmKG49YDAke259YCksdGhpcy5hbHBoYTwxKXtsZXQgbz1WLmZsb2F0VG9CeXRlKHRoaXMuYWxwaGEpLnRvU3RyaW5nKDE2KTtyZXR1cm4gby5sZW5ndGg8MiYmKG89YDAke299YCksYCMke2V9JHt0fSR7bn0ke299YH1yZXR1cm5gIyR7ZX0ke3R9JHtufWB9O1YucHJvdG90eXBlLnRvQnl0ZXM9ZnVuY3Rpb24oZSl7bGV0IHQ9Vi5mbG9hdFRvQnl0ZSh0aGlzLnJlZCksbj1WLmZsb2F0VG9CeXRlKHRoaXMuZ3JlZW4pLG89Vi5mbG9hdFRvQnl0ZSh0aGlzLmJsdWUpLGE9Vi5mbG9hdFRvQnl0ZSh0aGlzLmFscGhhKTtyZXR1cm4gZyhlKT8oZVswXT10LGVbMV09bixlWzJdPW8sZVszXT1hLGUpOlt0LG4sbyxhXX07Vi5ieXRlc1RvUmdiYT1mdW5jdGlvbihlLHQsbixvKXtyZXR1cm4gUXJbMF09ZSxRclsxXT10LFFyWzJdPW4sUXJbM109byxEZ1swXX07Vi5wcm90b3R5cGUudG9SZ2JhPWZ1bmN0aW9uKCl7cmV0dXJuIFYuYnl0ZXNUb1JnYmEoVi5mbG9hdFRvQnl0ZSh0aGlzLnJlZCksVi5mbG9hdFRvQnl0ZSh0aGlzLmdyZWVuKSxWLmZsb2F0VG9CeXRlKHRoaXMuYmx1ZSksVi5mbG9hdFRvQnl0ZSh0aGlzLmFscGhhKSl9O1YucHJvdG90eXBlLmJyaWdodGVuPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU9MS1lLHQucmVkPTEtKDEtdGhpcy5yZWQpKmUsdC5ncmVlbj0xLSgxLXRoaXMuZ3JlZW4pKmUsdC5ibHVlPTEtKDEtdGhpcy5ibHVlKSplLHQuYWxwaGE9dGhpcy5hbHBoYSx0fTtWLnByb3RvdHlwZS5kYXJrZW49ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT0xLWUsdC5yZWQ9dGhpcy5yZWQqZSx0LmdyZWVuPXRoaXMuZ3JlZW4qZSx0LmJsdWU9dGhpcy5ibHVlKmUsdC5hbHBoYT10aGlzLmFscGhhLHR9O1YucHJvdG90eXBlLndpdGhBbHBoYT1mdW5jdGlvbihlLHQpe3JldHVybiBWLmZyb21BbHBoYSh0aGlzLGUsdCl9O1YuYWRkPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gbi5yZWQ9ZS5yZWQrdC5yZWQsbi5ncmVlbj1lLmdyZWVuK3QuZ3JlZW4sbi5ibHVlPWUuYmx1ZSt0LmJsdWUsbi5hbHBoYT1lLmFscGhhK3QuYWxwaGEsbn07Vi5zdWJ0cmFjdD1mdW5jdGlvbihlLHQsbil7cmV0dXJuIG4ucmVkPWUucmVkLXQucmVkLG4uZ3JlZW49ZS5ncmVlbi10LmdyZWVuLG4uYmx1ZT1lLmJsdWUtdC5ibHVlLG4uYWxwaGE9ZS5hbHBoYS10LmFscGhhLG59O1YubXVsdGlwbHk9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBuLnJlZD1lLnJlZCp0LnJlZCxuLmdyZWVuPWUuZ3JlZW4qdC5ncmVlbixuLmJsdWU9ZS5ibHVlKnQuYmx1ZSxuLmFscGhhPWUuYWxwaGEqdC5hbHBoYSxufTtWLmRpdmlkZT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIG4ucmVkPWUucmVkL3QucmVkLG4uZ3JlZW49ZS5ncmVlbi90LmdyZWVuLG4uYmx1ZT1lLmJsdWUvdC5ibHVlLG4uYWxwaGE9ZS5hbHBoYS90LmFscGhhLG59O1YubW9kPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gbi5yZWQ9ZS5yZWQldC5yZWQsbi5ncmVlbj1lLmdyZWVuJXQuZ3JlZW4sbi5ibHVlPWUuYmx1ZSV0LmJsdWUsbi5hbHBoYT1lLmFscGhhJXQuYWxwaGEsbn07Vi5sZXJwPWZ1bmN0aW9uKGUsdCxuLG8pe3JldHVybiBvLnJlZD1rLmxlcnAoZS5yZWQsdC5yZWQsbiksby5ncmVlbj1rLmxlcnAoZS5ncmVlbix0LmdyZWVuLG4pLG8uYmx1ZT1rLmxlcnAoZS5ibHVlLHQuYmx1ZSxuKSxvLmFscGhhPWsubGVycChlLmFscGhhLHQuYWxwaGEsbiksb307Vi5tdWx0aXBseUJ5U2NhbGFyPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gbi5yZWQ9ZS5yZWQqdCxuLmdyZWVuPWUuZ3JlZW4qdCxuLmJsdWU9ZS5ibHVlKnQsbi5hbHBoYT1lLmFscGhhKnQsbn07Vi5kaXZpZGVCeVNjYWxhcj1mdW5jdGlvbihlLHQsbil7cmV0dXJuIG4ucmVkPWUucmVkL3Qsbi5ncmVlbj1lLmdyZWVuL3Qsbi5ibHVlPWUuYmx1ZS90LG4uYWxwaGE9ZS5hbHBoYS90LG59O1YuQUxJQ0VCTFVFPU9iamVjdC5mcmVlemUoVi5mcm9tQ3NzQ29sb3JTdHJpbmcoIiNGMEY4RkYiKSk7Vi5BTlRJUVVFV0hJVEU9T2JqZWN0LmZyZWV6ZShWLmZyb21Dc3NDb2xvclN0cmluZygiI0ZBRUJENyIpKTtWLkFRVUE9T2JqZWN0LmZyZWV6ZShWLmZyb21Dc3NDb2xvclN0cmluZygiIzAwRkZGRiIpKTtWLkFRVUFNQVJJTkU9T2JqZWN0LmZyZWV6ZShWLmZyb21Dc3NDb2xvclN0cmluZygiIzdGRkZENCIpKTtWLkFaVVJFPU9iamVjdC5mcmVlemUoVi5mcm9tQ3NzQ29sb3JTdHJpbmcoIiNGMEZGRkYiKSk7Vi5CRUlHRT1PYmplY3QuZnJlZXplKFYuZnJvbUNzc0NvbG9yU3RyaW5nKCIjRjVGNURDIikpO1YuQklTUVVFPU9iamVjdC5mcmVlemUoVi5mcm9tQ3NzQ29sb3JTdHJpbmcoIiNGRkU0QzQiKSk7Vi5CTEFDSz1PYmplY3QuZnJlZXplKFYuZnJvbUNzc0NvbG9yU3RyaW5nKCIjMDAwMDAwIikpO1YuQkxBTkNIRURBTE1PTkQ9T2JqZWN0LmZyZWV6ZShWLmZyb21Dc3NDb2xvclN0cmluZygiI0ZGRUJDRCIpKTtWLkJMVUU9T2JqZWN0LmZyZWV6ZShWLmZyb21Dc3NDb2xvclN0cmluZygiIzAwMDBGRiIpKTtWLkJMVUVWSU9MRVQ9T2JqZWN0LmZyZWV6ZShWLmZyb21Dc3NDb2xvclN0cmluZygiIzhBMkJFMiIpKTtWLkJST1dOPU9iamVjdC5mcmVlemUoVi5mcm9tQ3NzQ29sb3JTdHJpbmcoIiNBNTJBMkEiKSk7Vi5CVVJMWVdPT0Q9T2JqZWN0LmZyZWV6ZShWLmZyb21Dc3NDb2xvclN0cmluZygiI0RFQjg4NyIpKTtWLkNBREVUQkxVRT1PYmplY3QuZnJlZXplKFYuZnJvbUNzc0NvbG9yU3RyaW5nKCIjNUY5RUEwIikpO1YuQ0hBUlRSRVVTRT1PYmplY3QuZnJlZXplKFYuZnJvbUNzc0NvbG9yU3RyaW5nKCIjN0ZGRjAwIikpO1YuQ0hPQ09MQVRFPU9iamVjdC5mcmVlemUoVi5mcm9tQ3NzQ29sb3JTdHJpbmcoIiNEMjY5MUUiKSk7Vi5DT1JBTD1PYmplY3QuZnJlZXplKFYuZnJvbUNzc0NvbG9yU3RyaW5nKCIjRkY3RjUwIikpO1YuQ09STkZMT1dFUkJMVUU9T2JqZWN0LmZyZWV6ZShWLmZyb21Dc3NDb2xvclN0cmluZygiIzY0OTVFRCIpKTtWLkNPUk5TSUxLPU9iamVjdC5mcmVlemUoVi5mcm9tQ3NzQ29sb3JTdHJpbmcoIiNGRkY4REMiKSk7Vi5DUklNU09OPU9iamVjdC5mcmVlemUoVi5mcm9tQ3NzQ29sb3JTdHJpbmcoIiNEQzE0M0MiKSk7Vi5DWUFOPU9iamVjdC5mcmVlemUoVi5mcm9tQ3NzQ29sb3JTdHJpbmcoIiMwMEZGRkYiKSk7Vi5EQVJLQkxVRT1PYmplY3QuZnJlZXplKFYuZnJvbUNzc0NvbG9yU3RyaW5nKCIjMDAwMDhCIikpO1YuREFSS0NZQU49T2JqZWN0LmZyZWV6ZShWLmZyb21Dc3NDb2xvclN0cmluZygiIzAwOEI4QiIpKTtWLkRBUktHT0xERU5ST0Q9T2JqZWN0LmZyZWV6ZShWLmZyb21Dc3NDb2xvclN0cmluZygiI0I4ODYwQiIpKTtWLkRBUktHUkFZPU9iamVjdC5mcmVlemUoVi5mcm9tQ3NzQ29sb3JTdHJpbmcoIiNBOUE5QTkiKSk7Vi5EQVJLR1JFRU49T2JqZWN0LmZyZWV6ZShWLmZyb21Dc3NDb2xvclN0cmluZygiIzAwNjQwMCIpKTtWLkRBUktHUkVZPVYuREFSS0dSQVk7Vi5EQVJLS0hBS0k9T2JqZWN0LmZyZWV6ZShWLmZyb21Dc3NDb2xvclN0cmluZygiI0JEQjc2QiIpKTtWLkRBUktNQUdFTlRBPU9iamVjdC5mcmVlemUoVi5mcm9tQ3NzQ29sb3JTdHJpbmcoIiM4QjAwOEIiKSk7Vi5EQVJLT0xJVkVHUkVFTj1PYmplY3QuZnJlZXplKFYuZnJvbUNzc0NvbG9yU3RyaW5nKCIjNTU2QjJGIikpO1YuREFSS09SQU5HRT1PYmplY3QuZnJlZXplKFYuZnJvbUNzc0NvbG9yU3RyaW5nKCIjRkY4QzAwIikpO1YuREFSS09SQ0hJRD1PYmplY3QuZnJlZXplKFYuZnJvbUNzc0NvbG9yU3RyaW5nKCIjOTkzMkNDIikpO1YuREFSS1JFRD1PYmplY3QuZnJlZXplKFYuZnJvbUNzc0NvbG9yU3RyaW5nKCIjOEIwMDAwIikpO1YuREFSS1NBTE1PTj1PYmplY3QuZnJlZXplKFYuZnJvbUNzc0NvbG9yU3RyaW5nKCIjRTk5NjdBIikpO1YuREFSS1NFQUdSRUVOPU9iamVjdC5mcmVlemUoVi5mcm9tQ3NzQ29sb3JTdHJpbmcoIiM4RkJDOEYiKSk7Vi5EQVJLU0xBVEVCTFVFPU9iamVjdC5mcmVlemUoVi5mcm9tQ3NzQ29sb3JTdHJpbmcoIiM0ODNEOEIiKSk7Vi5EQVJLU0xBVEVHUkFZPU9iamVjdC5mcmVlemUoVi5mcm9tQ3NzQ29sb3JTdHJpbmcoIiMyRjRGNEYiKSk7Vi5EQVJLU0xBVEVHUkVZPVYuREFSS1NMQVRFR1JBWTtWLkRBUktUVVJRVU9JU0U9T2JqZWN0LmZyZWV6ZShWLmZyb21Dc3NDb2xvclN0cmluZygiIzAwQ0VEMSIpKTtWLkRBUktWSU9MRVQ9T2JqZWN0LmZyZWV6ZShWLmZyb21Dc3NDb2xvclN0cmluZygiIzk0MDBEMyIpKTtWLkRFRVBQSU5LPU9iamVjdC5mcmVlemUoVi5mcm9tQ3NzQ29sb3JTdHJpbmcoIiNGRjE0OTMiKSk7Vi5ERUVQU0tZQkxVRT1PYmplY3QuZnJlZXplKFYuZnJvbUNzc0NvbG9yU3RyaW5nKCIjMDBCRkZGIikpO1YuRElNR1JBWT1PYmplY3QuZnJlZXplKFYuZnJvbUNzc0NvbG9yU3RyaW5nKCIjNjk2OTY5IikpO1YuRElNR1JFWT1WLkRJTUdSQVk7Vi5ET0RHRVJCTFVFPU9iamVjdC5mcmVlemUoVi5mcm9tQ3NzQ29sb3JTdHJpbmcoIiMxRTkwRkYiKSk7Vi5GSVJFQlJJQ0s9T2JqZWN0LmZyZWV6ZShWLmZyb21Dc3NDb2xvclN0cmluZygiI0IyMjIyMiIpKTtWLkZMT1JBTFdISVRFPU9iamVjdC5mcmVlemUoVi5mcm9tQ3NzQ29sb3JTdHJpbmcoIiNGRkZBRjAiKSk7Vi5GT1JFU1RHUkVFTj1PYmplY3QuZnJlZXplKFYuZnJvbUNzc0NvbG9yU3RyaW5nKCIjMjI4QjIyIikpO1YuRlVDSFNJQT1PYmplY3QuZnJlZXplKFYuZnJvbUNzc0NvbG9yU3RyaW5nKCIjRkYwMEZGIikpO1YuR0FJTlNCT1JPPU9iamVjdC5mcmVlemUoVi5mcm9tQ3NzQ29sb3JTdHJpbmcoIiNEQ0RDREMiKSk7Vi5HSE9TVFdISVRFPU9iamVjdC5mcmVlemUoVi5mcm9tQ3NzQ29sb3JTdHJpbmcoIiNGOEY4RkYiKSk7Vi5HT0xEPU9iamVjdC5mcmVlemUoVi5mcm9tQ3NzQ29sb3JTdHJpbmcoIiNGRkQ3MDAiKSk7Vi5HT0xERU5ST0Q9T2JqZWN0LmZyZWV6ZShWLmZyb21Dc3NDb2xvclN0cmluZygiI0RBQTUyMCIpKTtWLkdSQVk9T2JqZWN0LmZyZWV6ZShWLmZyb21Dc3NDb2xvclN0cmluZygiIzgwODA4MCIpKTtWLkdSRUVOPU9iamVjdC5mcmVlemUoVi5mcm9tQ3NzQ29sb3JTdHJpbmcoIiMwMDgwMDAiKSk7Vi5HUkVFTllFTExPVz1PYmplY3QuZnJlZXplKFYuZnJvbUNzc0NvbG9yU3RyaW5nKCIjQURGRjJGIikpO1YuR1JFWT1WLkdSQVk7Vi5IT05FWURFVz1PYmplY3QuZnJlZXplKFYuZnJvbUNzc0NvbG9yU3RyaW5nKCIjRjBGRkYwIikpO1YuSE9UUElOSz1PYmplY3QuZnJlZXplKFYuZnJvbUNzc0NvbG9yU3RyaW5nKCIjRkY2OUI0IikpO1YuSU5ESUFOUkVEPU9iamVjdC5mcmVlemUoVi5mcm9tQ3NzQ29sb3JTdHJpbmcoIiNDRDVDNUMiKSk7Vi5JTkRJR089T2JqZWN0LmZyZWV6ZShWLmZyb21Dc3NDb2xvclN0cmluZygiIzRCMDA4MiIpKTtWLklWT1JZPU9iamVjdC5mcmVlemUoVi5mcm9tQ3NzQ29sb3JTdHJpbmcoIiNGRkZGRjAiKSk7Vi5LSEFLST1PYmplY3QuZnJlZXplKFYuZnJvbUNzc0NvbG9yU3RyaW5nKCIjRjBFNjhDIikpO1YuTEFWRU5ERVI9T2JqZWN0LmZyZWV6ZShWLmZyb21Dc3NDb2xvclN0cmluZygiI0U2RTZGQSIpKTtWLkxBVkVOREFSX0JMVVNIPU9iamVjdC5mcmVlemUoVi5mcm9tQ3NzQ29sb3JTdHJpbmcoIiNGRkYwRjUiKSk7Vi5MQVdOR1JFRU49T2JqZWN0LmZyZWV6ZShWLmZyb21Dc3NDb2xvclN0cmluZygiIzdDRkMwMCIpKTtWLkxFTU9OQ0hJRkZPTj1PYmplY3QuZnJlZXplKFYuZnJvbUNzc0NvbG9yU3RyaW5nKCIjRkZGQUNEIikpO1YuTElHSFRCTFVFPU9iamVjdC5mcmVlemUoVi5mcm9tQ3NzQ29sb3JTdHJpbmcoIiNBREQ4RTYiKSk7Vi5MSUdIVENPUkFMPU9iamVjdC5mcmVlemUoVi5mcm9tQ3NzQ29sb3JTdHJpbmcoIiNGMDgwODAiKSk7Vi5MSUdIVENZQU49T2JqZWN0LmZyZWV6ZShWLmZyb21Dc3NDb2xvclN0cmluZygiI0UwRkZGRiIpKTtWLkxJR0hUR09MREVOUk9EWUVMTE9XPU9iamVjdC5mcmVlemUoVi5mcm9tQ3NzQ29sb3JTdHJpbmcoIiNGQUZBRDIiKSk7Vi5MSUdIVEdSQVk9T2JqZWN0LmZyZWV6ZShWLmZyb21Dc3NDb2xvclN0cmluZygiI0QzRDNEMyIpKTtWLkxJR0hUR1JFRU49T2JqZWN0LmZyZWV6ZShWLmZyb21Dc3NDb2xvclN0cmluZygiIzkwRUU5MCIpKTtWLkxJR0hUR1JFWT1WLkxJR0hUR1JBWTtWLkxJR0hUUElOSz1PYmplY3QuZnJlZXplKFYuZnJvbUNzc0NvbG9yU3RyaW5nKCIjRkZCNkMxIikpO1YuTElHSFRTRUFHUkVFTj1PYmplY3QuZnJlZXplKFYuZnJvbUNzc0NvbG9yU3RyaW5nKCIjMjBCMkFBIikpO1YuTElHSFRTS1lCTFVFPU9iamVjdC5mcmVlemUoVi5mcm9tQ3NzQ29sb3JTdHJpbmcoIiM4N0NFRkEiKSk7Vi5MSUdIVFNMQVRFR1JBWT1PYmplY3QuZnJlZXplKFYuZnJvbUNzc0NvbG9yU3RyaW5nKCIjNzc4ODk5IikpO1YuTElHSFRTTEFURUdSRVk9Vi5MSUdIVFNMQVRFR1JBWTtWLkxJR0hUU1RFRUxCTFVFPU9iamVjdC5mcmVlemUoVi5mcm9tQ3NzQ29sb3JTdHJpbmcoIiNCMEM0REUiKSk7Vi5MSUdIVFlFTExPVz1PYmplY3QuZnJlZXplKFYuZnJvbUNzc0NvbG9yU3RyaW5nKCIjRkZGRkUwIikpO1YuTElNRT1PYmplY3QuZnJlZXplKFYuZnJvbUNzc0NvbG9yU3RyaW5nKCIjMDBGRjAwIikpO1YuTElNRUdSRUVOPU9iamVjdC5mcmVlemUoVi5mcm9tQ3NzQ29sb3JTdHJpbmcoIiMzMkNEMzIiKSk7Vi5MSU5FTj1PYmplY3QuZnJlZXplKFYuZnJvbUNzc0NvbG9yU3RyaW5nKCIjRkFGMEU2IikpO1YuTUFHRU5UQT1PYmplY3QuZnJlZXplKFYuZnJvbUNzc0NvbG9yU3RyaW5nKCIjRkYwMEZGIikpO1YuTUFST09OPU9iamVjdC5mcmVlemUoVi5mcm9tQ3NzQ29sb3JTdHJpbmcoIiM4MDAwMDAiKSk7Vi5NRURJVU1BUVVBTUFSSU5FPU9iamVjdC5mcmVlemUoVi5mcm9tQ3NzQ29sb3JTdHJpbmcoIiM2NkNEQUEiKSk7Vi5NRURJVU1CTFVFPU9iamVjdC5mcmVlemUoVi5mcm9tQ3NzQ29sb3JTdHJpbmcoIiMwMDAwQ0QiKSk7Vi5NRURJVU1PUkNISUQ9T2JqZWN0LmZyZWV6ZShWLmZyb21Dc3NDb2xvclN0cmluZygiI0JBNTVEMyIpKTtWLk1FRElVTVBVUlBMRT1PYmplY3QuZnJlZXplKFYuZnJvbUNzc0NvbG9yU3RyaW5nKCIjOTM3MERCIikpO1YuTUVESVVNU0VBR1JFRU49T2JqZWN0LmZyZWV6ZShWLmZyb21Dc3NDb2xvclN0cmluZygiIzNDQjM3MSIpKTtWLk1FRElVTVNMQVRFQkxVRT1PYmplY3QuZnJlZXplKFYuZnJvbUNzc0NvbG9yU3RyaW5nKCIjN0I2OEVFIikpO1YuTUVESVVNU1BSSU5HR1JFRU49T2JqZWN0LmZyZWV6ZShWLmZyb21Dc3NDb2xvclN0cmluZygiIzAwRkE5QSIpKTtWLk1FRElVTVRVUlFVT0lTRT1PYmplY3QuZnJlZXplKFYuZnJvbUNzc0NvbG9yU3RyaW5nKCIjNDhEMUNDIikpO1YuTUVESVVNVklPTEVUUkVEPU9iamVjdC5mcmVlemUoVi5mcm9tQ3NzQ29sb3JTdHJpbmcoIiNDNzE1ODUiKSk7Vi5NSUROSUdIVEJMVUU9T2JqZWN0LmZyZWV6ZShWLmZyb21Dc3NDb2xvclN0cmluZygiIzE5MTk3MCIpKTtWLk1JTlRDUkVBTT1PYmplY3QuZnJlZXplKFYuZnJvbUNzc0NvbG9yU3RyaW5nKCIjRjVGRkZBIikpO1YuTUlTVFlST1NFPU9iamVjdC5mcmVlemUoVi5mcm9tQ3NzQ29sb3JTdHJpbmcoIiNGRkU0RTEiKSk7Vi5NT0NDQVNJTj1PYmplY3QuZnJlZXplKFYuZnJvbUNzc0NvbG9yU3RyaW5nKCIjRkZFNEI1IikpO1YuTkFWQUpPV0hJVEU9T2JqZWN0LmZyZWV6ZShWLmZyb21Dc3NDb2xvclN0cmluZygiI0ZGREVBRCIpKTtWLk5BVlk9T2JqZWN0LmZyZWV6ZShWLmZyb21Dc3NDb2xvclN0cmluZygiIzAwMDA4MCIpKTtWLk9MRExBQ0U9T2JqZWN0LmZyZWV6ZShWLmZyb21Dc3NDb2xvclN0cmluZygiI0ZERjVFNiIpKTtWLk9MSVZFPU9iamVjdC5mcmVlemUoVi5mcm9tQ3NzQ29sb3JTdHJpbmcoIiM4MDgwMDAiKSk7Vi5PTElWRURSQUI9T2JqZWN0LmZyZWV6ZShWLmZyb21Dc3NDb2xvclN0cmluZygiIzZCOEUyMyIpKTtWLk9SQU5HRT1PYmplY3QuZnJlZXplKFYuZnJvbUNzc0NvbG9yU3RyaW5nKCIjRkZBNTAwIikpO1YuT1JBTkdFUkVEPU9iamVjdC5mcmVlemUoVi5mcm9tQ3NzQ29sb3JTdHJpbmcoIiNGRjQ1MDAiKSk7Vi5PUkNISUQ9T2JqZWN0LmZyZWV6ZShWLmZyb21Dc3NDb2xvclN0cmluZygiI0RBNzBENiIpKTtWLlBBTEVHT0xERU5ST0Q9T2JqZWN0LmZyZWV6ZShWLmZyb21Dc3NDb2xvclN0cmluZygiI0VFRThBQSIpKTtWLlBBTEVHUkVFTj1PYmplY3QuZnJlZXplKFYuZnJvbUNzc0NvbG9yU3RyaW5nKCIjOThGQjk4IikpO1YuUEFMRVRVUlFVT0lTRT1PYmplY3QuZnJlZXplKFYuZnJvbUNzc0NvbG9yU3RyaW5nKCIjQUZFRUVFIikpO1YuUEFMRVZJT0xFVFJFRD1PYmplY3QuZnJlZXplKFYuZnJvbUNzc0NvbG9yU3RyaW5nKCIjREI3MDkzIikpO1YuUEFQQVlBV0hJUD1PYmplY3QuZnJlZXplKFYuZnJvbUNzc0NvbG9yU3RyaW5nKCIjRkZFRkQ1IikpO1YuUEVBQ0hQVUZGPU9iamVjdC5mcmVlemUoVi5mcm9tQ3NzQ29sb3JTdHJpbmcoIiNGRkRBQjkiKSk7Vi5QRVJVPU9iamVjdC5mcmVlemUoVi5mcm9tQ3NzQ29sb3JTdHJpbmcoIiNDRDg1M0YiKSk7Vi5QSU5LPU9iamVjdC5mcmVlemUoVi5mcm9tQ3NzQ29sb3JTdHJpbmcoIiNGRkMwQ0IiKSk7Vi5QTFVNPU9iamVjdC5mcmVlemUoVi5mcm9tQ3NzQ29sb3JTdHJpbmcoIiNEREEwREQiKSk7Vi5QT1dERVJCTFVFPU9iamVjdC5mcmVlemUoVi5mcm9tQ3NzQ29sb3JTdHJpbmcoIiNCMEUwRTYiKSk7Vi5QVVJQTEU9T2JqZWN0LmZyZWV6ZShWLmZyb21Dc3NDb2xvclN0cmluZygiIzgwMDA4MCIpKTtWLlJFRD1PYmplY3QuZnJlZXplKFYuZnJvbUNzc0NvbG9yU3RyaW5nKCIjRkYwMDAwIikpO1YuUk9TWUJST1dOPU9iamVjdC5mcmVlemUoVi5mcm9tQ3NzQ29sb3JTdHJpbmcoIiNCQzhGOEYiKSk7Vi5ST1lBTEJMVUU9T2JqZWN0LmZyZWV6ZShWLmZyb21Dc3NDb2xvclN0cmluZygiIzQxNjlFMSIpKTtWLlNBRERMRUJST1dOPU9iamVjdC5mcmVlemUoVi5mcm9tQ3NzQ29sb3JTdHJpbmcoIiM4QjQ1MTMiKSk7Vi5TQUxNT049T2JqZWN0LmZyZWV6ZShWLmZyb21Dc3NDb2xvclN0cmluZygiI0ZBODA3MiIpKTtWLlNBTkRZQlJPV049T2JqZWN0LmZyZWV6ZShWLmZyb21Dc3NDb2xvclN0cmluZygiI0Y0QTQ2MCIpKTtWLlNFQUdSRUVOPU9iamVjdC5mcmVlemUoVi5mcm9tQ3NzQ29sb3JTdHJpbmcoIiMyRThCNTciKSk7Vi5TRUFTSEVMTD1PYmplY3QuZnJlZXplKFYuZnJvbUNzc0NvbG9yU3RyaW5nKCIjRkZGNUVFIikpO1YuU0lFTk5BPU9iamVjdC5mcmVlemUoVi5mcm9tQ3NzQ29sb3JTdHJpbmcoIiNBMDUyMkQiKSk7Vi5TSUxWRVI9T2JqZWN0LmZyZWV6ZShWLmZyb21Dc3NDb2xvclN0cmluZygiI0MwQzBDMCIpKTtWLlNLWUJMVUU9T2JqZWN0LmZyZWV6ZShWLmZyb21Dc3NDb2xvclN0cmluZygiIzg3Q0VFQiIpKTtWLlNMQVRFQkxVRT1PYmplY3QuZnJlZXplKFYuZnJvbUNzc0NvbG9yU3RyaW5nKCIjNkE1QUNEIikpO1YuU0xBVEVHUkFZPU9iamVjdC5mcmVlemUoVi5mcm9tQ3NzQ29sb3JTdHJpbmcoIiM3MDgwOTAiKSk7Vi5TTEFURUdSRVk9Vi5TTEFURUdSQVk7Vi5TTk9XPU9iamVjdC5mcmVlemUoVi5mcm9tQ3NzQ29sb3JTdHJpbmcoIiNGRkZBRkEiKSk7Vi5TUFJJTkdHUkVFTj1PYmplY3QuZnJlZXplKFYuZnJvbUNzc0NvbG9yU3RyaW5nKCIjMDBGRjdGIikpO1YuU1RFRUxCTFVFPU9iamVjdC5mcmVlemUoVi5mcm9tQ3NzQ29sb3JTdHJpbmcoIiM0NjgyQjQiKSk7Vi5UQU49T2JqZWN0LmZyZWV6ZShWLmZyb21Dc3NDb2xvclN0cmluZygiI0QyQjQ4QyIpKTtWLlRFQUw9T2JqZWN0LmZyZWV6ZShWLmZyb21Dc3NDb2xvclN0cmluZygiIzAwODA4MCIpKTtWLlRISVNUTEU9T2JqZWN0LmZyZWV6ZShWLmZyb21Dc3NDb2xvclN0cmluZygiI0Q4QkZEOCIpKTtWLlRPTUFUTz1PYmplY3QuZnJlZXplKFYuZnJvbUNzc0NvbG9yU3RyaW5nKCIjRkY2MzQ3IikpO1YuVFVSUVVPSVNFPU9iamVjdC5mcmVlemUoVi5mcm9tQ3NzQ29sb3JTdHJpbmcoIiM0MEUwRDAiKSk7Vi5WSU9MRVQ9T2JqZWN0LmZyZWV6ZShWLmZyb21Dc3NDb2xvclN0cmluZygiI0VFODJFRSIpKTtWLldIRUFUPU9iamVjdC5mcmVlemUoVi5mcm9tQ3NzQ29sb3JTdHJpbmcoIiNGNURFQjMiKSk7Vi5XSElURT1PYmplY3QuZnJlZXplKFYuZnJvbUNzc0NvbG9yU3RyaW5nKCIjRkZGRkZGIikpO1YuV0hJVEVTTU9LRT1PYmplY3QuZnJlZXplKFYuZnJvbUNzc0NvbG9yU3RyaW5nKCIjRjVGNUY1IikpO1YuWUVMTE9XPU9iamVjdC5mcmVlemUoVi5mcm9tQ3NzQ29sb3JTdHJpbmcoIiNGRkZGMDAiKSk7Vi5ZRUxMT1dHUkVFTj1PYmplY3QuZnJlZXplKFYuZnJvbUNzc0NvbG9yU3RyaW5nKCIjOUFDRDMyIikpO1YuVFJBTlNQQVJFTlQ9T2JqZWN0LmZyZWV6ZShuZXcgVigwLDAsMCwwKSk7JGU9Vn0pO2Z1bmN0aW9uIGhEKGUsdCxuLG8sYSl7bGV0IHI9eVI7ci5sZW5ndGg9YTtsZXQgaSxmPW4ucmVkLGQ9bi5ncmVlbixjPW4uYmx1ZSx1PW4uYWxwaGEsbD1vLnJlZCxoPW8uZ3JlZW4sbT1vLmJsdWUsYj1vLmFscGhhO2lmKCRlLmVxdWFscyhuLG8pKXtmb3IoaT0wO2k8YTtpKyspcltpXT0kZS5jbG9uZShuKTtyZXR1cm4gcn1sZXQgcD0obC1mKS9hLHk9KGgtZCkvYSxUPShtLWMpL2EsXz0oYi11KS9hO2ZvcihpPTA7aTxhO2krKylyW2ldPW5ldyAkZShmK2kqcCxkK2kqeSxjK2kqVCx1K2kqXyk7cmV0dXJuIHJ9ZnVuY3Rpb24gcmQoZSl7ZT1lPz9DZS5FTVBUWV9PQkpFQ1Q7bGV0IHQ9ZS5wb3NpdGlvbnMsbj1lLmNvbG9ycyxvPWUud2lkdGg/PzEsYT1lLmNvbG9yc1BlclZlcnRleD8/ITE7dGhpcy5fcG9zaXRpb25zPXQsdGhpcy5fY29sb3JzPW4sdGhpcy5fd2lkdGg9byx0aGlzLl9jb2xvcnNQZXJWZXJ0ZXg9YSx0aGlzLl92ZXJ0ZXhGb3JtYXQ9aGUuY2xvbmUoZS52ZXJ0ZXhGb3JtYXQ/P2hlLkRFRkFVTFQpLHRoaXMuX2FyY1R5cGU9ZS5hcmNUeXBlPz93dC5HRU9ERVNJQyx0aGlzLl9ncmFudWxhcml0eT1lLmdyYW51bGFyaXR5Pz9rLlJBRElBTlNfUEVSX0RFR1JFRSx0aGlzLl9lbGxpcHNvaWQ9cS5jbG9uZShlLmVsbGlwc29pZD8/cS5kZWZhdWx0KSx0aGlzLl93b3JrZXJOYW1lPSJjcmVhdGVQb2x5bGluZUdlb21ldHJ5IjtsZXQgcj0xK3QubGVuZ3RoKnMucGFja2VkTGVuZ3RoO3IrPWcobik/MStuLmxlbmd0aCokZS5wYWNrZWRMZW5ndGg6MSx0aGlzLnBhY2tlZExlbmd0aD1yK3EucGFja2VkTGVuZ3RoK2hlLnBhY2tlZExlbmd0aCs0fXZhciB5UixBUix3UixSYyxiUixwUixnUixfUixCZyxUUj1YKCgpPT57aGMoKTtYYSgpO010KCk7SWUoKTtrcygpO3Z0KCk7bXQoKTtzZSgpO1dlKCk7JHQoKTtlbigpO3VuKCk7emwoKTtubigpO0dlKCk7d3MoKTtjbigpO2tvKCk7eVI9W107cmQucGFjaz1mdW5jdGlvbihlLHQsbil7bj1uPz8wO2xldCBvLGE9ZS5fcG9zaXRpb25zLHI9YS5sZW5ndGg7Zm9yKHRbbisrXT1yLG89MDtvPHI7KytvLG4rPXMucGFja2VkTGVuZ3RoKXMucGFjayhhW29dLHQsbik7bGV0IGk9ZS5fY29sb3JzO2ZvcihyPWcoaSk/aS5sZW5ndGg6MCx0W24rK109cixvPTA7bzxyOysrbyxuKz0kZS5wYWNrZWRMZW5ndGgpJGUucGFjayhpW29dLHQsbik7cmV0dXJuIHEucGFjayhlLl9lbGxpcHNvaWQsdCxuKSxuKz1xLnBhY2tlZExlbmd0aCxoZS5wYWNrKGUuX3ZlcnRleEZvcm1hdCx0LG4pLG4rPWhlLnBhY2tlZExlbmd0aCx0W24rK109ZS5fd2lkdGgsdFtuKytdPWUuX2NvbG9yc1BlclZlcnRleD8xOjAsdFtuKytdPWUuX2FyY1R5cGUsdFtuXT1lLl9ncmFudWxhcml0eSx0fTtBUj1xLmNsb25lKHEuVU5JVF9TUEhFUkUpLHdSPW5ldyBoZSxSYz17cG9zaXRpb25zOnZvaWQgMCxjb2xvcnM6dm9pZCAwLGVsbGlwc29pZDpBUix2ZXJ0ZXhGb3JtYXQ6d1Isd2lkdGg6dm9pZCAwLGNvbG9yc1BlclZlcnRleDp2b2lkIDAsYXJjVHlwZTp2b2lkIDAsZ3JhbnVsYXJpdHk6dm9pZCAwfTtyZC51bnBhY2s9ZnVuY3Rpb24oZSx0LG4pe3Q9dD8/MDtsZXQgbyxhPWVbdCsrXSxyPW5ldyBBcnJheShhKTtmb3Iobz0wO288YTsrK28sdCs9cy5wYWNrZWRMZW5ndGgpcltvXT1zLnVucGFjayhlLHQpO2E9ZVt0KytdO2xldCBpPWE+MD9uZXcgQXJyYXkoYSk6dm9pZCAwO2ZvcihvPTA7bzxhOysrbyx0Kz0kZS5wYWNrZWRMZW5ndGgpaVtvXT0kZS51bnBhY2soZSx0KTtsZXQgZj1xLnVucGFjayhlLHQsQVIpO3QrPXEucGFja2VkTGVuZ3RoO2xldCBkPWhlLnVucGFjayhlLHQsd1IpO3QrPWhlLnBhY2tlZExlbmd0aDtsZXQgYz1lW3QrK10sdT1lW3QrK109PT0xLGw9ZVt0KytdLGg9ZVt0XTtyZXR1cm4gZyhuKT8obi5fcG9zaXRpb25zPXIsbi5fY29sb3JzPWksbi5fZWxsaXBzb2lkPXEuY2xvbmUoZixuLl9lbGxpcHNvaWQpLG4uX3ZlcnRleEZvcm1hdD1oZS5jbG9uZShkLG4uX3ZlcnRleEZvcm1hdCksbi5fd2lkdGg9YyxuLl9jb2xvcnNQZXJWZXJ0ZXg9dSxuLl9hcmNUeXBlPWwsbi5fZ3JhbnVsYXJpdHk9aCxuKTooUmMucG9zaXRpb25zPXIsUmMuY29sb3JzPWksUmMud2lkdGg9YyxSYy5jb2xvcnNQZXJWZXJ0ZXg9dSxSYy5hcmNUeXBlPWwsUmMuZ3JhbnVsYXJpdHk9aCxuZXcgcmQoUmMpKX07YlI9bmV3IHMscFI9bmV3IHMsZ1I9bmV3IHMsX1I9bmV3IHM7cmQuY3JlYXRlR2VvbWV0cnk9ZnVuY3Rpb24oZSl7bGV0IHQ9ZS5fd2lkdGgsbj1lLl92ZXJ0ZXhGb3JtYXQsbz1lLl9jb2xvcnMsYT1lLl9jb2xvcnNQZXJWZXJ0ZXgscj1lLl9hcmNUeXBlLGk9ZS5fZ3JhbnVsYXJpdHksZj1lLl9lbGxpcHNvaWQsZCxjLHUsbD1bXSxoPU5uKGUuX3Bvc2l0aW9ucyxzLmVxdWFsc0Vwc2lsb24sITEsbCk7aWYoZyhvKSYmbC5sZW5ndGg+MCl7bGV0IHY9MCxVPWxbMF07bz1vLmZpbHRlcihmdW5jdGlvbih6LEQpe2xldCBHPSExO3JldHVybiBhP0c9RD09PVV8fEQ9PT0wJiZVPT09MTpHPUQrMT09PVUsRz8odisrLFU9bFt2XSwhMSk6ITB9KX1sZXQgbT1oLmxlbmd0aDtpZihtPDJ8fHQ8PTApcmV0dXJuO2lmKHI9PT13dC5HRU9ERVNJQ3x8cj09PXd0LlJIVU1CKXtsZXQgdixVO3I9PT13dC5HRU9ERVNJQz8odj1rLmNob3JkTGVuZ3RoKGksZi5tYXhpbXVtUmFkaXVzKSxVPUFuLm51bWJlck9mUG9pbnRzKToodj1pLFU9QW4ubnVtYmVyT2ZQb2ludHNSaHVtYkxpbmUpO2xldCB6PUFuLmV4dHJhY3RIZWlnaHRzKGgsZik7aWYoZyhvKSl7bGV0IEQ9MTtmb3IoZD0wO2Q8bS0xOysrZClEKz1VKGhbZF0saFtkKzFdLHYpO2xldCBHPW5ldyBBcnJheShEKSxIPTA7Zm9yKGQ9MDtkPG0tMTsrK2Qpe2xldCBPPWhbZF0sWj1oW2QrMV0sb2U9b1tkXSxjZT1VKE8sWix2KTtpZihhJiZkPEQpe2xldCBmZT1vW2QrMV0sZWU9aEQoTyxaLG9lLGZlLGNlKSxiZT1lZS5sZW5ndGg7Zm9yKGM9MDtjPGJlOysrYylHW0grK109ZWVbY119ZWxzZSBmb3IoYz0wO2M8Y2U7KytjKUdbSCsrXT0kZS5jbG9uZShvZSl9R1tIXT0kZS5jbG9uZShvW28ubGVuZ3RoLTFdKSxvPUcseVIubGVuZ3RoPTB9cj09PXd0LkdFT0RFU0lDP2g9QW4uZ2VuZXJhdGVDYXJ0ZXNpYW5BcmMoe3Bvc2l0aW9uczpoLG1pbkRpc3RhbmNlOnYsZWxsaXBzb2lkOmYsaGVpZ2h0Onp9KTpoPUFuLmdlbmVyYXRlQ2FydGVzaWFuUmh1bWJBcmMoe3Bvc2l0aW9uczpoLGdyYW51bGFyaXR5OnYsZWxsaXBzb2lkOmYsaGVpZ2h0Onp9KX1tPWgubGVuZ3RoO2xldCBiPW0qNC00LHA9bmV3IEZsb2F0NjRBcnJheShiKjMpLHk9bmV3IEZsb2F0NjRBcnJheShiKjMpLFQ9bmV3IEZsb2F0NjRBcnJheShiKjMpLF89bmV3IEZsb2F0MzJBcnJheShiKjIpLEU9bi5zdD9uZXcgRmxvYXQzMkFycmF5KGIqMik6dm9pZCAwLHc9ZyhvKT9uZXcgVWludDhBcnJheShiKjQpOnZvaWQgMCxSPTAsUz0wLEM9MCxJPTAsTjtmb3IoYz0wO2M8bTsrK2Mpe2M9PT0wPyhOPWJSLHMuc3VidHJhY3QoaFswXSxoWzFdLE4pLHMuYWRkKGhbMF0sTixOKSk6Tj1oW2MtMV0scy5jbG9uZShOLGdSKSxzLmNsb25lKGhbY10scFIpLGM9PT1tLTE/KE49YlIscy5zdWJ0cmFjdChoW20tMV0saFttLTJdLE4pLHMuYWRkKGhbbS0xXSxOLE4pKTpOPWhbYysxXSxzLmNsb25lKE4sX1IpO2xldCB2LFU7Zyh3KSYmKGMhPT0wJiYhYT92PW9bYy0xXTp2PW9bY10sYyE9PW0tMSYmKFU9b1tjXSkpO2xldCB6PWM9PT0wPzI6MCxEPWM9PT1tLTE/Mjo0O2Zvcih1PXo7dTxEOysrdSl7cy5wYWNrKHBSLHAsUikscy5wYWNrKGdSLHksUikscy5wYWNrKF9SLFQsUiksUis9MztsZXQgRz11LTI8MD8tMToxO2lmKF9bUysrXT0yKih1JTIpLTEsX1tTKytdPUcqdCxuLnN0JiYoRVtDKytdPWMvKG0tMSksRVtDKytdPU1hdGgubWF4KF9bUy0yXSwwKSksZyh3KSl7bGV0IEg9dTwyP3Y6VTt3W0krK109JGUuZmxvYXRUb0J5dGUoSC5yZWQpLHdbSSsrXT0kZS5mbG9hdFRvQnl0ZShILmdyZWVuKSx3W0krK109JGUuZmxvYXRUb0J5dGUoSC5ibHVlKSx3W0krK109JGUuZmxvYXRUb0J5dGUoSC5hbHBoYSl9fX1sZXQgUD1uZXcgbnQ7UC5wb3NpdGlvbj1uZXcgaWUoe2NvbXBvbmVudERhdGF0eXBlOm5lLkRPVUJMRSxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOnB9KSxQLnByZXZQb3NpdGlvbj1uZXcgaWUoe2NvbXBvbmVudERhdGF0eXBlOm5lLkRPVUJMRSxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOnl9KSxQLm5leHRQb3NpdGlvbj1uZXcgaWUoe2NvbXBvbmVudERhdGF0eXBlOm5lLkRPVUJMRSxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOlR9KSxQLmV4cGFuZEFuZFdpZHRoPW5ldyBpZSh7Y29tcG9uZW50RGF0YXR5cGU6bmUuRkxPQVQsY29tcG9uZW50c1BlckF0dHJpYnV0ZToyLHZhbHVlczpffSksbi5zdCYmKFAuc3Q9bmV3IGllKHtjb21wb25lbnREYXRhdHlwZTpuZS5GTE9BVCxjb21wb25lbnRzUGVyQXR0cmlidXRlOjIsdmFsdWVzOkV9KSksZyh3KSYmKFAuY29sb3I9bmV3IGllKHtjb21wb25lbnREYXRhdHlwZTpuZS5VTlNJR05FRF9CWVRFLGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6NCx2YWx1ZXM6dyxub3JtYWxpemU6ITB9KSk7bGV0IEY9a2UuY3JlYXRlVHlwZWRBcnJheShiLG0qNi02KSxBPTAseD0wLE09bS0xO2ZvcihjPTA7YzxNOysrYylGW3grK109QSxGW3grK109QSsyLEZbeCsrXT1BKzEsRlt4KytdPUErMSxGW3grK109QSsyLEZbeCsrXT1BKzMsQSs9NDtyZXR1cm4gbmV3IHZlKHthdHRyaWJ1dGVzOlAsaW5kaWNlczpGLHByaW1pdGl2ZVR5cGU6VWUuVFJJQU5HTEVTLGJvdW5kaW5nU3BoZXJlOmdlLmZyb21Qb2ludHMoaCksZ2VvbWV0cnlUeXBlOkJyLlBPTFlMSU5FU30pfTtCZz1yZH0pO3ZhciBVZz17fTtydChVZyx7ZGVmYXVsdDooKT0+YkR9KTtmdW5jdGlvbiBtRChlLHQpe3JldHVybiBnKHQpJiYoZT1CZy51bnBhY2soZSx0KSksZS5fZWxsaXBzb2lkPXEuY2xvbmUoZS5fZWxsaXBzb2lkKSxCZy5jcmVhdGVHZW9tZXRyeShlKX12YXIgYkQsTGc9WCgoKT0+e3NlKCk7V2UoKTtUUigpO2JEPW1EfSk7ZnVuY3Rpb24gcEQoZSx0LG4sbyl7bGV0IGE9bmV3IG50O28ucG9zaXRpb24mJihhLnBvc2l0aW9uPW5ldyBpZSh7Y29tcG9uZW50RGF0YXR5cGU6bmUuRE9VQkxFLGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6ZX0pKTtsZXQgcj10Lmxlbmd0aCxpPWUubGVuZ3RoLzMsZj0oaS1yKjIpLyhyKjIpLGQ9U3QudHJpYW5ndWxhdGUodCksYz0oZi0xKSpyKjYrZC5sZW5ndGgqMix1PWtlLmNyZWF0ZVR5cGVkQXJyYXkoaSxjKSxsLGgsbSxiLHAseSxUPXIqMixfPTA7Zm9yKGw9MDtsPGYtMTtsKyspe2ZvcihoPTA7aDxyLTE7aCsrKW09aCoyK2wqcioyLHk9bStULGI9bSsxLHA9YitULHVbXysrXT1iLHVbXysrXT1tLHVbXysrXT1wLHVbXysrXT1wLHVbXysrXT1tLHVbXysrXT15O209cioyLTIrbCpyKjIsYj1tKzEscD1iK1QseT1tK1QsdVtfKytdPWIsdVtfKytdPW0sdVtfKytdPXAsdVtfKytdPXAsdVtfKytdPW0sdVtfKytdPXl9aWYoby5zdHx8by50YW5nZW50fHxvLmJpdGFuZ2VudCl7bGV0IFI9bmV3IEZsb2F0MzJBcnJheShpKjIpLFM9MS8oZi0xKSxDPTEvbi5oZWlnaHQsST1uLmhlaWdodC8yLE4sUCxGPTA7Zm9yKGw9MDtsPGY7bCsrKXtmb3IoTj1sKlMsUD1DKih0WzBdLnkrSSksUltGKytdPU4sUltGKytdPVAsaD0xO2g8cjtoKyspUD1DKih0W2hdLnkrSSksUltGKytdPU4sUltGKytdPVAsUltGKytdPU4sUltGKytdPVA7UD1DKih0WzBdLnkrSSksUltGKytdPU4sUltGKytdPVB9Zm9yKGg9MDtoPHI7aCsrKU49MCxQPUMqKHRbaF0ueStJKSxSW0YrK109TixSW0YrK109UDtmb3IoaD0wO2g8cjtoKyspTj0oZi0xKSpTLFA9QyoodFtoXS55K0kpLFJbRisrXT1OLFJbRisrXT1QO2Euc3Q9bmV3IGllKHtjb21wb25lbnREYXRhdHlwZTpuZS5GTE9BVCxjb21wb25lbnRzUGVyQXR0cmlidXRlOjIsdmFsdWVzOm5ldyBGbG9hdDMyQXJyYXkoUil9KX1sZXQgRT1pLXIqMjtmb3IobD0wO2w8ZC5sZW5ndGg7bCs9Myl7bGV0IFI9ZFtsXStFLFM9ZFtsKzFdK0UsQz1kW2wrMl0rRTt1W18rK109Uix1W18rK109Uyx1W18rK109Qyx1W18rK109QytyLHVbXysrXT1TK3IsdVtfKytdPVIrcn1sZXQgdz1uZXcgdmUoe2F0dHJpYnV0ZXM6YSxpbmRpY2VzOnUsYm91bmRpbmdTcGhlcmU6Z2UuZnJvbVZlcnRpY2VzKGUpLHByaW1pdGl2ZVR5cGU6VWUuVFJJQU5HTEVTfSk7aWYoby5ub3JtYWwmJih3PUh0LmNvbXB1dGVOb3JtYWwodykpLG8udGFuZ2VudHx8by5iaXRhbmdlbnQpe3RyeXt3PUh0LmNvbXB1dGVUYW5nZW50QW5kQml0YW5nZW50KHcpfWNhdGNoe19oKCJwb2x5bGluZS12b2x1bWUtdGFuZ2VudC1iaXRhbmdlbnQiLCJVbmFibGUgdG8gY29tcHV0ZSB0YW5nZW50cyBhbmQgYml0YW5nZW50cyBmb3IgcG9seWxpbmUgdm9sdW1lIGdlb21ldHJ5Iil9by50YW5nZW50fHwody5hdHRyaWJ1dGVzLnRhbmdlbnQ9dm9pZCAwKSxvLmJpdGFuZ2VudHx8KHcuYXR0cmlidXRlcy5iaXRhbmdlbnQ9dm9pZCAwKSxvLnN0fHwody5hdHRyaWJ1dGVzLnN0PXZvaWQgMCl9cmV0dXJuIHd9ZnVuY3Rpb24gY2QoZSl7ZT1lPz9DZS5FTVBUWV9PQkpFQ1Q7bGV0IHQ9ZS5wb2x5bGluZVBvc2l0aW9ucyxuPWUuc2hhcGVQb3NpdGlvbnM7dGhpcy5fcG9zaXRpb25zPXQsdGhpcy5fc2hhcGU9bix0aGlzLl9lbGxpcHNvaWQ9cS5jbG9uZShlLmVsbGlwc29pZD8/cS5kZWZhdWx0KSx0aGlzLl9jb3JuZXJUeXBlPWUuY29ybmVyVHlwZT8/aG4uUk9VTkRFRCx0aGlzLl92ZXJ0ZXhGb3JtYXQ9aGUuY2xvbmUoZS52ZXJ0ZXhGb3JtYXQ/P2hlLkRFRkFVTFQpLHRoaXMuX2dyYW51bGFyaXR5PWUuZ3JhbnVsYXJpdHk/P2suUkFESUFOU19QRVJfREVHUkVFLHRoaXMuX3dvcmtlck5hbWU9ImNyZWF0ZVBvbHlsaW5lVm9sdW1lR2VvbWV0cnkiO2xldCBvPTErdC5sZW5ndGgqcy5wYWNrZWRMZW5ndGg7bys9MStuLmxlbmd0aCpZLnBhY2tlZExlbmd0aCx0aGlzLnBhY2tlZExlbmd0aD1vK3EucGFja2VkTGVuZ3RoK2hlLnBhY2tlZExlbmd0aCsyfXZhciBFUixSUixpZCxnRCxqZyx4Uj1YKCgpPT57WGEoKTtEZigpO010KCk7anQoKTtJZSgpO3Z0KCk7eWMoKTttdCgpO3NlKCk7V2UoKTskdCgpO2VuKCk7dW4oKTtscigpO25uKCk7R2UoKTttMCgpO0phKCk7VGgoKTtjbigpO2tvKCk7YmMoKTtjZC5wYWNrPWZ1bmN0aW9uKGUsdCxuKXtuPW4/PzA7bGV0IG8sYT1lLl9wb3NpdGlvbnMscj1hLmxlbmd0aDtmb3IodFtuKytdPXIsbz0wO288cjsrK28sbis9cy5wYWNrZWRMZW5ndGgpcy5wYWNrKGFbb10sdCxuKTtsZXQgaT1lLl9zaGFwZTtmb3Iocj1pLmxlbmd0aCx0W24rK109cixvPTA7bzxyOysrbyxuKz1ZLnBhY2tlZExlbmd0aClZLnBhY2soaVtvXSx0LG4pO3JldHVybiBxLnBhY2soZS5fZWxsaXBzb2lkLHQsbiksbis9cS5wYWNrZWRMZW5ndGgsaGUucGFjayhlLl92ZXJ0ZXhGb3JtYXQsdCxuKSxuKz1oZS5wYWNrZWRMZW5ndGgsdFtuKytdPWUuX2Nvcm5lclR5cGUsdFtuXT1lLl9ncmFudWxhcml0eSx0fTtFUj1xLmNsb25lKHEuVU5JVF9TUEhFUkUpLFJSPW5ldyBoZSxpZD17cG9seWxpbmVQb3NpdGlvbnM6dm9pZCAwLHNoYXBlUG9zaXRpb25zOnZvaWQgMCxlbGxpcHNvaWQ6RVIsdmVydGV4Rm9ybWF0OlJSLGNvcm5lclR5cGU6dm9pZCAwLGdyYW51bGFyaXR5OnZvaWQgMH07Y2QudW5wYWNrPWZ1bmN0aW9uKGUsdCxuKXt0PXQ/PzA7bGV0IG8sYT1lW3QrK10scj1uZXcgQXJyYXkoYSk7Zm9yKG89MDtvPGE7KytvLHQrPXMucGFja2VkTGVuZ3RoKXJbb109cy51bnBhY2soZSx0KTthPWVbdCsrXTtsZXQgaT1uZXcgQXJyYXkoYSk7Zm9yKG89MDtvPGE7KytvLHQrPVkucGFja2VkTGVuZ3RoKWlbb109WS51bnBhY2soZSx0KTtsZXQgZj1xLnVucGFjayhlLHQsRVIpO3QrPXEucGFja2VkTGVuZ3RoO2xldCBkPWhlLnVucGFjayhlLHQsUlIpO3QrPWhlLnBhY2tlZExlbmd0aDtsZXQgYz1lW3QrK10sdT1lW3RdO3JldHVybiBnKG4pPyhuLl9wb3NpdGlvbnM9cixuLl9zaGFwZT1pLG4uX2VsbGlwc29pZD1xLmNsb25lKGYsbi5fZWxsaXBzb2lkKSxuLl92ZXJ0ZXhGb3JtYXQ9aGUuY2xvbmUoZCxuLl92ZXJ0ZXhGb3JtYXQpLG4uX2Nvcm5lclR5cGU9YyxuLl9ncmFudWxhcml0eT11LG4pOihpZC5wb2x5bGluZVBvc2l0aW9ucz1yLGlkLnNoYXBlUG9zaXRpb25zPWksaWQuY29ybmVyVHlwZT1jLGlkLmdyYW51bGFyaXR5PXUsbmV3IGNkKGlkKSl9O2dEPW5ldyBZYTtjZC5jcmVhdGVHZW9tZXRyeT1mdW5jdGlvbihlKXtsZXQgdD1lLl9wb3NpdGlvbnMsbj1Obih0LHMuZXF1YWxzRXBzaWxvbiksbz1lLl9zaGFwZTtpZihvPU9pLnJlbW92ZUR1cGxpY2F0ZXNGcm9tU2hhcGUobyksbi5sZW5ndGg8Mnx8by5sZW5ndGg8MylyZXR1cm47U3QuY29tcHV0ZVdpbmRpbmdPcmRlcjJEKG8pPT09dm8uQ0xPQ0tXSVNFJiZvLnJldmVyc2UoKTtsZXQgYT1ZYS5mcm9tUG9pbnRzKG8sZ0QpLHI9T2kuY29tcHV0ZVBvc2l0aW9ucyhuLG8sYSxlLCEwKTtyZXR1cm4gcEQocixvLGEsZS5fdmVydGV4Rm9ybWF0KX07amc9Y2R9KTt2YXIgemc9e307cnQoemcse2RlZmF1bHQ6KCk9PnlEfSk7ZnVuY3Rpb24gX0QoZSx0KXtyZXR1cm4gZyh0KSYmKGU9amcudW5wYWNrKGUsdCkpLGUuX2VsbGlwc29pZD1xLmNsb25lKGUuX2VsbGlwc29pZCksamcuY3JlYXRlR2VvbWV0cnkoZSl9dmFyIHlELEdnPVgoKCk9PntzZSgpO1dlKCk7eFIoKTt5RD1fRH0pO2Z1bmN0aW9uIEFEKGUsdCl7bGV0IG49bmV3IG50O24ucG9zaXRpb249bmV3IGllKHtjb21wb25lbnREYXRhdHlwZTpuZS5ET1VCTEUsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczplfSk7bGV0IG89dC5sZW5ndGgsYT1uLnBvc2l0aW9uLnZhbHVlcy5sZW5ndGgvMyxpPWUubGVuZ3RoLzMvbyxmPWtlLmNyZWF0ZVR5cGVkQXJyYXkoYSwyKm8qKGkrMSkpLGQsYyx1PTA7ZD0wO2xldCBsPWQqbztmb3IoYz0wO2M8by0xO2MrKylmW3UrK109YytsLGZbdSsrXT1jK2wrMTtmb3IoZlt1KytdPW8tMStsLGZbdSsrXT1sLGQ9aS0xLGw9ZCpvLGM9MDtjPG8tMTtjKyspZlt1KytdPWMrbCxmW3UrK109YytsKzE7Zm9yKGZbdSsrXT1vLTErbCxmW3UrK109bCxkPTA7ZDxpLTE7ZCsrKXtsZXQgbT1vKmQsYj1tK287Zm9yKGM9MDtjPG87YysrKWZbdSsrXT1jK20sZlt1KytdPWMrYn1yZXR1cm4gbmV3IHZlKHthdHRyaWJ1dGVzOm4saW5kaWNlczprZS5jcmVhdGVUeXBlZEFycmF5KGEsZiksYm91bmRpbmdTcGhlcmU6Z2UuZnJvbVZlcnRpY2VzKGUpLHByaW1pdGl2ZVR5cGU6VWUuTElORVN9KX1mdW5jdGlvbiBmZChlKXtlPWU/P0NlLkVNUFRZX09CSkVDVDtsZXQgdD1lLnBvbHlsaW5lUG9zaXRpb25zLG49ZS5zaGFwZVBvc2l0aW9uczt0aGlzLl9wb3NpdGlvbnM9dCx0aGlzLl9zaGFwZT1uLHRoaXMuX2VsbGlwc29pZD1xLmNsb25lKGUuZWxsaXBzb2lkPz9xLmRlZmF1bHQpLHRoaXMuX2Nvcm5lclR5cGU9ZS5jb3JuZXJUeXBlPz9obi5ST1VOREVELHRoaXMuX2dyYW51bGFyaXR5PWUuZ3JhbnVsYXJpdHk/P2suUkFESUFOU19QRVJfREVHUkVFLHRoaXMuX3dvcmtlck5hbWU9ImNyZWF0ZVBvbHlsaW5lVm9sdW1lT3V0bGluZUdlb21ldHJ5IjtsZXQgbz0xK3QubGVuZ3RoKnMucGFja2VkTGVuZ3RoO28rPTErbi5sZW5ndGgqWS5wYWNrZWRMZW5ndGgsdGhpcy5wYWNrZWRMZW5ndGg9bytxLnBhY2tlZExlbmd0aCsyfXZhciBPUixzZCx3RCxWZyxTUj1YKCgpPT57WGEoKTtEZigpO010KCk7anQoKTtJZSgpO3Z0KCk7eWMoKTttdCgpO3NlKCk7V2UoKTskdCgpO2VuKCk7dW4oKTtubigpO0dlKCk7SmEoKTtUaCgpO2NuKCk7YmMoKTtmZC5wYWNrPWZ1bmN0aW9uKGUsdCxuKXtuPW4/PzA7bGV0IG8sYT1lLl9wb3NpdGlvbnMscj1hLmxlbmd0aDtmb3IodFtuKytdPXIsbz0wO288cjsrK28sbis9cy5wYWNrZWRMZW5ndGgpcy5wYWNrKGFbb10sdCxuKTtsZXQgaT1lLl9zaGFwZTtmb3Iocj1pLmxlbmd0aCx0W24rK109cixvPTA7bzxyOysrbyxuKz1ZLnBhY2tlZExlbmd0aClZLnBhY2soaVtvXSx0LG4pO3JldHVybiBxLnBhY2soZS5fZWxsaXBzb2lkLHQsbiksbis9cS5wYWNrZWRMZW5ndGgsdFtuKytdPWUuX2Nvcm5lclR5cGUsdFtuXT1lLl9ncmFudWxhcml0eSx0fTtPUj1xLmNsb25lKHEuVU5JVF9TUEhFUkUpLHNkPXtwb2x5bGluZVBvc2l0aW9uczp2b2lkIDAsc2hhcGVQb3NpdGlvbnM6dm9pZCAwLGVsbGlwc29pZDpPUixoZWlnaHQ6dm9pZCAwLGNvcm5lclR5cGU6dm9pZCAwLGdyYW51bGFyaXR5OnZvaWQgMH07ZmQudW5wYWNrPWZ1bmN0aW9uKGUsdCxuKXt0PXQ/PzA7bGV0IG8sYT1lW3QrK10scj1uZXcgQXJyYXkoYSk7Zm9yKG89MDtvPGE7KytvLHQrPXMucGFja2VkTGVuZ3RoKXJbb109cy51bnBhY2soZSx0KTthPWVbdCsrXTtsZXQgaT1uZXcgQXJyYXkoYSk7Zm9yKG89MDtvPGE7KytvLHQrPVkucGFja2VkTGVuZ3RoKWlbb109WS51bnBhY2soZSx0KTtsZXQgZj1xLnVucGFjayhlLHQsT1IpO3QrPXEucGFja2VkTGVuZ3RoO2xldCBkPWVbdCsrXSxjPWVbdF07cmV0dXJuIGcobik/KG4uX3Bvc2l0aW9ucz1yLG4uX3NoYXBlPWksbi5fZWxsaXBzb2lkPXEuY2xvbmUoZixuLl9lbGxpcHNvaWQpLG4uX2Nvcm5lclR5cGU9ZCxuLl9ncmFudWxhcml0eT1jLG4pOihzZC5wb2x5bGluZVBvc2l0aW9ucz1yLHNkLnNoYXBlUG9zaXRpb25zPWksc2QuY29ybmVyVHlwZT1kLHNkLmdyYW51bGFyaXR5PWMsbmV3IGZkKHNkKSl9O3dEPW5ldyBZYTtmZC5jcmVhdGVHZW9tZXRyeT1mdW5jdGlvbihlKXtsZXQgdD1lLl9wb3NpdGlvbnMsbj1Obih0LHMuZXF1YWxzRXBzaWxvbiksbz1lLl9zaGFwZTtpZihvPU9pLnJlbW92ZUR1cGxpY2F0ZXNGcm9tU2hhcGUobyksbi5sZW5ndGg8Mnx8by5sZW5ndGg8MylyZXR1cm47U3QuY29tcHV0ZVdpbmRpbmdPcmRlcjJEKG8pPT09dm8uQ0xPQ0tXSVNFJiZvLnJldmVyc2UoKTtsZXQgYT1ZYS5mcm9tUG9pbnRzKG8sd0QpLHI9T2kuY29tcHV0ZVBvc2l0aW9ucyhuLG8sYSxlLCExKTtyZXR1cm4gQUQocixvKX07Vmc9ZmR9KTt2YXIgSGc9e307cnQoSGcse2RlZmF1bHQ6KCk9PkVEfSk7ZnVuY3Rpb24gVEQoZSx0KXtyZXR1cm4gZyh0KSYmKGU9VmcudW5wYWNrKGUsdCkpLGUuX2VsbGlwc29pZD1xLmNsb25lKGUuX2VsbGlwc29pZCksVmcuY3JlYXRlR2VvbWV0cnkoZSl9dmFyIEVELEtnPVgoKCk9PntzZSgpO1dlKCk7U1IoKTtFRD1URH0pO2Z1bmN0aW9uIE5SKGUsdCxuLG8sYSxyLGkpe2xldCBmPU1hdGguY29zKHQpLGQ9bypmLGM9bipmLHU9TWF0aC5zaW4odCksbD1vKnUsaD1uKnU7ZGQuX2VsbGlwc29pZD1xLmRlZmF1bHQsSWE9ZGQucHJvamVjdChlLElhKSxJYT1zLnN1YnRyYWN0KElhLEdoLElhKTtsZXQgbT1Rby5mcm9tUm90YXRpb24odCx4RCk7SWE9UW8ubXVsdGlwbHlCeVZlY3RvcihtLElhLElhKSxJYT1zLmFkZChJYSxHaCxJYSksZT1kZC51bnByb2plY3QoSWEsZSksci09MSxpLT0xO2xldCBiPWUubGF0aXR1ZGUscD1iK3IqaCx5PWItZCppLFQ9Yi1kKmkrcipoLF89TWF0aC5tYXgoYixwLHksVCksRT1NYXRoLm1pbihiLHAseSxUKSx3PWUubG9uZ2l0dWRlLFI9dytyKmMsUz13K2kqbCxDPXcraSpsK3IqYyxJPU1hdGgubWF4KHcsUixTLEMpLE49TWF0aC5taW4odyxSLFMsQyk7cmV0dXJue25vcnRoOl8sc291dGg6RSxlYXN0Okksd2VzdDpOLGdyYW5ZQ29zOmQsZ3JhbllTaW46bCxncmFuWENvczpjLGdyYW5YU2luOmgsbndDb3JuZXI6ZX19dmFyIENSLE1SLFJELHFnLHhELElhLE9ELEdoLGRkLE9vLFdnPVgoKCk9PntJZSgpO1R0KCk7c2UoKTtXZSgpO2tyKCk7R2UoKTtTZigpO19uKCk7Q1I9TWF0aC5jb3MsTVI9TWF0aC5zaW4sUkQ9TWF0aC5zcXJ0LHFnPXt9O3FnLmNvbXB1dGVQb3NpdGlvbj1mdW5jdGlvbihlLHQsbixvLGEscixpKXtsZXQgZj10LnJhZGlpU3F1YXJlZCxkPWUubndDb3JuZXIsYz1lLmJvdW5kaW5nUmVjdGFuZ2xlLHU9ZC5sYXRpdHVkZS1lLmdyYW5ZQ29zKm8rYSplLmdyYW5YU2luLGw9Q1IodSksaD1NUih1KSxtPWYueipoLGI9ZC5sb25naXR1ZGUrbyplLmdyYW5ZU2luK2EqZS5ncmFuWENvcyxwPWwqQ1IoYikseT1sKk1SKGIpLFQ9Zi54KnAsXz1mLnkqeSxFPVJEKFQqcCtfKnkrbSpoKTtpZihyLng9VC9FLHIueT1fL0Usci56PW0vRSxuKXtsZXQgdz1lLnN0TndDb3JuZXI7Zyh3KT8odT13LmxhdGl0dWRlLWUuc3RHcmFuWUNvcypvK2EqZS5zdEdyYW5YU2luLGI9dy5sb25naXR1ZGUrbyplLnN0R3JhbllTaW4rYSplLnN0R3JhblhDb3MsaS54PShiLWUuc3RXZXN0KSplLmxvblNjYWxhcixpLnk9KHUtZS5zdFNvdXRoKSplLmxhdFNjYWxhcik6KGkueD0oYi1jLndlc3QpKmUubG9uU2NhbGFyLGkueT0odS1jLnNvdXRoKSplLmxhdFNjYWxhcil9fTt4RD1uZXcgUW8sSWE9bmV3IHMsT0Q9bmV3IHJlLEdoPW5ldyBzLGRkPW5ldyBpbztxZy5jb21wdXRlT3B0aW9ucz1mdW5jdGlvbihlLHQsbixvLGEscixpKXtsZXQgZj1lLmVhc3QsZD1lLndlc3QsYz1lLm5vcnRoLHU9ZS5zb3V0aCxsPSExLGg9ITE7Yz09PWsuUElfT1ZFUl9UV08mJihsPSEwKSx1PT09LWsuUElfT1ZFUl9UV08mJihoPSEwKTtsZXQgbSxiPWMtdTtkPmY/bT1rLlRXT19QSS1kK2Y6bT1mLWQ7bGV0IHA9TWF0aC5jZWlsKG0vdCkrMSx5PU1hdGguY2VpbChiL3QpKzEsVD1tLyhwLTEpLF89Yi8oeS0xKSxFPVNlLm5vcnRod2VzdChlLHIpLHc9U2UuY2VudGVyKGUsT0QpOyhuIT09MHx8byE9PTApJiYody5sb25naXR1ZGU8RS5sb25naXR1ZGUmJih3LmxvbmdpdHVkZSs9ay5UV09fUEkpLGRkLl9lbGxpcHNvaWQ9cS5kZWZhdWx0LEdoPWRkLnByb2plY3QodyxHaCkpO2xldCBSPV8sUz1ULEM9MCxJPTAsTj1TZS5jbG9uZShlLGEpLFA9e2dyYW5ZQ29zOlIsZ3JhbllTaW46QyxncmFuWENvczpTLGdyYW5YU2luOkksbndDb3JuZXI6RSxib3VuZGluZ1JlY3RhbmdsZTpOLHdpZHRoOnAsaGVpZ2h0Onksbm9ydGhDYXA6bCxzb3V0aENhcDpofTtpZihuIT09MCl7bGV0IEY9TlIoRSxuLFQsXyx3LHAseSk7Yz1GLm5vcnRoLHU9Ri5zb3V0aCxmPUYuZWFzdCxkPUYud2VzdCxQLmdyYW5ZQ29zPUYuZ3JhbllDb3MsUC5ncmFuWVNpbj1GLmdyYW5ZU2luLFAuZ3JhblhDb3M9Ri5ncmFuWENvcyxQLmdyYW5YU2luPUYuZ3JhblhTaW4sTi5ub3J0aD1jLE4uc291dGg9dSxOLmVhc3Q9ZixOLndlc3Q9ZH1pZihvIT09MCl7bj1uLW87bGV0IEY9U2Uubm9ydGh3ZXN0KE4saSksQT1OUihGLG4sVCxfLHcscCx5KTtQLnN0R3JhbllDb3M9QS5ncmFuWUNvcyxQLnN0R3JhblhDb3M9QS5ncmFuWENvcyxQLnN0R3JhbllTaW49QS5ncmFuWVNpbixQLnN0R3JhblhTaW49QS5ncmFuWFNpbixQLnN0TndDb3JuZXI9RixQLnN0V2VzdD1BLndlc3QsUC5zdFNvdXRoPUEuc291dGh9cmV0dXJuIFB9O09vPXFnfSk7ZnVuY3Rpb24gQlIoZSx0KXtsZXQgbj1uZXcgdmUoe2F0dHJpYnV0ZXM6bmV3IG50LHByaW1pdGl2ZVR5cGU6VWUuVFJJQU5HTEVTfSk7cmV0dXJuIG4uYXR0cmlidXRlcy5wb3NpdGlvbj1uZXcgaWUoe2NvbXBvbmVudERhdGF0eXBlOm5lLkRPVUJMRSxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOnQucG9zaXRpb25zfSksZS5ub3JtYWwmJihuLmF0dHJpYnV0ZXMubm9ybWFsPW5ldyBpZSh7Y29tcG9uZW50RGF0YXR5cGU6bmUuRkxPQVQsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczp0Lm5vcm1hbHN9KSksZS50YW5nZW50JiYobi5hdHRyaWJ1dGVzLnRhbmdlbnQ9bmV3IGllKHtjb21wb25lbnREYXRhdHlwZTpuZS5GTE9BVCxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOnQudGFuZ2VudHN9KSksZS5iaXRhbmdlbnQmJihuLmF0dHJpYnV0ZXMuYml0YW5nZW50PW5ldyBpZSh7Y29tcG9uZW50RGF0YXR5cGU6bmUuRkxPQVQsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczp0LmJpdGFuZ2VudHN9KSksbn1mdW5jdGlvbiBORChlLHQsbixvKXtsZXQgYT1lLmxlbmd0aCxyPXQubm9ybWFsP25ldyBGbG9hdDMyQXJyYXkoYSk6dm9pZCAwLGk9dC50YW5nZW50P25ldyBGbG9hdDMyQXJyYXkoYSk6dm9pZCAwLGY9dC5iaXRhbmdlbnQ/bmV3IEZsb2F0MzJBcnJheShhKTp2b2lkIDAsZD0wLGM9RlIsdT12UixsPWtSO2lmKHQubm9ybWFsfHx0LnRhbmdlbnR8fHQuYml0YW5nZW50KWZvcihsZXQgaD0wO2g8YTtoKz0zKXtsZXQgbT1zLmZyb21BcnJheShlLGgsWGcpLGI9ZCsxLHA9ZCsyO2w9bi5nZW9kZXRpY1N1cmZhY2VOb3JtYWwobSxsKSwodC50YW5nZW50fHx0LmJpdGFuZ2VudCkmJihzLmNyb3NzKHMuVU5JVF9aLGwsdSksSi5tdWx0aXBseUJ5VmVjdG9yKG8sdSx1KSxzLm5vcm1hbGl6ZSh1LHUpLHQuYml0YW5nZW50JiZzLm5vcm1hbGl6ZShzLmNyb3NzKGwsdSxjKSxjKSksdC5ub3JtYWwmJihyW2RdPWwueCxyW2JdPWwueSxyW3BdPWwueiksdC50YW5nZW50JiYoaVtkXT11LngsaVtiXT11LnksaVtwXT11LnopLHQuYml0YW5nZW50JiYoZltkXT1jLngsZltiXT1jLnksZltwXT1jLnopLGQrPTN9cmV0dXJuIEJSKHQse3Bvc2l0aW9uczplLG5vcm1hbHM6cix0YW5nZW50czppLGJpdGFuZ2VudHM6Zn0pfWZ1bmN0aW9uIElEKGUsdCxuKXtsZXQgbz1lLmxlbmd0aCxhPXQubm9ybWFsP25ldyBGbG9hdDMyQXJyYXkobyk6dm9pZCAwLHI9dC50YW5nZW50P25ldyBGbG9hdDMyQXJyYXkobyk6dm9pZCAwLGk9dC5iaXRhbmdlbnQ/bmV3IEZsb2F0MzJBcnJheShvKTp2b2lkIDAsZj0wLGQ9MCxjPTAsdT0hMCxsPUZSLGg9dlIsbT1rUjtpZih0Lm5vcm1hbHx8dC50YW5nZW50fHx0LmJpdGFuZ2VudClmb3IobGV0IGI9MDtiPG87Yis9Nil7bGV0IHA9cy5mcm9tQXJyYXkoZSxiLFhnKSx5PXMuZnJvbUFycmF5KGUsKGIrNiklbyxZZyk7aWYodSl7bGV0IFQ9cy5mcm9tQXJyYXkoZSwoYiszKSVvLFVSKTtzLnN1YnRyYWN0KHkscCx5KSxzLnN1YnRyYWN0KFQscCxUKSxtPXMubm9ybWFsaXplKHMuY3Jvc3MoVCx5LG0pLG0pLHU9ITF9cy5lcXVhbHNFcHNpbG9uKHkscCxrLkVQU0lMT04xMCkmJih1PSEwKSwodC50YW5nZW50fHx0LmJpdGFuZ2VudCkmJihsPW4uZ2VvZGV0aWNTdXJmYWNlTm9ybWFsKHAsbCksdC50YW5nZW50JiYoaD1zLm5vcm1hbGl6ZShzLmNyb3NzKGwsbSxoKSxoKSkpLHQubm9ybWFsJiYoYVtmKytdPW0ueCxhW2YrK109bS55LGFbZisrXT1tLnosYVtmKytdPW0ueCxhW2YrK109bS55LGFbZisrXT1tLnopLHQudGFuZ2VudCYmKHJbZCsrXT1oLngscltkKytdPWgueSxyW2QrK109aC56LHJbZCsrXT1oLngscltkKytdPWgueSxyW2QrK109aC56KSx0LmJpdGFuZ2VudCYmKGlbYysrXT1sLngsaVtjKytdPWwueSxpW2MrK109bC56LGlbYysrXT1sLngsaVtjKytdPWwueSxpW2MrK109bC56KX1yZXR1cm4gQlIodCx7cG9zaXRpb25zOmUsbm9ybWFsczphLHRhbmdlbnRzOnIsYml0YW5nZW50czppfSl9ZnVuY3Rpb24gTFIoZSx0KXtsZXQgbj1lLl92ZXJ0ZXhGb3JtYXQsbz1lLl9lbGxpcHNvaWQsYT10LmhlaWdodCxyPXQud2lkdGgsaT10Lm5vcnRoQ2FwLGY9dC5zb3V0aENhcCxkPTAsYz1hLHU9YSxsPTA7aSYmKGQ9MSx1LT0xLGwrPTEpLGYmJihjLT0xLHUtPTEsbCs9MSksbCs9cip1O2xldCBoPW4ucG9zaXRpb24/bmV3IEZsb2F0NjRBcnJheShsKjMpOnZvaWQgMCxtPW4uc3Q/bmV3IEZsb2F0MzJBcnJheShsKjIpOnZvaWQgMCxiPTAscD0wLHk9WGcsVD1TRCxfPU51bWJlci5NQVhfVkFMVUUsRT1OdW1iZXIuTUFYX1ZBTFVFLHc9LU51bWJlci5NQVhfVkFMVUUsUj0tTnVtYmVyLk1BWF9WQUxVRTtmb3IobGV0IEE9ZDtBPGM7KytBKWZvcihsZXQgeD0wO3g8cjsrK3gpT28uY29tcHV0ZVBvc2l0aW9uKHQsbyxuLnN0LEEseCx5LFQpLGhbYisrXT15LngsaFtiKytdPXkueSxoW2IrK109eS56LG4uc3QmJihtW3ArK109VC54LG1bcCsrXT1ULnksXz1NYXRoLm1pbihfLFQueCksRT1NYXRoLm1pbihFLFQueSksdz1NYXRoLm1heCh3LFQueCksUj1NYXRoLm1heChSLFQueSkpO2lmKGkmJihPby5jb21wdXRlUG9zaXRpb24odCxvLG4uc3QsMCwwLHksVCksaFtiKytdPXkueCxoW2IrK109eS55LGhbYisrXT15Lnosbi5zdCYmKG1bcCsrXT1ULngsbVtwKytdPVQueSxfPVQueCxFPVQueSx3PVQueCxSPVQueSkpLGYmJihPby5jb21wdXRlUG9zaXRpb24odCxvLG4uc3QsYS0xLDAseSxUKSxoW2IrK109eS54LGhbYisrXT15LnksaFtiXT15Lnosbi5zdCYmKG1bcCsrXT1ULngsbVtwXT1ULnksXz1NYXRoLm1pbihfLFQueCksRT1NYXRoLm1pbihFLFQueSksdz1NYXRoLm1heCh3LFQueCksUj1NYXRoLm1heChSLFQueSkpKSxuLnN0JiYoXzwwfHxFPDB8fHc+MXx8Uj4xKSlmb3IobGV0IEE9MDtBPG0ubGVuZ3RoO0ErPTIpbVtBXT0obVtBXS1fKS8ody1fKSxtW0ErMV09KG1bQSsxXS1FKS8oUi1FKTtsZXQgUz1ORChoLG4sbyx0LnRhbmdlbnRSb3RhdGlvbk1hdHJpeCksQz02KihyLTEpKih1LTEpO2kmJihDKz0zKihyLTEpKSxmJiYoQys9Myooci0xKSk7bGV0IEk9a2UuY3JlYXRlVHlwZWRBcnJheShsLEMpLE49MCxQPTAsRjtmb3IoRj0wO0Y8dS0xOysrRil7Zm9yKGxldCBBPTA7QTxyLTE7KytBKXtsZXQgeD1OLE09eCtyLHY9TSsxLFU9eCsxO0lbUCsrXT14LElbUCsrXT1NLElbUCsrXT1VLElbUCsrXT1VLElbUCsrXT1NLElbUCsrXT12LCsrTn0rK059aWYoaXx8Zil7bGV0IEE9bC0xLHg9bC0xO2kmJmYmJihBPWwtMik7bGV0IE0sdjtpZihOPTAsaSlmb3IoRj0wO0Y8ci0xO0YrKylNPU4sdj1NKzEsSVtQKytdPUEsSVtQKytdPU0sSVtQKytdPXYsKytOO2lmKGYpZm9yKE49KHUtMSkqcixGPTA7RjxyLTE7RisrKU09Tix2PU0rMSxJW1ArK109TSxJW1ArK109eCxJW1ArK109diwrK059cmV0dXJuIFMuaW5kaWNlcz1JLG4uc3QmJihTLmF0dHJpYnV0ZXMuc3Q9bmV3IGllKHtjb21wb25lbnREYXRhdHlwZTpuZS5GTE9BVCxjb21wb25lbnRzUGVyQXR0cmlidXRlOjIsdmFsdWVzOm19KSksU31mdW5jdGlvbiB2cyhlLHQsbixvLGEpe3JldHVybiBlW3QrK109b1tuXSxlW3QrK109b1tuKzFdLGVbdCsrXT1vW24rMl0sZVt0KytdPWFbbl0sZVt0KytdPWFbbisxXSxlW3RdPWFbbisyXSxlfWZ1bmN0aW9uIEZzKGUsdCxuLG8pe3JldHVybiBlW3QrK109b1tuXSxlW3QrK109b1tuKzFdLGVbdCsrXT1vW25dLGVbdF09b1tuKzFdLGV9ZnVuY3Rpb24gUEQoZSx0KXtsZXQgbj1lLl9zaGFkb3dWb2x1bWUsbz1lLl9vZmZzZXRBdHRyaWJ1dGUsYT1lLl92ZXJ0ZXhGb3JtYXQscj1lLl9leHRydWRlZEhlaWdodCxpPWUuX3N1cmZhY2VIZWlnaHQsZj1lLl9lbGxpcHNvaWQsZD10LmhlaWdodCxjPXQud2lkdGgsdTtpZihuKXtsZXQgamU9aGUuY2xvbmUoYSxKZyk7amUubm9ybWFsPSEwLGUuX3ZlcnRleEZvcm1hdD1qZX1sZXQgbD1MUihlLHQpO24mJihlLl92ZXJ0ZXhGb3JtYXQ9YSk7bGV0IGg9U3Quc2NhbGVUb0dlb2RldGljSGVpZ2h0KGwuYXR0cmlidXRlcy5wb3NpdGlvbi52YWx1ZXMsaSxmLCExKTtoPW5ldyBGbG9hdDY0QXJyYXkoaCk7bGV0IG09aC5sZW5ndGgsYj1tKjIscD1uZXcgRmxvYXQ2NEFycmF5KGIpO3Auc2V0KGgpO2xldCB5PVN0LnNjYWxlVG9HZW9kZXRpY0hlaWdodChsLmF0dHJpYnV0ZXMucG9zaXRpb24udmFsdWVzLHIsZik7cC5zZXQoeSxtKSxsLmF0dHJpYnV0ZXMucG9zaXRpb24udmFsdWVzPXA7bGV0IFQ9YS5ub3JtYWw/bmV3IEZsb2F0MzJBcnJheShiKTp2b2lkIDAsXz1hLnRhbmdlbnQ/bmV3IEZsb2F0MzJBcnJheShiKTp2b2lkIDAsRT1hLmJpdGFuZ2VudD9uZXcgRmxvYXQzMkFycmF5KGIpOnZvaWQgMCx3PWEuc3Q/bmV3IEZsb2F0MzJBcnJheShiLzMqMik6dm9pZCAwLFIsUztpZihhLm5vcm1hbCl7Zm9yKFM9bC5hdHRyaWJ1dGVzLm5vcm1hbC52YWx1ZXMsVC5zZXQoUyksdT0wO3U8bTt1KyspU1t1XT0tU1t1XTtULnNldChTLG0pLGwuYXR0cmlidXRlcy5ub3JtYWwudmFsdWVzPVR9aWYobil7Uz1sLmF0dHJpYnV0ZXMubm9ybWFsLnZhbHVlcyxhLm5vcm1hbHx8KGwuYXR0cmlidXRlcy5ub3JtYWw9dm9pZCAwKTtsZXQgamU9bmV3IEZsb2F0MzJBcnJheShiKTtmb3IodT0wO3U8bTt1KyspU1t1XT0tU1t1XTtqZS5zZXQoUyxtKSxsLmF0dHJpYnV0ZXMuZXh0cnVkZURpcmVjdGlvbj1uZXcgaWUoe2NvbXBvbmVudERhdGF0eXBlOm5lLkZMT0FULGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6amV9KX1sZXQgQyxJPWcobyk7aWYoSSl7bGV0IGplPW0vMyoyLGl0PW5ldyBVaW50OEFycmF5KGplKTtvPT09c3QuVE9QP2l0PWl0LmZpbGwoMSwwLGplLzIpOihDPW89PT1zdC5OT05FPzA6MSxpdD1pdC5maWxsKEMpKSxsLmF0dHJpYnV0ZXMuYXBwbHlPZmZzZXQ9bmV3IGllKHtjb21wb25lbnREYXRhdHlwZTpuZS5VTlNJR05FRF9CWVRFLGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6MSx2YWx1ZXM6aXR9KX1pZihhLnRhbmdlbnQpe2xldCBqZT1sLmF0dHJpYnV0ZXMudGFuZ2VudC52YWx1ZXM7Zm9yKF8uc2V0KGplKSx1PTA7dTxtO3UrKylqZVt1XT0tamVbdV07Xy5zZXQoamUsbSksbC5hdHRyaWJ1dGVzLnRhbmdlbnQudmFsdWVzPV99aWYoYS5iaXRhbmdlbnQpe2xldCBqZT1sLmF0dHJpYnV0ZXMuYml0YW5nZW50LnZhbHVlcztFLnNldChqZSksRS5zZXQoamUsbSksbC5hdHRyaWJ1dGVzLmJpdGFuZ2VudC52YWx1ZXM9RX1hLnN0JiYoUj1sLmF0dHJpYnV0ZXMuc3QudmFsdWVzLHcuc2V0KFIpLHcuc2V0KFIsbS8zKjIpLGwuYXR0cmlidXRlcy5zdC52YWx1ZXM9dyk7bGV0IE49bC5pbmRpY2VzLFA9Ti5sZW5ndGgsRj1tLzMsQT1rZS5jcmVhdGVUeXBlZEFycmF5KGIvMyxQKjIpO2ZvcihBLnNldChOKSx1PTA7dTxQO3UrPTMpQVt1K1BdPU5bdSsyXStGLEFbdSsxK1BdPU5bdSsxXStGLEFbdSsyK1BdPU5bdV0rRjtsLmluZGljZXM9QTtsZXQgeD10Lm5vcnRoQ2FwLE09dC5zb3V0aENhcCx2PWQsVT0yLHo9MCxEPTQsRz00O3gmJihVLT0xLHYtPTEseis9MSxELT0yLEctPTEpLE0mJihVLT0xLHYtPTEseis9MSxELT0yLEctPTEpLHorPVUqYysyKnYtRDtsZXQgSD0oeitHKSoyLE89bmV3IEZsb2F0NjRBcnJheShIKjMpLFo9bj9uZXcgRmxvYXQzMkFycmF5KEgqMyk6dm9pZCAwLG9lPUk/bmV3IFVpbnQ4QXJyYXkoSCk6dm9pZCAwLGNlPWEuc3Q/bmV3IEZsb2F0MzJBcnJheShIKjIpOnZvaWQgMCxmZT1vPT09c3QuVE9QO0kmJiFmZSYmKEM9bz09PXN0LkFMTD8xOjAsb2U9b2UuZmlsbChDKSk7bGV0IGVlPTAsYmU9MCxsZT0wLHBlPTAsdWU9Yyp2LGFlO2Zvcih1PTA7dTx1ZTt1Kz1jKWFlPXUqMyxPPXZzKE8sZWUsYWUsaCx5KSxlZSs9NixhLnN0JiYoY2U9RnMoY2UsYmUsdSoyLFIpLGJlKz00KSxuJiYobGUrPTMsWltsZSsrXT1TW2FlXSxaW2xlKytdPVNbYWUrMV0sWltsZSsrXT1TW2FlKzJdKSxmZSYmKG9lW3BlKytdPTEscGUrPTEpO2lmKE0pe2xldCBqZT14P3VlKzE6dWU7Zm9yKGFlPWplKjMsdT0wO3U8Mjt1KyspTz12cyhPLGVlLGFlLGgseSksZWUrPTYsYS5zdCYmKGNlPUZzKGNlLGJlLGplKjIsUiksYmUrPTQpLG4mJihsZSs9MyxaW2xlKytdPVNbYWVdLFpbbGUrK109U1thZSsxXSxaW2xlKytdPVNbYWUrMl0pLGZlJiYob2VbcGUrK109MSxwZSs9MSl9ZWxzZSBmb3IodT11ZS1jO3U8dWU7dSsrKWFlPXUqMyxPPXZzKE8sZWUsYWUsaCx5KSxlZSs9NixhLnN0JiYoY2U9RnMoY2UsYmUsdSoyLFIpLGJlKz00KSxuJiYobGUrPTMsWltsZSsrXT1TW2FlXSxaW2xlKytdPVNbYWUrMV0sWltsZSsrXT1TW2FlKzJdKSxmZSYmKG9lW3BlKytdPTEscGUrPTEpO2Zvcih1PXVlLTE7dT4wO3UtPWMpYWU9dSozLE89dnMoTyxlZSxhZSxoLHkpLGVlKz02LGEuc3QmJihjZT1GcyhjZSxiZSx1KjIsUiksYmUrPTQpLG4mJihsZSs9MyxaW2xlKytdPVNbYWVdLFpbbGUrK109U1thZSsxXSxaW2xlKytdPVNbYWUrMl0pLGZlJiYob2VbcGUrK109MSxwZSs9MSk7aWYoeCl7bGV0IGplPXVlO2ZvcihhZT1qZSozLHU9MDt1PDI7dSsrKU89dnMoTyxlZSxhZSxoLHkpLGVlKz02LGEuc3QmJihjZT1GcyhjZSxiZSxqZSoyLFIpLGJlKz00KSxuJiYobGUrPTMsWltsZSsrXT1TW2FlXSxaW2xlKytdPVNbYWUrMV0sWltsZSsrXT1TW2FlKzJdKSxmZSYmKG9lW3BlKytdPTEscGUrPTEpfWVsc2UgZm9yKHU9Yy0xO3U+PTA7dS0tKWFlPXUqMyxPPXZzKE8sZWUsYWUsaCx5KSxlZSs9NixhLnN0JiYoY2U9RnMoY2UsYmUsdSoyLFIpLGJlKz00KSxuJiYobGUrPTMsWltsZSsrXT1TW2FlXSxaW2xlKytdPVNbYWUrMV0sWltsZSsrXT1TW2FlKzJdKSxmZSYmKG9lW3BlKytdPTEscGUrPTEpO2xldCBBZT1JRChPLGEsZik7YS5zdCYmKEFlLmF0dHJpYnV0ZXMuc3Q9bmV3IGllKHtjb21wb25lbnREYXRhdHlwZTpuZS5GTE9BVCxjb21wb25lbnRzUGVyQXR0cmlidXRlOjIsdmFsdWVzOmNlfSkpLG4mJihBZS5hdHRyaWJ1dGVzLmV4dHJ1ZGVEaXJlY3Rpb249bmV3IGllKHtjb21wb25lbnREYXRhdHlwZTpuZS5GTE9BVCxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOlp9KSksSSYmKEFlLmF0dHJpYnV0ZXMuYXBwbHlPZmZzZXQ9bmV3IGllKHtjb21wb25lbnREYXRhdHlwZTpuZS5VTlNJR05FRF9CWVRFLGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6MSx2YWx1ZXM6b2V9KSk7bGV0IE5lPWtlLmNyZWF0ZVR5cGVkQXJyYXkoSCx6KjYpLGV0LEtlLHR0LFhlO209Ty5sZW5ndGgvMztsZXQgTGU9MDtmb3IodT0wO3U8bS0xO3UrPTIpe2V0PXUsWGU9KGV0KzIpJW07bGV0IGplPXMuZnJvbUFycmF5KE8sZXQqMyxZZyksaXQ9cy5mcm9tQXJyYXkoTyxYZSozLFVSKTtzLmVxdWFsc0Vwc2lsb24oamUsaXQsay5FUFNJTE9OMTApfHwoS2U9KGV0KzEpJW0sdHQ9KEtlKzIpJW0sTmVbTGUrK109ZXQsTmVbTGUrK109S2UsTmVbTGUrK109WGUsTmVbTGUrK109WGUsTmVbTGUrK109S2UsTmVbTGUrK109dHQpfXJldHVybiBBZS5pbmRpY2VzPU5lLEFlPUh0LmNvbWJpbmVJbnN0YW5jZXMoW25ldyBwbyh7Z2VvbWV0cnk6bH0pLG5ldyBwbyh7Z2VvbWV0cnk6QWV9KV0pLEFlWzBdfWZ1bmN0aW9uIFpnKGUsdCxuLG8sYSl7aWYobj09PTApcmV0dXJuIFNlLmNsb25lKGUsYSk7bGV0IHI9T28uY29tcHV0ZU9wdGlvbnMoZSx0LG4sMCxEUixqUiksaT1yLmhlaWdodCxmPXIud2lkdGgsZD1rRDtyZXR1cm4gT28uY29tcHV0ZVBvc2l0aW9uKHIsbywhMSwwLDAsZFswXSksT28uY29tcHV0ZVBvc2l0aW9uKHIsbywhMSwwLGYtMSxkWzFdKSxPby5jb21wdXRlUG9zaXRpb24ocixvLCExLGktMSwwLGRbMl0pLE9vLmNvbXB1dGVQb3NpdGlvbihyLG8sITEsaS0xLGYtMSxkWzNdKSxTZS5mcm9tQ2FydGVzaWFuQXJyYXkoZCxvLGEpfWZ1bmN0aW9uIEFyKGUpe2U9ZT8/Q2UuRU1QVFlfT0JKRUNUO2xldCB0PWUucmVjdGFuZ2xlLG49ZS5oZWlnaHQ/PzAsbz1lLmV4dHJ1ZGVkSGVpZ2h0Pz9uO3RoaXMuX3JlY3RhbmdsZT1TZS5jbG9uZSh0KSx0aGlzLl9ncmFudWxhcml0eT1lLmdyYW51bGFyaXR5Pz9rLlJBRElBTlNfUEVSX0RFR1JFRSx0aGlzLl9lbGxpcHNvaWQ9cS5jbG9uZShlLmVsbGlwc29pZD8/cS5kZWZhdWx0KSx0aGlzLl9zdXJmYWNlSGVpZ2h0PU1hdGgubWF4KG4sbyksdGhpcy5fcm90YXRpb249ZS5yb3RhdGlvbj8/MCx0aGlzLl9zdFJvdGF0aW9uPWUuc3RSb3RhdGlvbj8/MCx0aGlzLl92ZXJ0ZXhGb3JtYXQ9aGUuY2xvbmUoZS52ZXJ0ZXhGb3JtYXQ/P2hlLkRFRkFVTFQpLHRoaXMuX2V4dHJ1ZGVkSGVpZ2h0PU1hdGgubWluKG4sbyksdGhpcy5fc2hhZG93Vm9sdW1lPWUuc2hhZG93Vm9sdW1lPz8hMSx0aGlzLl93b3JrZXJOYW1lPSJjcmVhdGVSZWN0YW5nbGVHZW9tZXRyeSIsdGhpcy5fb2Zmc2V0QXR0cmlidXRlPWUub2Zmc2V0QXR0cmlidXRlLHRoaXMuX3JvdGF0ZWRSZWN0YW5nbGU9dm9pZCAwLHRoaXMuX3RleHR1cmVDb29yZGluYXRlUm90YXRpb25Qb2ludHM9dm9pZCAwfWZ1bmN0aW9uIGpEKGUpe2lmKGUuX3N0Um90YXRpb249PT0wKXJldHVyblswLDAsMCwxLDEsMF07bGV0IHQ9U2UuY2xvbmUoZS5fcmVjdGFuZ2xlLFBSKSxuPWUuX2dyYW51bGFyaXR5LG89ZS5fZWxsaXBzb2lkLGE9ZS5fcm90YXRpb24tZS5fc3RSb3RhdGlvbixyPVpnKHQsbixhLG8sUFIpLGk9QkQ7aVswXS54PXIud2VzdCxpWzBdLnk9ci5zb3V0aCxpWzFdLng9ci53ZXN0LGlbMV0ueT1yLm5vcnRoLGlbMl0ueD1yLmVhc3QsaVsyXS55PXIuc291dGg7bGV0IGY9ZS5yZWN0YW5nbGUsZD1Rby5mcm9tUm90YXRpb24oZS5fc3RSb3RhdGlvbixVRCksYz1TZS5jZW50ZXIoZixMRCk7Zm9yKGxldCBiPTA7YjwzOysrYil7bGV0IHA9aVtiXTtwLngtPWMubG9uZ2l0dWRlLHAueS09Yy5sYXRpdHVkZSxRby5tdWx0aXBseUJ5VmVjdG9yKGQscCxwKSxwLngrPWMubG9uZ2l0dWRlLHAueSs9Yy5sYXRpdHVkZSxwLng9KHAueC1mLndlc3QpL2Yud2lkdGgscC55PShwLnktZi5zb3V0aCkvZi5oZWlnaHR9bGV0IHU9aVswXSxsPWlbMV0saD1pWzJdLG09bmV3IEFycmF5KDYpO3JldHVybiBZLnBhY2sodSxtKSxZLnBhY2sobCxtLDIpLFkucGFjayhoLG0sNCksbX12YXIgWGcsa1IsdlIsRlIsRFIsU0QsQ0QsTUQsWWcsVVIsSmcsa0QsalIsdkQselIsR1IsQmksRkQsSVIsREQsUFIsQkQsVUQsTEQsUWcsVlI9WCgoKT0+e010KCk7anQoKTtJZSgpO1R0KCk7dnQoKTttdCgpO3NlKCk7V2UoKTskdCgpO2VuKCk7dW4oKTtkYygpO3pvKCk7bHIoKTtubigpO0dlKCk7U2YoKTtEbigpO0phKCk7Y24oKTtKbygpO19uKCk7V2coKTtrbygpO1hnPW5ldyBzLGtSPW5ldyBzLHZSPW5ldyBzLEZSPW5ldyBzLERSPW5ldyBTZSxTRD1uZXcgWSxDRD1uZXcgZ2UsTUQ9bmV3IGdlO1lnPW5ldyBzLFVSPW5ldyBzO0pnPW5ldyBoZTtrRD1bbmV3IHMsbmV3IHMsbmV3IHMsbmV3IHNdLGpSPW5ldyByZSx2RD1uZXcgcmU7QXIucGFja2VkTGVuZ3RoPVNlLnBhY2tlZExlbmd0aCtxLnBhY2tlZExlbmd0aCtoZS5wYWNrZWRMZW5ndGgrNztBci5wYWNrPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gbj1uPz8wLFNlLnBhY2soZS5fcmVjdGFuZ2xlLHQsbiksbis9U2UucGFja2VkTGVuZ3RoLHEucGFjayhlLl9lbGxpcHNvaWQsdCxuKSxuKz1xLnBhY2tlZExlbmd0aCxoZS5wYWNrKGUuX3ZlcnRleEZvcm1hdCx0LG4pLG4rPWhlLnBhY2tlZExlbmd0aCx0W24rK109ZS5fZ3JhbnVsYXJpdHksdFtuKytdPWUuX3N1cmZhY2VIZWlnaHQsdFtuKytdPWUuX3JvdGF0aW9uLHRbbisrXT1lLl9zdFJvdGF0aW9uLHRbbisrXT1lLl9leHRydWRlZEhlaWdodCx0W24rK109ZS5fc2hhZG93Vm9sdW1lPzE6MCx0W25dPWUuX29mZnNldEF0dHJpYnV0ZT8/LTEsdH07elI9bmV3IFNlLEdSPXEuY2xvbmUocS5VTklUX1NQSEVSRSksQmk9e3JlY3RhbmdsZTp6UixlbGxpcHNvaWQ6R1IsdmVydGV4Rm9ybWF0OkpnLGdyYW51bGFyaXR5OnZvaWQgMCxoZWlnaHQ6dm9pZCAwLHJvdGF0aW9uOnZvaWQgMCxzdFJvdGF0aW9uOnZvaWQgMCxleHRydWRlZEhlaWdodDp2b2lkIDAsc2hhZG93Vm9sdW1lOnZvaWQgMCxvZmZzZXRBdHRyaWJ1dGU6dm9pZCAwfTtBci51bnBhY2s9ZnVuY3Rpb24oZSx0LG4pe3Q9dD8/MDtsZXQgbz1TZS51bnBhY2soZSx0LHpSKTt0Kz1TZS5wYWNrZWRMZW5ndGg7bGV0IGE9cS51bnBhY2soZSx0LEdSKTt0Kz1xLnBhY2tlZExlbmd0aDtsZXQgcj1oZS51bnBhY2soZSx0LEpnKTt0Kz1oZS5wYWNrZWRMZW5ndGg7bGV0IGk9ZVt0KytdLGY9ZVt0KytdLGQ9ZVt0KytdLGM9ZVt0KytdLHU9ZVt0KytdLGw9ZVt0KytdPT09MSxoPWVbdF07cmV0dXJuIGcobik/KG4uX3JlY3RhbmdsZT1TZS5jbG9uZShvLG4uX3JlY3RhbmdsZSksbi5fZWxsaXBzb2lkPXEuY2xvbmUoYSxuLl9lbGxpcHNvaWQpLG4uX3ZlcnRleEZvcm1hdD1oZS5jbG9uZShyLG4uX3ZlcnRleEZvcm1hdCksbi5fZ3JhbnVsYXJpdHk9aSxuLl9zdXJmYWNlSGVpZ2h0PWYsbi5fcm90YXRpb249ZCxuLl9zdFJvdGF0aW9uPWMsbi5fZXh0cnVkZWRIZWlnaHQ9dSxuLl9zaGFkb3dWb2x1bWU9bCxuLl9vZmZzZXRBdHRyaWJ1dGU9aD09PS0xP3ZvaWQgMDpoLG4pOihCaS5ncmFudWxhcml0eT1pLEJpLmhlaWdodD1mLEJpLnJvdGF0aW9uPWQsQmkuc3RSb3RhdGlvbj1jLEJpLmV4dHJ1ZGVkSGVpZ2h0PXUsQmkuc2hhZG93Vm9sdW1lPWwsQmkub2Zmc2V0QXR0cmlidXRlPWg9PT0tMT92b2lkIDA6aCxuZXcgQXIoQmkpKX07QXIuY29tcHV0ZVJlY3RhbmdsZT1mdW5jdGlvbihlLHQpe2U9ZT8/Q2UuRU1QVFlfT0JKRUNUO2xldCBuPWUucmVjdGFuZ2xlLG89ZS5ncmFudWxhcml0eT8/ay5SQURJQU5TX1BFUl9ERUdSRUUsYT1lLmVsbGlwc29pZD8/cS5kZWZhdWx0LHI9ZS5yb3RhdGlvbj8/MDtyZXR1cm4gWmcobixvLHIsYSx0KX07RkQ9bmV3IEosSVI9bmV3IFplLEREPW5ldyByZTtBci5jcmVhdGVHZW9tZXRyeT1mdW5jdGlvbihlKXtpZihrLmVxdWFsc0Vwc2lsb24oZS5fcmVjdGFuZ2xlLm5vcnRoLGUuX3JlY3RhbmdsZS5zb3V0aCxrLkVQU0lMT04xMCl8fGsuZXF1YWxzRXBzaWxvbihlLl9yZWN0YW5nbGUuZWFzdCxlLl9yZWN0YW5nbGUud2VzdCxrLkVQU0lMT04xMCkpcmV0dXJuO2xldCB0PWUuX3JlY3RhbmdsZSxuPWUuX2VsbGlwc29pZCxvPWUuX3JvdGF0aW9uLGE9ZS5fc3RSb3RhdGlvbixyPWUuX3ZlcnRleEZvcm1hdCxpPU9vLmNvbXB1dGVPcHRpb25zKHQsZS5fZ3JhbnVsYXJpdHksbyxhLERSLGpSLHZEKSxmPUZEO2lmKGEhPT0wfHxvIT09MCl7bGV0IG09U2UuY2VudGVyKHQsREQpLGI9bi5nZW9kZXRpY1N1cmZhY2VOb3JtYWxDYXJ0b2dyYXBoaWMobSxZZyk7WmUuZnJvbUF4aXNBbmdsZShiLC1hLElSKSxKLmZyb21RdWF0ZXJuaW9uKElSLGYpfWVsc2UgSi5jbG9uZShKLklERU5USVRZLGYpO2xldCBkPWUuX3N1cmZhY2VIZWlnaHQsYz1lLl9leHRydWRlZEhlaWdodCx1PSFrLmVxdWFsc0Vwc2lsb24oZCxjLDAsay5FUFNJTE9OMik7aS5sb25TY2FsYXI9MS9lLl9yZWN0YW5nbGUud2lkdGgsaS5sYXRTY2FsYXI9MS9lLl9yZWN0YW5nbGUuaGVpZ2h0LGkudGFuZ2VudFJvdGF0aW9uTWF0cml4PWY7bGV0IGwsaDtpZih0PWUuX3JlY3RhbmdsZSx1KXtsPVBEKGUsaSk7bGV0IG09Z2UuZnJvbVJlY3RhbmdsZTNEKHQsbixkLE1EKSxiPWdlLmZyb21SZWN0YW5nbGUzRCh0LG4sYyxDRCk7aD1nZS51bmlvbihtLGIpfWVsc2V7aWYobD1MUihlLGkpLGwuYXR0cmlidXRlcy5wb3NpdGlvbi52YWx1ZXM9U3Quc2NhbGVUb0dlb2RldGljSGVpZ2h0KGwuYXR0cmlidXRlcy5wb3NpdGlvbi52YWx1ZXMsZCxuLCExKSxnKGUuX29mZnNldEF0dHJpYnV0ZSkpe2xldCBtPWwuYXR0cmlidXRlcy5wb3NpdGlvbi52YWx1ZXMubGVuZ3RoLGI9ZS5fb2Zmc2V0QXR0cmlidXRlPT09c3QuTk9ORT8wOjEscD1uZXcgVWludDhBcnJheShtLzMpLmZpbGwoYik7bC5hdHRyaWJ1dGVzLmFwcGx5T2Zmc2V0PW5ldyBpZSh7Y29tcG9uZW50RGF0YXR5cGU6bmUuVU5TSUdORURfQllURSxjb21wb25lbnRzUGVyQXR0cmlidXRlOjEsdmFsdWVzOnB9KX1oPWdlLmZyb21SZWN0YW5nbGUzRCh0LG4sZCl9cmV0dXJuIHIucG9zaXRpb258fGRlbGV0ZSBsLmF0dHJpYnV0ZXMucG9zaXRpb24sbmV3IHZlKHthdHRyaWJ1dGVzOmwuYXR0cmlidXRlcyxpbmRpY2VzOmwuaW5kaWNlcyxwcmltaXRpdmVUeXBlOmwucHJpbWl0aXZlVHlwZSxib3VuZGluZ1NwaGVyZTpoLG9mZnNldEF0dHJpYnV0ZTplLl9vZmZzZXRBdHRyaWJ1dGV9KX07QXIuY3JlYXRlU2hhZG93Vm9sdW1lPWZ1bmN0aW9uKGUsdCxuKXtsZXQgbz1lLl9ncmFudWxhcml0eSxhPWUuX2VsbGlwc29pZCxyPXQobyxhKSxpPW4obyxhKTtyZXR1cm4gbmV3IEFyKHtyZWN0YW5nbGU6ZS5fcmVjdGFuZ2xlLHJvdGF0aW9uOmUuX3JvdGF0aW9uLGVsbGlwc29pZDphLHN0Um90YXRpb246ZS5fc3RSb3RhdGlvbixncmFudWxhcml0eTpvLGV4dHJ1ZGVkSGVpZ2h0OmksaGVpZ2h0OnIsdmVydGV4Rm9ybWF0OmhlLlBPU0lUSU9OX09OTFksc2hhZG93Vm9sdW1lOiEwfSl9O1BSPW5ldyBTZSxCRD1bbmV3IFksbmV3IFksbmV3IFldLFVEPW5ldyBRbyxMRD1uZXcgcmU7T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQXIucHJvdG90eXBlLHtyZWN0YW5nbGU6e2dldDpmdW5jdGlvbigpe3JldHVybiBnKHRoaXMuX3JvdGF0ZWRSZWN0YW5nbGUpfHwodGhpcy5fcm90YXRlZFJlY3RhbmdsZT1aZyh0aGlzLl9yZWN0YW5nbGUsdGhpcy5fZ3JhbnVsYXJpdHksdGhpcy5fcm90YXRpb24sdGhpcy5fZWxsaXBzb2lkKSksdGhpcy5fcm90YXRlZFJlY3RhbmdsZX19LHRleHR1cmVDb29yZGluYXRlUm90YXRpb25Qb2ludHM6e2dldDpmdW5jdGlvbigpe3JldHVybiBnKHRoaXMuX3RleHR1cmVDb29yZGluYXRlUm90YXRpb25Qb2ludHMpfHwodGhpcy5fdGV4dHVyZUNvb3JkaW5hdGVSb3RhdGlvblBvaW50cz1qRCh0aGlzKSksdGhpcy5fdGV4dHVyZUNvb3JkaW5hdGVSb3RhdGlvblBvaW50c319fSk7UWc9QXJ9KTt2YXIgJGc9e307cnQoJGcse2RlZmF1bHQ6KCk9PkdEfSk7ZnVuY3Rpb24gekQoZSx0KXtyZXR1cm4gZyh0KSYmKGU9UWcudW5wYWNrKGUsdCkpLGUuX2VsbGlwc29pZD1xLmNsb25lKGUuX2VsbGlwc29pZCksZS5fcmVjdGFuZ2xlPVNlLmNsb25lKGUuX3JlY3RhbmdsZSksUWcuY3JlYXRlR2VvbWV0cnkoZSl9dmFyIEdELGVfPVgoKCk9PntzZSgpO1dlKCk7X24oKTtWUigpO0dEPXpEfSk7ZnVuY3Rpb24gSFIoZSx0KXtsZXQgbj1lLl9lbGxpcHNvaWQsbz10LmhlaWdodCxhPXQud2lkdGgscj10Lm5vcnRoQ2FwLGk9dC5zb3V0aENhcCxmPW8sZD0yLGM9MCx1PTQ7ciYmKGQtPTEsZi09MSxjKz0xLHUtPTIpLGkmJihkLT0xLGYtPTEsYys9MSx1LT0yKSxjKz1kKmErMipmLXU7bGV0IGw9bmV3IEZsb2F0NjRBcnJheShjKjMpLGg9MCxtPTAsYixwPUtEO2lmKHIpT28uY29tcHV0ZVBvc2l0aW9uKHQsbiwhMSxtLDAscCksbFtoKytdPXAueCxsW2grK109cC55LGxbaCsrXT1wLno7ZWxzZSBmb3IoYj0wO2I8YTtiKyspT28uY29tcHV0ZVBvc2l0aW9uKHQsbiwhMSxtLGIscCksbFtoKytdPXAueCxsW2grK109cC55LGxbaCsrXT1wLno7Zm9yKGI9YS0xLG09MTttPG87bSsrKU9vLmNvbXB1dGVQb3NpdGlvbih0LG4sITEsbSxiLHApLGxbaCsrXT1wLngsbFtoKytdPXAueSxsW2grK109cC56O2lmKG09by0xLCFpKWZvcihiPWEtMjtiPj0wO2ItLSlPby5jb21wdXRlUG9zaXRpb24odCxuLCExLG0sYixwKSxsW2grK109cC54LGxbaCsrXT1wLnksbFtoKytdPXAuejtmb3IoYj0wLG09by0yO20+MDttLS0pT28uY29tcHV0ZVBvc2l0aW9uKHQsbiwhMSxtLGIscCksbFtoKytdPXAueCxsW2grK109cC55LGxbaCsrXT1wLno7bGV0IHk9bC5sZW5ndGgvMyoyLFQ9a2UuY3JlYXRlVHlwZWRBcnJheShsLmxlbmd0aC8zLHkpLF89MDtmb3IobGV0IHc9MDt3PGwubGVuZ3RoLzMtMTt3KyspVFtfKytdPXcsVFtfKytdPXcrMTtUW18rK109bC5sZW5ndGgvMy0xLFRbXysrXT0wO2xldCBFPW5ldyB2ZSh7YXR0cmlidXRlczpuZXcgbnQscHJpbWl0aXZlVHlwZTpVZS5MSU5FU30pO3JldHVybiBFLmF0dHJpYnV0ZXMucG9zaXRpb249bmV3IGllKHtjb21wb25lbnREYXRhdHlwZTpuZS5ET1VCTEUsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczpsfSksRS5pbmRpY2VzPVQsRX1mdW5jdGlvbiBXRChlLHQpe2xldCBuPWUuX3N1cmZhY2VIZWlnaHQsbz1lLl9leHRydWRlZEhlaWdodCxhPWUuX2VsbGlwc29pZCxyPUhSKGUsdCksaT10LmhlaWdodCxmPXQud2lkdGgsZD1TdC5zY2FsZVRvR2VvZGV0aWNIZWlnaHQoci5hdHRyaWJ1dGVzLnBvc2l0aW9uLnZhbHVlcyxuLGEsITEpLGM9ZC5sZW5ndGgsdT1uZXcgRmxvYXQ2NEFycmF5KGMqMik7dS5zZXQoZCk7bGV0IGw9U3Quc2NhbGVUb0dlb2RldGljSGVpZ2h0KHIuYXR0cmlidXRlcy5wb3NpdGlvbi52YWx1ZXMsbyxhKTt1LnNldChsLGMpLHIuYXR0cmlidXRlcy5wb3NpdGlvbi52YWx1ZXM9dTtsZXQgaD10Lm5vcnRoQ2FwLG09dC5zb3V0aENhcCxiPTQ7aCYmKGItPTEpLG0mJihiLT0xKTtsZXQgcD0odS5sZW5ndGgvMytiKSoyLHk9a2UuY3JlYXRlVHlwZWRBcnJheSh1Lmxlbmd0aC8zLHApO2M9dS5sZW5ndGgvNjtsZXQgVD0wO2ZvcihsZXQgRT0wO0U8Yy0xO0UrKyl5W1QrK109RSx5W1QrK109RSsxLHlbVCsrXT1FK2MseVtUKytdPUUrYysxO3lbVCsrXT1jLTEseVtUKytdPTAseVtUKytdPWMrYy0xLHlbVCsrXT1jLHlbVCsrXT0wLHlbVCsrXT1jO2xldCBfO2lmKGgpXz1pLTE7ZWxzZXtsZXQgRT1mLTE7eVtUKytdPUUseVtUKytdPUUrYyxfPWYraS0yfWlmKHlbVCsrXT1fLHlbVCsrXT1fK2MsIW0pe2xldCBFPWYrXy0xO3lbVCsrXT1FLHlbVF09RStjfXJldHVybiByLmluZGljZXM9eSxyfWZ1bmN0aW9uIEJzKGUpe2U9ZT8/Q2UuRU1QVFlfT0JKRUNUO2xldCB0PWUucmVjdGFuZ2xlLG49ZS5ncmFudWxhcml0eT8/ay5SQURJQU5TX1BFUl9ERUdSRUUsbz1lLmVsbGlwc29pZD8/cS5kZWZhdWx0LGE9ZS5yb3RhdGlvbj8/MCxyPWUuaGVpZ2h0Pz8wLGk9ZS5leHRydWRlZEhlaWdodD8/cjt0aGlzLl9yZWN0YW5nbGU9U2UuY2xvbmUodCksdGhpcy5fZ3JhbnVsYXJpdHk9bix0aGlzLl9lbGxpcHNvaWQ9byx0aGlzLl9zdXJmYWNlSGVpZ2h0PU1hdGgubWF4KHIsaSksdGhpcy5fcm90YXRpb249YSx0aGlzLl9leHRydWRlZEhlaWdodD1NYXRoLm1pbihyLGkpLHRoaXMuX29mZnNldEF0dHJpYnV0ZT1lLm9mZnNldEF0dHJpYnV0ZSx0aGlzLl93b3JrZXJOYW1lPSJjcmVhdGVSZWN0YW5nbGVPdXRsaW5lR2VvbWV0cnkifXZhciBWRCxIRCxLRCxxRCxLUixxUixEcyxYRCx0XyxXUj1YKCgpPT57TXQoKTtJZSgpO1R0KCk7dnQoKTttdCgpO3NlKCk7V2UoKTskdCgpO2VuKCk7dW4oKTt6bygpO25uKCk7R2UoKTtKYSgpO2NuKCk7X24oKTtXZygpO1ZEPW5ldyBnZSxIRD1uZXcgZ2UsS0Q9bmV3IHMscUQ9bmV3IFNlO0JzLnBhY2tlZExlbmd0aD1TZS5wYWNrZWRMZW5ndGgrcS5wYWNrZWRMZW5ndGgrNTtCcy5wYWNrPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gbj1uPz8wLFNlLnBhY2soZS5fcmVjdGFuZ2xlLHQsbiksbis9U2UucGFja2VkTGVuZ3RoLHEucGFjayhlLl9lbGxpcHNvaWQsdCxuKSxuKz1xLnBhY2tlZExlbmd0aCx0W24rK109ZS5fZ3JhbnVsYXJpdHksdFtuKytdPWUuX3N1cmZhY2VIZWlnaHQsdFtuKytdPWUuX3JvdGF0aW9uLHRbbisrXT1lLl9leHRydWRlZEhlaWdodCx0W25dPWUuX29mZnNldEF0dHJpYnV0ZT8/LTEsdH07S1I9bmV3IFNlLHFSPXEuY2xvbmUocS5VTklUX1NQSEVSRSksRHM9e3JlY3RhbmdsZTpLUixlbGxpcHNvaWQ6cVIsZ3JhbnVsYXJpdHk6dm9pZCAwLGhlaWdodDp2b2lkIDAscm90YXRpb246dm9pZCAwLGV4dHJ1ZGVkSGVpZ2h0OnZvaWQgMCxvZmZzZXRBdHRyaWJ1dGU6dm9pZCAwfTtCcy51bnBhY2s9ZnVuY3Rpb24oZSx0LG4pe3Q9dD8/MDtsZXQgbz1TZS51bnBhY2soZSx0LEtSKTt0Kz1TZS5wYWNrZWRMZW5ndGg7bGV0IGE9cS51bnBhY2soZSx0LHFSKTt0Kz1xLnBhY2tlZExlbmd0aDtsZXQgcj1lW3QrK10saT1lW3QrK10sZj1lW3QrK10sZD1lW3QrK10sYz1lW3RdO3JldHVybiBnKG4pPyhuLl9yZWN0YW5nbGU9U2UuY2xvbmUobyxuLl9yZWN0YW5nbGUpLG4uX2VsbGlwc29pZD1xLmNsb25lKGEsbi5fZWxsaXBzb2lkKSxuLl9zdXJmYWNlSGVpZ2h0PWksbi5fcm90YXRpb249ZixuLl9leHRydWRlZEhlaWdodD1kLG4uX29mZnNldEF0dHJpYnV0ZT1jPT09LTE/dm9pZCAwOmMsbik6KERzLmdyYW51bGFyaXR5PXIsRHMuaGVpZ2h0PWksRHMucm90YXRpb249ZixEcy5leHRydWRlZEhlaWdodD1kLERzLm9mZnNldEF0dHJpYnV0ZT1jPT09LTE/dm9pZCAwOmMsbmV3IEJzKERzKSl9O1hEPW5ldyByZTtCcy5jcmVhdGVHZW9tZXRyeT1mdW5jdGlvbihlKXtsZXQgdD1lLl9yZWN0YW5nbGUsbj1lLl9lbGxpcHNvaWQsbz1Pby5jb21wdXRlT3B0aW9ucyh0LGUuX2dyYW51bGFyaXR5LGUuX3JvdGF0aW9uLDAscUQsWEQpLGEscjtpZihrLmVxdWFsc0Vwc2lsb24odC5ub3J0aCx0LnNvdXRoLGsuRVBTSUxPTjEwKXx8ay5lcXVhbHNFcHNpbG9uKHQuZWFzdCx0Lndlc3Qsay5FUFNJTE9OMTApKXJldHVybjtsZXQgaT1lLl9zdXJmYWNlSGVpZ2h0LGY9ZS5fZXh0cnVkZWRIZWlnaHQsZD0hay5lcXVhbHNFcHNpbG9uKGksZiwwLGsuRVBTSUxPTjIpLGM7aWYoZCl7aWYoYT1XRChlLG8pLGcoZS5fb2Zmc2V0QXR0cmlidXRlKSl7bGV0IGg9YS5hdHRyaWJ1dGVzLnBvc2l0aW9uLnZhbHVlcy5sZW5ndGgvMyxtPW5ldyBVaW50OEFycmF5KGgpO2UuX29mZnNldEF0dHJpYnV0ZT09PXN0LlRPUD9tPW0uZmlsbCgxLDAsaC8yKTooYz1lLl9vZmZzZXRBdHRyaWJ1dGU9PT1zdC5OT05FPzA6MSxtPW0uZmlsbChjKSksYS5hdHRyaWJ1dGVzLmFwcGx5T2Zmc2V0PW5ldyBpZSh7Y29tcG9uZW50RGF0YXR5cGU6bmUuVU5TSUdORURfQllURSxjb21wb25lbnRzUGVyQXR0cmlidXRlOjEsdmFsdWVzOm19KX1sZXQgdT1nZS5mcm9tUmVjdGFuZ2xlM0QodCxuLGksSEQpLGw9Z2UuZnJvbVJlY3RhbmdsZTNEKHQsbixmLFZEKTtyPWdlLnVuaW9uKHUsbCl9ZWxzZXtpZihhPUhSKGUsbyksYS5hdHRyaWJ1dGVzLnBvc2l0aW9uLnZhbHVlcz1TdC5zY2FsZVRvR2VvZGV0aWNIZWlnaHQoYS5hdHRyaWJ1dGVzLnBvc2l0aW9uLnZhbHVlcyxpLG4sITEpLGcoZS5fb2Zmc2V0QXR0cmlidXRlKSl7bGV0IHU9YS5hdHRyaWJ1dGVzLnBvc2l0aW9uLnZhbHVlcy5sZW5ndGg7Yz1lLl9vZmZzZXRBdHRyaWJ1dGU9PT1zdC5OT05FPzA6MTtsZXQgbD1uZXcgVWludDhBcnJheSh1LzMpLmZpbGwoYyk7YS5hdHRyaWJ1dGVzLmFwcGx5T2Zmc2V0PW5ldyBpZSh7Y29tcG9uZW50RGF0YXR5cGU6bmUuVU5TSUdORURfQllURSxjb21wb25lbnRzUGVyQXR0cmlidXRlOjEsdmFsdWVzOmx9KX1yPWdlLmZyb21SZWN0YW5nbGUzRCh0LG4saSl9cmV0dXJuIG5ldyB2ZSh7YXR0cmlidXRlczphLmF0dHJpYnV0ZXMsaW5kaWNlczphLmluZGljZXMscHJpbWl0aXZlVHlwZTpVZS5MSU5FUyxib3VuZGluZ1NwaGVyZTpyLG9mZnNldEF0dHJpYnV0ZTplLl9vZmZzZXRBdHRyaWJ1dGV9KX07dF89QnN9KTt2YXIgbl89e307cnQobl8se2RlZmF1bHQ6KCk9PkpEfSk7ZnVuY3Rpb24gWUQoZSx0KXtyZXR1cm4gZyh0KSYmKGU9dF8udW5wYWNrKGUsdCkpLGUuX2VsbGlwc29pZD1xLmNsb25lKGUuX2VsbGlwc29pZCksZS5fcmVjdGFuZ2xlPVNlLmNsb25lKGUuX3JlY3RhbmdsZSksdF8uY3JlYXRlR2VvbWV0cnkoZSl9dmFyIEpELG9fPVgoKCk9PntzZSgpO1dlKCk7X24oKTtXUigpO0pEPVlEfSk7ZnVuY3Rpb24gWkQoZSx0LG4sbyxhLHIsaSl7bGV0IGY9QW4ubnVtYmVyT2ZQb2ludHMoZSx0LGEpLGQsYz1uLnJlZCx1PW4uZ3JlZW4sbD1uLmJsdWUsaD1uLmFscGhhLG09by5yZWQsYj1vLmdyZWVuLHA9by5ibHVlLHk9by5hbHBoYTtpZigkZS5lcXVhbHMobixvKSl7Zm9yKGQ9MDtkPGY7ZCsrKXJbaSsrXT0kZS5mbG9hdFRvQnl0ZShjKSxyW2krK109JGUuZmxvYXRUb0J5dGUodSkscltpKytdPSRlLmZsb2F0VG9CeXRlKGwpLHJbaSsrXT0kZS5mbG9hdFRvQnl0ZShoKTtyZXR1cm4gaX1sZXQgVD0obS1jKS9mLF89KGItdSkvZixFPShwLWwpL2Ysdz0oeS1oKS9mLFI9aTtmb3IoZD0wO2Q8ZjtkKyspcltSKytdPSRlLmZsb2F0VG9CeXRlKGMrZCpUKSxyW1IrK109JGUuZmxvYXRUb0J5dGUodStkKl8pLHJbUisrXT0kZS5mbG9hdFRvQnl0ZShsK2QqRSkscltSKytdPSRlLmZsb2F0VG9CeXRlKGgrZCp3KTtyZXR1cm4gUn1mdW5jdGlvbiB1ZChlKXtlPWU/P0NlLkVNUFRZX09CSkVDVDtsZXQgdD1lLnBvc2l0aW9ucyxuPWUuY29sb3JzLG89ZS5jb2xvcnNQZXJWZXJ0ZXg/PyExO3RoaXMuX3Bvc2l0aW9ucz10LHRoaXMuX2NvbG9ycz1uLHRoaXMuX2NvbG9yc1BlclZlcnRleD1vLHRoaXMuX2FyY1R5cGU9ZS5hcmNUeXBlPz93dC5HRU9ERVNJQyx0aGlzLl9ncmFudWxhcml0eT1lLmdyYW51bGFyaXR5Pz9rLlJBRElBTlNfUEVSX0RFR1JFRSx0aGlzLl9lbGxpcHNvaWQ9ZS5lbGxpcHNvaWQ/P3EuZGVmYXVsdCx0aGlzLl93b3JrZXJOYW1lPSJjcmVhdGVTaW1wbGVQb2x5bGluZUdlb21ldHJ5IjtsZXQgYT0xK3QubGVuZ3RoKnMucGFja2VkTGVuZ3RoO2ErPWcobik/MStuLmxlbmd0aCokZS5wYWNrZWRMZW5ndGg6MSx0aGlzLnBhY2tlZExlbmd0aD1hK3EucGFja2VkTGVuZ3RoKzN9dmFyIFZoLEhoLFFELGFfLFhSPVgoKCk9PntoYygpO010KCk7SWUoKTtrcygpO3Z0KCk7bXQoKTtzZSgpO1dlKCk7JHQoKTtlbigpO3VuKCk7bm4oKTtHZSgpO3dzKCk7Y24oKTt1ZC5wYWNrPWZ1bmN0aW9uKGUsdCxuKXtuPW4/PzA7bGV0IG8sYT1lLl9wb3NpdGlvbnMscj1hLmxlbmd0aDtmb3IodFtuKytdPXIsbz0wO288cjsrK28sbis9cy5wYWNrZWRMZW5ndGgpcy5wYWNrKGFbb10sdCxuKTtsZXQgaT1lLl9jb2xvcnM7Zm9yKHI9ZyhpKT9pLmxlbmd0aDowLHRbbisrXT1yLG89MDtvPHI7KytvLG4rPSRlLnBhY2tlZExlbmd0aCkkZS5wYWNrKGlbb10sdCxuKTtyZXR1cm4gcS5wYWNrKGUuX2VsbGlwc29pZCx0LG4pLG4rPXEucGFja2VkTGVuZ3RoLHRbbisrXT1lLl9jb2xvcnNQZXJWZXJ0ZXg/MTowLHRbbisrXT1lLl9hcmNUeXBlLHRbbl09ZS5fZ3JhbnVsYXJpdHksdH07dWQudW5wYWNrPWZ1bmN0aW9uKGUsdCxuKXt0PXQ/PzA7bGV0IG8sYT1lW3QrK10scj1uZXcgQXJyYXkoYSk7Zm9yKG89MDtvPGE7KytvLHQrPXMucGFja2VkTGVuZ3RoKXJbb109cy51bnBhY2soZSx0KTthPWVbdCsrXTtsZXQgaT1hPjA/bmV3IEFycmF5KGEpOnZvaWQgMDtmb3Iobz0wO288YTsrK28sdCs9JGUucGFja2VkTGVuZ3RoKWlbb109JGUudW5wYWNrKGUsdCk7bGV0IGY9cS51bnBhY2soZSx0KTt0Kz1xLnBhY2tlZExlbmd0aDtsZXQgZD1lW3QrK109PT0xLGM9ZVt0KytdLHU9ZVt0XTtyZXR1cm4gZyhuKT8obi5fcG9zaXRpb25zPXIsbi5fY29sb3JzPWksbi5fZWxsaXBzb2lkPWYsbi5fY29sb3JzUGVyVmVydGV4PWQsbi5fYXJjVHlwZT1jLG4uX2dyYW51bGFyaXR5PXUsbik6bmV3IHVkKHtwb3NpdGlvbnM6cixjb2xvcnM6aSxlbGxpcHNvaWQ6Zixjb2xvcnNQZXJWZXJ0ZXg6ZCxhcmNUeXBlOmMsZ3JhbnVsYXJpdHk6dX0pfTtWaD1uZXcgQXJyYXkoMiksSGg9bmV3IEFycmF5KDIpLFFEPXtwb3NpdGlvbnM6VmgsaGVpZ2h0OkhoLGVsbGlwc29pZDp2b2lkIDAsbWluRGlzdGFuY2U6dm9pZCAwLGdyYW51bGFyaXR5OnZvaWQgMH07dWQuY3JlYXRlR2VvbWV0cnk9ZnVuY3Rpb24oZSl7bGV0IHQ9ZS5fcG9zaXRpb25zLG49ZS5fY29sb3JzLG89ZS5fY29sb3JzUGVyVmVydGV4LGE9ZS5fYXJjVHlwZSxyPWUuX2dyYW51bGFyaXR5LGk9ZS5fZWxsaXBzb2lkLGY9ay5jaG9yZExlbmd0aChyLGkubWF4aW11bVJhZGl1cyksZD1nKG4pJiYhbyxjLHU9dC5sZW5ndGgsbCxoLG0sYixwPTA7aWYoYT09PXd0LkdFT0RFU0lDfHxhPT09d3QuUkhVTUIpe2xldCB3LFIsUzthPT09d3QuR0VPREVTSUM/KHc9ay5jaG9yZExlbmd0aChyLGkubWF4aW11bVJhZGl1cyksUj1Bbi5udW1iZXJPZlBvaW50cyxTPUFuLmdlbmVyYXRlQXJjKToodz1yLFI9QW4ubnVtYmVyT2ZQb2ludHNSaHVtYkxpbmUsUz1Bbi5nZW5lcmF0ZVJodW1iQXJjKTtsZXQgQz1Bbi5leHRyYWN0SGVpZ2h0cyh0LGkpLEk9UUQ7aWYoYT09PXd0LkdFT0RFU0lDP0kubWluRGlzdGFuY2U9ZjpJLmdyYW51bGFyaXR5PXIsSS5lbGxpcHNvaWQ9aSxkKXtsZXQgTj0wO2ZvcihjPTA7Yzx1LTE7YysrKU4rPVIodFtjXSx0W2MrMV0sdykrMTtsPW5ldyBGbG9hdDY0QXJyYXkoTiozKSxtPW5ldyBVaW50OEFycmF5KE4qNCksSS5wb3NpdGlvbnM9VmgsSS5oZWlnaHQ9SGg7bGV0IFA9MDtmb3IoYz0wO2M8dS0xOysrYyl7VmhbMF09dFtjXSxWaFsxXT10W2MrMV0sSGhbMF09Q1tjXSxIaFsxXT1DW2MrMV07bGV0IEY9UyhJKTtpZihnKG4pKXtsZXQgQT1GLmxlbmd0aC8zO2I9bltjXTtmb3IobGV0IHg9MDt4PEE7Kyt4KW1bUCsrXT0kZS5mbG9hdFRvQnl0ZShiLnJlZCksbVtQKytdPSRlLmZsb2F0VG9CeXRlKGIuZ3JlZW4pLG1bUCsrXT0kZS5mbG9hdFRvQnl0ZShiLmJsdWUpLG1bUCsrXT0kZS5mbG9hdFRvQnl0ZShiLmFscGhhKX1sLnNldChGLHApLHArPUYubGVuZ3RofX1lbHNlIGlmKEkucG9zaXRpb25zPXQsSS5oZWlnaHQ9QyxsPW5ldyBGbG9hdDY0QXJyYXkoUyhJKSksZyhuKSl7Zm9yKG09bmV3IFVpbnQ4QXJyYXkobC5sZW5ndGgvMyo0KSxjPTA7Yzx1LTE7KytjKXtsZXQgUD10W2NdLEY9dFtjKzFdLEE9bltjXSx4PW5bYysxXTtwPVpEKFAsRixBLHgsZixtLHApfWxldCBOPW5bdS0xXTttW3ArK109JGUuZmxvYXRUb0J5dGUoTi5yZWQpLG1bcCsrXT0kZS5mbG9hdFRvQnl0ZShOLmdyZWVuKSxtW3ArK109JGUuZmxvYXRUb0J5dGUoTi5ibHVlKSxtW3ArK109JGUuZmxvYXRUb0J5dGUoTi5hbHBoYSl9fWVsc2V7aD1kP3UqMi0yOnUsbD1uZXcgRmxvYXQ2NEFycmF5KGgqMyksbT1nKG4pP25ldyBVaW50OEFycmF5KGgqNCk6dm9pZCAwO2xldCB3PTAsUj0wO2ZvcihjPTA7Yzx1OysrYyl7bGV0IFM9dFtjXTtpZihkJiZjPjAmJihzLnBhY2soUyxsLHcpLHcrPTMsYj1uW2MtMV0sbVtSKytdPSRlLmZsb2F0VG9CeXRlKGIucmVkKSxtW1IrK109JGUuZmxvYXRUb0J5dGUoYi5ncmVlbiksbVtSKytdPSRlLmZsb2F0VG9CeXRlKGIuYmx1ZSksbVtSKytdPSRlLmZsb2F0VG9CeXRlKGIuYWxwaGEpKSxkJiZjPT09dS0xKWJyZWFrO3MucGFjayhTLGwsdyksdys9MyxnKG4pJiYoYj1uW2NdLG1bUisrXT0kZS5mbG9hdFRvQnl0ZShiLnJlZCksbVtSKytdPSRlLmZsb2F0VG9CeXRlKGIuZ3JlZW4pLG1bUisrXT0kZS5mbG9hdFRvQnl0ZShiLmJsdWUpLG1bUisrXT0kZS5mbG9hdFRvQnl0ZShiLmFscGhhKSl9fWxldCB5PW5ldyBudDt5LnBvc2l0aW9uPW5ldyBpZSh7Y29tcG9uZW50RGF0YXR5cGU6bmUuRE9VQkxFLGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6bH0pLGcobikmJih5LmNvbG9yPW5ldyBpZSh7Y29tcG9uZW50RGF0YXR5cGU6bmUuVU5TSUdORURfQllURSxjb21wb25lbnRzUGVyQXR0cmlidXRlOjQsdmFsdWVzOm0sbm9ybWFsaXplOiEwfSkpLGg9bC5sZW5ndGgvMztsZXQgVD0oaC0xKSoyLF89a2UuY3JlYXRlVHlwZWRBcnJheShoLFQpLEU9MDtmb3IoYz0wO2M8aC0xOysrYylfW0UrK109YyxfW0UrK109YysxO3JldHVybiBuZXcgdmUoe2F0dHJpYnV0ZXM6eSxpbmRpY2VzOl8scHJpbWl0aXZlVHlwZTpVZS5MSU5FUyxib3VuZGluZ1NwaGVyZTpnZS5mcm9tUG9pbnRzKHQpfSl9O2FfPXVkfSk7dmFyIHJfPXt9O3J0KHJfLHtkZWZhdWx0OigpPT5lQn0pO2Z1bmN0aW9uICREKGUsdCl7cmV0dXJuIGcodCkmJihlPWFfLnVucGFjayhlLHQpKSxlLl9lbGxpcHNvaWQ9cS5jbG9uZShlLl9lbGxpcHNvaWQpLGFfLmNyZWF0ZUdlb21ldHJ5KGUpfXZhciBlQixpXz1YKCgpPT57c2UoKTtXZSgpO1hSKCk7ZUI9JER9KTtmdW5jdGlvbiBVcyhlKXtsZXQgdD1lLnJhZGl1cz8/MSxvPXtyYWRpaTpuZXcgcyh0LHQsdCksc3RhY2tQYXJ0aXRpb25zOmUuc3RhY2tQYXJ0aXRpb25zLHNsaWNlUGFydGl0aW9uczplLnNsaWNlUGFydGl0aW9ucyx2ZXJ0ZXhGb3JtYXQ6ZS52ZXJ0ZXhGb3JtYXR9O3RoaXMuX2VsbGlwc29pZEdlb21ldHJ5PW5ldyBkYShvKSx0aGlzLl93b3JrZXJOYW1lPSJjcmVhdGVTcGhlcmVHZW9tZXRyeSJ9dmFyIHRCLFVpLGNfLFlSPVgoKCk9PntJZSgpO3NlKCk7U2goKTtrbygpO1VzLnBhY2tlZExlbmd0aD1kYS5wYWNrZWRMZW5ndGg7VXMucGFjaz1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGRhLnBhY2soZS5fZWxsaXBzb2lkR2VvbWV0cnksdCxuKX07dEI9bmV3IGRhLFVpPXtyYWRpdXM6dm9pZCAwLHJhZGlpOm5ldyBzLHZlcnRleEZvcm1hdDpuZXcgaGUsc3RhY2tQYXJ0aXRpb25zOnZvaWQgMCxzbGljZVBhcnRpdGlvbnM6dm9pZCAwfTtVcy51bnBhY2s9ZnVuY3Rpb24oZSx0LG4pe2xldCBvPWRhLnVucGFjayhlLHQsdEIpO3JldHVybiBVaS52ZXJ0ZXhGb3JtYXQ9aGUuY2xvbmUoby5fdmVydGV4Rm9ybWF0LFVpLnZlcnRleEZvcm1hdCksVWkuc3RhY2tQYXJ0aXRpb25zPW8uX3N0YWNrUGFydGl0aW9ucyxVaS5zbGljZVBhcnRpdGlvbnM9by5fc2xpY2VQYXJ0aXRpb25zLGcobik/KHMuY2xvbmUoby5fcmFkaWksVWkucmFkaWkpLG4uX2VsbGlwc29pZEdlb21ldHJ5PW5ldyBkYShVaSksbik6KFVpLnJhZGl1cz1vLl9yYWRpaS54LG5ldyBVcyhVaSkpfTtVcy5jcmVhdGVHZW9tZXRyeT1mdW5jdGlvbihlKXtyZXR1cm4gZGEuY3JlYXRlR2VvbWV0cnkoZS5fZWxsaXBzb2lkR2VvbWV0cnkpfTtjXz1Vc30pO3ZhciBzXz17fTtydChzXyx7ZGVmYXVsdDooKT0+b0J9KTtmdW5jdGlvbiBuQihlLHQpe3JldHVybiBnKHQpJiYoZT1jXy51bnBhY2soZSx0KSksY18uY3JlYXRlR2VvbWV0cnkoZSl9dmFyIG9CLGZfPVgoKCk9PntzZSgpO1lSKCk7b0I9bkJ9KTtmdW5jdGlvbiBMcyhlKXtsZXQgdD1lLnJhZGl1cz8/MSxvPXtyYWRpaTpuZXcgcyh0LHQsdCksc3RhY2tQYXJ0aXRpb25zOmUuc3RhY2tQYXJ0aXRpb25zLHNsaWNlUGFydGl0aW9uczplLnNsaWNlUGFydGl0aW9ucyxzdWJkaXZpc2lvbnM6ZS5zdWJkaXZpc2lvbnN9O3RoaXMuX2VsbGlwc29pZEdlb21ldHJ5PW5ldyBRYShvKSx0aGlzLl93b3JrZXJOYW1lPSJjcmVhdGVTcGhlcmVPdXRsaW5lR2VvbWV0cnkifXZhciBhQix4YyxkXyxKUj1YKCgpPT57SWUoKTtzZSgpO3EwKCk7THMucGFja2VkTGVuZ3RoPVFhLnBhY2tlZExlbmd0aDtMcy5wYWNrPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gUWEucGFjayhlLl9lbGxpcHNvaWRHZW9tZXRyeSx0LG4pfTthQj1uZXcgUWEseGM9e3JhZGl1czp2b2lkIDAscmFkaWk6bmV3IHMsc3RhY2tQYXJ0aXRpb25zOnZvaWQgMCxzbGljZVBhcnRpdGlvbnM6dm9pZCAwLHN1YmRpdmlzaW9uczp2b2lkIDB9O0xzLnVucGFjaz1mdW5jdGlvbihlLHQsbil7bGV0IG89UWEudW5wYWNrKGUsdCxhQik7cmV0dXJuIHhjLnN0YWNrUGFydGl0aW9ucz1vLl9zdGFja1BhcnRpdGlvbnMseGMuc2xpY2VQYXJ0aXRpb25zPW8uX3NsaWNlUGFydGl0aW9ucyx4Yy5zdWJkaXZpc2lvbnM9by5fc3ViZGl2aXNpb25zLGcobik/KHMuY2xvbmUoby5fcmFkaWkseGMucmFkaWkpLG4uX2VsbGlwc29pZEdlb21ldHJ5PW5ldyBRYSh4Yyksbik6KHhjLnJhZGl1cz1vLl9yYWRpaS54LG5ldyBMcyh4YykpfTtMcy5jcmVhdGVHZW9tZXRyeT1mdW5jdGlvbihlKXtyZXR1cm4gUWEuY3JlYXRlR2VvbWV0cnkoZS5fZWxsaXBzb2lkR2VvbWV0cnkpfTtkXz1Mc30pO3ZhciB1Xz17fTtydCh1Xyx7ZGVmYXVsdDooKT0+aUJ9KTtmdW5jdGlvbiByQihlLHQpe3JldHVybiBnKHQpJiYoZT1kXy51bnBhY2soZSx0KSksZF8uY3JlYXRlR2VvbWV0cnkoZSl9dmFyIGlCLGxfPVgoKCk9PntzZSgpO0pSKCk7aUI9ckJ9KTt2YXIgaF89e307cnQoaF8se2RlZmF1bHQ6KCk9Pk9CfSk7ZnVuY3Rpb24gZEIoZSx0LG4sbyxhLHIsaSl7bGV0IGY9ZS5sZW5ndGgsZD1uZXcgRmxvYXQ2NEFycmF5KGYqMyk7Zm9yKGxldCBjPTA7YzxmOysrYyl7bGV0IHU9ZVtjXSxsPXRbY10saD1uW2NdLG09ay5sZXJwKG8ud2VzdCxvLmVhc3QsdS9sZCksYj1rLmxlcnAoby5zb3V0aCxvLm5vcnRoLGwvbGQpLHA9ay5sZXJwKGEscixoL2xkKSx5PXJlLmZyb21SYWRpYW5zKG0sYixwLHNCKSxUPWkuY2FydG9ncmFwaGljVG9DYXJ0ZXNpYW4oeSxmQik7cy5wYWNrKFQsZCxjKjMpfXJldHVybiBkfWZ1bmN0aW9uIHVCKGUpe2xldCB0PWUubGVuZ3RoLG49bmV3IFVpbnQzMkFycmF5KHQrMSksbz0wO2ZvcihsZXQgYT0wO2E8dDsrK2EpblthXT1vLG8rPWVbYV07cmV0dXJuIG5bdF09byxufWZ1bmN0aW9uIG1CKGUsdCxuLG8pe2xldCBhPW8ubGVuZ3RoLHI9ZS5sZW5ndGgsaT1uZXcgVWludDhBcnJheShyKSxmPWxCLGQ9aEIsYz0wO2ZvcihsZXQgbD0wO2w8YTtsKyspe2xldCBoPW9bbF0sbT1oO2ZvcihsZXQgYj0xO2I8aDtiKyspe2xldCBwPWMrYix5PXAtMTtkLmxvbmdpdHVkZT1lW3BdLGQubGF0aXR1ZGU9dFtwXSxmLmxvbmdpdHVkZT1lW3ldLGYubGF0aXR1ZGU9dFt5XSxyZS5lcXVhbHMoZCxmKSYmKG0tLSxpW3ldPTEpfW9bbF09bSxjKz1ofWxldCB1PTA7Zm9yKGxldCBsPTA7bDxyO2wrKylpW2xdIT09MSYmKGVbdV09ZVtsXSx0W3VdPXRbbF0sblt1XT1uW2xdLHUrKyl9ZnVuY3Rpb24gdHgoZSl7bGV0IHQ9ZSo4LG49dCozLG89dCo0O3RoaXMuc3RhcnRFbGxpcHNvaWROb3JtYWxzPW5ldyBGbG9hdDMyQXJyYXkobiksdGhpcy5lbmRFbGxpcHNvaWROb3JtYWxzPW5ldyBGbG9hdDMyQXJyYXkobiksdGhpcy5zdGFydFBvc2l0aW9uQW5kSGVpZ2h0cz1uZXcgRmxvYXQzMkFycmF5KG8pLHRoaXMuc3RhcnRGYWNlTm9ybWFsQW5kVmVydGV4Q29ybmVySWRzPW5ldyBGbG9hdDMyQXJyYXkobyksdGhpcy5lbmRQb3NpdGlvbkFuZEhlaWdodHM9bmV3IEZsb2F0MzJBcnJheShvKSx0aGlzLmVuZEZhY2VOb3JtYWxBbmRIYWxmV2lkdGhzPW5ldyBGbG9hdDMyQXJyYXkobyksdGhpcy52ZXJ0ZXhCYXRjaElkcz1uZXcgVWludDE2QXJyYXkodCksdGhpcy5pbmRpY2VzPWtlLmNyZWF0ZVR5cGVkQXJyYXkodCwzNiplKSx0aGlzLnZlYzNPZmZzZXQ9MCx0aGlzLnZlYzRPZmZzZXQ9MCx0aGlzLmJhdGNoSWRPZmZzZXQ9MCx0aGlzLmluZGV4T2Zmc2V0PTAsdGhpcy52b2x1bWVTdGFydEluZGV4PTB9ZnVuY3Rpb24gUVIoZSx0LG4sbyxhKXtsZXQgcj1zLnN1YnRyYWN0KG4sdCxiQiksaT1zLnN1YnRyYWN0KHQsZSxaUik7cmV0dXJuIHMubm9ybWFsaXplKHIscikscy5ub3JtYWxpemUoaSxpKSxzLmRvdChyLGkpPGNCJiYoaT1zLm11bHRpcGx5QnlTY2FsYXIoaSwtMSxaUikpLHMuYWRkKHIsaSxhKSxzLmVxdWFscyhhLHMuWkVSTykmJihhPXMuc3VidHJhY3QoZSx0KSkscy5jcm9zcyhhLG8sYSkscy5jcm9zcyhvLGEsYSkscy5ub3JtYWxpemUoYSxhKSxhfWZ1bmN0aW9uIHhCKGUsdCl7bGV0IG49bmV3IFVpbnQxNkFycmF5KGUucG9zaXRpb25zKSxvPW5ldyBVaW50MTZBcnJheShlLndpZHRocyksYT1uZXcgVWludDMyQXJyYXkoZS5jb3VudHMpLHI9bmV3IFVpbnQxNkFycmF5KGUuYmF0Y2hJZHMpLGk9QUIsZj13QixkPVRCLGM9bmV3IEZsb2F0NjRBcnJheShlLnBhY2tlZEJ1ZmZlciksdT0wLGw9Y1t1KytdLGg9Y1t1KytdO1NlLnVucGFjayhjLHUsaSksdSs9U2UucGFja2VkTGVuZ3RoLHEudW5wYWNrKGMsdSxmKSx1Kz1xLnBhY2tlZExlbmd0aCxzLnVucGFjayhjLHUsZCk7bGV0IG0sYj1uLmxlbmd0aC8zLHA9bi5zdWJhcnJheSgwLGIpLHk9bi5zdWJhcnJheShiLDIqYiksVD1uLnN1YmFycmF5KDIqYiwzKmIpO1Z0LnppZ1phZ0RlbHRhRGVjb2RlKHAseSxUKSxtQihwLHksVCxhKTtsZXQgXz1hLmxlbmd0aCxFPTA7Zm9yKG09MDttPF87bSsrKXtsZXQgRj1hW21dO0UrPUYtMX1sZXQgdz1uZXcgdHgoRSksUj1kQihwLHksVCxpLGwsaCxmLGQpO2I9cC5sZW5ndGg7bGV0IFM9bmV3IEZsb2F0MzJBcnJheShiKjMpO2ZvcihtPTA7bTxiOysrbSlTW20qM109UlttKjNdLWQueCxTW20qMysxXT1SW20qMysxXS1kLnksU1ttKjMrMl09UlttKjMrMl0tZC56O2xldCBDPTAsST0wO2ZvcihtPTA7bTxfO20rKyl7bGV0IEY9YVttXS0xLEE9b1ttXSouNSx4PXJbbV0sTT1DO2ZvcihsZXQgdj0wO3Y8Rjt2Kyspe2xldCBVPXMudW5wYWNrKFMsQyxFQiksej1zLnVucGFjayhTLEMrMyxSQiksRD1UW0ldLEc9VFtJKzFdO0Q9ay5sZXJwKGwsaCxEL2xkKSxHPWsubGVycChsLGgsRy9sZCksSSsrO2xldCBIPUtoLE89cWg7aWYodj09PTApe2xldCBaPU0rRiozLG9lPXMudW5wYWNrKFMsWixLaCk7aWYocy5lcXVhbHMob2UsVSkpcy51bnBhY2soUyxaLTMsSCk7ZWxzZXtsZXQgY2U9cy5zdWJ0cmFjdChVLHosS2gpO0g9cy5hZGQoY2UsVSxLaCl9fWVsc2Ugcy51bnBhY2soUyxDLTMsSCk7aWYodj09PUYtMSl7bGV0IFo9cy51bnBhY2soUyxNLHFoKTtpZihzLmVxdWFscyhaLHopKXMudW5wYWNrKFMsTSszLE8pO2Vsc2V7bGV0IG9lPXMuc3VidHJhY3QoeixVLHFoKTtPPXMuYWRkKG9lLHoscWgpfX1lbHNlIHMudW5wYWNrKFMsQys2LE8pO3cuYWRkVm9sdW1lKEgsVSx6LE8sRCxHLEEseCxkLGYpLEMrPTN9Qys9MyxJKyt9bGV0IE49dy5pbmRpY2VzO3QucHVzaCh3LnN0YXJ0RWxsaXBzb2lkTm9ybWFscy5idWZmZXIpLHQucHVzaCh3LmVuZEVsbGlwc29pZE5vcm1hbHMuYnVmZmVyKSx0LnB1c2gody5zdGFydFBvc2l0aW9uQW5kSGVpZ2h0cy5idWZmZXIpLHQucHVzaCh3LnN0YXJ0RmFjZU5vcm1hbEFuZFZlcnRleENvcm5lcklkcy5idWZmZXIpLHQucHVzaCh3LmVuZFBvc2l0aW9uQW5kSGVpZ2h0cy5idWZmZXIpLHQucHVzaCh3LmVuZEZhY2VOb3JtYWxBbmRIYWxmV2lkdGhzLmJ1ZmZlciksdC5wdXNoKHcudmVydGV4QmF0Y2hJZHMuYnVmZmVyKSx0LnB1c2goTi5idWZmZXIpO2xldCBQPXtpbmRleERhdGF0eXBlOk4uQllURVNfUEVSX0VMRU1FTlQ9PT0yP2tlLlVOU0lHTkVEX1NIT1JUOmtlLlVOU0lHTkVEX0lOVCxzdGFydEVsbGlwc29pZE5vcm1hbHM6dy5zdGFydEVsbGlwc29pZE5vcm1hbHMuYnVmZmVyLGVuZEVsbGlwc29pZE5vcm1hbHM6dy5lbmRFbGxpcHNvaWROb3JtYWxzLmJ1ZmZlcixzdGFydFBvc2l0aW9uQW5kSGVpZ2h0czp3LnN0YXJ0UG9zaXRpb25BbmRIZWlnaHRzLmJ1ZmZlcixzdGFydEZhY2VOb3JtYWxBbmRWZXJ0ZXhDb3JuZXJJZHM6dy5zdGFydEZhY2VOb3JtYWxBbmRWZXJ0ZXhDb3JuZXJJZHMuYnVmZmVyLGVuZFBvc2l0aW9uQW5kSGVpZ2h0czp3LmVuZFBvc2l0aW9uQW5kSGVpZ2h0cy5idWZmZXIsZW5kRmFjZU5vcm1hbEFuZEhhbGZXaWR0aHM6dy5lbmRGYWNlTm9ybWFsQW5kSGFsZldpZHRocy5idWZmZXIsdmVydGV4QmF0Y2hJZHM6dy52ZXJ0ZXhCYXRjaElkcy5idWZmZXIsaW5kaWNlczpOLmJ1ZmZlcn07aWYoZS5rZWVwRGVjb2RlZFBvc2l0aW9ucyl7bGV0IEY9dUIoYSk7dC5wdXNoKFIuYnVmZmVyLEYuYnVmZmVyKSxQPXlhKFAse2RlY29kZWRQb3NpdGlvbnM6Ui5idWZmZXIsZGVjb2RlZFBvc2l0aW9uT2Zmc2V0czpGLmJ1ZmZlcn0pfXJldHVybiBQfXZhciBsZCxjQixzQixmQixsQixoQixaUixiQixueCwkUixleCxwQixnQixfQix5QixBQix3QixUQixLaCxFQixSQixxaCxPQixtXz1YKCgpPT57VXIoKTtJZSgpO1R0KCk7ZGwoKTtXZSgpO25uKCk7R2UoKTtfbigpO1VuKCk7bGQ9MzI3NjcsY0I9TWF0aC5jb3Moay50b1JhZGlhbnMoMTUwKSksc0I9bmV3IHJlLGZCPW5ldyBzO2xCPW5ldyByZSxoQj1uZXcgcmU7WlI9bmV3IHMsYkI9bmV3IHM7bng9WzAsMiw2LDAsNiw0LDAsMSwzLDAsMywyLDAsNCw1LDAsNSwxLDUsMywxLDUsNywzLDcsNSw0LDcsNCw2LDcsNiwyLDcsMiwzXSwkUj1ueC5sZW5ndGgsZXg9bmV3IHMscEI9bmV3IHMsZ0I9bmV3IHMsX0I9bmV3IHMseUI9bmV3IHM7dHgucHJvdG90eXBlLmFkZFZvbHVtZT1mdW5jdGlvbihlLHQsbixvLGEscixpLGYsZCxjKXtsZXQgdT1zLmFkZCh0LGQsZXgpLGw9Yy5nZW9kZXRpY1N1cmZhY2VOb3JtYWwodSxwQik7dT1zLmFkZChuLGQsZXgpO2xldCBoPWMuZ2VvZGV0aWNTdXJmYWNlTm9ybWFsKHUsX0IpLG09UVIoZSx0LG4sbCxnQiksYj1RUihvLG4sdCxoLHlCKSxwPXRoaXMuc3RhcnRFbGxpcHNvaWROb3JtYWxzLHk9dGhpcy5lbmRFbGxpcHNvaWROb3JtYWxzLFQ9dGhpcy5zdGFydFBvc2l0aW9uQW5kSGVpZ2h0cyxfPXRoaXMuc3RhcnRGYWNlTm9ybWFsQW5kVmVydGV4Q29ybmVySWRzLEU9dGhpcy5lbmRQb3NpdGlvbkFuZEhlaWdodHMsdz10aGlzLmVuZEZhY2VOb3JtYWxBbmRIYWxmV2lkdGhzLFI9dGhpcy52ZXJ0ZXhCYXRjaElkcyxTPXRoaXMuYmF0Y2hJZE9mZnNldCxDPXRoaXMudmVjM09mZnNldCxJPXRoaXMudmVjNE9mZnNldCxOO2ZvcihOPTA7Tjw4O04rKylzLnBhY2sobCxwLEMpLHMucGFjayhoLHksQykscy5wYWNrKHQsVCxJKSxUW0krM109YSxzLnBhY2sobixFLEkpLEVbSSszXT1yLHMucGFjayhtLF8sSSksX1tJKzNdPU4scy5wYWNrKGIsdyxJKSx3W0krM109aSxSW1MrK109ZixDKz0zLEkrPTQ7dGhpcy5iYXRjaElkT2Zmc2V0PVMsdGhpcy52ZWMzT2Zmc2V0PUMsdGhpcy52ZWM0T2Zmc2V0PUk7bGV0IFA9dGhpcy5pbmRpY2VzLEY9dGhpcy52b2x1bWVTdGFydEluZGV4LEE9dGhpcy5pbmRleE9mZnNldDtmb3IoTj0wO048JFI7TisrKVBbQStOXT1ueFtOXStGO3RoaXMudm9sdW1lU3RhcnRJbmRleCs9OCx0aGlzLmluZGV4T2Zmc2V0Kz0kUn07QUI9bmV3IFNlLHdCPW5ldyBxLFRCPW5ldyBzLEtoPW5ldyBzLEVCPW5ldyBzLFJCPW5ldyBzLHFoPW5ldyBzO09CPUF0KHhCKX0pO2Z1bmN0aW9uIFNCKGUpe3RoaXMub2Zmc2V0PWUub2Zmc2V0LHRoaXMuY291bnQ9ZS5jb3VudCx0aGlzLmNvbG9yPWUuY29sb3IsdGhpcy5iYXRjaElkcz1lLmJhdGNoSWRzfXZhciBveCxheD1YKCgpPT57b3g9U0J9KTt2YXIgYl89e307cnQoYl8se2RlZmF1bHQ6KCk9PnpCfSk7ZnVuY3Rpb24gUEIoZSx0KXtsZXQgbj10KkNCLG89cy51bnBhY2soZSxuLFhoKTtuKz1zLnBhY2tlZExlbmd0aDtsZXQgYT0kLnVucGFjayhlLG4sUGEubW9kZWxNYXRyaXgpOyQubXVsdGlwbHlCeVNjYWxlKGEsbyxhKTtsZXQgcj1QYS5ib3VuZGluZ1ZvbHVtZTtyZXR1cm4gcy5jbG9uZShzLlpFUk8sci5jZW50ZXIpLHIucmFkaXVzPU1hdGguc3FydCgzKSxQYX1mdW5jdGlvbiBrQihlLHQpe2xldCBuPXQqTUIsbz1lW24rK10sYT1lW24rK10scj1zLmZyb21FbGVtZW50cyhvLG8sYSxYaCksaT0kLnVucGFjayhlLG4sUGEubW9kZWxNYXRyaXgpOyQubXVsdGlwbHlCeVNjYWxlKGkscixpKTtsZXQgZj1QYS5ib3VuZGluZ1ZvbHVtZTtyZXR1cm4gcy5jbG9uZShzLlpFUk8sZi5jZW50ZXIpLGYucmFkaXVzPU1hdGguc3FydCgyKSxQYX1mdW5jdGlvbiB2QihlLHQpe2xldCBuPXQqTkIsbz1zLnVucGFjayhlLG4sWGgpO24rPXMucGFja2VkTGVuZ3RoO2xldCBhPSQudW5wYWNrKGUsbixQYS5tb2RlbE1hdHJpeCk7JC5tdWx0aXBseUJ5U2NhbGUoYSxvLGEpO2xldCByPVBhLmJvdW5kaW5nVm9sdW1lO3JldHVybiBzLmNsb25lKHMuWkVSTyxyLmNlbnRlciksci5yYWRpdXM9MSxQYX1mdW5jdGlvbiBGQihlLHQpe2xldCBuPXQqSUIsbz1lW24rK10sYT1zLnVucGFjayhlLG4sWGgpLHI9JC5mcm9tVHJhbnNsYXRpb24oYSxQYS5tb2RlbE1hdHJpeCk7JC5tdWx0aXBseUJ5VW5pZm9ybVNjYWxlKHIsbyxyKTtsZXQgaT1QYS5ib3VuZGluZ1ZvbHVtZTtyZXR1cm4gcy5jbG9uZShzLlpFUk8saS5jZW50ZXIpLGkucmFkaXVzPTEsUGF9ZnVuY3Rpb24gV2goZSx0LG4sbyxhKXtpZighZyh0KSlyZXR1cm47bGV0IHI9bi5sZW5ndGgsaT1vLmF0dHJpYnV0ZXMucG9zaXRpb24udmFsdWVzLGY9by5pbmRpY2VzLGQ9ZS5wb3NpdGlvbnMsYz1lLnZlcnRleEJhdGNoSWRzLHU9ZS5pbmRpY2VzLGw9ZS5iYXRjaElkcyxoPWUuYmF0Y2hUYWJsZUNvbG9ycyxtPWUuYmF0Y2hlZEluZGljZXMsYj1lLmluZGV4T2Zmc2V0cyxwPWUuaW5kZXhDb3VudHMseT1lLmJvdW5kaW5nVm9sdW1lcyxUPWUubW9kZWxNYXRyaXgsXz1lLmNlbnRlcixFPWUucG9zaXRpb25PZmZzZXQsdz1lLmJhdGNoSWRJbmRleCxSPWUuaW5kZXhPZmZzZXQsUz1lLmJhdGNoZWRJbmRpY2VzT2Zmc2V0O2ZvcihsZXQgQz0wO0M8cjsrK0Mpe2xldCBJPWEodCxDKSxOPUkubW9kZWxNYXRyaXg7JC5tdWx0aXBseShULE4sTik7bGV0IFA9bltDXSxGPWkubGVuZ3RoO2ZvcihsZXQgTT0wO008RjtNKz0zKXtsZXQgdj1zLnVucGFjayhpLE0sREIpOyQubXVsdGlwbHlCeVBvaW50KE4sdix2KSxzLnN1YnRyYWN0KHYsXyx2KSxzLnBhY2sodixkLEUqMytNKSxjW3crK109UH1sZXQgQT1mLmxlbmd0aDtmb3IobGV0IE09MDtNPEE7KytNKXVbUitNXT1mW01dK0U7bGV0IHg9QytTO21beF09bmV3IG94KHtvZmZzZXQ6Uixjb3VudDpBLGNvbG9yOiRlLmZyb21SZ2JhKGhbUF0pLGJhdGNoSWRzOltQXX0pLGxbeF09UCxiW3hdPVIscFt4XT1BLHlbeF09Z2UudHJhbnNmb3JtKEkuYm91bmRpbmdWb2x1bWUsTiksRSs9Ri8zLFIrPUF9ZS5wb3NpdGlvbk9mZnNldD1FLGUuYmF0Y2hJZEluZGV4PXcsZS5pbmRleE9mZnNldD1SLGUuYmF0Y2hlZEluZGljZXNPZmZzZXQrPXJ9ZnVuY3Rpb24gQkIoZSl7bGV0IHQ9bmV3IEZsb2F0NjRBcnJheShlKSxuPTA7cy51bnBhY2sodCxuLHJ4KSxuKz1zLnBhY2tlZExlbmd0aCwkLnVucGFjayh0LG4saXgpfWZ1bmN0aW9uIFVCKGUpe2xldCB0PWUubGVuZ3RoLG49MDtmb3IobGV0IG89MDtvPHQ7KytvKW4rPSRlLnBhY2tlZExlbmd0aCszK2Vbb10uYmF0Y2hJZHMubGVuZ3RoO3JldHVybiBufWZ1bmN0aW9uIExCKGUsdCxuKXtsZXQgbz1uLmxlbmd0aCxhPTIrbypnZS5wYWNrZWRMZW5ndGgrMStVQih0KSxyPW5ldyBGbG9hdDY0QXJyYXkoYSksaT0wO3JbaSsrXT1lLHJbaSsrXT1vO2ZvcihsZXQgZD0wO2Q8bzsrK2QpZ2UucGFjayhuW2RdLHIsaSksaSs9Z2UucGFja2VkTGVuZ3RoO2xldCBmPXQubGVuZ3RoO3JbaSsrXT1mO2ZvcihsZXQgZD0wO2Q8ZjsrK2Qpe2xldCBjPXRbZF07JGUucGFjayhjLmNvbG9yLHIsaSksaSs9JGUucGFja2VkTGVuZ3RoLHJbaSsrXT1jLm9mZnNldCxyW2krK109Yy5jb3VudDtsZXQgdT1jLmJhdGNoSWRzLGw9dS5sZW5ndGg7cltpKytdPWw7Zm9yKGxldCBoPTA7aDxsOysraClyW2krK109dVtoXX1yZXR1cm4gcn1mdW5jdGlvbiBqQihlLHQpe2xldCBuPWcoZS5ib3hlcyk/bmV3IEZsb2F0MzJBcnJheShlLmJveGVzKTp2b2lkIDAsbz1nKGUuYm94QmF0Y2hJZHMpP25ldyBVaW50MTZBcnJheShlLmJveEJhdGNoSWRzKTp2b2lkIDAsYT1nKGUuY3lsaW5kZXJzKT9uZXcgRmxvYXQzMkFycmF5KGUuY3lsaW5kZXJzKTp2b2lkIDAscj1nKGUuY3lsaW5kZXJCYXRjaElkcyk/bmV3IFVpbnQxNkFycmF5KGUuY3lsaW5kZXJCYXRjaElkcyk6dm9pZCAwLGk9ZyhlLmVsbGlwc29pZHMpP25ldyBGbG9hdDMyQXJyYXkoZS5lbGxpcHNvaWRzKTp2b2lkIDAsZj1nKGUuZWxsaXBzb2lkQmF0Y2hJZHMpP25ldyBVaW50MTZBcnJheShlLmVsbGlwc29pZEJhdGNoSWRzKTp2b2lkIDAsZD1nKGUuc3BoZXJlcyk/bmV3IEZsb2F0MzJBcnJheShlLnNwaGVyZXMpOnZvaWQgMCxjPWcoZS5zcGhlcmVCYXRjaElkcyk/bmV3IFVpbnQxNkFycmF5KGUuc3BoZXJlQmF0Y2hJZHMpOnZvaWQgMCx1PWcobik/by5sZW5ndGg6MCxsPWcoYSk/ci5sZW5ndGg6MCxoPWcoaSk/Zi5sZW5ndGg6MCxtPWcoZCk/Yy5sZW5ndGg6MCxiPUZmLmdldFVuaXRCb3goKSxwPVpmLmdldFVuaXRDeWxpbmRlcigpLHk9ZGEuZ2V0VW5pdEVsbGlwc29pZCgpLFQ9Yi5hdHRyaWJ1dGVzLnBvc2l0aW9uLnZhbHVlcyxfPXAuYXR0cmlidXRlcy5wb3NpdGlvbi52YWx1ZXMsRT15LmF0dHJpYnV0ZXMucG9zaXRpb24udmFsdWVzLHc9VC5sZW5ndGgqdTt3Kz1fLmxlbmd0aCpsLHcrPUUubGVuZ3RoKihoK20pO2xldCBSPWIuaW5kaWNlcyxTPXAuaW5kaWNlcyxDPXkuaW5kaWNlcyxJPVIubGVuZ3RoKnU7SSs9Uy5sZW5ndGgqbCxJKz1DLmxlbmd0aCooaCttKTtsZXQgTj1uZXcgRmxvYXQzMkFycmF5KHcpLFA9bmV3IFVpbnQxNkFycmF5KHcvMyksRj1rZS5jcmVhdGVUeXBlZEFycmF5KHcvMyxJKSxBPXUrbCtoK20seD1uZXcgVWludDE2QXJyYXkoQSksTT1uZXcgQXJyYXkoQSksdj1uZXcgVWludDMyQXJyYXkoQSksVT1uZXcgVWludDMyQXJyYXkoQSksej1uZXcgQXJyYXkoQSk7QkIoZS5wYWNrZWRCdWZmZXIpO2xldCBEPXtiYXRjaFRhYmxlQ29sb3JzOm5ldyBVaW50MzJBcnJheShlLmJhdGNoVGFibGVDb2xvcnMpLHBvc2l0aW9uczpOLHZlcnRleEJhdGNoSWRzOlAsaW5kaWNlczpGLGJhdGNoSWRzOngsYmF0Y2hlZEluZGljZXM6TSxpbmRleE9mZnNldHM6dixpbmRleENvdW50czpVLGJvdW5kaW5nVm9sdW1lczp6LHBvc2l0aW9uT2Zmc2V0OjAsYmF0Y2hJZEluZGV4OjAsaW5kZXhPZmZzZXQ6MCxiYXRjaGVkSW5kaWNlc09mZnNldDowLG1vZGVsTWF0cml4Oml4LGNlbnRlcjpyeH07V2goRCxuLG8sYixQQiksV2goRCxhLHIscCxrQiksV2goRCxpLGYseSx2QiksV2goRCxkLGMseSxGQik7bGV0IEc9TEIoRi5CWVRFU19QRVJfRUxFTUVOVCxNLHopO3JldHVybiB0LnB1c2goTi5idWZmZXIsUC5idWZmZXIsRi5idWZmZXIpLHQucHVzaCh4LmJ1ZmZlcix2LmJ1ZmZlcixVLmJ1ZmZlciksdC5wdXNoKEcuYnVmZmVyKSx7cG9zaXRpb25zOk4uYnVmZmVyLHZlcnRleEJhdGNoSWRzOlAuYnVmZmVyLGluZGljZXM6Ri5idWZmZXIsaW5kZXhPZmZzZXRzOnYuYnVmZmVyLGluZGV4Q291bnRzOlUuYnVmZmVyLGJhdGNoSWRzOnguYnVmZmVyLHBhY2tlZEJ1ZmZlcjpHLmJ1ZmZlcn19dmFyIFhoLENCLE1CLE5CLElCLFBhLERCLHJ4LGl4LHpCLHBfPVgoKCk9PntNdCgpO0NwKCk7SWUoKTtrcygpO1AwKCk7c2UoKTtTaCgpO25uKCk7cG4oKTtheCgpO1VuKCk7WGg9bmV3IHMsQ0I9JC5wYWNrZWRMZW5ndGgrcy5wYWNrZWRMZW5ndGgsTUI9JC5wYWNrZWRMZW5ndGgrMixOQj0kLnBhY2tlZExlbmd0aCtzLnBhY2tlZExlbmd0aCxJQj1zLnBhY2tlZExlbmd0aCsxLFBhPXttb2RlbE1hdHJpeDpuZXcgJCxib3VuZGluZ1ZvbHVtZTpuZXcgZ2V9O0RCPW5ldyBzO3J4PW5ldyBzLGl4PW5ldyAkO3pCPUF0KGpCKX0pO3ZhciBfXz17fTtydChfXyx7ZGVmYXVsdDooKT0+cUJ9KTtmdW5jdGlvbiBIQihlKXtlPW5ldyBGbG9hdDY0QXJyYXkoZSk7bGV0IHQ9MDtZaC5taW49ZVt0KytdLFloLm1heD1lW3QrK10sU2UudW5wYWNrKGUsdCxjeCksdCs9U2UucGFja2VkTGVuZ3RoLHEudW5wYWNrKGUsdCxzeCl9ZnVuY3Rpb24gS0IoZSx0KXtsZXQgbj1uZXcgVWludDE2QXJyYXkoZS5wb3NpdGlvbnMpO0hCKGUucGFja2VkQnVmZmVyKTtsZXQgbz1jeCxhPXN4LHI9WWgubWluLGk9WWgubWF4LGY9bi5sZW5ndGgvMyxkPW4uc3ViYXJyYXkoMCxmKSxjPW4uc3ViYXJyYXkoZiwyKmYpLHU9bi5zdWJhcnJheSgyKmYsMypmKTtWdC56aWdaYWdEZWx0YURlY29kZShkLGMsdSk7bGV0IGw9bmV3IEZsb2F0NjRBcnJheShuLmxlbmd0aCk7Zm9yKGxldCBoPTA7aDxmOysraCl7bGV0IG09ZFtoXSxiPWNbaF0scD11W2hdLHk9ay5sZXJwKG8ud2VzdCxvLmVhc3QsbS9nXyksVD1rLmxlcnAoby5zb3V0aCxvLm5vcnRoLGIvZ18pLF89ay5sZXJwKHIsaSxwL2dfKSxFPXJlLmZyb21SYWRpYW5zKHksVCxfLEdCKSx3PWEuY2FydG9ncmFwaGljVG9DYXJ0ZXNpYW4oRSxWQik7cy5wYWNrKHcsbCxoKjMpfXJldHVybiB0LnB1c2gobC5idWZmZXIpLHtwb3NpdGlvbnM6bC5idWZmZXJ9fXZhciBnXyxHQixWQixjeCxzeCxZaCxxQix5Xz1YKCgpPT57VXIoKTtJZSgpO1R0KCk7V2UoKTtHZSgpO19uKCk7VW4oKTtnXz0zMjc2NyxHQj1uZXcgcmUsVkI9bmV3IHMsY3g9bmV3IFNlLHN4PW5ldyBxLFloPXttaW46dm9pZCAwLG1heDp2b2lkIDB9O3FCPUF0KEtCKX0pO3ZhciBBXz17fTtydChBXyx7ZGVmYXVsdDooKT0+blV9KTtmdW5jdGlvbiBXQihlKXtsZXQgdD1uZXcgRmxvYXQ2NEFycmF5KGUpLG49MDtqcy5pbmRleEJ5dGVzUGVyRWxlbWVudD10W24rK10sanMubWluPXRbbisrXSxqcy5tYXg9dFtuKytdLHMudW5wYWNrKHQsbixseCksbis9cy5wYWNrZWRMZW5ndGgscS51bnBhY2sodCxuLGh4KSxuKz1xLnBhY2tlZExlbmd0aCxTZS51bnBhY2sodCxuLG14KX1mdW5jdGlvbiBYQihlKXtsZXQgdD1lLmxlbmd0aCxuPTA7Zm9yKGxldCBvPTA7bzx0OysrbyluKz0kZS5wYWNrZWRMZW5ndGgrMytlW29dLmJhdGNoSWRzLmxlbmd0aDtyZXR1cm4gbn1mdW5jdGlvbiBZQihlLHQsbil7bGV0IG89dC5sZW5ndGgsYT0yK28qeW4ucGFja2VkTGVuZ3RoKzErWEIobikscj1uZXcgRmxvYXQ2NEFycmF5KGEpLGk9MDtyW2krK109ZSxyW2krK109bztmb3IobGV0IGQ9MDtkPG87KytkKXluLnBhY2sodFtkXSxyLGkpLGkrPXluLnBhY2tlZExlbmd0aDtsZXQgZj1uLmxlbmd0aDtyW2krK109Zjtmb3IobGV0IGQ9MDtkPGY7KytkKXtsZXQgYz1uW2RdOyRlLnBhY2soYy5jb2xvcixyLGkpLGkrPSRlLnBhY2tlZExlbmd0aCxyW2krK109Yy5vZmZzZXQscltpKytdPWMuY291bnQ7bGV0IHU9Yy5iYXRjaElkcyxsPXUubGVuZ3RoO3JbaSsrXT1sO2ZvcihsZXQgaD0wO2g8bDsrK2gpcltpKytdPXVbaF19cmV0dXJuIHJ9ZnVuY3Rpb24gdFUoZSx0KXtXQihlLnBhY2tlZEJ1ZmZlcik7bGV0IG47anMuaW5kZXhCeXRlc1BlckVsZW1lbnQ9PT0yP249bmV3IFVpbnQxNkFycmF5KGUuaW5kaWNlcyk6bj1uZXcgVWludDMyQXJyYXkoZS5pbmRpY2VzKTtsZXQgYT1uZXcgVWludDE2QXJyYXkoZS5wb3NpdGlvbnMpLHI9bmV3IFVpbnQzMkFycmF5KGUuY291bnRzKSxpPW5ldyBVaW50MzJBcnJheShlLmluZGV4Q291bnRzKSxmPW5ldyBVaW50MzJBcnJheShlLmJhdGNoSWRzKSxkPW5ldyBVaW50MzJBcnJheShlLmJhdGNoVGFibGVDb2xvcnMpLGM9bmV3IEFycmF5KHIubGVuZ3RoKSx1PWx4LGw9aHgsaD1teCxtPWpzLm1pbixiPWpzLm1heCxwPWUubWluaW11bUhlaWdodHMseT1lLm1heGltdW1IZWlnaHRzO2cocCkmJmcoeSkmJihwPW5ldyBGbG9hdDMyQXJyYXkocCkseT1uZXcgRmxvYXQzMkFycmF5KHkpKTtsZXQgVCxfLEUsdz1hLmxlbmd0aC8yLFI9YS5zdWJhcnJheSgwLHcpLFM9YS5zdWJhcnJheSh3LDIqdyk7VnQuemlnWmFnRGVsdGFEZWNvZGUoUixTKTtsZXQgQz1uZXcgRmxvYXQ2NEFycmF5KHcqMyk7Zm9yKFQ9MDtUPHc7KytUKXtsZXQgZWU9UltUXSxiZT1TW1RdLGxlPWsubGVycChoLndlc3QsaC5lYXN0LGVlL2Z4KSxwZT1rLmxlcnAoaC5zb3V0aCxoLm5vcnRoLGJlL2Z4KSx1ZT1yZS5mcm9tUmFkaWFucyhsZSxwZSwwLHV4KSxhZT1sLmNhcnRvZ3JhcGhpY1RvQ2FydGVzaWFuKHVlLGR4KTtzLnBhY2soYWUsQyxUKjMpfWxldCBJPXIubGVuZ3RoLE49bmV3IEFycmF5KEkpLFA9bmV3IEFycmF5KEkpLEY9MCxBPTA7Zm9yKFQ9MDtUPEk7KytUKU5bVF09RixQW1RdPUEsRis9cltUXSxBKz1pW1RdO2xldCB4PW5ldyBGbG9hdDMyQXJyYXkodyozKjIpLE09bmV3IFVpbnQxNkFycmF5KHcqMiksdj1uZXcgVWludDMyQXJyYXkoUC5sZW5ndGgpLFU9bmV3IFVpbnQzMkFycmF5KGkubGVuZ3RoKSx6PVtdLEQ9e307Zm9yKFQ9MDtUPEk7KytUKUU9ZFtUXSxnKERbRV0pPyhEW0VdLnBvc2l0aW9uTGVuZ3RoKz1yW1RdLERbRV0uaW5kZXhMZW5ndGgrPWlbVF0sRFtFXS5iYXRjaElkcy5wdXNoKFQpKTpEW0VdPXtwb3NpdGlvbkxlbmd0aDpyW1RdLGluZGV4TGVuZ3RoOmlbVF0sb2Zmc2V0OjAsaW5kZXhPZmZzZXQ6MCxiYXRjaElkczpbVF19O2xldCBHLEg9MCxPPTA7Zm9yKEUgaW4gRClpZihELmhhc093blByb3BlcnR5KEUpKXtHPURbRV0sRy5vZmZzZXQ9SCxHLmluZGV4T2Zmc2V0PU87bGV0IGVlPUcucG9zaXRpb25MZW5ndGgqMixiZT1HLmluZGV4TGVuZ3RoKjIrRy5wb3NpdGlvbkxlbmd0aCo2O0grPWVlLE8rPWJlLEcuaW5kZXhMZW5ndGg9YmV9bGV0IFo9W107Zm9yKEUgaW4gRClELmhhc093blByb3BlcnR5KEUpJiYoRz1EW0VdLFoucHVzaCh7Y29sb3I6JGUuZnJvbVJnYmEocGFyc2VJbnQoRSkpLG9mZnNldDpHLmluZGV4T2Zmc2V0LGNvdW50OkcuaW5kZXhMZW5ndGgsYmF0Y2hJZHM6Ry5iYXRjaElkc30pKTtmb3IoVD0wO1Q8STsrK1Qpe0U9ZFtUXSxHPURbRV07bGV0IGVlPUcub2Zmc2V0LGJlPWVlKjMsbGU9ZWUscGU9TltUXSx1ZT1yW1RdLGFlPWZbVF0sQWU9bSxOZT1iO2cocCkmJmcoeSkmJihBZT1wW1RdLE5lPXlbVF0pO2xldCBldD1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksS2U9TnVtYmVyLk5FR0FUSVZFX0lORklOSVRZLHR0PU51bWJlci5QT1NJVElWRV9JTkZJTklUWSxYZT1OdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFk7Zm9yKF89MDtfPHVlOysrXyl7bGV0IFllPXMudW5wYWNrKEMscGUqMytfKjMsZHgpO2wuc2NhbGVUb0dlb2RldGljU3VyZmFjZShZZSxZZSk7bGV0IGZ0PWwuY2FydGVzaWFuVG9DYXJ0b2dyYXBoaWMoWWUsdXgpLEl0PWZ0LmxhdGl0dWRlLEN0PWZ0LmxvbmdpdHVkZTtldD1NYXRoLm1pbihJdCxldCksS2U9TWF0aC5tYXgoSXQsS2UpLHR0PU1hdGgubWluKEN0LHR0KSxYZT1NYXRoLm1heChDdCxYZSk7bGV0IGh0PWwuZ2VvZGV0aWNTdXJmYWNlTm9ybWFsKFllLEpCKSxLdD1zLm11bHRpcGx5QnlTY2FsYXIoaHQsQWUsWkIpLFB0PXMuYWRkKFllLEt0LFFCKTtLdD1zLm11bHRpcGx5QnlTY2FsYXIoaHQsTmUsS3QpO2xldCBMdD1zLmFkZChZZSxLdCwkQik7cy5zdWJ0cmFjdChMdCx1LEx0KSxzLnN1YnRyYWN0KFB0LHUsUHQpLHMucGFjayhMdCx4LGJlKSxzLnBhY2soUHQseCxiZSszKSxNW2xlXT1hZSxNW2xlKzFdPWFlLGJlKz02LGxlKz0yfWg9ZVUsaC53ZXN0PXR0LGguZWFzdD1YZSxoLnNvdXRoPWV0LGgubm9ydGg9S2UsY1tUXT15bi5mcm9tUmVjdGFuZ2xlKGgsbSxiLGwpO2xldCBMZT1HLmluZGV4T2Zmc2V0LGplPVBbVF0saXQ9aVtUXTtmb3IodltUXT1MZSxfPTA7XzxpdDtfKz0zKXtsZXQgWWU9bltqZStfXS1wZSxmdD1uW2plK18rMV0tcGUsSXQ9bltqZStfKzJdLXBlO3pbTGUrK109WWUqMitlZSx6W0xlKytdPWZ0KjIrZWUseltMZSsrXT1JdCoyK2VlLHpbTGUrK109SXQqMisxK2VlLHpbTGUrK109ZnQqMisxK2VlLHpbTGUrK109WWUqMisxK2VlfWZvcihfPTA7Xzx1ZTsrK18pe2xldCBZZT1fLGZ0PShfKzEpJXVlO3pbTGUrK109WWUqMisxK2VlLHpbTGUrK109ZnQqMitlZSx6W0xlKytdPVllKjIrZWUseltMZSsrXT1ZZSoyKzErZWUseltMZSsrXT1mdCoyKzErZWUseltMZSsrXT1mdCoyK2VlfUcub2Zmc2V0Kz11ZSoyLEcuaW5kZXhPZmZzZXQ9TGUsVVtUXT1MZS12W1RdfXo9a2UuY3JlYXRlVHlwZWRBcnJheSh4Lmxlbmd0aC8zLHopO2xldCBvZT1aLmxlbmd0aDtmb3IobGV0IGVlPTA7ZWU8b2U7KytlZSl7bGV0IGJlPVpbZWVdLmJhdGNoSWRzLGxlPTAscGU9YmUubGVuZ3RoO2ZvcihsZXQgdWU9MDt1ZTxwZTsrK3VlKWxlKz1VW2JlW3VlXV07WltlZV0uY291bnQ9bGV9bGV0IGNlPXouQllURVNfUEVSX0VMRU1FTlQ9PT0yP2tlLlVOU0lHTkVEX1NIT1JUOmtlLlVOU0lHTkVEX0lOVCxmZT1ZQihjZSxjLFopO3JldHVybiB0LnB1c2goeC5idWZmZXIsei5idWZmZXIsdi5idWZmZXIsVS5idWZmZXIsTS5idWZmZXIsZmUuYnVmZmVyKSx7cG9zaXRpb25zOnguYnVmZmVyLGluZGljZXM6ei5idWZmZXIsaW5kZXhPZmZzZXRzOnYuYnVmZmVyLGluZGV4Q291bnRzOlUuYnVmZmVyLGJhdGNoSWRzOk0uYnVmZmVyLHBhY2tlZEJ1ZmZlcjpmZS5idWZmZXJ9fXZhciBseCxoeCxteCxqcyxmeCxkeCxKQixaQixRQiwkQix1eCxlVSxuVSx3Xz1YKCgpPT57VXIoKTtJZSgpO1R0KCk7a3MoKTtzZSgpO1dlKCk7bm4oKTtHZSgpO3dpKCk7X24oKTtVbigpO2x4PW5ldyBzLGh4PW5ldyBxLG14PW5ldyBTZSxqcz17bWluOnZvaWQgMCxtYXg6dm9pZCAwLGluZGV4Qnl0ZXNQZXJFbGVtZW50OnZvaWQgMH07Zng9MzI3NjcsZHg9bmV3IHMsSkI9bmV3IHMsWkI9bmV3IHMsUUI9bmV3IHMsJEI9bmV3IHMsdXg9bmV3IHJlLGVVPW5ldyBTZTtuVT1BdCh0VSl9KTtmdW5jdGlvbiByVShlLHQsbixvLGEpe2xldCByPWUubGVuZ3RoLzMsaT1lLnN1YmFycmF5KDAsciksZj1lLnN1YmFycmF5KHIsMipyKSxkPWUuc3ViYXJyYXkoMipyLDMqcik7VnQuemlnWmFnRGVsdGFEZWNvZGUoaSxmLGQpO2xldCBjPW5ldyBGbG9hdDY0QXJyYXkoZS5sZW5ndGgpO2ZvcihsZXQgdT0wO3U8cjsrK3Upe2xldCBsPWlbdV0saD1mW3VdLG09ZFt1XSxiPWsubGVycCh0Lndlc3QsdC5lYXN0LGwvVF8pLHA9ay5sZXJwKHQuc291dGgsdC5ub3J0aCxoL1RfKSx5PWsubGVycChuLG8sbS9UXyksVD1yZS5mcm9tUmFkaWFucyhiLHAseSxvVSksXz1hLmNhcnRvZ3JhcGhpY1RvQ2FydGVzaWFuKFQsYVUpO3MucGFjayhfLGMsdSozKX1yZXR1cm4gY312YXIgVF8sb1UsYVUsYngscHg9WCgoKT0+e1VyKCk7SWUoKTtUdCgpO0dlKCk7VF89MzI3Njcsb1U9bmV3IHJlLGFVPW5ldyBzO2J4PXJVfSk7dmFyIEVfPXt9O3J0KEVfLHtkZWZhdWx0OigpPT5kVX0pO2Z1bmN0aW9uIGlVKGUpe2U9bmV3IEZsb2F0NjRBcnJheShlKTtsZXQgdD0wO0poLm1pbj1lW3QrK10sSmgubWF4PWVbdCsrXSxTZS51bnBhY2soZSx0LHd4KSx0Kz1TZS5wYWNrZWRMZW5ndGgscS51bnBhY2soZSx0LFR4KSx0Kz1xLnBhY2tlZExlbmd0aCxzLnVucGFjayhlLHQsRXgpfWZ1bmN0aW9uIGNVKGUpe2xldCB0PWUubGVuZ3RoLG49bmV3IFVpbnQzMkFycmF5KHQrMSksbz0wO2ZvcihsZXQgYT0wO2E8dDsrK2EpblthXT1vLG8rPWVbYV07cmV0dXJuIG5bdF09byxufWZ1bmN0aW9uIGZVKGUsdCl7bGV0IG49bmV3IFVpbnQxNkFycmF5KGUucG9zaXRpb25zKSxvPW5ldyBVaW50MTZBcnJheShlLndpZHRocyksYT1uZXcgVWludDMyQXJyYXkoZS5jb3VudHMpLHI9bmV3IFVpbnQxNkFycmF5KGUuYmF0Y2hJZHMpO2lVKGUucGFja2VkQnVmZmVyKTtsZXQgaT13eCxmPVR4LGQ9RXgsYz1KaC5taW4sdT1KaC5tYXgsbD1ieChuLGksYyx1LGYpLGg9bC5sZW5ndGgvMyxtPWgqNC00LGI9bmV3IEZsb2F0MzJBcnJheShtKjMpLHA9bmV3IEZsb2F0MzJBcnJheShtKjMpLHk9bmV3IEZsb2F0MzJBcnJheShtKjMpLFQ9bmV3IEZsb2F0MzJBcnJheShtKjIpLF89bmV3IFVpbnQxNkFycmF5KG0pLEU9MCx3PTAsUj0wLFMsQz0wLEk9YS5sZW5ndGg7Zm9yKFM9MDtTPEk7KytTKXtsZXQgeD1hW1NdLE09b1tTXSx2PXJbU107Zm9yKGxldCBVPTA7VTx4OysrVSl7bGV0IHo7aWYoVT09PTApe2xldCBaPXMudW5wYWNrKGwsQyozLGd4KSxvZT1zLnVucGFjayhsLChDKzEpKjMsX3gpO3o9cy5zdWJ0cmFjdChaLG9lLHl4KSxzLmFkZChaLHoseil9ZWxzZSB6PXMudW5wYWNrKGwsKEMrVS0xKSozLHl4KTtsZXQgRD1zLnVucGFjayhsLChDK1UpKjMsc1UpLEc7aWYoVT09PXgtMSl7bGV0IFo9cy51bnBhY2sobCwoQyt4LTEpKjMsZ3gpLG9lPXMudW5wYWNrKGwsKEMreC0yKSozLF94KTtHPXMuc3VidHJhY3QoWixvZSxBeCkscy5hZGQoWixHLEcpfWVsc2UgRz1zLnVucGFjayhsLChDK1UrMSkqMyxBeCk7cy5zdWJ0cmFjdCh6LGQseikscy5zdWJ0cmFjdChELGQsRCkscy5zdWJ0cmFjdChHLGQsRyk7bGV0IEg9VT09PTA/MjowLE89VT09PXgtMT8yOjQ7Zm9yKGxldCBaPUg7WjxPOysrWil7cy5wYWNrKEQsYixFKSxzLnBhY2soeixwLEUpLHMucGFjayhHLHksRSksRSs9MztsZXQgb2U9Wi0yPDA/LTE6MTtUW3crK109MiooWiUyKS0xLFRbdysrXT1vZSpNLF9bUisrXT12fX1DKz14fWxldCBOPWtlLmNyZWF0ZVR5cGVkQXJyYXkobSxoKjYtNiksUD0wLEY9MDtmb3IoST1oLTEsUz0wO1M8STsrK1MpTltGKytdPVAsTltGKytdPVArMixOW0YrK109UCsxLE5bRisrXT1QKzEsTltGKytdPVArMixOW0YrK109UCszLFArPTQ7dC5wdXNoKGIuYnVmZmVyLHAuYnVmZmVyLHkuYnVmZmVyKSx0LnB1c2goVC5idWZmZXIsXy5idWZmZXIsTi5idWZmZXIpO2xldCBBPXtpbmRleERhdGF0eXBlOk4uQllURVNfUEVSX0VMRU1FTlQ9PT0yP2tlLlVOU0lHTkVEX1NIT1JUOmtlLlVOU0lHTkVEX0lOVCxjdXJyZW50UG9zaXRpb25zOmIuYnVmZmVyLHByZXZpb3VzUG9zaXRpb25zOnAuYnVmZmVyLG5leHRQb3NpdGlvbnM6eS5idWZmZXIsZXhwYW5kQW5kV2lkdGg6VC5idWZmZXIsYmF0Y2hJZHM6Xy5idWZmZXIsaW5kaWNlczpOLmJ1ZmZlcn07aWYoZS5rZWVwRGVjb2RlZFBvc2l0aW9ucyl7bGV0IHg9Y1UoYSk7dC5wdXNoKGwuYnVmZmVyLHguYnVmZmVyKSxBPXlhKEEse2RlY29kZWRQb3NpdGlvbnM6bC5idWZmZXIsZGVjb2RlZFBvc2l0aW9uT2Zmc2V0czp4LmJ1ZmZlcn0pfXJldHVybiBBfXZhciB3eCxUeCxFeCxKaCxneCxfeCx5eCxzVSxBeCxkVSxSXz1YKCgpPT57SWUoKTtkbCgpO3B4KCk7V2UoKTtubigpO19uKCk7VW4oKTt3eD1uZXcgU2UsVHg9bmV3IHEsRXg9bmV3IHMsSmg9e21pbjp2b2lkIDAsbWF4OnZvaWQgMH07Z3g9bmV3IHMsX3g9bmV3IHMseXg9bmV3IHMsc1U9bmV3IHMsQXg9bmV3IHM7ZFU9QXQoZlUpfSk7dmFyIHNzZSxSeD1YKCgpPT57c3NlPShmdW5jdGlvbigpe3ZhciBlPSJiOUg3OVRlYmJiZTlvazlHZXVldTlHZXViOUdiYjlHcnV1dXV1dXVldTlHdnV1dXV1ZXU5R2R1dWV1OUdsdXV1dWV1OUd2dXV1dXViOUdvdXV1dXV1YjlHbHV1dXViOUdpdXV1ZXVpRThBZGlsdmVvdmVvdnJyd3JyckREb0RyYnFxYmVsdmU5V2VpaXZpZWJlb3dldWVjajpHZGtyOlBsQ285VFc5VDlWVjk1ZGJIOUY5RjkzOUg3OVQ5RjlKOUgyMjlGOUp0OVZWN2JiOEY5VFc3OU85VjlXdDlGVzlVOUo5VjlLVzl3V1Z0Vzk0OWM5MTlNOU1XVjltVzRXMmJlOEE5VFc3OU85VjlXdDlGVzlVOUo5VjlLVzl3V1Z0Vzk0OWM5MTlNOU1XVmJkOEY5VFc3OU85VjlXdDlGVzlVOUo5VjlLVzl3V1Z0Vzk0OWM5MTlNOU1XVjljOVY5MTlVOUtiaUU5VFc3OU85VjlXdDlGVzlVOUo5VjlLVzl3V1Z0Vzk0OXdXVjc5UDlWOVVibFk5VFc3OU85VjlXdDlGVzlVOUo5VjlLVzY5VTlLVzk0OWM5MTlNOU1XVmJ2OEU5VFc3OU85VjlXdDlGVzlVOUo5VjlLVzY5VTlLVzk0OWM5MTlNOU1XVjljOVY5MTlVOUtibzhBOVRXNzlPOVY5V3Q5Rlc5VTlKOVY5S1c2OVU5S1c5NDl3V1Y3OVA5VjlVYnJFOVRXNzlPOVY5V3Q5Rlc5VTlKOVY5S1c2OVU5S1c5NDl0V0c5MVc5VTlKV2J3YTlUVzc5TzlWOVd0OUZXOVU5SjlWOUtXNjlVOUtXOTQ5dFdHOTFXOVU5Slc5YzlWOTE5VTlLYkRMOVRXNzlPOVY5V3Q5Rlc5VTlKOVY5S1dTOVAydFdWOXA5SnRicUs5VFc3OU85VjlXdDlGVzlVOUo5VjlLV1M5UDJ0V1Y5cjkxOUh0YmtMOVRXNzlPOVY5V3Q5Rlc5VTlKOVY5S1dTOVAydFdWVDk0OVdieFk5VFc3OU85VjlXdDlGVzlVOUo5VjlLV1M5UDJ0V1ZKOVYyOVZWYm1FOVRXNzlPOVY5V3Q5RjlWOVd0OVA5VDlQOTZXOXdXVnRXOTRKOUg5SjlPV2J6YTlUVzc5TzlWOVd0OUY5VjlXdDlQOVQ5UDk2Vzl3V1Z0Vzk0SjlIOUo5T1c5dHRWOVA5V2JIYTlUVzc5TzlWOVd0OUY5VjlXdDlQOVQ5UDk2Vzl3V1Z0Vzk0U1d0OUo5TzlzVzlUOUg5V2JPSzlUVzc5TzlWOVd0OUY3OVc5SHQ5UDlIMjl0OVZWdDlzVzlUOUg5V2JBbDc5SVY5UmJYRHdlYmNla2RLWXE6OGY4QWRiazt3YWRodWQ5OjhKampqamJjO3F3OVJncjhLampqamJjYmh3ZG5hZVRtYmFiY2J5ZDtpOkk6Y2piYW9hb2NiOWlFZ0RjOkdlVjg2YmJhcmM7YWRmY2JjamR6OnhqampiOEFkbmFpVG1iYXJjO2FkZmFkYWx6OndqampiOEFrYXJjO2FiZmFsZmNiY2JjamRhbDlSYWxjRmUwRXo6eGpqamI4QWFyYzthYmZhcmM7YWRmYWx6OndqampiOEFhcjljYjgzaVVhcjljYjgzaThXYXI5Y2I4M2l5YXI5Y2I4M2lhYXI5Y2I4M2lLYXI5Y2I4M2l6YXI5Y2I4M2l3YXI5Y2I4M2liY2o7YWJhbDlVYztXRmJHY2pkYWxjYTBFaHFkbmFpY2Q2bWJhdmNkOWltYmFEVG1iYWRjZWZoa2FxY2kyZ3hhbDJobWFyYzthbGZjbGZoUGFyYztxbGZjZVZoc2FyYztxb2ZjbFZoemNiaEhpbmNkaE9jYmhBZG5hdmNpNm1iYXI5Y2I4M2k7T29hcjljYjgzaTtHb2FyOWNiODNpO3lvYXI5Y2I4M2k7cW9hZGFIZmdveWJiaENjYmhYaW5jYmh3Y2JoUWRuaW5hb2FsZmhMYW95YmJnS2FDN2FRVmhRYXdjUDBtZWFMaG9hS2hDYXdjZWZnd2FYZmFpNm1ia2tjYmhDYXJjO3FvZmh3aW5jd2hZY3doOEFkbmFRYUM5M2dvY0ZlR2dFY3MwbWJjbGg4QWFFY2kwbWJjZGNiYUVFaDhBa2RuYW9jdzRjRmVHZ0VjczBtYmNsaFlhRWNpMG1iY2RjYmFFRWhZa2FZYThBZmhFYXd5ZGJoM2N3aFljd2g4QWRuYW9jejRjRmVHZzVjczBtYmNsaDhBYTVjaTBtYmNkY2JhNUVoOEFrYUVhM2ZoRWRuYW9jRkZGRmIwbWJjbGhZYW9jRkZGOEYwbWJjYmNkYW9jampqdzZFaFlrYXdhRWE4QWZhWWZCZGJhd2NsZmh3YUNjZWZnQ2N3OWhtYmthTGhvYUtoQ2FYY3pmZ1hhaTZtYmtjYmhvY2Vod2F6aFFpbmF3YW9hUXlkYmFyYztxb2Zhb2NkdGZ5ZGI2RWhvYVFjbGZoUWF3Y2VmZ3djdzlobWJrYW9jbHRoQWNpaE9rY2JoRWFyYztxbGZjYmNqZHo6eGpqamI4QWFyY2JCZDtpbGFyOWNiODNpO2FsYWRoOEVhcWg4RmFraDNpbmFyYztxbGZhZGFFYUVjYjloOVJhbDJmYWx6OndqampiOEFhaWE4RmFpYThGNkVoYWRuYXFhaWFFOVJhRWFxZmFpNkVnS2NzZmM5V0dnb2FLOW5tYmFyYztxb2ZhS2ZjYmFvYUs5Uno6eGpqamI4QWthZGFFYWwyZmhoY2JoZ2luYWdhQVZjbDRoWGFyYzthbGZhZ2NkdGZoOEphSGg4S2NiaDhMaW5hOExhSGZod2RuZG5kbmRuZG5kbmRuYWdQbGJlZGlia2FLVG12YWhhd2Zob2FyYztxbGZhd2ZSYmJoUWFyYztxb2Zod2FhaENpbmF3YW9SYmJnWWFROVJnUWNldGFRY0t0YzhGOTE3ODZiYmF3Y2VmaHdhb2FsZmhvYVloUWFFYUNjdWZnQzlobWJ4dmtrYUtUbWxhOEtjOTpHaG9hOExjaXRjd0doOEFhcmM7cWxmYXdjZVZmUmJiY3d0YXJjO3FsZmF3Yzk6R2ZSYmJWaFFhcmM7cW9maHdhYWhDaW5hd2EzYW9mUmJiY3d0YThFYW9mUmJiVmdZYVE5UmdRY2V0YVFjenRjOEY5MTdjRkZpR2E4QTQ4NmJiYW9hbGZob2F3Y2VmaHdhWWhRYUVhQ2N1ZmdDOWhtYnhsa2thc2E4S2M5OEdnUWZob2EzYVFmaFlhcmM7cWxmYXdjOThHZ1FmUmJiaENjd2h3aW5hb1JiYmF3dGFDVmhDYW9jZWZob2F3Y3dmZ3djYTlobWJ4ZGtrYUtUbWR4ZWthS1RtZWE4TGNpdGg1YWhhUWZoOEFjYmhMaW5hOEFSYmJoUWN3aG9hWWh3aW5hd1JiYmFvdGFRVmhRYXdjZWZod2FvY3dmZ29jYTlobWJrYXJjO3FvZmFMZmFRYUM3YVg5M2E1NDg2YmJhWWFsZmhZYThBYWxmaDhBYVFoQ2FMY2VmZ0xhSzlobWJra2E4SnlkYmg4QWNiaExhcmM7cW9maG9pbmNkaFFjYmh3aW5hUWFvYXdmUmJiY2I5aGZoUWF3Y2VmZ3djejlobWJrY2xoQ2NiaHdpbmFDYW9hd2ZSYmJjZDBmaENhd2NlZmd3Y3o5aG1ia2N3aFljYmh3aW5hWWFvYXdmUmJiY1AwZmhZYXdjZWZnd2N6OWhtYmthUWFDYVFhQzZFZ3dhWWF3YVk2RWd3Y3phd2N6NkVhOEFmaDhBYW9jemZob2FMY3pmZ0xhSzZtYmthOEphOEFCZGJrYThLY2VmaDhLYThMY2VmZzhMY2w5aG1ia2FnY2VmZ2dhTzlobWJrYThFYW1maDhFYThGYXhmaDhGYTNhbWZoM2FFYXhmZ0VhaTZtYmtjYmhvY2Vod2FQaFFpbmF3YW9hUXlkYmFyYzthbGZhb2NkdGZ5ZGI2RWhvYVFjbGZoUWFPYXdjZWZndzlobWJrYXJhSGNkNGZhQWNkVmFvYW9jZFNFODZiYmFIY2xmZ0hhbDZtYmtrYWJhZWZoZ2FiY2VmaG9hbGNkNGc4TWNiYURFaGthZGNlZmg4TmFyYzthYmZjZVZoZWNiaG1kbmRuaW5haWFtOW5tZWFyYztxb2ZjYmNqZHo6eGpqamI4QWFnYW85UmFrNm1kYWRhbWFsMmd3Zmh4Y2JoSGE4TmF3Zmh6YW9jYmFrejp4ampqYmc4RmFrZmgzYXFhaWFtOVJhbWFxZmFpNkVnc2NzZmdvY2w0Y2lmY2Q0aE9hb2M5V0dnOEpUaFBpbmRuZG5kbmRuZG5kbmRuZG5kbmRuYURUbWJhcmFIY2Q0ZlJiYmdRY2lHUGxiZWRsYmthc1RtZGF4YUhmaG9hcmM7YWJmYUhmUmJiaFFhcmM7cW9maHdhc2hDaW5hd2FvUmJiZ1lhUTlSZ1FjZXRhUWNLdGM4RjkxNzg2YmJhd2NlZmh3YW9hbGZob2FZaFFhQ2N1ZmdDbWJ4aWtrYXNUbWlhSGNpdGN3R2g4QWFyYzthYmZhSGNlVmZSYmJjd3RhcmM7YWJmYUhjOTpHZ29mUmJiVmhRYXhhb2Zob2FyYztxb2Zod2FzaENpbmF3YW84VmJiZ1lhUTlSZ1FjZXRhUWN6dGM4RjkxN2NGRmlHYThBNDg2YmJhd2NlZmh3YW9hbGZob2FZaFFhQ2N1ZmdDbWJ4aWtrYWVhSGM5OEdnOEFmaG9hemE4QWZoWWFyYzthYmZhOEFmUmJiaENjd2h3aW5hb1JiYmF3dGFDVmhDYW9jZWZob2F3Y3dmZ3djYTlobWJrYXNUbWRhUWNsNGhLYUhjaXRjS0doRWF4YThBZmg4QWNiaExpbmE4QVJiYmhRY3dob2FZaHdpbmF3UmJiYW90YVFWaFFhd2NlZmh3YW9jd2Znb2NhOWhtYmthcmM7cW9mYUxmYVFhQzdhSzkzYUU0ODZiYmFZYWxmaFlhOEFhbGZoOEFhUWhDYUxjZWZnTGFzOWhtYmtrYURtYmNiaG94bGthOEpUbWJjYmhvZG5pbmFyYztxb2Zhb2Znd2N3ZjhQaWJhdzhQaWI6ZTlxVG1lYW9jemZnb2E4SjlwbWR4YmtrZG5hdm1iY2Vob3hpa2NiaDhBYU9oTGFPaEtpbmFyYztxb2ZhOEFmZ29jd2Y4UGliaHlhbzhQaWJoOFBjZGhRY2Jod2luYVFhb2F3ZlJiYmNiOWhmaFFhd2NlZmd3Y3o5aG1ia2NsaENjYmh3aW5hQ2FvYXdmUmJiY2QwZmhDYXdjZWZnd2N6OWhtYmtjd2hZY2Jod2luYVlhb2F3ZlJiYmNQMGZoWWF3Y2VmZ3djejlobWJrYVFhQ2FRYUM2RWdvYVlhb2FZNkVnb2N6YW9jejZFYUtmaEthb2N1Y2JheWE4UDplOWNiOXNFZ3dhb2F3NkVhTGZoTGE4QWN6Zmc4QWE4SjlwbWR4YmtrYThGYUhjZDRmZ29hb1JiYmNkYUhjZXRjb0d0Vjg2YmJ4aWtkbmFMYXM2bWJhS2FzNm1iYThGYUhjZDRmZ29hb1JiYmNpYUhjZXRjb0d0Vjg2YmJhZ2EzOVJhczZtcmEzYXJjO3FvZmFzejp3ampqYmFzZmgzeGlrYUxhSzlwaG9rYThGYUhjZDRmZ3dhd1JiYmFvYUhjZXRjb0d0Vjg2YmJrYWdhMzlSYU82bWxhM2NiYU96OnhqampiZ2FhT2ZoS2RuZG5hOEptYmFQaG94ZWtkbmFnYUs5UmNLOXBtYmFQaG94ZWthb2NkdGM6cTpHOmNqYmZjajpHOmNqYmFERWczeWR4Z2hjZXRjOzpGRkZlR2hBY3VoRWN1YWh0Y3U3Y0ZlR2g4RWNiaDhLYXJjO3FvZmhRaW5hcmM7cW9mYThLZmhYY3poOEFkbmRuZG5haFBEYmVlZWVlZWVkZWtjdWNiYVhjd2Y4UGliYVg4UGliOmU5Y2I5c0VoOEF4ZWtjYmhvYUFoOEFpbmE4QWE4RWFRYW9mUmJiOW5maDhBYW9jZWZnb2N6OWhtYmtrY2loNWNiaFlpbmN6aHdkbmRuZG5hM2FZY2R0ZnlkYmdMUERiZWVlZWVlZWRla2N1Y2JhWGN3ZjhQaWJhWDhQaWI6ZTljYjlzRWh3eGVrYUxjZXRjOzpGRkZlR2h3Y3VhTHRjdTdjRmVHaENjYmhvaW5hd2FDYVFhb2ZSYmI5bmZod2FvY2VmZ29jejlobWJra2RuZG5hd2E4QTZtYmFMYUU5aG1lYXdhOEE5aG1lYTNhNWNkdGZ5ZGJjd1NtZWthWWg1YXdoOEFrYVljZWZnWWNpOWhtYmthYWE4S2NvNGZnb2FvUmJiYTVhOEtjaTRjb0d0Vjg2YmJkbmRuZG5hM2E1Y2R0ZnlkYmdFUERkYmJiYmJiYmVia2RuY3dhRTlUZzVUbWJjdWFFdGN1N2h3ZG5kbmFFY2VTbWJjYmg4TGFRaFhpbmFYaG9hNWhZY2JoQ2luYW9SYmJnOEFhd2NGZUdnTGE4QWFMNkVhQ2FFdFZoQ2FvY2VmaG9hWWN1ZmdZbWJrYUthQzg2YmJhWGE1ZmhYYUtjZWZoS2E4TGE1Zmc4TGN6Nm1ieGRra2NiaDhMYVFoWGluYVhob2E1aFljYmhDaW5hb1JiYmc4QWF3Y0ZlR2dMYThBYUw2RWFDY2V0VmhDYW9jZWZob2FZY3VmZ1ltYmthS2FDOlQ5Y0ZlOmQ5YzpjOnFqOmJ3OTo5YzpxO2MxOkkxZTpkOWM6YjpjOmUxejk6OWNhMTg4YmJhWGE1ZmhYYUtjZWZoS2E4TGE1Zmc4TGN6Nm1ia2tjYmhvaW5hS2FRYW9mUmJiZ0M4NmJiYUthQ2F3Y0ZlRzlwZmhLYW9jZWZnb2N6OWhtYnhpa2tkbmFFY2VTbWJpbmFLY2I4NmJiYUtjZWZoS3hia2tpbmFLY2I4NmJiYUtjZWZoS3hia2thS2FYOFBidzgzYndhS2FYOFBiYjgzYmJhS2N6ZmhLa2E4S2N6Zmc4S2E4SjlwZ29tZWFRY3pmaFFhZ2FLOVJjSzlwbWJra2FvVG1sYUtoM2FLVG1sa2FIY2VmZ0hhbDlobWJrYXJjO2FiZmF4YXNjdWZhbDJmYWx6OndqampiOEFhc2FtZmhtYTNob2EzbWJrY2Jod3hka2RuYWdhbzlSYWthbGZnd2NLY2FhREVnUWF3YVEwRWdDOXBtYmNiaHd4ZGtkbmF3YVE5cG1iYW9jYmFDYXc5Umd3ejp4ampqYmF3Zmhva2FvYXJjO2FkZmFsejp3ampqYmFsZmhvZG5hRFRtYmFvYXJhOE16OndqampiYThNZmhva2FvYWI5Umh3eGVrY2Jod2thcmM7cXdmOEtqampqYmF3azViYWJhZWFkYWlhbGNkY2J5ZDtpOkk6Y2piejpiampqYms5cmVkdWFlY2Q0Z2RhZWZnaWNhYWljYTBFYWJjajthYmFlOVVjO1dGYkdjamRhZWNhMEVnaWZjdWZhaTlVYWUyYWlhZGZhaWNsNGNpZmNkNGYyZmNlZmttYmNiYWJCZDtpOkk6Y2piaztIUGVMdThKampqamJjO2FlOVJnbDhLampqamJjYmh2ZG5hZWFpY2k5VWdvY0hmNm1iYWJjYnlkO206STpjamJncmM7R2VWODZiYmFsYzthYmZjRmVjamV6OnhqampiOEFhbDljdTgzaVVhbDljdTgzaThXYWw5Y3U4M2l5YWw5Y3U4M2lhYWw5Y3U4M2lLYWw5Y3U4M2l6YWw5Y3U4M2l3YWw5Y3U4M2liYWJhZWZjOVdmaHdhYmNlZmdEYW9maGVkbmFpVG1iY21jc2FyY2I5a2dxRWhrY2JoeGNiaG1jYmhQY2Joc2NiaHppbmRuYWVhdzlubWJjYmh2eGlrYXpjdWZodmFkYVBjZHRmZ0h5ZGJoT2FIY3dmeWRiaEFhSGNsZnlkYmhDY2JoWGRuZG5kbmluYWxjO2FiZmF2Y3NHY2l0ZmdveWRsaFFkbmRuZG5hb3lkYmdvYU85aG1iYVFhQ1NtZWtkbmFvYUM5aG1iYVFhQTlobWJhWGNlZmhYeGVrYW9hQTlobWVhUWFPOWhtZWFYY2RmaFhrYVhjODcwbWRhc2N1Zmh2YUhhWGNkdGdBY3hHZ295ZDo0Okc6Y2piY2R0ZnlkYmhRYUhhb3lkOjA6RzpjamJjZHRmeWRiaENhSGFveWQ6VzpHOmNqYmNkdGZ5ZGJoT2NiaG9kbmluZG5hbGF2Y3NHY2R0ZnlkYmFROWhtYmFvaFh4ZGtjdWhYYXZjdWZodmFvY2VmZ29jejlobWJra2F4YVFheFNndmFYY2U5aWFYYWs5b1Znb0dmaHhkbmRuZG5jYmNzYXZFYVhhb0VndmNzOWhtYmFyY2U5aW1iYVFhUWFtYVFjZWZhbVNndkVnbWNlZlNtZWNtY3NhdkVodmthRGF2YUFjO1dlR1Y4NmJiYXZjczlobWVhUWFtOVJndmNldGF2YzhGOTE3aHZpbmFlY2JjamVhdmNqZTZFYXZjRmJHVjg2YmJhZWNlZmhlYXZjcjRndm1ia2FRaG14dmtjUGh2YURhQWNQVjg2YmJhUWhta2F2VG1pYXZhazlvbWljZGhvY2VoWGF6aEF4bGthdmN1Zmh2YVhjbGZnWGM7YWI5aG1ia2tkbmFIY2VjZGNiYUFheFNFYUNheFNFY2R0Z3Z5ZDpXOkc6Y2piY2R0ZnlkYmdPVGFIYXZ5ZDowOkc6Y2piY2R0ZnlkYmdDY2VTR2FIYXZ5ZDo0Okc6Y2piY2R0ZnlkYmdRY2RTR2F4Y2I5aEdhcUdnTGNlOWhtYmFsOWN1ODNpVWFsOWN1ODNpOFdhbDljdTgzaXlhbDljdTgzaWFhbDljdTgzaUthbDljdTgzaXphbDljdTgzaXdhbDljdTgzaWJjYmh4a2NiaFhhc2N1Zmd2aG9kbmluZG5hbGFvY3NHY2R0ZnlkYmFDOWhtYmFYaEF4ZGtjdWhBYW9jdWZob2FYY2VmZ1hjejlobWJra2NiaG9kbmluZG5hbGF2Y3NHY2R0ZnlkYmFROWhtYmFvaFh4ZGtjdWhYYXZjdWZodmFvY2VmZ29jejlobWJra2F4YU9heFNnS2ZoSGRuZG5hQWNtMG1iYUFjZWZoQXhla2NiY3NhQ2FIU2d2RWhBYUhhdmZoSGtkbmRuYVhjbTBtYmFYY2VmaFh4ZWtjYmNzYVFhSFNndkVoWGFIYXZmaEhrYzk6Y3VhS0VoWWNiaHZhWGFBY2x0Vmc4QWNGZUdob2RuZG5kbmluYXZjO3E6RzpjamJmUmJiYW9TbWVhdmNlZmd2Y3o5aG1ieGRra2FMYU9heDloYXZjbTBWVm1iYURhdmM7V2VWODZiYnhla2FEYVk4NmJiYWVhOEE4NmJiYWVjZWZoZWtkbmFLbWJhT2FtOVJndmNldGF2YzhGOTE3aHZpbmFlY2JjamVhdmNqZTZFYXZjRmJHVjg2YmJhZWNlZmhlYXZjcjRndm1ia2FPaG1rZG5hQWNzOWhtYmFDYW05Umd2Y2V0YXZjOEY5MTdodmluYWVjYmNqZWF2Y2plNkVhdmNGYkdWODZiYmFlY2VmaGVhdmNyNGd2bWJrYUNobWtkbmFYY3M5aG1iYVFhbTlSZ3ZjZXRhdmM4RjkxN2h2aW5hZWNiY2plYXZjamU2RWF2Y0ZiR1Y4NmJiYWVjZWZoZWF2Y3I0Z3ZtYmthUWhta2FsYXNjZHRmYU9CZGJhc2NlZmNzR2h2ZG5kbmFBUHpiZWVlZWVlZWVlZWVlZWViZWthbGF2Y2R0ZmFDQmRiYXNjZGZjc0dodmtkbmRuYVhQemJlZWVlZWVlZWVlZWVlZWJla2FsYXZjZHRmYVFCZGJhdmNlZmNzR2h2a2NpaG9hbGM7YWJmYXpjaXRmZ1hhT0JkbGFYYUNCZGJhemNlZmNzR2hBY2RoWGF2aHNhSGh4eGVrY2Rob2FsYXNjZHRmYVFCZGJjZWhYYXNjZWZjc0doc2F6aEFrYWxjO2FiZmFBY2l0Zmd2YUNCZGxhdmFRQmRiYWxjO2FiZmF6YVhmY3NHY2l0Zmd2YVFCZGxhdmFPQmRiYURjZWZoRGF6YW9mY3NHaHphUGNpZmdQYWk2bWJra2RuYWVhdzlubWJjYmh2eGVrY2JodmluYWVhdmZhdmM7cTpHOmNqYmZSYmI4NmJiYXZjZWZndmN6OWhtYmthZWFiOVJhdmZodmthbGM7YWVmOEtqampqYmF2a1plZXVjYmhkZG5pbmFkY2VmZ2RjOEYwbWVhZWNlYWR0MG1ia2thZGNyZmNGZUdjcjlVY2kyY2RmYWJjaTlVMmNIZmttYmNiYWJCZDttOkk6Y2piazp6ZGVydThKampqamJjejlSaGxjYmh2ZG5hZWFpY3ZmNm1iYWJjYlJiO206STpjamJjO3FlVjg2YmJhbDljYjgzaXdhYmNlZmh2YWJhZWZjOThmaG9kbmFpVG1iY2JoZWNiaHJjYmh3aW5kbmF2YW82bWJjYnNrYWRhd2NkdGZ5ZGJnRGFsY3dmYXJhRGFlOVJnZWFlYzhGOTFnZTdhZTlSYzUwN2dyY2R0ZmdxeWRiOVJnZWM4RTkxYzk6R2FlY2R0N2FyVmhlaW5hdmNiY2plYWVjamU2RWFlY0ZiR1Y4NmJiYXZjZWZodmFlY3I0Z2VtYmthcWFEQmRiYURoZWF3Y2VmZ3dhaTlobWJra2RuYXZhbzlubWJjYnNrYXZjYkJiYmF2YWI5UmNsZmh2a2F2a0JlZXVjYmhkZG5pbmFkY2VmZ2RjOEYwbWVhZWNlYWR0MG1ia2thYmFkY3dmY0ZlR2NyOVUyY3ZmazpkdmxpOTlkdWk5OWx1ZG5hZVRtYmN1YWRjZXRjdWZ0Y3U3OlpodmRuZG5jdWFpY3VmdGN1NzpaZ29KYmJiWk1ncjpsSmJiYjlwOURUbWJhcjpPaHd4ZWtjampqajk0aHdrY2JoaWNiaERpbmFsY2xmSWRiZ3JKYmJiYkpiYmpaYWxJZGJncTpsYXI6bE1hbGN3ZklkYmdrOmxNZ3I6dmFySmJiYmI5QkVnck5oeGFxYXJOaHJhbGN4ZklkYmhxZG5kbmFrSmJiYmI5R1RtYmF4aGt4ZWtKYmJqWmFyOmw6dGdrYWs6bWF4SmJiYmI5R0Voa0piYmpaYXg6bDp0Z3hheDptYXJKYmJiYjlHRWhya2RuZG5hcUpiYmo6O2FxSmJiajo7OUdFZ3hKYmJqWmF4SmJialo5RkVhdk5KYmJiWkpiYmI6O2FxSmJiYmI5R0VNZ3E6bEpiYmI5cDlEVG1iYXE6T2hteGVrY2pqamo5NGhta2RuZG5ha0piYmo6O2FrSmJiajo7OUdFZ3FKYmJqWmFxSmJialo5RkVhb05KYmJiWkpiYmI6O2FrSmJiYmI5R0VNZ3E6bEpiYmI5cDlEVG1iYXE6T2hQeGVrY2pqamo5NGhQa2RuZG5hckpiYmo6O2FySmJiajo7OUdFZ3FKYmJqWmFxSmJialo5RkVhb05KYmJiWkpiYmI6O2FySmJiYmI5R0VNZ3I6bEpiYmI5cDlEVG1iYXI6T2hzeGVrY2pqamo5NGhza2RuZG5hZGNsOWhtYmFiYURmZ3phczg2YmJhemNpZmFtODZiYmF6Y2RmYXc4NmJiYXpjZWZhUDg2YmJ4ZWthYmFpZmd6YXM4N2ViYXpjb2ZhbTg3ZWJhemNsZmF3ODdlYmF6Y2RmYVA4N2Via2FpY3dmaGlhRGNsZmhEYWxjemZobGFlY3VmZ2VtYmtraztobGxkOTlldWQ5OWV1ZG5hZVRtYmRuZG5jdWFpY3VmdGN1NzpaZ3ZKYmJiWk1nbzpsSmJiYjlwOURUbWJhbzpPaGl4ZWtjampqajk0aGlrYWljOzhGaUdocmluYWJjb2ZjaWNkYWxjbGZJZGI6bGFsSWRiOmw5RWdpYWxjd2ZJZGI6bGFsYWljZHRmSWRiOmw5RUVnaWFsY3hmSWRiOmxhbGFpY2R0ZklkYjpsOUVFZ2lhclY4N2ViZG5kbkpiYmo6O0piYmpaYWxhaWNkdGZJZGJKYmJiYjlERWdvYWxhaWNkN2NkdGZJZGJKO1psOjFaTk5nd0piYmo6O2F3SmJiajo7OUdFZ0RKYmJqWmFESmJialo5RkVhdk5KYmJiWkpiYmI6O2F3SmJiYmI5R0VNZ3c6bEpiYmI5cDlEVG1iYXc6T2hxeGVrY2pqamo5NGhxa2FiY2RmYXE4N2ViZG5kbmFsYWljZWZjaUdjZHRmSWRiSjtabDoxWk5hb05nd0piYmo6O2F3SmJiajo7OUdFZ0RKYmJqWmFESmJialo5RkVhdk5KYmJiWkpiYmI6O2F3SmJiYmI5R0VNZ3c6bEpiYmI5cDlEVG1iYXc6T2hxeGVrY2pqamo5NGhxa2FiYXE4N2ViZG5kbmFvYWxhaWN1ZmNpR2NkdGZJZGJKO1psOjFaTk5nb0piYmo6O2FvSmJiajo7OUdFZ3dKYmJqWmF3SmJialo5RkVhdk5KYmJiWkpiYmI6O2FvSmJiYmI5R0VNZ286bEpiYmI5cDlEVG1iYW86T2hpeGVrY2pqamo5NGhpa2FiY2xmYWk4N2ViYWJjd2ZoYmFsY3pmaGxhZWN1ZmdlbWJra2s7UHZpd3VlOTlldThKampqamJjamQ5UmdvOEtqampqYmFkY2Q0aHJkbmRuZG5hdmNkOWhtYmFyVG1iYW9oZGFyaHdpbmFkYzpDdUJkYmFkY2xmaGRhd2N1Zmd3bWJrYWVUbWRhcmNkdGhEYWxocWNiaGtpbmFvaGRhcWh3YXJoeGluYWRhZHlkYmdtY2Jhd0lkYmdQOjhjTDRjRmVHYzpjdWZhUEpiYmJiOUJFZ3NhbWFzOWtFQmRiYXdjbGZod2FkY2xmaGRheGN1Zmd4bWJrYXFhRGZocWFrY2VmZ2thZTlobWJ4ZGtrYWVUbWVrYXJjZHRocWF2Y2U5aGhEY2Joa2luZG5kbmRuYURtYmFyVG1kYzpDdWh3YWxoZGFyaHhpbmF3Y2JhZElkYmdQOjhjTDRjRmVHYzpjdWZhUEpiYmJiOUJFZ21hd2FtOWtFaHdhZGNsZmhkYXhjdWZneG1ieGRra2RuZG5kbmRuYXZQbGVkZGJka2FyVG1sYW9oZGFsaHdhcmh4aW5hZGNiY2Jhd0lkYmdQOjhjTDRjRmVHZ21jOmN1ZmdzYXNhbTBFYVBKYmJiYjlCRUJkYmFkY2xmaGRhd2NsZmh3YXhjdWZneG1ieGlra2FyVG1pY2JoZGFyaHdpbmFvYWRmY2JhbGFkZklkYmdQOjhjTDRjRmVHZ3hjOEFheGM4QTBFYzpjdWZhUEpiYmJiOUJFQmRiYWRjbGZoZGF3Y3VmZ3dtYnhka2thclRtZGtjOkN1aHdrY2JoZGFyaG1pbmF3aHhkbmF2Y2VTbWJhb2FkZnlkYmh4a2RuZG5hbGFkZklkYmdQY2pqajs4aWF4YWk5UmNlZmd4Y0x0OVI6Ok5KYmJiWkpiYmI6O2FQSmJiYmI5R0VNZ1A6bEpiYmI5cDlEVG1iYVA6T2hzeGVrY2pqamo5NGhza2FiYWRmYXNjRkZGckdheGNLdFZCZGJhZGNsZmhkYW1jdWZnbW1ia2thYmFxZmhiYWxhcWZobGFrY2VmZ2thZTlobWJra2FvY2pkZjhLampqamJrOk9sdmV1ZTk5aXVlOTlpdWRuYWVUbWJjZWFpY3VmdGh2Y3VhaXRjdTc6WmhvY2JocmFkY2w5aGh3Y2JoRGluZG5kbmFsY3dmSWRiZ3FKYmJiYmFxSmJiYmI5R0VncUpiYmpaYXFKYmJqWjlGRWFvTkpiYmJaTWdxOmxKYmJiOXA5RFRtYmFxOk9oaXhla2NqampqOTRoaWtkbmRuYWxJZGJncUpiYmJiYXFKYmJiYjlHRWdxSmJialphcUpiYmpaOUZFYW9OSmJiYlpNZ3E6bEpiYmI5cDlEVG1iYXE6T2hkeGVrY2pqamo5NGhka2FkYWk5UmNkOVRna2FpZmhpZG5kbmFsY2xmSWRiZ3FKYmJiYmFxSmJiYmI5R0VncUpiYmpaYXFKYmJqWjlGRWFvTkpiYmJaTWdxOmxKYmJiOXA5RFRtYmFxOk9oZHhla2NqampqOTRoZGthZGFpOVJjZDlUaGRkbmRuYWxjeGZJZGJncUpiYmJiYXFKYmJiYjlHRWdxSmJialphcUpiYmpaOUZFYW9OSmJiYlpNZ3E6bEpiYmI5cDlEVG1iYXE6T2h4eGVrY2pqamo5NGh4a2FkYWlmaGlheGNlOTFhdlZoeGRuZG5hd21iYWJhRGZnbWFpODZiYmFtY2lmYXg4NmJiYW1jZGZhZDg2YmJhbWNlZmFrODZiYnhla2FiYXJmZ21haTg3ZWJhbWNvZmF4ODdlYmFtY2xmYWQ4N2ViYW1jZGZhazg3ZWJrYXJjd2ZocmFEY2xmaERhbGN6ZmhsYWVjdWZnZW1ia2trO21xZFF1aTk5OEpqampqYmM6cWQ5Umd2OEtqampqYmF2YzpTZWZjYmM7S2J6OnhqampiOEFkbmFkVG1iYWlUbWJkbmRuYWJhZVNtYmFlaG94ZWthdmN1YWRjZHRncmFkY0ZGRkZpMEVjYnlkO3E6STpjamJIampqamJiZ29CZDpTZWF2Y2VCZDptZGFvYWVhcno6d2pqamI4QWthdmNiQmQ6T2VhdjljYjgzaTpHZWF2YzpHZWZhb2FkYWlhdmM6U2VmejpwampqYmF2eWQ6R2Vod2FkY2k5VWdEY2J5ZDtxOkk6Y2piSGpqampiYmhlYXZjOlNlZmF2eWQ6bWRncWNkdGZhZUJkYmF2YXFjZWZnckJkOm1kYWVjYmFEejp4ampqYmhrYXZjOlNlZmFyY2R0ZmN1YWljZHRhaWNGRkZGaTBFY2J5ZDtxOkk6Y2piSGpqampiYmd4QmRiYXZhcWNkZmdtQmQ6bWRhbGM7ZWJmaFBhd2hlYXhocmluYXJhbElkYmFQYWV5ZGJnc2N3YXNjdzZFY2R0ZklkYk1VZGJhZWNsZmhlYXJjbGZocmFpY3VmZ2ltYmthdmM6U2VmYW1jZHRmY3VhRGNkdGFkY0ZGRkY5NzBFY2J5ZDtxOkk6Y2piSGpqampiYmdtQmRiZG5hZGNpNm1iYW9oZWFtaHJhRGhpaW5hcmF4YWV5ZGJjZHRmSWRiYXhhZWNsZnlkYmNkdGZJZGJNYXhhZWN3ZnlkYmNkdGZJZGJNVWRiYWVjeGZoZWFyY2xmaHJhaWN1ZmdpbWJra2FxY2lmaHphbGM7ZWJmaEhhdmM7cWJmaE9hdmhlYXZ5ZDpLZWhBYXZ5ZDpPZWhDY2Joc2NiaHJjYmhYY2VoUWluYWVoTGFvYXJjeDJmZ0t5ZGJoUGFLY2xmeWRiaGRhYmFYY3gyZmdlY3dmYUtjd2Z5ZGJnWUJkYmFlY2xmYWRCZGJhZWFQQmRiYWthcmZjZTg2YmJhT2FZQmR3YU9hZEJkbGFPYVBCZGJhbWFyY2R0ZmNiQmRiY2loOEFkbmFzVG1iYUxoaWluYU9hOEFjZHRmYWl5ZGJnZUJkYmE4QWFlYVk5aGFlYVA5aGFlYWQ5aEdHZmg4QWFpY2xmaGlhc2N1ZmdzbWJra2FYY2VmaFhjYmhzaW5hQ2FBYUthc2NkdGZ5ZGJjZHRnaWZ5ZGJjZHRmZ1loZWF3YWlmZ2R5ZGJnUGhpZG5hUFRtYmRuaW5hZXlkYmFyU21lYWVjbGZoZWFpY3VmZ2lUbWR4YmtrYWVhWWFQY2R0ZmM5OGZ5ZGJCZGJhZGFkeWRiY3VmQmRia2FzY2VmZ3NjaTlobWJrZG5kbmRuYThBVG1iY3VockpiYmJiaEVjYmhkYXZ5ZDpLZWhZYXZ5ZDpPZWhLaW5kbmF3YU9hZGNkdGZ5ZGJjZHRnc2Z5ZGJnZVRtYmF4YXNmZ2lJZGJoM2FpYWxjdWFkYWRjczBFY2R0ZmNsZklkYmFIYWVjd2FlY3c2RWNkdGZJZGJNZzVVZGJhNWEzOnRoNWFlY2R0aGlhS2FZYXNmeWRiY2R0ZmhlaW5hbWFleWRiZ3NjZHRmZ1BhNWFQSWRiTWczVWRiYTNhRWFFYTM5RGdQRWhFYXNhcmFQRWhyYWVjbGZoZWFpYzk4ZmdpbWJra2FkY2VmZ2RhOEE5aG1ia2FyY3U5aG1la2FRYUQ5cG1laW5kbmFrYVFmUmJibWJhUWhyeGRrYURhUWNlZmdROWhtYnhka2thOEFjemE4QWN6NkVoc2FPaGVhTGhPYXJjdTlobWVra2F6VG1iYXFjZHRhdmM6U2VmZmN3ZmhlaW5hZXlkYmNieWQ7dTpJOmNqYkg6YmpqamJiYWVjOThmaGVhemN1Zmd6bWJra2F2YzpxZGY4S2pqampiazowbGVvdWN1YWljZHRndmFpY0ZGRkZpMEVnb2NieWQ7cTpJOmNqYkhqampqYmJocmFsYWx5ZDlHZ3djZHRmYXJCZGJhbGF3Y2VmQmQ5R2FiYXJCZGJhb2NieWQ7cTpJOmNqYkhqampqYmJocmFsYWx5ZDlHZ29jZHRmYXJCZGJhbGFvY2VmQmQ5R2FiYXJCZGxjdWFkY2R0YWRjRkZGRmkwRWNieWQ7cTpJOmNqYkhqampqYmJocmFsYWx5ZDlHZ29jZHRmYXJCZGJhbGFvY2VmQmQ5R2FiYXJCZHdhYnlkYmNiYXZ6OnhqampiOEFhYnlkYmhyYWVobGFkaHZpbmFyYWx5ZGJjZHRmZ29hb3lkYmNlZkJkYmFsY2xmaGxhdmN1Zmd2bWJrY2JodmFieWRsZ2xob2FyaHdhaWhEaW5hb2F2QmRiYW9jbGZob2F3eWRiYXZmaHZhd2NsZmh3YURjdWZnRG1ia2FkY2k5VWhxZG5hZGNkOW5tYmFieWR3aG9jYmh2aW5hZWN3ZnlkYmh3YWVjbGZ5ZGJoRGFsYWV5ZGJjZHRmZ2JhYnlkYmdiY2VmQmRiYW9hYmNkdGZhdkJkYmFsYURjZHRmZ0RhRHlkYmdEY2VmQmRiYW9hRGNkdGZhdkJkYmFsYXdjZHRmZ3dhd3lkYmd3Y2VmQmRiYW9hd2NkdGZhdkJkYmFlY3hmaGVhcWF2Y2VmZ3Y5aG1ia2tpbmFsYWx5ZGJhcnlkYjlSQmRiYXJjbGZocmFsY2xmaGxhaWN1ZmdpbWJra1FiYWJhZWFkYWljO0c6RzpjamJ6Om9qampia1FiYWJhZWFkYWljO2k6SDpjamJ6Om9qampiazlEZWV1YWJjRmVhaWNkdHo6eGpqamJobGNiaGJkbmFkVG1iaW5kbmFsYWV5ZGJjZHRmZ2l5ZGJjdTlobWJhaWFiQmRiYWJjZWZoYmthZWNsZmhlYWRjdWZnZG1ia2thYms6M3Zpb3VkOTpkdThKampqamJjO1dhOVJnbDhLampqamJjYmh2YWxjeGZjYmM7S2J6OnhqampiOEFhbGN1YWRjaXRnb2FkY0ZGRkZlMEVjYnlkO3E6STpjamJIampqamJiZ3JCZHhhbGNlQmQyYXJhZWFkYWljZXpOampqYmFsY3Vhb2FkY2pqampvR0VjYnlkO3E6STpjamJIampqamJiZ3dCZHphZGNkdGhlZG5hZFRtYmFiaGlpbmFpYXZCZGJhaWNsZmhpYWRhdmNlZmd2OWhtYmtrYXdhZWZoRGFsYWJCZHdhbGF3QmRsOWNiaHFpbmRuYWRUbWJhcTljcTk6aGthcmh2YURoaWFkaGVpbmFpYXY4UGliYWsxOk5jRnJHODdlYmF2Y3dmaHZhaWNkZmhpYWVjdWZnZW1ia2thbGNsZmFxOk5jZUdjZHRmeWRiaHhhbGNsZmFxOWNlOThncTpOY2VHY2R0ZnlkYmhtYWxjO1diZmNiY2phejp4ampqYjhBYURodmFkaGlkbmFkVG1iaW5hbGM7V2JmYXY4VmViY2R0ZmdlYWV5ZGJjZWZCZGJhdmNkZmh2YWljdWZnaW1ia2tjYmh2Y2JoaWluYWxjO1diZmF2ZmdleWRiaG9hZWFpQmRiYW9haWZoaWF2Y2xmZ3ZjamE5aG1ia2FkaHZkbmRuYWRUbWJpbmFsYztXYmZhRGFteWRiZ2ljZXRmOFZlYmNkdGZnZWFleWRiZ2VjZWZCZGJheGFlY2R0ZmFpQmRiYW1jbGZobWF2Y3VmZ3ZtYmthcTljdjlzbWRjYmh2aW5hYmF3eWRiY2R0ZmF2QmRiYXdjbGZod2FkYXZjZWZndjlobWJ4ZGtrYXE5Y3Y5c21la2tjd2h2Y2JoaWluYWxjeGZhdmZjOThmeWRiY2J5ZDt1Okk6Y2piSDpiampqYmJhaWNlR2hlY2xodmNlaGlhZVRtYmthbGM7V2FmOEtqampqYms6QXdsaXVvOTlpdWQ5OmNiaHY4SmpqampiY2E5UmdvY2J5ZDo0Okk6Y2piQmRLYW9jYjhQZDpXOkk6Y2piODNpemFvY2J5ZDtlOkk6Y2piQmR3YW9jYjhQZDo4Okk6Y2piODNpYmFpY2Q0aHJkbmRuYWRtYkpGRnVGaHdKRkZ1dWhESkZGdXVocUpGRnVGaGtKRkZ1dWh4SkZGdUZobXhla2FyY2R0aFBhZWhzaW5jYmhpaW5hb2N6ZmFpZmd6YXNhaWZJZGJnd2F6SWRiZ0RhRGF3OUVFVWRiYW9haWZnemF3YXpJZGJnRGFEYXc5REVVZGJhaWNsZmdpY3g5aG1ia2FzYVBmaHNhdmNlZmd2YWQ5aG1ia2FvSWRLaERhb0lkd2h3YW9JZENocWFvSWRsaGthb0lkemh4YW9JZGJobWtkbmFkVG1iSmJiYmJKYkZ1OWhKYmJiYmFtYXg6dGdtYW1KYmJiYjlERWdtYWthcTp0Z2tha2FtOURFZ2thd2FEOnRnd2F3YWs5REVndzp2YXdKYmJiYjlCRWh3ZG5hbG1iYXJjZHRob2luZG5kbmFlY2xmSWRiYXE6dGF3TkpiYmJaTWdrOmxKYmJiOXA5RFRtYmFrOk9oaXhla2NqampqOTRoaWthaTpTOWNDOmdoSGRuZG5hZUlkYmF4OnRhd05KYmJiWk1nazpsSmJiYjlwOURUbWJhazpPaGl4ZWtjampqajk0aGlrYUhhaTpTOmVoSGRuZG5hZWN3ZklkYmFEOnRhd05KYmJiWk1nazpsSmJiYjlwOURUbWJhazpPaGl4ZWtjampqajk0aGlrYWJhSGFpOlQ5Y3k6ZzplODNpYmFlYW9maGVhYmN3ZmhiYWRjdWZnZG1ieGRra2FyY2R0aG9pbmRuZG5hZUlkYmF4OnRhd05KYmJiWk1nazpsSmJiYjlwOURUbWJhazpPaGl4ZWtjampqajk0aGlrYWk6U2dIOWNhOmdhSDljejpnOWNqamo7NHM6ZDplYUg5Y0ZlOmQ6ZTljRjpiajs0OnBqO2FyOmQ5YzpiZDk6OWM6cDtHOmQ7NGo6RTthcjpkOWNIOTo5YztkO0g6Vzp5Om06ZztkO0hiOmQ5Y3Y5OjljO2o6S007ajpLTTtqOktkOmRoT2RuZG5hZWNsZklkYmFxOnRhd05KYmJiWk1nazpsSmJiYjlwOURUbWJhazpPaGl4ZWtjampqajk0aGlrYWk6U2dIOWNhOmdhSDljejpnOWNqamo7NHM6ZDplYUg5Y0ZlOmQ6ZTljRjpiajs0OnBqO2FyOmQ5YzpiZDk6OWM6cDtHOmQ7NGo6RTthcjpkOWNIOTo5YztkO0g6Vzp5Om06ZztkO0hiOmQ5Y3E5OjljTTtqOktNO2o6S007amw6ZGFPOmVoT2RuZG5hZWN3ZklkYmFEOnRhd05KYmJiWk1nazpsSmJiYjlwOURUbWJhazpPaGl4ZWtjampqajk0aGlrYWJhT2FpOlNnSDljYTpnYUg5Y3o6ZzljampqOzRzOmQ6ZWFIOWNGZTpkOmU5Y0Y6Ymo7NDpwajthcjpkOWM6YmQ5OjljOnA7RzpkOzRqOkU7YXI6ZDljSDk6OWM7ZDtIOlc6eTptOmc7ZDtIYjpkOWNDOTo5YzpLTTtqOktNO2o6S01EOmQ6ZTgzaWJhZWFvZmhlYWJjd2ZoYmFkY3VmZ2RtYmtrazl0ZWl1Y2JjYnlkO3k6STpjamJnZWFiY2lmYzk4R2ZnYkJkO3k6STpjamJkbmRuYWJaYmN6dGdkOW5tYmN1aGlhYmFkOVJjRkZpZmN6NG5iY3VTbWVrYWVoaWthaWs7TGVlZXVkbmRuYWVhYlZjaUdUbWJhYmhpeGVrZG5kbmFkY3o5cG1iYWJoaXhla2FiaGlpbmFpYWV5ZGJCZGJhaWNsZmFlY2xmeWRiQmRiYWljd2ZhZWN3ZnlkYkJkYmFpY3hmYWVjeGZ5ZGJCZGJhZWN6ZmhlYWljemZoaWFkYzlXZmdkY3MwbWJra2FkY2w2bWJpbmFpYWV5ZGJCZGJhZWNsZmhlYWljbGZoaWFkYzk4ZmdkY2kwbWJra2RuYWRUbWJpbmFpYWVSYmI4NmJiYWljZWZoaWFlY2VmaGVhZGN1ZmdkbWJra2FiazthZWVkdWRuZG5hYmNpR1RtYmFiaGl4ZWthZWNGZUdjOmI6YzpldzJobGRuZG5hZGN6OXBtYmFiaGl4ZWthYmhpaW5haWFsQmRiYWljeGZhbEJkYmFpY3dmYWxCZGJhaWNsZmFsQmRiYWljemZoaWFkYzlXZmdkY3MwbWJra2FkY2w2bWJpbmFpYWxCZGJhaWNsZmhpYWRjOThmZ2RjaTBtYmtrZG5hZFRtYmluYWlhZTg2YmJhaWNlZmhpYWRjdWZnZG1ia2thYms5dGVpdWNiY2J5ZDt5Okk6Y2piZ2VhYmNyZmM5NEdmZ2JCZDt5Okk6Y2piZG5kbmFiWmJjenRnZDlubWJjdWhpYWJhZDlSY0ZGaWZjejRuYmN1U21la2FlaGlrYWlrVGVldWNiYWJjYnlkO3k6STpjamJnZTlSY2lmYzk4R2FlZmdiQmQ7eTpJOmNqYmRuYWJaYmN6dGdlOW5tYmFiYWU5UmNGRmlmY3o0bmI4QWtraztTZGRiY2o6R2RrO2lkYmJiYmRiYmJsYmJid2JiYmJiYmJlYmJiZGJiYmxiYmJ3YmJiYmJiYmJiYmJiYmJiYmJiYmViYmJkYmJiYmJiYmViYmJiYmJiYmJiYmJiYmJiNDpoOXc5Tjk0OlA6Z1c6ajlPOnllOVBiYmJiYmI6bDI5aFo7Njk6OWtaO047NzZaO3JnOTdaO3o7bzl4WjhKO0I4NVo7Ojt1OXlaO2I7azlIWjoyO1o5RFo5ZTpsOW1aNTlBOEtaOnI7VDNaOkE6ellaNzlPSFo7ajQ6Ojg6Olk6RDlWODpiYmJiOXM6NDk6WjhSOmhCWjlNOU07TTg6TDt6O284Ojs4OlBHODlxO3g6Sjg3OFI6aFE4OjpNOkI7ZTg3YmJiYmJialpiYmpaYmJqWjpFO1Y7Tjg6Olk6RHNaOWk7SDs2ODp4ZDtSODo7aDA4Mzg6O1c6Tm9aYmJiYjpXVjlPODp1Zjg4ODo5aTtIOzY4OjljOUc7TDg5O247bTltODk7RDhLbzg6YmJiYmY6OHRaOW04MzZaUzoyQVpMO3pQWlo4MThFWjllOmx4WjtVOThGODo4MTlFOzY4OkZGdXVGRnV1RkZ1dUZGdUZGRnVGRkZ1RmJjO2k6SWRrQ2ViYmJlYmJiZWJiYmRiYmI5RzpyYmIiLHQ9bmV3IFVpbnQ4QXJyYXkoWzMyLDAsNjUsMiwxLDEwNiwzNCwzMywzLDEyOCwxMSw0LDEzLDY0LDYsMjUzLDEwLDcsMTUsMTE2LDEyNyw1LDgsMTIsNDAsMTYsMTksNTQsMjAsOSwyNywyNTUsMTEzLDE3LDQyLDY3LDI0LDIzLDE0NiwxNDgsMTgsMTQsMjIsNDUsNzAsNjksNTYsMTE0LDEwMSwyMSwyNSw2Myw3NSwxMzYsMTA4LDI4LDExOCwyOSw3MywxMTVdKTtpZih0eXBlb2YgV2ViQXNzZW1ibHkhPSJvYmplY3QiKXJldHVybntzdXBwb3J0ZWQ6ITF9O3ZhciBuLG89V2ViQXNzZW1ibHkuaW5zdGFudGlhdGUoYShlKSx7fSkudGhlbihmdW5jdGlvbihtKXtuPW0uaW5zdGFuY2Usbi5leHBvcnRzLl9fd2FzbV9jYWxsX2N0b3JzKCksbi5leHBvcnRzLm1lc2hvcHRfZW5jb2RlVmVydGV4VmVyc2lvbigxKSxuLmV4cG9ydHMubWVzaG9wdF9lbmNvZGVJbmRleFZlcnNpb24oMSl9KTtmdW5jdGlvbiBhKG0pe2Zvcih2YXIgYj1uZXcgVWludDhBcnJheShtLmxlbmd0aCkscD0wO3A8bS5sZW5ndGg7KytwKXt2YXIgeT1tLmNoYXJDb2RlQXQocCk7YltwXT15Pjk2P3ktOTc6eT42ND95LTM5OnkrNH1mb3IodmFyIFQ9MCxwPTA7cDxtLmxlbmd0aDsrK3ApYltUKytdPWJbcF08NjA/dFtiW3BdXTooYltwXS02MCkqNjQrYlsrK3BdO3JldHVybiBiLmJ1ZmZlci5zbGljZSgwLFQpfWZ1bmN0aW9uIHIobSl7aWYoIW0pdGhyb3cgbmV3IEVycm9yKCJBc3NlcnRpb24gZmFpbGVkIil9ZnVuY3Rpb24gaShtKXtyZXR1cm4gbmV3IFVpbnQ4QXJyYXkobS5idWZmZXIsbS5ieXRlT2Zmc2V0LG0uYnl0ZUxlbmd0aCl9ZnVuY3Rpb24gZihtLGIscCx5KXt2YXIgVD1uLmV4cG9ydHMuc2JyayxfPVQoYi5sZW5ndGgqNCksRT1UKHAqNCksdz1uZXcgVWludDhBcnJheShuLmV4cG9ydHMubWVtb3J5LmJ1ZmZlciksUj1pKGIpO3cuc2V0KFIsXykseSYmeShfLF8sYi5sZW5ndGgscCk7dmFyIFM9bShFLF8sYi5sZW5ndGgscCk7dz1uZXcgVWludDhBcnJheShuLmV4cG9ydHMubWVtb3J5LmJ1ZmZlcik7dmFyIEM9bmV3IFVpbnQzMkFycmF5KHApO25ldyBVaW50OEFycmF5KEMuYnVmZmVyKS5zZXQody5zdWJhcnJheShFLEUrcCo0KSksUi5zZXQody5zdWJhcnJheShfLF8rYi5sZW5ndGgqNCkpLFQoXy1UKDApKTtmb3IodmFyIEk9MDtJPGIubGVuZ3RoOysrSSliW0ldPUNbYltJXV07cmV0dXJuW0MsU119ZnVuY3Rpb24gZChtLGIscCx5KXt2YXIgVD1uLmV4cG9ydHMuc2JyayxfPVQocCo0KSxFPVQocCp5KSx3PW5ldyBVaW50OEFycmF5KG4uZXhwb3J0cy5tZW1vcnkuYnVmZmVyKTt3LnNldChpKGIpLEUpLG0oXyxFLHAseSksdz1uZXcgVWludDhBcnJheShuLmV4cG9ydHMubWVtb3J5LmJ1ZmZlcik7dmFyIFI9bmV3IFVpbnQzMkFycmF5KHApO3JldHVybiBuZXcgVWludDhBcnJheShSLmJ1ZmZlcikuc2V0KHcuc3ViYXJyYXkoXyxfK3AqNCkpLFQoXy1UKDApKSxSfWZ1bmN0aW9uIGMobSxiLHAseSxULF8sRSl7dmFyIHc9bi5leHBvcnRzLnNicmssUj13KGIpLFM9dyh5KlQpLEM9bmV3IFVpbnQ4QXJyYXkobi5leHBvcnRzLm1lbW9yeS5idWZmZXIpO0Muc2V0KGkocCksUyk7dmFyIEk9bShSLGIsUyx5LFQsXyxFKSxOPW5ldyBVaW50OEFycmF5KEkpO3JldHVybiBOLnNldChDLnN1YmFycmF5KFIsUitJKSksdyhSLXcoMCkpLE59ZnVuY3Rpb24gdShtKXtmb3IodmFyIGI9MCxwPTA7cDxtLmxlbmd0aDsrK3Ape3ZhciB5PW1bcF07Yj1iPHk/eTpifXJldHVybiBifWZ1bmN0aW9uIGwobSxiKXtpZihyKGI9PTJ8fGI9PTQpLGI9PTQpcmV0dXJuIG5ldyBVaW50MzJBcnJheShtLmJ1ZmZlcixtLmJ5dGVPZmZzZXQsbS5ieXRlTGVuZ3RoLzQpO3ZhciBwPW5ldyBVaW50MTZBcnJheShtLmJ1ZmZlcixtLmJ5dGVPZmZzZXQsbS5ieXRlTGVuZ3RoLzIpO3JldHVybiBuZXcgVWludDMyQXJyYXkocCl9ZnVuY3Rpb24gaChtLGIscCx5LFQsXyxFKXt2YXIgdz1uLmV4cG9ydHMuc2JyayxSPXcocCp5KSxTPXcocCpfKSxDPW5ldyBVaW50OEFycmF5KG4uZXhwb3J0cy5tZW1vcnkuYnVmZmVyKTtDLnNldChpKGIpLFMpLG0oUixwLHksVCxTLEUpO3ZhciBJPW5ldyBVaW50OEFycmF5KHAqeSk7cmV0dXJuIEkuc2V0KEMuc3ViYXJyYXkoUixSK3AqeSkpLHcoUi13KDApKSxJfXJldHVybntyZWFkeTpvLHN1cHBvcnRlZDohMCxyZW9yZGVyTWVzaDpmdW5jdGlvbihtLGIscCl7dmFyIHk9Yj9wP24uZXhwb3J0cy5tZXNob3B0X29wdGltaXplVmVydGV4Q2FjaGVTdHJpcDpuLmV4cG9ydHMubWVzaG9wdF9vcHRpbWl6ZVZlcnRleENhY2hlOnZvaWQgMDtyZXR1cm4gZihuLmV4cG9ydHMubWVzaG9wdF9vcHRpbWl6ZVZlcnRleEZldGNoUmVtYXAsbSx1KG0pKzEseSl9LHJlb3JkZXJQb2ludHM6ZnVuY3Rpb24obSxiKXtyZXR1cm4gcihtIGluc3RhbmNlb2YgRmxvYXQzMkFycmF5KSxyKG0ubGVuZ3RoJWI9PTApLHIoYj49MyksZChuLmV4cG9ydHMubWVzaG9wdF9zcGF0aWFsU29ydFJlbWFwLG0sbS5sZW5ndGgvYixiKjQpfSxlbmNvZGVWZXJ0ZXhCdWZmZXI6ZnVuY3Rpb24obSxiLHApe3IocD4wJiZwPD0yNTYpLHIocCU0PT0wKTt2YXIgeT1uLmV4cG9ydHMubWVzaG9wdF9lbmNvZGVWZXJ0ZXhCdWZmZXJCb3VuZChiLHApO3JldHVybiBjKG4uZXhwb3J0cy5tZXNob3B0X2VuY29kZVZlcnRleEJ1ZmZlcix5LG0sYixwKX0sZW5jb2RlVmVydGV4QnVmZmVyTGV2ZWw6ZnVuY3Rpb24obSxiLHAseSxUKXtyKHA+MCYmcDw9MjU2KSxyKHAlND09MCkscih5Pj0wJiZ5PD0zKSxyKFQ9PT12b2lkIDB8fFQ9PTB8fFQ9PTEpO3ZhciBfPW4uZXhwb3J0cy5tZXNob3B0X2VuY29kZVZlcnRleEJ1ZmZlckJvdW5kKGIscCk7cmV0dXJuIGMobi5leHBvcnRzLm1lc2hvcHRfZW5jb2RlVmVydGV4QnVmZmVyTGV2ZWwsXyxtLGIscCx5LFQ9PT12b2lkIDA/LTE6VCl9LGVuY29kZUluZGV4QnVmZmVyOmZ1bmN0aW9uKG0sYixwKXtyKHA9PTJ8fHA9PTQpLHIoYiUzPT0wKTt2YXIgeT1sKG0scCksVD1uLmV4cG9ydHMubWVzaG9wdF9lbmNvZGVJbmRleEJ1ZmZlckJvdW5kKGIsdSh5KSsxKTtyZXR1cm4gYyhuLmV4cG9ydHMubWVzaG9wdF9lbmNvZGVJbmRleEJ1ZmZlcixULHksYiw0KX0sZW5jb2RlSW5kZXhTZXF1ZW5jZTpmdW5jdGlvbihtLGIscCl7cihwPT0yfHxwPT00KTt2YXIgeT1sKG0scCksVD1uLmV4cG9ydHMubWVzaG9wdF9lbmNvZGVJbmRleFNlcXVlbmNlQm91bmQoYix1KHkpKzEpO3JldHVybiBjKG4uZXhwb3J0cy5tZXNob3B0X2VuY29kZUluZGV4U2VxdWVuY2UsVCx5LGIsNCl9LGVuY29kZUdsdGZCdWZmZXI6ZnVuY3Rpb24obSxiLHAseSxUKXt2YXIgXz17QVRUUklCVVRFUzp0aGlzLmVuY29kZVZlcnRleEJ1ZmZlckxldmVsLFRSSUFOR0xFUzp0aGlzLmVuY29kZUluZGV4QnVmZmVyLElORElDRVM6dGhpcy5lbmNvZGVJbmRleFNlcXVlbmNlfTtyZXR1cm4gcihfW3ldKSxfW3ldKG0sYixwLDIsVD09PXZvaWQgMD8wOlQpfSxlbmNvZGVGaWx0ZXJPY3Q6ZnVuY3Rpb24obSxiLHAseSl7cmV0dXJuIHIocD09NHx8cD09OCkscih5Pj0yJiZ5PD0xNiksaChuLmV4cG9ydHMubWVzaG9wdF9lbmNvZGVGaWx0ZXJPY3QsbSxiLHAseSwxNil9LGVuY29kZUZpbHRlclF1YXQ6ZnVuY3Rpb24obSxiLHAseSl7cmV0dXJuIHIocD09OCkscih5Pj00JiZ5PD0xNiksaChuLmV4cG9ydHMubWVzaG9wdF9lbmNvZGVGaWx0ZXJRdWF0LG0sYixwLHksMTYpfSxlbmNvZGVGaWx0ZXJFeHA6ZnVuY3Rpb24obSxiLHAseSxUKXtyKHA+MCYmcCU0PT0wKSxyKHk+PTEmJnk8PTI0KTt2YXIgXz17U2VwYXJhdGU6MCxTaGFyZWRWZWN0b3I6MSxTaGFyZWRDb21wb25lbnQ6MixDbGFtcGVkOjN9O3JldHVybiBoKG4uZXhwb3J0cy5tZXNob3B0X2VuY29kZUZpbHRlckV4cCxtLGIscCx5LHAsVD9fW1RdOjEpfSxlbmNvZGVGaWx0ZXJDb2xvcjpmdW5jdGlvbihtLGIscCx5KXtyZXR1cm4gcihwPT00fHxwPT04KSxyKHk+PTImJnk8PTE2KSxoKG4uZXhwb3J0cy5tZXNob3B0X2VuY29kZUZpbHRlckNvbG9yLG0sYixwLHksMTYpfX19KSgpfSk7dmFyIHpzLHh4PVgoKCk9Pnt6cz0oZnVuY3Rpb24oKXt2YXIgZT0iYjlINzlUZWJiYmU4RnY5R2JiOUd2dXV1dXVldTlHaXV1dWI5R2V1ZXU5R2l1dXVldWl4a2JlZWVkZGRkaWxsdmllYmVvd2V1ZWNqOkdka3I7TmVxbzlUVzlUOVZWOTVkYkg5RjlGOTM5SDc5VDlGOUo5SDIyOUY5SnQ5VlY3YmI4QTlUVzc5TzlWOVd0OUY5S1c5SjlWOUtXOXdXVnRXOTQ5YzkxOU05TVdWYmVZOVRXNzlPOVY5V3Q5RjlLVzlKOVY5S1c2OVU5S1c5NDljOTE5TTlNV1ZiZEU5VFc3OU85VjlXdDlGOUtXOUo5VjlLVzY5VTlLVzk0OXRXRzkxVzlVOUpXYmlMOVRXNzlPOVY5V3Q5RjlLVzlKOVY5S1dTOVAydFdWOXA5SnRibEs5VFc3OU85VjlXdDlGOUtXOUo5VjlLV1M5UDJ0V1Y5cjkxOUh0YnZMOVRXNzlPOVY5V3Q5RjlLVzlKOVY5S1dTOVAydFdWVDk0OVdib1k5VFc3OU85VjlXdDlGOUtXOUo5VjlLV1M5UDJ0V1ZKOVYyOVZWYnJsNzlJVjlSYndxOlZaa2RiazpYWWk1dWQ5OmR1OEpqampqYmNqO2tiOVJndjhLampqamJjOTpob2RuYWxUbWJjdWhvYWlSYmJncmM7V2VHYzpHZTlobWJhcmNzR2d3Y2UwbWJjOTpob2FsY3VmYWRjZDRjYmF3RWdEYWRmZ3JjS2NhYXdFZ3FhcmFxMEVnazZtYmFpY2VmaHhjajthYmFkOVVjO1dGYkdjamRhZGNhMEVobWFpYWxmZ1BhcjlSZ29hZGZoc2F2YW9hZHo6ampqamJnemNlVmhIY2JoT2RuZG5pbmFlYU85bm1lYVBheDlSYUQ2bWRhbWFlYU85UmFPYW1mZ29hZTZFZ0Fjc2ZnbGM5V0doQ2FiYU9hZDJmaFhhQWNldGhRYXhhRGZoaWFPYWVhb2FlYW82RTlSaExhbGNsNGNpZmNkNGhLYXpjajtjYmZhQWZoWWNiaDhBYXpjamRmaEVhSGgzaW5jYmg1ZG5hd1RtYmF4YThBY2Q0ZlJiYmg1a2NiaDhFYXpjajtjYmZocWluYWloOEZkbmRuZG5kbmE1YThFY2V0NGNpR2dvYzk6ZlBkZWJka2FQYThGOVJhQTZtcmF6Y2o7Y2JmYThFYUEyZmE4RmFBejpqampqYjhBYThGYUFmaGl4ZGthemNqO2NiZmE4RWFBMmZjYmFBejprampqYjhBYThGaGl4ZWthUGE4RjlSYUs2bXZhOEZhS2ZoaWRuYUNUbWJhUGFpOVJjSzZtYmFvY2R0YzpxOkc6Y2piZmNqOkc6Y2piYXdFaGFjemhyY2JobGluYXJnb2M5V2ZnaGFxZmhyZG5kbmRuZG5kbmRuYWFhOEZhaGNvNGZSYmJhbGNvRzRjaUdjZHRmeWRiUERiZWR2aXZ2dmx2a2FyOWNiODNid2FyOWNiODNiYnhsa2FyY2JhaVJiZGFpOFhiYjljOmM6cWo6Ync5OjljOnE7YzE6STFlOmQ5YzpiOmM6ZTF6OTpnZzljampqamp6OmRnOEo5cUU4NmJiYXFhb2ZncmNHZmNiYWljZGZhOEo5YzhOMTpOZmdoUmJiYWc5Y2pqampqdzpkZzhKOXFFODZiYmFyY1ZmY2JhaGE4SjljOE0xOk5mZ2hSYmJhZzljampqampsOmRnOEo5cUU4NmJiYXJjN2ZjYmFoYThKOWM4TDE6TmZnaFJiYmFnOWNqampqamQ6ZGc4SjlxRTg2YmJhcmN0ZmNiYWhhOEo5YzhLMTpOZmdoUmJiYWc5Y2pqampqZTpkZzhKOXFFODZiYmFyYzkxZmNiYWhhOEo5YzhKMTpOZmdoUmJiYWc5Y2pqamo7YWI6ZGc4SjlxRTg2YmJhcmM0ZmNiYWhhOEo5Y2cxOk5mZ2hSYmJhZzljampqamE6ZGc4SjlxRTg2YmJhcmM5M2ZjYmFoYThKOWNoMTpOZmdoUmJiYWc5Y2pqamp6OmRnZzlxRTg2YmJhcmM5NGZjYmFoYWc5Y2ExOk5mZ2hSYmJhaThYYmU5YzpjOnFqOmJ3OTo5YzpxO2MxOkkxZTpkOWM6YjpjOmUxejk6Z2c5Y2pqampqejpkZzhKOXFFODZiYmFyYzk1ZmNiYWhhOEo5YzhOMTpOZmdpUmJiYWc5Y2pqampqdzpkZzhKOXFFODZiYmFyYzk2ZmNiYWlhOEo5YzhNMTpOZmdpUmJiYWc5Y2pqampqbDpkZzhKOXFFODZiYmFyYzk3ZmNiYWlhOEo5YzhMMTpOZmdpUmJiYWc5Y2pqampqZDpkZzhKOXFFODZiYmFyYzk4ZmNiYWlhOEo5YzhLMTpOZmdpUmJiYWc5Y2pqampqZTpkZzhKOXFFODZiYmFyYzk5ZmNiYWlhOEo5YzhKMTpOZmdpUmJiYWc5Y2pqamo7YWI6ZGc4SjlxRTg2YmJhcmM5OmZjYmFpYThKOWNnMTpOZmdpUmJiYWc5Y2pqamphOmRnOEo5cUU4NmJiYXJjdWZjYmFpYThKOWNoMTpOZmdpUmJiYWc5Y2pqamp6OmRnZzlxRTg2YmJhaWFnOWNhMTpOZmhpeGlrYXJhaVJibGFpUmJiZ2hjbzRnOEthOEtjaVNnOEtFODZiYmFxYW9mZ3JjR2ZhaWNsZmE4S2ZnOEtSYmJhaGNsNGNpR2c4TGE4TGNpU2c4TEU4NmJiYXJjVmZhOEthOExmZzhLUmJiYWhjZDRjaUdnOExhOExjaVNnOExFODZiYmFyYzdmYThLYThMZmc4S1JiYmFoY2lHZ2hhaGNpU2doRTg2YmJhcmN0ZmE4S2FoZmc4S1JiYmFpUmJlZ2hjbzRnOExhOExjaVNnOExFODZiYmFyYzkxZmE4S2E4TGZnOEtSYmJhaGNsNGNpR2c4TGE4TGNpU2c4TEU4NmJiYXJjNGZhOEthOExmZzhLUmJiYWhjZDRjaUdnOExhOExjaVNnOExFODZiYmFyYzkzZmE4S2E4TGZnOEtSYmJhaGNpR2doYWhjaVNnaEU4NmJiYXJjOTRmYThLYWhmZzhLUmJiYWlSYmRnaGNvNGc4TGE4TGNpU2c4TEU4NmJiYXJjOTVmYThLYThMZmc4S1JiYmFoY2w0Y2lHZzhMYThMY2lTZzhMRTg2YmJhcmM5NmZhOEthOExmZzhLUmJiYWhjZDRjaUdnOExhOExjaVNnOExFODZiYmFyYzk3ZmE4S2E4TGZnOEtSYmJhaGNpR2doYWhjaVNnaEU4NmJiYXJjOThmYThLYWhmZ2hSYmJhaVJiaWdpY280ZzhLYThLY2lTZzhLRTg2YmJhcmM5OWZhaGE4S2ZnaFJiYmFpY2w0Y2lHZzhLYThLY2lTZzhLRTg2YmJhcmM5OmZhaGE4S2ZnaFJiYmFpY2Q0Y2lHZzhLYThLY2lTZzhLRTg2YmJhcmN1ZmFoYThLZmdyUmJiYWljaUdnaWFpY2lTZ2lFODZiYmFyYWlmaGl4ZGthcmFpUmJ3YWlSYmJnaGNsNGc4S2E4S2NzU2c4S0U4NmJiYXFhb2ZncmNHZmFpY3dmYThLZmc4S1JiYmFoY3NHZ2hhaGNzU2doRTg2YmJhcmNWZmE4S2FoZmdoUmJiYWlSYmVnOEtjbDRnOExhOExjc1NnOExFODZiYmFyYzdmYWhhOExmZ2hSYmJhOEtjc0dnOEthOEtjc1NnOEtFODZiYmFyY3RmYWhhOEtmZ2hSYmJhaVJiZGc4S2NsNGc4TGE4TGNzU2c4TEU4NmJiYXJjOTFmYWhhOExmZ2hSYmJhOEtjc0dnOEthOEtjc1NnOEtFODZiYmFyYzRmYWhhOEtmZ2hSYmJhaVJiaWc4S2NsNGc4TGE4TGNzU2c4TEU4NmJiYXJjOTNmYWhhOExmZ2hSYmJhOEtjc0dnOEthOEtjc1NnOEtFODZiYmFyYzk0ZmFoYThLZmdoUmJiYWlSYmxnOEtjbDRnOExhOExjc1NnOExFODZiYmFyYzk1ZmFoYThMZmdoUmJiYThLY3NHZzhLYThLY3NTZzhLRTg2YmJhcmM5NmZhaGE4S2ZnaFJiYmFpUmJ2ZzhLY2w0ZzhMYThMY3NTZzhMRTg2YmJhcmM5N2ZhaGE4TGZnaFJiYmE4S2NzR2c4S2E4S2NzU2c4S0U4NmJiYXJjOThmYWhhOEtmZ2hSYmJhaVJib2c4S2NsNGc4TGE4TGNzU2c4TEU4NmJiYXJjOTlmYWhhOExmZ2hSYmJhOEtjc0dnOEthOEtjc1NnOEtFODZiYmFyYzk6ZmFoYThLZmdoUmJiYWlSYnJnaWNsNGc4S2E4S2NzU2c4S0U4NmJiYXJjdWZhaGE4S2ZnclJiYmFpY3NHZ2lhaWNzU2dpRTg2YmJhcmFpZmhpeGVrYXJhaThQYnc4M2J3YXJhaThQYmI4M2JiYWljemZoaWtkbmFvYUM5cG1iYWxjZGZobGFvY3pmaHJhUGFpOVJjTDBtZWtrYW9hQzZtb2FpbWV4b2thQ212YThGVG12a2FxYUFmaHFhOEVjZWZnOEVjbDlobWJrZG5kbmRuZG5hd1RtYmFzYThBY2Q0ZlJiYmdvY2lHUGxiZWRyYmthQVRtZGF6YThBZmg4RmF6Y2o7Y2JmaGhjYmg4RWFFaGFpbmE4RlJiYmhyYWFob2NiaGxpbmFvYWhhbGZSYmJncWNlNGNiYXFjZUc5UjdhcmZncjg2YmJhb2FkZmhvYUFhbGNlZmdsOWhtYmthYWNlZmhhYThGY2VmaDhGYWhhQWZoaGE4RWNlZmc4RWNsOWhtYnhpa2thQVRtZWF6YThBZmhhYXpjajtjYmZoaGNiaG9jZWg4RWFZaDhGaW5hRWFvZmhsYWE4VmJiaHJjYmhvaW5hbGE4RmFvZlJiYmN3dGFoYW9mUmJiZ3FWYzs6RmlHY2U0Y2JhcWNlRzlSN2FyZmdyODdiYmFsYWRmaGxhTGFvY2VmZ29mbWJrYThGYVFmaDhGY2Rob2FhY2RmaGFhaGFRZmhoYThFY2VHaGxjYmg4RWFsbWJ4ZGtrYUFUbWJhb2NsNGg4RWF6YThBZlJiYmhxY3dob2EzaGxpbmFsUmJiYW90YXFWaHFhbGNlZmhsYW9jd2Znb2NhOWhtYmtjYmhoYUVoOEZhWWhhaW5hemNqO2NiZmFoZlJiYmhyY3dob2FhaGxpbmFsUmJiYW90YXJWaHJhbGFBZmhsYW9jd2Znb2NhOWhtYmthcmE4RTk0YXE3aHFjYmhvYThGaGxpbmFsYXFhbzQ4NmJiYWxjZWZobGFvY3dmZ29jYTlobWJrYThGYWRmaDhGYWFjZWZoYWFoY2VmZ2hhQTlobWJra2FFY2xmaEVhM2NsZmgzYThBY2xmZzhBYWQ2bWJrYVhhemNqZGZhQWFkMno6ampqamI4QWF6YXpjamRmYUFjdWZhZDJmYWR6OmpqampiOEFhQWFPZmhPYWloeGFpbWJrYzk6aG94ZGtjYmM5OWFQYXg5UmFrU0Vob3hla2M5Omhva2F2Y2o7a2JmOEtqampqYmFvazp5c2V6dThKampqamJjO2FlOVJndjhLampqamJjOTpob2RuYWxhZWNpOVVncmNIZjZtYmN1aG9haVJiYmd3YztXZUdjO0dlOWhtYmF3Y3NHZ0RjZTBtYmF2YzthYmZjRmVjamV6OmtqampiOEFhdjljdTgzaVVhdjljdTgzaThXYXY5Y3U4M2l5YXY5Y3U4M2lhYXY5Y3U4M2lLYXY5Y3U4M2l6YXY5Y3U4M2l3YXY5Y3U4M2liYWlhbGZjOVdmaHFhaWNlZmd3YXJmaGxkbmFlVG1iY21jc2FEY2VTRWhrY2JoeGNiaG1jYmhyY2JoaWNiaG9pbmRuYWxhcTlubWJjOTpob3hpa2RuZG5hd1JiYmdEYztWZTBtYmF2YzthYmZhb2FEY3U3Z1BjbDRmY3NHY2l0ZmdzeWRsaHphc3lkYmhIZG5kbmFEY3NHZ3NhazlwbWJhdmFpYVBmY3NHY2R0ZnlkYmF4YXNFaERheGFzVGdPZmh4eGVrZG5kbmFzY3NTbWJjZWhPYXNjOTg3YXNhbWZmY2VmaER4ZWthbGNlZmhEYWw4U2JiZ3NjRmVHaFBkbmRuYXNjdTltbWJhRGhseGVrYWxjdmZobGFQY0ZiR2hQY3Joc2RuaW5hRDhTYmJnT2NGYkdhc3RhUFZoUGFPY3U5a21lYURjZWZoRGFzY3JmZ3NjOEo5aG1ieGRra2FEY2VmaGxrY2VoT2FQY2U0Y2JhUGNlRzlSN2FtZmhEa2FEaG1rYXZjO2FiZmFvY2l0ZmdzYURCZGJhc2F6QmRsYXZhaWNkdGZhREJkYmF2YzthYmZhb2NlZmNzR2NpdGZnc2FIQmRiYXNhREJkbGFvY2RmaG9hT2FpZmhpZG5hZGNkOWhtYmFiYXJjZXRmZ3NhSDg3ZWJhc2NsZmFEODdlYmFzY2RmYXo4N2VieGRrYWJhcmNkdGZnc2FIQmRiYXNjd2ZhREJkYmFzY2xmYXpCZGJ4ZWtkbmFEY3BlMG1iYXZhaWFxYURjc0dmUmJiZ3NjbDRnUDlSY3NHY2R0ZnlkYmF4Y2VmZ09hUEVoRGF2YWlhczlSY3NHY2R0ZnlkYmFPYVBUZ3pmZ09hc2NzR2dQRWhzYVBUaFBkbmRuYWRjZDlobWJhYmFyY2V0ZmdIYXg4N2ViYUhjbGZhczg3ZWJhSGNkZmFEODdlYnhla2FiYXJjZHRmZ0hheEJkYmFIY3dmYXNCZGJhSGNsZmFEQmRia2F2YWljZHRmYXhCZGJhdmM7YWJmYW9jaXRmZ0hhREJkYmFIYXhCZGxhdmFpY2VmZ2ljc0djZHRmYURCZGJhdmM7YWJmYW9jZWZjc0djaXRmZ0hhc0JkYmFIYURCZGxhdmFpYXpmZ2ljc0djZHRmYXNCZGJhdmM7YWJmYW9jZGZjc0djaXRmZ0RheEJkYmFEYXNCZGxhb2NpZmhvYWlhUGZoaWFPYVBmaHh4ZWtheGNiYWxSYmJnc0VnSGFEYzs6ZVNnRGZoT2FzY3NHaEFkbmRuYXNjbDRnQ21iYU9jZWZoenhla2FPaHphdmFpYUM5UmNzR2NkdGZ5ZGJoT2tkbmRuYUFtYmF6Y2VmaHh4ZWthemh4YXZhaWFzOVJjc0djZHRmeWRiaHprZG5kbmFEVG1iYWxjZWZoRHhla2FsY2RmaERhbDhTYmVnUGNGZUdoc2RuYVBjdTlrbWJhbGNvZmhIYXNjRmJHaHNjcmhsZG5pbmFEOFNiYmdQY0ZiR2FsdGFzVmhzYVBjdTlrbWVhRGNlZmhEYWxjcmZnbGM4SjlobWJrYUhoRHhla2FEY2VmaERrYXNjZTRjYmFzY2VHOVI3YW1mZ21oSGtkbmRuYUNjc1NtYmFEaHN4ZWthRGNlZmhzYUQ4U2JiZ2xjRmVHaFBkbmFsY3U5a21iYURjdmZoT2FQY0ZiR2hQY3JobGRuaW5hczhTYmJnRGNGYkdhbHRhUFZoUGFEY3U5a21lYXNjZWZoc2FsY3JmZ2xjOEo5aG1ia2FPaHN4ZWthc2NlZmhza2FQY2U0Y2JhUGNlRzlSN2FtZmdtaE9rZG5kbmFBY3NTbWJhc2hseGVrYXNjZWZobGFzOFNiYmdEY0ZlR2hQZG5hRGN1OWttYmFzY3ZmaHphUGNGYkdoUGNyaERkbmluYWw4U2JiZ3NjRmJHYUR0YVBWaFBhc2N1OWttZWFsY2VmaGxhRGNyZmdEYzhKOWhtYmthemhseGVrYWxjZWZobGthUGNlNGNiYVBjZUc5UjdhbWZnbWh6a2RuZG5hZGNkOWhtYmFiYXJjZXRmZ0RhSDg3ZWJhRGNsZmF6ODdlYmFEY2RmYU84N2VieGVrYWJhcmNkdGZnRGFIQmRiYURjd2ZhekJkYmFEY2xmYU9CZGJrYXZjO2FiZmFvY2l0ZmdEYU9CZGJhRGFIQmRsYXZhaWNkdGZhSEJkYmF2YzthYmZhb2NlZmNzR2NpdGZnRGF6QmRiYURhT0JkbGF2YWljZWZnaWNzR2NkdGZhT0JkYmF2YzthYmZhb2NkZmNzR2NpdGZnRGFIQmRiYURhekJkbGF2YWlhQ1RhQ2NzU1ZmZ2ljc0djZHRmYXpCZGJhaWFBVGFBY3NTVmZoaWFvY2lmaG9rYXdjZWZod2FvY3NHaG9haWNzR2hpYXJjaWZncmFlNm1ia2tjYmM5OWFsYXFTRWhva2F2YzthZWY4S2pqampiYW9rOmNsZXZ1OEpqampqYmN6OVJodmRuYWxhZWN2ZjlwbWJjOTpza2RuYWlSYmJjOzplR2M7cWVTbWJjdXNrYXY5Y2I4M2l3YWljZWZob2FpYWxmYzk4ZmhyZG5hZVRtYmRuYWRjZFNtYmNiaHdpbmRuYW9hcjZtYmM5OnNrYW9jZWZobGFvOFNiYmdpY0ZlR2hkZG5kbmFpY3U5bW1iYWxob3hla2FvY3ZmaG9hZGNGYkdoZGNyaGlkbmluYWw4U2JiZ0RjRmJHYWl0YWRWaGRhRGN1OWttZWFsY2VmaGxhaWNyZmdpYzhKOWhtYnhka2thbGNlZmhva2FiYXdjZHRmYWRjOEV0YzhGOTFhZGNkNDdhdmN3ZmFkY2VHY2R0VmdseWRiZmdpQmRiYWxhaUJkYmF3Y2VmZ3dhZTlobWJ4ZGtrY2Jod2luZG5hb2FyNm1iYzk6c2thb2NlZmhsYW84U2JiZ2ljRmVHaGRkbmRuYWljdTltbWJhbGhveGVrYW9jdmZob2FkY0ZiR2hkY3JoaWRuaW5hbDhTYmJnRGNGYkdhaXRhZFZoZGFEY3U5a21lYWxjZWZobGFpY3JmZ2ljOEo5aG1ieGRra2FsY2VmaG9rYWJhd2NldGZhZGM4RXRjOEY5MWFkY2Q0N2F2Y3dmYWRjZUdjZHRWZ2x5ZGJmZ2k4N2ViYWxhaUJkYmF3Y2VmZ3dhZTlobWJra2NiYzk5YW9hclNFazpMdm9ldWU5OWR1ZDk5ZXVkOTlkbmRuYWRjbDlobWJhZVRtZWluZG5kbmFiY2RmZ2Q4U2JiOllhYjhTYmJnaTpZZ2w6bDp0YWJjZWZndjhTYmJnbzpZZ3I6bDp0Z3dKYmI7OjljYXdhd05KYmJiYmF3YXdKYmJiYjlHZ0RFZ3E6bWdrYXFhaWNiOWlFYWxNZ3dhd05ha2FxYW9jYjlpRWFyTWdxYXFOTU06cjp2Z2xOSmJiYlpKYmJiOjthREVNZ3I6bEpiYmI5cDlEVG1iYXI6T2hpeGVrY2pqamo5NGhpa2FkYWk4NmJiZG5kbmFxYWxOSmJiYlpKYmJiOjthcUpiYmJiOUdFTWdxOmxKYmJiOXA5RFRtYmFxOk9oZHhla2NqampqOTRoZGthdmFkODZiYmRuZG5hd2FsTkpiYmJaSmJiYjo7YXdKYmJiYjlHRU1ndzpsSmJiYjlwOURUbWJhdzpPaGR4ZWtjampqajk0aGRrYWJhZDg2YmJhYmNsZmhiYWVjdWZnZW1ieGRra2FlVG1iaW5kbmRuYWJjbGZnZDhVZWI6WWFiOFVlYmdpOllnbDpsOnRhYmNkZmd2OFVlYmdvOllncjpsOnRnd0piOzpGU2F3YXdOSmJiYmJhd2F3SmJiYmI5R2dERWdxOm1na2FxYWljYjlpRWFsTWd3YXdOYWthcWFvY2I5aUVhck1ncWFxTk1NOnI6dmdsTkpiYmJaSmJiYjo7YURFTWdyOmxKYmJiOXA5RFRtYmFyOk9oaXhla2NqampqOTRoaWthZGFpODdlYmRuZG5hcWFsTkpiYmJaSmJiYjo7YXFKYmJiYjlHRU1ncTpsSmJiYjlwOURUbWJhcTpPaGR4ZWtjampqajk0aGRrYXZhZDg3ZWJkbmRuYXdhbE5KYmJiWkpiYmI6O2F3SmJiYmI5R0VNZ3c6bEpiYmI5cDlEVG1iYXc6T2hkeGVrY2pqamo5NGhka2FiYWQ4N2ViYWJjd2ZoYmFlY3VmZ2VtYmtrazo0aW9pdWU5OWR1ZDk5ZHVkOTlkbmFlVG1iY2JoaWFiaGxpbmRuZG5hbDhVZWJndjpZZ29KOmppOjFTYWxjb2Y4VWViZ3JjaVZndzpZOnZnRE5KYmJiWkpiYmI6O2F2Y3U5a0VNZ3E6bEpiYmI5cDlEVG1iYXE6T2hreGVrY2pqamo5NGhra2FsY2xmOFVlYmh2YWxjZGY4VWViaHhhbGFyY2VmY2lHY2V0ZmFrODdlYmRuZG5heDpZZ3FhRE5KYmJiWkpiYmI6O2F4Y3U5a0VNZ206bEpiYmI5cDlEVG1iYW06T2h4eGVrY2pqamo5NGh4a2FiYWlhcmNpR2drZmNkN2NldGZheDg3ZWJkbmRuYXY6WWdtYUROSmJiYlpKYmJiOjthdmN1OWtFTWdQOmxKYmJiOXA5RFRtYmFQOk9odnhla2NqampqOTRodmthbGFyY3VmY2lHY2V0ZmF2ODdlYmRuZG5hd2F3MjpaZ1BhUE1hb2FvTjp0YXFhcU46dGFtYW1OOnRnb0piYmJiYW9KYmJiYjlHRTpyYUROSmJiYlpNZ0Q6bEpiYmI5cDlEVG1iYUQ6T2hyeGVrY2pqamo5NGhya2FsYWtjZXRmYXI4N2ViYWxjd2ZobGFpY2xmaGlhZWN1ZmdlbWJra2s5bWJkbmFkY2Q0YWUyZ2RUbWJpbmFiYWJ5ZGJnZWN3dGN3OTE6WWFlY2U5MWNqamo5OEdjampqOzhpZjo6TlVkYmFiY2xmaGJhZGN1ZmdkbWJra2s6VHZpcnVkOTlldWRuZG5hZGNsOWhtYmFlVG1laW5kbmRuYWJSYmJnaWFiY2VmZ2w4U2JiZ3ZhYmNkZmdvOFNiYmdyZjlSOllKYmJ1SmFiY2lmZ3dSYmJnZGNlNGFkVmdEY2Q0YURWZ0RjbDRhRFZnRDpaOnZncU5KYmJiWk1nazpsSmJiYjlwOURUbWJhazpPaHh4ZWtjampqajk0aHhrYW9heDg2YmJkbmRuYXJhaWY6WWFxTkpiYmJaTWdrOmxKYmJiOXA5RFRtYmFrOk9ob3hla2NqampqOTRob2thbGFvODZiYmRuZG5hdmFpZmFyOVI6WWFxTkpiYmJaTWdrOmxKYmJiOXA5RFRtYmFrOk9oaXhla2NqampqOTRoaWthYmFpODZiYmRuZG5hRGFkY2V0R2FkY2VHVjpaYXFOSmJiYlpNZ3E6bEpiYmI5cDlEVG1iYXE6T2hkeGVrY2pqamo5NGhka2F3YWQ4NmJiYWJjbGZoYmFlY3VmZ2VtYnhka2thZVRtYmluZG5kbmFiOFZlYmdpYWJjZGZnbDhVZWJndmFiY2xmZ284VWViZ3JmOVI6WUpiRnU5aGFiY29mZ3c4VmViZ2RjZTRhZFZnRGNkNGFEVmdEY2w0YURWZ0RjdzRhRFZnRDpaOnZncU5KYmJiWk1nazpsSmJiYjlwOURUbWJhazpPaHh4ZWtjampqajk0aHhrYW9heDg3ZWJkbmRuYXJhaWY6WWFxTkpiYmJaTWdrOmxKYmJiOXA5RFRtYmFrOk9ob3hla2NqampqOTRob2thbGFvODdlYmRuZG5hdmFpZmFyOVI6WWFxTkpiYmJaTWdrOmxKYmJiOXA5RFRtYmFrOk9oaXhla2NqampqOTRoaWthYmFpODdlYmRuZG5hRGFkY2V0R2FkY2VHVjpaYXFOSmJiYlpNZ3E6bEpiYmI5cDlEVG1iYXE6T2hkeGVrY2pqamo5NGhka2F3YWQ4N2ViYWJjd2ZoYmFlY3VmZ2VtYmtrazl0ZWl1Y2JjYnlkOks6RzpjamJnZWFiY2lmYzk4R2ZnYkJkOks6RzpjamJkbmRuYWJaYmN6dGdkOW5tYmN1aGlhYmFkOVJjRkZpZmN6NG5iY3VTbWVrYWVoaWthaWs7TGVlZXVkbmRuYWVhYlZjaUdUbWJhYmhpeGVrZG5kbmFkY3o5cG1iYWJoaXhla2FiaGlpbmFpYWV5ZGJCZGJhaWNsZmFlY2xmeWRiQmRiYWljd2ZhZWN3ZnlkYkJkYmFpY3hmYWVjeGZ5ZGJCZGJhZWN6ZmhlYWljemZoaWFkYzlXZmdkY3MwbWJra2FkY2w2bWJpbmFpYWV5ZGJCZGJhZWNsZmhlYWljbGZoaWFkYzk4ZmdkY2kwbWJra2RuYWRUbWJpbmFpYWVSYmI4NmJiYWljZWZoaWFlY2VmaGVhZGN1ZmdkbWJra2FiazthZWVkdWRuZG5hYmNpR1RtYmFiaGl4ZWthZWNGZUdjOmI6YzpldzJobGRuZG5hZGN6OXBtYmFiaGl4ZWthYmhpaW5haWFsQmRiYWljeGZhbEJkYmFpY3dmYWxCZGJhaWNsZmFsQmRiYWljemZoaWFkYzlXZmdkY3MwbWJra2FkY2w2bWJpbmFpYWxCZGJhaWNsZmhpYWRjOThmZ2RjaTBtYmtrZG5hZFRtYmluYWlhZTg2YmJhaWNlZmhpYWRjdWZnZG1ia2thYmtrODNkYmNqOkdkazhLYmJiYmRiYmJsYmJid2JiYmJiYmJlYmJiZGJiYmxiYmJ3YmJiYmM6SzpHZGtsOFc6cWJiIix0PSJiOUg3OVRlYmJiZUtsOUdiYjlHdnV1dXV1ZXU5R2l1dXViOUdldWV1aXhrYmJlYmVlZGRkZGlsdmU5V2VlZXZpZWJlb3dldWVjajpHZGtyO05lcW85VFc5VDlWVjk1ZGJIOUY5RjkzOUg3OVQ5RjlKOUgyMjlGOUp0OVZWN2JiOEE5VFc3OU85VjlXdDlGOUtXOUo5VjlLVzl3V1Z0Vzk0OWM5MTlNOU1XVmJkWTlUVzc5TzlWOVd0OUY5S1c5SjlWOUtXNjlVOUtXOTQ5YzkxOU05TVdWYmxFOVRXNzlPOVY5V3Q5RjlLVzlKOVY5S1c2OVU5S1c5NDl0V0c5MVc5VTlKV2J2TDlUVzc5TzlWOVd0OUY5S1c5SjlWOUtXUzlQMnRXVjlwOUp0Ym9LOVRXNzlPOVY5V3Q5RjlLVzlKOVY5S1dTOVAydFdWOXI5MTlIdGJyTDlUVzc5TzlWOVd0OUY5S1c5SjlWOUtXUzlQMnRXVlQ5NDlXYndZOVRXNzlPOVY5V3Q5RjlLVzlKOVY5S1dTOVAydFdWSjlWMjlWVmJEbDc5SVY5UmJxcTpXOURrbGJ6aWs5NGV2dThKampqamJjejlSaGJjYmhlaW5jYmhkY2JoaWluYWJjd2ZhZGZhaWNqdWFlYWQ0Y2VHZ2xFODZiYmFpYWxmaGlhZGNlZmdkY3c5aG1ia2FlYWk4NmI6cTpXOmNqYmFlY2l0YWI4UGl3ODNpOnE6RzpjamJhZWNlZmdlY2pkOWhtYmtrOkpCbDhBdWQ5N2R1cjk3OEpqampqYmNqO2tiOVJndjhLampqamJjOTpob2RuYWxUbWJjdWhvYWlSYmJncmM7V2VHYzpHZTlobWJhcmNzR2d3Y2UwbWJjOTpob2FsY3VmYWRjZDRjYmF3RWdEYWRmZ3JjS2NhYXdFZ3FhcmFxMEVnazZtYmFpYWxmZ3hhcjlSaG9kbmFkVGdtbWJhdmFvYWQ7OHFiYmthaWNlZmhQY2o7YWJhZDlVYztXRmJHY2pkYWRjYTBFaHNkbmRuZG5hZFRtYmFvYWRmaHpjYmhIaW5hZWFIOW5tZGF4YVA5UmFENm1pYWJhSGFkMmZoT2FQYURmaEFhc2FlYUg5UmFIYXNmYWU2RWdDY3NmZ29jbDRjaWZjZDRoWGF2Y2o7Y2JmYW9jOVdHZ1FjZXRmaExhdmNqO2NiZmFRY2kyZmhLYXZjajtjYmZhUWZoWWNiaDhBYW9jO2FiNmhFaW5jYmgzZG5hd1RtYmFQYThBY2Q0ZlJiYmgza2NiaDVhdmNqO2NiZmg4RWluZG5kbmRuZG5hM2E1Y2V0NGNpR2dvYzk6ZlBkZWJka2F4YUE5UmFRNm13ZG5hUVRtYmF2Y2o7Y2JmYTVhUTJmYUFhUTs4cWJia2FBYUNmaEF4ZGthUVRtZWF2Y2o7Y2JmYTVhUTJmY2JhUTs4a2J4ZWtheGFBOVJhWDZtb2FvY2xWY2Jhd0VocmFBYVhmaG9jYmhpZG5hRW1iYXhhbzlSYztHYjZtYmNiaGxpbmE4RWFsZmhpZG5kbmRuZG5kbmRuYUFhbGNvNGZSYmJncWNpR2FyZlBEYmVkaWJsZWRpYmthaXB4YmJiYmJiYmJiYmJiYmJiYnBrbGJ4bGthaWFvcGJibGFvcGJiYmc4RmNscDptZWE4RnBtYnplSGRPaUFsQ3ZYb1FyTGc4RmNkcDptZWE4RnBtYnplSGRPaUFsQ3ZYb1FyTHB4aWlpaWlpaWlpaWlpaWlpaXA5b2dhcHhpaWlpaWlpaWlpaWlpaWlpcDhKZzhGcDViOWNqRjs4OzQ7VztHO2FiOTo5Y1UxOk5naGNpdHBiaTpxOkc6Y2piYWhSYjpxOlc6Y2piZ2hwc2E4RnA1ZTljakY7ODs0O1c7RzthYjk6OWNVMTpOZ2djaXRwYmk6cTpHOmNqYnA5VXBtYmVkaWx2b3J6SE9BQ1hRTHBQYWFhOEZwOXNwa2xiYWhhb2NsZmZhZ1JiOnE6VzpjamJmaG94aWthaWFvcGJid2FvcGJiYmc4RmNscDptZWE4RnBtYnplSGRPaUFsQ3ZYb1FyTHB4c3Nzc3Nzc3Nzc3Nzc3Nzc3A5b2dhcHhzc3Nzc3Nzc3Nzc3Nzc3NzcDhKZzhGcDViOWNqRjs4OzQ7VztHO2FiOTo5Y1UxOk5naGNpdHBiaTpxOkc6Y2piYWhSYjpxOlc6Y2piZ2hwc2E4RnA1ZTljakY7ODs0O1c7RzthYjk6OWNVMTpOZ2djaXRwYmk6cTpHOmNqYnA5VXBtYmVkaWx2b3J6SE9BQ1hRTHBQYWFhOEZwOXNwa2xiYWhhb2N3ZmZhZ1JiOnE6VzpjamJmaG94ZGthaWFvcGJiYnBrbGJhb2N6ZmhveGVrYWlhb3BiYmRhb1JiYmdoY2l0cGJpOnE6RzpjamJhaFJiOnE6VzpjamJnaHBzYW9SYmVnZ2NpdHBiaTpxOkc6Y2picDlVcG1iZWRpbHZvcnpIT0FDWFFMcFBwa2xiYWhhb2NkZmZhZ1JiOnE6VzpjamJmaG9rZG5kbmRuZG5kbmRuYXFjZDRjaUdhcmZQRGJlZGlibGVkaWJrYWljemZweGJiYmJiYmJiYmJiYmJiYmJwa2xieGxrYWljemZhb3BiYmxhb3BiYmJnOEZjbHA6bWVhOEZwbWJ6ZUhkT2lBbEN2WG9RckxnOEZjZHA6bWVhOEZwbWJ6ZUhkT2lBbEN2WG9RckxweGlpaWlpaWlpaWlpaWlpaWlwOW9nYXB4aWlpaWlpaWlpaWlpaWlpaXA4Smc4RnA1YjljakY7ODs0O1c7RzthYjk6OWNVMTpOZ2hjaXRwYmk6cTpHOmNqYmFoUmI6cTpXOmNqYmdocHNhOEZwNWU5Y2pGOzg7NDtXO0c7YWI5OjljVTE6TmdnY2l0cGJpOnE6RzpjamJwOVVwbWJlZGlsdm9yekhPQUNYUUxwUGFhYThGcDlzcGtsYmFoYW9jbGZmYWdSYjpxOlc6Y2piZmhveGlrYWljemZhb3BiYndhb3BiYmJnOEZjbHA6bWVhOEZwbWJ6ZUhkT2lBbEN2WG9RckxweHNzc3Nzc3Nzc3Nzc3Nzc3NwOW9nYXB4c3Nzc3Nzc3Nzc3Nzc3Nzc3A4Smc4RnA1YjljakY7ODs0O1c7RzthYjk6OWNVMTpOZ2hjaXRwYmk6cTpHOmNqYmFoUmI6cTpXOmNqYmdocHNhOEZwNWU5Y2pGOzg7NDtXO0c7YWI5OjljVTE6TmdnY2l0cGJpOnE6RzpjamJwOVVwbWJlZGlsdm9yekhPQUNYUUxwUGFhYThGcDlzcGtsYmFoYW9jd2ZmYWdSYjpxOlc6Y2piZmhveGRrYWljemZhb3BiYmJwa2xiYW9jemZob3hla2FpY3pmYW9wYmJkYW9SYmJnaGNpdHBiaTpxOkc6Y2piYWhSYjpxOlc6Y2piZ2hwc2FvUmJlZ2djaXRwYmk6cTpHOmNqYnA5VXBtYmVkaWx2b3J6SE9BQ1hRTHBQcGtsYmFoYW9jZGZmYWdSYjpxOlc6Y2piZmhva2RuZG5kbmRuZG5kbmFxY2w0Y2lHYXJmUERiZWRpYmxlZGlia2FpY2FmcHhiYmJiYmJiYmJiYmJiYmJicGtsYnhsa2FpY2FmYW9wYmJsYW9wYmJiZzhGY2xwOm1lYThGcG1iemVIZE9pQWxDdlhvUXJMZzhGY2RwOm1lYThGcG1iemVIZE9pQWxDdlhvUXJMcHhpaWlpaWlpaWlpaWlpaWlpcDlvZ2FweGlpaWlpaWlpaWlpaWlpaWlwOEpnOEZwNWI5Y2pGOzg7NDtXO0c7YWI5OjljVTE6TmdoY2l0cGJpOnE6RzpjamJhaFJiOnE6VzpjamJnaHBzYThGcDVlOWNqRjs4OzQ7VztHO2FiOTo5Y1UxOk5nZ2NpdHBiaTpxOkc6Y2picDlVcG1iZWRpbHZvcnpIT0FDWFFMcFBhYWE4RnA5c3BrbGJhaGFvY2xmZmFnUmI6cTpXOmNqYmZob3hpa2FpY2FmYW9wYmJ3YW9wYmJiZzhGY2xwOm1lYThGcG1iemVIZE9pQWxDdlhvUXJMcHhzc3Nzc3Nzc3Nzc3Nzc3NzcDlvZ2FweHNzc3Nzc3Nzc3Nzc3Nzc3NwOEpnOEZwNWI5Y2pGOzg7NDtXO0c7YWI5OjljVTE6TmdoY2l0cGJpOnE6RzpjamJhaFJiOnE6VzpjamJnaHBzYThGcDVlOWNqRjs4OzQ7VztHO2FiOTo5Y1UxOk5nZ2NpdHBiaTpxOkc6Y2picDlVcG1iZWRpbHZvcnpIT0FDWFFMcFBhYWE4RnA5c3BrbGJhaGFvY3dmZmFnUmI6cTpXOmNqYmZob3hka2FpY2FmYW9wYmJicGtsYmFvY3pmaG94ZWthaWNhZmFvcGJiZGFvUmJiZ2hjaXRwYmk6cTpHOmNqYmFoUmI6cTpXOmNqYmdocHNhb1JiZWdnY2l0cGJpOnE6RzpjamJwOVVwbWJlZGlsdm9yekhPQUNYUUxwUHBrbGJhaGFvY2RmZmFnUmI6cTpXOmNqYmZob2tkbmRuZG5kbmRuZG5hcWNvNGFyZlBEYmVkaWJsZWRpYmthaWM4V2ZweGJiYmJiYmJiYmJiYmJiYmJwa2xieGxrYWljOFdmYW9wYmJsYW9wYmJiZzhGY2xwOm1lYThGcG1iemVIZE9pQWxDdlhvUXJMZzhGY2RwOm1lYThGcG1iemVIZE9pQWxDdlhvUXJMcHhpaWlpaWlpaWlpaWlpaWlpcDlvZ2FweGlpaWlpaWlpaWlpaWlpaWlwOEpnOEZwNWI5Y2pGOzg7NDtXO0c7YWI5OjljVTE6TmdpY2l0cGJpOnE6RzpjamJhaVJiOnE6VzpjamJnaXBzYThGcDVlOWNqRjs4OzQ7VztHO2FiOTo5Y1UxOk5ncWNpdHBiaTpxOkc6Y2picDlVcG1iZWRpbHZvcnpIT0FDWFFMcFBhYWE4RnA5c3BrbGJhaWFvY2xmZmFxUmI6cTpXOmNqYmZob3hpa2FpYzhXZmFvcGJid2FvcGJiYmc4RmNscDptZWE4RnBtYnplSGRPaUFsQ3ZYb1FyTHB4c3Nzc3Nzc3Nzc3Nzc3Nzc3A5b2dhcHhzc3Nzc3Nzc3Nzc3Nzc3NzcDhKZzhGcDViOWNqRjs4OzQ7VztHO2FiOTo5Y1UxOk5naWNpdHBiaTpxOkc6Y2piYWlSYjpxOlc6Y2piZ2lwc2E4RnA1ZTljakY7ODs0O1c7RzthYjk6OWNVMTpOZ3FjaXRwYmk6cTpHOmNqYnA5VXBtYmVkaWx2b3J6SE9BQ1hRTHBQYWFhOEZwOXNwa2xiYWlhb2N3ZmZhcVJiOnE6VzpjamJmaG94ZGthaWM4V2Zhb3BiYmJwa2xiYW9jemZob3hla2FpYzhXZmFvcGJiZGFvUmJiZ2ljaXRwYmk6cTpHOmNqYmFpUmI6cTpXOmNqYmdpcHNhb1JiZWdxY2l0cGJpOnE6RzpjamJwOVVwbWJlZGlsdm9yekhPQUNYUUxwUHBrbGJhaWFvY2RmZmFxUmI6cTpXOmNqYmZob2thbGM7YWJmaGlhbGNqZWZhUTBtZWFpaGxheGFvOVJjO0ZiMG1ia2tkbmFpYVE5cG1iYWljaTRobGluYXhhbzlSY0s2bXdhOEVhaWZocWRuZG5kbmRuZG5kbmFBYWljbzRmUmJiYWxjb0c0Y2lHYXJmUERiZWRpYmxlZGlia2FxcHhiYmJiYmJiYmJiYmJiYmJicGtiYnhsa2FxYW9wYmJsYW9wYmJiZzhGY2xwOm1lYThGcG1iemVIZE9pQWxDdlhvUXJMZzhGY2RwOm1lYThGcG1iemVIZE9pQWxDdlhvUXJMcHhpaWlpaWlpaWlpaWlpaWlpcDlvZ2FweGlpaWlpaWlpaWlpaWlpaWlwOEpnOEZwNWI5Y2pGOzg7NDtXO0c7YWI5OjljVTE6TmdoY2l0cGJpOnE6RzpjamJhaFJiOnE6VzpjamJnaHBzYThGcDVlOWNqRjs4OzQ7VztHO2FiOTo5Y1UxOk5nZ2NpdHBiaTpxOkc6Y2picDlVcG1iZWRpbHZvcnpIT0FDWFFMcFBhYWE4RnA5c3BrYmJhaGFvY2xmZmFnUmI6cTpXOmNqYmZob3hpa2FxYW9wYmJ3YW9wYmJiZzhGY2xwOm1lYThGcG1iemVIZE9pQWxDdlhvUXJMcHhzc3Nzc3Nzc3Nzc3Nzc3NzcDlvZ2FweHNzc3Nzc3Nzc3Nzc3Nzc3NwOEpnOEZwNWI5Y2pGOzg7NDtXO0c7YWI5OjljVTE6TmdoY2l0cGJpOnE6RzpjamJhaFJiOnE6VzpjamJnaHBzYThGcDVlOWNqRjs4OzQ7VztHO2FiOTo5Y1UxOk5nZ2NpdHBiaTpxOkc6Y2picDlVcG1iZWRpbHZvcnpIT0FDWFFMcFBhYWE4RnA5c3BrYmJhaGFvY3dmZmFnUmI6cTpXOmNqYmZob3hka2FxYW9wYmJicGtiYmFvY3pmaG94ZWthcWFvcGJiZGFvUmJiZ2hjaXRwYmk6cTpHOmNqYmFoUmI6cTpXOmNqYmdocHNhb1JiZWdnY2l0cGJpOnE6RzpjamJwOVVwbWJlZGlsdm9yekhPQUNYUUxwUHBrYmJhaGFvY2RmZmFnUmI6cTpXOmNqYmZob2thbGNkZmhsYWljemZnaWFRNm1ia2thb2hBYW9UbW9rYThFYVFmaDhFYTVjZWZnNWNsOWhtYmtkbmRuZG5kbmF3VG1iYXphOEFjZDRmUmJiZ2xjaUdQbGJlZHdia2FRVG1kYXZjamRmYThBZmhsYXZhOEFmcGJkYmg4SmNiaG9pbmFsYXZjajtjYmZhb2ZwYmxiZzhLYVlhb2ZwYmxiZzhMcG1iemVIZE9pQWxDdlhvUXJMZzhNYUxhb2ZwYmxiZzhOYUthb2ZwYmxiZ3lwbWJ6ZUhkT2lBbEN2WG9RckxnOFBwbWJlekhkaU9BbHZDWG9yUUxnOEZjZXA5VGE4RnB4ZWVlZWVlZWVlZWVlZWVlZWdhcDlvcDlIcDlyZzhGYThKcDlVZzhKcDlBYmJiYWxhZGZnbGE4SmE4RmE4RnBtbHZvcmx2b3Jsdm9ybHZvcnA5VWc4SnA5QWJiYmFsYWRmZ2xhOEphOEZhOEZwbXdEcWt3RHFrd0Rxa3dEcWtwOVVnOEpwOUFiYmJhbGFkZmdsYThKYThGYThGcG14bVBzeG1Qc3htUHN4bVBzcDlVZzhKcDlBYmJiYWxhZGZnbGE4SmE4TWE4UHBtd0RLWXFrOEFFeG0zNVBzOEU4Rmc4RmNlcDlUYThGYWFwOW9wOUhwOXJnOEZwOVVnOEpwOUFiYmJhbGFkZmdsYThKYThGYThGcG1sdm9ybHZvcmx2b3Jsdm9ycDlVZzhKcDlBYmJiYWxhZGZnbGE4SmE4RmE4RnBtd0Rxa3dEcWt3RHFrd0Rxa3A5VWc4SnA5QWJiYmFsYWRmZ2xhOEphOEZhOEZwbXhtUHN4bVBzeG1Qc3htUHNwOVVnOEpwOUFiYmJhbGFkZmdsYThKYThLYThMcG13S0RZcThBa0V4M201UDhFczhGZzhLYThOYXlwbXdLRFlxOEFrRXgzbTVQOEVzOEZnOExwbWJlekhkaU9BbHZDWG9yUUxnOEZjZXA5VGE4RmFhcDlvcDlIcDlyZzhGcDlVZzhKcDlBYmJiYWxhZGZnbGE4SmE4RmE4RnBtbHZvcmx2b3Jsdm9ybHZvcnA5VWc4SnA5QWJiYmFsYWRmZ2xhOEphOEZhOEZwbXdEcWt3RHFrd0Rxa3dEcWtwOVVnOEpwOUFiYmJhbGFkZmdsYThKYThGYThGcG14bVBzeG1Qc3htUHN4bVBzcDlVZzhKcDlBYmJiYWxhZGZnbGE4SmE4S2E4THBtd0RLWXFrOEFFeG0zNVBzOEU4Rmc4RmNlcDlUYThGYWFwOW9wOUhwOXJnOEZwOVVnYXA5QWJiYmFsYWRmZ2xhYWE4RmE4RnBtbHZvcmx2b3Jsdm9ybHZvcnA5VWdhcDlBYmJiYWxhZGZnbGFhYThGYThGcG13RHFrd0Rxa3dEcWt3RHFrcDlVZ2FwOUFiYmJhbGFkZmdsYWFhOEZhOEZwbXhtUHN4bVBzeG1Qc3htUHNwOVVnOEpwOUFiYmJhbGFkZmhsYW9jemZnb2FRNm1ieGlra2FRVG1lYXZjamRmYThBZmhsYXZhOEFmcGJkYmg4SmNiaG9pbmFsYXZjajtjYmZhb2ZwYmxiZzhLYVlhb2ZwYmxiZzhMcG1iemVIZE9pQWxDdlhvUXJMZzhNYUxhb2ZwYmxiZzhOYUthb2ZwYmxiZ3lwbWJ6ZUhkT2lBbEN2WG9RckxnOFBwbWJlekhkaU9BbHZDWG9yUUxnOEZjZXA6bmVhOEZweGViZWJlYmViZWJlYmViZWJnYXA5b3A6YmVwOXJnOEZhOEpwOm9lZzhKcDlBYmJiYWxhZGZnbGE4SmE4RmE4RnBtbHZvcmx2b3Jsdm9ybHZvcnA6b2VnOEpwOUFiYmJhbGFkZmdsYThKYThGYThGcG13RHFrd0Rxa3dEcWt3RHFrcDpvZWc4SnA5QWJiYmFsYWRmZ2xhOEphOEZhOEZwbXhtUHN4bVBzeG1Qc3htUHNwOm9lZzhKcDlBYmJiYWxhZGZnbGE4SmE4TWE4UHBtd0RLWXFrOEFFeG0zNVBzOEU4Rmc4RmNlcDpuZWE4RmFhcDlvcDpiZXA5cmc4RnA6b2VnOEpwOUFiYmJhbGFkZmdsYThKYThGYThGcG1sdm9ybHZvcmx2b3Jsdm9ycDpvZWc4SnA5QWJiYmFsYWRmZ2xhOEphOEZhOEZwbXdEcWt3RHFrd0Rxa3dEcWtwOm9lZzhKcDlBYmJiYWxhZGZnbGE4SmE4RmE4RnBteG1Qc3htUHN4bVBzeG1Qc3A6b2VnOEpwOUFiYmJhbGFkZmdsYThKYThLYThMcG13S0RZcThBa0V4M201UDhFczhGZzhLYThOYXlwbXdLRFlxOEFrRXgzbTVQOEVzOEZnOExwbWJlekhkaU9BbHZDWG9yUUxnOEZjZXA6bmVhOEZhYXA5b3A6YmVwOXJnOEZwOm9lZzhKcDlBYmJiYWxhZGZnbGE4SmE4RmE4RnBtbHZvcmx2b3Jsdm9ybHZvcnA6b2VnOEpwOUFiYmJhbGFkZmdsYThKYThGYThGcG13RHFrd0Rxa3dEcWt3RHFrcDpvZWc4SnA5QWJiYmFsYWRmZ2xhOEphOEZhOEZwbXhtUHN4bVBzeG1Qc3htUHNwOm9lZzhKcDlBYmJiYWxhZGZnbGE4SmE4S2E4THBtd0RLWXFrOEFFeG0zNVBzOEU4Rmc4RmNlcDpuZWE4RmFhcDlvcDpiZXA5cmc4RnA6b2VnYXA5QWJiYmFsYWRmZ2xhYWE4RmE4RnBtbHZvcmx2b3Jsdm9ybHZvcnA6b2VnYXA5QWJiYmFsYWRmZ2xhYWE4RmE4RnBtd0Rxa3dEcWt3RHFrd0Rxa3A6b2VnYXA5QWJiYmFsYWRmZ2xhYWE4RmE4RnBteG1Qc3htUHN4bVBzeG1Qc3A6b2VnOEpwOUFiYmJhbGFkZmhsYW9jemZnb2FRNm1ieGRra2FRVG1iY2Job2NiYWxjbDRnbDlSYzhGR2hpYXZjamRmYThBZmhyYXZhOEFmcGJkYmhhaW5hcmF2Y2o7Y2JmYW9mcGJsYmc4SmFZYW9mcGJsYmc4S3BtYnplSGRPaUFsQ3ZYb1FyTGc4TGFMYW9mcGJsYmc4TWFLYW9mcGJsYmc4TnBtYnplSGRPaUFsQ3ZYb1FyTGd5cG1iZXpIZGlPQWx2Q1hvclFMZzhGYWlwOlJlYThGYWxwOlNlcDlxZzhGYWFwOXJnYXA5QWJiYmFyYWRmZ3JhYWE4RmE4RnBtbHZvcmx2b3Jsdm9ybHZvcnA5cmdhcDlBYmJiYXJhZGZncmFhYThGYThGcG13RHFrd0Rxa3dEcWt3RHFrcDlyZ2FwOUFiYmJhcmFkZmdyYWFhOEZhOEZwbXhtUHN4bVBzeG1Qc3htUHNwOXJnYXA5QWJiYmFyYWRmZ3JhYWE4TGF5cG13REtZcWs4QUV4bTM1UHM4RThGZzhGYWlwOlJlYThGYWxwOlNlcDlxZzhGcDlyZ2FwOUFiYmJhcmFkZmdyYWFhOEZhOEZwbWx2b3Jsdm9ybHZvcmx2b3JwOXJnYXA5QWJiYmFyYWRmZ3JhYWE4RmE4RnBtd0Rxa3dEcWt3RHFrd0Rxa3A5cmdhcDlBYmJiYXJhZGZncmFhYThGYThGcG14bVBzeG1Qc3htUHN4bVBzcDlyZ2FwOUFiYmJhcmFkZmdyYWFhOEphOEtwbXdLRFlxOEFrRXgzbTVQOEVzOEZnOEphOE1hOE5wbXdLRFlxOEFrRXgzbTVQOEVzOEZnOEtwbWJlekhkaU9BbHZDWG9yUUxnOEZhaXA6UmVhOEZhbHA6U2VwOXFnOEZwOXJnYXA5QWJiYmFyYWRmZ3JhYWE4RmE4RnBtbHZvcmx2b3Jsdm9ybHZvcnA5cmdhcDlBYmJiYXJhZGZncmFhYThGYThGcG13RHFrd0Rxa3dEcWt3RHFrcDlyZ2FwOUFiYmJhcmFkZmdyYWFhOEZhOEZwbXhtUHN4bVBzeG1Qc3htUHNwOXJnYXA5QWJiYmFyYWRmZ3JhYWE4SmE4S3Btd0RLWXFrOEFFeG0zNVBzOEU4Rmc4RmFpcDpSZWE4RmFscDpTZXA5cWc4RnA5cmdhcDlBYmJiYXJhZGZncmFhYThGYThGcG1sdm9ybHZvcmx2b3Jsdm9ycDlyZ2FwOUFiYmJhcmFkZmdyYWFhOEZhOEZwbXdEcWt3RHFrd0Rxa3dEcWtwOXJnYXA5QWJiYmFyYWRmZ3JhYWE4RmE4RnBteG1Qc3htUHN4bVBzeG1Qc3A5cmdhcDlBYmJiYXJhZGZocmFvY3pmZ29hUTZtYmtrYThBY2xmZzhBYWQ2bWJrZG5hQ2FkMmdvVG1iYU9hdmNqZGZhbzs4cWJia2RuYW1tYmF2YXZjamRmYUNjdWZhZDJmYWQ7OHFiYmthQ2FIZmhIYzk6aG9hQWhQYUFtYnhsa2thZVRtYmFEYWxmaHJjYmhvY3VobGluYXJhbGFEOVJnbGZhRDZtZGFzYWVhbzlSYW9hc2ZhZTZFYW9mZ29hZTZtYmthaWFsOVJoUGtjYmM5OWF4YVA5UmFrU0Vob3hla2M5Omhva2F2Y2o7a2JmOEtqampqYmFva3diejpiampqYmtOc2V6dThKampqamJjO2FlOVJndjhLampqamJjOTpob2RuYWxhZWNpOVVncmNIZjZtYmN1aG9haVJiYmd3YztXZUdjO0dlOWhtYmF3Y3NHZ0RjZTBtYmF2YzthYmZjRmVjamU7OGtiYXY5Y3U4M2lVYXY5Y3U4M2k4V2F2OWN1ODNpeWF2OWN1ODNpYWF2OWN1ODNpS2F2OWN1ODNpemF2OWN1ODNpd2F2OWN1ODNpYmFpYWxmYzlXZmhxYWljZWZnd2FyZmhsZG5hZVRtYmNtY3NhRGNlU0Voa2NiaHhjYmhtY2JocmNiaGljYmhvaW5kbmFsYXE5bm1iYzk6aG94aWtkbmRuYXdSYmJnRGM7VmUwbWJhdmM7YWJmYW9hRGN1N2dQY2w0ZmNzR2NpdGZnc3lkbGh6YXN5ZGJoSGRuZG5hRGNzR2dzYWs5cG1iYXZhaWFQZmNzR2NkdGZ5ZGJheGFzRWhEYXhhc1RnT2ZoeHhla2RuZG5hc2NzU21iY2VoT2FzYzk4N2FzYW1mZmNlZmhEeGVrYWxjZWZoRGFsOFNiYmdzY0ZlR2hQZG5kbmFzY3U5bW1iYURobHhla2FsY3ZmaGxhUGNGYkdoUGNyaHNkbmluYUQ4U2JiZ09jRmJHYXN0YVBWaFBhT2N1OWttZWFEY2VmaERhc2NyZmdzYzhKOWhtYnhka2thRGNlZmhsa2NlaE9hUGNlNGNiYVBjZUc5UjdhbWZoRGthRGhta2F2YzthYmZhb2NpdGZnc2FEQmRiYXNhekJkbGF2YWljZHRmYURCZGJhdmM7YWJmYW9jZWZjc0djaXRmZ3NhSEJkYmFzYURCZGxhb2NkZmhvYU9haWZoaWRuYWRjZDlobWJhYmFyY2V0ZmdzYUg4N2ViYXNjbGZhRDg3ZWJhc2NkZmF6ODdlYnhka2FiYXJjZHRmZ3NhSEJkYmFzY3dmYURCZGJhc2NsZmF6QmRieGVrZG5hRGNwZTBtYmF2YWlhcWFEY3NHZlJiYmdzY2w0Z1A5UmNzR2NkdGZ5ZGJheGNlZmdPYVBFaERhdmFpYXM5UmNzR2NkdGZ5ZGJhT2FQVGd6ZmdPYXNjc0dnUEVoc2FQVGhQZG5kbmFkY2Q5aG1iYWJhcmNldGZnSGF4ODdlYmFIY2xmYXM4N2ViYUhjZGZhRDg3ZWJ4ZWthYmFyY2R0ZmdIYXhCZGJhSGN3ZmFzQmRiYUhjbGZhREJkYmthdmFpY2R0ZmF4QmRiYXZjO2FiZmFvY2l0ZmdIYURCZGJhSGF4QmRsYXZhaWNlZmdpY3NHY2R0ZmFEQmRiYXZjO2FiZmFvY2VmY3NHY2l0ZmdIYXNCZGJhSGFEQmRsYXZhaWF6ZmdpY3NHY2R0ZmFzQmRiYXZjO2FiZmFvY2RmY3NHY2l0ZmdEYXhCZGJhRGFzQmRsYW9jaWZob2FpYVBmaGlhT2FQZmh4eGVrYXhjYmFsUmJiZ3NFZ0hhRGM7OmVTZ0RmaE9hc2NzR2hBZG5kbmFzY2w0Z0NtYmFPY2VmaHp4ZWthT2h6YXZhaWFDOVJjc0djZHRmeWRiaE9rZG5kbmFBbWJhemNlZmh4eGVrYXpoeGF2YWlhczlSY3NHY2R0ZnlkYmh6a2RuZG5hRFRtYmFsY2VmaER4ZWthbGNkZmhEYWw4U2JlZ1BjRmVHaHNkbmFQY3U5a21iYWxjb2ZoSGFzY0ZiR2hzY3JobGRuaW5hRDhTYmJnUGNGYkdhbHRhc1Zoc2FQY3U5a21lYURjZWZoRGFsY3JmZ2xjOEo5aG1ia2FIaER4ZWthRGNlZmhEa2FzY2U0Y2Jhc2NlRzlSN2FtZmdtaEhrZG5kbmFDY3NTbWJhRGhzeGVrYURjZWZoc2FEOFNiYmdsY0ZlR2hQZG5hbGN1OWttYmFEY3ZmaE9hUGNGYkdoUGNyaGxkbmluYXM4U2JiZ0RjRmJHYWx0YVBWaFBhRGN1OWttZWFzY2VmaHNhbGNyZmdsYzhKOWhtYmthT2hzeGVrYXNjZWZoc2thUGNlNGNiYVBjZUc5UjdhbWZnbWhPa2RuZG5hQWNzU21iYXNobHhla2FzY2VmaGxhczhTYmJnRGNGZUdoUGRuYURjdTlrbWJhc2N2Zmh6YVBjRmJHaFBjcmhEZG5pbmFsOFNiYmdzY0ZiR2FEdGFQVmhQYXNjdTlrbWVhbGNlZmhsYURjcmZnRGM4SjlobWJrYXpobHhla2FsY2VmaGxrYVBjZTRjYmFQY2VHOVI3YW1mZ21oemtkbmRuYWRjZDlobWJhYmFyY2V0ZmdEYUg4N2ViYURjbGZhejg3ZWJhRGNkZmFPODdlYnhla2FiYXJjZHRmZ0RhSEJkYmFEY3dmYXpCZGJhRGNsZmFPQmRia2F2YzthYmZhb2NpdGZnRGFPQmRiYURhSEJkbGF2YWljZHRmYUhCZGJhdmM7YWJmYW9jZWZjc0djaXRmZ0RhekJkYmFEYU9CZGxhdmFpY2VmZ2ljc0djZHRmYU9CZGJhdmM7YWJmYW9jZGZjc0djaXRmZ0RhSEJkYmFEYXpCZGxhdmFpYUNUYUNjc1NWZmdpY3NHY2R0ZmF6QmRiYWlhQVRhQWNzU1ZmaGlhb2NpZmhva2F3Y2VmaHdhb2NzR2hvYWljc0doaWFyY2lmZ3JhZTZtYmtrY2JjOTlhbGFxU0Vob2thdmM7YWVmOEtqampqYmFvazpjbGV2dThKampqamJjejlSaHZkbmFsYWVjdmY5cG1iYzk6c2tkbmFpUmJiYzs6ZUdjO3FlU21iY3Vza2F2OWNiODNpd2FpY2VmaG9haWFsZmM5OGZocmRuYWVUbWJkbmFkY2RTbWJjYmh3aW5kbmFvYXI2bWJjOTpza2FvY2VmaGxhbzhTYmJnaWNGZUdoZGRuZG5haWN1OW1tYmFsaG94ZWthb2N2ZmhvYWRjRmJHaGRjcmhpZG5pbmFsOFNiYmdEY0ZiR2FpdGFkVmhkYURjdTlrbWVhbGNlZmhsYWljcmZnaWM4SjlobWJ4ZGtrYWxjZWZob2thYmF3Y2R0ZmFkYzhFdGM4RjkxYWRjZDQ3YXZjd2ZhZGNlR2NkdFZnbHlkYmZnaUJkYmFsYWlCZGJhd2NlZmd3YWU5aG1ieGRra2NiaHdpbmRuYW9hcjZtYmM5OnNrYW9jZWZobGFvOFNiYmdpY0ZlR2hkZG5kbmFpY3U5bW1iYWxob3hla2FvY3ZmaG9hZGNGYkdoZGNyaGlkbmluYWw4U2JiZ0RjRmJHYWl0YWRWaGRhRGN1OWttZWFsY2VmaGxhaWNyZmdpYzhKOWhtYnhka2thbGNlZmhva2FiYXdjZXRmYWRjOEV0YzhGOTFhZGNkNDdhdmN3ZmFkY2VHY2R0VmdseWRiZmdpODdlYmFsYWlCZGJhd2NlZmd3YWU5aG1ia2tjYmM5OWFvYXJTRWs7VG9pbzk3ZXVlOTdhZWM5OEdoZWRuZG5hZGNsOWhtYmFlVG1lY2JoZGluYWJhYnBiYmJnaWNLcDpSZWNLcDpTZXA7NmVnbGFpY3dwOlJlY0twOlNlcDs2ZWFscDtHZWFpY3pwOlJlY0twOlNlcDs2ZWd2cDtHZXA7S2VwO0xlZ29weGJiYmJiYmJiYmJiYmJiYmJwOjJlZ3JhbHB4YmJiamJiYmpiYmJqYmJiamd3cDlvcDlycDtLZWdscHhiYjs6OWNiYjs6OWNiYjs6OWNiYjs6OWNhbGFscDtNZWFvYW9wO01lYXZhcmF2YXdwOW9wOXJwO0tlZ2xhbHA7TWVwO0tlcDtLZXA7SmVwO05lZ3ZwO01lcHhiYm4wYmJuMGJibjBiYm4wZ3JwO0tlcHhGYmJiRmJiYkZiYmJGYmJicDlvYWlweGJiYkZiYmJGYmJiRmJiYkZwOW9wOXFhbGF2cDtNZWFycDtLZWN3cDpSZXB4YkZiYmJGYmJiRmJiYkZiYnA5b3A5cWFvYXZwO01lYXJwO0tlY3pwOlJlcHhiYkZiYmJGYmJiRmJiYkZicDlvcDlxcGtiYmFiY3pmaGJhZGNsZmdkYWU2bWJ4ZGtrYWVUbWJjYmhkaW5hYmN6ZmdEYURwYmJiZ2lweGJiYmJiYkZGYmJiYmJiRkZnd3A5b2FicGJiYmdvYWlwbWJlZGl3RHFrekhPQUtZOEFFZ3ZjenA6UmVjenA6U2VwOzZlZ2xhb2FpcG1sdm9yeG1Qc0NYUUwzNThFOEZweEZ1YmJGdWJiRnViYkZ1YmJwOW9wOzZlYXZjenA6U2VwOzZlZ3ZwO0dlYWxwO0dlcDtLZXA7TGVnaXB4YmJiYmJiYmJiYmJiYmJiYnA6MmVncmFscHhiYmJqYmJiamJiYmpiYmJqZ3FwOW9wOXJwO0tlZ2xweGI7OkZTYjs6RlNiOzpGU2I7OkZTYWxhbHA7TWVhaWFpcDtNZWF2YXJhdmFxcDlvcDlycDtLZWdsYWxwO01lcDtLZXA7S2VwO0plcDtOZWd2cDtNZXB4YmJuMGJibjBiYm4wYmJuMGdycDtLZXB4RkZiYkZGYmJGRmJiRkZiYnA5b2FpYXZwO01lYXJwO0tlY3pwOlJlcDlxZ2lhbGF2cDtNZWFycDtLZXB4RkZiYkZGYmJGRmJiRkZiYnA5b2dscG13REtZcWs4QUV4bTM1UHM4RThGcDlxcGtiYmFiYW9hd3A5b2FpYWxwbWJlekhkaU9BbHZDWG9yUUxwOXFwa2JiYWJjYWZoYmFkY2xmZ2RhZTZtYmtrazsyaWxldWU5N2V1bzk3ZG5hZWM5OEdnaVRtYmNiaGVpbmFiY0tmcHg6amk6MVM6amk6MVM6amk6MVM6amk6MVNhYnBiYmJnbGFiY3pmZ3ZwYmJiZ29wbWx2b3J4bVBzQ1hRTDM1OEU4RmdyY3pwOlNlZ3dweGliYmJpYmJiaWJiYmliYmJwOXFwOzZlZ0RwO05lZ3FhRGFEcDtNZWdEYURwO0tlYWxhb3BtYmVkaXdEcWt6SE9BS1k4QUVnRGN6cDpSZWN6cDpTZXA7NmVnbGFscDtNZWFEY3pwOlNlcDs2ZWdvYW9wO01lYXJjenA6UmVjenA6U2VwOzZlZ3JhcnA7TWVwO0tlcDtLZXA7TGVweGJiYmJiYmJiYmJiYmJiYmJwOjRlcDtKZXA7TWVweGJibjBiYm4wYmJuMGJibjBnRHA7S2VweEZGYmJGRmJiRkZiYkZGYmJna3A5b2FxYW9wO01lYURwO0tlY3pwOlJlcDlxZ29hcWFscDtNZWFEcDtLZWFrcDlvYXFhcnA7TWVhRHA7S2VjenA6UmVwOXFnRHBtd0RLWXFrOEFFeG0zNVBzOEU4RmdscDVlYXdjbHA6UmVncXBFaTpUOmo4M2liYXZhbHA1YmFxcEVkOlQ6ajgzaWJhYmN3ZmFvYURwbWJlekhkaU9BbHZDWG9yUUxnRHA1ZWFxcEVlOlQ6ajgzaWJhYmFEcDViYXFwRWI6VDpqODNpYmFiY2FmaGJhZWNsZmdlYWk2bWJra2t1ZWU5N2RuYWRjZDRhZTJjOThHZ2VUbWJjYmhkaW5hYmFicGJiYmdpY3dwOlJlY3dwOlNlcDs2ZWFpY2VwOlNlcHhiYmpGYmJqRmJiakZiYmpGcDlvcHhiYmpaYmJqWmJialpiYmpacDpVZXA7TWVwa2JiYWJjemZoYmFkY2xmZ2RhZTZtYmtrazpTb2R3OTdldWFlYzk4R2hlZG5kbmFkY2w5aG1iYWVUbWVjYmhkaW5hYnB4YmJ1SmJidUpiYnVKYmJ1SmFicGJiYmdpY0twOlRlZ2xhaWNZcDpUZXA5cWd2Y2RwOlRlYXZwOXFndmNscDpUZWF2cDlxZ29wOzZlcDtOZWd2YWljd3A6UmVjS3A6U2VncmFpcHhGYmJiRmJiYkZiYmJGYmJiZ3dwOW9nRHA6VWVwOzZlcDtNZXB4YmJuMGJibjBiYm4wYmJuMGdxcDtLZWN3cDpSZXB4YkZiYmJGYmJiRmJiYkZiYnA5b2F2YURhcnA6WGVhaWN6cDpSZWNLcDpTZWdpcDpVZXA7NmVwO01lYXFwO0tlYXdwOW9wOXFhdmFEYXJhaXA6VWVwOlhlcDs2ZXA7TWVhcXA7S2VjenA6UmVweGJiRmJiYkZiYmJGYmJiRmJwOW9wOXFhdmFvYWxjZXA6UmVwOW9hbHB4ZWJiYmViYmJlYmJiZWJiYnA5b3A5cXA7NmVwO01lYXFwO0tlY0twOlJlcDlxcGtiYmFiY3pmaGJhZGNsZmdkYWU2bWJ4ZGtrYWVUbWJjYmhkaW5hYmN6ZmdrcHhiRnU5aGJGdTloYkZ1OWhiRnU5aGFicGJiYmdsYWtwYmJiZ3JwbWx2b3J4bVBzQ1hRTDM1OEU4Rmd2Y3pwOlRlZ3FhdmNIcDpUZXA5cWdpY2RwOlRlYWlwOXFnaWNscDpUZWFpcDlxZ2ljd3A6VGVhaXA5cWdvcDs2ZXA7TmVnaWFsYXJwbWJlZGl3RHFrekhPQUtZOEFFZ0RweEZGYmJGRmJiRkZiYkZGYmJnbHA5b2dyYURjenA6U2Vnd3A6VWVhdmN6cDpSZWN6cDpTZWdEcDpYZXA7NmVwO01lcHhiYm4wYmJuMGJibjBiYm4wZ3ZwO0tlYWxwOW9haWFyYXdhRHA6VWVwOlhlcDs2ZXA7TWVhdnA7S2VjenA6UmVwOXFnd2FpYW9hcWNlcDpSZXA5b2FxcHhlYmJiZWJiYmViYmJlYmJicDlvcDlxcDs2ZXA7TWVhdnA7S2VjenA6UmVhaWFEYXJwOlVlcDs2ZXA7TWVhdnA7S2VhbHA5b3A5cWdpcG13REtZcWs4QUV4bTM1UHM4RThGcGtiYmFiYXdhaXBtYmV6SGRpT0FsdkNYb3JRTHBrYmJhYmNhZmhiYWRjbGZnZGFlNm1ia2trOXRlaXVjYmNieWRqOkc6Y2piZ2VhYmNpZmM5OEdmZ2JCZGo6RzpjamJkbmRuYWJaYmN6dGdkOW5tYmN1aGlhYmFkOVJjRkZpZmN6NG5iY3VTbWVrYWVoaWthaWtreGViY2o6R2RrbHo6emJiIixuPW5ldyBVaW50OEFycmF5KFswLDk3LDExNSwxMDksMSwwLDAsMCwxLDQsMSw5NiwwLDAsMywzLDIsMCwwLDUsMywxLDAsMSwxMiwxLDAsMTAsMjIsMiwxMiwwLDY1LDAsNjUsMCw2NSwwLDI1MiwxMCwwLDAsMTEsNywwLDY1LDAsMjUzLDE1LDI2LDExXSksbz1uZXcgVWludDhBcnJheShbMzIsMCw2NSwyLDEsMTA2LDM0LDMzLDMsMTI4LDExLDQsMTMsNjQsNiwyNTMsMTAsNywxNSwxMTYsMTI3LDUsOCwxMiw0MCwxNiwxOSw1NCwyMCw5LDI3LDI1NSwxMTMsMTcsNDIsNjcsMjQsMjMsMTQ2LDE0OCwxOCwxNCwyMiw0NSw3MCw2OSw1NiwxMTQsMTAxLDIxLDI1LDYzLDc1LDEzNiwxMDgsMjgsMTE4LDI5LDczLDExNV0pO2lmKHR5cGVvZiBXZWJBc3NlbWJseSE9Im9iamVjdCIpcmV0dXJue3N1cHBvcnRlZDohMX07dmFyIGE9V2ViQXNzZW1ibHkudmFsaWRhdGUobik/Zih0KTpmKGUpLHIsaT1XZWJBc3NlbWJseS5pbnN0YW50aWF0ZShhLHt9KS50aGVuKGZ1bmN0aW9uKFQpe3I9VC5pbnN0YW5jZSxyLmV4cG9ydHMuX193YXNtX2NhbGxfY3RvcnMoKX0pO2Z1bmN0aW9uIGYoVCl7Zm9yKHZhciBfPW5ldyBVaW50OEFycmF5KFQubGVuZ3RoKSxFPTA7RTxULmxlbmd0aDsrK0Upe3ZhciB3PVQuY2hhckNvZGVBdChFKTtfW0VdPXc+OTY/dy05Nzp3PjY0P3ctMzk6dys0fWZvcih2YXIgUj0wLEU9MDtFPFQubGVuZ3RoOysrRSlfW1IrK109X1tFXTw2MD9vW19bRV1dOihfW0VdLTYwKSo2NCtfWysrRV07cmV0dXJuIF8uYnVmZmVyLnNsaWNlKDAsUil9ZnVuY3Rpb24gZChULF8sRSx3LFIsUyxDKXt2YXIgST1ULmV4cG9ydHMuc2JyayxOPXcrMyYtNCxQPUkoTipSKSxGPUkoUy5sZW5ndGgpLEE9bmV3IFVpbnQ4QXJyYXkoVC5leHBvcnRzLm1lbW9yeS5idWZmZXIpO0Euc2V0KFMsRik7dmFyIHg9XyhQLHcsUixGLFMubGVuZ3RoKTtpZih4PT0wJiZDJiZDKFAsTixSKSxFLnNldChBLnN1YmFycmF5KFAsUCt3KlIpKSxJKFAtSSgwKSkseCE9MCl0aHJvdyBuZXcgRXJyb3IoIk1hbGZvcm1lZCBidWZmZXIgZGF0YTogIit4KX12YXIgYz17Tk9ORToiIixPQ1RBSEVEUkFMOiJtZXNob3B0X2RlY29kZUZpbHRlck9jdCIsUVVBVEVSTklPTjoibWVzaG9wdF9kZWNvZGVGaWx0ZXJRdWF0IixFWFBPTkVOVElBTDoibWVzaG9wdF9kZWNvZGVGaWx0ZXJFeHAiLENPTE9SOiJtZXNob3B0X2RlY29kZUZpbHRlckNvbG9yIn0sdT17QVRUUklCVVRFUzoibWVzaG9wdF9kZWNvZGVWZXJ0ZXhCdWZmZXIiLFRSSUFOR0xFUzoibWVzaG9wdF9kZWNvZGVJbmRleEJ1ZmZlciIsSU5ESUNFUzoibWVzaG9wdF9kZWNvZGVJbmRleFNlcXVlbmNlIn0sbD1bXSxoPTA7ZnVuY3Rpb24gbShUKXt2YXIgXz17b2JqZWN0Om5ldyBXb3JrZXIoVCkscGVuZGluZzowLHJlcXVlc3RzOnt9fTtyZXR1cm4gXy5vYmplY3Qub25tZXNzYWdlPWZ1bmN0aW9uKEUpe3ZhciB3PUUuZGF0YTtfLnBlbmRpbmctPXcuY291bnQsXy5yZXF1ZXN0c1t3LmlkXVt3LmFjdGlvbl0ody52YWx1ZSksZGVsZXRlIF8ucmVxdWVzdHNbdy5pZF19LF99ZnVuY3Rpb24gYihUKXtmb3IodmFyIF89InNlbGYucmVhZHkgPSBXZWJBc3NlbWJseS5pbnN0YW50aWF0ZShuZXcgVWludDhBcnJheShbIituZXcgVWludDhBcnJheShhKSsiXSksIHt9KS50aGVuKGZ1bmN0aW9uKHJlc3VsdCkgeyByZXN1bHQuaW5zdGFuY2UuZXhwb3J0cy5fX3dhc21fY2FsbF9jdG9ycygpOyByZXR1cm4gcmVzdWx0Lmluc3RhbmNlOyB9KTtzZWxmLm9ubWVzc2FnZSA9ICIreS5uYW1lKyI7IitkLnRvU3RyaW5nKCkreS50b1N0cmluZygpLEU9bmV3IEJsb2IoW19dLHt0eXBlOiJ0ZXh0L2phdmFzY3JpcHQifSksdz1VUkwuY3JlYXRlT2JqZWN0VVJMKEUpLFI9bC5sZW5ndGg7UjxUOysrUilsW1JdPW0odyk7Zm9yKHZhciBSPVQ7UjxsLmxlbmd0aDsrK1IpbFtSXS5vYmplY3QucG9zdE1lc3NhZ2Uoe30pO2wubGVuZ3RoPVQsVVJMLnJldm9rZU9iamVjdFVSTCh3KX1mdW5jdGlvbiBwKFQsXyxFLHcsUil7Zm9yKHZhciBTPWxbMF0sQz0xO0M8bC5sZW5ndGg7KytDKWxbQ10ucGVuZGluZzxTLnBlbmRpbmcmJihTPWxbQ10pO3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihJLE4pe3ZhciBQPW5ldyBVaW50OEFycmF5KEUpLEY9KytoO1MucGVuZGluZys9VCxTLnJlcXVlc3RzW0ZdPXtyZXNvbHZlOkkscmVqZWN0Ok59LFMub2JqZWN0LnBvc3RNZXNzYWdlKHtpZDpGLGNvdW50OlQsc2l6ZTpfLHNvdXJjZTpQLG1vZGU6dyxmaWx0ZXI6Un0sW1AuYnVmZmVyXSl9KX1mdW5jdGlvbiB5KFQpe3ZhciBfPVQuZGF0YTtpZighXy5pZClyZXR1cm4gc2VsZi5jbG9zZSgpO3NlbGYucmVhZHkudGhlbihmdW5jdGlvbihFKXt0cnl7dmFyIHc9bmV3IFVpbnQ4QXJyYXkoXy5jb3VudCpfLnNpemUpO2QoRSxFLmV4cG9ydHNbXy5tb2RlXSx3LF8uY291bnQsXy5zaXplLF8uc291cmNlLEUuZXhwb3J0c1tfLmZpbHRlcl0pLHNlbGYucG9zdE1lc3NhZ2Uoe2lkOl8uaWQsY291bnQ6Xy5jb3VudCxhY3Rpb246InJlc29sdmUiLHZhbHVlOnd9LFt3LmJ1ZmZlcl0pfWNhdGNoKFIpe3NlbGYucG9zdE1lc3NhZ2Uoe2lkOl8uaWQsY291bnQ6Xy5jb3VudCxhY3Rpb246InJlamVjdCIsdmFsdWU6Un0pfX0pfXJldHVybntyZWFkeTppLHN1cHBvcnRlZDohMCx1c2VXb3JrZXJzOmZ1bmN0aW9uKFQpe2IoVCl9LGRlY29kZVZlcnRleEJ1ZmZlcjpmdW5jdGlvbihULF8sRSx3LFIpe2QocixyLmV4cG9ydHMubWVzaG9wdF9kZWNvZGVWZXJ0ZXhCdWZmZXIsVCxfLEUsdyxyLmV4cG9ydHNbY1tSXV0pfSxkZWNvZGVJbmRleEJ1ZmZlcjpmdW5jdGlvbihULF8sRSx3KXtkKHIsci5leHBvcnRzLm1lc2hvcHRfZGVjb2RlSW5kZXhCdWZmZXIsVCxfLEUsdyl9LGRlY29kZUluZGV4U2VxdWVuY2U6ZnVuY3Rpb24oVCxfLEUsdyl7ZChyLHIuZXhwb3J0cy5tZXNob3B0X2RlY29kZUluZGV4U2VxdWVuY2UsVCxfLEUsdyl9LGRlY29kZUdsdGZCdWZmZXI6ZnVuY3Rpb24oVCxfLEUsdyxSLFMpe2QocixyLmV4cG9ydHNbdVtSXV0sVCxfLEUsdyxyLmV4cG9ydHNbY1tTXV0pfSxkZWNvZGVHbHRmQnVmZmVyQXN5bmM6ZnVuY3Rpb24oVCxfLEUsdyxSKXtyZXR1cm4gbC5sZW5ndGg+MD9wKFQsXyxFLHVbd10sY1tSXSk6aS50aGVuKGZ1bmN0aW9uKCl7dmFyIFM9bmV3IFVpbnQ4QXJyYXkoVCpfKTtyZXR1cm4gZChyLHIuZXhwb3J0c1t1W3ddXSxTLFQsXyxFLHIuZXhwb3J0c1tjW1JdXSksU30pfX19KSgpfSk7dmFyIHVzZSxPeD1YKCgpPT57dXNlPShmdW5jdGlvbigpe3ZhciBlPSJiOUg3OVRlYmJiZTo2ZU85R2V1ZXU5R2V1YjlHYmI5R3N1dXV1dXV1dXV1dXU5OXV1ZXU5R3Z1dXV1dWI5R3J1dXV1dXV1YjlHb3V1dXV1dWU5OTlHdnV1dXV1ZXU5R3p1dXV1dXV1dXV1dTk5dXV1dWI5R3F1dXV1dXV1OTl1dWV1OUdQdXV1dXV1dXV1dXU5OXV1ZXU5R3F1dXV1dXV1dTk5dWV1OUdydXV1dXV1OTlldTlHd3V1dXV1dTk5dWV1OUdpdXV1ZTk5OUdsdXV1dWV1OUdsdXV1dWI5R2l1dXVldWlMUWRpbHZvcmx3RGlxa3htUHN6YkhIYmVsdmU5V2VpaXZpZWJlb3dldWVjajpHZGtyOkJkeG85VFc5VDlWVjk1ZGJIOUY5RjkzOUg3OVQ5RjlKOUgyMjlGOUp0OVZWN2JiejlUVzc5TzlWOVd0OUY3OVA5VDlXMjlQOU05NWJ3OEU5VFc3OU85VjlXdDlGNzlQOVQ5VzI5UDlNOTU5eDlQdDlPY3R0VjlQOUk5MXRXN2JEOEE5VFc3OU85VjlXdDlGNzlQOVQ5VzI5UDlNOTU5eDlQdDlPOXY5VzlLOUh0V2JxUTlUVzc5TzlWOVd0OUY3OVA5VDlXMjlQOU05NTl0MjlWOVc5Vzk1YmtYOVRXNzlPOVY5V3Q5Rjc5UDlUOVcyOVA5TTk1OXFWOTE5VVdieFE5VFc3OU85VjlXdDlGNzlQOVQ5VzI5UDlNOTU5cTlWOVA5VXQ3Ym1YOVRXNzlPOVY5V3Q5Rjc5UDlUOVcyOVA5TTk1OXQ5SjlIMldiUGE5VFc3OU85VjlXdDlGOVY5V3Q5UDlUOVA5Nlc5d1dWdFc5NFNXdDlKOU85c1c5VDlIOVdiczU5VFc3OU85VjlXdDlGOU5XOVVXVjlIdFc5cTlWNzlQdDlQOVY5VTlzVzlUOUg5V2J6bDc5SVY5UmJIRHdlYmNla2RDWHE7eTtXZVFkYms7cjpoZXJZdWU5OWl1WTk5WHVlOTpEOTk4SmpqampiY2o7c2I5UmdzOEtqampqYmNiaHphc2M6Q2VmY2JjO0tiejp0ampqYjhBZG5hYmFlU21iYWJhZWFkY2R0ek1qampiOEFrZG5hbWNkR1RtYmFsY3JmY2k0Y2J5ZDE6SDpjamJIampqamJiaEhhc2M6Q2VmYXN5ZDs4ZWdlY2R0ZmFIQmRiYXNhZWNlZkJkOzhlY2JobGNiaGVkbmFkVG1iYWJoZWFkaE9pbmFIYWV5ZGJjaTRmY2I4NmJiYWVjbGZoZWFPY3VmZ09tYmtjYmhsYWJoZWFkaE9pbmFIYWV5ZGJnQWNpNGZnQ2FDUmJiZ0NjZWFBY3JHZ0F0Vjg2YmJhQ2N1N2FBNGNlR2FsZmhsYWVjbGZoZWFPY3VmZ09tYmtjdWFsY2R0YWxjRkZGRmkwRWhla2FlY2J5ZDE6SDpjamJIampqamJiaHphc2M6Q2VmYXN5ZDs4ZWdlY2R0ZmF6QmRiYXNhZWNlZkJkOzhlYWxjZDRhbGZoT2NlaEhpbmFIZ2VjZXRoSGFlYU82bWJrY2JoWGN1YWVjZHRnT2FlY0ZGRkZpMEVjYnlkMTpIOmNqYkhqampqYmJoSGFzYzpDZWZhc3lkOzhlZ0FjZHRmYUhCZGJhc2FBY2VmQmQ7OGVhSGNGZWFPejp0ampqYmhRZG5hZFRtYmFlY3VmaExjYmhLaW5kbmRuYVFhYmFLY2R0ZmdZeWRiZ0FjOnY7dDtoO0V2MmFMR2dPY2R0ZmdDeWRiZ0hjdVNtYmNlaGVpbmF6YUhjZHRmeWRiYUFTbWRhT2FlZmhIYWVjZWZoZWFRYUhhTEdnT2NkdGZnQ3lkYmdIY3U5aG1ia2themFYY2R0ZmFBQmRiYUNhWEJkYmFYaEhhWGNlZmhYa2FZYUhCZGJhS2NlZmdLYWQ5aG1ia2thUWNieWQ6bTpIOmNqYkg6YmpqamJiYXNhc3lkOzhlY3VmQmQ7OGVrY2JoOEFjdWFsY2VmZ2VjZHRhZWNGRkZGaTBFY2J5ZDE6SDpjamJIampqamJiaExhc2M6Q2VmYXN5ZDs4ZWdlY2R0ZmFMQmRiYXNhTEJkTmVhc2FlY2VmQmQ7OGVjdWFkY2l0YWRjRkZGRmUwRWNieWQxOkg6Y2piSGpqampiYmhFYXNjOkNlZmFzeWQ7OGVnZWNkdGZhRUJkYmFzYUVCZDp5ZWFzYWVjZWZCZDs4ZWFzY05lZmFiYWRhbGNiejpjampqYmN1YWxjZHRnZWFsY0ZGRkZpMEVnM2NieWQxOkg6Y2piSGpqampiYmhPYXNjOkNlZmFzeWQ7OGVnSGNkdGZhT0JkYmFzYUhjZWZCZDs4ZWEzY2J5ZDE6SDpjamJIampqamJiaFFhc2M6Q2VmYXN5ZDs4ZWdIY2R0ZmFRQmRiYXNhSGNlZkJkOzhlYU9hUWFpYWxhdmF6YXNjOkNlZno6ZGpqamJhbGNieWQxOkg6Y2piSGpqampiYmhZYXNjOkNlZmFzeWQ7OGVnSGNkdGZhWUJkYmFzYUhjZWZCZDs4ZWEzY2J5ZDE6SDpjamJIampqamJiaEhhc2M6Q2VmYXN5ZDs4ZWdBY2R0ZmFIQmRiYXNhQWNlZkJkOzhlYTNjYnlkMTpIOmNqYkhqampqYmJoQWFzYzpDZWZhc3lkOzhlZ0NjZHRmYUFCZGJhc2FDY2VmQmQ7OGVhSGNGZWFlejp0ampqYmg1YUFjRmVhZXo6dGpqamJoOEVkbmFsVG1iaW5kbmFMYThBZ0FjZWZnOEFjZHRmeWRiZ0NhTGFBY2R0Z2VmeWRiZ0hTbWJhQ2FIOVJoOEZhRWFIY2l0ZmhhYThFYWVmaGhhNWFlZmhLY2JoQ2luZG5kbmFhYUNjaXRmeWRiZ1hhQTlobWJhS2FBQmRiYWhhQUJkYnhla2RuYUxhWGNkdGdnZmdlY2xmeWRiZ0hhZXlkYmdlU21iYUhhZTlSaEhhRWFlY2l0ZmhlaW5hZXlkYmFBU21kYWVjd2ZoZWFIY3VmZ0htYmtrYThFYWdmZ2VhQWFYYWV5ZGJjdVNFQmRiYUthWGFBYUt5ZGJjdVNFQmRia2FDY2VmZ0NhOEY5aG1ia2thOEFhbDlobWJrYU9oSGFRaEFhNWhYYThFaENjYmhlaW5kbmRuYWVhSHlkYmdLOWhtYmRuYWVhQXlkYmdLOWhtYmFYeWRiaEtkbmFDeWRiZzhGY3U5aG1iYUtjdTlobWJhWWFlZmNiODZiYnhpa2RuYThGY3VTbWJhS2N1U21iYWVhOEZTbWJhT2E4RmNkdGZ5ZGJhT2FLY2R0ZnlkYjlobWJhWWFlZmNkODZiYnhpa2FZYWVmaGFkbmFlYThGU21iYWVhS1NtYmFhY2U4NmJieGlrYWFjbDg2YmJ4ZGtkbmFlYVFhS2NkdGc4RmZ5ZGI5aG1iZG5hQ3lkYmdhY3VTbWJhZWFhU21iYVh5ZGJnZ2N1U21iYWVhZ1NtYmE4RWE4RmZ5ZGJnaGN1U21iYWhhS1NtYmE1YThGZnlkYmc4RmN1U21iYThGYUtTbWJkbmFPYWFjZHRmeWRiZ0thT2E4RmNkdGZ5ZGI5aG1iYUthT2FnY2R0ZnlkYmc4RlNtYmE4RmFPYWhjZHRmeWRiOWhtYmFZYWVmY2Q4NmJieGxrYVlhZWZjbDg2YmJ4aWthWWFlZmNsODZiYnhka2FZYWVmY2w4NmJieGVrYVlhZWZhWWFLZlJiYjg2YmJrYUhjbGZoSGFBY2xmaEFhWGNsZmhYYUNjbGZoQ2FsYWVjZWZnZTlobWJrZG5hbWNhR1RtYmNiaDhKaW5kbmRuYVlhOEpmZzhLUmJiZzhMYzk6ZlBpYmViZWtkbmRuZG5hT2E4SmNkdGZ5ZGJnZWE4SjlobWJkbmFxbWJjYmg4Rnhka2RuYXpUbWJjYmg4RmE4SmhlaW5hcWF6YWVjZHRnZWZ5ZGJmUmJiY2U0YThGVmNlR2g4RmFRYWVmeWRiZ2VhOEo5aG1ieGlra2NiaDhGYThKaGVpbmFxYWVmUmJiY2U0YThGVmNlR2g4RmFRYWVjZHRmeWRiZ2VhOEo5aG1ieGRra2FZYWVmUmJiaGV4ZWthOEpoZWluZG5hTGFlY2R0ZzhBZmdlY2xmeWRiZ0hhZXlkYmdlU21iYUhhZTlSaGdhRWFlY2l0ZmhoYU9hOEFmaGFjYmhLaW5haGFLY2l0ZnlkYmdYaGVkbmluZG5hTGFlY2R0Z0NmZ2VjbGZ5ZGJnSGFleWRiZ2VTbWJhSGFlOVJoSGFFYWVjaXRmaGVhYXlkYmhBZG5pbmFPYWV5ZGJjZHRmeWRiYUFTbWVhZWN3ZmhlYUhjdWZnSFRtZHhia2tjYmhleGRrYVFhQ2Z5ZGJnZWFYOWhtYmtjZWhla2E4RmFlVmg4RmFLY2VmZ0thZzlobWJra2FRYThBZnlkYmdlYThKOWhtYmthOExjaWE4RmNlR0VoZWthOEthZTg2YmJrYThKY2VmZzhKYWw5aG1ia2tkbmFxVG1iZG5kbmF6VG1iYXpoZWFPaEhhbGhBaW5kbmFxYWV5ZGJmUmJiY2VHVG1iYVlhSHlkYmZjbDg2YmJrYWVjbGZoZWFIY2xmaEhhQWN1ZmdBbWJ4ZGtrYXFoZWFPaEhhbGhBaW5kbmFlUmJiY2VHVG1iYVlhSHlkYmZjbDg2YmJrYWVjZWZoZWFIY2xmaEhhQWN1ZmdBbWJra2FPaGVhbGhBYVloSGluZG5hWWFleWRiZlJiYmNsOWhtYmFIY2w4NmJia2FlY2xmaGVhSGNlZmhIYUFjdWZnQW1ia2thbWNlR1RtYmFZaGVhbGhIaW5kbmFlUmJiY2U5aG1iYWVjbDg2YmJrYWVjZWZoZWFIY3VmZ0htYmtrY2JoOE1jdWFsY3gyYWxjO3Y6UTt2OlFlMEVjYnlkMTpIOmNqYkhqampqYmJoOE5hc2M6Q2VmYXN5ZDs4ZWdlY2R0ZmE4TkJkYmFzYWVjZWZCZDs4ZWFzY2JCZDpxZWFzOWNiODNpMWVhOE5haWFsYXZhemFzYzFlZno6ZWpqamJoeWRuZG5hRG1iY2JoOFBjYmhDeGVrY2JoQ2F3aGVjYmhIaW5kbmFlSWRiSmJiYmI5RVRtYmFzYUNjZHRmYUhCZGJhQ2NlZmhDa2FlY2xmaGVhRGFIY2VmZ0g5aG1ia2N1YUNhbDJnZWNkdGFlY0ZGRkZpMEVjYnlkMTpIOmNqYkhqampqYmJoOFBhc2M6Q2VmYXN5ZDs4ZWdlY2R0ZmE4UEJkYmFzYWVjZWZCZDs4ZWFsVG1iZG5hQ21iY2JoQ3hla2FyY2Q0aGdkbmF6VG1iYUNjZHRoaGNiaDhGYThQaGFpbmFvYXphOEZjZHRmeWRiYWcyY2R0ZmhLYXNoZWFhaEhhQ2hBaW5hSGFLYWV5ZGJjZHRnWGZJZGJhd2FYZklkYk5VZGJhZWNsZmhlYUhjbGZoSGFBY3VmZ0FtYmthYWFoZmhhYThGY2VmZzhGYWw5aG1ieGRra2FDY2R0aGhjYmg4RmE4UGhhaW5hb2E4RmFnMmNkdGZoS2FzaGVhYWhIYUNoQWluYUhhS2FleWRiY2R0Z1hmSWRiYXdhWGZJZGJOVWRiYWVjbGZoZWFIY2xmaEhhQWN1ZmdBbWJrYWFhaGZoYWE4RmNlZmc4RmFsOWhtYmtrY3VhbGM4UzJnSGFsYztEO087ZjhVMEVnWGNieWQxOkg6Y2piSGpqampiYmhlYXNjOkNlZmFzeWQ7OGVnQWNkdGZhZUJkYmFzYUFjZWZCZDs4ZWFlY2JhSHo6dGpqamJoSWNiaDhSY2JoZ2RuYUNUbWJjYmg4TWFYY2J5ZDE6SDpjamJIampqamJiaGdhc2M6Q2VmYXN5ZDs4ZWdlY2R0ZmFnQmRiYXNhZWNlZkJkOzhlYWdjYmFIejp0ampqYjhBY3VhQ2FsMmdlY2x0Z0hhZWNGRkZGYjBFY2J5ZDE6SDpjamJIampqamJiaDhSYXNjOkNlZmFzeWQ7OGVnZWNkdGZhOFJCZGJhc2FlY2VmQmQ7OGVhOFJjYmFIejp0ampqYjhBYW1jampqamRHVG1iY3VhbGNsdGdlYWxjRkZGRmIwRWNieWQxOkg6Y2piSGpqampiYmg4TWFzYzpDZWZhc3lkOzhlZ0hjZHRmYThNQmRiYXNhSGNlZkJkOzhlYThNY2JhZXo6dGpqamI4QWtkbmFkVG1iY2JoS2FiaEhpbmE4TmFIY2xmeWRiZzhGY3gyZmdlSWRiYThOYUh5ZGJnYWN4MmZnQUlkYmc4Uzp0Z1JhOE5hSGN3ZnlkYmdoY3gyZmdYSWRsYUFJZGxnOFU6dGc4Vk5hZUlkbGE4VTp0ZzhXYVhJZGJhOFM6dGc4WE46dGc4WWE4WU5hOFdhWElkd2FBSWR3ZzhaOnRnODBOYWVJZHdhOFo6dGc4V2E4Vk46dGc4MWE4MU5hOFdhOFhOYVJhODBOOnRnODBhODBOTU1nOFY6cmhCYThZaDhYYTgwaDhXYTgxaFJkbmE4VkpiYmJiOUVnQVRtYmE4WWFCOnZoOFhhODBhQjp2aDhXYTgxYUI6dmhSa2FJYU9hYWNkdGZ5ZGJnWGM4UzJmZ2VhUmFCOnJnOFZhUk5OZzgzYWVJZGJNVWRiYWVhOFdhOFZhOFdOZ1VOZzg1YWVJZGxNVWRsYWVhOFhhOFZhOFhOZzg2Tmc4N2FlSWR3TVVkd2FlYVJhVU5nVWFlSWR4TVVkeGFlYTg2YVJOZzg4YWVJZHpNVWR6YWVhOFdhODZOZzg5YWVJZENNVWRDYWVhUmE4VmE4WGE4Wk5hUmE4U05hOFVhOFdOTU06bWc4Ok5nODZOZ1JhZUlkS01VZEthZWE4V2E4Nk5nOFdhZUlkM01VZDNhZWE4WGE4Nk5nOFhhZUlkYU1VZGFhZWE4NmE4Ok5nODZhZUlkOEtNVWQ4S2FlYThWYWVJZHlNVWR5YUlhT2E4RmNkdGZ5ZGJnOEZjOFMyZmdlYTgzYWVJZGJNVWRiYWVhODVhZUlkbE1VZGxhZWE4N2FlSWR3TVVkd2FlYVVhZUlkeE1VZHhhZWE4OGFlSWR6TVVkemFlYTg5YWVJZENNVWRDYWVhUmFlSWRLTVVkS2FlYThXYWVJZDNNVWQzYWVhOFhhZUlkYU1VZGFhZWE4NmFlSWQ4S01VZDhLYWVhOFZhZUlkeU1VZHlhSWFPYWhjZHRmeWRiZ2FjOFMyZmdlYTgzYWVJZGJNVWRiYWVhODVhZUlkbE1VZGxhZWE4N2FlSWR3TVVkd2FlYVVhZUlkeE1VZHhhZWE4OGFlSWR6TVVkemFlYTg5YWVJZENNVWRDYWVhUmFlSWRLTVVkS2FlYThXYWVJZDNNVWQzYWVhOFhhZUlkYU1VZGFhZWE4NmFlSWQ4S01VZDhLYWVhOFZhZUlkeU1VZHlkbmE4TVRtYmRuYUFUbWJhOFlhQjp2aDhZYTgwYUI6dmg4MGE4MWFCOnZoODFrYThNYVhjbHRmZ2VhQkpiYmJaTmdSYTgwTmc4VmFlSWRsTVVkbGFlYVJhOFlOZzhXYWVJZHdNVWR3YWVhUmE4MU5nOFhhZUlkYk1VZGJhZWFSYThTOm1hODFOYThVYTgwTjp0YThaYThZTjp0TmdSYWVJZHhNVWR4YThNYThGY2x0ZmdlYThWYWVJZGxNVWRsYWVhOFdhZUlkd01VZHdhZWE4WGFlSWRiTVVkYmFlYVJhZUlkeE1VZHhhOE1hYWNsdGZnZWE4VmFlSWRsTVVkbGFlYThXYWVJZHdNVWR3YWVhOFhhZUlkYk1VZGJhZWFSYWVJZHhNVWR4a2FIY3hmaEhhS2NpZmdLYWQ2bWJra2RuYWxUbWJKcTt4OEo4OEo7bjttO204OUo6djo7O3c4WmFtY3pHRWFtYzthYkdFaDgwY2JoSGFPaFhhemhLYUloZWE4TmhBaW5kbmFIYVh5ZGI5aG1iYUhoOEZkbmF6VG1iYUt5ZGJoOEZrYTgwaFJkbmFxVG1iSmJialphODBhcWE4RmZSYmJjbEdFaFJrYWVjeGZnOEZhOEZJZGJKYmJiYk1VZGJhZWN6Zmc4RmE4RklkYkpiYmJiTVVkYmFlY0NmZzhGYThGSWRiSmJiYmJNVWRiYWVhUmFlY3lmZzhGSWRiZzhZTmdSYWVJZGJNVWRiYWVjbGZnYWFSYWFJZGJNVWRiYWVjd2ZnYWFSYWFJZGJNVWRiYWVjS2ZnYWFhSWRiYUFJZGJnOFdhUk46dFVkYmFBY3dmSWRiaDhWYWVjM2ZnYWFhSWRiYVJhQWNsZklkYmc4WE46dFVkYmFlY2FmZ2FhYUlkYmFSYThWTjp0VWRiYWVjOEtmZ2FJZGJoODFhOEZhOFlhUk1VZGJhYWE4MWFSYThWYThWTmE4V2E4V05hOFhhOFhOTU1OTVVkYmthWGNsZmhYYUtjbGZoS2FlYzhTZmhlYUFjeGZoQWFsYUhjZWZnSDlobWJra2RuYWRUbWJjYmg4QWFiaGFpbmFiYThBY2R0Zmg4RmNiaEhpbmFZYThGYUhjOkc6RzpjamJmeWRiY2R0ZnlkYmdBZlJiYmhlZG5kbmFZYWFhSGZ5ZGJnWGZSYmJnS2M5OWZjRmVHY3BlMG1iYWVjOTlmY0ZlR2M7OmU2bWVrZG5hS2N1ZmNGZUdjZTBtYmE1YVhjZHRmeWRiYUE5aG1la2RuYWVjdWZjRmVHY2UwbWJhOEVhQWNkdGZ5ZGJhWDlobWVrSmJiYWNKYmJhY0piYmJaYWVjRmVHY2VTRWFLY0ZlR2NlU0VoVWRuYThOYThGYUhjOks6RzpjamJmeWRiY2R0ZnlkYmN4MmZnZUlkd2E4TmFYY3gyZmdLSWR3Zzg2OnRnOFNhOE5hQWN4MmZnaElkd2E4Njp0ZzhYYThYTmFoSWRiYUtJZGJnOFU6dGc4MGE4ME5haElkbGFLSWRsZzhaOnRnOFZhOFZOTU1nODFOYThYYThTYThYTmFlSWRiYThVOnRnODNhODBOYThWYWVJZGxhOFo6dGc4NU5NTWc4V046dGc4WWE4WU5hODNhODFOYTgwYThXTjp0Z1JhUk5hODVhODFOYThWYThXTjp0ZzhXYThXTk1NZ0JKYmJiYjlFVG1iYThZYUI6cmdCOnZoOFlhOFdhQjp2aDhXYVJhQjp2aFJrYVVhODE6ck5nQmE4WWE4Nk5hUmE4VU5hOFphOFdOTU06bWc4MU5nODdhODFOaDg4YTgwYTg1TmE4VmE4M046dGc4MWE4MU5hOFZhOFNOYThYYTg1Tjp0ZzhWYThWTmE4WGE4M05hODBhOFNOOnRnOFhhOFhOTU1nODM6cmg4MGE4WWE4N05oODVhOFdhODdOaDg5YVJhODdOaDg3YThXYUJhOFlOZzhTTmg4OmE4U2FSTmhaYVJhQmE4V05nbk5oY2E4WWE4U05oOFlhOFdhbk5oOFdhUmFCYVJOTmg4U2RuYTgzSmJiYmI5RVRtYmE4MWE4MDp2aDgxYThYYTgwOnZoOFhhOFZhODA6dmg4VmthSWFPYVhjZHRmeWRiYzhTMmZnZWFlSWRiYThTYThWYVVhODA6ck5nUmE4Vk5OTWc4ME1VZGJhZWE4V2E4WGFSYThYTmc4U05NZzgzYWVJZGxNVWRsYWVhOFlhODFhUmE4MU5nOFdOTWc4WWFlSWR3TVVkd2FlYWNhOFZhOFNOTWc4U2FlSWR4TVVkeGFlYVphOFdhOFZOTWdVYWVJZHpNVWR6YWVhODphOFhhOFdOTWc4V2FlSWRDTVVkQ2FlYTg3YThWYVJhODFhODZOYThWYThVTmE4WmE4WE5NTWc4NjptTmdSTk1nOFZhZUlkS01VZEthZWE4OWE4WGFSTk1nOFhhZUlkM01VZDNhZWE4NWE4MWFSTk1nODFhZUlkYU1VZGFhZWE4OGE4NmFSTjp0Z1JhZUlkOEtNVWQ4S2FlYUJhZUlkeU1VZHlhSWFPYUFjZHRmeWRiYzhTMmZnZWE4MGFlSWRiTVVkYmFlYTgzYWVJZGxNVWRsYWVhOFlhZUlkd01VZHdhZWE4U2FlSWR4TVVkeGFlYVVhZUlkek1VZHphZWE4V2FlSWRDTVVkQ2FlYThWYWVJZEtNVWRLYWVhOFhhZUlkM01VZDNhZWE4MWFlSWRhTVVkYWFlYVJhZUlkOEtNVWQ4S2FlYUJhZUlkeU1VZHlrYUhjbGZnSGN4OWhtYmthYWN4ZmhhYThBY2lmZzhBYWQ2bWJrYUNUbWJjYmhhaW5KYmJiYmg4MGE4TmFiYWFjZHRmZ2VjbGZ5ZGJnOEZjeDJmZ0hJZHdhOE5hZXlkYmdoY3gyZmdBSWR3ZzhaOnRnOFZhOFZOYUhJZGJhQUlkYmc4Mzp0ZzhXYThXTmFISWRsYUFJZGxnODU6dGc4WGE4WE5NTWc4U2E4TmFlY3dmeWRiZzhBY3gyZmdlSWR3YThaOnRnOFlOYThWYThZTmE4V2FlSWRiYTgzOnRnODFOYThYYWVJZGxhODU6dGdCTk1NZ1JhOFZOOnRKYmJiYkpiYmpaYThTYThZYThZTmE4MWE4MU5hQmFCTk1NZzhVTmFSYVJOOnRnODY6dmE4NkpiYmJiOUJFZzg2Tmg4OGE4VWE4Vk5hUmE4WU46dGE4Nk5oODlhOFNhQk5hUmE4WE46dGE4Nk5oODphOFVhOFhOYVJhQk46dGE4Nk5oWmE4U2E4MU5hUmE4V046dGE4Nk5obmE4VWE4V05hUmE4MU46dGE4Nk5oY2E4V2FCTmE4WGE4MU46dGdSYVJOYThYYThZTmE4VmFCTjp0Z1JhUk5hOFZhODFOYThXYThZTjp0Z1JhUk5NTTpySmJiYlpOaFJhOFBhaGFDMmc4SmNkdGZoSGE4UGE4QWFDMmdEY2R0ZmhBYThQYThGYUMyZzhLY2R0ZmhYYThaOm1oOWNhODU6bWhKYTgzOm1oOWVhc2NqZGZoZWFDaEtKYmJiYmhCSmJiYmJoODZKYmJiYmg4U0piYmJiaDhVSmJiYmJoOFpKYmJiYmg4M0piYmJiaDg1SmJiYmJoODdKYmJiYmhVaW5hZWN3ZmFSYTg5YVhJZGJhSElkYmc4WTp0ZzhYTmE4OGFBSWRiYThZOnRnODFOTWc4Vk5VZGJhZWNsZmFSYVphOFhOYTg6YTgxTk1nOFdOVWRiYWVhUmFjYThYTmFuYTgxTk1nOFhOVWRiYWVjeGZhUmE5Y2E4Vk5hSmE4V05hOFlhOWVhOFhOTU1NZzhZTlVkYmFSYThWYThXTk5hOFpNaDhaYVJhOFZhOFhOTmE4VU1oOFVhUmE4V2E4WE5OYThTTWg4U2FSYThZYThZTk5hVU1oVWFSYThWYThZTk5hODdNaDg3YVJhOFdhOFlOTmE4NU1oODVhUmE4WGE4WU5OYTgzTWg4M2FSYThWYThWTk5hODZNaDg2YVJhOFdhOFdOTmFCTWhCYVJhOFhhOFhOTmE4ME1oODBhSGNsZmhIYVhjbGZoWGFBY2xmaEFhZWN6ZmhlYUtjdWZnS21ia2FnYWhjOFMyZmdlYTgwYWVJZGJNVWRiYWVhQmFlSWRsTVVkbGFlYTg2YWVJZHdNVWR3YWVhOFNhZUlkeE1VZHhhZWE4VWFlSWR6TVVkemFlYThaYWVJZENNVWRDYWVhODNhZUlkS01VZEthZWE4NWFlSWQzTVVkM2FlYTg3YWVJZGFNVWRhYWVhVWFlSWQ4S01VZDhLYWVhUmFlSWR5TVVkeWFnYThGYzhTMmZnZWE4MGFlSWRiTVVkYmFlYUJhZUlkbE1VZGxhZWE4NmFlSWR3TVVkd2FlYThTYWVJZHhNVWR4YWVhOFVhZUlkek1VZHphZWE4WmFlSWRDTVVkQ2FlYTgzYWVJZEtNVWRLYWVhODVhZUlkM01VZDNhZWE4N2FlSWRhTVVkYWFlYVVhZUlkOEtNVWQ4S2FlYVJhZUlkeU1VZHlhZ2E4QWM4UzJmZ2VhODBhZUlkYk1VZGJhZWFCYWVJZGxNVWRsYWVhODZhZUlkd01VZHdhZWE4U2FlSWR4TVVkeGFlYThVYWVJZHpNVWR6YWVhOFphZUlkQ01VZENhZWE4M2FlSWRLTVVkS2FlYTg1YWVJZDNNVWQzYWVhODdhZUlkYU1VZGFhZWFVYWVJZDhLTVVkOEthZWFSYWVJZHlNVWR5YThSYThKY2x0Zmg4RmNiaEhhQ2hYaW5hOEZhSGZnZWFzY2pkZmFIZmdBSWRiYWVJZGJNVWRiYWVjbGZnS2FBY2xmSWRiYUtJZGJNVWRiYWVjd2ZnS2FBY3dmSWRiYUtJZGJNVWRiYWVjeGZnZWFBY3hmSWRiYWVJZGJNVWRiYUhjemZoSGFYY3VmZ1htYmthOFJhOEtjbHRmaDhGY2JoSGFDaFhpbmE4RmFIZmdlYXNjamRmYUhmZ0FJZGJhZUlkYk1VZGJhZWNsZmdLYUFjbGZJZGJhS0lkYk1VZGJhZWN3ZmdLYUFjd2ZJZGJhS0lkYk1VZGJhZWN4ZmdlYUFjeGZJZGJhZUlkYk1VZGJhSGN6ZmhIYVhjdWZnWG1ia2E4UmFEY2x0Zmg4RmNiaEhhQ2hYaW5hOEZhSGZnZWFzY2pkZmFIZmdBSWRiYWVJZGJNVWRiYWVjbGZnS2FBY2xmSWRiYUtJZGJNVWRiYWVjd2ZnS2FBY3dmSWRiYUtJZGJNVWRiYWVjeGZnZWFBY3hmSWRiYWVJZGJNVWRiYUhjemZoSGFYY3VmZ1htYmthYWNpZmdhYWQ2bWJra2NiaEFkbmRuYW1jd0dnVG1iSmJiYmJoOFNjYmhTY2JoOWhjYmg5aXhla2NiaFNhM2NieWQxOkg6Y2piSGpqampiYmg5aWFzYzpDZWZhc3lkOzhlZ2VjZHRmYTlpQmRiYXNhZWNlZkJkOzhlY3VhOWlhbGFiYWRhT3o6ZmpqamJnWGNsdGFYY2pqamppR0VjYnlkMTpIOmNqYkhqampqYmJoOWhhc2M6Q2VmYXN5ZDs4ZWdlY2R0ZmE5aEJkYmFzYWVjZWZCZDs4ZWE5aGFYYTlpYThOYWx6OmdqampiSkZGdXVoOFNhWFRtYmE5aGhlYVhoSGluYWVJZGJnUmE4U2E4U2FSOUVFaDhTYWVjbGZoZWFIY3VmZ0htYmthWGhTa2RuYWxUbWJhTGNsZmhlYUx5ZGJoWGFZaEhhbGhLY2JoQWluY2JhZXlkYmc4RmFYOVJhSFJiYmNwZUdFYUFmaEFhSGNlZmhIYWVjbGZoZWE4RmhYYUtjdWZnS21ia2FBY2U0aEFrY3VhZGFBOVJjaWZnNmN4MmE2Yzt2OlE7djpRZTBFY2J5ZDE6SDpjamJIampqamJiaDlrYXNjOkNlZmFzeWQ7OGVnZWNkdGZhOWtCZGJhc2FlY2VmQmQ7OGVjdWE2Y2R0YTZjRkZGRmkwRWNieWQxOkg6Y2piSGpqampiYmgwYXNjOkNlZmFzeWQ7OGVnZWNkdGZhMEJkYmFzYWVjZWZCZDs4ZWEzY2J5ZDE6SDpjamJIampqamJiaDltYXNjOkNlZmFzeWQ7OGVnZWNkdGZhOW1CZGJhc2FlY2VmQmQ7OGVhbGNieWQxOkg6Y2piSGpqampiYmg5bmFzYzpDZWZhc3lkOzhlZ2VjZHRmYTluQmRiYXNhZWNlZkJkOzhlYXhheE5heUpiYmpaYW1jbEdFZ1phWk46dmg4N0piYmJiaFVkbmFkYWs5bm1iZG5hNmNpNm1iYUNjbHRoOW9hOWtjd2ZoOXBKYmJiYmg4NUpiYmJiaFVpbmFzY05lZmFiYWRhbGFPejpjampqYmFiaDhBY2JoOXFjYmg5cmluYWJhOXJjZHRmaERjYmhlaW5kbmFPYThBYWVmeWRiZ0FjZHRnaGZ5ZGJnWGFPYURhZWM6VzpHOmNqYmZ5ZGJjZHRmeWRiZ0hjZHRnOEpmeWRiZ0tTbWJhWWFIZlJiYmdhY3YyYVlhQWZSYmJnOEZmUmI7YTpHOmNqYmc4TGE4RmN2MmFhZmc4S1JiO2E6RzpjamJnM1ZjRmVHVG1iZG5hS2FYOW5tYmE4S1JiO0c6RzpjamJjRmVHbWVrZG5hOEZjdWZjRmVHY2UwbWJhYVRtYmE1YWhmeWRiYUg5aG1la2RuYThGVG1iYWFjdWZjRmVHY2UwbWJhOEVhOEpmeWRiYUE5aG1la2E5a2E5cWN4MmZnWGFIYUFhM2NGZUdnS0VCZGxhWGFBYUhhS0VCZGJhWGFLYThMR2NiOWhCZHdhOXFjZWZoOXFrYWVjbGZnZWN4OWhtYmtkbmE5cmNpZmc5cmFkOXBtYmE4QWN4Zmg4QWE5cWNpZmE2OW5tZWtrYTlxVG1kY2JoOEtpbmFJYU9hOWthOEtjeDJmZ2h5ZGJnS2NkdGdYZnlkYmc4QWM4UzJmZ2VJZHdhOE5haHlkbGc4RmN4MmZnSElkd2c4V05hZUlkemFISWRiZzhYTmFlSWRhTWdSYVJNTWE4V05hZUlkbGFISWRsZzhZTmFlSWRDYThXTmFlSWQzTWdSYVJNTWE4WU5hZUlkYmE4WE5hZUlkeGE4WU5hZUlkS01nUmFSTU1hOFhOYWVJZDhLTU1NOmxoUkpiYmJiSmJialphZUlkeWc4Vjp2YThWSmJiYmI5QkVoOFZkbmRuYWh5ZHdnRG1iSkZGdXVoODZ4ZWtKYmJiYkpiYmpaYUlhT2E4RmNkdGZ5ZGJjOFMyZmdlSWR5ZzgxOnZhODFKYmJiYjlCRWFlSWR3YThOYUtjeDJmZ0hJZHdnODFOYWVJZHphSElkYmc4ME5hZUlkYU1nQmFCTU1hODFOYWVJZGxhSElkbGdCTmFlSWRDYTgxTmFlSWQzTWc4MWE4MU1NYUJOYWVJZGJhODBOYWVJZHhhQk5hZUlkS01nODFhODFNTWE4ME5hZUlkOEtNTU06bE5oODZrYThWYVJOaEJkbmFDVG1iYWdhS2M4UzJmZ0FJZHdhOFdOYUFJZHphOFhOYUFJZGFNZ1JhUk1NYThXTmFBSWRsYThZTmFBSWRDYThXTmFBSWQzTWdSYVJNTWE4WU5hQUlkYmE4WE5hQUlkeGE4WU5hQUlkS01nUmFSTU1hOFhOYUFJZDhLTU1NaFJhOFBhOEZhQzJnYWNkdGZoSGE4UmFLYUMyZzhKY2x0ZmhlYUFJZHloODFhQ2hBaW5hSElkYmc4VmE4VmE4MU5hZWN4ZklkYmE4V2FlY3dmSWRiTmE4WGFlSWRiTmE4WWFlY2xmSWRiTk1NTWc4VmE4Vk06dE5hUk1oUmFIY2xmaEhhZWN6ZmhlYUFjdWZnQW1ia2RuZG5hRG1iSmJiYmJoOFZ4ZWthZ2E4RmM4UzJmZ0FJZHdhOE5hS2N4MmZnZUlkd2c4WE5hQUlkemFlSWRiZzhZTmFBSWRhTWc4VmE4Vk1NYThYTmFBSWRsYWVJZGxnODFOYUFJZENhOFhOYUFJZDNNZzhWYThWTU1hODFOYUFJZGJhOFlOYUFJZHhhODFOYUFJZEtNZzhWYThWTU1hOFlOYUFJZDhLTU1NaDhWYThQYThKY2R0ZmhIYThSYWFjbHRmaGVhQUlkeWg4MGFDaEFpbmFISWRiZzhXYThXYTgwTmFlY3hmSWRiYThYYWVjd2ZJZGJOYThZYWVJZGJOYTgxYWVjbGZJZGJOTU1NZzhXYThXTTp0TmE4Vk1oOFZhSGNsZmhIYWVjemZoZWFBY3VmZ0FtYmthOFY6bGg4VmthQmFSOmxNaEJhODZhOFZNaDg2ZG5kbmRuYVlhS2ZSYmJjOTpmUGRkYmVrYVFhWGZ5ZGJnWGFLU21iYU9hOEZjZHRmeWRiaDhKaW5kbmRuYTVhWGNkdGdhZnlkYmdlY3VTbWJhT2FlY2R0ZnlkYmE4SlNtZWtkbmE4RWFhZnlkYmdlY3VTbWJhT2FlY2R0ZnlkYmE4SlNtZWthOEZoZWthZ2FYYzhTMmZnQUlkd2E4TmFlY3gyZmdISWR3ZzhXTmFBSWR6YUhJZGJnOFhOYUFJZGFNZ1JhUk1NYThXTmFBSWRsYUhJZGxnOFlOYUFJZENhOFdOYUFJZDNNZ1JhUk1NYThZTmFBSWRiYThYTmFBSWR4YThZTmFBSWRLTWdSYVJNTWE4WE5hQUlkOEtNTU1oUmE4UGFlYUMyY2R0ZmhIYThSYVhhQzJjbHRmaGVhQUlkeWg4MWFDaEFpbmFISWRiZzhWYThWYTgxTmFlY3hmSWRiYThXYWVjd2ZJZGJOYThYYWVJZGJOYThZYWVjbGZJZGJOTU1NZzhWYThWTTp0TmFSTWhSYUhjbGZoSGFlY3pmaGVhQWN1ZmdBbWJrYUJhUjpsTWhCYVFhYWZ5ZGJnWGFLOWhtYmtrYVlhOEZmUmJiY2k5aG1lYURUbWVhUWE4RmNkdGZ5ZGJnWGE4RlNtZWluZG5kbmE1YVhjZHRnYWZ5ZGJnZWN1U21iYU9hZWNkdGZ5ZGJhOEFTbWVrZG5hOEVhYWZ5ZGJnZWN1U21iYU9hZWNkdGZ5ZGJhOEFTbWVrYUtoZWthZ2FYYzhTMmZnQUlkd2E4TmFlY3gyZmdISWR3ZzhXTmFBSWR6YUhJZGJnOFhOYUFJZGFNZ1JhUk1NYThXTmFBSWRsYUhJZGxnOFlOYUFJZENhOFdOYUFJZDNNZ1JhUk1NYThZTmFBSWRiYThYTmFBSWR4YThZTmFBSWRLTWdSYVJNTWE4WE5hQUlkOEtNTU1oUmE4UGFlYUMyY2R0ZmhIYThSYVhhQzJjbHRmaGVhQUlkeWg4MWFDaEFpbmFISWRiZzhWYThWYTgxTmFlY3hmSWRiYThXYWVjd2ZJZGJOYThYYWVJZGJOYThZYWVjbGZJZGJOTU1NZzhWYThWTTp0TmFSTWhSYUhjbGZoSGFlY3pmaGVhQWN1ZmdBbWJrYTg2YVI6bE1oODZhUWFhZnlkYmdYYThGOWhtYnhka2tkbmE4RWE1YTVhWGZ5ZGJhOEZTRWFRYVhmeWRiZ2FjZHRmeWRiZ1hjdTlobWJhUWE4RmNkdGZ5ZGJoWGthZ2FhYzhTMmZnQUlkd2E4TmFYY3gyZmdlSWR3ZzhXTmFBSWR6YWVJZGJnOFhOYUFJZGFNZ1JhUk1NYThXTmFBSWRsYWVJZGxnOFlOYUFJZENhOFdOYUFJZDNNZ1JhUk1NYThZTmFBSWRiYThYTmFBSWR4YThZTmFBSWRLTWdSYVJNTWE4WE5hQUlkOEtNTU1oUmE4UGFYYUMyZzhBY2R0ZmhIYThSYWFhQzJnOEpjbHRmaGVhQUlkeWg4MWFDaEFpbmFISWRiZzhWYThWYTgxTmFlY3hmSWRiYThXYWVjd2ZJZGJOYThYYWVJZGJOYThZYWVjbGZJZGJOTU1NZzhWYThWTTp0TmFSTWhSYUhjbGZoSGFlY3pmaGVhQWN1ZmdBbWJrZG5kbmFEbWJKYmJiYmg4Vnhla2FnYVhjOFMyZmdBSWR3YThOYWFjeDJmZ2VJZHdnOFhOYUFJZHphZUlkYmc4WU5hQUlkYU1nOFZhOFZNTWE4WE5hQUlkbGFlSWRsZzgxTmFBSWRDYThYTmFBSWQzTWc4VmE4Vk1NYTgxTmFBSWRiYThZTmFBSWR4YTgxTmFBSWRLTWc4VmE4Vk1NYThZTmFBSWQ4S01NTWg4VmE4UGE4SmNkdGZoSGE4UmE4QWNsdGZoZWFBSWR5aDgwYUNoQWluYUhJZGJnOFdhOFdhODBOYWVjeGZJZGJhOFhhZWN3ZklkYk5hOFlhZUlkYk5hODFhZWNsZklkYk5NTU1nOFdhOFdNOnROYThWTWg4VmFIY2xmaEhhZWN6ZmhlYUFjdWZnQW1ia2E4VjpsaDhWa2FCYVI6bE1oQmE4NmE4Vk1oODZrYWhhODZhQmE4NmFCOURnZUVVZHdhaGFLYThGYWVhRGNiOWhHZ2VFQmRsYWhhOEZhS2FlRUJkYmE4S2NlZmc4S2E5cTlobWJrYXNjamRmY2JjajtxYno6dGpqamI4QWE5cGhlYTlxaEhpbmFzY2pkZmFleWRiY0E0Y0Y4RkdnQWNGQWFBY0ZBNkVjZHRmZ0FhQXlkYmNlZkJkYmFlY3hmaGVhSGN1ZmdIbWJrY2JoZWNiaEhpbmFzY2pkZmFlZmdBeWRiaFhhQWFIQmRiYVhhSGZoSGFlY2xmZ2VjajtxYjlobWJrY2JoZWE5cGhIaW5hc2NqZGZhSHlkYmNBNGNGOEZHZ0FjRkFhQWNGQTZFY2R0ZmdBYUF5ZGJnQWNlZkJkYmEwYUFjZHRmYWVCZGJhSGN4ZmhIYTlxYWVjZWZnZTlobWJrYWRhazlSZ0FjaTlVaDlzZG5hbFRtYmNiaGVhOW1oSGluYUhhZUJkYmFIY2xmaEhhbGFlY2VmZ2U5aG1ia2tjYmg5dGE5bmNiYWx6OnRqampiaDNhQWNPOVVoOXVhOXNjZTRoOXJjYmg4TGNiaDhLZG5pbmE5a2EwYThLY2R0ZnlkYmN4MmZnOEpJZHdnUmE4NzlFbWVhOExhOXM5cG1lSkZGdXVoOFZkbmE5cmE5cTlwbWJhOWthMGE5cmNkdGZ5ZGJjeDJmSWR3SmJiO2FaTmg4VmtkbmFSYThWOUVUbWJhUmFVOUVUbWJhOExhOXUwbWRrZG5hM2FPYThKeWRsZ0RjZHRnOXZmZzhBeWRiZ0FmZzl3UmJiYTNhT2E4SnlkYmdoY2R0Zzl4ZnlkYmdlZmc5eVJiYlZtYmFZYWhmUmJiaDl6ZG5kbmFMYWVjZHRmZ0hjbGZ5ZGJnWGFIeWRiZ0hTbWJhWGFIOVJoWGE4TmFBY3gyZmg4RmE4TmFlY3gyZmhhYUVhSGNpdGZoZWluZG5hOW1hZXlkYmNkdGZ5ZGJnSGFBU21iYTltYWVjbGZ5ZGJjZHRmeWRiZ0thQVNtYmFIYUtTbWJhOE5hS2N4MmZnS0lkYmE4TmFIY3gyZmdISWRiZzhXOnRnUmFhSWRsYUhJZGxnOFg6dGc4ME5hS0lkbGE4WDp0ZzhWYWFJZGJhOFc6dGdCTjp0ZzhZYVJhOEZJZGxhOFg6dGc4Nk5hOFZhOEZJZGJhOFc6dGc4VU46dGc4WE5hOFZhYUlkd2FISWR3ZzgxOnRnOFpOYUtJZHdhODE6dGc4V2E4ME46dGc4MGE4VmE4Rklkd2E4MTp0ZzgzTmE4V2E4Nk46dGc4Vk5hOFdhQk5hUmE4Wk46dGc4MWE4V2E4VU5hUmE4M046dGdSTk1NYThZYThZTmE4MGE4ME5hODFhODFOTU1hOFhhOFhOYThWYThWTmFSYVJOTU1OOnJKYmJqODpOOUZtaWthZWN3ZmhlYVhjdWZnWG1ia2tkbmRuZG5kbmE5emM5OmZQZGViZGthaGhlaW5hOEF5ZGJoQWRuZG5hNWFlY2R0Z0hmeWRiZ2VjdVNtYmFPYWVjZHRmeWRiYUFTbWVrZG5hOEVhSGZ5ZGJnZWN1U21iYU9hZWNkdGZ5ZGJhQVNtZWthRGhla2E5bWFIZmFlQmRiYVFhSGZ5ZGJnZWFoOWhtYnhpa2tkbmE4RWE1YTVhOXhmeWRiYURTRWFRYTl4ZnlkYmdoY2R0ZnlkYmdlY3U5aG1iYVFhOXZmeWRiaGVrYTltYTl4ZmFEQmRiYWVoRGthOW1haGNkdGZhREJkYmthOXljZTg2YmJhOXdjZTg2YmJhOEpJZHdnUmFVYVVhUjlERWhVYTl0Y2VmaDl0Y2VjZGE5emNlU0VhOExmaDhMeGVrYTlyY2VmaDlya2E4S2NlZmc4S2E5cTlobWJra2E5dFRtZGRuYWxUbWJjYmg4RmNiaGhpbmRuYTltYWhjZHRnZWZ5ZGJnQWFoU21iYU9hQWNkdGZ5ZGJoOEFkbmFoYU9hZWZ5ZGI5aGc4Sm1iYUlhOEFjOFMyZmdlYUlhaGM4UzJmZ0hJZGJhZUlkYk1VZGJhZWFISWRsYWVJZGxNVWRsYWVhSElkd2FlSWR3TVVkd2FlYUhJZHhhZUlkeE1VZHhhZWFISWR6YWVJZHpNVWR6YWVhSElkQ2FlSWRDTVVkQ2FlYUhJZEthZUlkS01VZEthZWFISWQzYWVJZDNNVWQzYWVhSElkYWFlSWRhTVVkYWFlYUhJZDhLYWVJZDhLTVVkOEthZWFISWR5YWVJZHlNVWR5YThNVG1iYThNYThBY2x0ZmdlYThNYWhjbHRmZ0hJZGJhZUlkYk1VZGJhZWFISWRsYWVJZGxNVWRsYWVhSElkd2FlSWR3TVVkd2FlYUhJZHhhZUlkeE1VZHhrYUNUbWJhZ2FBYzhTMmZnZWFnYWhjOFMyZ0RmZ0hJZGJhZUlkYk1VZGJhZWFISWRsYWVJZGxNVWRsYWVhSElkd2FlSWR3TVVkd2FlYUhJZHhhZUlkeE1VZHhhZWFISWR6YWVJZHpNVWR6YWVhSElkQ2FlSWRDTVVkQ2FlYUhJZEthZUlkS01VZEthZWFISWQzYWVJZDNNVWQzYWVhSElkYWFlSWRhTVVkYWFlYUhJZDhLYWVJZDhLTVVkOEthZWFISWR5YWVJZHlNVWR5YTlvYUEyaGFhOFJoSGFDaFhpbmFIYWFmZ2VhSGE4RmZnQUlkYmFlSWRiTVVkYmFlY2xmZ0thQWNsZklkYmFLSWRiTVVkYmFlY3dmZ0thQWN3ZklkYmFLSWRiTVVkYmFlY3hmZ2VhQWN4ZklkYmFlSWRiTVVkYmFIY3pmaEhhWGN1ZmdYbWJrYThKbWJKYmJiYkpiYmpaYUlhRGZnZUlkeWdSOnZhUkpiYmJiOUJFYWVJZHdhOE5hOEFjeDJmZ0hJZHdnUk5hZUlkemFISWRiZzhWTmFlSWRhTWc4V2E4V01NYVJOYWVJZGxhSElkbGc4V05hZUlkQ2FSTmFlSWQzTWdSYVJNTWE4V05hZUlkYmE4Vk5hZUlkeGE4V05hZUlkS01nUmFSTU1hOFZOYWVJZDhLTU1NOmxOZ1JhODVhODVhUjlERWg4NWthOEZhOW9maDhGYWhjZWZnaGFsOWhtYmtjYmhIYTVoZWluZG5hZXlkYmdBY3VTbWJkbmFIYTltYUFjZHRnWGZ5ZGJnQTlobWJjdWhBYTVhWGZ5ZGJnWGN1U21iYTltYVhjZHRmeWRiaEFrYWVhQUJkYmthZWNsZmhlYWxhSGNlZmdIOWhtYmtjYmhIYThFaGVpbmRuYWV5ZGJnQWN1U21iZG5hSGE5bWFBY2R0Z1hmeWRiZ0E5aG1iY3VoQWE4RWFYZnlkYmdYY3VTbWJhOW1hWGNkdGZ5ZGJoQWthZWFBQmRia2FlY2xmaGVhbGFIY2VmZ0g5aG1ia2thODVhVWFDRWg4NWNiaEhhYmhlY2JoQWluZG5hT2E5bWFleWRiY2R0ZnlkYmc4RmNkdGZ5ZGJnWGFPYTltYWVjbGZ5ZGJjZHRmeWRiZ2FjZHRmeWRiZ0tTbWJhWGFPYTltYWVjd2Z5ZGJjZHRmeWRiZzhBY2R0ZnlkYmdoU21iYUthaFNtYmFiYUhjZHRmZ1hhOEZCZGJhWGN3ZmE4QUJkYmFYY2xmYWFCZGJhSGNpZmhIa2FlY3hmaGVhQWNpZmdBYWQ2bWJrZG5kbmFUbWJhSGhkeGVrZG5hSGFrMG1iYUhoZHhla2RuYThTYTg1OUZtYmFIaGR4ZWtKRkZ1dWg4U2NiaGRhYmhlY2JoQWluZG5hOWhhOWlhZXlkYmdYY2R0ZnlkYmNkdGZJZGJnUmE4NTlFVG1iYWVjbGY4UGRiaDlBYWJhZGNkdGZnS2FYQmRiYUtjbGZhOUE4M2RiYVJhOFNhOFNhUjlFRWg4U2FkY2lmaGRrYWVjeGZoZWFBY2lmZ0FhSDZtYmtrYWRhazBtYnhka2thc2NOZWZhYmFkYWxhT3o6Y2pqamJrZG5kbmFkYWswbWJhZGhheGVrZG5hVG1iYWRoYXhla2RuYThTYTg3OUZtYmFkaGF4ZWtjZWhLaW5hOFNKYmI7YVpOZ1JhODdhUmE4NzlERWg4V0piYmJiaFJkbmFTVG1iYTloaGVhU2hIaW5hZUlkYmc4VmFSYThWYThXOUZFYVJhOFZhUjlFRWhSYWVjbGZoZWFIY3VmZ0htYmtrSkZGdXVoOFNjYmhhYWJoZWNiaEhpbmRuYTloYTlpYWV5ZGJnQWNkdGZ5ZGJjZHRmSWRiZzhWYThXOUVUbWJhZWNsZjhQZGJoOUFhYmFhY2R0ZmdYYUFCZGJhWGNsZmE5QTgzZGJhOFZhOFNhOFNhOFY5RUVoOFNhYWNpZmhha2FlY3hmaGVhSGNpZmdIYWQ2bWJrZG5hS2FhYWQ5aFZjZUdtYmFkaGF4ZGthUmFVYVVhUjlERWhVYWFhazlubWVjYmhLYWFoZGE4U2E4NzlGbWJra2RuYW1jampqamRHVG1iYTluY2JhbHo6dGpqamJoOEFkbmFhVG1iYWJoZWFhaEhpbmE4QWFleWRiZ0FmY2U4NmJiYThBYU9hQWNkdGZ5ZGJmY2U4NmJiYWVjbGZoZWFIY3VmZ0htYmtrYXNjTmVmYWJhYWFsYU96OmNqampiZG5kbmFsVG1iY2JoWGluZG5hOEFhWGZSYmJUbWJkbmFZYVhmUmJiZ2VjbDBtYmNlYWV0Y1FHbWVrZG5hT2FYY2R0ZzhGZnlkYmdlYVhTbWJhOE5hWGN4MmZnSGE4TmFlY3gyZmdleWR3QmR3YUhhZThQZGI4M2RieGVrYUlhWGM4UzJmZ0tJZHlnY2FjSkw6MztyVU5nUk1oODdhS0lkd2c5QmFSTWg4U2FLSWRsZzlDYVJNaDhVYUtJZGJnOURhUk1oODFhS0lkYWc5RWFSYThOYVhjeDJmZzhKSWR3Zzg4Tjp0aDhaYUtJZDNnOUZhUmE4SklkbGc4OU46dGg4M2FLSWRLZzlHYThKSWRiZzg6YVJOOnRoODBKYmJiYmhuYUtJZENnOUhKYmJiYk1oODVhS0lkemc5SUpiYmJiTWhCYUtJZHhnOUpKYmJiYk1oODZkbmRuYUNUbWJhWGhBaW5KYmJiYmE4N2FnYUFjOFMyZmdISWR5Z1I6dmFSSmJiYmI5QkVoUmE4UmFBYUMyY2x0ZmhlYUhJZGFhODdOYThaTWg4WmFISWQzYTg3TmE4M01oODNhSElkS2E4N05hODBNaDgwYUhJZENhODdOYTg1TWg4NWFISWR6YTg3TmFCTWhCYUhJZHhhODdOYTg2TWg4NmFISWR3YTg3TmE4U01oOFNhSElkbGE4N05hOFVNaDhVYUhJZGJhODdOYTgxTWg4MWFDaEhpbmE4WmFlY3dmSWRiZzhWYWVjeGZJZGJnOFlOYVJOOnRoOFphODNhZWNsZklkYmc4V2E4WU5hUk46dGg4M2E4NWE4V2E4Vk5hUk46dGg4NWE4MWFlSWRiZzhYYThYTmFSTjp0aDgxYTgwYThYYThZTmFSTjp0aDgwYUJhOFhhOFZOYVJOOnRoQmE4NmE4WGE4V05hUk46dGg4NmE4U2E4VmE4Vk5hUk46dGg4U2E4VWE4V2E4V05hUk46dGg4VWFlY3pmaGVhSGN1ZmdIbWJrYVFhQWNkdGZ5ZGJnQWFYOWhtYmthOE1UbWJhOE1hWGNsdGZnZUlkeGh4YWVJZHdoOWNhZUlkbGhKYWVJZGJoUnhla0piYmJiaHhKYmJiYmg5Y0piYmJiaEpKYmJiYmhSa2FCYTgxOnZnOFdhODBOYThaOnRhODVhQmE4NmE4MTp2ZzhWTjp0ZzhaYThVYTg2YThWTjp0ZzhZOnZnOFhhOFZhODBOYTgzOnRnOFVOOnRoODNhOWNhUmE4V046dGFKYVJhOFZOOnRnODZhOFhOOnRnODVhOFNhQmE4V046dGE4WmE4WE46dGdCOnZnOFM6bWg4WmE4NmE4WTp2ZzljOm1oSmRuSmJiYmJhUmFSYTgxOnZnOWVOOnRhODZhOWNOOnRhODVhOFNOOnRnODY6bGE4N0o6OTgzOmc4MU5nUjlFVG1iYThaYTgzTmFKYThVTmE5ZWE4ME5heDp0TU1hODY6dmhua2E4MTpsYVI5RVRtYmE4WTpsYVI5RVRtYmFCOmxhUjlFVG1iYTllOm1hbk5hOFc6bWE4WmFuTmE4M2FCOnZNZ0JOYThWOm1hSmFuTmE4WDptYUJOYThVYThZOnZNTWc4NU5hODA6bWE4MTp2TU1NaDg3YUxhOEZmZ2VjbGZ5ZGJnSGFleWRiZ2U5UmhoYUVhZWNpdGZoOEZKYmJiYmhSZG5hSGFlU2dEbWJKYmJiYmhSYThGaGVhaGhBaW5hOE5hZWNsZnlkYmN4MmZnSElkd2E4ODp0ZzhWYThWTmFISWRiYTg6OnRnOFZhOFZOYUhJZGxhODk6dGc4VmE4Vk5NTWc4VmE4TmFleWRiY3gyZmdISWR3YTg4OnRnOFdhOFdOYUhJZGJhODo6dGc4V2E4V05hSElkbGE4OTp0ZzhXYThXTk1NZzhXYVJhUmE4VzlERWdSYVJhOFY5REVoUmFlY3dmaGVhQWN1ZmdBbWJrYVI6cmdSYVJOaFJrYUJhODg6dGc4VmE4Vk5hODdhODo6dGc4VmE4Vk5hODVhODk6dGc4VmE4Vk5NTWFSOUVtYmFLSWQ4S2huZG5hRG1iaW5hOE5hOEZjbGZ5ZGJjeDJmZ2VJZGJhOE5hOEZ5ZGJjeDJmZ0hJZGJnOFc6dGdSYTg5YUhJZGxnOFg6dGc4ME5hZUlkbGE4WDp0ZzhWYTg6YThXOnRnODZOOnRnOFlhUmE4NWE4WDp0ZzhTTmE4VmE4N2E4Vzp0ZzhVTjp0ZzhYTmE4VmE4OGFISWR3ZzgxOnRnOFpOYWVJZHdhODE6dGc4V2E4ME46dGc4MGE4VmFCYTgxOnRnODNOYThXYThTTjp0ZzhWTmE4V2E4Nk5hUmE4Wk46dGc4MWE4V2E4VU5hUmE4M046dGdSTk1NYThZYThZTmE4MGE4ME5hODFhODFOTU1hOFhhOFhOYThWYThWTmFSYVJOTU1OOnJKYmJqODpOOUZtZGE4RmN3Zmg4RmFoY3VmZ2htYmtrSmJiYmJKYmJqWmFjOnZhY0piYmJiOUJFZ1JhOUJhQk5hOUlhODdOYTlFTWc4VmE4Vk1NYUJOYTlDYTg1TmE5SGFCTmE5Rk1nOFZhOFZNTWE4NU5hOURhODdOYTlKYTg1TmE5R01nOFZhOFZNTWE4N05hbk1NTTpsTmFSYTlCYTg4TmE5SWE4Ok5hOUVNZzhWYThWTU1hODhOYTlDYTg5TmE5SGE4OE5hOUZNZzhWYThWTU1hODlOYTlEYTg6TmE5SmE4OU5hOUdNZzhWYThWTU1hODpOYW5NTU06bE5KYmI7YVpOSjo5ODM6ZzgxTTlFbWJhOEphQlVkd2E4SmE4NVVkbGE4SmE4N1VkYmthWGNlZmdYYWw5aG1ia2RuYUNtYmNiaEN4ZGtjYmhYaW5kbmE4QWFYZlJiYlRtYmFPYVhjZHRnZWZ5ZGJhWDlobWJhWWFYZmhoYVFhZWZoOEphOE5hWGN4MmZoQWE4UGFYYUMyY2R0ZmhEY2JoRWluY3VoTGRuYWhSYmJjaTlobWJhWGhMYThKeWRiZ2VhWFNtYmE4UGFFY2R0Z0hmaEthRGFIZklkYmhSYVhoTGluYUxoSGN1aExkbmFLYWVhQzJjZHRmSWRiYVI5Q21iYUhjdVNtYmFIaExhZ2FlYzhTMmZJZHlhZ2FIYzhTMmZJZHk5RVRtYmFlaExrYVFhZWNkdGZ5ZGJnZWFYOWhtYmtrYThQYUVjZHRmaEthOFJhRWNsdGZoOEZhWGhlaW5hS2FlYUMyY2R0ZkpiYmJiSmJialphZ2FlYUxhTGN1U0VnSGM4UzJmSWR5Z1I6dmFSSmJiYmI5QkVhOEZhSGFDMmNsdGZnSElkd2FBSWR3TmFISWRiYUFJZGJOYUhJZGxhQUlkbE5NTWFISWR4TU5VZGJhUWFlY2R0ZnlkYmdlYVg5aG1ia2FFY2VmZ0VhQzlobWJra2FYY2VmZ1hhbDlobWJ4ZGtrYUNtYmNiaENrYWlhdmFvYXJhd2FDYWxhOE5hOFBhemFzYXlhc2MxZWZhWWE4QWFxejpoampqYmtkbmFtY2pqampsR1RtYmF6bWJhYVRtYmFiaGVjYmhMaW5hWWFleWRiZ0FmUmJiYzN0aFFhZWN3ZmdYeWRiaEhjampqajk0aENkbmE1YUFjZHRnRWZ5ZGJhZWNsZmdLeWRiZ09TbWJjampqajk0Y2JhOEVhT2NkdGZ5ZGJhQVNFaENrYWVhUWFDVmFBVkJkYmFZYU9mUmJiYzN0aDhGY2pqamo5NGhDY2pqamo5NGhRZG5hNWFPY2R0ZnlkYmFIU21iY2pqamo5NGNiYThFYUhjZHRmeWRiYU9TRWhRa2FLYThGYVFWYU9WQmRiYVlhSGZSYmJjM3RoT2RuYTVhSGNkdGZ5ZGJhQVNtYmNqampqOTRjYmE4RWFFZnlkYmFIU0VoQ2thWGFPYUNWYUhWQmRiYWVjeGZoZWFMY2lmZ0xhYTZtYmtrZG5helRtYmFhVG1iYWFoZWluYWJhemFieWRiY2R0ZnlkYkJkYmFiY2xmaGJhZWN1ZmdlbWJra2RuYVBUbWJhUGFaYVU6ck5VZGJrZG5hc3lkOzhlZ0hUbWJhSGNkdGFzYzpDZWZmYzk4ZmhlaW5hZXlkYmNieWQ6bTpIOmNqYkg6YmpqamJiYWVjOThmaGVhSGN1ZmdIbWJra2FzY2o7c2JmOEtqampqYmFhaztZaWVvdWFieWRsaHZhYnlkYmNsZmNiYWljZHR6OnRqampiaG9hZGNpOVVocmRuYWRUbWJkbmFsVG1iYWVod2FkaERpbmFvYWxhd3lkYmNkdGZ5ZGJjZHRmZ3FhcXlkYmNlZkJkYmF3Y2xmaHdhRGN1ZmdEbWJ4ZGtrYWVod2FkaERpbmFvYXd5ZGJjZHRmZ3FhcXlkYmNlZkJkYmF3Y2xmaHdhRGN1ZmdEbWJra2RuYWlUbWJjYmhEYW9od2luYXd5ZGJocWF3YURCZGJhd2NsZmh3YXFhRGZoRGFpY3VmZ2ltYmtrZG5hZGNpNm1iaW5hZWN3ZnlkYmh3YWVjbGZ5ZGJoRGFleWRiaGlkbmFsVG1iYWxhd2NkdGZ5ZGJod2FsYURjZHRmeWRiaERhbGFpY2R0ZnlkYmhpa2F2YW9haWNkdGZncXlkYmNpdGZhREJkYmF2YXF5ZGJjaXRmYXdCZGxhcWFxeWRiY2VmQmRiYXZhb2FEY2R0ZmdxeWRiY2l0ZmF3QmRiYXZhcXlkYmNpdGZhaUJkbGFxYXF5ZGJjZWZCZGJhdmFvYXdjZHRmZ3d5ZGJjaXRmYWlCZGJhdmF3eWRiY2l0ZmFEQmRsYXdhd3lkYmNlZkJkYmFlY3hmaGVhcmN1ZmdybWJra2FieWRiY2JCZGJrOnRvZER1ZTk5YWljZDRhaWZocmNlaHdpbmF3Z0RjZXRod2FEYXI2bWJrY3VhRGNkdGdyYURjRkZGRmkwRWNieWQxOkg6Y2piSGpqampiYmh3YW9hb3lkOUdncWNlZkJkOUdhb2FxY2R0ZmF3QmRiYXdjRmVhcno6dGpqamJoa2RuYWlUbWJhbGNkNGhsYURjdWZoeGNiaG1pbmFtaERkbmF2VG1iYXZhbWNkdGZ5ZGJoRGtjYmFkYURhbDJjZHRmZ0R5ZGxnd2F3Y2pqamo5NFNFZ3djSDRhdzdjOkY6YjpERDJjYmFEeWRiZ3dhd2NqampqOTRTRWd3Y0g0YXc3YztEO086QjhKMjdjYmFEeWR3Z0RhRGNqampqOTRTRWdEY0g0YUQ3YzozRjtOOE4yN2F4R2h3YW1jZHRoUGRuZG5kbmF2VG1iYWthd2NkdGZncnlkYmdEY3VTbWVhZGF2YVBmeWRiYWwyY2R0ZmdzSWRiaHpjZWhxaW5hcWhyZG5hZGF2YURjZHRmeWRiYWwyY2R0ZmdxSWRiYXo5Q21iYXFJZGxhc0lkbDlDbWJhcUlkd2FzSWR3OUJtbGthcmNlZmhxYWthd2FyZmF4R2d3Y2R0ZmdyeWRiZ0RjdTlobWJ4ZGtrYWthd2NkdGZncnlkYmdEY3VTbWJhZGFtYWwyY2R0ZmdzSWRiaHpjZWhxaW5hcWhyZG5hZGFEYWwyY2R0ZmdxSWRiYXo5Q21iYXFJZGxhc0lkbDlDbWJhcUlkd2FzSWR3OUJtaWthcmNlZmhxYWthd2FyZmF4R2d3Y2R0ZmdyeWRiZ0RjdTlobWJra2FyYW1CZGJhbWhEa2FiYVBmYURCZGJhbWNlZmdtYWk5aG1ia2tha2NieWQ6bTpIOmNqYkg6YmpqamJiYW9hb3lkOUdjdWZCZDlHZG5hZVRtYmFpVG1iY2JoRGFlaHdpbmF3YURCZGJhd2NsZmh3YWlhRGNlZmdEOWhtYmtjYmhEYWVod2luZG5hRGFieWRiZ3JTbWJhd2FlYXJjZHRmZ3J5ZGJCZGJhcmFEQmRia2FiY2xmaGJhd2NsZmh3YWlhRGNlZmdEOWhtYmtrazs6b2R2dXY5OThKampqamJjYTlSZ29jYnlkMTpHOmNqYkJkS2FvY2I4UGRqOkc6Y2piODNpemFvY2J5ZE46RzpjamJCZHdhb2NiOFBkOm06RzpjamI4M2liZG5hZFRtYmFpY2Q0aHJkbmFibWJkbmFsVG1iY2Jod2luYWVhbGF3Y2R0ZnlkYmFyMmNkdGZoRGNiaGlpbmFvY3pmYWlmZ3FhRGFpZklkYmdrYXFJZGJneGF4YWs5RUVVZGJhb2FpZmdxYWthcUlkYmd4YXhhazlERVVkYmFpY2xmZ2ljeDlobWJrYXdjZWZnd2FkOWhtYnhpa2thcmNkdGh3Y2JoRGluY2JoaWluYW9jemZhaWZncWFlYWlmSWRiZ2thcUlkYmd4YXhhazlFRVVkYmFvYWlmZ3Fha2FxSWRiZ3hheGFrOURFVWRiYWljbGZnaWN4OWhtYmthZWF3ZmhlYURjZWZnRGFkOWhtYnhka2tkbmFsVG1iY2Jod2luYWJhd2N4MmZnaWFlYWxhd2NkdGZ5ZGJhcjJjZHRmZ0RJZGJVZGJhaWFESWRsVWRsYWlhRElkd1Vkd2NiaGlpbmFvY3pmYWlmZ3FhRGFpZklkYmdrYXFJZGJneGF4YWs5RUVVZGJhb2FpZmdxYWthcUlkYmd4YXhhazlERVVkYmFpY2xmZ2ljeDlobWJrYXdjZWZnd2FkOWhtYnhka2thcmNkdGhsY2Jod2FlaERpbmFiYXdjeDJmZ2lhZWF3YXIyY2R0ZmdxSWRiVWRiYWlhcUlkbFVkbGFpYXFJZHdVZHdjYmhpaW5hb2N6ZmFpZmdxYURhaWZJZGJna2FxSWRiZ3hheGFrOUVFVWRiYW9haWZncWFrYXFJZGJneGF4YWs5REVVZGJhaWNsZmdpY3g5aG1ia2FEYWxmaERhd2NlZmd3YWQ5aG1ia2tKYmJiYmFvSWRiYW9JZHpneDp0Z2tha0piYmJiOURFZ2thb0lkbGFvSWRDZ206dGdQYVBhazlERWdrYW9JZHdhb0lkS2dQOnRnc2FzYWs5REVoc2RuYWJUbWJhZFRtYkpiYmJiSmJialphczp2YXNKYmJiYjlCRWhraW5hYmFrYWJJZGJheDp0TlVkYmFiY2xmZ29ha2FvSWRiYW06dE5VZGJhYmN3ZmdvYWthb0lkYmFQOnROVWRiYWJjeGZoYmFkY3VmZ2RtYmtrZG5hdlRtYmF2YVBVZHdhdmFtVWRsYXZheFVkYmthc2s6V2xld3VkbmFlVG1iY2JodmFiaG9pbmFvYXZCZGJhb2NsZmhvYWVhdmNlZmd2OWhtYmtrZG5haVRtYmNiaHJpbmFkYXJjZHRmaHdjYmhEaW5hbGF3YURjZHRndnlkOkc6RzpjamJjZHRmeWRiY2R0ZnlkYmhvZG5hbGF3YXZmeWRiY2R0ZnlkYmdxYWJhcWNkdGZna3lkYmd2U21iaW5ha2FiYXZncWNkdGZneHlkYmd2QmRiYXhoa2FxYXY5aG1ia2tkbmFvYWJhb2NkdGZna3lkYmd2U21iaW5ha2FiYXZnb2NkdGZneHlkYmd2QmRiYXhoa2FvYXY5aG1ia2tkbmFxYW9TbWJhYmFxYW9hcWFvMEVjZHRmYXFhb2FxYW82RUJkYmthRGNlZmdEY2k5aG1ia2FyY2lmZ3JhaTZtYmtrZG5hZW1iY2Jza2NiaHhpbmRuYWxheGNkdGd2ZnlkYmF4OWhtYmF4aG9kbmF4YWJhdmZnRHlkYmd2U21iYURocWluYXFhYmF2Z29jZHRmZ2t5ZGJndkJkYmFraHFhb2F2OWhtYmtrYURhb0JkYmtheGNlZmd4YWU5aG1ia2NiaGthYmh2Y2Job2luZG5kbmFvYWx5ZGJncTlobWJkbmFvYXZ5ZGJncTlobWJhdmFrQmRiYWtjZWZoa3hka2F2YWJhcWNkdGZ5ZGJCZGJ4ZWthdmFiYXFjZHRmeWRiQmRia2FsY2xmaGxhdmNsZmh2YWVhb2NlZmdvOWhtYmtha2s7amlpbHVkOTlldWFiY2JhZWNsdHo6dGpqamJodmRuYWxUbWJhZGhvYWlocmFsaHdpbmFyY3dmSWRiaERhcmNsZklkYmhxYXZhb3lkYmNsdGZna2FySWRiYWtJZGJNVWRiYWthcWFrSWRsTVVkbGFrYURha0lkd01VZHdha2FrSWR4SmJialpNVWR4YW9jbGZob2FyY3hmaHJhd2N1Zmd3bWJra2RuYWVUbWJhdmhrYWVocmluYWtjeGZnb0lkYmhEYW9jYkJkYmFrYWtJZGJKYmJiYkpiYmpaYUQ6dmFESmJiYmI5QkVnRE5VZGJha2NsZmdvYURhb0lkYk5VZGJha2N3ZmdvYURhb0lkYk5VZGJha2N6ZmhrYXJjdWZncm1ia2tkbmFsVG1iaW5hdmFkeWRiY2x0ZmdrYWljd2ZJZGJha0lkdzp0Z0RhRE5haUlkYmFrSWRiOnRnRGFETmFpY2xmSWRiYWtJZGw6dGdEYUROTU1nRGFrSWR4Z3FhcWFEOURFVWR4YWRjbGZoZGFpY3hmaGlhbGN1ZmdsbWJra2RuYWVUbWJhdmN4ZmhraW5hYmFrSWRiVWRiYWtjemZoa2FiY2xmaGJhZWN1ZmdlbWJra2s6bW9lcnVkbmFvVG1iYWVjZDRoemRuYXZUbWJhaWNkNGhIYXZjZHRoT2NiaEFpbmRuYVBhQWZSYmJUbWJhQWhlZG5hRFRtYmFEYUFjZHRmeWRiaGVrZG5hc1RtYmFzYWVmUmJiY2VHbWVrZG5hbWFBZlJiYmNsU21iYWJhZWF6MmNkdGZnaWFyYUFjeDJmZ0NJZGJha05heElkYk1VZGJhaWFDSWRsYWtOYXhJZGxNVWRsYWlhQ0lkd2FrTmF4SWR3TVVkd2thZGFlYUgyY2R0ZmhYYXFoZWF3aGlhdmhDaW5hWGFleWRiY2R0Z1FmYWlJZGJhbGFRZklkYjp2VWRiYWVjbGZoZWFpY2xmaGlhQ2N1ZmdDbWJra2F3YU9maHdhQWNlZmdBYW85aG1ieGRra2RuYXNtYmNiaGVhRGhpaW5kbmFQYWVmUmJiVG1iYWVoQ2RuYURUbWJhaXlkYmhDa2FtYWVmUmJiY2xTbWJhYmFDYXoyY2R0ZmdDYXJJZGJha05heElkYk1VZGJhQ2FyY2xmSWRiYWtOYXhJZGxNVWRsYUNhcmN3ZklkYmFrTmF4SWR3TVVkd2thaWNsZmhpYXJjeGZocmFvYWVjZWZnZTlobWJ4ZGtrZG5hRFRtYmluZG5hUFJiYlRtYmFzYUR5ZGJnZWZSYmJjZUdtYmFtUmJiY2xTbWJhYmFlYXoyY2R0ZmdlYXJJZGJha05heElkYk1VZGJhZWFyY2xmSWRiYWtOYXhJZGxNVWRsYWVhcmN3ZklkYmFrTmF4SWR3TVVkd2thUGNlZmhQYURjbGZoRGFtY2VmaG1hcmN4ZmhyYW9jdWZnb21ieGRra2F6Y2R0aGljYmhlaW5kbmFQYWVmUmJiVG1iYXNhZWZSYmJjZUdtYmFtYWVmUmJiY2xTbWJhYmFySWRiYWtOYXhJZGJNVWRiYWJjbGZhcmNsZklkYmFrTmF4SWRsTVVkYmFiY3dmYXJjd2ZJZGJha05heElkd01VZGJrYXJjeGZocmFiYWlmaGJhb2FlY2VmZ2U5aG1ia2trOE1iYWJhZWFkYWlhbGF2Y2JjYmNiY2JjYmFvYXJhd2FEejpiampqYms4TWJhYmFlYWRhaWFsYXZhb2FyYXdhRGFxYWtheGFtYVB6OmJqampia1JiYWJhYmFlYWRhaWFsYXZhb2FyYXdhRGFxYWtheGNqampqZFZhbXo6YmpqamJrOmc4S29xdWU5OWR1ZTk5ZHVxOTk4SmpqampiYztXYjlSZ3E4S2pqampiY2Joa2FxY3hmY2JjO0tiejp0ampqYjhBYXFjdWFsY3gyYWxjO3Y6UTt2OlFlMEVjYnlkMTpIOmNqYkhqampqYmJneEJkeGFxY2VCZDJheGFpYWxhdmNiY2J6OmVqampiOEFhcWN1YWxjZHRhbGNGRkZGaTBFZ21jYnlkMTpIOmNqYkhqampqYmJnaUJkemFxY2RCZDJkbmRuSkZGOTU5ZUpiYmpaYXdKYmJqWmF3SmJialo5REU6dmF3SjlWTzpkODY5REVndzpsSmJiYjlwOURUbWJhdzpPaFB4ZWtjampqajk0aFBrYWRjaTlVaHNhcmNvOVVoemRuZG5hb21iYVBjZDlpbWVrZG5hbFRtYmFQY3VmOllod2RuYW9UbWJjYmh2YWloSGF4aE9pbmRuZG5hb2F2ZlJiYmNlR1RtYmF2Y2pqampsVmhBeGVrZG5kbmFPY2xmSWRiYXdOSmJiYlpNZ0M6bEpiYmI5cDlEVG1iYUM6T2hBeGVrY2pqamo5NGhBa2FBY3F0aEFkbmRuYU9jd2ZJZGJhd05KYmJiWk1nQzpsSmJiYjlwOURUbWJhQzpPaFh4ZWtjampqajk0aFhrYUFhWFZoQWRuZG5hT0lkYmF3TkpiYmJaTWdDOmxKYmJiOXA5RFRtYmFDOk9oWHhla2NqampqOTRoWGthQWFYY0N0VmhBa2FIYUFCZGJhSGNsZmhIYU9jeGZoT2FsYXZjZWZndjlobWJ4ZGtrYXhodmFpaE9hbGhIaW5kbmRuYXZJZGJhd05KYmJiWk1nQzpsSmJiYjlwOURUbWJhQzpPaEF4ZWtjampqajk0aEFrYUFjQ3RoQWRuZG5hdmNsZklkYmF3TkpiYmJaTWdDOmxKYmJiOXA5RFRtYmFDOk9oWHhla2NqampqOTRoWGthWGNxdGFBVmhBZG5kbmF2Y3dmSWRiYXdOSmJiYlpNZ0M6bEpiYmI5cDlEVG1iYUM6T2hYeGVrY2pqamo5NGhYa2FPYUFhWFZCZGJhdmN4Zmh2YU9jbGZoT2FIY3VmZ0htYmtrYWRUbWJjYmhrYWVodmNiaE9pbmFrYWlhdmNsZnlkYmNkdGZ5ZGJnSGFpYXZjd2Z5ZGJjZHRmeWRiZ0E5aGFpYXZ5ZGJjZHRmeWRiZ1hhSDloYVhhQTloR0dmaGthdmN4Zmh2YU9jaWZnT2FkNm1ia2thcmNpOVVoUWRuZG5hejpaOnJKYmJiWk1ndzpsSmJiYjlwOURUbWJhdzpPaHZ4ZWtjampqajk0aHZrYVE6WmhMY2JoS2M6YndoemRuaW5ha2FROXBtZWF6YVA5UmNkOWltZWF2YXpjdWZnT2F2YU85aUVhUGNlZmF2YVA5a0VoWWRuYWxUbWJhWWN1ZjpZaHdkbmFvVG1iY2JoT2FpaEhheGh2aW5kbmRuYW9hT2ZSYmJjZUdUbWJhT2NqampqbFZoQXhla2RuZG5hdmNsZklkYmF3TkpiYmJaTWdDOmxKYmJiOXA5RFRtYmFDOk9oQXhla2NqampqOTRoQWthQWNxdGhBZG5kbmF2Y3dmSWRiYXdOSmJiYlpNZ0M6bEpiYmI5cDlEVG1iYUM6T2hYeGVrY2pqamo5NGhYa2FBYVhWaEFkbmRuYXZJZGJhd05KYmJiWk1nQzpsSmJiYjlwOURUbWJhQzpPaFh4ZWtjampqajk0aFhrYUFhWGNDdFZoQWthSGFBQmRiYUhjbGZoSGF2Y3hmaHZhbGFPY2VmZ085aG1ieGRra2F4aHZhaWhPYWxoSGluZG5kbmF2SWRiYXdOSmJiYlpNZ0M6bEpiYmI5cDlEVG1iYUM6T2hBeGVrY2pqamo5NGhBa2FBY0N0aEFkbmRuYXZjbGZJZGJhd05KYmJiWk1nQzpsSmJiYjlwOURUbWJhQzpPaFh4ZWtjampqajk0aFhrYVhjcXRhQVZoQWRuZG5hdmN3ZklkYmF3TkpiYmJaTWdDOmxKYmJiOXA5RFRtYmFDOk9oWHhla2NqampqOTRoWGthT2FBYVhWQmRiYXZjeGZodmFPY2xmaE9hSGN1ZmdIbWJra2NiaE9kbmFkVG1iYWVodmNiaEhpbmFPYWlhdmNsZnlkYmNkdGZ5ZGJnQWFpYXZjd2Z5ZGJjZHRmeWRiZ1g5aGFpYXZ5ZGJjZHRmeWRiZ3JhQTloYXJhWDloR0dmaE9hdmN4Zmh2YUhjaWZnSGFkNm1ia2tkbmFzOlpnQ2FMOnRhWTpZZ3dhejpZOnRnOEFOYWs6WmdFYU86WmczOnROYUVhTDp0YXdhUDpZOnRnNU5hM2FDOnROTWc4RUpiYmJiOUJtYmFDYUU6dGE1YThBYTNhTDp0Tk5OYThFOnZhd01od2tkbmRuYU9hUTBtYmFPaGthWWhQeGVrYU9oc2FZaHprZG5kbmFLY2wwbWJkbmF3SmJiYlpNZ3c6bEpiYmI5cDlEVG1iYXc6T2h2eGRrY2pqamo5NGh2eGVrYVBhemZjZDlUaHZrYUtjZWZnS2NzOWhtYmtrZG5kbmRuYWttYkpiYmpaaHdjYmhPY2RodmFEbWV4ZGthbGNkNGFsZmhIY2VoT2luYU9ndmNldGhPYXZhSDZtYmtjYmhPYXFjdWF2Y2R0Z1lhdmNGRkZGaTBFY2J5ZDE6SDpjamJIampqamJiZ0tCZENhcWNpQmQyYXFhbWNieWQxOkg6Y2piSGpqampiYmd6QmRLYXFjbEJkMmRuZG5kbmRuYWxUbWJhUGN1ZjpZaHdhb1RtZWNiaE9haWhBYXhoSGluZG5kbmFvYU9mUmJiY2VHVG1iYU9jampqamxWaFh4ZWtkbmRuYUhjbGZJZGJhd05KYmJiWk1nQzpsSmJiYjlwOURUbWJhQzpPaFh4ZWtjampqajk0aFhrYVhjcXRoWGRuZG5hSGN3ZklkYmF3TkpiYmJaTWdDOmxKYmJiOXA5RFRtYmFDOk9ocnhla2NqampqOTRocmthWGFyVmhYZG5kbmFISWRiYXdOSmJiYlpNZ0M6bEpiYmI5cDlEVG1iYUM6T2hyeGVrY2pqamo5NGhya2FYYXJjQ3RWaFhrYUFhWEJkYmFBY2xmaEFhSGN4ZmhIYWxhT2NlZmdPOWhtYnhpa2thS2NGZWFZejp0ampqYjhBY2JoUGNiaHZ4ZGtheGhPYWloSGFsaEFpbmRuZG5hT0lkYmF3TkpiYmJaTWdDOmxKYmJiOXA5RFRtYmFDOk9oWHhla2NqampqOTRoWGthWGNDdGhYZG5kbmFPY2xmSWRiYXdOSmJiYlpNZ0M6bEpiYmI5cDlEVG1iYUM6T2hyeGVrY2pqamo5NGhya2FyY3F0YVhWaFhkbmRuYU9jd2ZJZGJhd05KYmJiWk1nQzpsSmJiYjlwOURUbWJhQzpPaHJ4ZWtjampqajk0aHJrYUhhWGFyVkJkYmFPY3hmaE9hSGNsZmhIYUFjdWZnQW1ia2thS2NGZWFZejp0ampqYmhyYXZjdWZob2NiaFBjYmhZaW5kbmRuZG5hcmFpYVljZHRnS2Z5ZGJnQWNtNGFBN2M6djt0O2g7RXYyZ3ZjczRhdjdhb0dnSGNkdGZnWHlkYmdPY3VTbWJjZWh2aW5haWFPY2R0Z09meWRiYUFTbWRhSGF2ZmhPYXZjZWZodmFyYU9hb0dnSGNkdGZnWHlkYmdPY3U5aG1ia2thWGFZQmRiYVBodmFQY2VmaFB4ZWthemFPZnlkYmh2a2F6YUtmYXZCZGJhWWNlZmdZYWw5aG1ia2N1YVBjOFMyZ09hUGM7RDtPO2Y4VTBFaHZrY2JoWGFxYXZjYnlkMTpIOmNqYkhqampqYmJndkJkM2FxY3ZCZDJhdmNiYU96OnRqampiaE9kbmFkVG1iYWVoaWluYXhhaWNsZnlkYmdyY3gyZmd2SWRiYXhhaXlkYmdvY3gyZmdISWRiZzM6dGdDYXhhaWN3ZnlkYmdZY3gyZmdBSWRsYUhJZGxnOEE6dGd3TmF2SWRsYThBOnRnRWFBSWRiYTM6dGc4RU46dGdMYUxOYUVhQUlkd2FISWR3ZzU6dGc4Rk5hdklkd2E1OnRnRWF3Tjp0Z3dhd05hRWE4RU5hQ2E4Rk46dGdDYUNOTU1nOEU6cmhFSmJibm5KYmJqWmF6YW9jZHRmeWRiZ3ZhemFyY2R0ZnlkYmdBU2F2YXphWWNkdGZ5ZGJnclNHZ0hFaDhGZG5hOEVKYmJiYjlFVG1iYUxhRTp2aExhQ2FFOnZoQ2F3YUU6dmh3a2FPYXZjOFMyZmd2YXZJZGJhd2E4RmFFOnJOZ0Vhd05OZzhGTVVkYmF2YUNhRWFDTmdhTmdoYXZJZGxNVWRsYXZhTGFFYUxOZzhFTmdnYXZJZHdNVWR3YXZhd2FhTmdhYXZJZHhNVWR4YXZhOEVhd05nOEphdklkek1VZHphdmFDYThFTmc4RWF2SWRDTVVkQ2F2YXdhRWFMYTVOYXdhM05hOEFhQ05NTTptZzhBTmczTmd3YXZJZEtNVWRLYXZhQ2EzTmdDYXZJZDNNVWQzYXZhTGEzTmdMYXZJZGFNVWRhYXZhM2E4QU5nM2F2SWQ4S01VZDhLYXZhRWF2SWR5TVVkeWRuYUhtYmFPYUFjOFMyZmd2YThGYXZJZGJNVWRiYXZhaGF2SWRsTVVkbGF2YWdhdklkd01VZHdhdmFhYXZJZHhNVWR4YXZhOEphdklkek1VZHphdmE4RWF2SWRDTVVkQ2F2YXdhdklkS01VZEthdmFDYXZJZDNNVWQzYXZhTGF2SWRhTVVkYWF2YTNhdklkOEtNVWQ4S2F2YUVhdklkeU1VZHlhT2FyYzhTMmZndmE4RmF2SWRiTVVkYmF2YWhhdklkbE1VZGxhdmFnYXZJZHdNVWR3YXZhYWF2SWR4TVVkeGF2YThKYXZJZHpNVWR6YXZhOEVhdklkQ01VZENhdmF3YXZJZEtNVWRLYXZhQ2F2SWQzTVVkM2F2YUxhdklkYU1VZGFhdmEzYXZJZDhLTVVkOEthdmFFYXZJZHlNVWR5a2FpY3hmaGlhWGNpZmdYYWQ2bWJra2NiaEFhcWN1YVBjZHRndmFQY0ZGRkZpMEVnaWNieWQxOkg6Y2piSGpqampiYmdIQmRhYXFjb0JkMmFxYWljYnlkMTpIOmNqYkhqampqYmJnaUJkOEthcWNyQmQyYUhjRmVhdno6dGpqamJoWWRuYWxUbWJhemhIaW5KYmJiYkpiYmpaYU9hSHlkYmdYYzhTMmZndklkeWd3OnZhd0piYmJiOUJFYXZJZHdheGN3ZklkYmd3TmF2SWR6YXhJZGJnQ05hdklkYU1nTGFMTU1hd05hdklkbGF4Y2xmSWRiZ0xOYXZJZENhd05hdklkM01nd2F3TU1hTE5hdklkYmFDTmF2SWR4YUxOYXZJZEtNZ3dhd01NYUNOYXZJZDhLTU1NOmxOaHdkbmRuYVlhWGNkdGd2ZmdYeWRiY3VTbWJhaWF2ZklkYmF3OUVUbWVrYVhhQUJkYmFpYXZmYXdVZGJrYUhjbGZoSGF4Y3hmaHhhbGFBY2VmZ0E5aG1ia2tkbmRuYVBtYkpiYmJiaHd4ZWtKYmJiYmh3aW5haUlkYmdDYXdhd2FDOURFaHdhaWNsZmhpYVBjdWZnUG1ia2F3OnJod2tha2NkNGFrZmhPY2VoaWluYWlndmNldGhpYXZhTzZtYmtjYmhPYXFjdWF2Y2R0Z2lhdmNGRkZGaTBFY2J5ZDE6SDpjamJIampqamJiZ0hCZHlhSGNGZWFpejp0ampqYmhYZG5hZFRtYmF2Y3VmaHJjYmhQY2JoeGluZG5hemFlYXhjZHRmZ3Z5ZGJjZHRmeWRiZ2lhemF2Y2xmeWRiY2R0ZnlkYmdPU21iYWlhemF2Y3dmeWRiY2R0ZnlkYmd2U21iYU9hdlNtYmFZYXZjZHRmeWRiaEFkbmRuYVlhT2NkdGZ5ZGJndmFZYWljZHRmeWRiZ2k5cG1iYXZhQTlwbWJhQWhsYWlob2F2aEF4ZWtkbmFBYWk5cG1iYUFhdjlwbWJhaWhsYXZob3hla2F2aGxhQWhvYWloQWthYmFQY3gyZmd2YUFCZGJhdmN3ZmFvQmRiYXZjbGZhbEJkYmRuYVhhb2M6M0Y7TjhOMmFsYzpGOmI6REQyN2FBYztEO086QjhKMjdhckdnT2NkdGZndnlkYmdpY3VTbWJjZWhIaW5hSGh2ZG5hYmFpY3gyZmdpeWRiYUE5aG1iYWl5ZGxhbDlobWJhaXlkd2FvU21pa2F2Y2VmaEhhWGFPYXZmYXJHZ09jZHRmZ3Z5ZGJnaWN1OWhtYmtrYXZhUEJkYmFQY2VmaFBrYXhjaWZneGFkNm1ia2FQY2kyaE9rY3dodmFEVG1la2FEYXdVZGJrYXZjZHRodmFxY3hmYzk4ZmhpaW5haWF2ZnlkYmNieWQ6bTpIOmNqYkg6YmpqamJiYXZjOThmZ3ZtYmthcWM7V2JmOEtqampqYmFPazozbGRydWU5OjhKampqamJjO1diOVJncjhLampqamJjYmh3YXJjeGZjYmM7S2J6OnRqampiOEFkbmFiYWVTbWJhYmFlYWRjZHR6TWpqamI4QWthcmN1YWxjZHRhbGNGRkZGaTBFZ0RjYnlkMTpIOmNqYkhqampqYmJncUJkeGFyY2VCZDJhcWNiYWlhbGF2Y2JhcmN4Zno6ZGpqamJjdWFsY3gyYWxjO3Y6UTt2OlFlMEVjYnlkMTpIOmNqYkhqampqYmJoa2FyY3hmYXJ5ZDJneGNkdGZha0JkYmFyYXhjZWZnbUJkMmFrYWlhbGF2Y2JjYno6ZWpqamI4QWFyY3hmYW1jZHRmYURjYnlkMTpIOmNqYkhqampqYmJnaUJkYmFyYXhjZGZndkJkMmFyY3hmYXZjZHRmY3VhaWFsYWVhZGFxejpmampqYmdlY2x0YWVjampqamlHRWNieWQxOkg6Y2piSGpqampiYmdxQmRiYXFhZWFpYWthbHo6Z2pqamJheGNpZmhrZG5hZFRtYmFvYW9OaG9jYmh3YWJobGNiaGVpbmRuYXFhaWFseWRiZ3ZjZHRmeWRiY2R0ZklkYmFvOUVUbWJhbGNsZjhQZGJoUGFiYXdjZHRmZ0RhdkJkYmFEY2xmYVA4M2RiYXdjaWZod2thbGN4ZmhsYWVjaWZnZWFkNm1ia2tkbmFrVG1iYXhjZHRhcmN4ZmZjd2ZobGluYWx5ZGJjYnlkOm06SDpjamJIOmJqampiYmFsYzk4ZmhsYWtjdWZna21ia2thcmM7V2JmOEtqampqYmF3azpXQ29EdWQ5OXZ1ZTk5dnV2OTk4SmpqampiYztXYjlSZ3c4S2pqampiZG5kbmFybWJjYmhEeGVrYXdjeGZjYmM7S2J6OnRqampiOEFhd2N1YWRjeDJhZGM7djpRO3Y6UWUwRWNieWQxOkg6Y2piSGpqampiYmdxQmR4YXdjZUJkMmFxYWVhZGFpY2JjYno6ZWpqamI4QWF3Y3VhZGNkdGFkY0ZGRkZpMEVna2NieWQxOkg6Y2piSGpqampiYmd4QmR6YXdjZEJkMmFkY2Q0YWRmaG1jZWhlaW5hZWdpY2V0aGVhaWFtNm1ia2NiaFBhd2N1YWljZHRnc2FpY0ZGRkZpMEVjYnlkMTpIOmNqYkhqampqYmJnekJkQ2F3Y2lCZDJkbmRuYXI6WmdIOnJKYmJiWk1nTzpsSmJiYjlwOURUbWJhTzpPaGV4ZWtjampqajk0aGVrYWljdWZoQWM6YndoQ2NiaFhhZGhRY2JoTGluYWVhQ2N1ZmdpYWVhaTlpRWFQY2VmYWVhUDlrRWhEZG5kbmFkVG1iYURjdWY6WWhPYXFoaWF4aGVhZGhtaW5kbmRuYWlJZGJhT05KYmJiWk1nSzpsSmJiYjlwOURUbWJhSzpPaFl4ZWtjampqajk0aFlrYVljQ3RoWWRuZG5haWNsZklkYmFPTkpiYmJaTWdLOmxKYmJiOXA5RFRtYmFLOk9oOEF4ZWtjampqajk0aDhBa2E4QWNxdGFZVmhZZG5kbmFpY3dmSWRiYU9OSmJiYlpNZ0s6bEpiYmI5cDlEVG1iYUs6T2g4QXhla2NqampqOTRoOEFrYWVhWWE4QVZCZGJhaWN4ZmhpYWVjbGZoZWFtY3VmZ21tYmthemNGZWFzejp0ampqYmhFY2JoM2NiaDVpbmRuYUVheGE1Y2R0ZnlkYmdZY200YVk3Yzp2O3Q7aDtFdjJnaWNzNGFpN2FBR2dtY2R0Zmc4QXlkYmdlY3VTbWJhZWFZU21iY2VoaWluYUVhbWFpZmFBR2dtY2R0Zmc4QXlkYmdlY3VTbWVhaWNlZmhpYWVhWTlobWJra2E4QWFZQmRiYTNhZWN1U2ZoM2E1Y2VmZzVhZDlobWJ4ZGtrYXpjRmVhc3o6dGpqamI4QWNiaDNrZG5hUTpaZ0thSDp0YUQ6WWdPYUM6WTp0ZzhFTmFYOlpnOEZhMzpaZ2E6dE5hOEZhSDp0YU9hUDpZOnRnaE5hYWFLOnROTWdnSmJiYmI5Qm1iYUthOEY6dGFoYThFYWFhSDp0Tk5OYWc6dmFPTWhPa2FQYURhM2FyMGdpRWhQYVhhM2FpRWhYZG5hM2FyU21iYURhQ2FpRWdDYVA5UmNkOWltYmRuZG5hTGNsMG1iZG5hT0piYmJaTWdPOmxKYmJiOXA5RFRtYmFPOk9oZXhka2NqampqOTRoZXhla2FQYUNmY2Q5VGhla2EzYVFhaUVoUWFMY2VmZ0xjczlobWVra2RuZG5hWG1iY2loaWNiaER4ZWtjYmhpYXdha2NieWQxOkg6Y2piSGpqampiYmc1QmRLYXdjbEJkMmFQY3VmOlloS2RuZG5hZFRtYmFxaGlheGhlYWRobWluZG5kbmFpSWRiYUtOSmJiYlpNZ086bEpiYmI5cDlEVG1iYU86T2hZeGVrY2pqamo5NGhZa2FZY0N0aFlkbmRuYWljbGZJZGJhS05KYmJiWk1nTzpsSmJiYjlwOURUbWJhTzpPaDhBeGVrY2pqamo5NGg4QWthOEFjcXRhWVZoWWRuZG5haWN3ZklkYmFLTkpiYmJaTWdPOmxKYmJiOXA5RFRtYmFPOk9oOEF4ZWtjampqajk0aDhBa2FlYVlhOEFWQmRiYWljeGZoaWFlY2xmaGVhbWN1ZmdtbWJrYXpjRmVhc3o6dGpqamJoRWNiaERjYmgzaW5kbmRuZG5hRWF4YTNjZHRnQ2Z5ZGJnWWNtNGFZN2M6djt0O2g7RXYyZ2ljczRhaTdhQUdnbWNkdGZnOEF5ZGJnZWN1U21iY2VoaWluYXhhZWNkdGdlZnlkYmFZU21kYW1haWZoZWFpY2VmaGlhRWFlYUFHZ21jZHRmZzhBeWRiZ2VjdTlobWJra2E4QWEzQmRiYURoaWFEY2VmaER4ZWthNWFlZnlkYmhpa2E1YUNmYWlCZGJhM2NlZmczYWQ5aG1ia2N1YURjMzJnaWFEYztqOktNO2piMEVoZXhla2F6Y0ZlYXN6OnRqampiOEFjYmhEY2JoZWthd2FlY2J5ZDE6SDpjamJIampqamJiZ2VCZDNhd2N2QmQyYWVjYmFpejp0ampqYmg4QWF2Y2Q0aHhkbmFkVG1iZG5hbFRtYmF4Y2R0aEVhNWhZYXFoZWFsaG1hZGhBaW5hOEFhWXlkYmMzMmZnaWFlSWRiYWlJZGJNVWRiYWlhZWNsZklkYmFpSWRsTVVkbGFpYWVjd2ZJZGJhaUlkd01VZHdhaWFtSWRiYWlJZHhNVWR4YWlhbWNsZklkYmFpSWR6TVVkemFpYW1jd2ZJZGJhaUlkQ01VZENhaWFpSWRLSmJialpNVWRLYVljbGZoWWFlY3hmaGVhbWFFZmhtYUFjdWZnQW1ieGRra2E1aG1hcWhlYWRoWWluYThBYW15ZGJjMzJmZ2lhZUlkYmFpSWRiTVVkYmFpYWVjbGZJZGJhaUlkbE1VZGxhaWFlY3dmSWRiYWlJZHdNVWR3YWlhaUlkeEpiYmJiTVVkeGFpYWlJZHpKYmJiYk1VZHphaWFpSWRDSmJiYmJNVWRDYWlhaUlkS0piYmpaTVVkS2FtY2xmaG1hZWN4ZmhlYVljdWZnWW1ia2tkbmFEVG1iYThBaGlhRGhlaW5haWFpSWRiSmJiYmJKYmJqWmFpY0tmSWRiZ086dmFPSmJiYmI5QkVnT05VZGJhaWNsZmdtYU9hbUlkYk5VZGJhaWN3ZmdtYU9hbUlkYk5VZGJhaWN4ZmdtYU9hbUlkYk5VZGJhaWN6ZmdtYU9hbUlkYk5VZGJhaWNDZmdtYU9hbUlkYk5VZGJhaWMzZmhpYWVjdWZnZW1ia2tjYmhZYXdjdWFEY2R0Z0NhRGNGRkZGaTBFZ2ljYnlkMTpIOmNqYkhqampqYmJnZUJkYWF3Y29CZDJhd2FpY2J5ZDE6SDpjamJIampqamJiZ0VCZDhLYWVjRmVhQ3o6dGpqamJoM2RuYWRUbWJhb0piYmpaSmJialphSzp2YVBjZVNFTmdPYU9OaEtheGNkdGh4YWxoZWluYUthZWM7ODpHOmNqYmFsRWdtSWR3YThBYTV5ZGJnQWMzMmZnaUlkQzp0Z09hT05hbUlkYmFpSWR4OnRnT2FPTmFtSWRsYWlJZHo6dGdPYU9OTU1OYXFjd2ZJZGJhaUlkdzp0Z09hT05hcUlkYmFpSWRiOnRnT2FPTmFxY2xmSWRiYWlJZGw6dGdPYU9OTU1NaE9kbmRuYTNhQWNkdGdpZmdteWRiY3VTbWJhRWFpZklkYmFPOUVUbWVrYW1hWUJkYmFFYWlmYU9VZGJrYTVjbGZoNWFxY3hmaHFhZWF4ZmhlYWRhWWNlZmdZOWhtYmtrYWJhM2FDek1qampiOEFjcmhpa2FpY2R0aGlhd2N4ZmM5OGZoZWluYWVhaWZ5ZGJjYnlkOm06SDpjamJIOmJqampiYmFpYzk4ZmdpbWJra2F3YztXYmY4S2pqampiYURrOlBkaWR1aTk5ZHVjYmhpOEpqampqYmNhOVJnbGNieWQxOkc6Y2piQmRLYWxjYjhQZGo6RzpjamI4M2l6YWxjYnlkTjpHOmNqYkJkd2FsY2I4UGQ6bTpHOmNqYjgzaWJkbmRuYWVtYkpiYmpGaHZKYmJqRmhvSmJiakZocnhla2FkY2Q0Y2R0aHdpbmNiaGRpbmFsY3pmYWRmZ0RhYmFkZklkYmd2YURJZGJnb2FvYXY5RUVVZGJhbGFkZmdEYXZhRElkYmdvYW9hdjlERVVkYmFkY2xmZ2RjeDlobWJrYWJhd2ZoYmFpY2VmZ2lhZTlobWJrYWxJZHdhbElkSzp0aHJhbElkbGFsSWRDOnRob2FsSWRiYWxJZHo6dGh2a0piYmJiYXZhdkpiYmJiOURFZ3Zhb2FvYXY5REVndmFyYXJhdjlERWs5RGVldWFiY0ZlYWljZHR6OnRqampiaGxjYmhiZG5hZFRtYmluZG5hbGFleWRiY2R0ZmdpeWRiY3U5aG1iYWlhYkJkYmFiY2VmaGJrYWVjbGZoZWFkY3VmZ2RtYmtrYWJrO0JpZHF1aTk5OEpqampqYmM7V2I5UmdsOEtqampqYmFsY3hmY2JjO0tiejp0ampqYjhBYWRjZDRhZGZodmNlaG9pbmFvZ3JjZXRob2FyYXY2bWJrYWxjdWFyY2R0Z29hcmNGRkZGaTBFY2J5ZDE6SDpjamJIampqamJiZ3ZCZHhhdmNGZWFvejp0ampqYmh3ZG5hZFRtYmFpY2Q0aERhcmN1ZmhxY2Joa2luZG5kbmF3Y2JhZWFrYUQyY2R0ZmdyeWRsZ2lhaWNqampqOTRTRWdvY0g0YW83YzpGOmI6REQyY2JhcnlkYmd4YXhjampqajk0U0Vnb2NINGFvN2M7RDtPOkI4SjI3Y2Jhcnlkd2dtYW1jampqajk0U0VncmNINGFyN2M6M0Y7TjhOMjdhcUdndmNkdGZncnlkYmdvY3VTbWJhbTo6aFBhaTo6aHNheDo6aHpjZWhpaW5haWhyZG5hZWFvYUQyY2R0ZmdpSWRiYXo5Q21iYWlJZGxhczlDbWJhaUlkd2FQOUJtaWthcmNlZmhpYXdhdmFyZmFxR2d2Y2R0ZmdyeWRiZ29jdTlobWJra2FyYWtCZGJha2hva2FiYWtjZHRmYW9CZGJha2NlZmdrYWQ5aG1ia2thbHlkeGNieWQ6bTpIOmNqYkg6YmpqamJiYWxjO1diZjhLampqamJrOXRlaXVjYmNieWQ6cTpIOmNqYmdlYWJjaWZjOThHZmdiQmQ6cTpIOmNqYmRuZG5hYlpiY3p0Z2Q5bm1iY3VoaWFiYWQ5UmNGRmlmY3o0bmJjdVNtZWthZWhpa2FpaztMZWVldWRuZG5hZWFiVmNpR1RtYmFiaGl4ZWtkbmRuYWRjejlwbWJhYmhpeGVrYWJoaWluYWlhZXlkYkJkYmFpY2xmYWVjbGZ5ZGJCZGJhaWN3ZmFlY3dmeWRiQmRiYWljeGZhZWN4ZnlkYkJkYmFlY3pmaGVhaWN6ZmhpYWRjOVdmZ2RjczBtYmtrYWRjbDZtYmluYWlhZXlkYkJkYmFlY2xmaGVhaWNsZmhpYWRjOThmZ2RjaTBtYmtrZG5hZFRtYmluYWlhZVJiYjg2YmJhaWNlZmhpYWVjZWZoZWFkY3VmZ2RtYmtrYWJrO2FlZWR1ZG5kbmFiY2lHVG1iYWJoaXhla2FlY0ZlR2M6YjpjOmV3MmhsZG5kbmFkY3o5cG1iYWJoaXhla2FiaGlpbmFpYWxCZGJhaWN4ZmFsQmRiYWljd2ZhbEJkYmFpY2xmYWxCZGJhaWN6ZmhpYWRjOVdmZ2RjczBtYmtrYWRjbDZtYmluYWlhbEJkYmFpY2xmaGlhZGM5OGZnZGNpMG1ia2tkbmFkVG1iaW5haWFlODZiYmFpY2VmaGlhZGN1ZmdkbWJra2Fiazl0ZWl1Y2JjYnlkOnE6SDpjamJnZWFiY3JmYzk0R2ZnYkJkOnE6SDpjamJkbmRuYWJaYmN6dGdkOW5tYmN1aGlhYmFkOVJjRkZpZmN6NG5iY3VTbWVrYWVoaWthaWtUZWV1Y2JhYmNieWQ6cTpIOmNqYmdlOVJjaWZjOThHYWVmZ2JCZDpxOkg6Y2piZG5hYlpiY3p0Z2U5bm1iYWJhZTlSY0ZGaWZjejRuYjhBa2trOktlZGJjajpHZGsxZUZGdXVGRnV1RkZ1dUZGdUZGRnVGRkZ1RmJiYmJiYmJiZWJiYmRiYmJiYmJiZWJiYmViYmJkYmJiYmJiYmJiYmJlZWVlZWJlYmJlYmJlYmViYmJlZWJiYmJiYmJiYmJiYmVlZWVlZWJlYmJlZWViZWViYmJiZWJlYmJiYmJiYmJiYmJiYmJiYmJiYzE6SGRreGViYmJkYmJiOkc6cWJiIix0PW5ldyBVaW50OEFycmF5KFszMiwwLDY1LDIsMSwxMDYsMzQsMzMsMywxMjgsMTEsNCwxMyw2NCw2LDI1MywxMCw3LDE1LDExNiwxMjcsNSw4LDEyLDQwLDE2LDE5LDU0LDIwLDksMjcsMjU1LDExMywxNyw0Miw2NywyNCwyMywxNDYsMTQ4LDE4LDE0LDIyLDQ1LDcwLDY5LDU2LDExNCwxMDEsMjEsMjUsNjMsNzUsMTM2LDEwOCwyOCwxMTgsMjksNzMsMTE1XSk7aWYodHlwZW9mIFdlYkFzc2VtYmx5IT0ib2JqZWN0IilyZXR1cm57c3VwcG9ydGVkOiExfTt2YXIgbixvPVdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlKGEoZSkse30pLnRoZW4oZnVuY3Rpb24oXyl7bj1fLmluc3RhbmNlLG4uZXhwb3J0cy5fX3dhc21fY2FsbF9jdG9ycygpfSk7ZnVuY3Rpb24gYShfKXtmb3IodmFyIEU9bmV3IFVpbnQ4QXJyYXkoXy5sZW5ndGgpLHc9MDt3PF8ubGVuZ3RoOysrdyl7dmFyIFI9Xy5jaGFyQ29kZUF0KHcpO0Vbd109Uj45Nj9SLTk3OlI+NjQ/Ui0zOTpSKzR9Zm9yKHZhciBTPTAsdz0wO3c8Xy5sZW5ndGg7Kyt3KUVbUysrXT1FW3ddPDYwP3RbRVt3XV06KEVbd10tNjApKjY0K0VbKyt3XTtyZXR1cm4gRS5idWZmZXIuc2xpY2UoMCxTKX1mdW5jdGlvbiByKF8pe2lmKCFfKXRocm93IG5ldyBFcnJvcigiQXNzZXJ0aW9uIGZhaWxlZCIpfWZ1bmN0aW9uIGkoXyl7cmV0dXJuIG5ldyBVaW50OEFycmF5KF8uYnVmZmVyLF8uYnl0ZU9mZnNldCxfLmJ5dGVMZW5ndGgpfWZ1bmN0aW9uIGYoXyxFLHcsUil7dmFyIFM9bi5leHBvcnRzLnNicmssQz1TKHcqNCksST1TKHcqUio0KSxOPW5ldyBVaW50OEFycmF5KG4uZXhwb3J0cy5tZW1vcnkuYnVmZmVyKTtOLnNldChpKEUpLEkpLF8oQyxJLHcsUio0KSxOPW5ldyBVaW50OEFycmF5KG4uZXhwb3J0cy5tZW1vcnkuYnVmZmVyKTt2YXIgUD1uZXcgVWludDMyQXJyYXkodyk7cmV0dXJuIG5ldyBVaW50OEFycmF5KFAuYnVmZmVyKS5zZXQoTi5zdWJhcnJheShDLEMrdyo0KSksUyhDLVMoMCkpLFB9ZnVuY3Rpb24gZChfLEUsdyl7dmFyIFI9bi5leHBvcnRzLnNicmssUz1SKEUubGVuZ3RoKjQpLEM9Uih3KjQpLEk9bmV3IFVpbnQ4QXJyYXkobi5leHBvcnRzLm1lbW9yeS5idWZmZXIpLE49aShFKTtJLnNldChOLFMpO3ZhciBQPV8oQyxTLEUubGVuZ3RoLHcpO0k9bmV3IFVpbnQ4QXJyYXkobi5leHBvcnRzLm1lbW9yeS5idWZmZXIpO3ZhciBGPW5ldyBVaW50MzJBcnJheSh3KTtuZXcgVWludDhBcnJheShGLmJ1ZmZlcikuc2V0KEkuc3ViYXJyYXkoQyxDK3cqNCkpLE4uc2V0KEkuc3ViYXJyYXkoUyxTK0UubGVuZ3RoKjQpKSxSKFMtUigwKSk7Zm9yKHZhciBBPTA7QTxFLmxlbmd0aDsrK0EpRVtBXT1GW0VbQV1dO3JldHVybltGLFBdfWZ1bmN0aW9uIGMoXyl7Zm9yKHZhciBFPTAsdz0wO3c8Xy5sZW5ndGg7Kyt3KXt2YXIgUj1fW3ddO0U9RTxSP1I6RX1yZXR1cm4gRX1mdW5jdGlvbiB1KF8sRSx3LFIsUyxDLEksTixQKXt2YXIgRj1uLmV4cG9ydHMuc2JyayxBPUYoNCkseD1GKHcqNCksTT1GKFMqQyksdj1GKHcqNCksVT1uZXcgVWludDhBcnJheShuLmV4cG9ydHMubWVtb3J5LmJ1ZmZlcik7VS5zZXQoaShSKSxNKSxVLnNldChpKEUpLHYpO3ZhciB6PV8oeCx2LHcsTSxTLEMsSSxOLFAsQSk7VT1uZXcgVWludDhBcnJheShuLmV4cG9ydHMubWVtb3J5LmJ1ZmZlcik7dmFyIEQ9bmV3IFVpbnQzMkFycmF5KHopO2koRCkuc2V0KFUuc3ViYXJyYXkoeCx4K3oqNCkpO3ZhciBHPW5ldyBGbG9hdDMyQXJyYXkoMSk7cmV0dXJuIGkoRykuc2V0KFUuc3ViYXJyYXkoQSxBKzQpKSxGKEEtRigwKSksW0QsR1swXV19ZnVuY3Rpb24gbChfLEUsdyxSLFMsQyxJLE4sUCxGLEEseCxNKXt2YXIgdj1uLmV4cG9ydHMuc2JyayxVPXYoNCksej12KHcqNCksRD12KFMqQyksRz12KFMqTiksSD12KFAubGVuZ3RoKjQpLE89dih3KjQpLFo9Rj92KFMpOjAsb2U9bmV3IFVpbnQ4QXJyYXkobi5leHBvcnRzLm1lbW9yeS5idWZmZXIpO29lLnNldChpKFIpLEQpLG9lLnNldChpKEkpLEcpLG9lLnNldChpKFApLEgpLG9lLnNldChpKEUpLE8pLEYmJm9lLnNldChpKEYpLFopO3ZhciBjZT1fKHosTyx3LEQsUyxDLEcsTixILFAubGVuZ3RoLFosQSx4LE0sVSk7b2U9bmV3IFVpbnQ4QXJyYXkobi5leHBvcnRzLm1lbW9yeS5idWZmZXIpO3ZhciBmZT1uZXcgVWludDMyQXJyYXkoY2UpO2koZmUpLnNldChvZS5zdWJhcnJheSh6LHorY2UqNCkpO3ZhciBlZT1uZXcgRmxvYXQzMkFycmF5KDEpO3JldHVybiBpKGVlKS5zZXQob2Uuc3ViYXJyYXkoVSxVKzQpKSx2KFUtdigwKSksW2ZlLGVlWzBdXX1mdW5jdGlvbiBoKF8sRSx3LFIsUyxDLEksTixQLEYsQSx4LE0pe3ZhciB2PW4uZXhwb3J0cy5zYnJrLFU9dig0KSx6PXYoUypDKSxEPXYoUypOKSxHPXYoUC5sZW5ndGgqNCksSD12KHcqNCksTz1GP3YoUyk6MCxaPW5ldyBVaW50OEFycmF5KG4uZXhwb3J0cy5tZW1vcnkuYnVmZmVyKTtaLnNldChpKFIpLHopLFouc2V0KGkoSSksRCksWi5zZXQoaShQKSxHKSxaLnNldChpKEUpLEgpLEYmJlouc2V0KGkoRiksTyk7dmFyIG9lPV8oSCx3LHosUyxDLEQsTixHLFAubGVuZ3RoLE8sQSx4LE0sVSk7Wj1uZXcgVWludDhBcnJheShuLmV4cG9ydHMubWVtb3J5LmJ1ZmZlciksaShFKS5zZXQoWi5zdWJhcnJheShILEgrb2UqNCkpLGkoUikuc2V0KFouc3ViYXJyYXkoeix6K1MqQykpLGkoSSkuc2V0KFouc3ViYXJyYXkoRCxEK1MqTikpO3ZhciBjZT1uZXcgRmxvYXQzMkFycmF5KDEpO3JldHVybiBpKGNlKS5zZXQoWi5zdWJhcnJheShVLFUrNCkpLHYoVS12KDApKSxbb2UsY2VbMF1dfWZ1bmN0aW9uIG0oXyxFLHcsUil7dmFyIFM9bi5leHBvcnRzLnNicmssQz1TKHcqUiksST1uZXcgVWludDhBcnJheShuLmV4cG9ydHMubWVtb3J5LmJ1ZmZlcik7SS5zZXQoaShFKSxDKTt2YXIgTj1fKEMsdyxSKTtyZXR1cm4gUyhDLVMoMCkpLE59ZnVuY3Rpb24gYihfLEUsdyxSLFMsQyxJLE4pe3ZhciBQPW4uZXhwb3J0cy5zYnJrLEY9UChOKjQpLEE9UCh3KlIpLHg9UCh3KkMpLE09bmV3IFVpbnQ4QXJyYXkobi5leHBvcnRzLm1lbW9yeS5idWZmZXIpO00uc2V0KGkoRSksQSksUyYmTS5zZXQoaShTKSx4KTt2YXIgdj1fKEYsQSx3LFIseCxDLEksTik7TT1uZXcgVWludDhBcnJheShuLmV4cG9ydHMubWVtb3J5LmJ1ZmZlcik7dmFyIFU9bmV3IFVpbnQzMkFycmF5KHYpO3JldHVybiBpKFUpLnNldChNLnN1YmFycmF5KEYsRit2KjQpKSxQKEYtUCgwKSksVX1mdW5jdGlvbiBwKF8sRSx3LFIsUyxDLEksTixQKXt2YXIgRj1uLmV4cG9ydHMuc2JyayxBPUYoNCkseD1GKHcqNCksTT1GKFMqQyksdj1GKHcqNCksVT1JP0YoUyk6MCx6PW5ldyBVaW50OEFycmF5KG4uZXhwb3J0cy5tZW1vcnkuYnVmZmVyKTt6LnNldChpKFIpLE0pLHouc2V0KGkoRSksdiksSSYmei5zZXQoaShJKSxVKTt2YXIgRD1fKHgsdix3LE0sUyxDLFUsTixQLEEpO3o9bmV3IFVpbnQ4QXJyYXkobi5leHBvcnRzLm1lbW9yeS5idWZmZXIpO3ZhciBHPW5ldyBVaW50MzJBcnJheShEKTtpKEcpLnNldCh6LnN1YmFycmF5KHgseCtEKjQpKTt2YXIgSD1uZXcgRmxvYXQzMkFycmF5KDEpO3JldHVybiBpKEgpLnNldCh6LnN1YmFycmF5KEEsQSs0KSksRihBLUYoMCkpLFtHLEhbMF1dfWZ1bmN0aW9uIHkoXyxFLHcsUixTLEMsSSl7dmFyIE49bi5leHBvcnRzLnNicmssUD1OKHcqNCksRj1OKFMqQyksQT1OKHcqNCkseD1uZXcgVWludDhBcnJheShuLmV4cG9ydHMubWVtb3J5LmJ1ZmZlcik7eC5zZXQoaShSKSxGKSx4LnNldChpKEUpLEEpO3ZhciBNPV8oUCxBLHcsRixTLEMsSSk7eD1uZXcgVWludDhBcnJheShuLmV4cG9ydHMubWVtb3J5LmJ1ZmZlcik7dmFyIHY9bmV3IFVpbnQzMkFycmF5KE0pO3JldHVybiBpKHYpLnNldCh4LnN1YmFycmF5KFAsUCtNKjQpKSxOKFAtTigwKSksdn12YXIgVD17TG9ja0JvcmRlcjoxLFNwYXJzZToyLEVycm9yQWJzb2x1dGU6NCxQcnVuZTo4LFJlZ3VsYXJpemU6MTYsUGVybWlzc2l2ZTozMixfSW50ZXJuYWxEZWJ1ZzoxPDwzMH07cmV0dXJue3JlYWR5Om8sc3VwcG9ydGVkOiEwLGNvbXBhY3RNZXNoOmZ1bmN0aW9uKF8pe3IoXyBpbnN0YW5jZW9mIFVpbnQzMkFycmF5fHxfIGluc3RhbmNlb2YgSW50MzJBcnJheXx8XyBpbnN0YW5jZW9mIFVpbnQxNkFycmF5fHxfIGluc3RhbmNlb2YgSW50MTZBcnJheSkscihfLmxlbmd0aCUzPT0wKTt2YXIgRT1fLkJZVEVTX1BFUl9FTEVNRU5UPT00P186bmV3IFVpbnQzMkFycmF5KF8pO3JldHVybiBkKG4uZXhwb3J0cy5tZXNob3B0X29wdGltaXplVmVydGV4RmV0Y2hSZW1hcCxFLGMoXykrMSl9LGdlbmVyYXRlUG9zaXRpb25SZW1hcDpmdW5jdGlvbihfLEUpe3JldHVybiByKF8gaW5zdGFuY2VvZiBGbG9hdDMyQXJyYXkpLHIoXy5sZW5ndGglRT09MCkscihFPj0zKSxmKG4uZXhwb3J0cy5tZXNob3B0X2dlbmVyYXRlUG9zaXRpb25SZW1hcCxfLF8ubGVuZ3RoL0UsRSl9LHNpbXBsaWZ5OmZ1bmN0aW9uKF8sRSx3LFIsUyxDKXtyKF8gaW5zdGFuY2VvZiBVaW50MzJBcnJheXx8XyBpbnN0YW5jZW9mIEludDMyQXJyYXl8fF8gaW5zdGFuY2VvZiBVaW50MTZBcnJheXx8XyBpbnN0YW5jZW9mIEludDE2QXJyYXkpLHIoXy5sZW5ndGglMz09MCkscihFIGluc3RhbmNlb2YgRmxvYXQzMkFycmF5KSxyKEUubGVuZ3RoJXc9PTApLHIodz49MykscihSPj0wJiZSPD1fLmxlbmd0aCkscihSJTM9PTApLHIoUz49MCk7Zm9yKHZhciBJPTAsTj0wO048KEM/Qy5sZW5ndGg6MCk7KytOKXIoQ1tOXWluIFQpLEl8PVRbQ1tOXV07dmFyIFA9Xy5CWVRFU19QRVJfRUxFTUVOVD09ND9fOm5ldyBVaW50MzJBcnJheShfKSxGPXUobi5leHBvcnRzLm1lc2hvcHRfc2ltcGxpZnksUCxfLmxlbmd0aCxFLEUubGVuZ3RoL3csdyo0LFIsUyxJKTtyZXR1cm4gRlswXT1fIGluc3RhbmNlb2YgVWludDMyQXJyYXk/RlswXTpuZXcgXy5jb25zdHJ1Y3RvcihGWzBdKSxGfSxzaW1wbGlmeVdpdGhBdHRyaWJ1dGVzOmZ1bmN0aW9uKF8sRSx3LFIsUyxDLEksTixQLEYpe3IoXyBpbnN0YW5jZW9mIFVpbnQzMkFycmF5fHxfIGluc3RhbmNlb2YgSW50MzJBcnJheXx8XyBpbnN0YW5jZW9mIFVpbnQxNkFycmF5fHxfIGluc3RhbmNlb2YgSW50MTZBcnJheSkscihfLmxlbmd0aCUzPT0wKSxyKEUgaW5zdGFuY2VvZiBGbG9hdDMyQXJyYXkpLHIoRS5sZW5ndGgldz09MCkscih3Pj0zKSxyKFIgaW5zdGFuY2VvZiBGbG9hdDMyQXJyYXkpLHIoUi5sZW5ndGg9PVMqKEUubGVuZ3RoL3cpKSxyKFM+PTApLHIoST09bnVsbHx8SSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpLHIoST09bnVsbHx8SS5sZW5ndGg9PUUubGVuZ3RoL3cpLHIoTj49MCYmTjw9Xy5sZW5ndGgpLHIoTiUzPT0wKSxyKFA+PTApLHIoQXJyYXkuaXNBcnJheShDKSkscihTPj1DLmxlbmd0aCkscihDLmxlbmd0aDw9MzIpO2Zvcih2YXIgQT0wO0E8Qy5sZW5ndGg7KytBKXIoQ1tBXT49MCk7Zm9yKHZhciB4PTAsQT0wO0E8KEY/Ri5sZW5ndGg6MCk7KytBKXIoRltBXWluIFQpLHh8PVRbRltBXV07dmFyIE09Xy5CWVRFU19QRVJfRUxFTUVOVD09ND9fOm5ldyBVaW50MzJBcnJheShfKSx2PWwobi5leHBvcnRzLm1lc2hvcHRfc2ltcGxpZnlXaXRoQXR0cmlidXRlcyxNLF8ubGVuZ3RoLEUsRS5sZW5ndGgvdyx3KjQsUixTKjQsbmV3IEZsb2F0MzJBcnJheShDKSxJLE4sUCx4KTtyZXR1cm4gdlswXT1fIGluc3RhbmNlb2YgVWludDMyQXJyYXk/dlswXTpuZXcgXy5jb25zdHJ1Y3Rvcih2WzBdKSx2fSxzaW1wbGlmeVdpdGhVcGRhdGU6ZnVuY3Rpb24oXyxFLHcsUixTLEMsSSxOLFAsRil7cihfIGluc3RhbmNlb2YgVWludDMyQXJyYXl8fF8gaW5zdGFuY2VvZiBJbnQzMkFycmF5fHxfIGluc3RhbmNlb2YgVWludDE2QXJyYXl8fF8gaW5zdGFuY2VvZiBJbnQxNkFycmF5KSxyKF8ubGVuZ3RoJTM9PTApLHIoRSBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheSkscihFLmxlbmd0aCV3PT0wKSxyKHc+PTMpLHIoUiBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheSkscihSLmxlbmd0aD09UyooRS5sZW5ndGgvdykpLHIoUz49MCkscihJPT1udWxsfHxJIGluc3RhbmNlb2YgVWludDhBcnJheSkscihJPT1udWxsfHxJLmxlbmd0aD09RS5sZW5ndGgvdykscihOPj0wJiZOPD1fLmxlbmd0aCkscihOJTM9PTApLHIoUD49MCkscihBcnJheS5pc0FycmF5KEMpKSxyKFM+PUMubGVuZ3RoKSxyKEMubGVuZ3RoPD0zMik7Zm9yKHZhciBBPTA7QTxDLmxlbmd0aDsrK0EpcihDW0FdPj0wKTtmb3IodmFyIHg9MCxBPTA7QTwoRj9GLmxlbmd0aDowKTsrK0EpcihGW0FdaW4gVCkseHw9VFtGW0FdXTt2YXIgTT1fLkJZVEVTX1BFUl9FTEVNRU5UPT00P186bmV3IFVpbnQzMkFycmF5KF8pLHY9aChuLmV4cG9ydHMubWVzaG9wdF9zaW1wbGlmeVdpdGhVcGRhdGUsTSxfLmxlbmd0aCxFLEUubGVuZ3RoL3csdyo0LFIsUyo0LG5ldyBGbG9hdDMyQXJyYXkoQyksSSxOLFAseCk7aWYoXyE9PU0pZm9yKHZhciBBPTA7QTx2WzBdOysrQSlfW0FdPU1bQV07cmV0dXJuIHZ9LGdldFNjYWxlOmZ1bmN0aW9uKF8sRSl7cmV0dXJuIHIoXyBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheSkscihfLmxlbmd0aCVFPT0wKSxyKEU+PTMpLG0obi5leHBvcnRzLm1lc2hvcHRfc2ltcGxpZnlTY2FsZSxfLF8ubGVuZ3RoL0UsRSo0KX0sc2ltcGxpZnlQb2ludHM6ZnVuY3Rpb24oXyxFLHcsUixTLEMpe3JldHVybiByKF8gaW5zdGFuY2VvZiBGbG9hdDMyQXJyYXkpLHIoXy5sZW5ndGglRT09MCkscihFPj0zKSxyKHc+PTAmJnc8PV8ubGVuZ3RoL0UpLFI/KHIoUiBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheSkscihSLmxlbmd0aCVTPT0wKSxyKFM+PTMpLHIoXy5sZW5ndGgvRT09Ui5sZW5ndGgvUyksYihuLmV4cG9ydHMubWVzaG9wdF9zaW1wbGlmeVBvaW50cyxfLF8ubGVuZ3RoL0UsRSo0LFIsUyo0LEMsdykpOmIobi5leHBvcnRzLm1lc2hvcHRfc2ltcGxpZnlQb2ludHMsXyxfLmxlbmd0aC9FLEUqNCx2b2lkIDAsMCwwLHcpfSxzaW1wbGlmeVNsb3BweTpmdW5jdGlvbihfLEUsdyxSLFMsQyl7cihfIGluc3RhbmNlb2YgVWludDMyQXJyYXl8fF8gaW5zdGFuY2VvZiBJbnQzMkFycmF5fHxfIGluc3RhbmNlb2YgVWludDE2QXJyYXl8fF8gaW5zdGFuY2VvZiBJbnQxNkFycmF5KSxyKF8ubGVuZ3RoJTM9PTApLHIoRSBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheSkscihFLmxlbmd0aCV3PT0wKSxyKHc+PTMpLHIoUj09bnVsbHx8UiBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpLHIoUj09bnVsbHx8Ui5sZW5ndGg9PUUubGVuZ3RoL3cpLHIoUz49MCYmUzw9Xy5sZW5ndGgpLHIoUyUzPT0wKSxyKEM+PTApO3ZhciBJPV8uQllURVNfUEVSX0VMRU1FTlQ9PTQ/XzpuZXcgVWludDMyQXJyYXkoXyksTj1wKG4uZXhwb3J0cy5tZXNob3B0X3NpbXBsaWZ5U2xvcHB5LEksXy5sZW5ndGgsRSxFLmxlbmd0aC93LHcqNCxSLFMsQyk7cmV0dXJuIE5bMF09XyBpbnN0YW5jZW9mIFVpbnQzMkFycmF5P05bMF06bmV3IF8uY29uc3RydWN0b3IoTlswXSksTn0sc2ltcGxpZnlQcnVuZTpmdW5jdGlvbihfLEUsdyxSKXtyKF8gaW5zdGFuY2VvZiBVaW50MzJBcnJheXx8XyBpbnN0YW5jZW9mIEludDMyQXJyYXl8fF8gaW5zdGFuY2VvZiBVaW50MTZBcnJheXx8XyBpbnN0YW5jZW9mIEludDE2QXJyYXkpLHIoXy5sZW5ndGglMz09MCkscihFIGluc3RhbmNlb2YgRmxvYXQzMkFycmF5KSxyKEUubGVuZ3RoJXc9PTApLHIodz49MykscihSPj0wKTt2YXIgUz1fLkJZVEVTX1BFUl9FTEVNRU5UPT00P186bmV3IFVpbnQzMkFycmF5KF8pLEM9eShuLmV4cG9ydHMubWVzaG9wdF9zaW1wbGlmeVBydW5lLFMsXy5sZW5ndGgsRSxFLmxlbmd0aC93LHcqNCxSKTtyZXR1cm4gQz1fIGluc3RhbmNlb2YgVWludDMyQXJyYXk/QzpuZXcgXy5jb25zdHJ1Y3RvcihDKSxDfX19KSgpfSk7dmFyIGhzZSxTeD1YKCgpPT57aHNlPShmdW5jdGlvbigpe3ZhciBlPSJiOUg3OVRlYmJiZTpuZVA5R2V1ZXU5R2V1YjlHYmI5R2l1dXVldTlHbXV1dXV1dXV1dXV1OTk5OWV1OUdvdXV1dXV1ZXU5R3J1dXV1dXV1YjlHeHV1dXV1dXV1dXV1dWV1OUd4dXV1dXV1dXV1dXU5OWV1OUdQdXV1dXV1dXV1dXV1dTk5YjlHb3V1dXV1dWI5R3d1dXV1dXV1dWI5R3Z1dXV1dWI5R2x1dXV1YmlRWGRpbHZvcndEcW9rb3F4bWJpaWJlaWx2ZTlXZWlpdmllYmVvd2V1ZWNqOkdka3I7WmVxbzlUVzlUOVZWOTVkYkg5RjlGOTM5SDc5VDlGOUo5SDIyOUY5SnQ5VlY3YmI4QTlUVzc5TzlWOVd0OUY5STkxOVAyOUs5blc3OU8yV3Q3OWM5VjkxOVU5S2JlWTlUVzc5TzlWOVd0OUY5STkxOVAyOUs5blc3OU8yV3Q3UzJXOTRiZDM5VFc3OU85VjlXdDlGOUk5MTlQMjlLOW5XNzlPMld0Nzl0OVc5SHQ5UDlIMmJvMzlUVzc5TzlWOVd0OUY5SjlWOVQ5VzkxdFdKMjkxN3RXVjljOVY5MTlVOUs3YnczOVRXNzlPOVY5V3Q5RjlKOVY5VDlXOTF0VzluVzc5TzJXdDljOVY5MTlVOUs3YmtFOVRXNzlPOVY5V3Q5RjlKOVY5VDlXOTF0Vzl0OVc5T1dWVzljOVY5MTlVOUs3YnhMOVRXNzlPOVY5V3Q5RjlWOVd0OVA5VDlQOTZXOW5XNzlPMld0YlBsNzlJVjlSYnNEd2ViY2VrZE9BcTtFOmxlWGRia0liYWJhZWM5OmZnZWZjdWZhZTlVZ2VhYmNpOVVhZGZjdWZhZDlVZ2JhZWFiMEVrOjg4SkRQdWU5OWV1eDk5ZHVlOTlldW85OWl1OEpqampqYmM6V0Q5UmdtOEtqampqYmRuZG5hbG1iY2JoUHhla2FtYzpDd2ZjYmM7S2J6OnJqampiOEFjdWFvY2R0Z3Nhb2NGRkZGaTBFaHpjYnlkOzA6RzpjamJoSGRuZG5hbGNiOWltYmFvYWw5bm1iYW1hemFISGpqampiYmdIQmQ6Q3dhbWNlQmQ7OHdhbWF6Y2J5ZDswOkc6Y2piSGpqampiYmdPQmQ6R3dhbWNkQmQ7OHdhbWN1YWxjZHRhbGNGRkZGaTBFY2J5ZDswOkc6Y2piSGpqampiYmdBQmQ6S3dhbWNpQmQ7OHdhaWh6YWxoc2luYUhhenlkYmNkdGZjYkJkYmF6Y2xmaHphc2N1ZmdzbWJrYWloemFsaHNpbmFIYXp5ZGJjZHRmZ0NhQ3lkYmNlZkJkYmF6Y2xmaHphc2N1ZmdzbWJrYWloemFsaENjYmhYaW5kbmFIYXp5ZGJjZHRnUWZnc3lkYmNiOWltYmFPYVFmYVhCZGJhc2FzeWRiZ1Fjampqajk0VkJkYmFRYVhmaFhrYXpjbGZoemFDY3VmZ0NtYmthbGNpOVVoTGRuYWxjaTZtYmNiaHphaWhzaW5hc2N3ZnlkYmhDYXNjbGZ5ZGJoWGFPYXN5ZGJjZHRmZ1FhUXlkYmdRY2VmQmRiYUFhUWNkdGZhekJkYmFPYVhjZHRmZ1hhWHlkYmdYY2VmQmRiYUFhWGNkdGZhekJkYmFPYUNjZHRmZ0NhQ3lkYmdDY2VmQmRiYUFhQ2NkdGZhekJkYmFzY3hmaHNhTGF6Y2VmZ3o5aG1ia2thaWh6YWxoc2luZG5hSGF6eWRiY2R0Z0NmZ1h5ZGJnUWN1OWttYmFYYVFjRkZGRnJHZ1FCZGJhT2FDZmdDYUN5ZGJhUTlSQmRia2F6Y2xmaHphc2N1ZmdzbWJ4ZGtrYW1hemFISGpqampiYmdIQmQ6Q3dhbWNlQmQ7OHdhbWF6Y2J5ZDswOkc6Y2piSGpqampiYmdPQmQ6R3dhbWNkQmQ7OHdhbWN1YWxjZHRhbGNGRkZGaTBFY2J5ZDswOkc6Y2piSGpqampiYmdBQmQ6S3dhbWNpQmQ7OHdhSGNiYXN6OnJqampiaFhhaWh6YWxoc2luYVhhenlkYmNkdGZnQ2FDeWRiY2VmQmRiYXpjbGZoemFzY3VmZ3NtYmthbGNpOVVoTGRuYW9UbWJjYmh6YU9oc2FYaENhb2hRaW5hc2F6QmRiYXNjbGZoc2FDeWRiYXpmaHphQ2NsZmhDYVFjdWZnUW1ia2tkbmFsY2k2bWJjYmh6YWloc2luYXNjd2Z5ZGJoQ2FzY2xmeWRiaFFhT2FzeWRiY2R0ZmdLYUt5ZGJnS2NlZkJkYmFBYUtjZHRmYXpCZGJhT2FRY2R0ZmdRYVF5ZGJnUWNlZkJkYmFBYVFjZHRmYXpCZGJhT2FDY2R0ZmdDYUN5ZGJnQ2NlZkJkYmFBYUNjZHRmYXpCZGJhc2N4ZmhzYUxhemNlZmd6OWhtYmtrYW9UbWJjYmh6YW9oc2luYU9hemZnQ2FDeWRiYVhhemZ5ZGI5UkJkYmF6Y2xmaHphc2N1ZmdzbWJra2FtYUxjYnlkOzA6RzpjamJIampqamJiZ3pCZDpPd2FtY2xCZDs4d2F6Y2JhTHo6cmpqamJoWWFtY3VhTGNLMmFsY2pqampkMEVjYnlkOzA6RzpjamJIampqamJiZzhBQmQ6U3dhbWN2QmQ7OHdKYmJiYmhFZG5hbGNpNmczbWJhcmNkNGhLYWloc2E4QWh6YUxockpiYmJiaDVpbmF2YXNjbGZ5ZGJhSzJjZHRmZ0NJZGxoOEVhdmFzeWRiYUsyY2R0ZmdYSWRsaEVhdmFzY3dmeWRiYUsyY2R0ZmdRSWRsaDhGYUNJZHdoYWFYSWR3aGhhUUlkd2hnYXphQ0lkYmc4SmFYSWRiZzhLTWFRSWRiZzhMTUpiYm5uOnZVZGJhemNsZmFYSWRsYUNJZGxNYVFJZGxNSmJibm46dlVkYmFRSWR3aDhNYUNJZHdoOE5hWElkd2h5YXpjeGZhOEVhRTp0ZzhFYWdhaDp0Z2dOYWFhaDp0Z2FhOEZhRTp0Z2hOOnRnRUpiYmJiSmJialphOEphOEs6dGc4RmFoTmE4RWE4TGE4Szp0ZzhLTjp0Z2hhaE5hRWFFTmFhYThLTmE4RmFnTjp0Z0VhRU5NTWc4SzpyZzhFOnZhOEtKYmJiYjlCRWc4S05VZGJhemN6ZmFFYThLTlVkYmF6Y0NmYWhhOEtOVWRiYXpjd2ZhOE1heWE4Tk1NSmJibm46dlVkYmE1YThFTWg1YXNjeGZoc2F6Y0tmaHphcmN1ZmdybWJrYTVhTDpaOnZKYmJiWk5oRWthbWN1YUxjZHRhbGNGRkZGOTcwRWNieWQ7MDpHOmNqYkhqampqYmJnQ0JkOld3YW1jb0JkOzh3YXE6WmhoZG5hM21iY2JoemFDaHNpbmFzYXpCZGJhc2NsZmhzYUxhemNlZmd6OWhtYmtrYUVhaE5oaGFtY3VhTGNsdGFsY0ZGRkZkMEVjYnlkOzA6RzpjamJIampqamJiZzhQQmQ6MHdhbWNyQmQ7OHdjYmE4UGE4QWFDYUxjYno6ZGpqamI4QUpGRnV1aDhNSkZGdXVoOE5KRkZ1dWh5ZG5hbGNpNm1iSkZGdXVoeWE4QWh6YUxoc0pGRnV1aDhOSkZGdXVoOE1pbmF6Y3dmSWRiZ0VhOE1hOE1hRTlFRWg4TWF6Y2xmSWRiZ0VhOE5hOE5hRTlFRWg4TmF6SWRiZ0VheWF5YUU5RUVoeWF6Y0tmaHphc2N1ZmdzbWJra2FoOnJoRWFtYW9jZXRnemN1YW9jdTlrRWNieWQ7MDpHOmNqYkhqampqYmJnQ0JkOjR3ZG5kbmFvYWw5bm1iYWloemFsaHNpbmFDYXp5ZGJjZXRmY0ZGaTg3ZWJhemNsZmh6YXNjdWZnc21ieGRra2FDY0ZlYXp6OnJqampiOEFrYUVKYmJiWk5oOEpjdWhJZG5hbGNpNm1iY2Joc0pGRnV1aEVhOEFoemN1aElpbmF6Y3dmSWRiYThNOnRnaGFoTmF6SWRiYXk6dGdoYWhOYXpjbGZJZGJhOE46dGdoYWhOTU06cmdoYUVhSWN1U2FoYUU5RFZnWEVoRWFzYUlhWEVoSWF6Y0tmaHphTGFzY2VmZ3M5aG1ia2thbWN6ZmNiY2p3ejpyampqYjhBYW05Y2I4M2l3YW05Y2I4M2liYXhhOEpOaDhSSmJialphazp0aDhMY2JoOFNKYmJiYmhSSmJiYmJoOFVKYmJiYmg4VkpiYmJiaDhXSmJiYmJoOFhKYmJiYmg4WWNiaDhaY2JoUGluSmJiYmJoRWRuYThTVG1iSmJialphOFM6Wjp2aEVrSmJiYmJoaGRuYThZYThZTmE4V2E4V05hOFhhOFhOTU1nOEtKYmJiYjlCbWJKYmJqWmE4SzpyOnZoaGthOFZhRU5oOEthOFVhRU5oNWFSYUVOaDhFYUloTGRuZG5kbmRuZG5hOFNhUFZUbWJhbXlkd2c4MFRtZWE4WWFoTmg4RmE4WGFoTmhhYThXYWhOaGdhZWFteWRiY2R0Zmg4MWNiaDNKRkZ1dWhFY3ZoUWN1aExpbmRuYUhhODFhM2NkdGZ5ZGJjZHRnemZ5ZGJndlRtYmFBYU9hemZ5ZGJjZHRmaHNpbmRuZG5hQ2FpYXN5ZGJnS2N4MmZnemNsZnlkYmdyY2V0ZjhWZWJjczRhQ2F6eWRiZ1hjZXRmOFZlYmNzNGZhQ2F6Y3dmeWRiZ2xjZXRmOFZlYmNzNGZnb21iY2Joenhla2NlaHphSGFYY2R0ZnlkYmdYY2VTbWJjZWh6YUhhcmNkdGZ5ZGJncmNlU21iY2VoemFIYWxjZHRmeWRiZ2xjZVNtYmRuYXJjZFNhWGNkU2ZhbGNkU2ZjZDZtYmFvY2VmaHp4ZWthb2NkZmh6a2RuYXphUTlrbWJhOEFhS2NLMmZnWElkd2E4Szp0Z2hhaE5hWElkYmE4RTp0Z2hhaE5hWElkbGE1OnRnaGFoTk1NOnJhOEo6dmE4TE5KYmJqWk1KOVZPOmQ4NkpiYmpaYVhJZENhOEZOYVhJZHhhZ05hYWFYSWR6Tk1NYWtOOnRnaGFoSjlWTzpkODY5REVOZ2hhRWF6YVE2YWhhRTlEVmdYRWhFYUthTGFYRWhMYXphUWFYRWhRa2FzY2xmaHNhdmN1Zmd2bWJra2EzY2VmZzNhODA5aG1ia2thTGN1OWhtZWthbWE4S1VkOk9EYW1hNVVkOktEYW1hOEVVZDpHRGFtY3VCZDpxRGFtY0ZGRjs3ckJkakRhOFBjYmE4QWFZYW1jOkdEZmFtYzpxRGZhbWNqRGZ6OmVqampiYW15ZDpxRGhMZG5kbmF4SmJiYmI5RVRtYmE4U2FENm1iYUxjdVNtZWNlaDNhbUlkakRhOFI5RW1peGRrYUxjdTlobWVrZG5hOFNUbWJhYmFQY2x0ZmdIYW04UGl3ODNkd2FIYW04UGliODNkYmFQY2VmaFBrYzNoSGluYW1jOkN3ZmFIZnlkYmNieWQ7NDpHOmNqYkg6YmpqamJiYUhjOThmZ0hjOTg5aG1ieHZra2NiaDNhOFNhcTlwbWJhbXlkd2FDYWlhTGN4MmZnenlkYmNldGY4VmViY3M0YUNhemN3ZnlkYmNldGY4VmViY3M0ZmFDYXpjbGZ5ZGJjZXRmOFZlYmNzNGZmYXc5bm1la2NiaHpjYmhzZG5hOFpUbWJjYmhzYW1jemZoWGluYW1jemZhc2NkdGZhWHlkYmdRQmRiYVhjbGZoWGFzYVlhUWZSYmJUZmhzYThaY3VmZzhabWJra2FteWR3aGxhbXlkYmhYYW05Y3U4M2k6R0RhbTljdTgzaTpPRGFtOWN1ODNpOnFEYW05Y3U4M2k6eURpbmFtY2pEZmF6ZmNGRkY7N3JCZGJhemNsZmd6Y3o5aG1ia2FzYzs4ZWFzY2xmYzpiZDZFZzhaY2R0aDgwZG5hbFRtYmFlYVhjZHRmaG9jYmhyaW5kbmFIYW9hcmNkdGZ5ZGJjZHRnemZ5ZGJndlRtYmFBYU9hemZ5ZGJjZHRmaHNjdWhRY3VoemluYUhhaWFzeWRiZ0tjeDJmZ1hjbGZ5ZGJjZHRmeWRiYUhhWHlkYmNkdGZ5ZGJmYUhhWGN3ZnlkYmNkdGZ5ZGJmZ1hhemFYYXo2Z1hFaHphS2FRYVhFaFFhc2NsZmhzYXZjdWZndm1ia2FRY3VTbWJhOEFhUWNLMmZnc0lkd2E4TTp0Z0VhRU5hc0lkYmF5OnRnRWFFTmFzSWRsYThOOnRnRWFFTk1NOnJoRWNiaHNpbmRuZG5hemFtYzpxRGZhc2ZndnlkYmdYNm1iYXphWDlobWVhRWFtY2pEZmFzZklkYjlGVG1la2F2YXpCZGJhbWM6R0RmYXNmYVFCZGJhbWNqRGZhc2ZhRVVkYnhka2FzY2xmZ3NjejlobWJra2FyY2VmZ3JhbDlobWJra2FtY3pmYTgwZmhRY2JoemNiaHNpbmRuYW1jOkdEZmF6ZnlkYmdYY3VTbWJhUWFzY2R0ZmFYQmRiYXNjZWZoc2themNsZmd6Y3o5aG1ia2FzYThaZmc4WlRtYkpGRnV1aGhjdWhLYW1jemZoemE4Wmh2Y3VoUWluYThBYXp5ZGJnWGNLMmZnc0lkd2E4TTp0Z0VhRU5hc0lkYmF5OnRnRWFFTmFzSWRsYThOOnRnRWFFTk1NOnJoRWRuZG5hSGFpYVhjeDJmZ3NjbGZ5ZGJjZHRmeWRiYUhhc3lkYmNkdGZ5ZGJmYUhhc2N3ZnlkYmNkdGZ5ZGJmZ3NhUTZtYmFzYVE5aG1lYUVhaDlEVG1la2FFaGhhc2hRYVhoS2themNsZmh6YXZjdWZndm1ia2FLY3VTbWJhS2hMa2RuYW1haWFMY3gyZmdyeWRiYXJjbGZ5ZGJhcmN3ZnlkYmFDYWJhZWFkYVBhd2FxYTN6OmZqampiVG1iYVBjZWZoUEpiYmJiaFJKYmJiYmg4VUpiYmJiaDhWSmJiYmJoOFdKYmJiYmg4WEpiYmJiaDhZa2NiaFhpbmFBYU9hcmFYY2R0ZnlkYmNkdGdzZnlkYmNkdGZnS2h6YUhhc2ZndnlkYmdRaHNkbmFRVG1iZG5pbmF6eWRiYUxTbWVhemNsZmh6YXNjdWZnc1RtZHhia2themFLYVFjZHRmYzk4ZnlkYkJkYmF2YXZ5ZGJjdWZCZGJrYVhjZWZnWGNpOWhtYmthOEFhTGNLMmZneklkYmhFYXpJZGxoaGF6SWR3aDhLYXpJZHhoNWF6SWR6aDhFYXpJZENoOEZhWWFMZmNlODZiYmE4WWE4Rk1oOFlhOFhhOEVNaDhYYThXYTVNaDhXYThWYThLTWg4VmE4VWFoTWg4VWFSYUVNaFJhbXlkeGg4U3hia2thbWM6V0RmOEtqampqYmFQa2pvaXZ1djk5bHU4SmpqampiY2E5UmdvOEtqampqYmRuZG5hbGN3MG1iYWl5ZGJocmFlYWJjaXRmZ3dhbGNkdGNpVkJkbGF3YXJCZGJkbmFsY2Q2bWJhaWNsZmhyYWxjdWZoRGF3Y3hmaHdpbmFyeWRiaHFhd2N1QmRiYXdjOThmYXFCZGJhd2N3Zmh3YXJjbGZocmFEY3VmZ0RtYmtrYWxhYmZod3hla2NiaHFhb2NiQmRLYW85Y2I4M2l6YW9jYkJkd2FvOWNiODNpYkpiYmpaaGtKYmJqWmh4aW5hZGFpYXFjZHRmeWRiY0syZmhEY2Jod2luYW9jemZhd2ZncmFEYXdmSWRiZ21hcklkYmdQOnRnc2F4TmFQTWdQVWRiYW9hd2ZncmFzYW1hUDp0TmFySWRiTVVkYmF3Y2xmZ3djeDlobWJrSmJialpha0piYmpaTWdrOnZoeGFxY2VmZ3FhbDlobWJrY2JocmFkY2JjZWNkYW9JZGxnbWFvSWR3Z1A5R0Vnd2FvSWRiZ3NhUDlHRWF3YXNhbTlHRWd6Y2R0Z3dmaEhhb2N6ZmF3ZklkYmhtYWlod2FsaERpbmFpYXJjZHRmZ3F5ZGJoT2FxYXd5ZGJnQUJkYmF3YU9CZGJhd2NsZmh3YXJhSGFBY0syZklkYmFtOURmaHJhRGN1ZmdEbWJrZG5kbmFyY3Y2bWJhdmM4WDlrbWJhcmFsYzk4ZjZtZWthaXlkYmhyYWVhYmNpdGZnd2FsY2R0Y2lWQmRsYXdhckJkYmFpY2xmaHJhbGN1ZmhEYXdjeGZod2luYXJ5ZGJocWF3Y3VCZGJhd2M5OGZhcUJkYmF3Y3dmaHdhcmNsZmhyYURjdWZnRG1ia2FsYWJmaHd4ZWthZWFiY2l0Zmd3YW1VZGJhd2F3eWRsYzk4R2F6VkJkbGFiY2VmYWVhZGFpYXJhdmNlZmdxejpkampqYmhEYXdhd3lkbGNpR2FEYWJjdTdmY2R0VkJkbGFEYWVhZGFpYXJjZHRmYWxhcjlSYXF6OmRqampiaHdrYW9jYWY4S2pqampiYXdrO09kZHZ1ZTk5ZG5pbmFiYWVjaXRmZ3J5ZGxnd2NkNGdEVG1lZG5hd2NpR2dxY2k5aG1iY2locWRuYXdjbDZtYmFiYWVjaXRmaGJjYmhlYXdocWNlaGtpbmRuYWlhYnlkYmdEZlJiYm1iY2Joa2FkYURjSzJmZ3dJZHdhbElkdzp0Z3hheE5hd0lkYmFsSWRiOnRneGF4TmF3SWRsYWxJZGw6dGd4YXhOTU06cmd4YW9JZGI5RFRtYmFvYXhVZGJhdmFEQmRiYXJ5ZGxocWthYmN3ZmhiYWVjZWZnZWFxY2Q0Nm1ia2FrY2VHVG1pa2FyYXFjaUdCZGxza2RuYWJjYmFEYWxhcWNkdGZJZGJhcklkYjp0Z3hKYmJiYjlGRWd3YUQ3YWVjZWZnRGZnZWNpdGZ5ZGxhYmF3YURmZ0RjaXRmeWRsVmNpMG1iYXJhcUJkbGthYmFEYWRhaWFsYXZhb3o6ZWpqamJheDpsYW9JZGI5Rm1ia2tramxldnVkbmRuYWJ5ZHdneGFsYWRjZXRmZ204VmViY3M0YWxhZWNldGZnUDhWZWJnc2NzNGZhbGFpY2V0Zmd6OFZlYmNzNGZmYUQwbWJha21iY2JoRGFieWR4YXE2bWVrYXZhd2NsdGZneGFiOFBkdzgzZHdheGFiOFBkYjgzZGJhYnlkYmhEZG5hYnlkd2d3VG1iYW9hRGNkdGZoeGF3aHNpbmFsYXh5ZGJjZXRmY0ZGaTg3ZWJheGNsZmh4YXNjdWZnc21ia2thYmFEYXdmQmRiYWJ5ZHhoeGFiOWNiODNkd2FiYWJ5ZGxheGNpMmZCZGxhUDhWZWJoc2NlaERjYmh4a2RuYXNjenRjejkxY3U5a21iYWJheGNlZkJkd2FQYXg4N2ViYW9hYnlkYmNkdGZheGNkdGZhZUJkYmtkbmFtOFVlYmN1OWttYmFiYWJ5ZHdneGNlZkJkd2FtYXg4N2ViYW9hYnlkYmNkdGZheGNkdGZhZEJkYmtkbmF6OFVlYmN1OWttYmFiYWJ5ZHdneGNlZkJkd2F6YXg4N2ViYW9hYnlkYmNkdGZheGNkdGZhaUJkYmthcmFieWRsZmFieWR4Y2kyZmFQUmJiODZiYmFyYWJ5ZGxmYWJ5ZHhjaTJmY2VmYW1SYmI4NmJiYXJhYnlkbGZhYnlkeGNpMmZjZGZhelJiYjg2YmJhYmFieWR4Y2VmQmR4YURrOm1Qckh1ZTk5ZXVlOTlldWU5OWl1OEpqampqYmM7VztHYjlSZ3g4S2pqampiZG5kbmFsbWJjYmhteGVrY2JoUGF4YzptO0diZmNiYztLYno6cmpqamI4QWF4Y3VhbGNpOVVnc2NsdGFzY2pqamppR0VjYnlkOzA6RzpjamJIampqamJiZ3pCZDptOUdheGNlQmQ7UzlHYXhjdWFzY0syZ0hjS2ZhbGNwRkZGZTBFY2J5ZDswOkc6Y2piSGpqampiYmdPQmQ6cTlHYXhjZEJkO1M5R2RuYWxjaTZnQW1iYXJjZDRoQ2FzY2R0aFhhT2hRYXpoTGluYXZhaWFQY3gyZmdyeWR3YUMyY2R0ZmhLYXZhcnlkbGFDMmNkdGZoWWF2YXJ5ZGJhQzJjZHRmaDhBY2JocmFMaEVpbmFRYXJmZ21hOEFhcmZnM0lkYmc1YVlhcmZnOEVJZGJnOEZhNWE4RjlERWc1VWRiYW1hS2FyZmdhSWRiZzhGYTVhOEZhNTlERWc4RlVkYmFtY3hmZ21hM0lkYmc1YThFSWRiZ2hhNWFoOUVFZzVVZGJhbWFhSWRiZ2hhNWFoYTU5RUVnNVVkYmFFYThGYTVNSmJiYlpOVWRiYUVhWGZoRWFyY2xmZ3JjeDlobWJrYVFjS2ZoUWFMY2xmaExhUGNlZmdQYXM5aG1ia2thT2FIZmdyOWNiODNkYmFyOWNiODNkemFyOWNiODNkd2F4Y3Vhc2N4MmdyYWxjOmJqampsMEVjYnlkOzA6RzpjamJIampqamJiZ0hCZE45R2F4Y2lCZDtTOUdhc2NkdGhnYXphcmZodmF4Y3dWaFBheGNsVmhDYUhoOEphemg4S2NiaExpbmF4Y2JjajtHYno6cmpqamJoRWFMYXMyY2R0aGFkbmFBbWJhOEtocmFzaDNpbmFFYXJ5ZGJnbWM4RjkxY2pqamo5NFZhbTdnbWNRNGN4MmZnOEVhOEV5ZHdjZWZCZHdhRWFtY2Q0Y0ZyR2N4MmZnOEVhOEV5ZGJjZWZCZGJhRWFtY3g0Y0ZyR2N4MmZnbWFteWRsY2VmQmRsYXJjbGZocmEzY3VmZzNtYmtrYXphYWZoOEFhSGFhZmhYY2JobWNiaDNjYmg4RWNiaGFpbmFFYW1mZ3J5ZGJoUWFyYTNCZGJhcmN3ZmdLeWRiaFlhS2FhQmRiYXJjbGZncnlkYmhLYXJhOEVCZGJhUWEzZmgzYVlhYWZoYWFLYThFZmg4RWFtY3hmZ21jajtHYjlobWJrZG5hQW1iY2JocmF2aG1pbmFtYXJCZGJhbWNsZmhtYXNhcmNlZmdyOWhtYmthdmhyYXNobWluYUVhOEFhcnlkYmczY2R0ZnlkYmc4RWM4RjkxYThFN2NkNGNGckdjeDJmZzhFYThFeWRiZzhFY2VmQmRiYVhhOEVjZHRmYTNCZGJhcmNsZmhyYW1jdWZnbW1ia2E4SmhyYXNobWluYUNhOEFhcnlkYmczY2R0ZnlkYmc4RWM4RjkxYThFN2N4NGNGckdjeDJmZzhFYThFeWRiZzhFY2VmQmRiYXZhOEVjZHRmYTNCZGJhcmNsZmhyYW1jdWZnbW1ia2F2aHJhc2htaW5hUGE4QWFyeWRiZzNjZHRmeWRiZzhFYzhGOTFjampqajk0VmE4RTdjUTRjeDJmZzhFYThFeWRiZzhFY2VmQmRiYVhhOEVjZHRmYTNCZGJhcmNsZmhyYW1jdWZnbW1ia2thOEphZ2ZoOEphOEthZ2ZoOEthTGNlZmdMY2k5aG1ia2FFYW9jZXRncmN1YW9jdTlrRWNieWQ7MDpHOmNqYkhqampqYmJnS0JkOnk5R2FFY2xCZDtTOUdkbmRuYW9hbDlubWJhaWhyYWxobWluYUthcnlkYmNldGZjRkZpODdlYmFyY2xmaHJhbWN1ZmdtbWJ4ZGtrYUtjRmVhcno6cmpqamI4QWtjYmg4RWFFYXNjYnlkOzA6RzpjamJIampqamJiZzhBQmQ6QzlHYU9hSGFIYXNjZHRmYUhhc2NpdGZhOEFhc2NiYXphS2FpYXdhRGFxYWt6OmhqampiZG5kbmFsY2k2bWJhOEFocmFzaG1pbmE4RWFyUmJiZmg4RWFyY2VmaHJhbWN1ZmdtbWJrYUU5Y2I4M2l3YUU5Y2I4M2liYWxhd2M5OmZncmZjdWZhcjlVZ3Jhc2FEZmN1ZmFEOVVnbWFyYW0wRWhZY2JobWNiaHJhOEVoYWluY2JoM2RuYXJUbWJhOEFhcmZSYmJjZVNoM2thbWFFYWlhSHlkYmN4MmZnUXlkYmFRY2xmeWRiYVFjd2Z5ZGJhS2FiYWVhZGFtYXdhcWEzYTNjZTdhOEVhWTluVmFhYW1mYVk2Vkd6OmZqampiZmhtYUhjbGZoSGFhYThBYXJmUmJiOVJoYWFzYXJjZWZncjlobWJrYUV5ZHhUbWVhYmFtY2x0ZmdyYUU4UGl3ODNkd2FyYUU4UGliODNkYmFtY2VmaG14ZWthRTljYjgzaXdhRTljYjgzaWJjYmhta2N6aHJpbmFFYzptO0diZmFyZnlkYmNieWQ7NDpHOmNqYkg6YmpqamJiYXJjOThmZ3JjOTg5aG1ia2theGM7VztHYmY4S2pqampiYW1rOndLRFF1ZTk5aXVlOTlpdWw5OmV1dzk5aXU4SmpqampiYztxYjlSZ1A4S2pqampiYXhoc2F4aHpkbmRuYXZheDBnSG1iZG5hdlRtYmNiaE9hZWh6YXZoQWluYXdhRGF6eWRiY3gyZmdDY3dmeWRiY2V0ZmdYOFZlYmhRYXdhQ2NsZnlkYmNldGZnTDhWZWJoS2F3YUN5ZGJjZXRmZ0M4VmViaFlhWGNlODdlYmFMY2U4N2ViYUNjZTg3ZWJhT2FLY3M0YVljczRmYVFjczRmZmhPYXpjbGZoemFBY3VmZ0FtYmthZWh6YXZoQWluYXdhRGF6eWRiY3gyZmdDY3dmeWRiY2V0ZmNGRmk4N2ViYXdhQ2NsZnlkYmNldGZjRkZpODdlYmF3YUN5ZGJjZXRmY0ZGaTg3ZWJhemNsZmh6YUFjdWZnQW1ia2NlaHphcWhzYU9hcTBtZWthbGNlODZiYmFsY2VmY2JhdmN1Zno6cmpqamI4QXhla2FQYWlCZHhhUGFkQmR3YVBhZUJkbGF2YWthcWNpOVVnOEFha2E4QWFrNkVhSEVnSzlSaEVheGFLOVJoM2FLY3VmaDVhS2NldGg4RWFLY2R0Z0NjOThmaDhGYXZjaXRnT2FDOVJhcmZjOThmaGFhc2N1ZmhoYXZjdWZoZ2FyYU9maDhKSmJialphczpZOnZoOEtjYmF6Y2Vha2F4U0VnOExjZHRnOE05Umg4TkpGRnV1aHljdWg4UGNiaEljYmg4UmluYVBjbGZhOFJjZHRmeWRiaFFhUGNiOFBkOnk6RzpjamJnOFM4M2k5aWFQY2I4UGQ6cTpHOmNqYmdSODNpbmFQY2I4UGQxOkc6Y2piZzhVODNpVWFQY2I4UGRqOkc6Y2piZzhWODNpOFdhUGE4UzgzaXlhUGFSODNpYWFQYThVODNpS2FQYThWODNpemFRYXZjZHRnWWZoOFdjYmhYaW5hYmFRYVhjZHRnTGZ5ZGJjSzJmaEFjYmh6aW5hUGM4V2ZhemZnQ2FBYXpmZ09JZGJnOFhhQ0lkYmc4WWE4WGE4WTlERVVkYmFDY3pmZ0NhT2N4ZklkYmc4WGFDSWRiZzhZYThYYThZOUVFVWRiYXpjbGZnemN4OWhtYmthYmE4V2FYY3U3Y2R0ZnlkYmNLMmZoQWNiaHphUElkVWg4WmFQSWQ5aWg4MGFQSWQ4MGg4MWFQSWQ5ZWhCYVBJZDhXaDgzYVBJZG5oVWluYVBjemZhemZnQ2FBYXpmZ09JZGJnOFhhQ0lkYmc4WWE4WGE4WTlERVVkYmFDY3pmZ0NhT2N4ZklkYmc4WGFDSWRiZzhZYThYYThZOUVFVWRiYXpjbGZnemN4OWhtYmthcmFMZmd6YUJhODE6dGc4WGE4MGE4Wjp0ZzhZTmFVYTgzOnRnOFphOFhOYThaYThZTk1NVWRiYXphWWZhUElkOEthUElkQzp0ZzhYYVBJZHlhUElkSzp0ZzhZTmFQSWRhYVBJZHo6dGc4WmE4WE5hOFphOFlOTU1VZGJhWGNlZmdYYXY5aG1ia2NiaDg1ZG5hSG1iY2JoQWFRaHphOEpoQ2F2aFhpbmF3YURhenlkYmN4MmZnT2N3ZnlkYmNldGZnTDhWZWJoOFdhd2FPY2xmeWRiY2V0Zmc4NThWZWJoODZhd2FPeWRiY2V0ZmdPOFZlYmg4N2FMY2U4N2ViYTg1Y2U4N2ViYU9jZTg3ZWJhQ2FBYTg2Y3M0YTg3Y3M0ZmE4V2NzNGZmZ0FCZGJhemNsZmh6YUNjbGZoQ2FYY3VmZ1htYmthdmhDaW5hd2FEYVF5ZGJjeDJmZ3pjd2Z5ZGJjZXRmY0ZGaTg3ZWJhd2F6Y2xmeWRiY2V0ZmNGRmk4N2ViYXdhenlkYmNldGZjRkZpODdlYmFRY2xmaFFhQ2N1ZmdDbWJrYThKaDg1a2RuZG5kbmRuZG5kbmRuZG5kbmRuZG5hdmE4RTZtYmE4RWF4OW5tZWF2YXZhSzlVZ3phSzI5UmF6YTMyMG1kYTVhRTlwbXFhODVUaDg3Y2VoOFdhRWhReHdrYTVhZzlwbURhOEVheDlubWl4b2thdmFLNm1lYTVhRTlwbXdjZWhRYUVoWGE4NVRtaXhsa2E1YWc2bWx4cmthNWFnOXBtb2tjYmhRYWdoWGE4NW1la0pGRnV1aDhYY2JoTGE1aHppbmRuYXpjZWZnQ2FLNm1iYVFhdmFDOVJnT2FLNkdtYmFyYXpjZHRmSWRiZzhZYUM6WU5hcmF2YXo5UmNkdGZhWWZjOTRmSWRiZzhaYU86WU5NZzgwYThYOUVtYmRuZG5hOEthT2FoZjpZTmc4MTpsSmJiYjlwOURUbWJhODE6T2hBeGVrY2pqamo5NGhBa2E4WmFzYUEyYU85UjpZTmg4WmRuZG5hOEthemFzZjpZTmc4MTpsSmJiYjlwOURUbWJhODE6T2hPeGVrY2pqamo5NGhPa2FtYXNhTzJhQzlSOllhOFlOYThaTU5hODBNZzhZYThYYThZYThYOURnT0VoOFhhQ2FMYU9FaExrYXphOExmZ3phWDZtYnhsa2tKRkZ1dWg4WGNiaExhRWhDYWFoQWE4RmhPYUtoemluZG5hemFLNm1iYVFhQ2FLNkdtYmFyYU9mSWRiZzhZYXo6WU5hQUlkYmc4WmFDOllOTWc4MGE4WDlFbWJkbmRuYThLYTg1YU9meWRiZ1lhaGY6WU5nODE6bEpiYmI5cDlEVG1iYTgxOk9oOFd4ZWtjampqajk0aDhXa2FtYXNhOFcyYVk5UjpZZzgxYThZTmE4WmE4MU5NTmE4ME1nOFlhOFhhOFlhOFg5RGdZRWg4WGF6YUxhWUVoTGthQ2E4TDlSaENhQWE4TmZoQWFPYThNZmhPYXphOExmZ3pjdWZhWDZtYnhpa2thODVUaDg3Y2JoOFdhZ2hRa0pGRnV1aDhYY2JoTGFFaENhYWhBYThGaE9hS2h6aW5kbmF6YXphSzlVZ1hhSzI5UmFYYTMyMG1iZG5hOFdUbWJhQ2FDYUs5VWdYYUsyOVJhWGEzMjBtZWthcmFPZklkYmc4WWF6OllOYUFJZGJnOFphQzpZTk1nODBhOFg5RW1iYXpoWGFDaFlkbmE4N21iYTg1YU9meWRiZ1hoWWtkbmRuYThLYVlhaGY6WU5nODE6bEpiYmI5cDlEVG1iYTgxOk9oODZ4ZWtjampqajk0aDg2a2E4WmFzYTg2MmFZOVI6WU5oOFpkbmRuYThLYVhhaGY6WU5nODE6bEpiYmI5cDlEVG1iYTgxOk9oWXhla2NqampqOTRoWWthbWFzYVkyYVg5UjpZYThZTmE4Wk1OYTgwTWc4WWE4WGE4WWE4WDlEZ1hFaDhYYXphTGFYRWhMa2FDYThMOVJoQ2FBYThOZmhBYU9hOE1maE9hemE4TGZnemN1ZmFRNm1ia2thTFRtYmE4WGF5OURUbWJhOFhoeWFMaElhOFJoOFBrYThSY2VmZzhSY2k5aG1ia2RuZG5hb2M4WDlrbWJhOFBjYjlvbWVrYThBY3VmaDg1Y2JoWWluZG5kbmRuYXZhWTlSYXhhWWF4ZmF2MEVnOFdUbWJjYmhBYWVhWWNkdGZnemhDYThXaFhpbmF3YURhQ3lkYmN4MmZnT2N3ZnlkYmNldGZnUThWZWJoYmF3YU9jbGZ5ZGJjZXRmZ0w4VmViaHJhd2FPeWRiY2V0ZmdPOFZlYmhLYVFjZTg3ZWJhTGNlODdlYmFPY2U4N2ViYUFhcmNzNGFLY3M0ZmFiY3M0ZmZoQWFDY2xmaENhWGN1ZmdYbWJrYThXaE9pbmF3YURhenlkYmN4MmZnQ2N3ZnlkYmNldGZjRkZpODdlYmF3YUNjbGZ5ZGJjZXRmY0ZGaTg3ZWJhd2FDeWRiY2V0ZmNGRmk4N2ViYXpjbGZoemFPY3VmZ09tYmthQWFxMG1la2FsYVlmZ3pjZTg2YmJhemNlZmNiYThXY3VmejpyampqYjhBeGVrYWxhWWZnemNlODZiYmF6Y2VmY2JhODV6OnJqampiOEFhOEFoOFdrYThXYVlmZ1lhdjlwbWR4YmtrYXJhdmNkdGc4V2ZoTGRuYUlUbWJhUGNsZmE4UGNkdGZ5ZGJoemFJaENpbmFMYXp5ZGJmY2I4NmJiYXpjbGZoemFDY3VmZ0NtYmtrZG5hdmFJOW5tYmFQY2xmYThQY2R0ZnlkYmFJY2R0Zmh6YXZhSTlSaENpbmFMYXp5ZGJmY2U4NmJiYXpjbGZoemFDY3VmZ0NtYmtrY2JoWWluZG5hWWE4UFNtYmNiaHphcmFQY2xmYVljZHRmeWRiZ0thOFd6OnFqampiaENhdmhYYUloT2luYUthT2F6YUxhQ3lkYmdRZlJiYmdBRWNkdGZhUUJkYmFDY2xmaENhT2FBZmhPYXphQTlSY2VmaHphWGN1ZmdYbWJra2FZY2VmZ1ljaTlobWJrYWJhZWFkYWlhbGFJYW9jZWZnQ2FyYXdhRGFxYWtheGFtejpoampqYmFiYWVhSWNkdGd6ZmFkYXpmYWlhemZhbGFJZmF2YUk5UmFDYXJhd2FEYXFha2F4YW16Omhqampia2FQYztxYmY4S2pqampiazpTZWVydThKampqamJjOnE7YWI5UmdvOEtqampqYmFvYzpxOFdmY0ZlY2p6ejpyampqYjhBY2JocmRuYWRUbWJhZWh3YWRoRGluYW9hcmNkdGZhd3lkYmdxQmRiYW9jOnE4V2ZhcWNGaUdjZHRmZ2t5ZGJoeGFrYXFCZGJhd2NsZmh3YXJheGFxOWhmaHJhRGN1ZmdEbWJra2FiYWVhZGFvYXJhaWF2ejpqampqYmFvYzpxO2FiZjhLampqamJrO1NxbG91ZDk5ZXVEOTk4SmpqampiYzpXO2FiOVJncjhLampqamJkbmRuYWRUbWJhb2NkNGh3Y2JoRGNiaHFpbmRuYXZhZWNsZnlkYmF3MmNkdGZna0lkYmF2YWV5ZGJhdzJjZHRmZ3hJZGJnbTp0Z1BhdmFlY3dmeWRiYXcyY2R0ZmdzSWRsYXhJZGxnejp0Z0hOYWtJZGxhejp0Z09hc0lkYmFtOnRnQU46dGdDYUNOYU9hc0lkd2F4SWR3Z1g6dGdRTmFrSWR3YVg6dGdPYUhOOnRnSGFITmFPYUFOYVBhUU46dGdQYVBOTU1nT0piYmJiOUJtYmFyYzhXZmFEY2x0ZmdrYUNhTzpyZ086dmdDVWR3YWthUGFPOnZnUFVkbGFrYUhhTzp2Z0hVZGJha2FDYVhOYUhhbU5hemFQTk1NOm1VZHhhRGNlZmhEa2FlY3hmaGVhcWNpZmdxYWQ2bWJrYWI5Y2I4M2R5YWI5Y2I4M2RhYWI5Y2I4M2RLYWI5Y2I4M2R6YWI5Y2I4M2R3YWI5Y2I4M2RiYURUbWVhcmNiQmQ4U2FyOWNiODNpS2FyOWNiODNpemFyY3pmYXZhbGFvYXJjOFNmY2JjcmFpejprampqYmFySWRLaFFhcklkQ2hMYXJJZHpoS2FyOWNiODNpd2FyOWNiODNpYmFyYXJjOFdmYURjemFyYzhTZmNiY2ljYno6a2pqamJKYmJiYmhtZG5hcklkd2d6YXpOYXJJZGJnSGFITmFySWRsZ1hhWE5NTWdDSmJiYmI5Qm1iSmJialphQzpyOnZobWthemFtTmhDYVhhbU5oWGFIYW1OaEhKYmJqWmhtYXJjOFdmaGVhRGh2aW5hZWN3ZklkYmFDTmFlSWRiYUhOYVhhZWNsZklkYk5NTWd6YW1hemFtOURFaG1hZWN6ZmhlYXZjdWZndm1ia2FiYVFVZHdhYmFMVWRsYWJhS1VkYmFiYXJJZDNVZHhkbmRuYW1KO247bTttODk5Rm1iSmJiYmJoemFyYzhXZmhlaW5hZWN4ZklkYmFRYWVjd2ZJZGJnUE5hS2FlSWRiZ09OYUxhZWNsZklkYmdBTk1NTWFDYVBOYUhhT05hWGFBTk1NOnZnUGF6YVBhejlFRWh6YWVjemZoZWFEY3VmZ0RtYmthYmFDVWQ4S2FiYVhVZGFhYmFIVWQzYWJhUWFDYXpOOnRVZEthYmFMYVhhek46dFVkQ2FiYUthSGF6Tjp0VWR6YWJKYmJqWmFtYW1OOnQ6cmdtVWR5ZG5kbmFDSmJiajo7YUNKYmJqOjs5R0VnekpiYmpaYXpKYmJqWjlGRUpiYjs6OWNOSmJiYlpKYmJiOjthQ0piYmJiOUdFTWd6OmxKYmJiOXA5RFRtYmF6Ok9oZXhla2NqampqOTRoZWthYmFlODZiOFVkbmRuYVhKYmJqOjthWEpiYmo6OzlHRWd6SmJialphekpiYmpaOUZFSmJiOzo5Y05KYmJiWkpiYmI6O2FYSmJiYmI5R0VNZ3o6bEpiYmI5cDlEVG1iYXo6T2h2eGVrY2pqamo5NGh2a2FiYXY4NmJSZG5kbmFISmJiajo7YUhKYmJqOjs5R0VnekpiYmpaYXpKYmJqWjlGRUpiYjs6OWNOSmJiYlpKYmJiOjthSEpiYmJiOUdFTWd6OmxKYmJiOXA5RFRtYmF6Ok9od3hla2NqampqOTRod2thYmF3ODZiOFNkbmRuYWVjS3RjSzkxOllKYmI7OjljOnZhQzp0OmxhdmNLdGNLOTE6WUpiYjs6OWM6dmFYOnQ6bGF3Y0t0Y0s5MTpZSmJiOzo5Yzp2YUg6dDpsYW1NTU1KYmI7OjljTkpiYmpaTWdtOmxKYmJiOXA5RFRtYmFtOk9oZXhla2NqampqOTRoZWthZWNGYmFlY0ZiOWlFaGV4ZWthYmNqamo7OGlCZHljRmJoZWthYmFlODZiOFZ4ZWthYjljYjgzZHlhYjljYjgzZGFhYjljYjgzZEthYjljYjgzZHphYjljYjgzZHdhYjljYjgzZGJrYXJjOlc7YWJmOEtqampqYms7N3dvRHVvOTlldWU5OWV1djk5OEpqampqYmNqZTlSZ3c4S2pqampiYXdjO2FiZmNiYW9jZHRnRHo6cmpqamI4QWF3YztHYmZjYmFEejpyampqYjhBYXdjYWZoRGF3aHFhb2hraW5hcWNGRkY5N0JkYmFEY0ZGRjs3ckJkYmFxY2xmaHFhRGNsZmhEYWtjdWZna21ia2F2Y2Q0aHhhaWNkNGhtZG5hZFRtYmFvY3gyaFBjYmhzaW5hc2h6ZG5hclRtYmFyYXNjZHRmeWRiaHprYWVhemFtMmNkdGZnRElkd2hIYURJZGxoT2FESWRiaEFhbGF6YXgyY2R0ZklkYmhDY2JoRGF3Y2FmaHFhd2M7R2JmaHZhd2hrYXdjO2FiZmhpaW5hQ2FEYzpPOkc6Y2piZklkYmFITmFEYzpHOkc6Y2piZklkYmFBTmFEYzpLOkc6Y2piZklkYmFPTk1NZ1hNaFFhemhMZG5hWGFDOnRnWGFxSWRiZ0s5RGdZbWJhdnlkYmhMa2F2YUxCZGJhemhMZG5hUWFrSWRiZzhBOUVtYmFpeWRiaExhOEFoUWthaWFMQmRiYWthUVVkYmFxYVhhS2FZRVVkYmFpY2xmaGlha2NsZmhrYXZjbGZodmFxY2xmaHFhUGFEY3hmZ0Q5aG1ia2FzY2VmZ3NhZDlobWJra0piYmJiaFFjYmhMYXdjO0diZmhEYXdjO2FiZmhxY2Joa2luYWxhcXlkYmd2YXgyY2R0ZklkYmFsYUR5ZGJnaWF4MmNkdGZJZGJhZWF2YW0yY2R0Zmd2SWR3YWVhaWFtMmNkdGZnaUlkdzp0Z0NhQ05hdklkYmFpSWRiOnRnQ2FDTmF2SWRsYWlJZGw6dGdDYUNOTU06ck1NZ0NhUWFDYVE5RWd2RWhRYWthTGF2RWhMYXFjbGZocWFEY2xmaERhb2FrY2VmZ2s5aG1ia0piYmJiaENkbmFlYXdjO2FiZmFMY2R0Z3FmeWRiZ2thbTJjZHRmZ0RJZHdhZWF3YztHYmZhcWZ5ZGJndmFtMmNkdGZncUlkd2dIOnRnWGFYTmFESWRiYXFJZGJnQTp0ZzhBYThBTmFESWRsYXFJZGxnRTp0Z09hT05NTWdLSmJiYmI5RVRtYmFLOnJnQ2FsYWtheDJjZHRmSWRiTWFsYXZheDJjZHRmSWRiOnRhQ2FDTTp2aENrYVFKYmJiWk5oS2FYYUNOYUhNaEhhT2FDTmFFTWhPYThBYUNOYUFNaEFkbmFkVG1iY2JocWFyaGtpbmFxaERkbmFyVG1iYWt5ZGJoRGtkbmFsYURheDJjZHRmSWRiZzNhZWFEYW0yY2R0ZmdESWR3YUg6dGdRYVFOYURJZGJhQTp0Z0NhQ05hRElkbGFPOnRnWGFYTk1NZzU6cmdFTWc4RWFLOUVUbWJKYmJiYmg4QWRuYTVKYmJiYjlFVG1iYThFYUs6dGFFYUVNOnZoOEFrYThBYVFOYUhNaEhhOEFhWE5hT01oT2E4QWFDTmFBTWhBYTNhS2FFTU1KYmJiWk5oS2tha2NsZmhrYWRhcWNlZmdxOWhtYmtrYWJhS1VkeGFiYUhVZHdhYmFPVWRsYWJhQVVkYmF3Y2plZjhLampqamJrOnJlZXZ1OEpqampqYmNqOFc5UmdyOEtqampqYmFpY2kyaHdjYmhEZG5haVRtYmFyaGlhd2hxaW5haWFlYWRSYmJna2NkdGZ5ZGJCZGJhRGFrY2VmZ2thRGFrMEVoRGFpY2xmaGlhZGNlZmhkYXFjdWZncW1ia2thYmFyYXdhZWFEYWxhb3o6ampqamJhcmNqOFdmOEtqampqYms6RWVlZXU4SmpqampiY2E5UmdvOEtqampqYmFiOWNiODNkeWFiOWNiODNkYWFiOWNiODNkS2FiOWNiODNkemFiOWNiODNkd2FiOWNiODNkYmRuYWRUbWJhb2NiQmQzYW85Y2I4M2l3YW85Y2I4M2liYW9hZWFkYWlhbGFvYzNmYWxFYXZjYmFsRWNyY2J6OmtqampiYWJhbzhQaWI4M2RiYWJhbzhQaXc4M2R3a2FvY2FmOEtqampqYms6U21lUXU4SmpqampiY2p6OVJndjhLampqamJjYmhvYXZjalBmY2JhZXo6cmpqamI4QWF2Y2p4ZmNiYWV6OnJqampiOEFkbmFpVG1iYWRob2FpaHJpbmF2Y2p4ZmFvUmJiZmd3YXdSYmJjZWY4NmJiYXZjanhmYW9jZWZSYmJmZ3dhd1JiYmNlZjg2YmJhdmNqeGZhb2NkZlJiYmZnd2F3UmJiY2VmODZiYmFvY2lmaG9hcmN1ZmdybWJrY2JoRGNqZWhvYWRocWNlaGtpbmRuZG5hbFRtYmNiaHhjdWhtYXFocmFraHdjdWhQaW5hd2N1ZmFtYW9hdmNqUGZhcmNlZlJiYmdzZlJiYjlSY0ZlR2d6Y2k2YW9hdmNqUGZhclJiYmdIZlJiYjlSY0ZlR2dPY2k2ZmFvYXZjalBmYXJjZGZSYmJnQWZSYmI5UmNGZUdnQ2NpNmZnWGNPdGFPY0ZyN2F6YUNmOVJjd3RWYXZjanhmYUFmUmJiZ3phdmNqeGZhSGZSYmJnSGF2Y2p4ZmFzZlJiYmdzYUhhczZFZ3NhemFzNkVjRmU3VmdzYVA5a2d6RWhtYVhjZDZnSGF4Y2VmZ09hbDlpVmNlOWhtZGFzYVBhekVoUGF4YU9hSEVoeGFyY2lmaHJhd2FpNmhzYXdjZWZod2FzbWJ4ZGtrY3VobWFxaHJha2h3Y3VoeGluYXdjdWZhbWFvYXZjalBmYXJjZWZSYmJmUmJiOVJjRmVHY2k2YW9hdmNqUGZhclJiYmZSYmI5UmNGZUdjaTZmYW9hdmNqUGZhcmNkZlJiYmZSYmI5UmNGZUdjaTZmZ1BheDlrZ3NFaG1hUGNlMG1lYVBheGFzRWh4YXJjaWZocmF3YWk2aFBhd2NlZmh3YVBtYmtrYWRhbWNpMmZncmNkZlJiYmh3YXJjZWZSYmJoeGFyUmJiaFBhZGFEY2kyZmdyY2lmYXJhbWFEOVJjaTJ6TmpqamI4QWFQYXZjalBmZmFvY2VmZ284NmJiYVBhdmNqeGZmZ21hbVJiYmN1Zjg2YmJheGF2Y2pQZmZhbzg2YmJheGF2Y2p4ZmZnbWFtUmJiY3VmODZiYmFyY2RmYXc4NmJiYXJjZWZheDg2YmJhcmFQODZiYmF3YXZjalBmZmFvODZiYmF3YXZjanhmZmdyYXJSYmJjdWY4NmJiYXFjaWZocWFrY2VmaGthRGNlZmdEYWk5aG1ia2NiaHpkbmFsY2I5bW1iY2Joc2F2Y2pQZmNiYWV6OnJqampiOEFhZGN2ZmhsaW5hZGFzY2kyZmd4Y2VmZ0RSYmJob2F4Y2RmZ3FSYmJocmRuZG5hdmNqUGZheFJiYmdtZlJiYm1iYXZjalBmYXJmUmJiaHdkbmRuZG5hdmNqUGZhb2ZSYmJUbWJhd2NGZUdUbWV4aWthd2NGZUdtZGFzY2VmZ0FhaTlwbWRhc2M5ODBtZGFzY2lmaFFjYmhMYXJjRmVHaENhbWNGZUdoWGFsaHdjYmhLY2JoWWluYXdjdWZSYmJoUGF3UmJiaE9jZWhrZG5kbmF3Yzk6ZlJiYmdIYW85aG1iYVBjRmVHYW1TbWVrZG5hUGNGZUdhbzlobWJhT2NGZUdhbVNtZWthSGFtU2FPY0ZlR2FvU0doa2tjZWg4QWFZY2VHaFlkbmRuYUhhcjlobWJhUGNGZUdhb1NtZWtkbmFQY0ZlR2FyOWhtYmFPY0ZlR2FvU21la2FIYW9TYU9jRmVHYXJTR2g4QWtha2FZVmhZYUxhSGNGZUdnSGFYU2FQY0ZlR2dQYUNTR2FQYVhTYU9jRmVHZ1BhQ1NHVmFIYUNTYVBhWFNHVlZoTGE4QWFLY2VHVmhLZG5hQWNlZmdQYWk5cG1iYXdjaWZod2FBYVE2aEhhUGhBYUhtZWtrYVlUbWVhS21la2FyaHdhb2hQYW9oSGFyaE9hbWhyeGRrYVlUYUxWY2VHbWJhbWh3YXJoUGFyaEhhbWhPYW9ocnhla2FvaHdhbWhQYW1oSGFvaE9rYXZjalBmYXJmY2U4NmJiYXZjalBmYXdmY2U4NmJiYXhhSDg2YmJhcWFyODZiYmFEYU84NmJiYXZjalBmYVBmY2U4NmJiYWxjaWZobGFzY2VmZ3NhaTlobWJra2F2Y0ZlYWVjZXR6OnJqampiaHdhaWNpMmhyaW5kbmF3YWRSYmJnbWNldGZneDhVZWJnb2N1OWttYmF4YXo4N2ViYXdjamxmYXpjZHRmYWJhbWNkdGZ5ZGJCZGJhemhvYXpjZWZoemthZGFvODZiYmFkY2VmaGRhcmN1ZmdybWJrYXpjZHRob2thYmF2Y2psZmFvejpxampqYjhBYXZjanpmOEtqampqYmtPYmFiYWlhZWFkY2J6Om5qampiazl0ZWl1Y2JjYnlkOzg6RzpjamJnZWFiY2lmYzk4R2ZnYkJkOzg6RzpjamJkbmRuYWJaYmN6dGdkOW5tYmN1aGlhYmFkOVJjRkZpZmN6NG5iY3VTbWVrYWVoaWthaWs7TGVlZXVkbmRuYWVhYlZjaUdUbWJhYmhpeGVrZG5kbmFkY3o5cG1iYWJoaXhla2FiaGlpbmFpYWV5ZGJCZGJhaWNsZmFlY2xmeWRiQmRiYWljd2ZhZWN3ZnlkYkJkYmFpY3hmYWVjeGZ5ZGJCZGJhZWN6ZmhlYWljemZoaWFkYzlXZmdkY3MwbWJra2FkY2w2bWJpbmFpYWV5ZGJCZGJhZWNsZmhlYWljbGZoaWFkYzk4ZmdkY2kwbWJra2RuYWRUbWJpbmFpYWVSYmI4NmJiYWljZWZoaWFlY2VmaGVhZGN1ZmdkbWJra2FiazthZWVkdWRuZG5hYmNpR1RtYmFiaGl4ZWthZWNGZUdjOmI6YzpldzJobGRuZG5hZGN6OXBtYmFiaGl4ZWthYmhpaW5haWFsQmRiYWljeGZhbEJkYmFpY3dmYWxCZGJhaWNsZmFsQmRiYWljemZoaWFkYzlXZmdkY3MwbWJra2FkY2w2bWJpbmFpYWxCZGJhaWNsZmhpYWRjOThmZ2RjaTBtYmtrZG5hZFRtYmluYWlhZTg2YmJhaWNlZmhpYWRjdWZnZG1ia2thYms5dGVpdWNiY2J5ZDs4Okc6Y2piZ2VhYmNyZmM5NEdmZ2JCZDs4Okc6Y2piZG5kbmFiWmJjenRnZDlubWJjdWhpYWJhZDlSY0ZGaWZjejRuYmN1U21la2FlaGlrYWlrVGVldWNiYWJjYnlkOzg6RzpjamJnZTlSY2lmYzk4R2FlZmdiQmQ7ODpHOmNqYmRuYWJaYmN6dGdlOW5tYmFiYWU5UmNGRmlmY3o0bmI4QWtrOjNxZWx1ZG5kbmFkY2g2bWJhZFRtZWFiYWVhZDs4cWJiYWJza2FiYWVTbWJkbmFlYWRhYmZnaTlSY2JhZGNldDlSMG1iYWRUbWVhYmFlYWQ7OHFiYmFic2thZWFiN2NpR2hsZG5kbmRuYWJhZTlwbWJkbmFsVG1iYWRodmFiaGl4aWtkbmFiY2lHbWJhZGh2YWJoaXhka2FkVG1pYWJhZVJiYjg2YmJhZGN1Zmh2ZG5hYmNlZmdpY2lHbWJhZWNlZmhleGRrYXZUbWlhYmFlUmJlODZiZWFkYzk6Zmh2ZG5hYmNkZmdpY2lHbWJhZWNkZmhleGRrYXZUbWlhYmFlUmJkODZiZGFkYzk5Zmh2ZG5hYmNpZmdpY2lHbWJhZWNpZmhleGRrYXZUbWlhYmFlUmJpODZiaWFiY2xmaGlhZWNsZmhlYWRjOThmaHZ4ZWtkbmFsbWJkbmFpY2lHVG1iYWRUbWxhYmFkY3VmZ2lmZ2xhZWFpZlJiYjg2YmJkbmFsY2lHbWJhaWhkeGVrYWlUbWxhYmFkYzk6ZmdpZmdsYWVhaWZSYmI4NmJiZG5hbGNpR21iYWloZHhla2FpVG1sYWJhZGM5OWZnaWZnbGFlYWlmUmJiODZiYmRuYWxjaUdtYmFpaGR4ZWthaVRtbGFiYWRjOThmZ2RmYWVhZGZSYmI4NmJia2FkY2w2bWJkbmFkYzk4ZmdvY3hHY3hTbWJhb2NkNGNlZmNpR2hpYWVjOThmaGxhYmM5OGZodmluYXZhZGZhbGFkZnlkYkJkYmFkYzk4ZmhkYWljdWZnaW1ia2thb2N4Nm1iYWVjOVdmaHZhYmM5V2Zob2luYW9hZGZnaWN4ZmF2YWRmZ2xjeGZ5ZGJCZGJhaWN3ZmFsY3dmeWRiQmRiYWljbGZhbGNsZnlkYkJkYmFpYWx5ZGJCZGJhZGM5V2ZnZGNpMG1ia2thZFRtZGFkaGlkbmFkY2lHZ2xUbWJhZWN1Zmh2YWJjdWZob2FkaGlpbmFvYWlmYXZhaWZSYmI4NmJiYWljdWZoaWFsY3VmZ2xtYmtrYWRjbDZtZGFlYzk4ZmhsYWJjOThmaHZpbmF2YWlmZ2VjaWZhbGFpZmdkY2lmUmJiODZiYmFlY2RmYWRjZGZSYmI4NmJiYWVjZWZhZGNlZlJiYjg2YmJhZWFkUmJiODZiYmFpYzk4ZmdpbWJ4aWtrYXZjbDZtYmRuYXZjOThmZ2xjM0djM1NtYmF2YWxjZDRjZWZjckdnZGNkdDlSaHZpbmFpYWV5ZGJCZGJhZWNsZmhlYWljbGZoaWFkY3VmZ2RtYmtrYWxjMzZtYmluYWlhZXlkYkJkYmFpY2xmYWVjbGZ5ZGJCZGJhaWN3ZmFlY3dmeWRiQmRiYWljeGZhZWN4ZnlkYkJkYmFpY3pmYWVjemZ5ZGJCZGJhaWNDZmFlY0NmeWRiQmRiYWljS2ZhZWNLZnlkYkJkYmFpYzNmYWVjM2Z5ZGJCZGJhZWNhZmhlYWljYWZoaWF2YzlHZmd2Y2kwbWJra2F2VG1iZG5kbmF2Y3JHZ2RtYmF2aGx4ZWthdmM5NEdobGluYWlhZVJiYjg2YmJhaWNlZmhpYWVjZWZoZWFkY3VmZ2RtYmtrYXZjdzZtYmluYWlhZVJiYjg2YmJhaWNlZmFlY2VmUmJiODZiYmFpY2RmYWVjZGZSYmI4NmJiYWljaWZhZWNpZlJiYjg2YmJhaWNsZmFlY2xmUmJiODZiYmFpY3ZmYWVjdmZSYmI4NmJiYWljb2ZhZWNvZlJiYjg2YmJhaWNyZmFlY3JmUmJiODZiYmFpY3dmaGlhZWN3ZmhlYWxjOTRmZ2xtYmtrYWJrazpwZWRiY2o6R2RrdEZGdXVGRnV1RkZ1dWJiYmJGRnVGRkZ1RkZGdUZiYmJiYmJqWmJiYmJiYmJiYmJiYmJialpiYmJiYmJiYmJiYmJiYmpaODY7bkFaODY7bkFaODY7bkFaODY7bkE6Ozg2O25BWjg2O25BWjg2O25BWjg2O25BOjs4NjtuQVo4NjtuQVo4NjtuQVo4NjtuQTo7YmM7MDpHZGt4ZWJiYmRiYmJqOnFiYiIsdD1uZXcgVWludDhBcnJheShbMzIsMCw2NSwyLDEsMTA2LDM0LDMzLDMsMTI4LDExLDQsMTMsNjQsNiwyNTMsMTAsNywxNSwxMTYsMTI3LDUsOCwxMiw0MCwxNiwxOSw1NCwyMCw5LDI3LDI1NSwxMTMsMTcsNDIsNjcsMjQsMjMsMTQ2LDE0OCwxOCwxNCwyMiw0NSw3MCw2OSw1NiwxMTQsMTAxLDIxLDI1LDYzLDc1LDEzNiwxMDgsMjgsMTE4LDI5LDczLDExNV0pO2lmKHR5cGVvZiBXZWJBc3NlbWJseSE9Im9iamVjdCIpcmV0dXJue3N1cHBvcnRlZDohMX07dmFyIG4sbz1XZWJBc3NlbWJseS5pbnN0YW50aWF0ZShhKGUpLHt9KS50aGVuKGZ1bmN0aW9uKHApe249cC5pbnN0YW5jZSxuLmV4cG9ydHMuX193YXNtX2NhbGxfY3RvcnMoKX0pO2Z1bmN0aW9uIGEocCl7Zm9yKHZhciB5PW5ldyBVaW50OEFycmF5KHAubGVuZ3RoKSxUPTA7VDxwLmxlbmd0aDsrK1Qpe3ZhciBfPXAuY2hhckNvZGVBdChUKTt5W1RdPV8+OTY/Xy05NzpfPjY0P18tMzk6Xys0fWZvcih2YXIgRT0wLFQ9MDtUPHAubGVuZ3RoOysrVCl5W0UrK109eVtUXTw2MD90W3lbVF1dOih5W1RdLTYwKSo2NCt5WysrVF07cmV0dXJuIHkuYnVmZmVyLnNsaWNlKDAsRSl9ZnVuY3Rpb24gcihwKXtpZighcCl0aHJvdyBuZXcgRXJyb3IoIkFzc2VydGlvbiBmYWlsZWQiKX1mdW5jdGlvbiBpKHApe3JldHVybiBuZXcgVWludDhBcnJheShwLmJ1ZmZlcixwLmJ5dGVPZmZzZXQscC5ieXRlTGVuZ3RoKX12YXIgZj00OCxkPTE2O2Z1bmN0aW9uIGMocCx5KXt2YXIgVD1wLm1lc2hsZXRzW3kqNCswXSxfPXAubWVzaGxldHNbeSo0KzFdLEU9cC5tZXNobGV0c1t5KjQrMl0sdz1wLm1lc2hsZXRzW3kqNCszXTtyZXR1cm57dmVydGljZXM6cC52ZXJ0aWNlcy5zdWJhcnJheShULFQrRSksdHJpYW5nbGVzOnAudHJpYW5nbGVzLnN1YmFycmF5KF8sXyt3KjMpfX1mdW5jdGlvbiB1KHAseSxULF8sRSx3LFIsUyxDLEkpe3ZhciBOPW4uZXhwb3J0cy5zYnJrLFA9bi5leHBvcnRzLm1lc2hvcHRfYnVpbGRNZXNobGV0c0JvdW5kKHkubGVuZ3RoLHcsUiksRj1OKFAqZCksQT1OKHkubGVuZ3RoKjQpLHg9Tih5Lmxlbmd0aCksTT1OKHkuYnl0ZUxlbmd0aCksdj1OKFQuYnl0ZUxlbmd0aCksVT1uZXcgVWludDhBcnJheShuLmV4cG9ydHMubWVtb3J5LmJ1ZmZlcik7VS5zZXQoaSh5KSxNKSxVLnNldChpKFQpLHYpO3ZhciB6PXAoRixBLHgsTSx5Lmxlbmd0aCx2LF8sRSx3LFIsUyxDLEkpO1U9bmV3IFVpbnQ4QXJyYXkobi5leHBvcnRzLm1lbW9yeS5idWZmZXIpO2Zvcih2YXIgRD1VLnN1YmFycmF5KEYsRit6KmQpLEc9bmV3IFVpbnQzMkFycmF5KEQuYnVmZmVyLEQuYnl0ZU9mZnNldCxELmJ5dGVMZW5ndGgvNCkuc2xpY2UoKSxIPTA7SDx6OysrSCl7dmFyIE89R1tIKjQrMF0sWj1HW0gqNCsxXSxfPUdbSCo0KzJdLG9lPUdbSCo0KzNdO24uZXhwb3J0cy5tZXNob3B0X29wdGltaXplTWVzaGxldChBK08qNCx4K1osb2UsXyl9dmFyIGNlPUdbKHotMSkqNCswXSxmZT1HWyh6LTEpKjQrMV0sZWU9R1soei0xKSo0KzJdLGJlPUdbKHotMSkqNCszXSxsZT1jZStlZSxwZT1mZStiZSozLHVlPXttZXNobGV0czpHLHZlcnRpY2VzOm5ldyBVaW50MzJBcnJheShVLmJ1ZmZlcixBLGxlKS5zbGljZSgpLHRyaWFuZ2xlczpuZXcgVWludDhBcnJheShVLmJ1ZmZlcix4LHBlKS5zbGljZSgpLG1lc2hsZXRDb3VudDp6fTtyZXR1cm4gTihGLU4oMCkpLHVlfWZ1bmN0aW9uIGwocCl7dmFyIHk9bmV3IEZsb2F0MzJBcnJheShuLmV4cG9ydHMubWVtb3J5LmJ1ZmZlcixwLGYvNCk7cmV0dXJue2NlbnRlclg6eVswXSxjZW50ZXJZOnlbMV0sY2VudGVyWjp5WzJdLHJhZGl1czp5WzNdLGNvbmVBcGV4WDp5WzRdLGNvbmVBcGV4WTp5WzVdLGNvbmVBcGV4Wjp5WzZdLGNvbmVBeGlzWDp5WzddLGNvbmVBeGlzWTp5WzhdLGNvbmVBeGlzWjp5WzldLGNvbmVDdXRvZmY6eVsxMF19fWZ1bmN0aW9uIGgocCx5LFQsXyl7dmFyIEU9bi5leHBvcnRzLnNicmssdz1bXSxSPUUoeS5ieXRlTGVuZ3RoKSxTPUUocC52ZXJ0aWNlcy5ieXRlTGVuZ3RoKSxDPUUocC50cmlhbmdsZXMuYnl0ZUxlbmd0aCksST1FKGYpLE49bmV3IFVpbnQ4QXJyYXkobi5leHBvcnRzLm1lbW9yeS5idWZmZXIpO04uc2V0KGkoeSksUiksTi5zZXQoaShwLnZlcnRpY2VzKSxTKSxOLnNldChpKHAudHJpYW5nbGVzKSxDKTtmb3IodmFyIFA9MDtQPHAubWVzaGxldENvdW50OysrUCl7dmFyIEY9cC5tZXNobGV0c1tQKjQrMF0sQT1wLm1lc2hsZXRzW1AqNCswKzFdLHg9cC5tZXNobGV0c1tQKjQrMCszXTtuLmV4cG9ydHMubWVzaG9wdF9jb21wdXRlTWVzaGxldEJvdW5kcyhJLFMrRio0LEMrQSx4LFIsVCxfKSx3LnB1c2gobChJKSl9cmV0dXJuIEUoUi1FKDApKSx3fWZ1bmN0aW9uIG0ocCx5LFQsXyl7dmFyIEU9bi5leHBvcnRzLnNicmssdz1FKGYpLFI9RShwLmJ5dGVMZW5ndGgpLFM9RSh5LmJ5dGVMZW5ndGgpLEM9bmV3IFVpbnQ4QXJyYXkobi5leHBvcnRzLm1lbW9yeS5idWZmZXIpO0Muc2V0KGkocCksUiksQy5zZXQoaSh5KSxTKSxuLmV4cG9ydHMubWVzaG9wdF9jb21wdXRlQ2x1c3RlckJvdW5kcyh3LFIscC5sZW5ndGgsUyxULF8pO3ZhciBJPWwodyk7cmV0dXJuIEUody1FKDApKSxJfWZ1bmN0aW9uIGIocCx5LFQsXyxFKXt2YXIgdz1uLmV4cG9ydHMuc2JyayxSPXcoZiksUz13KHAuYnl0ZUxlbmd0aCksQz1fP3coXy5ieXRlTGVuZ3RoKTowLEk9bmV3IFVpbnQ4QXJyYXkobi5leHBvcnRzLm1lbW9yeS5idWZmZXIpO0kuc2V0KGkocCksUyksXyYmSS5zZXQoaShfKSxDKSxuLmV4cG9ydHMubWVzaG9wdF9jb21wdXRlU3BoZXJlQm91bmRzKFIsUyx5LFQsQyxfP0U6MCk7dmFyIE49bChSKTtyZXR1cm4gdyhSLXcoMCkpLE59cmV0dXJue3JlYWR5Om8sc3VwcG9ydGVkOiEwLGJ1aWxkTWVzaGxldHM6ZnVuY3Rpb24ocCx5LFQsXyxFLHcpe3IocC5sZW5ndGglMz09MCkscih5IGluc3RhbmNlb2YgRmxvYXQzMkFycmF5KSxyKHkubGVuZ3RoJVQ9PTApLHIoVD49MykscihfPj0zJiZfPD0yNTYpLHIoRT49MSYmRTw9NTEyKSx3PXd8fDA7dmFyIFI9cC5CWVRFU19QRVJfRUxFTUVOVD09ND9wOm5ldyBVaW50MzJBcnJheShwKTtyZXR1cm4gdShuLmV4cG9ydHMubWVzaG9wdF9idWlsZE1lc2hsZXRzRmxleCxSLHkseS5sZW5ndGgvVCxUKjQsXyxFLEUsdywwKX0sYnVpbGRNZXNobGV0c0ZsZXg6ZnVuY3Rpb24ocCx5LFQsXyxFLHcsUixTKXtyKHAubGVuZ3RoJTM9PTApLHIoeSBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheSkscih5Lmxlbmd0aCVUPT0wKSxyKFQ+PTMpLHIoXz49MyYmXzw9MjU2KSxyKEU+PTEmJnc8PTUxMikscihFPD13KSxSPVJ8fDAsUz1TfHwwO3ZhciBDPXAuQllURVNfUEVSX0VMRU1FTlQ9PTQ/cDpuZXcgVWludDMyQXJyYXkocCk7cmV0dXJuIHUobi5leHBvcnRzLm1lc2hvcHRfYnVpbGRNZXNobGV0c0ZsZXgsQyx5LHkubGVuZ3RoL1QsVCo0LF8sRSx3LFIsUyl9LGJ1aWxkTWVzaGxldHNTcGF0aWFsOmZ1bmN0aW9uKHAseSxULF8sRSx3LFIpe3IocC5sZW5ndGglMz09MCkscih5IGluc3RhbmNlb2YgRmxvYXQzMkFycmF5KSxyKHkubGVuZ3RoJVQ9PTApLHIoVD49MykscihfPj0zJiZfPD0yNTYpLHIoRT49MSYmdzw9NTEyKSxyKEU8PXcpLFI9Unx8MDt2YXIgUz1wLkJZVEVTX1BFUl9FTEVNRU5UPT00P3A6bmV3IFVpbnQzMkFycmF5KHApO3JldHVybiB1KG4uZXhwb3J0cy5tZXNob3B0X2J1aWxkTWVzaGxldHNTcGF0aWFsLFMseSx5Lmxlbmd0aC9ULFQqNCxfLEUsdyxSKX0sZXh0cmFjdE1lc2hsZXQ6ZnVuY3Rpb24ocCx5KXtyZXR1cm4gcih5Pj0wJiZ5PHAubWVzaGxldENvdW50KSxjKHAseSl9LGNvbXB1dGVDbHVzdGVyQm91bmRzOmZ1bmN0aW9uKHAseSxUKXtyKHAubGVuZ3RoJTM9PTApLHIocC5sZW5ndGgvMzw9NTEyKSxyKHkgaW5zdGFuY2VvZiBGbG9hdDMyQXJyYXkpLHIoeS5sZW5ndGglVD09MCkscihUPj0zKTt2YXIgXz1wLkJZVEVTX1BFUl9FTEVNRU5UPT00P3A6bmV3IFVpbnQzMkFycmF5KHApO3JldHVybiBtKF8seSx5Lmxlbmd0aC9ULFQqNCl9LGNvbXB1dGVNZXNobGV0Qm91bmRzOmZ1bmN0aW9uKHAseSxUKXtyZXR1cm4gcihwLm1lc2hsZXRDb3VudCE9MCkscih5IGluc3RhbmNlb2YgRmxvYXQzMkFycmF5KSxyKHkubGVuZ3RoJVQ9PTApLHIoVD49MyksaChwLHkseS5sZW5ndGgvVCxUKjQpfSxjb21wdXRlU3BoZXJlQm91bmRzOmZ1bmN0aW9uKHAseSxULF8pe3JldHVybiByKHAgaW5zdGFuY2VvZiBGbG9hdDMyQXJyYXkpLHIocC5sZW5ndGgleT09MCkscih5Pj0zKSxyKCFUfHxUIGluc3RhbmNlb2YgRmxvYXQzMkFycmF5KSxyKCFUfHxULmxlbmd0aCVfPT0wKSxyKCFUfHxfPj0xKSxyKCFUfHxwLmxlbmd0aC95PT1ULmxlbmd0aC9fKSxfPV98fDAsYihwLHAubGVuZ3RoL3kseSo0LFQsXyo0KX19fSkoKX0pO3ZhciBDeD1YKCgpPT57UngoKTt4eCgpO094KCk7U3goKX0pO3ZhciAkcixNeCxOeD1YKCgpPT57RG4oKTtwbigpOyRyPXtYOjAsWToxLFo6Mn07JHIuWV9VUF9UT19aX1VQPSQuZnJvbVJvdGF0aW9uVHJhbnNsYXRpb24oSi5mcm9tQXJyYXkoWzEsMCwwLDAsMCwxLDAsLTEsMF0pKTskci5aX1VQX1RPX1lfVVA9JC5mcm9tUm90YXRpb25UcmFuc2xhdGlvbihKLmZyb21BcnJheShbMSwwLDAsMCwwLC0xLDAsMSwwXSkpOyRyLlhfVVBfVE9fWl9VUD0kLmZyb21Sb3RhdGlvblRyYW5zbGF0aW9uKEouZnJvbUFycmF5KFswLDAsMSwwLDEsMCwtMSwwLDBdKSk7JHIuWl9VUF9UT19YX1VQPSQuZnJvbVJvdGF0aW9uVHJhbnNsYXRpb24oSi5mcm9tQXJyYXkoWzAsMCwtMSwwLDEsMCwxLDAsMF0pKTskci5YX1VQX1RPX1lfVVA9JC5mcm9tUm90YXRpb25UcmFuc2xhdGlvbihKLmZyb21BcnJheShbMCwxLDAsLTEsMCwwLDAsMCwxXSkpOyRyLllfVVBfVE9fWF9VUD0kLmZyb21Sb3RhdGlvblRyYW5zbGF0aW9uKEouZnJvbUFycmF5KFswLC0xLDAsMSwwLDAsMCwwLDFdKSk7JHIuZnJvbU5hbWU9ZnVuY3Rpb24oZSl7cmV0dXJuICRyW2VdfTtNeD1PYmplY3QuZnJlZXplKCRyKX0pO2Z1bmN0aW9uIHdyKGUsdCl7dGhpcy5fZWxsaXBzb2lkPWUsdGhpcy5fY2FtZXJhUG9zaXRpb249bmV3IHMsdGhpcy5fY2FtZXJhUG9zaXRpb25JblNjYWxlZFNwYWNlPW5ldyBzLHRoaXMuX2Rpc3RhbmNlVG9MaW1iSW5TY2FsZWRTcGFjZVNxdWFyZWQ9MCxnKHQpJiYodGhpcy5jYW1lcmFQb3NpdGlvbj10KX1mdW5jdGlvbiBreChlLHQsbil7aWYoZyh0KSYmdDwwJiZlLm1pbmltdW1SYWRpdXM+LXQpe2xldCBvPXMuZnJvbUVsZW1lbnRzKGUucmFkaWkueCt0LGUucmFkaWkueSt0LGUucmFkaWkueit0LGhVKTtlPXEuZnJvbUNhcnRlc2lhbjMobyxuKX1yZXR1cm4gZX1mdW5jdGlvbiB2eChlLHQsbixvKXtnKG8pfHwobz1uZXcgcyk7bGV0IGE9VXgoZSx0KSxyPTA7Zm9yKGxldCBpPTAsZj1uLmxlbmd0aDtpPGY7KytpKXtsZXQgZD1uW2ldLGM9RHgoZSxkLGEpO2lmKGM8MClyZXR1cm47cj1NYXRoLm1heChyLGMpfXJldHVybiBCeChhLHIsbyl9ZnVuY3Rpb24gRngoZSx0LG4sbyxhLHIpe2cocil8fChyPW5ldyBzKSxvPW8/PzMsYT1hPz9zLlpFUk87bGV0IGk9VXgoZSx0KSxmPTA7Zm9yKGxldCBkPTAsYz1uLmxlbmd0aDtkPGM7ZCs9byl7WmgueD1uW2RdK2EueCxaaC55PW5bZCsxXSthLnksWmguej1uW2QrMl0rYS56O2xldCB1PUR4KGUsWmgsaSk7aWYodTwwKXJldHVybjtmPU1hdGgubWF4KGYsdSl9cmV0dXJuIEJ4KGksZixyKX1mdW5jdGlvbiBPXyhlLHQsbil7bGV0IG89dCxhPW4scj1zLnN1YnRyYWN0KGUsbyxJeCksaT0tcy5kb3QocixvKTtyZXR1cm4hKGE8MD9pPjA6aT5hJiZpKmkvcy5tYWduaXR1ZGVTcXVhcmVkKHIpPmEpfWZ1bmN0aW9uIER4KGUsdCxuKXtsZXQgbz1lLnRyYW5zZm9ybVBvc2l0aW9uVG9TY2FsZWRTcGFjZSh0LG1VKSxhPXMubWFnbml0dWRlU3F1YXJlZChvKSxyPU1hdGguc3FydChhKSxpPXMuZGl2aWRlQnlTY2FsYXIobyxyLGJVKTthPU1hdGgubWF4KDEsYSkscj1NYXRoLm1heCgxLHIpO2xldCBmPXMuZG90KGksbiksZD1zLm1hZ25pdHVkZShzLmNyb3NzKGksbixpKSksYz0xL3IsdT1NYXRoLnNxcnQoYS0xKSpjO3JldHVybiAxLyhmKmMtZCp1KX1mdW5jdGlvbiBCeChlLHQsbil7aWYoISh0PD0wfHx0PT09MS8wfHx0IT09dCkpcmV0dXJuIHMubXVsdGlwbHlCeVNjYWxhcihlLHQsbil9ZnVuY3Rpb24gVXgoZSx0KXtyZXR1cm4gcy5lcXVhbHModCxzLlpFUk8pP3Q6KGUudHJhbnNmb3JtUG9zaXRpb25Ub1NjYWxlZFNwYWNlKHQseF8pLHMubm9ybWFsaXplKHhfLHhfKSl9dmFyIEl4LHVVLFB4LGxVLGhVLFpoLG1VLGJVLHhfLFRyLEdzPVgoKCk9PntNdCgpO0llKCk7c2UoKTtXZSgpO19uKCk7T2JqZWN0LmRlZmluZVByb3BlcnRpZXMod3IucHJvdG90eXBlLHtlbGxpcHNvaWQ6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9lbGxpcHNvaWR9fSxjYW1lcmFQb3NpdGlvbjp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NhbWVyYVBvc2l0aW9ufSxzZXQ6ZnVuY3Rpb24oZSl7bGV0IG49dGhpcy5fZWxsaXBzb2lkLnRyYW5zZm9ybVBvc2l0aW9uVG9TY2FsZWRTcGFjZShlLHRoaXMuX2NhbWVyYVBvc2l0aW9uSW5TY2FsZWRTcGFjZSksbz1zLm1hZ25pdHVkZVNxdWFyZWQobiktMTtzLmNsb25lKGUsdGhpcy5fY2FtZXJhUG9zaXRpb24pLHRoaXMuX2NhbWVyYVBvc2l0aW9uSW5TY2FsZWRTcGFjZT1uLHRoaXMuX2Rpc3RhbmNlVG9MaW1iSW5TY2FsZWRTcGFjZVNxdWFyZWQ9b319fSk7SXg9bmV3IHM7d3IucHJvdG90eXBlLmlzUG9pbnRWaXNpYmxlPWZ1bmN0aW9uKGUpe2xldCBuPXRoaXMuX2VsbGlwc29pZC50cmFuc2Zvcm1Qb3NpdGlvblRvU2NhbGVkU3BhY2UoZSxJeCk7cmV0dXJuIE9fKG4sdGhpcy5fY2FtZXJhUG9zaXRpb25JblNjYWxlZFNwYWNlLHRoaXMuX2Rpc3RhbmNlVG9MaW1iSW5TY2FsZWRTcGFjZVNxdWFyZWQpfTt3ci5wcm90b3R5cGUuaXNTY2FsZWRTcGFjZVBvaW50VmlzaWJsZT1mdW5jdGlvbihlKXtyZXR1cm4gT18oZSx0aGlzLl9jYW1lcmFQb3NpdGlvbkluU2NhbGVkU3BhY2UsdGhpcy5fZGlzdGFuY2VUb0xpbWJJblNjYWxlZFNwYWNlU3F1YXJlZCl9O3VVPW5ldyBzO3dyLnByb3RvdHlwZS5pc1NjYWxlZFNwYWNlUG9pbnRWaXNpYmxlUG9zc2libHlVbmRlckVsbGlwc29pZD1mdW5jdGlvbihlLHQpe2xldCBuPXRoaXMuX2VsbGlwc29pZCxvLGE7cmV0dXJuIGcodCkmJnQ8MCYmbi5taW5pbXVtUmFkaXVzPi10PyhhPXVVLGEueD10aGlzLl9jYW1lcmFQb3NpdGlvbi54LyhuLnJhZGlpLngrdCksYS55PXRoaXMuX2NhbWVyYVBvc2l0aW9uLnkvKG4ucmFkaWkueSt0KSxhLno9dGhpcy5fY2FtZXJhUG9zaXRpb24uei8obi5yYWRpaS56K3QpLG89YS54KmEueCthLnkqYS55K2EueiphLnotMSk6KGE9dGhpcy5fY2FtZXJhUG9zaXRpb25JblNjYWxlZFNwYWNlLG89dGhpcy5fZGlzdGFuY2VUb0xpbWJJblNjYWxlZFNwYWNlU3F1YXJlZCksT18oZSxhLG8pfTt3ci5wcm90b3R5cGUuY29tcHV0ZUhvcml6b25DdWxsaW5nUG9pbnQ9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB2eCh0aGlzLl9lbGxpcHNvaWQsZSx0LG4pfTtQeD1xLmNsb25lKHEuVU5JVF9TUEhFUkUpO3dyLnByb3RvdHlwZS5jb21wdXRlSG9yaXpvbkN1bGxpbmdQb2ludFBvc3NpYmx5VW5kZXJFbGxpcHNvaWQ9ZnVuY3Rpb24oZSx0LG4sbyl7bGV0IGE9a3godGhpcy5fZWxsaXBzb2lkLG4sUHgpO3JldHVybiB2eChhLGUsdCxvKX07d3IucHJvdG90eXBlLmNvbXB1dGVIb3Jpem9uQ3VsbGluZ1BvaW50RnJvbVZlcnRpY2VzPWZ1bmN0aW9uKGUsdCxuLG8sYSl7cmV0dXJuIEZ4KHRoaXMuX2VsbGlwc29pZCxlLHQsbixvLGEpfTt3ci5wcm90b3R5cGUuY29tcHV0ZUhvcml6b25DdWxsaW5nUG9pbnRGcm9tVmVydGljZXNQb3NzaWJseVVuZGVyRWxsaXBzb2lkPWZ1bmN0aW9uKGUsdCxuLG8sYSxyKXtsZXQgaT1reCh0aGlzLl9lbGxpcHNvaWQsYSxQeCk7cmV0dXJuIEZ4KGksZSx0LG4sbyxyKX07bFU9W107d3IucHJvdG90eXBlLmNvbXB1dGVIb3Jpem9uQ3VsbGluZ1BvaW50RnJvbVJlY3RhbmdsZT1mdW5jdGlvbihlLHQsbil7bGV0IG89U2Uuc3Vic2FtcGxlKGUsdCwwLGxVKSxhPWdlLmZyb21Qb2ludHMobyk7aWYoIShzLm1hZ25pdHVkZShhLmNlbnRlcik8LjEqdC5taW5pbXVtUmFkaXVzKSlyZXR1cm4gdGhpcy5jb21wdXRlSG9yaXpvbkN1bGxpbmdQb2ludChhLmNlbnRlcixvLG4pfTtoVT1uZXcgcztaaD1uZXcgczttVT1uZXcgcyxiVT1uZXcgczt4Xz1uZXcgcztUcj13cn0pO3ZhciBRaCxwVSxPYyxTXz1YKCgpPT57SWUoKTtUdCgpO3NlKCk7UWg9e307UWguZ2V0SGVpZ2h0PWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4oZS1uKSp0K259O3BVPW5ldyByZTtRaC5nZXRQb3NpdGlvbj1mdW5jdGlvbihlLHQsbixvLGEpe2xldCByPXQuY2FydGVzaWFuVG9DYXJ0b2dyYXBoaWMoZSxwVSk7aWYoIWcocikpcmV0dXJuIHMuY2xvbmUoZSxhKTtsZXQgaT1RaC5nZXRIZWlnaHQoci5oZWlnaHQsbixvKTtyZXR1cm4gcy5mcm9tUmFkaWFucyhyLmxvbmdpdHVkZSxyLmxhdGl0dWRlLGksdCxhKX07T2M9UWh9KTt2YXIgZ1Usa2EsTHg9WCgoKT0+e2dVPXtOT05FOjAsQklUUzEyOjF9LGthPU9iamVjdC5mcmVlemUoZ1UpfSk7ZnVuY3Rpb24gU28oZSx0LG4sbyxhLHIsaSxmLGQsYyl7bGV0IHU9a2EuTk9ORSxsLGg7aWYoZyh0KSYmZyhuKSYmZyhvKSYmZyhhKSl7bGV0IG09dC5taW5pbXVtLGI9dC5tYXhpbXVtLHA9cy5zdWJ0cmFjdChiLG0sX1UpLHk9by1uO01hdGgubWF4KHMubWF4aW11bUNvbXBvbmVudChwKSx5KTx3VS0xP3U9a2EuQklUUzEyOnU9a2EuTk9ORTtsZXQgXz0kLmZyb21TY2FsZShwLHlVKTtfPSQuc2V0VHJhbnNsYXRpb24oXyxtLF8pO2xldCBFPSQuZnJvbVNjYWxlKHMuZnJvbUVsZW1lbnRzKDEvcC54LDEvcC55LDEvcC56LGhkKSxBVSk7RT0kLm11bHRpcGx5QnlUcmFuc2xhdGlvbihFLHMubmVnYXRlKG0saGQpLEUpLGg9JC5jbG9uZShhLG5ldyAkKTtsZXQgdz0kLmdldFRyYW5zbGF0aW9uKGEsaGQpO3c9cy5zdWJ0cmFjdCh3LGUsaGQpLGg9JC5zZXRUcmFuc2xhdGlvbihoLHcsaCksaD0kLm11bHRpcGx5KGgsXyxoKSxsPSQuaW52ZXJzZVRyYW5zZm9ybWF0aW9uKGEsbmV3ICQpLGw9JC5tdWx0aXBseShFLGwsbCksYT0kLm11bHRpcGx5KGEsXyxuZXcgJCl9dGhpcy5xdWFudGl6YXRpb249dSx0aGlzLm1pbmltdW1IZWlnaHQ9bix0aGlzLm1heGltdW1IZWlnaHQ9byx0aGlzLmNlbnRlcj1zLmNsb25lKGUpLHRoaXMudG9TY2FsZWRFTlU9bCx0aGlzLmZyb21TY2FsZWRFTlU9YSx0aGlzLm1hdHJpeD1oLHRoaXMuaGFzVmVydGV4Tm9ybWFscz1yPz8hMSx0aGlzLmhhc1dlYk1lcmNhdG9yVD1pPz8hMSx0aGlzLmhhc0dlb2RldGljU3VyZmFjZU5vcm1hbHM9Zj8/ITEsdGhpcy5leGFnZ2VyYXRpb249ZD8/MSx0aGlzLmV4YWdnZXJhdGlvblJlbGF0aXZlSGVpZ2h0PWM/PzAsdGhpcy5zdHJpZGU9MCx0aGlzLl9vZmZzZXRHZW9kZXRpY1N1cmZhY2VOb3JtYWw9MCx0aGlzLl9vZmZzZXRWZXJ0ZXhOb3JtYWw9MCx0aGlzLl9jYWxjdWxhdGVTdHJpZGVBbmRPZmZzZXRzKCl9dmFyIGhkLF9VLHZhLHlVLEFVLHdVLFRVLGp4LCRoLGVtLHJhLFZzPVgoKCk9PntVcigpO2p0KCk7SWUoKTt2dCgpO3NlKCk7R2UoKTtwbigpO1NfKCk7THgoKTtoZD1uZXcgcyxfVT1uZXcgcyx2YT1uZXcgWSx5VT1uZXcgJCxBVT1uZXcgJCx3VT1NYXRoLnBvdygyLDEyKTtTby5wcm90b3R5cGUuZW5jb2RlPWZ1bmN0aW9uKGUsdCxuLG8sYSxyLGksZil7bGV0IGQ9by54LGM9by55O2lmKHRoaXMucXVhbnRpemF0aW9uPT09a2EuQklUUzEyKXtuPSQubXVsdGlwbHlCeVBvaW50KHRoaXMudG9TY2FsZWRFTlUsbixoZCksbi54PWsuY2xhbXAobi54LDAsMSksbi55PWsuY2xhbXAobi55LDAsMSksbi56PWsuY2xhbXAobi56LDAsMSk7bGV0IHU9dGhpcy5tYXhpbXVtSGVpZ2h0LXRoaXMubWluaW11bUhlaWdodCxsPWsuY2xhbXAoKGEtdGhpcy5taW5pbXVtSGVpZ2h0KS91LDAsMSk7WS5mcm9tRWxlbWVudHMobi54LG4ueSx2YSk7bGV0IGg9VnQuY29tcHJlc3NUZXh0dXJlQ29vcmRpbmF0ZXModmEpO1kuZnJvbUVsZW1lbnRzKG4ueixsLHZhKTtsZXQgbT1WdC5jb21wcmVzc1RleHR1cmVDb29yZGluYXRlcyh2YSk7WS5mcm9tRWxlbWVudHMoZCxjLHZhKTtsZXQgYj1WdC5jb21wcmVzc1RleHR1cmVDb29yZGluYXRlcyh2YSk7aWYoZVt0KytdPWgsZVt0KytdPW0sZVt0KytdPWIsdGhpcy5oYXNXZWJNZXJjYXRvclQpe1kuZnJvbUVsZW1lbnRzKGksMCx2YSk7bGV0IHA9VnQuY29tcHJlc3NUZXh0dXJlQ29vcmRpbmF0ZXModmEpO2VbdCsrXT1wfX1lbHNlIGVbdCsrXT1uLngtdGhpcy5jZW50ZXIueCxlW3QrK109bi55LXRoaXMuY2VudGVyLnksZVt0KytdPW4uei10aGlzLmNlbnRlci56LGVbdCsrXT1hLGVbdCsrXT1kLGVbdCsrXT1jLHRoaXMuaGFzV2ViTWVyY2F0b3JUJiYoZVt0KytdPWkpO3JldHVybiB0aGlzLmhhc1ZlcnRleE5vcm1hbHMmJihlW3QrK109VnQub2N0UGFja0Zsb2F0KHIpKSx0aGlzLmhhc0dlb2RldGljU3VyZmFjZU5vcm1hbHMmJihlW3QrK109Zi54LGVbdCsrXT1mLnksZVt0KytdPWYueiksdH07VFU9bmV3IHMsang9bmV3IHM7U28ucHJvdG90eXBlLmFkZEdlb2RldGljU3VyZmFjZU5vcm1hbHM9ZnVuY3Rpb24oZSx0LG4pe2lmKHRoaXMuaGFzR2VvZGV0aWNTdXJmYWNlTm9ybWFscylyZXR1cm47bGV0IG89dGhpcy5zdHJpZGUsYT1lLmxlbmd0aC9vO3RoaXMuaGFzR2VvZGV0aWNTdXJmYWNlTm9ybWFscz0hMCx0aGlzLl9jYWxjdWxhdGVTdHJpZGVBbmRPZmZzZXRzKCk7bGV0IHI9dGhpcy5zdHJpZGU7Zm9yKGxldCBpPTA7aTxhO2krKyl7Zm9yKGxldCB1PTA7dTxvO3UrKyl7bGV0IGw9aSpvK3UsaD1pKnIrdTt0W2hdPWVbbF19bGV0IGY9dGhpcy5kZWNvZGVQb3NpdGlvbih0LGksVFUpLGQ9bi5nZW9kZXRpY1N1cmZhY2VOb3JtYWwoZixqeCksYz1pKnIrdGhpcy5fb2Zmc2V0R2VvZGV0aWNTdXJmYWNlTm9ybWFsO3RbY109ZC54LHRbYysxXT1kLnksdFtjKzJdPWQuen19O1NvLnByb3RvdHlwZS5yZW1vdmVHZW9kZXRpY1N1cmZhY2VOb3JtYWxzPWZ1bmN0aW9uKGUsdCl7aWYoIXRoaXMuaGFzR2VvZGV0aWNTdXJmYWNlTm9ybWFscylyZXR1cm47bGV0IG49dGhpcy5zdHJpZGUsbz1lLmxlbmd0aC9uO3RoaXMuaGFzR2VvZGV0aWNTdXJmYWNlTm9ybWFscz0hMSx0aGlzLl9jYWxjdWxhdGVTdHJpZGVBbmRPZmZzZXRzKCk7bGV0IGE9dGhpcy5zdHJpZGU7Zm9yKGxldCByPTA7cjxvO3IrKylmb3IobGV0IGk9MDtpPGE7aSsrKXtsZXQgZj1yKm4raSxkPXIqYStpO3RbZF09ZVtmXX19O1NvLnByb3RvdHlwZS5kZWNvZGVQb3NpdGlvbj1mdW5jdGlvbihlLHQsbil7aWYoZyhuKXx8KG49bmV3IHMpLHQqPXRoaXMuc3RyaWRlLHRoaXMucXVhbnRpemF0aW9uPT09a2EuQklUUzEyKXtsZXQgbz1WdC5kZWNvbXByZXNzVGV4dHVyZUNvb3JkaW5hdGVzKGVbdF0sdmEpO24ueD1vLngsbi55PW8ueTtsZXQgYT1WdC5kZWNvbXByZXNzVGV4dHVyZUNvb3JkaW5hdGVzKGVbdCsxXSx2YSk7cmV0dXJuIG4uej1hLngsJC5tdWx0aXBseUJ5UG9pbnQodGhpcy5mcm9tU2NhbGVkRU5VLG4sbil9cmV0dXJuIG4ueD1lW3RdLG4ueT1lW3QrMV0sbi56PWVbdCsyXSxzLmFkZChuLHRoaXMuY2VudGVyLG4pfTtTby5wcm90b3R5cGUuZ2V0RXhhZ2dlcmF0ZWRQb3NpdGlvbj1mdW5jdGlvbihlLHQsbil7bj10aGlzLmRlY29kZVBvc2l0aW9uKGUsdCxuKTtsZXQgbz10aGlzLmV4YWdnZXJhdGlvbixhPXRoaXMuZXhhZ2dlcmF0aW9uUmVsYXRpdmVIZWlnaHQ7aWYobyE9PTEmJnRoaXMuaGFzR2VvZGV0aWNTdXJmYWNlTm9ybWFscyl7bGV0IGk9dGhpcy5kZWNvZGVHZW9kZXRpY1N1cmZhY2VOb3JtYWwoZSx0LGp4KSxmPXRoaXMuZGVjb2RlSGVpZ2h0KGUsdCksZD1PYy5nZXRIZWlnaHQoZixvLGEpLWY7bi54Kz1pLngqZCxuLnkrPWkueSpkLG4ueis9aS56KmR9cmV0dXJuIG59O1NvLnByb3RvdHlwZS5kZWNvZGVUZXh0dXJlQ29vcmRpbmF0ZXM9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBnKG4pfHwobj1uZXcgWSksdCo9dGhpcy5zdHJpZGUsdGhpcy5xdWFudGl6YXRpb249PT1rYS5CSVRTMTI/VnQuZGVjb21wcmVzc1RleHR1cmVDb29yZGluYXRlcyhlW3QrMl0sbik6WS5mcm9tRWxlbWVudHMoZVt0KzRdLGVbdCs1XSxuKX07U28ucHJvdG90eXBlLmRlY29kZUhlaWdodD1mdW5jdGlvbihlLHQpe3JldHVybiB0Kj10aGlzLnN0cmlkZSx0aGlzLnF1YW50aXphdGlvbj09PWthLkJJVFMxMj9WdC5kZWNvbXByZXNzVGV4dHVyZUNvb3JkaW5hdGVzKGVbdCsxXSx2YSkueSoodGhpcy5tYXhpbXVtSGVpZ2h0LXRoaXMubWluaW11bUhlaWdodCkrdGhpcy5taW5pbXVtSGVpZ2h0OmVbdCszXX07U28ucHJvdG90eXBlLmRlY29kZVdlYk1lcmNhdG9yVD1mdW5jdGlvbihlLHQpe3JldHVybiB0Kj10aGlzLnN0cmlkZSx0aGlzLnF1YW50aXphdGlvbj09PWthLkJJVFMxMj9WdC5kZWNvbXByZXNzVGV4dHVyZUNvb3JkaW5hdGVzKGVbdCszXSx2YSkueDplW3QrNl19O1NvLnByb3RvdHlwZS5nZXRPY3RFbmNvZGVkTm9ybWFsPWZ1bmN0aW9uKGUsdCxuKXt0PXQqdGhpcy5zdHJpZGUrdGhpcy5fb2Zmc2V0VmVydGV4Tm9ybWFsO2xldCBvPWVbdF0vMjU2LGE9TWF0aC5mbG9vcihvKSxyPShvLWEpKjI1NjtyZXR1cm4gWS5mcm9tRWxlbWVudHMoYSxyLG4pfTtTby5wcm90b3R5cGUuZGVjb2RlTm9ybWFsPWZ1bmN0aW9uKGUsdCxuKXtsZXQgbz10PXQqdGhpcy5zdHJpZGUrdGhpcy5fb2Zmc2V0VmVydGV4Tm9ybWFsO3JldHVybiBWdC5vY3REZWNvZGVGbG9hdChlW29dLG4pfTtTby5wcm90b3R5cGUuZGVjb2RlR2VvZGV0aWNTdXJmYWNlTm9ybWFsPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdD10KnRoaXMuc3RyaWRlK3RoaXMuX29mZnNldEdlb2RldGljU3VyZmFjZU5vcm1hbCxuLng9ZVt0XSxuLnk9ZVt0KzFdLG4uej1lW3QrMl0sbn07U28ucHJvdG90eXBlLl9jYWxjdWxhdGVTdHJpZGVBbmRPZmZzZXRzPWZ1bmN0aW9uKCl7bGV0IGU9MDt0aGlzLnF1YW50aXphdGlvbj09PWthLkJJVFMxMj9lKz0zOmUrPTYsdGhpcy5oYXNXZWJNZXJjYXRvclQmJihlKz0xKSx0aGlzLmhhc1ZlcnRleE5vcm1hbHMmJih0aGlzLl9vZmZzZXRWZXJ0ZXhOb3JtYWw9ZSxlKz0xKSx0aGlzLmhhc0dlb2RldGljU3VyZmFjZU5vcm1hbHMmJih0aGlzLl9vZmZzZXRHZW9kZXRpY1N1cmZhY2VOb3JtYWw9ZSxlKz0zKSx0aGlzLnN0cmlkZT1lfTskaD17cG9zaXRpb24zREFuZEhlaWdodDowLHRleHR1cmVDb29yZEFuZEVuY29kZWROb3JtYWxzOjEsZ2VvZGV0aWNTdXJmYWNlTm9ybWFsOjJ9LGVtPXtjb21wcmVzc2VkMDowLGNvbXByZXNzZWQxOjEsZ2VvZGV0aWNTdXJmYWNlTm9ybWFsOjJ9O1NvLnByb3RvdHlwZS5nZXRBdHRyaWJ1dGVzPWZ1bmN0aW9uKGUpe2xldCB0PW5lLkZMT0FULG49bmUuZ2V0U2l6ZUluQnl0ZXModCksbz10aGlzLnN0cmlkZSpuLGE9MCxyPVtdO2Z1bmN0aW9uIGkoZixkKXtyLnB1c2goe2luZGV4OmYsdmVydGV4QnVmZmVyOmUsY29tcG9uZW50RGF0YXR5cGU6dCxjb21wb25lbnRzUGVyQXR0cmlidXRlOmQsb2Zmc2V0SW5CeXRlczphLHN0cmlkZUluQnl0ZXM6b30pLGErPWQqbn1pZih0aGlzLnF1YW50aXphdGlvbj09PWthLk5PTkUpe2koJGgucG9zaXRpb24zREFuZEhlaWdodCw0KTtsZXQgZj0yO2YrPXRoaXMuaGFzV2ViTWVyY2F0b3JUPzE6MCxmKz10aGlzLmhhc1ZlcnRleE5vcm1hbHM/MTowLGkoJGgudGV4dHVyZUNvb3JkQW5kRW5jb2RlZE5vcm1hbHMsZiksdGhpcy5oYXNHZW9kZXRpY1N1cmZhY2VOb3JtYWxzJiZpKCRoLmdlb2RldGljU3VyZmFjZU5vcm1hbCwzKX1lbHNle2xldCBmPXRoaXMuaGFzV2ViTWVyY2F0b3JUfHx0aGlzLmhhc1ZlcnRleE5vcm1hbHMsZD10aGlzLmhhc1dlYk1lcmNhdG9yVCYmdGhpcy5oYXNWZXJ0ZXhOb3JtYWxzO2koZW0uY29tcHJlc3NlZDAsZj80OjMpLGQmJmkoZW0uY29tcHJlc3NlZDEsMSksdGhpcy5oYXNHZW9kZXRpY1N1cmZhY2VOb3JtYWxzJiZpKGVtLmdlb2RldGljU3VyZmFjZU5vcm1hbCwzKX1yZXR1cm4gcn07U28ucHJvdG90eXBlLmdldEF0dHJpYnV0ZUxvY2F0aW9ucz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnF1YW50aXphdGlvbj09PWthLk5PTkU/JGg6ZW19O1NvLmNsb25lPWZ1bmN0aW9uKGUsdCl7aWYoZyhlKSlyZXR1cm4gZyh0KXx8KHQ9bmV3IFNvKSx0LnF1YW50aXphdGlvbj1lLnF1YW50aXphdGlvbix0Lm1pbmltdW1IZWlnaHQ9ZS5taW5pbXVtSGVpZ2h0LHQubWF4aW11bUhlaWdodD1lLm1heGltdW1IZWlnaHQsdC5jZW50ZXI9cy5jbG9uZShlLmNlbnRlciksdC50b1NjYWxlZEVOVT0kLmNsb25lKGUudG9TY2FsZWRFTlUpLHQuZnJvbVNjYWxlZEVOVT0kLmNsb25lKGUuZnJvbVNjYWxlZEVOVSksdC5tYXRyaXg9JC5jbG9uZShlLm1hdHJpeCksdC5oYXNWZXJ0ZXhOb3JtYWxzPWUuaGFzVmVydGV4Tm9ybWFscyx0Lmhhc1dlYk1lcmNhdG9yVD1lLmhhc1dlYk1lcmNhdG9yVCx0Lmhhc0dlb2RldGljU3VyZmFjZU5vcm1hbHM9ZS5oYXNHZW9kZXRpY1N1cmZhY2VOb3JtYWxzLHQuZXhhZ2dlcmF0aW9uPWUuZXhhZ2dlcmF0aW9uLHQuZXhhZ2dlcmF0aW9uUmVsYXRpdmVIZWlnaHQ9ZS5leGFnZ2VyYXRpb25SZWxhdGl2ZUhlaWdodCx0Ll9jYWxjdWxhdGVTdHJpZGVBbmRPZmZzZXRzKCksdH07cmE9U299KTt2YXIgdG0sbm0sQ189WCgoKT0+e3RtPXtNT1JQSElORzowLENPTFVNQlVTX1ZJRVc6MSxTQ0VORTJEOjIsU0NFTkUzRDozfTt0bS5nZXRNb3JwaFRpbWU9ZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT10bS5TQ0VORTNEPzE6ZT09PXRtLk1PUlBISU5HP3ZvaWQgMDowfTtubT1PYmplY3QuZnJlZXplKHRtKX0pO2Z1bmN0aW9uIEVVKCl7cmV0dXJuITB9ZnVuY3Rpb24gUlUoZSx0KXt0PXQ/PyJUaGlzIG9iamVjdCB3YXMgZGVzdHJveWVkLCBpLmUuLCBkZXN0cm95KCkgd2FzIGNhbGxlZC4iO2Z1bmN0aW9uIG4oKXt9Zm9yKGxldCBvIGluIGUpdHlwZW9mIGVbb109PSJmdW5jdGlvbiImJihlW29dPW4pO2UuaXNEZXN0cm95ZWQ9RVV9dmFyIHp4LEd4PVgoKCk9Pnt6eD1SVX0pO2Z1bmN0aW9uIEh4KCl7aWYoIWcoeW8uX2NhblRyYW5zZmVyQXJyYXlCdWZmZXIpKXtsZXQgZT1JXygidHJhbnNmZXJUeXBlZEFycmF5VGVzdCIpO2UucG9zdE1lc3NhZ2U9ZS53ZWJraXRQb3N0TWVzc2FnZT8/ZS5wb3N0TWVzc2FnZTtsZXQgdD05OSxuPW5ldyBJbnQ4QXJyYXkoW3RdKTt0cnl7ZS5wb3N0TWVzc2FnZSh7YXJyYXk6bn0sW24uYnVmZmVyXSl9Y2F0Y2h7cmV0dXJuIHlvLl9jYW5UcmFuc2ZlckFycmF5QnVmZmVyPSExLHlvLl9jYW5UcmFuc2ZlckFycmF5QnVmZmVyfXlvLl9jYW5UcmFuc2ZlckFycmF5QnVmZmVyPW5ldyBQcm9taXNlKG89PntlLm9ubWVzc2FnZT1mdW5jdGlvbihhKXtsZXQgcj1hLmRhdGEuYXJyYXksaT1nKHIpJiZyWzBdPT09dDtvKGkpLGUudGVybWluYXRlKCkseW8uX2NhblRyYW5zZmVyQXJyYXlCdWZmZXI9aX19KX1yZXR1cm4geW8uX2NhblRyYW5zZmVyQXJyYXlCdWZmZXJ9ZnVuY3Rpb24gTV8oZSl7bGV0IHQ7dHJ5e3Q9bmV3IEJsb2IoW2VdLHt0eXBlOiJhcHBsaWNhdGlvbi9qYXZhc2NyaXB0In0pfWNhdGNoe2xldCBhPXdpbmRvdy5CbG9iQnVpbGRlcnx8d2luZG93LldlYktpdEJsb2JCdWlsZGVyfHx3aW5kb3cuTW96QmxvYkJ1aWxkZXJ8fHdpbmRvdy5NU0Jsb2JCdWlsZGVyLHI9bmV3IGE7ci5hcHBlbmQoZSksdD1yLmdldEJsb2IoImFwcGxpY2F0aW9uL2phdmFzY3JpcHQiKX1yZXR1cm4od2luZG93LlVSTHx8d2luZG93LndlYmtpdFVSTCkuY3JlYXRlT2JqZWN0VVJMKHQpfWZ1bmN0aW9uIElfKGUpe2xldCB0PW5ldyBWeC5kZWZhdWx0KGUpLG49dC5zY2hlbWUoKS5sZW5ndGghPT0wJiZ0LmZyYWdtZW50KCkubGVuZ3RoPT09MCxvPWUucmVwbGFjZSgvXC5qcyQvLCIiKSxhPXt9LHIsaTtpZihfZihlKSlpPWU7ZWxzZSBpZighbil7bGV0IGY9aXIoYCR7eW8uX3dvcmtlck1vZHVsZVByZWZpeH0vJHtvfS5qc2ApO19mKGYpJiYoaT1mKX1pZihpKXtsZXQgZj1gaW1wb3J0ICIke2l9IjtgO3JldHVybiByPU1fKGYpLGEudHlwZT0ibW9kdWxlIixuZXcgV29ya2VyKHIsYSl9aWYoIW4mJnR5cGVvZiBDRVNJVU1fV09SS0VSUzwidSIpe2xldCBmPWAKICAgICAgaW1wb3J0U2NyaXB0cygiJHtNXyhDRVNJVU1fV09SS0VSUyl9Iik7CiAgICAgIENlc2l1bVdvcmtlcnNbIiR7b30iXSgpOwogICAgYDtyZXR1cm4gcj1NXyhmKSxuZXcgV29ya2VyKHIsYSl9aWYocj1lLG58fChyPWlyKGAke3lvLl93b3JrZXJNb2R1bGVQcmVmaXgrb30uanNgKSksIWNyLnN1cHBvcnRzRXNtV2ViV29ya2VycygpKXRocm93IG5ldyB1dCgiVGhpcyBicm93c2VyIGlzIG5vdCBzdXBwb3J0ZWQuIFBsZWFzZSB1cGRhdGUgeW91ciBicm93c2VyIHRvIGNvbnRpbnVlLiIpO3JldHVybiBhLnR5cGU9Im1vZHVsZSIsbmV3IFdvcmtlcihyLGEpfWFzeW5jIGZ1bmN0aW9uIHhVKGUsdCl7bGV0IG49e21vZHVsZVBhdGg6dm9pZCAwLHdhc21CaW5hcnlGaWxlOnZvaWQgMCx3YXNtQmluYXJ5OnZvaWQgMH07aWYoIWNyLnN1cHBvcnRzV2ViQXNzZW1ibHkoKSl7aWYoIWcodC5mYWxsYmFja01vZHVsZVBhdGgpKXRocm93IG5ldyB1dChgVGhpcyBicm93c2VyIGRvZXMgbm90IHN1cHBvcnQgV2ViIEFzc2VtYmx5LCBhbmQgbm8gYmFja3VwIG1vZHVsZSB3YXMgcHJvdmlkZWQgZm9yICR7ZS5fd29ya2VyUGF0aH1gKTtyZXR1cm4gbi5tb2R1bGVQYXRoPWlyKHQuZmFsbGJhY2tNb2R1bGVQYXRoKSxufW4ud2FzbUJpbmFyeUZpbGU9aXIodC53YXNtQmluYXJ5RmlsZSk7bGV0IG89YXdhaXQgQWEuZmV0Y2hBcnJheUJ1ZmZlcih7dXJsOm4ud2FzbUJpbmFyeUZpbGV9KTtyZXR1cm4gbi53YXNtQmluYXJ5PW8sbn1mdW5jdGlvbiB5byhlLHQpe3RoaXMuX3dvcmtlclBhdGg9ZSx0aGlzLl9tYXhpbXVtQWN0aXZlVGFza3M9dD8/TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLHRoaXMuX2FjdGl2ZVRhc2tzPTAsdGhpcy5fbmV4dElEPTAsdGhpcy5fd2ViQXNzZW1ibHlQcm9taXNlPXZvaWQgMH1hc3luYyBmdW5jdGlvbiBDVShlLHQsbil7bGV0IG89YXdhaXQgUHJvbWlzZS5yZXNvbHZlKEh4KCkpO2cobik/b3x8KG4ubGVuZ3RoPTApOm49U1U7bGV0IGE9ZS5fbmV4dElEKysscj1uZXcgUHJvbWlzZSgoaSxmKT0+e2UuX3dvcmtlci5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIixPVShlLl93b3JrZXIsYSxpLGYpKX0pO3JldHVybiBlLl93b3JrZXIucG9zdE1lc3NhZ2Uoe2lkOmEsYmFzZVVybDppci5nZXRDZXNpdW1CYXNlVXJsKCkudXJsLHBhcmFtZXRlcnM6dCxjYW5UcmFuc2ZlckFycmF5QnVmZmVyOm99LG4pLHJ9YXN5bmMgZnVuY3Rpb24gTVUoZSx0LG4peysrZS5fYWN0aXZlVGFza3M7dHJ5e2xldCBvPWF3YWl0IENVKGUsdCxuKTtyZXR1cm4tLWUuX2FjdGl2ZVRhc2tzLG99Y2F0Y2gobyl7dGhyb3ctLWUuX2FjdGl2ZVRhc2tzLG99fXZhciBWeCxOXyxPVSxTVSxLeCxxeD1YKCgpPT57Vng9Y2EodWkoKSwxKTtSbCgpO3NlKCk7R3goKTtKaSgpO2xiKCk7dmwoKTtzYigpO29zKCk7amEoKTtOXz1uZXcgYmw7T1U9KGUsdCxuLG8pPT57bGV0IGE9KHtkYXRhOnJ9KT0+e2lmKHIuaWQ9PT10KXtpZihnKHIuZXJyb3IpKXtsZXQgaT1yLmVycm9yO2kubmFtZT09PSJSdW50aW1lRXJyb3IiPyhpPW5ldyB1dChyLmVycm9yLm1lc3NhZ2UpLGkuc3RhY2s9ci5lcnJvci5zdGFjayk6aS5uYW1lPT09IkRldmVsb3BlckVycm9yIj8oaT1uZXcgV3Qoci5lcnJvci5tZXNzYWdlKSxpLnN0YWNrPXIuZXJyb3Iuc3RhY2spOmkubmFtZT09PSJFcnJvciImJihpPW5ldyBFcnJvcihyLmVycm9yLm1lc3NhZ2UpLGkuc3RhY2s9ci5lcnJvci5zdGFjayksTl8ucmFpc2VFdmVudChpKSxvKGkpfWVsc2UgTl8ucmFpc2VFdmVudCgpLG4oci5yZXN1bHQpO2UucmVtb3ZlRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsYSl9fTtyZXR1cm4gYX0sU1U9W107eW8ucHJvdG90eXBlLnNjaGVkdWxlVGFzaz1mdW5jdGlvbihlLHQpe2lmKGcodGhpcy5fd29ya2VyKXx8KHRoaXMuX3dvcmtlcj1JXyh0aGlzLl93b3JrZXJQYXRoKSksISh0aGlzLl9hY3RpdmVUYXNrcz49dGhpcy5fbWF4aW11bUFjdGl2ZVRhc2tzKSlyZXR1cm4gTVUodGhpcyxlLHQpfTt5by5wcm90b3R5cGUuaW5pdFdlYkFzc2VtYmx5TW9kdWxlPWFzeW5jIGZ1bmN0aW9uKGUpe2lmKGcodGhpcy5fd2ViQXNzZW1ibHlQcm9taXNlKSlyZXR1cm4gdGhpcy5fd2ViQXNzZW1ibHlQcm9taXNlO2xldCB0PWFzeW5jKCk9PntsZXQgbj10aGlzLl93b3JrZXI9SV8odGhpcy5fd29ya2VyUGF0aCksbz1hd2FpdCB4VSh0aGlzLGUpLGE9YXdhaXQgUHJvbWlzZS5yZXNvbHZlKEh4KCkpLHIsaT1vLndhc21CaW5hcnk7ZyhpKSYmYSYmKHI9W2ldKTtsZXQgZj1uZXcgUHJvbWlzZSgoZCxjKT0+e24ub25tZXNzYWdlPWZ1bmN0aW9uKHtkYXRhOnV9KXtnKHUpP2QodS5yZXN1bHQpOmMobmV3IHV0KCJDb3VsZCBub3QgY29uZmlndXJlIHdhc20gbW9kdWxlIikpfX0pO3JldHVybiBuLnBvc3RNZXNzYWdlKHtjYW5UcmFuc2ZlckFycmF5QnVmZmVyOmEscGFyYW1ldGVyczp7d2ViQXNzZW1ibHlDb25maWc6b319LHIpLGZ9O3JldHVybiB0aGlzLl93ZWJBc3NlbWJseVByb21pc2U9dCgpLHRoaXMuX3dlYkFzc2VtYmx5UHJvbWlzZX07eW8ucHJvdG90eXBlLmlzRGVzdHJveWVkPWZ1bmN0aW9uKCl7cmV0dXJuITF9O3lvLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7cmV0dXJuIGcodGhpcy5fd29ya2VyKSYmdGhpcy5fd29ya2VyLnRlcm1pbmF0ZSgpLHp4KHRoaXMpfTt5by50YXNrQ29tcGxldGVkRXZlbnQ9Tl87eW8uX2RlZmF1bHRXb3JrZXJNb2R1bGVQcmVmaXg9IldvcmtlcnMvIjt5by5fd29ya2VyTW9kdWxlUHJlZml4PXlvLl9kZWZhdWx0V29ya2VyTW9kdWxlUHJlZml4O3lvLl9jYW5UcmFuc2ZlckFycmF5QnVmZmVyPXZvaWQgMDtLeD15b30pO2Z1bmN0aW9uIHZfKGUsdCxuKXt0aGlzLl92ZXJ0aWNlcz1lLHRoaXMuX2luZGljZXM9dCx0aGlzLl9lbmNvZGluZz1uLHRoaXMuX2ludmVyc2VUcmFuc2Zvcm09bmV3ICQsdGhpcy5fbmVlZHNSZWJ1aWxkPSEwLHRoaXMuX3Jvb3ROb2RlPW5ldyBrX31mdW5jdGlvbiBrXygpe3RoaXMueD0wLHRoaXMueT0wLHRoaXMubGV2ZWw9MCx0aGlzLmFhYmI9V3godGhpcy54LHRoaXMueSx0aGlzLmxldmVsKSx0aGlzLmludGVyc2VjdGluZ1RyaWFuZ2xlcz1uZXcgVWludDMyQXJyYXkoMCksdGhpcy5jaGlsZHJlbj1bXSx0aGlzLmJ1aWxkaW5nQ2hpbGRyZW49ITF9ZnVuY3Rpb24ga1UoZSx0KXskLmludmVyc2UodCxlLl9pbnZlcnNlVHJhbnNmb3JtKSxlLl9uZWVkc1JlYnVpbGQ9ITE7bGV0IG49ZS5faW5kaWNlcy5sZW5ndGgvMyxvPW5ldyBVaW50MzJBcnJheShuKTtmb3IobGV0IGE9MDthPG47KythKW9bYV09YTtlLl9yb290Tm9kZS5pbnRlcnNlY3RpbmdUcmlhbmdsZXM9byxlLl9yb290Tm9kZS5jaGlsZHJlbi5sZW5ndGg9MH1mdW5jdGlvbiBXeChlLHQsbil7bGV0IG89MS9NYXRoLnBvdygyLG4pLGE9cy5mcm9tRWxlbWVudHMoZSpvLS41LHQqby0uNSwtLjUsdlUpLHI9cy5mcm9tRWxlbWVudHMoKGUrMSkqby0uNSwodCsxKSpvLS41LC41LEZVKTtyZXR1cm4gdW8uZnJvbUNvcm5lcnMoYSxyKX1mdW5jdGlvbiBEVShlLHQsbixvLGEpe3MucGFjayhuWzBdLGUsOSphKSxzLnBhY2soblsxXSxlLDkqYSszKSxzLnBhY2soblsyXSxlLDkqYSs2KSx0W2FdPW99ZnVuY3Rpb24gWHgoZSx0LG4pe2xldCBvPW5vLnJheUF4aXNBbGlnbmVkQm91bmRpbmdCb3godCxlLmFhYmIsQlUpO2lmKCFnKG8pKXJldHVybjtpZighZS5jaGlsZHJlbi5sZW5ndGh8fGUuYnVpbGRpbmdDaGlsZHJlbil7bi5wdXNoKHtub2RlOmUsaW50ZXJ2YWw6bmV3IFRvKG8uc3RhcnQsby5zdG9wKX0pO3JldHVybn1mb3IobGV0IHI9MDtyPGUuY2hpbGRyZW4ubGVuZ3RoO3IrKylYeChlLmNoaWxkcmVuW3JdLHQsbil9ZnVuY3Rpb24gVVUoZSx0LG4sbyxhLHIpe2xldCBpPXQuc29ydChmdW5jdGlvbihkLGMpe3JldHVybiBkLmludGVydmFsLnN0YXJ0LWMuaW50ZXJ2YWwuc3RhcnR9KSxmPU51bWJlci5NQVhfVkFMVUU7Zm9yKGxldCBkPTA7ZDxpLmxlbmd0aDtkKyspe2xldCBjPWlbZF0sdT1MVShlLG4sYy5ub2RlLG8sYSxyKTtpZihmPU1hdGgubWluKHUsZiksZiE9PU51bWJlci5NQVhfVkFMVUUpYnJlYWt9aWYoZiE9PU51bWJlci5NQVhfVkFMVUUpcmV0dXJuIGRyLmdldFBvaW50KG4sZil9ZnVuY3Rpb24gTFUoZSx0LG4sbyxhLHIpe2xldCBpPU51bWJlci5NQVhfVkFMVUUsZj1lLl9lbmNvZGluZyxkPWUuX2luZGljZXMsYz1lLl92ZXJ0aWNlcyx1PW4uaW50ZXJzZWN0aW5nVHJpYW5nbGVzLmxlbmd0aCxoPSEobi5sZXZlbD49TlUpJiYhbi5idWlsZGluZ0NoaWxkcmVuLG0sYjtoJiYobT1uZXcgRmxvYXQ2NEFycmF5KHUqOSksYj1uZXcgVWludDMyQXJyYXkodSkpO2ZvcihsZXQgcD0wO3A8dTtwKyspe2xldCB5PW4uaW50ZXJzZWN0aW5nVHJpYW5nbGVzW3BdLFQ9UF8oZixhLHIsdCxjLGRbMyp5XSxvbVswXSksXz1QXyhmLGEscix0LGMsZFszKnkrMV0sb21bMV0pLEU9UF8oZixhLHIsdCxjLGRbMyp5KzJdLG9tWzJdKSx3PW5vLnJheVRyaWFuZ2xlUGFyYW1ldHJpYyh0LFQsXyxFLG8pO2codykmJnc8aSYmdz49MCYmKGk9dyksaCYmRFUobSxiLG9tLHkscCl9aWYoaCl7Zm9yKGxldCBwPTA7cDw0O3ArKyluLmFkZENoaWxkKHApO3pVKGUuX2ludmVyc2VUcmFuc2Zvcm0sbixiLG0pfXJldHVybiBpfWZ1bmN0aW9uIFBfKGUsdCxuLG8sYSxyLGkpe2xldCBmPWUuZ2V0RXhhZ2dlcmF0ZWRQb3NpdGlvbihhLHIsaSk7aWYodD09PW5tLlNDRU5FM0QpcmV0dXJuIGY7bGV0IGM9bi5lbGxpcHNvaWQuY2FydGVzaWFuVG9DYXJ0b2dyYXBoaWMoZixqVSk7Zj1uLnByb2plY3QoYyxpKSxmPXMuZnJvbUVsZW1lbnRzKGYueixmLngsZi55LGkpO2xldCB1PWsuVFdPX1BJKm4uZWxsaXBzb2lkLm1heGltdW1SYWRpdXMsbD1NYXRoLnJvdW5kKChvLm9yaWdpbi55LWYueSkvdSk7cmV0dXJuIGYueSs9bCp1LGZ9YXN5bmMgZnVuY3Rpb24gelUoZSx0LG4sbyl7dC5idWlsZGluZ0NoaWxkcmVuPSEwO2xldCBhPW5ldyBGbG9hdDY0QXJyYXkoMTYpOyQucGFjayhlLGEsMCk7bGV0IHI9bmV3IEZsb2F0NjRBcnJheSgyNCk7Zm9yKGxldCB1PTA7dTw0O3UrKylzLnBhY2sodC5jaGlsZHJlblt1XS5hYWJiLm1pbmltdW0scix1KjYpLHMucGFjayh0LmNoaWxkcmVuW3VdLmFhYmIubWF4aW11bSxyLHUqNiszKTtsZXQgaT17YWFiYnM6cixpbnZlcnNlVHJhbnNmb3JtOmEsdHJpYW5nbGVJbmRpY2VzOm4sdHJpYW5nbGVQb3NpdGlvbnM6b30sZj1bci5idWZmZXIsYS5idWZmZXIsbi5idWZmZXIsby5idWZmZXJdLGQ9SVUuc2NoZWR1bGVUYXNrKGksZik7aWYoIWcoZCkpe3QuYnVpbGRpbmdDaGlsZHJlbj0hMTtyZXR1cm59KGF3YWl0IGQpLmludGVyc2VjdGluZ1RyaWFuZ2xlc0FycmF5cy5mb3JFYWNoKCh1LGwpPT57Zyh0LmNoaWxkcmVuW2xdKSYmKHQuY2hpbGRyZW5bbF0uaW50ZXJzZWN0aW5nVHJpYW5nbGVzPW5ldyBVaW50MzJBcnJheSh1KSl9KSx0LmludGVyc2VjdGluZ1RyaWFuZ2xlcz1uZXcgVWludDMyQXJyYXkoMCksdC5idWlsZGluZ0NoaWxkcmVuPSExfXZhciBOVSxJVSxQVSxvbSx2VSxGVSxCVSxqVSxZeCxKeD1YKCgpPT57QWkoKTtJZSgpO3NlKCk7cGkoKTtwbigpO05mKCk7cXgoKTtUdCgpO0NfKCk7bGYoKTtHZSgpO05VPTM7SVU9bmV3IEt4KCJpbmNyZW1lbnRhbGx5QnVpbGRUZXJyYWluUGlja2VyIik7T2JqZWN0LmRlZmluZVByb3BlcnRpZXModl8ucHJvdG90eXBlLHtuZWVkc1JlYnVpbGQ6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9uZWVkc1JlYnVpbGR9LHNldDpmdW5jdGlvbihlKXt0aGlzLl9uZWVkc1JlYnVpbGQ9ZX19fSk7a18ucHJvdG90eXBlLmFkZENoaWxkPWZ1bmN0aW9uKGUpe2xldCB0PW5ldyBrXzt0Lng9dGhpcy54KjIrKGUmMSksdC55PXRoaXMueSoyKyhlPj4xJjEpLHQubGV2ZWw9dGhpcy5sZXZlbCsxLHQuYWFiYj1XeCh0LngsdC55LHQubGV2ZWwpLHRoaXMuY2hpbGRyZW5bZV09dH07UFU9bmV3IGRyLG9tPVtuZXcgcyxuZXcgcyxuZXcgc107dl8ucHJvdG90eXBlLnJheUludGVyc2VjdD1mdW5jdGlvbihlLHQsbixvLGEpe3RoaXMuX25lZWRzUmVidWlsZCYma1UodGhpcyx0KTtsZXQgcj10aGlzLl9pbnZlcnNlVHJhbnNmb3JtLGk9UFU7aS5vcmlnaW49JC5tdWx0aXBseUJ5UG9pbnQocixlLm9yaWdpbixpLm9yaWdpbiksaS5kaXJlY3Rpb249JC5tdWx0aXBseUJ5UG9pbnRBc1ZlY3RvcihyLGUuZGlyZWN0aW9uLGkuZGlyZWN0aW9uKTtsZXQgZj1bXTtyZXR1cm4gWHgodGhpcy5fcm9vdE5vZGUsaSxmKSxVVSh0aGlzLGYsZSxuLG8sYSl9O3ZVPW5ldyBzLEZVPW5ldyBzO0JVPW5ldyBUbztqVT1uZXcgcmU7WXg9dl99KTtmdW5jdGlvbiBtZChlLHQsbixvLGEscixpLGYsZCxjLHUsbCxoLG0sYixwLHkpe3RoaXMuY2VudGVyPWUsdGhpcy52ZXJ0aWNlcz10LHRoaXMuc3RyaWRlPXU/PzYsdGhpcy5pbmRpY2VzPW4sdGhpcy5pbmRleENvdW50V2l0aG91dFNraXJ0cz1vLHRoaXMudmVydGV4Q291bnRXaXRob3V0U2tpcnRzPWEsdGhpcy5taW5pbXVtSGVpZ2h0PXIsdGhpcy5tYXhpbXVtSGVpZ2h0PWksdGhpcy5yZWN0YW5nbGU9Zix0aGlzLmJvdW5kaW5nU3BoZXJlM0Q9ZCx0aGlzLm9jY2x1ZGVlUG9pbnRJblNjYWxlZFNwYWNlPWMsdGhpcy5vcmllbnRlZEJvdW5kaW5nQm94PWwsdGhpcy5lbmNvZGluZz1oLHRoaXMud2VzdEluZGljZXNTb3V0aFRvTm9ydGg9bSx0aGlzLnNvdXRoSW5kaWNlc0Vhc3RUb1dlc3Q9Yix0aGlzLmVhc3RJbmRpY2VzTm9ydGhUb1NvdXRoPXAsdGhpcy5ub3J0aEluZGljZXNXZXN0VG9FYXN0PXksdGhpcy5fdHJhbnNmb3JtPW5ldyAkLHRoaXMuX2xhc3RQaWNrU2NlbmVNb2RlPXZvaWQgMCx0aGlzLl90ZXJyYWluUGlja2VyPW5ldyBZeCh0LG4saCl9ZnVuY3Rpb24gR1UoZSx0KXtsZXQgbj1lLmVuY29kaW5nLmV4YWdnZXJhdGlvbixvPWUuZW5jb2RpbmcuZXhhZ2dlcmF0aW9uUmVsYXRpdmVIZWlnaHQsYT1PYy5nZXRIZWlnaHQoZS5taW5pbXVtSGVpZ2h0LG4sbykscj1PYy5nZXRIZWlnaHQoZS5tYXhpbXVtSGVpZ2h0LG4sbyksaT15bi5mcm9tUmVjdGFuZ2xlKGUucmVjdGFuZ2xlLGEscixxLmRlZmF1bHQsZS5vcmllbnRlZEJvdW5kaW5nQm94KTtyZXR1cm4geW4uY29tcHV0ZVRyYW5zZm9ybWF0aW9uKGksdCksJC5nZXRTY2FsZSh0LEZfKS56PD1rLkVQU0lMT04xNiYmKEZfLno9MSwkLnNldFNjYWxlKHQsRl8sdCkpLHR9ZnVuY3Rpb24gWVUoZSx0LG4pe2xldCBvPWUuZW5jb2RpbmcuZXhhZ2dlcmF0aW9uLGE9ZS5lbmNvZGluZy5leGFnZ2VyYXRpb25SZWxhdGl2ZUhlaWdodCxyPU9jLmdldEhlaWdodChlLm1pbmltdW1IZWlnaHQsbyxhKSxpPU9jLmdldEhlaWdodChlLm1heGltdW1IZWlnaHQsbyxhKSxmPXQucHJvamVjdChyZS5mcm9tUmFkaWFucyhlLnJlY3RhbmdsZS53ZXN0LGUucmVjdGFuZ2xlLnNvdXRoLDAsS1UpLFZVKSxkPXQucHJvamVjdChyZS5mcm9tUmFkaWFucyhlLnJlY3RhbmdsZS5lYXN0LGUucmVjdGFuZ2xlLm5vcnRoLDAscVUpLEhVKSxjPWktcix1PXMuZnJvbUVsZW1lbnRzKGQueC1mLngsZC55LWYueSxjPjA/YzoxLFdVKSxsPXMuZnJvbUVsZW1lbnRzKGYueCt1LngqLjUsZi55K3UueSouNSxyK3UueiouNSxYVSk7cmV0dXJuICQuZnJvbVRyYW5zbGF0aW9uKGwsbiksJC5zZXRTY2FsZShuLHUsbiksJC5tdWx0aXBseShjby5TV0laWkxFXzNEX1RPXzJEX01BVFJJWCxuLG4pLG59dmFyIFZVLEhVLEtVLHFVLFdVLFhVLEZfLERfLFp4PVgoKCk9PntDXygpO0llKCk7VHQoKTtzZSgpO1dlKCk7R2UoKTtwbigpO3dpKCk7SngoKTtzcigpO1NfKCk7bWQucHJvdG90eXBlLmdldFRyYW5zZm9ybT1mdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLl9sYXN0UGlja1NjZW5lTW9kZT09PWU/dGhpcy5fdHJhbnNmb3JtOih0aGlzLl90ZXJyYWluUGlja2VyLm5lZWRzUmVidWlsZD0hMCwhZyhlKXx8ZT09PW5tLlNDRU5FM0Q/R1UodGhpcyx0aGlzLl90cmFuc2Zvcm0pOllVKHRoaXMsdCx0aGlzLl90cmFuc2Zvcm0pKX07VlU9bmV3IHMsSFU9bmV3IHMsS1U9bmV3IHJlLHFVPW5ldyByZSxXVT1uZXcgcyxYVT1uZXcgcyxGXz1uZXcgczttZC5wcm90b3R5cGUucGljaz1mdW5jdGlvbihlLHQsbixvKXtsZXQgYT10aGlzLl90ZXJyYWluUGlja2VyLnJheUludGVyc2VjdChlLHRoaXMuZ2V0VHJhbnNmb3JtKG4sbyksdCxuLG8pO3JldHVybiB0aGlzLl9sYXN0UGlja1NjZW5lTW9kZT1uLGF9O21kLnByb3RvdHlwZS51cGRhdGVFeGFnZ2VyYXRpb249ZnVuY3Rpb24oZSx0KXt0aGlzLl90ZXJyYWluUGlja2VyLl92ZXJ0aWNlcz10aGlzLnZlcnRpY2VzLHRoaXMuX3RlcnJhaW5QaWNrZXIubmVlZHNSZWJ1aWxkPSEwLHRoaXMuX2xhc3RQaWNrU2NlbmVNb2RlPXZvaWQgMH07bWQucHJvdG90eXBlLnVwZGF0ZVNjZW5lTW9kZT1mdW5jdGlvbihlKXt0aGlzLl90ZXJyYWluUGlja2VyLm5lZWRzUmVidWlsZD0hMCx0aGlzLl9sYXN0UGlja1NjZW5lTW9kZT12b2lkIDB9O0RfPW1kfSk7ZnVuY3Rpb24gV24oKXtXdC50aHJvd0luc3RhbnRpYXRpb25FcnJvcigpfWZ1bmN0aW9uIHQyKGUsdCl7bGV0IG49bmV3IEFycmF5KHQpLG89bmV3IEFycmF5KGUpLGE9bmV3IEFycmF5KHQpLHI9bmV3IEFycmF5KGUpLGk7Zm9yKGk9MDtpPGU7KytpKXJbaV09aSxvW2ldPWUqdC0xLWk7Zm9yKGk9MDtpPHQ7KytpKWFbaV09KGkrMSkqZS0xLG5baV09KHQtaS0xKSplO3JldHVybnt3ZXN0SW5kaWNlc1NvdXRoVG9Ob3J0aDpuLHNvdXRoSW5kaWNlc0Vhc3RUb1dlc3Q6byxlYXN0SW5kaWNlc05vcnRoVG9Tb3V0aDphLG5vcnRoSW5kaWNlc1dlc3RUb0Vhc3Q6cn19ZnVuY3Rpb24gbjIoZSx0LG4sbyl7bGV0IGE9MDtmb3IobGV0IHI9MDtyPHQtMTsrK3Ipe2ZvcihsZXQgaT0wO2k8ZS0xOysraSl7bGV0IGY9YSxkPWYrZSxjPWQrMSx1PWYrMTtuW28rK109ZixuW28rK109ZCxuW28rK109dSxuW28rK109dSxuW28rK109ZCxuW28rK109YywrK2F9KythfX1mdW5jdGlvbiBhbShlLHQsbixvKXtsZXQgYT1lWzBdLHI9ZS5sZW5ndGg7Zm9yKGxldCBpPTE7aTxyOysraSl7bGV0IGY9ZVtpXTtuW28rK109YSxuW28rK109ZixuW28rK109dCxuW28rK109dCxuW28rK109ZixuW28rK109dCsxLGE9ZiwrK3R9cmV0dXJuIG99dmFyIFF4LCR4LGUyLExpLEJfPVgoKCk9PntzZSgpO0ppKCk7bm4oKTtHZSgpO09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFduLnByb3RvdHlwZSx7ZXJyb3JFdmVudDp7Z2V0Old0LnRocm93SW5zdGFudGlhdGlvbkVycm9yfSxjcmVkaXQ6e2dldDpXdC50aHJvd0luc3RhbnRpYXRpb25FcnJvcn0sdGlsaW5nU2NoZW1lOntnZXQ6V3QudGhyb3dJbnN0YW50aWF0aW9uRXJyb3J9LGhhc1dhdGVyTWFzazp7Z2V0Old0LnRocm93SW5zdGFudGlhdGlvbkVycm9yfSxoYXNWZXJ0ZXhOb3JtYWxzOntnZXQ6V3QudGhyb3dJbnN0YW50aWF0aW9uRXJyb3J9LGF2YWlsYWJpbGl0eTp7Z2V0Old0LnRocm93SW5zdGFudGlhdGlvbkVycm9yfX0pO1F4PVtdO1duLmdldFJlZ3VsYXJHcmlkSW5kaWNlcz1mdW5jdGlvbihlLHQpe2xldCBuPVF4W2VdO2cobil8fChReFtlXT1uPVtdKTtsZXQgbz1uW3RdO3JldHVybiBnKG8pfHwoZSp0PGsuU0lYVFlfRk9VUl9LSUxPQllURVM/bz1uW3RdPW5ldyBVaW50MTZBcnJheSgoZS0xKSoodC0xKSo2KTpvPW5bdF09bmV3IFVpbnQzMkFycmF5KChlLTEpKih0LTEpKjYpLG4yKGUsdCxvLDApKSxvfTskeD1bXTtXbi5nZXRSZWd1bGFyR3JpZEluZGljZXNBbmRFZGdlSW5kaWNlcz1mdW5jdGlvbihlLHQpe2xldCBuPSR4W2VdO2cobil8fCgkeFtlXT1uPVtdKTtsZXQgbz1uW3RdO2lmKCFnKG8pKXtsZXQgYT1Xbi5nZXRSZWd1bGFyR3JpZEluZGljZXMoZSx0KSxyPXQyKGUsdCksaT1yLndlc3RJbmRpY2VzU291dGhUb05vcnRoLGY9ci5zb3V0aEluZGljZXNFYXN0VG9XZXN0LGQ9ci5lYXN0SW5kaWNlc05vcnRoVG9Tb3V0aCxjPXIubm9ydGhJbmRpY2VzV2VzdFRvRWFzdDtvPW5bdF09e2luZGljZXM6YSx3ZXN0SW5kaWNlc1NvdXRoVG9Ob3J0aDppLHNvdXRoSW5kaWNlc0Vhc3RUb1dlc3Q6ZixlYXN0SW5kaWNlc05vcnRoVG9Tb3V0aDpkLG5vcnRoSW5kaWNlc1dlc3RUb0Vhc3Q6Y319cmV0dXJuIG99O2UyPVtdO1duLmdldFJlZ3VsYXJHcmlkQW5kU2tpcnRJbmRpY2VzQW5kRWRnZUluZGljZXM9ZnVuY3Rpb24oZSx0KXtsZXQgbj1lMltlXTtnKG4pfHwoZTJbZV09bj1bXSk7bGV0IG89blt0XTtpZighZyhvKSl7bGV0IGE9ZSp0LHI9KGUtMSkqKHQtMSkqNixpPWUqMit0KjIsZj1NYXRoLm1heCgwLGktNCkqNixkPWEraSxjPXIrZix1PXQyKGUsdCksbD11Lndlc3RJbmRpY2VzU291dGhUb05vcnRoLGg9dS5zb3V0aEluZGljZXNFYXN0VG9XZXN0LG09dS5lYXN0SW5kaWNlc05vcnRoVG9Tb3V0aCxiPXUubm9ydGhJbmRpY2VzV2VzdFRvRWFzdCxwPWtlLmNyZWF0ZVR5cGVkQXJyYXkoZCxjKTtuMihlLHQscCwwKSxXbi5hZGRTa2lydEluZGljZXMobCxoLG0sYixhLHAsciksbz1uW3RdPXtpbmRpY2VzOnAsd2VzdEluZGljZXNTb3V0aFRvTm9ydGg6bCxzb3V0aEluZGljZXNFYXN0VG9XZXN0OmgsZWFzdEluZGljZXNOb3J0aFRvU291dGg6bSxub3J0aEluZGljZXNXZXN0VG9FYXN0OmIsaW5kZXhDb3VudFdpdGhvdXRTa2lydHM6cn19cmV0dXJuIG99O1duLmdldFNraXJ0VmVydGV4Q291bnQ9ZnVuY3Rpb24oZSx0LG4sbyl7cmV0dXJuIGUubGVuZ3RoK3QubGVuZ3RoK24ubGVuZ3RoK28ubGVuZ3RofTtXbi5nZXRTa2lydEluZGV4Q291bnQ9ZnVuY3Rpb24oZSl7cmV0dXJuKGUtNCkqMiozfTtXbi5nZXRTa2lydEluZGV4Q291bnRXaXRoRmlsbGVkQ29ybmVycz1mdW5jdGlvbihlKXtyZXR1cm4oKGUtNCkqMis0KSozfTtXbi5hZGRTa2lydEluZGljZXM9ZnVuY3Rpb24oZSx0LG4sbyxhLHIsaSl7bGV0IGY9YTtpPWFtKGUsZixyLGkpLGYrPWUubGVuZ3RoLGk9YW0odCxmLHIsaSksZis9dC5sZW5ndGgsaT1hbShuLGYscixpKSxmKz1uLmxlbmd0aCxhbShvLGYscixpKX07V24uYWRkU2tpcnRJbmRpY2VzV2l0aEZpbGxlZENvcm5lcnM9ZnVuY3Rpb24oZSx0LG4sbyxhLHIsaSl7V24uYWRkU2tpcnRJbmRpY2VzKGUsdCxuLG8sYSxyLGkpO2xldCBmPVduLmdldFNraXJ0VmVydGV4Q291bnQoZSx0LG4sbyksZD1Xbi5nZXRTa2lydEluZGV4Q291bnQoZiksYz1pK2QsdT1lWzBdLGw9b1swXSxoPW5bMF0sbT10WzBdLGI9YSxwPWIrZS5sZW5ndGgtMSx5PXArMSxUPXkrdC5sZW5ndGgtMSxfPVQrMSxFPV8rbi5sZW5ndGgtMSx3PUUrMSxSPXcrby5sZW5ndGgtMTtyW2MrMF09dSxyW2MrMV09YixyW2MrMl09VCxyW2MrM109bSxyW2MrNF09eSxyW2MrNV09RSxyW2MrNl09aCxyW2MrN109XyxyW2MrOF09UixyW2MrOV09bCxyW2MrMTBdPXcscltjKzExXT1wfTtXbi5oZWlnaHRtYXBUZXJyYWluUXVhbGl0eT0uMjU7V24uZ2V0RXN0aW1hdGVkTGV2ZWxaZXJvR2VvbWV0cmljRXJyb3JGb3JBSGVpZ2h0bWFwPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZS5tYXhpbXVtUmFkaXVzKjIqTWF0aC5QSSpXbi5oZWlnaHRtYXBUZXJyYWluUXVhbGl0eS8odCpuKX07V24ucHJvdG90eXBlLnJlcXVlc3RUaWxlR2VvbWV0cnk9V3QudGhyb3dJbnN0YW50aWF0aW9uRXJyb3I7V24ucHJvdG90eXBlLmdldExldmVsTWF4aW11bUdlb21ldHJpY0Vycm9yPVd0LnRocm93SW5zdGFudGlhdGlvbkVycm9yO1duLnByb3RvdHlwZS5nZXRUaWxlRGF0YUF2YWlsYWJsZT1XdC50aHJvd0luc3RhbnRpYXRpb25FcnJvcjtXbi5wcm90b3R5cGUubG9hZFRpbGVEYXRhQXZhaWxhYmlsaXR5PVd0LnRocm93SW5zdGFudGlhdGlvbkVycm9yO0xpPVdufSk7ZnVuY3Rpb24gakwoZSl7bGV0IHQ9ZS5tZXNoZXNbMF0ucHJpbWl0aXZlc1swXSxuPWUuYWNjZXNzb3JzW3QuYXR0cmlidXRlcy5QT1NJVElPTl0sbz1lLmJ1ZmZlclZpZXdzW24uYnVmZmVyVmlld10sYT1uLmNvdW50LHI9by5leHRlbnNpb25zP28uZXh0ZW5zaW9ucy5FWFRfbWVzaG9wdF9jb21wcmVzc2lvbjp2b2lkIDA7aWYocj09PXZvaWQgMCl7bGV0IG09ZS5idWZmZXJzW28uYnVmZmVyXS5leHRyYXMuX3BpcGVsaW5lLnNvdXJjZTtyZXR1cm4gbmV3IEZsb2F0MzJBcnJheShtLmJ1ZmZlcixtLmJ5dGVPZmZzZXQrKG8uYnl0ZU9mZnNldD8/MCkrKG4uYnl0ZU9mZnNldD8/MCksYSozKX1sZXQgaT1lLmJ1ZmZlcnNbci5idWZmZXJdLmV4dHJhcy5fcGlwZWxpbmUuc291cmNlLGY9bmV3IFVpbnQ4QXJyYXkoaS5idWZmZXIsaS5ieXRlT2Zmc2V0KyhyLmJ5dGVPZmZzZXQ/PzApKyhuLmJ5dGVPZmZzZXQ/PzApLHIuYnl0ZUxlbmd0aCksZD1yLmJ5dGVTdHJpZGUsYz1kPT09ND9VaW50OEFycmF5OlVpbnQxNkFycmF5LHU9bmV3IGMoYSo0KTt6cy5kZWNvZGVWZXJ0ZXhCdWZmZXIobmV3IFVpbnQ4QXJyYXkodS5idWZmZXIpLGEsZCxmKTtsZXQgbD0oMTw8dS5CWVRFU19QRVJfRUxFTUVOVCo4KS0xLGg9bmV3IEZsb2F0MzJBcnJheShhKjMpO2ZvcihsZXQgbT0wO208YTttKyspaFttKjMrMF09dVttKjQrMF0vbCxoW20qMysxXT11W20qNCsxXS9sLGhbbSozKzJdPXVbbSo0KzJdL2w7cmV0dXJuIGh9ZnVuY3Rpb24gekwoZSl7bGV0IHQ9ZS5tZXNoZXNbMF0ucHJpbWl0aXZlc1swXSxuPWUuYWNjZXNzb3JzW3QuYXR0cmlidXRlcy5OT1JNQUxdLG89ZS5idWZmZXJWaWV3c1tuLmJ1ZmZlclZpZXddLGE9bi5jb3VudCxyPW8uZXh0ZW5zaW9ucz9vLmV4dGVuc2lvbnMuRVhUX21lc2hvcHRfY29tcHJlc3Npb246dm9pZCAwO2lmKHI9PT12b2lkIDApe2xldCBsPWUuYnVmZmVyc1tvLmJ1ZmZlcl0uZXh0cmFzLl9waXBlbGluZS5zb3VyY2U7cmV0dXJuIG5ldyBGbG9hdDMyQXJyYXkobC5idWZmZXIsbC5ieXRlT2Zmc2V0KyhvLmJ5dGVPZmZzZXQ/PzApKyhuLmJ5dGVPZmZzZXQ/PzApLGEqMyl9bGV0IGk9ZS5idWZmZXJzW3IuYnVmZmVyXS5leHRyYXMuX3BpcGVsaW5lLnNvdXJjZSxmPW5ldyBVaW50OEFycmF5KGkuYnVmZmVyLGkuYnl0ZU9mZnNldCsoci5ieXRlT2Zmc2V0Pz8wKSsobi5ieXRlT2Zmc2V0Pz8wKSxyLmJ5dGVMZW5ndGgpLGQ9ci5ieXRlU3RyaWRlLGM9bmV3IEludDhBcnJheShhKmQpO3pzLmRlY29kZVZlcnRleEJ1ZmZlcihuZXcgVWludDhBcnJheShjLmJ1ZmZlciksYSxkLGYpO2xldCB1PW5ldyBGbG9hdDMyQXJyYXkoYSozKTtmb3IobGV0IGw9MDtsPGE7bCsrKXtsZXQgaD1NYXRoLm1heChjW2wqNCswXS8xMjcsLTEpLG09TWF0aC5tYXgoY1tsKjQrMV0vMTI3LC0xKSxiPTEtKE1hdGguYWJzKGgpK01hdGguYWJzKG0pKTtpZihiPDApe2xldCB5PWgsVD1tO2g9KDEtTWF0aC5hYnMoVCkpKmsuc2lnbk5vdFplcm8oeSksbT0oMS1NYXRoLmFicyh5KSkqay5zaWduTm90WmVybyhUKX1sZXQgcD1iZDtwLng9aCxwLnk9bSxwLno9YixwPXMubm9ybWFsaXplKHAsYmQpLHVbbCozKzBdPXAueCx1W2wqMysxXT1wLnksdVtsKjMrMl09cC56fXJldHVybiB1fWZ1bmN0aW9uIEdMKGUpe2xldCB0PWUubWVzaGVzWzBdLnByaW1pdGl2ZXNbMF0sbj1lLmFjY2Vzc29yc1t0LmluZGljZXNdLG89ZS5idWZmZXJWaWV3c1tuLmJ1ZmZlclZpZXddLGE9bi5jb3VudCxyPW4uY29tcG9uZW50VHlwZT09PW5lLlVOU0lHTkVEX1NIT1JUP1VpbnQxNkFycmF5OlVpbnQzMkFycmF5LGk9by5leHRlbnNpb25zP28uZXh0ZW5zaW9ucy5FWFRfbWVzaG9wdF9jb21wcmVzc2lvbjp2b2lkIDA7aWYoaT09PXZvaWQgMCl7bGV0IHU9ZS5idWZmZXJzW28uYnVmZmVyXS5leHRyYXMuX3BpcGVsaW5lLnNvdXJjZTtyZXR1cm4gbmV3IHIodS5idWZmZXIsdS5ieXRlT2Zmc2V0KyhvLmJ5dGVPZmZzZXQ/PzApKyhuLmJ5dGVPZmZzZXQ/PzApLGEpfWxldCBmPWUuYnVmZmVyc1tpLmJ1ZmZlcl0uZXh0cmFzLl9waXBlbGluZS5zb3VyY2UsZD1uZXcgVWludDhBcnJheShmLmJ1ZmZlcixmLmJ5dGVPZmZzZXQrKGkuYnl0ZU9mZnNldD8/MCkrKG4uYnl0ZU9mZnNldD8/MCksaS5ieXRlTGVuZ3RoKSxjPW5ldyByKGEpO3JldHVybiB6cy5kZWNvZGVJbmRleEJ1ZmZlcihuZXcgVWludDhBcnJheShjLmJ1ZmZlciksYSxpLmJ5dGVTdHJpZGUsZCksY31mdW5jdGlvbiBpbShlLHQpe2xldCBuPWUubWVzaGVzWzBdLnByaW1pdGl2ZXNbMF0sbz1lLmFjY2Vzc29yc1tuLmV4dGVuc2lvbnMuQ0VTSVVNX3RpbGVfZWRnZXNbdF1dLGE9ZS5idWZmZXJWaWV3c1tvLmJ1ZmZlclZpZXddLHI9by5jb3VudCxpPW8uY29tcG9uZW50VHlwZT09PW5lLlVOU0lHTkVEX1NIT1JUP1VpbnQxNkFycmF5OlVpbnQzMkFycmF5LGY9YS5leHRlbnNpb25zP2EuZXh0ZW5zaW9ucy5FWFRfbWVzaG9wdF9jb21wcmVzc2lvbjp2b2lkIDA7aWYoZj09PXZvaWQgMCl7bGV0IGg9ZS5idWZmZXJzW2EuYnVmZmVyXS5leHRyYXMuX3BpcGVsaW5lLnNvdXJjZTtyZXR1cm4gbmV3IGkoaC5idWZmZXIsaC5ieXRlT2Zmc2V0KyhhLmJ5dGVPZmZzZXQ/PzApKyhvLmJ5dGVPZmZzZXQ/PzApLHIpfWxldCBkPWUuYnVmZmVyc1tmLmJ1ZmZlcl0uZXh0cmFzLl9waXBlbGluZS5zb3VyY2UsYz1uZXcgVWludDhBcnJheShkLmJ1ZmZlcixkLmJ5dGVPZmZzZXQrKGYuYnl0ZU9mZnNldD8/MCkrKG8uYnl0ZU9mZnNldD8/MCksZi5ieXRlTGVuZ3RoKSx1PW5ldyBpKHIpLGw9Zi5ieXRlU3RyaWRlO3JldHVybiB6cy5kZWNvZGVJbmRleFNlcXVlbmNlKG5ldyBVaW50OEFycmF5KHUuYnVmZmVyKSxyLGwsYyksdX1mdW5jdGlvbiBWTChlLHQsbil7cmV0dXJuIG4ucG9zaXRpb25zPWpMKGUpLG4ubm9ybWFscz10P3pMKGUpOnZvaWQgMCxuLmluZGljZXM9R0woZSksbi5lZGdlSW5kaWNlc1dlc3Q9aW0oZSwibGVmdCIpLG4uZWRnZUluZGljZXNTb3V0aD1pbShlLCJib3R0b20iKSxuLmVkZ2VJbmRpY2VzRWFzdD1pbShlLCJyaWdodCIpLG4uZWRnZUluZGljZXNOb3J0aD1pbShlLCJ0b3AiKSxufWZ1bmN0aW9uIGYyKGUsdCxuLG8sYSxyLGksZil7bGV0e2VuY29kaW5nOmR9PWUsYz1kLnN0cmlkZSx1PWUudmVydGljZXMse2hhc1ZlcnRleE5vcm1hbHM6bCxoYXNXZWJNZXJjYXRvclQ6aCxleGFnZ2VyYXRpb246bSxleGFnZ2VyYXRpb25SZWxhdGl2ZUhlaWdodDpifT1kLHk9bSE9PTEsVD1lLnZlcnRleENvdW50V2l0aG91dFNraXJ0cyxfPVQqYyxFPXUubGVuZ3RoL2Msdz1FLVQsUj1lLmluZGljZXMsUz1lLmluZGV4Q291bnRXaXRob3V0U2tpcnRzLEM9ZS53ZXN0SW5kaWNlc1NvdXRoVG9Ob3J0aCxJPWUuc291dGhJbmRpY2VzRWFzdFRvV2VzdCxOPWUuZWFzdEluZGljZXNOb3J0aFRvU291dGgsUD1lLm5vcnRoSW5kaWNlc1dlc3RUb0Vhc3Q7TGkuYWRkU2tpcnRJbmRpY2VzV2l0aEZpbGxlZENvcm5lcnMoQyxJLE4sUCxULFIsUyk7bGV0IEY9MCxBPUYrQy5sZW5ndGgseD1BK0kubGVuZ3RoLE09eCtOLmxlbmd0aCx2PVtDLEksTixQXSxVPVtGLEEseCxNXSx6PVstMSwwLDEsMF0sRD1bMCwtMSwwLDFdLEc9cy5jbG9uZShvLFNMKSxIPXMuY2xvbmUoYSxDTCksTz1lLm1heGltdW1IZWlnaHQsWj1lLm1pbmltdW1IZWlnaHQtZjtmb3IobGV0IGZlPTA7ZmU8dztmZSsrKXtsZXQgZWU9MDtmb3IoZWU9MDtlZTwzJiYhKGZlPFVbZWUrMV0pO2VlKyspO2xldCBiZT12W2VlXVtmZS1VW2VlXV0sbGU9ZC5kZWNvZGVUZXh0dXJlQ29vcmRpbmF0ZXModSxiZSxhMikscGU9MWUtNCx1ZT1sZS54K3pbZWVdKnBlLGFlPWxlLnkrRFtlZV0qcGUsQWU9ay5sZXJwKHQud2VzdCx0LmVhc3QsdWUpLE5lPWsuY2xhbXAoay5sZXJwKHQuc291dGgsdC5ub3J0aCxhZSksLWsuUElfT1ZFUl9UV08sK2suUElfT1ZFUl9UV08pLEtlPWQuZGVjb2RlSGVpZ2h0KHUsYmUpLWYsdHQ9cmUuZnJvbVJhZGlhbnMoQWUsTmUsS2UsVEwpLFhlPXJlLnRvQ2FydGVzaWFuKHR0LG4sbzIpLExlO2wmJihMZT1kLmdldE9jdEVuY29kZWROb3JtYWwodSxiZSxpMikpO2xldCBqZTtoJiYoamU9ZC5kZWNvZGVXZWJNZXJjYXRvclQodSxiZSkpO2xldCBpdDt5JiYoaXQ9bi5nZW9kZXRpY1N1cmZhY2VOb3JtYWwoWGUsYzIpKSxfPWQuZW5jb2RlKHUsXyxYZSxsZSxLZSxMZSxqZSxpdCk7bGV0IFllPSQubXVsdGlwbHlCeVBvaW50KGksWGUseEwpO3MubWluaW11bUJ5Q29tcG9uZW50KFllLEcsRykscy5tYXhpbXVtQnlDb21wb25lbnQoWWUsSCxIKX1sZXQgb2U9dW8uZnJvbUNvcm5lcnMoRyxILEJMKSxjZT1uZXcgcmEoZC5jZW50ZXIsb2UsWixPLHIsZC5oYXNWZXJ0ZXhOb3JtYWxzLGQuaGFzV2ViTWVyY2F0b3JULHksbSxiKTtpZihkLnF1YW50aXphdGlvbiE9PWNlLnF1YW50aXphdGlvbil7bGV0IGZlPWNlLGVlPWZlLnN0cmlkZSxiZT1uZXcgRmxvYXQzMkFycmF5KEUqZWUpLGxlPTA7Zm9yKGxldCBwZT0wO3BlPEU7cGUrKylsZT1mZS5lbmNvZGUoYmUsbGUsZC5kZWNvZGVQb3NpdGlvbih1LHBlLG8yKSxkLmRlY29kZVRleHR1cmVDb29yZGluYXRlcyh1LHBlLGEyKSxkLmRlY29kZUhlaWdodCh1LHBlKSxkLmhhc1ZlcnRleE5vcm1hbHM/ZC5nZXRPY3RFbmNvZGVkTm9ybWFsKHUscGUsaTIpOnZvaWQgMCxkLmhhc1dlYk1lcmNhdG9yVD9kLmRlY29kZVdlYk1lcmNhdG9yVCh1LHBlKTp2b2lkIDAsZC5oYXNHZW9kZXRpY1N1cmZhY2VOb3JtYWxzP2QuZGVjb2RlR2VvZGV0aWNTdXJmYWNlTm9ybWFsKHUscGUsYzIpOnZvaWQgMCk7ZS52ZXJ0aWNlcz1iZSxlLnN0cmlkZT1lZSxlLmVuY29kaW5nPWZlfXJldHVybiBlfWZ1bmN0aW9uIHMyKGUsdCxuLG8pe3N3aXRjaChuKXtjYXNlIExfOnJldHVybiBrLnNpZ24oby54LWUueCk7Y2FzZSBqXzpyZXR1cm4gay5zaWduKHQueC1vLngpO2Nhc2Ugel86cmV0dXJuIGsuc2lnbihvLnktZS55KTtkZWZhdWx0OnJldHVybiBrLnNpZ24odC55LW8ueSl9fWZ1bmN0aW9uIFpMKGUsdCxuLG8sYSxyKXtsZXQgaSxmLGQ7c3dpdGNoKG4pe2Nhc2UgTF86aT0oZS54LW8ueCkvKGEueC1vLngpLGY9ZS54LGQ9by55KyhhLnktby55KSppO2JyZWFrO2Nhc2Ugal86aT0odC54LW8ueCkvKGEueC1vLngpLGY9dC54LGQ9by55KyhhLnktby55KSppO2JyZWFrO2Nhc2Ugel86aT0oZS55LW8ueSkvKGEueS1vLnkpLGY9by54KyhhLngtby54KSppLGQ9ZS55O2JyZWFrO2RlZmF1bHQ6aT0odC55LW8ueSkvKGEueS1vLnkpLGY9by54KyhhLngtby54KSppLGQ9dC55O2JyZWFrfXJldHVybiBzLmZyb21FbGVtZW50cyhmLGQsaSxyKX1mdW5jdGlvbiAkTChlLHQsbixvLGEscixpLGYpe2xldCBkPTAsYz1YTCx1PVdMLGw9MyxoPUpMO1kuY2xvbmUoYSxoWzBdKSxZLmNsb25lKHIsaFsxXSksWS5jbG9uZShpLGhbMl0pO2xldCBtPVlMO3MuZnJvbUVsZW1lbnRzKDEsMCwwLG1bMF0pLHMuZnJvbUVsZW1lbnRzKDAsMSwwLG1bMV0pLHMuZnJvbUVsZW1lbnRzKDAsMCwxLG1bMl0pO2ZvcihsZXQgYj0wO2I8dDtiKyspe2xldCBwPShlK2IpJUtMLHk9YyxUPXU7Yz1oLHU9bSxkPWwsaD15LG09VCxsPTA7bGV0IF89ZC0xLEU9Y1tfXSx3PXVbX10sUj1zMihuLG8scCxFKTtmb3IobGV0IFM9MDtTPGQ7UysrKXtsZXQgQz1jW1NdLEk9dVtTXSxOPXMyKG4sbyxwLEMpO2lmKFIqTj09PS0xKXtsZXQgUD1aTChuLG8scCxFLEMscUwpLHt4OkYseTpBLHo6eH09UCxNPTEteCx2PXcueCpNK0kueCp4LFU9dy55Kk0rSS55Kngsej13LnoqTStJLnoqeDtZLmZyb21FbGVtZW50cyhGLEEsaFtsXSkscy5mcm9tRWxlbWVudHModixVLHosbVtsXSksbCsrfU4+PTAmJihZLmNsb25lKEMsaFtsXSkscy5jbG9uZShJLG1bbF0pLGwrKyksXz1TLEU9Qyx3PUksUj1OfWlmKGw9PT0wKWJyZWFrfWYubGVuZ3RoPWw7Zm9yKGxldCBiPTA7YjxsO2IrKylZLmNsb25lKGhbYl0sZi5jb29yZGluYXRlc1tiXSkscy5jbG9uZShtW2JdLGYuYmFyeWNlbnRyaWNDb29yZGluYXRlc1tiXSk7cmV0dXJuIGZ9ZnVuY3Rpb24gZWooZSx0LG4sbyxhLHIsaSxmKXtyZXR1cm4gJEwoZT90P3pfOkxfOnQ/al86SEwsMixuLG8sYSxyLGksZil9ZnVuY3Rpb24gbmooZSx0LG4sbyxhLHIsaSxmLGQsYyx1LGwsaCxtLGIpe2xldCBwPXt9LHk9ZT8uNTowLFQ9ZT8xOi41LF89dD8uNTowLEU9dD8xOi41LHc9dUw7dy54PXksdy55PV87bGV0IFI9bEw7Ui54PVQsUi55PUU7bGV0IFM9MDtmb3IobGV0IEM9MDtDPG47Qys9Myl7bGV0IEk9b1tDKzBdLE49b1tDKzFdLFA9b1tDKzJdLEY9aS5kZWNvZGVUZXh0dXJlQ29vcmRpbmF0ZXMocixJLG1MKSxBPWkuZGVjb2RlVGV4dHVyZUNvb3JkaW5hdGVzKHIsTixiTCkseD1pLmRlY29kZVRleHR1cmVDb29yZGluYXRlcyhyLFAscEwpLE09ZWooZSx0LHcsUixGLEEseCxRTCksdj1NLmxlbmd0aDtpZih2PDMpY29udGludWU7bGV0IFU9aEw7Zm9yKGxldCBIPTA7SDx2O0grKyl7bGV0IE89TS5iYXJ5Y2VudHJpY0Nvb3JkaW5hdGVzW0hdLFo9Ty54LG9lPU8ueSxjZT1PLnosZmU9TWF0aC5jZWlsKFopfE1hdGguY2VpbChvZSk8PDF8TWF0aC5jZWlsKGNlKTw8MixlZT10altmZV0sYmUsbGU9ITE7aWYoZWUubGVuZ3RoPT09MSl7bGV0IHBlPWVlWzBdLGFlPW9bQytwZV07YmU9cFthZV0sYmU9PT12b2lkIDAmJihsZT0hMCxiZT1TKysscFthZV09YmUpfWVsc2UgaWYoZWUubGVuZ3RoPT09Mil7bGV0IHBlPWVlWzBdLHVlPWVlWzFdLGFlPW9bQytwZV0sQWU9b1tDK3VlXSxOZT1NLmJhcnljZW50cmljQ29vcmRpbmF0ZXNbKEgrdi0xKSV2XSxldD1NYXRoLmNlaWwoTmUueCl8TWF0aC5jZWlsKE5lLnkpPDwxfE1hdGguY2VpbChOZS56KTw8MixLZT1mZT09PWV0LHR0PU1hdGgubWluKGFlLEFlKSxYZT1NYXRoLm1heChhZSxBZSksTGU9YSsyKih0dCphK1hlKSxqZT1MZSswLGl0PUxlKzEsWWU9cFtqZV0sZnQ9cFtpdF0sSXQ9IUtlPT0oWWU9PT12b2lkIDB8fGZ0PT09dm9pZCAwKTtpZihiZT1JdD9ZZTpmdCxiZT09PXZvaWQgMCl7bGU9ITAsYmU9UysrO2xldCBDdD1JdD9qZTppdDtwW0N0XT1iZX19ZWxzZSBsZT0hMCxiZT1TKys7aWYoVVtIXT1iZSxsZSl7bGV0IHBlPUMvMztoLnB1c2gocGUpO2xldCB1ZT1NLmNvb3JkaW5hdGVzW0hdLGFlPSh1ZS54LXkpLyhULXkpLEFlPSh1ZS55LV8pLyhFLV8pO2IucHVzaChhZSxBZSksbS5wdXNoKFosb2UpLGFlPT09MD9kLnB1c2goYmUpOmFlPT09MSYmdS5wdXNoKGJlKSxBZT09PTA/Yy5wdXNoKGJlKTpBZT09PTEmJmwucHVzaChiZSl9fWxldCB6PVVbMF0sRD1VWzFdLEc9VVsyXTtmLnB1c2goeixELEcpO2ZvcihsZXQgSD0zO0g8djtIKyspRD1HLEc9VVtIXSxmLnB1c2goeixELEcpfWQuc29ydChmdW5jdGlvbihDLEkpe3JldHVybiBiW0MqMisxXS1iW0kqMisxXX0pLGMuc29ydChmdW5jdGlvbihDLEkpe3JldHVybiBiW0kqMiswXS1iW0MqMiswXX0pLHUuc29ydChmdW5jdGlvbihDLEkpe3JldHVybiBiW0kqMisxXS1iW0MqMisxXX0pLGwuc29ydChmdW5jdGlvbihDLEkpe3JldHVybiBiW0MqMiswXS1iW0kqMiswXX0pfXZhciBVXyxKVSxaVSxRVSwkVSxlTCx0TCxuTCxvTCxhTCxyTCxpTCxjTCxiZCxzTCxmTCxkTCxybSx1TCxsTCxoTCxtTCxiTCxwTCxnTCxfTCx5TCxBTCx3TCxUTCxFTCxvMixSTCx4TCxPTCxTTCxDTCxNTCxOTCxJTCxQTCxhMixrTCx2TCxGTCxETCxCTCxyMixpMixVTCxjMixMTCxMXyxITCxqXyx6XyxLTCxxTCxXTCxYTCxZTCxKTCxRTCx0aixjbSxHXz1YKCgpPT57Q3goKTtVcigpO054KCk7QWkoKTt0bCgpO010KCk7anQoKTtJZSgpO1R0KCk7R2UoKTt2dCgpO1dlKCk7R3MoKTttdCgpO3BuKCk7d2koKTtfbigpO1ZzKCk7WngoKTtCXygpO3NyKCk7eWkoKTtVXz17fSxKVT17cG9zaXRpb25zOnZvaWQgMCxub3JtYWxzOnZvaWQgMCxpbmRpY2VzOnZvaWQgMCxlZGdlSW5kaWNlc1dlc3Q6dm9pZCAwLGVkZ2VJbmRpY2VzU291dGg6dm9pZCAwLGVkZ2VJbmRpY2VzRWFzdDp2b2lkIDAsZWRnZUluZGljZXNOb3J0aDp2b2lkIDB9LFpVPW5ldyByZSxRVT1uZXcgcywkVT1uZXcgJCxlTD1uZXcgJCx0TD1uZXcgJCxuTD1uZXcgcyxvTD1uZXcgcyxhTD1uZXcgcyxyTD1uZXcgcyxpTD1uZXcgcmUsY0w9bmV3IFksYmQ9bmV3IHMsc0w9bmV3IFksZkw9bmV3IHMsZEw9bmV3IHMscm09ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS10fTtVXy5jcmVhdGVNZXNoPWFzeW5jIGZ1bmN0aW9uKGUpe2U9ZT8/Q2UuRU1QVFlfT0JKRUNUO2xldHtleGFnZ2VyYXRpb246dD0xLGV4YWdnZXJhdGlvblJlbGF0aXZlSGVpZ2h0Om49MCxoYXNWZXJ0ZXhOb3JtYWxzOm8saGFzV2ViTWVyY2F0b3JUOmEsZ2x0ZjpyLG1pbmltdW1IZWlnaHQ6aSxtYXhpbXVtSGVpZ2h0OmYsc2tpcnRIZWlnaHQ6ZH09ZSx1PXQhPT0xLGw9Z2UuY2xvbmUoZS5ib3VuZGluZ1NwaGVyZSxuZXcgZ2UpLGg9eW4uY2xvbmUoZS5vcmllbnRlZEJvdW5kaW5nQm94LG5ldyB5biksbT1zLmNsb25lKGUuaG9yaXpvbk9jY2x1c2lvblBvaW50LG5ldyBzKSxiPXEuY2xvbmUoZS5lbGxpcHNvaWQsbmV3IHEpLHA9U2UuY2xvbmUoZS5yZWN0YW5nbGUsbmV3IFNlKTthd2FpdChyLmV4dGVuc2lvbnNSZXF1aXJlZCE9PXZvaWQgMCYmci5leHRlbnNpb25zUmVxdWlyZWQuaW5kZXhPZigiRVhUX21lc2hvcHRfY29tcHJlc3Npb24iKSE9PS0xP3pzLnJlYWR5OlByb21pc2UucmVzb2x2ZSh2b2lkIDApKTtsZXQgXz1wLndlc3QsRT1wLnNvdXRoLHc9cC5ub3J0aCxSPXAud2lkdGgsUz1wLmhlaWdodCxDPVNlLmNlbnRlcihwLFpVKTtDLmhlaWdodD0uNSooaStmKTtsZXQgST1yZS50b0NhcnRlc2lhbihDLGIsUVUpLE49Y28uZWFzdE5vcnRoVXBUb0ZpeGVkRnJhbWUoSSxiLCRVKSxQPSQuaW52ZXJzZVRyYW5zZm9ybWF0aW9uKE4sZUwpLEY9JC51bnBhY2soci5ub2Rlc1swXS5tYXRyaXgsMCx0TCk7Rj0kLm11bHRpcGx5KE14LllfVVBfVE9fWl9VUCxGLEYpO2xldCBBPVZMKHIsbyxKVSkseD1MaS5nZXRTa2lydFZlcnRleENvdW50KEEuZWRnZUluZGljZXNXZXN0LEEuZWRnZUluZGljZXNTb3V0aCxBLmVkZ2VJbmRpY2VzRWFzdCxBLmVkZ2VJbmRpY2VzTm9ydGgpLE09QS5wb3NpdGlvbnMsdj1BLm5vcm1hbHMsVT1BLmluZGljZXMsej1NLmxlbmd0aC8zLEQ9eit4LEc9VS5sZW5ndGgsSD1MaS5nZXRTa2lydEluZGV4Q291bnRXaXRoRmlsbGVkQ29ybmVycyh4KSxPPUQ8PTY1NTM1P1VpbnQxNkFycmF5OlVpbnQzMkFycmF5LFo9bmV3IE8oRytIKTtaLnNldChVKTtsZXQgb2U9bmV3IE8oQS5lZGdlSW5kaWNlc1dlc3QpLGNlPW5ldyBPKEEuZWRnZUluZGljZXNTb3V0aCksZmU9bmV3IE8oQS5lZGdlSW5kaWNlc0Vhc3QpLGVlPW5ldyBPKEEuZWRnZUluZGljZXNOb3J0aCksYmU9bmV3IE8ob2UpLnNvcnQoKSxsZT1uZXcgTyhjZSkuc29ydCgpLHBlPW5ldyBPKGZlKS5zb3J0KCksdWU9bmV3IE8oZWUpLnNvcnQoKSxhZT1Sbi5nZW9kZXRpY0xhdGl0dWRlVG9NZXJjYXRvckFuZ2xlKEUpLE5lPTEvKFJuLmdlb2RldGljTGF0aXR1ZGVUb01lcmNhdG9yQW5nbGUodyktYWUpLGV0PXMuZnJvbUVsZW1lbnRzKE51bWJlci5QT1NJVElWRV9JTkZJTklUWSxOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLG5MKSxLZT1zLmZyb21FbGVtZW50cyhOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFksTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZLE51bWJlci5ORUdBVElWRV9JTkZJTklUWSxvTCksdHQ9bmV3IHJhKGwuY2VudGVyLHZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCxvLGEsdSx0LG4pLFhlPXR0LnN0cmlkZSxMZT1uZXcgRmxvYXQzMkFycmF5KEQqWGUpLGplPTA7Zm9yKGxldCBZZT0wO1llPHo7WWUrKyl7bGV0IGZ0PXMudW5wYWNrKE0sWWUqMyxhTCksSXQ9JC5tdWx0aXBseUJ5UG9pbnQoRixmdCxyTCksQ3Q9cmUuZnJvbUNhcnRlc2lhbihJdCxiLGlMKSx7bG9uZ2l0dWRlOmh0LGxhdGl0dWRlOkt0LGhlaWdodDpQdH09Q3QsTHQ9KGh0LV8pL1IscWU9KEt0LUUpL1M7THQ9ay5jbGFtcChMdCwwLDEpLHFlPWsuY2xhbXAocWUsMCwxKSxfYShiZSxZZSxybSk+PTA/THQ9MDpfYShwZSxZZSxybSk+PTAmJihMdD0xKSxfYShsZSxZZSxybSk+PTA/cWU9MDpfYSh1ZSxZZSxybSk+PTAmJihxZT0xKTtsZXQgVmU9WS5mcm9tRWxlbWVudHMoTHQscWUsY0wpLFJ0O2lmKG8pe2xldCBvbj1zLnVucGFjayh2LFllKjMsYmQpO29uPSQubXVsdGlwbHlCeVBvaW50QXNWZWN0b3IoRixvbixiZCksb249cy5ub3JtYWxpemUob24sYmQpLFJ0PVZ0Lm9jdEVuY29kZShvbixzTCl9bGV0IEZ0O2EmJihGdD0oUm4uZ2VvZGV0aWNMYXRpdHVkZVRvTWVyY2F0b3JBbmdsZShLdCktYWUpKk5lKTtsZXQgcXQ7dSYmKHF0PWIuZ2VvZGV0aWNTdXJmYWNlTm9ybWFsKEl0LGZMKSksamU9dHQuZW5jb2RlKExlLGplLEl0LFZlLFB0LFJ0LEZ0LHF0KTtsZXQgWnQ9JC5tdWx0aXBseUJ5UG9pbnQoUCxJdCxkTCk7ZXQ9cy5taW5pbXVtQnlDb21wb25lbnQoWnQsZXQsZXQpLEtlPXMubWF4aW11bUJ5Q29tcG9uZW50KFp0LEtlLEtlKX1sZXQgaXQ9bmV3IERfKHMuY2xvbmUodHQuY2VudGVyLG5ldyBzKSxMZSxaLEcseixpLGYscCxnZS5jbG9uZShsLG5ldyBnZSkscy5jbG9uZShtLG5ldyBzKSxYZSx5bi5jbG9uZShoLG5ldyB5biksdHQsb2UsY2UsZmUsZWUpO3JldHVybiBmMihpdCxwLGIsZXQsS2UsTixQLGQpLFByb21pc2UucmVzb2x2ZShpdCl9O3VMPW5ldyBZLGxMPW5ldyBZLGhMPW5ldyBBcnJheSg2KSxtTD1uZXcgWSxiTD1uZXcgWSxwTD1uZXcgWSxnTD1uZXcgcyxfTD1uZXcgcyx5TD1uZXcgcyxBTD1uZXcgcmUsd0w9bmV3IHMsVEw9bmV3IHJlLEVMPW5ldyByZSxvMj1uZXcgcyxSTD1uZXcgcyx4TD1uZXcgcyxPTD1uZXcgcyxTTD1uZXcgcyxDTD1uZXcgcyxNTD1uZXcgcyxOTD1uZXcgcyxJTD1uZXcgJCxQTD1uZXcgJCxhMj1uZXcgWSxrTD1uZXcgWSx2TD1uZXcgcyxGTD1uZXcgZ2UsREw9bmV3IHluLEJMPW5ldyB1byxyMj1uZXcgcyxpMj1uZXcgWSxVTD1uZXcgWSxjMj1uZXcgcyxMTD1uZXcgcztVXy51cHNhbXBsZU1lc2g9ZnVuY3Rpb24oZSl7ZT1lPz9DZS5FTVBUWV9PQkpFQ1Q7bGV0e2lzRWFzdENoaWxkOnQsaXNOb3J0aENoaWxkOm4scGFyZW50TWluaW11bUhlaWdodDpvLHBhcmVudE1heGltdW1IZWlnaHQ6YSxza2lydEhlaWdodDpyfT1lLGk9ZS5wYXJlbnRJbmRleENvdW50V2l0aG91dFNraXJ0cyxmPWUucGFyZW50SW5kaWNlcyxkPWUucGFyZW50VmVydGV4Q291bnRXaXRob3V0U2tpcnRzLGM9ZS5wYXJlbnRWZXJ0aWNlcyx1PXJhLmNsb25lKGUucGFyZW50RW5jb2RpbmcsbmV3IHJhKSxsPXUuaGFzVmVydGV4Tm9ybWFscyxoPXUuaGFzV2ViTWVyY2F0b3JULG09dS5leGFnZ2VyYXRpb24sYj11LmV4YWdnZXJhdGlvblJlbGF0aXZlSGVpZ2h0LHk9bSE9PTEsVD1TZS5jbG9uZShlLnJlY3RhbmdsZSxuZXcgU2UpLF89cS5jbG9uZShlLmVsbGlwc29pZCksRT1bXSx3PVtdLFI9W10sUz1bXSxDPVtdLEk9W10sTj1bXSxQPVtdO25qKHQsbixpLGYsZCxjLHUsUyxDLEksTixQLEUsUix3KTtsZXQgRj1TZS5jZW50ZXIoVCxBTCk7Ri5oZWlnaHQ9LjUqKG8rYSk7bGV0IEE9cmUudG9DYXJ0ZXNpYW4oRixfLHdMKSx4PUUubGVuZ3RoLE09bmV3IHJhKEEsdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLGwsaCx5LG0sYiksdj1NLnN0cmlkZSxVPUxpLmdldFNraXJ0VmVydGV4Q291bnQoQyxJLE4sUCksej14K1UsRD1TLmxlbmd0aCxHPUxpLmdldFNraXJ0SW5kZXhDb3VudFdpdGhGaWxsZWRDb3JuZXJzKFUpLEg9RCtHLE89ejw9NjU1MzU/VWludDE2QXJyYXk6VWludDMyQXJyYXksWj1uZXcgTyhIKTtaLnNldChTKTtsZXQgb2U9bmV3IE8oQyksY2U9bmV3IE8oSSksZmU9bmV3IE8oTiksZWU9bmV3IE8oUCksYmU9bmV3IEZsb2F0MzJBcnJheSh6KnYpLGxlPTAscGU9Y28uZWFzdE5vcnRoVXBUb0ZpeGVkRnJhbWUoQSxfLElMKSx1ZT0kLmludmVyc2VUcmFuc2Zvcm1hdGlvbihwZSxQTCksYWU9VC53ZXN0LEFlPVQuZWFzdCxOZT1ULnNvdXRoLGV0PVQubm9ydGgsS2U9Um4uZ2VvZGV0aWNMYXRpdHVkZVRvTWVyY2F0b3JBbmdsZShOZSksWGU9MS8oUm4uZ2VvZGV0aWNMYXRpdHVkZVRvTWVyY2F0b3JBbmdsZShldCktS2UpLExlPU51bWJlci5QT1NJVElWRV9JTkZJTklUWSxqZT1OdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFksaXQ9cy5mcm9tRWxlbWVudHMoTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLE51bWJlci5QT1NJVElWRV9JTkZJTklUWSxOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksTUwpLFllPXMuZnJvbUVsZW1lbnRzKE51bWJlci5ORUdBVElWRV9JTkZJTklUWSxOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFksTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZLE5MKTtmb3IobGV0IFB0PTA7UHQ8eDtQdCsrKXtsZXQgTHQ9RVtQdF0scWU9ZltMdCozKzBdLFZlPWZbTHQqMysxXSxSdD1mW0x0KjMrMl0sRnQ9a0w7RnQueD13W1B0KjIrMF0sRnQueT13W1B0KjIrMV07bGV0IHF0PUZ0LngsWnQ9RnQueSxvbj1SW1B0KjIrMF0sd249UltQdCoyKzFdLER0PTEtb24td24sYW49dS5kZWNvZGVIZWlnaHQoYyxxZSksenQ9dS5kZWNvZGVIZWlnaHQoYyxWZSksZm49dS5kZWNvZGVIZWlnaHQoYyxSdCksVm49YW4qb24renQqd24rZm4qRHQ7TGU9TWF0aC5taW4oVm4sTGUpLGplPU1hdGgubWF4KFZuLGplKTtsZXQgSG49ay5sZXJwKGFlLEFlLHF0KSxQbj1rLmxlcnAoTmUsZXQsWnQpLHJvPXJlLmZyb21SYWRpYW5zKEhuLFBuLFZuLEVMKSxrdD1yZS50b0NhcnRlc2lhbihybyxfLFJMKSx4dD0kLm11bHRpcGx5QnlQb2ludCh1ZSxrdCxPTCk7aXQ9cy5taW5pbXVtQnlDb21wb25lbnQoeHQsaXQsaXQpLFllPXMubWF4aW11bUJ5Q29tcG9uZW50KHh0LFllLFllKTtsZXQgT247aWYobCl7bGV0IEd0PXUuZGVjb2RlTm9ybWFsKGMscWUsZ0wpLGRuPXUuZGVjb2RlTm9ybWFsKGMsVmUsX0wpLENvPXUuZGVjb2RlTm9ybWFsKGMsUnQseUwpLHZuPXMuZnJvbUVsZW1lbnRzKEd0Lngqb24rZG4ueCp3bitDby54KkR0LEd0Lnkqb24rZG4ueSp3bitDby55KkR0LEd0Lnoqb24rZG4ueip3bitDby56KkR0LHIyKTt2bj1zLm5vcm1hbGl6ZSh2bixyMiksT249VnQub2N0RW5jb2RlKHZuLFVMKX1sZXQga247aCYmKGtuPShSbi5nZW9kZXRpY0xhdGl0dWRlVG9NZXJjYXRvckFuZ2xlKFBuKS1LZSkqWGUpO2xldCBBbzt5JiYoQW89Xy5nZW9kZXRpY1N1cmZhY2VOb3JtYWwoa3QsTEwpKSxsZT1NLmVuY29kZShiZSxsZSxrdCxGdCxWbixPbixrbixBbyl9bGV0IGZ0PXluLmZyb21SZWN0YW5nbGUoVCxMZSxqZSxfLERMKSxJdD1nZS5mcm9tVmVydGljZXMoYmUsTS5jZW50ZXIsdixGTCksaHQ9bmV3IFRyKF8pLmNvbXB1dGVIb3Jpem9uQ3VsbGluZ1BvaW50RnJvbVZlcnRpY2VzUG9zc2libHlVbmRlckVsbGlwc29pZChNLmNlbnRlcixiZSx2LE0uY2VudGVyLExlLHZMKSxLdD1uZXcgRF8ocy5jbG9uZShNLmNlbnRlcixuZXcgcyksYmUsWixELHgsTGUsamUsVCxnZS5jbG9uZShJdCkscy5jbG9uZShodCksdix5bi5jbG9uZShmdCksTSxvZSxjZSxmZSxlZSk7cmV0dXJuIGYyKEt0LFQsXyxpdCxZZSxwZSx1ZSxyKSxLdH07TF89MCxITD0xLGpfPTIsel89MyxLTD00LHFMPW5ldyBzLFdMPVtuZXcgcyxuZXcgcyxuZXcgcyxuZXcgcyxuZXcgcyxuZXcgc10sWEw9W25ldyBZLG5ldyBZLG5ldyBZLG5ldyBZLG5ldyBZLG5ldyBZXSxZTD1bbmV3IHMsbmV3IHMsbmV3IHMsbmV3IHMsbmV3IHMsbmV3IHNdLEpMPVtuZXcgWSxuZXcgWSxuZXcgWSxuZXcgWSxuZXcgWSxuZXcgWV07UUw9e2xlbmd0aDowLGNvb3JkaW5hdGVzOltuZXcgWSxuZXcgWSxuZXcgWSxuZXcgWSxuZXcgWSxuZXcgWV0sYmFyeWNlbnRyaWNDb29yZGluYXRlczpbbmV3IHMsbmV3IHMsbmV3IHMsbmV3IHMsbmV3IHMsbmV3IHNdfTt0aj1bW10sWzBdLFsxXSxbMCwxXSxbMl0sWzAsMl0sWzEsMl0sWzAsMSwyXV07Y209VV99KTt2YXIgVl89e307cnQoVl8se2RlZmF1bHQ6KCk9PmFqfSk7ZnVuY3Rpb24gb2ooZSx0KXtyZXR1cm4gY20uY3JlYXRlTWVzaChlKS50aGVuKGZ1bmN0aW9uKG8pe2xldCBhPW8udmVydGljZXMuYnVmZmVyLHI9by5pbmRpY2VzLmJ1ZmZlcixpPW8ud2VzdEluZGljZXNTb3V0aFRvTm9ydGguYnVmZmVyLGY9by5zb3V0aEluZGljZXNFYXN0VG9XZXN0LmJ1ZmZlcixkPW8uZWFzdEluZGljZXNOb3J0aFRvU291dGguYnVmZmVyLGM9by5ub3J0aEluZGljZXNXZXN0VG9FYXN0LmJ1ZmZlcjtyZXR1cm4gdC5wdXNoKGEscixpLGYsZCxjKSx7dmVydGljZXNCdWZmZXI6YSxpbmRpY2VzQnVmZmVyOnIsdmVydGV4Q291bnRXaXRob3V0U2tpcnRzOm8udmVydGV4Q291bnRXaXRob3V0U2tpcnRzLGluZGV4Q291bnRXaXRob3V0U2tpcnRzOm8uaW5kZXhDb3VudFdpdGhvdXRTa2lydHMsZW5jb2Rpbmc6by5lbmNvZGluZyx3ZXN0SW5kaWNlc0J1ZmZlcjppLHNvdXRoSW5kaWNlc0J1ZmZlcjpmLGVhc3RJbmRpY2VzQnVmZmVyOmQsbm9ydGhJbmRpY2VzQnVmZmVyOmN9fSl9dmFyIGFqLEhfPVgoKCk9PntHXygpO1VuKCk7YWo9QXQob2opfSk7dmFyIHFfPXt9O3J0KHFfLHtkZWZhdWx0OigpPT5san0pO2Z1bmN0aW9uIHBkKGUsdCxuKXtuPW4/P2s7bGV0IG89ZS5sZW5ndGg7Zm9yKGxldCBhPTA7YTxvOysrYSlpZihuLmVxdWFsc0Vwc2lsb24oZVthXSx0LGsuRVBTSUxPTjEyKSlyZXR1cm4gYTtyZXR1cm4tMX1mdW5jdGlvbiBjaihlLHQpe2UuZWxsaXBzb2lkPXEuY2xvbmUoZS5lbGxpcHNvaWQpLGUucmVjdGFuZ2xlPVNlLmNsb25lKGUucmVjdGFuZ2xlKTtsZXQgbj11aihlLmJ1ZmZlcixlLnJlbGF0aXZlVG9DZW50ZXIsZS5lbGxpcHNvaWQsZS5yZWN0YW5nbGUsZS5uYXRpdmVSZWN0YW5nbGUsZS5leGFnZ2VyYXRpb24sZS5leGFnZ2VyYXRpb25SZWxhdGl2ZUhlaWdodCxlLnNraXJ0SGVpZ2h0LGUuaW5jbHVkZVdlYk1lcmNhdG9yVCxlLm5lZ2F0aXZlQWx0aXR1ZGVFeHBvbmVudEJpYXMsZS5uZWdhdGl2ZUVsZXZhdGlvblRocmVzaG9sZCksbz1uLnZlcnRpY2VzO3QucHVzaChvLmJ1ZmZlcik7bGV0IGE9bi5pbmRpY2VzO3JldHVybiB0LnB1c2goYS5idWZmZXIpLHt2ZXJ0aWNlczpvLmJ1ZmZlcixpbmRpY2VzOmEuYnVmZmVyLG51bWJlck9mQXR0cmlidXRlczpuLmVuY29kaW5nLnN0cmlkZSxtaW5pbXVtSGVpZ2h0Om4ubWluaW11bUhlaWdodCxtYXhpbXVtSGVpZ2h0Om4ubWF4aW11bUhlaWdodCxib3VuZGluZ1NwaGVyZTNEOm4uYm91bmRpbmdTcGhlcmUzRCxvcmllbnRlZEJvdW5kaW5nQm94Om4ub3JpZW50ZWRCb3VuZGluZ0JveCxvY2NsdWRlZVBvaW50SW5TY2FsZWRTcGFjZTpuLm9jY2x1ZGVlUG9pbnRJblNjYWxlZFNwYWNlLGVuY29kaW5nOm4uZW5jb2RpbmcsdmVydGV4Q291bnRXaXRob3V0U2tpcnRzOm4udmVydGV4Q291bnRXaXRob3V0U2tpcnRzLGluZGV4Q291bnRXaXRob3V0U2tpcnRzOm4uaW5kZXhDb3VudFdpdGhvdXRTa2lydHMsd2VzdEluZGljZXNTb3V0aFRvTm9ydGg6bi53ZXN0SW5kaWNlc1NvdXRoVG9Ob3J0aCxzb3V0aEluZGljZXNFYXN0VG9XZXN0Om4uc291dGhJbmRpY2VzRWFzdFRvV2VzdCxlYXN0SW5kaWNlc05vcnRoVG9Tb3V0aDpuLmVhc3RJbmRpY2VzTm9ydGhUb1NvdXRoLG5vcnRoSW5kaWNlc1dlc3RUb0Vhc3Q6bi5ub3J0aEluZGljZXNXZXN0VG9FYXN0fX1mdW5jdGlvbiB1aihlLHQsbixvLGEscixpLGYsZCxjLHUpe2xldCBsLGgsbSxiLHAseTtnKG8pPyhsPW8ud2VzdCxoPW8uc291dGgsbT1vLmVhc3QsYj1vLm5vcnRoLHA9by53aWR0aCx5PW8uaGVpZ2h0KToobD1rLnRvUmFkaWFucyhhLndlc3QpLGg9ay50b1JhZGlhbnMoYS5zb3V0aCksbT1rLnRvUmFkaWFucyhhLmVhc3QpLGI9ay50b1JhZGlhbnMoYS5ub3J0aCkscD1rLnRvUmFkaWFucyhvLndpZHRoKSx5PWsudG9SYWRpYW5zKG8uaGVpZ2h0KSk7bGV0IFQ9W2gsYl0sXz1bbCxtXSxFPWNvLmVhc3ROb3J0aFVwVG9GaXhlZEZyYW1lKHQsbiksdz0kLmludmVyc2VUcmFuc2Zvcm1hdGlvbihFLGRqKSxSLFM7ZCYmKFI9Um4uZ2VvZGV0aWNMYXRpdHVkZVRvTWVyY2F0b3JBbmdsZShoKSxTPTEvKFJuLmdlb2RldGljTGF0aXR1ZGVUb01lcmNhdG9yQW5nbGUoYiktUikpO2xldCBJPXIhPT0xLE49bmV3IERhdGFWaWV3KGUpLFA9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLEY9TnVtYmVyLk5FR0FUSVZFX0lORklOSVRZLEE9c2o7QS54PU51bWJlci5QT1NJVElWRV9JTkZJTklUWSxBLnk9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLEEuej1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7bGV0IHg9Zmo7eC54PU51bWJlci5ORUdBVElWRV9JTkZJTklUWSx4Lnk9TnVtYmVyLk5FR0FUSVZFX0lORklOSVRZLHguej1OdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFk7bGV0IE09MCx2PTAsVT0wLHosRDtmb3IoRD0wO0Q8NDsrK0Qpe2xldCBxZT1NO3o9Ti5nZXRVaW50MzIocWUsITApLHFlKz1LXztsZXQgVmU9ay50b1JhZGlhbnMoTi5nZXRGbG9hdDY0KHFlLCEwKSoxODApO3FlKz1TYyxwZChfLFZlKT09PS0xJiZfLnB1c2goVmUpO2xldCBSdD1rLnRvUmFkaWFucyhOLmdldEZsb2F0NjQocWUsITApKjE4MCk7cWUrPVNjLHBkKFQsUnQpPT09LTEmJlQucHVzaChSdCkscWUrPTIqU2M7bGV0IEZ0PU4uZ2V0SW50MzIocWUsITApO3FlKz1zbSx2Kz1GdCxGdD1OLmdldEludDMyKHFlLCEwKSxVKz1GdCozLE0rPXorS199bGV0IEc9W10sSD1bXSxPPW5ldyBBcnJheSh2KSxaPW5ldyBBcnJheSh2KSxvZT1uZXcgQXJyYXkodiksY2U9ZD9uZXcgQXJyYXkodik6W10sZmU9ST9uZXcgQXJyYXkodik6W10sZWU9bmV3IEFycmF5KFUpLGJlPVtdLGxlPVtdLHBlPVtdLHVlPVtdLGFlPTAsQWU9MDtmb3IoTT0wLEQ9MDtEPDQ7KytEKXt6PU4uZ2V0VWludDMyKE0sITApLE0rPUtfO2xldCBxZT1NLFZlPWsudG9SYWRpYW5zKE4uZ2V0RmxvYXQ2NChNLCEwKSoxODApO00rPVNjO2xldCBSdD1rLnRvUmFkaWFucyhOLmdldEZsb2F0NjQoTSwhMCkqMTgwKTtNKz1TYztsZXQgRnQ9ay50b1JhZGlhbnMoTi5nZXRGbG9hdDY0KE0sITApKjE4MCkscXQ9RnQqLjU7TSs9U2M7bGV0IFp0PWsudG9SYWRpYW5zKE4uZ2V0RmxvYXQ2NChNLCEwKSoxODApLG9uPVp0Ki41O00rPVNjO2xldCB3bj1OLmdldEludDMyKE0sITApO00rPXNtO2xldCBEdD1OLmdldEludDMyKE0sITApO00rPXNtLE0rPXNtO2xldCBhbj1uZXcgQXJyYXkod24pO2ZvcihsZXQgZm49MDtmbjx3bjsrK2ZuKXtsZXQgVm49VmUrTi5nZXRVaW50OChNKyspKkZ0O0JvLmxvbmdpdHVkZT1WbjtsZXQgSG49UnQrTi5nZXRVaW50OChNKyspKlp0O0JvLmxhdGl0dWRlPUhuO2xldCBQbj1OLmdldEZsb2F0MzIoTSwhMCk7aWYoTSs9aWosUG4hPT0wJiZQbjx1JiYoUG4qPS1NYXRoLnBvdygyLGMpKSxQbio9NjM3MTAxMCxCby5oZWlnaHQ9UG4scGQoXyxWbikhPT0tMXx8cGQoVCxIbikhPT0tMSl7bGV0IE9uPXBkKEcsQm8scmUpO2lmKE9uPT09LTEpRy5wdXNoKHJlLmNsb25lKEJvKSksSC5wdXNoKGFlKTtlbHNle2FuW2ZuXT1IW09uXTtjb250aW51ZX19YW5bZm5dPWFlLE1hdGguYWJzKFZuLWwpPHF0P2JlLnB1c2goe2luZGV4OmFlLGNhcnRvZ3JhcGhpYzpyZS5jbG9uZShCbyl9KTpNYXRoLmFicyhWbi1tKTxxdD9wZS5wdXNoKHtpbmRleDphZSxjYXJ0b2dyYXBoaWM6cmUuY2xvbmUoQm8pfSk6TWF0aC5hYnMoSG4taCk8b24/bGUucHVzaCh7aW5kZXg6YWUsY2FydG9ncmFwaGljOnJlLmNsb25lKEJvKX0pOk1hdGguYWJzKEhuLWIpPG9uJiZ1ZS5wdXNoKHtpbmRleDphZSxjYXJ0b2dyYXBoaWM6cmUuY2xvbmUoQm8pfSksUD1NYXRoLm1pbihQbixQKSxGPU1hdGgubWF4KFBuLEYpLG9lW2FlXT1QbjtsZXQgcm89bi5jYXJ0b2dyYXBoaWNUb0NhcnRlc2lhbihCbyk7aWYoT1thZV09cm8sZCYmKGNlW2FlXT0oUm4uZ2VvZGV0aWNMYXRpdHVkZVRvTWVyY2F0b3JBbmdsZShIbiktUikqUyksSSl7bGV0IE9uPW4uZ2VvZGV0aWNTdXJmYWNlTm9ybWFsKHJvKTtmZVthZV09T259JC5tdWx0aXBseUJ5UG9pbnQodyxybyxIcykscy5taW5pbXVtQnlDb21wb25lbnQoSHMsQSxBKSxzLm1heGltdW1CeUNvbXBvbmVudChIcyx4LHgpO2xldCBrdD0oVm4tbCkvKG0tbCk7a3Q9ay5jbGFtcChrdCwwLDEpO2xldCB4dD0oSG4taCkvKGItaCk7eHQ9ay5jbGFtcCh4dCwwLDEpLFpbYWVdPW5ldyBZKGt0LHh0KSwrK2FlfWxldCB6dD1EdCozO2ZvcihsZXQgZm49MDtmbjx6dDsrK2ZuLCsrQWUpZWVbQWVdPWFuW04uZ2V0VWludDE2KE0sITApXSxNKz1yajtpZih6IT09TS1xZSl0aHJvdyBuZXcgdXQoIkludmFsaWQgdGVycmFpbiB0aWxlLiIpfU8ubGVuZ3RoPWFlLFoubGVuZ3RoPWFlLG9lLmxlbmd0aD1hZSxkJiYoY2UubGVuZ3RoPWFlKSxJJiYoZmUubGVuZ3RoPWFlKTtsZXQgTmU9YWUsZXQ9QWUsS2U9e2hNaW46UCxsYXN0Qm9yZGVyUG9pbnQ6dm9pZCAwLHNraXJ0SGVpZ2h0OmYsdG9FTlU6dyxlbGxpcHNvaWQ6bixtaW5pbXVtOkEsbWF4aW11bTp4fTtiZS5zb3J0KGZ1bmN0aW9uKHFlLFZlKXtyZXR1cm4gVmUuY2FydG9ncmFwaGljLmxhdGl0dWRlLXFlLmNhcnRvZ3JhcGhpYy5sYXRpdHVkZX0pLGxlLnNvcnQoZnVuY3Rpb24ocWUsVmUpe3JldHVybiBxZS5jYXJ0b2dyYXBoaWMubG9uZ2l0dWRlLVZlLmNhcnRvZ3JhcGhpYy5sb25naXR1ZGV9KSxwZS5zb3J0KGZ1bmN0aW9uKHFlLFZlKXtyZXR1cm4gcWUuY2FydG9ncmFwaGljLmxhdGl0dWRlLVZlLmNhcnRvZ3JhcGhpYy5sYXRpdHVkZX0pLHVlLnNvcnQoZnVuY3Rpb24ocWUsVmUpe3JldHVybiBWZS5jYXJ0b2dyYXBoaWMubG9uZ2l0dWRlLXFlLmNhcnRvZ3JhcGhpYy5sb25naXR1ZGV9KTtsZXQgdHQ9MWUtNTtpZihmbShPLG9lLFosY2UsZmUsZWUsS2UsYmUsLXR0KnAsITAsLXR0KnkpLGZtKE8sb2UsWixjZSxmZSxlZSxLZSxsZSwtdHQqeSwhMSksZm0oTyxvZSxaLGNlLGZlLGVlLEtlLHBlLHR0KnAsITAsdHQqeSksZm0oTyxvZSxaLGNlLGZlLGVlLEtlLHVlLHR0KnksITEpLGJlLmxlbmd0aD4wJiZ1ZS5sZW5ndGg+MCl7bGV0IHFlPWJlWzBdLmluZGV4LFZlPU5lLFJ0PXVlW3VlLmxlbmd0aC0xXS5pbmRleCxGdD1PLmxlbmd0aC0xO2VlLnB1c2goUnQsRnQsVmUsVmUscWUsUnQpfXY9Ty5sZW5ndGg7bGV0IFhlPWdlLmZyb21Qb2ludHMoTyksTGU7ZyhvKSYmKExlPXluLmZyb21SZWN0YW5nbGUobyxQLEYsbikpO2xldCBpdD1uZXcgVHIobikuY29tcHV0ZUhvcml6b25DdWxsaW5nUG9pbnRQb3NzaWJseVVuZGVyRWxsaXBzb2lkKHQsTyxQKSxZZT1uZXcgdW8oQSx4LHQpLGZ0PW5ldyByYSh0LFllLEtlLmhNaW4sRixFLCExLGQsSSxyLGkpLEl0PW5ldyBGbG9hdDMyQXJyYXkodipmdC5zdHJpZGUpLEN0PTA7Zm9yKGxldCBxZT0wO3FlPHY7KytxZSlDdD1mdC5lbmNvZGUoSXQsQ3QsT1txZV0sWltxZV0sb2VbcWVdLHZvaWQgMCxjZVtxZV0sZmVbcWVdKTtsZXQgaHQ9YmUubWFwKGZ1bmN0aW9uKHFlKXtyZXR1cm4gcWUuaW5kZXh9KS5yZXZlcnNlKCksS3Q9bGUubWFwKGZ1bmN0aW9uKHFlKXtyZXR1cm4gcWUuaW5kZXh9KS5yZXZlcnNlKCksUHQ9cGUubWFwKGZ1bmN0aW9uKHFlKXtyZXR1cm4gcWUuaW5kZXh9KS5yZXZlcnNlKCksTHQ9dWUubWFwKGZ1bmN0aW9uKHFlKXtyZXR1cm4gcWUuaW5kZXh9KS5yZXZlcnNlKCk7cmV0dXJuIEt0LnVuc2hpZnQoUHRbUHQubGVuZ3RoLTFdKSxLdC5wdXNoKGh0WzBdKSxMdC51bnNoaWZ0KGh0W2h0Lmxlbmd0aC0xXSksTHQucHVzaChQdFswXSkse3ZlcnRpY2VzOkl0LGluZGljZXM6bmV3IFVpbnQxNkFycmF5KGVlKSxtYXhpbXVtSGVpZ2h0OkYsbWluaW11bUhlaWdodDpQLGVuY29kaW5nOmZ0LGJvdW5kaW5nU3BoZXJlM0Q6WGUsb3JpZW50ZWRCb3VuZGluZ0JveDpMZSxvY2NsdWRlZVBvaW50SW5TY2FsZWRTcGFjZTppdCx2ZXJ0ZXhDb3VudFdpdGhvdXRTa2lydHM6TmUsaW5kZXhDb3VudFdpdGhvdXRTa2lydHM6ZXQsd2VzdEluZGljZXNTb3V0aFRvTm9ydGg6aHQsc291dGhJbmRpY2VzRWFzdFRvV2VzdDpLdCxlYXN0SW5kaWNlc05vcnRoVG9Tb3V0aDpQdCxub3J0aEluZGljZXNXZXN0VG9FYXN0Okx0fX1mdW5jdGlvbiBmbShlLHQsbixvLGEscixpLGYsZCxjLHUpe2xldCBsPWYubGVuZ3RoO2ZvcihsZXQgaD0wO2g8bDsrK2gpe2xldCBtPWZbaF0sYj1tLmNhcnRvZ3JhcGhpYyxwPW0uaW5kZXgseT1lLmxlbmd0aCxUPWIubG9uZ2l0dWRlLF89Yi5sYXRpdHVkZTtfPWsuY2xhbXAoXywtay5QSV9PVkVSX1RXTyxrLlBJX09WRVJfVFdPKTtsZXQgRT1iLmhlaWdodC1pLnNraXJ0SGVpZ2h0O2kuaE1pbj1NYXRoLm1pbihpLmhNaW4sRSkscmUuZnJvbVJhZGlhbnMoVCxfLEUsQm8pLGMmJihCby5sb25naXR1ZGUrPWQpLGM/aD09PWwtMT9Cby5sYXRpdHVkZSs9dTpoPT09MCYmKEJvLmxhdGl0dWRlLT11KTpCby5sYXRpdHVkZSs9ZDtsZXQgdz1pLmVsbGlwc29pZC5jYXJ0b2dyYXBoaWNUb0NhcnRlc2lhbihCbyk7ZS5wdXNoKHcpLHQucHVzaChFKSxuLnB1c2goWS5jbG9uZShuW3BdKSksby5sZW5ndGg+MCYmby5wdXNoKG9bcF0pLGEubGVuZ3RoPjAmJmEucHVzaChhW3BdKSwkLm11bHRpcGx5QnlQb2ludChpLnRvRU5VLHcsSHMpO2xldCBSPWkubWluaW11bSxTPWkubWF4aW11bTtzLm1pbmltdW1CeUNvbXBvbmVudChIcyxSLFIpLHMubWF4aW11bUJ5Q29tcG9uZW50KEhzLFMsUyk7bGV0IEM9aS5sYXN0Qm9yZGVyUG9pbnQ7aWYoZyhDKSl7bGV0IEk9Qy5pbmRleDtyLnB1c2goSSx5LTEseSx5LHAsSSl9aS5sYXN0Qm9yZGVyUG9pbnQ9bX19dmFyIHJqLHNtLEtfLGlqLFNjLEJvLEhzLHNqLGZqLGRqLGxqLFdfPVgoKCk9PntBaSgpO010KCk7anQoKTtJZSgpO1R0KCk7c2UoKTtXZSgpO0dzKCk7R2UoKTtwbigpO3dpKCk7X24oKTtqYSgpO1ZzKCk7c3IoKTt5aSgpO1VuKCk7cmo9VWludDE2QXJyYXkuQllURVNfUEVSX0VMRU1FTlQsc209SW50MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVCxLXz1VaW50MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVCxpaj1GbG9hdDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQsU2M9RmxvYXQ2NEFycmF5LkJZVEVTX1BFUl9FTEVNRU5UO0JvPW5ldyByZSxIcz1uZXcgcyxzaj1uZXcgcyxmaj1uZXcgcyxkaj1uZXcgJDtsaj1BdChjail9KTt2YXIgaGosZDIsdTI9WCgoKT0+e2hqPXtOT05FOjAsTEVSQzoxfSxkMj1PYmplY3QuZnJlZXplKGhqKX0pO3ZhciBFcixYXyxtaixiaixwaixsMixoMj1YKCgpPT57QWkoKTtNdCgpO2p0KCk7SWUoKTtzZSgpO1dlKCk7R3MoKTtHZSgpO3BuKCk7d2koKTtfbigpO1ZzKCk7c3IoKTt5aSgpO0VyPXt9O0VyLkRFRkFVTFRfU1RSVUNUVVJFPU9iamVjdC5mcmVlemUoe2hlaWdodFNjYWxlOjEsaGVpZ2h0T2Zmc2V0OjAsZWxlbWVudHNQZXJIZWlnaHQ6MSxzdHJpZGU6MSxlbGVtZW50TXVsdGlwbGllcjoyNTYsaXNCaWdFbmRpYW46ITF9KTtYXz1uZXcgcyxtaj1uZXcgJCxiaj1uZXcgcyxwaj1uZXcgcztFci5jb21wdXRlVmVydGljZXM9ZnVuY3Rpb24oZSl7bGV0IHQ9TWF0aC5jb3Msbj1NYXRoLnNpbixvPU1hdGguc3FydCxhPU1hdGguYXRhbixyPU1hdGguZXhwLGk9ay5QSV9PVkVSX1RXTyxmPWsudG9SYWRpYW5zLGQ9ZS5oZWlnaHRtYXAsYz1lLndpZHRoLHU9ZS5oZWlnaHQsbD1lLnNraXJ0SGVpZ2h0LGg9bD4wLG09ZS5pc0dlb2dyYXBoaWM/PyEwLGI9ZS5lbGxpcHNvaWQ/P3EuZGVmYXVsdCxwPTEvYi5tYXhpbXVtUmFkaXVzLHk9U2UuY2xvbmUoZS5uYXRpdmVSZWN0YW5nbGUpLFQ9U2UuY2xvbmUoZS5yZWN0YW5nbGUpLF8sRSx3LFI7ZyhUKT8oXz1ULndlc3QsRT1ULnNvdXRoLHc9VC5lYXN0LFI9VC5ub3J0aCk6bT8oXz1mKHkud2VzdCksRT1mKHkuc291dGgpLHc9Zih5LmVhc3QpLFI9Zih5Lm5vcnRoKSk6KF89eS53ZXN0KnAsRT1pLTIqYShyKC15LnNvdXRoKnApKSx3PXkuZWFzdCpwLFI9aS0yKmEocigteS5ub3J0aCpwKSkpO2xldCBTPWUucmVsYXRpdmVUb0NlbnRlcixDPWcoUyk7Uz1DP1M6cy5aRVJPO2xldCBJPWUuaW5jbHVkZVdlYk1lcmNhdG9yVD8/ITEsTj1lLmV4YWdnZXJhdGlvbj8/MSxQPWUuZXhhZ2dlcmF0aW9uUmVsYXRpdmVIZWlnaHQ/PzAsQT1OIT09MSx4PWUuc3RydWN0dXJlPz9Fci5ERUZBVUxUX1NUUlVDVFVSRSxNPXguaGVpZ2h0U2NhbGU/P0VyLkRFRkFVTFRfU1RSVUNUVVJFLmhlaWdodFNjYWxlLHY9eC5oZWlnaHRPZmZzZXQ/P0VyLkRFRkFVTFRfU1RSVUNUVVJFLmhlaWdodE9mZnNldCxVPXguZWxlbWVudHNQZXJIZWlnaHQ/P0VyLkRFRkFVTFRfU1RSVUNUVVJFLmVsZW1lbnRzUGVySGVpZ2h0LHo9eC5zdHJpZGU/P0VyLkRFRkFVTFRfU1RSVUNUVVJFLnN0cmlkZSxEPXguZWxlbWVudE11bHRpcGxpZXI/P0VyLkRFRkFVTFRfU1RSVUNUVVJFLmVsZW1lbnRNdWx0aXBsaWVyLEc9eC5pc0JpZ0VuZGlhbj8/RXIuREVGQVVMVF9TVFJVQ1RVUkUuaXNCaWdFbmRpYW4sSD1TZS5jb21wdXRlV2lkdGgoeSksTz1TZS5jb21wdXRlSGVpZ2h0KHkpLFo9SC8oYy0xKSxvZT1PLyh1LTEpO218fChIKj1wLE8qPXApO2xldCBjZT1iLnJhZGlpU3F1YXJlZCxmZT1jZS54LGVlPWNlLnksYmU9Y2UueixsZT02NTUzNixwZT0tNjU1MzYsdWU9Y28uZWFzdE5vcnRoVXBUb0ZpeGVkRnJhbWUoUyxiKSxhZT0kLmludmVyc2VUcmFuc2Zvcm1hdGlvbih1ZSxtaiksQWUsTmU7SSYmKEFlPVJuLmdlb2RldGljTGF0aXR1ZGVUb01lcmNhdG9yQW5nbGUoRSksTmU9MS8oUm4uZ2VvZGV0aWNMYXRpdHVkZVRvTWVyY2F0b3JBbmdsZShSKS1BZSkpO2xldCBldD1iajtldC54PU51bWJlci5QT1NJVElWRV9JTkZJTklUWSxldC55PU51bWJlci5QT1NJVElWRV9JTkZJTklUWSxldC56PU51bWJlci5QT1NJVElWRV9JTkZJTklUWTtsZXQgS2U9cGo7S2UueD1OdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFksS2UueT1OdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFksS2Uuej1OdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFk7bGV0IHR0PU51bWJlci5QT1NJVElWRV9JTkZJTklUWSxYZT1jKnUsTGU9bD4wP2MqMit1KjI6MCxqZT1YZStMZSxpdD1uZXcgQXJyYXkoamUpLFllPW5ldyBBcnJheShqZSksZnQ9bmV3IEFycmF5KGplKSxJdD1JP25ldyBBcnJheShqZSk6W10sQ3Q9QT9uZXcgQXJyYXkoamUpOltdLGh0PTAsS3Q9dSxQdD0wLEx0PWM7aCYmKC0taHQsKytLdCwtLVB0LCsrTHQpO2xldCBxZT0xZS01O2ZvcihsZXQgRHQ9aHQ7RHQ8S3Q7KytEdCl7bGV0IGFuPUR0O2FuPDAmJihhbj0wKSxhbj49dSYmKGFuPXUtMSk7bGV0IHp0PXkubm9ydGgtb2UqYW47bT96dD1mKHp0KTp6dD1pLTIqYShyKC16dCpwKSk7bGV0IGZuPSh6dC1FKS8oUi1FKTtmbj1rLmNsYW1wKGZuLDAsMSk7bGV0IFZuPUR0PT09aHQsSG49RHQ9PT1LdC0xO2w+MCYmKFZuP3p0Kz1xZSpPOkhuJiYoenQtPXFlKk8pKTtsZXQgUG49dCh6dCkscm89bih6dCksa3Q9YmUqcm8seHQ7SSYmKHh0PShSbi5nZW9kZXRpY0xhdGl0dWRlVG9NZXJjYXRvckFuZ2xlKHp0KS1BZSkqTmUpO2ZvcihsZXQgT249UHQ7T248THQ7KytPbil7bGV0IGtuPU9uO2tuPDAmJihrbj0wKSxrbj49YyYmKGtuPWMtMSk7bGV0IEFvPWFuKihjKnopK2tuKnosR3Q7aWYoVT09PTEpR3Q9ZFtBb107ZWxzZXtHdD0wO2xldCB3bztpZihHKWZvcih3bz0wO3dvPFU7Kyt3bylHdD1HdCpEK2RbQW8rd29dO2Vsc2UgZm9yKHdvPVUtMTt3bz49MDstLXdvKUd0PUd0KkQrZFtBbyt3b119R3Q9R3QqTSt2LHBlPU1hdGgubWF4KHBlLEd0KSxsZT1NYXRoLm1pbihsZSxHdCk7bGV0IGRuPXkud2VzdCtaKmtuO20/ZG49Zihkbik6ZG49ZG4qcDtsZXQgQ289KGRuLV8pLyh3LV8pO0NvPWsuY2xhbXAoQ28sMCwxKTtsZXQgdm49YW4qYytrbjtpZihsPjApe2xldCB3bz1Pbj09PVB0LFVhPU9uPT09THQtMSx2Yz1Wbnx8SG58fHdvfHxVYTtpZigoVm58fEhuKSYmKHdvfHxVYSkpY29udGludWU7dmMmJihHdC09bCx3bz8odm49WGUrKHUtYW4tMSksZG4tPXFlKkgpOkhuP3ZuPVhlK3UrKGMta24tMSk6VWE/KHZuPVhlK3UrYythbixkbis9cWUqSCk6Vm4mJih2bj1YZSt1K2MrdStrbikpfWxldCBXbz1Qbip0KGRuKSxEYT1QbipuKGRuKSx6aT1mZSpXbyxHaT1lZSpEYSxCYT0xL28oemkqV28rR2kqRGEra3Qqcm8pLGFpPXppKkJhLFZpPUdpKkJhLFNyPWt0KkJhLGhvPW5ldyBzO2hvLng9YWkrV28qR3QsaG8ueT1WaStEYSpHdCxoby56PVNyK3JvKkd0LCQubXVsdGlwbHlCeVBvaW50KGFlLGhvLFhfKSxzLm1pbmltdW1CeUNvbXBvbmVudChYXyxldCxldCkscy5tYXhpbXVtQnlDb21wb25lbnQoWF8sS2UsS2UpLHR0PU1hdGgubWluKHR0LEd0KSxpdFt2bl09aG8sZnRbdm5dPW5ldyBZKENvLGZuKSxZZVt2bl09R3QsSSYmKEl0W3ZuXT14dCksQSYmKEN0W3ZuXT1iLmdlb2RldGljU3VyZmFjZU5vcm1hbChobykpfX1sZXQgVmU9Z2UuZnJvbVBvaW50cyhpdCksUnQ7ZyhUKSYmKFJ0PXluLmZyb21SZWN0YW5nbGUoVCxsZSxwZSxiKSk7bGV0IEZ0O0MmJihGdD1uZXcgVHIoYikuY29tcHV0ZUhvcml6b25DdWxsaW5nUG9pbnRQb3NzaWJseVVuZGVyRWxsaXBzb2lkKFMsaXQsbGUpKTtsZXQgcXQ9bmV3IHVvKGV0LEtlLFMpLFp0PW5ldyByYShTLHF0LHR0LHBlLHVlLCExLEksQSxOLFApLG9uPW5ldyBGbG9hdDMyQXJyYXkoamUqWnQuc3RyaWRlKSx3bj0wO2ZvcihsZXQgRHQ9MDtEdDxqZTsrK0R0KXduPVp0LmVuY29kZShvbix3bixpdFtEdF0sZnRbRHRdLFllW0R0XSx2b2lkIDAsSXRbRHRdLEN0W0R0XSk7cmV0dXJue3ZlcnRpY2VzOm9uLG1heGltdW1IZWlnaHQ6cGUsbWluaW11bUhlaWdodDpsZSxlbmNvZGluZzpadCxib3VuZGluZ1NwaGVyZTNEOlZlLG9yaWVudGVkQm91bmRpbmdCb3g6UnQsb2NjbHVkZWVQb2ludEluU2NhbGVkU3BhY2U6RnR9fTtsMj1Fcn0pO3ZhciBtMj1lbygoRmRlLGRtKT0+ey8qIENvcHlyaWdodCAyMDE1LTIwMTggRXNyaS4gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0IGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCBAcHJlc2VydmUgKi8oZnVuY3Rpb24oKXt2YXIgZT0oZnVuY3Rpb24oKXt2YXIgYT17fTthLmRlZmF1bHROb0RhdGFWYWx1ZT0tMzQwMjc5OTkzODc5MDE0ODRlMjIsYS5kZWNvZGU9ZnVuY3Rpb24odSxsKXtsPWx8fHt9O3ZhciBoPWwuZW5jb2RlZE1hc2tEYXRhfHxsLmVuY29kZWRNYXNrRGF0YT09PW51bGwsbT1kKHUsbC5pbnB1dE9mZnNldHx8MCxoKSxiPWwubm9EYXRhVmFsdWUhPT1udWxsP2wubm9EYXRhVmFsdWU6YS5kZWZhdWx0Tm9EYXRhVmFsdWUscD1yKG0sbC5waXhlbFR5cGV8fEZsb2F0MzJBcnJheSxsLmVuY29kZWRNYXNrRGF0YSxiLGwucmV0dXJuTWFzaykseT17d2lkdGg6bS53aWR0aCxoZWlnaHQ6bS5oZWlnaHQscGl4ZWxEYXRhOnAucmVzdWx0UGl4ZWxzLG1pblZhbHVlOnAubWluVmFsdWUsbWF4VmFsdWU6bS5waXhlbHMubWF4VmFsdWUsbm9EYXRhVmFsdWU6Yn07cmV0dXJuIHAucmVzdWx0TWFzayYmKHkubWFza0RhdGE9cC5yZXN1bHRNYXNrKSxsLnJldHVybkVuY29kZWRNYXNrJiZtLm1hc2smJih5LmVuY29kZWRNYXNrRGF0YT1tLm1hc2suYml0c2V0P20ubWFzay5iaXRzZXQ6bnVsbCksbC5yZXR1cm5GaWxlSW5mbyYmKHkuZmlsZUluZm89aShtKSxsLmNvbXB1dGVVc2VkQml0RGVwdGhzJiYoeS5maWxlSW5mby5iaXREZXB0aHM9ZihtKSkpLHl9O3ZhciByPWZ1bmN0aW9uKHUsbCxoLG0sYil7dmFyIHA9MCx5PXUucGl4ZWxzLm51bUJsb2Nrc1gsVD11LnBpeGVscy5udW1CbG9ja3NZLF89TWF0aC5mbG9vcih1LndpZHRoL3kpLEU9TWF0aC5mbG9vcih1LmhlaWdodC9UKSx3PTIqdS5tYXhaRXJyb3IsUj1OdW1iZXIuTUFYX1ZBTFVFLFM7aD1ofHwodS5tYXNrP3UubWFzay5iaXRzZXQ6bnVsbCk7dmFyIEMsSTtDPW5ldyBsKHUud2lkdGgqdS5oZWlnaHQpLGImJmgmJihJPW5ldyBVaW50OEFycmF5KHUud2lkdGgqdS5oZWlnaHQpKTtmb3IodmFyIE49bmV3IEZsb2F0MzJBcnJheShfKkUpLFAsRixBPTA7QTw9VDtBKyspe3ZhciB4PUEhPT1UP0U6dS5oZWlnaHQlVDtpZih4IT09MClmb3IodmFyIE09MDtNPD15O00rKyl7dmFyIHY9TSE9PXk/Xzp1LndpZHRoJXk7aWYodiE9PTApe3ZhciBVPUEqdS53aWR0aCpFK00qXyx6PXUud2lkdGgtdixEPXUucGl4ZWxzLmJsb2Nrc1twXSxHLEgsTztELmVuY29kaW5nPDI/KEQuZW5jb2Rpbmc9PT0wP0c9RC5yYXdEYXRhOihjKEQuc3R1ZmZlZERhdGEsRC5iaXRzUGVyUGl4ZWwsRC5udW1WYWxpZFBpeGVscyxELm9mZnNldCx3LE4sdS5waXhlbHMubWF4VmFsdWUpLEc9TiksSD0wKTpELmVuY29kaW5nPT09Mj9PPTA6Tz1ELm9mZnNldDt2YXIgWjtpZihoKWZvcihGPTA7Rjx4O0YrKyl7Zm9yKFUmNyYmKFo9aFtVPj4zXSxaPDw9VSY3KSxQPTA7UDx2O1ArKylVJjd8fChaPWhbVT4+M10pLFomMTI4PyhJJiYoSVtVXT0xKSxTPUQuZW5jb2Rpbmc8Mj9HW0grK106TyxSPVI+Uz9TOlIsQ1tVKytdPVMpOihJJiYoSVtVXT0wKSxDW1UrK109bSksWjw8PTE7VSs9en1lbHNlIGlmKEQuZW5jb2Rpbmc8Milmb3IoRj0wO0Y8eDtGKyspe2ZvcihQPTA7UDx2O1ArKylTPUdbSCsrXSxSPVI+Uz9TOlIsQ1tVKytdPVM7VSs9en1lbHNlIGZvcihSPVI+Tz9POlIsRj0wO0Y8eDtGKyspe2ZvcihQPTA7UDx2O1ArKylDW1UrK109TztVKz16fWlmKEQuZW5jb2Rpbmc9PT0xJiZIIT09RC5udW1WYWxpZFBpeGVscyl0aHJvdyJCbG9jayBhbmQgTWFzayBkbyBub3QgbWF0Y2giO3ArK319fXJldHVybntyZXN1bHRQaXhlbHM6QyxyZXN1bHRNYXNrOkksbWluVmFsdWU6Un19LGk9ZnVuY3Rpb24odSl7cmV0dXJue2ZpbGVJZGVudGlmaWVyU3RyaW5nOnUuZmlsZUlkZW50aWZpZXJTdHJpbmcsZmlsZVZlcnNpb246dS5maWxlVmVyc2lvbixpbWFnZVR5cGU6dS5pbWFnZVR5cGUsaGVpZ2h0OnUuaGVpZ2h0LHdpZHRoOnUud2lkdGgsbWF4WkVycm9yOnUubWF4WkVycm9yLGVvZk9mZnNldDp1LmVvZk9mZnNldCxtYXNrOnUubWFzaz97bnVtQmxvY2tzWDp1Lm1hc2subnVtQmxvY2tzWCxudW1CbG9ja3NZOnUubWFzay5udW1CbG9ja3NZLG51bUJ5dGVzOnUubWFzay5udW1CeXRlcyxtYXhWYWx1ZTp1Lm1hc2subWF4VmFsdWV9Om51bGwscGl4ZWxzOntudW1CbG9ja3NYOnUucGl4ZWxzLm51bUJsb2Nrc1gsbnVtQmxvY2tzWTp1LnBpeGVscy5udW1CbG9ja3NZLG51bUJ5dGVzOnUucGl4ZWxzLm51bUJ5dGVzLG1heFZhbHVlOnUucGl4ZWxzLm1heFZhbHVlLG5vRGF0YVZhbHVlOnUubm9EYXRhVmFsdWV9fX0sZj1mdW5jdGlvbih1KXtmb3IodmFyIGw9dS5waXhlbHMubnVtQmxvY2tzWCp1LnBpeGVscy5udW1CbG9ja3NZLGg9e30sbT0wO208bDttKyspe3ZhciBiPXUucGl4ZWxzLmJsb2Nrc1ttXTtiLmVuY29kaW5nPT09MD9oLmZsb2F0MzI9ITA6Yi5lbmNvZGluZz09PTE/aFtiLmJpdHNQZXJQaXhlbF09ITA6aFswXT0hMH1yZXR1cm4gT2JqZWN0LmtleXMoaCl9LGQ9ZnVuY3Rpb24odSxsLGgpe3ZhciBtPXt9LGI9bmV3IFVpbnQ4QXJyYXkodSxsLDEwKTtpZihtLmZpbGVJZGVudGlmaWVyU3RyaW5nPVN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCxiKSxtLmZpbGVJZGVudGlmaWVyU3RyaW5nLnRyaW0oKSE9PSJDbnRaSW1hZ2UiKXRocm93IlVuZXhwZWN0ZWQgZmlsZSBpZGVudGlmaWVyIHN0cmluZzogIittLmZpbGVJZGVudGlmaWVyU3RyaW5nO2wrPTEwO3ZhciBwPW5ldyBEYXRhVmlldyh1LGwsMjQpO2lmKG0uZmlsZVZlcnNpb249cC5nZXRJbnQzMigwLCEwKSxtLmltYWdlVHlwZT1wLmdldEludDMyKDQsITApLG0uaGVpZ2h0PXAuZ2V0VWludDMyKDgsITApLG0ud2lkdGg9cC5nZXRVaW50MzIoMTIsITApLG0ubWF4WkVycm9yPXAuZ2V0RmxvYXQ2NCgxNiwhMCksbCs9MjQsIWgpaWYocD1uZXcgRGF0YVZpZXcodSxsLDE2KSxtLm1hc2s9e30sbS5tYXNrLm51bUJsb2Nrc1k9cC5nZXRVaW50MzIoMCwhMCksbS5tYXNrLm51bUJsb2Nrc1g9cC5nZXRVaW50MzIoNCwhMCksbS5tYXNrLm51bUJ5dGVzPXAuZ2V0VWludDMyKDgsITApLG0ubWFzay5tYXhWYWx1ZT1wLmdldEZsb2F0MzIoMTIsITApLGwrPTE2LG0ubWFzay5udW1CeXRlcz4wKXt2YXIgeT1uZXcgVWludDhBcnJheShNYXRoLmNlaWwobS53aWR0aCptLmhlaWdodC84KSk7cD1uZXcgRGF0YVZpZXcodSxsLG0ubWFzay5udW1CeXRlcyk7dmFyIFQ9cC5nZXRJbnQxNigwLCEwKSxfPTIsRT0wO2Rve2lmKFQ+MClmb3IoO1QtLTspeVtFKytdPXAuZ2V0VWludDgoXysrKTtlbHNle3ZhciB3PXAuZ2V0VWludDgoXysrKTtmb3IoVD0tVDtULS07KXlbRSsrXT13fVQ9cC5nZXRJbnQxNihfLCEwKSxfKz0yfXdoaWxlKF88bS5tYXNrLm51bUJ5dGVzKTtpZihUIT09LTMyNzY4fHxFPHkubGVuZ3RoKXRocm93IlVuZXhwZWN0ZWQgZW5kIG9mIG1hc2sgUkxFIGVuY29kaW5nIjttLm1hc2suYml0c2V0PXksbCs9bS5tYXNrLm51bUJ5dGVzfWVsc2UobS5tYXNrLm51bUJ5dGVzfG0ubWFzay5udW1CbG9ja3NZfG0ubWFzay5tYXhWYWx1ZSk9PT0wJiYobS5tYXNrLmJpdHNldD1uZXcgVWludDhBcnJheShNYXRoLmNlaWwobS53aWR0aCptLmhlaWdodC84KSkpO3A9bmV3IERhdGFWaWV3KHUsbCwxNiksbS5waXhlbHM9e30sbS5waXhlbHMubnVtQmxvY2tzWT1wLmdldFVpbnQzMigwLCEwKSxtLnBpeGVscy5udW1CbG9ja3NYPXAuZ2V0VWludDMyKDQsITApLG0ucGl4ZWxzLm51bUJ5dGVzPXAuZ2V0VWludDMyKDgsITApLG0ucGl4ZWxzLm1heFZhbHVlPXAuZ2V0RmxvYXQzMigxMiwhMCksbCs9MTY7dmFyIFI9bS5waXhlbHMubnVtQmxvY2tzWCxTPW0ucGl4ZWxzLm51bUJsb2Nrc1ksQz1SKyhtLndpZHRoJVI+MD8xOjApLEk9UysobS5oZWlnaHQlUz4wPzE6MCk7bS5waXhlbHMuYmxvY2tzPW5ldyBBcnJheShDKkkpO2Zvcih2YXIgTj0wLFA9MDtQPEk7UCsrKWZvcih2YXIgRj0wO0Y8QztGKyspe3ZhciBBPTAseD11LmJ5dGVMZW5ndGgtbDtwPW5ldyBEYXRhVmlldyh1LGwsTWF0aC5taW4oMTAseCkpO3ZhciBNPXt9O20ucGl4ZWxzLmJsb2Nrc1tOKytdPU07dmFyIHY9cC5nZXRVaW50OCgwKTtpZihBKyssTS5lbmNvZGluZz12JjYzLE0uZW5jb2Rpbmc+Myl0aHJvdyJJbnZhbGlkIGJsb2NrIGVuY29kaW5nICgiK00uZW5jb2RpbmcrIikiO2lmKE0uZW5jb2Rpbmc9PT0yKXtsKys7Y29udGludWV9aWYodiE9PTAmJnYhPT0yKXtpZih2Pj49NixNLm9mZnNldFR5cGU9dix2PT09MilNLm9mZnNldD1wLmdldEludDgoMSksQSsrO2Vsc2UgaWYodj09PTEpTS5vZmZzZXQ9cC5nZXRJbnQxNigxLCEwKSxBKz0yO2Vsc2UgaWYodj09PTApTS5vZmZzZXQ9cC5nZXRGbG9hdDMyKDEsITApLEErPTQ7ZWxzZSB0aHJvdyJJbnZhbGlkIGJsb2NrIG9mZnNldCB0eXBlIjtpZihNLmVuY29kaW5nPT09MSlpZih2PXAuZ2V0VWludDgoQSksQSsrLE0uYml0c1BlclBpeGVsPXYmNjMsdj4+PTYsTS5udW1WYWxpZFBpeGVsc1R5cGU9dix2PT09MilNLm51bVZhbGlkUGl4ZWxzPXAuZ2V0VWludDgoQSksQSsrO2Vsc2UgaWYodj09PTEpTS5udW1WYWxpZFBpeGVscz1wLmdldFVpbnQxNihBLCEwKSxBKz0yO2Vsc2UgaWYodj09PTApTS5udW1WYWxpZFBpeGVscz1wLmdldFVpbnQzMihBLCEwKSxBKz00O2Vsc2UgdGhyb3ciSW52YWxpZCB2YWxpZCBwaXhlbCBjb3VudCB0eXBlIn1pZihsKz1BLE0uZW5jb2RpbmchPT0zKXt2YXIgVSx6O2lmKE0uZW5jb2Rpbmc9PT0wKXt2YXIgRD0obS5waXhlbHMubnVtQnl0ZXMtMSkvNDtpZihEIT09TWF0aC5mbG9vcihEKSl0aHJvdyJ1bmNvbXByZXNzZWQgYmxvY2sgaGFzIGludmFsaWQgbGVuZ3RoIjtVPW5ldyBBcnJheUJ1ZmZlcihEKjQpLHo9bmV3IFVpbnQ4QXJyYXkoVSksei5zZXQobmV3IFVpbnQ4QXJyYXkodSxsLEQqNCkpO3ZhciBHPW5ldyBGbG9hdDMyQXJyYXkoVSk7TS5yYXdEYXRhPUcsbCs9RCo0fWVsc2UgaWYoTS5lbmNvZGluZz09PTEpe3ZhciBIPU1hdGguY2VpbChNLm51bVZhbGlkUGl4ZWxzKk0uYml0c1BlclBpeGVsLzgpLE89TWF0aC5jZWlsKEgvNCk7VT1uZXcgQXJyYXlCdWZmZXIoTyo0KSx6PW5ldyBVaW50OEFycmF5KFUpLHouc2V0KG5ldyBVaW50OEFycmF5KHUsbCxIKSksTS5zdHVmZmVkRGF0YT1uZXcgVWludDMyQXJyYXkoVSksbCs9SH19fXJldHVybiBtLmVvZk9mZnNldD1sLG19LGM9ZnVuY3Rpb24odSxsLGgsbSxiLHAseSl7dmFyIFQ9KDE8PGwpLTEsXz0wLEUsdz0wLFIsUyxDPU1hdGguY2VpbCgoeS1tKS9iKSxJPXUubGVuZ3RoKjQtTWF0aC5jZWlsKGwqaC84KTtmb3IodVt1Lmxlbmd0aC0xXTw8PTgqSSxFPTA7RTxoO0UrKyl7aWYodz09PTAmJihTPXVbXysrXSx3PTMyKSx3Pj1sKVI9Uz4+PnctbCZULHctPWw7ZWxzZXt2YXIgTj1sLXc7Uj0oUyZUKTw8TiZULFM9dVtfKytdLHc9MzItTixSKz1TPj4+d31wW0VdPVI8Qz9tK1IqYjp5fXJldHVybiBwfTtyZXR1cm4gYX0pKCksdD0oZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7dmFyIGE9e3Vuc3R1ZmY6ZnVuY3Rpb24oZCxjLHUsbCxoLG0sYixwKXt2YXIgeT0oMTw8dSktMSxUPTAsXyxFPTAsdyxSLFMsQyxJPWQubGVuZ3RoKjQtTWF0aC5jZWlsKHUqbC84KTtpZihkW2QubGVuZ3RoLTFdPDw9OCpJLGgpZm9yKF89MDtfPGw7XysrKUU9PT0wJiYoUj1kW1QrK10sRT0zMiksRT49dT8odz1SPj4+RS11JnksRS09dSk6KFM9dS1FLHc9KFImeSk8PFMmeSxSPWRbVCsrXSxFPTMyLVMsdys9Uj4+PkUpLGNbX109aFt3XTtlbHNlIGZvcihDPU1hdGguY2VpbCgocC1tKS9iKSxfPTA7XzxsO18rKylFPT09MCYmKFI9ZFtUKytdLEU9MzIpLEU+PXU/KHc9Uj4+PkUtdSZ5LEUtPXUpOihTPXUtRSx3PShSJnkpPDxTJnksUj1kW1QrK10sRT0zMi1TLHcrPVI+Pj5FKSxjW19dPXc8Qz9tK3cqYjpwfSx1bnN0dWZmTFVUOmZ1bmN0aW9uKGQsYyx1LGwsaCxtKXt2YXIgYj0oMTw8YyktMSxwPTAseT0wLFQ9MCxfPTAsRT0wLHcsUj1bXSxTPWQubGVuZ3RoKjQtTWF0aC5jZWlsKGMqdS84KTtkW2QubGVuZ3RoLTFdPDw9OCpTO3ZhciBDPU1hdGguY2VpbCgobS1sKS9oKTtmb3IoeT0wO3k8dTt5KyspXz09PTAmJih3PWRbcCsrXSxfPTMyKSxfPj1jPyhFPXc+Pj5fLWMmYixfLT1jKTooVD1jLV8sRT0odyZiKTw8VCZiLHc9ZFtwKytdLF89MzItVCxFKz13Pj4+XyksUlt5XT1FPEM/bCtFKmg6bTtyZXR1cm4gUi51bnNoaWZ0KGwpLFJ9LHVuc3R1ZmYyOmZ1bmN0aW9uKGQsYyx1LGwsaCxtLGIscCl7dmFyIHk9KDE8PHUpLTEsVD0wLF8sRT0wLHc9MCxSLFMsQztpZihoKWZvcihfPTA7XzxsO18rKylFPT09MCYmKFM9ZFtUKytdLEU9MzIsdz0wKSxFPj11PyhSPVM+Pj53JnksRS09dSx3Kz11KTooQz11LUUsUj1TPj4+dyZ5LFM9ZFtUKytdLEU9MzItQyxSfD0oUyYoMTw8QyktMSk8PHUtQyx3PUMpLGNbX109aFtSXTtlbHNle3ZhciBJPU1hdGguY2VpbCgocC1tKS9iKTtmb3IoXz0wO188bDtfKyspRT09PTAmJihTPWRbVCsrXSxFPTMyLHc9MCksRT49dT8oUj1TPj4+dyZ5LEUtPXUsdys9dSk6KEM9dS1FLFI9Uz4+PncmeSxTPWRbVCsrXSxFPTMyLUMsUnw9KFMmKDE8PEMpLTEpPDx1LUMsdz1DKSxjW19dPVI8ST9tK1IqYjpwfXJldHVybiBjfSx1bnN0dWZmTFVUMjpmdW5jdGlvbihkLGMsdSxsLGgsbSl7dmFyIGI9KDE8PGMpLTEscD0wLHk9MCxUPTAsXz0wLEU9MCx3PTAsUixTPVtdLEM9TWF0aC5jZWlsKChtLWwpL2gpO2Zvcih5PTA7eTx1O3krKylfPT09MCYmKFI9ZFtwKytdLF89MzIsdz0wKSxfPj1jPyhFPVI+Pj53JmIsXy09Yyx3Kz1jKTooVD1jLV8sRT1SPj4+dyZiLFI9ZFtwKytdLF89MzItVCxFfD0oUiYoMTw8VCktMSk8PGMtVCx3PVQpLFNbeV09RTxDP2wrRSpoOm07cmV0dXJuIFMudW5zaGlmdChsKSxTfSxvcmlnaW5hbFVuc3R1ZmY6ZnVuY3Rpb24oZCxjLHUsbCl7dmFyIGg9KDE8PHUpLTEsbT0wLGIscD0wLHksVCxfLEU9ZC5sZW5ndGgqNC1NYXRoLmNlaWwodSpsLzgpO2ZvcihkW2QubGVuZ3RoLTFdPDw9OCpFLGI9MDtiPGw7YisrKXA9PT0wJiYoVD1kW20rK10scD0zMikscD49dT8oeT1UPj4+cC11JmgscC09dSk6KF89dS1wLHk9KFQmaCk8PF8maCxUPWRbbSsrXSxwPTMyLV8seSs9VD4+PnApLGNbYl09eTtyZXR1cm4gY30sb3JpZ2luYWxVbnN0dWZmMjpmdW5jdGlvbihkLGMsdSxsKXt2YXIgaD0oMTw8dSktMSxtPTAsYixwPTAseT0wLFQsXyxFO2ZvcihiPTA7YjxsO2IrKylwPT09MCYmKF89ZFttKytdLHA9MzIseT0wKSxwPj11PyhUPV8+Pj55JmgscC09dSx5Kz11KTooRT11LXAsVD1fPj4+eSZoLF89ZFttKytdLHA9MzItRSxUfD0oXyYoMTw8RSktMSk8PHUtRSx5PUUpLGNbYl09VDtyZXR1cm4gY319LHI9e0hVRkZNQU5fTFVUX0JJVFNfTUFYOjEyLGNvbXB1dGVDaGVja3N1bUZsZXRjaGVyMzI6ZnVuY3Rpb24oZCl7Zm9yKHZhciBjPTY1NTM1LHU9NjU1MzUsbD1kLmxlbmd0aCxoPU1hdGguZmxvb3IobC8yKSxtPTA7aDspe3ZhciBiPWg+PTM1OT8zNTk6aDtoLT1iO2RvIGMrPWRbbSsrXTw8OCx1Kz1jKz1kW20rK107d2hpbGUoLS1iKTtjPShjJjY1NTM1KSsoYz4+PjE2KSx1PSh1JjY1NTM1KSsodT4+PjE2KX1yZXR1cm4gbCYxJiYodSs9Yys9ZFttXTw8OCksYz0oYyY2NTUzNSkrKGM+Pj4xNiksdT0odSY2NTUzNSkrKHU+Pj4xNiksKHU8PDE2fGMpPj4+MH0scmVhZEhlYWRlckluZm86ZnVuY3Rpb24oZCxjKXt2YXIgdT1jLnB0cixsPW5ldyBVaW50OEFycmF5KGQsdSw2KSxoPXt9O2lmKGguZmlsZUlkZW50aWZpZXJTdHJpbmc9U3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLGwpLGguZmlsZUlkZW50aWZpZXJTdHJpbmcubGFzdEluZGV4T2YoIkxlcmMyIiwwKSE9PTApdGhyb3ciVW5leHBlY3RlZCBmaWxlIGlkZW50aWZpZXIgc3RyaW5nIChleHBlY3QgTGVyYzIgKTogIitoLmZpbGVJZGVudGlmaWVyU3RyaW5nO3UrPTY7dmFyIG09bmV3IERhdGFWaWV3KGQsdSw4KSxiPW0uZ2V0SW50MzIoMCwhMCk7aC5maWxlVmVyc2lvbj1iLHUrPTQsYj49MyYmKGguY2hlY2tzdW09bS5nZXRVaW50MzIoNCwhMCksdSs9NCksbT1uZXcgRGF0YVZpZXcoZCx1LDEyKSxoLmhlaWdodD1tLmdldFVpbnQzMigwLCEwKSxoLndpZHRoPW0uZ2V0VWludDMyKDQsITApLHUrPTgsYj49ND8oaC5udW1EaW1zPW0uZ2V0VWludDMyKDgsITApLHUrPTQpOmgubnVtRGltcz0xLG09bmV3IERhdGFWaWV3KGQsdSw0MCksaC5udW1WYWxpZFBpeGVsPW0uZ2V0VWludDMyKDAsITApLGgubWljcm9CbG9ja1NpemU9bS5nZXRJbnQzMig0LCEwKSxoLmJsb2JTaXplPW0uZ2V0SW50MzIoOCwhMCksaC5pbWFnZVR5cGU9bS5nZXRJbnQzMigxMiwhMCksaC5tYXhaRXJyb3I9bS5nZXRGbG9hdDY0KDE2LCEwKSxoLnpNaW49bS5nZXRGbG9hdDY0KDI0LCEwKSxoLnpNYXg9bS5nZXRGbG9hdDY0KDMyLCEwKSx1Kz00MCxjLmhlYWRlckluZm89aCxjLnB0cj11O3ZhciBwLHk7aWYoYj49MyYmKHk9Yj49ND81Mjo0OCxwPXRoaXMuY29tcHV0ZUNoZWNrc3VtRmxldGNoZXIzMihuZXcgVWludDhBcnJheShkLHUteSxoLmJsb2JTaXplLTE0KSkscCE9PWguY2hlY2tzdW0pKXRocm93IkNoZWNrc3VtIGZhaWxlZC4iO3JldHVybiEwfSxjaGVja01pbk1heFJhbmdlczpmdW5jdGlvbihkLGMpe3ZhciB1PWMuaGVhZGVySW5mbyxsPXRoaXMuZ2V0RGF0YVR5cGVBcnJheSh1LmltYWdlVHlwZSksaD11Lm51bURpbXMqdGhpcy5nZXREYXRhVHlwZVNpemUodS5pbWFnZVR5cGUpLG09dGhpcy5yZWFkU3ViQXJyYXkoZCxjLnB0cixsLGgpLGI9dGhpcy5yZWFkU3ViQXJyYXkoZCxjLnB0citoLGwsaCk7Yy5wdHIrPTIqaDt2YXIgcCx5PSEwO2ZvcihwPTA7cDx1Lm51bURpbXM7cCsrKWlmKG1bcF0hPT1iW3BdKXt5PSExO2JyZWFrfXJldHVybiB1Lm1pblZhbHVlcz1tLHUubWF4VmFsdWVzPWIseX0scmVhZFN1YkFycmF5OmZ1bmN0aW9uKGQsYyx1LGwpe3ZhciBoO2lmKHU9PT1VaW50OEFycmF5KWg9bmV3IFVpbnQ4QXJyYXkoZCxjLGwpO2Vsc2V7dmFyIG09bmV3IEFycmF5QnVmZmVyKGwpLGI9bmV3IFVpbnQ4QXJyYXkobSk7Yi5zZXQobmV3IFVpbnQ4QXJyYXkoZCxjLGwpKSxoPW5ldyB1KG0pfXJldHVybiBofSxyZWFkTWFzazpmdW5jdGlvbihkLGMpe3ZhciB1PWMucHRyLGw9Yy5oZWFkZXJJbmZvLGg9bC53aWR0aCpsLmhlaWdodCxtPWwubnVtVmFsaWRQaXhlbCxiPW5ldyBEYXRhVmlldyhkLHUsNCkscD17fTtpZihwLm51bUJ5dGVzPWIuZ2V0VWludDMyKDAsITApLHUrPTQsKG09PT0wfHxoPT09bSkmJnAubnVtQnl0ZXMhPT0wKXRocm93ImludmFsaWQgbWFzayI7dmFyIHksVDtpZihtPT09MCl5PW5ldyBVaW50OEFycmF5KE1hdGguY2VpbChoLzgpKSxwLmJpdHNldD15LFQ9bmV3IFVpbnQ4QXJyYXkoaCksYy5waXhlbHMucmVzdWx0TWFzaz1ULHUrPXAubnVtQnl0ZXM7ZWxzZSBpZihwLm51bUJ5dGVzPjApe3k9bmV3IFVpbnQ4QXJyYXkoTWF0aC5jZWlsKGgvOCkpLGI9bmV3IERhdGFWaWV3KGQsdSxwLm51bUJ5dGVzKTt2YXIgXz1iLmdldEludDE2KDAsITApLEU9Mix3PTAsUj0wO2Rve2lmKF8+MClmb3IoO18tLTspeVt3KytdPWIuZ2V0VWludDgoRSsrKTtlbHNlIGZvcihSPWIuZ2V0VWludDgoRSsrKSxfPS1fO18tLTspeVt3KytdPVI7Xz1iLmdldEludDE2KEUsITApLEUrPTJ9d2hpbGUoRTxwLm51bUJ5dGVzKTtpZihfIT09LTMyNzY4fHx3PHkubGVuZ3RoKXRocm93IlVuZXhwZWN0ZWQgZW5kIG9mIG1hc2sgUkxFIGVuY29kaW5nIjtUPW5ldyBVaW50OEFycmF5KGgpO3ZhciBTPTAsQz0wO2ZvcihDPTA7QzxoO0MrKylDJjc/KFM9eVtDPj4zXSxTPDw9QyY3KTpTPXlbQz4+M10sUyYxMjgmJihUW0NdPTEpO2MucGl4ZWxzLnJlc3VsdE1hc2s9VCxwLmJpdHNldD15LHUrPXAubnVtQnl0ZXN9cmV0dXJuIGMucHRyPXUsYy5tYXNrPXAsITB9LHJlYWREYXRhT25lU3dlZXA6ZnVuY3Rpb24oZCxjLHUpe3ZhciBsPWMucHRyLGg9Yy5oZWFkZXJJbmZvLG09aC5udW1EaW1zLGI9aC53aWR0aCpoLmhlaWdodCxwPWguaW1hZ2VUeXBlLHk9aC5udW1WYWxpZFBpeGVsKnIuZ2V0RGF0YVR5cGVTaXplKHApKm0sVCxfPWMucGl4ZWxzLnJlc3VsdE1hc2s7aWYodT09PVVpbnQ4QXJyYXkpVD1uZXcgVWludDhBcnJheShkLGwseSk7ZWxzZXt2YXIgRT1uZXcgQXJyYXlCdWZmZXIoeSksdz1uZXcgVWludDhBcnJheShFKTt3LnNldChuZXcgVWludDhBcnJheShkLGwseSkpLFQ9bmV3IHUoRSl9aWYoVC5sZW5ndGg9PT1iKm0pYy5waXhlbHMucmVzdWx0UGl4ZWxzPVQ7ZWxzZXtjLnBpeGVscy5yZXN1bHRQaXhlbHM9bmV3IHUoYiptKTt2YXIgUj0wLFM9MCxDPTAsST0wO2lmKG0+MSlmb3IoQz0wO0M8bTtDKyspZm9yKEk9QypiLFM9MDtTPGI7UysrKV9bU10mJihjLnBpeGVscy5yZXN1bHRQaXhlbHNbSStTXT1UW1IrK10pO2Vsc2UgZm9yKFM9MDtTPGI7UysrKV9bU10mJihjLnBpeGVscy5yZXN1bHRQaXhlbHNbU109VFtSKytdKX1yZXR1cm4gbCs9eSxjLnB0cj1sLCEwfSxyZWFkSHVmZm1hblRyZWU6ZnVuY3Rpb24oZCxjKXt2YXIgdT10aGlzLkhVRkZNQU5fTFVUX0JJVFNfTUFYLGw9bmV3IERhdGFWaWV3KGQsYy5wdHIsMTYpO2MucHRyKz0xNjt2YXIgaD1sLmdldEludDMyKDAsITApO2lmKGg8Mil0aHJvdyJ1bnN1cHBvcnRlZCBIdWZmbWFuIHZlcnNpb24iO3ZhciBtPWwuZ2V0SW50MzIoNCwhMCksYj1sLmdldEludDMyKDgsITApLHA9bC5nZXRJbnQzMigxMiwhMCk7aWYoYj49cClyZXR1cm4hMTt2YXIgeT1uZXcgVWludDMyQXJyYXkocC1iKTtyLmRlY29kZUJpdHMoZCxjLHkpO3ZhciBUPVtdLF8sRSx3LFI7Zm9yKF89YjtfPHA7XysrKUU9Xy0oXzxtPzA6bSksVFtFXT17Zmlyc3Q6eVtfLWJdLHNlY29uZDpudWxsfTt2YXIgUz1kLmJ5dGVMZW5ndGgtYy5wdHIsQz1NYXRoLmNlaWwoUy80KSxJPW5ldyBBcnJheUJ1ZmZlcihDKjQpLE49bmV3IFVpbnQ4QXJyYXkoSSk7Ti5zZXQobmV3IFVpbnQ4QXJyYXkoZCxjLnB0cixTKSk7dmFyIFA9bmV3IFVpbnQzMkFycmF5KEkpLEY9MCxBLHg9MDtmb3IoQT1QWzBdLF89YjtfPHA7XysrKUU9Xy0oXzxtPzA6bSksUj1UW0VdLmZpcnN0LFI+MCYmKFRbRV0uc2Vjb25kPUE8PEY+Pj4zMi1SLDMyLUY+PVI/KEYrPVIsRj09PTMyJiYoRj0wLHgrKyxBPVBbeF0pKTooRis9Ui0zMix4KyssQT1QW3hdLFRbRV0uc2Vjb25kfD1BPj4+MzItRikpO3ZhciBNPTAsdj0wLFU9bmV3IGk7Zm9yKF89MDtfPFQubGVuZ3RoO18rKylUW19dIT09dm9pZCAwJiYoTT1NYXRoLm1heChNLFRbX10uZmlyc3QpKTtNPj11P3Y9dTp2PU0sTT49MzAmJmNvbnNvbGUubG9nKCJXQVJuaW5nLCBsYXJnZSBOVU0gTFVUIEJJVFMgSVMgIitNKTt2YXIgej1bXSxELEcsSCxPLFosb2U7Zm9yKF89YjtfPHA7XysrKWlmKEU9Xy0oXzxtPzA6bSksUj1UW0VdLmZpcnN0LFI+MClpZihEPVtSLEVdLFI8PXYpZm9yKEc9VFtFXS5zZWNvbmQ8PHYtUixIPTE8PHYtUix3PTA7dzxIO3crKyl6W0d8d109RDtlbHNlIGZvcihHPVRbRV0uc2Vjb25kLG9lPVUsTz1SLTE7Tz49MDtPLS0pWj1HPj4+TyYxLFo/KG9lLnJpZ2h0fHwob2UucmlnaHQ9bmV3IGkpLG9lPW9lLnJpZ2h0KToob2UubGVmdHx8KG9lLmxlZnQ9bmV3IGkpLG9lPW9lLmxlZnQpLE89PT0wJiYhb2UudmFsJiYob2UudmFsPURbMV0pO3JldHVybntkZWNvZGVMdXQ6eixudW1CaXRzTFVUUWljazp2LG51bUJpdHNMVVQ6TSx0cmVlOlUsc3R1ZmZlZERhdGE6UCxzcmNQdHI6eCxiaXRQb3M6Rn19LHJlYWRIdWZmbWFuOmZ1bmN0aW9uKGQsYyx1KXt2YXIgbD1jLmhlYWRlckluZm8saD1sLm51bURpbXMsbT1jLmhlYWRlckluZm8uaGVpZ2h0LGI9Yy5oZWFkZXJJbmZvLndpZHRoLHA9YiptLHk9dGhpcy5yZWFkSHVmZm1hblRyZWUoZCxjKSxUPXkuZGVjb2RlTHV0LF89eS50cmVlLEU9eS5zdHVmZmVkRGF0YSx3PXkuc3JjUHRyLFI9eS5iaXRQb3MsUz15Lm51bUJpdHNMVVRRaWNrLEM9eS5udW1CaXRzTFVULEk9Yy5oZWFkZXJJbmZvLmltYWdlVHlwZT09PTA/MTI4OjAsTixQLEYsQT1jLnBpeGVscy5yZXN1bHRNYXNrLHgsTSx2LFUseixELEcsSD0wO1I+MCYmKHcrKyxSPTApO3ZhciBPPUVbd10sWj1jLmVuY29kZU1vZGU9PT0xLG9lPW5ldyB1KHAqaCksY2U9b2UsZmU7Zm9yKGZlPTA7ZmU8bC5udW1EaW1zO2ZlKyspe2lmKGg+MSYmKGNlPW5ldyB1KG9lLmJ1ZmZlcixwKmZlLHApLEg9MCksYy5oZWFkZXJJbmZvLm51bVZhbGlkUGl4ZWw9PT1iKm0pZm9yKEQ9MCxVPTA7VTxtO1UrKylmb3Ioej0wO3o8Yjt6KyssRCsrKXtpZihQPTAseD1PPDxSPj4+MzItUyxNPXgsMzItUjxTJiYoeHw9RVt3KzFdPj4+NjQtUi1TLE09eCksVFtNXSlQPVRbTV1bMV0sUis9VFtNXVswXTtlbHNlIGZvcih4PU88PFI+Pj4zMi1DLE09eCwzMi1SPEMmJih4fD1FW3crMV0+Pj42NC1SLUMsTT14KSxOPV8sRz0wO0c8QztHKyspaWYodj14Pj4+Qy1HLTEmMSxOPXY/Ti5yaWdodDpOLmxlZnQsIShOLmxlZnR8fE4ucmlnaHQpKXtQPU4udmFsLFI9UitHKzE7YnJlYWt9Uj49MzImJihSLT0zMix3KyssTz1FW3ddKSxGPVAtSSxaPyh6PjA/Ris9SDpVPjA/Ris9Y2VbRC1iXTpGKz1ILEYmPTI1NSxjZVtEXT1GLEg9Rik6Y2VbRF09Rn1lbHNlIGZvcihEPTAsVT0wO1U8bTtVKyspZm9yKHo9MDt6PGI7eisrLEQrKylpZihBW0RdKXtpZihQPTAseD1PPDxSPj4+MzItUyxNPXgsMzItUjxTJiYoeHw9RVt3KzFdPj4+NjQtUi1TLE09eCksVFtNXSlQPVRbTV1bMV0sUis9VFtNXVswXTtlbHNlIGZvcih4PU88PFI+Pj4zMi1DLE09eCwzMi1SPEMmJih4fD1FW3crMV0+Pj42NC1SLUMsTT14KSxOPV8sRz0wO0c8QztHKyspaWYodj14Pj4+Qy1HLTEmMSxOPXY/Ti5yaWdodDpOLmxlZnQsIShOLmxlZnR8fE4ucmlnaHQpKXtQPU4udmFsLFI9UitHKzE7YnJlYWt9Uj49MzImJihSLT0zMix3KyssTz1FW3ddKSxGPVAtSSxaPyh6PjAmJkFbRC0xXT9GKz1IOlU+MCYmQVtELWJdP0YrPWNlW0QtYl06Ris9SCxGJj0yNTUsY2VbRF09RixIPUYpOmNlW0RdPUZ9Yy5wdHI9Yy5wdHIrKHcrMSkqNCsoUj4wPzQ6MCl9Yy5waXhlbHMucmVzdWx0UGl4ZWxzPW9lfSxkZWNvZGVCaXRzOmZ1bmN0aW9uKGQsYyx1LGwsaCl7e3ZhciBtPWMuaGVhZGVySW5mbyxiPW0uZmlsZVZlcnNpb24scD0wLHk9bmV3IERhdGFWaWV3KGQsYy5wdHIsNSksVD15LmdldFVpbnQ4KDApO3ArKzt2YXIgXz1UPj42LEU9Xz09PTA/NDozLV8sdz0oVCYzMik+MCxSPVQmMzEsUz0wO2lmKEU9PT0xKVM9eS5nZXRVaW50OChwKSxwKys7ZWxzZSBpZihFPT09MilTPXkuZ2V0VWludDE2KHAsITApLHArPTI7ZWxzZSBpZihFPT09NClTPXkuZ2V0VWludDMyKHAsITApLHArPTQ7ZWxzZSB0aHJvdyJJbnZhbGlkIHZhbGlkIHBpeGVsIGNvdW50IHR5cGUiO3ZhciBDPTIqbS5tYXhaRXJyb3IsSSxOLFAsRixBLHgsTSx2LFUseixEPW0ubnVtRGltcz4xP20ubWF4VmFsdWVzW2hdOm0uek1heDtpZih3KXtmb3IoYy5jb3VudGVyLmx1dCsrLHY9eS5nZXRVaW50OChwKSxVPVIscCsrLEY9TWF0aC5jZWlsKCh2LTEpKlIvOCksQT1NYXRoLmNlaWwoRi80KSxOPW5ldyBBcnJheUJ1ZmZlcihBKjQpLFA9bmV3IFVpbnQ4QXJyYXkoTiksYy5wdHIrPXAsUC5zZXQobmV3IFVpbnQ4QXJyYXkoZCxjLnB0cixGKSksTT1uZXcgVWludDMyQXJyYXkoTiksYy5wdHIrPUYsej0wO3YtMT4+Pno7KXorKztGPU1hdGguY2VpbChTKnovOCksQT1NYXRoLmNlaWwoRi80KSxOPW5ldyBBcnJheUJ1ZmZlcihBKjQpLFA9bmV3IFVpbnQ4QXJyYXkoTiksUC5zZXQobmV3IFVpbnQ4QXJyYXkoZCxjLnB0cixGKSksST1uZXcgVWludDMyQXJyYXkoTiksYy5wdHIrPUYsYj49Mz94PWEudW5zdHVmZkxVVDIoTSxSLHYtMSxsLEMsRCk6eD1hLnVuc3R1ZmZMVVQoTSxSLHYtMSxsLEMsRCksYj49Mz9hLnVuc3R1ZmYyKEksdSx6LFMseCk6YS51bnN0dWZmKEksdSx6LFMseCl9ZWxzZSBjLmNvdW50ZXIuYml0c3R1ZmZlcisrLHo9UixjLnB0cis9cCx6PjAmJihGPU1hdGguY2VpbChTKnovOCksQT1NYXRoLmNlaWwoRi80KSxOPW5ldyBBcnJheUJ1ZmZlcihBKjQpLFA9bmV3IFVpbnQ4QXJyYXkoTiksUC5zZXQobmV3IFVpbnQ4QXJyYXkoZCxjLnB0cixGKSksST1uZXcgVWludDMyQXJyYXkoTiksYy5wdHIrPUYsYj49Mz9sPT1udWxsP2Eub3JpZ2luYWxVbnN0dWZmMihJLHUseixTKTphLnVuc3R1ZmYyKEksdSx6LFMsITEsbCxDLEQpOmw9PW51bGw/YS5vcmlnaW5hbFVuc3R1ZmYoSSx1LHosUyk6YS51bnN0dWZmKEksdSx6LFMsITEsbCxDLEQpKX19LHJlYWRUaWxlczpmdW5jdGlvbihkLGMsdSl7dmFyIGw9Yy5oZWFkZXJJbmZvLGg9bC53aWR0aCxtPWwuaGVpZ2h0LGI9bC5taWNyb0Jsb2NrU2l6ZSxwPWwuaW1hZ2VUeXBlLHk9ci5nZXREYXRhVHlwZVNpemUocCksVD1NYXRoLmNlaWwoaC9iKSxfPU1hdGguY2VpbChtL2IpO2MucGl4ZWxzLm51bUJsb2Nrc1k9XyxjLnBpeGVscy5udW1CbG9ja3NYPVQsYy5waXhlbHMucHRyPTA7dmFyIEU9MCx3PTAsUj0wLFM9MCxDPTAsST0wLE49MCxQPTAsRj0wLEE9MCx4PTAsTT0wLHY9MCxVPTAsej0wLEQ9MCxHLEgsTyxaLG9lLGNlLGZlPW5ldyB1KGIqYiksZWU9bSVifHxiLGJlPWglYnx8YixsZSxwZSx1ZT1sLm51bURpbXMsYWUsQWU9Yy5waXhlbHMucmVzdWx0TWFzayxOZT1jLnBpeGVscy5yZXN1bHRQaXhlbHM7Zm9yKFI9MDtSPF87UisrKWZvcihDPVIhPT1fLTE/YjplZSxTPTA7UzxUO1MrKylmb3IoST1TIT09VC0xP2I6YmUseD1SKmgqYitTKmIsTT1oLUksYWU9MDthZTx1ZTthZSsrKXtpZih1ZT4xJiYoTmU9bmV3IHUoYy5waXhlbHMucmVzdWx0UGl4ZWxzLmJ1ZmZlcixoKm0qYWUqeSxoKm0pKSxOPWQuYnl0ZUxlbmd0aC1jLnB0cixHPW5ldyBEYXRhVmlldyhkLGMucHRyLE1hdGgubWluKDEwLE4pKSxIPXt9LEQ9MCxQPUcuZ2V0VWludDgoMCksRCsrLEY9UD4+NiYyNTUsQT1QPj4yJjE1LEEhPT0oUypiPj4zJjE1KSl0aHJvdyJpbnRlZ3JpdHkgaXNzdWUiO2lmKGNlPVAmMyxjZT4zKXRocm93IGMucHRyKz1ELCJJbnZhbGlkIGJsb2NrIGVuY29kaW5nICgiK2NlKyIpIjtpZihjZT09PTIpe2MuY291bnRlci5jb25zdGFudCsrLGMucHRyKz1EO2NvbnRpbnVlfWVsc2UgaWYoY2U9PT0wKXtpZihjLmNvdW50ZXIudW5jb21wcmVzc2VkKyssYy5wdHIrPUQsdj1DKkkqeSxVPWQuYnl0ZUxlbmd0aC1jLnB0cix2PXY8VT92OlUsTz1uZXcgQXJyYXlCdWZmZXIodiV5PT09MD92OnYreS12JXkpLFo9bmV3IFVpbnQ4QXJyYXkoTyksWi5zZXQobmV3IFVpbnQ4QXJyYXkoZCxjLnB0cix2KSksb2U9bmV3IHUoTyksej0wLEFlKWZvcihFPTA7RTxDO0UrKyl7Zm9yKHc9MDt3PEk7dysrKUFlW3hdJiYoTmVbeF09b2VbeisrXSkseCsrO3grPU19ZWxzZSBmb3IoRT0wO0U8QztFKyspe2Zvcih3PTA7dzxJO3crKylOZVt4KytdPW9lW3orK107eCs9TX1jLnB0cis9eip5fWVsc2UgaWYobGU9ci5nZXREYXRhVHlwZVVzZWQocCxGKSxwZT1yLmdldE9uZVBpeGVsKEgsRCxsZSxHKSxEKz1yLmdldERhdGFUeXBlU2l6ZShsZSksY2U9PT0zKWlmKGMucHRyKz1ELGMuY291bnRlci5jb25zdGFudG9mZnNldCsrLEFlKWZvcihFPTA7RTxDO0UrKyl7Zm9yKHc9MDt3PEk7dysrKUFlW3hdJiYoTmVbeF09cGUpLHgrKzt4Kz1NfWVsc2UgZm9yKEU9MDtFPEM7RSsrKXtmb3Iodz0wO3c8STt3KyspTmVbeCsrXT1wZTt4Kz1NfWVsc2UgaWYoYy5wdHIrPUQsci5kZWNvZGVCaXRzKGQsYyxmZSxwZSxhZSksRD0wLEFlKWZvcihFPTA7RTxDO0UrKyl7Zm9yKHc9MDt3PEk7dysrKUFlW3hdJiYoTmVbeF09ZmVbRCsrXSkseCsrO3grPU19ZWxzZSBmb3IoRT0wO0U8QztFKyspe2Zvcih3PTA7dzxJO3crKylOZVt4KytdPWZlW0QrK107eCs9TX19fSxmb3JtYXRGaWxlSW5mbzpmdW5jdGlvbihkKXtyZXR1cm57ZmlsZUlkZW50aWZpZXJTdHJpbmc6ZC5oZWFkZXJJbmZvLmZpbGVJZGVudGlmaWVyU3RyaW5nLGZpbGVWZXJzaW9uOmQuaGVhZGVySW5mby5maWxlVmVyc2lvbixpbWFnZVR5cGU6ZC5oZWFkZXJJbmZvLmltYWdlVHlwZSxoZWlnaHQ6ZC5oZWFkZXJJbmZvLmhlaWdodCx3aWR0aDpkLmhlYWRlckluZm8ud2lkdGgsbnVtVmFsaWRQaXhlbDpkLmhlYWRlckluZm8ubnVtVmFsaWRQaXhlbCxtaWNyb0Jsb2NrU2l6ZTpkLmhlYWRlckluZm8ubWljcm9CbG9ja1NpemUsYmxvYlNpemU6ZC5oZWFkZXJJbmZvLmJsb2JTaXplLG1heFpFcnJvcjpkLmhlYWRlckluZm8ubWF4WkVycm9yLHBpeGVsVHlwZTpyLmdldFBpeGVsVHlwZShkLmhlYWRlckluZm8uaW1hZ2VUeXBlKSxlb2ZPZmZzZXQ6ZC5lb2ZPZmZzZXQsbWFzazpkLm1hc2s/e251bUJ5dGVzOmQubWFzay5udW1CeXRlc306bnVsbCxwaXhlbHM6e251bUJsb2Nrc1g6ZC5waXhlbHMubnVtQmxvY2tzWCxudW1CbG9ja3NZOmQucGl4ZWxzLm51bUJsb2Nrc1ksbWF4VmFsdWU6ZC5oZWFkZXJJbmZvLnpNYXgsbWluVmFsdWU6ZC5oZWFkZXJJbmZvLnpNaW4sbm9EYXRhVmFsdWU6ZC5ub0RhdGFWYWx1ZX19fSxjb25zdHJ1Y3RDb25zdGFudFN1cmZhY2U6ZnVuY3Rpb24oZCl7dmFyIGM9ZC5oZWFkZXJJbmZvLnpNYXgsdT1kLmhlYWRlckluZm8ubnVtRGltcyxsPWQuaGVhZGVySW5mby5oZWlnaHQqZC5oZWFkZXJJbmZvLndpZHRoLGg9bCp1LG09MCxiPTAscD0wLHk9ZC5waXhlbHMucmVzdWx0TWFzaztpZih5KWlmKHU+MSlmb3IobT0wO208dTttKyspZm9yKHA9bSpsLGI9MDtiPGw7YisrKXlbYl0mJihkLnBpeGVscy5yZXN1bHRQaXhlbHNbcCtiXT1jKTtlbHNlIGZvcihiPTA7YjxsO2IrKyl5W2JdJiYoZC5waXhlbHMucmVzdWx0UGl4ZWxzW2JdPWMpO2Vsc2UgaWYoZC5waXhlbHMucmVzdWx0UGl4ZWxzLmZpbGwpZC5waXhlbHMucmVzdWx0UGl4ZWxzLmZpbGwoYyk7ZWxzZSBmb3IoYj0wO2I8aDtiKyspZC5waXhlbHMucmVzdWx0UGl4ZWxzW2JdPWN9LGdldERhdGFUeXBlQXJyYXk6ZnVuY3Rpb24oZCl7dmFyIGM7c3dpdGNoKGQpe2Nhc2UgMDpjPUludDhBcnJheTticmVhaztjYXNlIDE6Yz1VaW50OEFycmF5O2JyZWFrO2Nhc2UgMjpjPUludDE2QXJyYXk7YnJlYWs7Y2FzZSAzOmM9VWludDE2QXJyYXk7YnJlYWs7Y2FzZSA0OmM9SW50MzJBcnJheTticmVhaztjYXNlIDU6Yz1VaW50MzJBcnJheTticmVhaztjYXNlIDY6Yz1GbG9hdDMyQXJyYXk7YnJlYWs7Y2FzZSA3OmM9RmxvYXQ2NEFycmF5O2JyZWFrO2RlZmF1bHQ6Yz1GbG9hdDMyQXJyYXl9cmV0dXJuIGN9LGdldFBpeGVsVHlwZTpmdW5jdGlvbihkKXt2YXIgYztzd2l0Y2goZCl7Y2FzZSAwOmM9IlM4IjticmVhaztjYXNlIDE6Yz0iVTgiO2JyZWFrO2Nhc2UgMjpjPSJTMTYiO2JyZWFrO2Nhc2UgMzpjPSJVMTYiO2JyZWFrO2Nhc2UgNDpjPSJTMzIiO2JyZWFrO2Nhc2UgNTpjPSJVMzIiO2JyZWFrO2Nhc2UgNjpjPSJGMzIiO2JyZWFrO2Nhc2UgNzpjPSJGNjQiO2JyZWFrO2RlZmF1bHQ6Yz0iRjMyIn1yZXR1cm4gY30saXNWYWxpZFBpeGVsVmFsdWU6ZnVuY3Rpb24oZCxjKXtpZihjPT1udWxsKXJldHVybiExO3ZhciB1O3N3aXRjaChkKXtjYXNlIDA6dT1jPj0tMTI4JiZjPD0xMjc7YnJlYWs7Y2FzZSAxOnU9Yz49MCYmYzw9MjU1O2JyZWFrO2Nhc2UgMjp1PWM+PS0zMjc2OCYmYzw9MzI3Njc7YnJlYWs7Y2FzZSAzOnU9Yz49MCYmYzw9NjU1MzY7YnJlYWs7Y2FzZSA0OnU9Yz49LTIxNDc0ODM2NDgmJmM8PTIxNDc0ODM2NDc7YnJlYWs7Y2FzZSA1OnU9Yz49MCYmYzw9NDI5NDk2NzI5NjticmVhaztjYXNlIDY6dT1jPj0tMzQwMjc5OTkzODc5MDE0ODRlMjImJmM8PTM0MDI3OTk5Mzg3OTAxNDg0ZTIyO2JyZWFrO2Nhc2UgNzp1PWM+PTVlLTMyNCYmYzw9MTc5NzY5MzEzNDg2MjMxNTdlMjkyO2JyZWFrO2RlZmF1bHQ6dT0hMX1yZXR1cm4gdX0sZ2V0RGF0YVR5cGVTaXplOmZ1bmN0aW9uKGQpe3ZhciBjPTA7c3dpdGNoKGQpe2Nhc2UgMDpjYXNlIDE6Yz0xO2JyZWFrO2Nhc2UgMjpjYXNlIDM6Yz0yO2JyZWFrO2Nhc2UgNDpjYXNlIDU6Y2FzZSA2OmM9NDticmVhaztjYXNlIDc6Yz04O2JyZWFrO2RlZmF1bHQ6Yz1kfXJldHVybiBjfSxnZXREYXRhVHlwZVVzZWQ6ZnVuY3Rpb24oZCxjKXt2YXIgdT1kO3N3aXRjaChkKXtjYXNlIDI6Y2FzZSA0OnU9ZC1jO2JyZWFrO2Nhc2UgMzpjYXNlIDU6dT1kLTIqYzticmVhaztjYXNlIDY6Yz09PTA/dT1kOmM9PT0xP3U9Mjp1PTE7YnJlYWs7Y2FzZSA3OmM9PT0wP3U9ZDp1PWQtMipjKzE7YnJlYWs7ZGVmYXVsdDp1PWQ7YnJlYWt9cmV0dXJuIHV9LGdldE9uZVBpeGVsOmZ1bmN0aW9uKGQsYyx1LGwpe3ZhciBoPTA7c3dpdGNoKHUpe2Nhc2UgMDpoPWwuZ2V0SW50OChjKTticmVhaztjYXNlIDE6aD1sLmdldFVpbnQ4KGMpO2JyZWFrO2Nhc2UgMjpoPWwuZ2V0SW50MTYoYywhMCk7YnJlYWs7Y2FzZSAzOmg9bC5nZXRVaW50MTYoYywhMCk7YnJlYWs7Y2FzZSA0Omg9bC5nZXRJbnQzMihjLCEwKTticmVhaztjYXNlIDU6aD1sLmdldFVJbnQzMihjLCEwKTticmVhaztjYXNlIDY6aD1sLmdldEZsb2F0MzIoYywhMCk7YnJlYWs7Y2FzZSA3Omg9bC5nZXRGbG9hdDY0KGMsITApO2JyZWFrO2RlZmF1bHQ6dGhyb3cidGhlIGRlY29kZXIgZG9lcyBub3QgdW5kZXJzdGFuZCB0aGlzIHBpeGVsIHR5cGUifXJldHVybiBofX0saT1mdW5jdGlvbihkLGMsdSl7dGhpcy52YWw9ZCx0aGlzLmxlZnQ9Yyx0aGlzLnJpZ2h0PXV9LGY9e2RlY29kZTpmdW5jdGlvbihkLGMpe2M9Y3x8e307dmFyIHU9Yy5ub0RhdGFWYWx1ZSxsPTAsaD17fTtpZihoLnB0cj1jLmlucHV0T2Zmc2V0fHwwLGgucGl4ZWxzPXt9LCEhci5yZWFkSGVhZGVySW5mbyhkLGgpKXt2YXIgbT1oLmhlYWRlckluZm8sYj1tLmZpbGVWZXJzaW9uLHA9ci5nZXREYXRhVHlwZUFycmF5KG0uaW1hZ2VUeXBlKTtyLnJlYWRNYXNrKGQsaCksbS5udW1WYWxpZFBpeGVsIT09bS53aWR0aCptLmhlaWdodCYmIWgucGl4ZWxzLnJlc3VsdE1hc2smJihoLnBpeGVscy5yZXN1bHRNYXNrPWMubWFza0RhdGEpO3ZhciB5PW0ud2lkdGgqbS5oZWlnaHQ7aWYoaC5waXhlbHMucmVzdWx0UGl4ZWxzPW5ldyBwKHkqbS5udW1EaW1zKSxoLmNvdW50ZXI9e29uZXN3ZWVwOjAsdW5jb21wcmVzc2VkOjAsbHV0OjAsYml0c3R1ZmZlcjowLGNvbnN0YW50OjAsY29uc3RhbnRvZmZzZXQ6MH0sbS5udW1WYWxpZFBpeGVsIT09MClpZihtLnpNYXg9PT1tLnpNaW4pci5jb25zdHJ1Y3RDb25zdGFudFN1cmZhY2UoaCk7ZWxzZSBpZihiPj00JiZyLmNoZWNrTWluTWF4UmFuZ2VzKGQsaCkpci5jb25zdHJ1Y3RDb25zdGFudFN1cmZhY2UoaCk7ZWxzZXt2YXIgVD1uZXcgRGF0YVZpZXcoZCxoLnB0ciwyKSxfPVQuZ2V0VWludDgoMCk7aWYoaC5wdHIrKyxfKXIucmVhZERhdGFPbmVTd2VlcChkLGgscCk7ZWxzZSBpZihiPjEmJm0uaW1hZ2VUeXBlPD0xJiZNYXRoLmFicyhtLm1heFpFcnJvci0uNSk8MWUtNSl7dmFyIEU9VC5nZXRVaW50OCgxKTtpZihoLnB0cisrLGguZW5jb2RlTW9kZT1FLEU+Mnx8Yjw0JiZFPjEpdGhyb3ciSW52YWxpZCBIdWZmbWFuIGZsYWcgIitFO0U/ci5yZWFkSHVmZm1hbihkLGgscCk6ci5yZWFkVGlsZXMoZCxoLHApfWVsc2Ugci5yZWFkVGlsZXMoZCxoLHApfWguZW9mT2Zmc2V0PWgucHRyO3ZhciB3O2MuaW5wdXRPZmZzZXQ/KHc9aC5oZWFkZXJJbmZvLmJsb2JTaXplK2MuaW5wdXRPZmZzZXQtaC5wdHIsTWF0aC5hYnModyk+PTEmJihoLmVvZk9mZnNldD1jLmlucHV0T2Zmc2V0K2guaGVhZGVySW5mby5ibG9iU2l6ZSkpOih3PWguaGVhZGVySW5mby5ibG9iU2l6ZS1oLnB0cixNYXRoLmFicyh3KT49MSYmKGguZW9mT2Zmc2V0PWguaGVhZGVySW5mby5ibG9iU2l6ZSkpO3ZhciBSPXt3aWR0aDptLndpZHRoLGhlaWdodDptLmhlaWdodCxwaXhlbERhdGE6aC5waXhlbHMucmVzdWx0UGl4ZWxzLG1pblZhbHVlOm0uek1pbixtYXhWYWx1ZTptLnpNYXgsdmFsaWRQaXhlbENvdW50Om0ubnVtVmFsaWRQaXhlbCxkaW1Db3VudDptLm51bURpbXMsZGltU3RhdHM6e21pblZhbHVlczptLm1pblZhbHVlcyxtYXhWYWx1ZXM6bS5tYXhWYWx1ZXN9LG1hc2tEYXRhOmgucGl4ZWxzLnJlc3VsdE1hc2t9O2lmKGgucGl4ZWxzLnJlc3VsdE1hc2smJnIuaXNWYWxpZFBpeGVsVmFsdWUobS5pbWFnZVR5cGUsdSkpe3ZhciBTPWgucGl4ZWxzLnJlc3VsdE1hc2s7Zm9yKGw9MDtsPHk7bCsrKVNbbF18fChSLnBpeGVsRGF0YVtsXT11KTtSLm5vRGF0YVZhbHVlPXV9cmV0dXJuIGgubm9EYXRhVmFsdWU9dSxjLnJldHVybkZpbGVJbmZvJiYoUi5maWxlSW5mbz1yLmZvcm1hdEZpbGVJbmZvKGgpKSxSfX0sZ2V0QmFuZENvdW50OmZ1bmN0aW9uKGQpe3ZhciBjPTAsdT0wLGw9e307Zm9yKGwucHRyPTAsbC5waXhlbHM9e307dTxkLmJ5dGVMZW5ndGgtNTg7KXIucmVhZEhlYWRlckluZm8oZCxsKSx1Kz1sLmhlYWRlckluZm8uYmxvYlNpemUsYysrLGwucHRyPXU7cmV0dXJuIGN9fTtyZXR1cm4gZn0pKCksbj0oZnVuY3Rpb24oKXt2YXIgYT1uZXcgQXJyYXlCdWZmZXIoNCkscj1uZXcgVWludDhBcnJheShhKSxpPW5ldyBVaW50MzJBcnJheShhKTtyZXR1cm4gaVswXT0xLHJbMF09PT0xfSkoKSxvPXtkZWNvZGU6ZnVuY3Rpb24oYSxyKXtpZighbil0aHJvdyJCaWcgZW5kaWFuIHN5c3RlbSBpcyBub3Qgc3VwcG9ydGVkLiI7cj1yfHx7fTt2YXIgaT1yLmlucHV0T2Zmc2V0fHwwLGY9bmV3IFVpbnQ4QXJyYXkoYSxpLDEwKSxkPVN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCxmKSxjLHU7aWYoZC50cmltKCk9PT0iQ250WkltYWdlIiljPWUsdT0xO2Vsc2UgaWYoZC5zdWJzdHJpbmcoMCw1KT09PSJMZXJjMiIpYz10LHU9MjtlbHNlIHRocm93IlVuZXhwZWN0ZWQgZmlsZSBpZGVudGlmaWVyIHN0cmluZzogIitkO2Zvcih2YXIgbD0wLGg9YS5ieXRlTGVuZ3RoLTEwLG0sYj1bXSxwLHksVD17d2lkdGg6MCxoZWlnaHQ6MCxwaXhlbHM6W10scGl4ZWxUeXBlOnIucGl4ZWxUeXBlLG1hc2s6bnVsbCxzdGF0aXN0aWNzOltdfTtpPGg7KXt2YXIgXz1jLmRlY29kZShhLHtpbnB1dE9mZnNldDppLGVuY29kZWRNYXNrRGF0YTptLG1hc2tEYXRhOnkscmV0dXJuTWFzazpsPT09MCxyZXR1cm5FbmNvZGVkTWFzazpsPT09MCxyZXR1cm5GaWxlSW5mbzohMCxwaXhlbFR5cGU6ci5waXhlbFR5cGV8fG51bGwsbm9EYXRhVmFsdWU6ci5ub0RhdGFWYWx1ZXx8bnVsbH0pO2k9Xy5maWxlSW5mby5lb2ZPZmZzZXQsbD09PTAmJihtPV8uZW5jb2RlZE1hc2tEYXRhLHk9Xy5tYXNrRGF0YSxULndpZHRoPV8ud2lkdGgsVC5oZWlnaHQ9Xy5oZWlnaHQsVC5kaW1Db3VudD1fLmRpbUNvdW50fHwxLFQucGl4ZWxUeXBlPV8ucGl4ZWxUeXBlfHxfLmZpbGVJbmZvLnBpeGVsVHlwZSxULm1hc2s9Xy5tYXNrRGF0YSksdT4xJiZfLmZpbGVJbmZvLm1hc2smJl8uZmlsZUluZm8ubWFzay5udW1CeXRlcz4wJiZiLnB1c2goXy5tYXNrRGF0YSksbCsrLFQucGl4ZWxzLnB1c2goXy5waXhlbERhdGEpLFQuc3RhdGlzdGljcy5wdXNoKHttaW5WYWx1ZTpfLm1pblZhbHVlLG1heFZhbHVlOl8ubWF4VmFsdWUsbm9EYXRhVmFsdWU6Xy5ub0RhdGFWYWx1ZSxkaW1TdGF0czpfLmRpbVN0YXRzfSl9dmFyIEUsdyxSO2lmKHU+MSYmYi5sZW5ndGg+MSl7Zm9yKFI9VC53aWR0aCpULmhlaWdodCxULmJhbmRNYXNrcz1iLHk9bmV3IFVpbnQ4QXJyYXkoUikseS5zZXQoYlswXSksRT0xO0U8Yi5sZW5ndGg7RSsrKWZvcihwPWJbRV0sdz0wO3c8Ujt3KyspeVt3XT15W3ddJnBbd107VC5tYXNrRGF0YT15fXJldHVybiBUfX07dHlwZW9mIGRlZmluZT09ImZ1bmN0aW9uIiYmZGVmaW5lLmFtZD9kZWZpbmUoW10sZnVuY3Rpb24oKXtyZXR1cm4gb30pOnR5cGVvZiBkbTwidSImJmRtLmV4cG9ydHM/ZG0uZXhwb3J0cz1vOnRoaXMuTGVyYz1vfSkoKX0pO3ZhciBZXz17fTtydChZXyx7ZGVmYXVsdDooKT0+X2p9KTtmdW5jdGlvbiBnaihlLHQpe2lmKGUuZW5jb2Rpbmc9PT1kMi5MRVJDKXtsZXQgYTt0cnl7YT1iMi5kZWZhdWx0LmRlY29kZShlLmhlaWdodG1hcCl9Y2F0Y2goaSl7dGhyb3cgbmV3IHV0KGkpfWlmKGEuc3RhdGlzdGljc1swXS5taW5WYWx1ZT09PU51bWJlci5NQVhfVkFMVUUpdGhyb3cgbmV3IHV0KCJJbnZhbGlkIHRpbGUgZGF0YSIpO2UuaGVpZ2h0bWFwPWEucGl4ZWxzWzBdLGUud2lkdGg9YS53aWR0aCxlLmhlaWdodD1hLmhlaWdodH1lLmVsbGlwc29pZD1xLmNsb25lKGUuZWxsaXBzb2lkKSxlLnJlY3RhbmdsZT1TZS5jbG9uZShlLnJlY3RhbmdsZSk7bGV0IG49bDIuY29tcHV0ZVZlcnRpY2VzKGUpLG89bi52ZXJ0aWNlcztyZXR1cm4gdC5wdXNoKG8uYnVmZmVyKSx7dmVydGljZXM6by5idWZmZXIsbnVtYmVyT2ZBdHRyaWJ1dGVzOm4uZW5jb2Rpbmcuc3RyaWRlLG1pbmltdW1IZWlnaHQ6bi5taW5pbXVtSGVpZ2h0LG1heGltdW1IZWlnaHQ6bi5tYXhpbXVtSGVpZ2h0LGdyaWRXaWR0aDplLndpZHRoLGdyaWRIZWlnaHQ6ZS5oZWlnaHQsYm91bmRpbmdTcGhlcmUzRDpuLmJvdW5kaW5nU3BoZXJlM0Qsb3JpZW50ZWRCb3VuZGluZ0JveDpuLm9yaWVudGVkQm91bmRpbmdCb3gsb2NjbHVkZWVQb2ludEluU2NhbGVkU3BhY2U6bi5vY2NsdWRlZVBvaW50SW5TY2FsZWRTcGFjZSxlbmNvZGluZzpuLmVuY29kaW5nLHdlc3RJbmRpY2VzU291dGhUb05vcnRoOm4ud2VzdEluZGljZXNTb3V0aFRvTm9ydGgsc291dGhJbmRpY2VzRWFzdFRvV2VzdDpuLnNvdXRoSW5kaWNlc0Vhc3RUb1dlc3QsZWFzdEluZGljZXNOb3J0aFRvU291dGg6bi5lYXN0SW5kaWNlc05vcnRoVG9Tb3V0aCxub3J0aEluZGljZXNXZXN0VG9FYXN0Om4ubm9ydGhJbmRpY2VzV2VzdFRvRWFzdH19dmFyIGIyLF9qLEpfPVgoKCk9PntXZSgpO3UyKCk7aDIoKTtfbigpO2phKCk7YjI9Y2EobTIoKSwxKTtVbigpO19qPUF0KGdqKX0pO3ZhciBRXz17fTtydChRXyx7ZGVmYXVsdDooKT0+VGp9KTtmdW5jdGlvbiB3aihlLHQpe2xldCBuPWUucXVhbnRpemVkVmVydGljZXMsbz1uLmxlbmd0aC8zLGE9ZS5vY3RFbmNvZGVkTm9ybWFscyxyPWUud2VzdEluZGljZXMubGVuZ3RoK2UuZWFzdEluZGljZXMubGVuZ3RoK2Uuc291dGhJbmRpY2VzLmxlbmd0aCtlLm5vcnRoSW5kaWNlcy5sZW5ndGgsaT1lLmluY2x1ZGVXZWJNZXJjYXRvclQsZj1lLmV4YWdnZXJhdGlvbixkPWUuZXhhZ2dlcmF0aW9uUmVsYXRpdmVIZWlnaHQsdT1mIT09MSxsPVNlLmNsb25lKGUucmVjdGFuZ2xlKSxoPWwud2VzdCxtPWwuc291dGgsYj1sLmVhc3QscD1sLm5vcnRoLHk9cS5jbG9uZShlLmVsbGlwc29pZCksVD1lLm1pbmltdW1IZWlnaHQsXz1lLm1heGltdW1IZWlnaHQsRT1lLnJlbGF0aXZlVG9DZW50ZXIsdz1jby5lYXN0Tm9ydGhVcFRvRml4ZWRGcmFtZShFLHkpLFI9JC5pbnZlcnNlVHJhbnNmb3JtYXRpb24odyxuZXcgJCksUyxDO2kmJihTPVJuLmdlb2RldGljTGF0aXR1ZGVUb01lcmNhdG9yQW5nbGUobSksQz0xLyhSbi5nZW9kZXRpY0xhdGl0dWRlVG9NZXJjYXRvckFuZ2xlKHApLVMpKTtsZXQgST1uLnN1YmFycmF5KDAsbyksTj1uLnN1YmFycmF5KG8sMipvKSxQPW4uc3ViYXJyYXkobyoyLDMqbyksRj1nKGEpLEE9bmV3IEFycmF5KG8pLHg9bmV3IEFycmF5KG8pLE09bmV3IEFycmF5KG8pLHY9aT9uZXcgQXJyYXkobyk6W10sVT11P25ldyBBcnJheShvKTpbXSx6PXlqO3oueD1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksei55PU51bWJlci5QT1NJVElWRV9JTkZJTklUWSx6Lno9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZO2xldCBEPUFqO0QueD1OdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFksRC55PU51bWJlci5ORUdBVElWRV9JTkZJTklUWSxELno9TnVtYmVyLk5FR0FUSVZFX0lORklOSVRZO2xldCBHPU51bWJlci5QT1NJVElWRV9JTkZJTklUWSxIPU51bWJlci5ORUdBVElWRV9JTkZJTklUWSxPPU51bWJlci5QT1NJVElWRV9JTkZJTklUWSxaPU51bWJlci5ORUdBVElWRV9JTkZJTklUWTtmb3IobGV0IFZlPTA7VmU8bzsrK1ZlKXtsZXQgUnQ9SVtWZV0sRnQ9TltWZV0scXQ9UnQvWl8sWnQ9RnQvWl8sb249ay5sZXJwKFQsXyxQW1ZlXS9aXyk7YW8ubG9uZ2l0dWRlPWsubGVycChoLGIscXQpLGFvLmxhdGl0dWRlPWsubGVycChtLHAsWnQpLGFvLmhlaWdodD1vbixHPU1hdGgubWluKGFvLmxvbmdpdHVkZSxHKSxIPU1hdGgubWF4KGFvLmxvbmdpdHVkZSxIKSxPPU1hdGgubWluKGFvLmxhdGl0dWRlLE8pLFo9TWF0aC5tYXgoYW8ubGF0aXR1ZGUsWik7bGV0IHduPXkuY2FydG9ncmFwaGljVG9DYXJ0ZXNpYW4oYW8pO0FbVmVdPW5ldyBZKHF0LFp0KSx4W1ZlXT1vbixNW1ZlXT13bixpJiYodltWZV09KFJuLmdlb2RldGljTGF0aXR1ZGVUb01lcmNhdG9yQW5nbGUoYW8ubGF0aXR1ZGUpLVMpKkMpLHUmJihVW1ZlXT15Lmdlb2RldGljU3VyZmFjZU5vcm1hbCh3bikpLCQubXVsdGlwbHlCeVBvaW50KFIsd24sZ2QpLHMubWluaW11bUJ5Q29tcG9uZW50KGdkLHoseikscy5tYXhpbXVtQnlDb21wb25lbnQoZ2QsRCxEKX1sZXQgb2U9aG0oZS53ZXN0SW5kaWNlcyxmdW5jdGlvbihWZSxSdCl7cmV0dXJuIEFbVmVdLnktQVtSdF0ueX0pLGNlPWhtKGUuZWFzdEluZGljZXMsZnVuY3Rpb24oVmUsUnQpe3JldHVybiBBW1J0XS55LUFbVmVdLnl9KSxmZT1obShlLnNvdXRoSW5kaWNlcyxmdW5jdGlvbihWZSxSdCl7cmV0dXJuIEFbUnRdLngtQVtWZV0ueH0pLGVlPWhtKGUubm9ydGhJbmRpY2VzLGZ1bmN0aW9uKFZlLFJ0KXtyZXR1cm4gQVtWZV0ueC1BW1J0XS54fSksYmU7VDwwJiYoYmU9bmV3IFRyKHkpLmNvbXB1dGVIb3Jpem9uQ3VsbGluZ1BvaW50UG9zc2libHlVbmRlckVsbGlwc29pZChFLE0sVCkpO2xldCBsZT1UO2xlPU1hdGgubWluKGxlLHVtKGUud2VzdEluZGljZXMsZS53ZXN0U2tpcnRIZWlnaHQseCxBLGwseSxSLHosRCkpLGxlPU1hdGgubWluKGxlLHVtKGUuc291dGhJbmRpY2VzLGUuc291dGhTa2lydEhlaWdodCx4LEEsbCx5LFIseixEKSksbGU9TWF0aC5taW4obGUsdW0oZS5lYXN0SW5kaWNlcyxlLmVhc3RTa2lydEhlaWdodCx4LEEsbCx5LFIseixEKSksbGU9TWF0aC5taW4obGUsdW0oZS5ub3J0aEluZGljZXMsZS5ub3J0aFNraXJ0SGVpZ2h0LHgsQSxsLHksUix6LEQpKTtsZXQgcGU9bmV3IHVvKHosRCxFKSx1ZT1uZXcgcmEoRSxwZSxsZSxfLHcsRixpLHUsZixkKSxhZT11ZS5zdHJpZGUsQWU9byphZStyKmFlLE5lPW5ldyBGbG9hdDMyQXJyYXkoQWUpLGV0PTA7Zm9yKGxldCBWZT0wO1ZlPG87KytWZSl7aWYoRil7bGV0IFJ0PVZlKjI7S3MueD1hW1J0XSxLcy55PWFbUnQrMV19ZXQ9dWUuZW5jb2RlKE5lLGV0LE1bVmVdLEFbVmVdLHhbVmVdLEtzLHZbVmVdLFVbVmVdKX1sZXQgS2U9TWF0aC5tYXgoMCwoci00KSoyKSx0dD1lLmluZGljZXMubGVuZ3RoK0tlKjMsWGU9a2UuY3JlYXRlVHlwZWRBcnJheShvK3IsdHQpO1hlLnNldChlLmluZGljZXMsMCk7bGV0IExlPTFlLTQsamU9KEgtRykqTGUsaXQ9KFotTykqTGUsWWU9LWplLGZ0PTAsSXQ9amUsQ3Q9MCxodD0wLEt0PWl0LFB0PTAsTHQ9LWl0LHFlPW8qYWU7cmV0dXJuIGxtKE5lLHFlLG9lLHVlLHgsQSxhLHksbCxlLndlc3RTa2lydEhlaWdodCxTLEMsWWUsZnQpLHFlKz1lLndlc3RJbmRpY2VzLmxlbmd0aCphZSxsbShOZSxxZSxmZSx1ZSx4LEEsYSx5LGwsZS5zb3V0aFNraXJ0SGVpZ2h0LFMsQyxQdCxMdCkscWUrPWUuc291dGhJbmRpY2VzLmxlbmd0aCphZSxsbShOZSxxZSxjZSx1ZSx4LEEsYSx5LGwsZS5lYXN0U2tpcnRIZWlnaHQsUyxDLEl0LEN0KSxxZSs9ZS5lYXN0SW5kaWNlcy5sZW5ndGgqYWUsbG0oTmUscWUsZWUsdWUseCxBLGEseSxsLGUubm9ydGhTa2lydEhlaWdodCxTLEMsaHQsS3QpLExpLmFkZFNraXJ0SW5kaWNlcyhvZSxmZSxjZSxlZSxvLFhlLGUuaW5kaWNlcy5sZW5ndGgpLHQucHVzaChOZS5idWZmZXIsWGUuYnVmZmVyKSx7dmVydGljZXM6TmUuYnVmZmVyLGluZGljZXM6WGUuYnVmZmVyLHdlc3RJbmRpY2VzU291dGhUb05vcnRoOm9lLHNvdXRoSW5kaWNlc0Vhc3RUb1dlc3Q6ZmUsZWFzdEluZGljZXNOb3J0aFRvU291dGg6Y2Usbm9ydGhJbmRpY2VzV2VzdFRvRWFzdDplZSx2ZXJ0ZXhTdHJpZGU6YWUsY2VudGVyOkUsbWluaW11bUhlaWdodDpULG1heGltdW1IZWlnaHQ6XyxvY2NsdWRlZVBvaW50SW5TY2FsZWRTcGFjZTpiZSxlbmNvZGluZzp1ZSxpbmRleENvdW50V2l0aG91dFNraXJ0czplLmluZGljZXMubGVuZ3RofX1mdW5jdGlvbiB1bShlLHQsbixvLGEscixpLGYsZCl7bGV0IGM9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLHU9YS5ub3J0aCxsPWEuc291dGgsaD1hLmVhc3QsbT1hLndlc3Q7aDxtJiYoaCs9ay5UV09fUEkpO2xldCBiPWUubGVuZ3RoO2ZvcihsZXQgcD0wO3A8YjsrK3Ape2xldCB5PWVbcF0sVD1uW3ldLF89b1t5XTthby5sb25naXR1ZGU9ay5sZXJwKG0saCxfLngpLGFvLmxhdGl0dWRlPWsubGVycChsLHUsXy55KSxhby5oZWlnaHQ9VC10O2xldCBFPXIuY2FydG9ncmFwaGljVG9DYXJ0ZXNpYW4oYW8sZ2QpOyQubXVsdGlwbHlCeVBvaW50KGksRSxFKSxzLm1pbmltdW1CeUNvbXBvbmVudChFLGYsZikscy5tYXhpbXVtQnlDb21wb25lbnQoRSxkLGQpLGM9TWF0aC5taW4oYyxhby5oZWlnaHQpfXJldHVybiBjfWZ1bmN0aW9uIGxtKGUsdCxuLG8sYSxyLGksZixkLGMsdSxsLGgsbSl7bGV0IGI9ZyhpKSxwPWQubm9ydGgseT1kLnNvdXRoLFQ9ZC5lYXN0LF89ZC53ZXN0O1Q8XyYmKFQrPWsuVFdPX1BJKTtsZXQgRT1uLmxlbmd0aDtmb3IobGV0IHc9MDt3PEU7Kyt3KXtsZXQgUj1uW3ddLFM9YVtSXSxDPXJbUl07YW8ubG9uZ2l0dWRlPWsubGVycChfLFQsQy54KStoLGFvLmxhdGl0dWRlPWsubGVycCh5LHAsQy55KSttLGFvLmhlaWdodD1TLWM7bGV0IEk9Zi5jYXJ0b2dyYXBoaWNUb0NhcnRlc2lhbihhbyxnZCk7aWYoYil7bGV0IEY9UioyO0tzLng9aVtGXSxLcy55PWlbRisxXX1sZXQgTjtvLmhhc1dlYk1lcmNhdG9yVCYmKE49KFJuLmdlb2RldGljTGF0aXR1ZGVUb01lcmNhdG9yQW5nbGUoYW8ubGF0aXR1ZGUpLXUpKmwpO2xldCBQO28uaGFzR2VvZGV0aWNTdXJmYWNlTm9ybWFscyYmKFA9Zi5nZW9kZXRpY1N1cmZhY2VOb3JtYWwoSSkpLHQ9by5lbmNvZGUoZSx0LEksQyxhby5oZWlnaHQsS3MsTixQKX19ZnVuY3Rpb24gaG0oZSx0KXtsZXQgbjtyZXR1cm4gdHlwZW9mIGUuc2xpY2U9PSJmdW5jdGlvbiImJihuPWUuc2xpY2UoKSx0eXBlb2Ygbi5zb3J0IT0iZnVuY3Rpb24iJiYobj12b2lkIDApKSxnKG4pfHwobj1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChlKSksbi5zb3J0KHQpLG59dmFyIFpfLGdkLHlqLEFqLGFvLEtzLFRqLCRfPVgoKCk9PntBaSgpO2p0KCk7SWUoKTtUdCgpO3NlKCk7V2UoKTtHcygpO25uKCk7R2UoKTtwbigpO19uKCk7VnMoKTtCXygpO3NyKCk7eWkoKTtVbigpO1pfPTMyNzY3LGdkPW5ldyBzLHlqPW5ldyBzLEFqPW5ldyBzLGFvPW5ldyByZSxLcz1uZXcgWTtUaj1BdCh3ail9KTtmdW5jdGlvbiBFaihlLHQpe3JldHVybiBrLmVxdWFsc0Vwc2lsb24oZS5sYXRpdHVkZSx0LmxhdGl0dWRlLGsuRVBTSUxPTjEwKSYmay5lcXVhbHNFcHNpbG9uKGUubG9uZ2l0dWRlLHQubG9uZ2l0dWRlLGsuRVBTSUxPTjEwKX1mdW5jdGlvbiBPaihlLHQsbixvKXt0PU5uKHQscy5lcXVhbHNFcHNpbG9uKTtsZXQgYT10Lmxlbmd0aDtpZihhPDIpcmV0dXJuO2xldCByPWcobyksaT1nKG4pLGY9bmV3IEFycmF5KGEpLGQ9bmV3IEFycmF5KGEpLGM9bmV3IEFycmF5KGEpLHU9dFswXTtmWzBdPXU7bGV0IGw9ZS5jYXJ0ZXNpYW5Ub0NhcnRvZ3JhcGhpYyh1LFJqKTtpJiYobC5oZWlnaHQ9blswXSksZFswXT1sLmhlaWdodCxyP2NbMF09b1swXTpjWzBdPTA7bGV0IGg9ZFswXSxtPWNbMF0sYj1oPT09bSxwPTE7Zm9yKGxldCB5PTE7eTxhOysreSl7bGV0IFQ9dFt5XSxfPWUuY2FydGVzaWFuVG9DYXJ0b2dyYXBoaWMoVCx4aik7aSYmKF8uaGVpZ2h0PW5beV0pLGI9YiYmXy5oZWlnaHQ9PT0wLEVqKGwsXyk/bC5oZWlnaHQ8Xy5oZWlnaHQmJihkW3AtMV09Xy5oZWlnaHQpOihmW3BdPVQsZFtwXT1fLmhlaWdodCxyP2NbcF09b1t5XTpjW3BdPTAsYj1iJiZkW3BdPT09Y1twXSxyZS5jbG9uZShfLGwpLCsrcCl9aWYoIShifHxwPDIpKXJldHVybiBmLmxlbmd0aD1wLGQubGVuZ3RoPXAsYy5sZW5ndGg9cCx7cG9zaXRpb25zOmYsdG9wSGVpZ2h0czpkLGJvdHRvbUhlaWdodHM6Y319dmFyIHAyLFJqLHhqLFNqLENqLE1qLG1tLGV5PVgoKCk9PntYYSgpO0llKCk7VHQoKTtzZSgpO0dlKCk7d3MoKTtwMj17fTtSaj1uZXcgcmUseGo9bmV3IHJlO1NqPW5ldyBBcnJheSgyKSxDaj1uZXcgQXJyYXkoMiksTWo9e3Bvc2l0aW9uczp2b2lkIDAsaGVpZ2h0OnZvaWQgMCxncmFudWxhcml0eTp2b2lkIDAsZWxsaXBzb2lkOnZvaWQgMH07cDIuY29tcHV0ZVBvc2l0aW9ucz1mdW5jdGlvbihlLHQsbixvLGEscil7bGV0IGk9T2ooZSx0LG4sbyk7aWYoIWcoaSkpcmV0dXJuO3Q9aS5wb3NpdGlvbnMsbj1pLnRvcEhlaWdodHMsbz1pLmJvdHRvbUhlaWdodHM7bGV0IGY9dC5sZW5ndGgsZD1mLTIsYyx1LGw9ay5jaG9yZExlbmd0aChhLGUubWF4aW11bVJhZGl1cyksaD1NajtpZihoLm1pbkRpc3RhbmNlPWwsaC5lbGxpcHNvaWQ9ZSxyKXtsZXQgbT0wLGI7Zm9yKGI9MDtiPGYtMTtiKyspbSs9QW4ubnVtYmVyT2ZQb2ludHModFtiXSx0W2IrMV0sbCkrMTtjPW5ldyBGbG9hdDY0QXJyYXkobSozKSx1PW5ldyBGbG9hdDY0QXJyYXkobSozKTtsZXQgcD1Taix5PUNqO2gucG9zaXRpb25zPXAsaC5oZWlnaHQ9eTtsZXQgVD0wO2ZvcihiPTA7YjxmLTE7YisrKXtwWzBdPXRbYl0scFsxXT10W2IrMV0seVswXT1uW2JdLHlbMV09bltiKzFdO2xldCBfPUFuLmdlbmVyYXRlQXJjKGgpO2Muc2V0KF8sVCkseVswXT1vW2JdLHlbMV09b1tiKzFdLHUuc2V0KEFuLmdlbmVyYXRlQXJjKGgpLFQpLFQrPV8ubGVuZ3RofX1lbHNlIGgucG9zaXRpb25zPXQsaC5oZWlnaHQ9bixjPW5ldyBGbG9hdDY0QXJyYXkoQW4uZ2VuZXJhdGVBcmMoaCkpLGguaGVpZ2h0PW8sdT1uZXcgRmxvYXQ2NEFycmF5KEFuLmdlbmVyYXRlQXJjKGgpKTtyZXR1cm57Ym90dG9tUG9zaXRpb25zOnUsdG9wUG9zaXRpb25zOmMsbnVtQ29ybmVyczpkfX07bW09cDJ9KTtmdW5jdGlvbiBDYyhlKXtlPWU/P0NlLkVNUFRZX09CSkVDVDtsZXQgdD1lLnBvc2l0aW9ucyxuPWUubWF4aW11bUhlaWdodHMsbz1lLm1pbmltdW1IZWlnaHRzLGE9ZS52ZXJ0ZXhGb3JtYXQ/P2hlLkRFRkFVTFQscj1lLmdyYW51bGFyaXR5Pz9rLlJBRElBTlNfUEVSX0RFR1JFRSxpPWUuZWxsaXBzb2lkPz9xLmRlZmF1bHQ7dGhpcy5fcG9zaXRpb25zPXQsdGhpcy5fbWluaW11bUhlaWdodHM9byx0aGlzLl9tYXhpbXVtSGVpZ2h0cz1uLHRoaXMuX3ZlcnRleEZvcm1hdD1oZS5jbG9uZShhKSx0aGlzLl9ncmFudWxhcml0eT1yLHRoaXMuX2VsbGlwc29pZD1xLmNsb25lKGkpLHRoaXMuX3dvcmtlck5hbWU9ImNyZWF0ZVdhbGxHZW9tZXRyeSI7bGV0IGY9MSt0Lmxlbmd0aCpzLnBhY2tlZExlbmd0aCsyO2cobykmJihmKz1vLmxlbmd0aCksZyhuKSYmKGYrPW4ubGVuZ3RoKSx0aGlzLnBhY2tlZExlbmd0aD1mK3EucGFja2VkTGVuZ3RoK2hlLnBhY2tlZExlbmd0aCsxfXZhciB0eSxibSxOaixnMixJaixQaixraixfMix5MixfZCxueSxBMj1YKCgpPT57TXQoKTtJZSgpO3Z0KCk7bXQoKTtzZSgpO1dlKCk7JHQoKTtlbigpO3VuKCk7bm4oKTtHZSgpO2NuKCk7a28oKTtleSgpO3R5PW5ldyBzLGJtPW5ldyBzLE5qPW5ldyBzLGcyPW5ldyBzLElqPW5ldyBzLFBqPW5ldyBzLGtqPW5ldyBzO0NjLnBhY2s9ZnVuY3Rpb24oZSx0LG4pe249bj8/MDtsZXQgbyxhPWUuX3Bvc2l0aW9ucyxyPWEubGVuZ3RoO2Zvcih0W24rK109cixvPTA7bzxyOysrbyxuKz1zLnBhY2tlZExlbmd0aClzLnBhY2soYVtvXSx0LG4pO2xldCBpPWUuX21pbmltdW1IZWlnaHRzO2lmKHI9ZyhpKT9pLmxlbmd0aDowLHRbbisrXT1yLGcoaSkpZm9yKG89MDtvPHI7KytvKXRbbisrXT1pW29dO2xldCBmPWUuX21heGltdW1IZWlnaHRzO2lmKHI9ZyhmKT9mLmxlbmd0aDowLHRbbisrXT1yLGcoZikpZm9yKG89MDtvPHI7KytvKXRbbisrXT1mW29dO3JldHVybiBxLnBhY2soZS5fZWxsaXBzb2lkLHQsbiksbis9cS5wYWNrZWRMZW5ndGgsaGUucGFjayhlLl92ZXJ0ZXhGb3JtYXQsdCxuKSxuKz1oZS5wYWNrZWRMZW5ndGgsdFtuXT1lLl9ncmFudWxhcml0eSx0fTtfMj1xLmNsb25lKHEuVU5JVF9TUEhFUkUpLHkyPW5ldyBoZSxfZD17cG9zaXRpb25zOnZvaWQgMCxtaW5pbXVtSGVpZ2h0czp2b2lkIDAsbWF4aW11bUhlaWdodHM6dm9pZCAwLGVsbGlwc29pZDpfMix2ZXJ0ZXhGb3JtYXQ6eTIsZ3JhbnVsYXJpdHk6dm9pZCAwfTtDYy51bnBhY2s9ZnVuY3Rpb24oZSx0LG4pe3Q9dD8/MDtsZXQgbyxhPWVbdCsrXSxyPW5ldyBBcnJheShhKTtmb3Iobz0wO288YTsrK28sdCs9cy5wYWNrZWRMZW5ndGgpcltvXT1zLnVucGFjayhlLHQpO2E9ZVt0KytdO2xldCBpO2lmKGE+MClmb3IoaT1uZXcgQXJyYXkoYSksbz0wO288YTsrK28paVtvXT1lW3QrK107YT1lW3QrK107bGV0IGY7aWYoYT4wKWZvcihmPW5ldyBBcnJheShhKSxvPTA7bzxhOysrbylmW29dPWVbdCsrXTtsZXQgZD1xLnVucGFjayhlLHQsXzIpO3QrPXEucGFja2VkTGVuZ3RoO2xldCBjPWhlLnVucGFjayhlLHQseTIpO3QrPWhlLnBhY2tlZExlbmd0aDtsZXQgdT1lW3RdO3JldHVybiBnKG4pPyhuLl9wb3NpdGlvbnM9cixuLl9taW5pbXVtSGVpZ2h0cz1pLG4uX21heGltdW1IZWlnaHRzPWYsbi5fZWxsaXBzb2lkPXEuY2xvbmUoZCxuLl9lbGxpcHNvaWQpLG4uX3ZlcnRleEZvcm1hdD1oZS5jbG9uZShjLG4uX3ZlcnRleEZvcm1hdCksbi5fZ3JhbnVsYXJpdHk9dSxuKTooX2QucG9zaXRpb25zPXIsX2QubWluaW11bUhlaWdodHM9aSxfZC5tYXhpbXVtSGVpZ2h0cz1mLF9kLmdyYW51bGFyaXR5PXUsbmV3IENjKF9kKSl9O0NjLmZyb21Db25zdGFudEhlaWdodHM9ZnVuY3Rpb24oZSl7ZT1lPz9DZS5FTVBUWV9PQkpFQ1Q7bGV0IHQ9ZS5wb3NpdGlvbnMsbixvLGE9ZS5taW5pbXVtSGVpZ2h0LHI9ZS5tYXhpbXVtSGVpZ2h0LGk9ZyhhKSxmPWcocik7aWYoaXx8Zil7bGV0IGM9dC5sZW5ndGg7bj1pP25ldyBBcnJheShjKTp2b2lkIDAsbz1mP25ldyBBcnJheShjKTp2b2lkIDA7Zm9yKGxldCB1PTA7dTxjOysrdSlpJiYoblt1XT1hKSxmJiYob1t1XT1yKX1sZXQgZD17cG9zaXRpb25zOnQsbWF4aW11bUhlaWdodHM6byxtaW5pbXVtSGVpZ2h0czpuLGVsbGlwc29pZDplLmVsbGlwc29pZCx2ZXJ0ZXhGb3JtYXQ6ZS52ZXJ0ZXhGb3JtYXR9O3JldHVybiBuZXcgQ2MoZCl9O0NjLmNyZWF0ZUdlb21ldHJ5PWZ1bmN0aW9uKGUpe2xldCB0PWUuX3Bvc2l0aW9ucyxuPWUuX21pbmltdW1IZWlnaHRzLG89ZS5fbWF4aW11bUhlaWdodHMsYT1lLl92ZXJ0ZXhGb3JtYXQscj1lLl9ncmFudWxhcml0eSxpPWUuX2VsbGlwc29pZCxmPW1tLmNvbXB1dGVQb3NpdGlvbnMoaSx0LG8sbixyLCEwKTtpZighZyhmKSlyZXR1cm47bGV0IGQ9Zi5ib3R0b21Qb3NpdGlvbnMsYz1mLnRvcFBvc2l0aW9ucyx1PWYubnVtQ29ybmVycyxsPWMubGVuZ3RoLGg9bCoyLG09YS5wb3NpdGlvbj9uZXcgRmxvYXQ2NEFycmF5KGgpOnZvaWQgMCxiPWEubm9ybWFsP25ldyBGbG9hdDMyQXJyYXkoaCk6dm9pZCAwLHA9YS50YW5nZW50P25ldyBGbG9hdDMyQXJyYXkoaCk6dm9pZCAwLHk9YS5iaXRhbmdlbnQ/bmV3IEZsb2F0MzJBcnJheShoKTp2b2lkIDAsVD1hLnN0P25ldyBGbG9hdDMyQXJyYXkoaC8zKjIpOnZvaWQgMCxfPTAsRT0wLHc9MCxSPTAsUz0wLEM9a2osST1QaixOPUlqLFA9ITA7bC89MztsZXQgRixBPTAseD0xLyhsLXUtMSk7Zm9yKEY9MDtGPGw7KytGKXtsZXQgRD1GKjMsRz1zLmZyb21BcnJheShjLEQsdHkpLEg9cy5mcm9tQXJyYXkoZCxELGJtKTtpZihhLnBvc2l0aW9uJiYobVtfKytdPUgueCxtW18rK109SC55LG1bXysrXT1ILnosbVtfKytdPUcueCxtW18rK109Ry55LG1bXysrXT1HLnopLGEuc3QmJihUW1MrK109QSxUW1MrK109MCxUW1MrK109QSxUW1MrK109MSksYS5ub3JtYWx8fGEudGFuZ2VudHx8YS5iaXRhbmdlbnQpe2xldCBPPXMuY2xvbmUocy5aRVJPLGcyKSxaPXMuc3VidHJhY3QoRyxpLmdlb2RldGljU3VyZmFjZU5vcm1hbChHLGJtKSxibSk7aWYoRisxPGwmJihPPXMuZnJvbUFycmF5KGMsRCszLGcyKSksUCl7bGV0IG9lPXMuc3VidHJhY3QoTyxHLE5qKSxjZT1zLnN1YnRyYWN0KFosRyx0eSk7Qz1zLm5vcm1hbGl6ZShzLmNyb3NzKGNlLG9lLEMpLEMpLFA9ITF9cy5lcXVhbHNFcHNpbG9uKEcsTyxrLkVQU0lMT04xMCk/UD0hMDooQSs9eCxhLnRhbmdlbnQmJihJPXMubm9ybWFsaXplKHMuc3VidHJhY3QoTyxHLEkpLEkpKSxhLmJpdGFuZ2VudCYmKE49cy5ub3JtYWxpemUocy5jcm9zcyhDLEksTiksTikpKSxhLm5vcm1hbCYmKGJbRSsrXT1DLngsYltFKytdPUMueSxiW0UrK109Qy56LGJbRSsrXT1DLngsYltFKytdPUMueSxiW0UrK109Qy56KSxhLnRhbmdlbnQmJihwW1IrK109SS54LHBbUisrXT1JLnkscFtSKytdPUkueixwW1IrK109SS54LHBbUisrXT1JLnkscFtSKytdPUkueiksYS5iaXRhbmdlbnQmJih5W3crK109Ti54LHlbdysrXT1OLnkseVt3KytdPU4ueix5W3crK109Ti54LHlbdysrXT1OLnkseVt3KytdPU4ueil9fWxldCBNPW5ldyBudDthLnBvc2l0aW9uJiYoTS5wb3NpdGlvbj1uZXcgaWUoe2NvbXBvbmVudERhdGF0eXBlOm5lLkRPVUJMRSxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOm19KSksYS5ub3JtYWwmJihNLm5vcm1hbD1uZXcgaWUoe2NvbXBvbmVudERhdGF0eXBlOm5lLkZMT0FULGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6Yn0pKSxhLnRhbmdlbnQmJihNLnRhbmdlbnQ9bmV3IGllKHtjb21wb25lbnREYXRhdHlwZTpuZS5GTE9BVCxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOnB9KSksYS5iaXRhbmdlbnQmJihNLmJpdGFuZ2VudD1uZXcgaWUoe2NvbXBvbmVudERhdGF0eXBlOm5lLkZMT0FULGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6eX0pKSxhLnN0JiYoTS5zdD1uZXcgaWUoe2NvbXBvbmVudERhdGF0eXBlOm5lLkZMT0FULGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Mix2YWx1ZXM6VH0pKTtsZXQgdj1oLzM7aC09NioodSsxKTtsZXQgVT1rZS5jcmVhdGVUeXBlZEFycmF5KHYsaCksej0wO2ZvcihGPTA7Rjx2LTI7Ris9Mil7bGV0IEQ9RixHPUYrMixIPXMuZnJvbUFycmF5KG0sRCozLHR5KSxPPXMuZnJvbUFycmF5KG0sRyozLGJtKTtpZihzLmVxdWFsc0Vwc2lsb24oSCxPLGsuRVBTSUxPTjEwKSljb250aW51ZTtsZXQgWj1GKzEsb2U9RiszO1VbeisrXT1aLFVbeisrXT1ELFVbeisrXT1vZSxVW3orK109b2UsVVt6KytdPUQsVVt6KytdPUd9cmV0dXJuIG5ldyB2ZSh7YXR0cmlidXRlczpNLGluZGljZXM6VSxwcmltaXRpdmVUeXBlOlVlLlRSSUFOR0xFUyxib3VuZGluZ1NwaGVyZTpnZS5mcm9tVmVydGljZXMobSl9KX07bnk9Q2N9KTt2YXIgb3k9e307cnQob3kse2RlZmF1bHQ6KCk9PkZqfSk7ZnVuY3Rpb24gdmooZSx0KXtyZXR1cm4gZyh0KSYmKGU9bnkudW5wYWNrKGUsdCkpLGUuX2VsbGlwc29pZD1xLmNsb25lKGUuX2VsbGlwc29pZCksbnkuY3JlYXRlR2VvbWV0cnkoZSl9dmFyIEZqLGF5PVgoKCk9PntzZSgpO1dlKCk7QTIoKTtGaj12an0pO2Z1bmN0aW9uIE1jKGUpe2U9ZT8/Q2UuRU1QVFlfT0JKRUNUO2xldCB0PWUucG9zaXRpb25zLG49ZS5tYXhpbXVtSGVpZ2h0cyxvPWUubWluaW11bUhlaWdodHMsYT1lLmdyYW51bGFyaXR5Pz9rLlJBRElBTlNfUEVSX0RFR1JFRSxyPWUuZWxsaXBzb2lkPz9xLmRlZmF1bHQ7dGhpcy5fcG9zaXRpb25zPXQsdGhpcy5fbWluaW11bUhlaWdodHM9byx0aGlzLl9tYXhpbXVtSGVpZ2h0cz1uLHRoaXMuX2dyYW51bGFyaXR5PWEsdGhpcy5fZWxsaXBzb2lkPXEuY2xvbmUociksdGhpcy5fd29ya2VyTmFtZT0iY3JlYXRlV2FsbE91dGxpbmVHZW9tZXRyeSI7bGV0IGk9MSt0Lmxlbmd0aCpzLnBhY2tlZExlbmd0aCsyO2cobykmJihpKz1vLmxlbmd0aCksZyhuKSYmKGkrPW4ubGVuZ3RoKSx0aGlzLnBhY2tlZExlbmd0aD1pK3EucGFja2VkTGVuZ3RoKzF9dmFyIHcyLFQyLEUyLHlkLHJ5LFIyPVgoKCk9PntNdCgpO0llKCk7dnQoKTttdCgpO3NlKCk7V2UoKTskdCgpO2VuKCk7dW4oKTtubigpO0dlKCk7Y24oKTtleSgpO3cyPW5ldyBzLFQyPW5ldyBzO01jLnBhY2s9ZnVuY3Rpb24oZSx0LG4pe249bj8/MDtsZXQgbyxhPWUuX3Bvc2l0aW9ucyxyPWEubGVuZ3RoO2Zvcih0W24rK109cixvPTA7bzxyOysrbyxuKz1zLnBhY2tlZExlbmd0aClzLnBhY2soYVtvXSx0LG4pO2xldCBpPWUuX21pbmltdW1IZWlnaHRzO2lmKHI9ZyhpKT9pLmxlbmd0aDowLHRbbisrXT1yLGcoaSkpZm9yKG89MDtvPHI7KytvKXRbbisrXT1pW29dO2xldCBmPWUuX21heGltdW1IZWlnaHRzO2lmKHI9ZyhmKT9mLmxlbmd0aDowLHRbbisrXT1yLGcoZikpZm9yKG89MDtvPHI7KytvKXRbbisrXT1mW29dO3JldHVybiBxLnBhY2soZS5fZWxsaXBzb2lkLHQsbiksbis9cS5wYWNrZWRMZW5ndGgsdFtuXT1lLl9ncmFudWxhcml0eSx0fTtFMj1xLmNsb25lKHEuVU5JVF9TUEhFUkUpLHlkPXtwb3NpdGlvbnM6dm9pZCAwLG1pbmltdW1IZWlnaHRzOnZvaWQgMCxtYXhpbXVtSGVpZ2h0czp2b2lkIDAsZWxsaXBzb2lkOkUyLGdyYW51bGFyaXR5OnZvaWQgMH07TWMudW5wYWNrPWZ1bmN0aW9uKGUsdCxuKXt0PXQ/PzA7bGV0IG8sYT1lW3QrK10scj1uZXcgQXJyYXkoYSk7Zm9yKG89MDtvPGE7KytvLHQrPXMucGFja2VkTGVuZ3RoKXJbb109cy51bnBhY2soZSx0KTthPWVbdCsrXTtsZXQgaTtpZihhPjApZm9yKGk9bmV3IEFycmF5KGEpLG89MDtvPGE7KytvKWlbb109ZVt0KytdO2E9ZVt0KytdO2xldCBmO2lmKGE+MClmb3IoZj1uZXcgQXJyYXkoYSksbz0wO288YTsrK28pZltvXT1lW3QrK107bGV0IGQ9cS51bnBhY2soZSx0LEUyKTt0Kz1xLnBhY2tlZExlbmd0aDtsZXQgYz1lW3RdO3JldHVybiBnKG4pPyhuLl9wb3NpdGlvbnM9cixuLl9taW5pbXVtSGVpZ2h0cz1pLG4uX21heGltdW1IZWlnaHRzPWYsbi5fZWxsaXBzb2lkPXEuY2xvbmUoZCxuLl9lbGxpcHNvaWQpLG4uX2dyYW51bGFyaXR5PWMsbik6KHlkLnBvc2l0aW9ucz1yLHlkLm1pbmltdW1IZWlnaHRzPWkseWQubWF4aW11bUhlaWdodHM9Zix5ZC5ncmFudWxhcml0eT1jLG5ldyBNYyh5ZCkpfTtNYy5mcm9tQ29uc3RhbnRIZWlnaHRzPWZ1bmN0aW9uKGUpe2U9ZT8/Q2UuRU1QVFlfT0JKRUNUO2xldCB0PWUucG9zaXRpb25zLG4sbyxhPWUubWluaW11bUhlaWdodCxyPWUubWF4aW11bUhlaWdodCxpPWcoYSksZj1nKHIpO2lmKGl8fGYpe2xldCBjPXQubGVuZ3RoO249aT9uZXcgQXJyYXkoYyk6dm9pZCAwLG89Zj9uZXcgQXJyYXkoYyk6dm9pZCAwO2ZvcihsZXQgdT0wO3U8YzsrK3UpaSYmKG5bdV09YSksZiYmKG9bdV09cil9bGV0IGQ9e3Bvc2l0aW9uczp0LG1heGltdW1IZWlnaHRzOm8sbWluaW11bUhlaWdodHM6bixlbGxpcHNvaWQ6ZS5lbGxpcHNvaWR9O3JldHVybiBuZXcgTWMoZCl9O01jLmNyZWF0ZUdlb21ldHJ5PWZ1bmN0aW9uKGUpe2xldCB0PWUuX3Bvc2l0aW9ucyxuPWUuX21pbmltdW1IZWlnaHRzLG89ZS5fbWF4aW11bUhlaWdodHMsYT1lLl9ncmFudWxhcml0eSxyPWUuX2VsbGlwc29pZCxpPW1tLmNvbXB1dGVQb3NpdGlvbnMocix0LG8sbixhLCExKTtpZighZyhpKSlyZXR1cm47bGV0IGY9aS5ib3R0b21Qb3NpdGlvbnMsZD1pLnRvcFBvc2l0aW9ucyxjPWQubGVuZ3RoLHU9YyoyLGw9bmV3IEZsb2F0NjRBcnJheSh1KSxoPTA7Yy89MztsZXQgbTtmb3IobT0wO208YzsrK20pe2xldCBfPW0qMyxFPXMuZnJvbUFycmF5KGQsXyx3Miksdz1zLmZyb21BcnJheShmLF8sVDIpO2xbaCsrXT13LngsbFtoKytdPXcueSxsW2grK109dy56LGxbaCsrXT1FLngsbFtoKytdPUUueSxsW2grK109RS56fWxldCBiPW5ldyBudCh7cG9zaXRpb246bmV3IGllKHtjb21wb25lbnREYXRhdHlwZTpuZS5ET1VCTEUsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczpsfSl9KSxwPXUvMzt1PTIqcC00K3A7bGV0IHk9a2UuY3JlYXRlVHlwZWRBcnJheShwLHUpLFQ9MDtmb3IobT0wO208cC0yO20rPTIpe2xldCBfPW0sRT1tKzIsdz1zLmZyb21BcnJheShsLF8qMyx3MiksUj1zLmZyb21BcnJheShsLEUqMyxUMik7aWYocy5lcXVhbHNFcHNpbG9uKHcsUixrLkVQU0lMT04xMCkpY29udGludWU7bGV0IFM9bSsxLEM9bSszO3lbVCsrXT1TLHlbVCsrXT1fLHlbVCsrXT1TLHlbVCsrXT1DLHlbVCsrXT1fLHlbVCsrXT1FfXJldHVybiB5W1QrK109cC0yLHlbVCsrXT1wLTEsbmV3IHZlKHthdHRyaWJ1dGVzOmIsaW5kaWNlczp5LHByaW1pdGl2ZVR5cGU6VWUuTElORVMsYm91bmRpbmdTcGhlcmU6Z2UuZnJvbVZlcnRpY2VzKGwpfSl9O3J5PU1jfSk7dmFyIGl5PXt9O3J0KGl5LHtkZWZhdWx0OigpPT5Can0pO2Z1bmN0aW9uIERqKGUsdCl7cmV0dXJuIGcodCkmJihlPXJ5LnVucGFjayhlLHQpKSxlLl9lbGxpcHNvaWQ9cS5jbG9uZShlLl9lbGxpcHNvaWQpLHJ5LmNyZWF0ZUdlb21ldHJ5KGUpfXZhciBCaixjeT1YKCgpPT57c2UoKTtXZSgpO1IyKCk7Qmo9RGp9KTt2YXIgZHk9ZW8oKEFkLGZ5KT0+e3ZhciBGZT1GZXx8e307RmUuc2NvcGU9e307RmUuYXJyYXlJdGVyYXRvckltcGw9ZnVuY3Rpb24oZSl7dmFyIHQ9MDtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdDxlLmxlbmd0aD97ZG9uZTohMSx2YWx1ZTplW3QrK119Ontkb25lOiEwfX19O0ZlLmFycmF5SXRlcmF0b3I9ZnVuY3Rpb24oZSl7cmV0dXJue25leHQ6RmUuYXJyYXlJdGVyYXRvckltcGwoZSl9fTtGZS5tYWtlSXRlcmF0b3I9ZnVuY3Rpb24oZSl7dmFyIHQ9dHlwZW9mIFN5bWJvbDwidSImJlN5bWJvbC5pdGVyYXRvciYmZVtTeW1ib2wuaXRlcmF0b3JdO3JldHVybiB0P3QuY2FsbChlKTpGZS5hcnJheUl0ZXJhdG9yKGUpfTtGZS5BU1NVTUVfRVM1PSExO0ZlLkFTU1VNRV9OT19OQVRJVkVfTUFQPSExO0ZlLkFTU1VNRV9OT19OQVRJVkVfU0VUPSExO0ZlLlNJTVBMRV9GUk9VTkRfUE9MWUZJTEw9ITE7RmUuSVNPTEFURV9QT0xZRklMTFM9ITE7RmUuRk9SQ0VfUE9MWUZJTExfUFJPTUlTRT0hMTtGZS5GT1JDRV9QT0xZRklMTF9QUk9NSVNFX1dIRU5fTk9fVU5IQU5ETEVEX1JFSkVDVElPTj0hMTtGZS5nZXRHbG9iYWw9ZnVuY3Rpb24oZSl7ZT1bdHlwZW9mIGdsb2JhbFRoaXM9PSJvYmplY3QiJiZnbG9iYWxUaGlzLGUsdHlwZW9mIHdpbmRvdz09Im9iamVjdCImJndpbmRvdyx0eXBlb2Ygc2VsZj09Im9iamVjdCImJnNlbGYsdHlwZW9mIGdsb2JhbD09Im9iamVjdCImJmdsb2JhbF07Zm9yKHZhciB0PTA7dDxlLmxlbmd0aDsrK3Qpe3ZhciBuPWVbdF07aWYobiYmbi5NYXRoPT1NYXRoKXJldHVybiBufXRocm93IEVycm9yKCJDYW5ub3QgZmluZCBnbG9iYWwgb2JqZWN0Iil9O0ZlLmdsb2JhbD1GZS5nZXRHbG9iYWwoQWQpO0ZlLmRlZmluZVByb3BlcnR5PUZlLkFTU1VNRV9FUzV8fHR5cGVvZiBPYmplY3QuZGVmaW5lUHJvcGVydGllcz09ImZ1bmN0aW9uIj9PYmplY3QuZGVmaW5lUHJvcGVydHk6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlPT1BcnJheS5wcm90b3R5cGV8fGU9PU9iamVjdC5wcm90b3R5cGV8fChlW3RdPW4udmFsdWUpLGV9O0ZlLklTX1NZTUJPTF9OQVRJVkU9dHlwZW9mIFN5bWJvbD09ImZ1bmN0aW9uIiYmdHlwZW9mIFN5bWJvbCgieCIpPT0ic3ltYm9sIjtGZS5UUlVTVF9FUzZfUE9MWUZJTExTPSFGZS5JU09MQVRFX1BPTFlGSUxMU3x8RmUuSVNfU1lNQk9MX05BVElWRTtGZS5wb2x5ZmlsbHM9e307RmUucHJvcGVydHlUb1BvbHlmaWxsU3ltYm9sPXt9O0ZlLlBPTFlGSUxMX1BSRUZJWD0iJGpzY3AkIjtGZS5wb2x5ZmlsbD1mdW5jdGlvbihlLHQsbixvKXt0JiYoRmUuSVNPTEFURV9QT0xZRklMTFM/RmUucG9seWZpbGxJc29sYXRlZChlLHQsbixvKTpGZS5wb2x5ZmlsbFVuaXNvbGF0ZWQoZSx0LG4sbykpfTtGZS5wb2x5ZmlsbFVuaXNvbGF0ZWQ9ZnVuY3Rpb24oZSx0LG4sbyl7Zm9yKG49RmUuZ2xvYmFsLGU9ZS5zcGxpdCgiLiIpLG89MDtvPGUubGVuZ3RoLTE7bysrKXt2YXIgYT1lW29dO2lmKCEoYSBpbiBuKSlyZXR1cm47bj1uW2FdfWU9ZVtlLmxlbmd0aC0xXSxvPW5bZV0sdD10KG8pLHQhPW8mJnQhPW51bGwmJkZlLmRlZmluZVByb3BlcnR5KG4sZSx7Y29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOnR9KX07RmUucG9seWZpbGxJc29sYXRlZD1mdW5jdGlvbihlLHQsbixvKXt2YXIgYT1lLnNwbGl0KCIuIik7ZT1hLmxlbmd0aD09PTEsbz1hWzBdLG89IWUmJm8gaW4gRmUucG9seWZpbGxzP0ZlLnBvbHlmaWxsczpGZS5nbG9iYWw7Zm9yKHZhciByPTA7cjxhLmxlbmd0aC0xO3IrKyl7dmFyIGk9YVtyXTtpZighKGkgaW4gbykpcmV0dXJuO289b1tpXX1hPWFbYS5sZW5ndGgtMV0sbj1GZS5JU19TWU1CT0xfTkFUSVZFJiZuPT09ImVzNiI/b1thXTpudWxsLHQ9dChuKSx0IT1udWxsJiYoZT9GZS5kZWZpbmVQcm9wZXJ0eShGZS5wb2x5ZmlsbHMsYSx7Y29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOnR9KTp0IT09biYmKEZlLnByb3BlcnR5VG9Qb2x5ZmlsbFN5bWJvbFthXT09PXZvaWQgMCYmKG49MWU5Kk1hdGgucmFuZG9tKCk+Pj4wLEZlLnByb3BlcnR5VG9Qb2x5ZmlsbFN5bWJvbFthXT1GZS5JU19TWU1CT0xfTkFUSVZFP0ZlLmdsb2JhbC5TeW1ib2woYSk6RmUuUE9MWUZJTExfUFJFRklYK24rIiQiK2EpLEZlLmRlZmluZVByb3BlcnR5KG8sRmUucHJvcGVydHlUb1BvbHlmaWxsU3ltYm9sW2FdLHtjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6dH0pKSl9O0ZlLnBvbHlmaWxsKCJQcm9taXNlIixmdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7dGhpcy5iYXRjaF89bnVsbH1mdW5jdGlvbiBuKGkpe3JldHVybiBpIGluc3RhbmNlb2YgYT9pOm5ldyBhKGZ1bmN0aW9uKGYsZCl7ZihpKX0pfWlmKGUmJighKEZlLkZPUkNFX1BPTFlGSUxMX1BST01JU0V8fEZlLkZPUkNFX1BPTFlGSUxMX1BST01JU0VfV0hFTl9OT19VTkhBTkRMRURfUkVKRUNUSU9OJiZ0eXBlb2YgRmUuZ2xvYmFsLlByb21pc2VSZWplY3Rpb25FdmVudD4idSIpfHwhRmUuZ2xvYmFsLlByb21pc2V8fEZlLmdsb2JhbC5Qcm9taXNlLnRvU3RyaW5nKCkuaW5kZXhPZigiW25hdGl2ZSBjb2RlXSIpPT09LTEpKXJldHVybiBlO3QucHJvdG90eXBlLmFzeW5jRXhlY3V0ZT1mdW5jdGlvbihpKXtpZih0aGlzLmJhdGNoXz09bnVsbCl7dGhpcy5iYXRjaF89W107dmFyIGY9dGhpczt0aGlzLmFzeW5jRXhlY3V0ZUZ1bmN0aW9uKGZ1bmN0aW9uKCl7Zi5leGVjdXRlQmF0Y2hfKCl9KX10aGlzLmJhdGNoXy5wdXNoKGkpfTt2YXIgbz1GZS5nbG9iYWwuc2V0VGltZW91dDt0LnByb3RvdHlwZS5hc3luY0V4ZWN1dGVGdW5jdGlvbj1mdW5jdGlvbihpKXtvKGksMCl9LHQucHJvdG90eXBlLmV4ZWN1dGVCYXRjaF89ZnVuY3Rpb24oKXtmb3IoO3RoaXMuYmF0Y2hfJiZ0aGlzLmJhdGNoXy5sZW5ndGg7KXt2YXIgaT10aGlzLmJhdGNoXzt0aGlzLmJhdGNoXz1bXTtmb3IodmFyIGY9MDtmPGkubGVuZ3RoOysrZil7dmFyIGQ9aVtmXTtpW2ZdPW51bGw7dHJ5e2QoKX1jYXRjaChjKXt0aGlzLmFzeW5jVGhyb3dfKGMpfX19dGhpcy5iYXRjaF89bnVsbH0sdC5wcm90b3R5cGUuYXN5bmNUaHJvd189ZnVuY3Rpb24oaSl7dGhpcy5hc3luY0V4ZWN1dGVGdW5jdGlvbihmdW5jdGlvbigpe3Rocm93IGl9KX07dmFyIGE9ZnVuY3Rpb24oaSl7dGhpcy5zdGF0ZV89MCx0aGlzLnJlc3VsdF89dm9pZCAwLHRoaXMub25TZXR0bGVkQ2FsbGJhY2tzXz1bXSx0aGlzLmlzUmVqZWN0aW9uSGFuZGxlZF89ITE7dmFyIGY9dGhpcy5jcmVhdGVSZXNvbHZlQW5kUmVqZWN0XygpO3RyeXtpKGYucmVzb2x2ZSxmLnJlamVjdCl9Y2F0Y2goZCl7Zi5yZWplY3QoZCl9fTthLnByb3RvdHlwZS5jcmVhdGVSZXNvbHZlQW5kUmVqZWN0Xz1mdW5jdGlvbigpe2Z1bmN0aW9uIGkoYyl7cmV0dXJuIGZ1bmN0aW9uKHUpe2R8fChkPSEwLGMuY2FsbChmLHUpKX19dmFyIGY9dGhpcyxkPSExO3JldHVybntyZXNvbHZlOmkodGhpcy5yZXNvbHZlVG9fKSxyZWplY3Q6aSh0aGlzLnJlamVjdF8pfX0sYS5wcm90b3R5cGUucmVzb2x2ZVRvXz1mdW5jdGlvbihpKXtpZihpPT09dGhpcyl0aGlzLnJlamVjdF8obmV3IFR5cGVFcnJvcigiQSBQcm9taXNlIGNhbm5vdCByZXNvbHZlIHRvIGl0c2VsZiIpKTtlbHNlIGlmKGkgaW5zdGFuY2VvZiBhKXRoaXMuc2V0dGxlU2FtZUFzUHJvbWlzZV8oaSk7ZWxzZXtlOnN3aXRjaCh0eXBlb2YgaSl7Y2FzZSJvYmplY3QiOnZhciBmPWkhPW51bGw7YnJlYWsgZTtjYXNlImZ1bmN0aW9uIjpmPSEwO2JyZWFrIGU7ZGVmYXVsdDpmPSExfWY/dGhpcy5yZXNvbHZlVG9Ob25Qcm9taXNlT2JqXyhpKTp0aGlzLmZ1bGZpbGxfKGkpfX0sYS5wcm90b3R5cGUucmVzb2x2ZVRvTm9uUHJvbWlzZU9ial89ZnVuY3Rpb24oaSl7dmFyIGY9dm9pZCAwO3RyeXtmPWkudGhlbn1jYXRjaChkKXt0aGlzLnJlamVjdF8oZCk7cmV0dXJufXR5cGVvZiBmPT0iZnVuY3Rpb24iP3RoaXMuc2V0dGxlU2FtZUFzVGhlbmFibGVfKGYsaSk6dGhpcy5mdWxmaWxsXyhpKX0sYS5wcm90b3R5cGUucmVqZWN0Xz1mdW5jdGlvbihpKXt0aGlzLnNldHRsZV8oMixpKX0sYS5wcm90b3R5cGUuZnVsZmlsbF89ZnVuY3Rpb24oaSl7dGhpcy5zZXR0bGVfKDEsaSl9LGEucHJvdG90eXBlLnNldHRsZV89ZnVuY3Rpb24oaSxmKXtpZih0aGlzLnN0YXRlXyE9MCl0aHJvdyBFcnJvcigiQ2Fubm90IHNldHRsZSgiK2krIiwgIitmKyIpOiBQcm9taXNlIGFscmVhZHkgc2V0dGxlZCBpbiBzdGF0ZSIrdGhpcy5zdGF0ZV8pO3RoaXMuc3RhdGVfPWksdGhpcy5yZXN1bHRfPWYsdGhpcy5zdGF0ZV89PT0yJiZ0aGlzLnNjaGVkdWxlVW5oYW5kbGVkUmVqZWN0aW9uQ2hlY2tfKCksdGhpcy5leGVjdXRlT25TZXR0bGVkQ2FsbGJhY2tzXygpfSxhLnByb3RvdHlwZS5zY2hlZHVsZVVuaGFuZGxlZFJlamVjdGlvbkNoZWNrXz1mdW5jdGlvbigpe3ZhciBpPXRoaXM7byhmdW5jdGlvbigpe2lmKGkubm90aWZ5VW5oYW5kbGVkUmVqZWN0aW9uXygpKXt2YXIgZj1GZS5nbG9iYWwuY29uc29sZTt0eXBlb2YgZjwidSImJmYuZXJyb3IoaS5yZXN1bHRfKX19LDEpfSxhLnByb3RvdHlwZS5ub3RpZnlVbmhhbmRsZWRSZWplY3Rpb25fPWZ1bmN0aW9uKCl7aWYodGhpcy5pc1JlamVjdGlvbkhhbmRsZWRfKXJldHVybiExO3ZhciBpPUZlLmdsb2JhbC5DdXN0b21FdmVudCxmPUZlLmdsb2JhbC5FdmVudCxkPUZlLmdsb2JhbC5kaXNwYXRjaEV2ZW50O3JldHVybiB0eXBlb2YgZD4idSI/ITA6KHR5cGVvZiBpPT0iZnVuY3Rpb24iP2k9bmV3IGkoInVuaGFuZGxlZHJlamVjdGlvbiIse2NhbmNlbGFibGU6ITB9KTp0eXBlb2YgZj09ImZ1bmN0aW9uIj9pPW5ldyBmKCJ1bmhhbmRsZWRyZWplY3Rpb24iLHtjYW5jZWxhYmxlOiEwfSk6KGk9RmUuZ2xvYmFsLmRvY3VtZW50LmNyZWF0ZUV2ZW50KCJDdXN0b21FdmVudCIpLGkuaW5pdEN1c3RvbUV2ZW50KCJ1bmhhbmRsZWRyZWplY3Rpb24iLCExLCEwLGkpKSxpLnByb21pc2U9dGhpcyxpLnJlYXNvbj10aGlzLnJlc3VsdF8sZChpKSl9LGEucHJvdG90eXBlLmV4ZWN1dGVPblNldHRsZWRDYWxsYmFja3NfPWZ1bmN0aW9uKCl7aWYodGhpcy5vblNldHRsZWRDYWxsYmFja3NfIT1udWxsKXtmb3IodmFyIGk9MDtpPHRoaXMub25TZXR0bGVkQ2FsbGJhY2tzXy5sZW5ndGg7KytpKXIuYXN5bmNFeGVjdXRlKHRoaXMub25TZXR0bGVkQ2FsbGJhY2tzX1tpXSk7dGhpcy5vblNldHRsZWRDYWxsYmFja3NfPW51bGx9fTt2YXIgcj1uZXcgdDtyZXR1cm4gYS5wcm90b3R5cGUuc2V0dGxlU2FtZUFzUHJvbWlzZV89ZnVuY3Rpb24oaSl7dmFyIGY9dGhpcy5jcmVhdGVSZXNvbHZlQW5kUmVqZWN0XygpO2kuY2FsbFdoZW5TZXR0bGVkXyhmLnJlc29sdmUsZi5yZWplY3QpfSxhLnByb3RvdHlwZS5zZXR0bGVTYW1lQXNUaGVuYWJsZV89ZnVuY3Rpb24oaSxmKXt2YXIgZD10aGlzLmNyZWF0ZVJlc29sdmVBbmRSZWplY3RfKCk7dHJ5e2kuY2FsbChmLGQucmVzb2x2ZSxkLnJlamVjdCl9Y2F0Y2goYyl7ZC5yZWplY3QoYyl9fSxhLnByb3RvdHlwZS50aGVuPWZ1bmN0aW9uKGksZil7ZnVuY3Rpb24gZChoLG0pe3JldHVybiB0eXBlb2YgaD09ImZ1bmN0aW9uIj9mdW5jdGlvbihiKXt0cnl7YyhoKGIpKX1jYXRjaChwKXt1KHApfX06bX12YXIgYyx1LGw9bmV3IGEoZnVuY3Rpb24oaCxtKXtjPWgsdT1tfSk7cmV0dXJuIHRoaXMuY2FsbFdoZW5TZXR0bGVkXyhkKGksYyksZChmLHUpKSxsfSxhLnByb3RvdHlwZS5jYXRjaD1mdW5jdGlvbihpKXtyZXR1cm4gdGhpcy50aGVuKHZvaWQgMCxpKX0sYS5wcm90b3R5cGUuY2FsbFdoZW5TZXR0bGVkXz1mdW5jdGlvbihpLGYpe2Z1bmN0aW9uIGQoKXtzd2l0Y2goYy5zdGF0ZV8pe2Nhc2UgMTppKGMucmVzdWx0Xyk7YnJlYWs7Y2FzZSAyOmYoYy5yZXN1bHRfKTticmVhaztkZWZhdWx0OnRocm93IEVycm9yKCJVbmV4cGVjdGVkIHN0YXRlOiAiK2Muc3RhdGVfKX19dmFyIGM9dGhpczt0aGlzLm9uU2V0dGxlZENhbGxiYWNrc189PW51bGw/ci5hc3luY0V4ZWN1dGUoZCk6dGhpcy5vblNldHRsZWRDYWxsYmFja3NfLnB1c2goZCksdGhpcy5pc1JlamVjdGlvbkhhbmRsZWRfPSEwfSxhLnJlc29sdmU9bixhLnJlamVjdD1mdW5jdGlvbihpKXtyZXR1cm4gbmV3IGEoZnVuY3Rpb24oZixkKXtkKGkpfSl9LGEucmFjZT1mdW5jdGlvbihpKXtyZXR1cm4gbmV3IGEoZnVuY3Rpb24oZixkKXtmb3IodmFyIGM9RmUubWFrZUl0ZXJhdG9yKGkpLHU9Yy5uZXh0KCk7IXUuZG9uZTt1PWMubmV4dCgpKW4odS52YWx1ZSkuY2FsbFdoZW5TZXR0bGVkXyhmLGQpfSl9LGEuYWxsPWZ1bmN0aW9uKGkpe3ZhciBmPUZlLm1ha2VJdGVyYXRvcihpKSxkPWYubmV4dCgpO3JldHVybiBkLmRvbmU/bihbXSk6bmV3IGEoZnVuY3Rpb24oYyx1KXtmdW5jdGlvbiBsKGIpe3JldHVybiBmdW5jdGlvbihwKXtoW2JdPXAsbS0tLG09PTAmJmMoaCl9fXZhciBoPVtdLG09MDtkbyBoLnB1c2godm9pZCAwKSxtKyssbihkLnZhbHVlKS5jYWxsV2hlblNldHRsZWRfKGwoaC5sZW5ndGgtMSksdSksZD1mLm5leHQoKTt3aGlsZSghZC5kb25lKX0pfSxhfSwiZXM2IiwiZXMzIik7RmUub3ducz1mdW5jdGlvbihlLHQpe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSx0KX07RmUuYXNzaWduPUZlLlRSVVNUX0VTNl9QT0xZRklMTFMmJnR5cGVvZiBPYmplY3QuYXNzaWduPT0iZnVuY3Rpb24iP09iamVjdC5hc3NpZ246ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49MTtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKXt2YXIgbz1hcmd1bWVudHNbbl07aWYobylmb3IodmFyIGEgaW4gbylGZS5vd25zKG8sYSkmJihlW2FdPW9bYV0pfXJldHVybiBlfTtGZS5wb2x5ZmlsbCgiT2JqZWN0LmFzc2lnbiIsZnVuY3Rpb24oZSl7cmV0dXJuIGV8fEZlLmFzc2lnbn0sImVzNiIsImVzMyIpO0ZlLmNoZWNrU3RyaW5nQXJncz1mdW5jdGlvbihlLHQsbil7aWYoZT09bnVsbCl0aHJvdyBuZXcgVHlwZUVycm9yKCJUaGUgJ3RoaXMnIHZhbHVlIGZvciBTdHJpbmcucHJvdG90eXBlLiIrbisiIG11c3Qgbm90IGJlIG51bGwgb3IgdW5kZWZpbmVkIik7aWYodCBpbnN0YW5jZW9mIFJlZ0V4cCl0aHJvdyBuZXcgVHlwZUVycm9yKCJGaXJzdCBhcmd1bWVudCB0byBTdHJpbmcucHJvdG90eXBlLiIrbisiIG11c3Qgbm90IGJlIGEgcmVndWxhciBleHByZXNzaW9uIik7cmV0dXJuIGUrIiJ9O0ZlLnBvbHlmaWxsKCJTdHJpbmcucHJvdG90eXBlLnN0YXJ0c1dpdGgiLGZ1bmN0aW9uKGUpe3JldHVybiBlfHxmdW5jdGlvbih0LG4pe3ZhciBvPUZlLmNoZWNrU3RyaW5nQXJncyh0aGlzLHQsInN0YXJ0c1dpdGgiKTt0Kz0iIjt2YXIgYT1vLmxlbmd0aCxyPXQubGVuZ3RoO249TWF0aC5tYXgoMCxNYXRoLm1pbihufDAsby5sZW5ndGgpKTtmb3IodmFyIGk9MDtpPHImJm48YTspaWYob1tuKytdIT10W2krK10pcmV0dXJuITE7cmV0dXJuIGk+PXJ9fSwiZXM2IiwiZXMzIik7RmUucG9seWZpbGwoIkFycmF5LnByb3RvdHlwZS5jb3B5V2l0aGluIixmdW5jdGlvbihlKXtmdW5jdGlvbiB0KG4pe3JldHVybiBuPU51bWJlcihuKSxuPT09MS8wfHxuPT09LTEvMD9uOm58MH1yZXR1cm4gZXx8ZnVuY3Rpb24obixvLGEpe3ZhciByPXRoaXMubGVuZ3RoO2lmKG49dChuKSxvPXQobyksYT1hPT09dm9pZCAwP3I6dChhKSxuPTA+bj9NYXRoLm1heChyK24sMCk6TWF0aC5taW4obixyKSxvPTA+bz9NYXRoLm1heChyK28sMCk6TWF0aC5taW4obyxyKSxhPTA+YT9NYXRoLm1heChyK2EsMCk6TWF0aC5taW4oYSxyKSxuPG8pZm9yKDtvPGE7KW8gaW4gdGhpcz90aGlzW24rK109dGhpc1tvKytdOihkZWxldGUgdGhpc1tuKytdLG8rKyk7ZWxzZSBmb3IoYT1NYXRoLm1pbihhLHIrby1uKSxuKz1hLW87YT5vOyktLWEgaW4gdGhpcz90aGlzWy0tbl09dGhpc1thXTpkZWxldGUgdGhpc1stLW5dO3JldHVybiB0aGlzfX0sImVzNiIsImVzMyIpO0ZlLnR5cGVkQXJyYXlDb3B5V2l0aGluPWZ1bmN0aW9uKGUpe3JldHVybiBlfHxBcnJheS5wcm90b3R5cGUuY29weVdpdGhpbn07RmUucG9seWZpbGwoIkludDhBcnJheS5wcm90b3R5cGUuY29weVdpdGhpbiIsRmUudHlwZWRBcnJheUNvcHlXaXRoaW4sImVzNiIsImVzNSIpO0ZlLnBvbHlmaWxsKCJVaW50OEFycmF5LnByb3RvdHlwZS5jb3B5V2l0aGluIixGZS50eXBlZEFycmF5Q29weVdpdGhpbiwiZXM2IiwiZXM1Iik7RmUucG9seWZpbGwoIlVpbnQ4Q2xhbXBlZEFycmF5LnByb3RvdHlwZS5jb3B5V2l0aGluIixGZS50eXBlZEFycmF5Q29weVdpdGhpbiwiZXM2IiwiZXM1Iik7RmUucG9seWZpbGwoIkludDE2QXJyYXkucHJvdG90eXBlLmNvcHlXaXRoaW4iLEZlLnR5cGVkQXJyYXlDb3B5V2l0aGluLCJlczYiLCJlczUiKTtGZS5wb2x5ZmlsbCgiVWludDE2QXJyYXkucHJvdG90eXBlLmNvcHlXaXRoaW4iLEZlLnR5cGVkQXJyYXlDb3B5V2l0aGluLCJlczYiLCJlczUiKTtGZS5wb2x5ZmlsbCgiSW50MzJBcnJheS5wcm90b3R5cGUuY29weVdpdGhpbiIsRmUudHlwZWRBcnJheUNvcHlXaXRoaW4sImVzNiIsImVzNSIpO0ZlLnBvbHlmaWxsKCJVaW50MzJBcnJheS5wcm90b3R5cGUuY29weVdpdGhpbiIsRmUudHlwZWRBcnJheUNvcHlXaXRoaW4sImVzNiIsImVzNSIpO0ZlLnBvbHlmaWxsKCJGbG9hdDMyQXJyYXkucHJvdG90eXBlLmNvcHlXaXRoaW4iLEZlLnR5cGVkQXJyYXlDb3B5V2l0aGluLCJlczYiLCJlczUiKTtGZS5wb2x5ZmlsbCgiRmxvYXQ2NEFycmF5LnByb3RvdHlwZS5jb3B5V2l0aGluIixGZS50eXBlZEFycmF5Q29weVdpdGhpbiwiZXM2IiwiZXM1Iik7dmFyIHN5PShmdW5jdGlvbigpe3ZhciBlPXR5cGVvZiBkb2N1bWVudDwidSImJmRvY3VtZW50LmN1cnJlbnRTY3JpcHQ/ZG9jdW1lbnQuY3VycmVudFNjcmlwdC5zcmM6dm9pZCAwO3JldHVybiB0eXBlb2YgX19maWxlbmFtZTwidSImJihlPWV8fF9fZmlsZW5hbWUpLGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIG4oail7cmV0dXJuIE8ubG9jYXRlRmlsZT9PLmxvY2F0ZUZpbGUoaix1ZSk6dWUran1mdW5jdGlvbiBvKGosSyx0ZSl7dmFyIE1lPUsrdGU7Zm9yKHRlPUs7alt0ZV0mJiEodGU+PU1lKTspKyt0ZTtpZigxNjx0ZS1LJiZqLmJ1ZmZlciYmWWUpcmV0dXJuIFllLmRlY29kZShqLnN1YmFycmF5KEssdGUpKTtmb3IoTWU9IiI7Szx0ZTspe3ZhciBjdD1qW0srK107aWYoY3QmMTI4KXt2YXIgcHQ9altLKytdJjYzO2lmKChjdCYyMjQpPT0xOTIpTWUrPVN0cmluZy5mcm9tQ2hhckNvZGUoKGN0JjMxKTw8NnxwdCk7ZWxzZXt2YXIgTnI9altLKytdJjYzO2N0PShjdCYyNDApPT0yMjQ/KGN0JjE1KTw8MTJ8cHQ8PDZ8TnI6KGN0JjcpPDwxOHxwdDw8MTJ8TnI8PDZ8altLKytdJjYzLDY1NTM2PmN0P01lKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGN0KTooY3QtPTY1NTM2LE1lKz1TdHJpbmcuZnJvbUNoYXJDb2RlKDU1Mjk2fGN0Pj4xMCw1NjMyMHxjdCYxMDIzKSl9fWVsc2UgTWUrPVN0cmluZy5mcm9tQ2hhckNvZGUoY3QpfXJldHVybiBNZX1mdW5jdGlvbiBhKGosSyl7cmV0dXJuIGo/byhJdCxqLEspOiIifWZ1bmN0aW9uIHIoKXt2YXIgaj1qZS5idWZmZXI7Ty5IRUFQOD1mdD1uZXcgSW50OEFycmF5KGopLE8uSEVBUDE2PW5ldyBJbnQxNkFycmF5KGopLE8uSEVBUDMyPUN0PW5ldyBJbnQzMkFycmF5KGopLE8uSEVBUFU4PUl0PW5ldyBVaW50OEFycmF5KGopLE8uSEVBUFUxNj1uZXcgVWludDE2QXJyYXkoaiksTy5IRUFQVTMyPWh0PW5ldyBVaW50MzJBcnJheShqKSxPLkhFQVBGMzI9bmV3IEZsb2F0MzJBcnJheShqKSxPLkhFQVBGNjQ9bmV3IEZsb2F0NjRBcnJheShqKX1mdW5jdGlvbiBpKGope3Rocm93IE8ub25BYm9ydCYmTy5vbkFib3J0KGopLGo9IkFib3J0ZWQoIitqKyIpIixYZShqKSxpdD0hMCxqPW5ldyBXZWJBc3NlbWJseS5SdW50aW1lRXJyb3IoaisiLiBCdWlsZCB3aXRoIC1zQVNTRVJUSU9OUyBmb3IgbW9yZSBpbmZvLiIpLG9lKGopLGp9ZnVuY3Rpb24gZihqKXt0cnl7aWYoaj09cXQmJkxlKXJldHVybiBuZXcgVWludDhBcnJheShMZSk7aWYoZXQpcmV0dXJuIGV0KGopO3Rocm93ImJvdGggYXN5bmMgYW5kIHN5bmMgZmV0Y2hpbmcgb2YgdGhlIHdhc20gZmFpbGVkIn1jYXRjaChLKXtpKEspfX1mdW5jdGlvbiBkKCl7aWYoIUxlJiYoYmV8fGxlKSl7aWYodHlwZW9mIGZldGNoPT0iZnVuY3Rpb24iJiYhcXQuc3RhcnRzV2l0aCgiZmlsZTovLyIpKXJldHVybiBmZXRjaChxdCx7Y3JlZGVudGlhbHM6InNhbWUtb3JpZ2luIn0pLnRoZW4oZnVuY3Rpb24oail7aWYoIWoub2spdGhyb3ciZmFpbGVkIHRvIGxvYWQgd2FzbSBiaW5hcnkgZmlsZSBhdCAnIitxdCsiJyI7cmV0dXJuIGouYXJyYXlCdWZmZXIoKX0pLmNhdGNoKGZ1bmN0aW9uKCl7cmV0dXJuIGYocXQpfSk7aWYoS2UpcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKGosSyl7S2UocXQsZnVuY3Rpb24odGUpe2oobmV3IFVpbnQ4QXJyYXkodGUpKX0sSyl9KX1yZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCkudGhlbihmdW5jdGlvbigpe3JldHVybiBmKHF0KX0pfWZ1bmN0aW9uIGMoail7Zm9yKDswPGoubGVuZ3RoOylqLnNoaWZ0KCkoTyl9ZnVuY3Rpb24gdShqKXt0aGlzLmV4Y1B0cj1qLHRoaXMucHRyPWotMjQsdGhpcy5zZXRfdHlwZT1mdW5jdGlvbihLKXtodFt0aGlzLnB0cis0Pj4yXT1LfSx0aGlzLmdldF90eXBlPWZ1bmN0aW9uKCl7cmV0dXJuIGh0W3RoaXMucHRyKzQ+PjJdfSx0aGlzLnNldF9kZXN0cnVjdG9yPWZ1bmN0aW9uKEspe2h0W3RoaXMucHRyKzg+PjJdPUt9LHRoaXMuZ2V0X2Rlc3RydWN0b3I9ZnVuY3Rpb24oKXtyZXR1cm4gaHRbdGhpcy5wdHIrOD4+Ml19LHRoaXMuc2V0X3JlZmNvdW50PWZ1bmN0aW9uKEspe0N0W3RoaXMucHRyPj4yXT1LfSx0aGlzLnNldF9jYXVnaHQ9ZnVuY3Rpb24oSyl7ZnRbdGhpcy5wdHIrMTI+PjBdPUs/MTowfSx0aGlzLmdldF9jYXVnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4gZnRbdGhpcy5wdHIrMTI+PjBdIT0wfSx0aGlzLnNldF9yZXRocm93bj1mdW5jdGlvbihLKXtmdFt0aGlzLnB0cisxMz4+MF09Sz8xOjB9LHRoaXMuZ2V0X3JldGhyb3duPWZ1bmN0aW9uKCl7cmV0dXJuIGZ0W3RoaXMucHRyKzEzPj4wXSE9MH0sdGhpcy5pbml0PWZ1bmN0aW9uKEssdGUpe3RoaXMuc2V0X2FkanVzdGVkX3B0cigwKSx0aGlzLnNldF90eXBlKEspLHRoaXMuc2V0X2Rlc3RydWN0b3IodGUpLHRoaXMuc2V0X3JlZmNvdW50KDApLHRoaXMuc2V0X2NhdWdodCghMSksdGhpcy5zZXRfcmV0aHJvd24oITEpfSx0aGlzLmFkZF9yZWY9ZnVuY3Rpb24oKXtDdFt0aGlzLnB0cj4+Ml0rPTF9LHRoaXMucmVsZWFzZV9yZWY9ZnVuY3Rpb24oKXt2YXIgSz1DdFt0aGlzLnB0cj4+Ml07cmV0dXJuIEN0W3RoaXMucHRyPj4yXT1LLTEsSz09PTF9LHRoaXMuc2V0X2FkanVzdGVkX3B0cj1mdW5jdGlvbihLKXtodFt0aGlzLnB0cisxNj4+Ml09S30sdGhpcy5nZXRfYWRqdXN0ZWRfcHRyPWZ1bmN0aW9uKCl7cmV0dXJuIGh0W3RoaXMucHRyKzE2Pj4yXX0sdGhpcy5nZXRfZXhjZXB0aW9uX3B0cj1mdW5jdGlvbigpe2lmKEt1KHRoaXMuZ2V0X3R5cGUoKSkpcmV0dXJuIGh0W3RoaXMuZXhjUHRyPj4yXTt2YXIgSz10aGlzLmdldF9hZGp1c3RlZF9wdHIoKTtyZXR1cm4gSyE9PTA/Szp0aGlzLmV4Y1B0cn19ZnVuY3Rpb24gbCgpe2Z1bmN0aW9uIGooKXtpZighZGYmJihkZj0hMCxPLmNhbGxlZFJ1bj0hMCwhaXQpKXtpZihxZT0hMCxjKFB0KSxaKE8pLE8ub25SdW50aW1lSW5pdGlhbGl6ZWQmJk8ub25SdW50aW1lSW5pdGlhbGl6ZWQoKSxPLnBvc3RSdW4pZm9yKHR5cGVvZiBPLnBvc3RSdW49PSJmdW5jdGlvbiImJihPLnBvc3RSdW49W08ucG9zdFJ1bl0pO08ucG9zdFJ1bi5sZW5ndGg7KUx0LnVuc2hpZnQoTy5wb3N0UnVuLnNoaWZ0KCkpO2MoTHQpfX1pZighKDA8VmUpKXtpZihPLnByZVJ1bilmb3IodHlwZW9mIE8ucHJlUnVuPT0iZnVuY3Rpb24iJiYoTy5wcmVSdW49W08ucHJlUnVuXSk7Ty5wcmVSdW4ubGVuZ3RoOylLdC51bnNoaWZ0KE8ucHJlUnVuLnNoaWZ0KCkpO2MoS3QpLDA8VmV8fChPLnNldFN0YXR1cz8oTy5zZXRTdGF0dXMoIlJ1bm5pbmcuLi4iKSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7c2V0VGltZW91dChmdW5jdGlvbigpe08uc2V0U3RhdHVzKCIiKX0sMSksaigpfSwxKSk6aigpKX19ZnVuY3Rpb24gaCgpe31mdW5jdGlvbiBtKGope3JldHVybihqfHxoKS5fX2NhY2hlX199ZnVuY3Rpb24gYihqLEspe3ZhciB0ZT1tKEspLE1lPXRlW2pdO3JldHVybiBNZXx8KE1lPU9iamVjdC5jcmVhdGUoKEt8fGgpLnByb3RvdHlwZSksTWUucHRyPWosdGVbal09TWUpfWZ1bmN0aW9uIHAoail7aWYodHlwZW9mIGo9PSJzdHJpbmciKXtmb3IodmFyIEs9MCx0ZT0wO3RlPGoubGVuZ3RoOysrdGUpe3ZhciBNZT1qLmNoYXJDb2RlQXQodGUpOzEyNz49TWU/SysrOjIwNDc+PU1lP0srPTI6NTUyOTY8PU1lJiY1NzM0Mz49TWU/KEsrPTQsKyt0ZSk6Sys9M31pZihLPUFycmF5KEsrMSksdGU9MCxNZT1LLmxlbmd0aCwwPE1lKXtNZT10ZStNZS0xO2Zvcih2YXIgY3Q9MDtjdDxqLmxlbmd0aDsrK2N0KXt2YXIgcHQ9ai5jaGFyQ29kZUF0KGN0KTtpZig1NTI5Njw9cHQmJjU3MzQzPj1wdCl7dmFyIE5yPWouY2hhckNvZGVBdCgrK2N0KTtwdD02NTUzNisoKHB0JjEwMjMpPDwxMCl8TnImMTAyM31pZigxMjc+PXB0KXtpZih0ZT49TWUpYnJlYWs7S1t0ZSsrXT1wdH1lbHNle2lmKDIwNDc+PXB0KXtpZih0ZSsxPj1NZSlicmVhaztLW3RlKytdPTE5MnxwdD4+Nn1lbHNle2lmKDY1NTM1Pj1wdCl7aWYodGUrMj49TWUpYnJlYWs7S1t0ZSsrXT0yMjR8cHQ+PjEyfWVsc2V7aWYodGUrMz49TWUpYnJlYWs7S1t0ZSsrXT0yNDB8cHQ+PjE4LEtbdGUrK109MTI4fHB0Pj4xMiY2M31LW3RlKytdPTEyOHxwdD4+NiY2M31LW3RlKytdPTEyOHxwdCY2M319S1t0ZV09MH1yZXR1cm4gaj1PdC5hbGxvYyhLLGZ0KSxPdC5jb3B5KEssZnQsaiksan1yZXR1cm4gan1mdW5jdGlvbiB5KGope2lmKHR5cGVvZiBqPT0ib2JqZWN0Iil7dmFyIEs9T3QuYWxsb2MoaixmdCk7cmV0dXJuIE90LmNvcHkoaixmdCxLKSxLfXJldHVybiBqfWZ1bmN0aW9uIFQoKXt0aHJvdyJjYW5ub3QgY29uc3RydWN0IGEgVm9pZFB0ciwgbm8gY29uc3RydWN0b3IgaW4gSURMIn1mdW5jdGlvbiBfKCl7dGhpcy5wdHI9YW4oKSxtKF8pW3RoaXMucHRyXT10aGlzfWZ1bmN0aW9uIEUoKXt0aGlzLnB0cj1WbigpLG0oRSlbdGhpcy5wdHJdPXRoaXN9ZnVuY3Rpb24gdygpe3RoaXMucHRyPXJvKCksbSh3KVt0aGlzLnB0cl09dGhpc31mdW5jdGlvbiBSKCl7dGhpcy5wdHI9eHQoKSxtKFIpW3RoaXMucHRyXT10aGlzfWZ1bmN0aW9uIFMoKXt0aGlzLnB0cj1HaSgpLG0oUylbdGhpcy5wdHJdPXRoaXN9ZnVuY3Rpb24gQygpe3RoaXMucHRyPWhvKCksbShDKVt0aGlzLnB0cl09dGhpc31mdW5jdGlvbiBJKCl7dGhpcy5wdHI9RmMoKSxtKEkpW3RoaXMucHRyXT10aGlzfWZ1bmN0aW9uIE4oKXt0aGlzLnB0cj1pYSgpLG0oTilbdGhpcy5wdHJdPXRoaXN9ZnVuY3Rpb24gUCgpe3RoaXMucHRyPUJjKCksbShQKVt0aGlzLnB0cl09dGhpc31mdW5jdGlvbiBGKCl7dGhyb3ciY2Fubm90IGNvbnN0cnVjdCBhIFN0YXR1cywgbm8gY29uc3RydWN0b3IgaW4gSURMIn1mdW5jdGlvbiBBKCl7dGhpcy5wdHI9a2QoKSxtKEEpW3RoaXMucHRyXT10aGlzfWZ1bmN0aW9uIHgoKXt0aGlzLnB0cj1VYygpLG0oeClbdGhpcy5wdHJdPXRoaXN9ZnVuY3Rpb24gTSgpe3RoaXMucHRyPSRzKCksbShNKVt0aGlzLnB0cl09dGhpc31mdW5jdGlvbiB2KCl7dGhpcy5wdHI9amMoKSxtKHYpW3RoaXMucHRyXT10aGlzfWZ1bmN0aW9uIFUoKXt0aGlzLnB0cj16ZCgpLG0oVSlbdGhpcy5wdHJdPXRoaXN9ZnVuY3Rpb24geigpe3RoaXMucHRyPUhkKCksbSh6KVt0aGlzLnB0cl09dGhpc31mdW5jdGlvbiBEKCl7dGhpcy5wdHI9c2koKSxtKEQpW3RoaXMucHRyXT10aGlzfWZ1bmN0aW9uIEcoKXt0aGlzLnB0cj1KZCgpLG0oRylbdGhpcy5wdHJdPXRoaXN9ZnVuY3Rpb24gSCgpe3RoaXMucHRyPWFmKCksbShIKVt0aGlzLnB0cl09dGhpc310PXQ9PT12b2lkIDA/e306dDt2YXIgTz10eXBlb2YgdDwidSI/dDp7fSxaLG9lO08ucmVhZHk9bmV3IFByb21pc2UoZnVuY3Rpb24oaixLKXtaPWosb2U9S30pO3ZhciBjZT0hMSxmZT0hMTtPLm9uUnVudGltZUluaXRpYWxpemVkPWZ1bmN0aW9uKCl7Y2U9ITAsZmUmJnR5cGVvZiBPLm9uTW9kdWxlTG9hZGVkPT0iZnVuY3Rpb24iJiZPLm9uTW9kdWxlTG9hZGVkKE8pfSxPLm9uTW9kdWxlUGFyc2VkPWZ1bmN0aW9uKCl7ZmU9ITAsY2UmJnR5cGVvZiBPLm9uTW9kdWxlTG9hZGVkPT0iZnVuY3Rpb24iJiZPLm9uTW9kdWxlTG9hZGVkKE8pfSxPLmlzVmVyc2lvblN1cHBvcnRlZD1mdW5jdGlvbihqKXtyZXR1cm4gdHlwZW9mIGohPSJzdHJpbmciPyExOihqPWouc3BsaXQoIi4iKSwyPmoubGVuZ3RofHwzPGoubGVuZ3RoPyExOmpbMF09PTEmJjA8PWpbMV0mJjU+PWpbMV0/ITA6IShqWzBdIT0wfHwxMDxqWzFdKSl9O3ZhciBlZT1PYmplY3QuYXNzaWduKHt9LE8pLGJlPXR5cGVvZiB3aW5kb3c9PSJvYmplY3QiLGxlPXR5cGVvZiBpbXBvcnRTY3JpcHRzPT0iZnVuY3Rpb24iLHBlPXR5cGVvZiBwcm9jZXNzPT0ib2JqZWN0IiYmdHlwZW9mIHByb2Nlc3MudmVyc2lvbnM9PSJvYmplY3QiJiZ0eXBlb2YgcHJvY2Vzcy52ZXJzaW9ucy5ub2RlPT0ic3RyaW5nIix1ZT0iIjtpZihwZSl7dmFyIGFlPWJhKCJmcyIpLEFlPWJhKCJwYXRoIik7dWU9bGU/QWUuZGlybmFtZSh1ZSkrIi8iOl9fZGlybmFtZSsiLyI7dmFyIE5lPWZ1bmN0aW9uKGosSyl7cmV0dXJuIGo9ai5zdGFydHNXaXRoKCJmaWxlOi8vIik/bmV3IFVSTChqKTpBZS5ub3JtYWxpemUoaiksYWUucmVhZEZpbGVTeW5jKGosSz92b2lkIDA6InV0ZjgiKX0sZXQ9ZnVuY3Rpb24oail7cmV0dXJuIGo9TmUoaiwhMCksai5idWZmZXJ8fChqPW5ldyBVaW50OEFycmF5KGopKSxqfSxLZT1mdW5jdGlvbihqLEssdGUpe2o9ai5zdGFydHNXaXRoKCJmaWxlOi8vIik/bmV3IFVSTChqKTpBZS5ub3JtYWxpemUoaiksYWUucmVhZEZpbGUoaixmdW5jdGlvbihNZSxjdCl7TWU/dGUoTWUpOksoY3QuYnVmZmVyKX0pfTsxPHByb2Nlc3MuYXJndi5sZW5ndGgmJnByb2Nlc3MuYXJndlsxXS5yZXBsYWNlKC9cXC9nLCIvIikscHJvY2Vzcy5hcmd2LnNsaWNlKDIpLE8uaW5zcGVjdD1mdW5jdGlvbigpe3JldHVybiJbRW1zY3JpcHRlbiBNb2R1bGUgb2JqZWN0XSJ9fWVsc2UoYmV8fGxlKSYmKGxlP3VlPXNlbGYubG9jYXRpb24uaHJlZjp0eXBlb2YgZG9jdW1lbnQ8InUiJiZkb2N1bWVudC5jdXJyZW50U2NyaXB0JiYodWU9ZG9jdW1lbnQuY3VycmVudFNjcmlwdC5zcmMpLGUmJih1ZT1lKSx1ZT11ZS5pbmRleE9mKCJibG9iOiIpIT09MD91ZS5zdWJzdHIoMCx1ZS5yZXBsYWNlKC9bPyNdLiovLCIiKS5sYXN0SW5kZXhPZigiLyIpKzEpOiIiLE5lPWZ1bmN0aW9uKGope3ZhciBLPW5ldyBYTUxIdHRwUmVxdWVzdDtyZXR1cm4gSy5vcGVuKCJHRVQiLGosITEpLEsuc2VuZChudWxsKSxLLnJlc3BvbnNlVGV4dH0sbGUmJihldD1mdW5jdGlvbihqKXt2YXIgSz1uZXcgWE1MSHR0cFJlcXVlc3Q7cmV0dXJuIEsub3BlbigiR0VUIixqLCExKSxLLnJlc3BvbnNlVHlwZT0iYXJyYXlidWZmZXIiLEsuc2VuZChudWxsKSxuZXcgVWludDhBcnJheShLLnJlc3BvbnNlKX0pLEtlPWZ1bmN0aW9uKGosSyx0ZSl7dmFyIE1lPW5ldyBYTUxIdHRwUmVxdWVzdDtNZS5vcGVuKCJHRVQiLGosITApLE1lLnJlc3BvbnNlVHlwZT0iYXJyYXlidWZmZXIiLE1lLm9ubG9hZD1mdW5jdGlvbigpe01lLnN0YXR1cz09MjAwfHxNZS5zdGF0dXM9PTAmJk1lLnJlc3BvbnNlP0soTWUucmVzcG9uc2UpOnRlKCl9LE1lLm9uZXJyb3I9dGUsTWUuc2VuZChudWxsKX0pO3ZhciB0dD1PLnByaW50fHxjb25zb2xlLmxvZy5iaW5kKGNvbnNvbGUpLFhlPU8ucHJpbnRFcnJ8fGNvbnNvbGUud2Fybi5iaW5kKGNvbnNvbGUpO09iamVjdC5hc3NpZ24oTyxlZSksZWU9bnVsbDt2YXIgTGU7Ty53YXNtQmluYXJ5JiYoTGU9Ty53YXNtQmluYXJ5KSx0eXBlb2YgV2ViQXNzZW1ibHkhPSJvYmplY3QiJiZpKCJubyBuYXRpdmUgd2FzbSBzdXBwb3J0IGRldGVjdGVkIik7dmFyIGplLGl0PSExLFllPXR5cGVvZiBUZXh0RGVjb2RlcjwidSI/bmV3IFRleHREZWNvZGVyKCJ1dGY4Iik6dm9pZCAwLGZ0LEl0LEN0LGh0LEt0PVtdLFB0PVtdLEx0PVtdLHFlPSExLFZlPTAsUnQ9bnVsbCxGdD1udWxsLHF0PSJkcmFjb19kZWNvZGVyLndhc20iO3F0LnN0YXJ0c1dpdGgoImRhdGE6YXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtO2Jhc2U2NCwiKXx8KHF0PW4ocXQpKTt2YXIgWnQ9MCxvbj1bbnVsbCxbXSxbXV0sd249e2I6ZnVuY3Rpb24oaixLLHRlKXt0aHJvdyBuZXcgdShqKS5pbml0KEssdGUpLFp0Kyssan0sYTpmdW5jdGlvbigpe2koIiIpfSxnOmZ1bmN0aW9uKGosSyx0ZSl7SXQuY29weVdpdGhpbihqLEssSyt0ZSl9LGU6ZnVuY3Rpb24oail7dmFyIEs9SXQubGVuZ3RoO2lmKGo+Pj49MCwyMTQ3NDgzNjQ4PGopcmV0dXJuITE7Zm9yKHZhciB0ZT0xOzQ+PXRlO3RlKj0yKXt2YXIgTWU9SyooMSsuMi90ZSk7TWU9TWF0aC5taW4oTWUsaisxMDA2NjMyOTYpO3ZhciBjdD1NYXRoO01lPU1hdGgubWF4KGosTWUpLGN0PWN0Lm1pbi5jYWxsKGN0LDIxNDc0ODM2NDgsTWUrKDY1NTM2LU1lJTY1NTM2KSU2NTUzNik7ZTp7TWU9amUuYnVmZmVyO3RyeXtqZS5ncm93KGN0LU1lLmJ5dGVMZW5ndGgrNjU1MzU+Pj4xNikscigpO3ZhciBwdD0xO2JyZWFrIGV9Y2F0Y2h7fXB0PXZvaWQgMH1pZihwdClyZXR1cm4hMH1yZXR1cm4hMX0sZjpmdW5jdGlvbihqKXtyZXR1cm4gNTJ9LGQ6ZnVuY3Rpb24oaixLLHRlLE1lLGN0KXtyZXR1cm4gNzB9LGM6ZnVuY3Rpb24oaixLLHRlLE1lKXtmb3IodmFyIGN0PTAscHQ9MDtwdDx0ZTtwdCsrKXt2YXIgTnI9aHRbSz4+Ml0sS2M9aHRbSys0Pj4yXTtLKz04O2Zvcih2YXIgQj0wO0I8S2M7QisrKXt2YXIgTD1JdFtOcitCXSxXPW9uW2pdO0w9PT0wfHxMPT09MTA/KChqPT09MT90dDpYZSkobyhXLDApKSxXLmxlbmd0aD0wKTpXLnB1c2goTCl9Y3QrPUtjfXJldHVybiBodFtNZT4+Ml09Y3QsMH19OyhmdW5jdGlvbigpe2Z1bmN0aW9uIGooY3QscHQpe08uYXNtPWN0LmV4cG9ydHMsamU9Ty5hc20uaCxyKCksUHQudW5zaGlmdChPLmFzbS5pKSxWZS0tLE8ubW9uaXRvclJ1bkRlcGVuZGVuY2llcyYmTy5tb25pdG9yUnVuRGVwZW5kZW5jaWVzKFZlKSxWZT09MCYmKFJ0IT09bnVsbCYmKGNsZWFySW50ZXJ2YWwoUnQpLFJ0PW51bGwpLEZ0JiYoY3Q9RnQsRnQ9bnVsbCxjdCgpKSl9ZnVuY3Rpb24gSyhjdCl7aihjdC5pbnN0YW5jZSl9ZnVuY3Rpb24gdGUoY3Qpe3JldHVybiBkKCkudGhlbihmdW5jdGlvbihwdCl7cmV0dXJuIFdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlKHB0LE1lKX0pLnRoZW4oZnVuY3Rpb24ocHQpe3JldHVybiBwdH0pLnRoZW4oY3QsZnVuY3Rpb24ocHQpe1hlKCJmYWlsZWQgdG8gYXN5bmNocm9ub3VzbHkgcHJlcGFyZSB3YXNtOiAiK3B0KSxpKHB0KX0pfXZhciBNZT17YTp3bn07aWYoVmUrKyxPLm1vbml0b3JSdW5EZXBlbmRlbmNpZXMmJk8ubW9uaXRvclJ1bkRlcGVuZGVuY2llcyhWZSksTy5pbnN0YW50aWF0ZVdhc20pdHJ5e3JldHVybiBPLmluc3RhbnRpYXRlV2FzbShNZSxqKX1jYXRjaChjdCl7WGUoIk1vZHVsZS5pbnN0YW50aWF0ZVdhc20gY2FsbGJhY2sgZmFpbGVkIHdpdGggZXJyb3I6ICIrY3QpLG9lKGN0KX1yZXR1cm4oZnVuY3Rpb24oKXtyZXR1cm4gTGV8fHR5cGVvZiBXZWJBc3NlbWJseS5pbnN0YW50aWF0ZVN0cmVhbWluZyE9ImZ1bmN0aW9uInx8cXQuc3RhcnRzV2l0aCgiZGF0YTphcHBsaWNhdGlvbi9vY3RldC1zdHJlYW07YmFzZTY0LCIpfHxxdC5zdGFydHNXaXRoKCJmaWxlOi8vIil8fHBlfHx0eXBlb2YgZmV0Y2ghPSJmdW5jdGlvbiI/dGUoSyk6ZmV0Y2gocXQse2NyZWRlbnRpYWxzOiJzYW1lLW9yaWdpbiJ9KS50aGVuKGZ1bmN0aW9uKGN0KXtyZXR1cm4gV2ViQXNzZW1ibHkuaW5zdGFudGlhdGVTdHJlYW1pbmcoY3QsTWUpLnRoZW4oSyxmdW5jdGlvbihwdCl7cmV0dXJuIFhlKCJ3YXNtIHN0cmVhbWluZyBjb21waWxlIGZhaWxlZDogIitwdCksWGUoImZhbGxpbmcgYmFjayB0byBBcnJheUJ1ZmZlciBpbnN0YW50aWF0aW9uIiksdGUoSyl9KX0pfSkoKS5jYXRjaChvZSkse319KSgpO3ZhciBEdD1PLl9lbXNjcmlwdGVuX2JpbmRfVm9pZFB0cl9fX2Rlc3Ryb3lfX18wPWZ1bmN0aW9uKCl7cmV0dXJuKER0PU8uX2Vtc2NyaXB0ZW5fYmluZF9Wb2lkUHRyX19fZGVzdHJveV9fXzA9Ty5hc20uaykuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxhbj1PLl9lbXNjcmlwdGVuX2JpbmRfRGVjb2RlckJ1ZmZlcl9EZWNvZGVyQnVmZmVyXzA9ZnVuY3Rpb24oKXtyZXR1cm4oYW49Ty5fZW1zY3JpcHRlbl9iaW5kX0RlY29kZXJCdWZmZXJfRGVjb2RlckJ1ZmZlcl8wPU8uYXNtLmwpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0senQ9Ty5fZW1zY3JpcHRlbl9iaW5kX0RlY29kZXJCdWZmZXJfSW5pdF8yPWZ1bmN0aW9uKCl7cmV0dXJuKHp0PU8uX2Vtc2NyaXB0ZW5fYmluZF9EZWNvZGVyQnVmZmVyX0luaXRfMj1PLmFzbS5tKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LGZuPU8uX2Vtc2NyaXB0ZW5fYmluZF9EZWNvZGVyQnVmZmVyX19fZGVzdHJveV9fXzA9ZnVuY3Rpb24oKXtyZXR1cm4oZm49Ty5fZW1zY3JpcHRlbl9iaW5kX0RlY29kZXJCdWZmZXJfX19kZXN0cm95X19fMD1PLmFzbS5uKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LFZuPU8uX2Vtc2NyaXB0ZW5fYmluZF9BdHRyaWJ1dGVUcmFuc2Zvcm1EYXRhX0F0dHJpYnV0ZVRyYW5zZm9ybURhdGFfMD1mdW5jdGlvbigpe3JldHVybihWbj1PLl9lbXNjcmlwdGVuX2JpbmRfQXR0cmlidXRlVHJhbnNmb3JtRGF0YV9BdHRyaWJ1dGVUcmFuc2Zvcm1EYXRhXzA9Ty5hc20ubykuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxIbj1PLl9lbXNjcmlwdGVuX2JpbmRfQXR0cmlidXRlVHJhbnNmb3JtRGF0YV90cmFuc2Zvcm1fdHlwZV8wPWZ1bmN0aW9uKCl7cmV0dXJuKEhuPU8uX2Vtc2NyaXB0ZW5fYmluZF9BdHRyaWJ1dGVUcmFuc2Zvcm1EYXRhX3RyYW5zZm9ybV90eXBlXzA9Ty5hc20ucCkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxQbj1PLl9lbXNjcmlwdGVuX2JpbmRfQXR0cmlidXRlVHJhbnNmb3JtRGF0YV9fX2Rlc3Ryb3lfX18wPWZ1bmN0aW9uKCl7cmV0dXJuKFBuPU8uX2Vtc2NyaXB0ZW5fYmluZF9BdHRyaWJ1dGVUcmFuc2Zvcm1EYXRhX19fZGVzdHJveV9fXzA9Ty5hc20ucSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxybz1PLl9lbXNjcmlwdGVuX2JpbmRfR2VvbWV0cnlBdHRyaWJ1dGVfR2VvbWV0cnlBdHRyaWJ1dGVfMD1mdW5jdGlvbigpe3JldHVybihybz1PLl9lbXNjcmlwdGVuX2JpbmRfR2VvbWV0cnlBdHRyaWJ1dGVfR2VvbWV0cnlBdHRyaWJ1dGVfMD1PLmFzbS5yKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LGt0PU8uX2Vtc2NyaXB0ZW5fYmluZF9HZW9tZXRyeUF0dHJpYnV0ZV9fX2Rlc3Ryb3lfX18wPWZ1bmN0aW9uKCl7cmV0dXJuKGt0PU8uX2Vtc2NyaXB0ZW5fYmluZF9HZW9tZXRyeUF0dHJpYnV0ZV9fX2Rlc3Ryb3lfX18wPU8uYXNtLnMpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0seHQ9Ty5fZW1zY3JpcHRlbl9iaW5kX1BvaW50QXR0cmlidXRlX1BvaW50QXR0cmlidXRlXzA9ZnVuY3Rpb24oKXtyZXR1cm4oeHQ9Ty5fZW1zY3JpcHRlbl9iaW5kX1BvaW50QXR0cmlidXRlX1BvaW50QXR0cmlidXRlXzA9Ty5hc20udCkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxPbj1PLl9lbXNjcmlwdGVuX2JpbmRfUG9pbnRBdHRyaWJ1dGVfc2l6ZV8wPWZ1bmN0aW9uKCl7cmV0dXJuKE9uPU8uX2Vtc2NyaXB0ZW5fYmluZF9Qb2ludEF0dHJpYnV0ZV9zaXplXzA9Ty5hc20udSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxrbj1PLl9lbXNjcmlwdGVuX2JpbmRfUG9pbnRBdHRyaWJ1dGVfR2V0QXR0cmlidXRlVHJhbnNmb3JtRGF0YV8wPWZ1bmN0aW9uKCl7cmV0dXJuKGtuPU8uX2Vtc2NyaXB0ZW5fYmluZF9Qb2ludEF0dHJpYnV0ZV9HZXRBdHRyaWJ1dGVUcmFuc2Zvcm1EYXRhXzA9Ty5hc20udikuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxBbz1PLl9lbXNjcmlwdGVuX2JpbmRfUG9pbnRBdHRyaWJ1dGVfYXR0cmlidXRlX3R5cGVfMD1mdW5jdGlvbigpe3JldHVybihBbz1PLl9lbXNjcmlwdGVuX2JpbmRfUG9pbnRBdHRyaWJ1dGVfYXR0cmlidXRlX3R5cGVfMD1PLmFzbS53KS5hcHBseShudWxsLGFyZ3VtZW50cyl9LEd0PU8uX2Vtc2NyaXB0ZW5fYmluZF9Qb2ludEF0dHJpYnV0ZV9kYXRhX3R5cGVfMD1mdW5jdGlvbigpe3JldHVybihHdD1PLl9lbXNjcmlwdGVuX2JpbmRfUG9pbnRBdHRyaWJ1dGVfZGF0YV90eXBlXzA9Ty5hc20ueCkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxkbj1PLl9lbXNjcmlwdGVuX2JpbmRfUG9pbnRBdHRyaWJ1dGVfbnVtX2NvbXBvbmVudHNfMD1mdW5jdGlvbigpe3JldHVybihkbj1PLl9lbXNjcmlwdGVuX2JpbmRfUG9pbnRBdHRyaWJ1dGVfbnVtX2NvbXBvbmVudHNfMD1PLmFzbS55KS5hcHBseShudWxsLGFyZ3VtZW50cyl9LENvPU8uX2Vtc2NyaXB0ZW5fYmluZF9Qb2ludEF0dHJpYnV0ZV9ub3JtYWxpemVkXzA9ZnVuY3Rpb24oKXtyZXR1cm4oQ289Ty5fZW1zY3JpcHRlbl9iaW5kX1BvaW50QXR0cmlidXRlX25vcm1hbGl6ZWRfMD1PLmFzbS56KS5hcHBseShudWxsLGFyZ3VtZW50cyl9LHZuPU8uX2Vtc2NyaXB0ZW5fYmluZF9Qb2ludEF0dHJpYnV0ZV9ieXRlX3N0cmlkZV8wPWZ1bmN0aW9uKCl7cmV0dXJuKHZuPU8uX2Vtc2NyaXB0ZW5fYmluZF9Qb2ludEF0dHJpYnV0ZV9ieXRlX3N0cmlkZV8wPU8uYXNtLkEpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sV289Ty5fZW1zY3JpcHRlbl9iaW5kX1BvaW50QXR0cmlidXRlX2J5dGVfb2Zmc2V0XzA9ZnVuY3Rpb24oKXtyZXR1cm4oV289Ty5fZW1zY3JpcHRlbl9iaW5kX1BvaW50QXR0cmlidXRlX2J5dGVfb2Zmc2V0XzA9Ty5hc20uQikuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxEYT1PLl9lbXNjcmlwdGVuX2JpbmRfUG9pbnRBdHRyaWJ1dGVfdW5pcXVlX2lkXzA9ZnVuY3Rpb24oKXtyZXR1cm4oRGE9Ty5fZW1zY3JpcHRlbl9iaW5kX1BvaW50QXR0cmlidXRlX3VuaXF1ZV9pZF8wPU8uYXNtLkMpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0semk9Ty5fZW1zY3JpcHRlbl9iaW5kX1BvaW50QXR0cmlidXRlX19fZGVzdHJveV9fXzA9ZnVuY3Rpb24oKXtyZXR1cm4oemk9Ty5fZW1zY3JpcHRlbl9iaW5kX1BvaW50QXR0cmlidXRlX19fZGVzdHJveV9fXzA9Ty5hc20uRCkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxHaT1PLl9lbXNjcmlwdGVuX2JpbmRfQXR0cmlidXRlUXVhbnRpemF0aW9uVHJhbnNmb3JtX0F0dHJpYnV0ZVF1YW50aXphdGlvblRyYW5zZm9ybV8wPWZ1bmN0aW9uKCl7cmV0dXJuKEdpPU8uX2Vtc2NyaXB0ZW5fYmluZF9BdHRyaWJ1dGVRdWFudGl6YXRpb25UcmFuc2Zvcm1fQXR0cmlidXRlUXVhbnRpemF0aW9uVHJhbnNmb3JtXzA9Ty5hc20uRSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxvaT1PLl9lbXNjcmlwdGVuX2JpbmRfQXR0cmlidXRlUXVhbnRpemF0aW9uVHJhbnNmb3JtX0luaXRGcm9tQXR0cmlidXRlXzE9ZnVuY3Rpb24oKXtyZXR1cm4ob2k9Ty5fZW1zY3JpcHRlbl9iaW5kX0F0dHJpYnV0ZVF1YW50aXphdGlvblRyYW5zZm9ybV9Jbml0RnJvbUF0dHJpYnV0ZV8xPU8uYXNtLkYpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sQmE9Ty5fZW1zY3JpcHRlbl9iaW5kX0F0dHJpYnV0ZVF1YW50aXphdGlvblRyYW5zZm9ybV9xdWFudGl6YXRpb25fYml0c18wPWZ1bmN0aW9uKCl7cmV0dXJuKEJhPU8uX2Vtc2NyaXB0ZW5fYmluZF9BdHRyaWJ1dGVRdWFudGl6YXRpb25UcmFuc2Zvcm1fcXVhbnRpemF0aW9uX2JpdHNfMD1PLmFzbS5HKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LGFpPU8uX2Vtc2NyaXB0ZW5fYmluZF9BdHRyaWJ1dGVRdWFudGl6YXRpb25UcmFuc2Zvcm1fbWluX3ZhbHVlXzE9ZnVuY3Rpb24oKXtyZXR1cm4oYWk9Ty5fZW1zY3JpcHRlbl9iaW5kX0F0dHJpYnV0ZVF1YW50aXphdGlvblRyYW5zZm9ybV9taW5fdmFsdWVfMT1PLmFzbS5IKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LFZpPU8uX2Vtc2NyaXB0ZW5fYmluZF9BdHRyaWJ1dGVRdWFudGl6YXRpb25UcmFuc2Zvcm1fcmFuZ2VfMD1mdW5jdGlvbigpe3JldHVybihWaT1PLl9lbXNjcmlwdGVuX2JpbmRfQXR0cmlidXRlUXVhbnRpemF0aW9uVHJhbnNmb3JtX3JhbmdlXzA9Ty5hc20uSSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxTcj1PLl9lbXNjcmlwdGVuX2JpbmRfQXR0cmlidXRlUXVhbnRpemF0aW9uVHJhbnNmb3JtX19fZGVzdHJveV9fXzA9ZnVuY3Rpb24oKXtyZXR1cm4oU3I9Ty5fZW1zY3JpcHRlbl9iaW5kX0F0dHJpYnV0ZVF1YW50aXphdGlvblRyYW5zZm9ybV9fX2Rlc3Ryb3lfX18wPU8uYXNtLkopLmFwcGx5KG51bGwsYXJndW1lbnRzKX0saG89Ty5fZW1zY3JpcHRlbl9iaW5kX0F0dHJpYnV0ZU9jdGFoZWRyb25UcmFuc2Zvcm1fQXR0cmlidXRlT2N0YWhlZHJvblRyYW5zZm9ybV8wPWZ1bmN0aW9uKCl7cmV0dXJuKGhvPU8uX2Vtc2NyaXB0ZW5fYmluZF9BdHRyaWJ1dGVPY3RhaGVkcm9uVHJhbnNmb3JtX0F0dHJpYnV0ZU9jdGFoZWRyb25UcmFuc2Zvcm1fMD1PLmFzbS5LKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LHdvPU8uX2Vtc2NyaXB0ZW5fYmluZF9BdHRyaWJ1dGVPY3RhaGVkcm9uVHJhbnNmb3JtX0luaXRGcm9tQXR0cmlidXRlXzE9ZnVuY3Rpb24oKXtyZXR1cm4od289Ty5fZW1zY3JpcHRlbl9iaW5kX0F0dHJpYnV0ZU9jdGFoZWRyb25UcmFuc2Zvcm1fSW5pdEZyb21BdHRyaWJ1dGVfMT1PLmFzbS5MKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LFVhPU8uX2Vtc2NyaXB0ZW5fYmluZF9BdHRyaWJ1dGVPY3RhaGVkcm9uVHJhbnNmb3JtX3F1YW50aXphdGlvbl9iaXRzXzA9ZnVuY3Rpb24oKXtyZXR1cm4oVWE9Ty5fZW1zY3JpcHRlbl9iaW5kX0F0dHJpYnV0ZU9jdGFoZWRyb25UcmFuc2Zvcm1fcXVhbnRpemF0aW9uX2JpdHNfMD1PLmFzbS5NKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LHZjPU8uX2Vtc2NyaXB0ZW5fYmluZF9BdHRyaWJ1dGVPY3RhaGVkcm9uVHJhbnNmb3JtX19fZGVzdHJveV9fXzA9ZnVuY3Rpb24oKXtyZXR1cm4odmM9Ty5fZW1zY3JpcHRlbl9iaW5kX0F0dHJpYnV0ZU9jdGFoZWRyb25UcmFuc2Zvcm1fX19kZXN0cm95X19fMD1PLmFzbS5OKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LEZjPU8uX2Vtc2NyaXB0ZW5fYmluZF9Qb2ludENsb3VkX1BvaW50Q2xvdWRfMD1mdW5jdGlvbigpe3JldHVybihGYz1PLl9lbXNjcmlwdGVuX2JpbmRfUG9pbnRDbG91ZF9Qb2ludENsb3VkXzA9Ty5hc20uTykuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxLbj1PLl9lbXNjcmlwdGVuX2JpbmRfUG9pbnRDbG91ZF9udW1fYXR0cmlidXRlc18wPWZ1bmN0aW9uKCl7cmV0dXJuKEtuPU8uX2Vtc2NyaXB0ZW5fYmluZF9Qb2ludENsb3VkX251bV9hdHRyaWJ1dGVzXzA9Ty5hc20uUCkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxDcj1PLl9lbXNjcmlwdGVuX2JpbmRfUG9pbnRDbG91ZF9udW1fcG9pbnRzXzA9ZnVuY3Rpb24oKXtyZXR1cm4oQ3I9Ty5fZW1zY3JpcHRlbl9iaW5kX1BvaW50Q2xvdWRfbnVtX3BvaW50c18wPU8uYXNtLlEpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sQnQ9Ty5fZW1zY3JpcHRlbl9iaW5kX1BvaW50Q2xvdWRfX19kZXN0cm95X19fMD1mdW5jdGlvbigpe3JldHVybihCdD1PLl9lbXNjcmlwdGVuX2JpbmRfUG9pbnRDbG91ZF9fX2Rlc3Ryb3lfX18wPU8uYXNtLlIpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0saWE9Ty5fZW1zY3JpcHRlbl9iaW5kX01lc2hfTWVzaF8wPWZ1bmN0aW9uKCl7cmV0dXJuKGlhPU8uX2Vtc2NyaXB0ZW5fYmluZF9NZXNoX01lc2hfMD1PLmFzbS5TKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LENkPU8uX2Vtc2NyaXB0ZW5fYmluZF9NZXNoX251bV9mYWNlc18wPWZ1bmN0aW9uKCl7cmV0dXJuKENkPU8uX2Vtc2NyaXB0ZW5fYmluZF9NZXNoX251bV9mYWNlc18wPU8uYXNtLlQpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sTWQ9Ty5fZW1zY3JpcHRlbl9iaW5kX01lc2hfbnVtX2F0dHJpYnV0ZXNfMD1mdW5jdGlvbigpe3JldHVybihNZD1PLl9lbXNjcmlwdGVuX2JpbmRfTWVzaF9udW1fYXR0cmlidXRlc18wPU8uYXNtLlUpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sTmQ9Ty5fZW1zY3JpcHRlbl9iaW5kX01lc2hfbnVtX3BvaW50c18wPWZ1bmN0aW9uKCl7cmV0dXJuKE5kPU8uX2Vtc2NyaXB0ZW5fYmluZF9NZXNoX251bV9wb2ludHNfMD1PLmFzbS5WKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LERjPU8uX2Vtc2NyaXB0ZW5fYmluZF9NZXNoX19fZGVzdHJveV9fXzA9ZnVuY3Rpb24oKXtyZXR1cm4oRGM9Ty5fZW1zY3JpcHRlbl9iaW5kX01lc2hfX19kZXN0cm95X19fMD1PLmFzbS5XKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LEJjPU8uX2Vtc2NyaXB0ZW5fYmluZF9NZXRhZGF0YV9NZXRhZGF0YV8wPWZ1bmN0aW9uKCl7cmV0dXJuKEJjPU8uX2Vtc2NyaXB0ZW5fYmluZF9NZXRhZGF0YV9NZXRhZGF0YV8wPU8uYXNtLlgpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sWnM9Ty5fZW1zY3JpcHRlbl9iaW5kX01ldGFkYXRhX19fZGVzdHJveV9fXzA9ZnVuY3Rpb24oKXtyZXR1cm4oWnM9Ty5fZW1zY3JpcHRlbl9iaW5kX01ldGFkYXRhX19fZGVzdHJveV9fXzA9Ty5hc20uWSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxJZD1PLl9lbXNjcmlwdGVuX2JpbmRfU3RhdHVzX2NvZGVfMD1mdW5jdGlvbigpe3JldHVybihJZD1PLl9lbXNjcmlwdGVuX2JpbmRfU3RhdHVzX2NvZGVfMD1PLmFzbS5aKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LFFzPU8uX2Vtc2NyaXB0ZW5fYmluZF9TdGF0dXNfb2tfMD1mdW5jdGlvbigpe3JldHVybihRcz1PLl9lbXNjcmlwdGVuX2JpbmRfU3RhdHVzX29rXzA9Ty5hc20uXykuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxyaT1PLl9lbXNjcmlwdGVuX2JpbmRfU3RhdHVzX2Vycm9yX21zZ18wPWZ1bmN0aW9uKCl7cmV0dXJuKHJpPU8uX2Vtc2NyaXB0ZW5fYmluZF9TdGF0dXNfZXJyb3JfbXNnXzA9Ty5hc20uJCkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxQZD1PLl9lbXNjcmlwdGVuX2JpbmRfU3RhdHVzX19fZGVzdHJveV9fXzA9ZnVuY3Rpb24oKXtyZXR1cm4oUGQ9Ty5fZW1zY3JpcHRlbl9iaW5kX1N0YXR1c19fX2Rlc3Ryb3lfX18wPU8uYXNtLmFhKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LGtkPU8uX2Vtc2NyaXB0ZW5fYmluZF9EcmFjb0Zsb2F0MzJBcnJheV9EcmFjb0Zsb2F0MzJBcnJheV8wPWZ1bmN0aW9uKCl7cmV0dXJuKGtkPU8uX2Vtc2NyaXB0ZW5fYmluZF9EcmFjb0Zsb2F0MzJBcnJheV9EcmFjb0Zsb2F0MzJBcnJheV8wPU8uYXNtLmJhKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LHZkPU8uX2Vtc2NyaXB0ZW5fYmluZF9EcmFjb0Zsb2F0MzJBcnJheV9HZXRWYWx1ZV8xPWZ1bmN0aW9uKCl7cmV0dXJuKHZkPU8uX2Vtc2NyaXB0ZW5fYmluZF9EcmFjb0Zsb2F0MzJBcnJheV9HZXRWYWx1ZV8xPU8uYXNtLmNhKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LGlpPU8uX2Vtc2NyaXB0ZW5fYmluZF9EcmFjb0Zsb2F0MzJBcnJheV9zaXplXzA9ZnVuY3Rpb24oKXtyZXR1cm4oaWk9Ty5fZW1zY3JpcHRlbl9iaW5kX0RyYWNvRmxvYXQzMkFycmF5X3NpemVfMD1PLmFzbS5kYSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxjaT1PLl9lbXNjcmlwdGVuX2JpbmRfRHJhY29GbG9hdDMyQXJyYXlfX19kZXN0cm95X19fMD1mdW5jdGlvbigpe3JldHVybihjaT1PLl9lbXNjcmlwdGVuX2JpbmRfRHJhY29GbG9hdDMyQXJyYXlfX19kZXN0cm95X19fMD1PLmFzbS5lYSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxVYz1PLl9lbXNjcmlwdGVuX2JpbmRfRHJhY29JbnQ4QXJyYXlfRHJhY29JbnQ4QXJyYXlfMD1mdW5jdGlvbigpe3JldHVybihVYz1PLl9lbXNjcmlwdGVuX2JpbmRfRHJhY29JbnQ4QXJyYXlfRHJhY29JbnQ4QXJyYXlfMD1PLmFzbS5mYSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxGZD1PLl9lbXNjcmlwdGVuX2JpbmRfRHJhY29JbnQ4QXJyYXlfR2V0VmFsdWVfMT1mdW5jdGlvbigpe3JldHVybihGZD1PLl9lbXNjcmlwdGVuX2JpbmRfRHJhY29JbnQ4QXJyYXlfR2V0VmFsdWVfMT1PLmFzbS5nYSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxEZD1PLl9lbXNjcmlwdGVuX2JpbmRfRHJhY29JbnQ4QXJyYXlfc2l6ZV8wPWZ1bmN0aW9uKCl7cmV0dXJuKERkPU8uX2Vtc2NyaXB0ZW5fYmluZF9EcmFjb0ludDhBcnJheV9zaXplXzA9Ty5hc20uaGEpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sTGE9Ty5fZW1zY3JpcHRlbl9iaW5kX0RyYWNvSW50OEFycmF5X19fZGVzdHJveV9fXzA9ZnVuY3Rpb24oKXtyZXR1cm4oTGE9Ty5fZW1zY3JpcHRlbl9iaW5kX0RyYWNvSW50OEFycmF5X19fZGVzdHJveV9fXzA9Ty5hc20uaWEpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sJHM9Ty5fZW1zY3JpcHRlbl9iaW5kX0RyYWNvVUludDhBcnJheV9EcmFjb1VJbnQ4QXJyYXlfMD1mdW5jdGlvbigpe3JldHVybigkcz1PLl9lbXNjcmlwdGVuX2JpbmRfRHJhY29VSW50OEFycmF5X0RyYWNvVUludDhBcnJheV8wPU8uYXNtLmphKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LGVmPU8uX2Vtc2NyaXB0ZW5fYmluZF9EcmFjb1VJbnQ4QXJyYXlfR2V0VmFsdWVfMT1mdW5jdGlvbigpe3JldHVybihlZj1PLl9lbXNjcmlwdGVuX2JpbmRfRHJhY29VSW50OEFycmF5X0dldFZhbHVlXzE9Ty5hc20ua2EpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sTGM9Ty5fZW1zY3JpcHRlbl9iaW5kX0RyYWNvVUludDhBcnJheV9zaXplXzA9ZnVuY3Rpb24oKXtyZXR1cm4oTGM9Ty5fZW1zY3JpcHRlbl9iaW5kX0RyYWNvVUludDhBcnJheV9zaXplXzA9Ty5hc20ubGEpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sQmQ9Ty5fZW1zY3JpcHRlbl9iaW5kX0RyYWNvVUludDhBcnJheV9fX2Rlc3Ryb3lfX18wPWZ1bmN0aW9uKCl7cmV0dXJuKEJkPU8uX2Vtc2NyaXB0ZW5fYmluZF9EcmFjb1VJbnQ4QXJyYXlfX19kZXN0cm95X19fMD1PLmFzbS5tYSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxqYz1PLl9lbXNjcmlwdGVuX2JpbmRfRHJhY29JbnQxNkFycmF5X0RyYWNvSW50MTZBcnJheV8wPWZ1bmN0aW9uKCl7cmV0dXJuKGpjPU8uX2Vtc2NyaXB0ZW5fYmluZF9EcmFjb0ludDE2QXJyYXlfRHJhY29JbnQxNkFycmF5XzA9Ty5hc20ubmEpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sVWQ9Ty5fZW1zY3JpcHRlbl9iaW5kX0RyYWNvSW50MTZBcnJheV9HZXRWYWx1ZV8xPWZ1bmN0aW9uKCl7cmV0dXJuKFVkPU8uX2Vtc2NyaXB0ZW5fYmluZF9EcmFjb0ludDE2QXJyYXlfR2V0VmFsdWVfMT1PLmFzbS5vYSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxMZD1PLl9lbXNjcmlwdGVuX2JpbmRfRHJhY29JbnQxNkFycmF5X3NpemVfMD1mdW5jdGlvbigpe3JldHVybihMZD1PLl9lbXNjcmlwdGVuX2JpbmRfRHJhY29JbnQxNkFycmF5X3NpemVfMD1PLmFzbS5wYSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxqZD1PLl9lbXNjcmlwdGVuX2JpbmRfRHJhY29JbnQxNkFycmF5X19fZGVzdHJveV9fXzA9ZnVuY3Rpb24oKXtyZXR1cm4oamQ9Ty5fZW1zY3JpcHRlbl9iaW5kX0RyYWNvSW50MTZBcnJheV9fX2Rlc3Ryb3lfX18wPU8uYXNtLnFhKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LHpkPU8uX2Vtc2NyaXB0ZW5fYmluZF9EcmFjb1VJbnQxNkFycmF5X0RyYWNvVUludDE2QXJyYXlfMD1mdW5jdGlvbigpe3JldHVybih6ZD1PLl9lbXNjcmlwdGVuX2JpbmRfRHJhY29VSW50MTZBcnJheV9EcmFjb1VJbnQxNkFycmF5XzA9Ty5hc20ucmEpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sR2Q9Ty5fZW1zY3JpcHRlbl9iaW5kX0RyYWNvVUludDE2QXJyYXlfR2V0VmFsdWVfMT1mdW5jdGlvbigpe3JldHVybihHZD1PLl9lbXNjcmlwdGVuX2JpbmRfRHJhY29VSW50MTZBcnJheV9HZXRWYWx1ZV8xPU8uYXNtLnNhKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LFZkPU8uX2Vtc2NyaXB0ZW5fYmluZF9EcmFjb1VJbnQxNkFycmF5X3NpemVfMD1mdW5jdGlvbigpe3JldHVybihWZD1PLl9lbXNjcmlwdGVuX2JpbmRfRHJhY29VSW50MTZBcnJheV9zaXplXzA9Ty5hc20udGEpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sdGY9Ty5fZW1zY3JpcHRlbl9iaW5kX0RyYWNvVUludDE2QXJyYXlfX19kZXN0cm95X19fMD1mdW5jdGlvbigpe3JldHVybih0Zj1PLl9lbXNjcmlwdGVuX2JpbmRfRHJhY29VSW50MTZBcnJheV9fX2Rlc3Ryb3lfX18wPU8uYXNtLnVhKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LEhkPU8uX2Vtc2NyaXB0ZW5fYmluZF9EcmFjb0ludDMyQXJyYXlfRHJhY29JbnQzMkFycmF5XzA9ZnVuY3Rpb24oKXtyZXR1cm4oSGQ9Ty5fZW1zY3JpcHRlbl9iaW5kX0RyYWNvSW50MzJBcnJheV9EcmFjb0ludDMyQXJyYXlfMD1PLmFzbS52YSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxLZD1PLl9lbXNjcmlwdGVuX2JpbmRfRHJhY29JbnQzMkFycmF5X0dldFZhbHVlXzE9ZnVuY3Rpb24oKXtyZXR1cm4oS2Q9Ty5fZW1zY3JpcHRlbl9iaW5kX0RyYWNvSW50MzJBcnJheV9HZXRWYWx1ZV8xPU8uYXNtLndhKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LHFkPU8uX2Vtc2NyaXB0ZW5fYmluZF9EcmFjb0ludDMyQXJyYXlfc2l6ZV8wPWZ1bmN0aW9uKCl7cmV0dXJuKHFkPU8uX2Vtc2NyaXB0ZW5fYmluZF9EcmFjb0ludDMyQXJyYXlfc2l6ZV8wPU8uYXNtLnhhKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LFdkPU8uX2Vtc2NyaXB0ZW5fYmluZF9EcmFjb0ludDMyQXJyYXlfX19kZXN0cm95X19fMD1mdW5jdGlvbigpe3JldHVybihXZD1PLl9lbXNjcmlwdGVuX2JpbmRfRHJhY29JbnQzMkFycmF5X19fZGVzdHJveV9fXzA9Ty5hc20ueWEpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sc2k9Ty5fZW1zY3JpcHRlbl9iaW5kX0RyYWNvVUludDMyQXJyYXlfRHJhY29VSW50MzJBcnJheV8wPWZ1bmN0aW9uKCl7cmV0dXJuKHNpPU8uX2Vtc2NyaXB0ZW5fYmluZF9EcmFjb1VJbnQzMkFycmF5X0RyYWNvVUludDMyQXJyYXlfMD1PLmFzbS56YSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxYZD1PLl9lbXNjcmlwdGVuX2JpbmRfRHJhY29VSW50MzJBcnJheV9HZXRWYWx1ZV8xPWZ1bmN0aW9uKCl7cmV0dXJuKFhkPU8uX2Vtc2NyaXB0ZW5fYmluZF9EcmFjb1VJbnQzMkFycmF5X0dldFZhbHVlXzE9Ty5hc20uQWEpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sWWQ9Ty5fZW1zY3JpcHRlbl9iaW5kX0RyYWNvVUludDMyQXJyYXlfc2l6ZV8wPWZ1bmN0aW9uKCl7cmV0dXJuKFlkPU8uX2Vtc2NyaXB0ZW5fYmluZF9EcmFjb1VJbnQzMkFycmF5X3NpemVfMD1PLmFzbS5CYSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxIaT1PLl9lbXNjcmlwdGVuX2JpbmRfRHJhY29VSW50MzJBcnJheV9fX2Rlc3Ryb3lfX18wPWZ1bmN0aW9uKCl7cmV0dXJuKEhpPU8uX2Vtc2NyaXB0ZW5fYmluZF9EcmFjb1VJbnQzMkFycmF5X19fZGVzdHJveV9fXzA9Ty5hc20uQ2EpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sSmQ9Ty5fZW1zY3JpcHRlbl9iaW5kX01ldGFkYXRhUXVlcmllcl9NZXRhZGF0YVF1ZXJpZXJfMD1mdW5jdGlvbigpe3JldHVybihKZD1PLl9lbXNjcmlwdGVuX2JpbmRfTWV0YWRhdGFRdWVyaWVyX01ldGFkYXRhUXVlcmllcl8wPU8uYXNtLkRhKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LFpkPU8uX2Vtc2NyaXB0ZW5fYmluZF9NZXRhZGF0YVF1ZXJpZXJfSGFzRW50cnlfMj1mdW5jdGlvbigpe3JldHVybihaZD1PLl9lbXNjcmlwdGVuX2JpbmRfTWV0YWRhdGFRdWVyaWVyX0hhc0VudHJ5XzI9Ty5hc20uRWEpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sbGE9Ty5fZW1zY3JpcHRlbl9iaW5kX01ldGFkYXRhUXVlcmllcl9HZXRJbnRFbnRyeV8yPWZ1bmN0aW9uKCl7cmV0dXJuKGxhPU8uX2Vtc2NyaXB0ZW5fYmluZF9NZXRhZGF0YVF1ZXJpZXJfR2V0SW50RW50cnlfMj1PLmFzbS5GYSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxuZj1PLl9lbXNjcmlwdGVuX2JpbmRfTWV0YWRhdGFRdWVyaWVyX0dldEludEVudHJ5QXJyYXlfMz1mdW5jdGlvbigpe3JldHVybihuZj1PLl9lbXNjcmlwdGVuX2JpbmRfTWV0YWRhdGFRdWVyaWVyX0dldEludEVudHJ5QXJyYXlfMz1PLmFzbS5HYSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxRZD1PLl9lbXNjcmlwdGVuX2JpbmRfTWV0YWRhdGFRdWVyaWVyX0dldERvdWJsZUVudHJ5XzI9ZnVuY3Rpb24oKXtyZXR1cm4oUWQ9Ty5fZW1zY3JpcHRlbl9iaW5kX01ldGFkYXRhUXVlcmllcl9HZXREb3VibGVFbnRyeV8yPU8uYXNtLkhhKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LCRkPU8uX2Vtc2NyaXB0ZW5fYmluZF9NZXRhZGF0YVF1ZXJpZXJfR2V0U3RyaW5nRW50cnlfMj1mdW5jdGlvbigpe3JldHVybigkZD1PLl9lbXNjcmlwdGVuX2JpbmRfTWV0YWRhdGFRdWVyaWVyX0dldFN0cmluZ0VudHJ5XzI9Ty5hc20uSWEpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sZXU9Ty5fZW1zY3JpcHRlbl9iaW5kX01ldGFkYXRhUXVlcmllcl9OdW1FbnRyaWVzXzE9ZnVuY3Rpb24oKXtyZXR1cm4oZXU9Ty5fZW1zY3JpcHRlbl9iaW5kX01ldGFkYXRhUXVlcmllcl9OdW1FbnRyaWVzXzE9Ty5hc20uSmEpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sWG89Ty5fZW1zY3JpcHRlbl9iaW5kX01ldGFkYXRhUXVlcmllcl9HZXRFbnRyeU5hbWVfMj1mdW5jdGlvbigpe3JldHVybihYbz1PLl9lbXNjcmlwdGVuX2JpbmRfTWV0YWRhdGFRdWVyaWVyX0dldEVudHJ5TmFtZV8yPU8uYXNtLkthKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LG9mPU8uX2Vtc2NyaXB0ZW5fYmluZF9NZXRhZGF0YVF1ZXJpZXJfX19kZXN0cm95X19fMD1mdW5jdGlvbigpe3JldHVybihvZj1PLl9lbXNjcmlwdGVuX2JpbmRfTWV0YWRhdGFRdWVyaWVyX19fZGVzdHJveV9fXzA9Ty5hc20uTGEpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sYWY9Ty5fZW1zY3JpcHRlbl9iaW5kX0RlY29kZXJfRGVjb2Rlcl8wPWZ1bmN0aW9uKCl7cmV0dXJuKGFmPU8uX2Vtc2NyaXB0ZW5fYmluZF9EZWNvZGVyX0RlY29kZXJfMD1PLmFzbS5NYSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxLaT1PLl9lbXNjcmlwdGVuX2JpbmRfRGVjb2Rlcl9EZWNvZGVBcnJheVRvUG9pbnRDbG91ZF8zPWZ1bmN0aW9uKCl7cmV0dXJuKEtpPU8uX2Vtc2NyaXB0ZW5fYmluZF9EZWNvZGVyX0RlY29kZUFycmF5VG9Qb2ludENsb3VkXzM9Ty5hc20uTmEpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sdHU9Ty5fZW1zY3JpcHRlbl9iaW5kX0RlY29kZXJfRGVjb2RlQXJyYXlUb01lc2hfMz1mdW5jdGlvbigpe3JldHVybih0dT1PLl9lbXNjcmlwdGVuX2JpbmRfRGVjb2Rlcl9EZWNvZGVBcnJheVRvTWVzaF8zPU8uYXNtLk9hKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LHpjPU8uX2Vtc2NyaXB0ZW5fYmluZF9EZWNvZGVyX0dldEF0dHJpYnV0ZUlkXzI9ZnVuY3Rpb24oKXtyZXR1cm4oemM9Ty5fZW1zY3JpcHRlbl9iaW5kX0RlY29kZXJfR2V0QXR0cmlidXRlSWRfMj1PLmFzbS5QYSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxudT1PLl9lbXNjcmlwdGVuX2JpbmRfRGVjb2Rlcl9HZXRBdHRyaWJ1dGVJZEJ5TmFtZV8yPWZ1bmN0aW9uKCl7cmV0dXJuKG51PU8uX2Vtc2NyaXB0ZW5fYmluZF9EZWNvZGVyX0dldEF0dHJpYnV0ZUlkQnlOYW1lXzI9Ty5hc20uUWEpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0scmY9Ty5fZW1zY3JpcHRlbl9iaW5kX0RlY29kZXJfR2V0QXR0cmlidXRlSWRCeU1ldGFkYXRhRW50cnlfMz1mdW5jdGlvbigpe3JldHVybihyZj1PLl9lbXNjcmlwdGVuX2JpbmRfRGVjb2Rlcl9HZXRBdHRyaWJ1dGVJZEJ5TWV0YWRhdGFFbnRyeV8zPU8uYXNtLlJhKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LGNmPU8uX2Vtc2NyaXB0ZW5fYmluZF9EZWNvZGVyX0dldEF0dHJpYnV0ZV8yPWZ1bmN0aW9uKCl7cmV0dXJuKGNmPU8uX2Vtc2NyaXB0ZW5fYmluZF9EZWNvZGVyX0dldEF0dHJpYnV0ZV8yPU8uYXNtLlNhKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LG91PU8uX2Vtc2NyaXB0ZW5fYmluZF9EZWNvZGVyX0dldEF0dHJpYnV0ZUJ5VW5pcXVlSWRfMj1mdW5jdGlvbigpe3JldHVybihvdT1PLl9lbXNjcmlwdGVuX2JpbmRfRGVjb2Rlcl9HZXRBdHRyaWJ1dGVCeVVuaXF1ZUlkXzI9Ty5hc20uVGEpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sYXU9Ty5fZW1zY3JpcHRlbl9iaW5kX0RlY29kZXJfR2V0TWV0YWRhdGFfMT1mdW5jdGlvbigpe3JldHVybihhdT1PLl9lbXNjcmlwdGVuX2JpbmRfRGVjb2Rlcl9HZXRNZXRhZGF0YV8xPU8uYXNtLlVhKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LEdjPU8uX2Vtc2NyaXB0ZW5fYmluZF9EZWNvZGVyX0dldEF0dHJpYnV0ZU1ldGFkYXRhXzI9ZnVuY3Rpb24oKXtyZXR1cm4oR2M9Ty5fZW1zY3JpcHRlbl9iaW5kX0RlY29kZXJfR2V0QXR0cmlidXRlTWV0YWRhdGFfMj1PLmFzbS5WYSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxNbz1PLl9lbXNjcmlwdGVuX2JpbmRfRGVjb2Rlcl9HZXRGYWNlRnJvbU1lc2hfMz1mdW5jdGlvbigpe3JldHVybihNbz1PLl9lbXNjcmlwdGVuX2JpbmRfRGVjb2Rlcl9HZXRGYWNlRnJvbU1lc2hfMz1PLmFzbS5XYSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxWYz1PLl9lbXNjcmlwdGVuX2JpbmRfRGVjb2Rlcl9HZXRUcmlhbmdsZVN0cmlwc0Zyb21NZXNoXzI9ZnVuY3Rpb24oKXtyZXR1cm4oVmM9Ty5fZW1zY3JpcHRlbl9iaW5kX0RlY29kZXJfR2V0VHJpYW5nbGVTdHJpcHNGcm9tTWVzaF8yPU8uYXNtLlhhKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LHJ1PU8uX2Vtc2NyaXB0ZW5fYmluZF9EZWNvZGVyX0dldFRyaWFuZ2xlc1VJbnQxNkFycmF5XzM9ZnVuY3Rpb24oKXtyZXR1cm4ocnU9Ty5fZW1zY3JpcHRlbl9iaW5kX0RlY29kZXJfR2V0VHJpYW5nbGVzVUludDE2QXJyYXlfMz1PLmFzbS5ZYSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxpdT1PLl9lbXNjcmlwdGVuX2JpbmRfRGVjb2Rlcl9HZXRUcmlhbmdsZXNVSW50MzJBcnJheV8zPWZ1bmN0aW9uKCl7cmV0dXJuKGl1PU8uX2Vtc2NyaXB0ZW5fYmluZF9EZWNvZGVyX0dldFRyaWFuZ2xlc1VJbnQzMkFycmF5XzM9Ty5hc20uWmEpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sY3U9Ty5fZW1zY3JpcHRlbl9iaW5kX0RlY29kZXJfR2V0QXR0cmlidXRlRmxvYXRfMz1mdW5jdGlvbigpe3JldHVybihjdT1PLl9lbXNjcmlwdGVuX2JpbmRfRGVjb2Rlcl9HZXRBdHRyaWJ1dGVGbG9hdF8zPU8uYXNtLl9hKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LGhhPU8uX2Vtc2NyaXB0ZW5fYmluZF9EZWNvZGVyX0dldEF0dHJpYnV0ZUZsb2F0Rm9yQWxsUG9pbnRzXzM9ZnVuY3Rpb24oKXtyZXR1cm4oaGE9Ty5fZW1zY3JpcHRlbl9iaW5kX0RlY29kZXJfR2V0QXR0cmlidXRlRmxvYXRGb3JBbGxQb2ludHNfMz1PLmFzbS4kYSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxzdT1PLl9lbXNjcmlwdGVuX2JpbmRfRGVjb2Rlcl9HZXRBdHRyaWJ1dGVJbnRGb3JBbGxQb2ludHNfMz1mdW5jdGlvbigpe3JldHVybihzdT1PLl9lbXNjcmlwdGVuX2JpbmRfRGVjb2Rlcl9HZXRBdHRyaWJ1dGVJbnRGb3JBbGxQb2ludHNfMz1PLmFzbS5hYikuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxmdT1PLl9lbXNjcmlwdGVuX2JpbmRfRGVjb2Rlcl9HZXRBdHRyaWJ1dGVJbnQ4Rm9yQWxsUG9pbnRzXzM9ZnVuY3Rpb24oKXtyZXR1cm4oZnU9Ty5fZW1zY3JpcHRlbl9iaW5kX0RlY29kZXJfR2V0QXR0cmlidXRlSW50OEZvckFsbFBvaW50c18zPU8uYXNtLmJiKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LGR1PU8uX2Vtc2NyaXB0ZW5fYmluZF9EZWNvZGVyX0dldEF0dHJpYnV0ZVVJbnQ4Rm9yQWxsUG9pbnRzXzM9ZnVuY3Rpb24oKXtyZXR1cm4oZHU9Ty5fZW1zY3JpcHRlbl9iaW5kX0RlY29kZXJfR2V0QXR0cmlidXRlVUludDhGb3JBbGxQb2ludHNfMz1PLmFzbS5jYikuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxxaT1PLl9lbXNjcmlwdGVuX2JpbmRfRGVjb2Rlcl9HZXRBdHRyaWJ1dGVJbnQxNkZvckFsbFBvaW50c18zPWZ1bmN0aW9uKCl7cmV0dXJuKHFpPU8uX2Vtc2NyaXB0ZW5fYmluZF9EZWNvZGVyX0dldEF0dHJpYnV0ZUludDE2Rm9yQWxsUG9pbnRzXzM9Ty5hc20uZGIpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sdXU9Ty5fZW1zY3JpcHRlbl9iaW5kX0RlY29kZXJfR2V0QXR0cmlidXRlVUludDE2Rm9yQWxsUG9pbnRzXzM9ZnVuY3Rpb24oKXtyZXR1cm4odXU9Ty5fZW1zY3JpcHRlbl9iaW5kX0RlY29kZXJfR2V0QXR0cmlidXRlVUludDE2Rm9yQWxsUG9pbnRzXzM9Ty5hc20uZWIpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sTXI9Ty5fZW1zY3JpcHRlbl9iaW5kX0RlY29kZXJfR2V0QXR0cmlidXRlSW50MzJGb3JBbGxQb2ludHNfMz1mdW5jdGlvbigpe3JldHVybihNcj1PLl9lbXNjcmlwdGVuX2JpbmRfRGVjb2Rlcl9HZXRBdHRyaWJ1dGVJbnQzMkZvckFsbFBvaW50c18zPU8uYXNtLmZiKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LGx1PU8uX2Vtc2NyaXB0ZW5fYmluZF9EZWNvZGVyX0dldEF0dHJpYnV0ZVVJbnQzMkZvckFsbFBvaW50c18zPWZ1bmN0aW9uKCl7cmV0dXJuKGx1PU8uX2Vtc2NyaXB0ZW5fYmluZF9EZWNvZGVyX0dldEF0dHJpYnV0ZVVJbnQzMkZvckFsbFBvaW50c18zPU8uYXNtLmdiKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LGh1PU8uX2Vtc2NyaXB0ZW5fYmluZF9EZWNvZGVyX0dldEF0dHJpYnV0ZURhdGFBcnJheUZvckFsbFBvaW50c181PWZ1bmN0aW9uKCl7cmV0dXJuKGh1PU8uX2Vtc2NyaXB0ZW5fYmluZF9EZWNvZGVyX0dldEF0dHJpYnV0ZURhdGFBcnJheUZvckFsbFBvaW50c181PU8uYXNtLmhiKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LG11PU8uX2Vtc2NyaXB0ZW5fYmluZF9EZWNvZGVyX1NraXBBdHRyaWJ1dGVUcmFuc2Zvcm1fMT1mdW5jdGlvbigpe3JldHVybihtdT1PLl9lbXNjcmlwdGVuX2JpbmRfRGVjb2Rlcl9Ta2lwQXR0cmlidXRlVHJhbnNmb3JtXzE9Ty5hc20uaWIpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sYnU9Ty5fZW1zY3JpcHRlbl9iaW5kX0RlY29kZXJfR2V0RW5jb2RlZEdlb21ldHJ5VHlwZV9EZXByZWNhdGVkXzE9ZnVuY3Rpb24oKXtyZXR1cm4oYnU9Ty5fZW1zY3JpcHRlbl9iaW5kX0RlY29kZXJfR2V0RW5jb2RlZEdlb21ldHJ5VHlwZV9EZXByZWNhdGVkXzE9Ty5hc20uamIpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0scHU9Ty5fZW1zY3JpcHRlbl9iaW5kX0RlY29kZXJfRGVjb2RlQnVmZmVyVG9Qb2ludENsb3VkXzI9ZnVuY3Rpb24oKXtyZXR1cm4ocHU9Ty5fZW1zY3JpcHRlbl9iaW5kX0RlY29kZXJfRGVjb2RlQnVmZmVyVG9Qb2ludENsb3VkXzI9Ty5hc20ua2IpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sZ3U9Ty5fZW1zY3JpcHRlbl9iaW5kX0RlY29kZXJfRGVjb2RlQnVmZmVyVG9NZXNoXzI9ZnVuY3Rpb24oKXtyZXR1cm4oZ3U9Ty5fZW1zY3JpcHRlbl9iaW5kX0RlY29kZXJfRGVjb2RlQnVmZmVyVG9NZXNoXzI9Ty5hc20ubGIpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sX3U9Ty5fZW1zY3JpcHRlbl9iaW5kX0RlY29kZXJfX19kZXN0cm95X19fMD1mdW5jdGlvbigpe3JldHVybihfdT1PLl9lbXNjcmlwdGVuX2JpbmRfRGVjb2Rlcl9fX2Rlc3Ryb3lfX18wPU8uYXNtLm1iKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LHl1PU8uX2Vtc2NyaXB0ZW5fZW51bV9kcmFjb19BdHRyaWJ1dGVUcmFuc2Zvcm1UeXBlX0FUVFJJQlVURV9JTlZBTElEX1RSQU5TRk9STT1mdW5jdGlvbigpe3JldHVybih5dT1PLl9lbXNjcmlwdGVuX2VudW1fZHJhY29fQXR0cmlidXRlVHJhbnNmb3JtVHlwZV9BVFRSSUJVVEVfSU5WQUxJRF9UUkFOU0ZPUk09Ty5hc20ubmIpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sQXU9Ty5fZW1zY3JpcHRlbl9lbnVtX2RyYWNvX0F0dHJpYnV0ZVRyYW5zZm9ybVR5cGVfQVRUUklCVVRFX05PX1RSQU5TRk9STT1mdW5jdGlvbigpe3JldHVybihBdT1PLl9lbXNjcmlwdGVuX2VudW1fZHJhY29fQXR0cmlidXRlVHJhbnNmb3JtVHlwZV9BVFRSSUJVVEVfTk9fVFJBTlNGT1JNPU8uYXNtLm9iKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LHd1PU8uX2Vtc2NyaXB0ZW5fZW51bV9kcmFjb19BdHRyaWJ1dGVUcmFuc2Zvcm1UeXBlX0FUVFJJQlVURV9RVUFOVElaQVRJT05fVFJBTlNGT1JNPWZ1bmN0aW9uKCl7cmV0dXJuKHd1PU8uX2Vtc2NyaXB0ZW5fZW51bV9kcmFjb19BdHRyaWJ1dGVUcmFuc2Zvcm1UeXBlX0FUVFJJQlVURV9RVUFOVElaQVRJT05fVFJBTlNGT1JNPU8uYXNtLnBiKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LFR1PU8uX2Vtc2NyaXB0ZW5fZW51bV9kcmFjb19BdHRyaWJ1dGVUcmFuc2Zvcm1UeXBlX0FUVFJJQlVURV9PQ1RBSEVEUk9OX1RSQU5TRk9STT1mdW5jdGlvbigpe3JldHVybihUdT1PLl9lbXNjcmlwdGVuX2VudW1fZHJhY29fQXR0cmlidXRlVHJhbnNmb3JtVHlwZV9BVFRSSUJVVEVfT0NUQUhFRFJPTl9UUkFOU0ZPUk09Ty5hc20ucWIpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sZmk9Ty5fZW1zY3JpcHRlbl9lbnVtX2RyYWNvX0dlb21ldHJ5QXR0cmlidXRlX1R5cGVfSU5WQUxJRD1mdW5jdGlvbigpe3JldHVybihmaT1PLl9lbXNjcmlwdGVuX2VudW1fZHJhY29fR2VvbWV0cnlBdHRyaWJ1dGVfVHlwZV9JTlZBTElEPU8uYXNtLnJiKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LEV1PU8uX2Vtc2NyaXB0ZW5fZW51bV9kcmFjb19HZW9tZXRyeUF0dHJpYnV0ZV9UeXBlX1BPU0lUSU9OPWZ1bmN0aW9uKCl7cmV0dXJuKEV1PU8uX2Vtc2NyaXB0ZW5fZW51bV9kcmFjb19HZW9tZXRyeUF0dHJpYnV0ZV9UeXBlX1BPU0lUSU9OPU8uYXNtLnNiKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LFJ1PU8uX2Vtc2NyaXB0ZW5fZW51bV9kcmFjb19HZW9tZXRyeUF0dHJpYnV0ZV9UeXBlX05PUk1BTD1mdW5jdGlvbigpe3JldHVybihSdT1PLl9lbXNjcmlwdGVuX2VudW1fZHJhY29fR2VvbWV0cnlBdHRyaWJ1dGVfVHlwZV9OT1JNQUw9Ty5hc20udGIpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sV2k9Ty5fZW1zY3JpcHRlbl9lbnVtX2RyYWNvX0dlb21ldHJ5QXR0cmlidXRlX1R5cGVfQ09MT1I9ZnVuY3Rpb24oKXtyZXR1cm4oV2k9Ty5fZW1zY3JpcHRlbl9lbnVtX2RyYWNvX0dlb21ldHJ5QXR0cmlidXRlX1R5cGVfQ09MT1I9Ty5hc20udWIpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sSGM9Ty5fZW1zY3JpcHRlbl9lbnVtX2RyYWNvX0dlb21ldHJ5QXR0cmlidXRlX1R5cGVfVEVYX0NPT1JEPWZ1bmN0aW9uKCl7cmV0dXJuKEhjPU8uX2Vtc2NyaXB0ZW5fZW51bV9kcmFjb19HZW9tZXRyeUF0dHJpYnV0ZV9UeXBlX1RFWF9DT09SRD1PLmFzbS52YikuYXBwbHkobnVsbCxhcmd1bWVudHMpfSx4dT1PLl9lbXNjcmlwdGVuX2VudW1fZHJhY29fR2VvbWV0cnlBdHRyaWJ1dGVfVHlwZV9HRU5FUklDPWZ1bmN0aW9uKCl7cmV0dXJuKHh1PU8uX2Vtc2NyaXB0ZW5fZW51bV9kcmFjb19HZW9tZXRyeUF0dHJpYnV0ZV9UeXBlX0dFTkVSSUM9Ty5hc20ud2IpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sc2Y9Ty5fZW1zY3JpcHRlbl9lbnVtX2RyYWNvX0VuY29kZWRHZW9tZXRyeVR5cGVfSU5WQUxJRF9HRU9NRVRSWV9UWVBFPWZ1bmN0aW9uKCl7cmV0dXJuKHNmPU8uX2Vtc2NyaXB0ZW5fZW51bV9kcmFjb19FbmNvZGVkR2VvbWV0cnlUeXBlX0lOVkFMSURfR0VPTUVUUllfVFlQRT1PLmFzbS54YikuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxPdT1PLl9lbXNjcmlwdGVuX2VudW1fZHJhY29fRW5jb2RlZEdlb21ldHJ5VHlwZV9QT0lOVF9DTE9VRD1mdW5jdGlvbigpe3JldHVybihPdT1PLl9lbXNjcmlwdGVuX2VudW1fZHJhY29fRW5jb2RlZEdlb21ldHJ5VHlwZV9QT0lOVF9DTE9VRD1PLmFzbS55YikuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxTdT1PLl9lbXNjcmlwdGVuX2VudW1fZHJhY29fRW5jb2RlZEdlb21ldHJ5VHlwZV9UUklBTkdVTEFSX01FU0g9ZnVuY3Rpb24oKXtyZXR1cm4oU3U9Ty5fZW1zY3JpcHRlbl9lbnVtX2RyYWNvX0VuY29kZWRHZW9tZXRyeVR5cGVfVFJJQU5HVUxBUl9NRVNIPU8uYXNtLnpiKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LEN1PU8uX2Vtc2NyaXB0ZW5fZW51bV9kcmFjb19EYXRhVHlwZV9EVF9JTlZBTElEPWZ1bmN0aW9uKCl7cmV0dXJuKEN1PU8uX2Vtc2NyaXB0ZW5fZW51bV9kcmFjb19EYXRhVHlwZV9EVF9JTlZBTElEPU8uYXNtLkFiKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LE11PU8uX2Vtc2NyaXB0ZW5fZW51bV9kcmFjb19EYXRhVHlwZV9EVF9JTlQ4PWZ1bmN0aW9uKCl7cmV0dXJuKE11PU8uX2Vtc2NyaXB0ZW5fZW51bV9kcmFjb19EYXRhVHlwZV9EVF9JTlQ4PU8uYXNtLkJiKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LE51PU8uX2Vtc2NyaXB0ZW5fZW51bV9kcmFjb19EYXRhVHlwZV9EVF9VSU5UOD1mdW5jdGlvbigpe3JldHVybihOdT1PLl9lbXNjcmlwdGVuX2VudW1fZHJhY29fRGF0YVR5cGVfRFRfVUlOVDg9Ty5hc20uQ2IpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sSXU9Ty5fZW1zY3JpcHRlbl9lbnVtX2RyYWNvX0RhdGFUeXBlX0RUX0lOVDE2PWZ1bmN0aW9uKCl7cmV0dXJuKEl1PU8uX2Vtc2NyaXB0ZW5fZW51bV9kcmFjb19EYXRhVHlwZV9EVF9JTlQxNj1PLmFzbS5EYikuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxQdT1PLl9lbXNjcmlwdGVuX2VudW1fZHJhY29fRGF0YVR5cGVfRFRfVUlOVDE2PWZ1bmN0aW9uKCl7cmV0dXJuKFB1PU8uX2Vtc2NyaXB0ZW5fZW51bV9kcmFjb19EYXRhVHlwZV9EVF9VSU5UMTY9Ty5hc20uRWIpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sa3U9Ty5fZW1zY3JpcHRlbl9lbnVtX2RyYWNvX0RhdGFUeXBlX0RUX0lOVDMyPWZ1bmN0aW9uKCl7cmV0dXJuKGt1PU8uX2Vtc2NyaXB0ZW5fZW51bV9kcmFjb19EYXRhVHlwZV9EVF9JTlQzMj1PLmFzbS5GYikuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxmZj1PLl9lbXNjcmlwdGVuX2VudW1fZHJhY29fRGF0YVR5cGVfRFRfVUlOVDMyPWZ1bmN0aW9uKCl7cmV0dXJuKGZmPU8uX2Vtc2NyaXB0ZW5fZW51bV9kcmFjb19EYXRhVHlwZV9EVF9VSU5UMzI9Ty5hc20uR2IpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sdnU9Ty5fZW1zY3JpcHRlbl9lbnVtX2RyYWNvX0RhdGFUeXBlX0RUX0lOVDY0PWZ1bmN0aW9uKCl7cmV0dXJuKHZ1PU8uX2Vtc2NyaXB0ZW5fZW51bV9kcmFjb19EYXRhVHlwZV9EVF9JTlQ2ND1PLmFzbS5IYikuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxGdT1PLl9lbXNjcmlwdGVuX2VudW1fZHJhY29fRGF0YVR5cGVfRFRfVUlOVDY0PWZ1bmN0aW9uKCl7cmV0dXJuKEZ1PU8uX2Vtc2NyaXB0ZW5fZW51bV9kcmFjb19EYXRhVHlwZV9EVF9VSU5UNjQ9Ty5hc20uSWIpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sRHU9Ty5fZW1zY3JpcHRlbl9lbnVtX2RyYWNvX0RhdGFUeXBlX0RUX0ZMT0FUMzI9ZnVuY3Rpb24oKXtyZXR1cm4oRHU9Ty5fZW1zY3JpcHRlbl9lbnVtX2RyYWNvX0RhdGFUeXBlX0RUX0ZMT0FUMzI9Ty5hc20uSmIpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sQnU9Ty5fZW1zY3JpcHRlbl9lbnVtX2RyYWNvX0RhdGFUeXBlX0RUX0ZMT0FUNjQ9ZnVuY3Rpb24oKXtyZXR1cm4oQnU9Ty5fZW1zY3JpcHRlbl9lbnVtX2RyYWNvX0RhdGFUeXBlX0RUX0ZMT0FUNjQ9Ty5hc20uS2IpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sVXU9Ty5fZW1zY3JpcHRlbl9lbnVtX2RyYWNvX0RhdGFUeXBlX0RUX0JPT0w9ZnVuY3Rpb24oKXtyZXR1cm4oVXU9Ty5fZW1zY3JpcHRlbl9lbnVtX2RyYWNvX0RhdGFUeXBlX0RUX0JPT0w9Ty5hc20uTGIpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sTHU9Ty5fZW1zY3JpcHRlbl9lbnVtX2RyYWNvX0RhdGFUeXBlX0RUX1RZUEVTX0NPVU5UPWZ1bmN0aW9uKCl7cmV0dXJuKEx1PU8uX2Vtc2NyaXB0ZW5fZW51bV9kcmFjb19EYXRhVHlwZV9EVF9UWVBFU19DT1VOVD1PLmFzbS5NYikuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxqdT1PLl9lbXNjcmlwdGVuX2VudW1fZHJhY29fU3RhdHVzQ29kZV9PSz1mdW5jdGlvbigpe3JldHVybihqdT1PLl9lbXNjcmlwdGVuX2VudW1fZHJhY29fU3RhdHVzQ29kZV9PSz1PLmFzbS5OYikuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxYaT1PLl9lbXNjcmlwdGVuX2VudW1fZHJhY29fU3RhdHVzQ29kZV9EUkFDT19FUlJPUj1mdW5jdGlvbigpe3JldHVybihYaT1PLl9lbXNjcmlwdGVuX2VudW1fZHJhY29fU3RhdHVzQ29kZV9EUkFDT19FUlJPUj1PLmFzbS5PYikuYXBwbHkobnVsbCxhcmd1bWVudHMpfSx6dT1PLl9lbXNjcmlwdGVuX2VudW1fZHJhY29fU3RhdHVzQ29kZV9JT19FUlJPUj1mdW5jdGlvbigpe3JldHVybih6dT1PLl9lbXNjcmlwdGVuX2VudW1fZHJhY29fU3RhdHVzQ29kZV9JT19FUlJPUj1PLmFzbS5QYikuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxHdT1PLl9lbXNjcmlwdGVuX2VudW1fZHJhY29fU3RhdHVzQ29kZV9JTlZBTElEX1BBUkFNRVRFUj1mdW5jdGlvbigpe3JldHVybihHdT1PLl9lbXNjcmlwdGVuX2VudW1fZHJhY29fU3RhdHVzQ29kZV9JTlZBTElEX1BBUkFNRVRFUj1PLmFzbS5RYikuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxWdT1PLl9lbXNjcmlwdGVuX2VudW1fZHJhY29fU3RhdHVzQ29kZV9VTlNVUFBPUlRFRF9WRVJTSU9OPWZ1bmN0aW9uKCl7cmV0dXJuKFZ1PU8uX2Vtc2NyaXB0ZW5fZW51bV9kcmFjb19TdGF0dXNDb2RlX1VOU1VQUE9SVEVEX1ZFUlNJT049Ty5hc20uUmIpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sSHU9Ty5fZW1zY3JpcHRlbl9lbnVtX2RyYWNvX1N0YXR1c0NvZGVfVU5LTk9XTl9WRVJTSU9OPWZ1bmN0aW9uKCl7cmV0dXJuKEh1PU8uX2Vtc2NyaXB0ZW5fZW51bV9kcmFjb19TdGF0dXNDb2RlX1VOS05PV05fVkVSU0lPTj1PLmFzbS5TYikuYXBwbHkobnVsbCxhcmd1bWVudHMpfTtPLl9tYWxsb2M9ZnVuY3Rpb24oKXtyZXR1cm4oTy5fbWFsbG9jPU8uYXNtLlRiKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LE8uX2ZyZWU9ZnVuY3Rpb24oKXtyZXR1cm4oTy5fZnJlZT1PLmFzbS5VYikuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgS3U9ZnVuY3Rpb24oKXtyZXR1cm4oS3U9Ty5hc20uVmIpLmFwcGx5KG51bGwsYXJndW1lbnRzKX07Ty5fX19zdGFydF9lbV9qcz0xNTg1NixPLl9fX3N0b3BfZW1fanM9MTU5NTQ7dmFyIGRmO2lmKEZ0PWZ1bmN0aW9uIGooKXtkZnx8bCgpLGRmfHwoRnQ9ail9LE8ucHJlSW5pdClmb3IodHlwZW9mIE8ucHJlSW5pdD09ImZ1bmN0aW9uIiYmKE8ucHJlSW5pdD1bTy5wcmVJbml0XSk7MDxPLnByZUluaXQubGVuZ3RoOylPLnByZUluaXQucG9wKCkoKTtsKCksaC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShoLnByb3RvdHlwZSksaC5wcm90b3R5cGUuY29uc3RydWN0b3I9aCxoLnByb3RvdHlwZS5fX2NsYXNzX189aCxoLl9fY2FjaGVfXz17fSxPLldyYXBwZXJPYmplY3Q9aCxPLmdldENhY2hlPW0sTy53cmFwUG9pbnRlcj1iLE8uY2FzdE9iamVjdD1mdW5jdGlvbihqLEspe3JldHVybiBiKGoucHRyLEspfSxPLk5VTEw9YigwKSxPLmRlc3Ryb3k9ZnVuY3Rpb24oail7aWYoIWouX19kZXN0cm95X18pdGhyb3ciRXJyb3I6IENhbm5vdCBkZXN0cm95IG9iamVjdC4gKERpZCB5b3UgY3JlYXRlIGl0IHlvdXJzZWxmPykiO2ouX19kZXN0cm95X18oKSxkZWxldGUgbShqLl9fY2xhc3NfXylbai5wdHJdfSxPLmNvbXBhcmU9ZnVuY3Rpb24oaixLKXtyZXR1cm4gai5wdHI9PT1LLnB0cn0sTy5nZXRQb2ludGVyPWZ1bmN0aW9uKGope3JldHVybiBqLnB0cn0sTy5nZXRDbGFzcz1mdW5jdGlvbihqKXtyZXR1cm4gai5fX2NsYXNzX199O3ZhciBPdD17YnVmZmVyOjAsc2l6ZTowLHBvczowLHRlbXBzOltdLG5lZWRlZDowLHByZXBhcmU6ZnVuY3Rpb24oKXtpZihPdC5uZWVkZWQpe2Zvcih2YXIgaj0wO2o8T3QudGVtcHMubGVuZ3RoO2orKylPLl9mcmVlKE90LnRlbXBzW2pdKTtPdC50ZW1wcy5sZW5ndGg9MCxPLl9mcmVlKE90LmJ1ZmZlciksT3QuYnVmZmVyPTAsT3Quc2l6ZSs9T3QubmVlZGVkLE90Lm5lZWRlZD0wfU90LmJ1ZmZlcnx8KE90LnNpemUrPTEyOCxPdC5idWZmZXI9Ty5fbWFsbG9jKE90LnNpemUpLE90LmJ1ZmZlcnx8aSh2b2lkIDApKSxPdC5wb3M9MH0sYWxsb2M6ZnVuY3Rpb24oaixLKXtyZXR1cm4gT3QuYnVmZmVyfHxpKHZvaWQgMCksaj1qLmxlbmd0aCpLLkJZVEVTX1BFUl9FTEVNRU5ULGo9ais3Ji04LE90LnBvcytqPj1PdC5zaXplPygwPGp8fGkodm9pZCAwKSxPdC5uZWVkZWQrPWosSz1PLl9tYWxsb2MoaiksT3QudGVtcHMucHVzaChLKSk6KEs9T3QuYnVmZmVyK090LnBvcyxPdC5wb3MrPWopLEt9LGNvcHk6ZnVuY3Rpb24oaixLLHRlKXtzd2l0Y2godGU+Pj49MCxLLkJZVEVTX1BFUl9FTEVNRU5UKXtjYXNlIDI6dGU+Pj49MTticmVhaztjYXNlIDQ6dGU+Pj49MjticmVhaztjYXNlIDg6dGU+Pj49M31mb3IodmFyIE1lPTA7TWU8ai5sZW5ndGg7TWUrKylLW3RlK01lXT1qW01lXX19O3JldHVybiBULnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGgucHJvdG90eXBlKSxULnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1ULFQucHJvdG90eXBlLl9fY2xhc3NfXz1ULFQuX19jYWNoZV9fPXt9LE8uVm9pZFB0cj1ULFQucHJvdG90eXBlLl9fZGVzdHJveV9fPVQucHJvdG90eXBlLl9fZGVzdHJveV9fPWZ1bmN0aW9uKCl7RHQodGhpcy5wdHIpfSxfLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGgucHJvdG90eXBlKSxfLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1fLF8ucHJvdG90eXBlLl9fY2xhc3NfXz1fLF8uX19jYWNoZV9fPXt9LE8uRGVjb2RlckJ1ZmZlcj1fLF8ucHJvdG90eXBlLkluaXQ9Xy5wcm90b3R5cGUuSW5pdD1mdW5jdGlvbihqLEspe3ZhciB0ZT10aGlzLnB0cjtPdC5wcmVwYXJlKCksdHlwZW9mIGo9PSJvYmplY3QiJiYoaj15KGopKSxLJiZ0eXBlb2YgSz09Im9iamVjdCImJihLPUsucHRyKSx6dCh0ZSxqLEspfSxfLnByb3RvdHlwZS5fX2Rlc3Ryb3lfXz1fLnByb3RvdHlwZS5fX2Rlc3Ryb3lfXz1mdW5jdGlvbigpe2ZuKHRoaXMucHRyKX0sRS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShoLnByb3RvdHlwZSksRS5wcm90b3R5cGUuY29uc3RydWN0b3I9RSxFLnByb3RvdHlwZS5fX2NsYXNzX189RSxFLl9fY2FjaGVfXz17fSxPLkF0dHJpYnV0ZVRyYW5zZm9ybURhdGE9RSxFLnByb3RvdHlwZS50cmFuc2Zvcm1fdHlwZT1FLnByb3RvdHlwZS50cmFuc2Zvcm1fdHlwZT1mdW5jdGlvbigpe3JldHVybiBIbih0aGlzLnB0cil9LEUucHJvdG90eXBlLl9fZGVzdHJveV9fPUUucHJvdG90eXBlLl9fZGVzdHJveV9fPWZ1bmN0aW9uKCl7UG4odGhpcy5wdHIpfSx3LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGgucHJvdG90eXBlKSx3LnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj13LHcucHJvdG90eXBlLl9fY2xhc3NfXz13LHcuX19jYWNoZV9fPXt9LE8uR2VvbWV0cnlBdHRyaWJ1dGU9dyx3LnByb3RvdHlwZS5fX2Rlc3Ryb3lfXz13LnByb3RvdHlwZS5fX2Rlc3Ryb3lfXz1mdW5jdGlvbigpe2t0KHRoaXMucHRyKX0sUi5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShoLnByb3RvdHlwZSksUi5wcm90b3R5cGUuY29uc3RydWN0b3I9UixSLnByb3RvdHlwZS5fX2NsYXNzX189UixSLl9fY2FjaGVfXz17fSxPLlBvaW50QXR0cmlidXRlPVIsUi5wcm90b3R5cGUuc2l6ZT1SLnByb3RvdHlwZS5zaXplPWZ1bmN0aW9uKCl7cmV0dXJuIE9uKHRoaXMucHRyKX0sUi5wcm90b3R5cGUuR2V0QXR0cmlidXRlVHJhbnNmb3JtRGF0YT1SLnByb3RvdHlwZS5HZXRBdHRyaWJ1dGVUcmFuc2Zvcm1EYXRhPWZ1bmN0aW9uKCl7cmV0dXJuIGIoa24odGhpcy5wdHIpLEUpfSxSLnByb3RvdHlwZS5hdHRyaWJ1dGVfdHlwZT1SLnByb3RvdHlwZS5hdHRyaWJ1dGVfdHlwZT1mdW5jdGlvbigpe3JldHVybiBBbyh0aGlzLnB0cil9LFIucHJvdG90eXBlLmRhdGFfdHlwZT1SLnByb3RvdHlwZS5kYXRhX3R5cGU9ZnVuY3Rpb24oKXtyZXR1cm4gR3QodGhpcy5wdHIpfSxSLnByb3RvdHlwZS5udW1fY29tcG9uZW50cz1SLnByb3RvdHlwZS5udW1fY29tcG9uZW50cz1mdW5jdGlvbigpe3JldHVybiBkbih0aGlzLnB0cil9LFIucHJvdG90eXBlLm5vcm1hbGl6ZWQ9Ui5wcm90b3R5cGUubm9ybWFsaXplZD1mdW5jdGlvbigpe3JldHVybiEhQ28odGhpcy5wdHIpfSxSLnByb3RvdHlwZS5ieXRlX3N0cmlkZT1SLnByb3RvdHlwZS5ieXRlX3N0cmlkZT1mdW5jdGlvbigpe3JldHVybiB2bih0aGlzLnB0cil9LFIucHJvdG90eXBlLmJ5dGVfb2Zmc2V0PVIucHJvdG90eXBlLmJ5dGVfb2Zmc2V0PWZ1bmN0aW9uKCl7cmV0dXJuIFdvKHRoaXMucHRyKX0sUi5wcm90b3R5cGUudW5pcXVlX2lkPVIucHJvdG90eXBlLnVuaXF1ZV9pZD1mdW5jdGlvbigpe3JldHVybiBEYSh0aGlzLnB0cil9LFIucHJvdG90eXBlLl9fZGVzdHJveV9fPVIucHJvdG90eXBlLl9fZGVzdHJveV9fPWZ1bmN0aW9uKCl7emkodGhpcy5wdHIpfSxTLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGgucHJvdG90eXBlKSxTLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1TLFMucHJvdG90eXBlLl9fY2xhc3NfXz1TLFMuX19jYWNoZV9fPXt9LE8uQXR0cmlidXRlUXVhbnRpemF0aW9uVHJhbnNmb3JtPVMsUy5wcm90b3R5cGUuSW5pdEZyb21BdHRyaWJ1dGU9Uy5wcm90b3R5cGUuSW5pdEZyb21BdHRyaWJ1dGU9ZnVuY3Rpb24oail7dmFyIEs9dGhpcy5wdHI7cmV0dXJuIGomJnR5cGVvZiBqPT0ib2JqZWN0IiYmKGo9ai5wdHIpLCEhb2koSyxqKX0sUy5wcm90b3R5cGUucXVhbnRpemF0aW9uX2JpdHM9Uy5wcm90b3R5cGUucXVhbnRpemF0aW9uX2JpdHM9ZnVuY3Rpb24oKXtyZXR1cm4gQmEodGhpcy5wdHIpfSxTLnByb3RvdHlwZS5taW5fdmFsdWU9Uy5wcm90b3R5cGUubWluX3ZhbHVlPWZ1bmN0aW9uKGope3ZhciBLPXRoaXMucHRyO3JldHVybiBqJiZ0eXBlb2Ygaj09Im9iamVjdCImJihqPWoucHRyKSxhaShLLGopfSxTLnByb3RvdHlwZS5yYW5nZT1TLnByb3RvdHlwZS5yYW5nZT1mdW5jdGlvbigpe3JldHVybiBWaSh0aGlzLnB0cil9LFMucHJvdG90eXBlLl9fZGVzdHJveV9fPVMucHJvdG90eXBlLl9fZGVzdHJveV9fPWZ1bmN0aW9uKCl7U3IodGhpcy5wdHIpfSxDLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGgucHJvdG90eXBlKSxDLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1DLEMucHJvdG90eXBlLl9fY2xhc3NfXz1DLEMuX19jYWNoZV9fPXt9LE8uQXR0cmlidXRlT2N0YWhlZHJvblRyYW5zZm9ybT1DLEMucHJvdG90eXBlLkluaXRGcm9tQXR0cmlidXRlPUMucHJvdG90eXBlLkluaXRGcm9tQXR0cmlidXRlPWZ1bmN0aW9uKGope3ZhciBLPXRoaXMucHRyO3JldHVybiBqJiZ0eXBlb2Ygaj09Im9iamVjdCImJihqPWoucHRyKSwhIXdvKEssail9LEMucHJvdG90eXBlLnF1YW50aXphdGlvbl9iaXRzPUMucHJvdG90eXBlLnF1YW50aXphdGlvbl9iaXRzPWZ1bmN0aW9uKCl7cmV0dXJuIFVhKHRoaXMucHRyKX0sQy5wcm90b3R5cGUuX19kZXN0cm95X189Qy5wcm90b3R5cGUuX19kZXN0cm95X189ZnVuY3Rpb24oKXt2Yyh0aGlzLnB0cil9LEkucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoaC5wcm90b3R5cGUpLEkucHJvdG90eXBlLmNvbnN0cnVjdG9yPUksSS5wcm90b3R5cGUuX19jbGFzc19fPUksSS5fX2NhY2hlX189e30sTy5Qb2ludENsb3VkPUksSS5wcm90b3R5cGUubnVtX2F0dHJpYnV0ZXM9SS5wcm90b3R5cGUubnVtX2F0dHJpYnV0ZXM9ZnVuY3Rpb24oKXtyZXR1cm4gS24odGhpcy5wdHIpfSxJLnByb3RvdHlwZS5udW1fcG9pbnRzPUkucHJvdG90eXBlLm51bV9wb2ludHM9ZnVuY3Rpb24oKXtyZXR1cm4gQ3IodGhpcy5wdHIpfSxJLnByb3RvdHlwZS5fX2Rlc3Ryb3lfXz1JLnByb3RvdHlwZS5fX2Rlc3Ryb3lfXz1mdW5jdGlvbigpe0J0KHRoaXMucHRyKX0sTi5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShoLnByb3RvdHlwZSksTi5wcm90b3R5cGUuY29uc3RydWN0b3I9TixOLnByb3RvdHlwZS5fX2NsYXNzX189TixOLl9fY2FjaGVfXz17fSxPLk1lc2g9TixOLnByb3RvdHlwZS5udW1fZmFjZXM9Ti5wcm90b3R5cGUubnVtX2ZhY2VzPWZ1bmN0aW9uKCl7cmV0dXJuIENkKHRoaXMucHRyKX0sTi5wcm90b3R5cGUubnVtX2F0dHJpYnV0ZXM9Ti5wcm90b3R5cGUubnVtX2F0dHJpYnV0ZXM9ZnVuY3Rpb24oKXtyZXR1cm4gTWQodGhpcy5wdHIpfSxOLnByb3RvdHlwZS5udW1fcG9pbnRzPU4ucHJvdG90eXBlLm51bV9wb2ludHM9ZnVuY3Rpb24oKXtyZXR1cm4gTmQodGhpcy5wdHIpfSxOLnByb3RvdHlwZS5fX2Rlc3Ryb3lfXz1OLnByb3RvdHlwZS5fX2Rlc3Ryb3lfXz1mdW5jdGlvbigpe0RjKHRoaXMucHRyKX0sUC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShoLnByb3RvdHlwZSksUC5wcm90b3R5cGUuY29uc3RydWN0b3I9UCxQLnByb3RvdHlwZS5fX2NsYXNzX189UCxQLl9fY2FjaGVfXz17fSxPLk1ldGFkYXRhPVAsUC5wcm90b3R5cGUuX19kZXN0cm95X189UC5wcm90b3R5cGUuX19kZXN0cm95X189ZnVuY3Rpb24oKXtacyh0aGlzLnB0cil9LEYucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoaC5wcm90b3R5cGUpLEYucHJvdG90eXBlLmNvbnN0cnVjdG9yPUYsRi5wcm90b3R5cGUuX19jbGFzc19fPUYsRi5fX2NhY2hlX189e30sTy5TdGF0dXM9RixGLnByb3RvdHlwZS5jb2RlPUYucHJvdG90eXBlLmNvZGU9ZnVuY3Rpb24oKXtyZXR1cm4gSWQodGhpcy5wdHIpfSxGLnByb3RvdHlwZS5vaz1GLnByb3RvdHlwZS5vaz1mdW5jdGlvbigpe3JldHVybiEhUXModGhpcy5wdHIpfSxGLnByb3RvdHlwZS5lcnJvcl9tc2c9Ri5wcm90b3R5cGUuZXJyb3JfbXNnPWZ1bmN0aW9uKCl7cmV0dXJuIGEocmkodGhpcy5wdHIpKX0sRi5wcm90b3R5cGUuX19kZXN0cm95X189Ri5wcm90b3R5cGUuX19kZXN0cm95X189ZnVuY3Rpb24oKXtQZCh0aGlzLnB0cil9LEEucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoaC5wcm90b3R5cGUpLEEucHJvdG90eXBlLmNvbnN0cnVjdG9yPUEsQS5wcm90b3R5cGUuX19jbGFzc19fPUEsQS5fX2NhY2hlX189e30sTy5EcmFjb0Zsb2F0MzJBcnJheT1BLEEucHJvdG90eXBlLkdldFZhbHVlPUEucHJvdG90eXBlLkdldFZhbHVlPWZ1bmN0aW9uKGope3ZhciBLPXRoaXMucHRyO3JldHVybiBqJiZ0eXBlb2Ygaj09Im9iamVjdCImJihqPWoucHRyKSx2ZChLLGopfSxBLnByb3RvdHlwZS5zaXplPUEucHJvdG90eXBlLnNpemU9ZnVuY3Rpb24oKXtyZXR1cm4gaWkodGhpcy5wdHIpfSxBLnByb3RvdHlwZS5fX2Rlc3Ryb3lfXz1BLnByb3RvdHlwZS5fX2Rlc3Ryb3lfXz1mdW5jdGlvbigpe2NpKHRoaXMucHRyKX0seC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShoLnByb3RvdHlwZSkseC5wcm90b3R5cGUuY29uc3RydWN0b3I9eCx4LnByb3RvdHlwZS5fX2NsYXNzX189eCx4Ll9fY2FjaGVfXz17fSxPLkRyYWNvSW50OEFycmF5PXgseC5wcm90b3R5cGUuR2V0VmFsdWU9eC5wcm90b3R5cGUuR2V0VmFsdWU9ZnVuY3Rpb24oail7dmFyIEs9dGhpcy5wdHI7cmV0dXJuIGomJnR5cGVvZiBqPT0ib2JqZWN0IiYmKGo9ai5wdHIpLEZkKEssail9LHgucHJvdG90eXBlLnNpemU9eC5wcm90b3R5cGUuc2l6ZT1mdW5jdGlvbigpe3JldHVybiBEZCh0aGlzLnB0cil9LHgucHJvdG90eXBlLl9fZGVzdHJveV9fPXgucHJvdG90eXBlLl9fZGVzdHJveV9fPWZ1bmN0aW9uKCl7TGEodGhpcy5wdHIpfSxNLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGgucHJvdG90eXBlKSxNLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1NLE0ucHJvdG90eXBlLl9fY2xhc3NfXz1NLE0uX19jYWNoZV9fPXt9LE8uRHJhY29VSW50OEFycmF5PU0sTS5wcm90b3R5cGUuR2V0VmFsdWU9TS5wcm90b3R5cGUuR2V0VmFsdWU9ZnVuY3Rpb24oail7dmFyIEs9dGhpcy5wdHI7cmV0dXJuIGomJnR5cGVvZiBqPT0ib2JqZWN0IiYmKGo9ai5wdHIpLGVmKEssail9LE0ucHJvdG90eXBlLnNpemU9TS5wcm90b3R5cGUuc2l6ZT1mdW5jdGlvbigpe3JldHVybiBMYyh0aGlzLnB0cil9LE0ucHJvdG90eXBlLl9fZGVzdHJveV9fPU0ucHJvdG90eXBlLl9fZGVzdHJveV9fPWZ1bmN0aW9uKCl7QmQodGhpcy5wdHIpfSx2LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGgucHJvdG90eXBlKSx2LnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj12LHYucHJvdG90eXBlLl9fY2xhc3NfXz12LHYuX19jYWNoZV9fPXt9LE8uRHJhY29JbnQxNkFycmF5PXYsdi5wcm90b3R5cGUuR2V0VmFsdWU9di5wcm90b3R5cGUuR2V0VmFsdWU9ZnVuY3Rpb24oail7dmFyIEs9dGhpcy5wdHI7cmV0dXJuIGomJnR5cGVvZiBqPT0ib2JqZWN0IiYmKGo9ai5wdHIpLFVkKEssail9LHYucHJvdG90eXBlLnNpemU9di5wcm90b3R5cGUuc2l6ZT1mdW5jdGlvbigpe3JldHVybiBMZCh0aGlzLnB0cil9LHYucHJvdG90eXBlLl9fZGVzdHJveV9fPXYucHJvdG90eXBlLl9fZGVzdHJveV9fPWZ1bmN0aW9uKCl7amQodGhpcy5wdHIpfSxVLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGgucHJvdG90eXBlKSxVLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1VLFUucHJvdG90eXBlLl9fY2xhc3NfXz1VLFUuX19jYWNoZV9fPXt9LE8uRHJhY29VSW50MTZBcnJheT1VLFUucHJvdG90eXBlLkdldFZhbHVlPVUucHJvdG90eXBlLkdldFZhbHVlPWZ1bmN0aW9uKGope3ZhciBLPXRoaXMucHRyO3JldHVybiBqJiZ0eXBlb2Ygaj09Im9iamVjdCImJihqPWoucHRyKSxHZChLLGopfSxVLnByb3RvdHlwZS5zaXplPVUucHJvdG90eXBlLnNpemU9ZnVuY3Rpb24oKXtyZXR1cm4gVmQodGhpcy5wdHIpfSxVLnByb3RvdHlwZS5fX2Rlc3Ryb3lfXz1VLnByb3RvdHlwZS5fX2Rlc3Ryb3lfXz1mdW5jdGlvbigpe3RmKHRoaXMucHRyKX0sei5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShoLnByb3RvdHlwZSksei5wcm90b3R5cGUuY29uc3RydWN0b3I9eix6LnByb3RvdHlwZS5fX2NsYXNzX189eix6Ll9fY2FjaGVfXz17fSxPLkRyYWNvSW50MzJBcnJheT16LHoucHJvdG90eXBlLkdldFZhbHVlPXoucHJvdG90eXBlLkdldFZhbHVlPWZ1bmN0aW9uKGope3ZhciBLPXRoaXMucHRyO3JldHVybiBqJiZ0eXBlb2Ygaj09Im9iamVjdCImJihqPWoucHRyKSxLZChLLGopfSx6LnByb3RvdHlwZS5zaXplPXoucHJvdG90eXBlLnNpemU9ZnVuY3Rpb24oKXtyZXR1cm4gcWQodGhpcy5wdHIpfSx6LnByb3RvdHlwZS5fX2Rlc3Ryb3lfXz16LnByb3RvdHlwZS5fX2Rlc3Ryb3lfXz1mdW5jdGlvbigpe1dkKHRoaXMucHRyKX0sRC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShoLnByb3RvdHlwZSksRC5wcm90b3R5cGUuY29uc3RydWN0b3I9RCxELnByb3RvdHlwZS5fX2NsYXNzX189RCxELl9fY2FjaGVfXz17fSxPLkRyYWNvVUludDMyQXJyYXk9RCxELnByb3RvdHlwZS5HZXRWYWx1ZT1ELnByb3RvdHlwZS5HZXRWYWx1ZT1mdW5jdGlvbihqKXt2YXIgSz10aGlzLnB0cjtyZXR1cm4gaiYmdHlwZW9mIGo9PSJvYmplY3QiJiYoaj1qLnB0ciksWGQoSyxqKX0sRC5wcm90b3R5cGUuc2l6ZT1ELnByb3RvdHlwZS5zaXplPWZ1bmN0aW9uKCl7cmV0dXJuIFlkKHRoaXMucHRyKX0sRC5wcm90b3R5cGUuX19kZXN0cm95X189RC5wcm90b3R5cGUuX19kZXN0cm95X189ZnVuY3Rpb24oKXtIaSh0aGlzLnB0cil9LEcucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoaC5wcm90b3R5cGUpLEcucHJvdG90eXBlLmNvbnN0cnVjdG9yPUcsRy5wcm90b3R5cGUuX19jbGFzc19fPUcsRy5fX2NhY2hlX189e30sTy5NZXRhZGF0YVF1ZXJpZXI9RyxHLnByb3RvdHlwZS5IYXNFbnRyeT1HLnByb3RvdHlwZS5IYXNFbnRyeT1mdW5jdGlvbihqLEspe3ZhciB0ZT10aGlzLnB0cjtyZXR1cm4gT3QucHJlcGFyZSgpLGomJnR5cGVvZiBqPT0ib2JqZWN0IiYmKGo9ai5wdHIpLEs9SyYmdHlwZW9mIEs9PSJvYmplY3QiP0sucHRyOnAoSyksISFaZCh0ZSxqLEspfSxHLnByb3RvdHlwZS5HZXRJbnRFbnRyeT1HLnByb3RvdHlwZS5HZXRJbnRFbnRyeT1mdW5jdGlvbihqLEspe3ZhciB0ZT10aGlzLnB0cjtyZXR1cm4gT3QucHJlcGFyZSgpLGomJnR5cGVvZiBqPT0ib2JqZWN0IiYmKGo9ai5wdHIpLEs9SyYmdHlwZW9mIEs9PSJvYmplY3QiP0sucHRyOnAoSyksbGEodGUsaixLKX0sRy5wcm90b3R5cGUuR2V0SW50RW50cnlBcnJheT1HLnByb3RvdHlwZS5HZXRJbnRFbnRyeUFycmF5PWZ1bmN0aW9uKGosSyx0ZSl7dmFyIE1lPXRoaXMucHRyO090LnByZXBhcmUoKSxqJiZ0eXBlb2Ygaj09Im9iamVjdCImJihqPWoucHRyKSxLPUsmJnR5cGVvZiBLPT0ib2JqZWN0Ij9LLnB0cjpwKEspLHRlJiZ0eXBlb2YgdGU9PSJvYmplY3QiJiYodGU9dGUucHRyKSxuZihNZSxqLEssdGUpfSxHLnByb3RvdHlwZS5HZXREb3VibGVFbnRyeT1HLnByb3RvdHlwZS5HZXREb3VibGVFbnRyeT1mdW5jdGlvbihqLEspe3ZhciB0ZT10aGlzLnB0cjtyZXR1cm4gT3QucHJlcGFyZSgpLGomJnR5cGVvZiBqPT0ib2JqZWN0IiYmKGo9ai5wdHIpLEs9SyYmdHlwZW9mIEs9PSJvYmplY3QiP0sucHRyOnAoSyksUWQodGUsaixLKX0sRy5wcm90b3R5cGUuR2V0U3RyaW5nRW50cnk9Ry5wcm90b3R5cGUuR2V0U3RyaW5nRW50cnk9ZnVuY3Rpb24oaixLKXt2YXIgdGU9dGhpcy5wdHI7cmV0dXJuIE90LnByZXBhcmUoKSxqJiZ0eXBlb2Ygaj09Im9iamVjdCImJihqPWoucHRyKSxLPUsmJnR5cGVvZiBLPT0ib2JqZWN0Ij9LLnB0cjpwKEspLGEoJGQodGUsaixLKSl9LEcucHJvdG90eXBlLk51bUVudHJpZXM9Ry5wcm90b3R5cGUuTnVtRW50cmllcz1mdW5jdGlvbihqKXt2YXIgSz10aGlzLnB0cjtyZXR1cm4gaiYmdHlwZW9mIGo9PSJvYmplY3QiJiYoaj1qLnB0ciksZXUoSyxqKX0sRy5wcm90b3R5cGUuR2V0RW50cnlOYW1lPUcucHJvdG90eXBlLkdldEVudHJ5TmFtZT1mdW5jdGlvbihqLEspe3ZhciB0ZT10aGlzLnB0cjtyZXR1cm4gaiYmdHlwZW9mIGo9PSJvYmplY3QiJiYoaj1qLnB0ciksSyYmdHlwZW9mIEs9PSJvYmplY3QiJiYoSz1LLnB0ciksYShYbyh0ZSxqLEspKX0sRy5wcm90b3R5cGUuX19kZXN0cm95X189Ry5wcm90b3R5cGUuX19kZXN0cm95X189ZnVuY3Rpb24oKXtvZih0aGlzLnB0cil9LEgucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoaC5wcm90b3R5cGUpLEgucHJvdG90eXBlLmNvbnN0cnVjdG9yPUgsSC5wcm90b3R5cGUuX19jbGFzc19fPUgsSC5fX2NhY2hlX189e30sTy5EZWNvZGVyPUgsSC5wcm90b3R5cGUuRGVjb2RlQXJyYXlUb1BvaW50Q2xvdWQ9SC5wcm90b3R5cGUuRGVjb2RlQXJyYXlUb1BvaW50Q2xvdWQ9ZnVuY3Rpb24oaixLLHRlKXt2YXIgTWU9dGhpcy5wdHI7cmV0dXJuIE90LnByZXBhcmUoKSx0eXBlb2Ygaj09Im9iamVjdCImJihqPXkoaikpLEsmJnR5cGVvZiBLPT0ib2JqZWN0IiYmKEs9Sy5wdHIpLHRlJiZ0eXBlb2YgdGU9PSJvYmplY3QiJiYodGU9dGUucHRyKSxiKEtpKE1lLGosSyx0ZSksRil9LEgucHJvdG90eXBlLkRlY29kZUFycmF5VG9NZXNoPUgucHJvdG90eXBlLkRlY29kZUFycmF5VG9NZXNoPWZ1bmN0aW9uKGosSyx0ZSl7dmFyIE1lPXRoaXMucHRyO3JldHVybiBPdC5wcmVwYXJlKCksdHlwZW9mIGo9PSJvYmplY3QiJiYoaj15KGopKSxLJiZ0eXBlb2YgSz09Im9iamVjdCImJihLPUsucHRyKSx0ZSYmdHlwZW9mIHRlPT0ib2JqZWN0IiYmKHRlPXRlLnB0ciksYih0dShNZSxqLEssdGUpLEYpfSxILnByb3RvdHlwZS5HZXRBdHRyaWJ1dGVJZD1ILnByb3RvdHlwZS5HZXRBdHRyaWJ1dGVJZD1mdW5jdGlvbihqLEspe3ZhciB0ZT10aGlzLnB0cjtyZXR1cm4gaiYmdHlwZW9mIGo9PSJvYmplY3QiJiYoaj1qLnB0ciksSyYmdHlwZW9mIEs9PSJvYmplY3QiJiYoSz1LLnB0ciksemModGUsaixLKX0sSC5wcm90b3R5cGUuR2V0QXR0cmlidXRlSWRCeU5hbWU9SC5wcm90b3R5cGUuR2V0QXR0cmlidXRlSWRCeU5hbWU9ZnVuY3Rpb24oaixLKXt2YXIgdGU9dGhpcy5wdHI7cmV0dXJuIE90LnByZXBhcmUoKSxqJiZ0eXBlb2Ygaj09Im9iamVjdCImJihqPWoucHRyKSxLPUsmJnR5cGVvZiBLPT0ib2JqZWN0Ij9LLnB0cjpwKEspLG51KHRlLGosSyl9LEgucHJvdG90eXBlLkdldEF0dHJpYnV0ZUlkQnlNZXRhZGF0YUVudHJ5PUgucHJvdG90eXBlLkdldEF0dHJpYnV0ZUlkQnlNZXRhZGF0YUVudHJ5PWZ1bmN0aW9uKGosSyx0ZSl7dmFyIE1lPXRoaXMucHRyO3JldHVybiBPdC5wcmVwYXJlKCksaiYmdHlwZW9mIGo9PSJvYmplY3QiJiYoaj1qLnB0ciksSz1LJiZ0eXBlb2YgSz09Im9iamVjdCI/Sy5wdHI6cChLKSx0ZT10ZSYmdHlwZW9mIHRlPT0ib2JqZWN0Ij90ZS5wdHI6cCh0ZSkscmYoTWUsaixLLHRlKX0sSC5wcm90b3R5cGUuR2V0QXR0cmlidXRlPUgucHJvdG90eXBlLkdldEF0dHJpYnV0ZT1mdW5jdGlvbihqLEspe3ZhciB0ZT10aGlzLnB0cjtyZXR1cm4gaiYmdHlwZW9mIGo9PSJvYmplY3QiJiYoaj1qLnB0ciksSyYmdHlwZW9mIEs9PSJvYmplY3QiJiYoSz1LLnB0ciksYihjZih0ZSxqLEspLFIpfSxILnByb3RvdHlwZS5HZXRBdHRyaWJ1dGVCeVVuaXF1ZUlkPUgucHJvdG90eXBlLkdldEF0dHJpYnV0ZUJ5VW5pcXVlSWQ9ZnVuY3Rpb24oaixLKXt2YXIgdGU9dGhpcy5wdHI7cmV0dXJuIGomJnR5cGVvZiBqPT0ib2JqZWN0IiYmKGo9ai5wdHIpLEsmJnR5cGVvZiBLPT0ib2JqZWN0IiYmKEs9Sy5wdHIpLGIob3UodGUsaixLKSxSKX0sSC5wcm90b3R5cGUuR2V0TWV0YWRhdGE9SC5wcm90b3R5cGUuR2V0TWV0YWRhdGE9ZnVuY3Rpb24oail7dmFyIEs9dGhpcy5wdHI7cmV0dXJuIGomJnR5cGVvZiBqPT0ib2JqZWN0IiYmKGo9ai5wdHIpLGIoYXUoSyxqKSxQKX0sSC5wcm90b3R5cGUuR2V0QXR0cmlidXRlTWV0YWRhdGE9SC5wcm90b3R5cGUuR2V0QXR0cmlidXRlTWV0YWRhdGE9ZnVuY3Rpb24oaixLKXt2YXIgdGU9dGhpcy5wdHI7cmV0dXJuIGomJnR5cGVvZiBqPT0ib2JqZWN0IiYmKGo9ai5wdHIpLEsmJnR5cGVvZiBLPT0ib2JqZWN0IiYmKEs9Sy5wdHIpLGIoR2ModGUsaixLKSxQKX0sSC5wcm90b3R5cGUuR2V0RmFjZUZyb21NZXNoPUgucHJvdG90eXBlLkdldEZhY2VGcm9tTWVzaD1mdW5jdGlvbihqLEssdGUpe3ZhciBNZT10aGlzLnB0cjtyZXR1cm4gaiYmdHlwZW9mIGo9PSJvYmplY3QiJiYoaj1qLnB0ciksSyYmdHlwZW9mIEs9PSJvYmplY3QiJiYoSz1LLnB0ciksdGUmJnR5cGVvZiB0ZT09Im9iamVjdCImJih0ZT10ZS5wdHIpLCEhTW8oTWUsaixLLHRlKX0sSC5wcm90b3R5cGUuR2V0VHJpYW5nbGVTdHJpcHNGcm9tTWVzaD1ILnByb3RvdHlwZS5HZXRUcmlhbmdsZVN0cmlwc0Zyb21NZXNoPWZ1bmN0aW9uKGosSyl7dmFyIHRlPXRoaXMucHRyO3JldHVybiBqJiZ0eXBlb2Ygaj09Im9iamVjdCImJihqPWoucHRyKSxLJiZ0eXBlb2YgSz09Im9iamVjdCImJihLPUsucHRyKSxWYyh0ZSxqLEspfSxILnByb3RvdHlwZS5HZXRUcmlhbmdsZXNVSW50MTZBcnJheT1ILnByb3RvdHlwZS5HZXRUcmlhbmdsZXNVSW50MTZBcnJheT1mdW5jdGlvbihqLEssdGUpe3ZhciBNZT10aGlzLnB0cjtyZXR1cm4gaiYmdHlwZW9mIGo9PSJvYmplY3QiJiYoaj1qLnB0ciksSyYmdHlwZW9mIEs9PSJvYmplY3QiJiYoSz1LLnB0ciksdGUmJnR5cGVvZiB0ZT09Im9iamVjdCImJih0ZT10ZS5wdHIpLCEhcnUoTWUsaixLLHRlKX0sSC5wcm90b3R5cGUuR2V0VHJpYW5nbGVzVUludDMyQXJyYXk9SC5wcm90b3R5cGUuR2V0VHJpYW5nbGVzVUludDMyQXJyYXk9ZnVuY3Rpb24oaixLLHRlKXt2YXIgTWU9dGhpcy5wdHI7cmV0dXJuIGomJnR5cGVvZiBqPT0ib2JqZWN0IiYmKGo9ai5wdHIpLEsmJnR5cGVvZiBLPT0ib2JqZWN0IiYmKEs9Sy5wdHIpLHRlJiZ0eXBlb2YgdGU9PSJvYmplY3QiJiYodGU9dGUucHRyKSwhIWl1KE1lLGosSyx0ZSl9LEgucHJvdG90eXBlLkdldEF0dHJpYnV0ZUZsb2F0PUgucHJvdG90eXBlLkdldEF0dHJpYnV0ZUZsb2F0PWZ1bmN0aW9uKGosSyx0ZSl7dmFyIE1lPXRoaXMucHRyO3JldHVybiBqJiZ0eXBlb2Ygaj09Im9iamVjdCImJihqPWoucHRyKSxLJiZ0eXBlb2YgSz09Im9iamVjdCImJihLPUsucHRyKSx0ZSYmdHlwZW9mIHRlPT0ib2JqZWN0IiYmKHRlPXRlLnB0ciksISFjdShNZSxqLEssdGUpfSxILnByb3RvdHlwZS5HZXRBdHRyaWJ1dGVGbG9hdEZvckFsbFBvaW50cz1ILnByb3RvdHlwZS5HZXRBdHRyaWJ1dGVGbG9hdEZvckFsbFBvaW50cz1mdW5jdGlvbihqLEssdGUpe3ZhciBNZT10aGlzLnB0cjtyZXR1cm4gaiYmdHlwZW9mIGo9PSJvYmplY3QiJiYoaj1qLnB0ciksSyYmdHlwZW9mIEs9PSJvYmplY3QiJiYoSz1LLnB0ciksdGUmJnR5cGVvZiB0ZT09Im9iamVjdCImJih0ZT10ZS5wdHIpLCEhaGEoTWUsaixLLHRlKX0sSC5wcm90b3R5cGUuR2V0QXR0cmlidXRlSW50Rm9yQWxsUG9pbnRzPUgucHJvdG90eXBlLkdldEF0dHJpYnV0ZUludEZvckFsbFBvaW50cz1mdW5jdGlvbihqLEssdGUpe3ZhciBNZT10aGlzLnB0cjtyZXR1cm4gaiYmdHlwZW9mIGo9PSJvYmplY3QiJiYoaj1qLnB0ciksSyYmdHlwZW9mIEs9PSJvYmplY3QiJiYoSz1LLnB0ciksdGUmJnR5cGVvZiB0ZT09Im9iamVjdCImJih0ZT10ZS5wdHIpLCEhc3UoTWUsaixLLHRlKX0sSC5wcm90b3R5cGUuR2V0QXR0cmlidXRlSW50OEZvckFsbFBvaW50cz1ILnByb3RvdHlwZS5HZXRBdHRyaWJ1dGVJbnQ4Rm9yQWxsUG9pbnRzPWZ1bmN0aW9uKGosSyx0ZSl7dmFyIE1lPXRoaXMucHRyO3JldHVybiBqJiZ0eXBlb2Ygaj09Im9iamVjdCImJihqPWoucHRyKSxLJiZ0eXBlb2YgSz09Im9iamVjdCImJihLPUsucHRyKSx0ZSYmdHlwZW9mIHRlPT0ib2JqZWN0IiYmKHRlPXRlLnB0ciksISFmdShNZSxqLEssdGUpfSxILnByb3RvdHlwZS5HZXRBdHRyaWJ1dGVVSW50OEZvckFsbFBvaW50cz1ILnByb3RvdHlwZS5HZXRBdHRyaWJ1dGVVSW50OEZvckFsbFBvaW50cz1mdW5jdGlvbihqLEssdGUpe3ZhciBNZT10aGlzLnB0cjtyZXR1cm4gaiYmdHlwZW9mIGo9PSJvYmplY3QiJiYoaj1qLnB0ciksSyYmdHlwZW9mIEs9PSJvYmplY3QiJiYoSz1LLnB0ciksdGUmJnR5cGVvZiB0ZT09Im9iamVjdCImJih0ZT10ZS5wdHIpLCEhZHUoTWUsaixLLHRlKX0sSC5wcm90b3R5cGUuR2V0QXR0cmlidXRlSW50MTZGb3JBbGxQb2ludHM9SC5wcm90b3R5cGUuR2V0QXR0cmlidXRlSW50MTZGb3JBbGxQb2ludHM9ZnVuY3Rpb24oaixLLHRlKXt2YXIgTWU9dGhpcy5wdHI7cmV0dXJuIGomJnR5cGVvZiBqPT0ib2JqZWN0IiYmKGo9ai5wdHIpLEsmJnR5cGVvZiBLPT0ib2JqZWN0IiYmKEs9Sy5wdHIpLHRlJiZ0eXBlb2YgdGU9PSJvYmplY3QiJiYodGU9dGUucHRyKSwhIXFpKE1lLGosSyx0ZSl9LEgucHJvdG90eXBlLkdldEF0dHJpYnV0ZVVJbnQxNkZvckFsbFBvaW50cz1ILnByb3RvdHlwZS5HZXRBdHRyaWJ1dGVVSW50MTZGb3JBbGxQb2ludHM9ZnVuY3Rpb24oaixLLHRlKXt2YXIgTWU9dGhpcy5wdHI7cmV0dXJuIGomJnR5cGVvZiBqPT0ib2JqZWN0IiYmKGo9ai5wdHIpLEsmJnR5cGVvZiBLPT0ib2JqZWN0IiYmKEs9Sy5wdHIpLHRlJiZ0eXBlb2YgdGU9PSJvYmplY3QiJiYodGU9dGUucHRyKSwhIXV1KE1lLGosSyx0ZSl9LEgucHJvdG90eXBlLkdldEF0dHJpYnV0ZUludDMyRm9yQWxsUG9pbnRzPUgucHJvdG90eXBlLkdldEF0dHJpYnV0ZUludDMyRm9yQWxsUG9pbnRzPWZ1bmN0aW9uKGosSyx0ZSl7dmFyIE1lPXRoaXMucHRyO3JldHVybiBqJiZ0eXBlb2Ygaj09Im9iamVjdCImJihqPWoucHRyKSxLJiZ0eXBlb2YgSz09Im9iamVjdCImJihLPUsucHRyKSx0ZSYmdHlwZW9mIHRlPT0ib2JqZWN0IiYmKHRlPXRlLnB0ciksISFNcihNZSxqLEssdGUpfSxILnByb3RvdHlwZS5HZXRBdHRyaWJ1dGVVSW50MzJGb3JBbGxQb2ludHM9SC5wcm90b3R5cGUuR2V0QXR0cmlidXRlVUludDMyRm9yQWxsUG9pbnRzPWZ1bmN0aW9uKGosSyx0ZSl7dmFyIE1lPXRoaXMucHRyO3JldHVybiBqJiZ0eXBlb2Ygaj09Im9iamVjdCImJihqPWoucHRyKSxLJiZ0eXBlb2YgSz09Im9iamVjdCImJihLPUsucHRyKSx0ZSYmdHlwZW9mIHRlPT0ib2JqZWN0IiYmKHRlPXRlLnB0ciksISFsdShNZSxqLEssdGUpfSxILnByb3RvdHlwZS5HZXRBdHRyaWJ1dGVEYXRhQXJyYXlGb3JBbGxQb2ludHM9SC5wcm90b3R5cGUuR2V0QXR0cmlidXRlRGF0YUFycmF5Rm9yQWxsUG9pbnRzPWZ1bmN0aW9uKGosSyx0ZSxNZSxjdCl7dmFyIHB0PXRoaXMucHRyO3JldHVybiBqJiZ0eXBlb2Ygaj09Im9iamVjdCImJihqPWoucHRyKSxLJiZ0eXBlb2YgSz09Im9iamVjdCImJihLPUsucHRyKSx0ZSYmdHlwZW9mIHRlPT0ib2JqZWN0IiYmKHRlPXRlLnB0ciksTWUmJnR5cGVvZiBNZT09Im9iamVjdCImJihNZT1NZS5wdHIpLGN0JiZ0eXBlb2YgY3Q9PSJvYmplY3QiJiYoY3Q9Y3QucHRyKSwhIWh1KHB0LGosSyx0ZSxNZSxjdCl9LEgucHJvdG90eXBlLlNraXBBdHRyaWJ1dGVUcmFuc2Zvcm09SC5wcm90b3R5cGUuU2tpcEF0dHJpYnV0ZVRyYW5zZm9ybT1mdW5jdGlvbihqKXt2YXIgSz10aGlzLnB0cjtqJiZ0eXBlb2Ygaj09Im9iamVjdCImJihqPWoucHRyKSxtdShLLGopfSxILnByb3RvdHlwZS5HZXRFbmNvZGVkR2VvbWV0cnlUeXBlX0RlcHJlY2F0ZWQ9SC5wcm90b3R5cGUuR2V0RW5jb2RlZEdlb21ldHJ5VHlwZV9EZXByZWNhdGVkPWZ1bmN0aW9uKGope3ZhciBLPXRoaXMucHRyO3JldHVybiBqJiZ0eXBlb2Ygaj09Im9iamVjdCImJihqPWoucHRyKSxidShLLGopfSxILnByb3RvdHlwZS5EZWNvZGVCdWZmZXJUb1BvaW50Q2xvdWQ9SC5wcm90b3R5cGUuRGVjb2RlQnVmZmVyVG9Qb2ludENsb3VkPWZ1bmN0aW9uKGosSyl7dmFyIHRlPXRoaXMucHRyO3JldHVybiBqJiZ0eXBlb2Ygaj09Im9iamVjdCImJihqPWoucHRyKSxLJiZ0eXBlb2YgSz09Im9iamVjdCImJihLPUsucHRyKSxiKHB1KHRlLGosSyksRil9LEgucHJvdG90eXBlLkRlY29kZUJ1ZmZlclRvTWVzaD1ILnByb3RvdHlwZS5EZWNvZGVCdWZmZXJUb01lc2g9ZnVuY3Rpb24oaixLKXt2YXIgdGU9dGhpcy5wdHI7cmV0dXJuIGomJnR5cGVvZiBqPT0ib2JqZWN0IiYmKGo9ai5wdHIpLEsmJnR5cGVvZiBLPT0ib2JqZWN0IiYmKEs9Sy5wdHIpLGIoZ3UodGUsaixLKSxGKX0sSC5wcm90b3R5cGUuX19kZXN0cm95X189SC5wcm90b3R5cGUuX19kZXN0cm95X189ZnVuY3Rpb24oKXtfdSh0aGlzLnB0cil9LChmdW5jdGlvbigpe2Z1bmN0aW9uIGooKXtPLkFUVFJJQlVURV9JTlZBTElEX1RSQU5TRk9STT15dSgpLE8uQVRUUklCVVRFX05PX1RSQU5TRk9STT1BdSgpLE8uQVRUUklCVVRFX1FVQU5USVpBVElPTl9UUkFOU0ZPUk09d3UoKSxPLkFUVFJJQlVURV9PQ1RBSEVEUk9OX1RSQU5TRk9STT1UdSgpLE8uSU5WQUxJRD1maSgpLE8uUE9TSVRJT049RXUoKSxPLk5PUk1BTD1SdSgpLE8uQ09MT1I9V2koKSxPLlRFWF9DT09SRD1IYygpLE8uR0VORVJJQz14dSgpLE8uSU5WQUxJRF9HRU9NRVRSWV9UWVBFPXNmKCksTy5QT0lOVF9DTE9VRD1PdSgpLE8uVFJJQU5HVUxBUl9NRVNIPVN1KCksTy5EVF9JTlZBTElEPUN1KCksTy5EVF9JTlQ4PU11KCksTy5EVF9VSU5UOD1OdSgpLE8uRFRfSU5UMTY9SXUoKSxPLkRUX1VJTlQxNj1QdSgpLE8uRFRfSU5UMzI9a3UoKSxPLkRUX1VJTlQzMj1mZigpLE8uRFRfSU5UNjQ9dnUoKSxPLkRUX1VJTlQ2ND1GdSgpLE8uRFRfRkxPQVQzMj1EdSgpLE8uRFRfRkxPQVQ2ND1CdSgpLE8uRFRfQk9PTD1VdSgpLE8uRFRfVFlQRVNfQ09VTlQ9THUoKSxPLk9LPWp1KCksTy5EUkFDT19FUlJPUj1YaSgpLE8uSU9fRVJST1I9enUoKSxPLklOVkFMSURfUEFSQU1FVEVSPUd1KCksTy5VTlNVUFBPUlRFRF9WRVJTSU9OPVZ1KCksTy5VTktOT1dOX1ZFUlNJT049SHUoKX1xZT9qKCk6UHQudW5zaGlmdChqKX0pKCksdHlwZW9mIE8ub25Nb2R1bGVQYXJzZWQ9PSJmdW5jdGlvbiImJk8ub25Nb2R1bGVQYXJzZWQoKSxPLkRlY29kZXIucHJvdG90eXBlLkdldEVuY29kZWRHZW9tZXRyeVR5cGU9ZnVuY3Rpb24oail7aWYoai5fX2NsYXNzX18mJmouX19jbGFzc19fPT09Ty5EZWNvZGVyQnVmZmVyKXJldHVybiBPLkRlY29kZXIucHJvdG90eXBlLkdldEVuY29kZWRHZW9tZXRyeVR5cGVfRGVwcmVjYXRlZChqKTtpZig4PmouYnl0ZUxlbmd0aClyZXR1cm4gTy5JTlZBTElEX0dFT01FVFJZX1RZUEU7c3dpdGNoKGpbN10pe2Nhc2UgMDpyZXR1cm4gTy5QT0lOVF9DTE9VRDtjYXNlIDE6cmV0dXJuIE8uVFJJQU5HVUxBUl9NRVNIO2RlZmF1bHQ6cmV0dXJuIE8uSU5WQUxJRF9HRU9NRVRSWV9UWVBFfX0sdC5yZWFkeX19KSgpO3R5cGVvZiBBZD09Im9iamVjdCImJnR5cGVvZiBmeT09Im9iamVjdCI/ZnkuZXhwb3J0cz1zeTp0eXBlb2YgZGVmaW5lPT0iZnVuY3Rpb24iJiZkZWZpbmUuYW1kP2RlZmluZShbXSxmdW5jdGlvbigpe3JldHVybiBzeX0pOnR5cGVvZiBBZD09Im9iamVjdCImJihBZC5EcmFjb0RlY29kZXJNb2R1bGU9c3kpfSk7dmFyIGx5PXt9O3J0KGx5LHtkZWZhdWx0OigpPT5xan0pO2Z1bmN0aW9uIFVqKGUsdCl7bGV0IG49ZS5udW1fcG9pbnRzKCksbz1lLm51bV9mYWNlcygpLGE9bmV3IE50LkRyYWNvSW50MzJBcnJheSxyPW8qMyxpPWtlLmNyZWF0ZVR5cGVkQXJyYXkobixyKSxmPTA7Zm9yKGxldCBkPTA7ZDxvOysrZCl0LkdldEZhY2VGcm9tTWVzaChlLGQsYSksaVtmKzBdPWEuR2V0VmFsdWUoMCksaVtmKzFdPWEuR2V0VmFsdWUoMSksaVtmKzJdPWEuR2V0VmFsdWUoMiksZis9MztyZXR1cm4gTnQuZGVzdHJveShhKSx7dHlwZWRBcnJheTppLG51bWJlck9mSW5kaWNlczpyfX1mdW5jdGlvbiBMaihlLHQsbixvLGEpe2xldCByLGk7by5xdWFudGl6YXRpb25CaXRzPD04PyhpPW5ldyBOdC5EcmFjb1VJbnQ4QXJyYXkscj1uZXcgVWludDhBcnJheShhKSx0LkdldEF0dHJpYnV0ZVVJbnQ4Rm9yQWxsUG9pbnRzKGUsbixpKSk6by5xdWFudGl6YXRpb25CaXRzPD0xNj8oaT1uZXcgTnQuRHJhY29VSW50MTZBcnJheSxyPW5ldyBVaW50MTZBcnJheShhKSx0LkdldEF0dHJpYnV0ZVVJbnQxNkZvckFsbFBvaW50cyhlLG4saSkpOihpPW5ldyBOdC5EcmFjb0Zsb2F0MzJBcnJheSxyPW5ldyBGbG9hdDMyQXJyYXkoYSksdC5HZXRBdHRyaWJ1dGVGbG9hdEZvckFsbFBvaW50cyhlLG4saSkpO2ZvcihsZXQgZj0wO2Y8YTsrK2YpcltmXT1pLkdldFZhbHVlKGYpO3JldHVybiBOdC5kZXN0cm95KGkpLHJ9ZnVuY3Rpb24gamooZSx0LG4sbyl7bGV0IGEscjtzd2l0Y2gobi5kYXRhX3R5cGUoKSl7Y2FzZSAxOmNhc2UgMTE6cj1uZXcgTnQuRHJhY29JbnQ4QXJyYXksYT1uZXcgSW50OEFycmF5KG8pLHQuR2V0QXR0cmlidXRlSW50OEZvckFsbFBvaW50cyhlLG4scik7YnJlYWs7Y2FzZSAyOnI9bmV3IE50LkRyYWNvVUludDhBcnJheSxhPW5ldyBVaW50OEFycmF5KG8pLHQuR2V0QXR0cmlidXRlVUludDhGb3JBbGxQb2ludHMoZSxuLHIpO2JyZWFrO2Nhc2UgMzpyPW5ldyBOdC5EcmFjb0ludDE2QXJyYXksYT1uZXcgSW50MTZBcnJheShvKSx0LkdldEF0dHJpYnV0ZUludDE2Rm9yQWxsUG9pbnRzKGUsbixyKTticmVhaztjYXNlIDQ6cj1uZXcgTnQuRHJhY29VSW50MTZBcnJheSxhPW5ldyBVaW50MTZBcnJheShvKSx0LkdldEF0dHJpYnV0ZVVJbnQxNkZvckFsbFBvaW50cyhlLG4scik7YnJlYWs7Y2FzZSA1OmNhc2UgNzpyPW5ldyBOdC5EcmFjb0ludDMyQXJyYXksYT1uZXcgSW50MzJBcnJheShvKSx0LkdldEF0dHJpYnV0ZUludDMyRm9yQWxsUG9pbnRzKGUsbixyKTticmVhaztjYXNlIDY6Y2FzZSA4OnI9bmV3IE50LkRyYWNvVUludDMyQXJyYXksYT1uZXcgVWludDMyQXJyYXkobyksdC5HZXRBdHRyaWJ1dGVVSW50MzJGb3JBbGxQb2ludHMoZSxuLHIpO2JyZWFrO2Nhc2UgOTpjYXNlIDEwOnI9bmV3IE50LkRyYWNvRmxvYXQzMkFycmF5LGE9bmV3IEZsb2F0MzJBcnJheShvKSx0LkdldEF0dHJpYnV0ZUZsb2F0Rm9yQWxsUG9pbnRzKGUsbixyKTticmVha31mb3IobGV0IGk9MDtpPG87KytpKWFbaV09ci5HZXRWYWx1ZShpKTtyZXR1cm4gTnQuZGVzdHJveShyKSxhfWZ1bmN0aW9uIHgyKGUsdCxuKXtsZXQgbz1lLm51bV9wb2ludHMoKSxhPW4ubnVtX2NvbXBvbmVudHMoKSxyLGk9bmV3IE50LkF0dHJpYnV0ZVF1YW50aXphdGlvblRyYW5zZm9ybTtpZihpLkluaXRGcm9tQXR0cmlidXRlKG4pKXtsZXQgdT1uZXcgQXJyYXkoYSk7Zm9yKGxldCBsPTA7bDxhOysrbCl1W2xdPWkubWluX3ZhbHVlKGwpO3I9e3F1YW50aXphdGlvbkJpdHM6aS5xdWFudGl6YXRpb25fYml0cygpLG1pblZhbHVlczp1LHJhbmdlOmkucmFuZ2UoKSxvY3RFbmNvZGVkOiExfX1OdC5kZXN0cm95KGkpLGk9bmV3IE50LkF0dHJpYnV0ZU9jdGFoZWRyb25UcmFuc2Zvcm0saS5Jbml0RnJvbUF0dHJpYnV0ZShuKSYmKHI9e3F1YW50aXphdGlvbkJpdHM6aS5xdWFudGl6YXRpb25fYml0cygpLG9jdEVuY29kZWQ6ITB9KSxOdC5kZXN0cm95KGkpO2xldCBmPW8qYSxkO2cocik/ZD1MaihlLHQsbixyLGYpOmQ9amooZSx0LG4sZik7bGV0IGM9bmUuZnJvbVR5cGVkQXJyYXkoZCk7cmV0dXJue2FycmF5OmQsZGF0YTp7Y29tcG9uZW50c1BlckF0dHJpYnV0ZTphLGNvbXBvbmVudERhdGF0eXBlOmMsYnl0ZU9mZnNldDpuLmJ5dGVfb2Zmc2V0KCksYnl0ZVN0cmlkZTpuZS5nZXRTaXplSW5CeXRlcyhjKSphLG5vcm1hbGl6ZWQ6bi5ub3JtYWxpemVkKCkscXVhbnRpemF0aW9uOnJ9fX1mdW5jdGlvbiB6aihlKXtsZXQgdD1uZXcgTnQuRGVjb2RlcjtlLmRlcXVhbnRpemVJblNoYWRlciYmKHQuU2tpcEF0dHJpYnV0ZVRyYW5zZm9ybShOdC5QT1NJVElPTiksdC5Ta2lwQXR0cmlidXRlVHJhbnNmb3JtKE50Lk5PUk1BTCkpO2xldCBuPW5ldyBOdC5EZWNvZGVyQnVmZmVyO2lmKG4uSW5pdChlLmJ1ZmZlcixlLmJ1ZmZlci5sZW5ndGgpLHQuR2V0RW5jb2RlZEdlb21ldHJ5VHlwZShuKSE9PU50LlBPSU5UX0NMT1VEKXRocm93IG5ldyB1dCgiRHJhY28gZ2VvbWV0cnkgdHlwZSBtdXN0IGJlIFBPSU5UX0NMT1VELiIpO2xldCBhPW5ldyBOdC5Qb2ludENsb3VkLHI9dC5EZWNvZGVCdWZmZXJUb1BvaW50Q2xvdWQobixhKTtpZighci5vaygpfHxhLnB0cj09PTApdGhyb3cgbmV3IHV0KGBFcnJvciBkZWNvZGluZyBkcmFjbyBwb2ludCBjbG91ZDogJHtyLmVycm9yX21zZygpfWApO050LmRlc3Ryb3kobik7bGV0IGk9e30sZj1lLnByb3BlcnRpZXM7Zm9yKGxldCBkIGluIGYpaWYoZi5oYXNPd25Qcm9wZXJ0eShkKSl7bGV0IGM7aWYoZD09PSJQT1NJVElPTiJ8fGQ9PT0iTk9STUFMIil7bGV0IHU9dC5HZXRBdHRyaWJ1dGVJZChhLE50W2RdKTtjPXQuR2V0QXR0cmlidXRlKGEsdSl9ZWxzZXtsZXQgdT1mW2RdO2M9dC5HZXRBdHRyaWJ1dGVCeVVuaXF1ZUlkKGEsdSl9aVtkXT14MihhLHQsYyl9cmV0dXJuIE50LmRlc3Ryb3koYSksTnQuZGVzdHJveSh0KSxpfWZ1bmN0aW9uIEdqKGUpe2xldCB0PW5ldyBOdC5EZWNvZGVyO2lmKGUuZGVxdWFudGl6ZUluU2hhZGVyKWZvcihsZXQgdT0wO3U8ZS5hdHRyaWJ1dGVzVG9Ta2lwVHJhbnNmb3JtLmxlbmd0aDsrK3UpdC5Ta2lwQXR0cmlidXRlVHJhbnNmb3JtKE50W2UuYXR0cmlidXRlc1RvU2tpcFRyYW5zZm9ybVt1XV0pO2xldCBuPWUuYnVmZmVyVmlldyxvPW5ldyBOdC5EZWNvZGVyQnVmZmVyO2lmKG8uSW5pdChlLmFycmF5LG4uYnl0ZUxlbmd0aCksdC5HZXRFbmNvZGVkR2VvbWV0cnlUeXBlKG8pIT09TnQuVFJJQU5HVUxBUl9NRVNIKXRocm93IG5ldyB1dCgiVW5zdXBwb3J0ZWQgZHJhY28gbWVzaCBnZW9tZXRyeSB0eXBlLiIpO2xldCByPW5ldyBOdC5NZXNoLGk9dC5EZWNvZGVCdWZmZXJUb01lc2gobyxyKTtpZighaS5vaygpfHxyLnB0cj09PTApdGhyb3cgbmV3IHV0KGBFcnJvciBkZWNvZGluZyBkcmFjbyBtZXNoIGdlb21ldHJ5OiAke2kuZXJyb3JfbXNnKCl9YCk7TnQuZGVzdHJveShvKTtsZXQgZj17fSxkPWUuY29tcHJlc3NlZEF0dHJpYnV0ZXM7Zm9yKGxldCB1IGluIGQpaWYoZC5oYXNPd25Qcm9wZXJ0eSh1KSl7bGV0IGw9ZFt1XSxoPXQuR2V0QXR0cmlidXRlQnlVbmlxdWVJZChyLGwpO2ZbdV09eDIocix0LGgpfWxldCBjPXtpbmRleEFycmF5OlVqKHIsdCksYXR0cmlidXRlRGF0YTpmfTtyZXR1cm4gTnQuZGVzdHJveShyKSxOdC5kZXN0cm95KHQpLGN9YXN5bmMgZnVuY3Rpb24gVmooZSx0KXtyZXR1cm4gZyhlLmJ1ZmZlclZpZXcpP0dqKGUpOnpqKGUpfWFzeW5jIGZ1bmN0aW9uIEhqKGUsdCl7bGV0IG49ZS53ZWJBc3NlbWJseUNvbmZpZztyZXR1cm4gZyhuKSYmZyhuLndhc21CaW5hcnlGaWxlKT9OdD1hd2FpdCgwLHV5LmRlZmF1bHQpKG4pOk50PWF3YWl0KDAsdXkuZGVmYXVsdCkoKSwhMH1hc3luYyBmdW5jdGlvbiBLaihlLHQpe2xldCBuPWUud2ViQXNzZW1ibHlDb25maWc7cmV0dXJuIGcobik/SGooZSx0KTpWaihlLHQpfXZhciB1eSxOdCxxaixoeT1YKCgpPT57dnQoKTtzZSgpO25uKCk7amEoKTtVbigpO3V5PWNhKGR5KCksMSk7cWo9QXQoS2opfSk7ZnVuY3Rpb24gbXkoZSx0KXtpZihteS5wYXNzVGhyb3VnaERhdGFGb3JUZXN0aW5nKXJldHVybiB0O2xldCBuPWUuYnl0ZUxlbmd0aDtpZihuPT09MHx8biU0IT09MCl0aHJvdyBuZXcgdXQoIlRoZSBsZW5ndGggb2Yga2V5IG11c3QgYmUgZ3JlYXRlciB0aGFuIDAgYW5kIGEgbXVsdGlwbGUgb2YgNC4iKTtsZXQgbz1uZXcgRGF0YVZpZXcodCksYT1vLmdldFVpbnQzMigwLCEwKTtpZihhPT09V2p8fGE9PT1YailyZXR1cm4gdDtsZXQgcj1uZXcgRGF0YVZpZXcoZSksaT0wLGY9dC5ieXRlTGVuZ3RoLGQ9Zi1mJTgsYz1uLHUsbD04O2Zvcig7aTxkOylmb3IobD0obCs4KSUyNCx1PWw7aTxkJiZ1PGM7KW8uc2V0VWludDMyKGksby5nZXRVaW50MzIoaSwhMCleci5nZXRVaW50MzIodSwhMCksITApLG8uc2V0VWludDMyKGkrNCxvLmdldFVpbnQzMihpKzQsITApXnIuZ2V0VWludDMyKHUrNCwhMCksITApLGkrPTgsdSs9MjQ7aWYoaTxmKWZvcih1Pj1jJiYobD0obCs4KSUyNCx1PWwpO2k8Zjspby5zZXRVaW50OChpLG8uZ2V0VWludDgoaSleci5nZXRVaW50OCh1KSksaSsrLHUrK312YXIgV2osWGosTzIsUzI9WCgoKT0+e2phKCk7V2o9MTk1MzAyOTgwNSxYaj0yOTE3MDM0MTAwO215LnBhc3NUaHJvdWdoRGF0YUZvclRlc3Rpbmc9ITE7TzI9bXl9KTtmdW5jdGlvbiBZaihlLHQpe3JldHVybihlJnQpIT09MH12YXIgcXMsQzI9WCgoKT0+e3FzPVlqfSk7ZnVuY3Rpb24gUnIoZSx0LG4sbyxhLHIpe3RoaXMuX2JpdHM9ZSx0aGlzLmNub2RlVmVyc2lvbj10LHRoaXMuaW1hZ2VyeVZlcnNpb249bix0aGlzLnRlcnJhaW5WZXJzaW9uPW8sdGhpcy5pbWFnZXJ5UHJvdmlkZXI9YSx0aGlzLnRlcnJhaW5Qcm92aWRlcj1yLHRoaXMuYW5jZXN0b3JIYXNUZXJyYWluPSExLHRoaXMudGVycmFpblN0YXRlPXZvaWQgMH12YXIgSmosTTIsWmosUWosJGosTjIsSTI9WCgoKT0+e3NlKCk7QzIoKTtKaj1bMSwyLDQsOF0sTTI9MTUsWmo9MTYsUWo9NjQsJGo9MTI4O1JyLmNsb25lPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGcodCk/KHQuX2JpdHM9ZS5fYml0cyx0LmNub2RlVmVyc2lvbj1lLmNub2RlVmVyc2lvbix0LmltYWdlcnlWZXJzaW9uPWUuaW1hZ2VyeVZlcnNpb24sdC50ZXJyYWluVmVyc2lvbj1lLnRlcnJhaW5WZXJzaW9uLHQuaW1hZ2VyeVByb3ZpZGVyPWUuaW1hZ2VyeVByb3ZpZGVyLHQudGVycmFpblByb3ZpZGVyPWUudGVycmFpblByb3ZpZGVyKTp0PW5ldyBScihlLl9iaXRzLGUuY25vZGVWZXJzaW9uLGUuaW1hZ2VyeVZlcnNpb24sZS50ZXJyYWluVmVyc2lvbixlLmltYWdlcnlQcm92aWRlcixlLnRlcnJhaW5Qcm92aWRlciksdC5hbmNlc3Rvckhhc1RlcnJhaW49ZS5hbmNlc3Rvckhhc1RlcnJhaW4sdC50ZXJyYWluU3RhdGU9ZS50ZXJyYWluU3RhdGUsdH07UnIucHJvdG90eXBlLnNldFBhcmVudD1mdW5jdGlvbihlKXt0aGlzLmFuY2VzdG9ySGFzVGVycmFpbj1lLmFuY2VzdG9ySGFzVGVycmFpbnx8dGhpcy5oYXNUZXJyYWluKCl9O1JyLnByb3RvdHlwZS5oYXNTdWJ0cmVlPWZ1bmN0aW9uKCl7cmV0dXJuIHFzKHRoaXMuX2JpdHMsWmopfTtSci5wcm90b3R5cGUuaGFzSW1hZ2VyeT1mdW5jdGlvbigpe3JldHVybiBxcyh0aGlzLl9iaXRzLFFqKX07UnIucHJvdG90eXBlLmhhc1RlcnJhaW49ZnVuY3Rpb24oKXtyZXR1cm4gcXModGhpcy5fYml0cywkail9O1JyLnByb3RvdHlwZS5oYXNDaGlsZHJlbj1mdW5jdGlvbigpe3JldHVybiBxcyh0aGlzLl9iaXRzLE0yKX07UnIucHJvdG90eXBlLmhhc0NoaWxkPWZ1bmN0aW9uKGUpe3JldHVybiBxcyh0aGlzLl9iaXRzLEpqW2VdKX07UnIucHJvdG90eXBlLmdldENoaWxkQml0bWFzaz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9iaXRzJk0yfTtOMj1Scn0pO3ZhciBrMj1lbygob2xlLFAyKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgZTQ9KGUsdCxuLG8pPT57bGV0IGE9ZSY2NTUzNXwwLHI9ZT4+PjE2JjY1NTM1fDAsaT0wO2Zvcig7biE9PTA7KXtpPW4+MmUzPzJlMzpuLG4tPWk7ZG8gYT1hK3RbbysrXXwwLHI9cithfDA7d2hpbGUoLS1pKTthJT02NTUyMSxyJT02NTUyMX1yZXR1cm4gYXxyPDwxNnwwfTtQMi5leHBvcnRzPWU0fSk7dmFyIEYyPWVvKChhbGUsdjIpPT57InVzZSBzdHJpY3QiO3ZhciB0ND0oKT0+e2xldCBlLHQ9W107Zm9yKHZhciBuPTA7bjwyNTY7bisrKXtlPW47Zm9yKHZhciBvPTA7bzw4O28rKyllPWUmMT8zOTg4MjkyMzg0XmU+Pj4xOmU+Pj4xO3Rbbl09ZX1yZXR1cm4gdH0sbjQ9bmV3IFVpbnQzMkFycmF5KHQ0KCkpLG80PShlLHQsbixvKT0+e2xldCBhPW40LHI9bytuO2VePS0xO2ZvcihsZXQgaT1vO2k8cjtpKyspZT1lPj4+OF5hWyhlXnRbaV0pJjI1NV07cmV0dXJuIGVeLTF9O3YyLmV4cG9ydHM9bzR9KTt2YXIgQjI9ZW8oKHJsZSxEMik9PnsidXNlIHN0cmljdCI7RDIuZXhwb3J0cz1mdW5jdGlvbih0LG4pe2xldCBvLGEscixpLGYsZCxjLHUsbCxoLG0sYixwLHksVCxfLEUsdyxSLFMsQyxJLE4sUCxGPXQuc3RhdGU7bz10Lm5leHRfaW4sTj10LmlucHV0LGE9bysodC5hdmFpbF9pbi01KSxyPXQubmV4dF9vdXQsUD10Lm91dHB1dCxpPXItKG4tdC5hdmFpbF9vdXQpLGY9cisodC5hdmFpbF9vdXQtMjU3KSxkPUYuZG1heCxjPUYud3NpemUsdT1GLndoYXZlLGw9Ri53bmV4dCxoPUYud2luZG93LG09Ri5ob2xkLGI9Ri5iaXRzLHA9Ri5sZW5jb2RlLHk9Ri5kaXN0Y29kZSxUPSgxPDxGLmxlbmJpdHMpLTEsXz0oMTw8Ri5kaXN0Yml0cyktMTtlOmRve2I8MTUmJihtKz1OW28rK108PGIsYis9OCxtKz1OW28rK108PGIsYis9OCksRT1wW20mVF07dDpmb3IoOzspe2lmKHc9RT4+PjI0LG0+Pj49dyxiLT13LHc9RT4+PjE2JjI1NSx3PT09MClQW3IrK109RSY2NTUzNTtlbHNlIGlmKHcmMTYpe1I9RSY2NTUzNSx3Jj0xNSx3JiYoYjx3JiYobSs9TltvKytdPDxiLGIrPTgpLFIrPW0mKDE8PHcpLTEsbT4+Pj13LGItPXcpLGI8MTUmJihtKz1OW28rK108PGIsYis9OCxtKz1OW28rK108PGIsYis9OCksRT15W20mX107bjpmb3IoOzspe2lmKHc9RT4+PjI0LG0+Pj49dyxiLT13LHc9RT4+PjE2JjI1NSx3JjE2KXtpZihTPUUmNjU1MzUsdyY9MTUsYjx3JiYobSs9TltvKytdPDxiLGIrPTgsYjx3JiYobSs9TltvKytdPDxiLGIrPTgpKSxTKz1tJigxPDx3KS0xLFM+ZCl7dC5tc2c9ImludmFsaWQgZGlzdGFuY2UgdG9vIGZhciBiYWNrIixGLm1vZGU9MTYyMDk7YnJlYWsgZX1pZihtPj4+PXcsYi09dyx3PXItaSxTPncpe2lmKHc9Uy13LHc+dSYmRi5zYW5lKXt0Lm1zZz0iaW52YWxpZCBkaXN0YW5jZSB0b28gZmFyIGJhY2siLEYubW9kZT0xNjIwOTticmVhayBlfWlmKEM9MCxJPWgsbD09PTApe2lmKEMrPWMtdyx3PFIpe1ItPXc7ZG8gUFtyKytdPWhbQysrXTt3aGlsZSgtLXcpO0M9ci1TLEk9UH19ZWxzZSBpZihsPHcpe2lmKEMrPWMrbC13LHctPWwsdzxSKXtSLT13O2RvIFBbcisrXT1oW0MrK107d2hpbGUoLS13KTtpZihDPTAsbDxSKXt3PWwsUi09dztkbyBQW3IrK109aFtDKytdO3doaWxlKC0tdyk7Qz1yLVMsST1QfX19ZWxzZSBpZihDKz1sLXcsdzxSKXtSLT13O2RvIFBbcisrXT1oW0MrK107d2hpbGUoLS13KTtDPXItUyxJPVB9Zm9yKDtSPjI7KVBbcisrXT1JW0MrK10sUFtyKytdPUlbQysrXSxQW3IrK109SVtDKytdLFItPTM7UiYmKFBbcisrXT1JW0MrK10sUj4xJiYoUFtyKytdPUlbQysrXSkpfWVsc2V7Qz1yLVM7ZG8gUFtyKytdPVBbQysrXSxQW3IrK109UFtDKytdLFBbcisrXT1QW0MrK10sUi09Mzt3aGlsZShSPjIpO1ImJihQW3IrK109UFtDKytdLFI+MSYmKFBbcisrXT1QW0MrK10pKX19ZWxzZSBpZigodyY2NCk9PT0wKXtFPXlbKEUmNjU1MzUpKyhtJigxPDx3KS0xKV07Y29udGludWUgbn1lbHNle3QubXNnPSJpbnZhbGlkIGRpc3RhbmNlIGNvZGUiLEYubW9kZT0xNjIwOTticmVhayBlfWJyZWFrfX1lbHNlIGlmKCh3JjY0KT09PTApe0U9cFsoRSY2NTUzNSkrKG0mKDE8PHcpLTEpXTtjb250aW51ZSB0fWVsc2UgaWYodyYzMil7Ri5tb2RlPTE2MTkxO2JyZWFrIGV9ZWxzZXt0Lm1zZz0iaW52YWxpZCBsaXRlcmFsL2xlbmd0aCBjb2RlIixGLm1vZGU9MTYyMDk7YnJlYWsgZX1icmVha319d2hpbGUobzxhJiZyPGYpO1I9Yj4+MyxvLT1SLGItPVI8PDMsbSY9KDE8PGIpLTEsdC5uZXh0X2luPW8sdC5uZXh0X291dD1yLHQuYXZhaWxfaW49bzxhPzUrKGEtbyk6NS0oby1hKSx0LmF2YWlsX291dD1yPGY/MjU3KyhmLXIpOjI1Ny0oci1mKSxGLmhvbGQ9bSxGLmJpdHM9Yn19KTt2YXIgTDI9ZW8oKGlsZSxVMik9PnsidXNlIHN0cmljdCI7dmFyIGE0PW5ldyBVaW50MTZBcnJheShbMyw0LDUsNiw3LDgsOSwxMCwxMSwxMywxNSwxNywxOSwyMywyNywzMSwzNSw0Myw1MSw1OSw2Nyw4Myw5OSwxMTUsMTMxLDE2MywxOTUsMjI3LDI1OCwwLDBdKSxyND1uZXcgVWludDhBcnJheShbMTYsMTYsMTYsMTYsMTYsMTYsMTYsMTYsMTcsMTcsMTcsMTcsMTgsMTgsMTgsMTgsMTksMTksMTksMTksMjAsMjAsMjAsMjAsMjEsMjEsMjEsMjEsMTYsNzIsNzhdKSxpND1uZXcgVWludDE2QXJyYXkoWzEsMiwzLDQsNSw3LDksMTMsMTcsMjUsMzMsNDksNjUsOTcsMTI5LDE5MywyNTcsMzg1LDUxMyw3NjksMTAyNSwxNTM3LDIwNDksMzA3Myw0MDk3LDYxNDUsODE5MywxMjI4OSwxNjM4NSwyNDU3NywwLDBdKSxjND1uZXcgVWludDhBcnJheShbMTYsMTYsMTYsMTYsMTcsMTcsMTgsMTgsMTksMTksMjAsMjAsMjEsMjEsMjIsMjIsMjMsMjMsMjQsMjQsMjUsMjUsMjYsMjYsMjcsMjcsMjgsMjgsMjksMjksNjQsNjRdKSxzND0oZSx0LG4sbyxhLHIsaSxmKT0+e2xldCBkPWYuYml0cyxjPTAsdT0wLGw9MCxoPTAsbT0wLGI9MCxwPTAseT0wLFQ9MCxfPTAsRSx3LFIsUyxDLEk9bnVsbCxOLFA9bmV3IFVpbnQxNkFycmF5KDE2KSxGPW5ldyBVaW50MTZBcnJheSgxNiksQT1udWxsLHgsTSx2O2ZvcihjPTA7Yzw9MTU7YysrKVBbY109MDtmb3IodT0wO3U8bzt1KyspUFt0W24rdV1dKys7Zm9yKG09ZCxoPTE1O2g+PTEmJlBbaF09PT0wO2gtLSk7aWYobT5oJiYobT1oKSxoPT09MClyZXR1cm4gYVtyKytdPTE8PDI0fDY0PDwxNnwwLGFbcisrXT0xPDwyNHw2NDw8MTZ8MCxmLmJpdHM9MSwwO2ZvcihsPTE7bDxoJiZQW2xdPT09MDtsKyspO2ZvcihtPGwmJihtPWwpLHk9MSxjPTE7Yzw9MTU7YysrKWlmKHk8PD0xLHktPVBbY10seTwwKXJldHVybi0xO2lmKHk+MCYmKGU9PT0wfHxoIT09MSkpcmV0dXJuLTE7Zm9yKEZbMV09MCxjPTE7YzwxNTtjKyspRltjKzFdPUZbY10rUFtjXTtmb3IodT0wO3U8bzt1KyspdFtuK3VdIT09MCYmKGlbRlt0W24rdV1dKytdPXUpO2lmKGU9PT0wPyhJPUE9aSxOPTIwKTplPT09MT8oST1hNCxBPXI0LE49MjU3KTooST1pNCxBPWM0LE49MCksXz0wLHU9MCxjPWwsQz1yLGI9bSxwPTAsUj0tMSxUPTE8PG0sUz1ULTEsZT09PTEmJlQ+ODUyfHxlPT09MiYmVD41OTIpcmV0dXJuIDE7Zm9yKDs7KXt4PWMtcCxpW3VdKzE8Tj8oTT0wLHY9aVt1XSk6aVt1XT49Tj8oTT1BW2lbdV0tTl0sdj1JW2lbdV0tTl0pOihNPTk2LHY9MCksRT0xPDxjLXAsdz0xPDxiLGw9dztkbyB3LT1FLGFbQysoXz4+cCkrd109eDw8MjR8TTw8MTZ8dnwwO3doaWxlKHchPT0wKTtmb3IoRT0xPDxjLTE7XyZFOylFPj49MTtpZihFIT09MD8oXyY9RS0xLF8rPUUpOl89MCx1KyssLS1QW2NdPT09MCl7aWYoYz09PWgpYnJlYWs7Yz10W24raVt1XV19aWYoYz5tJiYoXyZTKSE9PVIpe2ZvcihwPT09MCYmKHA9bSksQys9bCxiPWMtcCx5PTE8PGI7YitwPGgmJih5LT1QW2IrcF0sISh5PD0wKSk7KWIrKyx5PDw9MTtpZihUKz0xPDxiLGU9PT0xJiZUPjg1Mnx8ZT09PTImJlQ+NTkyKXJldHVybiAxO1I9XyZTLGFbUl09bTw8MjR8Yjw8MTZ8Qy1yfDB9fXJldHVybiBfIT09MCYmKGFbQytfXT1jLXA8PDI0fDY0PDwxNnwwKSxmLmJpdHM9bSwwfTtVMi5leHBvcnRzPXM0fSk7dmFyIHBtPWVvKChjbGUsajIpPT57InVzZSBzdHJpY3QiO2oyLmV4cG9ydHM9e1pfTk9fRkxVU0g6MCxaX1BBUlRJQUxfRkxVU0g6MSxaX1NZTkNfRkxVU0g6MixaX0ZVTExfRkxVU0g6MyxaX0ZJTklTSDo0LFpfQkxPQ0s6NSxaX1RSRUVTOjYsWl9PSzowLFpfU1RSRUFNX0VORDoxLFpfTkVFRF9ESUNUOjIsWl9FUlJOTzotMSxaX1NUUkVBTV9FUlJPUjotMixaX0RBVEFfRVJST1I6LTMsWl9NRU1fRVJST1I6LTQsWl9CVUZfRVJST1I6LTUsWl9OT19DT01QUkVTU0lPTjowLFpfQkVTVF9TUEVFRDoxLFpfQkVTVF9DT01QUkVTU0lPTjo5LFpfREVGQVVMVF9DT01QUkVTU0lPTjotMSxaX0ZJTFRFUkVEOjEsWl9IVUZGTUFOX09OTFk6MixaX1JMRTozLFpfRklYRUQ6NCxaX0RFRkFVTFRfU1RSQVRFR1k6MCxaX0JJTkFSWTowLFpfVEVYVDoxLFpfVU5LTk9XTjoyLFpfREVGTEFURUQ6OH19KTt2YXIgd089ZW8oKHNsZSxlcik9PnsidXNlIHN0cmljdCI7dmFyIEF5PWsyKCkseHI9RjIoKSxmND1CMigpLHdkPUwyKCksZDQ9MCxsTz0xLGhPPTIse1pfRklOSVNIOnoyLFpfQkxPQ0s6dTQsWl9UUkVFUzpnbSxaX09LOk5jLFpfU1RSRUFNX0VORDpsNCxaX05FRURfRElDVDpoNCxaX1NUUkVBTV9FUlJPUjpGYSxaX0RBVEFfRVJST1I6bU8sWl9NRU1fRVJST1I6d3ksWl9CVUZfRVJST1I6bTQsWl9ERUZMQVRFRDpHMn09cG0oKSx3bT0xNjE4MCxWMj0xNjE4MSxIMj0xNjE4MixLMj0xNjE4MyxxMj0xNjE4NCxXMj0xNjE4NSxYMj0xNjE4NixZMj0xNjE4NyxKMj0xNjE4OCxaMj0xNjE4OSxBbT0xNjE5MCxlaT0xNjE5MSxieT0xNjE5MixRMj0xNjE5MyxweT0xNjE5NCwkMj0xNjE5NSxlTz0xNjE5Nix0Tz0xNjE5NyxuTz0xNjE5OCxfbT0xNjE5OSx5bT0xNjIwMCxvTz0xNjIwMSxhTz0xNjIwMixyTz0xNjIwMyxpTz0xNjIwNCxjTz0xNjIwNSxneT0xNjIwNixzTz0xNjIwNyxmTz0xNjIwOCxJbj0xNjIwOSxUeT0xNjIxMCxiTz0xNjIxMSxiND04NTIscDQ9NTkyLGc0PTE1LF80PWc0LGRPPWU9PihlPj4+MjQmMjU1KSsoZT4+PjgmNjUyODApKygoZSY2NTI4MCk8PDgpKygoZSYyNTUpPDwyNCk7ZnVuY3Rpb24geTQoKXt0aGlzLnN0cm09bnVsbCx0aGlzLm1vZGU9MCx0aGlzLmxhc3Q9ITEsdGhpcy53cmFwPTAsdGhpcy5oYXZlZGljdD0hMSx0aGlzLmZsYWdzPTAsdGhpcy5kbWF4PTAsdGhpcy5jaGVjaz0wLHRoaXMudG90YWw9MCx0aGlzLmhlYWQ9bnVsbCx0aGlzLndiaXRzPTAsdGhpcy53c2l6ZT0wLHRoaXMud2hhdmU9MCx0aGlzLnduZXh0PTAsdGhpcy53aW5kb3c9bnVsbCx0aGlzLmhvbGQ9MCx0aGlzLmJpdHM9MCx0aGlzLmxlbmd0aD0wLHRoaXMub2Zmc2V0PTAsdGhpcy5leHRyYT0wLHRoaXMubGVuY29kZT1udWxsLHRoaXMuZGlzdGNvZGU9bnVsbCx0aGlzLmxlbmJpdHM9MCx0aGlzLmRpc3RiaXRzPTAsdGhpcy5uY29kZT0wLHRoaXMubmxlbj0wLHRoaXMubmRpc3Q9MCx0aGlzLmhhdmU9MCx0aGlzLm5leHQ9bnVsbCx0aGlzLmxlbnM9bmV3IFVpbnQxNkFycmF5KDMyMCksdGhpcy53b3JrPW5ldyBVaW50MTZBcnJheSgyODgpLHRoaXMubGVuZHluPW51bGwsdGhpcy5kaXN0ZHluPW51bGwsdGhpcy5zYW5lPTAsdGhpcy5iYWNrPTAsdGhpcy53YXM9MH12YXIgSWM9ZT0+e2lmKCFlKXJldHVybiAxO2xldCB0PWUuc3RhdGU7cmV0dXJuIXR8fHQuc3RybSE9PWV8fHQubW9kZTx3bXx8dC5tb2RlPmJPPzE6MH0scE89ZT0+e2lmKEljKGUpKXJldHVybiBGYTtsZXQgdD1lLnN0YXRlO3JldHVybiBlLnRvdGFsX2luPWUudG90YWxfb3V0PXQudG90YWw9MCxlLm1zZz0iIix0LndyYXAmJihlLmFkbGVyPXQud3JhcCYxKSx0Lm1vZGU9d20sdC5sYXN0PTAsdC5oYXZlZGljdD0wLHQuZmxhZ3M9LTEsdC5kbWF4PTMyNzY4LHQuaGVhZD1udWxsLHQuaG9sZD0wLHQuYml0cz0wLHQubGVuY29kZT10LmxlbmR5bj1uZXcgSW50MzJBcnJheShiNCksdC5kaXN0Y29kZT10LmRpc3RkeW49bmV3IEludDMyQXJyYXkocDQpLHQuc2FuZT0xLHQuYmFjaz0tMSxOY30sZ089ZT0+e2lmKEljKGUpKXJldHVybiBGYTtsZXQgdD1lLnN0YXRlO3JldHVybiB0LndzaXplPTAsdC53aGF2ZT0wLHQud25leHQ9MCxwTyhlKX0sX089KGUsdCk9PntsZXQgbjtpZihJYyhlKSlyZXR1cm4gRmE7bGV0IG89ZS5zdGF0ZTtyZXR1cm4gdDwwPyhuPTAsdD0tdCk6KG49KHQ+PjQpKzUsdDw0OCYmKHQmPTE1KSksdCYmKHQ8OHx8dD4xNSk/RmE6KG8ud2luZG93IT09bnVsbCYmby53Yml0cyE9PXQmJihvLndpbmRvdz1udWxsKSxvLndyYXA9bixvLndiaXRzPXQsZ08oZSkpfSx5Tz0oZSx0KT0+e2lmKCFlKXJldHVybiBGYTtsZXQgbj1uZXcgeTQ7ZS5zdGF0ZT1uLG4uc3RybT1lLG4ud2luZG93PW51bGwsbi5tb2RlPXdtO2xldCBvPV9PKGUsdCk7cmV0dXJuIG8hPT1OYyYmKGUuc3RhdGU9bnVsbCksb30sQTQ9ZT0+eU8oZSxfNCksdU89ITAsX3kseXksdzQ9ZT0+e2lmKHVPKXtfeT1uZXcgSW50MzJBcnJheSg1MTIpLHl5PW5ldyBJbnQzMkFycmF5KDMyKTtsZXQgdD0wO2Zvcig7dDwxNDQ7KWUubGVuc1t0KytdPTg7Zm9yKDt0PDI1NjspZS5sZW5zW3QrK109OTtmb3IoO3Q8MjgwOyllLmxlbnNbdCsrXT03O2Zvcig7dDwyODg7KWUubGVuc1t0KytdPTg7Zm9yKHdkKGxPLGUubGVucywwLDI4OCxfeSwwLGUud29yayx7Yml0czo5fSksdD0wO3Q8MzI7KWUubGVuc1t0KytdPTU7d2QoaE8sZS5sZW5zLDAsMzIseXksMCxlLndvcmsse2JpdHM6NX0pLHVPPSExfWUubGVuY29kZT1feSxlLmxlbmJpdHM9OSxlLmRpc3Rjb2RlPXl5LGUuZGlzdGJpdHM9NX0sQU89KGUsdCxuLG8pPT57bGV0IGEscj1lLnN0YXRlO3JldHVybiByLndpbmRvdz09PW51bGwmJihyLndzaXplPTE8PHIud2JpdHMsci53bmV4dD0wLHIud2hhdmU9MCxyLndpbmRvdz1uZXcgVWludDhBcnJheShyLndzaXplKSksbz49ci53c2l6ZT8oci53aW5kb3cuc2V0KHQuc3ViYXJyYXkobi1yLndzaXplLG4pLDApLHIud25leHQ9MCxyLndoYXZlPXIud3NpemUpOihhPXIud3NpemUtci53bmV4dCxhPm8mJihhPW8pLHIud2luZG93LnNldCh0LnN1YmFycmF5KG4tbyxuLW8rYSksci53bmV4dCksby09YSxvPyhyLndpbmRvdy5zZXQodC5zdWJhcnJheShuLW8sbiksMCksci53bmV4dD1vLHIud2hhdmU9ci53c2l6ZSk6KHIud25leHQrPWEsci53bmV4dD09PXIud3NpemUmJihyLnduZXh0PTApLHIud2hhdmU8ci53c2l6ZSYmKHIud2hhdmUrPWEpKSksMH0sVDQ9KGUsdCk9PntsZXQgbixvLGEscixpLGYsZCxjLHUsbCxoLG0sYixwLHk9MCxULF8sRSx3LFIsUyxDLEksTj1uZXcgVWludDhBcnJheSg0KSxQLEYsQT1uZXcgVWludDhBcnJheShbMTYsMTcsMTgsMCw4LDcsOSw2LDEwLDUsMTEsNCwxMiwzLDEzLDIsMTQsMSwxNV0pO2lmKEljKGUpfHwhZS5vdXRwdXR8fCFlLmlucHV0JiZlLmF2YWlsX2luIT09MClyZXR1cm4gRmE7bj1lLnN0YXRlLG4ubW9kZT09PWVpJiYobi5tb2RlPWJ5KSxpPWUubmV4dF9vdXQsYT1lLm91dHB1dCxkPWUuYXZhaWxfb3V0LHI9ZS5uZXh0X2luLG89ZS5pbnB1dCxmPWUuYXZhaWxfaW4sYz1uLmhvbGQsdT1uLmJpdHMsbD1mLGg9ZCxJPU5jO2U6Zm9yKDs7KXN3aXRjaChuLm1vZGUpe2Nhc2Ugd206aWYobi53cmFwPT09MCl7bi5tb2RlPWJ5O2JyZWFrfWZvcig7dTwxNjspe2lmKGY9PT0wKWJyZWFrIGU7Zi0tLGMrPW9bcisrXTw8dSx1Kz04fWlmKG4ud3JhcCYyJiZjPT09MzU2MTUpe24ud2JpdHM9PT0wJiYobi53Yml0cz0xNSksbi5jaGVjaz0wLE5bMF09YyYyNTUsTlsxXT1jPj4+OCYyNTUsbi5jaGVjaz14cihuLmNoZWNrLE4sMiwwKSxjPTAsdT0wLG4ubW9kZT1WMjticmVha31pZihuLmhlYWQmJihuLmhlYWQuZG9uZT0hMSksIShuLndyYXAmMSl8fCgoKGMmMjU1KTw8OCkrKGM+PjgpKSUzMSl7ZS5tc2c9ImluY29ycmVjdCBoZWFkZXIgY2hlY2siLG4ubW9kZT1JbjticmVha31pZigoYyYxNSkhPT1HMil7ZS5tc2c9InVua25vd24gY29tcHJlc3Npb24gbWV0aG9kIixuLm1vZGU9SW47YnJlYWt9aWYoYz4+Pj00LHUtPTQsQz0oYyYxNSkrOCxuLndiaXRzPT09MCYmKG4ud2JpdHM9QyksQz4xNXx8Qz5uLndiaXRzKXtlLm1zZz0iaW52YWxpZCB3aW5kb3cgc2l6ZSIsbi5tb2RlPUluO2JyZWFrfW4uZG1heD0xPDxuLndiaXRzLG4uZmxhZ3M9MCxlLmFkbGVyPW4uY2hlY2s9MSxuLm1vZGU9YyY1MTI/WjI6ZWksYz0wLHU9MDticmVhaztjYXNlIFYyOmZvcig7dTwxNjspe2lmKGY9PT0wKWJyZWFrIGU7Zi0tLGMrPW9bcisrXTw8dSx1Kz04fWlmKG4uZmxhZ3M9Yywobi5mbGFncyYyNTUpIT09RzIpe2UubXNnPSJ1bmtub3duIGNvbXByZXNzaW9uIG1ldGhvZCIsbi5tb2RlPUluO2JyZWFrfWlmKG4uZmxhZ3MmNTczNDQpe2UubXNnPSJ1bmtub3duIGhlYWRlciBmbGFncyBzZXQiLG4ubW9kZT1JbjticmVha31uLmhlYWQmJihuLmhlYWQudGV4dD1jPj44JjEpLG4uZmxhZ3MmNTEyJiZuLndyYXAmNCYmKE5bMF09YyYyNTUsTlsxXT1jPj4+OCYyNTUsbi5jaGVjaz14cihuLmNoZWNrLE4sMiwwKSksYz0wLHU9MCxuLm1vZGU9SDI7Y2FzZSBIMjpmb3IoO3U8MzI7KXtpZihmPT09MClicmVhayBlO2YtLSxjKz1vW3IrK108PHUsdSs9OH1uLmhlYWQmJihuLmhlYWQudGltZT1jKSxuLmZsYWdzJjUxMiYmbi53cmFwJjQmJihOWzBdPWMmMjU1LE5bMV09Yz4+PjgmMjU1LE5bMl09Yz4+PjE2JjI1NSxOWzNdPWM+Pj4yNCYyNTUsbi5jaGVjaz14cihuLmNoZWNrLE4sNCwwKSksYz0wLHU9MCxuLm1vZGU9SzI7Y2FzZSBLMjpmb3IoO3U8MTY7KXtpZihmPT09MClicmVhayBlO2YtLSxjKz1vW3IrK108PHUsdSs9OH1uLmhlYWQmJihuLmhlYWQueGZsYWdzPWMmMjU1LG4uaGVhZC5vcz1jPj44KSxuLmZsYWdzJjUxMiYmbi53cmFwJjQmJihOWzBdPWMmMjU1LE5bMV09Yz4+PjgmMjU1LG4uY2hlY2s9eHIobi5jaGVjayxOLDIsMCkpLGM9MCx1PTAsbi5tb2RlPXEyO2Nhc2UgcTI6aWYobi5mbGFncyYxMDI0KXtmb3IoO3U8MTY7KXtpZihmPT09MClicmVhayBlO2YtLSxjKz1vW3IrK108PHUsdSs9OH1uLmxlbmd0aD1jLG4uaGVhZCYmKG4uaGVhZC5leHRyYV9sZW49Yyksbi5mbGFncyY1MTImJm4ud3JhcCY0JiYoTlswXT1jJjI1NSxOWzFdPWM+Pj44JjI1NSxuLmNoZWNrPXhyKG4uY2hlY2ssTiwyLDApKSxjPTAsdT0wfWVsc2Ugbi5oZWFkJiYobi5oZWFkLmV4dHJhPW51bGwpO24ubW9kZT1XMjtjYXNlIFcyOmlmKG4uZmxhZ3MmMTAyNCYmKG09bi5sZW5ndGgsbT5mJiYobT1mKSxtJiYobi5oZWFkJiYoQz1uLmhlYWQuZXh0cmFfbGVuLW4ubGVuZ3RoLG4uaGVhZC5leHRyYXx8KG4uaGVhZC5leHRyYT1uZXcgVWludDhBcnJheShuLmhlYWQuZXh0cmFfbGVuKSksbi5oZWFkLmV4dHJhLnNldChvLnN1YmFycmF5KHIscittKSxDKSksbi5mbGFncyY1MTImJm4ud3JhcCY0JiYobi5jaGVjaz14cihuLmNoZWNrLG8sbSxyKSksZi09bSxyKz1tLG4ubGVuZ3RoLT1tKSxuLmxlbmd0aCkpYnJlYWsgZTtuLmxlbmd0aD0wLG4ubW9kZT1YMjtjYXNlIFgyOmlmKG4uZmxhZ3MmMjA0OCl7aWYoZj09PTApYnJlYWsgZTttPTA7ZG8gQz1vW3IrbSsrXSxuLmhlYWQmJkMmJm4ubGVuZ3RoPDY1NTM2JiYobi5oZWFkLm5hbWUrPVN0cmluZy5mcm9tQ2hhckNvZGUoQykpO3doaWxlKEMmJm08Zik7aWYobi5mbGFncyY1MTImJm4ud3JhcCY0JiYobi5jaGVjaz14cihuLmNoZWNrLG8sbSxyKSksZi09bSxyKz1tLEMpYnJlYWsgZX1lbHNlIG4uaGVhZCYmKG4uaGVhZC5uYW1lPW51bGwpO24ubGVuZ3RoPTAsbi5tb2RlPVkyO2Nhc2UgWTI6aWYobi5mbGFncyY0MDk2KXtpZihmPT09MClicmVhayBlO209MDtkbyBDPW9bcittKytdLG4uaGVhZCYmQyYmbi5sZW5ndGg8NjU1MzYmJihuLmhlYWQuY29tbWVudCs9U3RyaW5nLmZyb21DaGFyQ29kZShDKSk7d2hpbGUoQyYmbTxmKTtpZihuLmZsYWdzJjUxMiYmbi53cmFwJjQmJihuLmNoZWNrPXhyKG4uY2hlY2ssbyxtLHIpKSxmLT1tLHIrPW0sQylicmVhayBlfWVsc2Ugbi5oZWFkJiYobi5oZWFkLmNvbW1lbnQ9bnVsbCk7bi5tb2RlPUoyO2Nhc2UgSjI6aWYobi5mbGFncyY1MTIpe2Zvcig7dTwxNjspe2lmKGY9PT0wKWJyZWFrIGU7Zi0tLGMrPW9bcisrXTw8dSx1Kz04fWlmKG4ud3JhcCY0JiZjIT09KG4uY2hlY2smNjU1MzUpKXtlLm1zZz0iaGVhZGVyIGNyYyBtaXNtYXRjaCIsbi5tb2RlPUluO2JyZWFrfWM9MCx1PTB9bi5oZWFkJiYobi5oZWFkLmhjcmM9bi5mbGFncz4+OSYxLG4uaGVhZC5kb25lPSEwKSxlLmFkbGVyPW4uY2hlY2s9MCxuLm1vZGU9ZWk7YnJlYWs7Y2FzZSBaMjpmb3IoO3U8MzI7KXtpZihmPT09MClicmVhayBlO2YtLSxjKz1vW3IrK108PHUsdSs9OH1lLmFkbGVyPW4uY2hlY2s9ZE8oYyksYz0wLHU9MCxuLm1vZGU9QW07Y2FzZSBBbTppZihuLmhhdmVkaWN0PT09MClyZXR1cm4gZS5uZXh0X291dD1pLGUuYXZhaWxfb3V0PWQsZS5uZXh0X2luPXIsZS5hdmFpbF9pbj1mLG4uaG9sZD1jLG4uYml0cz11LGg0O2UuYWRsZXI9bi5jaGVjaz0xLG4ubW9kZT1laTtjYXNlIGVpOmlmKHQ9PT11NHx8dD09PWdtKWJyZWFrIGU7Y2FzZSBieTppZihuLmxhc3Qpe2M+Pj49dSY3LHUtPXUmNyxuLm1vZGU9Z3k7YnJlYWt9Zm9yKDt1PDM7KXtpZihmPT09MClicmVhayBlO2YtLSxjKz1vW3IrK108PHUsdSs9OH1zd2l0Y2gobi5sYXN0PWMmMSxjPj4+PTEsdS09MSxjJjMpe2Nhc2UgMDpuLm1vZGU9UTI7YnJlYWs7Y2FzZSAxOmlmKHc0KG4pLG4ubW9kZT1fbSx0PT09Z20pe2M+Pj49Mix1LT0yO2JyZWFrIGV9YnJlYWs7Y2FzZSAyOm4ubW9kZT1lTzticmVhaztjYXNlIDM6ZS5tc2c9ImludmFsaWQgYmxvY2sgdHlwZSIsbi5tb2RlPUlufWM+Pj49Mix1LT0yO2JyZWFrO2Nhc2UgUTI6Zm9yKGM+Pj49dSY3LHUtPXUmNzt1PDMyOyl7aWYoZj09PTApYnJlYWsgZTtmLS0sYys9b1tyKytdPDx1LHUrPTh9aWYoKGMmNjU1MzUpIT09KGM+Pj4xNl42NTUzNSkpe2UubXNnPSJpbnZhbGlkIHN0b3JlZCBibG9jayBsZW5ndGhzIixuLm1vZGU9SW47YnJlYWt9aWYobi5sZW5ndGg9YyY2NTUzNSxjPTAsdT0wLG4ubW9kZT1weSx0PT09Z20pYnJlYWsgZTtjYXNlIHB5Om4ubW9kZT0kMjtjYXNlICQyOmlmKG09bi5sZW5ndGgsbSl7aWYobT5mJiYobT1mKSxtPmQmJihtPWQpLG09PT0wKWJyZWFrIGU7YS5zZXQoby5zdWJhcnJheShyLHIrbSksaSksZi09bSxyKz1tLGQtPW0saSs9bSxuLmxlbmd0aC09bTticmVha31uLm1vZGU9ZWk7YnJlYWs7Y2FzZSBlTzpmb3IoO3U8MTQ7KXtpZihmPT09MClicmVhayBlO2YtLSxjKz1vW3IrK108PHUsdSs9OH1pZihuLm5sZW49KGMmMzEpKzI1NyxjPj4+PTUsdS09NSxuLm5kaXN0PShjJjMxKSsxLGM+Pj49NSx1LT01LG4ubmNvZGU9KGMmMTUpKzQsYz4+Pj00LHUtPTQsbi5ubGVuPjI4Nnx8bi5uZGlzdD4zMCl7ZS5tc2c9InRvbyBtYW55IGxlbmd0aCBvciBkaXN0YW5jZSBzeW1ib2xzIixuLm1vZGU9SW47YnJlYWt9bi5oYXZlPTAsbi5tb2RlPXRPO2Nhc2UgdE86Zm9yKDtuLmhhdmU8bi5uY29kZTspe2Zvcig7dTwzOyl7aWYoZj09PTApYnJlYWsgZTtmLS0sYys9b1tyKytdPDx1LHUrPTh9bi5sZW5zW0Fbbi5oYXZlKytdXT1jJjcsYz4+Pj0zLHUtPTN9Zm9yKDtuLmhhdmU8MTk7KW4ubGVuc1tBW24uaGF2ZSsrXV09MDtpZihuLmxlbmNvZGU9bi5sZW5keW4sbi5sZW5iaXRzPTcsUD17Yml0czpuLmxlbmJpdHN9LEk9d2QoZDQsbi5sZW5zLDAsMTksbi5sZW5jb2RlLDAsbi53b3JrLFApLG4ubGVuYml0cz1QLmJpdHMsSSl7ZS5tc2c9ImludmFsaWQgY29kZSBsZW5ndGhzIHNldCIsbi5tb2RlPUluO2JyZWFrfW4uaGF2ZT0wLG4ubW9kZT1uTztjYXNlIG5POmZvcig7bi5oYXZlPG4ubmxlbituLm5kaXN0Oyl7Zm9yKDt5PW4ubGVuY29kZVtjJigxPDxuLmxlbmJpdHMpLTFdLFQ9eT4+PjI0LF89eT4+PjE2JjI1NSxFPXkmNjU1MzUsIShUPD11KTspe2lmKGY9PT0wKWJyZWFrIGU7Zi0tLGMrPW9bcisrXTw8dSx1Kz04fWlmKEU8MTYpYz4+Pj1ULHUtPVQsbi5sZW5zW24uaGF2ZSsrXT1FO2Vsc2V7aWYoRT09PTE2KXtmb3IoRj1UKzI7dTxGOyl7aWYoZj09PTApYnJlYWsgZTtmLS0sYys9b1tyKytdPDx1LHUrPTh9aWYoYz4+Pj1ULHUtPVQsbi5oYXZlPT09MCl7ZS5tc2c9ImludmFsaWQgYml0IGxlbmd0aCByZXBlYXQiLG4ubW9kZT1JbjticmVha31DPW4ubGVuc1tuLmhhdmUtMV0sbT0zKyhjJjMpLGM+Pj49Mix1LT0yfWVsc2UgaWYoRT09PTE3KXtmb3IoRj1UKzM7dTxGOyl7aWYoZj09PTApYnJlYWsgZTtmLS0sYys9b1tyKytdPDx1LHUrPTh9Yz4+Pj1ULHUtPVQsQz0wLG09MysoYyY3KSxjPj4+PTMsdS09M31lbHNle2ZvcihGPVQrNzt1PEY7KXtpZihmPT09MClicmVhayBlO2YtLSxjKz1vW3IrK108PHUsdSs9OH1jPj4+PVQsdS09VCxDPTAsbT0xMSsoYyYxMjcpLGM+Pj49Nyx1LT03fWlmKG4uaGF2ZSttPm4ubmxlbituLm5kaXN0KXtlLm1zZz0iaW52YWxpZCBiaXQgbGVuZ3RoIHJlcGVhdCIsbi5tb2RlPUluO2JyZWFrfWZvcig7bS0tOyluLmxlbnNbbi5oYXZlKytdPUN9fWlmKG4ubW9kZT09PUluKWJyZWFrO2lmKG4ubGVuc1syNTZdPT09MCl7ZS5tc2c9ImludmFsaWQgY29kZSAtLSBtaXNzaW5nIGVuZC1vZi1ibG9jayIsbi5tb2RlPUluO2JyZWFrfWlmKG4ubGVuYml0cz05LFA9e2JpdHM6bi5sZW5iaXRzfSxJPXdkKGxPLG4ubGVucywwLG4ubmxlbixuLmxlbmNvZGUsMCxuLndvcmssUCksbi5sZW5iaXRzPVAuYml0cyxJKXtlLm1zZz0iaW52YWxpZCBsaXRlcmFsL2xlbmd0aHMgc2V0IixuLm1vZGU9SW47YnJlYWt9aWYobi5kaXN0Yml0cz02LG4uZGlzdGNvZGU9bi5kaXN0ZHluLFA9e2JpdHM6bi5kaXN0Yml0c30sST13ZChoTyxuLmxlbnMsbi5ubGVuLG4ubmRpc3Qsbi5kaXN0Y29kZSwwLG4ud29yayxQKSxuLmRpc3RiaXRzPVAuYml0cyxJKXtlLm1zZz0iaW52YWxpZCBkaXN0YW5jZXMgc2V0IixuLm1vZGU9SW47YnJlYWt9aWYobi5tb2RlPV9tLHQ9PT1nbSlicmVhayBlO2Nhc2UgX206bi5tb2RlPXltO2Nhc2UgeW06aWYoZj49NiYmZD49MjU4KXtlLm5leHRfb3V0PWksZS5hdmFpbF9vdXQ9ZCxlLm5leHRfaW49cixlLmF2YWlsX2luPWYsbi5ob2xkPWMsbi5iaXRzPXUsZjQoZSxoKSxpPWUubmV4dF9vdXQsYT1lLm91dHB1dCxkPWUuYXZhaWxfb3V0LHI9ZS5uZXh0X2luLG89ZS5pbnB1dCxmPWUuYXZhaWxfaW4sYz1uLmhvbGQsdT1uLmJpdHMsbi5tb2RlPT09ZWkmJihuLmJhY2s9LTEpO2JyZWFrfWZvcihuLmJhY2s9MDt5PW4ubGVuY29kZVtjJigxPDxuLmxlbmJpdHMpLTFdLFQ9eT4+PjI0LF89eT4+PjE2JjI1NSxFPXkmNjU1MzUsIShUPD11KTspe2lmKGY9PT0wKWJyZWFrIGU7Zi0tLGMrPW9bcisrXTw8dSx1Kz04fWlmKF8mJihfJjI0MCk9PT0wKXtmb3Iodz1ULFI9XyxTPUU7eT1uLmxlbmNvZGVbUysoKGMmKDE8PHcrUiktMSk+PncpXSxUPXk+Pj4yNCxfPXk+Pj4xNiYyNTUsRT15JjY1NTM1LCEodytUPD11KTspe2lmKGY9PT0wKWJyZWFrIGU7Zi0tLGMrPW9bcisrXTw8dSx1Kz04fWM+Pj49dyx1LT13LG4uYmFjays9d31pZihjPj4+PVQsdS09VCxuLmJhY2srPVQsbi5sZW5ndGg9RSxfPT09MCl7bi5tb2RlPWNPO2JyZWFrfWlmKF8mMzIpe24uYmFjaz0tMSxuLm1vZGU9ZWk7YnJlYWt9aWYoXyY2NCl7ZS5tc2c9ImludmFsaWQgbGl0ZXJhbC9sZW5ndGggY29kZSIsbi5tb2RlPUluO2JyZWFrfW4uZXh0cmE9XyYxNSxuLm1vZGU9b087Y2FzZSBvTzppZihuLmV4dHJhKXtmb3IoRj1uLmV4dHJhO3U8Rjspe2lmKGY9PT0wKWJyZWFrIGU7Zi0tLGMrPW9bcisrXTw8dSx1Kz04fW4ubGVuZ3RoKz1jJigxPDxuLmV4dHJhKS0xLGM+Pj49bi5leHRyYSx1LT1uLmV4dHJhLG4uYmFjays9bi5leHRyYX1uLndhcz1uLmxlbmd0aCxuLm1vZGU9YU87Y2FzZSBhTzpmb3IoO3k9bi5kaXN0Y29kZVtjJigxPDxuLmRpc3RiaXRzKS0xXSxUPXk+Pj4yNCxfPXk+Pj4xNiYyNTUsRT15JjY1NTM1LCEoVDw9dSk7KXtpZihmPT09MClicmVhayBlO2YtLSxjKz1vW3IrK108PHUsdSs9OH1pZigoXyYyNDApPT09MCl7Zm9yKHc9VCxSPV8sUz1FO3k9bi5kaXN0Y29kZVtTKygoYyYoMTw8dytSKS0xKT4+dyldLFQ9eT4+PjI0LF89eT4+PjE2JjI1NSxFPXkmNjU1MzUsISh3K1Q8PXUpOyl7aWYoZj09PTApYnJlYWsgZTtmLS0sYys9b1tyKytdPDx1LHUrPTh9Yz4+Pj13LHUtPXcsbi5iYWNrKz13fWlmKGM+Pj49VCx1LT1ULG4uYmFjays9VCxfJjY0KXtlLm1zZz0iaW52YWxpZCBkaXN0YW5jZSBjb2RlIixuLm1vZGU9SW47YnJlYWt9bi5vZmZzZXQ9RSxuLmV4dHJhPV8mMTUsbi5tb2RlPXJPO2Nhc2Ugck86aWYobi5leHRyYSl7Zm9yKEY9bi5leHRyYTt1PEY7KXtpZihmPT09MClicmVhayBlO2YtLSxjKz1vW3IrK108PHUsdSs9OH1uLm9mZnNldCs9YyYoMTw8bi5leHRyYSktMSxjPj4+PW4uZXh0cmEsdS09bi5leHRyYSxuLmJhY2srPW4uZXh0cmF9aWYobi5vZmZzZXQ+bi5kbWF4KXtlLm1zZz0iaW52YWxpZCBkaXN0YW5jZSB0b28gZmFyIGJhY2siLG4ubW9kZT1JbjticmVha31uLm1vZGU9aU87Y2FzZSBpTzppZihkPT09MClicmVhayBlO2lmKG09aC1kLG4ub2Zmc2V0Pm0pe2lmKG09bi5vZmZzZXQtbSxtPm4ud2hhdmUmJm4uc2FuZSl7ZS5tc2c9ImludmFsaWQgZGlzdGFuY2UgdG9vIGZhciBiYWNrIixuLm1vZGU9SW47YnJlYWt9bT5uLnduZXh0PyhtLT1uLnduZXh0LGI9bi53c2l6ZS1tKTpiPW4ud25leHQtbSxtPm4ubGVuZ3RoJiYobT1uLmxlbmd0aCkscD1uLndpbmRvd31lbHNlIHA9YSxiPWktbi5vZmZzZXQsbT1uLmxlbmd0aDttPmQmJihtPWQpLGQtPW0sbi5sZW5ndGgtPW07ZG8gYVtpKytdPXBbYisrXTt3aGlsZSgtLW0pO24ubGVuZ3RoPT09MCYmKG4ubW9kZT15bSk7YnJlYWs7Y2FzZSBjTzppZihkPT09MClicmVhayBlO2FbaSsrXT1uLmxlbmd0aCxkLS0sbi5tb2RlPXltO2JyZWFrO2Nhc2UgZ3k6aWYobi53cmFwKXtmb3IoO3U8MzI7KXtpZihmPT09MClicmVhayBlO2YtLSxjfD1vW3IrK108PHUsdSs9OH1pZihoLT1kLGUudG90YWxfb3V0Kz1oLG4udG90YWwrPWgsbi53cmFwJjQmJmgmJihlLmFkbGVyPW4uY2hlY2s9bi5mbGFncz94cihuLmNoZWNrLGEsaCxpLWgpOkF5KG4uY2hlY2ssYSxoLGktaCkpLGg9ZCxuLndyYXAmNCYmKG4uZmxhZ3M/YzpkTyhjKSkhPT1uLmNoZWNrKXtlLm1zZz0iaW5jb3JyZWN0IGRhdGEgY2hlY2siLG4ubW9kZT1JbjticmVha31jPTAsdT0wfW4ubW9kZT1zTztjYXNlIHNPOmlmKG4ud3JhcCYmbi5mbGFncyl7Zm9yKDt1PDMyOyl7aWYoZj09PTApYnJlYWsgZTtmLS0sYys9b1tyKytdPDx1LHUrPTh9aWYobi53cmFwJjQmJmMhPT0obi50b3RhbCY0Mjk0OTY3Mjk1KSl7ZS5tc2c9ImluY29ycmVjdCBsZW5ndGggY2hlY2siLG4ubW9kZT1JbjticmVha31jPTAsdT0wfW4ubW9kZT1mTztjYXNlIGZPOkk9bDQ7YnJlYWsgZTtjYXNlIEluOkk9bU87YnJlYWsgZTtjYXNlIFR5OnJldHVybiB3eTtjYXNlIGJPOmRlZmF1bHQ6cmV0dXJuIEZhfXJldHVybiBlLm5leHRfb3V0PWksZS5hdmFpbF9vdXQ9ZCxlLm5leHRfaW49cixlLmF2YWlsX2luPWYsbi5ob2xkPWMsbi5iaXRzPXUsKG4ud3NpemV8fGghPT1lLmF2YWlsX291dCYmbi5tb2RlPEluJiYobi5tb2RlPGd5fHx0IT09ejIpKSYmQU8oZSxlLm91dHB1dCxlLm5leHRfb3V0LGgtZS5hdmFpbF9vdXQpPyhuLm1vZGU9VHksd3kpOihsLT1lLmF2YWlsX2luLGgtPWUuYXZhaWxfb3V0LGUudG90YWxfaW4rPWwsZS50b3RhbF9vdXQrPWgsbi50b3RhbCs9aCxuLndyYXAmNCYmaCYmKGUuYWRsZXI9bi5jaGVjaz1uLmZsYWdzP3hyKG4uY2hlY2ssYSxoLGUubmV4dF9vdXQtaCk6QXkobi5jaGVjayxhLGgsZS5uZXh0X291dC1oKSksZS5kYXRhX3R5cGU9bi5iaXRzKyhuLmxhc3Q/NjQ6MCkrKG4ubW9kZT09PWVpPzEyODowKSsobi5tb2RlPT09X218fG4ubW9kZT09PXB5PzI1NjowKSwobD09PTAmJmg9PT0wfHx0PT09ejIpJiZJPT09TmMmJihJPW00KSxJKX0sRTQ9ZT0+e2lmKEljKGUpKXJldHVybiBGYTtsZXQgdD1lLnN0YXRlO3JldHVybiB0LndpbmRvdyYmKHQud2luZG93PW51bGwpLGUuc3RhdGU9bnVsbCxOY30sUjQ9KGUsdCk9PntpZihJYyhlKSlyZXR1cm4gRmE7bGV0IG49ZS5zdGF0ZTtyZXR1cm4obi53cmFwJjIpPT09MD9GYToobi5oZWFkPXQsdC5kb25lPSExLE5jKX0seDQ9KGUsdCk9PntsZXQgbj10Lmxlbmd0aCxvLGEscjtyZXR1cm4gSWMoZSl8fChvPWUuc3RhdGUsby53cmFwIT09MCYmby5tb2RlIT09QW0pP0ZhOm8ubW9kZT09PUFtJiYoYT0xLGE9QXkoYSx0LG4sMCksYSE9PW8uY2hlY2spP21POihyPUFPKGUsdCxuLG4pLHI/KG8ubW9kZT1UeSx3eSk6KG8uaGF2ZWRpY3Q9MSxOYykpfTtlci5leHBvcnRzLmluZmxhdGVSZXNldD1nTztlci5leHBvcnRzLmluZmxhdGVSZXNldDI9X087ZXIuZXhwb3J0cy5pbmZsYXRlUmVzZXRLZWVwPXBPO2VyLmV4cG9ydHMuaW5mbGF0ZUluaXQ9QTQ7ZXIuZXhwb3J0cy5pbmZsYXRlSW5pdDI9eU87ZXIuZXhwb3J0cy5pbmZsYXRlPVQ0O2VyLmV4cG9ydHMuaW5mbGF0ZUVuZD1FNDtlci5leHBvcnRzLmluZmxhdGVHZXRIZWFkZXI9UjQ7ZXIuZXhwb3J0cy5pbmZsYXRlU2V0RGljdGlvbmFyeT14NDtlci5leHBvcnRzLmluZmxhdGVJbmZvPSJwYWtvIGluZmxhdGUgKGZyb20gTm9kZWNhIHByb2plY3QpIn0pO3ZhciBUTz1lbygoZmxlLEV5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgTzQ9KGUsdCk9Pk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHQpO0V5LmV4cG9ydHMuYXNzaWduPWZ1bmN0aW9uKGUpe2xldCB0PUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKTtmb3IoO3QubGVuZ3RoOyl7bGV0IG49dC5zaGlmdCgpO2lmKG4pe2lmKHR5cGVvZiBuIT0ib2JqZWN0Iil0aHJvdyBuZXcgVHlwZUVycm9yKG4rIm11c3QgYmUgbm9uLW9iamVjdCIpO2ZvcihsZXQgbyBpbiBuKU80KG4sbykmJihlW29dPW5bb10pfX1yZXR1cm4gZX07RXkuZXhwb3J0cy5mbGF0dGVuQ2h1bmtzPWU9PntsZXQgdD0wO2ZvcihsZXQgbz0wLGE9ZS5sZW5ndGg7bzxhO28rKyl0Kz1lW29dLmxlbmd0aDtsZXQgbj1uZXcgVWludDhBcnJheSh0KTtmb3IobGV0IG89MCxhPTAscj1lLmxlbmd0aDtvPHI7bysrKXtsZXQgaT1lW29dO24uc2V0KGksYSksYSs9aS5sZW5ndGh9cmV0dXJuIG59fSk7dmFyIFJPPWVvKChkbGUsVG0pPT57InVzZSBzdHJpY3QiO3ZhciBFTz0hMDt0cnl7U3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLG5ldyBVaW50OEFycmF5KDEpKX1jYXRjaHtFTz0hMX12YXIgVGQ9bmV3IFVpbnQ4QXJyYXkoMjU2KTtmb3IobGV0IGU9MDtlPDI1NjtlKyspVGRbZV09ZT49MjUyPzY6ZT49MjQ4PzU6ZT49MjQwPzQ6ZT49MjI0PzM6ZT49MTkyPzI6MTtUZFsyNTRdPVRkWzI1NF09MTtUbS5leHBvcnRzLnN0cmluZzJidWY9ZT0+e2lmKHR5cGVvZiBUZXh0RW5jb2Rlcj09ImZ1bmN0aW9uIiYmVGV4dEVuY29kZXIucHJvdG90eXBlLmVuY29kZSlyZXR1cm4gbmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKGUpO2xldCB0LG4sbyxhLHIsaT1lLmxlbmd0aCxmPTA7Zm9yKGE9MDthPGk7YSsrKW49ZS5jaGFyQ29kZUF0KGEpLChuJjY0NTEyKT09PTU1Mjk2JiZhKzE8aSYmKG89ZS5jaGFyQ29kZUF0KGErMSksKG8mNjQ1MTIpPT09NTYzMjAmJihuPTY1NTM2KyhuLTU1Mjk2PDwxMCkrKG8tNTYzMjApLGErKykpLGYrPW48MTI4PzE6bjwyMDQ4PzI6bjw2NTUzNj8zOjQ7Zm9yKHQ9bmV3IFVpbnQ4QXJyYXkoZikscj0wLGE9MDtyPGY7YSsrKW49ZS5jaGFyQ29kZUF0KGEpLChuJjY0NTEyKT09PTU1Mjk2JiZhKzE8aSYmKG89ZS5jaGFyQ29kZUF0KGErMSksKG8mNjQ1MTIpPT09NTYzMjAmJihuPTY1NTM2KyhuLTU1Mjk2PDwxMCkrKG8tNTYzMjApLGErKykpLG48MTI4P3RbcisrXT1uOm48MjA0OD8odFtyKytdPTE5MnxuPj4+Nix0W3IrK109MTI4fG4mNjMpOm48NjU1MzY/KHRbcisrXT0yMjR8bj4+PjEyLHRbcisrXT0xMjh8bj4+PjYmNjMsdFtyKytdPTEyOHxuJjYzKToodFtyKytdPTI0MHxuPj4+MTgsdFtyKytdPTEyOHxuPj4+MTImNjMsdFtyKytdPTEyOHxuPj4+NiY2Myx0W3IrK109MTI4fG4mNjMpO3JldHVybiB0fTt2YXIgUzQ9KGUsdCk9PntpZih0PDY1NTM0JiZlLnN1YmFycmF5JiZFTylyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLGUubGVuZ3RoPT09dD9lOmUuc3ViYXJyYXkoMCx0KSk7bGV0IG49IiI7Zm9yKGxldCBvPTA7bzx0O28rKyluKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGVbb10pO3JldHVybiBufTtUbS5leHBvcnRzLmJ1ZjJzdHJpbmc9KGUsdCk9PntsZXQgbj10fHxlLmxlbmd0aDtpZih0eXBlb2YgVGV4dERlY29kZXI9PSJmdW5jdGlvbiImJlRleHREZWNvZGVyLnByb3RvdHlwZS5kZWNvZGUpcmV0dXJuIG5ldyBUZXh0RGVjb2RlcigpLmRlY29kZShlLnN1YmFycmF5KDAsdCkpO2xldCBvLGEscj1uZXcgQXJyYXkobioyKTtmb3IoYT0wLG89MDtvPG47KXtsZXQgaT1lW28rK107aWYoaTwxMjgpe3JbYSsrXT1pO2NvbnRpbnVlfWxldCBmPVRkW2ldO2lmKGY+NCl7clthKytdPTY1NTMzLG8rPWYtMTtjb250aW51ZX1mb3IoaSY9Zj09PTI/MzE6Zj09PTM/MTU6NztmPjEmJm88bjspaT1pPDw2fGVbbysrXSY2MyxmLS07aWYoZj4xKXtyW2ErK109NjU1MzM7Y29udGludWV9aTw2NTUzNj9yW2ErK109aTooaS09NjU1MzYsclthKytdPTU1Mjk2fGk+PjEwJjEwMjMsclthKytdPTU2MzIwfGkmMTAyMyl9cmV0dXJuIFM0KHIsYSl9O1RtLmV4cG9ydHMudXRmOGJvcmRlcj0oZSx0KT0+e3Q9dHx8ZS5sZW5ndGgsdD5lLmxlbmd0aCYmKHQ9ZS5sZW5ndGgpO2xldCBuPXQtMTtmb3IoO24+PTAmJihlW25dJjE5Mik9PT0xMjg7KW4tLTtyZXR1cm4gbjwwfHxuPT09MD90Om4rVGRbZVtuXV0+dD9uOnR9fSk7dmFyIE9PPWVvKCh1bGUseE8pPT57InVzZSBzdHJpY3QiO3hPLmV4cG9ydHM9ezI6Im5lZWQgZGljdGlvbmFyeSIsMToic3RyZWFtIGVuZCIsMDoiIiwiLTEiOiJmaWxlIGVycm9yIiwiLTIiOiJzdHJlYW0gZXJyb3IiLCItMyI6ImRhdGEgZXJyb3IiLCItNCI6Imluc3VmZmljaWVudCBtZW1vcnkiLCItNSI6ImJ1ZmZlciBlcnJvciIsIi02IjoiaW5jb21wYXRpYmxlIHZlcnNpb24ifX0pO3ZhciBDTz1lbygobGxlLFNPKT0+eyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBDNCgpe3RoaXMuaW5wdXQ9bnVsbCx0aGlzLm5leHRfaW49MCx0aGlzLmF2YWlsX2luPTAsdGhpcy50b3RhbF9pbj0wLHRoaXMub3V0cHV0PW51bGwsdGhpcy5uZXh0X291dD0wLHRoaXMuYXZhaWxfb3V0PTAsdGhpcy50b3RhbF9vdXQ9MCx0aGlzLm1zZz0iIix0aGlzLnN0YXRlPW51bGwsdGhpcy5kYXRhX3R5cGU9Mix0aGlzLmFkbGVyPTB9U08uZXhwb3J0cz1DNH0pO3ZhciBOTz1lbygoaGxlLE1PKT0+eyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBNNCgpe3RoaXMudGV4dD0wLHRoaXMudGltZT0wLHRoaXMueGZsYWdzPTAsdGhpcy5vcz0wLHRoaXMuZXh0cmE9bnVsbCx0aGlzLmV4dHJhX2xlbj0wLHRoaXMubmFtZT0iIix0aGlzLmNvbW1lbnQ9IiIsdGhpcy5oY3JjPTAsdGhpcy5kb25lPSExfU1PLmV4cG9ydHM9TTR9KTt2YXIgdk89ZW8oKG1sZSxXcyk9PnsidXNlIHN0cmljdCI7dmFyIHRpPXdPKCksUE89VE8oKSxPeT1STygpLFN5PU9PKCksTjQ9Q08oKSxJND1OTygpLGtPPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcse1pfTk9fRkxVU0g6UDQsWl9GSU5JU0g6azQsWl9PSzpFZCxaX1NUUkVBTV9FTkQ6UnksWl9ORUVEX0RJQ1Q6eHksWl9TVFJFQU1fRVJST1I6djQsWl9EQVRBX0VSUk9SOklPLFpfTUVNX0VSUk9SOkY0fT1wbSgpO2Z1bmN0aW9uIFJkKGUpe3RoaXMub3B0aW9ucz1QTy5hc3NpZ24oe2NodW5rU2l6ZToxMDI0KjY0LHdpbmRvd0JpdHM6MTUsdG86IiJ9LGV8fHt9KTtsZXQgdD10aGlzLm9wdGlvbnM7dC5yYXcmJnQud2luZG93Qml0cz49MCYmdC53aW5kb3dCaXRzPDE2JiYodC53aW5kb3dCaXRzPS10LndpbmRvd0JpdHMsdC53aW5kb3dCaXRzPT09MCYmKHQud2luZG93Qml0cz0tMTUpKSx0LndpbmRvd0JpdHM+PTAmJnQud2luZG93Qml0czwxNiYmIShlJiZlLndpbmRvd0JpdHMpJiYodC53aW5kb3dCaXRzKz0zMiksdC53aW5kb3dCaXRzPjE1JiZ0LndpbmRvd0JpdHM8NDgmJih0LndpbmRvd0JpdHMmMTUpPT09MCYmKHQud2luZG93Qml0c3w9MTUpLHRoaXMuZXJyPTAsdGhpcy5tc2c9IiIsdGhpcy5lbmRlZD0hMSx0aGlzLmNodW5rcz1bXSx0aGlzLnN0cm09bmV3IE40LHRoaXMuc3RybS5hdmFpbF9vdXQ9MDtsZXQgbj10aS5pbmZsYXRlSW5pdDIodGhpcy5zdHJtLHQud2luZG93Qml0cyk7aWYobiE9PUVkKXRocm93IG5ldyBFcnJvcihTeVtuXSk7aWYodGhpcy5oZWFkZXI9bmV3IEk0LHRpLmluZmxhdGVHZXRIZWFkZXIodGhpcy5zdHJtLHRoaXMuaGVhZGVyKSx0LmRpY3Rpb25hcnkmJih0eXBlb2YgdC5kaWN0aW9uYXJ5PT0ic3RyaW5nIj90LmRpY3Rpb25hcnk9T3kuc3RyaW5nMmJ1Zih0LmRpY3Rpb25hcnkpOmtPLmNhbGwodC5kaWN0aW9uYXJ5KT09PSJbb2JqZWN0IEFycmF5QnVmZmVyXSImJih0LmRpY3Rpb25hcnk9bmV3IFVpbnQ4QXJyYXkodC5kaWN0aW9uYXJ5KSksdC5yYXcmJihuPXRpLmluZmxhdGVTZXREaWN0aW9uYXJ5KHRoaXMuc3RybSx0LmRpY3Rpb25hcnkpLG4hPT1FZCkpKXRocm93IG5ldyBFcnJvcihTeVtuXSl9UmQucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24oZSx0KXtsZXQgbj10aGlzLnN0cm0sbz10aGlzLm9wdGlvbnMuY2h1bmtTaXplLGE9dGhpcy5vcHRpb25zLmRpY3Rpb25hcnkscixpLGY7aWYodGhpcy5lbmRlZClyZXR1cm4hMTtmb3IodD09PX5+dD9pPXQ6aT10PT09ITA/azQ6UDQsa08uY2FsbChlKT09PSJbb2JqZWN0IEFycmF5QnVmZmVyXSI/bi5pbnB1dD1uZXcgVWludDhBcnJheShlKTpuLmlucHV0PWUsbi5uZXh0X2luPTAsbi5hdmFpbF9pbj1uLmlucHV0Lmxlbmd0aDs7KXtmb3Iobi5hdmFpbF9vdXQ9PT0wJiYobi5vdXRwdXQ9bmV3IFVpbnQ4QXJyYXkobyksbi5uZXh0X291dD0wLG4uYXZhaWxfb3V0PW8pLHI9dGkuaW5mbGF0ZShuLGkpLHI9PT14eSYmYSYmKHI9dGkuaW5mbGF0ZVNldERpY3Rpb25hcnkobixhKSxyPT09RWQ/cj10aS5pbmZsYXRlKG4saSk6cj09PUlPJiYocj14eSkpO24uYXZhaWxfaW4+MCYmcj09PVJ5JiZuLnN0YXRlLndyYXA+MCYmZVtuLm5leHRfaW5dIT09MDspdGkuaW5mbGF0ZVJlc2V0KG4pLHI9dGkuaW5mbGF0ZShuLGkpO3N3aXRjaChyKXtjYXNlIHY0OmNhc2UgSU86Y2FzZSB4eTpjYXNlIEY0OnJldHVybiB0aGlzLm9uRW5kKHIpLHRoaXMuZW5kZWQ9ITAsITF9aWYoZj1uLmF2YWlsX291dCxuLm5leHRfb3V0JiYobi5hdmFpbF9vdXQ9PT0wfHxyPT09UnkpKWlmKHRoaXMub3B0aW9ucy50bz09PSJzdHJpbmciKXtsZXQgZD1PeS51dGY4Ym9yZGVyKG4ub3V0cHV0LG4ubmV4dF9vdXQpLGM9bi5uZXh0X291dC1kLHU9T3kuYnVmMnN0cmluZyhuLm91dHB1dCxkKTtuLm5leHRfb3V0PWMsbi5hdmFpbF9vdXQ9by1jLGMmJm4ub3V0cHV0LnNldChuLm91dHB1dC5zdWJhcnJheShkLGQrYyksMCksdGhpcy5vbkRhdGEodSl9ZWxzZSB0aGlzLm9uRGF0YShuLm91dHB1dC5sZW5ndGg9PT1uLm5leHRfb3V0P24ub3V0cHV0Om4ub3V0cHV0LnN1YmFycmF5KDAsbi5uZXh0X291dCkpO2lmKCEocj09PUVkJiZmPT09MCkpe2lmKHI9PT1SeSlyZXR1cm4gcj10aS5pbmZsYXRlRW5kKHRoaXMuc3RybSksdGhpcy5vbkVuZChyKSx0aGlzLmVuZGVkPSEwLCEwO2lmKG4uYXZhaWxfaW49PT0wKWJyZWFrfX1yZXR1cm4hMH07UmQucHJvdG90eXBlLm9uRGF0YT1mdW5jdGlvbihlKXt0aGlzLmNodW5rcy5wdXNoKGUpfTtSZC5wcm90b3R5cGUub25FbmQ9ZnVuY3Rpb24oZSl7ZT09PUVkJiYodGhpcy5vcHRpb25zLnRvPT09InN0cmluZyI/dGhpcy5yZXN1bHQ9dGhpcy5jaHVua3Muam9pbigiIik6dGhpcy5yZXN1bHQ9UE8uZmxhdHRlbkNodW5rcyh0aGlzLmNodW5rcykpLHRoaXMuY2h1bmtzPVtdLHRoaXMuZXJyPWUsdGhpcy5tc2c9dGhpcy5zdHJtLm1zZ307ZnVuY3Rpb24gQ3koZSx0KXtsZXQgbj1uZXcgUmQodCk7aWYobi5wdXNoKGUpLG4uZXJyKXRocm93IG4ubXNnfHxTeVtuLmVycl07cmV0dXJuIG4ucmVzdWx0fWZ1bmN0aW9uIEQ0KGUsdCl7cmV0dXJuIHQ9dHx8e30sdC5yYXc9ITAsQ3koZSx0KX1Xcy5leHBvcnRzLkluZmxhdGU9UmQ7V3MuZXhwb3J0cy5pbmZsYXRlPUN5O1dzLmV4cG9ydHMuaW5mbGF0ZVJhdz1ENDtXcy5leHBvcnRzLnVuZ3ppcD1DeTtXcy5leHBvcnRzLmNvbnN0YW50cz1wbSgpfSk7dmFyIE15PXt9O3J0KE15LHtkZWZhdWx0OigpPT5LNH0pO2Z1bmN0aW9uIEI0KGUsdCl7bGV0IG49amkuZnJvbVN0cmluZyhlLnR5cGUpLG89ZS5idWZmZXI7TzIoZS5rZXksbyk7bGV0IGE9SDQobyk7bz1hLmJ1ZmZlcjtsZXQgcj1hLmxlbmd0aDtzd2l0Y2gobil7Y2FzZSBqaS5NRVRBREFUQTpyZXR1cm4gTDQobyxyLGUucXVhZEtleSk7Y2FzZSBqaS5URVJSQUlOOnJldHVybiBHNChvLHIsdCk7Y2FzZSBqaS5EQlJPT1Q6cmV0dXJuIHQucHVzaChvKSx7YnVmZmVyOm99fX1mdW5jdGlvbiBMNChlLHQsbil7bGV0IG89bmV3IERhdGFWaWV3KGUpLGE9MCxyPW8uZ2V0VWludDMyKGEsITApO2lmKGErPVlzLHIhPT1VNCl0aHJvdyBuZXcgdXQoIkludmFsaWQgbWFnaWMiKTtsZXQgaT1vLmdldFVpbnQzMihhLCEwKTtpZihhKz1ZcyxpIT09MSl0aHJvdyBuZXcgdXQoIkludmFsaWQgZGF0YSB0eXBlLiBNdXN0IGJlIDEgZm9yIFF1YWRUcmVlUGFja2V0Iik7bGV0IGY9by5nZXRVaW50MzIoYSwhMCk7aWYoYSs9WXMsZiE9PTIpdGhyb3cgbmV3IHV0KCJJbnZhbGlkIFF1YWRUcmVlUGFja2V0IHZlcnNpb24uIE9ubHkgdmVyc2lvbiAyIGlzIHN1cHBvcnRlZC4iKTtsZXQgZD1vLmdldEludDMyKGEsITApO2ErPVBjO2xldCBjPW8uZ2V0SW50MzIoYSwhMCk7aWYoYSs9UGMsYyE9PTMyKXRocm93IG5ldyB1dCgiSW52YWxpZCBpbnN0YW5jZSBzaXplLiIpO2xldCB1PW8uZ2V0SW50MzIoYSwhMCk7YSs9UGM7bGV0IGw9by5nZXRJbnQzMihhLCEwKTthKz1QYztsZXQgaD1vLmdldEludDMyKGEsITApO2lmKGErPVBjLHUhPT1kKmMrYSl0aHJvdyBuZXcgdXQoIkludmFsaWQgZGF0YUJ1ZmZlck9mZnNldCIpO2lmKHUrbCtoIT09dCl0aHJvdyBuZXcgdXQoIkludmFsaWQgcGFja2V0IG9mZnNldHMiKTtsZXQgbT1bXTtmb3IobGV0IEU9MDtFPGQ7KytFKXtsZXQgdz1vLmdldFVpbnQ4KGEpOysrYSwrK2E7bGV0IFI9by5nZXRVaW50MTYoYSwhMCk7YSs9WHM7bGV0IFM9by5nZXRVaW50MTYoYSwhMCk7YSs9WHM7bGV0IEM9by5nZXRVaW50MTYoYSwhMCk7YSs9WHMsYSs9WHMsYSs9WHMsYSs9UGMsYSs9UGMsYSs9ODtsZXQgST1vLmdldFVpbnQ4KGErKyksTj1vLmdldFVpbnQ4KGErKyk7YSs9WHMsbS5wdXNoKG5ldyBOMih3LFIsUyxDLEksTikpfWxldCBiPVtdLHA9MDtmdW5jdGlvbiB5KEUsdyxSKXtsZXQgUz0hMTtpZihSPT09NCl7aWYody5oYXNTdWJ0cmVlKCkpcmV0dXJuO1M9ITB9Zm9yKGxldCBDPTA7Qzw0OysrQyl7bGV0IEk9RStDLnRvU3RyaW5nKCk7aWYoUyliW0ldPW51bGw7ZWxzZSBpZihSPDQpaWYoIXcuaGFzQ2hpbGQoQykpYltJXT1udWxsO2Vsc2V7aWYocD09PWQpe2NvbnNvbGUubG9nKCJJbmNvcnJlY3QgbnVtYmVyIG9mIGluc3RhbmNlcyIpO3JldHVybn1sZXQgTj1tW3ArK107YltJXT1OLHkoSSxOLFIrMSl9fX1sZXQgVD0wLF89bVtwKytdO3JldHVybiBuPT09IiI/KytUOmJbbl09Xyx5KG4sXyxUKSxifWZ1bmN0aW9uIEc0KGUsdCxuKXtsZXQgbz1uZXcgRGF0YVZpZXcoZSksYT1mdW5jdGlvbihmKXtmb3IobGV0IGQ9MDtkPHo0OysrZCl7bGV0IGM9by5nZXRVaW50MzIoZiwhMCk7aWYoZis9WXMsZis9YyxmPnQpdGhyb3cgbmV3IHV0KCJNYWxmb3JtZWQgdGVycmFpbiBwYWNrZXQgZm91bmQuIil9cmV0dXJuIGZ9LHI9MCxpPVtdO2Zvcig7aS5sZW5ndGg8ajQ7KXtsZXQgZj1yO3I9YShyKTtsZXQgZD1lLnNsaWNlKGYscik7bi5wdXNoKGQpLGkucHVzaChkKX1yZXR1cm4gaX1mdW5jdGlvbiBINChlKXtsZXQgdD1uZXcgRGF0YVZpZXcoZSksbj0wLG89dC5nZXRVaW50MzIobiwhMCk7aWYobis9WXMsbyE9PUZPJiZvIT09VjQpdGhyb3cgbmV3IHV0KCJJbnZhbGlkIG1hZ2ljIik7bGV0IGE9dC5nZXRVaW50MzIobixvPT09Rk8pO24rPVlzO2xldCByPW5ldyBVaW50OEFycmF5KGUsbiksaT1ETy5kZWZhdWx0LmluZmxhdGUocik7aWYoaS5sZW5ndGghPT1hKXRocm93IG5ldyB1dCgiU2l6ZSBvZiBwYWNrZXQgZG9lc24ndCBtYXRjaCBoZWFkZXIiKTtyZXR1cm4gaX12YXIgRE8sWHMsUGMsWXMsamksVTQsajQsejQsRk8sVjQsSzQsTnk9WCgoKT0+e1MyKCk7STIoKTtqYSgpO0RPPWNhKHZPKCksMSk7VW4oKTtYcz1VaW50MTZBcnJheS5CWVRFU19QRVJfRUxFTUVOVCxQYz1JbnQzMkFycmF5LkJZVEVTX1BFUl9FTEVNRU5ULFlzPVVpbnQzMkFycmF5LkJZVEVTX1BFUl9FTEVNRU5ULGppPXtNRVRBREFUQTowLFRFUlJBSU46MSxEQlJPT1Q6Mn07amkuZnJvbVN0cmluZz1mdW5jdGlvbihlKXtpZihlPT09Ik1ldGFkYXRhIilyZXR1cm4gamkuTUVUQURBVEE7aWYoZT09PSJUZXJyYWluIilyZXR1cm4gamkuVEVSUkFJTjtpZihlPT09IkRiUm9vdCIpcmV0dXJuIGppLkRCUk9PVH07VTQ9MzIzMDE7ajQ9NSx6ND00O0ZPPTE5NTMwMjk4MDUsVjQ9MjkxNzAzNDEwMDtLND1BdChCNCl9KTtmdW5jdGlvbiBxNChlKXtyZXR1cm4gZTw9LjA0MDQ1P2UqLjA3NzM5OTM4MDgwNDk1MzU3Ok1hdGgucG93KChlKy4wNTUpKi45NDc4NjcyOTg1NzgxOTkxLDIuNCl9dmFyIEVtLEJPPVgoKCk9PntFbT1xNH0pO3ZhciB2eT17fTtydCh2eSx7ZGVmYXVsdDooKT0+XzZ9KTtmdW5jdGlvbiBXNChlLHQsbixvLGEscil7bGV0IGk9biooMS1lKStvKmUsZj1hKigxLWUpK3IqZTtyZXR1cm4gaSooMS10KStmKnR9ZnVuY3Rpb24gUm0oZSx0LG4sbyl7bGV0IGE9ZSt0Km47cmV0dXJuIG9bYV19ZnVuY3Rpb24gWDQoZSx0LG4pe2xldCBvPW4ubmF0aXZlRXh0ZW50LGE9KGUtby53ZXN0KS8oby5lYXN0LW8ud2VzdCkqKG4ud2lkdGgtMSkscj0odC1vLnNvdXRoKS8oby5ub3J0aC1vLnNvdXRoKSoobi5oZWlnaHQtMSksaT1NYXRoLmZsb29yKGEpLGY9TWF0aC5mbG9vcihyKTthLT1pLHItPWY7bGV0IGQ9aTxuLndpZHRoP2krMTppLGM9ZjxuLmhlaWdodD9mKzE6ZjtmPW4uaGVpZ2h0LTEtZixjPW4uaGVpZ2h0LTEtYztsZXQgdT1SbShpLGYsbi53aWR0aCxuLmJ1ZmZlciksbD1SbShkLGYsbi53aWR0aCxuLmJ1ZmZlciksaD1SbShpLGMsbi53aWR0aCxuLmJ1ZmZlciksbT1SbShkLGMsbi53aWR0aCxuLmJ1ZmZlciksYj1XNChhLHIsdSxsLGgsbSk7cmV0dXJuIGI9YipuLnNjYWxlK24ub2Zmc2V0LGJ9ZnVuY3Rpb24gVU8oZSx0LG4pe2ZvcihsZXQgbz0wO288bi5sZW5ndGg7bysrKXtsZXQgYT1uW29dLm5hdGl2ZUV4dGVudCxyPW5ldyBzO2lmKG5bb10ucHJvamVjdGlvblR5cGU9PT0iV2ViTWVyY2F0b3IiKXtsZXQgaT1uW29dLnByb2plY3Rpb24uX2VsbGlwc29pZC5fcmFkaWk7cj1uZXcgUm4obmV3IHEoaS54LGkueSxpLnopKS5wcm9qZWN0KG5ldyByZShlLHQsMCkpfWVsc2Ugci54PWUsci55PXQ7aWYoci54PmEud2VzdCYmci54PGEuZWFzdCYmci55PmEuc291dGgmJnIueTxhLm5vcnRoKXJldHVybiBYNChyLngsci55LG5bb10pfXJldHVybiAwfWZ1bmN0aW9uIFk0KGUsdCxuLG8sYSxyLGkpe2lmKGkpcmV0dXJuO2xldCBmPVVPKGEubG9uZ2l0dWRlLGEubGF0aXR1ZGUscik7Zm9yKGxldCBkPTA7ZDxlOysrZCl7bGV0IGM9VU8oYS5sb25naXR1ZGUray50b1JhZGlhbnMobip0W2QqM10pLGEubGF0aXR1ZGUray50b1JhZGlhbnMobyp0W2QqMysxXSkscik7dFtkKjMrMl0rPWMtZn19ZnVuY3Rpb24gSjQoZSx0LG4sbyxhLHIsaSxmLGQpe2lmKGU9PT0wfHwhZyh0KXx8dC5sZW5ndGg9PT0wKXJldHVybjtsZXQgYz1uZXcgcShNYXRoLnNxcnQoaS54KSxNYXRoLnNxcnQoaS55KSxNYXRoLnNxcnQoaS56KSk7Zm9yKGxldCB1PTA7dTxlOysrdSl7bGV0IGw9dSozLGg9bCsxLG09bCsyLGI9bmV3IHJlO2IubG9uZ2l0dWRlPW8ubG9uZ2l0dWRlK2sudG9SYWRpYW5zKGYqdFtsXSksYi5sYXRpdHVkZT1vLmxhdGl0dWRlK2sudG9SYWRpYW5zKGQqdFtoXSksYi5oZWlnaHQ9by5oZWlnaHQrdFttXTtsZXQgcD17fTtjLmNhcnRvZ3JhcGhpY1RvQ2FydGVzaWFuKGIscCkscC54LT1hLngscC55LT1hLnkscC56LT1hLno7bGV0IHk9e307aWYoSi5tdWx0aXBseUJ5VmVjdG9yKHIscCx5KSx0W2xdPXkueCx0W2hdPXkueSx0W21dPXkueixnKG4pKXtsZXQgVD1uZXcgcyhuW2xdLG5baF0sblttXSksXz17fTtKLm11bHRpcGx5QnlWZWN0b3IocixULF8pLG5bbF09Xy54LG5baF09Xy55LG5bbV09Xy56fX19ZnVuY3Rpb24gWjQoZSx0LG4pe2ZvcihsZXQgbz0wO288ZTsrK28pe2xldCBhPW5bbyo0XS82NTUzNSxyPW5bbyo0KzFdLzY1NTM1LGk9KG5bbyo0KzJdLW5bbyo0XSkvNjU1MzUsZj0obltvKjQrM10tbltvKjQrMV0pLzY1NTM1O3RbbyoyXSo9aSx0W28qMl0rPWEsdFtvKjIrMV0qPWYsdFtvKjIrMV0rPXJ9fWZ1bmN0aW9uIFE0KGUsdCxuLG8pe2xldCBhPW5ldyBVaW50MzJBcnJheShlKSxyPWcodCk/Zj0+dFtmXTpmPT5mLGk9MDtpZihvJiZnKG4pKXtsZXQgZj1kPT5uW3IoZCkqNCszXTwyNTU7Zm9yKGxldCBkPTA7ZDxlO2QrPTMpIWYoZCkmJiFmKGQrMSkmJiFmKGQrMikmJihhW2krK109cihkKSxhW2krK109cihkKzEpLGFbaSsrXT1yKGQrMikpO2lmKGk+MCl7bGV0IGQ9aTtmb3IobGV0IGM9MDtjPGU7Yys9MykoZihjKXx8ZihjKzEpfHxmKGMrMikpJiYoYVtkKytdPXIoYyksYVtkKytdPXIoYysxKSxhW2QrK109cihjKzIpKX1lbHNlIGZvcihsZXQgZD0wO2Q8ZTsrK2QpYVtkXT1yKGQpfWVsc2V7aT1lO2ZvcihsZXQgZj0wO2Y8ZTsrK2YpYVtmXT1yKGYpfXJldHVybntpbmRleEFycmF5OmEsdHJhbnNwYXJlbnRWZXJ0ZXhPZmZzZXQ6aX19ZnVuY3Rpb24gJDQoZSx0LG4pe2xldCBvPXRbbl07aWYoZyhvKSlyZXR1cm4gbztsZXQgYT10W25dPXtwb3NpdGlvbnM6e30saW5kaWNlczp7fSxlZGdlczp7fX0scj1lW25dPz9lLmRlZmF1bHQ7cmV0dXJuIGEuaGFzT3V0bGluZT1nKHI/LmVkZ2VzKSxhfWZ1bmN0aW9uIGU2KGUsdCxuLG8pe2lmKCFnKGVbbl0pKXtsZXQgYT1uKjMscj10O2ZvcihsZXQgaT0wO2k8MztpKyspe2xldCBmPW9bYStpXTtnKHJbZl0pfHwocltmXT17fSkscj1yW2ZdfWcoci5pbmRleCl8fChyLmluZGV4PW4pLGVbbl09ci5pbmRleH19ZnVuY3Rpb24gdDYoZSx0LG4sbyxhLHIpe2xldCBpLGY7bzxhPyhpPW8sZj1hKTooaT1hLGY9byk7bGV0IGQ9ZVtpXTtnKGQpfHwoZD1lW2ldPXt9KTtsZXQgYz1kW2ZdO2coYyl8fChjPWRbZl09e25vcm1hbHNJbmRleDpbXSxvdXRsaW5lczpbXX0pLGMubm9ybWFsc0luZGV4LnB1c2gociksKGMub3V0bGluZXMubGVuZ3RoPT09MHx8dCE9PW98fG4hPT1hKSYmYy5vdXRsaW5lcy5wdXNoKHQsbil9ZnVuY3Rpb24gbjYoZSx0LG4sbyl7bGV0IGE9W107Zm9yKGxldCByPTA7cjxuLmxlbmd0aDtyKz0zKXtsZXQgaT1nKHQpP3RbbltyXV06ImRlZmF1bHQiLGY9JDQoZSxhLGkpO2lmKCFmLmhhc091dGxpbmUpY29udGludWU7bGV0IGQ9Zi5pbmRpY2VzLGM9Zi5wb3NpdGlvbnM7Zm9yKGxldCBsPTA7bDwzO2wrKyl7bGV0IGg9bltyK2xdO2U2KGQsYyxoLG8pfWxldCB1PWYuZWRnZXM7Zm9yKGxldCBsPTA7bDwzO2wrKyl7bGV0IGg9bltyK2xdLG09bltyKyhsKzEpJTNdLGI9ZFtoXSxwPWRbbV07dDYodSxoLG0sYixwLHIpfX1yZXR1cm4gYX1mdW5jdGlvbiBMTyhlLHQsbixvKXtsZXQgYT1uW3RdKjMscj1uW3QrMV0qMyxpPW5bdCsyXSozO3MuZnJvbUFycmF5KG8sYSxPcikscy5mcm9tQXJyYXkobyxyLHhtKSxzLmZyb21BcnJheShvLGksT20pLHMuc3VidHJhY3QoeG0sT3IseG0pLHMuc3VidHJhY3QoT20sT3IsT20pLHMuY3Jvc3MoeG0sT20sT3IpO2xldCBmPXMubWFnbml0dWRlKE9yKTtmIT09MCYmcy5kaXZpZGVCeVNjYWxhcihPcixmLE9yKTtsZXQgZD10KjMsYz0odCsxKSozLHU9KHQrMikqMztzLnBhY2soT3IsZSxkKSxzLnBhY2soT3IsZSxjKSxzLnBhY2soT3IsZSx1KX1mdW5jdGlvbiBvNihlLHQsbil7cy5mcm9tQXJyYXkoZSx0LFNtKSxzLmZyb21BcnJheShlLG4sSXkpO2xldCBvPXMuZG90KFNtLEl5KSxhPXMubWFnbml0dWRlKHMuY3Jvc3MoU20sSXksU20pKTtyZXR1cm4gTWF0aC5hdGFuMihhLG8pPC4yNX1mdW5jdGlvbiBhNihlLHQsbixvLGEpe2lmKHQubm9ybWFsc0luZGV4Lmxlbmd0aD4xKXtsZXQgcj1vLmxlbmd0aD09PWEubGVuZ3RoO2ZvcihsZXQgaT0wO2k8dC5ub3JtYWxzSW5kZXgubGVuZ3RoO2krKyl7bGV0IGY9dC5ub3JtYWxzSW5kZXhbaV07aWYoZyhhW2YqM10pfHxMTyhhLGYsbixvKSxpIT09MClmb3IobGV0IGQ9MDtkPGk7ZCsrKXtsZXQgYz10Lm5vcm1hbHNJbmRleFtkXSx1PXI/bltmXSozOmYqMyxsPXI/bltjXSozOmMqMztpZihvNihhLHUsbCkpcmV0dXJufX19ZS5wdXNoKC4uLnQub3V0bGluZXMpfWZ1bmN0aW9uIHI2KGUsdCxuLG8sYSl7bGV0IHI9T2JqZWN0LmtleXModCk7Zm9yKGxldCBpPTA7aTxyLmxlbmd0aDtpKyspe2xldCBmPXRbcltpXV0sZD1PYmplY3Qua2V5cyhmKTtmb3IobGV0IGM9MDtjPGQubGVuZ3RoO2MrKyl7bGV0IHU9ZltkW2NdXTthNihlLHUsbixvLGEpfX19ZnVuY3Rpb24gaTYoZSx0LG4sbyl7bGV0IGE9W10scj1PYmplY3Qua2V5cyhlKTtmb3IobGV0IGk9MDtpPHIubGVuZ3RoO2krKyl7bGV0IGY9ZVtyW2ldXS5lZGdlcztyNihhLGYsdCxuLG8pfXJldHVybiBhfWZ1bmN0aW9uIGM2KGUsdCxuLG8sYSl7aWYoIWcoZSl8fE9iamVjdC5rZXlzKGUpLmxlbmd0aD09PTApcmV0dXJuO2xldCByPW42KGUsdCxuLG8pOyghZyhhKXx8bi5sZW5ndGgqMyE9PWEubGVuZ3RoKSYmKGE9W10pO2xldCBpPWk2KHIsbixvLGEpO3JldHVybiBpLmxlbmd0aD4wP25ldyBVaW50MzJBcnJheShpKTp2b2lkIDB9ZnVuY3Rpb24gczYoZSl7bGV0IHQ9bmV3IEZsb2F0MzJBcnJheShlLmxlbmd0aCk7Zm9yKGxldCBuPTA7bjxlLmxlbmd0aDtuKz00KXRbbl09RW0oJGUuYnl0ZVRvRmxvYXQoZVtuXSkpLHRbbisxXT1FbSgkZS5ieXRlVG9GbG9hdChlW24rMV0pKSx0W24rMl09RW0oJGUuYnl0ZVRvRmxvYXQoZVtuKzJdKSksdFtuKzNdPSRlLmJ5dGVUb0Zsb2F0KGVbbiszXSk7cmV0dXJuIHR9ZnVuY3Rpb24gZjYoZSx0LG4sbyxhLHIsaSl7bGV0IGY9e25vcm1hbHM6dm9pZCAwLHBvc2l0aW9uczp2b2lkIDAsdXYwczp2b2lkIDAsY29sb3JzOnZvaWQgMCxmZWF0dXJlSW5kZXg6dm9pZCAwLHZlcnRleENvdW50OnZvaWQgMH07aWYoZT09PTB8fCFnKG4pfHxuLmxlbmd0aD09PTB8fGcobykpcmV0dXJuIGY7aWYoZyh0KSl7Zi52ZXJ0ZXhDb3VudD10Lmxlbmd0aCxmLnBvc2l0aW9ucz1uZXcgRmxvYXQzMkFycmF5KHQubGVuZ3RoKjMpLGYudXYwcz1nKGEpP25ldyBGbG9hdDMyQXJyYXkodC5sZW5ndGgqMik6dm9pZCAwLGYuY29sb3JzPWcocik/bmV3IFVpbnQ4QXJyYXkodC5sZW5ndGgqNCk6dm9pZCAwLGYuZmVhdHVyZUluZGV4PWcoaSk/bmV3IEFycmF5KHQubGVuZ3RoKTp2b2lkIDA7Zm9yKGxldCBkPTA7ZDx0Lmxlbmd0aDtkKyspe2xldCBjPXRbZF07Zi5wb3NpdGlvbnNbZCozXT1uW2MqM10sZi5wb3NpdGlvbnNbZCozKzFdPW5bYyozKzFdLGYucG9zaXRpb25zW2QqMysyXT1uW2MqMysyXSxnKGYudXYwcykmJihmLnV2MHNbZCoyXT1hW2MqMl0sZi51djBzW2QqMisxXT1hW2MqMisxXSksZyhmLmNvbG9ycykmJihmLmNvbG9yc1tkKjRdPXJbYyo0XSxmLmNvbG9yc1tkKjQrMV09cltjKjQrMV0sZi5jb2xvcnNbZCo0KzJdPXJbYyo0KzJdLGYuY29sb3JzW2QqNCszXT1yW2MqNCszXSksZyhmLmZlYXR1cmVJbmRleCkmJihmLmZlYXR1cmVJbmRleFtkXT1pW2NdKX1lPXQubGVuZ3RoLG49Zi5wb3NpdGlvbnN9dD1uZXcgQXJyYXkoZSk7Zm9yKGxldCBkPTA7ZDxlO2QrKyl0W2RdPWQ7Zi5ub3JtYWxzPW5ldyBGbG9hdDMyQXJyYXkodC5sZW5ndGgqMyk7Zm9yKGxldCBkPTA7ZDx0Lmxlbmd0aDtkKz0zKUxPKGYubm9ybWFscyxkLHQsbik7cmV0dXJuIGZ9ZnVuY3Rpb24gZDYoZSx0LG4sbyxhLHIsaSxmKXtpZihlPT09MHx8IWcobil8fG4ubGVuZ3RoPT09MClyZXR1cm57YnVmZmVyczpbXSxidWZmZXJWaWV3czpbXSxhY2Nlc3NvcnM6W10sbWVzaGVzOltdLG5vZGVzOltdLG5vZGVzSW5TY2VuZTpbXX07bGV0IGQ9W10sYz1bXSx1PVtdLGw9W10saD1bXSxtPVtdLGI9e30scD1bXTtnKHQpJiYoZT10Lmxlbmd0aCk7bGV0e2luZGV4QXJyYXk6eSx0cmFuc3BhcmVudFZlcnRleE9mZnNldDpUfT1RNChlLHQscixmLnNwbGl0R2VvbWV0cnlCeUNvbG9yVHJhbnNwYXJlbmN5KSxfPW5ldyBCbG9iKFt5XSx7dHlwZToiYXBwbGljYXRpb24vYmluYXJ5In0pLEU9VVJMLmNyZWF0ZU9iamVjdFVSTChfKSx3PWUsUj1mLmVuYWJsZUZlYXR1cmVzJiZnKGkpP25ldyBGbG9hdDMyQXJyYXkoaS5sZW5ndGgpOnZvaWQgMCxTPTA7aWYoZyhSKSlmb3IobGV0IGFlPTA7YWU8aS5sZW5ndGg7KythZSl7UlthZV09aVthZV07bGV0IEFlPWlbYWVdKzE7UzxBZSYmKFM9QWUpfWxldCBDLEk9YzYoZi5zeW1ib2xvZ3lEYXRhLGkseSxuLG8pO2lmKGcoSSkpe2xldCBhZT1uZXcgQmxvYihbSV0se3R5cGU6ImFwcGxpY2F0aW9uL2JpbmFyeSJ9KTtDPVVSTC5jcmVhdGVPYmplY3RVUkwoYWUpfWxldCBOPW4uc3ViYXJyYXkoMCx3KjMpLFA9bmV3IEJsb2IoW05dLHt0eXBlOiJhcHBsaWNhdGlvbi9iaW5hcnkifSksRj1VUkwuY3JlYXRlT2JqZWN0VVJMKFApLEE9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLHg9TnVtYmVyLk5FR0FUSVZFX0lORklOSVRZLE09TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLHY9TnVtYmVyLk5FR0FUSVZFX0lORklOSVRZLFU9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLHo9TnVtYmVyLk5FR0FUSVZFX0lORklOSVRZO2ZvcihsZXQgYWU9MDthZTxOLmxlbmd0aC8zO2FlKyspQT1NYXRoLm1pbihBLE5bYWUqMyswXSkseD1NYXRoLm1heCh4LE5bYWUqMyswXSksTT1NYXRoLm1pbihNLE5bYWUqMysxXSksdj1NYXRoLm1heCh2LE5bYWUqMysxXSksVT1NYXRoLm1pbihVLE5bYWUqMysyXSksej1NYXRoLm1heCh6LE5bYWUqMysyXSk7bGV0IEQ9bz9vLnN1YmFycmF5KDAsdyozKTp2b2lkIDAsRztpZihnKEQpKXtsZXQgYWU9bmV3IEJsb2IoW0RdLHt0eXBlOiJhcHBsaWNhdGlvbi9iaW5hcnkifSk7Rz1VUkwuY3JlYXRlT2JqZWN0VVJMKGFlKX1sZXQgSD1hP2Euc3ViYXJyYXkoMCx3KjIpOnZvaWQgMCxPO2lmKGcoSCkpe2xldCBhZT1uZXcgQmxvYihbSF0se3R5cGU6ImFwcGxpY2F0aW9uL2JpbmFyeSJ9KTtPPVVSTC5jcmVhdGVPYmplY3RVUkwoYWUpfWxldCBaPWcocik/czYoci5zdWJhcnJheSgwLHcqNCkpOnZvaWQgMCxvZTtpZihnKFopKXtsZXQgYWU9bmV3IEJsb2IoW1pdLHt0eXBlOiJhcHBsaWNhdGlvbi9iaW5hcnkifSk7b2U9VVJMLmNyZWF0ZU9iamVjdFVSTChhZSl9bGV0IGNlPWcoUik/Ui5zdWJhcnJheSgwLHcpOnZvaWQgMCxmZTtpZihnKGNlKSl7bGV0IGFlPW5ldyBCbG9iKFtjZV0se3R5cGU6ImFwcGxpY2F0aW9uL2JpbmFyeSJ9KTtmZT1VUkwuY3JlYXRlT2JqZWN0VVJMKGFlKX1sZXQgZWU9ZyhSKT9uZXcgRmxvYXQzMkFycmF5KFMpOnZvaWQgMCxiZTtpZihnKGVlKSl7Zm9yKGxldCBBZT0wO0FlPGVlLmxlbmd0aDsrK0FlKWVlW0FlXT1BZTtsZXQgYWU9bmV3IEJsb2IoW2VlXSx7dHlwZToiYXBwbGljYXRpb24vYmluYXJ5In0pO2JlPVVSTC5jcmVhdGVPYmplY3RVUkwoYWUpfWxldCBsZT17fSxwZT17fTtsZS5QT1NJVElPTj11Lmxlbmd0aCxkLnB1c2goe3VyaTpGLGJ5dGVMZW5ndGg6Ti5ieXRlTGVuZ3RofSksYy5wdXNoKHtidWZmZXI6ZC5sZW5ndGgtMSxieXRlT2Zmc2V0OjAsYnl0ZUxlbmd0aDpOLmJ5dGVMZW5ndGgsdGFyZ2V0OjM0OTYyfSksdS5wdXNoKHtidWZmZXJWaWV3OmMubGVuZ3RoLTEsYnl0ZU9mZnNldDowLGNvbXBvbmVudFR5cGU6NTEyNixjb3VudDpOLmxlbmd0aC8zLHR5cGU6IlZFQzMiLG1heDpbQSxNLFVdLG1pbjpbeCx2LHpdfSksZyhHKSYmKGxlLk5PUk1BTD11Lmxlbmd0aCxkLnB1c2goe3VyaTpHLGJ5dGVMZW5ndGg6RC5ieXRlTGVuZ3RofSksYy5wdXNoKHtidWZmZXI6ZC5sZW5ndGgtMSxieXRlT2Zmc2V0OjAsYnl0ZUxlbmd0aDpELmJ5dGVMZW5ndGgsdGFyZ2V0OjM0OTYyfSksdS5wdXNoKHtidWZmZXJWaWV3OmMubGVuZ3RoLTEsYnl0ZU9mZnNldDowLGNvbXBvbmVudFR5cGU6NTEyNixjb3VudDpELmxlbmd0aC8zLHR5cGU6IlZFQzMifSkpLGcoTykmJihsZS5URVhDT09SRF8wPXUubGVuZ3RoLGQucHVzaCh7dXJpOk8sYnl0ZUxlbmd0aDpILmJ5dGVMZW5ndGh9KSxjLnB1c2goe2J1ZmZlcjpkLmxlbmd0aC0xLGJ5dGVPZmZzZXQ6MCxieXRlTGVuZ3RoOkguYnl0ZUxlbmd0aCx0YXJnZXQ6MzQ5NjJ9KSx1LnB1c2goe2J1ZmZlclZpZXc6Yy5sZW5ndGgtMSxieXRlT2Zmc2V0OjAsY29tcG9uZW50VHlwZTo1MTI2LGNvdW50OkgubGVuZ3RoLzIsdHlwZToiVkVDMiJ9KSksZyhvZSkmJihsZS5DT0xPUl8wPXUubGVuZ3RoLGQucHVzaCh7dXJpOm9lLGJ5dGVMZW5ndGg6Wi5ieXRlTGVuZ3RofSksYy5wdXNoKHtidWZmZXI6ZC5sZW5ndGgtMSxieXRlT2Zmc2V0OjAsYnl0ZUxlbmd0aDpaLmJ5dGVMZW5ndGgsdGFyZ2V0OjM0OTYyfSksdS5wdXNoKHtidWZmZXJWaWV3OmMubGVuZ3RoLTEsYnl0ZU9mZnNldDowLGNvbXBvbmVudFR5cGU6NTEyNixjb3VudDpaLmxlbmd0aC80LHR5cGU6IlZFQzQifSkpLGcoZmUpJiYobGUuX0ZFQVRVUkVfSURfMD11Lmxlbmd0aCxkLnB1c2goe3VyaTpmZSxieXRlTGVuZ3RoOmNlLmJ5dGVMZW5ndGh9KSxjLnB1c2goe2J1ZmZlcjpkLmxlbmd0aC0xLGJ5dGVPZmZzZXQ6MCxieXRlTGVuZ3RoOmNlLmJ5dGVMZW5ndGgsdGFyZ2V0OjM0OTYzfSksdS5wdXNoKHtidWZmZXJWaWV3OmMubGVuZ3RoLTEsYnl0ZU9mZnNldDowLGNvbXBvbmVudFR5cGU6NTEyNixjb3VudDpjZS5sZW5ndGgsdHlwZToiU0NBTEFSIn0pLHBlLkVYVF9tZXNoX2ZlYXR1cmVzPXtmZWF0dXJlSWRzOlt7YXR0cmlidXRlOjAscHJvcGVydHlUYWJsZTowLGZlYXR1cmVDb3VudDpTfV19LHAucHVzaCgiRVhUX21lc2hfZmVhdHVyZXMiKSksZyhiZSkmJihkLnB1c2goe3VyaTpiZSxieXRlTGVuZ3RoOmVlLmJ5dGVMZW5ndGh9KSxjLnB1c2goe2J1ZmZlcjpkLmxlbmd0aC0xLGJ5dGVPZmZzZXQ6MCxieXRlTGVuZ3RoOmVlLmJ5dGVMZW5ndGgsdGFyZ2V0OjM0OTYzfSksYi5FWFRfc3RydWN0dXJhbF9tZXRhZGF0YT17c2NoZW1hOntpZDoiaTNzLW1ldGFkYXRhLXNjaGVtYS0wMDEiLG5hbWU6IkkzUyBtZXRhZGF0YSBzY2hlbWEgMDAxIixkZXNjcmlwdGlvbjoiVGhlIHNjaGVtYSBmb3IgSTNTIG1ldGFkYXRhIix2ZXJzaW9uOiIxLjAiLGNsYXNzZXM6e2ZlYXR1cmU6e25hbWU6ImZlYXR1cmUiLGRlc2NyaXB0aW9uOiJGZWF0dXJlIG1ldGFkYXRhIixwcm9wZXJ0aWVzOntpbmRleDp7ZGVzY3JpcHRpb246IlRoZSBmZWF0dXJlIGluZGV4Iix0eXBlOiJTQ0FMQVIiLGNvbXBvbmVudFR5cGU6IkZMT0FUMzIiLHJlcXVpcmVkOiEwfX19fX0scHJvcGVydHlUYWJsZXM6W3tuYW1lOiJmZWF0dXJlLWluZGljZXMtbWFwcGluZyIsY2xhc3M6ImZlYXR1cmUiLGNvdW50OlMscHJvcGVydGllczp7aW5kZXg6e3ZhbHVlczpjLmxlbmd0aC0xfX19XX0scC5wdXNoKCJFWFRfc3RydWN0dXJhbF9tZXRhZGF0YSIpKSxnKEMpJiYoZC5wdXNoKHt1cmk6QyxieXRlTGVuZ3RoOkkuYnl0ZUxlbmd0aH0pLGMucHVzaCh7YnVmZmVyOmQubGVuZ3RoLTEsYnl0ZU9mZnNldDowLGJ5dGVMZW5ndGg6SS5ieXRlTGVuZ3RoLHRhcmdldDozNDk2M30pLHUucHVzaCh7YnVmZmVyVmlldzpjLmxlbmd0aC0xLGJ5dGVPZmZzZXQ6MCxjb21wb25lbnRUeXBlOjUxMjUsY291bnQ6SS5sZW5ndGgsdHlwZToiU0NBTEFSIn0pLHBlLkNFU0lVTV9wcmltaXRpdmVfb3V0bGluZT17aW5kaWNlczp1Lmxlbmd0aC0xfSxwLnB1c2goIkNFU0lVTV9wcmltaXRpdmVfb3V0bGluZSIpKSxkLnB1c2goe3VyaTpFLGJ5dGVMZW5ndGg6eS5ieXRlTGVuZ3RofSksYy5wdXNoKHtidWZmZXI6ZC5sZW5ndGgtMSxieXRlT2Zmc2V0OjAsYnl0ZUxlbmd0aDp5LmJ5dGVMZW5ndGgsdGFyZ2V0OjM0OTYzfSk7bGV0IHVlPVtdO3JldHVybiBUPjAmJih1LnB1c2goe2J1ZmZlclZpZXc6Yy5sZW5ndGgtMSxieXRlT2Zmc2V0OjAsY29tcG9uZW50VHlwZTo1MTI1LGNvdW50OlQsdHlwZToiU0NBTEFSIn0pLHVlLnB1c2goe2F0dHJpYnV0ZXM6bGUsaW5kaWNlczp1Lmxlbmd0aC0xLG1hdGVyaWFsOnVlLmxlbmd0aCxleHRlbnNpb25zOnBlfSkpLFQ8ZSYmKHUucHVzaCh7YnVmZmVyVmlldzpjLmxlbmd0aC0xLGJ5dGVPZmZzZXQ6NCpULGNvbXBvbmVudFR5cGU6NTEyNSxjb3VudDplLVQsdHlwZToiU0NBTEFSIn0pLHVlLnB1c2goe2F0dHJpYnV0ZXM6bGUsaW5kaWNlczp1Lmxlbmd0aC0xLG1hdGVyaWFsOnVlLmxlbmd0aCxleHRlbnNpb25zOnBlLGV4dHJhOntpc1RyYW5zcGFyZW50OiEwfX0pKSxsLnB1c2goe3ByaW1pdGl2ZXM6dWV9KSxtLnB1c2goMCksaC5wdXNoKHttZXNoOjB9KSx7YnVmZmVyczpkLGJ1ZmZlclZpZXdzOmMsYWNjZXNzb3JzOnUsbWVzaGVzOmwsbm9kZXM6aCxub2Rlc0luU2NlbmU6bSxyb290RXh0ZW5zaW9uczpiLGV4dGVuc2lvbnNVc2VkOnB9fWZ1bmN0aW9uIHU2KGUsdCxuLG8pe2xldCBhPW5ldyBVaW50OEFycmF5KGUsMCw1KTtyZXR1cm4gYVswXT09PTY4JiZhWzFdPT09ODImJmFbMl09PT02NSYmYVszXT09PTY3JiZhWzRdPT09Nzk/bDYoZSxuKTptNihlLHQsbixvKX1mdW5jdGlvbiBsNihlKXtsZXQgdD1reSxuPW5ldyB0LkRlY29kZXJCdWZmZXIsbz1uZXcgVWludDhBcnJheShlKTtuLkluaXQobyxvLmxlbmd0aCk7bGV0IGE9bmV3IHQuRGVjb2RlcixyPWEuR2V0RW5jb2RlZEdlb21ldHJ5VHlwZShuKSxpPW5ldyB0Lk1ldGFkYXRhUXVlcmllcixmLGQ7cj09PXQuVFJJQU5HVUxBUl9NRVNIJiYoZj1uZXcgdC5NZXNoLGQ9YS5EZWNvZGVCdWZmZXJUb01lc2gobixmKSk7bGV0IGM9e3ZlcnRleENvdW50OlswXSxmZWF0dXJlQ291bnQ6MH07aWYoZyhkKSYmZC5vaygpJiZmLnB0ciE9PTApe2xldCB1PWYubnVtX2ZhY2VzKCksbD1mLm51bV9hdHRyaWJ1dGVzKCksaD1mLm51bV9wb2ludHMoKTtjLmluZGljZXM9bmV3IFVpbnQzMkFycmF5KHUqMyk7bGV0IG09Yy5pbmRpY2VzO2MudmVydGV4Q291bnRbMF09aCxjLnNjYWxlX3g9MSxjLnNjYWxlX3k9MTtsZXQgYj1uZXcgdC5EcmFjb0ludDMyQXJyYXkoMyk7Zm9yKGxldCBwPTA7cDx1OysrcClhLkdldEZhY2VGcm9tTWVzaChmLHAsYiksbVtwKjNdPWIuR2V0VmFsdWUoMCksbVtwKjMrMV09Yi5HZXRWYWx1ZSgxKSxtW3AqMysyXT1iLkdldFZhbHVlKDIpO3QuZGVzdHJveShiKTtmb3IobGV0IHA9MDtwPGw7KytwKXtsZXQgeT1hLkdldEF0dHJpYnV0ZShmLHApLFQ9aDYodCxhLGYseSxoKSxfPXkuYXR0cmlidXRlX3R5cGUoKSxFPSJ1bmtub3duIjtfPT09dC5QT1NJVElPTj9FPSJwb3NpdGlvbnMiOl89PT10Lk5PUk1BTD9FPSJub3JtYWxzIjpfPT09dC5DT0xPUj9FPSJjb2xvcnMiOl89PT10LlRFWF9DT09SRCYmKEU9InV2MHMiKTtsZXQgdz1hLkdldEF0dHJpYnV0ZU1ldGFkYXRhKGYscCk7aWYody5wdHIhPT0wKXtsZXQgUj1pLk51bUVudHJpZXModyk7Zm9yKGxldCBTPTA7UzxSOysrUyl7bGV0IEM9aS5HZXRFbnRyeU5hbWUodyxTKTtDPT09Imkzcy1zY2FsZV94Ij9jLnNjYWxlX3g9aS5HZXREb3VibGVFbnRyeSh3LCJpM3Mtc2NhbGVfeCIpOkM9PT0iaTNzLXNjYWxlX3kiP2Muc2NhbGVfeT1pLkdldERvdWJsZUVudHJ5KHcsImkzcy1zY2FsZV95Iik6Qz09PSJpM3MtYXR0cmlidXRlLXR5cGUiJiYoRT1pLkdldFN0cmluZ0VudHJ5KHcsImkzcy1hdHRyaWJ1dGUtdHlwZSIpKX19ZyhjW0VdKSYmY29uc29sZS5sb2coIkF0dHJpYnV0ZSBhbHJlYWR5IGV4aXN0cyIsRSksY1tFXT1ULEU9PT0iZmVhdHVyZS1pbmRleCImJmMuZmVhdHVyZUNvdW50Kyt9dC5kZXN0cm95KGYpfXJldHVybiB0LmRlc3Ryb3koaSksdC5kZXN0cm95KGEpLGN9ZnVuY3Rpb24gaDYoZSx0LG4sbyxhKXtsZXQgcj1vLm51bV9jb21wb25lbnRzKCkqYSxpLGQ9W2Z1bmN0aW9uKCl7fSxmdW5jdGlvbigpe2k9bmV3IGUuRHJhY29JbnQ4QXJyYXkociksdC5HZXRBdHRyaWJ1dGVJbnQ4Rm9yQWxsUG9pbnRzKG4sbyxpKXx8Y29uc29sZS5lcnJvcigiQmFkIHN0cmVhbSIpO2xldCB1PW5ldyBJbnQ4QXJyYXkocik7Zm9yKGxldCBsPTA7bDxyOysrbCl1W2xdPWkuR2V0VmFsdWUobCk7cmV0dXJuIHV9LGZ1bmN0aW9uKCl7aT1uZXcgZS5EcmFjb0ludDhBcnJheShyKSx0LkdldEF0dHJpYnV0ZVVJbnQ4Rm9yQWxsUG9pbnRzKG4sbyxpKXx8Y29uc29sZS5lcnJvcigiQmFkIHN0cmVhbSIpO2xldCB1PW5ldyBVaW50OEFycmF5KHIpO2ZvcihsZXQgbD0wO2w8cjsrK2wpdVtsXT1pLkdldFZhbHVlKGwpO3JldHVybiB1fSxmdW5jdGlvbigpe2k9bmV3IGUuRHJhY29JbnQxNkFycmF5KHIpLHQuR2V0QXR0cmlidXRlSW50MTZGb3JBbGxQb2ludHMobixvLGkpfHxjb25zb2xlLmVycm9yKCJCYWQgc3RyZWFtIik7bGV0IHU9bmV3IEludDE2QXJyYXkocik7Zm9yKGxldCBsPTA7bDxyOysrbCl1W2xdPWkuR2V0VmFsdWUobCk7cmV0dXJuIHV9LGZ1bmN0aW9uKCl7aT1uZXcgZS5EcmFjb0ludDE2QXJyYXkociksdC5HZXRBdHRyaWJ1dGVVSW50MTZGb3JBbGxQb2ludHMobixvLGkpfHxjb25zb2xlLmVycm9yKCJCYWQgc3RyZWFtIik7bGV0IHU9bmV3IFVpbnQxNkFycmF5KHIpO2ZvcihsZXQgbD0wO2w8cjsrK2wpdVtsXT1pLkdldFZhbHVlKGwpO3JldHVybiB1fSxmdW5jdGlvbigpe2k9bmV3IGUuRHJhY29JbnQzMkFycmF5KHIpLHQuR2V0QXR0cmlidXRlSW50MzJGb3JBbGxQb2ludHMobixvLGkpfHxjb25zb2xlLmVycm9yKCJCYWQgc3RyZWFtIik7bGV0IHU9bmV3IEludDMyQXJyYXkocik7Zm9yKGxldCBsPTA7bDxyOysrbCl1W2xdPWkuR2V0VmFsdWUobCk7cmV0dXJuIHV9LGZ1bmN0aW9uKCl7aT1uZXcgZS5EcmFjb0ludDMyQXJyYXkociksdC5HZXRBdHRyaWJ1dGVVSW50MzJGb3JBbGxQb2ludHMobixvLGkpfHxjb25zb2xlLmVycm9yKCJCYWQgc3RyZWFtIik7bGV0IHU9bmV3IFVpbnQzMkFycmF5KHIpO2ZvcihsZXQgbD0wO2w8cjsrK2wpdVtsXT1pLkdldFZhbHVlKGwpO3JldHVybiB1fSxmdW5jdGlvbigpe30sZnVuY3Rpb24oKXt9LGZ1bmN0aW9uKCl7aT1uZXcgZS5EcmFjb0Zsb2F0MzJBcnJheShyKSx0LkdldEF0dHJpYnV0ZUZsb2F0Rm9yQWxsUG9pbnRzKG4sbyxpKXx8Y29uc29sZS5lcnJvcigiQmFkIHN0cmVhbSIpO2xldCB1PW5ldyBGbG9hdDMyQXJyYXkocik7Zm9yKGxldCBsPTA7bDxyOysrbCl1W2xdPWkuR2V0VmFsdWUobCk7cmV0dXJuIHV9LGZ1bmN0aW9uKCl7fSxmdW5jdGlvbigpe2k9bmV3IGUuRHJhY29VSW50OEFycmF5KHIpLHQuR2V0QXR0cmlidXRlVUludDhGb3JBbGxQb2ludHMobixvLGkpfHxjb25zb2xlLmVycm9yKCJCYWQgc3RyZWFtIik7bGV0IHU9bmV3IFVpbnQ4QXJyYXkocik7Zm9yKGxldCBsPTA7bDxyOysrbCl1W2xdPWkuR2V0VmFsdWUobCk7cmV0dXJuIHV9XVtvLmRhdGFfdHlwZSgpXSgpO3JldHVybiBnKGkpJiZlLmRlc3Ryb3koaSksZH1mdW5jdGlvbiBtNihlLHQsbixvKXtsZXQgYT17dmVydGV4Q291bnQ6MH0scj1uZXcgRGF0YVZpZXcoZSk7dHJ5e2xldCBpPTA7aWYoYS52ZXJ0ZXhDb3VudD1yLmdldFVpbnQzMihpLDEpLGkrPTQsYS5mZWF0dXJlQ291bnQ9ci5nZXRVaW50MzIoaSwxKSxpKz00LGcobikpZm9yKGxldCBmPTA7ZjxuLmF0dHJpYnV0ZXMubGVuZ3RoO2YrKylnKENtW24uYXR0cmlidXRlc1tmXV0pP2k9Q21bbi5hdHRyaWJ1dGVzW2ZdXShhLGUsaSk6Y29uc29sZS5lcnJvcigiVW5rbm93biBkZWNvZGVyIGZvciIsbi5hdHRyaWJ1dGVzW2ZdKTtlbHNle2xldCBmPXQub3JkZXJpbmcsZD10LmZlYXR1cmVBdHRyaWJ1dGVPcmRlcjtnKG8pJiZnKG8uZ2VvbWV0cnlEYXRhKSYmZyhvLmdlb21ldHJ5RGF0YVswXSkmJmcoby5nZW9tZXRyeURhdGFbMF0ucGFyYW1zKSYmKGY9T2JqZWN0LmtleXMoby5nZW9tZXRyeURhdGFbMF0ucGFyYW1zLnZlcnRleEF0dHJpYnV0ZXMpLGQ9T2JqZWN0LmtleXMoby5nZW9tZXRyeURhdGFbMF0ucGFyYW1zLmZlYXR1cmVBdHRyaWJ1dGVzKSk7Zm9yKGxldCBjPTA7YzxmLmxlbmd0aDtjKyspe2xldCB1PUNtW2ZbY11dO2k9dShhLGUsaSl9Zm9yKGxldCBjPTA7YzxkLmxlbmd0aDtjKyspe2xldCB1PUNtW2RbY11dO2k9dShhLGUsaSl9fX1jYXRjaChpKXtjb25zb2xlLmVycm9yKGkpfXJldHVybiBhLnNjYWxlX3g9MSxhLnNjYWxlX3k9MSxhfWZ1bmN0aW9uIGI2KGUpe2xldCB0PXU2KGUuYmluYXJ5RGF0YSxlLnNjaGVtYSxlLmJ1ZmZlckluZm8sZS5mZWF0dXJlRGF0YSk7ZyhlLmdlb2lkRGF0YUxpc3QpJiZlLmdlb2lkRGF0YUxpc3QubGVuZ3RoPjAmJlk0KHQudmVydGV4Q291bnQsdC5wb3NpdGlvbnMsdC5zY2FsZV94LHQuc2NhbGVfeSxlLmNhcnRvZ3JhcGhpY0NlbnRlcixlLmdlb2lkRGF0YUxpc3QsITEpLEo0KHQudmVydGV4Q291bnQsdC5wb3NpdGlvbnMsdC5ub3JtYWxzLGUuY2FydG9ncmFwaGljQ2VudGVyLGUuY2FydGVzaWFuQ2VudGVyLGUucGFyZW50Um90YXRpb24sZS5lbGxpcHNvaWRSYWRpaVNxdWFyZSx0LnNjYWxlX3gsdC5zY2FsZV95KSxnKHQudXYwcykmJmcodFsidXYtcmVnaW9uIl0pJiZaNCh0LnZlcnRleENvdW50LHQudXYwcyx0WyJ1di1yZWdpb24iXSk7bGV0IG47aWYoZyh0WyJmZWF0dXJlLWluZGV4Il0pKW49dFsiZmVhdHVyZS1pbmRleCJdO2Vsc2UgaWYoZyh0LmZhY2VSYW5nZSkpe249bmV3IEFycmF5KHQudmVydGV4Q291bnQpO2ZvcihsZXQgaT0wO2k8dC5mYWNlUmFuZ2UubGVuZ3RoLTE7aSs9Mil7bGV0IGY9aS8yLGQ9dC5mYWNlUmFuZ2VbaV0sYz10LmZhY2VSYW5nZVtpKzFdO2ZvcihsZXQgdT1kO3U8PWM7dSsrKW5bdSozXT1mLG5bdSozKzFdPWYsblt1KjMrMl09Zn19aWYoZS5jYWxjdWxhdGVOb3JtYWxzKXtsZXQgaT1mNih0LnZlcnRleENvdW50LHQuaW5kaWNlcyx0LnBvc2l0aW9ucyx0Lm5vcm1hbHMsdC51djBzLHQuY29sb3JzLG4pO2coaS5ub3JtYWxzKSYmKHQubm9ybWFscz1pLm5vcm1hbHMsZyhpLnZlcnRleENvdW50KSYmKHQudmVydGV4Q291bnQ9aS52ZXJ0ZXhDb3VudCx0LmluZGljZXM9aS5pbmRpY2VzLHQucG9zaXRpb25zPWkucG9zaXRpb25zLHQudXYwcz1pLnV2MHMsdC5jb2xvcnM9aS5jb2xvcnMsbj1pLmZlYXR1cmVJbmRleCkpfWxldCBvPWQ2KHQudmVydGV4Q291bnQsdC5pbmRpY2VzLHQucG9zaXRpb25zLHQubm9ybWFscyx0LnV2MHMsdC5jb2xvcnMsbixlKSxhPXtwb3NpdGlvbnM6dC5wb3NpdGlvbnMsaW5kaWNlczp0LmluZGljZXMsZmVhdHVyZUluZGV4Om4sc291cmNlVVJMOmUudXJsLGNhcnRlc2lhbkNlbnRlcjplLmNhcnRlc2lhbkNlbnRlcixwYXJlbnRSb3RhdGlvbjplLnBhcmVudFJvdGF0aW9ufTtyZXR1cm4gby5fY3VzdG9tQXR0cmlidXRlcz1hLHttZXNoRGF0YTpvfX1hc3luYyBmdW5jdGlvbiBwNihlLHQpe2xldCBuPWUud2ViQXNzZW1ibHlDb25maWc7cmV0dXJuIGcobikmJmcobi53YXNtQmluYXJ5RmlsZSk/a3k9YXdhaXQoMCxQeS5kZWZhdWx0KShuKTpreT1hd2FpdCgwLFB5LmRlZmF1bHQpKCksITB9ZnVuY3Rpb24gZzYoZSx0KXtsZXQgbj1lLndlYkFzc2VtYmx5Q29uZmlnO3JldHVybiBnKG4pP3A2KGUsdCk6YjYoZSx0KX12YXIgUHksa3ksT3IseG0sT20sU20sSXksQ20sXzYsRnk9WCgoKT0+e1VuKCk7c2UoKTt5aSgpO1dlKCk7VHQoKTtJZSgpO2tzKCk7RG4oKTtHZSgpO1B5PWNhKGR5KCksMSk7Qk8oKTtPcj1uZXcgcyx4bT1uZXcgcyxPbT1uZXcgcztTbT1uZXcgcyxJeT1uZXcgcztDbT17cG9zaXRpb246ZnVuY3Rpb24oZSx0LG4pe2xldCBvPWUudmVydGV4Q291bnQqMztyZXR1cm4gZS5wb3NpdGlvbnM9bmV3IEZsb2F0MzJBcnJheSh0LG4sbyksbis9byo0LG59LG5vcm1hbDpmdW5jdGlvbihlLHQsbil7bGV0IG89ZS52ZXJ0ZXhDb3VudCozO3JldHVybiBlLm5vcm1hbHM9bmV3IEZsb2F0MzJBcnJheSh0LG4sbyksbis9byo0LG59LHV2MDpmdW5jdGlvbihlLHQsbil7bGV0IG89ZS52ZXJ0ZXhDb3VudCoyO3JldHVybiBlLnV2MHM9bmV3IEZsb2F0MzJBcnJheSh0LG4sbyksbis9byo0LG59LGNvbG9yOmZ1bmN0aW9uKGUsdCxuKXtsZXQgbz1lLnZlcnRleENvdW50KjQ7cmV0dXJuIGUuY29sb3JzPW5ldyBVaW50OEFycmF5KHQsbixvKSxuKz1vLG59LGZlYXR1cmVJZDpmdW5jdGlvbihlLHQsbil7bGV0IG89ZS5mZWF0dXJlQ291bnQ7cmV0dXJuIG4rPW8qOCxufSxpZDpmdW5jdGlvbihlLHQsbil7bGV0IG89ZS5mZWF0dXJlQ291bnQ7cmV0dXJuIG4rPW8qOCxufSxmYWNlUmFuZ2U6ZnVuY3Rpb24oZSx0LG4pe2xldCBvPWUuZmVhdHVyZUNvdW50KjI7cmV0dXJuIGUuZmFjZVJhbmdlPW5ldyBVaW50MzJBcnJheSh0LG4sbyksbis9byo0LG59LHV2UmVnaW9uOmZ1bmN0aW9uKGUsdCxuKXtsZXQgbz1lLnZlcnRleENvdW50KjQ7cmV0dXJuIGVbInV2LXJlZ2lvbiJdPW5ldyBVaW50MTZBcnJheSh0LG4sbyksbis9byoyLG59LHJlZ2lvbjpmdW5jdGlvbihlLHQsbil7bGV0IG89ZS52ZXJ0ZXhDb3VudCo0O3JldHVybiBlWyJ1di1yZWdpb24iXT1uZXcgVWludDE2QXJyYXkodCxuLG8pLG4rPW8qMixufX07XzY9QXQoZzYpfSk7ZnVuY3Rpb24geTYoKXtyZXR1cm4oeGQ9PT1udWxsfHx4ZC5ieXRlTGVuZ3RoPT09MCkmJih4ZD1uZXcgVWludDhBcnJheShHbi5tZW1vcnkuYnVmZmVyKSkseGR9ZnVuY3Rpb24gak8oZSx0KXtyZXR1cm4gZT1lPj4+MCxHTy5kZWNvZGUoeTYoKS5zdWJhcnJheShlLGUrdCkpfWZ1bmN0aW9uIFZPKCl7cmV0dXJuKE9kPT09bnVsbHx8T2QuYnl0ZUxlbmd0aD09PTApJiYoT2Q9bmV3IFVpbnQzMkFycmF5KEduLm1lbW9yeS5idWZmZXIpKSxPZH1mdW5jdGlvbiBBNihlLHQpe3JldHVybiBlPWU+Pj4wLFZPKCkuc3ViYXJyYXkoZS80LGUvNCt0KX1mdW5jdGlvbiB3NihlLHQpe2xldCBuPXQoZS5sZW5ndGgqNCw0KT4+PjA7cmV0dXJuIFZPKCkuc2V0KGUsbi80KSxITz1lLmxlbmd0aCxufWZ1bmN0aW9uIER5KGUpe2xldCB0PUduLl9fd2JpbmRnZW5fZXhwb3J0XzAuZ2V0KGUpO3JldHVybiBHbi5fX2V4dGVybnJlZl90YWJsZV9kZWFsbG9jKGUpLHR9ZnVuY3Rpb24gS08oZSx0LG4sbyxhKXtsZXQgcj1Hbi5nZW5lcmF0ZV9zcGxhdF90ZXh0dXJlKGUsdCxuLG8sYSk7aWYoclsyXSl0aHJvdyBEeShyWzFdKTtyZXR1cm4gQnkuX193cmFwKHJbMF0pfWZ1bmN0aW9uIHFPKGUsdCxuKXtsZXQgbz1Hbi5yYWRpeF9zb3J0X2dhdXNzaWFuc19pbmRleGVzKGUsdCxuKTtpZihvWzJdKXRocm93IER5KG9bMV0pO3JldHVybiBEeShvWzBdKX1hc3luYyBmdW5jdGlvbiBUNihlLHQpe2lmKHR5cGVvZiBSZXNwb25zZT09ImZ1bmN0aW9uIiYmZSBpbnN0YW5jZW9mIFJlc3BvbnNlKXtpZih0eXBlb2YgV2ViQXNzZW1ibHkuaW5zdGFudGlhdGVTdHJlYW1pbmc9PSJmdW5jdGlvbiIpdHJ5e3JldHVybiBhd2FpdCBXZWJBc3NlbWJseS5pbnN0YW50aWF0ZVN0cmVhbWluZyhlLHQpfWNhdGNoKG8pe2lmKGUuaGVhZGVycy5nZXQoIkNvbnRlbnQtVHlwZSIpIT0iYXBwbGljYXRpb24vd2FzbSIpY29uc29sZS53YXJuKCJgV2ViQXNzZW1ibHkuaW5zdGFudGlhdGVTdHJlYW1pbmdgIGZhaWxlZCBiZWNhdXNlIHlvdXIgc2VydmVyIGRvZXMgbm90IHNlcnZlIFdhc20gd2l0aCBgYXBwbGljYXRpb24vd2FzbWAgTUlNRSB0eXBlLiBGYWxsaW5nIGJhY2sgdG8gYFdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlYCB3aGljaCBpcyBzbG93ZXIuIE9yaWdpbmFsIGVycm9yOlxuIixvKTtlbHNlIHRocm93IG99bGV0IG49YXdhaXQgZS5hcnJheUJ1ZmZlcigpO3JldHVybiBhd2FpdCBXZWJBc3NlbWJseS5pbnN0YW50aWF0ZShuLHQpfWVsc2V7bGV0IG49YXdhaXQgV2ViQXNzZW1ibHkuaW5zdGFudGlhdGUoZSx0KTtyZXR1cm4gbiBpbnN0YW5jZW9mIFdlYkFzc2VtYmx5Lkluc3RhbmNlP3tpbnN0YW5jZTpuLG1vZHVsZTplfTpufX1mdW5jdGlvbiBXTygpe2xldCBlPXt9O3JldHVybiBlLndiZz17fSxlLndiZy5fX3diZ19idWZmZXJfNjA5Y2MzZWVlNTFlZDE1OD1mdW5jdGlvbih0KXtyZXR1cm4gdC5idWZmZXJ9LGUud2JnLl9fd2JnX2xlbmd0aF8zYjRmMDIyMTg4YWU4ZGI2PWZ1bmN0aW9uKHQpe3JldHVybiB0Lmxlbmd0aH0sZS53YmcuX193YmdfbGVuZ3RoX2E0NDYxOTNkYzIyYzEyZjg9ZnVuY3Rpb24odCl7cmV0dXJuIHQubGVuZ3RofSxlLndiZy5fX3diZ19uZXdfNzgwYWJlZTVjMTczOWZkNz1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IEZsb2F0MzJBcnJheSh0KX0sZS53YmcuX193YmdfbmV3X2ExMjAwMmE3ZjkxYzc1YmU9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBVaW50OEFycmF5KHQpfSxlLndiZy5fX3diZ19uZXdfZTNiMzIxZGNmZWY4OWZjNz1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IFVpbnQzMkFycmF5KHQpfSxlLndiZy5fX3diZ19uZXd3aXRoYnl0ZW9mZnNldGFuZGxlbmd0aF9mMWRlYWQ0NGQxZmM3MjEyPWZ1bmN0aW9uKHQsbixvKXtyZXR1cm4gbmV3IFVpbnQzMkFycmF5KHQsbj4+PjAsbz4+PjApfSxlLndiZy5fX3diZ19zZXRfMTBiYWQ5YmVlMGU5YzU4Yj1mdW5jdGlvbih0LG4sbyl7dC5zZXQobixvPj4+MCl9LGUud2JnLl9fd2JnX3NldF82NTU5NWJkZDg2OGIzMDA5PWZ1bmN0aW9uKHQsbixvKXt0LnNldChuLG8+Pj4wKX0sZS53YmcuX193YmluZGdlbl9pbml0X2V4dGVybnJlZl90YWJsZT1mdW5jdGlvbigpe2xldCB0PUduLl9fd2JpbmRnZW5fZXhwb3J0XzAsbj10Lmdyb3coNCk7dC5zZXQoMCx2b2lkIDApLHQuc2V0KG4rMCx2b2lkIDApLHQuc2V0KG4rMSxudWxsKSx0LnNldChuKzIsITApLHQuc2V0KG4rMywhMSl9LGUud2JnLl9fd2JpbmRnZW5fbWVtb3J5PWZ1bmN0aW9uKCl7cmV0dXJuIEduLm1lbW9yeX0sZS53YmcuX193YmluZGdlbl9zdHJpbmdfbmV3PWZ1bmN0aW9uKHQsbil7cmV0dXJuIGpPKHQsbil9LGUud2JnLl9fd2JpbmRnZW5fdGhyb3c9ZnVuY3Rpb24odCxuKXt0aHJvdyBuZXcgRXJyb3Ioak8odCxuKSl9LGV9ZnVuY3Rpb24gWE8oZSx0KXtyZXR1cm4gR249ZS5leHBvcnRzLEU2Ll9fd2JpbmRnZW5fd2FzbV9tb2R1bGU9dCxPZD1udWxsLHhkPW51bGwsR24uX193YmluZGdlbl9zdGFydCgpLEdufWZ1bmN0aW9uIE1tKGUpe2lmKEduIT09dm9pZCAwKXJldHVybiBHbjt0eXBlb2YgZTwidSImJihPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSk9PT1PYmplY3QucHJvdG90eXBlP3ttb2R1bGU6ZX09ZTpjb25zb2xlLndhcm4oInVzaW5nIGRlcHJlY2F0ZWQgcGFyYW1ldGVycyBmb3IgYGluaXRTeW5jKClgOyBwYXNzIGEgc2luZ2xlIG9iamVjdCBpbnN0ZWFkIikpO2xldCB0PVdPKCk7ZSBpbnN0YW5jZW9mIFdlYkFzc2VtYmx5Lk1vZHVsZXx8KGU9bmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShlKSk7bGV0IG49bmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNlKGUsdCk7cmV0dXJuIFhPKG4sZSl9YXN5bmMgZnVuY3Rpb24gRTYoZSl7aWYoR24hPT12b2lkIDApcmV0dXJuIEduO3R5cGVvZiBlPCJ1IiYmKE9iamVjdC5nZXRQcm90b3R5cGVPZihlKT09PU9iamVjdC5wcm90b3R5cGU/e21vZHVsZV9vcl9wYXRoOmV9PWU6Y29uc29sZS53YXJuKCJ1c2luZyBkZXByZWNhdGVkIHBhcmFtZXRlcnMgZm9yIHRoZSBpbml0aWFsaXphdGlvbiBmdW5jdGlvbjsgcGFzcyBhIHNpbmdsZSBvYmplY3QgaW5zdGVhZCIpKSx0eXBlb2YgZT4idSImJihlPW5ldyBVUkwoIndhc21fc3BsYXRzX2JnLndhc20iLFI2LnVybCkpO2xldCB0PVdPKCk7KHR5cGVvZiBlPT0ic3RyaW5nInx8dHlwZW9mIFJlcXVlc3Q9PSJmdW5jdGlvbiImJmUgaW5zdGFuY2VvZiBSZXF1ZXN0fHx0eXBlb2YgVVJMPT0iZnVuY3Rpb24iJiZlIGluc3RhbmNlb2YgVVJMKSYmKGU9ZmV0Y2goZSkpO2xldHtpbnN0YW5jZTpuLG1vZHVsZTpvfT1hd2FpdCBUNihhd2FpdCBlLHQpO3JldHVybiBYTyhuLG8pfXZhciBSNixHbixHTyx4ZCxPZCxITyx6TyxCeSxVeT1YKCgpPT57UjY9e30sR089dHlwZW9mIFRleHREZWNvZGVyPCJ1Ij9uZXcgVGV4dERlY29kZXIoInV0Zi04Iix7aWdub3JlQk9NOiEwLGZhdGFsOiEwfSk6e2RlY29kZTooKT0+e3Rocm93IEVycm9yKCJUZXh0RGVjb2RlciBub3QgYXZhaWxhYmxlIil9fTt0eXBlb2YgVGV4dERlY29kZXI8InUiJiZHTy5kZWNvZGUoKTt4ZD1udWxsO09kPW51bGw7SE89MDt6Tz10eXBlb2YgRmluYWxpemF0aW9uUmVnaXN0cnk+InUiP3tyZWdpc3RlcjooKT0+e30sdW5yZWdpc3RlcjooKT0+e319Om5ldyBGaW5hbGl6YXRpb25SZWdpc3RyeShlPT5Hbi5fX3diZ190ZXh0dXJlZGF0YV9mcmVlKGU+Pj4wLDEpKSxCeT1jbGFzcyBle3N0YXRpYyBfX3dyYXAodCl7dD10Pj4+MDtsZXQgbj1PYmplY3QuY3JlYXRlKGUucHJvdG90eXBlKTtyZXR1cm4gbi5fX3diZ19wdHI9dCx6Ty5yZWdpc3RlcihuLG4uX193YmdfcHRyLG4pLG59X19kZXN0cm95X2ludG9fcmF3KCl7bGV0IHQ9dGhpcy5fX3diZ19wdHI7cmV0dXJuIHRoaXMuX193YmdfcHRyPTAsek8udW5yZWdpc3Rlcih0aGlzKSx0fWZyZWUoKXtsZXQgdD10aGlzLl9fZGVzdHJveV9pbnRvX3JhdygpO0duLl9fd2JnX3RleHR1cmVkYXRhX2ZyZWUodCwwKX1nZXQgZGF0YSgpe2xldCB0PUduLnRleHR1cmVkYXRhX2RhdGEodGhpcy5fX3diZ19wdHIpO3ZhciBuPUE2KHRbMF0sdFsxXSkuc2xpY2UoKTtyZXR1cm4gR24uX193YmluZGdlbl9mcmVlKHRbMF0sdFsxXSo0LDQpLG59Z2V0IHdpZHRoKCl7cmV0dXJuIEduLnRleHR1cmVkYXRhX3dpZHRoKHRoaXMuX193YmdfcHRyKT4+PjB9Z2V0IGhlaWdodCgpe3JldHVybiBHbi50ZXh0dXJlZGF0YV9oZWlnaHQodGhpcy5fX3diZ19wdHIpPj4+MH1zdGF0aWMgbmV3KHQsbixvKXtsZXQgYT13Nih0LEduLl9fd2JpbmRnZW5fbWFsbG9jKSxyPUhPLGk9R24udGV4dHVyZWRhdGFfbmV3KGEscixuLG8pO3JldHVybiBlLl9fd3JhcChpKX19fSk7dmFyIEx5PXt9O3J0KEx5LHtkZWZhdWx0OigpPT5TNn0pO2FzeW5jIGZ1bmN0aW9uIHg2KGUsdCl7bGV0IG49ZS53ZWJBc3NlbWJseUNvbmZpZztpZihnKG4pJiZnKG4ud2FzbUJpbmFyeSkpcmV0dXJuIE1tKHttb2R1bGU6bi53YXNtQmluYXJ5fSksITB9ZnVuY3Rpb24gTzYoZSx0KXtsZXQgbj1lLndlYkFzc2VtYmx5Q29uZmlnO2lmKGcobikpcmV0dXJuIHg2KGUsdCk7bGV0e3ByaW1pdGl2ZTpvLHNvcnRUeXBlOmF9PWU7aWYoYT09PSJJbmRleCIpcmV0dXJuIHFPKG8ucG9zaXRpb25zLG8ubW9kZWxWaWV3LG8uY291bnQpfXZhciBTNixqeT1YKCgpPT57VW4oKTtzZSgpO1V5KCk7UzY9QXQoTzYpfSk7dmFyIHp5PXt9O3J0KHp5LHtkZWZhdWx0OigpPT5ONn0pO2FzeW5jIGZ1bmN0aW9uIEM2KGUsdCl7bGV0IG49ZS53ZWJBc3NlbWJseUNvbmZpZztyZXR1cm4gZyhuKSYmZyhuLndhc21CaW5hcnkpPyhNbSh7bW9kdWxlOm4ud2FzbUJpbmFyeX0pLCEwKTohMX1hc3luYyBmdW5jdGlvbiBNNihlLHQpe2xldCBuPWUud2ViQXNzZW1ibHlDb25maWc7aWYoZyhuKSlyZXR1cm4gQzYoZSx0KTtsZXR7YXR0cmlidXRlczpvLGNvdW50OmF9PWUscj1LTyhvLnBvc2l0aW9ucyxvLnNjYWxlcyxvLnJvdGF0aW9ucyxvLmNvbG9ycyxhKTtyZXR1cm57ZGF0YTpyLmRhdGEsd2lkdGg6ci53aWR0aCxoZWlnaHQ6ci5oZWlnaHR9fXZhciBONixHeT1YKCgpPT57VW4oKTtzZSgpO1V5KCk7TjY9QXQoTTYpfSk7dmFyIFZ5PXt9O3J0KFZ5LHtkZWZhdWx0OigpPT5ENn0pO2Z1bmN0aW9uIHY2KGUsdCl7bGV0IG49bmV3IEZsb2F0NjRBcnJheShlLmFhYmJzKSxvPUFycmF5LmZyb20oe2xlbmd0aDo0fSwodSxsKT0+e2xldCBoPXMudW5wYWNrKG4sbCo2LEk2KSxtPXMudW5wYWNrKG4sbCo2KzMsUDYpO3JldHVybiB1by5mcm9tQ29ybmVycyhoLG0sbmV3IHVvKX0pLGE9bmV3IEZsb2F0NjRBcnJheShlLmludmVyc2VUcmFuc2Zvcm0pLHI9JC51bnBhY2soYSwwLG5ldyAkKSxpPW5ldyBVaW50MzJBcnJheShlLnRyaWFuZ2xlSW5kaWNlcyksZj1uZXcgRmxvYXQ2NEFycmF5KGUudHJpYW5nbGVQb3NpdGlvbnMpLGQ9QXJyYXkuZnJvbSh7bGVuZ3RoOjR9LCgpPT5bXSk7Zm9yKGxldCB1PTA7dTxpLmxlbmd0aDt1Kyspe3MudW5wYWNrKGYsdSo5LE5tWzBdKSxzLnVucGFjayhmLHUqOSszLE5tWzFdKSxzLnVucGFjayhmLHUqOSs2LE5tWzJdKTtsZXQgbD1GNihyLE5tKTtmb3IobGV0IGg9MDtoPDQ7aCsrKW9baF0uaW50ZXJzZWN0QXhpc0FsaWduZWRCb3VuZGluZ0JveChsKSYmZFtoXS5wdXNoKGlbdV0pfXJldHVybntpbnRlcnNlY3RpbmdUcmlhbmdsZXNBcnJheXM6ZC5tYXAodT0+e2xldCBsPW5ldyBVaW50MzJBcnJheSh1KTtyZXR1cm4gdC5wdXNoKGwuYnVmZmVyKSxsLmJ1ZmZlcn0pfX1mdW5jdGlvbiBGNihlLHQpeyQubXVsdGlwbHlCeVBvaW50KGUsdFswXSx0WzBdKSwkLm11bHRpcGx5QnlQb2ludChlLHRbMV0sdFsxXSksJC5tdWx0aXBseUJ5UG9pbnQoZSx0WzJdLHRbMl0pO2xldCBuPXVvLmZyb21Qb2ludHModCxrNik7cmV0dXJuIHMuY2xhbXAobi5taW5pbXVtLEpPLFlPLG4ubWluaW11bSkscy5jbGFtcChuLm1heGltdW0sSk8sWU8sbi5tYXhpbXVtKSxufXZhciBJNixQNixObSxrNixZTyxKTyxENixIeT1YKCgpPT57VW4oKTtwbigpO0llKCk7QWkoKTtJNj1uZXcgcyxQNj1uZXcgcyxObT1bbmV3IHMsbmV3IHMsbmV3IHNdLGs2PW5ldyB1byxZTz1uZXcgcyguNSwuNSwuNSksSk89bmV3IHMoLS41LC0uNSwtLjUpO0Q2PUF0KHY2KX0pO3ZhciBFdCxsbyxLeT1YKCgpPT57b2MoKTtFdD17VU5TSUdORURfQllURTpQZS5VTlNJR05FRF9CWVRFLFVOU0lHTkVEX1NIT1JUOlBlLlVOU0lHTkVEX1NIT1JULFVOU0lHTkVEX0lOVDpQZS5VTlNJR05FRF9JTlQsRkxPQVQ6UGUuRkxPQVQsSEFMRl9GTE9BVDpQZS5IQUxGX0ZMT0FUX09FUyxVTlNJR05FRF9JTlRfMjRfODpQZS5VTlNJR05FRF9JTlRfMjRfOCxVTlNJR05FRF9TSE9SVF80XzRfNF80OlBlLlVOU0lHTkVEX1NIT1JUXzRfNF80XzQsVU5TSUdORURfU0hPUlRfNV81XzVfMTpQZS5VTlNJR05FRF9TSE9SVF81XzVfNV8xLFVOU0lHTkVEX1NIT1JUXzVfNl81OlBlLlVOU0lHTkVEX1NIT1JUXzVfNl81fTtFdC50b1dlYkdMQ29uc3RhbnQ9ZnVuY3Rpb24oZSx0KXtzd2l0Y2goZSl7Y2FzZSBFdC5VTlNJR05FRF9CWVRFOnJldHVybiBQZS5VTlNJR05FRF9CWVRFO2Nhc2UgRXQuVU5TSUdORURfU0hPUlQ6cmV0dXJuIFBlLlVOU0lHTkVEX1NIT1JUO2Nhc2UgRXQuVU5TSUdORURfSU5UOnJldHVybiBQZS5VTlNJR05FRF9JTlQ7Y2FzZSBFdC5GTE9BVDpyZXR1cm4gUGUuRkxPQVQ7Y2FzZSBFdC5IQUxGX0ZMT0FUOnJldHVybiB0LndlYmdsMj9QZS5IQUxGX0ZMT0FUOlBlLkhBTEZfRkxPQVRfT0VTO2Nhc2UgRXQuVU5TSUdORURfSU5UXzI0Xzg6cmV0dXJuIFBlLlVOU0lHTkVEX0lOVF8yNF84O2Nhc2UgRXQuVU5TSUdORURfU0hPUlRfNF80XzRfNDpyZXR1cm4gUGUuVU5TSUdORURfU0hPUlRfNF80XzRfNDtjYXNlIEV0LlVOU0lHTkVEX1NIT1JUXzVfNV81XzE6cmV0dXJuIFBlLlVOU0lHTkVEX1NIT1JUXzVfNV81XzE7Y2FzZSBFdC5VTlNJR05FRF9TSE9SVF81XzZfNTpyZXR1cm4gRXQuVU5TSUdORURfU0hPUlRfNV82XzV9fTtFdC5pc1BhY2tlZD1mdW5jdGlvbihlKXtyZXR1cm4gZT09PUV0LlVOU0lHTkVEX0lOVF8yNF84fHxlPT09RXQuVU5TSUdORURfU0hPUlRfNF80XzRfNHx8ZT09PUV0LlVOU0lHTkVEX1NIT1JUXzVfNV81XzF8fGU9PT1FdC5VTlNJR05FRF9TSE9SVF81XzZfNX07RXQuc2l6ZUluQnl0ZXM9ZnVuY3Rpb24oZSl7c3dpdGNoKGUpe2Nhc2UgRXQuVU5TSUdORURfQllURTpyZXR1cm4gMTtjYXNlIEV0LlVOU0lHTkVEX1NIT1JUOmNhc2UgRXQuVU5TSUdORURfU0hPUlRfNF80XzRfNDpjYXNlIEV0LlVOU0lHTkVEX1NIT1JUXzVfNV81XzE6Y2FzZSBFdC5VTlNJR05FRF9TSE9SVF81XzZfNTpjYXNlIEV0LkhBTEZfRkxPQVQ6cmV0dXJuIDI7Y2FzZSBFdC5VTlNJR05FRF9JTlQ6Y2FzZSBFdC5GTE9BVDpjYXNlIEV0LlVOU0lHTkVEX0lOVF8yNF84OnJldHVybiA0fX07RXQudmFsaWRhdGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT1FdC5VTlNJR05FRF9CWVRFfHxlPT09RXQuVU5TSUdORURfU0hPUlR8fGU9PT1FdC5VTlNJR05FRF9JTlR8fGU9PT1FdC5GTE9BVHx8ZT09PUV0LkhBTEZfRkxPQVR8fGU9PT1FdC5VTlNJR05FRF9JTlRfMjRfOHx8ZT09PUV0LlVOU0lHTkVEX1NIT1JUXzRfNF80XzR8fGU9PT1FdC5VTlNJR05FRF9TSE9SVF81XzVfNV8xfHxlPT09RXQuVU5TSUdORURfU0hPUlRfNV82XzV9O0V0LmdldFR5cGVkQXJyYXlDb25zdHJ1Y3Rvcj1mdW5jdGlvbihlKXtsZXQgdD1FdC5zaXplSW5CeXRlcyhlKTtyZXR1cm4gdD09PVVpbnQ4QXJyYXkuQllURVNfUEVSX0VMRU1FTlQ/VWludDhBcnJheTp0PT09VWludDE2QXJyYXkuQllURVNfUEVSX0VMRU1FTlQ/VWludDE2QXJyYXk6dD09PUZsb2F0MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVCYmZT09PUV0LkZMT0FUP0Zsb2F0MzJBcnJheTpVaW50MzJBcnJheX07bG89T2JqZWN0LmZyZWV6ZShFdCl9KTt2YXIgbWUsWG4sWk89WCgoKT0+e0t5KCk7b2MoKTttZT17REVQVEhfQ09NUE9ORU5UOlBlLkRFUFRIX0NPTVBPTkVOVCxERVBUSF9TVEVOQ0lMOlBlLkRFUFRIX1NURU5DSUwsQUxQSEE6UGUuQUxQSEEsUkVEOlBlLlJFRCxSOlBlLlJFRCxSRzpQZS5SRyxSR0I6UGUuUkdCLFJHQkE6UGUuUkdCQSxSRURfSU5URUdFUjpQZS5SRURfSU5URUdFUixSR19JTlRFR0VSOlBlLlJHX0lOVEVHRVIsUkdCX0lOVEVHRVI6UGUuUkdCX0lOVEVHRVIsUkdCQV9JTlRFR0VSOlBlLlJHQkFfSU5URUdFUixMVU1JTkFOQ0U6UGUuTFVNSU5BTkNFLExVTUlOQU5DRV9BTFBIQTpQZS5MVU1JTkFOQ0VfQUxQSEEsUkdCX0RYVDE6UGUuQ09NUFJFU1NFRF9SR0JfUzNUQ19EWFQxX0VYVCxSR0JBX0RYVDE6UGUuQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUMV9FWFQsUkdCQV9EWFQzOlBlLkNPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDNfRVhULFJHQkFfRFhUNTpQZS5DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQ1X0VYVCxSR0JfUFZSVENfNEJQUFYxOlBlLkNPTVBSRVNTRURfUkdCX1BWUlRDXzRCUFBWMV9JTUcsUkdCX1BWUlRDXzJCUFBWMTpQZS5DT01QUkVTU0VEX1JHQl9QVlJUQ18yQlBQVjFfSU1HLFJHQkFfUFZSVENfNEJQUFYxOlBlLkNPTVBSRVNTRURfUkdCQV9QVlJUQ180QlBQVjFfSU1HLFJHQkFfUFZSVENfMkJQUFYxOlBlLkNPTVBSRVNTRURfUkdCQV9QVlJUQ18yQlBQVjFfSU1HLFJHQkFfQVNUQzpQZS5DT01QUkVTU0VEX1JHQkFfQVNUQ180eDRfV0VCR0wsUkdCX0VUQzE6UGUuQ09NUFJFU1NFRF9SR0JfRVRDMV9XRUJHTCxSR0I4X0VUQzI6UGUuQ09NUFJFU1NFRF9SR0I4X0VUQzIsUkdCQThfRVRDMl9FQUM6UGUuQ09NUFJFU1NFRF9SR0JBOF9FVEMyX0VBQyxSR0JBX0JDNzpQZS5DT01QUkVTU0VEX1JHQkFfQlBUQ19VTk9STX07bWUuY29tcG9uZW50c0xlbmd0aD1mdW5jdGlvbihlKXtzd2l0Y2goZSl7Y2FzZSBtZS5SR0I6Y2FzZSBtZS5SR0JfSU5URUdFUjpyZXR1cm4gMztjYXNlIG1lLlJHQkE6Y2FzZSBtZS5SR0JBX0lOVEVHRVI6cmV0dXJuIDQ7Y2FzZSBtZS5MVU1JTkFOQ0VfQUxQSEE6Y2FzZSBtZS5SRzpjYXNlIG1lLlJHX0lOVEVHRVI6cmV0dXJuIDI7Y2FzZSBtZS5BTFBIQTpjYXNlIG1lLlJFRDpjYXNlIG1lLlJFRF9JTlRFR0VSOmNhc2UgbWUuTFVNSU5BTkNFOnJldHVybiAxO2Nhc2UgbWUuUjpyZXR1cm4gNDtkZWZhdWx0OnJldHVybiAxfX07bWUudmFsaWRhdGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT1tZS5ERVBUSF9DT01QT05FTlR8fGU9PT1tZS5ERVBUSF9TVEVOQ0lMfHxlPT09bWUuQUxQSEF8fGU9PT1tZS5SRUR8fGU9PT1tZS5SR3x8ZT09PW1lLlJHQnx8ZT09PW1lLlJHQkF8fGU9PT1tZS5SRURfSU5URUdFUnx8ZT09PW1lLlJHX0lOVEVHRVJ8fGU9PT1tZS5SR0JfSU5URUdFUnx8ZT09PW1lLlJHQkFfSU5URUdFUnx8ZT09PW1lLkxVTUlOQU5DRXx8ZT09PW1lLkxVTUlOQU5DRV9BTFBIQXx8ZT09PW1lLlJHQl9EWFQxfHxlPT09bWUuUkdCQV9EWFQxfHxlPT09bWUuUkdCQV9EWFQzfHxlPT09bWUuUkdCQV9EWFQ1fHxlPT09bWUuUkdCX1BWUlRDXzRCUFBWMXx8ZT09PW1lLlJHQl9QVlJUQ18yQlBQVjF8fGU9PT1tZS5SR0JBX1BWUlRDXzRCUFBWMXx8ZT09PW1lLlJHQkFfUFZSVENfMkJQUFYxfHxlPT09bWUuUkdCQV9BU1RDfHxlPT09bWUuUkdCX0VUQzF8fGU9PT1tZS5SR0I4X0VUQzJ8fGU9PT1tZS5SR0JBOF9FVEMyX0VBQ3x8ZT09PW1lLlJHQkFfQkM3fHxlPT09bWUuUn07bWUuaXNDb2xvckZvcm1hdD1mdW5jdGlvbihlKXtyZXR1cm4gZT09PW1lLlJFRHx8ZT09PW1lLkFMUEhBfHxlPT09bWUuUkdCfHxlPT09bWUuUkdCQXx8ZT09PW1lLkxVTUlOQU5DRXx8ZT09PW1lLkxVTUlOQU5DRV9BTFBIQXx8ZT09PW1lLlJ9O21lLmlzRGVwdGhGb3JtYXQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT1tZS5ERVBUSF9DT01QT05FTlR8fGU9PT1tZS5ERVBUSF9TVEVOQ0lMfTttZS5pc0NvbXByZXNzZWRGb3JtYXQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT1tZS5SR0JfRFhUMXx8ZT09PW1lLlJHQkFfRFhUMXx8ZT09PW1lLlJHQkFfRFhUM3x8ZT09PW1lLlJHQkFfRFhUNXx8ZT09PW1lLlJHQl9QVlJUQ180QlBQVjF8fGU9PT1tZS5SR0JfUFZSVENfMkJQUFYxfHxlPT09bWUuUkdCQV9QVlJUQ180QlBQVjF8fGU9PT1tZS5SR0JBX1BWUlRDXzJCUFBWMXx8ZT09PW1lLlJHQkFfQVNUQ3x8ZT09PW1lLlJHQl9FVEMxfHxlPT09bWUuUkdCOF9FVEMyfHxlPT09bWUuUkdCQThfRVRDMl9FQUN8fGU9PT1tZS5SR0JBX0JDN307bWUuaXNEWFRGb3JtYXQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT1tZS5SR0JfRFhUMXx8ZT09PW1lLlJHQkFfRFhUMXx8ZT09PW1lLlJHQkFfRFhUM3x8ZT09PW1lLlJHQkFfRFhUNX07bWUuaXNQVlJUQ0Zvcm1hdD1mdW5jdGlvbihlKXtyZXR1cm4gZT09PW1lLlJHQl9QVlJUQ180QlBQVjF8fGU9PT1tZS5SR0JfUFZSVENfMkJQUFYxfHxlPT09bWUuUkdCQV9QVlJUQ180QlBQVjF8fGU9PT1tZS5SR0JBX1BWUlRDXzJCUFBWMX07bWUuaXNBU1RDRm9ybWF0PWZ1bmN0aW9uKGUpe3JldHVybiBlPT09bWUuUkdCQV9BU1RDfTttZS5pc0VUQzFGb3JtYXQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT1tZS5SR0JfRVRDMX07bWUuaXNFVEMyRm9ybWF0PWZ1bmN0aW9uKGUpe3JldHVybiBlPT09bWUuUkdCOF9FVEMyfHxlPT09bWUuUkdCQThfRVRDMl9FQUN9O21lLmlzQkM3Rm9ybWF0PWZ1bmN0aW9uKGUpe3JldHVybiBlPT09bWUuUkdCQV9CQzd9O21lLmNvbXByZXNzZWRUZXh0dXJlU2l6ZUluQnl0ZXM9ZnVuY3Rpb24oZSx0LG4pe3N3aXRjaChlKXtjYXNlIG1lLlJHQl9EWFQxOmNhc2UgbWUuUkdCQV9EWFQxOmNhc2UgbWUuUkdCX0VUQzE6Y2FzZSBtZS5SR0I4X0VUQzI6cmV0dXJuIE1hdGguZmxvb3IoKHQrMykvNCkqTWF0aC5mbG9vcigobiszKS80KSo4O2Nhc2UgbWUuUkdCQV9EWFQzOmNhc2UgbWUuUkdCQV9EWFQ1OmNhc2UgbWUuUkdCQV9BU1RDOmNhc2UgbWUuUkdCQThfRVRDMl9FQUM6cmV0dXJuIE1hdGguZmxvb3IoKHQrMykvNCkqTWF0aC5mbG9vcigobiszKS80KSoxNjtjYXNlIG1lLlJHQl9QVlJUQ180QlBQVjE6Y2FzZSBtZS5SR0JBX1BWUlRDXzRCUFBWMTpyZXR1cm4gTWF0aC5mbG9vcigoTWF0aC5tYXgodCw4KSpNYXRoLm1heChuLDgpKjQrNykvOCk7Y2FzZSBtZS5SR0JfUFZSVENfMkJQUFYxOmNhc2UgbWUuUkdCQV9QVlJUQ18yQlBQVjE6cmV0dXJuIE1hdGguZmxvb3IoKE1hdGgubWF4KHQsMTYpKk1hdGgubWF4KG4sOCkqMis3KS84KTtjYXNlIG1lLlJHQkFfQkM3OnJldHVybiBNYXRoLmNlaWwodC80KSpNYXRoLmNlaWwobi80KSoxNjtkZWZhdWx0OnJldHVybiAwfX07bWUudGV4dHVyZVNpemVJbkJ5dGVzPWZ1bmN0aW9uKGUsdCxuLG8pe2xldCBhPW1lLmNvbXBvbmVudHNMZW5ndGgoZSk7cmV0dXJuIGxvLmlzUGFja2VkKHQpJiYoYT0xKSxhKmxvLnNpemVJbkJ5dGVzKHQpKm4qb307bWUudGV4dHVyZTNEU2l6ZUluQnl0ZXM9ZnVuY3Rpb24oZSx0LG4sbyxhKXtsZXQgcj1tZS5jb21wb25lbnRzTGVuZ3RoKGUpO3JldHVybiBsby5pc1BhY2tlZCh0KSYmKHI9MSkscipsby5zaXplSW5CeXRlcyh0KSpuKm8qYX07bWUuYWxpZ25tZW50SW5CeXRlcz1mdW5jdGlvbihlLHQsbil7bGV0IG89bWUudGV4dHVyZVNpemVJbkJ5dGVzKGUsdCxuLDEpJTQ7cmV0dXJuIG89PT0wPzQ6bz09PTI/MjoxfTttZS5jcmVhdGVUeXBlZEFycmF5PWZ1bmN0aW9uKGUsdCxuLG8pe2xldCBhPWxvLmdldFR5cGVkQXJyYXlDb25zdHJ1Y3Rvcih0KSxyPW1lLmNvbXBvbmVudHNMZW5ndGgoZSkqbipvO3JldHVybiBuZXcgYShyKX07bWUuZmxpcFk9ZnVuY3Rpb24oZSx0LG4sbyxhKXtpZihhPT09MSlyZXR1cm4gZTtsZXQgcj1tZS5jcmVhdGVUeXBlZEFycmF5KHQsbixvLGEpLGk9bWUuY29tcG9uZW50c0xlbmd0aCh0KSxmPW8qaTtmb3IobGV0IGQ9MDtkPGE7KytkKXtsZXQgYz1kKm8qaSx1PShhLWQtMSkqbyppO2ZvcihsZXQgbD0wO2w8ZjsrK2wpclt1K2xdPWVbYytsXX1yZXR1cm4gcn07bWUudG9JbnRlcm5hbEZvcm1hdD1mdW5jdGlvbihlLHQsbil7aWYoIW4ud2ViZ2wyKXJldHVybiBlO2lmKGU9PT1tZS5ERVBUSF9TVEVOQ0lMKXJldHVybiBQZS5ERVBUSDI0X1NURU5DSUw4O2lmKGU9PT1tZS5ERVBUSF9DT01QT05FTlQpe2lmKHQ9PT1sby5VTlNJR05FRF9TSE9SVClyZXR1cm4gUGUuREVQVEhfQ09NUE9ORU5UMTY7aWYodD09PWxvLlVOU0lHTkVEX0lOVClyZXR1cm4gUGUuREVQVEhfQ09NUE9ORU5UMjR9aWYodD09PWxvLkZMT0FUKXN3aXRjaChlKXtjYXNlIG1lLlJHQkE6cmV0dXJuIFBlLlJHQkEzMkY7Y2FzZSBtZS5SR0I6cmV0dXJuIFBlLlJHQjMyRjtjYXNlIG1lLlJHOnJldHVybiBQZS5SRzMyRjtjYXNlIG1lLlJFRDpjYXNlIG1lLlI6cmV0dXJuIFBlLlIzMkZ9aWYodD09PWxvLkhBTEZfRkxPQVQpc3dpdGNoKGUpe2Nhc2UgbWUuUkdCQTpyZXR1cm4gUGUuUkdCQTE2RjtjYXNlIG1lLlJHQjpyZXR1cm4gUGUuUkdCMTZGO2Nhc2UgbWUuUkc6cmV0dXJuIFBlLlJHMTZGO2Nhc2UgbWUuUkVEOmNhc2UgbWUuUjpyZXR1cm4gUGUuUjE2Rn1pZih0PT09bG8uVU5TSUdORURfQllURSlzd2l0Y2goZSl7Y2FzZSBtZS5SR0JBOnJldHVybiBQZS5SR0JBODtjYXNlIG1lLlJHQjpyZXR1cm4gUGUuUkdCODtjYXNlIG1lLlJHOnJldHVybiBQZS5SRzg7Y2FzZSBtZS5SRUQ6cmV0dXJuIFBlLlI4fWlmKHQ9PT1sby5JTlQpc3dpdGNoKGUpe2Nhc2UgbWUuUkdCQV9JTlRFR0VSOnJldHVybiBQZS5SR0JBMzJJO2Nhc2UgbWUuUkdCX0lOVEVHRVI6cmV0dXJuIFBlLlJHQjMySTtjYXNlIG1lLlJHX0lOVEVHRVI6cmV0dXJuIFBlLlJHMzJJO2Nhc2UgbWUuUkVEX0lOVEVHRVI6cmV0dXJuIFBlLlIzMkl9aWYodD09PWxvLlVOU0lHTkVEX0lOVClzd2l0Y2goZSl7Y2FzZSBtZS5SR0JBX0lOVEVHRVI6cmV0dXJuIFBlLlJHQkEzMlVJO2Nhc2UgbWUuUkdCX0lOVEVHRVI6cmV0dXJuIFBlLlJHQjMyVUk7Y2FzZSBtZS5SR19JTlRFR0VSOnJldHVybiBQZS5SRzMyVUk7Y2FzZSBtZS5SRURfSU5URUdFUjpyZXR1cm4gUGUuUjMyVUl9cmV0dXJuIGV9O1huPU9iamVjdC5mcmVlemUobWUpfSk7dmFyIEI2LFNkLFFPPVgoKCk9PntCNj17VktfRk9STUFUX1VOREVGSU5FRDowLFZLX0ZPUk1BVF9SNEc0X1VOT1JNX1BBQ0s4OjEsVktfRk9STUFUX1I0RzRCNEE0X1VOT1JNX1BBQ0sxNjoyLFZLX0ZPUk1BVF9CNEc0UjRBNF9VTk9STV9QQUNLMTY6MyxWS19GT1JNQVRfUjVHNkI1X1VOT1JNX1BBQ0sxNjo0LFZLX0ZPUk1BVF9CNUc2UjVfVU5PUk1fUEFDSzE2OjUsVktfRk9STUFUX1I1RzVCNUExX1VOT1JNX1BBQ0sxNjo2LFZLX0ZPUk1BVF9CNUc1UjVBMV9VTk9STV9QQUNLMTY6NyxWS19GT1JNQVRfQTFSNUc1QjVfVU5PUk1fUEFDSzE2OjgsVktfRk9STUFUX1I4X1VOT1JNOjksVktfRk9STUFUX1I4X1NOT1JNOjEwLFZLX0ZPUk1BVF9SOF9VU0NBTEVEOjExLFZLX0ZPUk1BVF9SOF9TU0NBTEVEOjEyLFZLX0ZPUk1BVF9SOF9VSU5UOjEzLFZLX0ZPUk1BVF9SOF9TSU5UOjE0LFZLX0ZPUk1BVF9SOF9TUkdCOjE1LFZLX0ZPUk1BVF9SOEc4X1VOT1JNOjE2LFZLX0ZPUk1BVF9SOEc4X1NOT1JNOjE3LFZLX0ZPUk1BVF9SOEc4X1VTQ0FMRUQ6MTgsVktfRk9STUFUX1I4RzhfU1NDQUxFRDoxOSxWS19GT1JNQVRfUjhHOF9VSU5UOjIwLFZLX0ZPUk1BVF9SOEc4X1NJTlQ6MjEsVktfRk9STUFUX1I4RzhfU1JHQjoyMixWS19GT1JNQVRfUjhHOEI4X1VOT1JNOjIzLFZLX0ZPUk1BVF9SOEc4QjhfU05PUk06MjQsVktfRk9STUFUX1I4RzhCOF9VU0NBTEVEOjI1LFZLX0ZPUk1BVF9SOEc4QjhfU1NDQUxFRDoyNixWS19GT1JNQVRfUjhHOEI4X1VJTlQ6MjcsVktfRk9STUFUX1I4RzhCOF9TSU5UOjI4LFZLX0ZPUk1BVF9SOEc4QjhfU1JHQjoyOSxWS19GT1JNQVRfQjhHOFI4X1VOT1JNOjMwLFZLX0ZPUk1BVF9COEc4UjhfU05PUk06MzEsVktfRk9STUFUX0I4RzhSOF9VU0NBTEVEOjMyLFZLX0ZPUk1BVF9COEc4UjhfU1NDQUxFRDozMyxWS19GT1JNQVRfQjhHOFI4X1VJTlQ6MzQsVktfRk9STUFUX0I4RzhSOF9TSU5UOjM1LFZLX0ZPUk1BVF9COEc4UjhfU1JHQjozNixWS19GT1JNQVRfUjhHOEI4QThfVU5PUk06MzcsVktfRk9STUFUX1I4RzhCOEE4X1NOT1JNOjM4LFZLX0ZPUk1BVF9SOEc4QjhBOF9VU0NBTEVEOjM5LFZLX0ZPUk1BVF9SOEc4QjhBOF9TU0NBTEVEOjQwLFZLX0ZPUk1BVF9SOEc4QjhBOF9VSU5UOjQxLFZLX0ZPUk1BVF9SOEc4QjhBOF9TSU5UOjQyLFZLX0ZPUk1BVF9SOEc4QjhBOF9TUkdCOjQzLFZLX0ZPUk1BVF9COEc4UjhBOF9VTk9STTo0NCxWS19GT1JNQVRfQjhHOFI4QThfU05PUk06NDUsVktfRk9STUFUX0I4RzhSOEE4X1VTQ0FMRUQ6NDYsVktfRk9STUFUX0I4RzhSOEE4X1NTQ0FMRUQ6NDcsVktfRk9STUFUX0I4RzhSOEE4X1VJTlQ6NDgsVktfRk9STUFUX0I4RzhSOEE4X1NJTlQ6NDksVktfRk9STUFUX0I4RzhSOEE4X1NSR0I6NTAsVktfRk9STUFUX0E4QjhHOFI4X1VOT1JNX1BBQ0szMjo1MSxWS19GT1JNQVRfQThCOEc4UjhfU05PUk1fUEFDSzMyOjUyLFZLX0ZPUk1BVF9BOEI4RzhSOF9VU0NBTEVEX1BBQ0szMjo1MyxWS19GT1JNQVRfQThCOEc4UjhfU1NDQUxFRF9QQUNLMzI6NTQsVktfRk9STUFUX0E4QjhHOFI4X1VJTlRfUEFDSzMyOjU1LFZLX0ZPUk1BVF9BOEI4RzhSOF9TSU5UX1BBQ0szMjo1NixWS19GT1JNQVRfQThCOEc4UjhfU1JHQl9QQUNLMzI6NTcsVktfRk9STUFUX0EyUjEwRzEwQjEwX1VOT1JNX1BBQ0szMjo1OCxWS19GT1JNQVRfQTJSMTBHMTBCMTBfU05PUk1fUEFDSzMyOjU5LFZLX0ZPUk1BVF9BMlIxMEcxMEIxMF9VU0NBTEVEX1BBQ0szMjo2MCxWS19GT1JNQVRfQTJSMTBHMTBCMTBfU1NDQUxFRF9QQUNLMzI6NjEsVktfRk9STUFUX0EyUjEwRzEwQjEwX1VJTlRfUEFDSzMyOjYyLFZLX0ZPUk1BVF9BMlIxMEcxMEIxMF9TSU5UX1BBQ0szMjo2MyxWS19GT1JNQVRfQTJCMTBHMTBSMTBfVU5PUk1fUEFDSzMyOjY0LFZLX0ZPUk1BVF9BMkIxMEcxMFIxMF9TTk9STV9QQUNLMzI6NjUsVktfRk9STUFUX0EyQjEwRzEwUjEwX1VTQ0FMRURfUEFDSzMyOjY2LFZLX0ZPUk1BVF9BMkIxMEcxMFIxMF9TU0NBTEVEX1BBQ0szMjo2NyxWS19GT1JNQVRfQTJCMTBHMTBSMTBfVUlOVF9QQUNLMzI6NjgsVktfRk9STUFUX0EyQjEwRzEwUjEwX1NJTlRfUEFDSzMyOjY5LFZLX0ZPUk1BVF9SMTZfVU5PUk06NzAsVktfRk9STUFUX1IxNl9TTk9STTo3MSxWS19GT1JNQVRfUjE2X1VTQ0FMRUQ6NzIsVktfRk9STUFUX1IxNl9TU0NBTEVEOjczLFZLX0ZPUk1BVF9SMTZfVUlOVDo3NCxWS19GT1JNQVRfUjE2X1NJTlQ6NzUsVktfRk9STUFUX1IxNl9TRkxPQVQ6NzYsVktfRk9STUFUX1IxNkcxNl9VTk9STTo3NyxWS19GT1JNQVRfUjE2RzE2X1NOT1JNOjc4LFZLX0ZPUk1BVF9SMTZHMTZfVVNDQUxFRDo3OSxWS19GT1JNQVRfUjE2RzE2X1NTQ0FMRUQ6ODAsVktfRk9STUFUX1IxNkcxNl9VSU5UOjgxLFZLX0ZPUk1BVF9SMTZHMTZfU0lOVDo4MixWS19GT1JNQVRfUjE2RzE2X1NGTE9BVDo4MyxWS19GT1JNQVRfUjE2RzE2QjE2X1VOT1JNOjg0LFZLX0ZPUk1BVF9SMTZHMTZCMTZfU05PUk06ODUsVktfRk9STUFUX1IxNkcxNkIxNl9VU0NBTEVEOjg2LFZLX0ZPUk1BVF9SMTZHMTZCMTZfU1NDQUxFRDo4NyxWS19GT1JNQVRfUjE2RzE2QjE2X1VJTlQ6ODgsVktfRk9STUFUX1IxNkcxNkIxNl9TSU5UOjg5LFZLX0ZPUk1BVF9SMTZHMTZCMTZfU0ZMT0FUOjkwLFZLX0ZPUk1BVF9SMTZHMTZCMTZBMTZfVU5PUk06OTEsVktfRk9STUFUX1IxNkcxNkIxNkExNl9TTk9STTo5MixWS19GT1JNQVRfUjE2RzE2QjE2QTE2X1VTQ0FMRUQ6OTMsVktfRk9STUFUX1IxNkcxNkIxNkExNl9TU0NBTEVEOjk0LFZLX0ZPUk1BVF9SMTZHMTZCMTZBMTZfVUlOVDo5NSxWS19GT1JNQVRfUjE2RzE2QjE2QTE2X1NJTlQ6OTYsVktfRk9STUFUX1IxNkcxNkIxNkExNl9TRkxPQVQ6OTcsVktfRk9STUFUX1IzMl9VSU5UOjk4LFZLX0ZPUk1BVF9SMzJfU0lOVDo5OSxWS19GT1JNQVRfUjMyX1NGTE9BVDoxMDAsVktfRk9STUFUX1IzMkczMl9VSU5UOjEwMSxWS19GT1JNQVRfUjMyRzMyX1NJTlQ6MTAyLFZLX0ZPUk1BVF9SMzJHMzJfU0ZMT0FUOjEwMyxWS19GT1JNQVRfUjMyRzMyQjMyX1VJTlQ6MTA0LFZLX0ZPUk1BVF9SMzJHMzJCMzJfU0lOVDoxMDUsVktfRk9STUFUX1IzMkczMkIzMl9TRkxPQVQ6MTA2LFZLX0ZPUk1BVF9SMzJHMzJCMzJBMzJfVUlOVDoxMDcsVktfRk9STUFUX1IzMkczMkIzMkEzMl9TSU5UOjEwOCxWS19GT1JNQVRfUjMyRzMyQjMyQTMyX1NGTE9BVDoxMDksVktfRk9STUFUX1I2NF9VSU5UOjExMCxWS19GT1JNQVRfUjY0X1NJTlQ6MTExLFZLX0ZPUk1BVF9SNjRfU0ZMT0FUOjExMixWS19GT1JNQVRfUjY0RzY0X1VJTlQ6MTEzLFZLX0ZPUk1BVF9SNjRHNjRfU0lOVDoxMTQsVktfRk9STUFUX1I2NEc2NF9TRkxPQVQ6MTE1LFZLX0ZPUk1BVF9SNjRHNjRCNjRfVUlOVDoxMTYsVktfRk9STUFUX1I2NEc2NEI2NF9TSU5UOjExNyxWS19GT1JNQVRfUjY0RzY0QjY0X1NGTE9BVDoxMTgsVktfRk9STUFUX1I2NEc2NEI2NEE2NF9VSU5UOjExOSxWS19GT1JNQVRfUjY0RzY0QjY0QTY0X1NJTlQ6MTIwLFZLX0ZPUk1BVF9SNjRHNjRCNjRBNjRfU0ZMT0FUOjEyMSxWS19GT1JNQVRfQjEwRzExUjExX1VGTE9BVF9QQUNLMzI6MTIyLFZLX0ZPUk1BVF9FNUI5RzlSOV9VRkxPQVRfUEFDSzMyOjEyMyxWS19GT1JNQVRfRDE2X1VOT1JNOjEyNCxWS19GT1JNQVRfWDhfRDI0X1VOT1JNX1BBQ0szMjoxMjUsVktfRk9STUFUX0QzMl9TRkxPQVQ6MTI2LFZLX0ZPUk1BVF9TOF9VSU5UOjEyNyxWS19GT1JNQVRfRDE2X1VOT1JNX1M4X1VJTlQ6MTI4LFZLX0ZPUk1BVF9EMjRfVU5PUk1fUzhfVUlOVDoxMjksVktfRk9STUFUX0QzMl9TRkxPQVRfUzhfVUlOVDoxMzAsVktfRk9STUFUX0JDMV9SR0JfVU5PUk1fQkxPQ0s6MTMxLFZLX0ZPUk1BVF9CQzFfUkdCX1NSR0JfQkxPQ0s6MTMyLFZLX0ZPUk1BVF9CQzFfUkdCQV9VTk9STV9CTE9DSzoxMzMsVktfRk9STUFUX0JDMV9SR0JBX1NSR0JfQkxPQ0s6MTM0LFZLX0ZPUk1BVF9CQzJfVU5PUk1fQkxPQ0s6MTM1LFZLX0ZPUk1BVF9CQzJfU1JHQl9CTE9DSzoxMzYsVktfRk9STUFUX0JDM19VTk9STV9CTE9DSzoxMzcsVktfRk9STUFUX0JDM19TUkdCX0JMT0NLOjEzOCxWS19GT1JNQVRfQkM0X1VOT1JNX0JMT0NLOjEzOSxWS19GT1JNQVRfQkM0X1NOT1JNX0JMT0NLOjE0MCxWS19GT1JNQVRfQkM1X1VOT1JNX0JMT0NLOjE0MSxWS19GT1JNQVRfQkM1X1NOT1JNX0JMT0NLOjE0MixWS19GT1JNQVRfQkM2SF9VRkxPQVRfQkxPQ0s6MTQzLFZLX0ZPUk1BVF9CQzZIX1NGTE9BVF9CTE9DSzoxNDQsVktfRk9STUFUX0JDN19VTk9STV9CTE9DSzoxNDUsVktfRk9STUFUX0JDN19TUkdCX0JMT0NLOjE0NixWS19GT1JNQVRfRVRDMl9SOEc4QjhfVU5PUk1fQkxPQ0s6MTQ3LFZLX0ZPUk1BVF9FVEMyX1I4RzhCOF9TUkdCX0JMT0NLOjE0OCxWS19GT1JNQVRfRVRDMl9SOEc4QjhBMV9VTk9STV9CTE9DSzoxNDksVktfRk9STUFUX0VUQzJfUjhHOEI4QTFfU1JHQl9CTE9DSzoxNTAsVktfRk9STUFUX0VUQzJfUjhHOEI4QThfVU5PUk1fQkxPQ0s6MTUxLFZLX0ZPUk1BVF9FVEMyX1I4RzhCOEE4X1NSR0JfQkxPQ0s6MTUyLFZLX0ZPUk1BVF9FQUNfUjExX1VOT1JNX0JMT0NLOjE1MyxWS19GT1JNQVRfRUFDX1IxMV9TTk9STV9CTE9DSzoxNTQsVktfRk9STUFUX0VBQ19SMTFHMTFfVU5PUk1fQkxPQ0s6MTU1LFZLX0ZPUk1BVF9FQUNfUjExRzExX1NOT1JNX0JMT0NLOjE1NixWS19GT1JNQVRfQVNUQ180eDRfVU5PUk1fQkxPQ0s6MTU3LFZLX0ZPUk1BVF9BU1RDXzR4NF9TUkdCX0JMT0NLOjE1OCxWS19GT1JNQVRfQVNUQ181eDRfVU5PUk1fQkxPQ0s6MTU5LFZLX0ZPUk1BVF9BU1RDXzV4NF9TUkdCX0JMT0NLOjE2MCxWS19GT1JNQVRfQVNUQ181eDVfVU5PUk1fQkxPQ0s6MTYxLFZLX0ZPUk1BVF9BU1RDXzV4NV9TUkdCX0JMT0NLOjE2MixWS19GT1JNQVRfQVNUQ182eDVfVU5PUk1fQkxPQ0s6MTYzLFZLX0ZPUk1BVF9BU1RDXzZ4NV9TUkdCX0JMT0NLOjE2NCxWS19GT1JNQVRfQVNUQ182eDZfVU5PUk1fQkxPQ0s6MTY1LFZLX0ZPUk1BVF9BU1RDXzZ4Nl9TUkdCX0JMT0NLOjE2NixWS19GT1JNQVRfQVNUQ184eDVfVU5PUk1fQkxPQ0s6MTY3LFZLX0ZPUk1BVF9BU1RDXzh4NV9TUkdCX0JMT0NLOjE2OCxWS19GT1JNQVRfQVNUQ184eDZfVU5PUk1fQkxPQ0s6MTY5LFZLX0ZPUk1BVF9BU1RDXzh4Nl9TUkdCX0JMT0NLOjE3MCxWS19GT1JNQVRfQVNUQ184eDhfVU5PUk1fQkxPQ0s6MTcxLFZLX0ZPUk1BVF9BU1RDXzh4OF9TUkdCX0JMT0NLOjE3MixWS19GT1JNQVRfQVNUQ18xMHg1X1VOT1JNX0JMT0NLOjE3MyxWS19GT1JNQVRfQVNUQ18xMHg1X1NSR0JfQkxPQ0s6MTc0LFZLX0ZPUk1BVF9BU1RDXzEweDZfVU5PUk1fQkxPQ0s6MTc1LFZLX0ZPUk1BVF9BU1RDXzEweDZfU1JHQl9CTE9DSzoxNzYsVktfRk9STUFUX0FTVENfMTB4OF9VTk9STV9CTE9DSzoxNzcsVktfRk9STUFUX0FTVENfMTB4OF9TUkdCX0JMT0NLOjE3OCxWS19GT1JNQVRfQVNUQ18xMHgxMF9VTk9STV9CTE9DSzoxNzksVktfRk9STUFUX0FTVENfMTB4MTBfU1JHQl9CTE9DSzoxODAsVktfRk9STUFUX0FTVENfMTJ4MTBfVU5PUk1fQkxPQ0s6MTgxLFZLX0ZPUk1BVF9BU1RDXzEyeDEwX1NSR0JfQkxPQ0s6MTgyLFZLX0ZPUk1BVF9BU1RDXzEyeDEyX1VOT1JNX0JMT0NLOjE4MyxWS19GT1JNQVRfQVNUQ18xMngxMl9TUkdCX0JMT0NLOjE4NCxWS19GT1JNQVRfRzhCOEc4UjhfNDIyX1VOT1JNOjEwMDAxNTZlMyxWS19GT1JNQVRfQjhHOFI4RzhfNDIyX1VOT1JNOjEwMDAxNTYwMDEsVktfRk9STUFUX0c4X0I4X1I4XzNQTEFORV80MjBfVU5PUk06MTAwMDE1NjAwMixWS19GT1JNQVRfRzhfQjhSOF8yUExBTkVfNDIwX1VOT1JNOjEwMDAxNTYwMDMsVktfRk9STUFUX0c4X0I4X1I4XzNQTEFORV80MjJfVU5PUk06MTAwMDE1NjAwNCxWS19GT1JNQVRfRzhfQjhSOF8yUExBTkVfNDIyX1VOT1JNOjEwMDAxNTYwMDUsVktfRk9STUFUX0c4X0I4X1I4XzNQTEFORV80NDRfVU5PUk06MTAwMDE1NjAwNixWS19GT1JNQVRfUjEwWDZfVU5PUk1fUEFDSzE2OjEwMDAxNTYwMDcsVktfRk9STUFUX1IxMFg2RzEwWDZfVU5PUk1fMlBBQ0sxNjoxMDAwMTU2MDA4LFZLX0ZPUk1BVF9SMTBYNkcxMFg2QjEwWDZBMTBYNl9VTk9STV80UEFDSzE2OjEwMDAxNTYwMDksVktfRk9STUFUX0cxMFg2QjEwWDZHMTBYNlIxMFg2XzQyMl9VTk9STV80UEFDSzE2OjEwMDAxNTYwMTAsVktfRk9STUFUX0IxMFg2RzEwWDZSMTBYNkcxMFg2XzQyMl9VTk9STV80UEFDSzE2OjEwMDAxNTYwMTEsVktfRk9STUFUX0cxMFg2X0IxMFg2X1IxMFg2XzNQTEFORV80MjBfVU5PUk1fM1BBQ0sxNjoxMDAwMTU2MDEyLFZLX0ZPUk1BVF9HMTBYNl9CMTBYNlIxMFg2XzJQTEFORV80MjBfVU5PUk1fM1BBQ0sxNjoxMDAwMTU2MDEzLFZLX0ZPUk1BVF9HMTBYNl9CMTBYNl9SMTBYNl8zUExBTkVfNDIyX1VOT1JNXzNQQUNLMTY6MTAwMDE1NjAxNCxWS19GT1JNQVRfRzEwWDZfQjEwWDZSMTBYNl8yUExBTkVfNDIyX1VOT1JNXzNQQUNLMTY6MTAwMDE1NjAxNSxWS19GT1JNQVRfRzEwWDZfQjEwWDZfUjEwWDZfM1BMQU5FXzQ0NF9VTk9STV8zUEFDSzE2OjEwMDAxNTYwMTYsVktfRk9STUFUX1IxMlg0X1VOT1JNX1BBQ0sxNjoxMDAwMTU2MDE3LFZLX0ZPUk1BVF9SMTJYNEcxMlg0X1VOT1JNXzJQQUNLMTY6MTAwMDE1NjAxOCxWS19GT1JNQVRfUjEyWDRHMTJYNEIxMlg0QTEyWDRfVU5PUk1fNFBBQ0sxNjoxMDAwMTU2MDE5LFZLX0ZPUk1BVF9HMTJYNEIxMlg0RzEyWDRSMTJYNF80MjJfVU5PUk1fNFBBQ0sxNjoxMDAwMTU2MDIwLFZLX0ZPUk1BVF9CMTJYNEcxMlg0UjEyWDRHMTJYNF80MjJfVU5PUk1fNFBBQ0sxNjoxMDAwMTU2MDIxLFZLX0ZPUk1BVF9HMTJYNF9CMTJYNF9SMTJYNF8zUExBTkVfNDIwX1VOT1JNXzNQQUNLMTY6MTAwMDE1NjAyMixWS19GT1JNQVRfRzEyWDRfQjEyWDRSMTJYNF8yUExBTkVfNDIwX1VOT1JNXzNQQUNLMTY6MTAwMDE1NjAyMyxWS19GT1JNQVRfRzEyWDRfQjEyWDRfUjEyWDRfM1BMQU5FXzQyMl9VTk9STV8zUEFDSzE2OjEwMDAxNTYwMjQsVktfRk9STUFUX0cxMlg0X0IxMlg0UjEyWDRfMlBMQU5FXzQyMl9VTk9STV8zUEFDSzE2OjEwMDAxNTYwMjUsVktfRk9STUFUX0cxMlg0X0IxMlg0X1IxMlg0XzNQTEFORV80NDRfVU5PUk1fM1BBQ0sxNjoxMDAwMTU2MDI2LFZLX0ZPUk1BVF9HMTZCMTZHMTZSMTZfNDIyX1VOT1JNOjEwMDAxNTYwMjcsVktfRk9STUFUX0IxNkcxNlIxNkcxNl80MjJfVU5PUk06MTAwMDE1NjAyOCxWS19GT1JNQVRfRzE2X0IxNl9SMTZfM1BMQU5FXzQyMF9VTk9STToxMDAwMTU2MDI5LFZLX0ZPUk1BVF9HMTZfQjE2UjE2XzJQTEFORV80MjBfVU5PUk06MTAwMDE1NjAzMCxWS19GT1JNQVRfRzE2X0IxNl9SMTZfM1BMQU5FXzQyMl9VTk9STToxMDAwMTU2MDMxLFZLX0ZPUk1BVF9HMTZfQjE2UjE2XzJQTEFORV80MjJfVU5PUk06MTAwMDE1NjAzMixWS19GT1JNQVRfRzE2X0IxNl9SMTZfM1BMQU5FXzQ0NF9VTk9STToxMDAwMTU2MDMzLFZLX0ZPUk1BVF9QVlJUQzFfMkJQUF9VTk9STV9CTE9DS19JTUc6MTAwMDA1NGUzLFZLX0ZPUk1BVF9QVlJUQzFfNEJQUF9VTk9STV9CTE9DS19JTUc6MTAwMDA1NDAwMSxWS19GT1JNQVRfUFZSVEMyXzJCUFBfVU5PUk1fQkxPQ0tfSU1HOjEwMDAwNTQwMDIsVktfRk9STUFUX1BWUlRDMl80QlBQX1VOT1JNX0JMT0NLX0lNRzoxMDAwMDU0MDAzLFZLX0ZPUk1BVF9QVlJUQzFfMkJQUF9TUkdCX0JMT0NLX0lNRzoxMDAwMDU0MDA0LFZLX0ZPUk1BVF9QVlJUQzFfNEJQUF9TUkdCX0JMT0NLX0lNRzoxMDAwMDU0MDA1LFZLX0ZPUk1BVF9QVlJUQzJfMkJQUF9TUkdCX0JMT0NLX0lNRzoxMDAwMDU0MDA2LFZLX0ZPUk1BVF9QVlJUQzJfNEJQUF9TUkdCX0JMT0NLX0lNRzoxMDAwMDU0MDA3LFZLX0ZPUk1BVF9BU1RDXzR4NF9TRkxPQVRfQkxPQ0tfRVhUOjEwMDAwNjZlMyxWS19GT1JNQVRfQVNUQ181eDRfU0ZMT0FUX0JMT0NLX0VYVDoxMDAwMDY2MDAxLFZLX0ZPUk1BVF9BU1RDXzV4NV9TRkxPQVRfQkxPQ0tfRVhUOjEwMDAwNjYwMDIsVktfRk9STUFUX0FTVENfNng1X1NGTE9BVF9CTE9DS19FWFQ6MTAwMDA2NjAwMyxWS19GT1JNQVRfQVNUQ182eDZfU0ZMT0FUX0JMT0NLX0VYVDoxMDAwMDY2MDA0LFZLX0ZPUk1BVF9BU1RDXzh4NV9TRkxPQVRfQkxPQ0tfRVhUOjEwMDAwNjYwMDUsVktfRk9STUFUX0FTVENfOHg2X1NGTE9BVF9CTE9DS19FWFQ6MTAwMDA2NjAwNixWS19GT1JNQVRfQVNUQ184eDhfU0ZMT0FUX0JMT0NLX0VYVDoxMDAwMDY2MDA3LFZLX0ZPUk1BVF9BU1RDXzEweDVfU0ZMT0FUX0JMT0NLX0VYVDoxMDAwMDY2MDA4LFZLX0ZPUk1BVF9BU1RDXzEweDZfU0ZMT0FUX0JMT0NLX0VYVDoxMDAwMDY2MDA5LFZLX0ZPUk1BVF9BU1RDXzEweDhfU0ZMT0FUX0JMT0NLX0VYVDoxMDAwMDY2MDEwLFZLX0ZPUk1BVF9BU1RDXzEweDEwX1NGTE9BVF9CTE9DS19FWFQ6MTAwMDA2NjAxMSxWS19GT1JNQVRfQVNUQ18xMngxMF9TRkxPQVRfQkxPQ0tfRVhUOjEwMDAwNjYwMTIsVktfRk9STUFUX0FTVENfMTJ4MTJfU0ZMT0FUX0JMT0NLX0VYVDoxMDAwMDY2MDEzLFZLX0ZPUk1BVF9HOEI4RzhSOF80MjJfVU5PUk1fS0hSOjEwMDAxNTZlMyxWS19GT1JNQVRfQjhHOFI4RzhfNDIyX1VOT1JNX0tIUjoxMDAwMTU2MDAxLFZLX0ZPUk1BVF9HOF9COF9SOF8zUExBTkVfNDIwX1VOT1JNX0tIUjoxMDAwMTU2MDAyLFZLX0ZPUk1BVF9HOF9COFI4XzJQTEFORV80MjBfVU5PUk1fS0hSOjEwMDAxNTYwMDMsVktfRk9STUFUX0c4X0I4X1I4XzNQTEFORV80MjJfVU5PUk1fS0hSOjEwMDAxNTYwMDQsVktfRk9STUFUX0c4X0I4UjhfMlBMQU5FXzQyMl9VTk9STV9LSFI6MTAwMDE1NjAwNSxWS19GT1JNQVRfRzhfQjhfUjhfM1BMQU5FXzQ0NF9VTk9STV9LSFI6MTAwMDE1NjAwNixWS19GT1JNQVRfUjEwWDZfVU5PUk1fUEFDSzE2X0tIUjoxMDAwMTU2MDA3LFZLX0ZPUk1BVF9SMTBYNkcxMFg2X1VOT1JNXzJQQUNLMTZfS0hSOjEwMDAxNTYwMDgsVktfRk9STUFUX1IxMFg2RzEwWDZCMTBYNkExMFg2X1VOT1JNXzRQQUNLMTZfS0hSOjEwMDAxNTYwMDksVktfRk9STUFUX0cxMFg2QjEwWDZHMTBYNlIxMFg2XzQyMl9VTk9STV80UEFDSzE2X0tIUjoxMDAwMTU2MDEwLFZLX0ZPUk1BVF9CMTBYNkcxMFg2UjEwWDZHMTBYNl80MjJfVU5PUk1fNFBBQ0sxNl9LSFI6MTAwMDE1NjAxMSxWS19GT1JNQVRfRzEwWDZfQjEwWDZfUjEwWDZfM1BMQU5FXzQyMF9VTk9STV8zUEFDSzE2X0tIUjoxMDAwMTU2MDEyLFZLX0ZPUk1BVF9HMTBYNl9CMTBYNlIxMFg2XzJQTEFORV80MjBfVU5PUk1fM1BBQ0sxNl9LSFI6MTAwMDE1NjAxMyxWS19GT1JNQVRfRzEwWDZfQjEwWDZfUjEwWDZfM1BMQU5FXzQyMl9VTk9STV8zUEFDSzE2X0tIUjoxMDAwMTU2MDE0LFZLX0ZPUk1BVF9HMTBYNl9CMTBYNlIxMFg2XzJQTEFORV80MjJfVU5PUk1fM1BBQ0sxNl9LSFI6MTAwMDE1NjAxNSxWS19GT1JNQVRfRzEwWDZfQjEwWDZfUjEwWDZfM1BMQU5FXzQ0NF9VTk9STV8zUEFDSzE2X0tIUjoxMDAwMTU2MDE2LFZLX0ZPUk1BVF9SMTJYNF9VTk9STV9QQUNLMTZfS0hSOjEwMDAxNTYwMTcsVktfRk9STUFUX1IxMlg0RzEyWDRfVU5PUk1fMlBBQ0sxNl9LSFI6MTAwMDE1NjAxOCxWS19GT1JNQVRfUjEyWDRHMTJYNEIxMlg0QTEyWDRfVU5PUk1fNFBBQ0sxNl9LSFI6MTAwMDE1NjAxOSxWS19GT1JNQVRfRzEyWDRCMTJYNEcxMlg0UjEyWDRfNDIyX1VOT1JNXzRQQUNLMTZfS0hSOjEwMDAxNTYwMjAsVktfRk9STUFUX0IxMlg0RzEyWDRSMTJYNEcxMlg0XzQyMl9VTk9STV80UEFDSzE2X0tIUjoxMDAwMTU2MDIxLFZLX0ZPUk1BVF9HMTJYNF9CMTJYNF9SMTJYNF8zUExBTkVfNDIwX1VOT1JNXzNQQUNLMTZfS0hSOjEwMDAxNTYwMjIsVktfRk9STUFUX0cxMlg0X0IxMlg0UjEyWDRfMlBMQU5FXzQyMF9VTk9STV8zUEFDSzE2X0tIUjoxMDAwMTU2MDIzLFZLX0ZPUk1BVF9HMTJYNF9CMTJYNF9SMTJYNF8zUExBTkVfNDIyX1VOT1JNXzNQQUNLMTZfS0hSOjEwMDAxNTYwMjQsVktfRk9STUFUX0cxMlg0X0IxMlg0UjEyWDRfMlBMQU5FXzQyMl9VTk9STV8zUEFDSzE2X0tIUjoxMDAwMTU2MDI1LFZLX0ZPUk1BVF9HMTJYNF9CMTJYNF9SMTJYNF8zUExBTkVfNDQ0X1VOT1JNXzNQQUNLMTZfS0hSOjEwMDAxNTYwMjYsVktfRk9STUFUX0cxNkIxNkcxNlIxNl80MjJfVU5PUk1fS0hSOjEwMDAxNTYwMjcsVktfRk9STUFUX0IxNkcxNlIxNkcxNl80MjJfVU5PUk1fS0hSOjEwMDAxNTYwMjgsVktfRk9STUFUX0cxNl9CMTZfUjE2XzNQTEFORV80MjBfVU5PUk1fS0hSOjEwMDAxNTYwMjksVktfRk9STUFUX0cxNl9CMTZSMTZfMlBMQU5FXzQyMF9VTk9STV9LSFI6MTAwMDE1NjAzMCxWS19GT1JNQVRfRzE2X0IxNl9SMTZfM1BMQU5FXzQyMl9VTk9STV9LSFI6MTAwMDE1NjAzMSxWS19GT1JNQVRfRzE2X0IxNlIxNl8yUExBTkVfNDIyX1VOT1JNX0tIUjoxMDAwMTU2MDMyLFZLX0ZPUk1BVF9HMTZfQjE2X1IxNl8zUExBTkVfNDQ0X1VOT1JNX0tIUjoxMDAwMTU2MDMzfSxTZD1PYmplY3QuZnJlZXplKEI2KX0pO2Z1bmN0aW9uIFU2KCl7cmV0dXJue3ZrRm9ybWF0OjAsdHlwZVNpemU6MSxwaXhlbFdpZHRoOjAscGl4ZWxIZWlnaHQ6MCxwaXhlbERlcHRoOjAsbGF5ZXJDb3VudDowLGZhY2VDb3VudDoxLHN1cGVyY29tcHJlc3Npb25TY2hlbWU6MCxsZXZlbHM6W10sZGF0YUZvcm1hdERlc2NyaXB0b3I6W3t2ZW5kb3JJZDowLGRlc2NyaXB0b3JUeXBlOjAsdmVyc2lvbk51bWJlcjoyLGNvbG9yTW9kZWw6MCxjb2xvclByaW1hcmllczoxLHRyYW5zZmVyRnVuY3Rpb246MixmbGFnczowLHRleGVsQmxvY2tEaW1lbnNpb246WzAsMCwwLDBdLGJ5dGVzUGxhbmU6WzAsMCwwLDAsMCwwLDAsMF0sc2FtcGxlczpbXX1dLGtleVZhbHVlOnt9LGdsb2JhbERhdGE6bnVsbH19ZnVuY3Rpb24gJE8oZSl7cmV0dXJuIG5ldyBUZXh0RGVjb2RlcigpLmRlY29kZShlKX1mdW5jdGlvbiBlUyhlKXtsZXQgdD1uZXcgVWludDhBcnJheShlLmJ1ZmZlcixlLmJ5dGVPZmZzZXQsS28ubGVuZ3RoKTtpZih0WzBdIT09S29bMF18fHRbMV0hPT1Lb1sxXXx8dFsyXSE9PUtvWzJdfHx0WzNdIT09S29bM118fHRbNF0hPT1Lb1s0XXx8dFs1XSE9PUtvWzVdfHx0WzZdIT09S29bNl18fHRbN10hPT1Lb1s3XXx8dFs4XSE9PUtvWzhdfHx0WzldIT09S29bOV18fHRbMTBdIT09S29bMTBdfHx0WzExXSE9PUtvWzExXSl0aHJvdyBuZXcgRXJyb3IoIk1pc3NpbmcgS1RYIDIuMCBpZGVudGlmaWVyLiIpO2xldCBuPVU2KCksbz0xNypVaW50MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVCxhPW5ldyBrYyhlLEtvLmxlbmd0aCxvLCEwKTtuLnZrRm9ybWF0PWEuX25leHRVaW50MzIoKSxuLnR5cGVTaXplPWEuX25leHRVaW50MzIoKSxuLnBpeGVsV2lkdGg9YS5fbmV4dFVpbnQzMigpLG4ucGl4ZWxIZWlnaHQ9YS5fbmV4dFVpbnQzMigpLG4ucGl4ZWxEZXB0aD1hLl9uZXh0VWludDMyKCksbi5sYXllckNvdW50PWEuX25leHRVaW50MzIoKSxuLmZhY2VDb3VudD1hLl9uZXh0VWludDMyKCk7bGV0IHI9YS5fbmV4dFVpbnQzMigpO24uc3VwZXJjb21wcmVzc2lvblNjaGVtZT1hLl9uZXh0VWludDMyKCk7bGV0IGk9YS5fbmV4dFVpbnQzMigpLGY9YS5fbmV4dFVpbnQzMigpLGQ9YS5fbmV4dFVpbnQzMigpLGM9YS5fbmV4dFVpbnQzMigpLHU9YS5fbmV4dFVpbnQ2NCgpLGw9YS5fbmV4dFVpbnQ2NCgpLGg9ciozKjgsbT1uZXcga2MoZSxLby5sZW5ndGgrbyxoLCEwKTtmb3IobGV0IGFlPTA7YWU8cjthZSsrKW4ubGV2ZWxzLnB1c2goe2xldmVsRGF0YTpuZXcgVWludDhBcnJheShlLmJ1ZmZlcixlLmJ5dGVPZmZzZXQrbS5fbmV4dFVpbnQ2NCgpLG0uX25leHRVaW50NjQoKSksdW5jb21wcmVzc2VkQnl0ZUxlbmd0aDptLl9uZXh0VWludDY0KCl9KTtsZXQgYj1uZXcga2MoZSxpLGYsITApO2IuX3NraXAoNCk7bGV0IHA9Yi5fbmV4dFVpbnQxNigpLHk9Yi5fbmV4dFVpbnQxNigpLFQ9Yi5fbmV4dFVpbnQxNigpLF89Yi5fbmV4dFVpbnQxNigpLEU9Yi5fbmV4dFVpbnQ4KCksdz1iLl9uZXh0VWludDgoKSxSPWIuX25leHRVaW50OCgpLFM9Yi5fbmV4dFVpbnQ4KCksQz1bYi5fbmV4dFVpbnQ4KCksYi5fbmV4dFVpbnQ4KCksYi5fbmV4dFVpbnQ4KCksYi5fbmV4dFVpbnQ4KCldLEk9W2IuX25leHRVaW50OCgpLGIuX25leHRVaW50OCgpLGIuX25leHRVaW50OCgpLGIuX25leHRVaW50OCgpLGIuX25leHRVaW50OCgpLGIuX25leHRVaW50OCgpLGIuX25leHRVaW50OCgpLGIuX25leHRVaW50OCgpXSxQPXt2ZW5kb3JJZDpwLGRlc2NyaXB0b3JUeXBlOnksdmVyc2lvbk51bWJlcjpULGNvbG9yTW9kZWw6RSxjb2xvclByaW1hcmllczp3LHRyYW5zZmVyRnVuY3Rpb246UixmbGFnczpTLHRleGVsQmxvY2tEaW1lbnNpb246QyxieXRlc1BsYW5lOkksc2FtcGxlczpbXX0seD0oXy80LTYpLzQ7Zm9yKGxldCBhZT0wO2FlPHg7YWUrKyl7bGV0IEFlPXtiaXRPZmZzZXQ6Yi5fbmV4dFVpbnQxNigpLGJpdExlbmd0aDpiLl9uZXh0VWludDgoKSxjaGFubmVsVHlwZTpiLl9uZXh0VWludDgoKSxzYW1wbGVQb3NpdGlvbjpbYi5fbmV4dFVpbnQ4KCksYi5fbmV4dFVpbnQ4KCksYi5fbmV4dFVpbnQ4KCksYi5fbmV4dFVpbnQ4KCldLHNhbXBsZUxvd2VyOk51bWJlci5ORUdBVElWRV9JTkZJTklUWSxzYW1wbGVVcHBlcjpOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFl9O0FlLmNoYW5uZWxUeXBlJjY0PyhBZS5zYW1wbGVMb3dlcj1iLl9uZXh0SW50MzIoKSxBZS5zYW1wbGVVcHBlcj1iLl9uZXh0SW50MzIoKSk6KEFlLnNhbXBsZUxvd2VyPWIuX25leHRVaW50MzIoKSxBZS5zYW1wbGVVcHBlcj1iLl9uZXh0VWludDMyKCkpLFAuc2FtcGxlc1thZV09QWV9bi5kYXRhRm9ybWF0RGVzY3JpcHRvci5sZW5ndGg9MCxuLmRhdGFGb3JtYXREZXNjcmlwdG9yLnB1c2goUCk7bGV0IE09bmV3IGtjKGUsZCxjLCEwKTtmb3IoO00uX29mZnNldDxjOyl7bGV0IGFlPU0uX25leHRVaW50MzIoKSxBZT1NLl9zY2FuKGFlKSxOZT0kTyhBZSk7aWYobi5rZXlWYWx1ZVtOZV09TS5fbmV4dFVpbnQ4QXJyYXkoYWUtQWUuYnl0ZUxlbmd0aC0xKSxOZS5tYXRjaCgvXmt0eC9pKSl7bGV0IEtlPSRPKG4ua2V5VmFsdWVbTmVdKTtuLmtleVZhbHVlW05lXT1LZS5zdWJzdHJpbmcoMCxLZS5sYXN0SW5kZXhPZigiXDAiKSl9bGV0IGV0PWFlJTQ/NC1hZSU0OjA7TS5fc2tpcChldCl9aWYobDw9MClyZXR1cm4gbjtsZXQgdj1uZXcga2MoZSx1LGwsITApLFU9di5fbmV4dFVpbnQxNigpLHo9di5fbmV4dFVpbnQxNigpLEQ9di5fbmV4dFVpbnQzMigpLEc9di5fbmV4dFVpbnQzMigpLEg9di5fbmV4dFVpbnQzMigpLE89di5fbmV4dFVpbnQzMigpLFo9W107Zm9yKGxldCBhZT0wO2FlPHI7YWUrKylaLnB1c2goe2ltYWdlRmxhZ3M6di5fbmV4dFVpbnQzMigpLHJnYlNsaWNlQnl0ZU9mZnNldDp2Ll9uZXh0VWludDMyKCkscmdiU2xpY2VCeXRlTGVuZ3RoOnYuX25leHRVaW50MzIoKSxhbHBoYVNsaWNlQnl0ZU9mZnNldDp2Ll9uZXh0VWludDMyKCksYWxwaGFTbGljZUJ5dGVMZW5ndGg6di5fbmV4dFVpbnQzMigpfSk7bGV0IG9lPXUrdi5fb2Zmc2V0LGNlPW9lK0QsZmU9Y2UrRyxlZT1mZStILGJlPW5ldyBVaW50OEFycmF5KGUuYnVmZmVyLGUuYnl0ZU9mZnNldCtvZSxEKSxsZT1uZXcgVWludDhBcnJheShlLmJ1ZmZlcixlLmJ5dGVPZmZzZXQrY2UsRykscGU9bmV3IFVpbnQ4QXJyYXkoZS5idWZmZXIsZS5ieXRlT2Zmc2V0K2ZlLEgpLHVlPW5ldyBVaW50OEFycmF5KGUuYnVmZmVyLGUuYnl0ZU9mZnNldCtlZSxPKTtyZXR1cm4gbi5nbG9iYWxEYXRhPXtlbmRwb2ludENvdW50OlUsc2VsZWN0b3JDb3VudDp6LGltYWdlRGVzY3M6WixlbmRwb2ludHNEYXRhOmJlLHNlbGVjdG9yc0RhdGE6bGUsdGFibGVzRGF0YTpwZSxleHRlbmRlZERhdGE6dWV9LG59dmFyIGtjLFdsZSxLbyx0Uz1YKCgpPT57a2M9Y2xhc3N7Y29uc3RydWN0b3IodCxuLG8sYSl7dGhpcy5fZGF0YVZpZXc9dm9pZCAwLHRoaXMuX2xpdHRsZUVuZGlhbj12b2lkIDAsdGhpcy5fb2Zmc2V0PXZvaWQgMCx0aGlzLl9kYXRhVmlldz1uZXcgRGF0YVZpZXcodC5idWZmZXIsdC5ieXRlT2Zmc2V0K24sbyksdGhpcy5fbGl0dGxlRW5kaWFuPWEsdGhpcy5fb2Zmc2V0PTB9X25leHRVaW50OCgpe2xldCB0PXRoaXMuX2RhdGFWaWV3LmdldFVpbnQ4KHRoaXMuX29mZnNldCk7cmV0dXJuIHRoaXMuX29mZnNldCs9MSx0fV9uZXh0VWludDE2KCl7bGV0IHQ9dGhpcy5fZGF0YVZpZXcuZ2V0VWludDE2KHRoaXMuX29mZnNldCx0aGlzLl9saXR0bGVFbmRpYW4pO3JldHVybiB0aGlzLl9vZmZzZXQrPTIsdH1fbmV4dFVpbnQzMigpe2xldCB0PXRoaXMuX2RhdGFWaWV3LmdldFVpbnQzMih0aGlzLl9vZmZzZXQsdGhpcy5fbGl0dGxlRW5kaWFuKTtyZXR1cm4gdGhpcy5fb2Zmc2V0Kz00LHR9X25leHRVaW50NjQoKXtsZXQgdD10aGlzLl9kYXRhVmlldy5nZXRVaW50MzIodGhpcy5fb2Zmc2V0LHRoaXMuX2xpdHRsZUVuZGlhbiksbj10aGlzLl9kYXRhVmlldy5nZXRVaW50MzIodGhpcy5fb2Zmc2V0KzQsdGhpcy5fbGl0dGxlRW5kaWFuKSxvPXQrMioqMzIqbjtyZXR1cm4gdGhpcy5fb2Zmc2V0Kz04LG99X25leHRJbnQzMigpe2xldCB0PXRoaXMuX2RhdGFWaWV3LmdldEludDMyKHRoaXMuX29mZnNldCx0aGlzLl9saXR0bGVFbmRpYW4pO3JldHVybiB0aGlzLl9vZmZzZXQrPTQsdH1fbmV4dFVpbnQ4QXJyYXkodCl7bGV0IG49bmV3IFVpbnQ4QXJyYXkodGhpcy5fZGF0YVZpZXcuYnVmZmVyLHRoaXMuX2RhdGFWaWV3LmJ5dGVPZmZzZXQrdGhpcy5fb2Zmc2V0LHQpO3JldHVybiB0aGlzLl9vZmZzZXQrPXQsbn1fc2tpcCh0KXtyZXR1cm4gdGhpcy5fb2Zmc2V0Kz10LHRoaXN9X3NjYW4odCxuPTApe2xldCBvPXRoaXMuX29mZnNldCxhPTA7Zm9yKDt0aGlzLl9kYXRhVmlldy5nZXRVaW50OCh0aGlzLl9vZmZzZXQpIT09biYmYTx0OylhKyssdGhpcy5fb2Zmc2V0Kys7cmV0dXJuIGE8dCYmdGhpcy5fb2Zmc2V0KyssbmV3IFVpbnQ4QXJyYXkodGhpcy5fZGF0YVZpZXcuYnVmZmVyLHRoaXMuX2RhdGFWaWV3LmJ5dGVPZmZzZXQrbyxhKX19LFdsZT1uZXcgVWludDhBcnJheShbMF0pLEtvPVsxNzEsNzUsODQsODgsMzIsNTAsNDgsMTg3LDEzLDEwLDI2LDEwXX0pO3ZhciBuUz1lbygoSW0sV3kpPT57dmFyIHF5PShmdW5jdGlvbigpe3ZhciBlPXR5cGVvZiBkb2N1bWVudDwidSImJmRvY3VtZW50LmN1cnJlbnRTY3JpcHQ/ZG9jdW1lbnQuY3VycmVudFNjcmlwdC5zcmM6dm9pZCAwO3JldHVybiB0eXBlb2YgX19maWxlbmFtZTwidSImJihlPWV8fF9fZmlsZW5hbWUpLChmdW5jdGlvbih0KXt0PXR8fHt9O3ZhciBuPXR5cGVvZiB0PCJ1Ij90Ont9LG8sYTtuLnJlYWR5PW5ldyBQcm9taXNlKGZ1bmN0aW9uKEIsTCl7bz1CLGE9TH0pO3ZhciByPXt9LGk7Zm9yKGkgaW4gbiluLmhhc093blByb3BlcnR5KGkpJiYocltpXT1uW2ldKTt2YXIgZj1bXSxkPSIuL3RoaXMucHJvZ3JhbSIsYz1mdW5jdGlvbihCLEwpe3Rocm93IEx9LHU9ITEsbD0hMSxoPSExLG09ITE7dT10eXBlb2Ygd2luZG93PT0ib2JqZWN0IixsPXR5cGVvZiBpbXBvcnRTY3JpcHRzPT0iZnVuY3Rpb24iLGg9dHlwZW9mIHByb2Nlc3M9PSJvYmplY3QiJiZ0eXBlb2YgcHJvY2Vzcy52ZXJzaW9ucz09Im9iamVjdCImJnR5cGVvZiBwcm9jZXNzLnZlcnNpb25zLm5vZGU9PSJzdHJpbmciLG09IXUmJiFoJiYhbDt2YXIgYj0iIjtmdW5jdGlvbiBwKEIpe3JldHVybiBuLmxvY2F0ZUZpbGU/bi5sb2NhdGVGaWxlKEIsYik6YitCfXZhciB5LFQsXyxFLHcsUjtoPyhsP2I9YmEoInBhdGgiKS5kaXJuYW1lKGIpKyIvIjpiPV9fZGlybmFtZSsiLyIseT1mdW5jdGlvbihMLFcpe3JldHVybiB3fHwodz1iYSgiZnMiKSksUnx8KFI9YmEoInBhdGgiKSksTD1SLm5vcm1hbGl6ZShMKSx3LnJlYWRGaWxlU3luYyhMLFc/bnVsbDoidXRmOCIpfSxfPWZ1bmN0aW9uKEwpe3ZhciBXPXkoTCwhMCk7cmV0dXJuIFcuYnVmZmVyfHwoVz1uZXcgVWludDhBcnJheShXKSksdihXLmJ1ZmZlciksV30scHJvY2Vzcy5hcmd2Lmxlbmd0aD4xJiYoZD1wcm9jZXNzLmFyZ3ZbMV0ucmVwbGFjZSgvXFwvZywiLyIpKSxmPXByb2Nlc3MuYXJndi5zbGljZSgyKSxwcm9jZXNzLm9uKCJ1bmNhdWdodEV4Y2VwdGlvbiIsZnVuY3Rpb24oQil7aWYoIShCIGluc3RhbmNlb2YgTnIpKXRocm93IEJ9KSxwcm9jZXNzLm9uKCJ1bmhhbmRsZWRSZWplY3Rpb24iLHp0KSxjPWZ1bmN0aW9uKEIpe3Byb2Nlc3MuZXhpdChCKX0sbi5pbnNwZWN0PWZ1bmN0aW9uKCl7cmV0dXJuIltFbXNjcmlwdGVuIE1vZHVsZSBvYmplY3RdIn0pOm0/KHR5cGVvZiByZWFkPCJ1IiYmKHk9ZnVuY3Rpb24oTCl7cmV0dXJuIHJlYWQoTCl9KSxfPWZ1bmN0aW9uKEwpe3ZhciBXO3JldHVybiB0eXBlb2YgcmVhZGJ1ZmZlcj09ImZ1bmN0aW9uIj9uZXcgVWludDhBcnJheShyZWFkYnVmZmVyKEwpKTooVz1yZWFkKEwsImJpbmFyeSIpLHYodHlwZW9mIFc9PSJvYmplY3QiKSxXKX0sdHlwZW9mIHNjcmlwdEFyZ3M8InUiP2Y9c2NyaXB0QXJnczp0eXBlb2YgYXJndW1lbnRzPCJ1IiYmKGY9YXJndW1lbnRzKSx0eXBlb2YgcXVpdD09ImZ1bmN0aW9uIiYmKGM9ZnVuY3Rpb24oQil7cXVpdChCKX0pLHR5cGVvZiBwcmludDwidSImJih0eXBlb2YgY29uc29sZT4idSImJihjb25zb2xlPXt9KSxjb25zb2xlLmxvZz1wcmludCxjb25zb2xlLndhcm49Y29uc29sZS5lcnJvcj10eXBlb2YgcHJpbnRFcnI8InUiP3ByaW50RXJyOnByaW50KSk6KHV8fGwpJiYobD9iPXNlbGYubG9jYXRpb24uaHJlZjp0eXBlb2YgZG9jdW1lbnQ8InUiJiZkb2N1bWVudC5jdXJyZW50U2NyaXB0JiYoYj1kb2N1bWVudC5jdXJyZW50U2NyaXB0LnNyYyksZSYmKGI9ZSksYi5pbmRleE9mKCJibG9iOiIpIT09MD9iPWIuc3Vic3RyKDAsYi5sYXN0SW5kZXhPZigiLyIpKzEpOmI9IiIseT1mdW5jdGlvbihCKXt2YXIgTD1uZXcgWE1MSHR0cFJlcXVlc3Q7cmV0dXJuIEwub3BlbigiR0VUIixCLCExKSxMLnNlbmQobnVsbCksTC5yZXNwb25zZVRleHR9LGwmJihfPWZ1bmN0aW9uKEIpe3ZhciBMPW5ldyBYTUxIdHRwUmVxdWVzdDtyZXR1cm4gTC5vcGVuKCJHRVQiLEIsITEpLEwucmVzcG9uc2VUeXBlPSJhcnJheWJ1ZmZlciIsTC5zZW5kKG51bGwpLG5ldyBVaW50OEFycmF5KEwucmVzcG9uc2UpfSksVD1mdW5jdGlvbihCLEwsVyl7dmFyIFE9bmV3IFhNTEh0dHBSZXF1ZXN0O1Eub3BlbigiR0VUIixCLCEwKSxRLnJlc3BvbnNlVHlwZT0iYXJyYXlidWZmZXIiLFEub25sb2FkPWZ1bmN0aW9uKCl7aWYoUS5zdGF0dXM9PTIwMHx8US5zdGF0dXM9PTAmJlEucmVzcG9uc2Upe0woUS5yZXNwb25zZSk7cmV0dXJufVcoKX0sUS5vbmVycm9yPVcsUS5zZW5kKG51bGwpfSxFPWZ1bmN0aW9uKEIpe2RvY3VtZW50LnRpdGxlPUJ9KTt2YXIgUz1uLnByaW50fHxjb25zb2xlLmxvZy5iaW5kKGNvbnNvbGUpLEM9bi5wcmludEVycnx8Y29uc29sZS53YXJuLmJpbmQoY29uc29sZSk7Zm9yKGkgaW4gcilyLmhhc093blByb3BlcnR5KGkpJiYobltpXT1yW2ldKTtyPW51bGwsbi5hcmd1bWVudHMmJihmPW4uYXJndW1lbnRzKSxuLnRoaXNQcm9ncmFtJiYoZD1uLnRoaXNQcm9ncmFtKSxuLnF1aXQmJihjPW4ucXVpdCk7dmFyIEk9MCxOPWZ1bmN0aW9uKEIpe0k9Qn0sUDtuLndhc21CaW5hcnkmJihQPW4ud2FzbUJpbmFyeSk7dmFyIEY9bi5ub0V4aXRSdW50aW1lfHwhMDt0eXBlb2YgV2ViQXNzZW1ibHkhPSJvYmplY3QiJiZ6dCgibm8gbmF0aXZlIHdhc20gc3VwcG9ydCBkZXRlY3RlZCIpO3ZhciBBLHg9ITEsTTtmdW5jdGlvbiB2KEIsTCl7Qnx8enQoIkFzc2VydGlvbiBmYWlsZWQ6ICIrTCl9dmFyIFU9dHlwZW9mIFRleHREZWNvZGVyPCJ1Ij9uZXcgVGV4dERlY29kZXIoInV0ZjgiKTp2b2lkIDA7ZnVuY3Rpb24geihCLEwsVyl7Zm9yKHZhciBRPUwrVyxkZT1MO0JbZGVdJiYhKGRlPj1RKTspKytkZTtpZihkZS1MPjE2JiZCLnN1YmFycmF5JiZVKXJldHVybiBVLmRlY29kZShCLnN1YmFycmF5KEwsZGUpKTtmb3IodmFyIEVlPSIiO0w8ZGU7KXt2YXIgeGU9QltMKytdO2lmKCEoeGUmMTI4KSl7RWUrPVN0cmluZy5mcm9tQ2hhckNvZGUoeGUpO2NvbnRpbnVlfXZhciBfZT1CW0wrK10mNjM7aWYoKHhlJjIyNCk9PTE5Mil7RWUrPVN0cmluZy5mcm9tQ2hhckNvZGUoKHhlJjMxKTw8NnxfZSk7Y29udGludWV9dmFyIHllPUJbTCsrXSY2MztpZigoeGUmMjQwKT09MjI0P3hlPSh4ZSYxNSk8PDEyfF9lPDw2fHllOnhlPSh4ZSY3KTw8MTh8X2U8PDEyfHllPDw2fEJbTCsrXSY2Myx4ZTw2NTUzNilFZSs9U3RyaW5nLmZyb21DaGFyQ29kZSh4ZSk7ZWxzZXt2YXIgemU9eGUtNjU1MzY7RWUrPVN0cmluZy5mcm9tQ2hhckNvZGUoNTUyOTZ8emU+PjEwLDU2MzIwfHplJjEwMjMpfX1yZXR1cm4gRWV9ZnVuY3Rpb24gRChCLEwpe3JldHVybiBCP3ooQWUsQixMKToiIn1mdW5jdGlvbiBHKEIsTCxXLFEpe2lmKCEoUT4wKSlyZXR1cm4gMDtmb3IodmFyIGRlPVcsRWU9VytRLTEseGU9MDt4ZTxCLmxlbmd0aDsrK3hlKXt2YXIgX2U9Qi5jaGFyQ29kZUF0KHhlKTtpZihfZT49NTUyOTYmJl9lPD01NzM0Myl7dmFyIHllPUIuY2hhckNvZGVBdCgrK3hlKTtfZT02NTUzNisoKF9lJjEwMjMpPDwxMCl8eWUmMTAyM31pZihfZTw9MTI3KXtpZihXPj1FZSlicmVhaztMW1crK109X2V9ZWxzZSBpZihfZTw9MjA0Nyl7aWYoVysxPj1FZSlicmVhaztMW1crK109MTkyfF9lPj42LExbVysrXT0xMjh8X2UmNjN9ZWxzZSBpZihfZTw9NjU1MzUpe2lmKFcrMj49RWUpYnJlYWs7TFtXKytdPTIyNHxfZT4+MTIsTFtXKytdPTEyOHxfZT4+NiY2MyxMW1crK109MTI4fF9lJjYzfWVsc2V7aWYoVyszPj1FZSlicmVhaztMW1crK109MjQwfF9lPj4xOCxMW1crK109MTI4fF9lPj4xMiY2MyxMW1crK109MTI4fF9lPj42JjYzLExbVysrXT0xMjh8X2UmNjN9fXJldHVybiBMW1ddPTAsVy1kZX1mdW5jdGlvbiBIKEIsTCxXKXtyZXR1cm4gRyhCLEFlLEwsVyl9ZnVuY3Rpb24gTyhCKXtmb3IodmFyIEw9MCxXPTA7VzxCLmxlbmd0aDsrK1cpe3ZhciBRPUIuY2hhckNvZGVBdChXKTtRPj01NTI5NiYmUTw9NTczNDMmJihRPTY1NTM2KygoUSYxMDIzKTw8MTApfEIuY2hhckNvZGVBdCgrK1cpJjEwMjMpLFE8PTEyNz8rK0w6UTw9MjA0Nz9MKz0yOlE8PTY1NTM1P0wrPTM6TCs9NH1yZXR1cm4gTH12YXIgWj10eXBlb2YgVGV4dERlY29kZXI8InUiP25ldyBUZXh0RGVjb2RlcigidXRmLTE2bGUiKTp2b2lkIDA7ZnVuY3Rpb24gb2UoQixMKXtmb3IodmFyIFc9QixRPVc+PjEsZGU9UStMLzI7IShRPj1kZSkmJmV0W1FdOykrK1E7aWYoVz1RPDwxLFctQj4zMiYmWilyZXR1cm4gWi5kZWNvZGUoQWUuc3ViYXJyYXkoQixXKSk7Zm9yKHZhciBFZT0iIix4ZT0wOyEoeGU+PUwvMik7Kyt4ZSl7dmFyIF9lPU5lW0IreGUqMj4+MV07aWYoX2U9PTApYnJlYWs7RWUrPVN0cmluZy5mcm9tQ2hhckNvZGUoX2UpfXJldHVybiBFZX1mdW5jdGlvbiBjZShCLEwsVyl7aWYoVz09PXZvaWQgMCYmKFc9MjE0NzQ4MzY0NyksVzwyKXJldHVybiAwO1ctPTI7Zm9yKHZhciBRPUwsZGU9VzxCLmxlbmd0aCoyP1cvMjpCLmxlbmd0aCxFZT0wO0VlPGRlOysrRWUpe3ZhciB4ZT1CLmNoYXJDb2RlQXQoRWUpO05lW0w+PjFdPXhlLEwrPTJ9cmV0dXJuIE5lW0w+PjFdPTAsTC1RfWZ1bmN0aW9uIGZlKEIpe3JldHVybiBCLmxlbmd0aCoyfWZ1bmN0aW9uIGVlKEIsTCl7Zm9yKHZhciBXPTAsUT0iIjshKFc+PUwvNCk7KXt2YXIgZGU9S2VbQitXKjQ+PjJdO2lmKGRlPT0wKWJyZWFrO2lmKCsrVyxkZT49NjU1MzYpe3ZhciBFZT1kZS02NTUzNjtRKz1TdHJpbmcuZnJvbUNoYXJDb2RlKDU1Mjk2fEVlPj4xMCw1NjMyMHxFZSYxMDIzKX1lbHNlIFErPVN0cmluZy5mcm9tQ2hhckNvZGUoZGUpfXJldHVybiBRfWZ1bmN0aW9uIGJlKEIsTCxXKXtpZihXPT09dm9pZCAwJiYoVz0yMTQ3NDgzNjQ3KSxXPDQpcmV0dXJuIDA7Zm9yKHZhciBRPUwsZGU9UStXLTQsRWU9MDtFZTxCLmxlbmd0aDsrK0VlKXt2YXIgeGU9Qi5jaGFyQ29kZUF0KEVlKTtpZih4ZT49NTUyOTYmJnhlPD01NzM0Myl7dmFyIF9lPUIuY2hhckNvZGVBdCgrK0VlKTt4ZT02NTUzNisoKHhlJjEwMjMpPDwxMCl8X2UmMTAyM31pZihLZVtMPj4yXT14ZSxMKz00LEwrND5kZSlicmVha31yZXR1cm4gS2VbTD4+Ml09MCxMLVF9ZnVuY3Rpb24gbGUoQil7Zm9yKHZhciBMPTAsVz0wO1c8Qi5sZW5ndGg7KytXKXt2YXIgUT1CLmNoYXJDb2RlQXQoVyk7UT49NTUyOTYmJlE8PTU3MzQzJiYrK1csTCs9NH1yZXR1cm4gTH1mdW5jdGlvbiBwZShCLEwpe3JldHVybiBCJUw+MCYmKEIrPUwtQiVMKSxCfXZhciB1ZSxhZSxBZSxOZSxldCxLZSx0dCxYZSxMZTtmdW5jdGlvbiBqZShCKXt1ZT1CLG4uSEVBUDg9YWU9bmV3IEludDhBcnJheShCKSxuLkhFQVAxNj1OZT1uZXcgSW50MTZBcnJheShCKSxuLkhFQVAzMj1LZT1uZXcgSW50MzJBcnJheShCKSxuLkhFQVBVOD1BZT1uZXcgVWludDhBcnJheShCKSxuLkhFQVBVMTY9ZXQ9bmV3IFVpbnQxNkFycmF5KEIpLG4uSEVBUFUzMj10dD1uZXcgVWludDMyQXJyYXkoQiksbi5IRUFQRjMyPVhlPW5ldyBGbG9hdDMyQXJyYXkoQiksbi5IRUFQRjY0PUxlPW5ldyBGbG9hdDY0QXJyYXkoQil9dmFyIGl0PW4uSU5JVElBTF9NRU1PUll8fDE2Nzc3MjE2LFllLGZ0PVtdLEl0PVtdLEN0PVtdLGh0PVtdLEt0PSExO2Z1bmN0aW9uIFB0KCl7aWYobi5wcmVSdW4pZm9yKHR5cGVvZiBuLnByZVJ1bj09ImZ1bmN0aW9uIiYmKG4ucHJlUnVuPVtuLnByZVJ1bl0pO24ucHJlUnVuLmxlbmd0aDspUnQobi5wcmVSdW4uc2hpZnQoKSk7QW8oZnQpfWZ1bmN0aW9uIEx0KCl7S3Q9ITAsQW8oSXQpfWZ1bmN0aW9uIHFlKCl7QW8oQ3QpfWZ1bmN0aW9uIFZlKCl7aWYobi5wb3N0UnVuKWZvcih0eXBlb2Ygbi5wb3N0UnVuPT0iZnVuY3Rpb24iJiYobi5wb3N0UnVuPVtuLnBvc3RSdW5dKTtuLnBvc3RSdW4ubGVuZ3RoOylxdChuLnBvc3RSdW4uc2hpZnQoKSk7QW8oaHQpfWZ1bmN0aW9uIFJ0KEIpe2Z0LnVuc2hpZnQoQil9ZnVuY3Rpb24gRnQoQil7SXQudW5zaGlmdChCKX1mdW5jdGlvbiBxdChCKXtodC51bnNoaWZ0KEIpfXZhciBadD0wLG9uPW51bGwsd249bnVsbDtmdW5jdGlvbiBEdChCKXtadCsrLG4ubW9uaXRvclJ1bkRlcGVuZGVuY2llcyYmbi5tb25pdG9yUnVuRGVwZW5kZW5jaWVzKFp0KX1mdW5jdGlvbiBhbihCKXtpZihadC0tLG4ubW9uaXRvclJ1bkRlcGVuZGVuY2llcyYmbi5tb25pdG9yUnVuRGVwZW5kZW5jaWVzKFp0KSxadD09MCYmKG9uIT09bnVsbCYmKGNsZWFySW50ZXJ2YWwob24pLG9uPW51bGwpLHduKSl7dmFyIEw9d247d249bnVsbCxMKCl9fW4ucHJlbG9hZGVkSW1hZ2VzPXt9LG4ucHJlbG9hZGVkQXVkaW9zPXt9O2Z1bmN0aW9uIHp0KEIpe24ub25BYm9ydCYmbi5vbkFib3J0KEIpLEIrPSIiLEMoQikseD0hMCxNPTEsQj0iYWJvcnQoIitCKyIpLiBCdWlsZCB3aXRoIC1zIEFTU0VSVElPTlM9MSBmb3IgbW9yZSBpbmZvLiI7dmFyIEw9bmV3IFdlYkFzc2VtYmx5LlJ1bnRpbWVFcnJvcihCKTt0aHJvdyBhKEwpLEx9ZnVuY3Rpb24gZm4oQixMKXtyZXR1cm4gU3RyaW5nLnByb3RvdHlwZS5zdGFydHNXaXRoP0Iuc3RhcnRzV2l0aChMKTpCLmluZGV4T2YoTCk9PT0wfXZhciBWbj0iZGF0YTphcHBsaWNhdGlvbi9vY3RldC1zdHJlYW07YmFzZTY0LCI7ZnVuY3Rpb24gSG4oQil7cmV0dXJuIGZuKEIsVm4pfXZhciBQbj0iZmlsZTovLyI7ZnVuY3Rpb24gcm8oQil7cmV0dXJuIGZuKEIsUG4pfXZhciBrdD0iYmFzaXNfdHJhbnNjb2Rlci53YXNtIjtIbihrdCl8fChrdD1wKGt0KSk7ZnVuY3Rpb24geHQoQil7dHJ5e2lmKEI9PWt0JiZQKXJldHVybiBuZXcgVWludDhBcnJheShQKTtpZihfKXJldHVybiBfKEIpO3Rocm93ImJvdGggYXN5bmMgYW5kIHN5bmMgZmV0Y2hpbmcgb2YgdGhlIHdhc20gZmFpbGVkIn1jYXRjaChMKXt6dChMKX19ZnVuY3Rpb24gT24oKXtpZighUCYmKHV8fGwpKXtpZih0eXBlb2YgZmV0Y2g9PSJmdW5jdGlvbiImJiFybyhrdCkpcmV0dXJuIGZldGNoKGt0LHtjcmVkZW50aWFsczoic2FtZS1vcmlnaW4ifSkudGhlbihmdW5jdGlvbihCKXtpZighQi5vayl0aHJvdyJmYWlsZWQgdG8gbG9hZCB3YXNtIGJpbmFyeSBmaWxlIGF0ICciK2t0KyInIjtyZXR1cm4gQi5hcnJheUJ1ZmZlcigpfSkuY2F0Y2goZnVuY3Rpb24oKXtyZXR1cm4geHQoa3QpfSk7aWYoVClyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oQixMKXtUKGt0LGZ1bmN0aW9uKFcpe0IobmV3IFVpbnQ4QXJyYXkoVykpfSxMKX0pfXJldHVybiBQcm9taXNlLnJlc29sdmUoKS50aGVuKGZ1bmN0aW9uKCl7cmV0dXJuIHh0KGt0KX0pfWZ1bmN0aW9uIGtuKCl7dmFyIEI9e2E6S3V9O2Z1bmN0aW9uIEwoeGUsX2Upe3ZhciB5ZT14ZS5leHBvcnRzO24uYXNtPXllLEE9bi5hc20uSyxqZShBLmJ1ZmZlciksWWU9bi5hc20uTyxGdChuLmFzbS5MKSxhbigid2FzbS1pbnN0YW50aWF0ZSIpfUR0KCJ3YXNtLWluc3RhbnRpYXRlIik7ZnVuY3Rpb24gVyh4ZSl7TCh4ZS5pbnN0YW5jZSl9ZnVuY3Rpb24gUSh4ZSl7cmV0dXJuIE9uKCkudGhlbihmdW5jdGlvbihfZSl7dmFyIHllPVdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlKF9lLEIpO3JldHVybiB5ZX0pLnRoZW4oeGUsZnVuY3Rpb24oX2Upe0MoImZhaWxlZCB0byBhc3luY2hyb25vdXNseSBwcmVwYXJlIHdhc206ICIrX2UpLHp0KF9lKX0pfWZ1bmN0aW9uIGRlKCl7cmV0dXJuIVAmJnR5cGVvZiBXZWJBc3NlbWJseS5pbnN0YW50aWF0ZVN0cmVhbWluZz09ImZ1bmN0aW9uIiYmIUhuKGt0KSYmIXJvKGt0KSYmdHlwZW9mIGZldGNoPT0iZnVuY3Rpb24iP2ZldGNoKGt0LHtjcmVkZW50aWFsczoic2FtZS1vcmlnaW4ifSkudGhlbihmdW5jdGlvbih4ZSl7dmFyIF9lPVdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlU3RyZWFtaW5nKHhlLEIpO3JldHVybiBfZS50aGVuKFcsZnVuY3Rpb24oeWUpe3JldHVybiBDKCJ3YXNtIHN0cmVhbWluZyBjb21waWxlIGZhaWxlZDogIit5ZSksQygiZmFsbGluZyBiYWNrIHRvIEFycmF5QnVmZmVyIGluc3RhbnRpYXRpb24iKSxRKFcpfSl9KTpRKFcpfWlmKG4uaW5zdGFudGlhdGVXYXNtKXRyeXt2YXIgRWU9bi5pbnN0YW50aWF0ZVdhc20oQixMKTtyZXR1cm4gRWV9Y2F0Y2goeGUpe3JldHVybiBDKCJNb2R1bGUuaW5zdGFudGlhdGVXYXNtIGNhbGxiYWNrIGZhaWxlZCB3aXRoIGVycm9yOiAiK3hlKSwhMX1yZXR1cm4gZGUoKS5jYXRjaChhKSx7fX1mdW5jdGlvbiBBbyhCKXtmb3IoO0IubGVuZ3RoPjA7KXt2YXIgTD1CLnNoaWZ0KCk7aWYodHlwZW9mIEw9PSJmdW5jdGlvbiIpe0wobik7Y29udGludWV9dmFyIFc9TC5mdW5jO3R5cGVvZiBXPT0ibnVtYmVyIj9MLmFyZz09PXZvaWQgMD9ZZS5nZXQoVykoKTpZZS5nZXQoVykoTC5hcmcpOlcoTC5hcmc9PT12b2lkIDA/bnVsbDpMLmFyZyl9fXZhciBHdD17fTtmdW5jdGlvbiBkbihCKXtmb3IoO0IubGVuZ3RoOyl7dmFyIEw9Qi5wb3AoKSxXPUIucG9wKCk7VyhMKX19ZnVuY3Rpb24gQ28oQil7cmV0dXJuIHRoaXMuZnJvbVdpcmVUeXBlKHR0W0I+PjJdKX12YXIgdm49e30sV289e30sRGE9e30semk9NDgsR2k9NTc7ZnVuY3Rpb24gb2koQil7aWYoQj09PXZvaWQgMClyZXR1cm4iX3Vua25vd24iO0I9Qi5yZXBsYWNlKC9bXmEtekEtWjAtOV9dL2csIiQiKTt2YXIgTD1CLmNoYXJDb2RlQXQoMCk7cmV0dXJuIEw+PXppJiZMPD1HaT8iXyIrQjpCfWZ1bmN0aW9uIEJhKEIsTCl7cmV0dXJuIEI9b2koQiksbmV3IEZ1bmN0aW9uKCJib2R5IiwicmV0dXJuIGZ1bmN0aW9uICIrQitgKCkgewogICAgInVzZSBzdHJpY3QiOyAgICByZXR1cm4gYm9keS5hcHBseSh0aGlzLCBhcmd1bWVudHMpOwp9OwpgKShMKX1mdW5jdGlvbiBhaShCLEwpe3ZhciBXPUJhKEwsZnVuY3Rpb24oUSl7dGhpcy5uYW1lPUwsdGhpcy5tZXNzYWdlPVE7dmFyIGRlPW5ldyBFcnJvcihRKS5zdGFjaztkZSE9PXZvaWQgMCYmKHRoaXMuc3RhY2s9dGhpcy50b1N0cmluZygpK2AKYCtkZS5yZXBsYWNlKC9eRXJyb3IoOlteXG5dKik/XG4vLCIiKSl9KTtyZXR1cm4gVy5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShCLnByb3RvdHlwZSksVy5wcm90b3R5cGUuY29uc3RydWN0b3I9VyxXLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLm1lc3NhZ2U9PT12b2lkIDA/dGhpcy5uYW1lOnRoaXMubmFtZSsiOiAiK3RoaXMubWVzc2FnZX0sV312YXIgVmk9dm9pZCAwO2Z1bmN0aW9uIFNyKEIpe3Rocm93IG5ldyBWaShCKX1mdW5jdGlvbiBobyhCLEwsVyl7Qi5mb3JFYWNoKGZ1bmN0aW9uKF9lKXtEYVtfZV09TH0pO2Z1bmN0aW9uIFEoX2Upe3ZhciB5ZT1XKF9lKTt5ZS5sZW5ndGghPT1CLmxlbmd0aCYmU3IoIk1pc21hdGNoZWQgdHlwZSBjb252ZXJ0ZXIgY291bnQiKTtmb3IodmFyIHplPTA7emU8Qi5sZW5ndGg7Kyt6ZSlpYShCW3plXSx5ZVt6ZV0pfXZhciBkZT1uZXcgQXJyYXkoTC5sZW5ndGgpLEVlPVtdLHhlPTA7TC5mb3JFYWNoKGZ1bmN0aW9uKF9lLHllKXtXby5oYXNPd25Qcm9wZXJ0eShfZSk/ZGVbeWVdPVdvW19lXTooRWUucHVzaChfZSksdm4uaGFzT3duUHJvcGVydHkoX2UpfHwodm5bX2VdPVtdKSx2bltfZV0ucHVzaChmdW5jdGlvbigpe2RlW3llXT1Xb1tfZV0sKyt4ZSx4ZT09PUVlLmxlbmd0aCYmUShkZSl9KSl9KSxFZS5sZW5ndGg9PT0wJiZRKGRlKX1mdW5jdGlvbiB3byhCKXt2YXIgTD1HdFtCXTtkZWxldGUgR3RbQl07dmFyIFc9TC5yYXdDb25zdHJ1Y3RvcixRPUwucmF3RGVzdHJ1Y3RvcixkZT1MLmZpZWxkcyxFZT1kZS5tYXAoZnVuY3Rpb24oeGUpe3JldHVybiB4ZS5nZXR0ZXJSZXR1cm5UeXBlfSkuY29uY2F0KGRlLm1hcChmdW5jdGlvbih4ZSl7cmV0dXJuIHhlLnNldHRlckFyZ3VtZW50VHlwZX0pKTtobyhbQl0sRWUsZnVuY3Rpb24oeGUpe3ZhciBfZT17fTtyZXR1cm4gZGUuZm9yRWFjaChmdW5jdGlvbih5ZSx6ZSl7dmFyIEplPXllLmZpZWxkTmFtZSxndD14ZVt6ZV0scm49eWUuZ2V0dGVyLFRuPXllLmdldHRlckNvbnRleHQsbW89eGVbemUrZGUubGVuZ3RoXSxVbz15ZS5zZXR0ZXIsbWE9eWUuc2V0dGVyQ29udGV4dDtfZVtKZV09e3JlYWQ6ZnVuY3Rpb24obnIpe3JldHVybiBndC5mcm9tV2lyZVR5cGUocm4oVG4sbnIpKX0sd3JpdGU6ZnVuY3Rpb24obnIsdWYpe3ZhciBJcj1bXTtVbyhtYSxucixtby50b1dpcmVUeXBlKElyLHVmKSksZG4oSXIpfX19KSxbe25hbWU6TC5uYW1lLGZyb21XaXJlVHlwZTpmdW5jdGlvbih5ZSl7dmFyIHplPXt9O2Zvcih2YXIgSmUgaW4gX2UpemVbSmVdPV9lW0plXS5yZWFkKHllKTtyZXR1cm4gUSh5ZSksemV9LHRvV2lyZVR5cGU6ZnVuY3Rpb24oeWUsemUpe2Zvcih2YXIgSmUgaW4gX2UpaWYoIShKZSBpbiB6ZSkpdGhyb3cgbmV3IFR5cGVFcnJvcignTWlzc2luZyBmaWVsZDogICInK0plKyciJyk7dmFyIGd0PVcoKTtmb3IoSmUgaW4gX2UpX2VbSmVdLndyaXRlKGd0LHplW0plXSk7cmV0dXJuIHllIT09bnVsbCYmeWUucHVzaChRLGd0KSxndH0sYXJnUGFja0FkdmFuY2U6OCxyZWFkVmFsdWVGcm9tUG9pbnRlcjpDbyxkZXN0cnVjdG9yRnVuY3Rpb246UX1dfSl9ZnVuY3Rpb24gVWEoQil7c3dpdGNoKEIpe2Nhc2UgMTpyZXR1cm4gMDtjYXNlIDI6cmV0dXJuIDE7Y2FzZSA0OnJldHVybiAyO2Nhc2UgODpyZXR1cm4gMztkZWZhdWx0OnRocm93IG5ldyBUeXBlRXJyb3IoIlVua25vd24gdHlwZSBzaXplOiAiK0IpfX1mdW5jdGlvbiB2Yygpe2Zvcih2YXIgQj1uZXcgQXJyYXkoMjU2KSxMPTA7TDwyNTY7KytMKUJbTF09U3RyaW5nLmZyb21DaGFyQ29kZShMKTtGYz1CfXZhciBGYz12b2lkIDA7ZnVuY3Rpb24gS24oQil7Zm9yKHZhciBMPSIiLFc9QjtBZVtXXTspTCs9RmNbQWVbVysrXV07cmV0dXJuIEx9dmFyIENyPXZvaWQgMDtmdW5jdGlvbiBCdChCKXt0aHJvdyBuZXcgQ3IoQil9ZnVuY3Rpb24gaWEoQixMLFcpe2lmKFc9V3x8e30sISgiYXJnUGFja0FkdmFuY2UiaW4gTCkpdGhyb3cgbmV3IFR5cGVFcnJvcigicmVnaXN0ZXJUeXBlIHJlZ2lzdGVyZWRJbnN0YW5jZSByZXF1aXJlcyBhcmdQYWNrQWR2YW5jZSIpO3ZhciBRPUwubmFtZTtpZihCfHxCdCgndHlwZSAiJytRKyciIG11c3QgaGF2ZSBhIHBvc2l0aXZlIGludGVnZXIgdHlwZWlkIHBvaW50ZXInKSxXby5oYXNPd25Qcm9wZXJ0eShCKSl7aWYoVy5pZ25vcmVEdXBsaWNhdGVSZWdpc3RyYXRpb25zKXJldHVybjtCdCgiQ2Fubm90IHJlZ2lzdGVyIHR5cGUgJyIrUSsiJyB0d2ljZSIpfWlmKFdvW0JdPUwsZGVsZXRlIERhW0JdLHZuLmhhc093blByb3BlcnR5KEIpKXt2YXIgZGU9dm5bQl07ZGVsZXRlIHZuW0JdLGRlLmZvckVhY2goZnVuY3Rpb24oRWUpe0VlKCl9KX19ZnVuY3Rpb24gQ2QoQixMLFcsUSxkZSl7dmFyIEVlPVVhKFcpO0w9S24oTCksaWEoQix7bmFtZTpMLGZyb21XaXJlVHlwZTpmdW5jdGlvbih4ZSl7cmV0dXJuISF4ZX0sdG9XaXJlVHlwZTpmdW5jdGlvbih4ZSxfZSl7cmV0dXJuIF9lP1E6ZGV9LGFyZ1BhY2tBZHZhbmNlOjgscmVhZFZhbHVlRnJvbVBvaW50ZXI6ZnVuY3Rpb24oeGUpe3ZhciBfZTtpZihXPT09MSlfZT1hZTtlbHNlIGlmKFc9PT0yKV9lPU5lO2Vsc2UgaWYoVz09PTQpX2U9S2U7ZWxzZSB0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGJvb2xlYW4gdHlwZSBzaXplOiAiK0wpO3JldHVybiB0aGlzLmZyb21XaXJlVHlwZShfZVt4ZT4+RWVdKX0sZGVzdHJ1Y3RvckZ1bmN0aW9uOm51bGx9KX1mdW5jdGlvbiBNZChCKXtpZighKHRoaXMgaW5zdGFuY2VvZiBMYSl8fCEoQiBpbnN0YW5jZW9mIExhKSlyZXR1cm4hMTtmb3IodmFyIEw9dGhpcy4kJC5wdHJUeXBlLnJlZ2lzdGVyZWRDbGFzcyxXPXRoaXMuJCQucHRyLFE9Qi4kJC5wdHJUeXBlLnJlZ2lzdGVyZWRDbGFzcyxkZT1CLiQkLnB0cjtMLmJhc2VDbGFzczspVz1MLnVwY2FzdChXKSxMPUwuYmFzZUNsYXNzO2Zvcig7US5iYXNlQ2xhc3M7KWRlPVEudXBjYXN0KGRlKSxRPVEuYmFzZUNsYXNzO3JldHVybiBMPT09USYmVz09PWRlfWZ1bmN0aW9uIE5kKEIpe3JldHVybntjb3VudDpCLmNvdW50LGRlbGV0ZVNjaGVkdWxlZDpCLmRlbGV0ZVNjaGVkdWxlZCxwcmVzZXJ2ZVBvaW50ZXJPbkRlbGV0ZTpCLnByZXNlcnZlUG9pbnRlck9uRGVsZXRlLHB0cjpCLnB0cixwdHJUeXBlOkIucHRyVHlwZSxzbWFydFB0cjpCLnNtYXJ0UHRyLHNtYXJ0UHRyVHlwZTpCLnNtYXJ0UHRyVHlwZX19ZnVuY3Rpb24gRGMoQil7ZnVuY3Rpb24gTChXKXtyZXR1cm4gVy4kJC5wdHJUeXBlLnJlZ2lzdGVyZWRDbGFzcy5uYW1lfUJ0KEwoQikrIiBpbnN0YW5jZSBhbHJlYWR5IGRlbGV0ZWQiKX12YXIgQmM9ITE7ZnVuY3Rpb24gWnMoQil7fWZ1bmN0aW9uIElkKEIpe0Iuc21hcnRQdHI/Qi5zbWFydFB0clR5cGUucmF3RGVzdHJ1Y3RvcihCLnNtYXJ0UHRyKTpCLnB0clR5cGUucmVnaXN0ZXJlZENsYXNzLnJhd0Rlc3RydWN0b3IoQi5wdHIpfWZ1bmN0aW9uIFFzKEIpe0IuY291bnQudmFsdWUtPTE7dmFyIEw9Qi5jb3VudC52YWx1ZT09PTA7TCYmSWQoQil9ZnVuY3Rpb24gcmkoQil7cmV0dXJuIHR5cGVvZiBGaW5hbGl6YXRpb25Hcm91cD4idSI/KHJpPWZ1bmN0aW9uKEwpe3JldHVybiBMfSxCKTooQmM9bmV3IEZpbmFsaXphdGlvbkdyb3VwKGZ1bmN0aW9uKEwpe2Zvcih2YXIgVz1MLm5leHQoKTshVy5kb25lO1c9TC5uZXh0KCkpe3ZhciBRPVcudmFsdWU7US5wdHI/UXMoUSk6Y29uc29sZS53YXJuKCJvYmplY3QgYWxyZWFkeSBkZWxldGVkOiAiK1EucHRyKX19KSxyaT1mdW5jdGlvbihMKXtyZXR1cm4gQmMucmVnaXN0ZXIoTCxMLiQkLEwuJCQpLEx9LFpzPWZ1bmN0aW9uKEwpe0JjLnVucmVnaXN0ZXIoTC4kJCl9LHJpKEIpKX1mdW5jdGlvbiBQZCgpe2lmKHRoaXMuJCQucHRyfHxEYyh0aGlzKSx0aGlzLiQkLnByZXNlcnZlUG9pbnRlck9uRGVsZXRlKXJldHVybiB0aGlzLiQkLmNvdW50LnZhbHVlKz0xLHRoaXM7dmFyIEI9cmkoT2JqZWN0LmNyZWF0ZShPYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykseyQkOnt2YWx1ZTpOZCh0aGlzLiQkKX19KSk7cmV0dXJuIEIuJCQuY291bnQudmFsdWUrPTEsQi4kJC5kZWxldGVTY2hlZHVsZWQ9ITEsQn1mdW5jdGlvbiBrZCgpe3RoaXMuJCQucHRyfHxEYyh0aGlzKSx0aGlzLiQkLmRlbGV0ZVNjaGVkdWxlZCYmIXRoaXMuJCQucHJlc2VydmVQb2ludGVyT25EZWxldGUmJkJ0KCJPYmplY3QgYWxyZWFkeSBzY2hlZHVsZWQgZm9yIGRlbGV0aW9uIiksWnModGhpcyksUXModGhpcy4kJCksdGhpcy4kJC5wcmVzZXJ2ZVBvaW50ZXJPbkRlbGV0ZXx8KHRoaXMuJCQuc21hcnRQdHI9dm9pZCAwLHRoaXMuJCQucHRyPXZvaWQgMCl9ZnVuY3Rpb24gdmQoKXtyZXR1cm4hdGhpcy4kJC5wdHJ9dmFyIGlpPXZvaWQgMCxjaT1bXTtmdW5jdGlvbiBVYygpe2Zvcig7Y2kubGVuZ3RoOyl7dmFyIEI9Y2kucG9wKCk7Qi4kJC5kZWxldGVTY2hlZHVsZWQ9ITEsQi5kZWxldGUoKX19ZnVuY3Rpb24gRmQoKXtyZXR1cm4gdGhpcy4kJC5wdHJ8fERjKHRoaXMpLHRoaXMuJCQuZGVsZXRlU2NoZWR1bGVkJiYhdGhpcy4kJC5wcmVzZXJ2ZVBvaW50ZXJPbkRlbGV0ZSYmQnQoIk9iamVjdCBhbHJlYWR5IHNjaGVkdWxlZCBmb3IgZGVsZXRpb24iKSxjaS5wdXNoKHRoaXMpLGNpLmxlbmd0aD09PTEmJmlpJiZpaShVYyksdGhpcy4kJC5kZWxldGVTY2hlZHVsZWQ9ITAsdGhpc31mdW5jdGlvbiBEZCgpe0xhLnByb3RvdHlwZS5pc0FsaWFzT2Y9TWQsTGEucHJvdG90eXBlLmNsb25lPVBkLExhLnByb3RvdHlwZS5kZWxldGU9a2QsTGEucHJvdG90eXBlLmlzRGVsZXRlZD12ZCxMYS5wcm90b3R5cGUuZGVsZXRlTGF0ZXI9RmR9ZnVuY3Rpb24gTGEoKXt9dmFyICRzPXt9O2Z1bmN0aW9uIGVmKEIsTCxXKXtpZihCW0xdLm92ZXJsb2FkVGFibGU9PT12b2lkIDApe3ZhciBRPUJbTF07QltMXT1mdW5jdGlvbigpe3JldHVybiBCW0xdLm92ZXJsb2FkVGFibGUuaGFzT3duUHJvcGVydHkoYXJndW1lbnRzLmxlbmd0aCl8fEJ0KCJGdW5jdGlvbiAnIitXKyInIGNhbGxlZCB3aXRoIGFuIGludmFsaWQgbnVtYmVyIG9mIGFyZ3VtZW50cyAoIithcmd1bWVudHMubGVuZ3RoKyIpIC0gZXhwZWN0cyBvbmUgb2YgKCIrQltMXS5vdmVybG9hZFRhYmxlKyIpISIpLEJbTF0ub3ZlcmxvYWRUYWJsZVthcmd1bWVudHMubGVuZ3RoXS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LEJbTF0ub3ZlcmxvYWRUYWJsZT1bXSxCW0xdLm92ZXJsb2FkVGFibGVbUS5hcmdDb3VudF09UX19ZnVuY3Rpb24gTGMoQixMLFcpe24uaGFzT3duUHJvcGVydHkoQik/KChXPT09dm9pZCAwfHxuW0JdLm92ZXJsb2FkVGFibGUhPT12b2lkIDAmJm5bQl0ub3ZlcmxvYWRUYWJsZVtXXSE9PXZvaWQgMCkmJkJ0KCJDYW5ub3QgcmVnaXN0ZXIgcHVibGljIG5hbWUgJyIrQisiJyB0d2ljZSIpLGVmKG4sQixCKSxuLmhhc093blByb3BlcnR5KFcpJiZCdCgiQ2Fubm90IHJlZ2lzdGVyIG11bHRpcGxlIG92ZXJsb2FkcyBvZiBhIGZ1bmN0aW9uIHdpdGggdGhlIHNhbWUgbnVtYmVyIG9mIGFyZ3VtZW50cyAoIitXKyIpISIpLG5bQl0ub3ZlcmxvYWRUYWJsZVtXXT1MKToobltCXT1MLFchPT12b2lkIDAmJihuW0JdLm51bUFyZ3VtZW50cz1XKSl9ZnVuY3Rpb24gQmQoQixMLFcsUSxkZSxFZSx4ZSxfZSl7dGhpcy5uYW1lPUIsdGhpcy5jb25zdHJ1Y3Rvcj1MLHRoaXMuaW5zdGFuY2VQcm90b3R5cGU9Vyx0aGlzLnJhd0Rlc3RydWN0b3I9USx0aGlzLmJhc2VDbGFzcz1kZSx0aGlzLmdldEFjdHVhbFR5cGU9RWUsdGhpcy51cGNhc3Q9eGUsdGhpcy5kb3duY2FzdD1fZSx0aGlzLnB1cmVWaXJ0dWFsRnVuY3Rpb25zPVtdfWZ1bmN0aW9uIGpjKEIsTCxXKXtmb3IoO0whPT1XOylMLnVwY2FzdHx8QnQoIkV4cGVjdGVkIG51bGwgb3IgaW5zdGFuY2Ugb2YgIitXLm5hbWUrIiwgZ290IGFuIGluc3RhbmNlIG9mICIrTC5uYW1lKSxCPUwudXBjYXN0KEIpLEw9TC5iYXNlQ2xhc3M7cmV0dXJuIEJ9ZnVuY3Rpb24gVWQoQixMKXtpZihMPT09bnVsbClyZXR1cm4gdGhpcy5pc1JlZmVyZW5jZSYmQnQoIm51bGwgaXMgbm90IGEgdmFsaWQgIit0aGlzLm5hbWUpLDA7TC4kJHx8QnQoJ0Nhbm5vdCBwYXNzICInK01yKEwpKyciIGFzIGEgJyt0aGlzLm5hbWUpLEwuJCQucHRyfHxCdCgiQ2Fubm90IHBhc3MgZGVsZXRlZCBvYmplY3QgYXMgYSBwb2ludGVyIG9mIHR5cGUgIit0aGlzLm5hbWUpO3ZhciBXPUwuJCQucHRyVHlwZS5yZWdpc3RlcmVkQ2xhc3MsUT1qYyhMLiQkLnB0cixXLHRoaXMucmVnaXN0ZXJlZENsYXNzKTtyZXR1cm4gUX1mdW5jdGlvbiBMZChCLEwpe3ZhciBXO2lmKEw9PT1udWxsKXJldHVybiB0aGlzLmlzUmVmZXJlbmNlJiZCdCgibnVsbCBpcyBub3QgYSB2YWxpZCAiK3RoaXMubmFtZSksdGhpcy5pc1NtYXJ0UG9pbnRlcj8oVz10aGlzLnJhd0NvbnN0cnVjdG9yKCksQiE9PW51bGwmJkIucHVzaCh0aGlzLnJhd0Rlc3RydWN0b3IsVyksVyk6MDtMLiQkfHxCdCgnQ2Fubm90IHBhc3MgIicrTXIoTCkrJyIgYXMgYSAnK3RoaXMubmFtZSksTC4kJC5wdHJ8fEJ0KCJDYW5ub3QgcGFzcyBkZWxldGVkIG9iamVjdCBhcyBhIHBvaW50ZXIgb2YgdHlwZSAiK3RoaXMubmFtZSksIXRoaXMuaXNDb25zdCYmTC4kJC5wdHJUeXBlLmlzQ29uc3QmJkJ0KCJDYW5ub3QgY29udmVydCBhcmd1bWVudCBvZiB0eXBlICIrKEwuJCQuc21hcnRQdHJUeXBlP0wuJCQuc21hcnRQdHJUeXBlLm5hbWU6TC4kJC5wdHJUeXBlLm5hbWUpKyIgdG8gcGFyYW1ldGVyIHR5cGUgIit0aGlzLm5hbWUpO3ZhciBRPUwuJCQucHRyVHlwZS5yZWdpc3RlcmVkQ2xhc3M7aWYoVz1qYyhMLiQkLnB0cixRLHRoaXMucmVnaXN0ZXJlZENsYXNzKSx0aGlzLmlzU21hcnRQb2ludGVyKXN3aXRjaChMLiQkLnNtYXJ0UHRyPT09dm9pZCAwJiZCdCgiUGFzc2luZyByYXcgcG9pbnRlciB0byBzbWFydCBwb2ludGVyIGlzIGlsbGVnYWwiKSx0aGlzLnNoYXJpbmdQb2xpY3kpe2Nhc2UgMDpMLiQkLnNtYXJ0UHRyVHlwZT09PXRoaXM/Vz1MLiQkLnNtYXJ0UHRyOkJ0KCJDYW5ub3QgY29udmVydCBhcmd1bWVudCBvZiB0eXBlICIrKEwuJCQuc21hcnRQdHJUeXBlP0wuJCQuc21hcnRQdHJUeXBlLm5hbWU6TC4kJC5wdHJUeXBlLm5hbWUpKyIgdG8gcGFyYW1ldGVyIHR5cGUgIit0aGlzLm5hbWUpO2JyZWFrO2Nhc2UgMTpXPUwuJCQuc21hcnRQdHI7YnJlYWs7Y2FzZSAyOmlmKEwuJCQuc21hcnRQdHJUeXBlPT09dGhpcylXPUwuJCQuc21hcnRQdHI7ZWxzZXt2YXIgZGU9TC5jbG9uZSgpO1c9dGhpcy5yYXdTaGFyZShXLGhhKGZ1bmN0aW9uKCl7ZGUuZGVsZXRlKCl9KSksQiE9PW51bGwmJkIucHVzaCh0aGlzLnJhd0Rlc3RydWN0b3IsVyl9YnJlYWs7ZGVmYXVsdDpCdCgiVW5zdXBwb3J0aW5nIHNoYXJpbmcgcG9saWN5Iil9cmV0dXJuIFd9ZnVuY3Rpb24gamQoQixMKXtpZihMPT09bnVsbClyZXR1cm4gdGhpcy5pc1JlZmVyZW5jZSYmQnQoIm51bGwgaXMgbm90IGEgdmFsaWQgIit0aGlzLm5hbWUpLDA7TC4kJHx8QnQoJ0Nhbm5vdCBwYXNzICInK01yKEwpKyciIGFzIGEgJyt0aGlzLm5hbWUpLEwuJCQucHRyfHxCdCgiQ2Fubm90IHBhc3MgZGVsZXRlZCBvYmplY3QgYXMgYSBwb2ludGVyIG9mIHR5cGUgIit0aGlzLm5hbWUpLEwuJCQucHRyVHlwZS5pc0NvbnN0JiZCdCgiQ2Fubm90IGNvbnZlcnQgYXJndW1lbnQgb2YgdHlwZSAiK0wuJCQucHRyVHlwZS5uYW1lKyIgdG8gcGFyYW1ldGVyIHR5cGUgIit0aGlzLm5hbWUpO3ZhciBXPUwuJCQucHRyVHlwZS5yZWdpc3RlcmVkQ2xhc3MsUT1qYyhMLiQkLnB0cixXLHRoaXMucmVnaXN0ZXJlZENsYXNzKTtyZXR1cm4gUX1mdW5jdGlvbiB6ZChCKXtyZXR1cm4gdGhpcy5yYXdHZXRQb2ludGVlJiYoQj10aGlzLnJhd0dldFBvaW50ZWUoQikpLEJ9ZnVuY3Rpb24gR2QoQil7dGhpcy5yYXdEZXN0cnVjdG9yJiZ0aGlzLnJhd0Rlc3RydWN0b3IoQil9ZnVuY3Rpb24gVmQoQil7QiE9PW51bGwmJkIuZGVsZXRlKCl9ZnVuY3Rpb24gdGYoQixMLFcpe2lmKEw9PT1XKXJldHVybiBCO2lmKFcuYmFzZUNsYXNzPT09dm9pZCAwKXJldHVybiBudWxsO3ZhciBRPXRmKEIsTCxXLmJhc2VDbGFzcyk7cmV0dXJuIFE9PT1udWxsP251bGw6Vy5kb3duY2FzdChRKX1mdW5jdGlvbiBIZCgpe3JldHVybiBPYmplY3Qua2V5cyhzaSkubGVuZ3RofWZ1bmN0aW9uIEtkKCl7dmFyIEI9W107Zm9yKHZhciBMIGluIHNpKXNpLmhhc093blByb3BlcnR5KEwpJiZCLnB1c2goc2lbTF0pO3JldHVybiBCfWZ1bmN0aW9uIHFkKEIpe2lpPUIsY2kubGVuZ3RoJiZpaSYmaWkoVWMpfWZ1bmN0aW9uIFdkKCl7bi5nZXRJbmhlcml0ZWRJbnN0YW5jZUNvdW50PUhkLG4uZ2V0TGl2ZUluaGVyaXRlZEluc3RhbmNlcz1LZCxuLmZsdXNoUGVuZGluZ0RlbGV0ZXM9VWMsbi5zZXREZWxheUZ1bmN0aW9uPXFkfXZhciBzaT17fTtmdW5jdGlvbiBYZChCLEwpe2ZvcihMPT09dm9pZCAwJiZCdCgicHRyIHNob3VsZCBub3QgYmUgdW5kZWZpbmVkIik7Qi5iYXNlQ2xhc3M7KUw9Qi51cGNhc3QoTCksQj1CLmJhc2VDbGFzcztyZXR1cm4gTH1mdW5jdGlvbiBZZChCLEwpe3JldHVybiBMPVhkKEIsTCksc2lbTF19ZnVuY3Rpb24gSGkoQixMKXsoIUwucHRyVHlwZXx8IUwucHRyKSYmU3IoIm1ha2VDbGFzc0hhbmRsZSByZXF1aXJlcyBwdHIgYW5kIHB0clR5cGUiKTt2YXIgVz0hIUwuc21hcnRQdHJUeXBlLFE9ISFMLnNtYXJ0UHRyO3JldHVybiBXIT09USYmU3IoIkJvdGggc21hcnRQdHJUeXBlIGFuZCBzbWFydFB0ciBtdXN0IGJlIHNwZWNpZmllZCIpLEwuY291bnQ9e3ZhbHVlOjF9LHJpKE9iamVjdC5jcmVhdGUoQix7JCQ6e3ZhbHVlOkx9fSkpfWZ1bmN0aW9uIEpkKEIpe3ZhciBMPXRoaXMuZ2V0UG9pbnRlZShCKTtpZighTClyZXR1cm4gdGhpcy5kZXN0cnVjdG9yKEIpLG51bGw7dmFyIFc9WWQodGhpcy5yZWdpc3RlcmVkQ2xhc3MsTCk7aWYoVyE9PXZvaWQgMCl7aWYoVy4kJC5jb3VudC52YWx1ZT09PTApcmV0dXJuIFcuJCQucHRyPUwsVy4kJC5zbWFydFB0cj1CLFcuY2xvbmUoKTt2YXIgUT1XLmNsb25lKCk7cmV0dXJuIHRoaXMuZGVzdHJ1Y3RvcihCKSxRfWZ1bmN0aW9uIGRlKCl7cmV0dXJuIHRoaXMuaXNTbWFydFBvaW50ZXI/SGkodGhpcy5yZWdpc3RlcmVkQ2xhc3MuaW5zdGFuY2VQcm90b3R5cGUse3B0clR5cGU6dGhpcy5wb2ludGVlVHlwZSxwdHI6TCxzbWFydFB0clR5cGU6dGhpcyxzbWFydFB0cjpCfSk6SGkodGhpcy5yZWdpc3RlcmVkQ2xhc3MuaW5zdGFuY2VQcm90b3R5cGUse3B0clR5cGU6dGhpcyxwdHI6Qn0pfXZhciBFZT10aGlzLnJlZ2lzdGVyZWRDbGFzcy5nZXRBY3R1YWxUeXBlKEwpLHhlPSRzW0VlXTtpZigheGUpcmV0dXJuIGRlLmNhbGwodGhpcyk7dmFyIF9lO3RoaXMuaXNDb25zdD9fZT14ZS5jb25zdFBvaW50ZXJUeXBlOl9lPXhlLnBvaW50ZXJUeXBlO3ZhciB5ZT10ZihMLHRoaXMucmVnaXN0ZXJlZENsYXNzLF9lLnJlZ2lzdGVyZWRDbGFzcyk7cmV0dXJuIHllPT09bnVsbD9kZS5jYWxsKHRoaXMpOnRoaXMuaXNTbWFydFBvaW50ZXI/SGkoX2UucmVnaXN0ZXJlZENsYXNzLmluc3RhbmNlUHJvdG90eXBlLHtwdHJUeXBlOl9lLHB0cjp5ZSxzbWFydFB0clR5cGU6dGhpcyxzbWFydFB0cjpCfSk6SGkoX2UucmVnaXN0ZXJlZENsYXNzLmluc3RhbmNlUHJvdG90eXBlLHtwdHJUeXBlOl9lLHB0cjp5ZX0pfWZ1bmN0aW9uIFpkKCl7bGEucHJvdG90eXBlLmdldFBvaW50ZWU9emQsbGEucHJvdG90eXBlLmRlc3RydWN0b3I9R2QsbGEucHJvdG90eXBlLmFyZ1BhY2tBZHZhbmNlPTgsbGEucHJvdG90eXBlLnJlYWRWYWx1ZUZyb21Qb2ludGVyPUNvLGxhLnByb3RvdHlwZS5kZWxldGVPYmplY3Q9VmQsbGEucHJvdG90eXBlLmZyb21XaXJlVHlwZT1KZH1mdW5jdGlvbiBsYShCLEwsVyxRLGRlLEVlLHhlLF9lLHllLHplLEplKXt0aGlzLm5hbWU9Qix0aGlzLnJlZ2lzdGVyZWRDbGFzcz1MLHRoaXMuaXNSZWZlcmVuY2U9Vyx0aGlzLmlzQ29uc3Q9USx0aGlzLmlzU21hcnRQb2ludGVyPWRlLHRoaXMucG9pbnRlZVR5cGU9RWUsdGhpcy5zaGFyaW5nUG9saWN5PXhlLHRoaXMucmF3R2V0UG9pbnRlZT1fZSx0aGlzLnJhd0NvbnN0cnVjdG9yPXllLHRoaXMucmF3U2hhcmU9emUsdGhpcy5yYXdEZXN0cnVjdG9yPUplLCFkZSYmTC5iYXNlQ2xhc3M9PT12b2lkIDA/UT8odGhpcy50b1dpcmVUeXBlPVVkLHRoaXMuZGVzdHJ1Y3RvckZ1bmN0aW9uPW51bGwpOih0aGlzLnRvV2lyZVR5cGU9amQsdGhpcy5kZXN0cnVjdG9yRnVuY3Rpb249bnVsbCk6dGhpcy50b1dpcmVUeXBlPUxkfWZ1bmN0aW9uIG5mKEIsTCxXKXtuLmhhc093blByb3BlcnR5KEIpfHxTcigiUmVwbGFjaW5nIG5vbmV4aXN0YW50IHB1YmxpYyBzeW1ib2wiKSxuW0JdLm92ZXJsb2FkVGFibGUhPT12b2lkIDAmJlchPT12b2lkIDA/bltCXS5vdmVybG9hZFRhYmxlW1ddPUw6KG5bQl09TCxuW0JdLmFyZ0NvdW50PVcpfWZ1bmN0aW9uIFFkKEIsTCxXKXt2YXIgUT1uWyJkeW5DYWxsXyIrQl07cmV0dXJuIFcmJlcubGVuZ3RoP1EuYXBwbHkobnVsbCxbTF0uY29uY2F0KFcpKTpRLmNhbGwobnVsbCxMKX1mdW5jdGlvbiAkZChCLEwsVyl7cmV0dXJuIEIuaW5kZXhPZigiaiIpIT0tMT9RZChCLEwsVyk6WWUuZ2V0KEwpLmFwcGx5KG51bGwsVyl9ZnVuY3Rpb24gZXUoQixMKXt2YXIgVz1bXTtyZXR1cm4gZnVuY3Rpb24oKXtXLmxlbmd0aD1hcmd1bWVudHMubGVuZ3RoO2Zvcih2YXIgUT0wO1E8YXJndW1lbnRzLmxlbmd0aDtRKyspV1tRXT1hcmd1bWVudHNbUV07cmV0dXJuICRkKEIsTCxXKX19ZnVuY3Rpb24gWG8oQixMKXtCPUtuKEIpO2Z1bmN0aW9uIFcoKXtyZXR1cm4gQi5pbmRleE9mKCJqIikhPS0xP2V1KEIsTCk6WWUuZ2V0KEwpfXZhciBRPVcoKTtyZXR1cm4gdHlwZW9mIFEhPSJmdW5jdGlvbiImJkJ0KCJ1bmtub3duIGZ1bmN0aW9uIHBvaW50ZXIgd2l0aCBzaWduYXR1cmUgIitCKyI6ICIrTCksUX12YXIgb2Y9dm9pZCAwO2Z1bmN0aW9uIGFmKEIpe3ZhciBMPXRlKEIpLFc9S24oTCk7cmV0dXJuIEsoTCksV31mdW5jdGlvbiBLaShCLEwpe3ZhciBXPVtdLFE9e307ZnVuY3Rpb24gZGUoRWUpe2lmKCFRW0VlXSYmIVdvW0VlXSl7aWYoRGFbRWVdKXtEYVtFZV0uZm9yRWFjaChkZSk7cmV0dXJufVcucHVzaChFZSksUVtFZV09ITB9fXRocm93IEwuZm9yRWFjaChkZSksbmV3IG9mKEIrIjogIitXLm1hcChhZikuam9pbihbIiwgIl0pKX1mdW5jdGlvbiB0dShCLEwsVyxRLGRlLEVlLHhlLF9lLHllLHplLEplLGd0LHJuKXtKZT1LbihKZSksRWU9WG8oZGUsRWUpLF9lJiYoX2U9WG8oeGUsX2UpKSx6ZSYmKHplPVhvKHllLHplKSkscm49WG8oZ3Qscm4pO3ZhciBUbj1vaShKZSk7TGMoVG4sZnVuY3Rpb24oKXtLaSgiQ2Fubm90IGNvbnN0cnVjdCAiK0plKyIgZHVlIHRvIHVuYm91bmQgdHlwZXMiLFtRXSl9KSxobyhbQixMLFddLFE/W1FdOltdLGZ1bmN0aW9uKG1vKXttbz1tb1swXTt2YXIgVW8sbWE7UT8oVW89bW8ucmVnaXN0ZXJlZENsYXNzLG1hPVVvLmluc3RhbmNlUHJvdG90eXBlKTptYT1MYS5wcm90b3R5cGU7dmFyIG5yPUJhKFRuLGZ1bmN0aW9uKCl7aWYoT2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpIT09dWYpdGhyb3cgbmV3IENyKCJVc2UgJ25ldycgdG8gY29uc3RydWN0ICIrSmUpO2lmKElyLmNvbnN0cnVjdG9yX2JvZHk9PT12b2lkIDApdGhyb3cgbmV3IENyKEplKyIgaGFzIG5vIGFjY2Vzc2libGUgY29uc3RydWN0b3IiKTt2YXIgaTE9SXIuY29uc3RydWN0b3JfYm9keVthcmd1bWVudHMubGVuZ3RoXTtpZihpMT09PXZvaWQgMCl0aHJvdyBuZXcgQ3IoIlRyaWVkIHRvIGludm9rZSBjdG9yIG9mICIrSmUrIiB3aXRoIGludmFsaWQgbnVtYmVyIG9mIHBhcmFtZXRlcnMgKCIrYXJndW1lbnRzLmxlbmd0aCsiKSAtIGV4cGVjdGVkICgiK09iamVjdC5rZXlzKElyLmNvbnN0cnVjdG9yX2JvZHkpLnRvU3RyaW5nKCkrIikgcGFyYW1ldGVycyBpbnN0ZWFkISIpO3JldHVybiBpMS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KSx1Zj1PYmplY3QuY3JlYXRlKG1hLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6bnJ9fSk7bnIucHJvdG90eXBlPXVmO3ZhciBJcj1uZXcgQmQoSmUsbnIsdWYscm4sVW8sRWUsX2UsemUpLGxTPW5ldyBsYShKZSxJciwhMCwhMSwhMSksYTE9bmV3IGxhKEplKyIqIixJciwhMSwhMSwhMSkscjE9bmV3IGxhKEplKyIgY29uc3QqIixJciwhMSwhMCwhMSk7cmV0dXJuICRzW0JdPXtwb2ludGVyVHlwZTphMSxjb25zdFBvaW50ZXJUeXBlOnIxfSxuZihUbixuciksW2xTLGExLHIxXX0pfWZ1bmN0aW9uIHpjKEIsTCl7Zm9yKHZhciBXPVtdLFE9MDtRPEI7USsrKVcucHVzaChLZVsoTD4+MikrUV0pO3JldHVybiBXfWZ1bmN0aW9uIG51KEIsTCxXLFEsZGUsRWUpe3YoTD4wKTt2YXIgeGU9emMoTCxXKTtkZT1YbyhRLGRlKTt2YXIgX2U9W0VlXSx5ZT1bXTtobyhbXSxbQl0sZnVuY3Rpb24oemUpe3plPXplWzBdO3ZhciBKZT0iY29uc3RydWN0b3IgIit6ZS5uYW1lO2lmKHplLnJlZ2lzdGVyZWRDbGFzcy5jb25zdHJ1Y3Rvcl9ib2R5PT09dm9pZCAwJiYoemUucmVnaXN0ZXJlZENsYXNzLmNvbnN0cnVjdG9yX2JvZHk9W10pLHplLnJlZ2lzdGVyZWRDbGFzcy5jb25zdHJ1Y3Rvcl9ib2R5W0wtMV0hPT12b2lkIDApdGhyb3cgbmV3IENyKCJDYW5ub3QgcmVnaXN0ZXIgbXVsdGlwbGUgY29uc3RydWN0b3JzIHdpdGggaWRlbnRpY2FsIG51bWJlciBvZiBwYXJhbWV0ZXJzICgiKyhMLTEpKyIpIGZvciBjbGFzcyAnIit6ZS5uYW1lKyInISBPdmVybG9hZCByZXNvbHV0aW9uIGlzIGN1cnJlbnRseSBvbmx5IHBlcmZvcm1lZCB1c2luZyB0aGUgcGFyYW1ldGVyIGNvdW50LCBub3QgYWN0dWFsIHR5cGUgaW5mbyEiKTtyZXR1cm4gemUucmVnaXN0ZXJlZENsYXNzLmNvbnN0cnVjdG9yX2JvZHlbTC0xXT1mdW5jdGlvbigpe0tpKCJDYW5ub3QgY29uc3RydWN0ICIremUubmFtZSsiIGR1ZSB0byB1bmJvdW5kIHR5cGVzIix4ZSl9LGhvKFtdLHhlLGZ1bmN0aW9uKGd0KXtyZXR1cm4gemUucmVnaXN0ZXJlZENsYXNzLmNvbnN0cnVjdG9yX2JvZHlbTC0xXT1mdW5jdGlvbigpe2FyZ3VtZW50cy5sZW5ndGghPT1MLTEmJkJ0KEplKyIgY2FsbGVkIHdpdGggIithcmd1bWVudHMubGVuZ3RoKyIgYXJndW1lbnRzLCBleHBlY3RlZCAiKyhMLTEpKSx5ZS5sZW5ndGg9MCxfZS5sZW5ndGg9TDtmb3IodmFyIFRuPTE7VG48TDsrK1RuKV9lW1RuXT1ndFtUbl0udG9XaXJlVHlwZSh5ZSxhcmd1bWVudHNbVG4tMV0pO3ZhciBtbz1kZS5hcHBseShudWxsLF9lKTtyZXR1cm4gZG4oeWUpLGd0WzBdLmZyb21XaXJlVHlwZShtbyl9LFtdfSksW119KX1mdW5jdGlvbiByZihCLEwpe2lmKCEoQiBpbnN0YW5jZW9mIEZ1bmN0aW9uKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJuZXdfIGNhbGxlZCB3aXRoIGNvbnN0cnVjdG9yIHR5cGUgIit0eXBlb2YgQisiIHdoaWNoIGlzIG5vdCBhIGZ1bmN0aW9uIik7dmFyIFc9QmEoQi5uYW1lfHwidW5rbm93bkZ1bmN0aW9uTmFtZSIsZnVuY3Rpb24oKXt9KTtXLnByb3RvdHlwZT1CLnByb3RvdHlwZTt2YXIgUT1uZXcgVyxkZT1CLmFwcGx5KFEsTCk7cmV0dXJuIGRlIGluc3RhbmNlb2YgT2JqZWN0P2RlOlF9ZnVuY3Rpb24gY2YoQixMLFcsUSxkZSl7dmFyIEVlPUwubGVuZ3RoO0VlPDImJkJ0KCJhcmdUeXBlcyBhcnJheSBzaXplIG1pc21hdGNoISBNdXN0IGF0IGxlYXN0IGdldCByZXR1cm4gdmFsdWUgYW5kICd0aGlzJyB0eXBlcyEiKTtmb3IodmFyIHhlPUxbMV0hPT1udWxsJiZXIT09bnVsbCxfZT0hMSx5ZT0xO3llPEwubGVuZ3RoOysreWUpaWYoTFt5ZV0hPT1udWxsJiZMW3llXS5kZXN0cnVjdG9yRnVuY3Rpb249PT12b2lkIDApe19lPSEwO2JyZWFrfWZvcih2YXIgemU9TFswXS5uYW1lIT09InZvaWQiLEplPSIiLGd0PSIiLHllPTA7eWU8RWUtMjsrK3llKUplKz0oeWUhPT0wPyIsICI6IiIpKyJhcmciK3llLGd0Kz0oeWUhPT0wPyIsICI6IiIpKyJhcmciK3llKyJXaXJlZCI7dmFyIHJuPSJyZXR1cm4gZnVuY3Rpb24gIitvaShCKSsiKCIrSmUrYCkgewppZiAoYXJndW1lbnRzLmxlbmd0aCAhPT0gYCsoRWUtMikrYCkgewp0aHJvd0JpbmRpbmdFcnJvcignZnVuY3Rpb24gYCtCKyIgY2FsbGVkIHdpdGggJyArIGFyZ3VtZW50cy5sZW5ndGggKyAnIGFyZ3VtZW50cywgZXhwZWN0ZWQgIisoRWUtMikrYCBhcmdzIScpOwp9CmA7X2UmJihybis9YHZhciBkZXN0cnVjdG9ycyA9IFtdOwpgKTt2YXIgVG49X2U/ImRlc3RydWN0b3JzIjoibnVsbCIsbW89WyJ0aHJvd0JpbmRpbmdFcnJvciIsImludm9rZXIiLCJmbiIsInJ1bkRlc3RydWN0b3JzIiwicmV0VHlwZSIsImNsYXNzUGFyYW0iXSxVbz1bQnQsUSxkZSxkbixMWzBdLExbMV1dO3hlJiYocm4rPSJ2YXIgdGhpc1dpcmVkID0gY2xhc3NQYXJhbS50b1dpcmVUeXBlKCIrVG4rYCwgdGhpcyk7CmApO2Zvcih2YXIgeWU9MDt5ZTxFZS0yOysreWUpcm4rPSJ2YXIgYXJnIit5ZSsiV2lyZWQgPSBhcmdUeXBlIit5ZSsiLnRvV2lyZVR5cGUoIitUbisiLCBhcmciK3llKyIpOyAvLyAiK0xbeWUrMl0ubmFtZStgCmAsbW8ucHVzaCgiYXJnVHlwZSIreWUpLFVvLnB1c2goTFt5ZSsyXSk7aWYoeGUmJihndD0idGhpc1dpcmVkIisoZ3QubGVuZ3RoPjA/IiwgIjoiIikrZ3QpLHJuKz0oemU/InZhciBydiA9ICI6IiIpKyJpbnZva2VyKGZuIisoZ3QubGVuZ3RoPjA/IiwgIjoiIikrZ3QrYCk7CmAsX2Upcm4rPWBydW5EZXN0cnVjdG9ycyhkZXN0cnVjdG9ycyk7CmA7ZWxzZSBmb3IodmFyIHllPXhlPzE6Mjt5ZTxMLmxlbmd0aDsrK3llKXt2YXIgbWE9eWU9PT0xPyJ0aGlzV2lyZWQiOiJhcmciKyh5ZS0yKSsiV2lyZWQiO0xbeWVdLmRlc3RydWN0b3JGdW5jdGlvbiE9PW51bGwmJihybis9bWErIl9kdG9yKCIrbWErIik7IC8vICIrTFt5ZV0ubmFtZStgCmAsbW8ucHVzaChtYSsiX2R0b3IiKSxVby5wdXNoKExbeWVdLmRlc3RydWN0b3JGdW5jdGlvbikpfXplJiYocm4rPWB2YXIgcmV0ID0gcmV0VHlwZS5mcm9tV2lyZVR5cGUocnYpOwpyZXR1cm4gcmV0OwpgKSxybis9YH0KYCxtby5wdXNoKHJuKTt2YXIgbnI9cmYoRnVuY3Rpb24sbW8pLmFwcGx5KG51bGwsVW8pO3JldHVybiBucn1mdW5jdGlvbiBvdShCLEwsVyxRLGRlLEVlLHhlLF9lKXt2YXIgeWU9emMoVyxRKTtMPUtuKEwpLEVlPVhvKGRlLEVlKSxobyhbXSxbQl0sZnVuY3Rpb24oemUpe3plPXplWzBdO3ZhciBKZT16ZS5uYW1lKyIuIitMO19lJiZ6ZS5yZWdpc3RlcmVkQ2xhc3MucHVyZVZpcnR1YWxGdW5jdGlvbnMucHVzaChMKTtmdW5jdGlvbiBndCgpe0tpKCJDYW5ub3QgY2FsbCAiK0plKyIgZHVlIHRvIHVuYm91bmQgdHlwZXMiLHllKX12YXIgcm49emUucmVnaXN0ZXJlZENsYXNzLmluc3RhbmNlUHJvdG90eXBlLFRuPXJuW0xdO3JldHVybiBUbj09PXZvaWQgMHx8VG4ub3ZlcmxvYWRUYWJsZT09PXZvaWQgMCYmVG4uY2xhc3NOYW1lIT09emUubmFtZSYmVG4uYXJnQ291bnQ9PT1XLTI/KGd0LmFyZ0NvdW50PVctMixndC5jbGFzc05hbWU9emUubmFtZSxybltMXT1ndCk6KGVmKHJuLEwsSmUpLHJuW0xdLm92ZXJsb2FkVGFibGVbVy0yXT1ndCksaG8oW10seWUsZnVuY3Rpb24obW8pe3ZhciBVbz1jZihKZSxtbyx6ZSxFZSx4ZSk7cmV0dXJuIHJuW0xdLm92ZXJsb2FkVGFibGU9PT12b2lkIDA/KFVvLmFyZ0NvdW50PVctMixybltMXT1Vbyk6cm5bTF0ub3ZlcmxvYWRUYWJsZVtXLTJdPVVvLFtdfSksW119KX1mdW5jdGlvbiBhdShCLEwsVyl7Qj1LbihCKSxobyhbXSxbTF0sZnVuY3Rpb24oUSl7cmV0dXJuIFE9UVswXSxuW0JdPVEuZnJvbVdpcmVUeXBlKFcpLFtdfSl9dmFyIEdjPVtdLE1vPVt7fSx7dmFsdWU6dm9pZCAwfSx7dmFsdWU6bnVsbH0se3ZhbHVlOiEwfSx7dmFsdWU6ITF9XTtmdW5jdGlvbiBWYyhCKXtCPjQmJi0tTW9bQl0ucmVmY291bnQ9PT0wJiYoTW9bQl09dm9pZCAwLEdjLnB1c2goQikpfWZ1bmN0aW9uIHJ1KCl7Zm9yKHZhciBCPTAsTD01O0w8TW8ubGVuZ3RoOysrTClNb1tMXSE9PXZvaWQgMCYmKytCO3JldHVybiBCfWZ1bmN0aW9uIGl1KCl7Zm9yKHZhciBCPTU7QjxNby5sZW5ndGg7KytCKWlmKE1vW0JdIT09dm9pZCAwKXJldHVybiBNb1tCXTtyZXR1cm4gbnVsbH1mdW5jdGlvbiBjdSgpe24uY291bnRfZW12YWxfaGFuZGxlcz1ydSxuLmdldF9maXJzdF9lbXZhbD1pdX1mdW5jdGlvbiBoYShCKXtzd2l0Y2goQil7Y2FzZSB2b2lkIDA6cmV0dXJuIDE7Y2FzZSBudWxsOnJldHVybiAyO2Nhc2UhMDpyZXR1cm4gMztjYXNlITE6cmV0dXJuIDQ7ZGVmYXVsdDp7dmFyIEw9R2MubGVuZ3RoP0djLnBvcCgpOk1vLmxlbmd0aDtyZXR1cm4gTW9bTF09e3JlZmNvdW50OjEsdmFsdWU6Qn0sTH19fWZ1bmN0aW9uIHN1KEIsTCl7TD1LbihMKSxpYShCLHtuYW1lOkwsZnJvbVdpcmVUeXBlOmZ1bmN0aW9uKFcpe3ZhciBRPU1vW1ddLnZhbHVlO3JldHVybiBWYyhXKSxRfSx0b1dpcmVUeXBlOmZ1bmN0aW9uKFcsUSl7cmV0dXJuIGhhKFEpfSxhcmdQYWNrQWR2YW5jZTo4LHJlYWRWYWx1ZUZyb21Qb2ludGVyOkNvLGRlc3RydWN0b3JGdW5jdGlvbjpudWxsfSl9ZnVuY3Rpb24gZnUoQixMLFcpe3N3aXRjaChMKXtjYXNlIDA6cmV0dXJuIGZ1bmN0aW9uKFEpe3ZhciBkZT1XP2FlOkFlO3JldHVybiB0aGlzLmZyb21XaXJlVHlwZShkZVtRXSl9O2Nhc2UgMTpyZXR1cm4gZnVuY3Rpb24oUSl7dmFyIGRlPVc/TmU6ZXQ7cmV0dXJuIHRoaXMuZnJvbVdpcmVUeXBlKGRlW1E+PjFdKX07Y2FzZSAyOnJldHVybiBmdW5jdGlvbihRKXt2YXIgZGU9Vz9LZTp0dDtyZXR1cm4gdGhpcy5mcm9tV2lyZVR5cGUoZGVbUT4+Ml0pfTtkZWZhdWx0OnRocm93IG5ldyBUeXBlRXJyb3IoIlVua25vd24gaW50ZWdlciB0eXBlOiAiK0IpfX1mdW5jdGlvbiBkdShCLEwsVyxRKXt2YXIgZGU9VWEoVyk7TD1LbihMKTtmdW5jdGlvbiBFZSgpe31FZS52YWx1ZXM9e30saWEoQix7bmFtZTpMLGNvbnN0cnVjdG9yOkVlLGZyb21XaXJlVHlwZTpmdW5jdGlvbih4ZSl7cmV0dXJuIHRoaXMuY29uc3RydWN0b3IudmFsdWVzW3hlXX0sdG9XaXJlVHlwZTpmdW5jdGlvbih4ZSxfZSl7cmV0dXJuIF9lLnZhbHVlfSxhcmdQYWNrQWR2YW5jZTo4LHJlYWRWYWx1ZUZyb21Qb2ludGVyOmZ1KEwsZGUsUSksZGVzdHJ1Y3RvckZ1bmN0aW9uOm51bGx9KSxMYyhMLEVlKX1mdW5jdGlvbiBxaShCLEwpe3ZhciBXPVdvW0JdO3JldHVybiBXPT09dm9pZCAwJiZCdChMKyIgaGFzIHVua25vd24gdHlwZSAiK2FmKEIpKSxXfWZ1bmN0aW9uIHV1KEIsTCxXKXt2YXIgUT1xaShCLCJlbnVtIik7TD1LbihMKTt2YXIgZGU9US5jb25zdHJ1Y3RvcixFZT1PYmplY3QuY3JlYXRlKFEuY29uc3RydWN0b3IucHJvdG90eXBlLHt2YWx1ZTp7dmFsdWU6V30sY29uc3RydWN0b3I6e3ZhbHVlOkJhKFEubmFtZSsiXyIrTCxmdW5jdGlvbigpe30pfX0pO2RlLnZhbHVlc1tXXT1FZSxkZVtMXT1FZX1mdW5jdGlvbiBNcihCKXtpZihCPT09bnVsbClyZXR1cm4ibnVsbCI7dmFyIEw9dHlwZW9mIEI7cmV0dXJuIEw9PT0ib2JqZWN0Inx8TD09PSJhcnJheSJ8fEw9PT0iZnVuY3Rpb24iP0IudG9TdHJpbmcoKToiIitCfWZ1bmN0aW9uIGx1KEIsTCl7c3dpdGNoKEwpe2Nhc2UgMjpyZXR1cm4gZnVuY3Rpb24oVyl7cmV0dXJuIHRoaXMuZnJvbVdpcmVUeXBlKFhlW1c+PjJdKX07Y2FzZSAzOnJldHVybiBmdW5jdGlvbihXKXtyZXR1cm4gdGhpcy5mcm9tV2lyZVR5cGUoTGVbVz4+M10pfTtkZWZhdWx0OnRocm93IG5ldyBUeXBlRXJyb3IoIlVua25vd24gZmxvYXQgdHlwZTogIitCKX19ZnVuY3Rpb24gaHUoQixMLFcpe3ZhciBRPVVhKFcpO0w9S24oTCksaWEoQix7bmFtZTpMLGZyb21XaXJlVHlwZTpmdW5jdGlvbihkZSl7cmV0dXJuIGRlfSx0b1dpcmVUeXBlOmZ1bmN0aW9uKGRlLEVlKXtpZih0eXBlb2YgRWUhPSJudW1iZXIiJiZ0eXBlb2YgRWUhPSJib29sZWFuIil0aHJvdyBuZXcgVHlwZUVycm9yKCdDYW5ub3QgY29udmVydCAiJytNcihFZSkrJyIgdG8gJyt0aGlzLm5hbWUpO3JldHVybiBFZX0sYXJnUGFja0FkdmFuY2U6OCxyZWFkVmFsdWVGcm9tUG9pbnRlcjpsdShMLFEpLGRlc3RydWN0b3JGdW5jdGlvbjpudWxsfSl9ZnVuY3Rpb24gbXUoQixMLFcsUSxkZSxFZSl7dmFyIHhlPXpjKEwsVyk7Qj1LbihCKSxkZT1YbyhRLGRlKSxMYyhCLGZ1bmN0aW9uKCl7S2koIkNhbm5vdCBjYWxsICIrQisiIGR1ZSB0byB1bmJvdW5kIHR5cGVzIix4ZSl9LEwtMSksaG8oW10seGUsZnVuY3Rpb24oX2Upe3ZhciB5ZT1bX2VbMF0sbnVsbF0uY29uY2F0KF9lLnNsaWNlKDEpKTtyZXR1cm4gbmYoQixjZihCLHllLG51bGwsZGUsRWUpLEwtMSksW119KX1mdW5jdGlvbiBidShCLEwsVyl7c3dpdGNoKEwpe2Nhc2UgMDpyZXR1cm4gVz9mdW5jdGlvbihkZSl7cmV0dXJuIGFlW2RlXX06ZnVuY3Rpb24oZGUpe3JldHVybiBBZVtkZV19O2Nhc2UgMTpyZXR1cm4gVz9mdW5jdGlvbihkZSl7cmV0dXJuIE5lW2RlPj4xXX06ZnVuY3Rpb24oZGUpe3JldHVybiBldFtkZT4+MV19O2Nhc2UgMjpyZXR1cm4gVz9mdW5jdGlvbihkZSl7cmV0dXJuIEtlW2RlPj4yXX06ZnVuY3Rpb24oZGUpe3JldHVybiB0dFtkZT4+Ml19O2RlZmF1bHQ6dGhyb3cgbmV3IFR5cGVFcnJvcigiVW5rbm93biBpbnRlZ2VyIHR5cGU6ICIrQil9fWZ1bmN0aW9uIHB1KEIsTCxXLFEsZGUpe0w9S24oTCksZGU9PT0tMSYmKGRlPTQyOTQ5NjcyOTUpO3ZhciBFZT1VYShXKSx4ZT1mdW5jdGlvbih6ZSl7cmV0dXJuIHplfTtpZihRPT09MCl7dmFyIF9lPTMyLTgqVzt4ZT1mdW5jdGlvbih6ZSl7cmV0dXJuIHplPDxfZT4+Pl9lfX12YXIgeWU9TC5pbmRleE9mKCJ1bnNpZ25lZCIpIT0tMTtpYShCLHtuYW1lOkwsZnJvbVdpcmVUeXBlOnhlLHRvV2lyZVR5cGU6ZnVuY3Rpb24oemUsSmUpe2lmKHR5cGVvZiBKZSE9Im51bWJlciImJnR5cGVvZiBKZSE9ImJvb2xlYW4iKXRocm93IG5ldyBUeXBlRXJyb3IoJ0Nhbm5vdCBjb252ZXJ0ICInK01yKEplKSsnIiB0byAnK3RoaXMubmFtZSk7aWYoSmU8UXx8SmU+ZGUpdGhyb3cgbmV3IFR5cGVFcnJvcignUGFzc2luZyBhIG51bWJlciAiJytNcihKZSkrJyIgZnJvbSBKUyBzaWRlIHRvIEMvQysrIHNpZGUgdG8gYW4gYXJndW1lbnQgb2YgdHlwZSAiJytMKyciLCB3aGljaCBpcyBvdXRzaWRlIHRoZSB2YWxpZCByYW5nZSBbJytRKyIsICIrZGUrIl0hIik7cmV0dXJuIHllP0plPj4+MDpKZXwwfSxhcmdQYWNrQWR2YW5jZTo4LHJlYWRWYWx1ZUZyb21Qb2ludGVyOmJ1KEwsRWUsUSE9PTApLGRlc3RydWN0b3JGdW5jdGlvbjpudWxsfSl9ZnVuY3Rpb24gZ3UoQixMLFcpe3ZhciBRPVtJbnQ4QXJyYXksVWludDhBcnJheSxJbnQxNkFycmF5LFVpbnQxNkFycmF5LEludDMyQXJyYXksVWludDMyQXJyYXksRmxvYXQzMkFycmF5LEZsb2F0NjRBcnJheV0sZGU9UVtMXTtmdW5jdGlvbiBFZSh4ZSl7eGU9eGU+PjI7dmFyIF9lPXR0LHllPV9lW3hlXSx6ZT1fZVt4ZSsxXTtyZXR1cm4gbmV3IGRlKHVlLHplLHllKX1XPUtuKFcpLGlhKEIse25hbWU6Vyxmcm9tV2lyZVR5cGU6RWUsYXJnUGFja0FkdmFuY2U6OCxyZWFkVmFsdWVGcm9tUG9pbnRlcjpFZX0se2lnbm9yZUR1cGxpY2F0ZVJlZ2lzdHJhdGlvbnM6ITB9KX1mdW5jdGlvbiBfdShCLEwpe0w9S24oTCk7dmFyIFc9TD09PSJzdGQ6OnN0cmluZyI7aWEoQix7bmFtZTpMLGZyb21XaXJlVHlwZTpmdW5jdGlvbihRKXt2YXIgZGU9dHRbUT4+Ml0sRWU7aWYoVylmb3IodmFyIHhlPVErNCxfZT0wO19lPD1kZTsrK19lKXt2YXIgeWU9USs0K19lO2lmKF9lPT1kZXx8QWVbeWVdPT0wKXt2YXIgemU9eWUteGUsSmU9RCh4ZSx6ZSk7RWU9PT12b2lkIDA/RWU9SmU6KEVlKz0iXDAiLEVlKz1KZSkseGU9eWUrMX19ZWxzZXtmb3IodmFyIGd0PW5ldyBBcnJheShkZSksX2U9MDtfZTxkZTsrK19lKWd0W19lXT1TdHJpbmcuZnJvbUNoYXJDb2RlKEFlW1ErNCtfZV0pO0VlPWd0LmpvaW4oIiIpfXJldHVybiBLKFEpLEVlfSx0b1dpcmVUeXBlOmZ1bmN0aW9uKFEsZGUpe2RlIGluc3RhbmNlb2YgQXJyYXlCdWZmZXImJihkZT1uZXcgVWludDhBcnJheShkZSkpO3ZhciBFZSx4ZT10eXBlb2YgZGU9PSJzdHJpbmciO3hlfHxkZSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXl8fGRlIGluc3RhbmNlb2YgVWludDhDbGFtcGVkQXJyYXl8fGRlIGluc3RhbmNlb2YgSW50OEFycmF5fHxCdCgiQ2Fubm90IHBhc3Mgbm9uLXN0cmluZyB0byBzdGQ6OnN0cmluZyIpLFcmJnhlP0VlPWZ1bmN0aW9uKCl7cmV0dXJuIE8oZGUpfTpFZT1mdW5jdGlvbigpe3JldHVybiBkZS5sZW5ndGh9O3ZhciBfZT1FZSgpLHllPWooNCtfZSsxKTtpZih0dFt5ZT4+Ml09X2UsVyYmeGUpSChkZSx5ZSs0LF9lKzEpO2Vsc2UgaWYoeGUpZm9yKHZhciB6ZT0wO3plPF9lOysremUpe3ZhciBKZT1kZS5jaGFyQ29kZUF0KHplKTtKZT4yNTUmJihLKHllKSxCdCgiU3RyaW5nIGhhcyBVVEYtMTYgY29kZSB1bml0cyB0aGF0IGRvIG5vdCBmaXQgaW4gOCBiaXRzIikpLEFlW3llKzQremVdPUplfWVsc2UgZm9yKHZhciB6ZT0wO3plPF9lOysremUpQWVbeWUrNCt6ZV09ZGVbemVdO3JldHVybiBRIT09bnVsbCYmUS5wdXNoKEsseWUpLHllfSxhcmdQYWNrQWR2YW5jZTo4LHJlYWRWYWx1ZUZyb21Qb2ludGVyOkNvLGRlc3RydWN0b3JGdW5jdGlvbjpmdW5jdGlvbihRKXtLKFEpfX0pfWZ1bmN0aW9uIHl1KEIsTCxXKXtXPUtuKFcpO3ZhciBRLGRlLEVlLHhlLF9lO0w9PT0yPyhRPW9lLGRlPWNlLHhlPWZlLEVlPWZ1bmN0aW9uKCl7cmV0dXJuIGV0fSxfZT0xKTpMPT09NCYmKFE9ZWUsZGU9YmUseGU9bGUsRWU9ZnVuY3Rpb24oKXtyZXR1cm4gdHR9LF9lPTIpLGlhKEIse25hbWU6Vyxmcm9tV2lyZVR5cGU6ZnVuY3Rpb24oeWUpe2Zvcih2YXIgemU9dHRbeWU+PjJdLEplPUVlKCksZ3Qscm49eWUrNCxUbj0wO1RuPD16ZTsrK1RuKXt2YXIgbW89eWUrNCtUbipMO2lmKFRuPT16ZXx8SmVbbW8+Pl9lXT09MCl7dmFyIFVvPW1vLXJuLG1hPVEocm4sVW8pO2d0PT09dm9pZCAwP2d0PW1hOihndCs9IlwwIixndCs9bWEpLHJuPW1vK0x9fXJldHVybiBLKHllKSxndH0sdG9XaXJlVHlwZTpmdW5jdGlvbih5ZSx6ZSl7dHlwZW9mIHplIT0ic3RyaW5nIiYmQnQoIkNhbm5vdCBwYXNzIG5vbi1zdHJpbmcgdG8gQysrIHN0cmluZyB0eXBlICIrVyk7dmFyIEplPXhlKHplKSxndD1qKDQrSmUrTCk7cmV0dXJuIHR0W2d0Pj4yXT1KZT4+X2UsZGUoemUsZ3QrNCxKZStMKSx5ZSE9PW51bGwmJnllLnB1c2goSyxndCksZ3R9LGFyZ1BhY2tBZHZhbmNlOjgscmVhZFZhbHVlRnJvbVBvaW50ZXI6Q28sZGVzdHJ1Y3RvckZ1bmN0aW9uOmZ1bmN0aW9uKHllKXtLKHllKX19KX1mdW5jdGlvbiBBdShCLEwsVyxRLGRlLEVlKXtHdFtCXT17bmFtZTpLbihMKSxyYXdDb25zdHJ1Y3RvcjpYbyhXLFEpLHJhd0Rlc3RydWN0b3I6WG8oZGUsRWUpLGZpZWxkczpbXX19ZnVuY3Rpb24gd3UoQixMLFcsUSxkZSxFZSx4ZSxfZSx5ZSx6ZSl7R3RbQl0uZmllbGRzLnB1c2goe2ZpZWxkTmFtZTpLbihMKSxnZXR0ZXJSZXR1cm5UeXBlOlcsZ2V0dGVyOlhvKFEsZGUpLGdldHRlckNvbnRleHQ6RWUsc2V0dGVyQXJndW1lbnRUeXBlOnhlLHNldHRlcjpYbyhfZSx5ZSksc2V0dGVyQ29udGV4dDp6ZX0pfWZ1bmN0aW9uIFR1KEIsTCl7TD1LbihMKSxpYShCLHtpc1ZvaWQ6ITAsbmFtZTpMLGFyZ1BhY2tBZHZhbmNlOjAsZnJvbVdpcmVUeXBlOmZ1bmN0aW9uKCl7fSx0b1dpcmVUeXBlOmZ1bmN0aW9uKFcsUSl7fX0pfWZ1bmN0aW9uIGZpKEIpe3JldHVybiBCfHxCdCgiQ2Fubm90IHVzZSBkZWxldGVkIHZhbC4gaGFuZGxlID0gIitCKSxNb1tCXS52YWx1ZX1mdW5jdGlvbiBFdShCLEwsVyl7Qj1maShCKSxMPXFpKEwsImVtdmFsOjphcyIpO3ZhciBRPVtdLGRlPWhhKFEpO3JldHVybiBLZVtXPj4yXT1kZSxMLnRvV2lyZVR5cGUoUSxCKX12YXIgUnU9e307ZnVuY3Rpb24gV2koQil7dmFyIEw9UnVbQl07cmV0dXJuIEw9PT12b2lkIDA/S24oQik6TH12YXIgSGM9W107ZnVuY3Rpb24geHUoQixMLFcsUSl7Qj1IY1tCXSxMPWZpKEwpLFc9V2koVyksQihMLFcsbnVsbCxRKX1mdW5jdGlvbiBzZigpe3JldHVybiB0eXBlb2YgZ2xvYmFsVGhpcz09Im9iamVjdCI/Z2xvYmFsVGhpczooZnVuY3Rpb24oKXtyZXR1cm4gRnVuY3Rpb259KSgpKCJyZXR1cm4gdGhpcyIpKCl9ZnVuY3Rpb24gT3UoQil7cmV0dXJuIEI9PT0wP2hhKHNmKCkpOihCPVdpKEIpLGhhKHNmKClbQl0pKX1mdW5jdGlvbiBTdShCKXt2YXIgTD1IYy5sZW5ndGg7cmV0dXJuIEhjLnB1c2goQiksTH1mdW5jdGlvbiBDdShCLEwpe2Zvcih2YXIgVz1uZXcgQXJyYXkoQiksUT0wO1E8QjsrK1EpV1tRXT1xaShLZVsoTD4+MikrUV0sInBhcmFtZXRlciAiK1EpO3JldHVybiBXfWZ1bmN0aW9uIE11KEIsTCl7Zm9yKHZhciBXPUN1KEIsTCksUT1XWzBdLGRlPVEubmFtZSsiXyQiK1cuc2xpY2UoMSkubWFwKGZ1bmN0aW9uKFRuKXtyZXR1cm4gVG4ubmFtZX0pLmpvaW4oIl8iKSsiJCIsRWU9WyJyZXRUeXBlIl0seGU9W1FdLF9lPSIiLHllPTA7eWU8Qi0xOysreWUpX2UrPSh5ZSE9PTA/IiwgIjoiIikrImFyZyIreWUsRWUucHVzaCgiYXJnVHlwZSIreWUpLHhlLnB1c2goV1sxK3llXSk7Zm9yKHZhciB6ZT1vaSgibWV0aG9kQ2FsbGVyXyIrZGUpLEplPSJyZXR1cm4gZnVuY3Rpb24gIit6ZStgKGhhbmRsZSwgbmFtZSwgZGVzdHJ1Y3RvcnMsIGFyZ3MpIHsKYCxndD0wLHllPTA7eWU8Qi0xOysreWUpSmUrPSIgICAgdmFyIGFyZyIreWUrIiA9IGFyZ1R5cGUiK3llKyIucmVhZFZhbHVlRnJvbVBvaW50ZXIoYXJncyIrKGd0PyIrIitndDoiIikrYCk7CmAsZ3QrPVdbeWUrMV0uYXJnUGFja0FkdmFuY2U7SmUrPSIgICAgdmFyIHJ2ID0gaGFuZGxlW25hbWVdKCIrX2UrYCk7CmA7Zm9yKHZhciB5ZT0wO3llPEItMTsrK3llKVdbeWUrMV0uZGVsZXRlT2JqZWN0JiYoSmUrPSIgICAgYXJnVHlwZSIreWUrIi5kZWxldGVPYmplY3QoYXJnIit5ZStgKTsKYCk7US5pc1ZvaWR8fChKZSs9YCAgICByZXR1cm4gcmV0VHlwZS50b1dpcmVUeXBlKGRlc3RydWN0b3JzLCBydik7CmApLEplKz1gfTsKYCxFZS5wdXNoKEplKTt2YXIgcm49cmYoRnVuY3Rpb24sRWUpLmFwcGx5KG51bGwseGUpO3JldHVybiBTdShybil9ZnVuY3Rpb24gTnUoQil7cmV0dXJuIEI9V2koQiksaGEobltCXSl9ZnVuY3Rpb24gSXUoQixMKXtyZXR1cm4gQj1maShCKSxMPWZpKEwpLGhhKEJbTF0pfWZ1bmN0aW9uIFB1KEIpe0I+NCYmKE1vW0JdLnJlZmNvdW50Kz0xKX1mdW5jdGlvbiBrdShCKXtmb3IodmFyIEw9IiIsVz0wO1c8QjsrK1cpTCs9KFchPT0wPyIsICI6IiIpKyJhcmciK1c7Zm9yKHZhciBRPSJyZXR1cm4gZnVuY3Rpb24gZW12YWxfYWxsb2NhdG9yXyIrQitgKGNvbnN0cnVjdG9yLCBhcmdUeXBlcywgYXJncykgewpgLFc9MDtXPEI7KytXKVErPSJ2YXIgYXJnVHlwZSIrVysiID0gcmVxdWlyZVJlZ2lzdGVyZWRUeXBlKE1vZHVsZVsnSEVBUDMyJ11bKGFyZ1R5cGVzID4+PiAyKSArICIrVysnXSwgInBhcmFtZXRlciAnK1crYCIpOwp2YXIgYXJnYCtXKyIgPSBhcmdUeXBlIitXK2AucmVhZFZhbHVlRnJvbVBvaW50ZXIoYXJncyk7CmFyZ3MgKz0gYXJnVHlwZWArVytgWydhcmdQYWNrQWR2YW5jZSddOwpgO3JldHVybiBRKz0idmFyIG9iaiA9IG5ldyBjb25zdHJ1Y3RvcigiK0wrYCk7CnJldHVybiBfX2VtdmFsX3JlZ2lzdGVyKG9iaik7Cn0KYCxuZXcgRnVuY3Rpb24oInJlcXVpcmVSZWdpc3RlcmVkVHlwZSIsIk1vZHVsZSIsIl9fZW12YWxfcmVnaXN0ZXIiLFEpKHFpLG4saGEpfXZhciBmZj17fTtmdW5jdGlvbiB2dShCLEwsVyxRKXtCPWZpKEIpO3ZhciBkZT1mZltMXTtyZXR1cm4gZGV8fChkZT1rdShMKSxmZltMXT1kZSksZGUoQixXLFEpfWZ1bmN0aW9uIEZ1KEIpe3JldHVybiBoYShXaShCKSl9ZnVuY3Rpb24gRHUoQil7dmFyIEw9TW9bQl0udmFsdWU7ZG4oTCksVmMoQil9ZnVuY3Rpb24gQnUoKXt6dCgpfWZ1bmN0aW9uIFV1KEIsTCxXKXtBZS5jb3B5V2l0aGluKEIsTCxMK1cpfWZ1bmN0aW9uIEx1KEIpe3RyeXtyZXR1cm4gQS5ncm93KEItdWUuYnl0ZUxlbmd0aCs2NTUzNT4+PjE2KSxqZShBLmJ1ZmZlciksMX1jYXRjaHt9fWZ1bmN0aW9uIGp1KEIpe3ZhciBMPUFlLmxlbmd0aDtCPUI+Pj4wO3ZhciBXPTIxNDc0ODM2NDg7aWYoQj5XKXJldHVybiExO2Zvcih2YXIgUT0xO1E8PTQ7USo9Mil7dmFyIGRlPUwqKDErLjIvUSk7ZGU9TWF0aC5taW4oZGUsQisxMDA2NjMyOTYpO3ZhciBFZT1NYXRoLm1pbihXLHBlKE1hdGgubWF4KEIsZGUpLDY1NTM2KSkseGU9THUoRWUpO2lmKHhlKXJldHVybiEwfXJldHVybiExfXZhciBYaT17bWFwcGluZ3M6e30sYnVmZmVyczpbbnVsbCxbXSxbXV0scHJpbnRDaGFyOmZ1bmN0aW9uKEIsTCl7dmFyIFc9WGkuYnVmZmVyc1tCXTtMPT09MHx8TD09PTEwPygoQj09PTE/UzpDKSh6KFcsMCkpLFcubGVuZ3RoPTApOlcucHVzaChMKX0sdmFyYXJnczp2b2lkIDAsZ2V0OmZ1bmN0aW9uKCl7WGkudmFyYXJncys9NDt2YXIgQj1LZVtYaS52YXJhcmdzLTQ+PjJdO3JldHVybiBCfSxnZXRTdHI6ZnVuY3Rpb24oQil7dmFyIEw9RChCKTtyZXR1cm4gTH0sZ2V0NjQ6ZnVuY3Rpb24oQixMKXtyZXR1cm4gQn19O2Z1bmN0aW9uIHp1KEIpe3JldHVybiAwfWZ1bmN0aW9uIEd1KEIsTCxXLFEsZGUpe31mdW5jdGlvbiBWdShCLEwsVyxRKXtmb3IodmFyIGRlPTAsRWU9MDtFZTxXO0VlKyspe2Zvcih2YXIgeGU9S2VbTCtFZSo4Pj4yXSxfZT1LZVtMKyhFZSo4KzQpPj4yXSx5ZT0wO3llPF9lO3llKyspWGkucHJpbnRDaGFyKEIsQWVbeGUreWVdKTtkZSs9X2V9cmV0dXJuIEtlW1E+PjJdPWRlLDB9ZnVuY3Rpb24gSHUoQil7TihCfDApfVZpPW4uSW50ZXJuYWxFcnJvcj1haShFcnJvciwiSW50ZXJuYWxFcnJvciIpLHZjKCksQ3I9bi5CaW5kaW5nRXJyb3I9YWkoRXJyb3IsIkJpbmRpbmdFcnJvciIpLERkKCksWmQoKSxXZCgpLG9mPW4uVW5ib3VuZFR5cGVFcnJvcj1haShFcnJvciwiVW5ib3VuZFR5cGVFcnJvciIpLGN1KCk7dmFyIEt1PXt0OndvLEk6Q2QseDp0dSx3Om51LGQ6b3UsazphdSxIOnN1LG46ZHUsYTp1dSxBOmh1LGk6bXUsajpwdSxoOmd1LEI6X3Usdjp5dSx1OkF1LGM6d3UsSjpUdSxtOkV1LHM6eHUsYjpWYyx5Ok91LHA6TXUscjpOdSxlOkl1LGc6UHUscTp2dSxmOkZ1LGw6RHUsbzpCdSxFOlV1LEY6anUsRzp6dSxDOkd1LHo6VnUsRDpIdX0sZGY9a24oKSxPdD1uLl9fX3dhc21fY2FsbF9jdG9ycz1mdW5jdGlvbigpe3JldHVybihPdD1uLl9fX3dhc21fY2FsbF9jdG9ycz1uLmFzbS5MKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LGo9bi5fbWFsbG9jPWZ1bmN0aW9uKCl7cmV0dXJuKGo9bi5fbWFsbG9jPW4uYXNtLk0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sSz1uLl9mcmVlPWZ1bmN0aW9uKCl7cmV0dXJuKEs9bi5fZnJlZT1uLmFzbS5OKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LHRlPW4uX19fZ2V0VHlwZU5hbWU9ZnVuY3Rpb24oKXtyZXR1cm4odGU9bi5fX19nZXRUeXBlTmFtZT1uLmFzbS5QKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LE1lPW4uX19fZW1iaW5kX3JlZ2lzdGVyX25hdGl2ZV9hbmRfYnVpbHRpbl90eXBlcz1mdW5jdGlvbigpe3JldHVybihNZT1uLl9fX2VtYmluZF9yZWdpc3Rlcl9uYXRpdmVfYW5kX2J1aWx0aW5fdHlwZXM9bi5hc20uUSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxjdD1uLmR5bkNhbGxfamlqaT1mdW5jdGlvbigpe3JldHVybihjdD1uLmR5bkNhbGxfamlqaT1uLmFzbS5SKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LHB0O2Z1bmN0aW9uIE5yKEIpe3RoaXMubmFtZT0iRXhpdFN0YXR1cyIsdGhpcy5tZXNzYWdlPSJQcm9ncmFtIHRlcm1pbmF0ZWQgd2l0aCBleGl0KCIrQisiKSIsdGhpcy5zdGF0dXM9Qn13bj1mdW5jdGlvbiBCKCl7cHR8fEtjKCkscHR8fCh3bj1CKX07ZnVuY3Rpb24gS2MoQil7aWYoQj1CfHxmLFp0PjB8fChQdCgpLFp0PjApKXJldHVybjtmdW5jdGlvbiBMKCl7cHR8fChwdD0hMCxuLmNhbGxlZFJ1bj0hMCwheCYmKEx0KCkscWUoKSxvKG4pLG4ub25SdW50aW1lSW5pdGlhbGl6ZWQmJm4ub25SdW50aW1lSW5pdGlhbGl6ZWQoKSxWZSgpKSl9bi5zZXRTdGF0dXM/KG4uc2V0U3RhdHVzKCJSdW5uaW5nLi4uIiksc2V0VGltZW91dChmdW5jdGlvbigpe3NldFRpbWVvdXQoZnVuY3Rpb24oKXtuLnNldFN0YXR1cygiIil9LDEpLEwoKX0sMSkpOkwoKX1pZihuLnJ1bj1LYyxuLnByZUluaXQpZm9yKHR5cGVvZiBuLnByZUluaXQ9PSJmdW5jdGlvbiImJihuLnByZUluaXQ9W24ucHJlSW5pdF0pO24ucHJlSW5pdC5sZW5ndGg+MDspbi5wcmVJbml0LnBvcCgpKCk7cmV0dXJuIEtjKCksdC5yZWFkeX0pfSkoKTt0eXBlb2YgSW09PSJvYmplY3QiJiZ0eXBlb2YgV3k9PSJvYmplY3QiP1d5LmV4cG9ydHM9cXk6dHlwZW9mIGRlZmluZT09ImZ1bmN0aW9uIiYmZGVmaW5lLmFtZD9kZWZpbmUoW10sZnVuY3Rpb24oKXtyZXR1cm4gcXl9KTp0eXBlb2YgSW09PSJvYmplY3QiJiYoSW0uQkFTSVM9cXkpfSk7dmFyIFh5PXt9O3J0KFh5LHtkZWZhdWx0OigpPT5INn0pO2Z1bmN0aW9uIEw2KGUsdCl7bGV0IG49ZS5rdHgyQnVmZmVyLG89ZS5zdXBwb3J0ZWRUYXJnZXRGb3JtYXRzLGE7dHJ5e2E9ZVMobil9Y2F0Y2h7dGhyb3cgbmV3IHV0KCJJbnZhbGlkIEtUWDIgZmlsZS4iKX1pZihhLmxheWVyQ291bnQhPT0wKXRocm93IG5ldyB1dCgiS1RYMiB0ZXh0dXJlIGFycmF5cyBhcmUgbm90IHN1cHBvcnRlZC4iKTtpZihhLnBpeGVsRGVwdGghPT0wKXRocm93IG5ldyB1dCgiS1RYMiAzRCB0ZXh0dXJlcyBhcmUgdW5zdXBwb3J0ZWQuIik7bGV0IHI9YS5kYXRhRm9ybWF0RGVzY3JpcHRvclswXSxpPW5ldyBBcnJheShhLmxldmVsQ291bnQpO3JldHVybiBhLnZrRm9ybWF0PT09MCYmKHIuY29sb3JNb2RlbD09PXJTfHxyLmNvbG9yTW9kZWw9PT1pUyk/ejYobixhLG8sUG0sdCxpKToodC5wdXNoKG4uYnVmZmVyKSxqNihhLGkpKSxpfWZ1bmN0aW9uIGo2KGUsdCl7bGV0IG49ZS52a0Zvcm1hdD09PVNkLlZLX0ZPUk1BVF9SOEc4QjhfU1JHQj9Ybi5SR0I6WG4uUkdCQSxvO2UudmtGb3JtYXQ9PT1TZC5WS19GT1JNQVRfUjhHOEI4QThfVU5PUk0/bz1sby5VTlNJR05FRF9CWVRFOmUudmtGb3JtYXQ9PT1TZC5WS19GT1JNQVRfUjE2RzE2QjE2QTE2X1NGTE9BVD9vPWxvLkhBTEZfRkxPQVQ6ZS52a0Zvcm1hdD09PVNkLlZLX0ZPUk1BVF9SMzJHMzJCMzJBMzJfU0ZMT0FUJiYobz1sby5GTE9BVCk7Zm9yKGxldCBhPTA7YTxlLmxldmVscy5sZW5ndGg7KythKXtsZXQgcj17fTt0W2FdPXI7bGV0IGk9ZS5sZXZlbHNbYV0ubGV2ZWxEYXRhLGY9ZS5waXhlbFdpZHRoPj5hLGQ9ZS5waXhlbEhlaWdodD4+YSxjPWYqZCpYbi5jb21wb25lbnRzTGVuZ3RoKG4pO2ZvcihsZXQgdT0wO3U8ZS5mYWNlQ291bnQ7Kyt1KXtsZXQgbD1pLmJ5dGVPZmZzZXQrYyplLnR5cGVTaXplKnUsaDshZyhvKXx8bG8uc2l6ZUluQnl0ZXMobyk9PT0xP2g9bmV3IFVpbnQ4QXJyYXkoaS5idWZmZXIsbCxjKTpsby5zaXplSW5CeXRlcyhvKT09PTI/aD1uZXcgVWludDE2QXJyYXkoaS5idWZmZXIsbCxjKTpoPW5ldyBGbG9hdDMyQXJyYXkoaS5idWZmZXIsbCxjKSxyW2FTW3VdXT17aW50ZXJuYWxGb3JtYXQ6bixkYXRhdHlwZTpvLHdpZHRoOmYsaGVpZ2h0OmQsbGV2ZWxCdWZmZXI6aH19fX1mdW5jdGlvbiB6NihlLHQsbixvLGEscil7bGV0IGk9bmV3IG8uS1RYMkZpbGUoZSksZj1pLmdldFdpZHRoKCksZD1pLmdldEhlaWdodCgpLGM9aS5nZXRMZXZlbHMoKSx1PWkuZ2V0SGFzQWxwaGEoKTtpZighKGY+MCl8fCEoZD4wKXx8IShjPjApKXRocm93IGkuY2xvc2UoKSxpLmRlbGV0ZSgpLG5ldyB1dCgiSW52YWxpZCBLVFgyIGZpbGUiKTtsZXQgbCxoLG09dC5kYXRhRm9ybWF0RGVzY3JpcHRvclswXSxiPW8udHJhbnNjb2Rlcl90ZXh0dXJlX2Zvcm1hdDtpZihtLmNvbG9yTW9kZWw9PT1yUylpZihuLmV0YylsPXU/WG4uUkdCQThfRVRDMl9FQUM6WG4uUkdCOF9FVEMyLGg9dT9iLmNURkVUQzJfUkdCQTpiLmNURkVUQzFfUkdCO2Vsc2UgaWYobi5ldGMxJiYhdSlsPVhuLlJHQl9FVEMxLGg9Yi5jVEZFVEMxX1JHQjtlbHNlIGlmKG4uczN0YylsPXU/WG4uUkdCQV9EWFQ1OlhuLlJHQl9EWFQxLGg9dT9iLmNURkJDM19SR0JBOmIuY1RGQkMxX1JHQjtlbHNlIGlmKG4ucHZydGMpbD11P1huLlJHQkFfUFZSVENfNEJQUFYxOlhuLlJHQl9QVlJUQ180QlBQVjEsaD11P2IuY1RGUFZSVEMxXzRfUkdCQTpiLmNURlBWUlRDMV80X1JHQjtlbHNlIGlmKG4uYXN0YylsPVhuLlJHQkFfQVNUQyxoPWIuY1RGQVNUQ180eDRfUkdCQTtlbHNlIGlmKG4uYmM3KWw9WG4uUkdCQV9CQzcsaD1iLmNURkJDN19SR0JBO2Vsc2UgdGhyb3cgbmV3IHV0KCJObyB0cmFuc2NvZGluZyBmb3JtYXQgdGFyZ2V0IGF2YWlsYWJsZSBmb3IgRVRDMVMgY29tcHJlc3NlZCBrdHgyLiIpO2Vsc2UgaWYobS5jb2xvck1vZGVsPT09aVMpaWYobi5hc3RjKWw9WG4uUkdCQV9BU1RDLGg9Yi5jVEZBU1RDXzR4NF9SR0JBO2Vsc2UgaWYobi5iYzcpbD1Ybi5SR0JBX0JDNyxoPWIuY1RGQkM3X1JHQkE7ZWxzZSBpZihuLnMzdGMpbD11P1huLlJHQkFfRFhUNTpYbi5SR0JfRFhUMSxoPXU/Yi5jVEZCQzNfUkdCQTpiLmNURkJDMV9SR0I7ZWxzZSBpZihuLmV0YylsPXU/WG4uUkdCQThfRVRDMl9FQUM6WG4uUkdCOF9FVEMyLGg9dT9iLmNURkVUQzJfUkdCQTpiLmNURkVUQzFfUkdCO2Vsc2UgaWYobi5ldGMxJiYhdSlsPVhuLlJHQl9FVEMxLGg9Yi5jVEZFVEMxX1JHQjtlbHNlIGlmKG4ucHZydGMpbD11P1huLlJHQkFfUFZSVENfNEJQUFYxOlhuLlJHQl9QVlJUQ180QlBQVjEsaD11P2IuY1RGUFZSVEMxXzRfUkdCQTpiLmNURlBWUlRDMV80X1JHQjtlbHNlIHRocm93IG5ldyB1dCgiTm8gdHJhbnNjb2RpbmcgZm9ybWF0IHRhcmdldCBhdmFpbGFibGUgZm9yIFVBU1RDIGNvbXByZXNzZWQga3R4Mi4iKTtpZighaS5zdGFydFRyYW5zY29kaW5nKCkpdGhyb3cgaS5jbG9zZSgpLGkuZGVsZXRlKCksbmV3IHV0KCJzdGFydFRyYW5zY29kaW5nKCkgZmFpbGVkIik7Zm9yKGxldCBwPTA7cDx0LmxldmVscy5sZW5ndGg7KytwKXtsZXQgeT17fTtyW3BdPXksZj10LnBpeGVsV2lkdGg+PnAsZD10LnBpeGVsSGVpZ2h0Pj5wO2xldCBUPWkuZ2V0SW1hZ2VUcmFuc2NvZGVkU2l6ZUluQnl0ZXMocCwwLDAsaC52YWx1ZSksXz1uZXcgVWludDhBcnJheShUKSxFPWkudHJhbnNjb2RlSW1hZ2UoXyxwLDAsMCxoLnZhbHVlLDAsLTEsLTEpO2lmKCFnKEUpKXRocm93IG5ldyB1dCgidHJhbnNjb2RlSW1hZ2UoKSBmYWlsZWQuIik7YS5wdXNoKF8uYnVmZmVyKSx5W2FTWzBdXT17aW50ZXJuYWxGb3JtYXQ6bCx3aWR0aDpmLGhlaWdodDpkLGxldmVsQnVmZmVyOl99fXJldHVybiBpLmNsb3NlKCksaS5kZWxldGUoKSxyfWFzeW5jIGZ1bmN0aW9uIEc2KGUsdCl7bGV0IG49ZS53ZWJBc3NlbWJseUNvbmZpZyxvPW9TLmRlZmF1bHQ/P3NlbGYuQkFTSVM7cmV0dXJuIGcobi53YXNtQmluYXJ5RmlsZSk/UG09YXdhaXQgbyhuKTpQbT1hd2FpdCBvKCksUG0uaW5pdGlhbGl6ZUJhc2lzKCksITB9ZnVuY3Rpb24gVjYoZSx0KXtsZXQgbj1lLndlYkFzc2VtYmx5Q29uZmlnO3JldHVybiBnKG4pP0c2KGUsdCk6TDYoZSx0KX12YXIgb1MsYVMsclMsaVMsUG0sSDYsWXk9WCgoKT0+e3NlKCk7Wk8oKTtqYSgpO1FPKCk7S3koKTtVbigpO3RTKCk7b1M9Y2EoblMoKSwxKSxhUz1bInBvc2l0aXZlWCIsIm5lZ2F0aXZlWCIsInBvc2l0aXZlWSIsIm5lZ2F0aXZlWSIsInBvc2l0aXZlWiIsIm5lZ2F0aXZlWiJdLHJTPTE2MyxpUz0xNjY7SDY9QXQoVjYpfSk7dmFyIGNTPXt9O3ZhciBKeT1YKCgpPT57c2VsZi5vbm1lc3NhZ2U9ZnVuY3Rpb24oZSl7bGV0IHQ9ZS5kYXRhLmFycmF5LG49c2VsZi53ZWJraXRQb3N0TWVzc2FnZXx8c2VsZi5wb3N0TWVzc2FnZTt0cnl7bih7YXJyYXk6dH0sW3QuYnVmZmVyXSl9Y2F0Y2h7bih7fSl9fX0pO3ZhciBrbSx2bSxzUz1YKCgpPT57anQoKTtJZSgpO3NlKCk7a209e307a20uY2xpcFRyaWFuZ2xlQXRBeGlzQWxpZ25lZFRocmVzaG9sZD1mdW5jdGlvbihlLHQsbixvLGEscil7ZyhyKT9yLmxlbmd0aD0wOnI9W107bGV0IGksZixkO3Q/KGk9bjxlLGY9bzxlLGQ9YTxlKTooaT1uPmUsZj1vPmUsZD1hPmUpO2xldCBjPWkrZitkLHUsbCxoLG0sYixwO3JldHVybiBjPT09MT9pPyh1PShlLW4pLyhvLW4pLGw9KGUtbikvKGEtbiksci5wdXNoKDEpLHIucHVzaCgyKSxsIT09MSYmKHIucHVzaCgtMSksci5wdXNoKDApLHIucHVzaCgyKSxyLnB1c2gobCkpLHUhPT0xJiYoci5wdXNoKC0xKSxyLnB1c2goMCksci5wdXNoKDEpLHIucHVzaCh1KSkpOmY/KGg9KGUtbykvKGEtbyksbT0oZS1vKS8obi1vKSxyLnB1c2goMiksci5wdXNoKDApLG0hPT0xJiYoci5wdXNoKC0xKSxyLnB1c2goMSksci5wdXNoKDApLHIucHVzaChtKSksaCE9PTEmJihyLnB1c2goLTEpLHIucHVzaCgxKSxyLnB1c2goMiksci5wdXNoKGgpKSk6ZCYmKGI9KGUtYSkvKG4tYSkscD0oZS1hKS8oby1hKSxyLnB1c2goMCksci5wdXNoKDEpLHAhPT0xJiYoci5wdXNoKC0xKSxyLnB1c2goMiksci5wdXNoKDEpLHIucHVzaChwKSksYiE9PTEmJihyLnB1c2goLTEpLHIucHVzaCgyKSxyLnB1c2goMCksci5wdXNoKGIpKSk6Yz09PTI/IWkmJm4hPT1lPyhtPShlLW8pLyhuLW8pLGI9KGUtYSkvKG4tYSksci5wdXNoKDApLHIucHVzaCgtMSksci5wdXNoKDEpLHIucHVzaCgwKSxyLnB1c2gobSksci5wdXNoKC0xKSxyLnB1c2goMiksci5wdXNoKDApLHIucHVzaChiKSk6IWYmJm8hPT1lPyhwPShlLWEpLyhvLWEpLHU9KGUtbikvKG8tbiksci5wdXNoKDEpLHIucHVzaCgtMSksci5wdXNoKDIpLHIucHVzaCgxKSxyLnB1c2gocCksci5wdXNoKC0xKSxyLnB1c2goMCksci5wdXNoKDEpLHIucHVzaCh1KSk6IWQmJmEhPT1lJiYobD0oZS1uKS8oYS1uKSxoPShlLW8pLyhhLW8pLHIucHVzaCgyKSxyLnB1c2goLTEpLHIucHVzaCgwKSxyLnB1c2goMiksci5wdXNoKGwpLHIucHVzaCgtMSksci5wdXNoKDEpLHIucHVzaCgyKSxyLnB1c2goaCkpOmMhPT0zJiYoci5wdXNoKDApLHIucHVzaCgxKSxyLnB1c2goMikpLHJ9O2ttLmNvbXB1dGVCYXJ5Y2VudHJpY0Nvb3JkaW5hdGVzPWZ1bmN0aW9uKGUsdCxuLG8sYSxyLGksZixkKXtsZXQgYz1uLWksdT1pLWEsbD1yLWYsaD1vLWYsbT0xLyhsKmMrdSpoKSxiPXQtZixwPWUtaSx5PShsKnArdSpiKSptLFQ9KC1oKnArYypiKSptLF89MS15LVQ7cmV0dXJuIGcoZCk/KGQueD15LGQueT1ULGQuej1fLGQpOm5ldyBzKHksVCxfKX07a20uY29tcHV0ZUxpbmVTZWdtZW50TGluZVNlZ21lbnRJbnRlcnNlY3Rpb249ZnVuY3Rpb24oZSx0LG4sbyxhLHIsaSxmLGQpe2xldCBjPShpLWEpKih0LXIpLShmLXIpKihlLWEpLHU9KG4tZSkqKHQtciktKG8tdCkqKGUtYSksbD0oZi1yKSoobi1lKS0oaS1hKSooby10KTtpZihsPT09MClyZXR1cm47bGV0IGg9Yy9sLG09dS9sO2lmKGg+PTAmJmg8PTEmJm0+PTAmJm08PTEpcmV0dXJuIGcoZCl8fChkPW5ldyBZKSxkLng9ZStoKihuLWUpLGQueT10K2gqKG8tdCksZH07dm09a219KTt2YXIgWnk9e307cnQoWnkse2RlZmF1bHQ6KCk9Pml6fSk7ZnVuY3Rpb24gb3ooZSx0KXtsZXQgbj1lLmlzRWFzdENoaWxkLG89ZS5pc05vcnRoQ2hpbGQsYT1uP3RyOjAscj1uP1FuOnRyLGk9bz90cjowLGY9bz9Rbjp0cixkPVc2LGM9WDYsdT1ZNixsPVo2O2QubGVuZ3RoPTAsYy5sZW5ndGg9MCx1Lmxlbmd0aD0wLGwubGVuZ3RoPTA7bGV0IGg9SjY7aC5sZW5ndGg9MDtsZXQgbT17fSxiPWUudmVydGljZXMscD1lLmluZGljZXM7cD1wLnN1YmFycmF5KDAsZS5pbmRleENvdW50V2l0aG91dFNraXJ0cyk7bGV0IHk9cmEuY2xvbmUoZS5lbmNvZGluZyksVD15Lmhhc1ZlcnRleE5vcm1hbHMsXz0wLEU9ZS52ZXJ0ZXhDb3VudFdpdGhvdXRTa2lydHMsdz1lLm1pbmltdW1IZWlnaHQsUj1lLm1heGltdW1IZWlnaHQsUz1uZXcgQXJyYXkoRSksQz1uZXcgQXJyYXkoRSksST1uZXcgQXJyYXkoRSksTj1UP25ldyBBcnJheShFKjIpOnZvaWQgMCxQPTIwLEYsQSx4LE0sdjtmb3IoQT0wLHg9MDtBPEU7KytBLHgrPTIpe2xldCBDdD15LmRlY29kZVRleHR1cmVDb29yZGluYXRlcyhiLEEsdHopO2lmKEY9eS5kZWNvZGVIZWlnaHQoYixBKSxNPWsuY2xhbXAoQ3QueCpRbnwwLDAsUW4pLHY9ay5jbGFtcChDdC55KlFufDAsMCxRbiksSVtBXT1rLmNsYW1wKChGLXcpLyhSLXcpKlFufDAsMCxRbiksTTxQJiYoTT0wKSx2PFAmJih2PTApLFFuLU08UCYmKE09UW4pLFFuLXY8UCYmKHY9UW4pLFNbQV09TSxDW0FdPXYsVCl7bGV0IGh0PXkuZ2V0T2N0RW5jb2RlZE5vcm1hbChiLEEsbnopO05beF09aHQueCxOW3grMV09aHQueX0obiYmTT49dHJ8fCFuJiZNPD10cikmJihvJiZ2Pj10cnx8IW8mJnY8PXRyKSYmKG1bQV09XyxkLnB1c2goTSksYy5wdXNoKHYpLHUucHVzaChJW0FdKSxUJiYobC5wdXNoKE5beF0pLGwucHVzaChOW3grMV0pKSwrK18pfWxldCBVPVtdO1UucHVzaChuZXcgJG4pLFUucHVzaChuZXcgJG4pLFUucHVzaChuZXcgJG4pO2xldCB6PVtdO3oucHVzaChuZXcgJG4pLHoucHVzaChuZXcgJG4pLHoucHVzaChuZXcgJG4pO2xldCBELEc7Zm9yKEE9MDtBPHAubGVuZ3RoO0ErPTMpe2xldCBDdD1wW0FdLGh0PXBbQSsxXSxLdD1wW0ErMl0sUHQ9U1tDdF0sTHQ9U1todF0scWU9U1tLdF07VVswXS5pbml0aWFsaXplSW5kZXhlZChTLEMsSSxOLEN0KSxVWzFdLmluaXRpYWxpemVJbmRleGVkKFMsQyxJLE4saHQpLFVbMl0uaW5pdGlhbGl6ZUluZGV4ZWQoUyxDLEksTixLdCk7bGV0IFZlPXZtLmNsaXBUcmlhbmdsZUF0QXhpc0FsaWduZWRUaHJlc2hvbGQodHIsbixQdCxMdCxxZSxLNik7RD0wLCEoRD49VmUubGVuZ3RoKSYmKEQ9elswXS5pbml0aWFsaXplRnJvbUNsaXBSZXN1bHQoVmUsRCxVKSwhKEQ+PVZlLmxlbmd0aCkmJihEPXpbMV0uaW5pdGlhbGl6ZUZyb21DbGlwUmVzdWx0KFZlLEQsVSksIShEPj1WZS5sZW5ndGgpJiYoRD16WzJdLmluaXRpYWxpemVGcm9tQ2xpcFJlc3VsdChWZSxELFUpLEc9dm0uY2xpcFRyaWFuZ2xlQXRBeGlzQWxpZ25lZFRocmVzaG9sZCh0cixvLHpbMF0uZ2V0VigpLHpbMV0uZ2V0VigpLHpbMl0uZ2V0VigpLGZTKSxkUyhkLGMsdSxsLGgsbSxHLHosVCksRDxWZS5sZW5ndGgmJih6WzJdLmNsb25lKHpbMV0pLHpbMl0uaW5pdGlhbGl6ZUZyb21DbGlwUmVzdWx0KFZlLEQsVSksRz12bS5jbGlwVHJpYW5nbGVBdEF4aXNBbGlnbmVkVGhyZXNob2xkKHRyLG8selswXS5nZXRWKCkselsxXS5nZXRWKCkselsyXS5nZXRWKCksZlMpLGRTKGQsYyx1LGwsaCxtLEcseixUKSkpKSl9bGV0IEg9bj8tUW46MCxPPW8/LVFuOjAsWj1bXSxvZT1bXSxjZT1bXSxmZT1bXSxlZT1OdW1iZXIuTUFYX1ZBTFVFLGJlPS1lZSxsZT1xNjtsZS5sZW5ndGg9MDtsZXQgcGU9cS5jbG9uZShlLmVsbGlwc29pZCksdWU9U2UuY2xvbmUoZS5jaGlsZFJlY3RhbmdsZSksYWU9dWUubm9ydGgsQWU9dWUuc291dGgsTmU9dWUuZWFzdCxldD11ZS53ZXN0O2ZvcihOZTxldCYmKE5lKz1rLlRXT19QSSksQT0wO0E8ZC5sZW5ndGg7KytBKU09TWF0aC5yb3VuZChkW0FdKSxNPD1hPyhaLnB1c2goQSksTT0wKTpNPj1yPyhjZS5wdXNoKEEpLE09UW4pOk09TSoyK0gsZFtBXT1NLHY9TWF0aC5yb3VuZChjW0FdKSx2PD1pPyhvZS5wdXNoKEEpLHY9MCk6dj49Zj8oZmUucHVzaChBKSx2PVFuKTp2PXYqMitPLGNbQV09dixGPWsubGVycCh3LFIsdVtBXS9RbiksRjxlZSYmKGVlPUYpLEY+YmUmJihiZT1GKSx1W0FdPUYsRm0ubG9uZ2l0dWRlPWsubGVycChldCxOZSxNL1FuKSxGbS5sYXRpdHVkZT1rLmxlcnAoQWUsYWUsdi9RbiksRm0uaGVpZ2h0PUYscGUuY2FydG9ncmFwaGljVG9DYXJ0ZXNpYW4oRm0sbmkpLGxlLnB1c2gobmkueCksbGUucHVzaChuaS55KSxsZS5wdXNoKG5pLnopO2xldCBLZT1nZS5mcm9tVmVydGljZXMobGUscy5aRVJPLDMsJDYpLHR0PXluLmZyb21SZWN0YW5nbGUodWUsZWUsYmUscGUsZXopLExlPW5ldyBUcihwZSkuY29tcHV0ZUhvcml6b25DdWxsaW5nUG9pbnRGcm9tVmVydGljZXNQb3NzaWJseVVuZGVyRWxsaXBzb2lkKEtlLmNlbnRlcixsZSwzLEtlLmNlbnRlcixlZSxRNiksamU9YmUtZWUsaXQ9bmV3IFVpbnQxNkFycmF5KGQubGVuZ3RoK2MubGVuZ3RoK3UubGVuZ3RoKTtmb3IoQT0wO0E8ZC5sZW5ndGg7KytBKWl0W0FdPWRbQV07bGV0IFllPWQubGVuZ3RoO2ZvcihBPTA7QTxjLmxlbmd0aDsrK0EpaXRbWWUrQV09Y1tBXTtmb3IoWWUrPWMubGVuZ3RoLEE9MDtBPHUubGVuZ3RoOysrQSlpdFtZZStBXT1RbioodVtBXS1lZSkvamU7bGV0IGZ0PWtlLmNyZWF0ZVR5cGVkQXJyYXkoZC5sZW5ndGgsaCksSXQ7aWYoVCl7bGV0IEN0PW5ldyBVaW50OEFycmF5KGwpO3QucHVzaChpdC5idWZmZXIsZnQuYnVmZmVyLEN0LmJ1ZmZlciksSXQ9Q3QuYnVmZmVyfWVsc2UgdC5wdXNoKGl0LmJ1ZmZlcixmdC5idWZmZXIpO3JldHVybnt2ZXJ0aWNlczppdC5idWZmZXIsZW5jb2RlZE5vcm1hbHM6SXQsaW5kaWNlczpmdC5idWZmZXIsbWluaW11bUhlaWdodDplZSxtYXhpbXVtSGVpZ2h0OmJlLHdlc3RJbmRpY2VzOlosc291dGhJbmRpY2VzOm9lLGVhc3RJbmRpY2VzOmNlLG5vcnRoSW5kaWNlczpmZSxib3VuZGluZ1NwaGVyZTpLZSxvcmllbnRlZEJvdW5kaW5nQm94OnR0LGhvcml6b25PY2NsdXNpb25Qb2ludDpMZX19ZnVuY3Rpb24gJG4oKXt0aGlzLnZlcnRleEJ1ZmZlcj12b2lkIDAsdGhpcy5pbmRleD12b2lkIDAsdGhpcy5maXJzdD12b2lkIDAsdGhpcy5zZWNvbmQ9dm9pZCAwLHRoaXMucmF0aW89dm9pZCAwfWZ1bmN0aW9uIHVTKGUsdCl7KytEbTtsZXQgbj1heltEbV0sbz1yeltEbV07cmV0dXJuIG49VnQub2N0RGVjb2RlKGUuZmlyc3QuZ2V0Tm9ybWFsWCgpLGUuZmlyc3QuZ2V0Tm9ybWFsWSgpLG4pLG89VnQub2N0RGVjb2RlKGUuc2Vjb25kLmdldE5vcm1hbFgoKSxlLnNlY29uZC5nZXROb3JtYWxZKCksbyksbmk9cy5sZXJwKG4sbyxlLnJhdGlvLG5pKSxzLm5vcm1hbGl6ZShuaSxuaSksVnQub2N0RW5jb2RlKG5pLHQpLC0tRG0sdH1mdW5jdGlvbiBkUyhlLHQsbixvLGEscixpLGYsZCl7aWYoaS5sZW5ndGg9PT0wKXJldHVybjtsZXQgYz0wLHU9MDtmb3IoO3U8aS5sZW5ndGg7KXU9cW9bYysrXS5pbml0aWFsaXplRnJvbUNsaXBSZXN1bHQoaSx1LGYpO2ZvcihsZXQgbD0wO2w8YzsrK2wpe2xldCBoPXFvW2xdO2lmKGguaXNJbmRleGVkKCkpaC5uZXdJbmRleD1yW2guaW5kZXhdLGgudUJ1ZmZlcj1lLGgudkJ1ZmZlcj10LGguaGVpZ2h0QnVmZmVyPW4sZCYmKGgubm9ybWFsQnVmZmVyPW8pO2Vsc2V7bGV0IG09aC5nZXRLZXkoKTtpZihnKHJbbV0pKWgubmV3SW5kZXg9clttXTtlbHNle2xldCBiPWUubGVuZ3RoO2UucHVzaChoLmdldFUoKSksdC5wdXNoKGguZ2V0VigpKSxuLnB1c2goaC5nZXRIKCkpLGQmJihvLnB1c2goaC5nZXROb3JtYWxYKCkpLG8ucHVzaChoLmdldE5vcm1hbFkoKSkpLGgubmV3SW5kZXg9YixyW21dPWJ9fX1jPT09Mz8oYS5wdXNoKHFvWzBdLm5ld0luZGV4KSxhLnB1c2gocW9bMV0ubmV3SW5kZXgpLGEucHVzaChxb1syXS5uZXdJbmRleCkpOmM9PT00JiYoYS5wdXNoKHFvWzBdLm5ld0luZGV4KSxhLnB1c2gocW9bMV0ubmV3SW5kZXgpLGEucHVzaChxb1syXS5uZXdJbmRleCksYS5wdXNoKHFvWzBdLm5ld0luZGV4KSxhLnB1c2gocW9bMl0ubmV3SW5kZXgpLGEucHVzaChxb1szXS5uZXdJbmRleCkpfXZhciBRbix0cixLNixmUyxxNixGbSxuaSxXNixYNixZNixKNixaNixRNiwkNixleix0eixueixKcyxEbSxheixyeixxbyxpeixReT1YKCgpPT57VXIoKTtNdCgpO2p0KCk7SWUoKTtUdCgpO3NlKCk7V2UoKTtHcygpO25uKCk7c1MoKTtHZSgpO3dpKCk7X24oKTtWcygpO1VuKCk7UW49MzI3NjcsdHI9UW4vMnwwLEs2PVtdLGZTPVtdLHE2PVtdLEZtPW5ldyByZSxuaT1uZXcgcyxXNj1bXSxYNj1bXSxZNj1bXSxKNj1bXSxaNj1bXSxRNj1uZXcgcywkNj1uZXcgZ2UsZXo9bmV3IHluLHR6PW5ldyBZLG56PW5ldyBzOyRuLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbihlKXtyZXR1cm4gZyhlKXx8KGU9bmV3ICRuKSxlLnVCdWZmZXI9dGhpcy51QnVmZmVyLGUudkJ1ZmZlcj10aGlzLnZCdWZmZXIsZS5oZWlnaHRCdWZmZXI9dGhpcy5oZWlnaHRCdWZmZXIsZS5ub3JtYWxCdWZmZXI9dGhpcy5ub3JtYWxCdWZmZXIsZS5pbmRleD10aGlzLmluZGV4LGUuZmlyc3Q9dGhpcy5maXJzdCxlLnNlY29uZD10aGlzLnNlY29uZCxlLnJhdGlvPXRoaXMucmF0aW8sZX07JG4ucHJvdG90eXBlLmluaXRpYWxpemVJbmRleGVkPWZ1bmN0aW9uKGUsdCxuLG8sYSl7dGhpcy51QnVmZmVyPWUsdGhpcy52QnVmZmVyPXQsdGhpcy5oZWlnaHRCdWZmZXI9bix0aGlzLm5vcm1hbEJ1ZmZlcj1vLHRoaXMuaW5kZXg9YSx0aGlzLmZpcnN0PXZvaWQgMCx0aGlzLnNlY29uZD12b2lkIDAsdGhpcy5yYXRpbz12b2lkIDB9OyRuLnByb3RvdHlwZS5pbml0aWFsaXplRnJvbUNsaXBSZXN1bHQ9ZnVuY3Rpb24oZSx0LG4pe2xldCBvPXQrMTtyZXR1cm4gZVt0XSE9PS0xP25bZVt0XV0uY2xvbmUodGhpcyk6KHRoaXMudmVydGV4QnVmZmVyPXZvaWQgMCx0aGlzLmluZGV4PXZvaWQgMCx0aGlzLmZpcnN0PW5bZVtvXV0sKytvLHRoaXMuc2Vjb25kPW5bZVtvXV0sKytvLHRoaXMucmF0aW89ZVtvXSwrK28pLG99OyRuLnByb3RvdHlwZS5nZXRLZXk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc0luZGV4ZWQoKT90aGlzLmluZGV4OkpTT04uc3RyaW5naWZ5KHtmaXJzdDp0aGlzLmZpcnN0LmdldEtleSgpLHNlY29uZDp0aGlzLnNlY29uZC5nZXRLZXkoKSxyYXRpbzp0aGlzLnJhdGlvfSl9OyRuLnByb3RvdHlwZS5pc0luZGV4ZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gZyh0aGlzLmluZGV4KX07JG4ucHJvdG90eXBlLmdldEg9ZnVuY3Rpb24oKXtyZXR1cm4gZyh0aGlzLmluZGV4KT90aGlzLmhlaWdodEJ1ZmZlclt0aGlzLmluZGV4XTprLmxlcnAodGhpcy5maXJzdC5nZXRIKCksdGhpcy5zZWNvbmQuZ2V0SCgpLHRoaXMucmF0aW8pfTskbi5wcm90b3R5cGUuZ2V0VT1mdW5jdGlvbigpe3JldHVybiBnKHRoaXMuaW5kZXgpP3RoaXMudUJ1ZmZlclt0aGlzLmluZGV4XTprLmxlcnAodGhpcy5maXJzdC5nZXRVKCksdGhpcy5zZWNvbmQuZ2V0VSgpLHRoaXMucmF0aW8pfTskbi5wcm90b3R5cGUuZ2V0Vj1mdW5jdGlvbigpe3JldHVybiBnKHRoaXMuaW5kZXgpP3RoaXMudkJ1ZmZlclt0aGlzLmluZGV4XTprLmxlcnAodGhpcy5maXJzdC5nZXRWKCksdGhpcy5zZWNvbmQuZ2V0VigpLHRoaXMucmF0aW8pfTtKcz1uZXcgWSxEbT0tMSxhej1bbmV3IHMsbmV3IHNdLHJ6PVtuZXcgcyxuZXcgc107JG4ucHJvdG90eXBlLmdldE5vcm1hbFg9ZnVuY3Rpb24oKXtyZXR1cm4gZyh0aGlzLmluZGV4KT90aGlzLm5vcm1hbEJ1ZmZlclt0aGlzLmluZGV4KjJdOihKcz11Uyh0aGlzLEpzKSxKcy54KX07JG4ucHJvdG90eXBlLmdldE5vcm1hbFk9ZnVuY3Rpb24oKXtyZXR1cm4gZyh0aGlzLmluZGV4KT90aGlzLm5vcm1hbEJ1ZmZlclt0aGlzLmluZGV4KjIrMV06KEpzPXVTKHRoaXMsSnMpLEpzLnkpfTtxbz1bXTtxby5wdXNoKG5ldyAkbik7cW8ucHVzaChuZXcgJG4pO3FvLnB1c2gobmV3ICRuKTtxby5wdXNoKG5ldyAkbik7aXo9QXQob3opfSk7dmFyICR5PXt9O3J0KCR5LHtkZWZhdWx0OigpPT5zen0pO2Z1bmN0aW9uIGN6KGUsdCl7bGV0IG49Y20udXBzYW1wbGVNZXNoKGUpLG89bi52ZXJ0aWNlcy5idWZmZXIsYT1uLmluZGljZXMuYnVmZmVyLHI9bi53ZXN0SW5kaWNlc1NvdXRoVG9Ob3J0aC5idWZmZXIsaT1uLnNvdXRoSW5kaWNlc0Vhc3RUb1dlc3QuYnVmZmVyLGY9bi5lYXN0SW5kaWNlc05vcnRoVG9Tb3V0aC5idWZmZXIsZD1uLm5vcnRoSW5kaWNlc1dlc3RUb0Vhc3QuYnVmZmVyO3JldHVybiB0LnB1c2gobyxhLHIsaSxmLGQpLHt2ZXJ0aWNlc0J1ZmZlcjpvLGluZGljZXNCdWZmZXI6YSx2ZXJ0ZXhDb3VudFdpdGhvdXRTa2lydHM6bi52ZXJ0ZXhDb3VudFdpdGhvdXRTa2lydHMsaW5kZXhDb3VudFdpdGhvdXRTa2lydHM6bi5pbmRleENvdW50V2l0aG91dFNraXJ0cyxlbmNvZGluZzpuLmVuY29kaW5nLHdlc3RJbmRpY2VzQnVmZmVyOnIsc291dGhJbmRpY2VzQnVmZmVyOmksZWFzdEluZGljZXNCdWZmZXI6Zixub3J0aEluZGljZXNCdWZmZXI6ZCxtaW5pbXVtSGVpZ2h0Om4ubWluaW11bUhlaWdodCxtYXhpbXVtSGVpZ2h0Om4ubWF4aW11bUhlaWdodCxib3VuZGluZ1NwaGVyZTpuLmJvdW5kaW5nU3BoZXJlM0Qsb3JpZW50ZWRCb3VuZGluZ0JveDpuLm9yaWVudGVkQm91bmRpbmdCb3gsaG9yaXpvbk9jY2x1c2lvblBvaW50Om4uaG9yaXpvbk9jY2x1c2lvblBvaW50fX12YXIgc3osZTE9WCgoKT0+e0dfKCk7VW4oKTtzej1BdChjeil9KTt2YXIgZnosdDE9WCgoKT0+e2Z6PWMxKHsiLi9jb21iaW5lR2VvbWV0cnkuanMiOigpPT5Qcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4oT3AoKSx4cCkpLCIuL2NyZWF0ZUJveEdlb21ldHJ5LmpzIjooKT0+UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+KE5wKCksTXApKSwiLi9jcmVhdGVCb3hPdXRsaW5lR2VvbWV0cnkuanMiOigpPT5Qcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4oa3AoKSxQcCkpLCIuL2NyZWF0ZUNpcmNsZUdlb21ldHJ5LmpzIjooKT0+UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+KFZwKCksR3ApKSwiLi9jcmVhdGVDaXJjbGVPdXRsaW5lR2VvbWV0cnkuanMiOigpPT5Qcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4oV3AoKSxxcCkpLCIuL2NyZWF0ZUNvcGxhbmFyUG9seWdvbkdlb21ldHJ5LmpzIjooKT0+UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+KHIwKCksYTApKSwiLi9jcmVhdGVDb3BsYW5hclBvbHlnb25PdXRsaW5lR2VvbWV0cnkuanMiOigpPT5Qcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4oczAoKSxjMCkpLCIuL2NyZWF0ZUNvcnJpZG9yR2VvbWV0cnkuanMiOigpPT5Qcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4oeDAoKSxSMCkpLCIuL2NyZWF0ZUNvcnJpZG9yT3V0bGluZUdlb21ldHJ5LmpzIjooKT0+UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+KEMwKCksUzApKSwiLi9jcmVhdGVDeWxpbmRlckdlb21ldHJ5LmpzIjooKT0+UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+KHYwKCksazApKSwiLi9jcmVhdGVDeWxpbmRlck91dGxpbmVHZW9tZXRyeS5qcyI6KCk9PlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PihVMCgpLEIwKSksIi4vY3JlYXRlRWxsaXBzZUdlb21ldHJ5LmpzIjooKT0+UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+KGowKCksTDApKSwiLi9jcmVhdGVFbGxpcHNlT3V0bGluZUdlb21ldHJ5LmpzIjooKT0+UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+KEcwKCksejApKSwiLi9jcmVhdGVFbGxpcHNvaWRHZW9tZXRyeS5qcyI6KCk9PlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PihLMCgpLEgwKSksIi4vY3JlYXRlRWxsaXBzb2lkT3V0bGluZUdlb21ldHJ5LmpzIjooKT0+UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+KFgwKCksVzApKSwiLi9jcmVhdGVGcnVzdHVtR2VvbWV0cnkuanMiOigpPT5Qcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4ob2coKSxuZykpLCIuL2NyZWF0ZUZydXN0dW1PdXRsaW5lR2VvbWV0cnkuanMiOigpPT5Qcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4oY2coKSxpZykpLCIuL2NyZWF0ZUdlb21ldHJ5LmpzIjooKT0+UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+KG8xKCksbjEpKSwiLi9jcmVhdGVHcm91bmRQb2x5bGluZUdlb21ldHJ5LmpzIjooKT0+UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+KEFnKCkseWcpKSwiLi9jcmVhdGVQbGFuZUdlb21ldHJ5LmpzIjooKT0+UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+KEVnKCksVGcpKSwiLi9jcmVhdGVQbGFuZU91dGxpbmVHZW9tZXRyeS5qcyI6KCk9PlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PihPZygpLHhnKSksIi4vY3JlYXRlUG9seWdvbkdlb21ldHJ5LmpzIjooKT0+UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+KE5nKCksTWcpKSwiLi9jcmVhdGVQb2x5Z29uT3V0bGluZUdlb21ldHJ5LmpzIjooKT0+UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+KGtnKCksUGcpKSwiLi9jcmVhdGVQb2x5bGluZUdlb21ldHJ5LmpzIjooKT0+UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+KExnKCksVWcpKSwiLi9jcmVhdGVQb2x5bGluZVZvbHVtZUdlb21ldHJ5LmpzIjooKT0+UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+KEdnKCksemcpKSwiLi9jcmVhdGVQb2x5bGluZVZvbHVtZU91dGxpbmVHZW9tZXRyeS5qcyI6KCk9PlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PihLZygpLEhnKSksIi4vY3JlYXRlUmVjdGFuZ2xlR2VvbWV0cnkuanMiOigpPT5Qcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4oZV8oKSwkZykpLCIuL2NyZWF0ZVJlY3RhbmdsZU91dGxpbmVHZW9tZXRyeS5qcyI6KCk9PlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PihvXygpLG5fKSksIi4vY3JlYXRlU2ltcGxlUG9seWxpbmVHZW9tZXRyeS5qcyI6KCk9PlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PihpXygpLHJfKSksIi4vY3JlYXRlU3BoZXJlR2VvbWV0cnkuanMiOigpPT5Qcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4oZl8oKSxzXykpLCIuL2NyZWF0ZVNwaGVyZU91dGxpbmVHZW9tZXRyeS5qcyI6KCk9PlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PihsXygpLHVfKSksIi4vY3JlYXRlVGFza1Byb2Nlc3Nvcldvcmtlci5qcyI6KCk9PlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PihVbigpLFJwKSksIi4vY3JlYXRlVmVjdG9yVGlsZUNsYW1wZWRQb2x5bGluZXMuanMiOigpPT5Qcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4obV8oKSxoXykpLCIuL2NyZWF0ZVZlY3RvclRpbGVHZW9tZXRyaWVzLmpzIjooKT0+UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+KHBfKCksYl8pKSwiLi9jcmVhdGVWZWN0b3JUaWxlUG9pbnRzLmpzIjooKT0+UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+KHlfKCksX18pKSwiLi9jcmVhdGVWZWN0b3JUaWxlUG9seWdvbnMuanMiOigpPT5Qcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4od18oKSxBXykpLCIuL2NyZWF0ZVZlY3RvclRpbGVQb2x5bGluZXMuanMiOigpPT5Qcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4oUl8oKSxFXykpLCIuL2NyZWF0ZVZlcnRpY2VzRnJvbUNlc2l1bTNEVGlsZXNUZXJyYWluLmpzIjooKT0+UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+KEhfKCksVl8pKSwiLi9jcmVhdGVWZXJ0aWNlc0Zyb21Hb29nbGVFYXJ0aEVudGVycHJpc2VCdWZmZXIuanMiOigpPT5Qcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4oV18oKSxxXykpLCIuL2NyZWF0ZVZlcnRpY2VzRnJvbUhlaWdodG1hcC5qcyI6KCk9PlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PihKXygpLFlfKSksIi4vY3JlYXRlVmVydGljZXNGcm9tUXVhbnRpemVkVGVycmFpbk1lc2guanMiOigpPT5Qcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4oJF8oKSxRXykpLCIuL2NyZWF0ZVdhbGxHZW9tZXRyeS5qcyI6KCk9PlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PihheSgpLG95KSksIi4vY3JlYXRlV2FsbE91dGxpbmVHZW9tZXRyeS5qcyI6KCk9PlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PihjeSgpLGl5KSksIi4vZGVjb2RlRHJhY28uanMiOigpPT5Qcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4oaHkoKSxseSkpLCIuL2RlY29kZUdvb2dsZUVhcnRoRW50ZXJwcmlzZVBhY2tldC5qcyI6KCk9PlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PihOeSgpLE15KSksIi4vZGVjb2RlSTNTLmpzIjooKT0+UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+KEZ5KCksdnkpKSwiLi9nYXVzc2lhblNwbGF0U29ydGVyLmpzIjooKT0+UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+KGp5KCksTHkpKSwiLi9nYXVzc2lhblNwbGF0VGV4dHVyZUdlbmVyYXRvci5qcyI6KCk9PlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PihHeSgpLHp5KSksIi4vaW5jcmVtZW50YWxseUJ1aWxkVGVycmFpblBpY2tlci5qcyI6KCk9PlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PihIeSgpLFZ5KSksIi4vdHJhbnNjb2RlS1RYMi5qcyI6KCk9PlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PihZeSgpLFh5KSksIi4vdHJhbnNmZXJUeXBlZEFycmF5VGVzdC5qcyI6KCk9PlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PihKeSgpLGNTKSksIi4vdXBzYW1wbGVRdWFudGl6ZWRUZXJyYWluTWVzaC5qcyI6KCk9PlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PihReSgpLFp5KSksIi4vdXBzYW1wbGVWZXJ0aWNlc0Zyb21DZXNpdW0zRFRpbGVzVGVycmFpbi5qcyI6KCk9PlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PihlMSgpLCR5KSl9KX0pO3ZhciBuMT17fTtydChuMSx7ZGVmYXVsdDooKT0+bHp9KTthc3luYyBmdW5jdGlvbiBkeihlLHQpe2xldCBuPUJtW3RdPz9CbVtlXTtyZXR1cm4gZyhuKT9uOmcodCk/KHR5cGVvZiBleHBvcnRzPT0ib2JqZWN0Ij9uPWJhKHQpOm49KGF3YWl0IGltcG9ydCh0KSkuZGVmYXVsdCxCbVt0XT1uLG4pOih0eXBlb2YgZXhwb3J0cz09Im9iamVjdCI/bj1iYShgV29ya2Vycy8ke2V9YCk6bj0oZyh0KT9hd2FpdCBpbXBvcnQodCk6YXdhaXQgZnooYC4vJHtlfS5qc2ApKS5kZWZhdWx0LEJtW2VdPW4sbil9YXN5bmMgZnVuY3Rpb24gdXooZSx0KXtsZXQgbj1lLnN1YlRhc2tzLG89bi5sZW5ndGgsYT1uZXcgQXJyYXkobyk7Zm9yKGxldCByPTA7cjxvO3IrKyl7bGV0IGk9bltyXSxmPWkuZ2VvbWV0cnksZD1pLm1vZHVsZU5hbWUsYz1pLm1vZHVsZVBhdGg7aWYoZyhkKSYmZyhjKSl0aHJvdyBuZXcgV3QoIk11c3Qgb25seSBzZXQgbW9kdWxlTmFtZSBvciBtb2R1bGVQYXRoIik7ZyhkKXx8ZyhjKT9hW3JdPWR6KGQsYykudGhlbih1PT51KGYsaS5vZmZzZXQpKTphW3JdPWZ9cmV0dXJuIFByb21pc2UuYWxsKGEpLnRoZW4oZnVuY3Rpb24ocil7cmV0dXJuIHVzLnBhY2tDcmVhdGVHZW9tZXRyeVJlc3VsdHMocix0KX0pfXZhciBCbSxseixvMT1YKCgpPT57SmkoKTtzZSgpO0VwKCk7VW4oKTt0MSgpO0JtPXt9O2x6PUF0KHV6KX0pO3ZhciBsRz17fTtydChsRyx7Y29tYmluZUdlb21ldHJ5OigpPT5oeixjcmVhdGVCb3hHZW9tZXRyeTooKT0+bXosY3JlYXRlQm94T3V0bGluZUdlb21ldHJ5OigpPT5ieixjcmVhdGVDaXJjbGVHZW9tZXRyeTooKT0+cHosY3JlYXRlQ2lyY2xlT3V0bGluZUdlb21ldHJ5OigpPT5neixjcmVhdGVDb3BsYW5hclBvbHlnb25HZW9tZXRyeTooKT0+X3osY3JlYXRlQ29wbGFuYXJQb2x5Z29uT3V0bGluZUdlb21ldHJ5OigpPT55eixjcmVhdGVDb3JyaWRvckdlb21ldHJ5OigpPT5BeixjcmVhdGVDb3JyaWRvck91dGxpbmVHZW9tZXRyeTooKT0+d3osY3JlYXRlQ3lsaW5kZXJHZW9tZXRyeTooKT0+VHosY3JlYXRlQ3lsaW5kZXJPdXRsaW5lR2VvbWV0cnk6KCk9PkV6LGNyZWF0ZUVsbGlwc2VHZW9tZXRyeTooKT0+UnosY3JlYXRlRWxsaXBzZU91dGxpbmVHZW9tZXRyeTooKT0+eHosY3JlYXRlRWxsaXBzb2lkR2VvbWV0cnk6KCk9Pk96LGNyZWF0ZUVsbGlwc29pZE91dGxpbmVHZW9tZXRyeTooKT0+U3osY3JlYXRlRnJ1c3R1bUdlb21ldHJ5OigpPT5DeixjcmVhdGVGcnVzdHVtT3V0bGluZUdlb21ldHJ5OigpPT5NeixjcmVhdGVHZW9tZXRyeTooKT0+TnosY3JlYXRlR3JvdW5kUG9seWxpbmVHZW9tZXRyeTooKT0+SXosY3JlYXRlUGxhbmVHZW9tZXRyeTooKT0+UHosY3JlYXRlUGxhbmVPdXRsaW5lR2VvbWV0cnk6KCk9Pmt6LGNyZWF0ZVBvbHlnb25HZW9tZXRyeTooKT0+dnosY3JlYXRlUG9seWdvbk91dGxpbmVHZW9tZXRyeTooKT0+RnosY3JlYXRlUG9seWxpbmVHZW9tZXRyeTooKT0+RHosY3JlYXRlUG9seWxpbmVWb2x1bWVHZW9tZXRyeTooKT0+QnosY3JlYXRlUG9seWxpbmVWb2x1bWVPdXRsaW5lR2VvbWV0cnk6KCk9PlV6LGNyZWF0ZVJlY3RhbmdsZUdlb21ldHJ5OigpPT5MeixjcmVhdGVSZWN0YW5nbGVPdXRsaW5lR2VvbWV0cnk6KCk9Pmp6LGNyZWF0ZVNpbXBsZVBvbHlsaW5lR2VvbWV0cnk6KCk9Pnp6LGNyZWF0ZVNwaGVyZUdlb21ldHJ5OigpPT5HeixjcmVhdGVTcGhlcmVPdXRsaW5lR2VvbWV0cnk6KCk9PlZ6LGNyZWF0ZVRhc2tQcm9jZXNzb3JXb3JrZXI6KCk9Pkh6LGNyZWF0ZVZlY3RvclRpbGVDbGFtcGVkUG9seWxpbmVzOigpPT5LeixjcmVhdGVWZWN0b3JUaWxlR2VvbWV0cmllczooKT0+cXosY3JlYXRlVmVjdG9yVGlsZVBvaW50czooKT0+V3osY3JlYXRlVmVjdG9yVGlsZVBvbHlnb25zOigpPT5YeixjcmVhdGVWZWN0b3JUaWxlUG9seWxpbmVzOigpPT5ZeixjcmVhdGVWZXJ0aWNlc0Zyb21DZXNpdW0zRFRpbGVzVGVycmFpbjooKT0+SnosY3JlYXRlVmVydGljZXNGcm9tR29vZ2xlRWFydGhFbnRlcnByaXNlQnVmZmVyOigpPT5aeixjcmVhdGVWZXJ0aWNlc0Zyb21IZWlnaHRtYXA6KCk9PlF6LGNyZWF0ZVZlcnRpY2VzRnJvbVF1YW50aXplZFRlcnJhaW5NZXNoOigpPT4keixjcmVhdGVXYWxsR2VvbWV0cnk6KCk9PmVHLGNyZWF0ZVdhbGxPdXRsaW5lR2VvbWV0cnk6KCk9PnRHLGRlY29kZURyYWNvOigpPT5uRyxkZWNvZGVHb29nbGVFYXJ0aEVudGVycHJpc2VQYWNrZXQ6KCk9Pm9HLGRlY29kZUkzUzooKT0+YUcsZ2F1c3NpYW5TcGxhdFNvcnRlcjooKT0+ckcsZ2F1c3NpYW5TcGxhdFRleHR1cmVHZW5lcmF0b3I6KCk9PmlHLGluY3JlbWVudGFsbHlCdWlsZFRlcnJhaW5QaWNrZXI6KCk9PmNHLHRyYW5zY29kZUtUWDI6KCk9PnNHLHRyYW5zZmVyVHlwZWRBcnJheVRlc3Q6KCk9PmZHLHVwc2FtcGxlUXVhbnRpemVkVGVycmFpbk1lc2g6KCk9PmRHLHVwc2FtcGxlVmVydGljZXNGcm9tQ2VzaXVtM0RUaWxlc1RlcnJhaW46KCk9PnVHfSk7dmFyIGh6PSgpPT57UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+T3AoKSl9LG16PSgpPT57UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+TnAoKSl9LGJ6PSgpPT57UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+a3AoKSl9LHB6PSgpPT57UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+VnAoKSl9LGd6PSgpPT57UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+V3AoKSl9LF96PSgpPT57UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+cjAoKSl9LHl6PSgpPT57UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+czAoKSl9LEF6PSgpPT57UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+eDAoKSl9LHd6PSgpPT57UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+QzAoKSl9LFR6PSgpPT57UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+djAoKSl9LEV6PSgpPT57UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+VTAoKSl9LFJ6PSgpPT57UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+ajAoKSl9LHh6PSgpPT57UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+RzAoKSl9LE96PSgpPT57UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+SzAoKSl9LFN6PSgpPT57UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+WDAoKSl9LEN6PSgpPT57UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+b2coKSl9LE16PSgpPT57UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+Y2coKSl9LE56PSgpPT57UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+bzEoKSl9LEl6PSgpPT57UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+QWcoKSl9LFB6PSgpPT57UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+RWcoKSl9LGt6PSgpPT57UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+T2coKSl9LHZ6PSgpPT57UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+TmcoKSl9LEZ6PSgpPT57UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+a2coKSl9LER6PSgpPT57UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+TGcoKSl9LEJ6PSgpPT57UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+R2coKSl9LFV6PSgpPT57UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+S2coKSl9LEx6PSgpPT57UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+ZV8oKSl9LGp6PSgpPT57UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+b18oKSl9LHp6PSgpPT57UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+aV8oKSl9LEd6PSgpPT57UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+Zl8oKSl9LFZ6PSgpPT57UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+bF8oKSl9LEh6PSgpPT57UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+VW4oKSl9LEt6PSgpPT57UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+bV8oKSl9LHF6PSgpPT57UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+cF8oKSl9LFd6PSgpPT57UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+eV8oKSl9LFh6PSgpPT57UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+d18oKSl9LFl6PSgpPT57UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+Ul8oKSl9LEp6PSgpPT57UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+SF8oKSl9LFp6PSgpPT57UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+V18oKSl9LFF6PSgpPT57UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+Sl8oKSl9LCR6PSgpPT57UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+JF8oKSl9LGVHPSgpPT57UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+YXkoKSl9LHRHPSgpPT57UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+Y3koKSl9LG5HPSgpPT57UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+aHkoKSl9LG9HPSgpPT57UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+TnkoKSl9LGFHPSgpPT57UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+RnkoKSl9LHJHPSgpPT57UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+ankoKSl9LGlHPSgpPT57UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+R3koKSl9LGNHPSgpPT57UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+SHkoKSl9LHNHPSgpPT57UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+WXkoKSl9LGZHPSgpPT57UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+SnkoKSl9LGRHPSgpPT57UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+UXkoKSl9LHVHPSgpPT57UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+ZTEoKSl9O3JldHVybiBfUyhsRyk7fSkoKTsK")});var DU=nm((q2t,Cie)=>{var $2t=y(x()),bA=function(e){e==null&&(e=new Date().getTime()),this.N=624,this.M=397,this.MATRIX_A=2567483615,this.UPPER_MASK=2147483648,this.LOWER_MASK=2147483647,this.mt=new Array(this.N),this.mti=this.N+1,e.constructor==Array?this.init_by_array(e,e.length):this.init_seed(e)};bA.prototype.init_seed=function(e){for(this.mt[0]=e>>>0,this.mti=1;this.mti<this.N;this.mti++){var e=this.mt[this.mti-1]^this.mt[this.mti-1]>>>30;this.mt[this.mti]=(((e&4294901760)>>>16)*1812433253<<16)+(e&65535)*1812433253+this.mti,this.mt[this.mti]>>>=0}};bA.prototype.init_by_array=function(e,t){var n,i,o;for(this.init_seed(19650218),n=1,i=0,o=this.N>t?this.N:t;o;o--){var r=this.mt[n-1]^this.mt[n-1]>>>30;this.mt[n]=(this.mt[n]^(((r&4294901760)>>>16)*1664525<<16)+(r&65535)*1664525)+e[i]+i,this.mt[n]>>>=0,n++,i++,n>=this.N&&(this.mt[0]=this.mt[this.N-1],n=1),i>=t&&(i=0)}for(o=this.N-1;o;o--){var r=this.mt[n-1]^this.mt[n-1]>>>30;this.mt[n]=(this.mt[n]^(((r&4294901760)>>>16)*1566083941<<16)+(r&65535)*1566083941)-n,this.mt[n]>>>=0,n++,n>=this.N&&(this.mt[0]=this.mt[this.N-1],n=1)}this.mt[0]=2147483648};bA.prototype.random_int=function(){var e,t=new Array(0,this.MATRIX_A);if(this.mti>=this.N){var n;for(this.mti==this.N+1&&this.init_seed(5489),n=0;n<this.N-this.M;n++)e=this.mt[n]&this.UPPER_MASK|this.mt[n+1]&this.LOWER_MASK,this.mt[n]=this.mt[n+this.M]^e>>>1^t[e&1];for(;n<this.N-1;n++)e=this.mt[n]&this.UPPER_MASK|this.mt[n+1]&this.LOWER_MASK,this.mt[n]=this.mt[n+(this.M-this.N)]^e>>>1^t[e&1];e=this.mt[this.N-1]&this.UPPER_MASK|this.mt[0]&this.LOWER_MASK,this.mt[this.N-1]=this.mt[this.M-1]^e>>>1^t[e&1],this.mti=0}return e=this.mt[this.mti++],e^=e>>>11,e^=e<<7&2636928640,e^=e<<15&4022730752,e^=e>>>18,e>>>0};bA.prototype.random_int31=function(){return this.random_int()>>>1};bA.prototype.random_incl=function(){return this.random_int()*(1/4294967295)};bA.prototype.random=function(){return this.random_int()*(1/4294967296)};bA.prototype.random_excl=function(){return(this.random_int()+.5)*(1/4294967296)};bA.prototype.random_long=function(){var e=this.random_int()>>>5,t=this.random_int()>>>6;return(e*67108864+t)*(1/9007199254740992)};Cie.exports=bA});var Qie=nm((oS,rS)=>{var VNt=y(x());/*! https://mths.be/punycode v1.4.0 by @mathias */(function(e){var t=typeof oS=="object"&&oS&&!oS.nodeType&&oS,n=typeof rS=="object"&&rS&&!rS.nodeType&&rS,i=typeof global=="object"&&global;(i.global===i||i.window===i||i.self===i)&&(e=i);var o,r=2147483647,s=36,a=1,c=26,d=38,u=700,h=72,p=128,A="-",f=/^xn--/,b=/[^\x20-\x7E]/,C=/[\x2E\u3002\uFF0E\uFF61]/g,T={overflow:"Overflow: input needs wider integers to process","not-basic":"Illegal input >= 0x80 (not a basic code point)","invalid-input":"Invalid input"},E=s-a,S=Math.floor,I=String.fromCharCode,R;function V(v){throw new RangeError(T[v])}function W(v,D){for(var Y=v.length,O=[];Y--;)O[Y]=D(v[Y]);return O}function B(v,D){var Y=v.split("@"),O="";Y.length>1&&(O=Y[0]+"@",v=Y[1]),v=v.replace(C,".");var J=v.split("."),te=W(J,D).join(".");return O+te}function N(v){for(var D=[],Y=0,O=v.length,J,te;Y<O;)J=v.charCodeAt(Y++),J>=55296&&J<=56319&&Y<O?(te=v.charCodeAt(Y++),(te&64512)==56320?D.push(((J&1023)<<10)+(te&1023)+65536):(D.push(J),Y--)):D.push(J);return D}function P(v){return W(v,function(D){var Y="";return D>65535&&(D-=65536,Y+=I(D>>>10&1023|55296),D=56320|D&1023),Y+=I(D),Y}).join("")}function g(v){return v-48<10?v-22:v-65<26?v-65:v-97<26?v-97:s}function _(v,D){return v+22+75*(v<26)-((D!=0)<<5)}function Z(v,D,Y){var O=0;for(v=Y?S(v/u):v>>1,v+=S(v/D);v>E*c>>1;O+=s)v=S(v/E);return S(O+(E+1)*v/(v+d))}function G(v){var D=[],Y=v.length,O,J=0,te=p,z=h,j,ee,ge,ye,ae,Ce,Te,Fe,Ne;for(j=v.lastIndexOf(A),j<0&&(j=0),ee=0;ee<j;++ee)v.charCodeAt(ee)>=128&&V("not-basic"),D.push(v.charCodeAt(ee));for(ge=j>0?j+1:0;ge<Y;){for(ye=J,ae=1,Ce=s;ge>=Y&&V("invalid-input"),Te=g(v.charCodeAt(ge++)),(Te>=s||Te>S((r-J)/ae))&&V("overflow"),J+=Te*ae,Fe=Ce<=z?a:Ce>=z+c?c:Ce-z,!(Te<Fe);Ce+=s)Ne=s-Fe,ae>S(r/Ne)&&V("overflow"),ae*=Ne;O=D.length+1,z=Z(J-ye,O,ye==0),S(J/O)>r-te&&V("overflow"),te+=S(J/O),J%=O,D.splice(J++,0,te)}return P(D)}function w(v){var D,Y,O,J,te,z,j,ee,ge,ye,ae,Ce=[],Te,Fe,Ne,Pe;for(v=N(v),Te=v.length,D=p,Y=0,te=h,z=0;z<Te;++z)ae=v[z],ae<128&&Ce.push(I(ae));for(O=J=Ce.length,J&&Ce.push(A);O<Te;){for(j=r,z=0;z<Te;++z)ae=v[z],ae>=D&&ae<j&&(j=ae);for(Fe=O+1,j-D>S((r-Y)/Fe)&&V("overflow"),Y+=(j-D)*Fe,D=j,z=0;z<Te;++z)if(ae=v[z],ae<D&&++Y>r&&V("overflow"),ae==D){for(ee=Y,ge=s;ye=ge<=te?a:ge>=te+c?c:ge-te,!(ee<ye);ge+=s)Pe=ee-ye,Ne=s-ye,Ce.push(I(_(ye+Pe%Ne,0))),ee=S(Pe/Ne);Ce.push(I(_(ee,0))),te=Z(Y,Fe,O==J),Y=0,++O}++Y,++D}return Ce.join("")}function X(v){return B(v,function(D){return f.test(D)?G(D.slice(4).toLowerCase()):D})}function k(v){return B(v,function(D){return b.test(D)?"xn--"+w(D):D})}if(o={version:"1.3.2",ucs2:{decode:N,encode:P},decode:G,encode:w,toASCII:k,toUnicode:X},typeof define=="function"&&typeof define.amd=="object"&&define.amd)define("punycode",function(){return o});else if(t&&n)if(rS.exports==t)n.exports=o;else for(R in o)o.hasOwnProperty(R)&&(t[R]=o[R]);else e.punycode=o})(oS)});var zie=nm((Oie,cD)=>{var GNt=y(x());/*!
* URI.js - Mutating URLs
* IPv6 Support
*
* Version: 1.19.11
*
* Author: Rodney Rehm
* Web: http://medialize.github.io/URI.js/
*
* Licensed under
* MIT License http://www.opensource.org/licenses/mit-license
*
*/(function(e,t){"use strict";typeof cD=="object"&&cD.exports?cD.exports=t():typeof define=="function"&&define.amd?define(t):e.IPv6=t(e)})(Oie,function(e){"use strict";var t=e&&e.IPv6;function n(o){var r=o.toLowerCase(),s=r.split(":"),a=s.length,c=8;s[0]===""&&s[1]===""&&s[2]===""?(s.shift(),s.shift()):s[0]===""&&s[1]===""?s.shift():s[a-1]===""&&s[a-2]===""&&s.pop(),a=s.length,s[a-1].indexOf(".")!==-1&&(c=7);var d;for(d=0;d<a&&s[d]!=="";d++);if(d<c)for(s.splice(d,1,"0000");s.length<c;)s.splice(d,0,"0000");for(var u,h=0;h<c;h++){u=s[h].split("");for(var p=0;p<3&&(u[0]==="0"&&u.length>1);p++)u.splice(0,1);s[h]=u.join("")}var A=-1,f=0,b=0,C=-1,T=!1;for(h=0;h<c;h++)T?s[h]==="0"?b+=1:(T=!1,b>f&&(A=C,f=b)):s[h]==="0"&&(T=!0,C=h,b=1);b>f&&(A=C,f=b),f>1&&s.splice(A,f,""),a=s.length;var E="";for(s[0]===""&&(E=":"),h=0;h<a&&(E+=s[h],h!==a-1);h++)E+=":";return s[a-1]===""&&(E+=":"),E}function i(){return e.IPv6===this&&(e.IPv6=t),this}return{best:n,noConflict:i}})});var Jie=nm((Hie,lD)=>{var LNt=y(x());/*!
* URI.js - Mutating URLs
* Second Level Domain (SLD) Support
*
* Version: 1.19.11
*
* Author: Rodney Rehm
* Web: http://medialize.github.io/URI.js/
*
* Licensed under
* MIT License http://www.opensource.org/licenses/mit-license
*
*/(function(e,t){"use strict";typeof lD=="object"&&lD.exports?lD.exports=t():typeof define=="function"&&define.amd?define(t):e.SecondLevelDomains=t(e)})(Hie,function(e){"use strict";var t=e&&e.SecondLevelDomains,n={list:{ac:" com gov mil net org ",ae:" ac co gov mil name net org pro sch ",af:" com edu gov net org ",al:" com edu gov mil net org ",ao:" co ed gv it og pb ",ar:" com edu gob gov int mil net org tur ",at:" ac co gv or ",au:" asn com csiro edu gov id net org ",ba:" co com edu gov mil net org rs unbi unmo unsa untz unze ",bb:" biz co com edu gov info net org store tv ",bh:" biz cc com edu gov info net org ",bn:" com edu gov net org ",bo:" com edu gob gov int mil net org tv ",br:" adm adv agr am arq art ato b bio blog bmd cim cng cnt com coop ecn edu eng esp etc eti far flog fm fnd fot fst g12 ggf gov imb ind inf jor jus lel mat med mil mus net nom not ntr odo org ppg pro psc psi qsl rec slg srv tmp trd tur tv vet vlog wiki zlg ",bs:" com edu gov net org ",bz:" du et om ov rg ",ca:" ab bc mb nb nf nl ns nt nu on pe qc sk yk ",ck:" biz co edu gen gov info net org ",cn:" ac ah bj com cq edu fj gd gov gs gx gz ha hb he hi hl hn jl js jx ln mil net nm nx org qh sc sd sh sn sx tj tw xj xz yn zj ",co:" com edu gov mil net nom org ",cr:" ac c co ed fi go or sa ",cy:" ac biz com ekloges gov ltd name net org parliament press pro tm ",do:" art com edu gob gov mil net org sld web ",dz:" art asso com edu gov net org pol ",ec:" com edu fin gov info med mil net org pro ",eg:" com edu eun gov mil name net org sci ",er:" com edu gov ind mil net org rochest w ",es:" com edu gob nom org ",et:" biz com edu gov info name net org ",fj:" ac biz com info mil name net org pro ",fk:" ac co gov net nom org ",fr:" asso com f gouv nom prd presse tm ",gg:" co net org ",gh:" com edu gov mil org ",gn:" ac com gov net org ",gr:" com edu gov mil net org ",gt:" com edu gob ind mil net org ",gu:" com edu gov net org ",hk:" com edu gov idv net org ",hu:" 2000 agrar bolt casino city co erotica erotika film forum games hotel info ingatlan jogasz konyvelo lakas media news org priv reklam sex shop sport suli szex tm tozsde utazas video ",id:" ac co go mil net or sch web ",il:" ac co gov idf k12 muni net org ",in:" ac co edu ernet firm gen gov i ind mil net nic org res ",iq:" com edu gov i mil net org ",ir:" ac co dnssec gov i id net org sch ",it:" edu gov ",je:" co net org ",jo:" com edu gov mil name net org sch ",jp:" ac ad co ed go gr lg ne or ",ke:" ac co go info me mobi ne or sc ",kh:" com edu gov mil net org per ",ki:" biz com de edu gov info mob net org tel ",km:" asso com coop edu gouv k medecin mil nom notaires pharmaciens presse tm veterinaire ",kn:" edu gov net org ",kr:" ac busan chungbuk chungnam co daegu daejeon es gangwon go gwangju gyeongbuk gyeonggi gyeongnam hs incheon jeju jeonbuk jeonnam k kg mil ms ne or pe re sc seoul ulsan ",kw:" com edu gov net org ",ky:" com edu gov net org ",kz:" com edu gov mil net org ",lb:" com edu gov net org ",lk:" assn com edu gov grp hotel int ltd net ngo org sch soc web ",lr:" com edu gov net org ",lv:" asn com conf edu gov id mil net org ",ly:" com edu gov id med net org plc sch ",ma:" ac co gov m net org press ",mc:" asso tm ",me:" ac co edu gov its net org priv ",mg:" com edu gov mil nom org prd tm ",mk:" com edu gov inf name net org pro ",ml:" com edu gov net org presse ",mn:" edu gov org ",mo:" com edu gov net org ",mt:" com edu gov net org ",mv:" aero biz com coop edu gov info int mil museum name net org pro ",mw:" ac co com coop edu gov int museum net org ",mx:" com edu gob net org ",my:" com edu gov mil name net org sch ",nf:" arts com firm info net other per rec store web ",ng:" biz com edu gov mil mobi name net org sch ",ni:" ac co com edu gob mil net nom org ",np:" com edu gov mil net org ",nr:" biz com edu gov info net org ",om:" ac biz co com edu gov med mil museum net org pro sch ",pe:" com edu gob mil net nom org sld ",ph:" com edu gov i mil net ngo org ",pk:" biz com edu fam gob gok gon gop gos gov net org web ",pl:" art bialystok biz com edu gda gdansk gorzow gov info katowice krakow lodz lublin mil net ngo olsztyn org poznan pwr radom slupsk szczecin torun warszawa waw wroc wroclaw zgora ",pr:" ac biz com edu est gov info isla name net org pro prof ",ps:" com edu gov net org plo sec ",pw:" belau co ed go ne or ",ro:" arts com firm info nom nt org rec store tm www ",rs:" ac co edu gov in org ",sb:" com edu gov net org ",sc:" com edu gov net org ",sh:" co com edu gov net nom org ",sl:" com edu gov net org ",st:" co com consulado edu embaixada gov mil net org principe saotome store ",sv:" com edu gob org red ",sz:" ac co org ",tr:" av bbs bel biz com dr edu gen gov info k12 name net org pol tel tsk tv web ",tt:" aero biz cat co com coop edu gov info int jobs mil mobi museum name net org pro tel travel ",tw:" club com ebiz edu game gov idv mil net org ",mu:" ac co com gov net or org ",mz:" ac co edu gov org ",na:" co com ",nz:" ac co cri geek gen govt health iwi maori mil net org parliament school ",pa:" abo ac com edu gob ing med net nom org sld ",pt:" com edu gov int net nome org publ ",py:" com edu gov mil net org ",qa:" com edu gov mil net org ",re:" asso com nom ",ru:" ac adygeya altai amur arkhangelsk astrakhan bashkiria belgorod bir bryansk buryatia cbg chel chelyabinsk chita chukotka chuvashia com dagestan e-burg edu gov grozny int irkutsk ivanovo izhevsk jar joshkar-ola kalmykia kaluga kamchatka karelia kazan kchr kemerovo khabarovsk khakassia khv kirov koenig komi kostroma kranoyarsk kuban kurgan kursk lipetsk magadan mari mari-el marine mil mordovia mosreg msk murmansk nalchik net nnov nov novosibirsk nsk omsk orenburg org oryol penza perm pp pskov ptz rnd ryazan sakhalin samara saratov simbirsk smolensk spb stavropol stv surgut tambov tatarstan tom tomsk tsaritsyn tsk tula tuva tver tyumen udm udmurtia ulan-ude vladikavkaz vladimir vladivostok volgograd vologda voronezh vrn vyatka yakutia yamal yekaterinburg yuzhno-sakhalinsk ",rw:" ac co com edu gouv gov int mil net ",sa:" com edu gov med net org pub sch ",sd:" com edu gov info med net org tv ",se:" a ac b bd c d e f g h i k l m n o org p parti pp press r s t tm u w x y z ",sg:" com edu gov idn net org per ",sn:" art com edu gouv org perso univ ",sy:" com edu gov mil net news org ",th:" ac co go in mi net or ",tj:" ac biz co com edu go gov info int mil name net nic org test web ",tn:" agrinet com defense edunet ens fin gov ind info intl mincom nat net org perso rnrt rns rnu tourism ",tz:" ac co go ne or ",ua:" biz cherkassy chernigov chernovtsy ck cn co com crimea cv dn dnepropetrovsk donetsk dp edu gov if in ivano-frankivsk kh kharkov kherson khmelnitskiy kiev kirovograd km kr ks kv lg lugansk lutsk lviv me mk net nikolaev od odessa org pl poltava pp rovno rv sebastopol sumy te ternopil uzhgorod vinnica vn zaporizhzhe zhitomir zp zt ",ug:" ac co go ne or org sc ",uk:" ac bl british-library co cym gov govt icnet jet lea ltd me mil mod national-library-scotland nel net nhs nic nls org orgn parliament plc police sch scot soc ",us:" dni fed isa kids nsn ",uy:" com edu gub mil net org ",ve:" co com edu gob info mil net org web ",vi:" co com k12 net org ",vn:" ac biz com edu gov health info int name net org pro ",ye:" co com gov ltd me net org plc ",yu:" ac co edu gov org ",za:" ac agric alt bourse city co cybernet db edu gov grondar iaccess imt inca landesign law mil net ngo nis nom olivetti org pix school tm web ",zm:" ac co com edu gov net org sch ",com:"ar br cn de eu gb gr hu jpn kr no qc ru sa se uk us uy za ",net:"gb jp se uk ",org:"ae",de:"com "},has:function(i){var o=i.lastIndexOf(".");if(o<=0||o>=i.length-1)return!1;var r=i.lastIndexOf(".",o-1);if(r<=0||r>=o-1)return!1;var s=n.list[i.slice(o+1)];return s?s.indexOf(" "+i.slice(r+1,o)+" ")>=0:!1},is:function(i){var o=i.lastIndexOf(".");if(o<=0||o>=i.length-1)return!1;var r=i.lastIndexOf(".",o-1);if(r>=0)return!1;var s=n.list[i.slice(o+1)];return s?s.indexOf(" "+i.slice(0,o)+" ")>=0:!1},get:function(i){var o=i.lastIndexOf(".");if(o<=0||o>=i.length-1)return null;var r=i.lastIndexOf(".",o-1);if(r<=0||r>=o-1)return null;var s=n.list[i.slice(o+1)];return!s||s.indexOf(" "+i.slice(r+1,o)+" ")<0?null:i.slice(r+1)},noConflict:function(){return e.SecondLevelDomains===this&&(e.SecondLevelDomains=t),this}};return n})});var qd=nm((Kie,dD)=>{var WNt=y(x());/*!
* URI.js - Mutating URLs
*
* Version: 1.19.11
*
* Author: Rodney Rehm
* Web: http://medialize.github.io/URI.js/
*
* Licensed under
* MIT License http://www.opensource.org/licenses/mit-license
*
*/(function(e,t){"use strict";typeof dD=="object"&&dD.exports?dD.exports=t(Qie(),zie(),Jie()):typeof define=="function"&&define.amd?define(["./punycode","./IPv6","./SecondLevelDomains"],t):e.URI=t(e.punycode,e.IPv6,e.SecondLevelDomains,e)})(Kie,function(e,t,n,i){"use strict";var o=i&&i.URI;function r(_,Z){var G=arguments.length>=1,w=arguments.length>=2;if(!(this instanceof r))return G?w?new r(_,Z):new r(_):new r;if(_===void 0){if(G)throw new TypeError("undefined is not a valid argument for URI");typeof location<"u"?_=location.href+"":_=""}if(_===null&&G)throw new TypeError("null is not a valid argument for URI");return this.href(_),Z!==void 0?this.absoluteTo(Z):this}function s(_){return/^[0-9]+$/.test(_)}r.version="1.19.11";var a=r.prototype,c=Object.prototype.hasOwnProperty;function d(_){return _.replace(/([.*+?^=!:${}()|[\]\/\\])/g,"\\$1")}function u(_){return _===void 0?"Undefined":String(Object.prototype.toString.call(_)).slice(8,-1)}function h(_){return u(_)==="Array"}function p(_,Z){var G={},w,X;if(u(Z)==="RegExp")G=null;else if(h(Z))for(w=0,X=Z.length;w<X;w++)G[Z[w]]=!0;else G[Z]=!0;for(w=0,X=_.length;w<X;w++){var k=G&&G[_[w]]!==void 0||!G&&Z.test(_[w]);k&&(_.splice(w,1),X--,w--)}return _}function A(_,Z){var G,w;if(h(Z)){for(G=0,w=Z.length;G<w;G++)if(!A(_,Z[G]))return!1;return!0}var X=u(Z);for(G=0,w=_.length;G<w;G++)if(X==="RegExp"){if(typeof _[G]=="string"&&_[G].match(Z))return!0}else if(_[G]===Z)return!0;return!1}function f(_,Z){if(!h(_)||!h(Z)||_.length!==Z.length)return!1;_.sort(),Z.sort();for(var G=0,w=_.length;G<w;G++)if(_[G]!==Z[G])return!1;return!0}function b(_){var Z=/^\/+|\/+$/g;return _.replace(Z,"")}r._parts=function(){return{protocol:null,username:null,password:null,hostname:null,urn:null,port:null,path:null,query:null,fragment:null,preventInvalidHostname:r.preventInvalidHostname,duplicateQueryParameters:r.duplicateQueryParameters,escapeQuerySpace:r.escapeQuerySpace}},r.preventInvalidHostname=!1,r.duplicateQueryParameters=!1,r.escapeQuerySpace=!0,r.protocol_expression=/^[a-z][a-z0-9.+-]*$/i,r.idn_expression=/[^a-z0-9\._-]/i,r.punycode_expression=/(xn--)/i,r.ip4_expression=/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/,r.ip6_expression=/^\s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))(%.+)?\s*$/,r.find_uri_expression=/\b((?:[a-z][\w-]+:(?:\/{1,3}|[a-z0-9%])|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}\/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:'".,<>?«»“”‘’]))/ig,r.findUri={start:/\b(?:([a-z][a-z0-9.+-]*:\/\/)|www\.)/gi,end:/[\s\r\n]|$/,trim:/[`!()\[\]{};:'".,<>?«»“”„‘’]+$/,parens:/(\([^\)]*\)|\[[^\]]*\]|\{[^}]*\}|<[^>]*>)/g},r.leading_whitespace_expression=/^[\x00-\x20\u00a0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff]+/,r.ascii_tab_whitespace=/[\u0009\u000A\u000D]+/g,r.defaultPorts={http:"80",https:"443",ftp:"21",gopher:"70",ws:"80",wss:"443"},r.hostProtocols=["http","https"],r.invalid_hostname_characters=/[^a-zA-Z0-9\.\-:_]/,r.domAttributes={a:"href",blockquote:"cite",link:"href",base:"href",script:"src",form:"action",img:"src",area:"href",iframe:"src",embed:"src",source:"src",track:"src",input:"src",audio:"src",video:"src"},r.getDomAttribute=function(_){if(!(!_||!_.nodeName)){var Z=_.nodeName.toLowerCase();if(!(Z==="input"&&_.type!=="image"))return r.domAttributes[Z]}};function C(_){return escape(_)}function T(_){return encodeURIComponent(_).replace(/[!'()*]/g,C).replace(/\*/g,"%2A")}r.encode=T,r.decode=decodeURIComponent,r.iso8859=function(){r.encode=escape,r.decode=unescape},r.unicode=function(){r.encode=T,r.decode=decodeURIComponent},r.characters={pathname:{encode:{expression:/%(24|26|2B|2C|3B|3D|3A|40)/ig,map:{"%24":"$","%26":"&","%2B":"+","%2C":",","%3B":";","%3D":"=","%3A":":","%40":"@"}},decode:{expression:/[\/\?#]/g,map:{"/":"%2F","?":"%3F","#":"%23"}}},reserved:{encode:{expression:/%(21|23|24|26|27|28|29|2A|2B|2C|2F|3A|3B|3D|3F|40|5B|5D)/ig,map:{"%3A":":","%2F":"/","%3F":"?","%23":"#","%5B":"[","%5D":"]","%40":"@","%21":"!","%24":"$","%26":"&","%27":"'","%28":"(","%29":")","%2A":"*","%2B":"+","%2C":",","%3B":";","%3D":"="}}},urnpath:{encode:{expression:/%(21|24|27|28|29|2A|2B|2C|3B|3D|40)/ig,map:{"%21":"!","%24":"$","%27":"'","%28":"(","%29":")","%2A":"*","%2B":"+","%2C":",","%3B":";","%3D":"=","%40":"@"}},decode:{expression:/[\/\?#:]/g,map:{"/":"%2F","?":"%3F","#":"%23",":":"%3A"}}}},r.encodeQuery=function(_,Z){var G=r.encode(_+"");return Z===void 0&&(Z=r.escapeQuerySpace),Z?G.replace(/%20/g,"+"):G},r.decodeQuery=function(_,Z){_+="",Z===void 0&&(Z=r.escapeQuerySpace);try{return r.decode(Z?_.replace(/\+/g,"%20"):_)}catch{return _}};var E={encode:"encode",decode:"decode"},S,I=function(_,Z){return function(G){try{return r[Z](G+"").replace(r.characters[_][Z].expression,function(w){return r.characters[_][Z].map[w]})}catch{return G}}};for(S in E)r[S+"PathSegment"]=I("pathname",E[S]),r[S+"UrnPathSegment"]=I("urnpath",E[S]);var R=function(_,Z,G){return function(w){var X;G?X=function(Y){return r[Z](r[G](Y))}:X=r[Z];for(var k=(w+"").split(_),v=0,D=k.length;v<D;v++)k[v]=X(k[v]);return k.join(_)}};r.decodePath=R("/","decodePathSegment"),r.decodeUrnPath=R(":","decodeUrnPathSegment"),r.recodePath=R("/","encodePathSegment","decode"),r.recodeUrnPath=R(":","encodeUrnPathSegment","decode"),r.encodeReserved=I("reserved","encode"),r.parse=function(_,Z){var G;return Z||(Z={preventInvalidHostname:r.preventInvalidHostname}),_=_.replace(r.leading_whitespace_expression,""),_=_.replace(r.ascii_tab_whitespace,""),G=_.indexOf("#"),G>-1&&(Z.fragment=_.substring(G+1)||null,_=_.substring(0,G)),G=_.indexOf("?"),G>-1&&(Z.query=_.substring(G+1)||null,_=_.substring(0,G)),_=_.replace(/^(https?|ftp|wss?)?:+[/\\]*/i,"$1://"),_=_.replace(/^[/\\]{2,}/i,"//"),_.substring(0,2)==="//"?(Z.protocol=null,_=_.substring(2),_=r.parseAuthority(_,Z)):(G=_.indexOf(":"),G>-1&&(Z.protocol=_.substring(0,G)||null,Z.protocol&&!Z.protocol.match(r.protocol_expression)?Z.protocol=void 0:_.substring(G+1,G+3).replace(/\\/g,"/")==="//"?(_=_.substring(G+3),_=r.parseAuthority(_,Z)):(_=_.substring(G+1),Z.urn=!0))),Z.path=_,Z},r.parseHost=function(_,Z){_||(_=""),_=_.replace(/\\/g,"/");var G=_.indexOf("/"),w,X;if(G===-1&&(G=_.length),_.charAt(0)==="[")w=_.indexOf("]"),Z.hostname=_.substring(1,w)||null,Z.port=_.substring(w+2,G)||null,Z.port==="/"&&(Z.port=null);else{var k=_.indexOf(":"),v=_.indexOf("/"),D=_.indexOf(":",k+1);D!==-1&&(v===-1||D<v)?(Z.hostname=_.substring(0,G)||null,Z.port=null):(X=_.substring(0,G).split(":"),Z.hostname=X[0]||null,Z.port=X[1]||null)}return Z.hostname&&_.substring(G).charAt(0)!=="/"&&(G++,_="/"+_),Z.preventInvalidHostname&&r.ensureValidHostname(Z.hostname,Z.protocol),Z.port&&r.ensureValidPort(Z.port),_.substring(G)||"/"},r.parseAuthority=function(_,Z){return _=r.parseUserinfo(_,Z),r.parseHost(_,Z)},r.parseUserinfo=function(_,Z){var G=_,w=_.indexOf("\\");w!==-1&&(_=_.replace(/\\/g,"/"));var X=_.indexOf("/"),k=_.lastIndexOf("@",X>-1?X:_.length-1),v;return k>-1&&(X===-1||k<X)?(v=_.substring(0,k).split(":"),Z.username=v[0]?r.decode(v[0]):null,v.shift(),Z.password=v[0]?r.decode(v.join(":")):null,_=G.substring(k+1)):(Z.username=null,Z.password=null),_},r.parseQuery=function(_,Z){if(!_)return{};if(_=_.replace(/&+/g,"&").replace(/^\?*&*|&+$/g,""),!_)return{};for(var G={},w=_.split("&"),X=w.length,k,v,D,Y=0;Y<X;Y++)k=w[Y].split("="),v=r.decodeQuery(k.shift(),Z),D=k.length?r.decodeQuery(k.join("="),Z):null,v!=="__proto__"&&(c.call(G,v)?((typeof G[v]=="string"||G[v]===null)&&(G[v]=[G[v]]),G[v].push(D)):G[v]=D);return G},r.build=function(_){var Z="",G=!1;return _.protocol&&(Z+=_.protocol+":"),!_.urn&&(Z||_.hostname)&&(Z+="//",G=!0),Z+=r.buildAuthority(_)||"",typeof _.path=="string"&&(_.path.charAt(0)!=="/"&&G&&(Z+="/"),Z+=_.path),typeof _.query=="string"&&_.query&&(Z+="?"+_.query),typeof _.fragment=="string"&&_.fragment&&(Z+="#"+_.fragment),Z},r.buildHost=function(_){var Z="";if(_.hostname)r.ip6_expression.test(_.hostname)?Z+="["+_.hostname+"]":Z+=_.hostname;else return"";return _.port&&(Z+=":"+_.port),Z},r.buildAuthority=function(_){return r.buildUserinfo(_)+r.buildHost(_)},r.buildUserinfo=function(_){var Z="";return _.username&&(Z+=r.encode(_.username)),_.password&&(Z+=":"+r.encode(_.password)),Z&&(Z+="@"),Z},r.buildQuery=function(_,Z,G){var w="",X,k,v,D;for(k in _)if(k!=="__proto__"&&c.call(_,k))if(h(_[k]))for(X={},v=0,D=_[k].length;v<D;v++)_[k][v]!==void 0&&X[_[k][v]+""]===void 0&&(w+="&"+r.buildQueryParameter(k,_[k][v],G),Z!==!0&&(X[_[k][v]+""]=!0));else _[k]!==void 0&&(w+="&"+r.buildQueryParameter(k,_[k],G));return w.substring(1)},r.buildQueryParameter=function(_,Z,G){return r.encodeQuery(_,G)+(Z!==null?"="+r.encodeQuery(Z,G):"")},r.addQuery=function(_,Z,G){if(typeof Z=="object")for(var w in Z)c.call(Z,w)&&r.addQuery(_,w,Z[w]);else if(typeof Z=="string"){if(_[Z]===void 0){_[Z]=G;return}else typeof _[Z]=="string"&&(_[Z]=[_[Z]]);h(G)||(G=[G]),_[Z]=(_[Z]||[]).concat(G)}else throw new TypeError("URI.addQuery() accepts an object, string as the name parameter")},r.setQuery=function(_,Z,G){if(typeof Z=="object")for(var w in Z)c.call(Z,w)&&r.setQuery(_,w,Z[w]);else if(typeof Z=="string")_[Z]=G===void 0?null:G;else throw new TypeError("URI.setQuery() accepts an object, string as the name parameter")},r.removeQuery=function(_,Z,G){var w,X,k;if(h(Z))for(w=0,X=Z.length;w<X;w++)_[Z[w]]=void 0;else if(u(Z)==="RegExp")for(k in _)Z.test(k)&&(_[k]=void 0);else if(typeof Z=="object")for(k in Z)c.call(Z,k)&&r.removeQuery(_,k,Z[k]);else if(typeof Z=="string")G!==void 0?u(G)==="RegExp"?!h(_[Z])&&G.test(_[Z])?_[Z]=void 0:_[Z]=p(_[Z],G):_[Z]===String(G)&&(!h(G)||G.length===1)?_[Z]=void 0:h(_[Z])&&(_[Z]=p(_[Z],G)):_[Z]=void 0;else throw new TypeError("URI.removeQuery() accepts an object, string, RegExp as the first parameter")},r.hasQuery=function(_,Z,G,w){switch(u(Z)){case"String":break;case"RegExp":for(var X in _)if(c.call(_,X)&&Z.test(X)&&(G===void 0||r.hasQuery(_,X,G)))return!0;return!1;case"Object":for(var k in Z)if(c.call(Z,k)&&!r.hasQuery(_,k,Z[k]))return!1;return!0;default:throw new TypeError("URI.hasQuery() accepts a string, regular expression or object as the name parameter")}switch(u(G)){case"Undefined":return Z in _;case"Boolean":var v=!!(h(_[Z])?_[Z].length:_[Z]);return G===v;case"Function":return!!G(_[Z],Z,_);case"Array":if(!h(_[Z]))return!1;var D=w?A:f;return D(_[Z],G);case"RegExp":return h(_[Z])?w?A(_[Z],G):!1:!!(_[Z]&&_[Z].match(G));case"Number":G=String(G);case"String":return h(_[Z])?w?A(_[Z],G):!1:_[Z]===G;default:throw new TypeError("URI.hasQuery() accepts undefined, boolean, string, number, RegExp, Function as the value parameter")}},r.joinPaths=function(){for(var _=[],Z=[],G=0,w=0;w<arguments.length;w++){var X=new r(arguments[w]);_.push(X);for(var k=X.segment(),v=0;v<k.length;v++)typeof k[v]=="string"&&Z.push(k[v]),k[v]&&G++}if(!Z.length||!G)return new r("");var D=new r("").segment(Z);return(_[0].path()===""||_[0].path().slice(0,1)==="/")&&D.path("/"+D.path()),D.normalize()},r.commonPath=function(_,Z){var G=Math.min(_.length,Z.length),w;for(w=0;w<G;w++)if(_.charAt(w)!==Z.charAt(w)){w--;break}return w<1?_.charAt(0)===Z.charAt(0)&&_.charAt(0)==="/"?"/":"":((_.charAt(w)!=="/"||Z.charAt(w)!=="/")&&(w=_.substring(0,w).lastIndexOf("/")),_.substring(0,w+1))},r.withinString=function(_,Z,G){G||(G={});var w=G.start||r.findUri.start,X=G.end||r.findUri.end,k=G.trim||r.findUri.trim,v=G.parens||r.findUri.parens,D=/[a-z0-9-]=["']?$/i;for(w.lastIndex=0;;){var Y=w.exec(_);if(!Y)break;var O=Y.index;if(G.ignoreHtml){var J=_.slice(Math.max(O-3,0),O);if(J&&D.test(J))continue}for(var te=O+_.slice(O).search(X),z=_.slice(O,te),j=-1;;){var ee=v.exec(z);if(!ee)break;var ge=ee.index+ee[0].length;j=Math.max(j,ge)}if(j>-1?z=z.slice(0,j)+z.slice(j).replace(k,""):z=z.replace(k,""),!(z.length<=Y[0].length)&&!(G.ignore&&G.ignore.test(z))){te=O+z.length;var ye=Z(z,O,te,_);if(ye===void 0){w.lastIndex=te;continue}ye=String(ye),_=_.slice(0,O)+ye+_.slice(te),w.lastIndex=O+ye.length}}return w.lastIndex=0,_},r.ensureValidHostname=function(_,Z){var G=!!_,w=!!Z,X=!1;if(w&&(X=A(r.hostProtocols,Z)),X&&!G)throw new TypeError("Hostname cannot be empty, if protocol is "+Z);if(_&&_.match(r.invalid_hostname_characters)){if(!e)throw new TypeError('Hostname "'+_+'" contains characters other than [A-Z0-9.-:_] and Punycode.js is not available');if(e.toASCII(_).match(r.invalid_hostname_characters))throw new TypeError('Hostname "'+_+'" contains characters other than [A-Z0-9.-:_]')}},r.ensureValidPort=function(_){if(_){var Z=Number(_);if(!(s(Z)&&Z>0&&Z<65536))throw new TypeError('Port "'+_+'" is not a valid port')}},r.noConflict=function(_){if(_){var Z={URI:this.noConflict()};return i.URITemplate&&typeof i.URITemplate.noConflict=="function"&&(Z.URITemplate=i.URITemplate.noConflict()),i.IPv6&&typeof i.IPv6.noConflict=="function"&&(Z.IPv6=i.IPv6.noConflict()),i.SecondLevelDomains&&typeof i.SecondLevelDomains.noConflict=="function"&&(Z.SecondLevelDomains=i.SecondLevelDomains.noConflict()),Z}else i.URI===this&&(i.URI=o);return this},a.build=function(_){return _===!0?this._deferred_build=!0:(_===void 0||this._deferred_build)&&(this._string=r.build(this._parts),this._deferred_build=!1),this},a.clone=function(){return new r(this)},a.valueOf=a.toString=function(){return this.build(!1)._string};function V(_){return function(Z,G){return Z===void 0?this._parts[_]||"":(this._parts[_]=Z||null,this.build(!G),this)}}function W(_,Z){return function(G,w){return G===void 0?this._parts[_]||"":(G!==null&&(G=G+"",G.charAt(0)===Z&&(G=G.substring(1))),this._parts[_]=G,this.build(!w),this)}}a.protocol=V("protocol"),a.username=V("username"),a.password=V("password"),a.hostname=V("hostname"),a.port=V("port"),a.query=W("query","?"),a.fragment=W("fragment","#"),a.search=function(_,Z){var G=this.query(_,Z);return typeof G=="string"&&G.length?"?"+G:G},a.hash=function(_,Z){var G=this.fragment(_,Z);return typeof G=="string"&&G.length?"#"+G:G},a.pathname=function(_,Z){if(_===void 0||_===!0){var G=this._parts.path||(this._parts.hostname?"/":"");return _?(this._parts.urn?r.decodeUrnPath:r.decodePath)(G):G}else return this._parts.urn?this._parts.path=_?r.recodeUrnPath(_):"":this._parts.path=_?r.recodePath(_):"/",this.build(!Z),this},a.path=a.pathname,a.href=function(_,Z){var G;if(_===void 0)return this.toString();this._string="",this._parts=r._parts();var w=_ instanceof r,X=typeof _=="object"&&(_.hostname||_.path||_.pathname);if(_.nodeName){var k=r.getDomAttribute(_);_=_[k]||"",X=!1}if(!w&&X&&_.pathname!==void 0&&(_=_.toString()),typeof _=="string"||_ instanceof String)this._parts=r.parse(String(_),this._parts);else if(w||X){var v=w?_._parts:_;for(G in v)G!=="query"&&c.call(this._parts,G)&&(this._parts[G]=v[G]);v.query&&this.query(v.query,!1)}else throw new TypeError("invalid input");return this.build(!Z),this},a.is=function(_){var Z=!1,G=!1,w=!1,X=!1,k=!1,v=!1,D=!1,Y=!this._parts.urn;switch(this._parts.hostname&&(Y=!1,G=r.ip4_expression.test(this._parts.hostname),w=r.ip6_expression.test(this._parts.hostname),Z=G||w,X=!Z,k=X&&n&&n.has(this._parts.hostname),v=X&&r.idn_expression.test(this._parts.hostname),D=X&&r.punycode_expression.test(this._parts.hostname)),_.toLowerCase()){case"relative":return Y;case"absolute":return!Y;case"domain":case"name":return X;case"sld":return k;case"ip":return Z;case"ip4":case"ipv4":case"inet4":return G;case"ip6":case"ipv6":case"inet6":return w;case"idn":return v;case"url":return!this._parts.urn;case"urn":return!!this._parts.urn;case"punycode":return D}return null};var B=a.protocol,N=a.port,P=a.hostname;a.protocol=function(_,Z){if(_&&(_=_.replace(/:(\/\/)?$/,""),!_.match(r.protocol_expression)))throw new TypeError('Protocol "'+_+`" contains characters other than [A-Z0-9.+-] or doesn't start with [A-Z]`);return B.call(this,_,Z)},a.scheme=a.protocol,a.port=function(_,Z){return this._parts.urn?_===void 0?"":this:(_!==void 0&&(_===0&&(_=null),_&&(_+="",_.charAt(0)===":"&&(_=_.substring(1)),r.ensureValidPort(_))),N.call(this,_,Z))},a.hostname=function(_,Z){if(this._parts.urn)return _===void 0?"":this;if(_!==void 0){var G={preventInvalidHostname:this._parts.preventInvalidHostname},w=r.parseHost(_,G);if(w!=="/")throw new TypeError('Hostname "'+_+'" contains characters other than [A-Z0-9.-]');_=G.hostname,this._parts.preventInvalidHostname&&r.ensureValidHostname(_,this._parts.protocol)}return P.call(this,_,Z)},a.origin=function(_,Z){if(this._parts.urn)return _===void 0?"":this;if(_===void 0){var G=this.protocol(),w=this.authority();return w?(G?G+"://":"")+this.authority():""}else{var X=r(_);return this.protocol(X.protocol()).authority(X.authority()).build(!Z),this}},a.host=function(_,Z){if(this._parts.urn)return _===void 0?"":this;if(_===void 0)return this._parts.hostname?r.buildHost(this._parts):"";var G=r.parseHost(_,this._parts);if(G!=="/")throw new TypeError('Hostname "'+_+'" contains characters other than [A-Z0-9.-]');return this.build(!Z),this},a.authority=function(_,Z){if(this._parts.urn)return _===void 0?"":this;if(_===void 0)return this._parts.hostname?r.buildAuthority(this._parts):"";var G=r.parseAuthority(_,this._parts);if(G!=="/")throw new TypeError('Hostname "'+_+'" contains characters other than [A-Z0-9.-]');return this.build(!Z),this},a.userinfo=function(_,Z){if(this._parts.urn)return _===void 0?"":this;if(_===void 0){var G=r.buildUserinfo(this._parts);return G&&G.substring(0,G.length-1)}else return _[_.length-1]!=="@"&&(_+="@"),r.parseUserinfo(_,this._parts),this.build(!Z),this},a.resource=function(_,Z){var G;return _===void 0?this.path()+this.search()+this.hash():(G=r.parse(_),this._parts.path=G.path,this._parts.query=G.query,this._parts.fragment=G.fragment,this.build(!Z),this)},a.subdomain=function(_,Z){if(this._parts.urn)return _===void 0?"":this;if(_===void 0){if(!this._parts.hostname||this.is("IP"))return"";var G=this._parts.hostname.length-this.domain().length-1;return this._parts.hostname.substring(0,G)||""}else{var w=this._parts.hostname.length-this.domain().length,X=this._parts.hostname.substring(0,w),k=new RegExp("^"+d(X));if(_&&_.charAt(_.length-1)!=="."&&(_+="."),_.indexOf(":")!==-1)throw new TypeError("Domains cannot contain colons");return _&&r.ensureValidHostname(_,this._parts.protocol),this._parts.hostname=this._parts.hostname.replace(k,_),this.build(!Z),this}},a.domain=function(_,Z){if(this._parts.urn)return _===void 0?"":this;if(typeof _=="boolean"&&(Z=_,_=void 0),_===void 0){if(!this._parts.hostname||this.is("IP"))return"";var G=this._parts.hostname.match(/\./g);if(G&&G.length<2)return this._parts.hostname;var w=this._parts.hostname.length-this.tld(Z).length-1;return w=this._parts.hostname.lastIndexOf(".",w-1)+1,this._parts.hostname.substring(w)||""}else{if(!_)throw new TypeError("cannot set domain empty");if(_.indexOf(":")!==-1)throw new TypeError("Domains cannot contain colons");if(r.ensureValidHostname(_,this._parts.protocol),!this._parts.hostname||this.is("IP"))this._parts.hostname=_;else{var X=new RegExp(d(this.domain())+"$");this._parts.hostname=this._parts.hostname.replace(X,_)}return this.build(!Z),this}},a.tld=function(_,Z){if(this._parts.urn)return _===void 0?"":this;if(typeof _=="boolean"&&(Z=_,_=void 0),_===void 0){if(!this._parts.hostname||this.is("IP"))return"";var G=this._parts.hostname.lastIndexOf("."),w=this._parts.hostname.substring(G+1);return Z!==!0&&n&&n.list[w.toLowerCase()]&&n.get(this._parts.hostname)||w}else{var X;if(_)if(_.match(/[^a-zA-Z0-9-]/))if(n&&n.is(_))X=new RegExp(d(this.tld())+"$"),this._parts.hostname=this._parts.hostname.replace(X,_);else throw new TypeError('TLD "'+_+'" contains characters other than [A-Z0-9]');else{if(!this._parts.hostname||this.is("IP"))throw new ReferenceError("cannot set TLD on non-domain host");X=new RegExp(d(this.tld())+"$"),this._parts.hostname=this._parts.hostname.replace(X,_)}else throw new TypeError("cannot set TLD empty");return this.build(!Z),this}},a.directory=function(_,Z){if(this._parts.urn)return _===void 0?"":this;if(_===void 0||_===!0){if(!this._parts.path&&!this._parts.hostname)return"";if(this._parts.path==="/")return"/";var G=this._parts.path.length-this.filename().length-1,w=this._parts.path.substring(0,G)||(this._parts.hostname?"/":"");return _?r.decodePath(w):w}else{var X=this._parts.path.length-this.filename().length,k=this._parts.path.substring(0,X),v=new RegExp("^"+d(k));return this.is("relative")||(_||(_="/"),_.charAt(0)!=="/"&&(_="/"+_)),_&&_.charAt(_.length-1)!=="/"&&(_+="/"),_=r.recodePath(_),this._parts.path=this._parts.path.replace(v,_),this.build(!Z),this}},a.filename=function(_,Z){if(this._parts.urn)return _===void 0?"":this;if(typeof _!="string"){if(!this._parts.path||this._parts.path==="/")return"";var G=this._parts.path.lastIndexOf("/"),w=this._parts.path.substring(G+1);return _?r.decodePathSegment(w):w}else{var X=!1;_.charAt(0)==="/"&&(_=_.substring(1)),_.match(/\.?\//)&&(X=!0);var k=new RegExp(d(this.filename())+"$");return _=r.recodePath(_),this._parts.path=this._parts.path.replace(k,_),X?this.normalizePath(Z):this.build(!Z),this}},a.suffix=function(_,Z){if(this._parts.urn)return _===void 0?"":this;if(_===void 0||_===!0){if(!this._parts.path||this._parts.path==="/")return"";var G=this.filename(),w=G.lastIndexOf("."),X,k;return w===-1?"":(X=G.substring(w+1),k=/^[a-z0-9%]+$/i.test(X)?X:"",_?r.decodePathSegment(k):k)}else{_.charAt(0)==="."&&(_=_.substring(1));var v=this.suffix(),D;if(v)_?D=new RegExp(d(v)+"$"):D=new RegExp(d("."+v)+"$");else{if(!_)return this;this._parts.path+="."+r.recodePath(_)}return D&&(_=r.recodePath(_),this._parts.path=this._parts.path.replace(D,_)),this.build(!Z),this}},a.segment=function(_,Z,G){var w=this._parts.urn?":":"/",X=this.path(),k=X.substring(0,1)==="/",v=X.split(w);if(_!==void 0&&typeof _!="number"&&(G=Z,Z=_,_=void 0),_!==void 0&&typeof _!="number")throw new Error('Bad segment "'+_+'", must be 0-based integer');if(k&&v.shift(),_<0&&(_=Math.max(v.length+_,0)),Z===void 0)return _===void 0?v:v[_];if(_===null||v[_]===void 0)if(h(Z)){v=[];for(var D=0,Y=Z.length;D<Y;D++)!Z[D].length&&(!v.length||!v[v.length-1].length)||(v.length&&!v[v.length-1].length&&v.pop(),v.push(b(Z[D])))}else(Z||typeof Z=="string")&&(Z=b(Z),v[v.length-1]===""?v[v.length-1]=Z:v.push(Z));else Z?v[_]=b(Z):v.splice(_,1);return k&&v.unshift(""),this.path(v.join(w),G)},a.segmentCoded=function(_,Z,G){var w,X,k;if(typeof _!="number"&&(G=Z,Z=_,_=void 0),Z===void 0){if(w=this.segment(_,Z,G),!h(w))w=w!==void 0?r.decode(w):void 0;else for(X=0,k=w.length;X<k;X++)w[X]=r.decode(w[X]);return w}if(!h(Z))Z=typeof Z=="string"||Z instanceof String?r.encode(Z):Z;else for(X=0,k=Z.length;X<k;X++)Z[X]=r.encode(Z[X]);return this.segment(_,Z,G)};var g=a.query;return a.query=function(_,Z){if(_===!0)return r.parseQuery(this._parts.query,this._parts.escapeQuerySpace);if(typeof _=="function"){var G=r.parseQuery(this._parts.query,this._parts.escapeQuerySpace),w=_.call(this,G);return this._parts.query=r.buildQuery(w||G,this._parts.duplicateQueryParameters,this._parts.escapeQuerySpace),this.build(!Z),this}else return _!==void 0&&typeof _!="string"?(this._parts.query=r.buildQuery(_,this._parts.duplicateQueryParameters,this._parts.escapeQuerySpace),this.build(!Z),this):g.call(this,_,Z)},a.setQuery=function(_,Z,G){var w=r.parseQuery(this._parts.query,this._parts.escapeQuerySpace);if(typeof _=="string"||_ instanceof String)w[_]=Z!==void 0?Z:null;else if(typeof _=="object")for(var X in _)c.call(_,X)&&(w[X]=_[X]);else throw new TypeError("URI.addQuery() accepts an object, string as the name parameter");return this._parts.query=r.buildQuery(w,this._parts.duplicateQueryParameters,this._parts.escapeQuerySpace),typeof _!="string"&&(G=Z),this.build(!G),this},a.addQuery=function(_,Z,G){var w=r.parseQuery(this._parts.query,this._parts.escapeQuerySpace);return r.addQuery(w,_,Z===void 0?null:Z),this._parts.query=r.buildQuery(w,this._parts.duplicateQueryParameters,this._parts.escapeQuerySpace),typeof _!="string"&&(G=Z),this.build(!G),this},a.removeQuery=function(_,Z,G){var w=r.parseQuery(this._parts.query,this._parts.escapeQuerySpace);return r.removeQuery(w,_,Z),this._parts.query=r.buildQuery(w,this._parts.duplicateQueryParameters,this._parts.escapeQuerySpace),typeof _!="string"&&(G=Z),this.build(!G),this},a.hasQuery=function(_,Z,G){var w=r.parseQuery(this._parts.query,this._parts.escapeQuerySpace);return r.hasQuery(w,_,Z,G)},a.setSearch=a.setQuery,a.addSearch=a.addQuery,a.removeSearch=a.removeQuery,a.hasSearch=a.hasQuery,a.normalize=function(){return this._parts.urn?this.normalizeProtocol(!1).normalizePath(!1).normalizeQuery(!1).normalizeFragment(!1).build():this.normalizeProtocol(!1).normalizeHostname(!1).normalizePort(!1).normalizePath(!1).normalizeQuery(!1).normalizeFragment(!1).build()},a.normalizeProtocol=function(_){return typeof this._parts.protocol=="string"&&(this._parts.protocol=this._parts.protocol.toLowerCase(),this.build(!_)),this},a.normalizeHostname=function(_){return this._parts.hostname&&(this.is("IDN")&&e?this._parts.hostname=e.toASCII(this._parts.hostname):this.is("IPv6")&&t&&(this._parts.hostname=t.best(this._parts.hostname)),this._parts.hostname=this._parts.hostname.toLowerCase(),this.build(!_)),this},a.normalizePort=function(_){return typeof this._parts.protocol=="string"&&this._parts.port===r.defaultPorts[this._parts.protocol]&&(this._parts.port=null,this.build(!_)),this},a.normalizePath=function(_){var Z=this._parts.path;if(!Z)return this;if(this._parts.urn)return this._parts.path=r.recodeUrnPath(this._parts.path),this.build(!_),this;if(this._parts.path==="/")return this;Z=r.recodePath(Z);var G,w="",X,k;for(Z.charAt(0)!=="/"&&(G=!0,Z="/"+Z),(Z.slice(-3)==="/.."||Z.slice(-2)==="/.")&&(Z+="/"),Z=Z.replace(/(\/(\.\/)+)|(\/\.$)/g,"/").replace(/\/{2,}/g,"/"),G&&(w=Z.substring(1).match(/^(\.\.\/)+/)||"",w&&(w=w[0]));X=Z.search(/\/\.\.(\/|$)/),X!==-1;){if(X===0){Z=Z.substring(3);continue}k=Z.substring(0,X).lastIndexOf("/"),k===-1&&(k=X),Z=Z.substring(0,k)+Z.substring(X+3)}return G&&this.is("relative")&&(Z=w+Z.substring(1)),this._parts.path=Z,this.build(!_),this},a.normalizePathname=a.normalizePath,a.normalizeQuery=function(_){return typeof this._parts.query=="string"&&(this._parts.query.length?this.query(r.parseQuery(this._parts.query,this._parts.escapeQuerySpace)):this._parts.query=null,this.build(!_)),this},a.normalizeFragment=function(_){return this._parts.fragment||(this._parts.fragment=null,this.build(!_)),this},a.normalizeSearch=a.normalizeQuery,a.normalizeHash=a.normalizeFragment,a.iso8859=function(){var _=r.encode,Z=r.decode;r.encode=escape,r.decode=decodeURIComponent;try{this.normalize()}finally{r.encode=_,r.decode=Z}return this},a.unicode=function(){var _=r.encode,Z=r.decode;r.encode=T,r.decode=unescape;try{this.normalize()}finally{r.encode=_,r.decode=Z}return this},a.readable=function(){var _=this.clone();_.username("").password("").normalize();var Z="";if(_._parts.protocol&&(Z+=_._parts.protocol+"://"),_._parts.hostname&&(_.is("punycode")&&e?(Z+=e.toUnicode(_._parts.hostname),_._parts.port&&(Z+=":"+_._parts.port)):Z+=_.host()),_._parts.hostname&&_._parts.path&&_._parts.path.charAt(0)!=="/"&&(Z+="/"),Z+=_.path(!0),_._parts.query){for(var G="",w=0,X=_._parts.query.split("&"),k=X.length;w<k;w++){var v=(X[w]||"").split("=");G+="&"+r.decodeQuery(v[0],this._parts.escapeQuerySpace).replace(/&/g,"%26"),v[1]!==void 0&&(G+="="+r.decodeQuery(v[1],this._parts.escapeQuerySpace).replace(/&/g,"%26"))}Z+="?"+G.substring(1)}return Z+=r.decodeQuery(_.hash(),!0),Z},a.absoluteTo=function(_){var Z=this.clone(),G=["protocol","username","password","hostname","port"],w,X,k;if(this._parts.urn)throw new Error("URNs do not have any generally defined hierarchical components");if(_ instanceof r||(_=new r(_)),Z._parts.protocol||(Z._parts.protocol=_._parts.protocol,this._parts.hostname))return Z;for(X=0;k=G[X];X++)Z._parts[k]=_._parts[k];return Z._parts.path?(Z._parts.path.substring(-2)===".."&&(Z._parts.path+="/"),Z.path().charAt(0)!=="/"&&(w=_.directory(),w=w||(_.path().indexOf("/")===0?"/":""),Z._parts.path=(w?w+"/":"")+Z._parts.path,Z.normalizePath())):(Z._parts.path=_._parts.path,Z._parts.query||(Z._parts.query=_._parts.query)),Z.build(),Z},a.relativeTo=function(_){var Z=this.clone().normalize(),G,w,X,k,v;if(Z._parts.urn)throw new Error("URNs do not have any generally defined hierarchical components");if(_=new r(_).normalize(),G=Z._parts,w=_._parts,k=Z.path(),v=_.path(),k.charAt(0)!=="/")throw new Error("URI is already relative");if(v.charAt(0)!=="/")throw new Error("Cannot calculate a URI relative to another relative URI");if(G.protocol===w.protocol&&(G.protocol=null),G.username!==w.username||G.password!==w.password||G.protocol!==null||G.username!==null||G.password!==null)return Z.build();if(G.hostname===w.hostname&&G.port===w.port)G.hostname=null,G.port=null;else return Z.build();if(k===v)return G.path="",Z.build();if(X=r.commonPath(k,v),!X)return Z.build();var D=w.path.substring(X.length).replace(/[^\/]*$/,"").replace(/.*?\//g,"../");return G.path=D+G.path.substring(X.length)||"./",Z.build()},a.equals=function(_){var Z=this.clone(),G=new r(_),w={},X={},k={},v,D,Y;if(Z.normalize(),G.normalize(),Z.toString()===G.toString())return!0;if(v=Z.query(),D=G.query(),Z.query(""),G.query(""),Z.toString()!==G.toString()||v.length!==D.length)return!1;w=r.parseQuery(v,this._parts.escapeQuerySpace),X=r.parseQuery(D,this._parts.escapeQuerySpace);for(Y in w)if(c.call(w,Y)){if(h(w[Y])){if(!f(w[Y],X[Y]))return!1}else if(w[Y]!==X[Y])return!1;k[Y]=!0}for(Y in X)if(c.call(X,Y)&&!k[Y])return!1;return!0},a.preventInvalidHostname=function(_){return this._parts.preventInvalidHostname=!!_,this},a.duplicateQueryParameters=function(_){return this._parts.duplicateQueryParameters=!!_,this},a.escapeQuerySpace=function(_){return this._parts.escapeQuerySpace=!!_,this},r})});var Dfe=nm((G4n,Ufe)=>{"use strict";var L4n=y(x());Ufe.exports=$qe;var JB=1e20;function $qe(e,t){t||(t={});var n=t.cutoff==null?.25:t.cutoff,i=t.radius==null?8:t.radius,o=t.channel||0,r,s,a,c,d,u,h,p,A,f,b;if(ArrayBuffer.isView(e)||Array.isArray(e)){if(!t.width||!t.height)throw Error("For raw data width and height should be provided by options");r=t.width,s=t.height,c=e,t.stride?u=t.stride:u=Math.floor(e.length/r/s)}else window.HTMLCanvasElement&&e instanceof window.HTMLCanvasElement?(p=e,h=p.getContext("2d"),r=p.width,s=p.height,A=h.getImageData(0,0,r,s),c=A.data,u=4):window.CanvasRenderingContext2D&&e instanceof window.CanvasRenderingContext2D?(p=e.canvas,h=e,r=p.width,s=p.height,A=h.getImageData(0,0,r,s),c=A.data,u=4):window.ImageData&&e instanceof window.ImageData&&(A=e,r=e.width,s=e.height,c=A.data,u=4);if(a=Math.max(r,s),window.Uint8ClampedArray&&c instanceof window.Uint8ClampedArray||window.Uint8Array&&c instanceof window.Uint8Array)for(d=c,c=Array(r*s),f=0,b=Math.floor(d.length/u);f<b;f++)c[f]=d[f*u+o]/255;else if(u!==1)throw Error("Raw data can have only 1 value per pixel");var C=Array(r*s),T=Array(r*s),E=Array(a),S=Array(a),I=Array(a+1),R=Array(a);for(f=0,b=r*s;f<b;f++){var V=c[f];C[f]=V===1?0:V===0?JB:Math.pow(Math.max(0,.5-V),2),T[f]=V===1?JB:V===0?0:Math.pow(Math.max(0,V-.5),2)}Mfe(C,r,s,E,S,R,I),Mfe(T,r,s,E,S,R,I);var W=window.Float32Array?new Float32Array(r*s):new Array(r*s);for(f=0,b=r*s;f<b;f++)W[f]=Math.min(Math.max(1-((C[f]-T[f])/i+n),0),1);return W}function Mfe(e,t,n,i,o,r,s){for(var a=0;a<t;a++){for(var c=0;c<n;c++)i[c]=e[c*t+a];for(vfe(i,o,r,s,n),c=0;c<n;c++)e[c*t+a]=o[c]}for(c=0;c<n;c++){for(a=0;a<t;a++)i[a]=e[c*t+a];for(vfe(i,o,r,s,t),a=0;a<t;a++)e[c*t+a]=Math.sqrt(o[a])}}function vfe(e,t,n,i,o){n[0]=0,i[0]=-JB,i[1]=+JB;for(var r=1,s=0;r<o;r++){for(var a=(e[r]+r*r-(e[n[s]]+n[s]*n[s]))/(2*r-2*n[s]);a<=i[s];)s--,a=(e[r]+r*r-(e[n[s]]+n[s]*n[s]))/(2*r-2*n[s]);s++,n[s]=r,i[s]=a,i[s+1]=+JB}for(r=0,s=0;r<o;r++){for(;i[s+1]<r;)s++;t[r]=(r-n[s])*(r-n[s])+e[n[s]]}}});var Hfe=nm((K4n,A9)=>{var j4n=y(x());function d$e(){var e=0,t=1,n=2,i=3,o=4,r=5,s=6,a=7,c=8,d=9,u=10,h=11,p=12,A=13,f=14,b=15,C=16,T=17,E=0,S=1,I=2,R=3,V=4;function W(g,_){return 55296<=g.charCodeAt(_)&&g.charCodeAt(_)<=56319&&56320<=g.charCodeAt(_+1)&&g.charCodeAt(_+1)<=57343}function B(g,_){_===void 0&&(_=0);var Z=g.charCodeAt(_);if(55296<=Z&&Z<=56319&&_<g.length-1){var G=Z,w=g.charCodeAt(_+1);return 56320<=w&&w<=57343?(G-55296)*1024+(w-56320)+65536:G}if(56320<=Z&&Z<=57343&&_>=1){var G=g.charCodeAt(_-1),w=Z;return 55296<=G&&G<=56319?(G-55296)*1024+(w-56320)+65536:w}return Z}function N(g,_,Z){var G=[g].concat(_).concat([Z]),w=G[G.length-2],X=Z,k=G.lastIndexOf(f);if(k>1&&G.slice(1,k).every(function(Y){return Y==i})&&[i,A,T].indexOf(g)==-1)return I;var v=G.lastIndexOf(o);if(v>0&&G.slice(1,v).every(function(Y){return Y==o})&&[p,o].indexOf(w)==-1)return G.filter(function(Y){return Y==o}).length%2==1?R:V;if(w==e&&X==t)return E;if(w==n||w==e||w==t)return X==f&&_.every(function(Y){return Y==i})?I:S;if(X==n||X==e||X==t)return S;if(w==s&&(X==s||X==a||X==d||X==u))return E;if((w==d||w==a)&&(X==a||X==c))return E;if((w==u||w==c)&&X==c)return E;if(X==i||X==b)return E;if(X==r)return E;if(w==p)return E;var D=G.indexOf(i)!=-1?G.lastIndexOf(i)-1:G.length-2;return[A,T].indexOf(G[D])!=-1&&G.slice(D+1,-1).every(function(Y){return Y==i})&&X==f||w==b&&[C,T].indexOf(X)!=-1?E:_.indexOf(o)!=-1?I:w==o&&X==o?E:S}this.nextBreak=function(g,_){if(_===void 0&&(_=0),_<0)return 0;if(_>=g.length-1)return g.length;for(var Z=P(B(g,_)),G=[],w=_+1;w<g.length;w++)if(!W(g,w-1)){var X=P(B(g,w));if(N(Z,G,X))return w;G.push(X)}return g.length},this.splitGraphemes=function(g){for(var _=[],Z=0,G;(G=this.nextBreak(g,Z))<g.length;)_.push(g.slice(Z,G)),Z=G;return Z<g.length&&_.push(g.slice(Z)),_},this.iterateGraphemes=function(g){var _=0,Z={next:(function(){var G,w;return(w=this.nextBreak(g,_))<g.length?(G=g.slice(_,w),_=w,{value:G,done:!1}):_<g.length?(G=g.slice(_),_=g.length,{value:G,done:!1}):{value:void 0,done:!0}}).bind(this)};return typeof Symbol<"u"&&Symbol.iterator&&(Z[Symbol.iterator]=function(){return Z}),Z},this.countGraphemes=function(g){for(var _=0,Z=0,G;(G=this.nextBreak(g,Z))<g.length;)Z=G,_++;return Z<g.length&&_++,_};function P(g){return 1536<=g&&g<=1541||g==1757||g==1807||g==2274||g==3406||g==69821||70082<=g&&g<=70083||g==72250||72326<=g&&g<=72329||g==73030?p:g==13?e:g==10?t:0<=g&&g<=9||11<=g&&g<=12||14<=g&&g<=31||127<=g&&g<=159||g==173||g==1564||g==6158||g==8203||8206<=g&&g<=8207||g==8232||g==8233||8234<=g&&g<=8238||8288<=g&&g<=8292||g==8293||8294<=g&&g<=8303||55296<=g&&g<=57343||g==65279||65520<=g&&g<=65528||65529<=g&&g<=65531||113824<=g&&g<=113827||119155<=g&&g<=119162||g==917504||g==917505||917506<=g&&g<=917535||917632<=g&&g<=917759||918e3<=g&&g<=921599?n:768<=g&&g<=879||1155<=g&&g<=1159||1160<=g&&g<=1161||1425<=g&&g<=1469||g==1471||1473<=g&&g<=1474||1476<=g&&g<=1477||g==1479||1552<=g&&g<=1562||1611<=g&&g<=1631||g==1648||1750<=g&&g<=1756||1759<=g&&g<=1764||1767<=g&&g<=1768||1770<=g&&g<=1773||g==1809||1840<=g&&g<=1866||1958<=g&&g<=1968||2027<=g&&g<=2035||2070<=g&&g<=2073||2075<=g&&g<=2083||2085<=g&&g<=2087||2089<=g&&g<=2093||2137<=g&&g<=2139||2260<=g&&g<=2273||2275<=g&&g<=2306||g==2362||g==2364||2369<=g&&g<=2376||g==2381||2385<=g&&g<=2391||2402<=g&&g<=2403||g==2433||g==2492||g==2494||2497<=g&&g<=2500||g==2509||g==2519||2530<=g&&g<=2531||2561<=g&&g<=2562||g==2620||2625<=g&&g<=2626||2631<=g&&g<=2632||2635<=g&&g<=2637||g==2641||2672<=g&&g<=2673||g==2677||2689<=g&&g<=2690||g==2748||2753<=g&&g<=2757||2759<=g&&g<=2760||g==2765||2786<=g&&g<=2787||2810<=g&&g<=2815||g==2817||g==2876||g==2878||g==2879||2881<=g&&g<=2884||g==2893||g==2902||g==2903||2914<=g&&g<=2915||g==2946||g==3006||g==3008||g==3021||g==3031||g==3072||3134<=g&&g<=3136||3142<=g&&g<=3144||3146<=g&&g<=3149||3157<=g&&g<=3158||3170<=g&&g<=3171||g==3201||g==3260||g==3263||g==3266||g==3270||3276<=g&&g<=3277||3285<=g&&g<=3286||3298<=g&&g<=3299||3328<=g&&g<=3329||3387<=g&&g<=3388||g==3390||3393<=g&&g<=3396||g==3405||g==3415||3426<=g&&g<=3427||g==3530||g==3535||3538<=g&&g<=3540||g==3542||g==3551||g==3633||3636<=g&&g<=3642||3655<=g&&g<=3662||g==3761||3764<=g&&g<=3769||3771<=g&&g<=3772||3784<=g&&g<=3789||3864<=g&&g<=3865||g==3893||g==3895||g==3897||3953<=g&&g<=3966||3968<=g&&g<=3972||3974<=g&&g<=3975||3981<=g&&g<=3991||3993<=g&&g<=4028||g==4038||4141<=g&&g<=4144||4146<=g&&g<=4151||4153<=g&&g<=4154||4157<=g&&g<=4158||4184<=g&&g<=4185||4190<=g&&g<=4192||4209<=g&&g<=4212||g==4226||4229<=g&&g<=4230||g==4237||g==4253||4957<=g&&g<=4959||5906<=g&&g<=5908||5938<=g&&g<=5940||5970<=g&&g<=5971||6002<=g&&g<=6003||6068<=g&&g<=6069||6071<=g&&g<=6077||g==6086||6089<=g&&g<=6099||g==6109||6155<=g&&g<=6157||6277<=g&&g<=6278||g==6313||6432<=g&&g<=6434||6439<=g&&g<=6440||g==6450||6457<=g&&g<=6459||6679<=g&&g<=6680||g==6683||g==6742||6744<=g&&g<=6750||g==6752||g==6754||6757<=g&&g<=6764||6771<=g&&g<=6780||g==6783||6832<=g&&g<=6845||g==6846||6912<=g&&g<=6915||g==6964||6966<=g&&g<=6970||g==6972||g==6978||7019<=g&&g<=7027||7040<=g&&g<=7041||7074<=g&&g<=7077||7080<=g&&g<=7081||7083<=g&&g<=7085||g==7142||7144<=g&&g<=7145||g==7149||7151<=g&&g<=7153||7212<=g&&g<=7219||7222<=g&&g<=7223||7376<=g&&g<=7378||7380<=g&&g<=7392||7394<=g&&g<=7400||g==7405||g==7412||7416<=g&&g<=7417||7616<=g&&g<=7673||7675<=g&&g<=7679||g==8204||8400<=g&&g<=8412||8413<=g&&g<=8416||g==8417||8418<=g&&g<=8420||8421<=g&&g<=8432||11503<=g&&g<=11505||g==11647||11744<=g&&g<=11775||12330<=g&&g<=12333||12334<=g&&g<=12335||12441<=g&&g<=12442||g==42607||42608<=g&&g<=42610||42612<=g&&g<=42621||42654<=g&&g<=42655||42736<=g&&g<=42737||g==43010||g==43014||g==43019||43045<=g&&g<=43046||43204<=g&&g<=43205||43232<=g&&g<=43249||43302<=g&&g<=43309||43335<=g&&g<=43345||43392<=g&&g<=43394||g==43443||43446<=g&&g<=43449||g==43452||g==43493||43561<=g&&g<=43566||43569<=g&&g<=43570||43573<=g&&g<=43574||g==43587||g==43596||g==43644||g==43696||43698<=g&&g<=43700||43703<=g&&g<=43704||43710<=g&&g<=43711||g==43713||43756<=g&&g<=43757||g==43766||g==44005||g==44008||g==44013||g==64286||65024<=g&&g<=65039||65056<=g&&g<=65071||65438<=g&&g<=65439||g==66045||g==66272||66422<=g&&g<=66426||68097<=g&&g<=68099||68101<=g&&g<=68102||68108<=g&&g<=68111||68152<=g&&g<=68154||g==68159||68325<=g&&g<=68326||g==69633||69688<=g&&g<=69702||69759<=g&&g<=69761||69811<=g&&g<=69814||69817<=g&&g<=69818||69888<=g&&g<=69890||69927<=g&&g<=69931||69933<=g&&g<=69940||g==70003||70016<=g&&g<=70017||70070<=g&&g<=70078||70090<=g&&g<=70092||70191<=g&&g<=70193||g==70196||70198<=g&&g<=70199||g==70206||g==70367||70371<=g&&g<=70378||70400<=g&&g<=70401||g==70460||g==70462||g==70464||g==70487||70502<=g&&g<=70508||70512<=g&&g<=70516||70712<=g&&g<=70719||70722<=g&&g<=70724||g==70726||g==70832||70835<=g&&g<=70840||g==70842||g==70845||70847<=g&&g<=70848||70850<=g&&g<=70851||g==71087||71090<=g&&g<=71093||71100<=g&&g<=71101||71103<=g&&g<=71104||71132<=g&&g<=71133||71219<=g&&g<=71226||g==71229||71231<=g&&g<=71232||g==71339||g==71341||71344<=g&&g<=71349||g==71351||71453<=g&&g<=71455||71458<=g&&g<=71461||71463<=g&&g<=71467||72193<=g&&g<=72198||72201<=g&&g<=72202||72243<=g&&g<=72248||72251<=g&&g<=72254||g==72263||72273<=g&&g<=72278||72281<=g&&g<=72283||72330<=g&&g<=72342||72344<=g&&g<=72345||72752<=g&&g<=72758||72760<=g&&g<=72765||g==72767||72850<=g&&g<=72871||72874<=g&&g<=72880||72882<=g&&g<=72883||72885<=g&&g<=72886||73009<=g&&g<=73014||g==73018||73020<=g&&g<=73021||73023<=g&&g<=73029||g==73031||92912<=g&&g<=92916||92976<=g&&g<=92982||94095<=g&&g<=94098||113821<=g&&g<=113822||g==119141||119143<=g&&g<=119145||119150<=g&&g<=119154||119163<=g&&g<=119170||119173<=g&&g<=119179||119210<=g&&g<=119213||119362<=g&&g<=119364||121344<=g&&g<=121398||121403<=g&&g<=121452||g==121461||g==121476||121499<=g&&g<=121503||121505<=g&&g<=121519||122880<=g&&g<=122886||122888<=g&&g<=122904||122907<=g&&g<=122913||122915<=g&&g<=122916||122918<=g&&g<=122922||125136<=g&&g<=125142||125252<=g&&g<=125258||917536<=g&&g<=917631||917760<=g&&g<=917999?i:127462<=g&&g<=127487?o:g==2307||g==2363||2366<=g&&g<=2368||2377<=g&&g<=2380||2382<=g&&g<=2383||2434<=g&&g<=2435||2495<=g&&g<=2496||2503<=g&&g<=2504||2507<=g&&g<=2508||g==2563||2622<=g&&g<=2624||g==2691||2750<=g&&g<=2752||g==2761||2763<=g&&g<=2764||2818<=g&&g<=2819||g==2880||2887<=g&&g<=2888||2891<=g&&g<=2892||g==3007||3009<=g&&g<=3010||3014<=g&&g<=3016||3018<=g&&g<=3020||3073<=g&&g<=3075||3137<=g&&g<=3140||3202<=g&&g<=3203||g==3262||3264<=g&&g<=3265||3267<=g&&g<=3268||3271<=g&&g<=3272||3274<=g&&g<=3275||3330<=g&&g<=3331||3391<=g&&g<=3392||3398<=g&&g<=3400||3402<=g&&g<=3404||3458<=g&&g<=3459||3536<=g&&g<=3537||3544<=g&&g<=3550||3570<=g&&g<=3571||g==3635||g==3763||3902<=g&&g<=3903||g==3967||g==4145||4155<=g&&g<=4156||4182<=g&&g<=4183||g==4228||g==6070||6078<=g&&g<=6085||6087<=g&&g<=6088||6435<=g&&g<=6438||6441<=g&&g<=6443||6448<=g&&g<=6449||6451<=g&&g<=6456||6681<=g&&g<=6682||g==6741||g==6743||6765<=g&&g<=6770||g==6916||g==6965||g==6971||6973<=g&&g<=6977||6979<=g&&g<=6980||g==7042||g==7073||7078<=g&&g<=7079||g==7082||g==7143||7146<=g&&g<=7148||g==7150||7154<=g&&g<=7155||7204<=g&&g<=7211||7220<=g&&g<=7221||g==7393||7410<=g&&g<=7411||g==7415||43043<=g&&g<=43044||g==43047||43136<=g&&g<=43137||43188<=g&&g<=43203||43346<=g&&g<=43347||g==43395||43444<=g&&g<=43445||43450<=g&&g<=43451||43453<=g&&g<=43456||43567<=g&&g<=43568||43571<=g&&g<=43572||g==43597||g==43755||43758<=g&&g<=43759||g==43765||44003<=g&&g<=44004||44006<=g&&g<=44007||44009<=g&&g<=44010||g==44012||g==69632||g==69634||g==69762||69808<=g&&g<=69810||69815<=g&&g<=69816||g==69932||g==70018||70067<=g&&g<=70069||70079<=g&&g<=70080||70188<=g&&g<=70190||70194<=g&&g<=70195||g==70197||70368<=g&&g<=70370||70402<=g&&g<=70403||g==70463||70465<=g&&g<=70468||70471<=g&&g<=70472||70475<=g&&g<=70477||70498<=g&&g<=70499||70709<=g&&g<=70711||70720<=g&&g<=70721||g==70725||70833<=g&&g<=70834||g==70841||70843<=g&&g<=70844||g==70846||g==70849||71088<=g&&g<=71089||71096<=g&&g<=71099||g==71102||71216<=g&&g<=71218||71227<=g&&g<=71228||g==71230||g==71340||71342<=g&&g<=71343||g==71350||71456<=g&&g<=71457||g==71462||72199<=g&&g<=72200||g==72249||72279<=g&&g<=72280||g==72343||g==72751||g==72766||g==72873||g==72881||g==72884||94033<=g&&g<=94078||g==119142||g==119149?r:4352<=g&&g<=4447||43360<=g&&g<=43388?s:4448<=g&&g<=4519||55216<=g&&g<=55238?a:4520<=g&&g<=4607||55243<=g&&g<=55291?c:g==44032||g==44060||g==44088||g==44116||g==44144||g==44172||g==44200||g==44228||g==44256||g==44284||g==44312||g==44340||g==44368||g==44396||g==44424||g==44452||g==44480||g==44508||g==44536||g==44564||g==44592||g==44620||g==44648||g==44676||g==44704||g==44732||g==44760||g==44788||g==44816||g==44844||g==44872||g==44900||g==44928||g==44956||g==44984||g==45012||g==45040||g==45068||g==45096||g==45124||g==45152||g==45180||g==45208||g==45236||g==45264||g==45292||g==45320||g==45348||g==45376||g==45404||g==45432||g==45460||g==45488||g==45516||g==45544||g==45572||g==45600||g==45628||g==45656||g==45684||g==45712||g==45740||g==45768||g==45796||g==45824||g==45852||g==45880||g==45908||g==45936||g==45964||g==45992||g==46020||g==46048||g==46076||g==46104||g==46132||g==46160||g==46188||g==46216||g==46244||g==46272||g==46300||g==46328||g==46356||g==46384||g==46412||g==46440||g==46468||g==46496||g==46524||g==46552||g==46580||g==46608||g==46636||g==46664||g==46692||g==46720||g==46748||g==46776||g==46804||g==46832||g==46860||g==46888||g==46916||g==46944||g==46972||g==47e3||g==47028||g==47056||g==47084||g==47112||g==47140||g==47168||g==47196||g==47224||g==47252||g==47280||g==47308||g==47336||g==47364||g==47392||g==47420||g==47448||g==47476||g==47504||g==47532||g==47560||g==47588||g==47616||g==47644||g==47672||g==47700||g==47728||g==47756||g==47784||g==47812||g==47840||g==47868||g==47896||g==47924||g==47952||g==47980||g==48008||g==48036||g==48064||g==48092||g==48120||g==48148||g==48176||g==48204||g==48232||g==48260||g==48288||g==48316||g==48344||g==48372||g==48400||g==48428||g==48456||g==48484||g==48512||g==48540||g==48568||g==48596||g==48624||g==48652||g==48680||g==48708||g==48736||g==48764||g==48792||g==48820||g==48848||g==48876||g==48904||g==48932||g==48960||g==48988||g==49016||g==49044||g==49072||g==49100||g==49128||g==49156||g==49184||g==49212||g==49240||g==49268||g==49296||g==49324||g==49352||g==49380||g==49408||g==49436||g==49464||g==49492||g==49520||g==49548||g==49576||g==49604||g==49632||g==49660||g==49688||g==49716||g==49744||g==49772||g==49800||g==49828||g==49856||g==49884||g==49912||g==49940||g==49968||g==49996||g==50024||g==50052||g==50080||g==50108||g==50136||g==50164||g==50192||g==50220||g==50248||g==50276||g==50304||g==50332||g==50360||g==50388||g==50416||g==50444||g==50472||g==50500||g==50528||g==50556||g==50584||g==50612||g==50640||g==50668||g==50696||g==50724||g==50752||g==50780||g==50808||g==50836||g==50864||g==50892||g==50920||g==50948||g==50976||g==51004||g==51032||g==51060||g==51088||g==51116||g==51144||g==51172||g==51200||g==51228||g==51256||g==51284||g==51312||g==51340||g==51368||g==51396||g==51424||g==51452||g==51480||g==51508||g==51536||g==51564||g==51592||g==51620||g==51648||g==51676||g==51704||g==51732||g==51760||g==51788||g==51816||g==51844||g==51872||g==51900||g==51928||g==51956||g==51984||g==52012||g==52040||g==52068||g==52096||g==52124||g==52152||g==52180||g==52208||g==52236||g==52264||g==52292||g==52320||g==52348||g==52376||g==52404||g==52432||g==52460||g==52488||g==52516||g==52544||g==52572||g==52600||g==52628||g==52656||g==52684||g==52712||g==52740||g==52768||g==52796||g==52824||g==52852||g==52880||g==52908||g==52936||g==52964||g==52992||g==53020||g==53048||g==53076||g==53104||g==53132||g==53160||g==53188||g==53216||g==53244||g==53272||g==53300||g==53328||g==53356||g==53384||g==53412||g==53440||g==53468||g==53496||g==53524||g==53552||g==53580||g==53608||g==53636||g==53664||g==53692||g==53720||g==53748||g==53776||g==53804||g==53832||g==53860||g==53888||g==53916||g==53944||g==53972||g==54e3||g==54028||g==54056||g==54084||g==54112||g==54140||g==54168||g==54196||g==54224||g==54252||g==54280||g==54308||g==54336||g==54364||g==54392||g==54420||g==54448||g==54476||g==54504||g==54532||g==54560||g==54588||g==54616||g==54644||g==54672||g==54700||g==54728||g==54756||g==54784||g==54812||g==54840||g==54868||g==54896||g==54924||g==54952||g==54980||g==55008||g==55036||g==55064||g==55092||g==55120||g==55148||g==55176?d:44033<=g&&g<=44059||44061<=g&&g<=44087||44089<=g&&g<=44115||44117<=g&&g<=44143||44145<=g&&g<=44171||44173<=g&&g<=44199||44201<=g&&g<=44227||44229<=g&&g<=44255||44257<=g&&g<=44283||44285<=g&&g<=44311||44313<=g&&g<=44339||44341<=g&&g<=44367||44369<=g&&g<=44395||44397<=g&&g<=44423||44425<=g&&g<=44451||44453<=g&&g<=44479||44481<=g&&g<=44507||44509<=g&&g<=44535||44537<=g&&g<=44563||44565<=g&&g<=44591||44593<=g&&g<=44619||44621<=g&&g<=44647||44649<=g&&g<=44675||44677<=g&&g<=44703||44705<=g&&g<=44731||44733<=g&&g<=44759||44761<=g&&g<=44787||44789<=g&&g<=44815||44817<=g&&g<=44843||44845<=g&&g<=44871||44873<=g&&g<=44899||44901<=g&&g<=44927||44929<=g&&g<=44955||44957<=g&&g<=44983||44985<=g&&g<=45011||45013<=g&&g<=45039||45041<=g&&g<=45067||45069<=g&&g<=45095||45097<=g&&g<=45123||45125<=g&&g<=45151||45153<=g&&g<=45179||45181<=g&&g<=45207||45209<=g&&g<=45235||45237<=g&&g<=45263||45265<=g&&g<=45291||45293<=g&&g<=45319||45321<=g&&g<=45347||45349<=g&&g<=45375||45377<=g&&g<=45403||45405<=g&&g<=45431||45433<=g&&g<=45459||45461<=g&&g<=45487||45489<=g&&g<=45515||45517<=g&&g<=45543||45545<=g&&g<=45571||45573<=g&&g<=45599||45601<=g&&g<=45627||45629<=g&&g<=45655||45657<=g&&g<=45683||45685<=g&&g<=45711||45713<=g&&g<=45739||45741<=g&&g<=45767||45769<=g&&g<=45795||45797<=g&&g<=45823||45825<=g&&g<=45851||45853<=g&&g<=45879||45881<=g&&g<=45907||45909<=g&&g<=45935||45937<=g&&g<=45963||45965<=g&&g<=45991||45993<=g&&g<=46019||46021<=g&&g<=46047||46049<=g&&g<=46075||46077<=g&&g<=46103||46105<=g&&g<=46131||46133<=g&&g<=46159||46161<=g&&g<=46187||46189<=g&&g<=46215||46217<=g&&g<=46243||46245<=g&&g<=46271||46273<=g&&g<=46299||46301<=g&&g<=46327||46329<=g&&g<=46355||46357<=g&&g<=46383||46385<=g&&g<=46411||46413<=g&&g<=46439||46441<=g&&g<=46467||46469<=g&&g<=46495||46497<=g&&g<=46523||46525<=g&&g<=46551||46553<=g&&g<=46579||46581<=g&&g<=46607||46609<=g&&g<=46635||46637<=g&&g<=46663||46665<=g&&g<=46691||46693<=g&&g<=46719||46721<=g&&g<=46747||46749<=g&&g<=46775||46777<=g&&g<=46803||46805<=g&&g<=46831||46833<=g&&g<=46859||46861<=g&&g<=46887||46889<=g&&g<=46915||46917<=g&&g<=46943||46945<=g&&g<=46971||46973<=g&&g<=46999||47001<=g&&g<=47027||47029<=g&&g<=47055||47057<=g&&g<=47083||47085<=g&&g<=47111||47113<=g&&g<=47139||47141<=g&&g<=47167||47169<=g&&g<=47195||47197<=g&&g<=47223||47225<=g&&g<=47251||47253<=g&&g<=47279||47281<=g&&g<=47307||47309<=g&&g<=47335||47337<=g&&g<=47363||47365<=g&&g<=47391||47393<=g&&g<=47419||47421<=g&&g<=47447||47449<=g&&g<=47475||47477<=g&&g<=47503||47505<=g&&g<=47531||47533<=g&&g<=47559||47561<=g&&g<=47587||47589<=g&&g<=47615||47617<=g&&g<=47643||47645<=g&&g<=47671||47673<=g&&g<=47699||47701<=g&&g<=47727||47729<=g&&g<=47755||47757<=g&&g<=47783||47785<=g&&g<=47811||47813<=g&&g<=47839||47841<=g&&g<=47867||47869<=g&&g<=47895||47897<=g&&g<=47923||47925<=g&&g<=47951||47953<=g&&g<=47979||47981<=g&&g<=48007||48009<=g&&g<=48035||48037<=g&&g<=48063||48065<=g&&g<=48091||48093<=g&&g<=48119||48121<=g&&g<=48147||48149<=g&&g<=48175||48177<=g&&g<=48203||48205<=g&&g<=48231||48233<=g&&g<=48259||48261<=g&&g<=48287||48289<=g&&g<=48315||48317<=g&&g<=48343||48345<=g&&g<=48371||48373<=g&&g<=48399||48401<=g&&g<=48427||48429<=g&&g<=48455||48457<=g&&g<=48483||48485<=g&&g<=48511||48513<=g&&g<=48539||48541<=g&&g<=48567||48569<=g&&g<=48595||48597<=g&&g<=48623||48625<=g&&g<=48651||48653<=g&&g<=48679||48681<=g&&g<=48707||48709<=g&&g<=48735||48737<=g&&g<=48763||48765<=g&&g<=48791||48793<=g&&g<=48819||48821<=g&&g<=48847||48849<=g&&g<=48875||48877<=g&&g<=48903||48905<=g&&g<=48931||48933<=g&&g<=48959||48961<=g&&g<=48987||48989<=g&&g<=49015||49017<=g&&g<=49043||49045<=g&&g<=49071||49073<=g&&g<=49099||49101<=g&&g<=49127||49129<=g&&g<=49155||49157<=g&&g<=49183||49185<=g&&g<=49211||49213<=g&&g<=49239||49241<=g&&g<=49267||49269<=g&&g<=49295||49297<=g&&g<=49323||49325<=g&&g<=49351||49353<=g&&g<=49379||49381<=g&&g<=49407||49409<=g&&g<=49435||49437<=g&&g<=49463||49465<=g&&g<=49491||49493<=g&&g<=49519||49521<=g&&g<=49547||49549<=g&&g<=49575||49577<=g&&g<=49603||49605<=g&&g<=49631||49633<=g&&g<=49659||49661<=g&&g<=49687||49689<=g&&g<=49715||49717<=g&&g<=49743||49745<=g&&g<=49771||49773<=g&&g<=49799||49801<=g&&g<=49827||49829<=g&&g<=49855||49857<=g&&g<=49883||49885<=g&&g<=49911||49913<=g&&g<=49939||49941<=g&&g<=49967||49969<=g&&g<=49995||49997<=g&&g<=50023||50025<=g&&g<=50051||50053<=g&&g<=50079||50081<=g&&g<=50107||50109<=g&&g<=50135||50137<=g&&g<=50163||50165<=g&&g<=50191||50193<=g&&g<=50219||50221<=g&&g<=50247||50249<=g&&g<=50275||50277<=g&&g<=50303||50305<=g&&g<=50331||50333<=g&&g<=50359||50361<=g&&g<=50387||50389<=g&&g<=50415||50417<=g&&g<=50443||50445<=g&&g<=50471||50473<=g&&g<=50499||50501<=g&&g<=50527||50529<=g&&g<=50555||50557<=g&&g<=50583||50585<=g&&g<=50611||50613<=g&&g<=50639||50641<=g&&g<=50667||50669<=g&&g<=50695||50697<=g&&g<=50723||50725<=g&&g<=50751||50753<=g&&g<=50779||50781<=g&&g<=50807||50809<=g&&g<=50835||50837<=g&&g<=50863||50865<=g&&g<=50891||50893<=g&&g<=50919||50921<=g&&g<=50947||50949<=g&&g<=50975||50977<=g&&g<=51003||51005<=g&&g<=51031||51033<=g&&g<=51059||51061<=g&&g<=51087||51089<=g&&g<=51115||51117<=g&&g<=51143||51145<=g&&g<=51171||51173<=g&&g<=51199||51201<=g&&g<=51227||51229<=g&&g<=51255||51257<=g&&g<=51283||51285<=g&&g<=51311||51313<=g&&g<=51339||51341<=g&&g<=51367||51369<=g&&g<=51395||51397<=g&&g<=51423||51425<=g&&g<=51451||51453<=g&&g<=51479||51481<=g&&g<=51507||51509<=g&&g<=51535||51537<=g&&g<=51563||51565<=g&&g<=51591||51593<=g&&g<=51619||51621<=g&&g<=51647||51649<=g&&g<=51675||51677<=g&&g<=51703||51705<=g&&g<=51731||51733<=g&&g<=51759||51761<=g&&g<=51787||51789<=g&&g<=51815||51817<=g&&g<=51843||51845<=g&&g<=51871||51873<=g&&g<=51899||51901<=g&&g<=51927||51929<=g&&g<=51955||51957<=g&&g<=51983||51985<=g&&g<=52011||52013<=g&&g<=52039||52041<=g&&g<=52067||52069<=g&&g<=52095||52097<=g&&g<=52123||52125<=g&&g<=52151||52153<=g&&g<=52179||52181<=g&&g<=52207||52209<=g&&g<=52235||52237<=g&&g<=52263||52265<=g&&g<=52291||52293<=g&&g<=52319||52321<=g&&g<=52347||52349<=g&&g<=52375||52377<=g&&g<=52403||52405<=g&&g<=52431||52433<=g&&g<=52459||52461<=g&&g<=52487||52489<=g&&g<=52515||52517<=g&&g<=52543||52545<=g&&g<=52571||52573<=g&&g<=52599||52601<=g&&g<=52627||52629<=g&&g<=52655||52657<=g&&g<=52683||52685<=g&&g<=52711||52713<=g&&g<=52739||52741<=g&&g<=52767||52769<=g&&g<=52795||52797<=g&&g<=52823||52825<=g&&g<=52851||52853<=g&&g<=52879||52881<=g&&g<=52907||52909<=g&&g<=52935||52937<=g&&g<=52963||52965<=g&&g<=52991||52993<=g&&g<=53019||53021<=g&&g<=53047||53049<=g&&g<=53075||53077<=g&&g<=53103||53105<=g&&g<=53131||53133<=g&&g<=53159||53161<=g&&g<=53187||53189<=g&&g<=53215||53217<=g&&g<=53243||53245<=g&&g<=53271||53273<=g&&g<=53299||53301<=g&&g<=53327||53329<=g&&g<=53355||53357<=g&&g<=53383||53385<=g&&g<=53411||53413<=g&&g<=53439||53441<=g&&g<=53467||53469<=g&&g<=53495||53497<=g&&g<=53523||53525<=g&&g<=53551||53553<=g&&g<=53579||53581<=g&&g<=53607||53609<=g&&g<=53635||53637<=g&&g<=53663||53665<=g&&g<=53691||53693<=g&&g<=53719||53721<=g&&g<=53747||53749<=g&&g<=53775||53777<=g&&g<=53803||53805<=g&&g<=53831||53833<=g&&g<=53859||53861<=g&&g<=53887||53889<=g&&g<=53915||53917<=g&&g<=53943||53945<=g&&g<=53971||53973<=g&&g<=53999||54001<=g&&g<=54027||54029<=g&&g<=54055||54057<=g&&g<=54083||54085<=g&&g<=54111||54113<=g&&g<=54139||54141<=g&&g<=54167||54169<=g&&g<=54195||54197<=g&&g<=54223||54225<=g&&g<=54251||54253<=g&&g<=54279||54281<=g&&g<=54307||54309<=g&&g<=54335||54337<=g&&g<=54363||54365<=g&&g<=54391||54393<=g&&g<=54419||54421<=g&&g<=54447||54449<=g&&g<=54475||54477<=g&&g<=54503||54505<=g&&g<=54531||54533<=g&&g<=54559||54561<=g&&g<=54587||54589<=g&&g<=54615||54617<=g&&g<=54643||54645<=g&&g<=54671||54673<=g&&g<=54699||54701<=g&&g<=54727||54729<=g&&g<=54755||54757<=g&&g<=54783||54785<=g&&g<=54811||54813<=g&&g<=54839||54841<=g&&g<=54867||54869<=g&&g<=54895||54897<=g&&g<=54923||54925<=g&&g<=54951||54953<=g&&g<=54979||54981<=g&&g<=55007||55009<=g&&g<=55035||55037<=g&&g<=55063||55065<=g&&g<=55091||55093<=g&&g<=55119||55121<=g&&g<=55147||55149<=g&&g<=55175||55177<=g&&g<=55203?u:g==9757||g==9977||9994<=g&&g<=9997||g==127877||127938<=g&&g<=127940||g==127943||127946<=g&&g<=127948||128066<=g&&g<=128067||128070<=g&&g<=128080||g==128110||128112<=g&&g<=128120||g==128124||128129<=g&&g<=128131||128133<=g&&g<=128135||g==128170||128372<=g&&g<=128373||g==128378||g==128400||128405<=g&&g<=128406||128581<=g&&g<=128583||128587<=g&&g<=128591||g==128675||128692<=g&&g<=128694||g==128704||g==128716||129304<=g&&g<=129308||129310<=g&&g<=129311||g==129318||129328<=g&&g<=129337||129341<=g&&g<=129342||129489<=g&&g<=129501?A:127995<=g&&g<=127999?f:g==8205?b:g==9792||g==9794||9877<=g&&g<=9878||g==9992||g==10084||g==127752||g==127806||g==127859||g==127891||g==127908||g==127912||g==127979||g==127981||g==128139||128187<=g&&g<=128188||g==128295||g==128300||g==128488||g==128640||g==128658?C:128102<=g&&g<=128105?T:h}return this}typeof A9<"u"&&A9.exports&&(A9.exports=d$e)});var p$=nm((exports,module)=>{var JOi=y(x());/*!
* protobuf.js v8.0.1 (c) 2016, daniel wirtz
* compiled sat, 04 apr 2026 19:23:15 utc
* licensed under the bsd-3-clause license
* see: https://github.com/dcodeio/protobuf.js for details
*/(function(undefined){"use strict";(function(t,n,i){function o(s){var a=n[s];return a||t[s][0].call(a=n[s]={exports:{}},o,a,a.exports),a.exports}var r=o(i[0]);r.util.global.protobuf=r,typeof define=="function"&&define.amd&&define(["long"],function(s){return s&&s.isLong&&(r.util.Long=s,r.configure()),r}),typeof module=="object"&&module&&module.exports&&(module.exports=r)})({1:[function(e,t,n){"use strict";t.exports=i;function i(o,r){for(var s=new Array(arguments.length-1),a=0,c=2,d=!0;c<arguments.length;)s[a++]=arguments[c++];return new Promise(function(h,p){s[a]=function(f){if(d)if(d=!1,f)p(f);else{for(var b=new Array(arguments.length-1),C=0;C<b.length;)b[C++]=arguments[C];h.apply(null,b)}};try{o.apply(r||null,s)}catch(A){d&&(d=!1,p(A))}})}},{}],2:[function(e,t,n){"use strict";var i=n;i.length=function(d){var u=d.length;if(!u)return 0;for(var h=0;--u%4>1&&d.charAt(u)==="=";)++h;return Math.ceil(d.length*3)/4-h};for(var o=new Array(64),r=new Array(123),s=0;s<64;)r[o[s]=s<26?s+65:s<52?s+71:s<62?s-4:s-59|43]=s++;i.encode=function(d,u,h){for(var p=null,A=[],f=0,b=0,C;u<h;){var T=d[u++];switch(b){case 0:A[f++]=o[T>>2],C=(T&3)<<4,b=1;break;case 1:A[f++]=o[C|T>>4],C=(T&15)<<2,b=2;break;case 2:A[f++]=o[C|T>>6],A[f++]=o[T&63],b=0;break}f>8191&&((p||(p=[])).push(String.fromCharCode.apply(String,A)),f=0)}return b&&(A[f++]=o[C],A[f++]=61,b===1&&(A[f++]=61)),p?(f&&p.push(String.fromCharCode.apply(String,A.slice(0,f))),p.join("")):String.fromCharCode.apply(String,A.slice(0,f))};var a="invalid encoding";i.decode=function(d,u,h){for(var p=h,A=0,f,b=0;b<d.length;){var C=d.charCodeAt(b++);if(C===61&&A>1)break;if((C=r[C])===undefined)throw Error(a);switch(A){case 0:f=C,A=1;break;case 1:u[h++]=f<<2|(C&48)>>4,f=C,A=2;break;case 2:u[h++]=(f&15)<<4|(C&60)>>2,f=C,A=3;break;case 3:u[h++]=(f&3)<<6|C,A=0;break}}if(A===1)throw Error(a);return h-p},i.test=function(d){return/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/.test(d)}},{}],3:[function(e,t,n){"use strict";t.exports=i;function i(){this._listeners={}}i.prototype.on=function(r,s,a){return(this._listeners[r]||(this._listeners[r]=[])).push({fn:s,ctx:a||this}),this},i.prototype.off=function(r,s){if(r===undefined)this._listeners={};else if(s===undefined)this._listeners[r]=[];else for(var a=this._listeners[r],c=0;c<a.length;)a[c].fn===s?a.splice(c,1):++c;return this},i.prototype.emit=function(r){var s=this._listeners[r];if(s){for(var a=[],c=1;c<arguments.length;)a.push(arguments[c++]);for(c=0;c<s.length;)s[c].fn.apply(s[c++].ctx,a)}return this}},{}],4:[function(e,t,n){"use strict";t.exports=i(i);function i(c){return typeof Float32Array<"u"?(function(){var d=new Float32Array([-0]),u=new Uint8Array(d.buffer),h=u[3]===128;function p(C,T,E){d[0]=C,T[E]=u[0],T[E+1]=u[1],T[E+2]=u[2],T[E+3]=u[3]}function A(C,T,E){d[0]=C,T[E]=u[3],T[E+1]=u[2],T[E+2]=u[1],T[E+3]=u[0]}c.writeFloatLE=h?p:A,c.writeFloatBE=h?A:p;function f(C,T){return u[0]=C[T],u[1]=C[T+1],u[2]=C[T+2],u[3]=C[T+3],d[0]}function b(C,T){return u[3]=C[T],u[2]=C[T+1],u[1]=C[T+2],u[0]=C[T+3],d[0]}c.readFloatLE=h?f:b,c.readFloatBE=h?b:f})():(function(){function d(h,p,A,f){var b=p<0?1:0;if(b&&(p=-p),p===0)h(1/p>0?0:2147483648,A,f);else if(isNaN(p))h(2143289344,A,f);else if(p>34028234663852886e22)h((b<<31|2139095040)>>>0,A,f);else if(p<11754943508222875e-54)h((b<<31|Math.round(p/1401298464324817e-60))>>>0,A,f);else{var C=Math.floor(Math.log(p)/Math.LN2),T=Math.round(p*Math.pow(2,-C)*8388608)&8388607;h((b<<31|C+127<<23|T)>>>0,A,f)}}c.writeFloatLE=d.bind(null,o),c.writeFloatBE=d.bind(null,r);function u(h,p,A){var f=h(p,A),b=(f>>31)*2+1,C=f>>>23&255,T=f&8388607;return C===255?T?NaN:b*(1/0):C===0?b*1401298464324817e-60*T:b*Math.pow(2,C-150)*(T+8388608)}c.readFloatLE=u.bind(null,s),c.readFloatBE=u.bind(null,a)})(),typeof Float64Array<"u"?(function(){var d=new Float64Array([-0]),u=new Uint8Array(d.buffer),h=u[7]===128;function p(C,T,E){d[0]=C,T[E]=u[0],T[E+1]=u[1],T[E+2]=u[2],T[E+3]=u[3],T[E+4]=u[4],T[E+5]=u[5],T[E+6]=u[6],T[E+7]=u[7]}function A(C,T,E){d[0]=C,T[E]=u[7],T[E+1]=u[6],T[E+2]=u[5],T[E+3]=u[4],T[E+4]=u[3],T[E+5]=u[2],T[E+6]=u[1],T[E+7]=u[0]}c.writeDoubleLE=h?p:A,c.writeDoubleBE=h?A:p;function f(C,T){return u[0]=C[T],u[1]=C[T+1],u[2]=C[T+2],u[3]=C[T+3],u[4]=C[T+4],u[5]=C[T+5],u[6]=C[T+6],u[7]=C[T+7],d[0]}function b(C,T){return u[7]=C[T],u[6]=C[T+1],u[5]=C[T+2],u[4]=C[T+3],u[3]=C[T+4],u[2]=C[T+5],u[1]=C[T+6],u[0]=C[T+7],d[0]}c.readDoubleLE=h?f:b,c.readDoubleBE=h?b:f})():(function(){function d(h,p,A,f,b,C){var T=f<0?1:0;if(T&&(f=-f),f===0)h(0,b,C+p),h(1/f>0?0:2147483648,b,C+A);else if(isNaN(f))h(0,b,C+p),h(2146959360,b,C+A);else if(f>17976931348623157e292)h(0,b,C+p),h((T<<31|2146435072)>>>0,b,C+A);else{var E;if(f<22250738585072014e-324)E=f/5e-324,h(E>>>0,b,C+p),h((T<<31|E/4294967296)>>>0,b,C+A);else{var S=Math.floor(Math.log(f)/Math.LN2);S===1024&&(S=1023),E=f*Math.pow(2,-S),h(E*4503599627370496>>>0,b,C+p),h((T<<31|S+1023<<20|E*1048576&1048575)>>>0,b,C+A)}}}c.writeDoubleLE=d.bind(null,o,0,4),c.writeDoubleBE=d.bind(null,r,4,0);function u(h,p,A,f,b){var C=h(f,b+p),T=h(f,b+A),E=(T>>31)*2+1,S=T>>>20&2047,I=4294967296*(T&1048575)+C;return S===2047?I?NaN:E*(1/0):S===0?E*5e-324*I:E*Math.pow(2,S-1075)*(I+4503599627370496)}c.readDoubleLE=u.bind(null,s,0,4),c.readDoubleBE=u.bind(null,a,4,0)})(),c}function o(c,d,u){d[u]=c&255,d[u+1]=c>>>8&255,d[u+2]=c>>>16&255,d[u+3]=c>>>24}function r(c,d,u){d[u]=c>>>24,d[u+1]=c>>>16&255,d[u+2]=c>>>8&255,d[u+3]=c&255}function s(c,d){return(c[d]|c[d+1]<<8|c[d+2]<<16|c[d+3]<<24)>>>0}function a(c,d){return(c[d]<<24|c[d+1]<<16|c[d+2]<<8|c[d+3])>>>0}},{}],5:[function(require,module,exports){"use strict";module.exports=inquire;function inquire(moduleName){try{var mod=eval("quire".replace(/^/,"re"))(moduleName);if(mod&&(mod.length||Object.keys(mod).length))return mod}catch(e){}return null}},{}],6:[function(e,t,n){"use strict";t.exports=i;function i(o,r,s){var a=s||8192,c=a>>>1,d=null,u=a;return function(p){if(p<1||p>c)return o(p);u+p>a&&(d=o(a),u=0);var A=r.call(d,u,u+=p);return u&7&&(u=(u|7)+1),A}}},{}],7:[function(e,t,n){"use strict";var i=n;i.length=function(r){for(var s=0,a=0,c=0;c<r.length;++c)a=r.charCodeAt(c),a<128?s+=1:a<2048?s+=2:(a&64512)===55296&&(r.charCodeAt(c+1)&64512)===56320?(++c,s+=4):s+=3;return s},i.read=function(r,s,a){var c=a-s;if(c<1)return"";for(var d=null,u=[],h=0,p;s<a;)p=r[s++],p<128?u[h++]=p:p>191&&p<224?u[h++]=(p&31)<<6|r[s++]&63:p>239&&p<365?(p=((p&7)<<18|(r[s++]&63)<<12|(r[s++]&63)<<6|r[s++]&63)-65536,u[h++]=55296+(p>>10),u[h++]=56320+(p&1023)):u[h++]=(p&15)<<12|(r[s++]&63)<<6|r[s++]&63,h>8191&&((d||(d=[])).push(String.fromCharCode.apply(String,u)),h=0);return d?(h&&d.push(String.fromCharCode.apply(String,u.slice(0,h))),d.join("")):String.fromCharCode.apply(String,u.slice(0,h))},i.write=function(r,s,a){for(var c=a,d,u,h=0;h<r.length;++h)d=r.charCodeAt(h),d<128?s[a++]=d:d<2048?(s[a++]=d>>6|192,s[a++]=d&63|128):(d&64512)===55296&&((u=r.charCodeAt(h+1))&64512)===56320?(d=65536+((d&1023)<<10)+(u&1023),++h,s[a++]=d>>18|240,s[a++]=d>>12&63|128,s[a++]=d>>6&63|128,s[a++]=d&63|128):(s[a++]=d>>12|224,s[a++]=d>>6&63|128,s[a++]=d&63|128);return a-c}},{}],8:[function(e,t,n){"use strict";var i=n;i.build="minimal",i.Writer=e(16),i.BufferWriter=e(17),i.Reader=e(9),i.BufferReader=e(10),i.util=e(15),i.rpc=e(12),i.roots=e(11),i.configure=o;function o(){i.util._configure(),i.Writer._configure(i.BufferWriter),i.Reader._configure(i.BufferReader)}o()},{10:10,11:11,12:12,15:15,16:16,17:17,9:9}],9:[function(e,t,n){"use strict";t.exports=c;var i=e(15),o,r=i.LongBits,s=i.utf8;function a(f,b){return RangeError("index out of range: "+f.pos+" + "+(b||1)+" > "+f.len)}function c(f){this.buf=f,this.pos=0,this.len=f.length}var d=typeof Uint8Array<"u"?function(b){if(b instanceof Uint8Array||Array.isArray(b))return new c(b);throw Error("illegal buffer")}:function(b){if(Array.isArray(b))return new c(b);throw Error("illegal buffer")},u=function(){return i.Buffer?function(C){return(c.create=function(E){return i.Buffer.isBuffer(E)?new o(E):d(E)})(C)}:d};c.create=u(),c.prototype._slice=i.Array.prototype.subarray||i.Array.prototype.slice,c.prototype.uint32=(function(){var b=4294967295;return function(){if(b=(this.buf[this.pos]&127)>>>0,this.buf[this.pos++]<128||(b=(b|(this.buf[this.pos]&127)<<7)>>>0,this.buf[this.pos++]<128)||(b=(b|(this.buf[this.pos]&127)<<14)>>>0,this.buf[this.pos++]<128)||(b=(b|(this.buf[this.pos]&127)<<21)>>>0,this.buf[this.pos++]<128)||(b=(b|(this.buf[this.pos]&15)<<28)>>>0,this.buf[this.pos++]<128))return b;if((this.pos+=5)>this.len)throw this.pos=this.len,a(this,10);return b}})(),c.prototype.int32=function(){return this.uint32()|0},c.prototype.sint32=function(){var b=this.uint32();return b>>>1^-(b&1)|0};function h(){var f=new r(0,0),b=0;if(this.len-this.pos>4){for(;b<4;++b)if(f.lo=(f.lo|(this.buf[this.pos]&127)<<b*7)>>>0,this.buf[this.pos++]<128)return f;if(f.lo=(f.lo|(this.buf[this.pos]&127)<<28)>>>0,f.hi=(f.hi|(this.buf[this.pos]&127)>>4)>>>0,this.buf[this.pos++]<128)return f;b=0}else{for(;b<3;++b){if(this.pos>=this.len)throw a(this);if(f.lo=(f.lo|(this.buf[this.pos]&127)<<b*7)>>>0,this.buf[this.pos++]<128)return f}return f.lo=(f.lo|(this.buf[this.pos++]&127)<<b*7)>>>0,f}if(this.len-this.pos>4){for(;b<5;++b)if(f.hi=(f.hi|(this.buf[this.pos]&127)<<b*7+3)>>>0,this.buf[this.pos++]<128)return f}else for(;b<5;++b){if(this.pos>=this.len)throw a(this);if(f.hi=(f.hi|(this.buf[this.pos]&127)<<b*7+3)>>>0,this.buf[this.pos++]<128)return f}throw Error("invalid varint encoding")}c.prototype.bool=function(){return this.uint32()!==0};function p(f,b){return(f[b-4]|f[b-3]<<8|f[b-2]<<16|f[b-1]<<24)>>>0}c.prototype.fixed32=function(){if(this.pos+4>this.len)throw a(this,4);return p(this.buf,this.pos+=4)},c.prototype.sfixed32=function(){if(this.pos+4>this.len)throw a(this,4);return p(this.buf,this.pos+=4)|0};function A(){if(this.pos+8>this.len)throw a(this,8);return new r(p(this.buf,this.pos+=4),p(this.buf,this.pos+=4))}c.prototype.float=function(){if(this.pos+4>this.len)throw a(this,4);var b=i.float.readFloatLE(this.buf,this.pos);return this.pos+=4,b},c.prototype.double=function(){if(this.pos+8>this.len)throw a(this,4);var b=i.float.readDoubleLE(this.buf,this.pos);return this.pos+=8,b},c.prototype.bytes=function(){var b=this.uint32(),C=this.pos,T=this.pos+b;if(T>this.len)throw a(this,b);if(this.pos+=b,Array.isArray(this.buf))return this.buf.slice(C,T);if(C===T){var E=i.Buffer;return E?E.alloc(0):new this.buf.constructor(0)}return this._slice.call(this.buf,C,T)},c.prototype.string=function(){var b=this.bytes();return s.read(b,0,b.length)},c.prototype.skip=function(b){if(typeof b=="number"){if(this.pos+b>this.len)throw a(this,b);this.pos+=b}else do if(this.pos>=this.len)throw a(this);while(this.buf[this.pos++]&128);return this},c.prototype.skipType=function(f){switch(f){case 0:this.skip();break;case 1:this.skip(8);break;case 2:this.skip(this.uint32());break;case 3:for(;(f=this.uint32()&7)!==4;)this.skipType(f);break;case 5:this.skip(4);break;default:throw Error("invalid wire type "+f+" at offset "+this.pos)}return this},c._configure=function(f){o=f,c.create=u(),o._configure();var b=i.Long?"toLong":"toNumber";i.merge(c.prototype,{int64:function(){return h.call(this)[b](!1)},uint64:function(){return h.call(this)[b](!0)},sint64:function(){return h.call(this).zzDecode()[b](!1)},fixed64:function(){return A.call(this)[b](!0)},sfixed64:function(){return A.call(this)[b](!1)}})}},{15:15}],10:[function(e,t,n){"use strict";t.exports=r;var i=e(9);(r.prototype=Object.create(i.prototype)).constructor=r;var o=e(15);function r(s){i.call(this,s)}r._configure=function(){o.Buffer&&(r.prototype._slice=o.Buffer.prototype.slice)},r.prototype.string=function(){var a=this.uint32();return this.buf.utf8Slice?this.buf.utf8Slice(this.pos,this.pos=Math.min(this.pos+a,this.len)):this.buf.toString("utf-8",this.pos,this.pos=Math.min(this.pos+a,this.len))},r._configure()},{15:15,9:9}],11:[function(e,t,n){"use strict";t.exports={}},{}],12:[function(e,t,n){"use strict";var i=n;i.Service=e(13)},{13:13}],13:[function(e,t,n){"use strict";t.exports=o;var i=e(15);(o.prototype=Object.create(i.EventEmitter.prototype)).constructor=o;function o(r,s,a){if(typeof r!="function")throw TypeError("rpcImpl must be a function");i.EventEmitter.call(this),this.rpcImpl=r,this.requestDelimited=!!s,this.responseDelimited=!!a}o.prototype.rpcCall=function r(s,a,c,d,u){if(!d)throw TypeError("request must be specified");var h=this;if(!u)return i.asPromise(r,h,s,a,c,d);if(!h.rpcImpl)return setTimeout(function(){u(Error("already ended"))},0),undefined;try{return h.rpcImpl(s,a[h.requestDelimited?"encodeDelimited":"encode"](d).finish(),function(A,f){if(A)return h.emit("error",A,s),u(A);if(f===null)return h.end(!0),undefined;if(!(f instanceof c))try{f=c[h.responseDelimited?"decodeDelimited":"decode"](f)}catch(b){return h.emit("error",b,s),u(b)}return h.emit("data",f,s),u(null,f)})}catch(p){return h.emit("error",p,s),setTimeout(function(){u(p)},0),undefined}},o.prototype.end=function(s){return this.rpcImpl&&(s||this.rpcImpl(null,null,null),this.rpcImpl=null,this.emit("end").off()),this}},{15:15}],14:[function(e,t,n){"use strict";t.exports=o;var i=e(15);function o(c,d){this.lo=c>>>0,this.hi=d>>>0}var r=o.zero=new o(0,0);r.toNumber=function(){return 0},r.zzEncode=r.zzDecode=function(){return this},r.length=function(){return 1};var s=o.zeroHash="\0\0\0\0\0\0\0\0";o.fromNumber=function(d){if(d===0)return r;var u=d<0;u&&(d=-d);var h=d>>>0,p=(d-h)/4294967296>>>0;return u&&(p=~p>>>0,h=~h>>>0,++h>4294967295&&(h=0,++p>4294967295&&(p=0))),new o(h,p)},o.from=function(d){if(typeof d=="number")return o.fromNumber(d);if(i.isString(d))if(i.Long)d=i.Long.fromString(d);else return o.fromNumber(parseInt(d,10));return d.low||d.high?new o(d.low>>>0,d.high>>>0):r},o.prototype.toNumber=function(d){if(!d&&this.hi>>>31){var u=~this.lo+1>>>0,h=~this.hi>>>0;return u||(h=h+1>>>0),-(u+h*4294967296)}return this.lo+this.hi*4294967296},o.prototype.toLong=function(d){return i.Long?new i.Long(this.lo|0,this.hi|0,!!d):{low:this.lo|0,high:this.hi|0,unsigned:!!d}};var a=String.prototype.charCodeAt;o.fromHash=function(d){return d===s?r:new o((a.call(d,0)|a.call(d,1)<<8|a.call(d,2)<<16|a.call(d,3)<<24)>>>0,(a.call(d,4)|a.call(d,5)<<8|a.call(d,6)<<16|a.call(d,7)<<24)>>>0)},o.prototype.toHash=function(){return String.fromCharCode(this.lo&255,this.lo>>>8&255,this.lo>>>16&255,this.lo>>>24,this.hi&255,this.hi>>>8&255,this.hi>>>16&255,this.hi>>>24)},o.prototype.zzEncode=function(){var d=this.hi>>31;return this.hi=((this.hi<<1|this.lo>>>31)^d)>>>0,this.lo=(this.lo<<1^d)>>>0,this},o.prototype.zzDecode=function(){var d=-(this.lo&1);return this.lo=((this.lo>>>1|this.hi<<31)^d)>>>0,this.hi=(this.hi>>>1^d)>>>0,this},o.prototype.length=function(){var d=this.lo,u=(this.lo>>>28|this.hi<<4)>>>0,h=this.hi>>>24;return h===0?u===0?d<16384?d<128?1:2:d<2097152?3:4:u<16384?u<128?5:6:u<2097152?7:8:h<128?9:10}},{15:15}],15:[function(e,t,n){"use strict";var i=n;i.asPromise=e(1),i.base64=e(2),i.EventEmitter=e(3),i.float=e(4),i.inquire=e(5),i.utf8=e(7),i.pool=e(6),i.LongBits=e(14),i.isNode=!!(typeof global<"u"&&global&&global.process&&global.process.versions&&global.process.versions.node),i.global=i.isNode&&global||typeof window<"u"&&window||typeof self<"u"&&self||this,i.emptyArray=Object.freeze?Object.freeze([]):[],i.emptyObject=Object.freeze?Object.freeze({}):{},i.isInteger=Number.isInteger||function(a){return typeof a=="number"&&isFinite(a)&&Math.floor(a)===a},i.isString=function(a){return typeof a=="string"||a instanceof String},i.isObject=function(a){return a&&typeof a=="object"},i.isset=i.isSet=function(a,c){var d=a[c];return d!=null&&a.hasOwnProperty(c)?typeof d!="object"||(Array.isArray(d)?d.length:Object.keys(d).length)>0:!1},i.Buffer=(function(){try{var s=i.inquire("buffer").Buffer;return s.prototype.utf8Write?s:null}catch{return null}})(),i._Buffer_from=null,i._Buffer_allocUnsafe=null,i.newBuffer=function(a){return typeof a=="number"?i.Buffer?i._Buffer_allocUnsafe(a):new i.Array(a):i.Buffer?i._Buffer_from(a):typeof Uint8Array>"u"?a:new Uint8Array(a)},i.Array=typeof Uint8Array<"u"?Uint8Array:Array,i.Long=i.global.dcodeIO&&i.global.dcodeIO.Long||i.global.Long||i.inquire("long"),i.key2Re=/^true|false|0|1$/,i.key32Re=/^-?(?:0|[1-9][0-9]*)$/,i.key64Re=/^(?:[\\x00-\\xff]{8}|-?(?:0|[1-9][0-9]*))$/,i.longToHash=function(a){return a?i.LongBits.from(a).toHash():i.LongBits.zeroHash},i.longFromHash=function(a,c){var d=i.LongBits.fromHash(a);return i.Long?i.Long.fromBits(d.lo,d.hi,c):d.toNumber(!!c)};function o(s,a,c){for(var d=Object.keys(a),u=0;u<d.length;++u)(s[d[u]]===undefined||!c)&&(s[d[u]]=a[d[u]]);return s}i.merge=o,i.lcFirst=function(a){return a.charAt(0).toLowerCase()+a.substring(1)};function r(s){function a(c,d){if(!(this instanceof a))return new a(c,d);Object.defineProperty(this,"message",{get:function(){return c}}),Error.captureStackTrace?Error.captureStackTrace(this,a):Object.defineProperty(this,"stack",{value:new Error().stack||""}),d&&o(this,d)}return a.prototype=Object.create(Error.prototype,{constructor:{value:a,writable:!0,enumerable:!1,configurable:!0},name:{get:function(){return s},set:undefined,enumerable:!1,configurable:!0},toString:{value:function(){return this.name+": "+this.message},writable:!0,enumerable:!1,configurable:!0}}),a}i.newError=r,i.ProtocolError=r("ProtocolError"),i.oneOfGetter=function(a){for(var c={},d=0;d<a.length;++d)c[a[d]]=1;return function(){for(var u=Object.keys(this),h=u.length-1;h>-1;--h)if(c[u[h]]===1&&this[u[h]]!==undefined&&this[u[h]]!==null)return u[h]}},i.oneOfSetter=function(a){return function(c){for(var d=0;d<a.length;++d)a[d]!==c&&delete this[a[d]]}},i.toJSONOptions={longs:String,enums:String,bytes:String,json:!0},i._configure=function(){var s=i.Buffer;if(!s){i._Buffer_from=i._Buffer_allocUnsafe=null;return}i._Buffer_from=s.from!==Uint8Array.from&&s.from||function(c,d){return new s(c,d)},i._Buffer_allocUnsafe=s.allocUnsafe||function(c){return new s(c)}}},{1:1,14:14,2:2,3:3,4:4,5:5,6:6,7:7}],16:[function(e,t,n){"use strict";t.exports=h;var i=e(15),o,r=i.LongBits,s=i.base64,a=i.utf8;function c(S,I,R){this.fn=S,this.len=I,this.next=undefined,this.val=R}function d(){}function u(S){this.head=S.head,this.tail=S.tail,this.len=S.len,this.next=S.states}function h(){this.len=0,this.head=new c(d,0,0),this.tail=this.head,this.states=null}var p=function(){return i.Buffer?function(){return(h.create=function(){return new o})()}:function(){return new h}};h.create=p(),h.alloc=function(I){return new i.Array(I)},i.Array!==Array&&(h.alloc=i.pool(h.alloc,i.Array.prototype.subarray)),h.prototype._push=function(I,R,V){return this.tail=this.tail.next=new c(I,R,V),this.len+=R,this};function A(S,I,R){I[R]=S&255}function f(S,I,R){for(;S>127;)I[R++]=S&127|128,S>>>=7;I[R]=S}function b(S,I){this.len=S,this.next=undefined,this.val=I}b.prototype=Object.create(c.prototype),b.prototype.fn=f,h.prototype.uint32=function(I){return this.len+=(this.tail=this.tail.next=new b((I=I>>>0)<128?1:I<16384?2:I<2097152?3:I<268435456?4:5,I)).len,this},h.prototype.int32=function(I){return I<0?this._push(C,10,r.fromNumber(I)):this.uint32(I)},h.prototype.sint32=function(I){return this.uint32((I<<1^I>>31)>>>0)};function C(S,I,R){for(;S.hi;)I[R++]=S.lo&127|128,S.lo=(S.lo>>>7|S.hi<<25)>>>0,S.hi>>>=7;for(;S.lo>127;)I[R++]=S.lo&127|128,S.lo=S.lo>>>7;I[R++]=S.lo}h.prototype.uint64=function(I){var R=r.from(I);return this._push(C,R.length(),R)},h.prototype.int64=h.prototype.uint64,h.prototype.sint64=function(I){var R=r.from(I).zzEncode();return this._push(C,R.length(),R)},h.prototype.bool=function(I){return this._push(A,1,I?1:0)};function T(S,I,R){I[R]=S&255,I[R+1]=S>>>8&255,I[R+2]=S>>>16&255,I[R+3]=S>>>24}h.prototype.fixed32=function(I){return this._push(T,4,I>>>0)},h.prototype.sfixed32=h.prototype.fixed32,h.prototype.fixed64=function(I){var R=r.from(I);return this._push(T,4,R.lo)._push(T,4,R.hi)},h.prototype.sfixed64=h.prototype.fixed64,h.prototype.float=function(I){return this._push(i.float.writeFloatLE,4,I)},h.prototype.double=function(I){return this._push(i.float.writeDoubleLE,8,I)};var E=i.Array.prototype.set?function(I,R,V){R.set(I,V)}:function(I,R,V){for(var W=0;W<I.length;++W)R[V+W]=I[W]};h.prototype.bytes=function(I){var R=I.length>>>0;if(!R)return this._push(A,1,0);if(i.isString(I)){var V=h.alloc(R=s.length(I));s.decode(I,V,0),I=V}return this.uint32(R)._push(E,R,I)},h.prototype.string=function(I){var R=a.length(I);return R?this.uint32(R)._push(a.write,R,I):this._push(A,1,0)},h.prototype.fork=function(){return this.states=new u(this),this.head=this.tail=new c(d,0,0),this.len=0,this},h.prototype.reset=function(){return this.states?(this.head=this.states.head,this.tail=this.states.tail,this.len=this.states.len,this.states=this.states.next):(this.head=this.tail=new c(d,0,0),this.len=0),this},h.prototype.ldelim=function(){var I=this.head,R=this.tail,V=this.len;return this.reset().uint32(V),V&&(this.tail.next=I.next,this.tail=R,this.len+=V),this},h.prototype.finish=function(){for(var I=this.head.next,R=this.constructor.alloc(this.len),V=0;I;)I.fn(I.val,R,V),V+=I.len,I=I.next;return R},h._configure=function(S){o=S,h.create=p(),o._configure()}},{15:15}],17:[function(e,t,n){"use strict";t.exports=r;var i=e(16);(r.prototype=Object.create(i.prototype)).constructor=r;var o=e(15);function r(){i.call(this)}r._configure=function(){r.alloc=o._Buffer_allocUnsafe,r.writeBytesBuffer=o.Buffer&&o.Buffer.prototype instanceof Uint8Array&&o.Buffer.prototype.set.name==="set"?function(c,d,u){d.set(c,u)}:function(c,d,u){if(c.copy)c.copy(d,u,0,c.length);else for(var h=0;h<c.length;)d[u++]=c[h++]}},r.prototype.bytes=function(c){o.isString(c)&&(c=o._Buffer_from(c,"base64"));var d=c.length>>>0;return this.uint32(d),d&&this._push(r.writeBytesBuffer,d,c),this};function s(a,c,d){a.length<40?o.utf8.write(a,c,d):c.utf8Write?c.utf8Write(a,d):c.write(a,d)}r.prototype.string=function(c){var d=o.Buffer.byteLength(c);return this.uint32(d),d&&this._push(s,d,c),this},r._configure()},{15:15,16:16}]},{},[8])})()});var bVe=nm((CEo,pz)=>{var TEo=y(x());/* Copyright 2015-2018 Esri. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 @preserve */(function(){var e=(function(){var o={};o.defaultNoDataValue=-34027999387901484e22,o.decode=function(u,h){h=h||{};var p=h.encodedMaskData||h.encodedMaskData===null,A=c(u,h.inputOffset||0,p),f=h.noDataValue!==null?h.noDataValue:o.defaultNoDataValue,b=r(A,h.pixelType||Float32Array,h.encodedMaskData,f,h.returnMask),C={width:A.width,height:A.height,pixelData:b.resultPixels,minValue:b.minValue,maxValue:A.pixels.maxValue,noDataValue:f};return b.resultMask&&(C.maskData=b.resultMask),h.returnEncodedMask&&A.mask&&(C.encodedMaskData=A.mask.bitset?A.mask.bitset:null),h.returnFileInfo&&(C.fileInfo=s(A),h.computeUsedBitDepths&&(C.fileInfo.bitDepths=a(A))),C};var r=function(u,h,p,A,f){var b=0,C=u.pixels.numBlocksX,T=u.pixels.numBlocksY,E=Math.floor(u.width/C),S=Math.floor(u.height/T),I=2*u.maxZError,R=Number.MAX_VALUE,V;p=p||(u.mask?u.mask.bitset:null);var W,B;W=new h(u.width*u.height),f&&p&&(B=new Uint8Array(u.width*u.height));for(var N=new Float32Array(E*S),P,g,_=0;_<=T;_++){var Z=_!==T?S:u.height%T;if(Z!==0)for(var G=0;G<=C;G++){var w=G!==C?E:u.width%C;if(w!==0){var X=_*u.width*S+G*E,k=u.width-w,v=u.pixels.blocks[b],D,Y,O;v.encoding<2?(v.encoding===0?D=v.rawData:(d(v.stuffedData,v.bitsPerPixel,v.numValidPixels,v.offset,I,N,u.pixels.maxValue),D=N),Y=0):v.encoding===2?O=0:O=v.offset;var J;if(p)for(g=0;g<Z;g++){for(X&7&&(J=p[X>>3],J<<=X&7),P=0;P<w;P++)X&7||(J=p[X>>3]),J&128?(B&&(B[X]=1),V=v.encoding<2?D[Y++]:O,R=R>V?V:R,W[X++]=V):(B&&(B[X]=0),W[X++]=A),J<<=1;X+=k}else if(v.encoding<2)for(g=0;g<Z;g++){for(P=0;P<w;P++)V=D[Y++],R=R>V?V:R,W[X++]=V;X+=k}else for(R=R>O?O:R,g=0;g<Z;g++){for(P=0;P<w;P++)W[X++]=O;X+=k}if(v.encoding===1&&Y!==v.numValidPixels)throw"Block and Mask do not match";b++}}}return{resultPixels:W,resultMask:B,minValue:R}},s=function(u){return{fileIdentifierString:u.fileIdentifierString,fileVersion:u.fileVersion,imageType:u.imageType,height:u.height,width:u.width,maxZError:u.maxZError,eofOffset:u.eofOffset,mask:u.mask?{numBlocksX:u.mask.numBlocksX,numBlocksY:u.mask.numBlocksY,numBytes:u.mask.numBytes,maxValue:u.mask.maxValue}:null,pixels:{numBlocksX:u.pixels.numBlocksX,numBlocksY:u.pixels.numBlocksY,numBytes:u.pixels.numBytes,maxValue:u.pixels.maxValue,noDataValue:u.noDataValue}}},a=function(u){for(var h=u.pixels.numBlocksX*u.pixels.numBlocksY,p={},A=0;A<h;A++){var f=u.pixels.blocks[A];f.encoding===0?p.float32=!0:f.encoding===1?p[f.bitsPerPixel]=!0:p[0]=!0}return Object.keys(p)},c=function(u,h,p){var A={},f=new Uint8Array(u,h,10);if(A.fileIdentifierString=String.fromCharCode.apply(null,f),A.fileIdentifierString.trim()!=="CntZImage")throw"Unexpected file identifier string: "+A.fileIdentifierString;h+=10;var b=new DataView(u,h,24);if(A.fileVersion=b.getInt32(0,!0),A.imageType=b.getInt32(4,!0),A.height=b.getUint32(8,!0),A.width=b.getUint32(12,!0),A.maxZError=b.getFloat64(16,!0),h+=24,!p)if(b=new DataView(u,h,16),A.mask={},A.mask.numBlocksY=b.getUint32(0,!0),A.mask.numBlocksX=b.getUint32(4,!0),A.mask.numBytes=b.getUint32(8,!0),A.mask.maxValue=b.getFloat32(12,!0),h+=16,A.mask.numBytes>0){var C=new Uint8Array(Math.ceil(A.width*A.height/8));b=new DataView(u,h,A.mask.numBytes);var T=b.getInt16(0,!0),E=2,S=0;do{if(T>0)for(;T--;)C[S++]=b.getUint8(E++);else{var I=b.getUint8(E++);for(T=-T;T--;)C[S++]=I}T=b.getInt16(E,!0),E+=2}while(E<A.mask.numBytes);if(T!==-32768||S<C.length)throw"Unexpected end of mask RLE encoding";A.mask.bitset=C,h+=A.mask.numBytes}else(A.mask.numBytes|A.mask.numBlocksY|A.mask.maxValue)===0&&(A.mask.bitset=new Uint8Array(Math.ceil(A.width*A.height/8)));b=new DataView(u,h,16),A.pixels={},A.pixels.numBlocksY=b.getUint32(0,!0),A.pixels.numBlocksX=b.getUint32(4,!0),A.pixels.numBytes=b.getUint32(8,!0),A.pixels.maxValue=b.getFloat32(12,!0),h+=16;var R=A.pixels.numBlocksX,V=A.pixels.numBlocksY,W=R+(A.width%R>0?1:0),B=V+(A.height%V>0?1:0);A.pixels.blocks=new Array(W*B);for(var N=0,P=0;P<B;P++)for(var g=0;g<W;g++){var _=0,Z=u.byteLength-h;b=new DataView(u,h,Math.min(10,Z));var G={};A.pixels.blocks[N++]=G;var w=b.getUint8(0);if(_++,G.encoding=w&63,G.encoding>3)throw"Invalid block encoding ("+G.encoding+")";if(G.encoding===2){h++;continue}if(w!==0&&w!==2){if(w>>=6,G.offsetType=w,w===2)G.offset=b.getInt8(1),_++;else if(w===1)G.offset=b.getInt16(1,!0),_+=2;else if(w===0)G.offset=b.getFloat32(1,!0),_+=4;else throw"Invalid block offset type";if(G.encoding===1)if(w=b.getUint8(_),_++,G.bitsPerPixel=w&63,w>>=6,G.numValidPixelsType=w,w===2)G.numValidPixels=b.getUint8(_),_++;else if(w===1)G.numValidPixels=b.getUint16(_,!0),_+=2;else if(w===0)G.numValidPixels=b.getUint32(_,!0),_+=4;else throw"Invalid valid pixel count type"}if(h+=_,G.encoding!==3){var X,k;if(G.encoding===0){var v=(A.pixels.numBytes-1)/4;if(v!==Math.floor(v))throw"uncompressed block has invalid length";X=new ArrayBuffer(v*4),k=new Uint8Array(X),k.set(new Uint8Array(u,h,v*4));var D=new Float32Array(X);G.rawData=D,h+=v*4}else if(G.encoding===1){var Y=Math.ceil(G.numValidPixels*G.bitsPerPixel/8),O=Math.ceil(Y/4);X=new ArrayBuffer(O*4),k=new Uint8Array(X),k.set(new Uint8Array(u,h,Y)),G.stuffedData=new Uint32Array(X),h+=Y}}}return A.eofOffset=h,A},d=function(u,h,p,A,f,b,C){var T=(1<<h)-1,E=0,S,I=0,R,V,W=Math.ceil((C-A)/f),B=u.length*4-Math.ceil(h*p/8);for(u[u.length-1]<<=8*B,S=0;S<p;S++){if(I===0&&(V=u[E++],I=32),I>=h)R=V>>>I-h&T,I-=h;else{var N=h-I;R=(V&T)<<N&T,V=u[E++],I=32-N,R+=V>>>I}b[S]=R<W?A+R*f:C}return b};return o})(),t=(function(){"use strict";var o={unstuff:function(c,d,u,h,p,A,f,b){var C=(1<<u)-1,T=0,E,S=0,I,R,V,W,B=c.length*4-Math.ceil(u*h/8);if(c[c.length-1]<<=8*B,p)for(E=0;E<h;E++)S===0&&(R=c[T++],S=32),S>=u?(I=R>>>S-u&C,S-=u):(V=u-S,I=(R&C)<<V&C,R=c[T++],S=32-V,I+=R>>>S),d[E]=p[I];else for(W=Math.ceil((b-A)/f),E=0;E<h;E++)S===0&&(R=c[T++],S=32),S>=u?(I=R>>>S-u&C,S-=u):(V=u-S,I=(R&C)<<V&C,R=c[T++],S=32-V,I+=R>>>S),d[E]=I<W?A+I*f:b},unstuffLUT:function(c,d,u,h,p,A){var f=(1<<d)-1,b=0,C=0,T=0,E=0,S=0,I,R=[],V=c.length*4-Math.ceil(d*u/8);c[c.length-1]<<=8*V;var W=Math.ceil((A-h)/p);for(C=0;C<u;C++)E===0&&(I=c[b++],E=32),E>=d?(S=I>>>E-d&f,E-=d):(T=d-E,S=(I&f)<<T&f,I=c[b++],E=32-T,S+=I>>>E),R[C]=S<W?h+S*p:A;return R.unshift(h),R},unstuff2:function(c,d,u,h,p,A,f,b){var C=(1<<u)-1,T=0,E,S=0,I=0,R,V,W;if(p)for(E=0;E<h;E++)S===0&&(V=c[T++],S=32,I=0),S>=u?(R=V>>>I&C,S-=u,I+=u):(W=u-S,R=V>>>I&C,V=c[T++],S=32-W,R|=(V&(1<<W)-1)<<u-W,I=W),d[E]=p[R];else{var B=Math.ceil((b-A)/f);for(E=0;E<h;E++)S===0&&(V=c[T++],S=32,I=0),S>=u?(R=V>>>I&C,S-=u,I+=u):(W=u-S,R=V>>>I&C,V=c[T++],S=32-W,R|=(V&(1<<W)-1)<<u-W,I=W),d[E]=R<B?A+R*f:b}return d},unstuffLUT2:function(c,d,u,h,p,A){var f=(1<<d)-1,b=0,C=0,T=0,E=0,S=0,I=0,R,V=[],W=Math.ceil((A-h)/p);for(C=0;C<u;C++)E===0&&(R=c[b++],E=32,I=0),E>=d?(S=R>>>I&f,E-=d,I+=d):(T=d-E,S=R>>>I&f,R=c[b++],E=32-T,S|=(R&(1<<T)-1)<<d-T,I=T),V[C]=S<W?h+S*p:A;return V.unshift(h),V},originalUnstuff:function(c,d,u,h){var p=(1<<u)-1,A=0,f,b=0,C,T,E,S=c.length*4-Math.ceil(u*h/8);for(c[c.length-1]<<=8*S,f=0;f<h;f++)b===0&&(T=c[A++],b=32),b>=u?(C=T>>>b-u&p,b-=u):(E=u-b,C=(T&p)<<E&p,T=c[A++],b=32-E,C+=T>>>b),d[f]=C;return d},originalUnstuff2:function(c,d,u,h){var p=(1<<u)-1,A=0,f,b=0,C=0,T,E,S;for(f=0;f<h;f++)b===0&&(E=c[A++],b=32,C=0),b>=u?(T=E>>>C&p,b-=u,C+=u):(S=u-b,T=E>>>C&p,E=c[A++],b=32-S,T|=(E&(1<<S)-1)<<u-S,C=S),d[f]=T;return d}},r={HUFFMAN_LUT_BITS_MAX:12,computeChecksumFletcher32:function(c){for(var d=65535,u=65535,h=c.length,p=Math.floor(h/2),A=0;p;){var f=p>=359?359:p;p-=f;do d+=c[A++]<<8,u+=d+=c[A++];while(--f);d=(d&65535)+(d>>>16),u=(u&65535)+(u>>>16)}return h&1&&(u+=d+=c[A]<<8),d=(d&65535)+(d>>>16),u=(u&65535)+(u>>>16),(u<<16|d)>>>0},readHeaderInfo:function(c,d){var u=d.ptr,h=new Uint8Array(c,u,6),p={};if(p.fileIdentifierString=String.fromCharCode.apply(null,h),p.fileIdentifierString.lastIndexOf("Lerc2",0)!==0)throw"Unexpected file identifier string (expect Lerc2 ): "+p.fileIdentifierString;u+=6;var A=new DataView(c,u,8),f=A.getInt32(0,!0);p.fileVersion=f,u+=4,f>=3&&(p.checksum=A.getUint32(4,!0),u+=4),A=new DataView(c,u,12),p.height=A.getUint32(0,!0),p.width=A.getUint32(4,!0),u+=8,f>=4?(p.numDims=A.getUint32(8,!0),u+=4):p.numDims=1,A=new DataView(c,u,40),p.numValidPixel=A.getUint32(0,!0),p.microBlockSize=A.getInt32(4,!0),p.blobSize=A.getInt32(8,!0),p.imageType=A.getInt32(12,!0),p.maxZError=A.getFloat64(16,!0),p.zMin=A.getFloat64(24,!0),p.zMax=A.getFloat64(32,!0),u+=40,d.headerInfo=p,d.ptr=u;var b,C;if(f>=3&&(C=f>=4?52:48,b=this.computeChecksumFletcher32(new Uint8Array(c,u-C,p.blobSize-14)),b!==p.checksum))throw"Checksum failed.";return!0},checkMinMaxRanges:function(c,d){var u=d.headerInfo,h=this.getDataTypeArray(u.imageType),p=u.numDims*this.getDataTypeSize(u.imageType),A=this.readSubArray(c,d.ptr,h,p),f=this.readSubArray(c,d.ptr+p,h,p);d.ptr+=2*p;var b,C=!0;for(b=0;b<u.numDims;b++)if(A[b]!==f[b]){C=!1;break}return u.minValues=A,u.maxValues=f,C},readSubArray:function(c,d,u,h){var p;if(u===Uint8Array)p=new Uint8Array(c,d,h);else{var A=new ArrayBuffer(h),f=new Uint8Array(A);f.set(new Uint8Array(c,d,h)),p=new u(A)}return p},readMask:function(c,d){var u=d.ptr,h=d.headerInfo,p=h.width*h.height,A=h.numValidPixel,f=new DataView(c,u,4),b={};if(b.numBytes=f.getUint32(0,!0),u+=4,(A===0||p===A)&&b.numBytes!==0)throw"invalid mask";var C,T;if(A===0)C=new Uint8Array(Math.ceil(p/8)),b.bitset=C,T=new Uint8Array(p),d.pixels.resultMask=T,u+=b.numBytes;else if(b.numBytes>0){C=new Uint8Array(Math.ceil(p/8)),f=new DataView(c,u,b.numBytes);var E=f.getInt16(0,!0),S=2,I=0,R=0;do{if(E>0)for(;E--;)C[I++]=f.getUint8(S++);else for(R=f.getUint8(S++),E=-E;E--;)C[I++]=R;E=f.getInt16(S,!0),S+=2}while(S<b.numBytes);if(E!==-32768||I<C.length)throw"Unexpected end of mask RLE encoding";T=new Uint8Array(p);var V=0,W=0;for(W=0;W<p;W++)W&7?(V=C[W>>3],V<<=W&7):V=C[W>>3],V&128&&(T[W]=1);d.pixels.resultMask=T,b.bitset=C,u+=b.numBytes}return d.ptr=u,d.mask=b,!0},readDataOneSweep:function(c,d,u){var h=d.ptr,p=d.headerInfo,A=p.numDims,f=p.width*p.height,b=p.imageType,C=p.numValidPixel*r.getDataTypeSize(b)*A,T,E=d.pixels.resultMask;if(u===Uint8Array)T=new Uint8Array(c,h,C);else{var S=new ArrayBuffer(C),I=new Uint8Array(S);I.set(new Uint8Array(c,h,C)),T=new u(S)}if(T.length===f*A)d.pixels.resultPixels=T;else{d.pixels.resultPixels=new u(f*A);var R=0,V=0,W=0,B=0;if(A>1)for(W=0;W<A;W++)for(B=W*f,V=0;V<f;V++)E[V]&&(d.pixels.resultPixels[B+V]=T[R++]);else for(V=0;V<f;V++)E[V]&&(d.pixels.resultPixels[V]=T[R++])}return h+=C,d.ptr=h,!0},readHuffmanTree:function(c,d){var u=this.HUFFMAN_LUT_BITS_MAX,h=new DataView(c,d.ptr,16);d.ptr+=16;var p=h.getInt32(0,!0);if(p<2)throw"unsupported Huffman version";var A=h.getInt32(4,!0),f=h.getInt32(8,!0),b=h.getInt32(12,!0);if(f>=b)return!1;var C=new Uint32Array(b-f);r.decodeBits(c,d,C);var T=[],E,S,I,R;for(E=f;E<b;E++)S=E-(E<A?0:A),T[S]={first:C[E-f],second:null};var V=c.byteLength-d.ptr,W=Math.ceil(V/4),B=new ArrayBuffer(W*4),N=new Uint8Array(B);N.set(new Uint8Array(c,d.ptr,V));var P=new Uint32Array(B),g=0,_,Z=0;for(_=P[0],E=f;E<b;E++)S=E-(E<A?0:A),R=T[S].first,R>0&&(T[S].second=_<<g>>>32-R,32-g>=R?(g+=R,g===32&&(g=0,Z++,_=P[Z])):(g+=R-32,Z++,_=P[Z],T[S].second|=_>>>32-g));var G=0,w=0,X=new s;for(E=0;E<T.length;E++)T[E]!==void 0&&(G=Math.max(G,T[E].first));G>=u?w=u:w=G,G>=30&&console.log("WARning, large NUM LUT BITS IS "+G);var k=[],v,D,Y,O,J,te;for(E=f;E<b;E++)if(S=E-(E<A?0:A),R=T[S].first,R>0)if(v=[R,S],R<=w)for(D=T[S].second<<w-R,Y=1<<w-R,I=0;I<Y;I++)k[D|I]=v;else for(D=T[S].second,te=X,O=R-1;O>=0;O--)J=D>>>O&1,J?(te.right||(te.right=new s),te=te.right):(te.left||(te.left=new s),te=te.left),O===0&&!te.val&&(te.val=v[1]);return{decodeLut:k,numBitsLUTQick:w,numBitsLUT:G,tree:X,stuffedData:P,srcPtr:Z,bitPos:g}},readHuffman:function(c,d,u){var h=d.headerInfo,p=h.numDims,A=d.headerInfo.height,f=d.headerInfo.width,b=f*A,C=this.readHuffmanTree(c,d),T=C.decodeLut,E=C.tree,S=C.stuffedData,I=C.srcPtr,R=C.bitPos,V=C.numBitsLUTQick,W=C.numBitsLUT,B=d.headerInfo.imageType===0?128:0,N,P,g,_=d.pixels.resultMask,Z,G,w,X,k,v,D,Y=0;R>0&&(I++,R=0);var O=S[I],J=d.encodeMode===1,te=new u(b*p),z=te,j;for(j=0;j<h.numDims;j++){if(p>1&&(z=new u(te.buffer,b*j,b),Y=0),d.headerInfo.numValidPixel===f*A)for(v=0,X=0;X<A;X++)for(k=0;k<f;k++,v++){if(P=0,Z=O<<R>>>32-V,G=Z,32-R<V&&(Z|=S[I+1]>>>64-R-V,G=Z),T[G])P=T[G][1],R+=T[G][0];else for(Z=O<<R>>>32-W,G=Z,32-R<W&&(Z|=S[I+1]>>>64-R-W,G=Z),N=E,D=0;D<W;D++)if(w=Z>>>W-D-1&1,N=w?N.right:N.left,!(N.left||N.right)){P=N.val,R=R+D+1;break}R>=32&&(R-=32,I++,O=S[I]),g=P-B,J?(k>0?g+=Y:X>0?g+=z[v-f]:g+=Y,g&=255,z[v]=g,Y=g):z[v]=g}else for(v=0,X=0;X<A;X++)for(k=0;k<f;k++,v++)if(_[v]){if(P=0,Z=O<<R>>>32-V,G=Z,32-R<V&&(Z|=S[I+1]>>>64-R-V,G=Z),T[G])P=T[G][1],R+=T[G][0];else for(Z=O<<R>>>32-W,G=Z,32-R<W&&(Z|=S[I+1]>>>64-R-W,G=Z),N=E,D=0;D<W;D++)if(w=Z>>>W-D-1&1,N=w?N.right:N.left,!(N.left||N.right)){P=N.val,R=R+D+1;break}R>=32&&(R-=32,I++,O=S[I]),g=P-B,J?(k>0&&_[v-1]?g+=Y:X>0&&_[v-f]?g+=z[v-f]:g+=Y,g&=255,z[v]=g,Y=g):z[v]=g}d.ptr=d.ptr+(I+1)*4+(R>0?4:0)}d.pixels.resultPixels=te},decodeBits:function(c,d,u,h,p){{var A=d.headerInfo,f=A.fileVersion,b=0,C=new DataView(c,d.ptr,5),T=C.getUint8(0);b++;var E=T>>6,S=E===0?4:3-E,I=(T&32)>0,R=T&31,V=0;if(S===1)V=C.getUint8(b),b++;else if(S===2)V=C.getUint16(b,!0),b+=2;else if(S===4)V=C.getUint32(b,!0),b+=4;else throw"Invalid valid pixel count type";var W=2*A.maxZError,B,N,P,g,_,Z,G,w,X,k,v=A.numDims>1?A.maxValues[p]:A.zMax;if(I){for(d.counter.lut++,w=C.getUint8(b),X=R,b++,g=Math.ceil((w-1)*R/8),_=Math.ceil(g/4),N=new ArrayBuffer(_*4),P=new Uint8Array(N),d.ptr+=b,P.set(new Uint8Array(c,d.ptr,g)),G=new Uint32Array(N),d.ptr+=g,k=0;w-1>>>k;)k++;g=Math.ceil(V*k/8),_=Math.ceil(g/4),N=new ArrayBuffer(_*4),P=new Uint8Array(N),P.set(new Uint8Array(c,d.ptr,g)),B=new Uint32Array(N),d.ptr+=g,f>=3?Z=o.unstuffLUT2(G,R,w-1,h,W,v):Z=o.unstuffLUT(G,R,w-1,h,W,v),f>=3?o.unstuff2(B,u,k,V,Z):o.unstuff(B,u,k,V,Z)}else d.counter.bitstuffer++,k=R,d.ptr+=b,k>0&&(g=Math.ceil(V*k/8),_=Math.ceil(g/4),N=new ArrayBuffer(_*4),P=new Uint8Array(N),P.set(new Uint8Array(c,d.ptr,g)),B=new Uint32Array(N),d.ptr+=g,f>=3?h==null?o.originalUnstuff2(B,u,k,V):o.unstuff2(B,u,k,V,!1,h,W,v):h==null?o.originalUnstuff(B,u,k,V):o.unstuff(B,u,k,V,!1,h,W,v))}},readTiles:function(c,d,u){var h=d.headerInfo,p=h.width,A=h.height,f=h.microBlockSize,b=h.imageType,C=r.getDataTypeSize(b),T=Math.ceil(p/f),E=Math.ceil(A/f);d.pixels.numBlocksY=E,d.pixels.numBlocksX=T,d.pixels.ptr=0;var S=0,I=0,R=0,V=0,W=0,B=0,N=0,P=0,g=0,_=0,Z=0,G=0,w=0,X=0,k=0,v=0,D,Y,O,J,te,z,j=new u(f*f),ee=A%f||f,ge=p%f||f,ye,ae,Ce=h.numDims,Te,Fe=d.pixels.resultMask,Ne=d.pixels.resultPixels;for(R=0;R<E;R++)for(W=R!==E-1?f:ee,V=0;V<T;V++)for(B=V!==T-1?f:ge,Z=R*p*f+V*f,G=p-B,Te=0;Te<Ce;Te++){if(Ce>1&&(Ne=new u(d.pixels.resultPixels.buffer,p*A*Te*C,p*A)),N=c.byteLength-d.ptr,D=new DataView(c,d.ptr,Math.min(10,N)),Y={},v=0,P=D.getUint8(0),v++,g=P>>6&255,_=P>>2&15,_!==(V*f>>3&15))throw"integrity issue";if(z=P&3,z>3)throw d.ptr+=v,"Invalid block encoding ("+z+")";if(z===2){d.counter.constant++,d.ptr+=v;continue}else if(z===0){if(d.counter.uncompressed++,d.ptr+=v,w=W*B*C,X=c.byteLength-d.ptr,w=w<X?w:X,O=new ArrayBuffer(w%C===0?w:w+C-w%C),J=new Uint8Array(O),J.set(new Uint8Array(c,d.ptr,w)),te=new u(O),k=0,Fe)for(S=0;S<W;S++){for(I=0;I<B;I++)Fe[Z]&&(Ne[Z]=te[k++]),Z++;Z+=G}else for(S=0;S<W;S++){for(I=0;I<B;I++)Ne[Z++]=te[k++];Z+=G}d.ptr+=k*C}else if(ye=r.getDataTypeUsed(b,g),ae=r.getOnePixel(Y,v,ye,D),v+=r.getDataTypeSize(ye),z===3)if(d.ptr+=v,d.counter.constantoffset++,Fe)for(S=0;S<W;S++){for(I=0;I<B;I++)Fe[Z]&&(Ne[Z]=ae),Z++;Z+=G}else for(S=0;S<W;S++){for(I=0;I<B;I++)Ne[Z++]=ae;Z+=G}else if(d.ptr+=v,r.decodeBits(c,d,j,ae,Te),v=0,Fe)for(S=0;S<W;S++){for(I=0;I<B;I++)Fe[Z]&&(Ne[Z]=j[v++]),Z++;Z+=G}else for(S=0;S<W;S++){for(I=0;I<B;I++)Ne[Z++]=j[v++];Z+=G}}},formatFileInfo:function(c){return{fileIdentifierString:c.headerInfo.fileIdentifierString,fileVersion:c.headerInfo.fileVersion,imageType:c.headerInfo.imageType,height:c.headerInfo.height,width:c.headerInfo.width,numValidPixel:c.headerInfo.numValidPixel,microBlockSize:c.headerInfo.microBlockSize,blobSize:c.headerInfo.blobSize,maxZError:c.headerInfo.maxZError,pixelType:r.getPixelType(c.headerInfo.imageType),eofOffset:c.eofOffset,mask:c.mask?{numBytes:c.mask.numBytes}:null,pixels:{numBlocksX:c.pixels.numBlocksX,numBlocksY:c.pixels.numBlocksY,maxValue:c.headerInfo.zMax,minValue:c.headerInfo.zMin,noDataValue:c.noDataValue}}},constructConstantSurface:function(c){var d=c.headerInfo.zMax,u=c.headerInfo.numDims,h=c.headerInfo.height*c.headerInfo.width,p=h*u,A=0,f=0,b=0,C=c.pixels.resultMask;if(C)if(u>1)for(A=0;A<u;A++)for(b=A*h,f=0;f<h;f++)C[f]&&(c.pixels.resultPixels[b+f]=d);else for(f=0;f<h;f++)C[f]&&(c.pixels.resultPixels[f]=d);else if(c.pixels.resultPixels.fill)c.pixels.resultPixels.fill(d);else for(f=0;f<p;f++)c.pixels.resultPixels[f]=d},getDataTypeArray:function(c){var d;switch(c){case 0:d=Int8Array;break;case 1:d=Uint8Array;break;case 2:d=Int16Array;break;case 3:d=Uint16Array;break;case 4:d=Int32Array;break;case 5:d=Uint32Array;break;case 6:d=Float32Array;break;case 7:d=Float64Array;break;default:d=Float32Array}return d},getPixelType:function(c){var d;switch(c){case 0:d="S8";break;case 1:d="U8";break;case 2:d="S16";break;case 3:d="U16";break;case 4:d="S32";break;case 5:d="U32";break;case 6:d="F32";break;case 7:d="F64";break;default:d="F32"}return d},isValidPixelValue:function(c,d){if(d==null)return!1;var u;switch(c){case 0:u=d>=-128&&d<=127;break;case 1:u=d>=0&&d<=255;break;case 2:u=d>=-32768&&d<=32767;break;case 3:u=d>=0&&d<=65536;break;case 4:u=d>=-2147483648&&d<=2147483647;break;case 5:u=d>=0&&d<=4294967296;break;case 6:u=d>=-34027999387901484e22&&d<=34027999387901484e22;break;case 7:u=d>=5e-324&&d<=17976931348623157e292;break;default:u=!1}return u},getDataTypeSize:function(c){var d=0;switch(c){case 0:case 1:d=1;break;case 2:case 3:d=2;break;case 4:case 5:case 6:d=4;break;case 7:d=8;break;default:d=c}return d},getDataTypeUsed:function(c,d){var u=c;switch(c){case 2:case 4:u=c-d;break;case 3:case 5:u=c-2*d;break;case 6:d===0?u=c:d===1?u=2:u=1;break;case 7:d===0?u=c:u=c-2*d+1;break;default:u=c;break}return u},getOnePixel:function(c,d,u,h){var p=0;switch(u){case 0:p=h.getInt8(d);break;case 1:p=h.getUint8(d);break;case 2:p=h.getInt16(d,!0);break;case 3:p=h.getUint16(d,!0);break;case 4:p=h.getInt32(d,!0);break;case 5:p=h.getUInt32(d,!0);break;case 6:p=h.getFloat32(d,!0);break;case 7:p=h.getFloat64(d,!0);break;default:throw"the decoder does not understand this pixel type"}return p}},s=function(c,d,u){this.val=c,this.left=d,this.right=u},a={decode:function(c,d){d=d||{};var u=d.noDataValue,h=0,p={};if(p.ptr=d.inputOffset||0,p.pixels={},!!r.readHeaderInfo(c,p)){var A=p.headerInfo,f=A.fileVersion,b=r.getDataTypeArray(A.imageType);r.readMask(c,p),A.numValidPixel!==A.width*A.height&&!p.pixels.resultMask&&(p.pixels.resultMask=d.maskData);var C=A.width*A.height;if(p.pixels.resultPixels=new b(C*A.numDims),p.counter={onesweep:0,uncompressed:0,lut:0,bitstuffer:0,constant:0,constantoffset:0},A.numValidPixel!==0)if(A.zMax===A.zMin)r.constructConstantSurface(p);else if(f>=4&&r.checkMinMaxRanges(c,p))r.constructConstantSurface(p);else{var T=new DataView(c,p.ptr,2),E=T.getUint8(0);if(p.ptr++,E)r.readDataOneSweep(c,p,b);else if(f>1&&A.imageType<=1&&Math.abs(A.maxZError-.5)<1e-5){var S=T.getUint8(1);if(p.ptr++,p.encodeMode=S,S>2||f<4&&S>1)throw"Invalid Huffman flag "+S;S?r.readHuffman(c,p,b):r.readTiles(c,p,b)}else r.readTiles(c,p,b)}p.eofOffset=p.ptr;var I;d.inputOffset?(I=p.headerInfo.blobSize+d.inputOffset-p.ptr,Math.abs(I)>=1&&(p.eofOffset=d.inputOffset+p.headerInfo.blobSize)):(I=p.headerInfo.blobSize-p.ptr,Math.abs(I)>=1&&(p.eofOffset=p.headerInfo.blobSize));var R={width:A.width,height:A.height,pixelData:p.pixels.resultPixels,minValue:A.zMin,maxValue:A.zMax,validPixelCount:A.numValidPixel,dimCount:A.numDims,dimStats:{minValues:A.minValues,maxValues:A.maxValues},maskData:p.pixels.resultMask};if(p.pixels.resultMask&&r.isValidPixelValue(A.imageType,u)){var V=p.pixels.resultMask;for(h=0;h<C;h++)V[h]||(R.pixelData[h]=u);R.noDataValue=u}return p.noDataValue=u,d.returnFileInfo&&(R.fileInfo=r.formatFileInfo(p)),R}},getBandCount:function(c){var d=0,u=0,h={};for(h.ptr=0,h.pixels={};u<c.byteLength-58;)r.readHeaderInfo(c,h),u+=h.headerInfo.blobSize,d++,h.ptr=u;return d}};return a})(),n=(function(){var o=new ArrayBuffer(4),r=new Uint8Array(o),s=new Uint32Array(o);return s[0]=1,r[0]===1})(),i={decode:function(o,r){if(!n)throw"Big endian system is not supported.";r=r||{};var s=r.inputOffset||0,a=new Uint8Array(o,s,10),c=String.fromCharCode.apply(null,a),d,u;if(c.trim()==="CntZImage")d=e,u=1;else if(c.substring(0,5)==="Lerc2")d=t,u=2;else throw"Unexpected file identifier string: "+c;for(var h=0,p=o.byteLength-10,A,f=[],b,C,T={width:0,height:0,pixels:[],pixelType:r.pixelType,mask:null,statistics:[]};s<p;){var E=d.decode(o,{inputOffset:s,encodedMaskData:A,maskData:C,returnMask:h===0,returnEncodedMask:h===0,returnFileInfo:!0,pixelType:r.pixelType||null,noDataValue:r.noDataValue||null});s=E.fileInfo.eofOffset,h===0&&(A=E.encodedMaskData,C=E.maskData,T.width=E.width,T.height=E.height,T.dimCount=E.dimCount||1,T.pixelType=E.pixelType||E.fileInfo.pixelType,T.mask=E.maskData),u>1&&E.fileInfo.mask&&E.fileInfo.mask.numBytes>0&&f.push(E.maskData),h++,T.pixels.push(E.pixelData),T.statistics.push({minValue:E.minValue,maxValue:E.maxValue,noDataValue:E.noDataValue,dimStats:E.dimStats})}var S,I,R;if(u>1&&f.length>1){for(R=T.width*T.height,T.bandMasks=f,C=new Uint8Array(R),C.set(f[0]),S=1;S<f.length;S++)for(b=f[S],I=0;I<R;I++)C[I]=C[I]&b[I];T.maskData=C}return T}};typeof define=="function"&&define.amd?define([],function(){return i}):typeof pz<"u"&&pz.exports?pz.exports=i:this.Lerc=i})()});var oGe=nm((HHo,iGe)=>{var JHo=y(x());iGe.exports={webm:"data:video/webm;base64,GkXfowEAAAAAAAAfQoaBAUL3gQFC8oEEQvOBCEKChHdlYm1Ch4EEQoWBAhhTgGcBAAAAAAAVkhFNm3RALE27i1OrhBVJqWZTrIHfTbuMU6uEFlSua1OsggEwTbuMU6uEHFO7a1OsghV17AEAAAAAAACkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVSalmAQAAAAAAAEUq17GDD0JATYCNTGF2ZjU1LjMzLjEwMFdBjUxhdmY1NS4zMy4xMDBzpJBlrrXf3DCDVB8KcgbMpcr+RImIQJBgAAAAAAAWVK5rAQAAAAAAD++uAQAAAAAAADLXgQFzxYEBnIEAIrWcg3VuZIaFVl9WUDiDgQEj44OEAmJaAOABAAAAAAAABrCBsLqBkK4BAAAAAAAPq9eBAnPFgQKcgQAitZyDdW5khohBX1ZPUkJJU4OBAuEBAAAAAAAAEZ+BArWIQOdwAAAAAABiZIEgY6JPbwIeVgF2b3JiaXMAAAAAAoC7AAAAAAAAgLUBAAAAAAC4AQN2b3JiaXMtAAAAWGlwaC5PcmcgbGliVm9yYmlzIEkgMjAxMDExMDEgKFNjaGF1ZmVudWdnZXQpAQAAABUAAABlbmNvZGVyPUxhdmM1NS41Mi4xMDIBBXZvcmJpcyVCQ1YBAEAAACRzGCpGpXMWhBAaQlAZ4xxCzmvsGUJMEYIcMkxbyyVzkCGkoEKIWyiB0JBVAABAAACHQXgUhIpBCCGEJT1YkoMnPQghhIg5eBSEaUEIIYQQQgghhBBCCCGERTlokoMnQQgdhOMwOAyD5Tj4HIRFOVgQgydB6CCED0K4moOsOQghhCQ1SFCDBjnoHITCLCiKgsQwuBaEBDUojILkMMjUgwtCiJqDSTX4GoRnQXgWhGlBCCGEJEFIkIMGQcgYhEZBWJKDBjm4FITLQagahCo5CB+EIDRkFQCQAACgoiiKoigKEBqyCgDIAAAQQFEUx3EcyZEcybEcCwgNWQUAAAEACAAAoEiKpEiO5EiSJFmSJVmSJVmS5omqLMuyLMuyLMsyEBqyCgBIAABQUQxFcRQHCA1ZBQBkAAAIoDiKpViKpWiK54iOCISGrAIAgAAABAAAEDRDUzxHlETPVFXXtm3btm3btm3btm3btm1blmUZCA1ZBQBAAAAQ0mlmqQaIMAMZBkJDVgEACAAAgBGKMMSA0JBVAABAAACAGEoOogmtOd+c46BZDppKsTkdnEi1eZKbirk555xzzsnmnDHOOeecopxZDJoJrTnnnMSgWQqaCa0555wnsXnQmiqtOeeccc7pYJwRxjnnnCateZCajbU555wFrWmOmkuxOeecSLl5UptLtTnnnHPOOeecc84555zqxekcnBPOOeecqL25lpvQxTnnnE/G6d6cEM4555xzzjnnnHPOOeecIDRkFQAABABAEIaNYdwpCNLnaCBGEWIaMulB9+gwCRqDnELq0ehopJQ6CCWVcVJKJwgNWQUAAAIAQAghhRRSSCGFFFJIIYUUYoghhhhyyimnoIJKKqmooowyyyyzzDLLLLPMOuyssw47DDHEEEMrrcRSU2011lhr7jnnmoO0VlprrbVSSimllFIKQkNWAQAgAAAEQgYZZJBRSCGFFGKIKaeccgoqqIDQkFUAACAAgAAAAABP8hzRER3RER3RER3RER3R8RzPESVREiVREi3TMjXTU0VVdWXXlnVZt31b2IVd933d933d+HVhWJZlWZZlWZZlWZZlWZZlWZYgNGQVAAACAAAghBBCSCGFFFJIKcYYc8w56CSUEAgNWQUAAAIACAAAAHAUR3EcyZEcSbIkS9IkzdIsT/M0TxM9URRF0zRV0RVdUTdtUTZl0zVdUzZdVVZtV5ZtW7Z125dl2/d93/d93/d93/d93/d9XQdCQ1YBABIAADqSIymSIimS4ziOJElAaMgqAEAGAEAAAIriKI7jOJIkSZIlaZJneZaomZrpmZ4qqkBoyCoAABAAQAAAAAAAAIqmeIqpeIqoeI7oiJJomZaoqZoryqbsuq7ruq7ruq7ruq7ruq7ruq7ruq7ruq7ruq7ruq7ruq7ruq4LhIasAgAkAAB0JEdyJEdSJEVSJEdygNCQVQCADACAAAAcwzEkRXIsy9I0T/M0TxM90RM901NFV3SB0JBVAAAgAIAAAAAAAAAMybAUy9EcTRIl1VItVVMt1VJF1VNVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVN0zRNEwgNWQkAkAEAkBBTLS3GmgmLJGLSaqugYwxS7KWxSCpntbfKMYUYtV4ah5RREHupJGOKQcwtpNApJq3WVEKFFKSYYyoVUg5SIDRkhQAQmgHgcBxAsixAsiwAAAAAAAAAkDQN0DwPsDQPAAAAAAAAACRNAyxPAzTPAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABA0jRA8zxA8zwAAAAAAAAA0DwP8DwR8EQRAAAAAAAAACzPAzTRAzxRBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABA0jRA8zxA8zwAAAAAAAAAsDwP8EQR0DwRAAAAAAAAACzPAzxRBDzRAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAEOAAABBgIRQasiIAiBMAcEgSJAmSBM0DSJYFTYOmwTQBkmVB06BpME0AAAAAAAAAAAAAJE2DpkHTIIoASdOgadA0iCIAAAAAAAAAAAAAkqZB06BpEEWApGnQNGgaRBEAAAAAAAAAAAAAzzQhihBFmCbAM02IIkQRpgkAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAGHAAAAgwoQwUGrIiAIgTAHA4imUBAIDjOJYFAACO41gWAABYliWKAABgWZooAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAYcAAACDChDBQashIAiAIAcCiKZQHHsSzgOJYFJMmyAJYF0DyApgFEEQAIAAAocAAACLBBU2JxgEJDVgIAUQAABsWxLE0TRZKkaZoniiRJ0zxPFGma53meacLzPM80IYqiaJoQRVE0TZimaaoqME1VFQAAUOAAABBgg6bE4gCFhqwEAEICAByKYlma5nmeJ4qmqZokSdM8TxRF0TRNU1VJkqZ5niiKommapqqyLE3zPFEURdNUVVWFpnmeKIqiaaqq6sLzPE8URdE0VdV14XmeJ4qiaJqq6roQRVE0TdNUTVV1XSCKpmmaqqqqrgtETxRNU1Vd13WB54miaaqqq7ouEE3TVFVVdV1ZBpimaaqq68oyQFVV1XVdV5YBqqqqruu6sgxQVdd1XVmWZQCu67qyLMsCAAAOHAAAAoygk4wqi7DRhAsPQKEhKwKAKAAAwBimFFPKMCYhpBAaxiSEFEImJaXSUqogpFJSKRWEVEoqJaOUUmopVRBSKamUCkIqJZVSAADYgQMA2IGFUGjISgAgDwCAMEYpxhhzTiKkFGPOOScRUoox55yTSjHmnHPOSSkZc8w556SUzjnnnHNSSuacc845KaVzzjnnnJRSSuecc05KKSWEzkEnpZTSOeecEwAAVOAAABBgo8jmBCNBhYasBABSAQAMjmNZmuZ5omialiRpmud5niiapiZJmuZ5nieKqsnzPE8URdE0VZXneZ4oiqJpqirXFUXTNE1VVV2yLIqmaZqq6rowTdNUVdd1XZimaaqq67oubFtVVdV1ZRm2raqq6rqyDFzXdWXZloEsu67s2rIAAPAEBwCgAhtWRzgpGgssNGQlAJABAEAYg5BCCCFlEEIKIYSUUggJAAAYcAAACDChDBQashIASAUAAIyx1lprrbXWQGettdZaa62AzFprrbXWWmuttdZaa6211lJrrbXWWmuttdZaa6211lprrbXWWmuttdZaa6211lprrbXWWmuttdZaa6211lprrbXWWmstpZRSSimllFJKKaWUUkoppZRSSgUA+lU4APg/2LA6wknRWGChISsBgHAAAMAYpRhzDEIppVQIMeacdFRai7FCiDHnJKTUWmzFc85BKCGV1mIsnnMOQikpxVZjUSmEUlJKLbZYi0qho5JSSq3VWIwxqaTWWoutxmKMSSm01FqLMRYjbE2ptdhqq7EYY2sqLbQYY4zFCF9kbC2m2moNxggjWywt1VprMMYY3VuLpbaaizE++NpSLDHWXAAAd4MDAESCjTOsJJ0VjgYXGrISAAgJACAQUooxxhhzzjnnpFKMOeaccw5CCKFUijHGnHMOQgghlIwx5pxzEEIIIYRSSsaccxBCCCGEkFLqnHMQQgghhBBKKZ1zDkIIIYQQQimlgxBCCCGEEEoopaQUQgghhBBCCKmklEIIIYRSQighlZRSCCGEEEIpJaSUUgohhFJCCKGElFJKKYUQQgillJJSSimlEkoJJYQSUikppRRKCCGUUkpKKaVUSgmhhBJKKSWllFJKIYQQSikFAAAcOAAABBhBJxlVFmGjCRcegEJDVgIAZAAAkKKUUiktRYIipRikGEtGFXNQWoqocgxSzalSziDmJJaIMYSUk1Qy5hRCDELqHHVMKQYtlRhCxhik2HJLoXMOAAAAQQCAgJAAAAMEBTMAwOAA4XMQdAIERxsAgCBEZohEw0JweFAJEBFTAUBigkIuAFRYXKRdXECXAS7o4q4DIQQhCEEsDqCABByccMMTb3jCDU7QKSp1IAAAAAAADADwAACQXAAREdHMYWRobHB0eHyAhIiMkAgAAAAAABcAfAAAJCVAREQ0cxgZGhscHR4fICEiIyQBAIAAAgAAAAAggAAEBAQAAAAAAAIAAAAEBB9DtnUBAAAAAAAEPueBAKOFggAAgACjzoEAA4BwBwCdASqwAJAAAEcIhYWIhYSIAgIABhwJ7kPfbJyHvtk5D32ych77ZOQ99snIe+2TkPfbJyHvtk5D32ych77ZOQ99YAD+/6tQgKOFggADgAqjhYIAD4AOo4WCACSADqOZgQArADECAAEQEAAYABhYL/QACIBDmAYAAKOFggA6gA6jhYIAT4AOo5mBAFMAMQIAARAQABgAGFgv9AAIgEOYBgAAo4WCAGSADqOFggB6gA6jmYEAewAxAgABEBAAGAAYWC/0AAiAQ5gGAACjhYIAj4AOo5mBAKMAMQIAARAQABgAGFgv9AAIgEOYBgAAo4WCAKSADqOFggC6gA6jmYEAywAxAgABEBAAGAAYWC/0AAiAQ5gGAACjhYIAz4AOo4WCAOSADqOZgQDzADECAAEQEAAYABhYL/QACIBDmAYAAKOFggD6gA6jhYIBD4AOo5iBARsAEQIAARAQFGAAYWC/0AAiAQ5gGACjhYIBJIAOo4WCATqADqOZgQFDADECAAEQEAAYABhYL/QACIBDmAYAAKOFggFPgA6jhYIBZIAOo5mBAWsAMQIAARAQABgAGFgv9AAIgEOYBgAAo4WCAXqADqOFggGPgA6jmYEBkwAxAgABEBAAGAAYWC/0AAiAQ5gGAACjhYIBpIAOo4WCAbqADqOZgQG7ADECAAEQEAAYABhYL/QACIBDmAYAAKOFggHPgA6jmYEB4wAxAgABEBAAGAAYWC/0AAiAQ5gGAACjhYIB5IAOo4WCAfqADqOZgQILADECAAEQEAAYABhYL/QACIBDmAYAAKOFggIPgA6jhYICJIAOo5mBAjMAMQIAARAQABgAGFgv9AAIgEOYBgAAo4WCAjqADqOFggJPgA6jmYECWwAxAgABEBAAGAAYWC/0AAiAQ5gGAACjhYICZIAOo4WCAnqADqOZgQKDADECAAEQEAAYABhYL/QACIBDmAYAAKOFggKPgA6jhYICpIAOo5mBAqsAMQIAARAQABgAGFgv9AAIgEOYBgAAo4WCArqADqOFggLPgA6jmIEC0wARAgABEBAUYABhYL/QACIBDmAYAKOFggLkgA6jhYIC+oAOo5mBAvsAMQIAARAQABgAGFgv9AAIgEOYBgAAo4WCAw+ADqOZgQMjADECAAEQEAAYABhYL/QACIBDmAYAAKOFggMkgA6jhYIDOoAOo5mBA0sAMQIAARAQABgAGFgv9AAIgEOYBgAAo4WCA0+ADqOFggNkgA6jmYEDcwAxAgABEBAAGAAYWC/0AAiAQ5gGAACjhYIDeoAOo4WCA4+ADqOZgQObADECAAEQEAAYABhYL/QACIBDmAYAAKOFggOkgA6jhYIDuoAOo5mBA8MAMQIAARAQABgAGFgv9AAIgEOYBgAAo4WCA8+ADqOFggPkgA6jhYID+oAOo4WCBA+ADhxTu2sBAAAAAAAAEbuPs4EDt4r3gQHxghEr8IEK",mp4:"data:video/mp4;base64,AAAAHGZ0eXBNNFYgAAACAGlzb21pc28yYXZjMQAAAAhmcmVlAAAGF21kYXTeBAAAbGliZmFhYyAxLjI4AABCAJMgBDIARwAAArEGBf//rdxF6b3m2Ui3lizYINkj7u94MjY0IC0gY29yZSAxNDIgcjIgOTU2YzhkOCAtIEguMjY0L01QRUctNCBBVkMgY29kZWMgLSBDb3B5bGVmdCAyMDAzLTIwMTQgLSBodHRwOi8vd3d3LnZpZGVvbGFuLm9yZy94MjY0Lmh0bWwgLSBvcHRpb25zOiBjYWJhYz0wIHJlZj0zIGRlYmxvY2s9MTowOjAgYW5hbHlzZT0weDE6MHgxMTEgbWU9aGV4IHN1Ym1lPTcgcHN5PTEgcHN5X3JkPTEuMDA6MC4wMCBtaXhlZF9yZWY9MSBtZV9yYW5nZT0xNiBjaHJvbWFfbWU9MSB0cmVsbGlzPTEgOHg4ZGN0PTAgY3FtPTAgZGVhZHpvbmU9MjEsMTEgZmFzdF9wc2tpcD0xIGNocm9tYV9xcF9vZmZzZXQ9LTIgdGhyZWFkcz02IGxvb2thaGVhZF90aHJlYWRzPTEgc2xpY2VkX3RocmVhZHM9MCBucj0wIGRlY2ltYXRlPTEgaW50ZXJsYWNlZD0wIGJsdXJheV9jb21wYXQ9MCBjb25zdHJhaW5lZF9pbnRyYT0wIGJmcmFtZXM9MCB3ZWlnaHRwPTAga2V5aW50PTI1MCBrZXlpbnRfbWluPTI1IHNjZW5lY3V0PTQwIGludHJhX3JlZnJlc2g9MCByY19sb29rYWhlYWQ9NDAgcmM9Y3JmIG1idHJlZT0xIGNyZj0yMy4wIHFjb21wPTAuNjAgcXBtaW49MCBxcG1heD02OSBxcHN0ZXA9NCB2YnZfbWF4cmF0ZT03NjggdmJ2X2J1ZnNpemU9MzAwMCBjcmZfbWF4PTAuMCBuYWxfaHJkPW5vbmUgZmlsbGVyPTAgaXBfcmF0aW89MS40MCBhcT0xOjEuMDAAgAAAAFZliIQL8mKAAKvMnJycnJycnJycnXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXiEASZACGQAjgCEASZACGQAjgAAAAAdBmjgX4GSAIQBJkAIZACOAAAAAB0GaVAX4GSAhAEmQAhkAI4AhAEmQAhkAI4AAAAAGQZpgL8DJIQBJkAIZACOAIQBJkAIZACOAAAAABkGagC/AySEASZACGQAjgAAAAAZBmqAvwMkhAEmQAhkAI4AhAEmQAhkAI4AAAAAGQZrAL8DJIQBJkAIZACOAAAAABkGa4C/AySEASZACGQAjgCEASZACGQAjgAAAAAZBmwAvwMkhAEmQAhkAI4AAAAAGQZsgL8DJIQBJkAIZACOAIQBJkAIZACOAAAAABkGbQC/AySEASZACGQAjgCEASZACGQAjgAAAAAZBm2AvwMkhAEmQAhkAI4AAAAAGQZuAL8DJIQBJkAIZACOAIQBJkAIZACOAAAAABkGboC/AySEASZACGQAjgAAAAAZBm8AvwMkhAEmQAhkAI4AhAEmQAhkAI4AAAAAGQZvgL8DJIQBJkAIZACOAAAAABkGaAC/AySEASZACGQAjgCEASZACGQAjgAAAAAZBmiAvwMkhAEmQAhkAI4AhAEmQAhkAI4AAAAAGQZpAL8DJIQBJkAIZACOAAAAABkGaYC/AySEASZACGQAjgCEASZACGQAjgAAAAAZBmoAvwMkhAEmQAhkAI4AAAAAGQZqgL8DJIQBJkAIZACOAIQBJkAIZACOAAAAABkGawC/AySEASZACGQAjgAAAAAZBmuAvwMkhAEmQAhkAI4AhAEmQAhkAI4AAAAAGQZsAL8DJIQBJkAIZACOAAAAABkGbIC/AySEASZACGQAjgCEASZACGQAjgAAAAAZBm0AvwMkhAEmQAhkAI4AhAEmQAhkAI4AAAAAGQZtgL8DJIQBJkAIZACOAAAAABkGbgCvAySEASZACGQAjgCEASZACGQAjgAAAAAZBm6AnwMkhAEmQAhkAI4AhAEmQAhkAI4AhAEmQAhkAI4AhAEmQAhkAI4AAAAhubW9vdgAAAGxtdmhkAAAAAAAAAAAAAAAAAAAD6AAABDcAAQAAAQAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAzB0cmFrAAAAXHRraGQAAAADAAAAAAAAAAAAAAABAAAAAAAAA+kAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAABAAAAAALAAAACQAAAAAAAkZWR0cwAAABxlbHN0AAAAAAAAAAEAAAPpAAAAAAABAAAAAAKobWRpYQAAACBtZGhkAAAAAAAAAAAAAAAAAAB1MAAAdU5VxAAAAAAALWhkbHIAAAAAAAAAAHZpZGUAAAAAAAAAAAAAAABWaWRlb0hhbmRsZXIAAAACU21pbmYAAAAUdm1oZAAAAAEAAAAAAAAAAAAAACRkaW5mAAAAHGRyZWYAAAAAAAAAAQAAAAx1cmwgAAAAAQAAAhNzdGJsAAAAr3N0c2QAAAAAAAAAAQAAAJ9hdmMxAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAALAAkABIAAAASAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGP//AAAALWF2Y0MBQsAN/+EAFWdCwA3ZAsTsBEAAAPpAADqYA8UKkgEABWjLg8sgAAAAHHV1aWRraEDyXyRPxbo5pRvPAyPzAAAAAAAAABhzdHRzAAAAAAAAAAEAAAAeAAAD6QAAABRzdHNzAAAAAAAAAAEAAAABAAAAHHN0c2MAAAAAAAAAAQAAAAEAAAABAAAAAQAAAIxzdHN6AAAAAAAAAAAAAAAeAAADDwAAAAsAAAALAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAAiHN0Y28AAAAAAAAAHgAAAEYAAANnAAADewAAA5gAAAO0AAADxwAAA+MAAAP2AAAEEgAABCUAAARBAAAEXQAABHAAAASMAAAEnwAABLsAAATOAAAE6gAABQYAAAUZAAAFNQAABUgAAAVkAAAFdwAABZMAAAWmAAAFwgAABd4AAAXxAAAGDQAABGh0cmFrAAAAXHRraGQAAAADAAAAAAAAAAAAAAACAAAAAAAABDcAAAAAAAAAAAAAAAEBAAAAAAEAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAkZWR0cwAAABxlbHN0AAAAAAAAAAEAAAQkAAADcAABAAAAAAPgbWRpYQAAACBtZGhkAAAAAAAAAAAAAAAAAAC7gAAAykBVxAAAAAAALWhkbHIAAAAAAAAAAHNvdW4AAAAAAAAAAAAAAABTb3VuZEhhbmRsZXIAAAADi21pbmYAAAAQc21oZAAAAAAAAAAAAAAAJGRpbmYAAAAcZHJlZgAAAAAAAAABAAAADHVybCAAAAABAAADT3N0YmwAAABnc3RzZAAAAAAAAAABAAAAV21wNGEAAAAAAAAAAQAAAAAAAAAAAAIAEAAAAAC7gAAAAAAAM2VzZHMAAAAAA4CAgCIAAgAEgICAFEAVBbjYAAu4AAAADcoFgICAAhGQBoCAgAECAAAAIHN0dHMAAAAAAAAAAgAAADIAAAQAAAAAAQAAAkAAAAFUc3RzYwAAAAAAAAAbAAAAAQAAAAEAAAABAAAAAgAAAAIAAAABAAAAAwAAAAEAAAABAAAABAAAAAIAAAABAAAABgAAAAEAAAABAAAABwAAAAIAAAABAAAACAAAAAEAAAABAAAACQAAAAIAAAABAAAACgAAAAEAAAABAAAACwAAAAIAAAABAAAADQAAAAEAAAABAAAADgAAAAIAAAABAAAADwAAAAEAAAABAAAAEAAAAAIAAAABAAAAEQAAAAEAAAABAAAAEgAAAAIAAAABAAAAFAAAAAEAAAABAAAAFQAAAAIAAAABAAAAFgAAAAEAAAABAAAAFwAAAAIAAAABAAAAGAAAAAEAAAABAAAAGQAAAAIAAAABAAAAGgAAAAEAAAABAAAAGwAAAAIAAAABAAAAHQAAAAEAAAABAAAAHgAAAAIAAAABAAAAHwAAAAQAAAABAAAA4HN0c3oAAAAAAAAAAAAAADMAAAAaAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAACMc3RjbwAAAAAAAAAfAAAALAAAA1UAAANyAAADhgAAA6IAAAO+AAAD0QAAA+0AAAQAAAAEHAAABC8AAARLAAAEZwAABHoAAASWAAAEqQAABMUAAATYAAAE9AAABRAAAAUjAAAFPwAABVIAAAVuAAAFgQAABZ0AAAWwAAAFzAAABegAAAX7AAAGFwAAAGJ1ZHRhAAAAWm1ldGEAAAAAAAAAIWhkbHIAAAAAAAAAAG1kaXJhcHBsAAAAAAAAAAAAAAAALWlsc3QAAAAlqXRvbwAAAB1kYXRhAAAAAQAAAABMYXZmNTUuMzMuMTAw"}});var sGe=nm((KHo,rGe)=>{var jHo=y(x()),{webm:d2t,mp4:u2t}=oGe(),nie=()=>typeof navigator<"u"&&parseFloat((""+(/CPU.*OS ([0-9_]{3,4})[0-9_]{0,1}|(CPU like).*AppleWebKit.*Mobile/i.exec(navigator.userAgent)||[0,""])[1]).replace("undefined","3_2").replace("_",".").replace("_",""))<10&&!window.MSStream,iie=()=>"wakeLock"in navigator,oie=class{constructor(){if(this.enabled=!1,iie()){this._wakeLock=null;let t=()=>{this._wakeLock!==null&&document.visibilityState==="visible"&&this.enable()};document.addEventListener("visibilitychange",t),document.addEventListener("fullscreenchange",t)}else nie()?this.noSleepTimer=null:(this.noSleepVideo=document.createElement("video"),this.noSleepVideo.setAttribute("title","No Sleep"),this.noSleepVideo.setAttribute("playsinline",""),this._addSourceToVideo(this.noSleepVideo,"webm",d2t),this._addSourceToVideo(this.noSleepVideo,"mp4",u2t),this.noSleepVideo.addEventListener("loadedmetadata",()=>{this.noSleepVideo.duration<=1?this.noSleepVideo.setAttribute("loop",""):this.noSleepVideo.addEventListener("timeupdate",()=>{this.noSleepVideo.currentTime>.5&&(this.noSleepVideo.currentTime=Math.random())})}))}_addSourceToVideo(t,n,i){var o=document.createElement("source");o.src=i,o.type=`video/${n}`,t.appendChild(o)}get isEnabled(){return this.enabled}enable(){return iie()?navigator.wakeLock.request("screen").then(t=>{this._wakeLock=t,this.enabled=!0,console.log("Wake Lock active."),this._wakeLock.addEventListener("release",()=>{console.log("Wake Lock released.")})}).catch(t=>{throw this.enabled=!1,console.error(`${t.name}, ${t.message}`),t}):nie()?(this.disable(),console.warn(`
NoSleep enabled for older iOS devices. This can interrupt
active or long-running network requests from completing successfully.
See https://github.com/richtr/NoSleep.js/issues/15 for more details.
`),this.noSleepTimer=window.setInterval(()=>{document.hidden||(window.location.href=window.location.href.split("#")[0],window.setTimeout(window.stop,0))},15e3),this.enabled=!0,Promise.resolve()):this.noSleepVideo.play().then(n=>(this.enabled=!0,n)).catch(n=>{throw this.enabled=!1,n})}disable(){iie()?(this._wakeLock&&this._wakeLock.release(),this._wakeLock=null):nie()?this.noSleepTimer&&(console.warn(`
NoSleep now disabled for older iOS devices.
`),window.clearInterval(this.noSleepTimer),this.noSleepTimer=null):this.noSleepVideo.pause(),this.enabled=!1}};rGe.exports=oie});var B2t={};EGe(B2t,{AlphaMode:()=>pp,AlphaPipelineStage:()=>l2,AnchorPointDirect:()=>mF,AnchorPointIndirect:()=>hF,Animation:()=>eU,AnimationViewModel:()=>tU,Appearance:()=>To,ApproximateTerrainHeights:()=>Gi,ArcGISTiledElevationTerrainProvider:()=>Uq,ArcGisBaseMapType:()=>Jh,ArcGisMapServerImageryProvider:()=>pg,ArcGisMapService:()=>mu,ArcType:()=>un,ArticulationStageType:()=>qc,AssociativeArray:()=>Xt,Atmosphere:()=>CC,AtmospherePipelineStage:()=>DF,AttributeCompression:()=>on,AttributeType:()=>Ut,AutoExposure:()=>yM,AutomaticUniforms:()=>yA,Axis:()=>ro,AxisAlignedBoundingBox:()=>ou,Azure2DImageryProvider:()=>Q2,B3dmLoader:()=>ZF,B3dmParser:()=>SF,BaseLayerPicker:()=>aU,BaseLayerPickerViewModel:()=>sU,BatchTable:()=>wx,BatchTableHierarchy:()=>oC,BatchTexture:()=>Pl,BatchTexturePipelineStage:()=>d2,Billboard:()=>Lo,BillboardCollection:()=>yu,BillboardGraphics:()=>Dc,BillboardLoadState:()=>Ps,BillboardTexture:()=>yg,BillboardVisualizer:()=>e1,BingMapsGeocoderService:()=>kq,BingMapsImageryProvider:()=>w2,BingMapsStyle:()=>Z_,BlendEquation:()=>Ec,BlendFunction:()=>Ko,BlendOption:()=>$o,BlendingState:()=>ln,BoundingRectangle:()=>nt,BoundingSphere:()=>ue,BoundingSphereState:()=>Tt,BoundingVolumeSemantics:()=>T0,BoxEmitter:()=>Mte,BoxGeometry:()=>Cc,BoxGeometryUpdater:()=>mW,BoxGraphics:()=>Dx,BoxOutlineGeometry:()=>Rh,BrdfLutGenerator:()=>_Y,Buffer:()=>it,BufferLoader:()=>dC,BufferPoint:()=>Vd,BufferPointCollection:()=>Rg,BufferPointMaterial:()=>_g,BufferPolygon:()=>wa,BufferPolygonCollection:()=>Gg,BufferPolygonMaterial:()=>Vg,BufferPolyline:()=>zl,BufferPolylineCollection:()=>H0,BufferPolylineMaterial:()=>Lg,BufferPrimitive:()=>qr,BufferPrimitiveCollection:()=>Js,BufferPrimitiveMaterial:()=>Ol,BufferUsage:()=>Be,CPUStylingPipelineStage:()=>f2,CallbackPositionProperty:()=>hW,CallbackProperty:()=>Bh,Camera:()=>Zo,CameraEventAggregator:()=>_M,CameraEventType:()=>to,CameraFlightPath:()=>ZY,Cartesian2:()=>M,Cartesian3:()=>m,Cartesian4:()=>re,CartesianRectangle:()=>Y_,Cartographic:()=>Ae,CartographicGeocoderService:()=>Oq,CatmullRomSpline:()=>zq,Cesium3DContentGroup:()=>iC,Cesium3DTile:()=>vm,Cesium3DTileBatchTable:()=>Xh,Cesium3DTileColorBlendMode:()=>yd,Cesium3DTileContent:()=>vte,Cesium3DTileContentFactory:()=>qC,Cesium3DTileContentState:()=>Ar,Cesium3DTileContentType:()=>ha,Cesium3DTileFeature:()=>Ga,Cesium3DTileFeatureTable:()=>Qh,Cesium3DTileOptimizationHint:()=>Nm,Cesium3DTileOptimizations:()=>Kw,Cesium3DTilePass:()=>sr,Cesium3DTilePassState:()=>rh,Cesium3DTilePointFeature:()=>xg,Cesium3DTileRefine:()=>mr,Cesium3DTileStyle:()=>Wg,Cesium3DTileStyleEngine:()=>nN,Cesium3DTilesInspector:()=>rU,Cesium3DTilesInspectorViewModel:()=>oU,Cesium3DTilesTerrainData:()=>TX,Cesium3DTilesTerrainGeometryProcessor:()=>RZ,Cesium3DTilesTerrainProvider:()=>e$,Cesium3DTilesVoxelProvider:()=>Ute,Cesium3DTileset:()=>js,Cesium3DTilesetBaseTraversal:()=>cN,Cesium3DTilesetCache:()=>$w,Cesium3DTilesetGraphics:()=>Kx,Cesium3DTilesetHeatmap:()=>eN,Cesium3DTilesetMetadata:()=>cT,Cesium3DTilesetMostDetailedTraversal:()=>rN,Cesium3DTilesetSkipTraversal:()=>uN,Cesium3DTilesetStatistics:()=>lf,Cesium3DTilesetTraversal:()=>Xa,Cesium3DTilesetVisualizer:()=>mN,CesiumInspector:()=>mU,CesiumInspectorViewModel:()=>uU,CesiumTerrainProvider:()=>KT,CesiumWidget:()=>Cv,Check:()=>vo,CheckerboardMaterialProperty:()=>dI,CircleEmitter:()=>_v,CircleGeometry:()=>s$,CircleOutlineGeometry:()=>a$,ClassificationModelDrawCommand:()=>LB,ClassificationPipelineStage:()=>u2,ClassificationPrimitive:()=>RS,ClassificationType:()=>ti,ClearCommand:()=>mi,ClippingPlane:()=>zs,ClippingPlaneCollection:()=>ls,ClippingPolygon:()=>a_,ClippingPolygonCollection:()=>Uh,Clock:()=>pf,ClockRange:()=>xs,ClockStep:()=>Xo,ClockViewModel:()=>jv,CloudCollection:()=>Hte,CloudType:()=>cR,Color:()=>U,ColorBlendMode:()=>jc,ColorGeometryInstanceAttribute:()=>$t,ColorMaterialProperty:()=>Kt,Command:()=>Une,ComponentDatatype:()=>H,Composite3DTileContent:()=>TW,CompositeEntityCollection:()=>_8,CompositeMaterialProperty:()=>mI,CompositePositionProperty:()=>ac,CompositeProperty:()=>ol,CompressedTextureBuffer:()=>OR,ComputeCommand:()=>yl,ComputeEngine:()=>QR,ConditionsExpression:()=>Lw,ConeEmitter:()=>Kte,ConstantPositionProperty:()=>Rl,ConstantProperty:()=>fi,ConstantSpline:()=>LF,ContentMetadata:()=>vw,Context:()=>Zx,ContextLimits:()=>Bt,CoplanarPolygonGeometry:()=>ON,CoplanarPolygonGeometryLibrary:()=>Pg,CoplanarPolygonOutlineGeometry:()=>Mm,CornerType:()=>Ki,CorrelationGroup:()=>fF,CorridorGeometry:()=>hT,CorridorGeometryLibrary:()=>co,CorridorGeometryUpdater:()=>CN,CorridorGraphics:()=>Qx,CorridorOutlineGeometry:()=>xN,Credit:()=>Et,CreditDisplay:()=>LY,CubeMap:()=>Or,CubeMapFace:()=>nV,CubeMapPanorama:()=>NE,CubicRealPolynomial:()=>yx,CullFace:()=>wi,CullingVolume:()=>Os,CumulusCloud:()=>qu,CustomDataSource:()=>EN,CustomHeightmapTerrainProvider:()=>c$,CustomShader:()=>GE,CustomShaderMode:()=>fg,CustomShaderPipelineStage:()=>C2,CustomShaderTranslucencyMode:()=>w0,CylinderGeometry:()=>SN,CylinderGeometryLibrary:()=>fT,CylinderGeometryUpdater:()=>IN,CylinderGraphics:()=>Ox,CylinderOutlineGeometry:()=>_N,CzmlDataSource:()=>NN,DataSource:()=>ys,DataSourceClock:()=>Af,DataSourceCollection:()=>PN,DataSourceDisplay:()=>IP,DebugAppearance:()=>tne,DebugCameraPrimitive:()=>tA,DebugInspector:()=>WM,DebugModelMatrixPrimitive:()=>Rv,DefaultProxy:()=>d$,DepthFunction:()=>ec,DepthPlane:()=>BY,DequantizationPipelineStage:()=>E2,DerivedCommand:()=>nA,DeveloperError:()=>fe,DeviceOrientationCameraController:()=>wY,DirectionalLight:()=>nne,DiscardEmptyTileImagePolicy:()=>R_,DiscardMissingTileImagePolicy:()=>F2,DistanceDisplayCondition:()=>Dt,DistanceDisplayConditionGeometryInstanceAttribute:()=>ei,DoubleEndedPriorityQueue:()=>gb,DoublyLinkedList:()=>qw,DracoLoader:()=>qA,DrawCommand:()=>ot,DynamicAtmosphereLightingType:()=>og,DynamicEnvironmentMapManager:()=>rg,DynamicGeometryBatch:()=>CT,DynamicGeometryUpdater:()=>Ei,EarthOrientationParameters:()=>PR,EarthOrientationParametersSample:()=>vb,EasingFunction:()=>Ts,EdgeDetectionPipelineStage:()=>_2,EdgeFramebuffer:()=>UY,EdgeVisibilityPipelineStage:()=>R2,EllipseGeometry:()=>ed,EllipseGeometryLibrary:()=>Fd,EllipseGeometryUpdater:()=>YN,EllipseGraphics:()=>zx,EllipseOutlineGeometry:()=>Lu,Ellipsoid:()=>ie,EllipsoidGeodesic:()=>NA,EllipsoidGeometry:()=>Ma,EllipsoidGeometryUpdater:()=>vN,EllipsoidGraphics:()=>Hx,EllipsoidOutlineGeometry:()=>Eu,EllipsoidPrimitive:()=>CY,EllipsoidRhumbLine:()=>Sc,EllipsoidSurfaceAppearance:()=>ine,EllipsoidTangentPlane:()=>Rs,EllipsoidTerrainProvider:()=>qT,EllipsoidalOccluder:()=>hf,Empty3DTileContent:()=>j_,EncodedCartesian3:()=>In,Entity:()=>jo,EntityCluster:()=>_u,EntityCollection:()=>Ya,EntityView:()=>RP,EquirectangularPanorama:()=>one,Event:()=>xe,EventHelper:()=>Xr,Expression:()=>ym,ExpressionNodeType:()=>Gt,ExtrapolationType:()=>Zu,FeatureDetection:()=>hn,FeatureIdPipelineStage:()=>B0,Fog:()=>NY,ForEach:()=>De,FrameRateMonitor:()=>Wv,FrameState:()=>PY,Framebuffer:()=>ss,FramebufferManager:()=>Ti,Frozen:()=>Q,FrustumCommands:()=>DY,FrustumGeometry:()=>eE,FrustumOutlineGeometry:()=>RX,Fullscreen:()=>Dr,FullscreenButton:()=>fU,FullscreenButtonViewModel:()=>hU,GaussianSplat3DTileContent:()=>K0,GaussianSplatPrimitive:()=>Mw,GaussianSplatRenderResources:()=>ww,GaussianSplatSorter:()=>KC,GaussianSplatTextureGenerator:()=>Bw,GeoJsonDataSource:()=>Sy,GeoJsonLoader:()=>RF,GeocodeType:()=>Py,Geocoder:()=>AU,GeocoderService:()=>FZ,GeocoderViewModel:()=>pU,GeographicProjection:()=>ki,GeographicTilingScheme:()=>zi,Geometry:()=>Ct,Geometry3DTileContent:()=>_W,GeometryAttribute:()=>we,GeometryAttributes:()=>xn,GeometryFactory:()=>f$,GeometryInstance:()=>wt,GeometryInstanceAttribute:()=>kc,GeometryOffsetAttribute:()=>An,GeometryPipeline:()=>zn,GeometryPipelineStage:()=>W2,GeometryType:()=>sm,GeometryUpdater:()=>Si,GeometryUpdaterSet:()=>WT,GeometryVisualizer:()=>hP,GetFeatureInfoFormat:()=>Kh,Globe:()=>xY,GlobeDepth:()=>kY,GlobeSurfaceShaderSet:()=>lY,GlobeSurfaceTile:()=>ih,GlobeSurfaceTileProvider:()=>uY,GlobeTranslucency:()=>mY,GlobeTranslucencyFramebuffer:()=>QY,GlobeTranslucencyState:()=>XY,GltfBufferViewLoader:()=>vS,GltfDracoLoader:()=>US,GltfGpmLoader:()=>AF,GltfGpmLocal:()=>d_,GltfImageLoader:()=>DS,GltfIndexBufferLoader:()=>kS,GltfJsonLoader:()=>OS,GltfLoader:()=>uu,GltfLoaderUtil:()=>Td,GltfMeshPrimitiveGpmLoader:()=>xF,GltfSpzLoader:()=>vW,GltfStructuralMetadataLoader:()=>dF,GltfTextureLoader:()=>KS,GltfVertexBufferLoader:()=>jS,Google2DImageryProvider:()=>k2,GoogleEarthEnterpriseImageryProvider:()=>sne,GoogleEarthEnterpriseMapsProvider:()=>X2,GoogleEarthEnterpriseMetadata:()=>yb,GoogleEarthEnterpriseTerrainData:()=>BZ,GoogleEarthEnterpriseTerrainProvider:()=>C$,GoogleEarthEnterpriseTileInformation:()=>GX,GoogleGeocoderService:()=>E$,GoogleMaps:()=>ua,GoogleStreetViewCubeMapPanoramaProvider:()=>ane,GpxDataSource:()=>sX,GregorianDate:()=>CA,GridImageryProvider:()=>cne,GridMaterialProperty:()=>TI,GroundGeometryUpdater:()=>si,GroundPolylineGeometry:()=>Yx,GroundPolylinePrimitive:()=>Vh,GroundPrimitive:()=>_l,GroupMetadata:()=>aI,HeadingPitchRange:()=>jm,HeadingPitchRoll:()=>yc,Heap:()=>FR,HeightReference:()=>rt,HeightmapEncoding:()=>eh,HeightmapTerrainData:()=>Fc,HeightmapTessellator:()=>EZ,HermitePolynomialApproximation:()=>ZN,HermiteSpline:()=>L0,HilbertOrder:()=>PS,HomeButton:()=>bU,HomeButtonViewModel:()=>gU,HorizontalOrigin:()=>Bi,I3SBuildingSceneLayerExplorer:()=>jne,I3SBuildingSceneLayerExplorerViewModel:()=>yU,I3SDataProvider:()=>Qf,I3SDecoder:()=>Fv,I3SFeature:()=>Bv,I3SField:()=>wv,I3SGeometry:()=>lR,I3SLayer:()=>QE,I3SNode:()=>dR,I3SStatistics:()=>Xv,I3SSublayer:()=>Mv,I3SSymbology:()=>Pv,I3dmLoader:()=>GF,I3dmParser:()=>VF,ITwinData:()=>mne,ITwinPlatform:()=>na,Iau2000Orientation:()=>WX,Iau2006XysData:()=>XR,Iau2006XysSample:()=>px,IauOrientationAxes:()=>FX,IauOrientationParameters:()=>LX,ImageBasedLighting:()=>nC,ImageBasedLightingPipelineStage:()=>QF,ImageMaterialProperty:()=>s0,Imagery:()=>P_,ImageryConfiguration:()=>vB,ImageryCoverage:()=>M_,ImageryFlags:()=>H2,ImageryInput:()=>K2,ImageryLayer:()=>fs,ImageryLayerCollection:()=>dT,ImageryLayerFeatureInfo:()=>Hh,ImageryPipelineStage:()=>j2,ImageryProvider:()=>hu,ImageryState:()=>Qn,Implicit3DTileContent:()=>t_,ImplicitAvailabilityBitstream:()=>YS,ImplicitMetadataView:()=>MS,ImplicitSubdivisionScheme:()=>Ls,ImplicitSubtree:()=>tg,ImplicitSubtreeCache:()=>Ev,ImplicitSubtreeMetadata:()=>IW,ImplicitTileCoordinates:()=>Vp,ImplicitTileset:()=>Rp,IndexDatatype:()=>Ue,InfoBox:()=>CU,InfoBoxViewModel:()=>xU,InspectorShared:()=>Od,InstanceAttributeSemantic:()=>Fs,InstancingPipelineStage:()=>r2,InterpolationAlgorithm:()=>_$,InterpolationType:()=>kh,Intersect:()=>qt,IntersectionTests:()=>hi,Intersections2D:()=>Ff,Interval:()=>Qr,InvertClassification:()=>KZ,Ion:()=>Nh,IonGeocodeProviderType:()=>xb,IonGeocoderService:()=>nE,IonImageryProvider:()=>Dl,IonImageryProviderFactory:()=>w_,IonResource:()=>cs,IonWorldImageryStyle:()=>gg,Iso8601:()=>qe,JobScheduler:()=>YY,JobType:()=>Ic,JsonMetadataTable:()=>sg,JulianDate:()=>q,KTX2Transcoder:()=>zR,KeyboardEventModifier:()=>ka,KeyframeNode:()=>Mo,KmlCamera:()=>aX,KmlDataSource:()=>OT,KmlLookAt:()=>cX,KmlTour:()=>lX,KmlTourFlyTo:()=>uX,KmlTourWait:()=>mX,Label:()=>D0,LabelCollection:()=>Sp,LabelGraphics:()=>Lh,LabelStyle:()=>hr,LabelVisualizer:()=>fP,LagrangePolynomialApproximation:()=>RN,LeapSecond:()=>ho,Light:()=>hne,LightingModel:()=>Cp,LightingPipelineStage:()=>$2,LinearApproximation:()=>AT,LinearSpline:()=>G0,ManagedArray:()=>Nl,MapMode2D:()=>od,MapProjection:()=>R$,MapboxImageryProvider:()=>Y2,MapboxStyleImageryProvider:()=>fne,MappedPositions:()=>J2,Mars3DEx:()=>gA,Material:()=>Oi,MaterialAppearance:()=>go,MaterialPipelineStage:()=>iB,MaterialProperty:()=>Ir,Math:()=>L,Matrix2:()=>Qi,Matrix3:()=>$,Matrix4:()=>F,Megatexture:()=>nv,MeshPrimitiveGpmLocal:()=>yF,MetadataClass:()=>vh,MetadataClassProperty:()=>mp,MetadataComponentType:()=>Yt,MetadataEntity:()=>Kn,MetadataEnum:()=>kW,MetadataEnumValue:()=>DW,MetadataPicking:()=>MY,MetadataPickingPipelineStage:()=>Au,MetadataPipelineStage:()=>Im,MetadataSchema:()=>Xl,MetadataSchemaLoader:()=>x0,MetadataSemantic:()=>Em,MetadataTable:()=>xm,MetadataTableProperty:()=>RW,MetadataType:()=>St,MipmapHint:()=>lm,Model:()=>gu,Model3DTileContent:()=>bu,ModelAlphaOptions:()=>WC,ModelAnimation:()=>wF,ModelAnimationChannel:()=>BF,ModelAnimationCollection:()=>NF,ModelAnimationLoop:()=>Ed,ModelAnimationState:()=>Oh,ModelArticulation:()=>zF,ModelArticulationStage:()=>OF,ModelClippingPlanesPipelineStage:()=>KF,ModelClippingPolygonsPipelineStage:()=>$F,ModelColorPipelineStage:()=>F0,ModelComponents:()=>Tn,ModelDrawCommand:()=>FB,ModelDrawCommands:()=>NB,ModelFeature:()=>PF,ModelFeatureTable:()=>YF,ModelGraphics:()=>vA,ModelImagery:()=>UB,ModelImageryMapping:()=>VC,ModelLightingOptions:()=>RB,ModelMatrixUpdateStage:()=>s2,ModelNode:()=>e2,ModelPrimitiveImagery:()=>GC,ModelReader:()=>el,ModelRenderResources:()=>CB,ModelRuntimeNode:()=>c2,ModelRuntimePrimitive:()=>yB,ModelSceneGraph:()=>PB,ModelSilhouettePipelineStage:()=>SB,ModelSkin:()=>xB,ModelSplitterPipelineStage:()=>IB,ModelStatistics:()=>XB,ModelType:()=>Nr,ModelUtility:()=>It,ModelVisualizer:()=>pP,Moon:()=>EY,MorphTargetsPipelineStage:()=>rB,MorphWeightSpline:()=>W$,MortonOrder:()=>$0,Multiple3DTileContent:()=>kw,MultisampleFramebuffer:()=>kL,NavigationHelpButton:()=>EU,NavigationHelpButtonViewModel:()=>TU,NearFarScalar:()=>Ot,NeverTileDiscardPolicy:()=>Ane,NodeRenderResources:()=>ZB,NodeStatisticsPipelineStage:()=>a2,NodeTransformationProperty:()=>Jx,OIT:()=>OY,Occluder:()=>NX,OffsetGeometryInstanceAttribute:()=>Ao,OpenCageGeocoderService:()=>w$,OpenStreetMapImageryProvider:()=>Fb,OrderedGroundPrimitiveCollection:()=>XN,OrientedBoundingBox:()=>nn,OrthographicFrustum:()=>bn,OrthographicOffCenterFrustum:()=>as,Packable:()=>N$,PackableForInterpolation:()=>P$,Panorama:()=>gne,PanoramaProvider:()=>bne,Particle:()=>hR,ParticleBurst:()=>xne,ParticleEmitter:()=>Cne,ParticleSystem:()=>Tne,Pass:()=>Ge,PassState:()=>Uc,PathGraphics:()=>UA,PathVisualizer:()=>bP,PeliasGeocoderService:()=>wX,PerInstanceColorAppearance:()=>yn,PerformanceDisplay:()=>Tb,PerformanceWatchdog:()=>_U,PerformanceWatchdogViewModel:()=>SU,PerspectiveFrustum:()=>Ui,PerspectiveOffCenterFrustum:()=>id,PickDepth:()=>vY,PickDepthFramebuffer:()=>HY,PickFramebuffer:()=>JY,PickId:()=>oV,PickedMetadataInfo:()=>cv,Picking:()=>eM,PickingPipelineStage:()=>sB,PinBuilder:()=>mb,PixelDatatype:()=>Oe,PixelFormat:()=>Ke,Plane:()=>dn,PlaneGeometry:()=>UN,PlaneGeometryUpdater:()=>kN,PlaneGraphics:()=>rW,PlaneOutlineGeometry:()=>DN,PntsLoader:()=>MB,PntsParser:()=>wC,PointCloud:()=>yv,PointCloudEyeDomeLighting:()=>cg,PointCloudShading:()=>gp,PointCloudStylingPipelineStage:()=>cB,PointGraphics:()=>jx,PointPrimitive:()=>pa,PointPrimitiveCollection:()=>gI,PointVisualizer:()=>xP,PolygonGeometry:()=>ig,PolygonGeometryLibrary:()=>ii,PolygonGeometryUpdater:()=>HN,PolygonGraphics:()=>Wh,PolygonHierarchy:()=>_c,PolygonOutlineGeometry:()=>zN,PolygonPipeline:()=>Ii,Polyline:()=>Lm,PolylineArrowMaterialProperty:()=>SI,PolylineCollection:()=>nf,PolylineColorAppearance:()=>Vs,PolylineDashMaterialProperty:()=>II,PolylineGeometry:()=>ab,PolylineGeometryUpdater:()=>EP,PolylineGlowMaterialProperty:()=>RI,PolylineGraphics:()=>Qc,PolylineMaterialAppearance:()=>tc,PolylineOutlineMaterialProperty:()=>ay,PolylinePipeline:()=>Ji,PolylineVisualizer:()=>_P,PolylineVolumeGeometry:()=>jN,PolylineVolumeGeometryLibrary:()=>df,PolylineVolumeGeometryUpdater:()=>tP,PolylineVolumeGraphics:()=>qx,PolylineVolumeOutlineGeometry:()=>eP,PositionProperty:()=>Gh,PositionPropertyArray:()=>jg,PostProcessStage:()=>Fo,PostProcessStageCollection:()=>TM,PostProcessStageComposite:()=>Ud,PostProcessStageLibrary:()=>Ou,PostProcessStageSampleMode:()=>Qu,PostProcessStageTextureCache:()=>TE,PpeMetadata:()=>bF,PpeSource:()=>Xne,PpeTexture:()=>gF,Primitive:()=>Nn,PrimitiveCollection:()=>$l,PrimitiveLoadPlan:()=>SC,PrimitiveOutlineGenerator:()=>EC,PrimitiveOutlinePipelineStage:()=>uB,PrimitivePipeline:()=>Nx,PrimitiveRenderResources:()=>VB,PrimitiveState:()=>Hr,PrimitiveStatisticsPipelineStage:()=>mB,PrimitiveType:()=>We,ProjectionPicker:()=>ZU,ProjectionPickerViewModel:()=>IU,Property:()=>K,PropertyArray:()=>GI,PropertyAttribute:()=>TC,PropertyAttributeProperty:()=>sF,PropertyBag:()=>Gl,PropertyTable:()=>vl,PropertyTexture:()=>ag,PropertyTextureProperty:()=>rF,ProviderViewModel:()=>cr,Proxy:()=>Y$,QuadraticRealPolynomial:()=>xl,QuadtreeOccluders:()=>hY,QuadtreePrimitive:()=>yY,QuadtreeTile:()=>fY,QuadtreeTileLoadState:()=>Qa,QuadtreeTileProvider:()=>Ene,QuantizedMeshTerrainData:()=>JT,QuarticRealPolynomial:()=>KR,Quaternion:()=>Me,QuaternionSpline:()=>FF,Queue:()=>_0,Ray:()=>Cn,Rectangle:()=>de,RectangleCollisionChecker:()=>BT,RectangleGeometry:()=>IT,RectangleGeometryLibrary:()=>fa,RectangleGeometryUpdater:()=>nP,RectangleGraphics:()=>Fh,RectangleOutlineGeometry:()=>tT,ReferenceFrame:()=>Ni,ReferenceProperty:()=>qg,RenderState:()=>Qe,Renderbuffer:()=>nu,RenderbufferFormat:()=>Tl,Request:()=>Tr,RequestErrorEvent:()=>Kf,RequestScheduler:()=>Yc,RequestState:()=>Ai,RequestType:()=>Ds,Resource:()=>Le,ResourceCache:()=>Fi,ResourceCacheKey:()=>Yl,ResourceCacheStatistics:()=>zW,ResourceLoader:()=>Hi,ResourceLoaderState:()=>yt,Rotation:()=>Qm,RuntimeError:()=>me,S2Cell:()=>JA,SDFSettings:()=>Ba,SampledPositionProperty:()=>lc,SampledProperty:()=>Vu,Sampler:()=>Ht,ScaledPositionProperty:()=>Pp,Scene:()=>dv,SceneFramebuffer:()=>pE,SceneMode:()=>se,SceneMode2DPipelineStage:()=>hB,SceneModePicker:()=>VU,SceneModePickerViewModel:()=>RU,SceneTransforms:()=>so,SceneTransitioner:()=>SM,ScreenSpaceCameraController:()=>ZM,ScreenSpaceEventHandler:()=>Du,ScreenSpaceEventType:()=>Gn,SelectedFeatureIdPipelineStage:()=>N0,SelectionIndicator:()=>WU,SelectionIndicatorViewModel:()=>LU,SensorVolumePortionToDisplay:()=>BI,ShaderBuilder:()=>GA,ShaderCache:()=>YL,ShaderDestination:()=>pe,ShaderFunction:()=>HL,ShaderProgram:()=>tn,ShaderSource:()=>ze,ShaderStruct:()=>zL,ShadowMap:()=>_b,ShadowMapShader:()=>rA,ShadowMode:()=>Vn,ShadowVolumeAppearance:()=>su,SharedContext:()=>JL,ShowGeometryInstanceAttribute:()=>Rn,Simon1994PlanetaryPositions:()=>qb,SimplePolylineGeometry:()=>K$,SingleTileImageryProvider:()=>M2,SkinningPipelineStage:()=>pB,SkyAtmosphere:()=>uv,SkyBox:()=>hv,SpatialNode:()=>ov,Spdcf:()=>pF,SpecularEnvironmentCubeMap:()=>wh,SphereEmitter:()=>_ne,SphereGeometry:()=>MX,SphereOutlineGeometry:()=>Yg,Spherical:()=>VN,Spline:()=>So,SplitDirection:()=>Br,Splitter:()=>rR,StaticGeometryColorBatch:()=>Jm,StaticGeometryPerMaterialBatch:()=>Km,StaticGroundGeometryColorBatch:()=>eZ,StaticGroundGeometryPerMaterialBatch:()=>mP,StaticGroundPolylinePerMaterialBatch:()=>SP,StaticOutlineGeometryBatch:()=>iZ,StencilConstants:()=>Jt,StencilFunction:()=>ni,StencilOperation:()=>Vt,SteppedSpline:()=>WF,Stereographic:()=>Kc,StorageType:()=>Z0,StripeMaterialProperty:()=>WI,StripeOrientation:()=>gf,StructuralMetadata:()=>Wa,StyleCommandsNeeded:()=>zh,StyleExpression:()=>Ine,Sun:()=>Av,SunLight:()=>VA,SunPostProcess:()=>GM,SupportedImageFormats:()=>uF,SvgPathBindingHandler:()=>Jv,Sync:()=>KL,TaskProcessor:()=>$n,Terrain:()=>kv,TerrainData:()=>Yd,TerrainEncoding:()=>yr,TerrainFillMesh:()=>kZ,TerrainMesh:()=>hc,TerrainOffsetProperty:()=>$x,TerrainPicker:()=>gX,TerrainProvider:()=>Qo,TerrainQuantization:()=>Da,TerrainState:()=>Wo,Texture:()=>Lt,Texture3D:()=>jL,TextureAtlas:()=>Gx,TextureCache:()=>ML,TextureMagnificationFilter:()=>li,TextureManager:()=>jM,TextureMinificationFilter:()=>zt,TexturePacker:()=>xS,TextureUniform:()=>Nne,TextureWrap:()=>gn,TileAvailability:()=>Wf,TileBoundingRegion:()=>Tu,TileBoundingS2Cell:()=>Hw,TileBoundingSphere:()=>Mg,TileBoundingVolume:()=>Zne,TileCoordinatesImageryProvider:()=>Ov,TileDiscardPolicy:()=>Vne,TileEdge:()=>Zn,TileImagery:()=>X_,TileMapServiceImageryProvider:()=>X0,TileMetadata:()=>Uw,TileOrientedBoundingBox:()=>Gd,TileProviderError:()=>qo,TileReplacementQueue:()=>pY,TileSelectionResult:()=>ui,TileState:()=>Gne,Tileset3DTileContent:()=>QB,TilesetMetadata:()=>Jw,TilesetPipelineStage:()=>MF,TilingScheme:()=>j$,TimeConstants:()=>di,TimeDynamicImagery:()=>RC,TimeDynamicPointCloud:()=>aR,TimeInterval:()=>Wn,TimeIntervalCollection:()=>bs,TimeIntervalCollectionPositionProperty:()=>$g,TimeIntervalCollectionProperty:()=>eb,TimeStandard:()=>ci,Timeline:()=>wU,TimelineHighlightRange:()=>FU,TimelineTrack:()=>BU,Tipsify:()=>jR,ToggleButtonViewModel:()=>tx,Tonemapper:()=>Zb,TrackingReferenceFrame:()=>wA,Transforms:()=>bt,TranslationRotationScale:()=>a0,TranslucentTileClassification:()=>KY,TridiagonalSystemSolver:()=>g_,TrustedServers:()=>cS,TweenCollection:()=>_E,UniformState:()=>DL,UniformType:()=>tR,UrlTemplateImageryProvider:()=>hs,VERSION:()=>F2t,VRButton:()=>PU,VRButtonViewModel:()=>NU,VRTheWorldTerrainProvider:()=>$$,VaryingType:()=>Pne,Vector3DTileBatch:()=>dp,Vector3DTileClampedPolylines:()=>mw,Vector3DTileContent:()=>fw,Vector3DTileGeometry:()=>HA,Vector3DTilePoints:()=>rw,Vector3DTilePolygons:()=>sw,Vector3DTilePolylines:()=>UC,Vector3DTilePrimitive:()=>aC,VectorGltf3DTileContent:()=>K_,VelocityOrientationProperty:()=>LN,VelocityVectorProperty:()=>tb,VertexArray:()=>kn,VertexArrayFacade:()=>LA,VertexAttributeSemantic:()=>ct,VertexFormat:()=>ve,VerticalExaggeration:()=>Eo,VerticalExaggerationPipelineStage:()=>gB,VerticalOrigin:()=>Hn,VideoSynchronizer:()=>q$,View:()=>bE,Viewer:()=>sie,ViewportQuad:()=>Lne,Visibility:()=>vr,Visualizer:()=>Bq,VoxelBoundsCollection:()=>Gb,VoxelBoxShape:()=>WE,VoxelCell:()=>FM,VoxelContent:()=>LE,VoxelCylinderShape:()=>FE,VoxelEllipsoidShape:()=>BE,VoxelInspector:()=>YU,VoxelInspectorViewModel:()=>XU,VoxelMetadataOrder:()=>lA,VoxelPrimitive:()=>$y,VoxelProvider:()=>Fne,VoxelRenderResources:()=>JM,VoxelShape:()=>Bne,VoxelShapeType:()=>Ac,VoxelTraversal:()=>rv,VulkanConstants:()=>eee,WallGeometry:()=>oP,WallGeometryLibrary:()=>ZT,WallGeometryUpdater:()=>aP,WallGraphics:()=>DA,WallOutlineGeometry:()=>sP,WebGLConstants:()=>ne,WebMapServiceImageryProvider:()=>U2,WebMapTileServiceImageryProvider:()=>D2,WebMercatorProjection:()=>pi,WebMercatorTilingScheme:()=>ws,WindingOrder:()=>ks,WireframeIndexGenerator:()=>v_,WireframePipelineStage:()=>bB,_shadersAcesTonemappingStage:()=>tM,_shadersAdditiveBlend:()=>RM,_shadersAdjustTranslucentFS:()=>PZ,_shadersAllMaterialAppearanceFS:()=>i1,_shadersAllMaterialAppearanceVS:()=>o1,_shadersAmbientOcclusionGenerate:()=>nM,_shadersAmbientOcclusionModulate:()=>iM,_shadersAspectRampMaterial:()=>l1,_shadersAtmosphereCommon:()=>Dh,_shadersAtmosphereStageFS:()=>vF,_shadersAtmosphereStageVS:()=>UF,_shadersBasicMaterialAppearanceFS:()=>r1,_shadersBasicMaterialAppearanceVS:()=>s1,_shadersBillboardCollectionFS:()=>OB,_shadersBillboardCollectionVS:()=>zB,_shadersBlackAndWhite:()=>oM,_shadersBloomComposite:()=>rM,_shadersBrdfLutGeneratorFS:()=>UX,_shadersBrightPass:()=>VM,_shadersBrightness:()=>sM,_shadersBufferPointMaterialFS:()=>Aw,_shadersBufferPointMaterialVS:()=>pw,_shadersBufferPolygonMaterialFS:()=>Ew,_shadersBufferPolygonMaterialVS:()=>Tw,_shadersBufferPolylineMaterialFS:()=>Zw,_shadersBufferPolylineMaterialVS:()=>Iw,_shadersBumpMapMaterial:()=>d1,_shadersCPUStylingStageFS:()=>h2,_shadersCPUStylingStageVS:()=>m2,_shadersCheckerboardMaterial:()=>u1,_shadersCloudCollectionFS:()=>DX,_shadersCloudCollectionVS:()=>kX,_shadersCloudNoiseFS:()=>QX,_shadersCloudNoiseVS:()=>OX,_shadersCompareAndPackTranslucentDepth:()=>zX,_shadersCompositeOITFS:()=>HX,_shadersCompositeTranslucentClassification:()=>gE,_shadersComputeIrradianceFS:()=>$W,_shadersComputeRadianceMapFS:()=>eF,_shadersConstantLodStageFS:()=>nB,_shadersConstantLodStageVS:()=>tB,_shadersContrastBias:()=>aM,_shadersConvolveSpecularMapFS:()=>tF,_shadersConvolveSpecularMapVS:()=>nF,_shadersCubeMapPanoramaVS:()=>JX,_shadersCustomShaderStageFS:()=>A2,_shadersCustomShaderStageVS:()=>p2,_shadersCzmBuiltins:()=>_x,_shadersDepthOfField:()=>cM,_shadersDepthPlaneFS:()=>KX,_shadersDepthPlaneVS:()=>jX,_shadersDepthView:()=>lM,_shadersDepthViewPacked:()=>wne,_shadersDotMaterial:()=>m1,_shadersEdgeDetection:()=>dM,_shadersEdgeDetectionStageFS:()=>S2,_shadersEdgeVisibilityStageFS:()=>I2,_shadersEdgeVisibilityStageVS:()=>Z2,_shadersElevationBandMaterial:()=>h1,_shadersElevationContourMaterial:()=>f1,_shadersElevationRampMaterial:()=>p1,_shadersEllipsoidFS:()=>XZ,_shadersEllipsoidSurfaceAppearanceFS:()=>Vv,_shadersEllipsoidSurfaceAppearanceVS:()=>Gv,_shadersEllipsoidVS:()=>YZ,_shadersFXAA:()=>hM,_shadersFXAA3_11:()=>qX,_shadersFadeMaterial:()=>A1,_shadersFeatureIdStageFS:()=>g2,_shadersFeatureIdStageVS:()=>b2,_shadersFilmicTonemapping:()=>uM,_shadersGaussianBlur1D:()=>Ky,_shadersGeometryStageFS:()=>V2,_shadersGeometryStageVS:()=>G2,_shadersGlobeFS:()=>$X,_shadersGlobeVS:()=>eY,_shadersGridMaterial:()=>g1,_shadersGroundAtmosphere:()=>MZ,_shadersHSBToRGB:()=>PG,_shadersHSLToRGB:()=>XG,_shadersImageBasedLightingStageFS:()=>kF,_shadersInstancingStageCommon:()=>t2,_shadersInstancingStageVS:()=>n2,_shadersIntersectBox:()=>vM,_shadersIntersectCylinder:()=>UM,_shadersIntersectDepth:()=>YM,_shadersIntersectEllipsoid:()=>DM,_shadersIntersectLongitude:()=>eR,_shadersIntersectPlane:()=>MM,_shadersIntersection:()=>RE,_shadersIntersectionUtils:()=>XM,_shadersLegacyInstancingStageVS:()=>i2,_shadersLensFlare:()=>fM,_shadersLightingStageFS:()=>q2,_shadersMaterialStageFS:()=>eB,_shadersMegatexture:()=>HM,_shadersMetadataStageFS:()=>y2,_shadersMetadataStageVS:()=>x2,_shadersModelClippingPlanesStageFS:()=>JF,_shadersModelClippingPolygonsStageFS:()=>qF,_shadersModelClippingPolygonsStageVS:()=>jF,_shadersModelColorStageFS:()=>HF,_shadersModelFS:()=>wB,_shadersModelSilhouetteStageFS:()=>TB,_shadersModelSilhouetteStageVS:()=>EB,_shadersModelSplitterStageFS:()=>_B,_shadersModelVS:()=>BB,_shadersModifiedReinhardTonemapping:()=>pM,_shadersMorphTargetsStageVS:()=>oB,_shadersNightVision:()=>AM,_shadersNormalMapMaterial:()=>b1,_shadersOctree:()=>zM,_shadersPassThrough:()=>vd,_shadersPassThroughDepth:()=>zy,_shadersPbrNeutralTonemapping:()=>mM,_shadersPerInstanceColorAppearanceFS:()=>V1,_shadersPerInstanceColorAppearanceVS:()=>G1,_shadersPerInstanceFlatColorAppearanceFS:()=>Bx,_shadersPerInstanceFlatColorAppearanceVS:()=>L1,_shadersPointCloudEyeDomeLighting:()=>TF,_shadersPointCloudStylingStageVS:()=>aB,_shadersPointPrimitiveCollectionFS:()=>sy,_shadersPointPrimitiveCollectionVS:()=>TN,_shadersPolygonSignedDistanceFS:()=>jW,_shadersPolylineArrowMaterial:()=>y1,_shadersPolylineColorAppearanceVS:()=>O1,_shadersPolylineCommon:()=>Zl,_shadersPolylineDashMaterial:()=>x1,_shadersPolylineFS:()=>vx,_shadersPolylineGlowMaterial:()=>C1,_shadersPolylineMaterialAppearanceVS:()=>z1,_shadersPolylineOutlineMaterial:()=>T1,_shadersPolylineShadowVolumeFS:()=>U1,_shadersPolylineShadowVolumeMorphFS:()=>D1,_shadersPolylineShadowVolumeMorphVS:()=>k1,_shadersPolylineShadowVolumeVS:()=>Q1,_shadersPolylineVS:()=>$B,_shadersPrimitiveGaussianSplatFS:()=>Pw,_shadersPrimitiveGaussianSplatVS:()=>Nw,_shadersPrimitiveOutlineStageFS:()=>dB,_shadersPrimitiveOutlineStageVS:()=>lB,_shadersRGBToHSB:()=>dL,_shadersRGBToHSL:()=>uL,_shadersRGBToXYZ:()=>mL,_shadersReinhardTonemapping:()=>gM,_shadersReprojectWebMercatorFS:()=>O2,_shadersReprojectWebMercatorVS:()=>z2,_shadersRimLightingMaterial:()=>E1,_shadersSelectedFeatureIdStageCommon:()=>S_,_shadersShadowVolumeAppearanceFS:()=>IS,_shadersShadowVolumeAppearanceVS:()=>B1,_shadersShadowVolumeFS:()=>i0,_shadersSilhouette:()=>bM,_shadersSkinningStageVS:()=>fB,_shadersSkyAtmosphereCommon:()=>vZ,_shadersSkyAtmosphereFS:()=>tY,_shadersSkyAtmosphereVS:()=>nY,_shadersSkyBoxFS:()=>iY,_shadersSkyBoxVS:()=>oY,_shadersSlopeRampMaterial:()=>S1,_shadersStripeMaterial:()=>_1,_shadersSunFS:()=>rY,_shadersSunTextureFS:()=>sY,_shadersSunVS:()=>aY,_shadersTexturedMaterialAppearanceFS:()=>a1,_shadersTexturedMaterialAppearanceVS:()=>c1,_shadersVector3DTileClampedPolylinesFS:()=>dw,_shadersVector3DTileClampedPolylinesVS:()=>lw,_shadersVector3DTilePolylinesVS:()=>aw,_shadersVectorTileVS:()=>NS,_shadersVerticalExaggerationStageVS:()=>AB,_shadersViewportQuadFS:()=>cY,_shadersViewportQuadVS:()=>Ax,_shadersVoxelFS:()=>NM,_shadersVoxelUtils:()=>wM,_shadersVoxelVS:()=>PM,_shadersWater:()=>Z1,_shadersWaterMaskMaterial:()=>I1,_shadersXYZToRGB:()=>PL,_shadersacesTonemapping:()=>$V,_shadersalphaWeight:()=>eG,_shadersantialias:()=>tG,_shadersapplyHSBShift:()=>nG,_shadersapproximateSphericalCoordinates:()=>iG,_shadersapproximateTanh:()=>oG,_shadersbackFacing:()=>rG,_shadersbranchFreeTernary:()=>sG,_shaderscascadeColor:()=>aG,_shaderscascadeDistance:()=>cG,_shaderscascadeMatrix:()=>lG,_shaderscascadeWeights:()=>dG,_shadersclipPolygons:()=>uG,_shaderscolumbusViewMorph:()=>mG,_shaderscomputeAtmosphereColor:()=>hG,_shaderscomputeGroundAtmosphereScattering:()=>fG,_shaderscomputePosition:()=>pG,_shaderscomputeScattering:()=>AG,_shaderscomputeTextureTransform:()=>gG,_shadersconvertLocalToBoxUv:()=>kM,_shadersconvertLocalToCylinderUv:()=>QM,_shadersconvertLocalToEllipsoidUv:()=>OM,_shaderscosineAndSine:()=>bG,_shadersdecodeRGB8:()=>yG,_shadersdecompressTextureCoordinates:()=>xG,_shadersdegreesPerRadian:()=>rV,_shadersdepthClamp:()=>CG,_shadersdepthRange:()=>sV,_shadersdepthRangeStruct:()=>QV,_shaderseastNorthUpToEyeCoordinates:()=>TG,_shadersellipsoidContainsPoint:()=>EG,_shadersellipsoidTextureCoordinates:()=>SG,_shadersepsilon1:()=>aV,_shadersepsilon2:()=>cV,_shadersepsilon3:()=>lV,_shadersepsilon4:()=>dV,_shadersepsilon5:()=>uV,_shadersepsilon6:()=>mV,_shadersepsilon7:()=>hV,_shadersequalsEpsilon:()=>_G,_shaderseyeOffset:()=>IG,_shaderseyeToWindowCoordinates:()=>ZG,_shadersfastApproximateAtan:()=>RG,_shadersfog:()=>VG,_shadersgammaCorrect:()=>GG,_shadersgeodeticSurfaceNormal:()=>LG,_shadersgetDefaultMaterial:()=>WG,_shadersgetDynamicAtmosphereLightDirection:()=>FG,_shadersgetLambertDiffuse:()=>BG,_shadersgetSpecular:()=>wG,_shadersgetWaterNoise:()=>NG,_shadershue:()=>YG,_shadersinfinity:()=>fV,_shadersinverseGamma:()=>MG,_shadersisEmpty:()=>vG,_shadersisFull:()=>UG,_shaderslatitudeToWebMercatorFraction:()=>DG,_shaderslineDistance:()=>QG,_shaderslinearToSrgb:()=>kG,_shadersluminance:()=>OG,_shadersmaterial:()=>OV,_shadersmaterialInput:()=>zV,_shadersmaximumComponent:()=>zG,_shadersmetersPerPixel:()=>HG,_shadersmodelMaterial:()=>HV,_shadersmodelToWindowCoordinates:()=>JG,_shadersmodelVertexOutput:()=>JV,_shadersmultiplyWithColorBalance:()=>KG,_shadersnearFarScalar:()=>jG,_shadersoctDecode:()=>qG,_shadersoneOverPi:()=>pV,_shadersoneOverTwoPi:()=>AV,_shaderspackDepth:()=>$G,_shaderspassCesium3DTile:()=>gV,_shaderspassCesium3DTileClassification:()=>bV,_shaderspassCesium3DTileClassificationIgnoreShow:()=>yV,_shaderspassCesium3DTileEdges:()=>xV,_shaderspassClassification:()=>CV,_shaderspassCompute:()=>TV,_shaderspassEnvironment:()=>EV,_shaderspassGaussianSplats:()=>SV,_shaderspassGlobe:()=>_V,_shaderspassOpaque:()=>IV,_shaderspassOverlay:()=>ZV,_shaderspassTerrainClassification:()=>RV,_shaderspassTranslucent:()=>VV,_shaderspassVoxels:()=>GV,_shaderspbrLighting:()=>eL,_shaderspbrNeutralTonemapping:()=>tL,_shadersphong:()=>nL,_shaderspi:()=>LV,_shaderspiOverFour:()=>WV,_shaderspiOverSix:()=>FV,_shaderspiOverThree:()=>BV,_shaderspiOverTwo:()=>wV,_shadersplaneDistance:()=>iL,_shaderspointAlongRay:()=>oL,_shadersradiansPerDegree:()=>NV,_shadersray:()=>KV,_shadersrayEllipsoidIntersectionInterval:()=>rL,_shadersraySegment:()=>jV,_shadersraySphereIntersectionInterval:()=>sL,_shadersreadDepth:()=>aL,_shadersreadNonPerspective:()=>cL,_shadersreverseLogDepth:()=>lL,_shadersround:()=>hL,_shaderssaturation:()=>fL,_shaderssceneMode2D:()=>PV,_shaderssceneMode3D:()=>XV,_shaderssceneModeColumbusView:()=>YV,_shaderssceneModeMorphing:()=>MV,_shadersshadowDepthCompare:()=>pL,_shadersshadowParameters:()=>qV,_shadersshadowVisibility:()=>AL,_shaderssignNotZero:()=>gL,_shaderssolarRadius:()=>vV,_shaderssphericalHarmonics:()=>bL,_shaderssrgbToLinear:()=>yL,_shaderstangentToEyeSpaceMatrix:()=>xL,_shaderstextureCube:()=>CL,_shadersthreePiOver2:()=>UV,_shaderstransformPlane:()=>TL,_shaderstranslateRelativeToEye:()=>EL,_shaderstranslucentPhong:()=>SL,_shaderstranspose:()=>_L,_shaderstwoPi:()=>DV,_shadersunpackClippingExtents:()=>IL,_shadersunpackDepth:()=>ZL,_shadersunpackFloat:()=>RL,_shadersunpackTexture:()=>VL,_shadersunpackUint:()=>GL,_shadersvalueTransform:()=>LL,_shadersvertexLogDepth:()=>WL,_shaderswebMercatorMaxLatitude:()=>kV,_shaderswindowToEyeCoordinates:()=>FL,_shaderswriteDepthClamp:()=>BL,_shaderswriteLogDepth:()=>wL,_shaderswriteNonPerspective:()=>NL,addAllToArray:()=>ri,addBuffer:()=>PW,addDefaults:()=>GW,addExtensionsRequired:()=>BW,addExtensionsUsed:()=>Cm,addPipelineExtras:()=>A0,addToArray:()=>la,appendForwardSlash:()=>VR,arrayRemoveDuplicates:()=>Uo,assert:()=>GH,barycentricCoordinates:()=>bx,binarySearch:()=>yo,buildModuleUrl:()=>en,buildVoxelDrawCommands:()=>KM,clone:()=>He,combine:()=>Ft,computeFlyToLocationForRectangle:()=>aE,createBillboardPointCallback:()=>XC,createCommand:()=>Fn,createDefaultImageryProviderViewModels:()=>cU,createDefaultTerrainProviderViewModels:()=>lU,createElevationBandMaterial:()=>jte,createGooglePhotorealistic3DTileset:()=>qte,createGuid:()=>qn,createMaterialPropertyDescriptor:()=>or,createOsmBuildingsAsync:()=>$te,createPropertyDescriptor:()=>be,createRawPropertyDescriptor:()=>Vl,createTangentSpaceDebugPrimitive:()=>ene,createTaskProcessorWorker:()=>Yne,createUniform:()=>UR,createUniformArray:()=>DR,createVectorTileBuffersFromModelComponents:()=>Ww,createWorldBathymetryAsync:()=>SX,createWorldImageryAsync:()=>bg,createWorldTerrainAsync:()=>jT,decodeGoogleEarthEnterpriseData:()=>_X,decodeVectorPolylinePositions:()=>hw,defer:()=>dd,defined:()=>l,demodernizeShader:()=>XL,deprecationWarning:()=>Va,destroyObject:()=>he,exportKml:()=>U6,findAccessorMinMax:()=>AC,findContentMetadata:()=>$C,findGroupMetadata:()=>eT,findTileMetadata:()=>Dw,forEachTextureInMaterial:()=>QS,formatError:()=>yp,freezeRenderState:()=>D3,getAbsoluteUri:()=>Hf,getAccessorByteStride:()=>Cd,getBaseUri:()=>GR,getBinaryAccessor:()=>bm,getClipAndStyleCode:()=>gv,getClippingFunction:()=>cE,getComponentReader:()=>eg,getElement:()=>vn,getExtensionFromUri:()=>TA,getFilenameFromUri:()=>Jg,getImageFromTypedArray:()=>VX,getImagePixels:()=>gh,getJsonFromTypedArray:()=>Zr,getMagic:()=>Ph,getMeshPrimitives:()=>CF,getMetadataClassProperty:()=>av,getMetadataProperty:()=>lv,getStringFromTypedArray:()=>bd,getTimestamp:()=>Xi,hasExtension:()=>_i,heightReferenceOnEntityPropertyChanged:()=>kA,isBitSet:()=>cl,isBlobUri:()=>cx,isCrossOriginUrl:()=>Db,isDataUri:()=>bh,isLeapYear:()=>Ah,knockout:()=>Ie,knockout_3_5_1:()=>OE,knockout_es5:()=>Hv,loadAndExecuteScript:()=>lx,loadCubeMap:()=>OL,loadImageFromTypedArray:()=>$A,loadKTX2:()=>md,mergeSort:()=>eA,moveTechniqueRenderStates:()=>FW,moveTechniquesToExtension:()=>wW,numberOfComponentsForType:()=>du,objectToQuery:()=>dx,oneTimeWarning:()=>_t,parseBatchTable:()=>ug,parseFeatureMetadataLegacy:()=>lF,parseGlb:()=>pC,parseResponseHeaders:()=>LR,parseStructuralMetadata:()=>cF,pickModel:()=>U_,pointInsideTriangle:()=>X$,preprocess3DTileContent:()=>Ng,processVoxelProperties:()=>BM,queryToObject:()=>$d,readAccessorPacked:()=>XW,removeExtension:()=>gC,removeExtensionsRequired:()=>LW,removeExtensionsUsed:()=>fC,removePipelineExtras:()=>WW,removeUnusedElements:()=>NW,renderBufferPointCollection:()=>Cw,renderBufferPolygonCollection:()=>_w,renderBufferPolylineCollection:()=>Gw,resizeImageToNextPowerOfTwo:()=>y0,sampleTerrain:()=>PX,sampleTerrainMostDetailed:()=>iE,scaleToGeodeticSurface:()=>ax,srgbToLinear:()=>rE,subdivideArray:()=>w1,subscribeAndEvaluate:()=>gc,updateAccessorComponentTypes:()=>YW,updateVersion:()=>MW,usesExtension:()=>wr,viewerCesium3DTilesInspectorMixin:()=>aie,viewerCesiumInspectorMixin:()=>cie,viewerDragDropMixin:()=>die,viewerPerformanceWatchdogMixin:()=>uie,viewerVoxelInspectorMixin:()=>hie,webGLConstantToGlslType:()=>tee,wrapFunction:()=>vX,writeTextToCanvas:()=>MC});var ujo=y(x(),1);var sIo=y(x(),1);var U2t=y(x(),1);var Y2t=y(x(),1),bie=[Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array],Kz=1,ER=8,rx=class e{static from(t){if(!(t instanceof ArrayBuffer))throw new Error("Data must be an instance of ArrayBuffer.");let[n,i]=new Uint8Array(t,0,2);if(n!==219)throw new Error("Data does not appear to be in a KDBush format.");let o=i>>4;if(o!==Kz)throw new Error(`Got v${o} data when expected v${Kz}.`);let r=bie[i&15];if(!r)throw new Error("Unrecognized array type.");let[s]=new Uint16Array(t,2,1),[a]=new Uint32Array(t,4,1);return new e(a,s,r,t)}constructor(t,n=64,i=Float64Array,o){if(isNaN(t)||t<0)throw new Error(`Unpexpected numItems value: ${t}.`);this.numItems=+t,this.nodeSize=Math.min(Math.max(+n,2),65535),this.ArrayType=i,this.IndexArrayType=t<65536?Uint16Array:Uint32Array;let r=bie.indexOf(this.ArrayType),s=t*2*this.ArrayType.BYTES_PER_ELEMENT,a=t*this.IndexArrayType.BYTES_PER_ELEMENT,c=(8-a%8)%8;if(r<0)throw new Error(`Unexpected typed array class: ${i}.`);o&&o instanceof ArrayBuffer?(this.data=o,this.ids=new this.IndexArrayType(this.data,ER,t),this.coords=new this.ArrayType(this.data,ER+a+c,t*2),this._pos=t*2,this._finished=!0):(this.data=new ArrayBuffer(ER+s+a+c),this.ids=new this.IndexArrayType(this.data,ER,t),this.coords=new this.ArrayType(this.data,ER+a+c,t*2),this._pos=0,this._finished=!1,new Uint8Array(this.data,0,2).set([219,(Kz<<4)+r]),new Uint16Array(this.data,2,1)[0]=n,new Uint32Array(this.data,4,1)[0]=t)}add(t,n){let i=this._pos>>1;return this.ids[i]=i,this.coords[this._pos++]=t,this.coords[this._pos++]=n,i}finish(){let t=this._pos>>1;if(t!==this.numItems)throw new Error(`Added ${t} items when expected ${this.numItems}.`);return qz(this.ids,this.coords,this.nodeSize,0,this.numItems-1,0),this._finished=!0,this}range(t,n,i,o){if(!this._finished)throw new Error("Data not yet indexed - call index.finish().");let{ids:r,coords:s,nodeSize:a}=this,c=[0,r.length-1,0],d=[];for(;c.length;){let u=c.pop()||0,h=c.pop()||0,p=c.pop()||0;if(h-p<=a){for(let C=p;C<=h;C++){let T=s[2*C],E=s[2*C+1];T>=t&&T<=i&&E>=n&&E<=o&&d.push(r[C])}continue}let A=p+h>>1,f=s[2*A],b=s[2*A+1];f>=t&&f<=i&&b>=n&&b<=o&&d.push(r[A]),(u===0?t<=f:n<=b)&&(c.push(p),c.push(A-1),c.push(1-u)),(u===0?i>=f:o>=b)&&(c.push(A+1),c.push(h),c.push(1-u))}return d}within(t,n,i){if(!this._finished)throw new Error("Data not yet indexed - call index.finish().");let{ids:o,coords:r,nodeSize:s}=this,a=[0,o.length-1,0],c=[],d=i*i;for(;a.length;){let u=a.pop()||0,h=a.pop()||0,p=a.pop()||0;if(h-p<=s){for(let C=p;C<=h;C++)yie(r[2*C],r[2*C+1],t,n)<=d&&c.push(o[C]);continue}let A=p+h>>1,f=r[2*A],b=r[2*A+1];yie(f,b,t,n)<=d&&c.push(o[A]),(u===0?t-i<=f:n-i<=b)&&(a.push(p),a.push(A-1),a.push(1-u)),(u===0?t+i>=f:n+i>=b)&&(a.push(A+1),a.push(h),a.push(1-u))}return c}};function qz(e,t,n,i,o,r){if(o-i<=n)return;let s=i+o>>1;xie(e,t,s,i,o,r),qz(e,t,n,i,s-1,1-r),qz(e,t,n,s+1,o,1-r)}function xie(e,t,n,i,o,r){for(;o>i;){if(o-i>600){let d=o-i+1,u=n-i+1,h=Math.log(d),p=.5*Math.exp(2*h/3),A=.5*Math.sqrt(h*p*(d-p)/d)*(u-d/2<0?-1:1),f=Math.max(i,Math.floor(n-u*p/d+A)),b=Math.min(o,Math.floor(n+(d-u)*p/d+A));xie(e,t,n,f,b,r)}let s=t[2*n+r],a=i,c=o;for(SR(e,t,i,n),t[2*o+r]>s&&SR(e,t,i,o);a<c;){for(SR(e,t,a,c),a++,c--;t[2*a+r]<s;)a++;for(;t[2*c+r]>s;)c--}t[2*i+r]===s?SR(e,t,i,c):(c++,SR(e,t,c,o)),c<=n&&(i=c+1),n<=c&&(o=c-1)}}function SR(e,t,n,i){jz(e,n,i),jz(t,2*n,2*i),jz(t,2*n+1,2*i+1)}function jz(e,t,n){let i=e[t];e[t]=e[n],e[n]=i}function yie(e,t,n,i){let o=e-n,r=t-i;return o*o+r*r}var jE={},_Ge={KDBush:rx,addCache:function(e,t){return jE[e]=t,t},removeCache:function(e){delete jE[e]},getCache:function(e){return jE[e]},getCacheOrAdd:function(e){return jE[e]||(jE[e]={}),jE[e]}},gA=_Ge;var wBt=y(x(),1);var rBt=y(x(),1);var j2t=y(x(),1);var k2t=y(x(),1);function IGe(e){return e!=null}var l=IGe;var z2t=y(x(),1);function sx(e){this.name="DeveloperError",this.message=e;let t;try{throw new Error}catch(n){t=n.stack}this.stack=t}l(Object.create)&&(sx.prototype=Object.create(Error.prototype),sx.prototype.constructor=sx);sx.prototype.toString=function(){let e=`${this.name}: ${this.message}`;return l(this.stack)&&(e+=`
${this.stack.toString()}`),e};sx.throwInstantiationError=function(){throw new sx("This function defines an interface and should not be called directly.")};var fe=sx;var aa={};aa.typeOf={};function ZGe(e){return`${e} is required, actual value was undefined`}function qE(e,t,n){return`Expected ${n} to be typeof ${t}, actual typeof was ${e}`}aa.defined=function(e,t){if(!l(t))throw new fe(ZGe(e))};aa.typeOf.func=function(e,t){if(typeof t!="function")throw new fe(qE(typeof t,"function",e))};aa.typeOf.string=function(e,t){if(typeof t!="string")throw new fe(qE(typeof t,"string",e))};aa.typeOf.number=function(e,t){if(typeof t!="number")throw new fe(qE(typeof t,"number",e))};aa.typeOf.number.lessThan=function(e,t,n){if(aa.typeOf.number(e,t),t>=n)throw new fe(`Expected ${e} to be less than ${n}, actual value was ${t}`)};aa.typeOf.number.lessThanOrEquals=function(e,t,n){if(aa.typeOf.number(e,t),t>n)throw new fe(`Expected ${e} to be less than or equal to ${n}, actual value was ${t}`)};aa.typeOf.number.greaterThan=function(e,t,n){if(aa.typeOf.number(e,t),t<=n)throw new fe(`Expected ${e} to be greater than ${n}, actual value was ${t}`)};aa.typeOf.number.greaterThanOrEquals=function(e,t,n){if(aa.typeOf.number(e,t),t<n)throw new fe(`Expected ${e} to be greater than or equal to ${n}, actual value was ${t}`)};aa.typeOf.object=function(e,t){if(typeof t!="object")throw new fe(qE(typeof t,"object",e))};aa.typeOf.bool=function(e,t){if(typeof t!="boolean")throw new fe(qE(typeof t,"boolean",e))};aa.typeOf.bigint=function(e,t){if(typeof t!="bigint")throw new fe(qE(typeof t,"bigint",e))};aa.typeOf.number.equals=function(e,t,n,i){if(aa.typeOf.number(e,n),aa.typeOf.number(t,i),n!==i)throw new fe(`${e} must be equal to ${t}, the actual values are ${n} and ${i}`)};var vo=aa;var tBt=y(x(),1),$z=y(DU(),1);var gt={};gt.EPSILON1=.1;gt.EPSILON2=.01;gt.EPSILON3=.001;gt.EPSILON4=1e-4;gt.EPSILON5=1e-5;gt.EPSILON6=1e-6;gt.EPSILON7=1e-7;gt.EPSILON8=1e-8;gt.EPSILON9=1e-9;gt.EPSILON10=1e-10;gt.EPSILON11=1e-11;gt.EPSILON12=1e-12;gt.EPSILON13=1e-13;gt.EPSILON14=1e-14;gt.EPSILON15=1e-15;gt.EPSILON16=1e-16;gt.EPSILON17=1e-17;gt.EPSILON18=1e-18;gt.EPSILON19=1e-19;gt.EPSILON20=1e-20;gt.EPSILON21=1e-21;gt.GRAVITATIONALPARAMETER=3986004418e5;gt.SOLAR_RADIUS=6955e5;gt.LUNAR_RADIUS=1737400;gt.SIXTY_FOUR_KILOBYTES=64*1024;gt.FOUR_GIGABYTES=4*1024*1024*1024;gt.sign=Math.sign??function(t){return t=+t,t===0||t!==t?t:t>0?1:-1};gt.signNotZero=function(e){return e<0?-1:1};gt.toSNorm=function(e,t){return t=t??255,Math.round((gt.clamp(e,-1,1)*.5+.5)*t)};gt.fromSNorm=function(e,t){return t=t??255,gt.clamp(e,0,t)/t*2-1};gt.normalize=function(e,t,n){return n=Math.max(n-t,0),n===0?0:gt.clamp((e-t)/n,0,1)};gt.sinh=Math.sinh??function(t){return(Math.exp(t)-Math.exp(-t))/2};gt.cosh=Math.cosh??function(t){return(Math.exp(t)+Math.exp(-t))/2};gt.lerp=function(e,t,n){return(1-n)*e+n*t};gt.PI=Math.PI;gt.ONE_OVER_PI=1/Math.PI;gt.PI_OVER_TWO=Math.PI/2;gt.PI_OVER_THREE=Math.PI/3;gt.PI_OVER_FOUR=Math.PI/4;gt.PI_OVER_SIX=Math.PI/6;gt.THREE_PI_OVER_TWO=3*Math.PI/2;gt.TWO_PI=2*Math.PI;gt.ONE_OVER_TWO_PI=1/(2*Math.PI);gt.RADIANS_PER_DEGREE=Math.PI/180;gt.DEGREES_PER_RADIAN=180/Math.PI;gt.RADIANS_PER_ARCSECOND=gt.RADIANS_PER_DEGREE/3600;gt.toRadians=function(e){return e*gt.RADIANS_PER_DEGREE};gt.toDegrees=function(e){return e*gt.DEGREES_PER_RADIAN};gt.convertLongitudeRange=function(e){let t=gt.TWO_PI,n=e-Math.floor(e/t)*t;return n<-Math.PI?n+t:n>=Math.PI?n-t:n};gt.clampToLatitudeRange=function(e){return gt.clamp(e,-1*gt.PI_OVER_TWO,gt.PI_OVER_TWO)};gt.negativePiToPi=function(e){return e>=-gt.PI&&e<=gt.PI?e:gt.zeroToTwoPi(e+gt.PI)-gt.PI};gt.zeroToTwoPi=function(e){if(e>=0&&e<=gt.TWO_PI)return e;let t=gt.mod(e,gt.TWO_PI);return Math.abs(t)<gt.EPSILON14&&Math.abs(e)>gt.EPSILON14?gt.TWO_PI:t};gt.mod=function(e,t){return gt.sign(e)===gt.sign(t)&&Math.abs(e)<Math.abs(t)?e:(e%t+t)%t};gt.equalsEpsilon=function(e,t,n,i){n=n??0,i=i??n;let o=Math.abs(e-t);return o<=i||o<=n*Math.max(Math.abs(e),Math.abs(t))};gt.lessThan=function(e,t,n){return e-t<-n};gt.lessThanOrEquals=function(e,t,n){return e-t<n};gt.greaterThan=function(e,t,n){return e-t>n};gt.greaterThanOrEquals=function(e,t,n){return e-t>-n};var kU=[1];gt.factorial=function(e){let t=kU.length;if(e>=t){let n=kU[t-1];for(let i=t;i<=e;i++){let o=n*i;kU.push(o),n=o}}return kU[e]};gt.incrementWrap=function(e,t,n){return n=n??0,++e,e>t&&(e=n),e};gt.isPowerOfTwo=function(e){return e!==0&&(e&e-1)===0};gt.nextPowerOfTwo=function(e){return--e,e|=e>>1,e|=e>>2,e|=e>>4,e|=e>>8,e|=e>>16,++e,e};gt.previousPowerOfTwo=function(e){return e|=e>>1,e|=e>>2,e|=e>>4,e|=e>>8,e|=e>>16,e|=e>>32,e=(e>>>0)-(e>>>1),e};gt.clamp=function(e,t,n){return e<t?t:e>n?n:e};var Tie=new $z.default;gt.setRandomNumberSeed=function(e){Tie=new $z.default(e)};gt.nextRandomNumber=function(){return Tie.random()};gt.randomBetween=function(e,t){return gt.nextRandomNumber()*(t-e)+e};gt.acosClamped=function(e){return Math.acos(gt.clamp(e,-1,1))};gt.asinClamped=function(e){return Math.asin(gt.clamp(e,-1,1))};gt.chordLength=function(e,t){return 2*t*Math.sin(e*.5)};gt.logBase=function(e,t){return Math.log(e)/Math.log(t)};gt.cbrt=Math.cbrt??function(t){let n=Math.pow(Math.abs(t),.3333333333333333);return t<0?-n:n};gt.log2=Math.log2??function(t){return Math.log(t)*Math.LOG2E};gt.fog=function(e,t){let n=e*t;return 1-Math.exp(-(n*n))};gt.fastApproximateAtan=function(e){return e*(-.1784*Math.abs(e)-.0663*e*e+1.0301)};gt.fastApproximateAtan2=function(e,t){let n,i=Math.abs(e);n=Math.abs(t);let o=Math.max(i,n);n=Math.min(i,n);let r=n/o;return i=gt.fastApproximateAtan(r),i=Math.abs(t)>Math.abs(e)?gt.PI_OVER_TWO-i:i,i=e<0?gt.PI-i:i,i=t<0?-i:i,i};var L=gt;var lr=class e{constructor(t,n,i){this.x=t??0,this.y=n??0,this.z=i??0}static fromSpherical(t,n){l(n)||(n=new e);let i=t.clock,o=t.cone,r=t.magnitude??1,s=r*Math.sin(o);return n.x=s*Math.cos(i),n.y=s*Math.sin(i),n.z=r*Math.cos(o),n}static fromElements(t,n,i,o){return l(o)?(o.x=t,o.y=n,o.z=i,o):new e(t,n,i)}static clone(t,n){if(l(t))return l(n)?(n.x=t.x,n.y=t.y,n.z=t.z,n):new e(t.x,t.y,t.z)}static pack(t,n,i){return i=i??0,n[i++]=t.x,n[i++]=t.y,n[i]=t.z,n}static unpack(t,n,i){return n=n??0,l(i)||(i=new e),i.x=t[n++],i.y=t[n++],i.z=t[n],i}static packArray(t,n){let i=t.length,o=i*3;l(n)?!Array.isArray(n)&&n.length!==o||n.length!==o&&(n.length=o):n=new Array(o);for(let r=0;r<i;++r)e.pack(t[r],n,r*3);return n}static unpackArray(t,n){let i=t.length;l(n)?n.length=i/3:n=new Array(i/3);for(let o=0;o<i;o+=3){let r=o/3;n[r]=e.unpack(t,o,n[r])}return n}static maximumComponent(t){return Math.max(t.x,t.y,t.z)}static minimumComponent(t){return Math.min(t.x,t.y,t.z)}static minimumByComponent(t,n,i){return i.x=Math.min(t.x,n.x),i.y=Math.min(t.y,n.y),i.z=Math.min(t.z,n.z),i}static maximumByComponent(t,n,i){return i.x=Math.max(t.x,n.x),i.y=Math.max(t.y,n.y),i.z=Math.max(t.z,n.z),i}static clamp(t,n,i,o){let r=L.clamp(t.x,n.x,i.x),s=L.clamp(t.y,n.y,i.y),a=L.clamp(t.z,n.z,i.z);return o.x=r,o.y=s,o.z=a,o}static magnitudeSquared(t){return t.x*t.x+t.y*t.y+t.z*t.z}static magnitude(t){return Math.sqrt(e.magnitudeSquared(t))}static distance(t,n){return e.subtract(t,n,QU),e.magnitude(QU)}static distanceSquared(t,n){return e.subtract(t,n,QU),e.magnitudeSquared(QU)}static normalize(t,n){let i=e.magnitude(t);return n.x=t.x/i,n.y=t.y/i,n.z=t.z/i,n}static dot(t,n){return t.x*n.x+t.y*n.y+t.z*n.z}static multiplyComponents(t,n,i){return i.x=t.x*n.x,i.y=t.y*n.y,i.z=t.z*n.z,i}static divideComponents(t,n,i){return i.x=t.x/n.x,i.y=t.y/n.y,i.z=t.z/n.z,i}static add(t,n,i){return i.x=t.x+n.x,i.y=t.y+n.y,i.z=t.z+n.z,i}static subtract(t,n,i){return i.x=t.x-n.x,i.y=t.y-n.y,i.z=t.z-n.z,i}static multiplyByScalar(t,n,i){return i.x=t.x*n,i.y=t.y*n,i.z=t.z*n,i}static divideByScalar(t,n,i){return i.x=t.x/n,i.y=t.y/n,i.z=t.z/n,i}static negate(t,n){return n.x=-t.x,n.y=-t.y,n.z=-t.z,n}static abs(t,n){return n.x=Math.abs(t.x),n.y=Math.abs(t.y),n.z=Math.abs(t.z),n}static lerp(t,n,i,o){return e.multiplyByScalar(n,i,Eie),o=e.multiplyByScalar(t,1-i,o),e.add(Eie,o,o)}static angleBetween(t,n){e.normalize(t,OU),e.normalize(n,e3);let i=e.dot(OU,e3),o=e.magnitude(e.cross(OU,e3,OU));return Math.atan2(o,i)}static mostOrthogonalAxis(t,n){let i=e.normalize(t,RGe);return e.abs(i,i),i.x<=i.y?i.x<=i.z?n=e.clone(e.UNIT_X,n):n=e.clone(e.UNIT_Z,n):i.y<=i.z?n=e.clone(e.UNIT_Y,n):n=e.clone(e.UNIT_Z,n),n}static projectVector(t,n,i){let o=e.dot(t,n)/e.dot(n,n);return e.multiplyByScalar(n,o,i)}static equals(t,n){return t===n||l(t)&&l(n)&&t.x===n.x&&t.y===n.y&&t.z===n.z}static equalsArray(t,n,i){return t.x===n[i]&&t.y===n[i+1]&&t.z===n[i+2]}static equalsEpsilon(t,n,i,o){return t===n||l(t)&&l(n)&&L.equalsEpsilon(t.x,n.x,i,o)&&L.equalsEpsilon(t.y,n.y,i,o)&&L.equalsEpsilon(t.z,n.z,i,o)}static cross(t,n,i){let o=t.x,r=t.y,s=t.z,a=n.x,c=n.y,d=n.z,u=r*d-s*c,h=s*a-o*d,p=o*c-r*a;return i.x=u,i.y=h,i.z=p,i}static midpoint(t,n,i){return i.x=(t.x+n.x)*.5,i.y=(t.y+n.y)*.5,i.z=(t.z+n.z)*.5,i}static fromDegrees(t,n,i,o,r){return t=L.toRadians(t),n=L.toRadians(n),e.fromRadians(t,n,i,o,r)}static fromRadians(t,n,i,o,r){i=i??0;let s=l(o)?o.radiiSquared:e._ellipsoidRadiiSquared,a=Math.cos(n);im.x=a*Math.cos(t),im.y=a*Math.sin(t),im.z=Math.sin(n),im=e.normalize(im,im),e.multiplyComponents(s,im,$E);let c=Math.sqrt(e.dot(im,$E));return $E=e.divideByScalar($E,c,$E),im=e.multiplyByScalar(im,i,im),l(r)||(r=new e),e.add($E,im,r)}static fromDegreesArray(t,n,i){let o=t.length;l(i)?i.length=o/2:i=new Array(o/2);for(let r=0;r<o;r+=2){let s=t[r],a=t[r+1],c=r/2;i[c]=e.fromDegrees(s,a,0,n,i[c])}return i}static fromRadiansArray(t,n,i){let o=t.length;l(i)?i.length=o/2:i=new Array(o/2);for(let r=0;r<o;r+=2){let s=t[r],a=t[r+1],c=r/2;i[c]=e.fromRadians(s,a,0,n,i[c])}return i}static fromDegreesArrayHeights(t,n,i){let o=t.length;l(i)?i.length=o/3:i=new Array(o/3);for(let r=0;r<o;r+=3){let s=t[r],a=t[r+1],c=t[r+2],d=r/3;i[d]=e.fromDegrees(s,a,c,n,i[d])}return i}static fromRadiansArrayHeights(t,n,i){let o=t.length;l(i)?i.length=o/3:i=new Array(o/3);for(let r=0;r<o;r+=3){let s=t[r],a=t[r+1],c=t[r+2],d=r/3;i[d]=e.fromRadians(s,a,c,n,i[d])}return i}clone(t){return e.clone(this,t)}equals(t){return e.equals(this,t)}equalsEpsilon(t,n,i){return e.equalsEpsilon(this,t,n,i)}toString(){return`(${this.x}, ${this.y}, ${this.z})`}};lr.fromCartesian4=lr.clone;lr.packedLength=3;lr.fromArray=lr.unpack;var QU=new lr,Eie=new lr,OU=new lr,e3=new lr,RGe=new lr,im=new lr,$E=new lr;lr._ellipsoidRadiiSquared=new lr(6378137*6378137,6378137*6378137,6356752314245179e-9*6356752314245179e-9);lr.ZERO=Object.freeze(new lr(0,0,0));lr.ONE=Object.freeze(new lr(1,1,1));lr.UNIT_X=Object.freeze(new lr(1,0,0));lr.UNIT_Y=Object.freeze(new lr(0,1,0));lr.UNIT_Z=Object.freeze(new lr(0,0,1));var m=lr;var RBt=y(x(),1);var lBt=y(x(),1);var Us=class e{constructor(t,n,i,o){this.x=t??0,this.y=n??0,this.z=i??0,this.w=o??0}static fromElements(t,n,i,o,r){return l(r)?(r.x=t,r.y=n,r.z=i,r.w=o,r):new e(t,n,i,o)}static fromColor(t,n){return l(n)?(n.x=t.red,n.y=t.green,n.z=t.blue,n.w=t.alpha,n):new e(t.red,t.green,t.blue,t.alpha)}static clone(t,n){if(l(t))return l(n)?(n.x=t.x,n.y=t.y,n.z=t.z,n.w=t.w,n):new e(t.x,t.y,t.z,t.w)}static pack(t,n,i){return i=i??0,n[i++]=t.x,n[i++]=t.y,n[i++]=t.z,n[i]=t.w,n}static unpack(t,n,i){return n=n??0,l(i)||(i=new e),i.x=t[n++],i.y=t[n++],i.z=t[n++],i.w=t[n],i}static packArray(t,n){let i=t.length,o=i*4;l(n)?!Array.isArray(n)&&n.length!==o||n.length!==o&&(n.length=o):n=new Array(o);for(let r=0;r<i;++r)e.pack(t[r],n,r*4);return n}static unpackArray(t,n){let i=t.length;l(n)?n.length=i/4:n=new Array(i/4);for(let o=0;o<i;o+=4){let r=o/4;n[r]=e.unpack(t,o,n[r])}return n}static maximumComponent(t){return Math.max(t.x,t.y,t.z,t.w)}static minimumComponent(t){return Math.min(t.x,t.y,t.z,t.w)}static minimumByComponent(t,n,i){return i.x=Math.min(t.x,n.x),i.y=Math.min(t.y,n.y),i.z=Math.min(t.z,n.z),i.w=Math.min(t.w,n.w),i}static maximumByComponent(t,n,i){return i.x=Math.max(t.x,n.x),i.y=Math.max(t.y,n.y),i.z=Math.max(t.z,n.z),i.w=Math.max(t.w,n.w),i}static clamp(t,n,i,o){let r=L.clamp(t.x,n.x,i.x),s=L.clamp(t.y,n.y,i.y),a=L.clamp(t.z,n.z,i.z),c=L.clamp(t.w,n.w,i.w);return o.x=r,o.y=s,o.z=a,o.w=c,o}static magnitudeSquared(t){return t.x*t.x+t.y*t.y+t.z*t.z+t.w*t.w}static magnitude(t){return Math.sqrt(e.magnitudeSquared(t))}static distance(t,n){return e.subtract(t,n,zU),e.magnitude(zU)}static distanceSquared(t,n){return e.subtract(t,n,zU),e.magnitudeSquared(zU)}static normalize(t,n){let i=e.magnitude(t);return n.x=t.x/i,n.y=t.y/i,n.z=t.z/i,n.w=t.w/i,n}static dot(t,n){return t.x*n.x+t.y*n.y+t.z*n.z+t.w*n.w}static multiplyComponents(t,n,i){return i.x=t.x*n.x,i.y=t.y*n.y,i.z=t.z*n.z,i.w=t.w*n.w,i}static divideComponents(t,n,i){return i.x=t.x/n.x,i.y=t.y/n.y,i.z=t.z/n.z,i.w=t.w/n.w,i}static add(t,n,i){return i.x=t.x+n.x,i.y=t.y+n.y,i.z=t.z+n.z,i.w=t.w+n.w,i}static subtract(t,n,i){return i.x=t.x-n.x,i.y=t.y-n.y,i.z=t.z-n.z,i.w=t.w-n.w,i}static multiplyByScalar(t,n,i){return i.x=t.x*n,i.y=t.y*n,i.z=t.z*n,i.w=t.w*n,i}static divideByScalar(t,n,i){return i.x=t.x/n,i.y=t.y/n,i.z=t.z/n,i.w=t.w/n,i}static negate(t,n){return n.x=-t.x,n.y=-t.y,n.z=-t.z,n.w=-t.w,n}static abs(t,n){return n.x=Math.abs(t.x),n.y=Math.abs(t.y),n.z=Math.abs(t.z),n.w=Math.abs(t.w),n}static lerp(t,n,i,o){return e.multiplyByScalar(n,i,Sie),o=e.multiplyByScalar(t,1-i,o),e.add(Sie,o,o)}static mostOrthogonalAxis(t,n){let i=e.normalize(t,VGe);return e.abs(i,i),i.x<=i.y?i.x<=i.z?i.x<=i.w?n=e.clone(e.UNIT_X,n):n=e.clone(e.UNIT_W,n):i.z<=i.w?n=e.clone(e.UNIT_Z,n):n=e.clone(e.UNIT_W,n):i.y<=i.z?i.y<=i.w?n=e.clone(e.UNIT_Y,n):n=e.clone(e.UNIT_W,n):i.z<=i.w?n=e.clone(e.UNIT_Z,n):n=e.clone(e.UNIT_W,n),n}static equals(t,n){return t===n||l(t)&&l(n)&&t.x===n.x&&t.y===n.y&&t.z===n.z&&t.w===n.w}static equalsArray(t,n,i){return t.x===n[i]&&t.y===n[i+1]&&t.z===n[i+2]&&t.w===n[i+3]}static equalsEpsilon(t,n,i,o){return t===n||l(t)&&l(n)&&L.equalsEpsilon(t.x,n.x,i,o)&&L.equalsEpsilon(t.y,n.y,i,o)&&L.equalsEpsilon(t.z,n.z,i,o)&&L.equalsEpsilon(t.w,n.w,i,o)}clone(t){return e.clone(this,t)}equals(t){return e.equals(this,t)}equalsEpsilon(t,n,i){return e.equalsEpsilon(this,t,n,i)}toString(){return`(${this.x}, ${this.y}, ${this.z}, ${this.w})`}static packFloat(t,n){return l(n)||(n=new e),t3[0]=t,_ie?(n.x=Nc[0],n.y=Nc[1],n.z=Nc[2],n.w=Nc[3]):(n.x=Nc[3],n.y=Nc[2],n.z=Nc[1],n.w=Nc[0]),n}static unpackFloat(t){return _ie?(Nc[0]=t.x,Nc[1]=t.y,Nc[2]=t.z,Nc[3]=t.w):(Nc[0]=t.w,Nc[1]=t.z,Nc[2]=t.y,Nc[3]=t.x),t3[0]}};Us.packedLength=4;Us.fromArray=Us.unpack;var zU=new Us,Sie=new Us,VGe=new Us;Us.ZERO=Object.freeze(new Us(0,0,0,0));Us.ONE=Object.freeze(new Us(1,1,1,1));Us.UNIT_X=Object.freeze(new Us(1,0,0,0));Us.UNIT_Y=Object.freeze(new Us(0,1,0,0));Us.UNIT_Z=Object.freeze(new Us(0,0,1,0));Us.UNIT_W=Object.freeze(new Us(0,0,0,1));var t3=new Float32Array(1),Nc=new Uint8Array(t3.buffer),GGe=new Uint32Array([287454020]),LGe=new Uint8Array(GGe.buffer),_ie=LGe[0]===68,re=Us;var uBt=y(x(),1),n3={};n3.EMPTY_OBJECT=Object.freeze({});n3.EMPTY_ARRAY=Object.freeze([]);var Q=n3;var ABt=y(x(),1);function mt(e,t,n,i,o,r,s,a,c){this[0]=e??0,this[1]=i??0,this[2]=s??0,this[3]=t??0,this[4]=o??0,this[5]=a??0,this[6]=n??0,this[7]=r??0,this[8]=c??0}mt.packedLength=9;mt.pack=function(e,t,n){return n=n??0,t[n++]=e[0],t[n++]=e[1],t[n++]=e[2],t[n++]=e[3],t[n++]=e[4],t[n++]=e[5],t[n++]=e[6],t[n++]=e[7],t[n++]=e[8],t};mt.unpack=function(e,t,n){return t=t??0,l(n)||(n=new mt),n[0]=e[t++],n[1]=e[t++],n[2]=e[t++],n[3]=e[t++],n[4]=e[t++],n[5]=e[t++],n[6]=e[t++],n[7]=e[t++],n[8]=e[t++],n};mt.packArray=function(e,t){let n=e.length,i=n*9;l(t)?!Array.isArray(t)&&t.length!==i||t.length!==i&&(t.length=i):t=new Array(i);for(let o=0;o<n;++o)mt.pack(e[o],t,o*9);return t};mt.unpackArray=function(e,t){let n=e.length;l(t)?t.length=n/9:t=new Array(n/9);for(let i=0;i<n;i+=9){let o=i/9;t[o]=mt.unpack(e,i,t[o])}return t};mt.clone=function(e,t){if(l(e))return l(t)?(t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t[4]=e[4],t[5]=e[5],t[6]=e[6],t[7]=e[7],t[8]=e[8],t):new mt(e[0],e[3],e[6],e[1],e[4],e[7],e[2],e[5],e[8])};mt.fromArray=mt.unpack;mt.fromColumnMajorArray=function(e,t){return mt.clone(e,t)};mt.fromRowMajorArray=function(e,t){return l(t)?(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],t):new mt(e[0],e[1],e[2],e[3],e[4],e[5],e[6],e[7],e[8])};mt.fromQuaternion=function(e,t){let n=e.x*e.x,i=e.x*e.y,o=e.x*e.z,r=e.x*e.w,s=e.y*e.y,a=e.y*e.z,c=e.y*e.w,d=e.z*e.z,u=e.z*e.w,h=e.w*e.w,p=n-s-d+h,A=2*(i-u),f=2*(o+c),b=2*(i+u),C=-n+s-d+h,T=2*(a-r),E=2*(o-c),S=2*(a+r),I=-n-s+d+h;return l(t)?(t[0]=p,t[1]=b,t[2]=E,t[3]=A,t[4]=C,t[5]=S,t[6]=f,t[7]=T,t[8]=I,t):new mt(p,A,f,b,C,T,E,S,I)};mt.fromHeadingPitchRoll=function(e,t){let n=Math.cos(-e.pitch),i=Math.cos(-e.heading),o=Math.cos(e.roll),r=Math.sin(-e.pitch),s=Math.sin(-e.heading),a=Math.sin(e.roll),c=n*i,d=-o*s+a*r*i,u=a*s+o*r*i,h=n*s,p=o*i+a*r*s,A=-a*i+o*r*s,f=-r,b=a*n,C=o*n;return l(t)?(t[0]=c,t[1]=h,t[2]=f,t[3]=d,t[4]=p,t[5]=b,t[6]=u,t[7]=A,t[8]=C,t):new mt(c,d,u,h,p,A,f,b,C)};mt.fromScale=function(e,t){return l(t)?(t[0]=e.x,t[1]=0,t[2]=0,t[3]=0,t[4]=e.y,t[5]=0,t[6]=0,t[7]=0,t[8]=e.z,t):new mt(e.x,0,0,0,e.y,0,0,0,e.z)};mt.fromUniformScale=function(e,t){return l(t)?(t[0]=e,t[1]=0,t[2]=0,t[3]=0,t[4]=e,t[5]=0,t[6]=0,t[7]=0,t[8]=e,t):new mt(e,0,0,0,e,0,0,0,e)};mt.fromCrossProduct=function(e,t){return l(t)?(t[0]=0,t[1]=e.z,t[2]=-e.y,t[3]=-e.z,t[4]=0,t[5]=e.x,t[6]=e.y,t[7]=-e.x,t[8]=0,t):new mt(0,-e.z,e.y,e.z,0,-e.x,-e.y,e.x,0)};mt.fromRotationX=function(e,t){let n=Math.cos(e),i=Math.sin(e);return l(t)?(t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=n,t[5]=i,t[6]=0,t[7]=-i,t[8]=n,t):new mt(1,0,0,0,n,-i,0,i,n)};mt.fromRotationY=function(e,t){let n=Math.cos(e),i=Math.sin(e);return l(t)?(t[0]=n,t[1]=0,t[2]=-i,t[3]=0,t[4]=1,t[5]=0,t[6]=i,t[7]=0,t[8]=n,t):new mt(n,0,i,0,1,0,-i,0,n)};mt.fromRotationZ=function(e,t){let n=Math.cos(e),i=Math.sin(e);return l(t)?(t[0]=n,t[1]=i,t[2]=0,t[3]=-i,t[4]=n,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t):new mt(n,-i,0,i,n,0,0,0,1)};mt.toArray=function(e,t){return l(t)?(t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t[4]=e[4],t[5]=e[5],t[6]=e[6],t[7]=e[7],t[8]=e[8],t):[e[0],e[1],e[2],e[3],e[4],e[5],e[6],e[7],e[8]]};mt.getElementIndex=function(e,t){return e*3+t};mt.getColumn=function(e,t,n){let i=t*3,o=e[i],r=e[i+1],s=e[i+2];return n.x=o,n.y=r,n.z=s,n};mt.setColumn=function(e,t,n,i){i=mt.clone(e,i);let o=t*3;return i[o]=n.x,i[o+1]=n.y,i[o+2]=n.z,i};mt.getRow=function(e,t,n){let i=e[t],o=e[t+3],r=e[t+6];return n.x=i,n.y=o,n.z=r,n};mt.setRow=function(e,t,n,i){return i=mt.clone(e,i),i[t]=n.x,i[t+3]=n.y,i[t+6]=n.z,i};var WGe=new m;mt.setScale=function(e,t,n){let i=mt.getScale(e,WGe),o=t.x/i.x,r=t.y/i.y,s=t.z/i.z;return n[0]=e[0]*o,n[1]=e[1]*o,n[2]=e[2]*o,n[3]=e[3]*r,n[4]=e[4]*r,n[5]=e[5]*r,n[6]=e[6]*s,n[7]=e[7]*s,n[8]=e[8]*s,n};var FGe=new m;mt.setUniformScale=function(e,t,n){let i=mt.getScale(e,FGe),o=t/i.x,r=t/i.y,s=t/i.z;return n[0]=e[0]*o,n[1]=e[1]*o,n[2]=e[2]*o,n[3]=e[3]*r,n[4]=e[4]*r,n[5]=e[5]*r,n[6]=e[6]*s,n[7]=e[7]*s,n[8]=e[8]*s,n};var i3=new m;mt.getScale=function(e,t){return t.x=m.magnitude(m.fromElements(e[0],e[1],e[2],i3)),t.y=m.magnitude(m.fromElements(e[3],e[4],e[5],i3)),t.z=m.magnitude(m.fromElements(e[6],e[7],e[8],i3)),t};var Iie=new m;mt.getMaximumScale=function(e){return mt.getScale(e,Iie),m.maximumComponent(Iie)};var BGe=new m;mt.setRotation=function(e,t,n){let i=mt.getScale(e,BGe);return n[0]=t[0]*i.x,n[1]=t[1]*i.x,n[2]=t[2]*i.x,n[3]=t[3]*i.y,n[4]=t[4]*i.y,n[5]=t[5]*i.y,n[6]=t[6]*i.z,n[7]=t[7]*i.z,n[8]=t[8]*i.z,n};var wGe=new m;mt.getRotation=function(e,t){let n=mt.getScale(e,wGe);return t[0]=e[0]/n.x,t[1]=e[1]/n.x,t[2]=e[2]/n.x,t[3]=e[3]/n.y,t[4]=e[4]/n.y,t[5]=e[5]/n.y,t[6]=e[6]/n.z,t[7]=e[7]/n.z,t[8]=e[8]/n.z,t};mt.multiply=function(e,t,n){let i=e[0]*t[0]+e[3]*t[1]+e[6]*t[2],o=e[1]*t[0]+e[4]*t[1]+e[7]*t[2],r=e[2]*t[0]+e[5]*t[1]+e[8]*t[2],s=e[0]*t[3]+e[3]*t[4]+e[6]*t[5],a=e[1]*t[3]+e[4]*t[4]+e[7]*t[5],c=e[2]*t[3]+e[5]*t[4]+e[8]*t[5],d=e[0]*t[6]+e[3]*t[7]+e[6]*t[8],u=e[1]*t[6]+e[4]*t[7]+e[7]*t[8],h=e[2]*t[6]+e[5]*t[7]+e[8]*t[8];return n[0]=i,n[1]=o,n[2]=r,n[3]=s,n[4]=a,n[5]=c,n[6]=d,n[7]=u,n[8]=h,n};mt.add=function(e,t,n){return n[0]=e[0]+t[0],n[1]=e[1]+t[1],n[2]=e[2]+t[2],n[3]=e[3]+t[3],n[4]=e[4]+t[4],n[5]=e[5]+t[5],n[6]=e[6]+t[6],n[7]=e[7]+t[7],n[8]=e[8]+t[8],n};mt.subtract=function(e,t,n){return n[0]=e[0]-t[0],n[1]=e[1]-t[1],n[2]=e[2]-t[2],n[3]=e[3]-t[3],n[4]=e[4]-t[4],n[5]=e[5]-t[5],n[6]=e[6]-t[6],n[7]=e[7]-t[7],n[8]=e[8]-t[8],n};mt.multiplyByVector=function(e,t,n){let i=t.x,o=t.y,r=t.z,s=e[0]*i+e[3]*o+e[6]*r,a=e[1]*i+e[4]*o+e[7]*r,c=e[2]*i+e[5]*o+e[8]*r;return n.x=s,n.y=a,n.z=c,n};mt.multiplyByScalar=function(e,t,n){return n[0]=e[0]*t,n[1]=e[1]*t,n[2]=e[2]*t,n[3]=e[3]*t,n[4]=e[4]*t,n[5]=e[5]*t,n[6]=e[6]*t,n[7]=e[7]*t,n[8]=e[8]*t,n};mt.multiplyByScale=function(e,t,n){return n[0]=e[0]*t.x,n[1]=e[1]*t.x,n[2]=e[2]*t.x,n[3]=e[3]*t.y,n[4]=e[4]*t.y,n[5]=e[5]*t.y,n[6]=e[6]*t.z,n[7]=e[7]*t.z,n[8]=e[8]*t.z,n};mt.multiplyByUniformScale=function(e,t,n){return n[0]=e[0]*t,n[1]=e[1]*t,n[2]=e[2]*t,n[3]=e[3]*t,n[4]=e[4]*t,n[5]=e[5]*t,n[6]=e[6]*t,n[7]=e[7]*t,n[8]=e[8]*t,n};mt.negate=function(e,t){return t[0]=-e[0],t[1]=-e[1],t[2]=-e[2],t[3]=-e[3],t[4]=-e[4],t[5]=-e[5],t[6]=-e[6],t[7]=-e[7],t[8]=-e[8],t};mt.transpose=function(e,t){let n=e[0],i=e[3],o=e[6],r=e[1],s=e[4],a=e[7],c=e[2],d=e[5],u=e[8];return t[0]=n,t[1]=i,t[2]=o,t[3]=r,t[4]=s,t[5]=a,t[6]=c,t[7]=d,t[8]=u,t};function NGe(e){let t=0;for(let n=0;n<9;++n){let i=e[n];t+=i*i}return Math.sqrt(t)}var o3=[1,0,0],r3=[2,2,1];function PGe(e){let t=0;for(let n=0;n<3;++n){let i=e[mt.getElementIndex(r3[n],o3[n])];t+=2*i*i}return Math.sqrt(t)}function XGe(e,t){let n=L.EPSILON15,i=0,o=1;for(let d=0;d<3;++d){let u=Math.abs(e[mt.getElementIndex(r3[d],o3[d])]);u>i&&(o=d,i=u)}let r=1,s=0,a=o3[o],c=r3[o];if(Math.abs(e[mt.getElementIndex(c,a)])>n){let d=e[mt.getElementIndex(c,c)],u=e[mt.getElementIndex(a,a)],h=e[mt.getElementIndex(c,a)],p=(d-u)/2/h,A;p<0?A=-1/(-p+Math.sqrt(1+p*p)):A=1/(p+Math.sqrt(1+p*p)),r=1/Math.sqrt(1+A*A),s=A*r}return t=mt.clone(mt.IDENTITY,t),t[mt.getElementIndex(a,a)]=t[mt.getElementIndex(c,c)]=r,t[mt.getElementIndex(c,a)]=s,t[mt.getElementIndex(a,c)]=-s,t}var HU=new mt,Zie=new mt;mt.computeEigenDecomposition=function(e,t){let n=L.EPSILON20,i=10,o=0,r=0;l(t)||(t={});let s=t.unitary=mt.clone(mt.IDENTITY,t.unitary),a=t.diagonal=mt.clone(e,t.diagonal),c=n*NGe(a);for(;r<i&&PGe(a)>c;)XGe(a,HU),mt.transpose(HU,Zie),mt.multiply(a,HU,a),mt.multiply(Zie,a,a),mt.multiply(s,HU,s),++o>2&&(++r,o=0);return t};mt.abs=function(e,t){return t[0]=Math.abs(e[0]),t[1]=Math.abs(e[1]),t[2]=Math.abs(e[2]),t[3]=Math.abs(e[3]),t[4]=Math.abs(e[4]),t[5]=Math.abs(e[5]),t[6]=Math.abs(e[6]),t[7]=Math.abs(e[7]),t[8]=Math.abs(e[8]),t};mt.determinant=function(e){let t=e[0],n=e[3],i=e[6],o=e[1],r=e[4],s=e[7],a=e[2],c=e[5],d=e[8];return t*(r*d-c*s)+o*(c*i-n*d)+a*(n*s-r*i)};mt.inverse=function(e,t){let n=e[0],i=e[1],o=e[2],r=e[3],s=e[4],a=e[5],c=e[6],d=e[7],u=e[8],h=mt.determinant(e);t[0]=s*u-d*a,t[1]=d*o-i*u,t[2]=i*a-s*o,t[3]=c*a-r*u,t[4]=n*u-c*o,t[5]=r*o-n*a,t[6]=r*d-c*s,t[7]=c*i-n*d,t[8]=n*s-r*i;let p=1/h;return mt.multiplyByScalar(t,p,t)};var YGe=new mt;mt.inverseTranspose=function(e,t){return mt.inverse(mt.transpose(e,YGe),t)};mt.equals=function(e,t){return e===t||l(e)&&l(t)&&e[0]===t[0]&&e[1]===t[1]&&e[2]===t[2]&&e[3]===t[3]&&e[4]===t[4]&&e[5]===t[5]&&e[6]===t[6]&&e[7]===t[7]&&e[8]===t[8]};mt.equalsEpsilon=function(e,t,n){return n=n??0,e===t||l(e)&&l(t)&&Math.abs(e[0]-t[0])<=n&&Math.abs(e[1]-t[1])<=n&&Math.abs(e[2]-t[2])<=n&&Math.abs(e[3]-t[3])<=n&&Math.abs(e[4]-t[4])<=n&&Math.abs(e[5]-t[5])<=n&&Math.abs(e[6]-t[6])<=n&&Math.abs(e[7]-t[7])<=n&&Math.abs(e[8]-t[8])<=n};mt.IDENTITY=Object.freeze(new mt(1,0,0,0,1,0,0,0,1));mt.ZERO=Object.freeze(new mt(0,0,0,0,0,0,0,0,0));mt.COLUMN0ROW0=0;mt.COLUMN0ROW1=1;mt.COLUMN0ROW2=2;mt.COLUMN1ROW0=3;mt.COLUMN1ROW1=4;mt.COLUMN1ROW2=5;mt.COLUMN2ROW0=6;mt.COLUMN2ROW1=7;mt.COLUMN2ROW2=8;Object.defineProperties(mt.prototype,{length:{get:function(){return mt.packedLength}}});mt.prototype.clone=function(e){return mt.clone(this,e)};mt.prototype.equals=function(e){return mt.equals(this,e)};mt.equalsArray=function(e,t,n){return e[0]===t[n]&&e[1]===t[n+1]&&e[2]===t[n+2]&&e[3]===t[n+3]&&e[4]===t[n+4]&&e[5]===t[n+5]&&e[6]===t[n+6]&&e[7]===t[n+7]&&e[8]===t[n+8]};mt.prototype.equalsEpsilon=function(e,t){return mt.equalsEpsilon(this,e,t)};mt.prototype.toString=function(){return`(${this[0]}, ${this[3]}, ${this[6]})
(${this[1]}, ${this[4]}, ${this[7]})
(${this[2]}, ${this[5]}, ${this[8]})`};var $=mt;var yBt=y(x(),1);function _R(e){this.name="RuntimeError",this.message=e;let t;try{throw new Error}catch(n){t=n.stack}this.stack=t}l(Object.create)&&(_R.prototype=Object.create(Error.prototype),_R.prototype.constructor=_R);_R.prototype.toString=function(){let e=`${this.name}: ${this.message}`;return l(this.stack)&&(e+=`
${this.stack.toString()}`),e};var me=_R;function dt(e,t,n,i,o,r,s,a,c,d,u,h,p,A,f,b){this[0]=e??0,this[1]=o??0,this[2]=c??0,this[3]=p??0,this[4]=t??0,this[5]=r??0,this[6]=d??0,this[7]=A??0,this[8]=n??0,this[9]=s??0,this[10]=u??0,this[11]=f??0,this[12]=i??0,this[13]=a??0,this[14]=h??0,this[15]=b??0}dt.packedLength=16;dt.pack=function(e,t,n){return n=n??0,t[n++]=e[0],t[n++]=e[1],t[n++]=e[2],t[n++]=e[3],t[n++]=e[4],t[n++]=e[5],t[n++]=e[6],t[n++]=e[7],t[n++]=e[8],t[n++]=e[9],t[n++]=e[10],t[n++]=e[11],t[n++]=e[12],t[n++]=e[13],t[n++]=e[14],t[n]=e[15],t};dt.unpack=function(e,t,n){return t=t??0,l(n)||(n=new dt),n[0]=e[t++],n[1]=e[t++],n[2]=e[t++],n[3]=e[t++],n[4]=e[t++],n[5]=e[t++],n[6]=e[t++],n[7]=e[t++],n[8]=e[t++],n[9]=e[t++],n[10]=e[t++],n[11]=e[t++],n[12]=e[t++],n[13]=e[t++],n[14]=e[t++],n[15]=e[t],n};dt.packArray=function(e,t){let n=e.length,i=n*16;l(t)?!Array.isArray(t)&&t.length!==i||t.length!==i&&(t.length=i):t=new Array(i);for(let o=0;o<n;++o)dt.pack(e[o],t,o*16);return t};dt.unpackArray=function(e,t){let n=e.length;l(t)?t.length=n/16:t=new Array(n/16);for(let i=0;i<n;i+=16){let o=i/16;t[o]=dt.unpack(e,i,t[o])}return t};dt.clone=function(e,t){if(l(e))return l(t)?(t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t[4]=e[4],t[5]=e[5],t[6]=e[6],t[7]=e[7],t[8]=e[8],t[9]=e[9],t[10]=e[10],t[11]=e[11],t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15],t):new dt(e[0],e[4],e[8],e[12],e[1],e[5],e[9],e[13],e[2],e[6],e[10],e[14],e[3],e[7],e[11],e[15])};dt.fromArray=dt.unpack;dt.fromColumnMajorArray=function(e,t){return dt.clone(e,t)};dt.fromRowMajorArray=function(e,t){return l(t)?(t[0]=e[0],t[1]=e[4],t[2]=e[8],t[3]=e[12],t[4]=e[1],t[5]=e[5],t[6]=e[9],t[7]=e[13],t[8]=e[2],t[9]=e[6],t[10]=e[10],t[11]=e[14],t[12]=e[3],t[13]=e[7],t[14]=e[11],t[15]=e[15],t):new dt(e[0],e[1],e[2],e[3],e[4],e[5],e[6],e[7],e[8],e[9],e[10],e[11],e[12],e[13],e[14],e[15])};dt.fromRotationTranslation=function(e,t,n){return t=t??m.ZERO,l(n)?(n[0]=e[0],n[1]=e[1],n[2]=e[2],n[3]=0,n[4]=e[3],n[5]=e[4],n[6]=e[5],n[7]=0,n[8]=e[6],n[9]=e[7],n[10]=e[8],n[11]=0,n[12]=t.x,n[13]=t.y,n[14]=t.z,n[15]=1,n):new dt(e[0],e[3],e[6],t.x,e[1],e[4],e[7],t.y,e[2],e[5],e[8],t.z,0,0,0,1)};dt.fromTranslationQuaternionRotationScale=function(e,t,n,i){l(i)||(i=new dt);let o=n.x,r=n.y,s=n.z,a=t.x*t.x,c=t.x*t.y,d=t.x*t.z,u=t.x*t.w,h=t.y*t.y,p=t.y*t.z,A=t.y*t.w,f=t.z*t.z,b=t.z*t.w,C=t.w*t.w,T=a-h-f+C,E=2*(c-b),S=2*(d+A),I=2*(c+b),R=-a+h-f+C,V=2*(p-u),W=2*(d-A),B=2*(p+u),N=-a-h+f+C;return i[0]=T*o,i[1]=I*o,i[2]=W*o,i[3]=0,i[4]=E*r,i[5]=R*r,i[6]=B*r,i[7]=0,i[8]=S*s,i[9]=V*s,i[10]=N*s,i[11]=0,i[12]=e.x,i[13]=e.y,i[14]=e.z,i[15]=1,i};dt.fromTranslationRotationScale=function(e,t){return dt.fromTranslationQuaternionRotationScale(e.translation,e.rotation,e.scale,t)};dt.fromTranslation=function(e,t){return dt.fromRotationTranslation($.IDENTITY,e,t)};dt.fromScale=function(e,t){return l(t)?(t[0]=e.x,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=e.y,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=e.z,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t):new dt(e.x,0,0,0,0,e.y,0,0,0,0,e.z,0,0,0,0,1)};dt.fromUniformScale=function(e,t){return l(t)?(t[0]=e,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=e,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=e,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t):new dt(e,0,0,0,0,e,0,0,0,0,e,0,0,0,0,1)};dt.fromRotation=function(e,t){return l(t)||(t=new dt),t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=0,t[4]=e[3],t[5]=e[4],t[6]=e[5],t[7]=0,t[8]=e[6],t[9]=e[7],t[10]=e[8],t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t};var eS=new m,tS=new m,IR=new m;dt.fromCamera=function(e,t){let n=e.position,i=e.direction,o=e.up;m.normalize(i,eS),m.normalize(m.cross(eS,o,tS),tS),m.normalize(m.cross(tS,eS,IR),IR);let r=tS.x,s=tS.y,a=tS.z,c=eS.x,d=eS.y,u=eS.z,h=IR.x,p=IR.y,A=IR.z,f=n.x,b=n.y,C=n.z,T=r*-f+s*-b+a*-C,E=h*-f+p*-b+A*-C,S=c*f+d*b+u*C;return l(t)?(t[0]=r,t[1]=h,t[2]=-c,t[3]=0,t[4]=s,t[5]=p,t[6]=-d,t[7]=0,t[8]=a,t[9]=A,t[10]=-u,t[11]=0,t[12]=T,t[13]=E,t[14]=S,t[15]=1,t):new dt(r,s,a,T,h,p,A,E,-c,-d,-u,S,0,0,0,1)};dt.computePerspectiveFieldOfView=function(e,t,n,i,o){let s=1/Math.tan(e*.5),a=s/t,c=(i+n)/(n-i),d=2*i*n/(n-i);return o[0]=a,o[1]=0,o[2]=0,o[3]=0,o[4]=0,o[5]=s,o[6]=0,o[7]=0,o[8]=0,o[9]=0,o[10]=c,o[11]=-1,o[12]=0,o[13]=0,o[14]=d,o[15]=0,o};dt.computeOrthographicOffCenter=function(e,t,n,i,o,r,s){let a=1/(t-e),c=1/(i-n),d=1/(r-o),u=-(t+e)*a,h=-(i+n)*c,p=-(r+o)*d;return a*=2,c*=2,d*=-2,s[0]=a,s[1]=0,s[2]=0,s[3]=0,s[4]=0,s[5]=c,s[6]=0,s[7]=0,s[8]=0,s[9]=0,s[10]=d,s[11]=0,s[12]=u,s[13]=h,s[14]=p,s[15]=1,s};dt.computePerspectiveOffCenter=function(e,t,n,i,o,r,s){let a=2*o/(t-e),c=2*o/(i-n),d=(t+e)/(t-e),u=(i+n)/(i-n),h=-(r+o)/(r-o),p=-1,A=-2*r*o/(r-o);return s[0]=a,s[1]=0,s[2]=0,s[3]=0,s[4]=0,s[5]=c,s[6]=0,s[7]=0,s[8]=d,s[9]=u,s[10]=h,s[11]=p,s[12]=0,s[13]=0,s[14]=A,s[15]=0,s};dt.computeInfinitePerspectiveOffCenter=function(e,t,n,i,o,r){let s=2*o/(t-e),a=2*o/(i-n),c=(t+e)/(t-e),d=(i+n)/(i-n),u=-1,h=-1,p=-2*o;return r[0]=s,r[1]=0,r[2]=0,r[3]=0,r[4]=0,r[5]=a,r[6]=0,r[7]=0,r[8]=c,r[9]=d,r[10]=u,r[11]=h,r[12]=0,r[13]=0,r[14]=p,r[15]=0,r};dt.computeViewportTransformation=function(e,t,n,i){l(i)||(i=new dt),e=e??Q.EMPTY_OBJECT;let o=e.x??0,r=e.y??0,s=e.width??0,a=e.height??0;t=t??0,n=n??1;let c=s*.5,d=a*.5,u=(n-t)*.5,h=c,p=d,A=u,f=o+c,b=r+d,C=t+u,T=1;return i[0]=h,i[1]=0,i[2]=0,i[3]=0,i[4]=0,i[5]=p,i[6]=0,i[7]=0,i[8]=0,i[9]=0,i[10]=A,i[11]=0,i[12]=f,i[13]=b,i[14]=C,i[15]=T,i};dt.computeView=function(e,t,n,i,o){return o[0]=i.x,o[1]=n.x,o[2]=-t.x,o[3]=0,o[4]=i.y,o[5]=n.y,o[6]=-t.y,o[7]=0,o[8]=i.z,o[9]=n.z,o[10]=-t.z,o[11]=0,o[12]=-m.dot(i,e),o[13]=-m.dot(n,e),o[14]=m.dot(t,e),o[15]=1,o};dt.toArray=function(e,t){return l(t)?(t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t[4]=e[4],t[5]=e[5],t[6]=e[6],t[7]=e[7],t[8]=e[8],t[9]=e[9],t[10]=e[10],t[11]=e[11],t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15],t):[e[0],e[1],e[2],e[3],e[4],e[5],e[6],e[7],e[8],e[9],e[10],e[11],e[12],e[13],e[14],e[15]]};dt.getElementIndex=function(e,t){return e*4+t};dt.getColumn=function(e,t,n){let i=t*4,o=e[i],r=e[i+1],s=e[i+2],a=e[i+3];return n.x=o,n.y=r,n.z=s,n.w=a,n};dt.setColumn=function(e,t,n,i){i=dt.clone(e,i);let o=t*4;return i[o]=n.x,i[o+1]=n.y,i[o+2]=n.z,i[o+3]=n.w,i};dt.getRow=function(e,t,n){let i=e[t],o=e[t+4],r=e[t+8],s=e[t+12];return n.x=i,n.y=o,n.z=r,n.w=s,n};dt.setRow=function(e,t,n,i){return i=dt.clone(e,i),i[t]=n.x,i[t+4]=n.y,i[t+8]=n.z,i[t+12]=n.w,i};dt.setTranslation=function(e,t,n){return n[0]=e[0],n[1]=e[1],n[2]=e[2],n[3]=e[3],n[4]=e[4],n[5]=e[5],n[6]=e[6],n[7]=e[7],n[8]=e[8],n[9]=e[9],n[10]=e[10],n[11]=e[11],n[12]=t.x,n[13]=t.y,n[14]=t.z,n[15]=e[15],n};var MGe=new m;dt.setScale=function(e,t,n){let i=dt.getScale(e,MGe),o=t.x/i.x,r=t.y/i.y,s=t.z/i.z;return n[0]=e[0]*o,n[1]=e[1]*o,n[2]=e[2]*o,n[3]=e[3],n[4]=e[4]*r,n[5]=e[5]*r,n[6]=e[6]*r,n[7]=e[7],n[8]=e[8]*s,n[9]=e[9]*s,n[10]=e[10]*s,n[11]=e[11],n[12]=e[12],n[13]=e[13],n[14]=e[14],n[15]=e[15],n};var vGe=new m;dt.setUniformScale=function(e,t,n){let i=dt.getScale(e,vGe),o=t/i.x,r=t/i.y,s=t/i.z;return n[0]=e[0]*o,n[1]=e[1]*o,n[2]=e[2]*o,n[3]=e[3],n[4]=e[4]*r,n[5]=e[5]*r,n[6]=e[6]*r,n[7]=e[7],n[8]=e[8]*s,n[9]=e[9]*s,n[10]=e[10]*s,n[11]=e[11],n[12]=e[12],n[13]=e[13],n[14]=e[14],n[15]=e[15],n};var s3=new m;dt.getScale=function(e,t){return t.x=m.magnitude(m.fromElements(e[0],e[1],e[2],s3)),t.y=m.magnitude(m.fromElements(e[4],e[5],e[6],s3)),t.z=m.magnitude(m.fromElements(e[8],e[9],e[10],s3)),t};var Rie=new m;dt.getMaximumScale=function(e){return dt.getScale(e,Rie),m.maximumComponent(Rie)};var UGe=new m;dt.setRotation=function(e,t,n){let i=dt.getScale(e,UGe);return n[0]=t[0]*i.x,n[1]=t[1]*i.x,n[2]=t[2]*i.x,n[3]=e[3],n[4]=t[3]*i.y,n[5]=t[4]*i.y,n[6]=t[5]*i.y,n[7]=e[7],n[8]=t[6]*i.z,n[9]=t[7]*i.z,n[10]=t[8]*i.z,n[11]=e[11],n[12]=e[12],n[13]=e[13],n[14]=e[14],n[15]=e[15],n};var DGe=new m;dt.getRotation=function(e,t){let n=dt.getScale(e,DGe);return t[0]=e[0]/n.x,t[1]=e[1]/n.x,t[2]=e[2]/n.x,t[3]=e[4]/n.y,t[4]=e[5]/n.y,t[5]=e[6]/n.y,t[6]=e[8]/n.z,t[7]=e[9]/n.z,t[8]=e[10]/n.z,t};dt.multiply=function(e,t,n){let i=e[0],o=e[1],r=e[2],s=e[3],a=e[4],c=e[5],d=e[6],u=e[7],h=e[8],p=e[9],A=e[10],f=e[11],b=e[12],C=e[13],T=e[14],E=e[15],S=t[0],I=t[1],R=t[2],V=t[3],W=t[4],B=t[5],N=t[6],P=t[7],g=t[8],_=t[9],Z=t[10],G=t[11],w=t[12],X=t[13],k=t[14],v=t[15],D=i*S+a*I+h*R+b*V,Y=o*S+c*I+p*R+C*V,O=r*S+d*I+A*R+T*V,J=s*S+u*I+f*R+E*V,te=i*W+a*B+h*N+b*P,z=o*W+c*B+p*N+C*P,j=r*W+d*B+A*N+T*P,ee=s*W+u*B+f*N+E*P,ge=i*g+a*_+h*Z+b*G,ye=o*g+c*_+p*Z+C*G,ae=r*g+d*_+A*Z+T*G,Ce=s*g+u*_+f*Z+E*G,Te=i*w+a*X+h*k+b*v,Fe=o*w+c*X+p*k+C*v,Ne=r*w+d*X+A*k+T*v,Pe=s*w+u*X+f*k+E*v;return n[0]=D,n[1]=Y,n[2]=O,n[3]=J,n[4]=te,n[5]=z,n[6]=j,n[7]=ee,n[8]=ge,n[9]=ye,n[10]=ae,n[11]=Ce,n[12]=Te,n[13]=Fe,n[14]=Ne,n[15]=Pe,n};dt.add=function(e,t,n){return n[0]=e[0]+t[0],n[1]=e[1]+t[1],n[2]=e[2]+t[2],n[3]=e[3]+t[3],n[4]=e[4]+t[4],n[5]=e[5]+t[5],n[6]=e[6]+t[6],n[7]=e[7]+t[7],n[8]=e[8]+t[8],n[9]=e[9]+t[9],n[10]=e[10]+t[10],n[11]=e[11]+t[11],n[12]=e[12]+t[12],n[13]=e[13]+t[13],n[14]=e[14]+t[14],n[15]=e[15]+t[15],n};dt.subtract=function(e,t,n){return n[0]=e[0]-t[0],n[1]=e[1]-t[1],n[2]=e[2]-t[2],n[3]=e[3]-t[3],n[4]=e[4]-t[4],n[5]=e[5]-t[5],n[6]=e[6]-t[6],n[7]=e[7]-t[7],n[8]=e[8]-t[8],n[9]=e[9]-t[9],n[10]=e[10]-t[10],n[11]=e[11]-t[11],n[12]=e[12]-t[12],n[13]=e[13]-t[13],n[14]=e[14]-t[14],n[15]=e[15]-t[15],n};dt.multiplyTransformation=function(e,t,n){let i=e[0],o=e[1],r=e[2],s=e[4],a=e[5],c=e[6],d=e[8],u=e[9],h=e[10],p=e[12],A=e[13],f=e[14],b=t[0],C=t[1],T=t[2],E=t[4],S=t[5],I=t[6],R=t[8],V=t[9],W=t[10],B=t[12],N=t[13],P=t[14],g=i*b+s*C+d*T,_=o*b+a*C+u*T,Z=r*b+c*C+h*T,G=i*E+s*S+d*I,w=o*E+a*S+u*I,X=r*E+c*S+h*I,k=i*R+s*V+d*W,v=o*R+a*V+u*W,D=r*R+c*V+h*W,Y=i*B+s*N+d*P+p,O=o*B+a*N+u*P+A,J=r*B+c*N+h*P+f;return n[0]=g,n[1]=_,n[2]=Z,n[3]=0,n[4]=G,n[5]=w,n[6]=X,n[7]=0,n[8]=k,n[9]=v,n[10]=D,n[11]=0,n[12]=Y,n[13]=O,n[14]=J,n[15]=1,n};dt.multiplyByMatrix3=function(e,t,n){let i=e[0],o=e[1],r=e[2],s=e[4],a=e[5],c=e[6],d=e[8],u=e[9],h=e[10],p=t[0],A=t[1],f=t[2],b=t[3],C=t[4],T=t[5],E=t[6],S=t[7],I=t[8],R=i*p+s*A+d*f,V=o*p+a*A+u*f,W=r*p+c*A+h*f,B=i*b+s*C+d*T,N=o*b+a*C+u*T,P=r*b+c*C+h*T,g=i*E+s*S+d*I,_=o*E+a*S+u*I,Z=r*E+c*S+h*I;return n[0]=R,n[1]=V,n[2]=W,n[3]=0,n[4]=B,n[5]=N,n[6]=P,n[7]=0,n[8]=g,n[9]=_,n[10]=Z,n[11]=0,n[12]=e[12],n[13]=e[13],n[14]=e[14],n[15]=e[15],n};dt.multiplyByTranslation=function(e,t,n){let i=t.x,o=t.y,r=t.z,s=i*e[0]+o*e[4]+r*e[8]+e[12],a=i*e[1]+o*e[5]+r*e[9]+e[13],c=i*e[2]+o*e[6]+r*e[10]+e[14];return n[0]=e[0],n[1]=e[1],n[2]=e[2],n[3]=e[3],n[4]=e[4],n[5]=e[5],n[6]=e[6],n[7]=e[7],n[8]=e[8],n[9]=e[9],n[10]=e[10],n[11]=e[11],n[12]=s,n[13]=a,n[14]=c,n[15]=e[15],n};dt.multiplyByScale=function(e,t,n){let i=t.x,o=t.y,r=t.z;return i===1&&o===1&&r===1?dt.clone(e,n):(n[0]=i*e[0],n[1]=i*e[1],n[2]=i*e[2],n[3]=e[3],n[4]=o*e[4],n[5]=o*e[5],n[6]=o*e[6],n[7]=e[7],n[8]=r*e[8],n[9]=r*e[9],n[10]=r*e[10],n[11]=e[11],n[12]=e[12],n[13]=e[13],n[14]=e[14],n[15]=e[15],n)};dt.multiplyByUniformScale=function(e,t,n){return n[0]=e[0]*t,n[1]=e[1]*t,n[2]=e[2]*t,n[3]=e[3],n[4]=e[4]*t,n[5]=e[5]*t,n[6]=e[6]*t,n[7]=e[7],n[8]=e[8]*t,n[9]=e[9]*t,n[10]=e[10]*t,n[11]=e[11],n[12]=e[12],n[13]=e[13],n[14]=e[14],n[15]=e[15],n};dt.multiplyByVector=function(e,t,n){let i=t.x,o=t.y,r=t.z,s=t.w,a=e[0]*i+e[4]*o+e[8]*r+e[12]*s,c=e[1]*i+e[5]*o+e[9]*r+e[13]*s,d=e[2]*i+e[6]*o+e[10]*r+e[14]*s,u=e[3]*i+e[7]*o+e[11]*r+e[15]*s;return n.x=a,n.y=c,n.z=d,n.w=u,n};dt.multiplyByPointAsVector=function(e,t,n){let i=t.x,o=t.y,r=t.z,s=e[0]*i+e[4]*o+e[8]*r,a=e[1]*i+e[5]*o+e[9]*r,c=e[2]*i+e[6]*o+e[10]*r;return n.x=s,n.y=a,n.z=c,n};dt.multiplyByPoint=function(e,t,n){let i=t.x,o=t.y,r=t.z,s=e[0]*i+e[4]*o+e[8]*r+e[12],a=e[1]*i+e[5]*o+e[9]*r+e[13],c=e[2]*i+e[6]*o+e[10]*r+e[14];return n.x=s,n.y=a,n.z=c,n};dt.multiplyByScalar=function(e,t,n){return n[0]=e[0]*t,n[1]=e[1]*t,n[2]=e[2]*t,n[3]=e[3]*t,n[4]=e[4]*t,n[5]=e[5]*t,n[6]=e[6]*t,n[7]=e[7]*t,n[8]=e[8]*t,n[9]=e[9]*t,n[10]=e[10]*t,n[11]=e[11]*t,n[12]=e[12]*t,n[13]=e[13]*t,n[14]=e[14]*t,n[15]=e[15]*t,n};dt.negate=function(e,t){return t[0]=-e[0],t[1]=-e[1],t[2]=-e[2],t[3]=-e[3],t[4]=-e[4],t[5]=-e[5],t[6]=-e[6],t[7]=-e[7],t[8]=-e[8],t[9]=-e[9],t[10]=-e[10],t[11]=-e[11],t[12]=-e[12],t[13]=-e[13],t[14]=-e[14],t[15]=-e[15],t};dt.transpose=function(e,t){let n=e[1],i=e[2],o=e[3],r=e[6],s=e[7],a=e[11];return t[0]=e[0],t[1]=e[4],t[2]=e[8],t[3]=e[12],t[4]=n,t[5]=e[5],t[6]=e[9],t[7]=e[13],t[8]=i,t[9]=r,t[10]=e[10],t[11]=e[14],t[12]=o,t[13]=s,t[14]=a,t[15]=e[15],t};dt.abs=function(e,t){return t[0]=Math.abs(e[0]),t[1]=Math.abs(e[1]),t[2]=Math.abs(e[2]),t[3]=Math.abs(e[3]),t[4]=Math.abs(e[4]),t[5]=Math.abs(e[5]),t[6]=Math.abs(e[6]),t[7]=Math.abs(e[7]),t[8]=Math.abs(e[8]),t[9]=Math.abs(e[9]),t[10]=Math.abs(e[10]),t[11]=Math.abs(e[11]),t[12]=Math.abs(e[12]),t[13]=Math.abs(e[13]),t[14]=Math.abs(e[14]),t[15]=Math.abs(e[15]),t};dt.equals=function(e,t){return e===t||l(e)&&l(t)&&e[12]===t[12]&&e[13]===t[13]&&e[14]===t[14]&&e[0]===t[0]&&e[1]===t[1]&&e[2]===t[2]&&e[4]===t[4]&&e[5]===t[5]&&e[6]===t[6]&&e[8]===t[8]&&e[9]===t[9]&&e[10]===t[10]&&e[3]===t[3]&&e[7]===t[7]&&e[11]===t[11]&&e[15]===t[15]};dt.equalsEpsilon=function(e,t,n){return n=n??0,e===t||l(e)&&l(t)&&Math.abs(e[0]-t[0])<=n&&Math.abs(e[1]-t[1])<=n&&Math.abs(e[2]-t[2])<=n&&Math.abs(e[3]-t[3])<=n&&Math.abs(e[4]-t[4])<=n&&Math.abs(e[5]-t[5])<=n&&Math.abs(e[6]-t[6])<=n&&Math.abs(e[7]-t[7])<=n&&Math.abs(e[8]-t[8])<=n&&Math.abs(e[9]-t[9])<=n&&Math.abs(e[10]-t[10])<=n&&Math.abs(e[11]-t[11])<=n&&Math.abs(e[12]-t[12])<=n&&Math.abs(e[13]-t[13])<=n&&Math.abs(e[14]-t[14])<=n&&Math.abs(e[15]-t[15])<=n};dt.getTranslation=function(e,t){return t.x=e[12],t.y=e[13],t.z=e[14],t};dt.getMatrix3=function(e,t){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[4],t[4]=e[5],t[5]=e[6],t[6]=e[8],t[7]=e[9],t[8]=e[10],t};var kGe=new $,QGe=new $,OGe=new re,zGe=new re(0,0,0,1);dt.inverse=function(e,t){let n=e[0],i=e[4],o=e[8],r=e[12],s=e[1],a=e[5],c=e[9],d=e[13],u=e[2],h=e[6],p=e[10],A=e[14],f=e[3],b=e[7],C=e[11],T=e[15],E=p*T,S=A*C,I=h*T,R=A*b,V=h*C,W=p*b,B=u*T,N=A*f,P=u*C,g=p*f,_=u*b,Z=h*f,G=E*a+R*c+V*d-(S*a+I*c+W*d),w=S*s+B*c+g*d-(E*s+N*c+P*d),X=I*s+N*a+_*d-(R*s+B*a+Z*d),k=W*s+P*a+Z*c-(V*s+g*a+_*c),v=S*i+I*o+W*r-(E*i+R*o+V*r),D=E*n+N*o+P*r-(S*n+B*o+g*r),Y=R*n+B*i+Z*r-(I*n+N*i+_*r),O=V*n+g*i+_*o-(W*n+P*i+Z*o);E=o*d,S=r*c,I=i*d,R=r*a,V=i*c,W=o*a,B=n*d,N=r*s,P=n*c,g=o*s,_=n*a,Z=i*s;let J=E*b+R*C+V*T-(S*b+I*C+W*T),te=S*f+B*C+g*T-(E*f+N*C+P*T),z=I*f+N*b+_*T-(R*f+B*b+Z*T),j=W*f+P*b+Z*C-(V*f+g*b+_*C),ee=I*p+W*A+S*h-(V*A+E*h+R*p),ge=P*A+E*u+N*p-(B*p+g*A+S*u),ye=B*h+Z*A+R*u-(_*A+I*u+N*h),ae=_*p+V*u+g*h-(P*h+Z*p+W*u),Ce=n*G+i*w+o*X+r*k;if(Math.abs(Ce)<L.EPSILON21){if($.equalsEpsilon(dt.getMatrix3(e,kGe),QGe,L.EPSILON7)&&re.equals(dt.getRow(e,3,OGe),zGe))return t[0]=0,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=0,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=0,t[11]=0,t[12]=-e[12],t[13]=-e[13],t[14]=-e[14],t[15]=1,t;throw new me("matrix is not invertible because its determinate is zero.")}return Ce=1/Ce,t[0]=G*Ce,t[1]=w*Ce,t[2]=X*Ce,t[3]=k*Ce,t[4]=v*Ce,t[5]=D*Ce,t[6]=Y*Ce,t[7]=O*Ce,t[8]=J*Ce,t[9]=te*Ce,t[10]=z*Ce,t[11]=j*Ce,t[12]=ee*Ce,t[13]=ge*Ce,t[14]=ye*Ce,t[15]=ae*Ce,t};dt.inverseTransformation=function(e,t){let n=e[0],i=e[1],o=e[2],r=e[4],s=e[5],a=e[6],c=e[8],d=e[9],u=e[10],h=e[12],p=e[13],A=e[14],f=-n*h-i*p-o*A,b=-r*h-s*p-a*A,C=-c*h-d*p-u*A;return t[0]=n,t[1]=r,t[2]=c,t[3]=0,t[4]=i,t[5]=s,t[6]=d,t[7]=0,t[8]=o,t[9]=a,t[10]=u,t[11]=0,t[12]=f,t[13]=b,t[14]=C,t[15]=1,t};var HGe=new dt;dt.inverseTranspose=function(e,t){return dt.inverse(dt.transpose(e,HGe),t)};dt.IDENTITY=Object.freeze(new dt(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1));dt.ZERO=Object.freeze(new dt(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0));dt.COLUMN0ROW0=0;dt.COLUMN0ROW1=1;dt.COLUMN0ROW2=2;dt.COLUMN0ROW3=3;dt.COLUMN1ROW0=4;dt.COLUMN1ROW1=5;dt.COLUMN1ROW2=6;dt.COLUMN1ROW3=7;dt.COLUMN2ROW0=8;dt.COLUMN2ROW1=9;dt.COLUMN2ROW2=10;dt.COLUMN2ROW3=11;dt.COLUMN3ROW0=12;dt.COLUMN3ROW1=13;dt.COLUMN3ROW2=14;dt.COLUMN3ROW3=15;Object.defineProperties(dt.prototype,{length:{get:function(){return dt.packedLength}}});dt.prototype.clone=function(e){return dt.clone(this,e)};dt.prototype.equals=function(e){return dt.equals(this,e)};dt.equalsArray=function(e,t,n){return e[0]===t[n]&&e[1]===t[n+1]&&e[2]===t[n+2]&&e[3]===t[n+3]&&e[4]===t[n+4]&&e[5]===t[n+5]&&e[6]===t[n+6]&&e[7]===t[n+7]&&e[8]===t[n+8]&&e[9]===t[n+9]&&e[10]===t[n+10]&&e[11]===t[n+11]&&e[12]===t[n+12]&&e[13]===t[n+13]&&e[14]===t[n+14]&&e[15]===t[n+15]};dt.prototype.equalsEpsilon=function(e,t){return dt.equalsEpsilon(this,e,t)};dt.prototype.toString=function(){return`(${this[0]}, ${this[4]}, ${this[8]}, ${this[12]})
(${this[1]}, ${this[5]}, ${this[9]}, ${this[13]})
(${this[2]}, ${this[6]}, ${this[10]}, ${this[14]})
(${this[3]}, ${this[7]}, ${this[11]}, ${this[15]})`};var F=dt;var GBt=y(x(),1),JGe={DEPTH_BUFFER_BIT:256,STENCIL_BUFFER_BIT:1024,COLOR_BUFFER_BIT:16384,POINTS:0,LINES:1,LINE_LOOP:2,LINE_STRIP:3,TRIANGLES:4,TRIANGLE_STRIP:5,TRIANGLE_FAN:6,ZERO:0,ONE:1,SRC_COLOR:768,ONE_MINUS_SRC_COLOR:769,SRC_ALPHA:770,ONE_MINUS_SRC_ALPHA:771,DST_ALPHA:772,ONE_MINUS_DST_ALPHA:773,DST_COLOR:774,ONE_MINUS_DST_COLOR:775,SRC_ALPHA_SATURATE:776,FUNC_ADD:32774,BLEND_EQUATION:32777,BLEND_EQUATION_RGB:32777,BLEND_EQUATION_ALPHA:34877,FUNC_SUBTRACT:32778,FUNC_REVERSE_SUBTRACT:32779,BLEND_DST_RGB:32968,BLEND_SRC_RGB:32969,BLEND_DST_ALPHA:32970,BLEND_SRC_ALPHA:32971,CONSTANT_COLOR:32769,ONE_MINUS_CONSTANT_COLOR:32770,CONSTANT_ALPHA:32771,ONE_MINUS_CONSTANT_ALPHA:32772,BLEND_COLOR:32773,ARRAY_BUFFER:34962,ELEMENT_ARRAY_BUFFER:34963,ARRAY_BUFFER_BINDING:34964,ELEMENT_ARRAY_BUFFER_BINDING:34965,STREAM_DRAW:35040,STATIC_DRAW:35044,DYNAMIC_DRAW:35048,BUFFER_SIZE:34660,BUFFER_USAGE:34661,CURRENT_VERTEX_ATTRIB:34342,FRONT:1028,BACK:1029,FRONT_AND_BACK:1032,CULL_FACE:2884,BLEND:3042,DITHER:3024,STENCIL_TEST:2960,DEPTH_TEST:2929,SCISSOR_TEST:3089,POLYGON_OFFSET_FILL:32823,SAMPLE_ALPHA_TO_COVERAGE:32926,SAMPLE_COVERAGE:32928,NO_ERROR:0,INVALID_ENUM:1280,INVALID_VALUE:1281,INVALID_OPERATION:1282,OUT_OF_MEMORY:1285,CW:2304,CCW:2305,LINE_WIDTH:2849,ALIASED_POINT_SIZE_RANGE:33901,ALIASED_LINE_WIDTH_RANGE:33902,CULL_FACE_MODE:2885,FRONT_FACE:2886,DEPTH_RANGE:2928,DEPTH_WRITEMASK:2930,DEPTH_CLEAR_VALUE:2931,DEPTH_FUNC:2932,STENCIL_CLEAR_VALUE:2961,STENCIL_FUNC:2962,STENCIL_FAIL:2964,STENCIL_PASS_DEPTH_FAIL:2965,STENCIL_PASS_DEPTH_PASS:2966,STENCIL_REF:2967,STENCIL_VALUE_MASK:2963,STENCIL_WRITEMASK:2968,STENCIL_BACK_FUNC:34816,STENCIL_BACK_FAIL:34817,STENCIL_BACK_PASS_DEPTH_FAIL:34818,STENCIL_BACK_PASS_DEPTH_PASS:34819,STENCIL_BACK_REF:36003,STENCIL_BACK_VALUE_MASK:36004,STENCIL_BACK_WRITEMASK:36005,VIEWPORT:2978,SCISSOR_BOX:3088,COLOR_CLEAR_VALUE:3106,COLOR_WRITEMASK:3107,UNPACK_ALIGNMENT:3317,PACK_ALIGNMENT:3333,MAX_TEXTURE_SIZE:3379,MAX_VIEWPORT_DIMS:3386,SUBPIXEL_BITS:3408,RED_BITS:3410,GREEN_BITS:3411,BLUE_BITS:3412,ALPHA_BITS:3413,DEPTH_BITS:3414,STENCIL_BITS:3415,POLYGON_OFFSET_UNITS:10752,POLYGON_OFFSET_FACTOR:32824,TEXTURE_BINDING_2D:32873,SAMPLE_BUFFERS:32936,SAMPLES:32937,SAMPLE_COVERAGE_VALUE:32938,SAMPLE_COVERAGE_INVERT:32939,COMPRESSED_TEXTURE_FORMATS:34467,DONT_CARE:4352,FASTEST:4353,NICEST:4354,GENERATE_MIPMAP_HINT:33170,BYTE:5120,UNSIGNED_BYTE:5121,SHORT:5122,UNSIGNED_SHORT:5123,INT:5124,UNSIGNED_INT:5125,FLOAT:5126,DEPTH_COMPONENT:6402,ALPHA:6406,RGB:6407,RGBA:6408,LUMINANCE:6409,LUMINANCE_ALPHA:6410,UNSIGNED_SHORT_4_4_4_4:32819,UNSIGNED_SHORT_5_5_5_1:32820,UNSIGNED_SHORT_5_6_5:33635,FRAGMENT_SHADER:35632,VERTEX_SHADER:35633,MAX_VERTEX_ATTRIBS:34921,MAX_VERTEX_UNIFORM_VECTORS:36347,MAX_VARYING_VECTORS:36348,MAX_COMBINED_TEXTURE_IMAGE_UNITS:35661,MAX_VERTEX_TEXTURE_IMAGE_UNITS:35660,MAX_TEXTURE_IMAGE_UNITS:34930,MAX_FRAGMENT_UNIFORM_VECTORS:36349,SHADER_TYPE:35663,DELETE_STATUS:35712,LINK_STATUS:35714,VALIDATE_STATUS:35715,ATTACHED_SHADERS:35717,ACTIVE_UNIFORMS:35718,ACTIVE_ATTRIBUTES:35721,SHADING_LANGUAGE_VERSION:35724,CURRENT_PROGRAM:35725,NEVER:512,LESS:513,EQUAL:514,LEQUAL:515,GREATER:516,NOTEQUAL:517,GEQUAL:518,ALWAYS:519,KEEP:7680,REPLACE:7681,INCR:7682,DECR:7683,INVERT:5386,INCR_WRAP:34055,DECR_WRAP:34056,VENDOR:7936,RENDERER:7937,VERSION:7938,NEAREST:9728,LINEAR:9729,NEAREST_MIPMAP_NEAREST:9984,LINEAR_MIPMAP_NEAREST:9985,NEAREST_MIPMAP_LINEAR:9986,LINEAR_MIPMAP_LINEAR:9987,TEXTURE_MAG_FILTER:10240,TEXTURE_MIN_FILTER:10241,TEXTURE_WRAP_S:10242,TEXTURE_WRAP_T:10243,TEXTURE_2D:3553,TEXTURE:5890,TEXTURE_CUBE_MAP:34067,TEXTURE_BINDING_CUBE_MAP:34068,TEXTURE_CUBE_MAP_POSITIVE_X:34069,TEXTURE_CUBE_MAP_NEGATIVE_X:34070,TEXTURE_CUBE_MAP_POSITIVE_Y:34071,TEXTURE_CUBE_MAP_NEGATIVE_Y:34072,TEXTURE_CUBE_MAP_POSITIVE_Z:34073,TEXTURE_CUBE_MAP_NEGATIVE_Z:34074,MAX_CUBE_MAP_TEXTURE_SIZE:34076,TEXTURE0:33984,TEXTURE1:33985,TEXTURE2:33986,TEXTURE3:33987,TEXTURE4:33988,TEXTURE5:33989,TEXTURE6:33990,TEXTURE7:33991,TEXTURE8:33992,TEXTURE9:33993,TEXTURE10:33994,TEXTURE11:33995,TEXTURE12:33996,TEXTURE13:33997,TEXTURE14:33998,TEXTURE15:33999,TEXTURE16:34e3,TEXTURE17:34001,TEXTURE18:34002,TEXTURE19:34003,TEXTURE20:34004,TEXTURE21:34005,TEXTURE22:34006,TEXTURE23:34007,TEXTURE24:34008,TEXTURE25:34009,TEXTURE26:34010,TEXTURE27:34011,TEXTURE28:34012,TEXTURE29:34013,TEXTURE30:34014,TEXTURE31:34015,ACTIVE_TEXTURE:34016,REPEAT:10497,CLAMP_TO_EDGE:33071,MIRRORED_REPEAT:33648,FLOAT_VEC2:35664,FLOAT_VEC3:35665,FLOAT_VEC4:35666,INT_VEC2:35667,INT_VEC3:35668,INT_VEC4:35669,BOOL:35670,BOOL_VEC2:35671,BOOL_VEC3:35672,BOOL_VEC4:35673,FLOAT_MAT2:35674,FLOAT_MAT3:35675,FLOAT_MAT4:35676,SAMPLER_2D:35678,SAMPLER_CUBE:35680,VERTEX_ATTRIB_ARRAY_ENABLED:34338,VERTEX_ATTRIB_ARRAY_SIZE:34339,VERTEX_ATTRIB_ARRAY_STRIDE:34340,VERTEX_ATTRIB_ARRAY_TYPE:34341,VERTEX_ATTRIB_ARRAY_NORMALIZED:34922,VERTEX_ATTRIB_ARRAY_POINTER:34373,VERTEX_ATTRIB_ARRAY_BUFFER_BINDING:34975,IMPLEMENTATION_COLOR_READ_TYPE:35738,IMPLEMENTATION_COLOR_READ_FORMAT:35739,COMPILE_STATUS:35713,LOW_FLOAT:36336,MEDIUM_FLOAT:36337,HIGH_FLOAT:36338,LOW_INT:36339,MEDIUM_INT:36340,HIGH_INT:36341,FRAMEBUFFER:36160,RENDERBUFFER:36161,RGBA4:32854,RGB5_A1:32855,RGB565:36194,DEPTH_COMPONENT16:33189,STENCIL_INDEX:6401,STENCIL_INDEX8:36168,DEPTH_STENCIL:34041,RENDERBUFFER_WIDTH:36162,RENDERBUFFER_HEIGHT:36163,RENDERBUFFER_INTERNAL_FORMAT:36164,RENDERBUFFER_RED_SIZE:36176,RENDERBUFFER_GREEN_SIZE:36177,RENDERBUFFER_BLUE_SIZE:36178,RENDERBUFFER_ALPHA_SIZE:36179,RENDERBUFFER_DEPTH_SIZE:36180,RENDERBUFFER_STENCIL_SIZE:36181,FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE:36048,FRAMEBUFFER_ATTACHMENT_OBJECT_NAME:36049,FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL:36050,FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE:36051,COLOR_ATTACHMENT0:36064,DEPTH_ATTACHMENT:36096,STENCIL_ATTACHMENT:36128,DEPTH_STENCIL_ATTACHMENT:33306,NONE:0,FRAMEBUFFER_COMPLETE:36053,FRAMEBUFFER_INCOMPLETE_ATTACHMENT:36054,FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT:36055,FRAMEBUFFER_INCOMPLETE_DIMENSIONS:36057,FRAMEBUFFER_UNSUPPORTED:36061,FRAMEBUFFER_BINDING:36006,RENDERBUFFER_BINDING:36007,MAX_RENDERBUFFER_SIZE:34024,INVALID_FRAMEBUFFER_OPERATION:1286,UNPACK_FLIP_Y_WEBGL:37440,UNPACK_PREMULTIPLY_ALPHA_WEBGL:37441,CONTEXT_LOST_WEBGL:37442,UNPACK_COLORSPACE_CONVERSION_WEBGL:37443,BROWSER_DEFAULT_WEBGL:37444,COMPRESSED_RGB_S3TC_DXT1_EXT:33776,COMPRESSED_RGBA_S3TC_DXT1_EXT:33777,COMPRESSED_RGBA_S3TC_DXT3_EXT:33778,COMPRESSED_RGBA_S3TC_DXT5_EXT:33779,COMPRESSED_RGB_PVRTC_4BPPV1_IMG:35840,COMPRESSED_RGB_PVRTC_2BPPV1_IMG:35841,COMPRESSED_RGBA_PVRTC_4BPPV1_IMG:35842,COMPRESSED_RGBA_PVRTC_2BPPV1_IMG:35843,COMPRESSED_RGBA_ASTC_4x4_WEBGL:37808,COMPRESSED_RGB_ETC1_WEBGL:36196,COMPRESSED_RGBA_BPTC_UNORM:36492,HALF_FLOAT_OES:36193,DOUBLE:5130,READ_BUFFER:3074,UNPACK_ROW_LENGTH:3314,UNPACK_SKIP_ROWS:3315,UNPACK_SKIP_PIXELS:3316,PACK_ROW_LENGTH:3330,PACK_SKIP_ROWS:3331,PACK_SKIP_PIXELS:3332,COLOR:6144,DEPTH:6145,STENCIL:6146,RED:6403,RGB8:32849,RGBA8:32856,RGB10_A2:32857,TEXTURE_BINDING_3D:32874,UNPACK_SKIP_IMAGES:32877,UNPACK_IMAGE_HEIGHT:32878,TEXTURE_3D:32879,TEXTURE_WRAP_R:32882,MAX_3D_TEXTURE_SIZE:32883,UNSIGNED_INT_2_10_10_10_REV:33640,MAX_ELEMENTS_VERTICES:33e3,MAX_ELEMENTS_INDICES:33001,TEXTURE_MIN_LOD:33082,TEXTURE_MAX_LOD:33083,TEXTURE_BASE_LEVEL:33084,TEXTURE_MAX_LEVEL:33085,MIN:32775,MAX:32776,DEPTH_COMPONENT24:33190,MAX_TEXTURE_LOD_BIAS:34045,TEXTURE_COMPARE_MODE:34892,TEXTURE_COMPARE_FUNC:34893,CURRENT_QUERY:34917,QUERY_RESULT:34918,QUERY_RESULT_AVAILABLE:34919,STREAM_READ:35041,STREAM_COPY:35042,STATIC_READ:35045,STATIC_COPY:35046,DYNAMIC_READ:35049,DYNAMIC_COPY:35050,MAX_DRAW_BUFFERS:34852,DRAW_BUFFER0:34853,DRAW_BUFFER1:34854,DRAW_BUFFER2:34855,DRAW_BUFFER3:34856,DRAW_BUFFER4:34857,DRAW_BUFFER5:34858,DRAW_BUFFER6:34859,DRAW_BUFFER7:34860,DRAW_BUFFER8:34861,DRAW_BUFFER9:34862,DRAW_BUFFER10:34863,DRAW_BUFFER11:34864,DRAW_BUFFER12:34865,DRAW_BUFFER13:34866,DRAW_BUFFER14:34867,DRAW_BUFFER15:34868,MAX_FRAGMENT_UNIFORM_COMPONENTS:35657,MAX_VERTEX_UNIFORM_COMPONENTS:35658,SAMPLER_3D:35679,SAMPLER_2D_SHADOW:35682,FRAGMENT_SHADER_DERIVATIVE_HINT:35723,PIXEL_PACK_BUFFER:35051,PIXEL_UNPACK_BUFFER:35052,PIXEL_PACK_BUFFER_BINDING:35053,PIXEL_UNPACK_BUFFER_BINDING:35055,FLOAT_MAT2x3:35685,FLOAT_MAT2x4:35686,FLOAT_MAT3x2:35687,FLOAT_MAT3x4:35688,FLOAT_MAT4x2:35689,FLOAT_MAT4x3:35690,SRGB:35904,SRGB8:35905,SRGB8_ALPHA8:35907,COMPARE_REF_TO_TEXTURE:34894,RGBA32F:34836,RGB32F:34837,RGBA16F:34842,RGB16F:34843,VERTEX_ATTRIB_ARRAY_INTEGER:35069,MAX_ARRAY_TEXTURE_LAYERS:35071,MIN_PROGRAM_TEXEL_OFFSET:35076,MAX_PROGRAM_TEXEL_OFFSET:35077,MAX_VARYING_COMPONENTS:35659,TEXTURE_2D_ARRAY:35866,TEXTURE_BINDING_2D_ARRAY:35869,R11F_G11F_B10F:35898,UNSIGNED_INT_10F_11F_11F_REV:35899,RGB9_E5:35901,UNSIGNED_INT_5_9_9_9_REV:35902,TRANSFORM_FEEDBACK_BUFFER_MODE:35967,MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS:35968,TRANSFORM_FEEDBACK_VARYINGS:35971,TRANSFORM_FEEDBACK_BUFFER_START:35972,TRANSFORM_FEEDBACK_BUFFER_SIZE:35973,TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN:35976,RASTERIZER_DISCARD:35977,MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS:35978,MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS:35979,INTERLEAVED_ATTRIBS:35980,SEPARATE_ATTRIBS:35981,TRANSFORM_FEEDBACK_BUFFER:35982,TRANSFORM_FEEDBACK_BUFFER_BINDING:35983,RGBA32UI:36208,RGB32UI:36209,RGBA16UI:36214,RGB16UI:36215,RGBA8UI:36220,RGB8UI:36221,RGBA32I:36226,RGB32I:36227,RGBA16I:36232,RGB16I:36233,RGBA8I:36238,RGB8I:36239,RED_INTEGER:36244,RGB_INTEGER:36248,RGBA_INTEGER:36249,SAMPLER_2D_ARRAY:36289,SAMPLER_2D_ARRAY_SHADOW:36292,SAMPLER_CUBE_SHADOW:36293,UNSIGNED_INT_VEC2:36294,UNSIGNED_INT_VEC3:36295,UNSIGNED_INT_VEC4:36296,INT_SAMPLER_2D:36298,INT_SAMPLER_3D:36299,INT_SAMPLER_CUBE:36300,INT_SAMPLER_2D_ARRAY:36303,UNSIGNED_INT_SAMPLER_2D:36306,UNSIGNED_INT_SAMPLER_3D:36307,UNSIGNED_INT_SAMPLER_CUBE:36308,UNSIGNED_INT_SAMPLER_2D_ARRAY:36311,DEPTH_COMPONENT32F:36012,DEPTH32F_STENCIL8:36013,FLOAT_32_UNSIGNED_INT_24_8_REV:36269,FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING:33296,FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE:33297,FRAMEBUFFER_ATTACHMENT_RED_SIZE:33298,FRAMEBUFFER_ATTACHMENT_GREEN_SIZE:33299,FRAMEBUFFER_ATTACHMENT_BLUE_SIZE:33300,FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE:33301,FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE:33302,FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE:33303,FRAMEBUFFER_DEFAULT:33304,UNSIGNED_INT_24_8:34042,DEPTH24_STENCIL8:35056,UNSIGNED_NORMALIZED:35863,DRAW_FRAMEBUFFER_BINDING:36006,READ_FRAMEBUFFER:36008,DRAW_FRAMEBUFFER:36009,READ_FRAMEBUFFER_BINDING:36010,RENDERBUFFER_SAMPLES:36011,FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER:36052,MAX_COLOR_ATTACHMENTS:36063,COLOR_ATTACHMENT1:36065,COLOR_ATTACHMENT2:36066,COLOR_ATTACHMENT3:36067,COLOR_ATTACHMENT4:36068,COLOR_ATTACHMENT5:36069,COLOR_ATTACHMENT6:36070,COLOR_ATTACHMENT7:36071,COLOR_ATTACHMENT8:36072,COLOR_ATTACHMENT9:36073,COLOR_ATTACHMENT10:36074,COLOR_ATTACHMENT11:36075,COLOR_ATTACHMENT12:36076,COLOR_ATTACHMENT13:36077,COLOR_ATTACHMENT14:36078,COLOR_ATTACHMENT15:36079,FRAMEBUFFER_INCOMPLETE_MULTISAMPLE:36182,MAX_SAMPLES:36183,HALF_FLOAT:5131,RG:33319,RG_INTEGER:33320,R8:33321,RG8:33323,R16F:33325,R32F:33326,RG16F:33327,RG32F:33328,R8I:33329,R8UI:33330,R16I:33331,R16UI:33332,R32I:33333,R32UI:33334,RG8I:33335,RG8UI:33336,RG16I:33337,RG16UI:33338,RG32I:33339,RG32UI:33340,VERTEX_ARRAY_BINDING:34229,R8_SNORM:36756,RG8_SNORM:36757,RGB8_SNORM:36758,RGBA8_SNORM:36759,SIGNED_NORMALIZED:36764,COPY_READ_BUFFER:36662,COPY_WRITE_BUFFER:36663,COPY_READ_BUFFER_BINDING:36662,COPY_WRITE_BUFFER_BINDING:36663,UNIFORM_BUFFER:35345,UNIFORM_BUFFER_BINDING:35368,UNIFORM_BUFFER_START:35369,UNIFORM_BUFFER_SIZE:35370,MAX_VERTEX_UNIFORM_BLOCKS:35371,MAX_FRAGMENT_UNIFORM_BLOCKS:35373,MAX_COMBINED_UNIFORM_BLOCKS:35374,MAX_UNIFORM_BUFFER_BINDINGS:35375,MAX_UNIFORM_BLOCK_SIZE:35376,MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS:35377,MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS:35379,UNIFORM_BUFFER_OFFSET_ALIGNMENT:35380,ACTIVE_UNIFORM_BLOCKS:35382,UNIFORM_TYPE:35383,UNIFORM_SIZE:35384,UNIFORM_BLOCK_INDEX:35386,UNIFORM_OFFSET:35387,UNIFORM_ARRAY_STRIDE:35388,UNIFORM_MATRIX_STRIDE:35389,UNIFORM_IS_ROW_MAJOR:35390,UNIFORM_BLOCK_BINDING:35391,UNIFORM_BLOCK_DATA_SIZE:35392,UNIFORM_BLOCK_ACTIVE_UNIFORMS:35394,UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES:35395,UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER:35396,UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER:35398,INVALID_INDEX:4294967295,MAX_VERTEX_OUTPUT_COMPONENTS:37154,MAX_FRAGMENT_INPUT_COMPONENTS:37157,MAX_SERVER_WAIT_TIMEOUT:37137,OBJECT_TYPE:37138,SYNC_CONDITION:37139,SYNC_STATUS:37140,SYNC_FLAGS:37141,SYNC_FENCE:37142,SYNC_GPU_COMMANDS_COMPLETE:37143,UNSIGNALED:37144,SIGNALED:37145,ALREADY_SIGNALED:37146,TIMEOUT_EXPIRED:37147,CONDITION_SATISFIED:37148,WAIT_FAILED:37149,SYNC_FLUSH_COMMANDS_BIT:1,VERTEX_ATTRIB_ARRAY_DIVISOR:35070,ANY_SAMPLES_PASSED:35887,ANY_SAMPLES_PASSED_CONSERVATIVE:36202,SAMPLER_BINDING:35097,RGB10_A2UI:36975,INT_2_10_10_10_REV:36255,TRANSFORM_FEEDBACK:36386,TRANSFORM_FEEDBACK_PAUSED:36387,TRANSFORM_FEEDBACK_ACTIVE:36388,TRANSFORM_FEEDBACK_BINDING:36389,COMPRESSED_R11_EAC:37488,COMPRESSED_SIGNED_R11_EAC:37489,COMPRESSED_RG11_EAC:37490,COMPRESSED_SIGNED_RG11_EAC:37491,COMPRESSED_RGB8_ETC2:37492,COMPRESSED_SRGB8_ETC2:37493,COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2:37494,COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2:37495,COMPRESSED_RGBA8_ETC2_EAC:37496,COMPRESSED_SRGB8_ALPHA8_ETC2_EAC:37497,TEXTURE_IMMUTABLE_FORMAT:37167,MAX_ELEMENT_INDEX:36203,TEXTURE_IMMUTABLE_LEVELS:33503,MAX_TEXTURE_MAX_ANISOTROPY_EXT:34047},ne=Object.freeze(JGe);var KGe=new m;function Pt(e){this._size=e.size,this._datatype=e.datatype,this.getValue=e.getValue}var Ka={};Ka[ne.FLOAT]="float";Ka[ne.FLOAT_VEC2]="vec2";Ka[ne.FLOAT_VEC3]="vec3";Ka[ne.FLOAT_VEC4]="vec4";Ka[ne.INT]="int";Ka[ne.INT_VEC2]="ivec2";Ka[ne.INT_VEC3]="ivec3";Ka[ne.INT_VEC4]="ivec4";Ka[ne.BOOL]="bool";Ka[ne.BOOL_VEC2]="bvec2";Ka[ne.BOOL_VEC3]="bvec3";Ka[ne.BOOL_VEC4]="bvec4";Ka[ne.FLOAT_MAT2]="mat2";Ka[ne.FLOAT_MAT3]="mat3";Ka[ne.FLOAT_MAT4]="mat4";Ka[ne.SAMPLER_2D]="sampler2D";Ka[ne.SAMPLER_CUBE]="samplerCube";Pt.prototype.getDeclaration=function(e){let t=`uniform ${Ka[this._datatype]} ${e}`,n=this._size;return n===1?t+=";":t+=`[${n.toString()}];`,t};var jGe={czm_viewport:new Pt({size:1,datatype:ne.FLOAT_VEC4,getValue:function(e){return e.viewportCartesian4}}),czm_viewportOrthographic:new Pt({size:1,datatype:ne.FLOAT_MAT4,getValue:function(e){return e.viewportOrthographic}}),czm_viewportTransformation:new Pt({size:1,datatype:ne.FLOAT_MAT4,getValue:function(e){return e.viewportTransformation}}),czm_globeDepthTexture:new Pt({size:1,datatype:ne.SAMPLER_2D,getValue:function(e){return e.globeDepthTexture}}),czm_edgeIdTexture:new Pt({size:1,datatype:ne.SAMPLER_2D,getValue:function(e){return e.edgeIdTexture}}),czm_edgeColorTexture:new Pt({size:1,datatype:ne.SAMPLER_2D,getValue:function(e){return e.edgeColorTexture}}),czm_edgeDepthTexture:new Pt({size:1,datatype:ne.SAMPLER_2D,getValue:function(e){return e.edgeDepthTexture}}),czm_model:new Pt({size:1,datatype:ne.FLOAT_MAT4,getValue:function(e){return e.model}}),czm_inverseModel:new Pt({size:1,datatype:ne.FLOAT_MAT4,getValue:function(e){return e.inverseModel}}),czm_view:new Pt({size:1,datatype:ne.FLOAT_MAT4,getValue:function(e){return e.view}}),czm_view3D:new Pt({size:1,datatype:ne.FLOAT_MAT4,getValue:function(e){return e.view3D}}),czm_viewRotation:new Pt({size:1,datatype:ne.FLOAT_MAT3,getValue:function(e){return e.viewRotation}}),czm_viewRotation3D:new Pt({size:1,datatype:ne.FLOAT_MAT3,getValue:function(e){return e.viewRotation3D}}),czm_inverseView:new Pt({size:1,datatype:ne.FLOAT_MAT4,getValue:function(e){return e.inverseView}}),czm_inverseView3D:new Pt({size:1,datatype:ne.FLOAT_MAT4,getValue:function(e){return e.inverseView3D}}),czm_inverseViewRotation:new Pt({size:1,datatype:ne.FLOAT_MAT3,getValue:function(e){return e.inverseViewRotation}}),czm_inverseViewRotation3D:new Pt({size:1,datatype:ne.FLOAT_MAT3,getValue:function(e){return e.inverseViewRotation3D}}),czm_projection:new Pt({size:1,datatype:ne.FLOAT_MAT4,getValue:function(e){return e.projection}}),czm_inverseProjection:new Pt({size:1,datatype:ne.FLOAT_MAT4,getValue:function(e){return e.inverseProjection}}),czm_infiniteProjection:new Pt({size:1,datatype:ne.FLOAT_MAT4,getValue:function(e){return e.infiniteProjection}}),czm_modelView:new Pt({size:1,datatype:ne.FLOAT_MAT4,getValue:function(e){return e.modelView}}),czm_modelView3D:new Pt({size:1,datatype:ne.FLOAT_MAT4,getValue:function(e){return e.modelView3D}}),czm_modelViewRelativeToEye:new Pt({size:1,datatype:ne.FLOAT_MAT4,getValue:function(e){return e.modelViewRelativeToEye}}),czm_inverseModelView:new Pt({size:1,datatype:ne.FLOAT_MAT4,getValue:function(e){return e.inverseModelView}}),czm_inverseModelView3D:new Pt({size:1,datatype:ne.FLOAT_MAT4,getValue:function(e){return e.inverseModelView3D}}),czm_viewProjection:new Pt({size:1,datatype:ne.FLOAT_MAT4,getValue:function(e){return e.viewProjection}}),czm_inverseViewProjection:new Pt({size:1,datatype:ne.FLOAT_MAT4,getValue:function(e){return e.inverseViewProjection}}),czm_modelViewProjection:new Pt({size:1,datatype:ne.FLOAT_MAT4,getValue:function(e){return e.modelViewProjection}}),czm_inverseModelViewProjection:new Pt({size:1,datatype:ne.FLOAT_MAT4,getValue:function(e){return e.inverseModelViewProjection}}),czm_modelViewProjectionRelativeToEye:new Pt({size:1,datatype:ne.FLOAT_MAT4,getValue:function(e){return e.modelViewProjectionRelativeToEye}}),czm_modelViewInfiniteProjection:new Pt({size:1,datatype:ne.FLOAT_MAT4,getValue:function(e){return e.modelViewInfiniteProjection}}),czm_orthographicIn3D:new Pt({size:1,datatype:ne.FLOAT,getValue:function(e){return e.orthographicIn3D?1:0}}),czm_normal:new Pt({size:1,datatype:ne.FLOAT_MAT3,getValue:function(e){return e.normal}}),czm_normal3D:new Pt({size:1,datatype:ne.FLOAT_MAT3,getValue:function(e){return e.normal3D}}),czm_inverseNormal:new Pt({size:1,datatype:ne.FLOAT_MAT3,getValue:function(e){return e.inverseNormal}}),czm_inverseNormal3D:new Pt({size:1,datatype:ne.FLOAT_MAT3,getValue:function(e){return e.inverseNormal3D}}),czm_eyeHeight:new Pt({size:1,datatype:ne.FLOAT,getValue:function(e){return e.eyeHeight}}),czm_eyeHeight2D:new Pt({size:1,datatype:ne.FLOAT_VEC2,getValue:function(e){return e.eyeHeight2D}}),czm_eyeEllipsoidNormalEC:new Pt({size:1,datatype:ne.FLOAT_VEC3,getValue:function(e){return e.eyeEllipsoidNormalEC}}),czm_eyeEllipsoidCurvature:new Pt({size:1,datatype:ne.FLOAT_VEC2,getValue:function(e){return e.eyeEllipsoidCurvature}}),czm_modelToEnu:new Pt({size:1,datatype:ne.FLOAT_MAT4,getValue:function(e){return e.modelToEnu}}),czm_enuToModel:new Pt({size:1,datatype:ne.FLOAT_MAT4,getValue:function(e){return e.enuToModel}}),czm_entireFrustum:new Pt({size:1,datatype:ne.FLOAT_VEC2,getValue:function(e){return e.entireFrustum}}),czm_currentFrustum:new Pt({size:1,datatype:ne.FLOAT_VEC2,getValue:function(e){return e.currentFrustum}}),czm_frustumPlanes:new Pt({size:1,datatype:ne.FLOAT_VEC4,getValue:function(e){return e.frustumPlanes}}),czm_farDepthFromNearPlusOne:new Pt({size:1,datatype:ne.FLOAT,getValue:function(e){return e.farDepthFromNearPlusOne}}),czm_log2FarDepthFromNearPlusOne:new Pt({size:1,datatype:ne.FLOAT,getValue:function(e){return e.log2FarDepthFromNearPlusOne}}),czm_oneOverLog2FarDepthFromNearPlusOne:new Pt({size:1,datatype:ne.FLOAT,getValue:function(e){return e.oneOverLog2FarDepthFromNearPlusOne}}),czm_sunPositionWC:new Pt({size:1,datatype:ne.FLOAT_VEC3,getValue:function(e){return e.sunPositionWC}}),czm_sunPositionColumbusView:new Pt({size:1,datatype:ne.FLOAT_VEC3,getValue:function(e){return e.sunPositionColumbusView}}),czm_sunDirectionEC:new Pt({size:1,datatype:ne.FLOAT_VEC3,getValue:function(e){return e.sunDirectionEC}}),czm_sunDirectionWC:new Pt({size:1,datatype:ne.FLOAT_VEC3,getValue:function(e){return e.sunDirectionWC}}),czm_moonDirectionEC:new Pt({size:1,datatype:ne.FLOAT_VEC3,getValue:function(e){return e.moonDirectionEC}}),czm_lightDirectionEC:new Pt({size:1,datatype:ne.FLOAT_VEC3,getValue:function(e){return e.lightDirectionEC}}),czm_lightDirectionWC:new Pt({size:1,datatype:ne.FLOAT_VEC3,getValue:function(e){return e.lightDirectionWC}}),czm_lightColor:new Pt({size:1,datatype:ne.FLOAT_VEC3,getValue:function(e){return e.lightColor}}),czm_lightColorHdr:new Pt({size:1,datatype:ne.FLOAT_VEC3,getValue:function(e){return e.lightColorHdr}}),czm_encodedCameraPositionMCHigh:new Pt({size:1,datatype:ne.FLOAT_VEC3,getValue:function(e){return e.encodedCameraPositionMCHigh}}),czm_encodedCameraPositionMCLow:new Pt({size:1,datatype:ne.FLOAT_VEC3,getValue:function(e){return e.encodedCameraPositionMCLow}}),czm_viewerPositionWC:new Pt({size:1,datatype:ne.FLOAT_VEC3,getValue:function(e){return F.getTranslation(e.inverseView,KGe)}}),czm_frameNumber:new Pt({size:1,datatype:ne.FLOAT,getValue:function(e){return e.frameState.frameNumber}}),czm_morphTime:new Pt({size:1,datatype:ne.FLOAT,getValue:function(e){return e.frameState.morphTime}}),czm_sceneMode:new Pt({size:1,datatype:ne.FLOAT,getValue:function(e){return e.frameState.mode}}),czm_pass:new Pt({size:1,datatype:ne.FLOAT,getValue:function(e){return e.pass}}),czm_backgroundColor:new Pt({size:1,datatype:ne.FLOAT_VEC4,getValue:function(e){return e.backgroundColor}}),czm_brdfLut:new Pt({size:1,datatype:ne.SAMPLER_2D,getValue:function(e){return e.brdfLut}}),czm_environmentMap:new Pt({size:1,datatype:ne.SAMPLER_CUBE,getValue:function(e){return e.environmentMap}}),czm_specularEnvironmentMaps:new Pt({size:1,datatype:ne.SAMPLER_CUBE,getValue:function(e){return e.specularEnvironmentMaps}}),czm_specularEnvironmentMapsMaximumLOD:new Pt({size:1,datatype:ne.FLOAT,getValue:function(e){return e.specularEnvironmentMapsMaximumLOD}}),czm_sphericalHarmonicCoefficients:new Pt({size:9,datatype:ne.FLOAT_VEC3,getValue:function(e){return e.sphericalHarmonicCoefficients}}),czm_temeToPseudoFixed:new Pt({size:1,datatype:ne.FLOAT_MAT3,getValue:function(e){return e.temeToPseudoFixedMatrix}}),czm_pixelRatio:new Pt({size:1,datatype:ne.FLOAT,getValue:function(e){return e.pixelRatio}}),czm_fogDensity:new Pt({size:1,datatype:ne.FLOAT,getValue:function(e){return e.fogDensity}}),czm_fogVisualDensityScalar:new Pt({size:1,datatype:ne.FLOAT,getValue:function(e){return e.fogVisualDensityScalar}}),czm_fogMinimumBrightness:new Pt({size:1,datatype:ne.FLOAT,getValue:function(e){return e.fogMinimumBrightness}}),czm_atmosphereHsbShift:new Pt({size:1,datatype:ne.FLOAT_VEC3,getValue:function(e){return e.atmosphereHsbShift}}),czm_atmosphereLightIntensity:new Pt({size:1,datatype:ne.FLOAT,getValue:function(e){return e.atmosphereLightIntensity}}),czm_atmosphereRayleighCoefficient:new Pt({size:1,datatype:ne.FLOAT_VEC3,getValue:function(e){return e.atmosphereRayleighCoefficient}}),czm_atmosphereRayleighScaleHeight:new Pt({size:1,datatype:ne.FLOAT,getValue:function(e){return e.atmosphereRayleighScaleHeight}}),czm_atmosphereMieCoefficient:new Pt({size:1,datatype:ne.FLOAT_VEC3,getValue:function(e){return e.atmosphereMieCoefficient}}),czm_atmosphereMieScaleHeight:new Pt({size:1,datatype:ne.FLOAT,getValue:function(e){return e.atmosphereMieScaleHeight}}),czm_atmosphereMieAnisotropy:new Pt({size:1,datatype:ne.FLOAT,getValue:function(e){return e.atmosphereMieAnisotropy}}),czm_atmosphereDynamicLighting:new Pt({size:1,datatype:ne.FLOAT,getValue:function(e){return e.atmosphereDynamicLighting}}),czm_splitPosition:new Pt({size:1,datatype:ne.FLOAT,getValue:function(e){return e.splitPosition}}),czm_geometricToleranceOverMeter:new Pt({size:1,datatype:ne.FLOAT,getValue:function(e){return e.geometricToleranceOverMeter}}),czm_minimumDisableDepthTestDistance:new Pt({size:1,datatype:ne.FLOAT,getValue:function(e){return e.minimumDisableDepthTestDistance}}),czm_invertClassificationColor:new Pt({size:1,datatype:ne.FLOAT_VEC4,getValue:function(e){return e.invertClassificationColor}}),czm_gamma:new Pt({size:1,datatype:ne.FLOAT,getValue:function(e){return e.gamma}}),czm_ellipsoidRadii:new Pt({size:1,datatype:ne.FLOAT_VEC3,getValue:function(e){return e.ellipsoid.radii}}),czm_ellipsoidInverseRadii:new Pt({size:1,datatype:ne.FLOAT_VEC3,getValue:function(e){return e.ellipsoid.oneOverRadii}})},yA=jGe;var nwt=y(x(),1);var PBt=y(x(),1);function qGe(){return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,function(e){let t=Math.random()*16|0;return(e==="x"?t:t&3|8).toString(16)})}var qn=qGe;var YBt=y(x(),1);function $Ge(){return!0}function eLe(e,t){t=t??"This object was destroyed, i.e., destroy() was called.";function n(){}for(let i in e)typeof e[i]=="function"&&(e[i]=n);e.isDestroyed=$Ge}var he=eLe;var kBt=y(x(),1);var Sa={UNSIGNED_BYTE:ne.UNSIGNED_BYTE,UNSIGNED_SHORT:ne.UNSIGNED_SHORT,UNSIGNED_INT:ne.UNSIGNED_INT};Sa.getSizeInBytes=function(e){switch(e){case Sa.UNSIGNED_BYTE:return Uint8Array.BYTES_PER_ELEMENT;case Sa.UNSIGNED_SHORT:return Uint16Array.BYTES_PER_ELEMENT;case Sa.UNSIGNED_INT:return Uint32Array.BYTES_PER_ELEMENT}};Sa.fromSizeInBytes=function(e){switch(e){case 2:return Sa.UNSIGNED_SHORT;case 4:return Sa.UNSIGNED_INT;case 1:return Sa.UNSIGNED_BYTE}};Sa.validate=function(e){return l(e)&&(e===Sa.UNSIGNED_BYTE||e===Sa.UNSIGNED_SHORT||e===Sa.UNSIGNED_INT)};Sa.createTypedArray=function(e,t){return e>=L.SIXTY_FOUR_KILOBYTES?new Uint32Array(t):new Uint16Array(t)};Sa.createTypedArrayFromArrayBuffer=function(e,t,n,i){return e>=L.SIXTY_FOUR_KILOBYTES?new Uint32Array(t,n,i):new Uint16Array(t,n,i)};Sa.fromTypedArray=function(e){if(e instanceof Uint8Array)return Sa.UNSIGNED_BYTE;if(e instanceof Uint16Array)return Sa.UNSIGNED_SHORT;if(e instanceof Uint32Array)return Sa.UNSIGNED_INT};var Ue=Object.freeze(Sa);var zBt=y(x(),1);var ZR={STREAM_DRAW:ne.STREAM_DRAW,STATIC_DRAW:ne.STATIC_DRAW,DYNAMIC_DRAW:ne.DYNAMIC_DRAW,DYNAMIC_READ:ne.DYNAMIC_READ,validate:function(e){return e===ZR.STREAM_DRAW||e===ZR.STATIC_DRAW||e===ZR.DYNAMIC_DRAW||e===ZR.DYNAMIC_READ}},Be=Object.freeze(ZR);function Pc(e){e=e??Q.EMPTY_OBJECT;let t=e.context._gl,n=e.bufferTarget,i=e.typedArray,o=e.sizeInBytes,r=e.usage,s=l(i);s&&(o=i.byteLength);let a=t.createBuffer();t.bindBuffer(n,a),t.bufferData(n,s?i:o,r),t.bindBuffer(n,null),this._id=qn(),this._gl=t,this._webgl2=e.context._webgl2,this._bufferTarget=n,this._sizeInBytes=o,this._usage=r,this._buffer=a,this.vertexArrayDestroyable=!0}Pc.createPixelBuffer=function(e){if(!e.context._webgl2)throw new fe("A WebGL 2 context is required to create PixelBuffers.");return new Pc({context:e.context,bufferTarget:ne.PIXEL_PACK_BUFFER,typedArray:e.typedArray,sizeInBytes:e.sizeInBytes,usage:e.usage})};Pc.createVertexBuffer=function(e){return new Pc({context:e.context,bufferTarget:ne.ARRAY_BUFFER,typedArray:e.typedArray,sizeInBytes:e.sizeInBytes,usage:e.usage})};Pc.createIndexBuffer=function(e){let t=e.context,n=e.indexDatatype,i=Ue.getSizeInBytes(n),o=new Pc({context:t,bufferTarget:ne.ELEMENT_ARRAY_BUFFER,typedArray:e.typedArray,sizeInBytes:e.sizeInBytes,usage:e.usage}),r=o.sizeInBytes/i;return Object.defineProperties(o,{indexDatatype:{get:function(){return n}},bytesPerIndex:{get:function(){return i}},numberOfIndices:{get:function(){return r}}}),o};Object.defineProperties(Pc.prototype,{sizeInBytes:{get:function(){return this._sizeInBytes}},usage:{get:function(){return this._usage}}});Pc.prototype._getBuffer=function(){return this._buffer};Pc.prototype._bind=function(){let e=this._gl,t=this._bufferTarget;e.bindBuffer(t,this._buffer)};Pc.prototype._unBind=function(){let e=this._gl,t=this._bufferTarget;e.bindBuffer(t,null)};Pc.prototype.copyFromArrayView=function(e,t){t=t??0;let n=this._gl,i=this._bufferTarget;n.bindBuffer(i,this._buffer),n.bufferSubData(i,t,e),n.bindBuffer(i,null)};Pc.prototype.copyFromBuffer=function(e,t,n,i){let o=ne.COPY_READ_BUFFER,r=ne.COPY_WRITE_BUFFER,s=this._gl;s.bindBuffer(r,this._buffer),s.bindBuffer(o,e._buffer),s.copyBufferSubData(o,r,t,n,i),s.bindBuffer(r,null),s.bindBuffer(o,null)};Pc.prototype.getBufferData=function(e,t,n,i){t=t??0,n=n??0;let o=this._gl,r=ne.COPY_READ_BUFFER;o.bindBuffer(r,this._buffer),o.getBufferSubData(r,t,e,n,i),o.bindBuffer(r,null)};Pc.prototype.isDestroyed=function(){return!1};Pc.prototype.destroy=function(){return this._gl.deleteBuffer(this._buffer),he(this)};var it=Pc;var ywt=y(x(),1);var pwt=y(x(),1);var lwt=y(x(),1);var rwt=y(x(),1);var Mb,is={requestFullscreen:void 0,exitFullscreen:void 0,fullscreenEnabled:void 0,fullscreenElement:void 0,fullscreenchange:void 0,fullscreenerror:void 0},ld={};Object.defineProperties(ld,{element:{get:function(){if(ld.supportsFullscreen())return document[is.fullscreenElement]}},changeEventName:{get:function(){if(ld.supportsFullscreen())return is.fullscreenchange}},errorEventName:{get:function(){if(ld.supportsFullscreen())return is.fullscreenerror}},enabled:{get:function(){if(ld.supportsFullscreen())return document[is.fullscreenEnabled]}},fullscreen:{get:function(){if(ld.supportsFullscreen())return ld.element!==null}}});ld.supportsFullscreen=function(){if(l(Mb))return Mb;Mb=!1;let e=document.body;if(typeof e.requestFullscreen=="function")return is.requestFullscreen="requestFullscreen",is.exitFullscreen="exitFullscreen",is.fullscreenEnabled="fullscreenEnabled",is.fullscreenElement="fullscreenElement",is.fullscreenchange="fullscreenchange",is.fullscreenerror="fullscreenerror",Mb=!0,Mb;let t=["webkit","moz","o","ms","khtml"],n;for(let i=0,o=t.length;i<o;++i){let r=t[i];n=`${r}RequestFullscreen`,typeof e[n]=="function"?(is.requestFullscreen=n,Mb=!0):(n=`${r}RequestFullScreen`,typeof e[n]=="function"&&(is.requestFullscreen=n,Mb=!0)),n=`${r}ExitFullscreen`,typeof document[n]=="function"?is.exitFullscreen=n:(n=`${r}CancelFullScreen`,typeof document[n]=="function"&&(is.exitFullscreen=n)),n=`${r}FullscreenEnabled`,document[n]!==void 0?is.fullscreenEnabled=n:(n=`${r}FullScreenEnabled`,document[n]!==void 0&&(is.fullscreenEnabled=n)),n=`${r}FullscreenElement`,document[n]!==void 0?is.fullscreenElement=n:(n=`${r}FullScreenElement`,document[n]!==void 0&&(is.fullscreenElement=n)),n=`${r}fullscreenchange`,document[`on${n}`]!==void 0&&(r==="ms"&&(n="MSFullscreenChange"),is.fullscreenchange=n),n=`${r}fullscreenerror`,document[`on${n}`]!==void 0&&(r==="ms"&&(n="MSFullscreenError"),is.fullscreenerror=n)}return Mb};ld.requestFullscreen=function(e,t){ld.supportsFullscreen()&&e[is.requestFullscreen]({vrDisplay:t})};ld.exitFullscreen=function(){ld.supportsFullscreen()&&document[is.exitFullscreen]()};ld._names=is;var Dr=ld;var om;typeof navigator<"u"?om=navigator:om={};function RR(e){let t=e.split(".");for(let n=0,i=t.length;n<i;++n)t[n]=parseInt(t[n],10);return t}var JU,Vie;function u3(){if(!l(JU)&&(JU=!1,!tD())){let e=/ Chrome\/([\.0-9]+)/.exec(om.userAgent);e!==null&&(JU=!0,Vie=RR(e[1]))}return JU}function tLe(){return u3()&&Vie}var KU,Gie;function Lie(){if(!l(KU)&&(KU=!1,!u3()&&!tD()&&/ Safari\/[\.0-9]+/.test(om.userAgent))){let e=/ Version\/([\.0-9]+)/.exec(om.userAgent);e!==null&&(KU=!0,Gie=RR(e[1]))}return KU}function nLe(){return Lie()&&Gie}var jU,d3;function Wie(){if(!l(jU)){jU=!1;let e=/ AppleWebKit\/([\.0-9]+)(\+?)/.exec(om.userAgent);e!==null&&(jU=!0,d3=RR(e[1]),d3.isNightly=!!e[2])}return jU}function iLe(){return Wie()&&d3}var qU,Fie;function tD(){if(!l(qU)){qU=!1;let e=/ Edg\/([\.0-9]+)/.exec(om.userAgent);e!==null&&(qU=!0,Fie=RR(e[1]))}return qU}function oLe(){return tD()&&Fie}var $U,m3;function nD(){if(!l($U)){$U=!1;let e=/Firefox\/([\.0-9]+)/.exec(om.userAgent);e!==null&&($U=!0,m3=RR(e[1]))}return $U}var a3;function rLe(){return l(a3)||(a3=/Windows/i.test(om.appVersion)),a3}var c3;function sLe(){return l(c3)||(c3=navigator.platform==="iPhone"||navigator.platform==="iPod"||navigator.platform==="iPad"),c3}function aLe(){return nD()&&m3}var l3;function cLe(){return l(l3)||(l3=!nD()&&typeof PointerEvent<"u"&&(!l(om.pointerEnabled)||om.pointerEnabled)),l3}var Bie,eD;function wie(){if(!l(eD)){let e=document.createElement("canvas");e.setAttribute("style","image-rendering: -moz-crisp-edges;image-rendering: pixelated;");let t=e.style.imageRendering;eD=l(t)&&t!=="",eD&&(Bie=t)}return eD}function lLe(){return wie()?Bie:void 0}function bl(){return bl._result}bl._promise=void 0;bl._result=void 0;bl.initialize=function(){return l(bl._promise)||(bl._promise=new Promise(e=>{let t=new Image;t.onload=function(){bl._result=t.width>0&&t.height>0,e(bl._result)},t.onerror=function(){bl._result=!1,e(bl._result)},t.src="data:image/webp;base64,UklGRiIAAABXRUJQVlA4IBYAAAAwAQCdASoBAAEADsD+JaQAA3AAAAAA"})),bl._promise};Object.defineProperties(bl,{initialized:{get:function(){return l(bl._result)}}});var nS=[];typeof ArrayBuffer<"u"&&(nS.push(Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array),typeof Uint8ClampedArray<"u"&&nS.push(Uint8ClampedArray),typeof Uint8ClampedArray<"u"&&nS.push(Uint8ClampedArray),typeof BigInt64Array<"u"&&nS.push(BigInt64Array),typeof BigUint64Array<"u"&&nS.push(BigUint64Array));var rm={isChrome:u3,chromeVersion:tLe,isSafari:Lie,safariVersion:nLe,isWebkit:Wie,webkitVersion:iLe,isEdge:tD,edgeVersion:oLe,isFirefox:nD,firefoxVersion:aLe,isWindows:rLe,isIPadOrIOS:sLe,hardwareConcurrency:om.hardwareConcurrency??3,supportsPointerEvents:cLe,supportsImageRenderingPixelated:wie,supportsWebP:bl,imageRenderingValue:lLe,typedArrayTypes:nS};rm.supportsBasis=function(e){return rm.supportsWebAssembly()&&e.context.supportsBasis};rm.supportsFullscreen=function(){return Dr.supportsFullscreen()};rm.supportsTypedArrays=function(){return typeof ArrayBuffer<"u"};rm.supportsBigInt64Array=function(){return typeof BigInt64Array<"u"};rm.supportsBigUint64Array=function(){return typeof BigUint64Array<"u"};rm.supportsBigInt=function(){return typeof BigInt<"u"};rm.supportsWebWorkers=function(){return typeof Worker<"u"};rm.supportsWebAssembly=function(){return typeof WebAssembly<"u"};rm.supportsWebgl2=function(e){return e.context.webgl2};rm.supportsEsmWebWorkers=function(){return!nD()||parseInt(m3)>=114};var hn=rm;function h3(e,t,n){return n<0&&(n+=1),n>1&&(n-=1),n*6<1?e+(t-e)*6*n:n*2<1?t:n*3<2?e+(t-e)*(2/3-n)*6:e}function le(e,t,n,i){this.red=e??1,this.green=t??1,this.blue=n??1,this.alpha=i??1}le.fromCartesian4=function(e,t){return l(t)?(t.red=e.x,t.green=e.y,t.blue=e.z,t.alpha=e.w,t):new le(e.x,e.y,e.z,e.w)};le.fromBytes=function(e,t,n,i,o){return e=le.byteToFloat(e??255),t=le.byteToFloat(t??255),n=le.byteToFloat(n??255),i=le.byteToFloat(i??255),l(o)?(o.red=e,o.green=t,o.blue=n,o.alpha=i,o):new le(e,t,n,i)};le.fromAlpha=function(e,t,n){return l(n)?(n.red=e.red,n.green=e.green,n.blue=e.blue,n.alpha=t,n):new le(e.red,e.green,e.blue,t)};var f3,p3,xA;hn.supportsTypedArrays()&&(f3=new ArrayBuffer(4),p3=new Uint32Array(f3),xA=new Uint8Array(f3));le.fromRgba=function(e,t){return p3[0]=e,le.fromBytes(xA[0],xA[1],xA[2],xA[3],t)};le.fromHsl=function(e,t,n,i,o){e=(e??0)%1,t=t??0,n=n??0,i=i??1;let r=n,s=n,a=n;if(t!==0){let c;n<.5?c=n*(1+t):c=n+t-n*t;let d=2*n-c;r=h3(d,c,e+1/3),s=h3(d,c,e),a=h3(d,c,e-1/3)}return l(o)?(o.red=r,o.green=s,o.blue=a,o.alpha=i,o):new le(r,s,a,i)};le.fromRandom=function(e,t){e=e??Q.EMPTY_OBJECT;let n=e.red;if(!l(n)){let s=e.minimumRed??0,a=e.maximumRed??1;n=s+L.nextRandomNumber()*(a-s)}let i=e.green;if(!l(i)){let s=e.minimumGreen??0,a=e.maximumGreen??1;i=s+L.nextRandomNumber()*(a-s)}let o=e.blue;if(!l(o)){let s=e.minimumBlue??0,a=e.maximumBlue??1;o=s+L.nextRandomNumber()*(a-s)}let r=e.alpha;if(!l(r)){let s=e.minimumAlpha??0,a=e.maximumAlpha??1;r=s+L.nextRandomNumber()*(a-s)}return l(t)?(t.red=n,t.green=i,t.blue=o,t.alpha=r,t):new le(n,i,o,r)};var dLe=/^#([0-9a-f])([0-9a-f])([0-9a-f])([0-9a-f])?$/i,uLe=/^#([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})?$/i,mLe=/^rgba?\s*\(\s*([0-9.]+%?)\s*[,\s]+\s*([0-9.]+%?)\s*[,\s]+\s*([0-9.]+%?)(?:\s*[,\s/]+\s*([0-9.]+))?\s*\)$/i,hLe=/^hsla?\s*\(\s*([0-9.]+)\s*[,\s]+\s*([0-9.]+%)\s*[,\s]+\s*([0-9.]+%)(?:\s*[,\s/]+\s*([0-9.]+))?\s*\)$/i;le.fromCssColorString=function(e,t){l(t)||(t=new le),e=e.trim();let n=le[e.toUpperCase()];if(l(n))return le.clone(n,t),t;let i=dLe.exec(e);return i!==null?(t.red=parseInt(i[1],16)/15,t.green=parseInt(i[2],16)/15,t.blue=parseInt(i[3],16)/15,t.alpha=parseInt(i[4]??"f",16)/15,t):(i=uLe.exec(e),i!==null?(t.red=parseInt(i[1],16)/255,t.green=parseInt(i[2],16)/255,t.blue=parseInt(i[3],16)/255,t.alpha=parseInt(i[4]??"ff",16)/255,t):(i=mLe.exec(e),i!==null?(t.red=parseFloat(i[1])/(i[1].substr(-1)==="%"?100:255),t.green=parseFloat(i[2])/(i[2].substr(-1)==="%"?100:255),t.blue=parseFloat(i[3])/(i[3].substr(-1)==="%"?100:255),t.alpha=parseFloat(i[4]??"1.0"),t):(i=hLe.exec(e),i!==null?le.fromHsl(parseFloat(i[1])/360,parseFloat(i[2])/100,parseFloat(i[3])/100,parseFloat(i[4]??"1.0"),t):(t=void 0,t))))};le.packedLength=4;le.pack=function(e,t,n){return n=n??0,t[n++]=e.red,t[n++]=e.green,t[n++]=e.blue,t[n]=e.alpha,t};le.unpack=function(e,t,n){return t=t??0,l(n)||(n=new le),n.red=e[t++],n.green=e[t++],n.blue=e[t++],n.alpha=e[t],n};le.byteToFloat=function(e){return e/255};le.floatToByte=function(e){return e===1?255:e*256|0};le.clone=function(e,t){if(l(e))return l(t)?(t.red=e.red,t.green=e.green,t.blue=e.blue,t.alpha=e.alpha,t):new le(e.red,e.green,e.blue,e.alpha)};le.equals=function(e,t){return e===t||l(e)&&l(t)&&e.red===t.red&&e.green===t.green&&e.blue===t.blue&&e.alpha===t.alpha};le.equalsArray=function(e,t,n){return e.red===t[n]&&e.green===t[n+1]&&e.blue===t[n+2]&&e.alpha===t[n+3]};le.prototype.clone=function(e){return le.clone(this,e)};le.prototype.equals=function(e){return le.equals(this,e)};le.prototype.equalsEpsilon=function(e,t){return this===e||l(e)&&Math.abs(this.red-e.red)<=t&&Math.abs(this.green-e.green)<=t&&Math.abs(this.blue-e.blue)<=t&&Math.abs(this.alpha-e.alpha)<=t};le.prototype.toString=function(){return`(${this.red}, ${this.green}, ${this.blue}, ${this.alpha})`};le.prototype.toCssColorString=function(){let e=le.floatToByte(this.red),t=le.floatToByte(this.green),n=le.floatToByte(this.blue);return this.alpha===1?`rgb(${e},${t},${n})`:`rgba(${e},${t},${n},${this.alpha})`};le.prototype.toCssHexString=function(){let e=le.floatToByte(this.red).toString(16);e.length<2&&(e=`0${e}`);let t=le.floatToByte(this.green).toString(16);t.length<2&&(t=`0${t}`);let n=le.floatToByte(this.blue).toString(16);if(n.length<2&&(n=`0${n}`),this.alpha<1){let i=le.floatToByte(this.alpha).toString(16);return i.length<2&&(i=`0${i}`),`#${e}${t}${n}${i}`}return`#${e}${t}${n}`};le.prototype.toBytes=function(e){let t=le.floatToByte(this.red),n=le.floatToByte(this.green),i=le.floatToByte(this.blue),o=le.floatToByte(this.alpha);return l(e)?(e[0]=t,e[1]=n,e[2]=i,e[3]=o,e):[t,n,i,o]};le.bytesToRgba=function(e,t,n,i){return xA[0]=e,xA[1]=t,xA[2]=n,xA[3]=i,p3[0]};le.prototype.toRgba=function(){return le.bytesToRgba(le.floatToByte(this.red),le.floatToByte(this.green),le.floatToByte(this.blue),le.floatToByte(this.alpha))};le.prototype.brighten=function(e,t){return e=1-e,t.red=1-(1-this.red)*e,t.green=1-(1-this.green)*e,t.blue=1-(1-this.blue)*e,t.alpha=this.alpha,t};le.prototype.darken=function(e,t){return e=1-e,t.red=this.red*e,t.green=this.green*e,t.blue=this.blue*e,t.alpha=this.alpha,t};le.prototype.withAlpha=function(e,t){return le.fromAlpha(this,e,t)};le.add=function(e,t,n){return n.red=e.red+t.red,n.green=e.green+t.green,n.blue=e.blue+t.blue,n.alpha=e.alpha+t.alpha,n};le.subtract=function(e,t,n){return n.red=e.red-t.red,n.green=e.green-t.green,n.blue=e.blue-t.blue,n.alpha=e.alpha-t.alpha,n};le.multiply=function(e,t,n){return n.red=e.red*t.red,n.green=e.green*t.green,n.blue=e.blue*t.blue,n.alpha=e.alpha*t.alpha,n};le.divide=function(e,t,n){return n.red=e.red/t.red,n.green=e.green/t.green,n.blue=e.blue/t.blue,n.alpha=e.alpha/t.alpha,n};le.mod=function(e,t,n){return n.red=e.red%t.red,n.green=e.green%t.green,n.blue=e.blue%t.blue,n.alpha=e.alpha%t.alpha,n};le.lerp=function(e,t,n,i){return i.red=L.lerp(e.red,t.red,n),i.green=L.lerp(e.green,t.green,n),i.blue=L.lerp(e.blue,t.blue,n),i.alpha=L.lerp(e.alpha,t.alpha,n),i};le.multiplyByScalar=function(e,t,n){return n.red=e.red*t,n.green=e.green*t,n.blue=e.blue*t,n.alpha=e.alpha*t,n};le.divideByScalar=function(e,t,n){return n.red=e.red/t,n.green=e.green/t,n.blue=e.blue/t,n.alpha=e.alpha/t,n};le.ALICEBLUE=Object.freeze(le.fromCssColorString("#F0F8FF"));le.ANTIQUEWHITE=Object.freeze(le.fromCssColorString("#FAEBD7"));le.AQUA=Object.freeze(le.fromCssColorString("#00FFFF"));le.AQUAMARINE=Object.freeze(le.fromCssColorString("#7FFFD4"));le.AZURE=Object.freeze(le.fromCssColorString("#F0FFFF"));le.BEIGE=Object.freeze(le.fromCssColorString("#F5F5DC"));le.BISQUE=Object.freeze(le.fromCssColorString("#FFE4C4"));le.BLACK=Object.freeze(le.fromCssColorString("#000000"));le.BLANCHEDALMOND=Object.freeze(le.fromCssColorString("#FFEBCD"));le.BLUE=Object.freeze(le.fromCssColorString("#0000FF"));le.BLUEVIOLET=Object.freeze(le.fromCssColorString("#8A2BE2"));le.BROWN=Object.freeze(le.fromCssColorString("#A52A2A"));le.BURLYWOOD=Object.freeze(le.fromCssColorString("#DEB887"));le.CADETBLUE=Object.freeze(le.fromCssColorString("#5F9EA0"));le.CHARTREUSE=Object.freeze(le.fromCssColorString("#7FFF00"));le.CHOCOLATE=Object.freeze(le.fromCssColorString("#D2691E"));le.CORAL=Object.freeze(le.fromCssColorString("#FF7F50"));le.CORNFLOWERBLUE=Object.freeze(le.fromCssColorString("#6495ED"));le.CORNSILK=Object.freeze(le.fromCssColorString("#FFF8DC"));le.CRIMSON=Object.freeze(le.fromCssColorString("#DC143C"));le.CYAN=Object.freeze(le.fromCssColorString("#00FFFF"));le.DARKBLUE=Object.freeze(le.fromCssColorString("#00008B"));le.DARKCYAN=Object.freeze(le.fromCssColorString("#008B8B"));le.DARKGOLDENROD=Object.freeze(le.fromCssColorString("#B8860B"));le.DARKGRAY=Object.freeze(le.fromCssColorString("#A9A9A9"));le.DARKGREEN=Object.freeze(le.fromCssColorString("#006400"));le.DARKGREY=le.DARKGRAY;le.DARKKHAKI=Object.freeze(le.fromCssColorString("#BDB76B"));le.DARKMAGENTA=Object.freeze(le.fromCssColorString("#8B008B"));le.DARKOLIVEGREEN=Object.freeze(le.fromCssColorString("#556B2F"));le.DARKORANGE=Object.freeze(le.fromCssColorString("#FF8C00"));le.DARKORCHID=Object.freeze(le.fromCssColorString("#9932CC"));le.DARKRED=Object.freeze(le.fromCssColorString("#8B0000"));le.DARKSALMON=Object.freeze(le.fromCssColorString("#E9967A"));le.DARKSEAGREEN=Object.freeze(le.fromCssColorString("#8FBC8F"));le.DARKSLATEBLUE=Object.freeze(le.fromCssColorString("#483D8B"));le.DARKSLATEGRAY=Object.freeze(le.fromCssColorString("#2F4F4F"));le.DARKSLATEGREY=le.DARKSLATEGRAY;le.DARKTURQUOISE=Object.freeze(le.fromCssColorString("#00CED1"));le.DARKVIOLET=Object.freeze(le.fromCssColorString("#9400D3"));le.DEEPPINK=Object.freeze(le.fromCssColorString("#FF1493"));le.DEEPSKYBLUE=Object.freeze(le.fromCssColorString("#00BFFF"));le.DIMGRAY=Object.freeze(le.fromCssColorString("#696969"));le.DIMGREY=le.DIMGRAY;le.DODGERBLUE=Object.freeze(le.fromCssColorString("#1E90FF"));le.FIREBRICK=Object.freeze(le.fromCssColorString("#B22222"));le.FLORALWHITE=Object.freeze(le.fromCssColorString("#FFFAF0"));le.FORESTGREEN=Object.freeze(le.fromCssColorString("#228B22"));le.FUCHSIA=Object.freeze(le.fromCssColorString("#FF00FF"));le.GAINSBORO=Object.freeze(le.fromCssColorString("#DCDCDC"));le.GHOSTWHITE=Object.freeze(le.fromCssColorString("#F8F8FF"));le.GOLD=Object.freeze(le.fromCssColorString("#FFD700"));le.GOLDENROD=Object.freeze(le.fromCssColorString("#DAA520"));le.GRAY=Object.freeze(le.fromCssColorString("#808080"));le.GREEN=Object.freeze(le.fromCssColorString("#008000"));le.GREENYELLOW=Object.freeze(le.fromCssColorString("#ADFF2F"));le.GREY=le.GRAY;le.HONEYDEW=Object.freeze(le.fromCssColorString("#F0FFF0"));le.HOTPINK=Object.freeze(le.fromCssColorString("#FF69B4"));le.INDIANRED=Object.freeze(le.fromCssColorString("#CD5C5C"));le.INDIGO=Object.freeze(le.fromCssColorString("#4B0082"));le.IVORY=Object.freeze(le.fromCssColorString("#FFFFF0"));le.KHAKI=Object.freeze(le.fromCssColorString("#F0E68C"));le.LAVENDER=Object.freeze(le.fromCssColorString("#E6E6FA"));le.LAVENDAR_BLUSH=Object.freeze(le.fromCssColorString("#FFF0F5"));le.LAWNGREEN=Object.freeze(le.fromCssColorString("#7CFC00"));le.LEMONCHIFFON=Object.freeze(le.fromCssColorString("#FFFACD"));le.LIGHTBLUE=Object.freeze(le.fromCssColorString("#ADD8E6"));le.LIGHTCORAL=Object.freeze(le.fromCssColorString("#F08080"));le.LIGHTCYAN=Object.freeze(le.fromCssColorString("#E0FFFF"));le.LIGHTGOLDENRODYELLOW=Object.freeze(le.fromCssColorString("#FAFAD2"));le.LIGHTGRAY=Object.freeze(le.fromCssColorString("#D3D3D3"));le.LIGHTGREEN=Object.freeze(le.fromCssColorString("#90EE90"));le.LIGHTGREY=le.LIGHTGRAY;le.LIGHTPINK=Object.freeze(le.fromCssColorString("#FFB6C1"));le.LIGHTSEAGREEN=Object.freeze(le.fromCssColorString("#20B2AA"));le.LIGHTSKYBLUE=Object.freeze(le.fromCssColorString("#87CEFA"));le.LIGHTSLATEGRAY=Object.freeze(le.fromCssColorString("#778899"));le.LIGHTSLATEGREY=le.LIGHTSLATEGRAY;le.LIGHTSTEELBLUE=Object.freeze(le.fromCssColorString("#B0C4DE"));le.LIGHTYELLOW=Object.freeze(le.fromCssColorString("#FFFFE0"));le.LIME=Object.freeze(le.fromCssColorString("#00FF00"));le.LIMEGREEN=Object.freeze(le.fromCssColorString("#32CD32"));le.LINEN=Object.freeze(le.fromCssColorString("#FAF0E6"));le.MAGENTA=Object.freeze(le.fromCssColorString("#FF00FF"));le.MAROON=Object.freeze(le.fromCssColorString("#800000"));le.MEDIUMAQUAMARINE=Object.freeze(le.fromCssColorString("#66CDAA"));le.MEDIUMBLUE=Object.freeze(le.fromCssColorString("#0000CD"));le.MEDIUMORCHID=Object.freeze(le.fromCssColorString("#BA55D3"));le.MEDIUMPURPLE=Object.freeze(le.fromCssColorString("#9370DB"));le.MEDIUMSEAGREEN=Object.freeze(le.fromCssColorString("#3CB371"));le.MEDIUMSLATEBLUE=Object.freeze(le.fromCssColorString("#7B68EE"));le.MEDIUMSPRINGGREEN=Object.freeze(le.fromCssColorString("#00FA9A"));le.MEDIUMTURQUOISE=Object.freeze(le.fromCssColorString("#48D1CC"));le.MEDIUMVIOLETRED=Object.freeze(le.fromCssColorString("#C71585"));le.MIDNIGHTBLUE=Object.freeze(le.fromCssColorString("#191970"));le.MINTCREAM=Object.freeze(le.fromCssColorString("#F5FFFA"));le.MISTYROSE=Object.freeze(le.fromCssColorString("#FFE4E1"));le.MOCCASIN=Object.freeze(le.fromCssColorString("#FFE4B5"));le.NAVAJOWHITE=Object.freeze(le.fromCssColorString("#FFDEAD"));le.NAVY=Object.freeze(le.fromCssColorString("#000080"));le.OLDLACE=Object.freeze(le.fromCssColorString("#FDF5E6"));le.OLIVE=Object.freeze(le.fromCssColorString("#808000"));le.OLIVEDRAB=Object.freeze(le.fromCssColorString("#6B8E23"));le.ORANGE=Object.freeze(le.fromCssColorString("#FFA500"));le.ORANGERED=Object.freeze(le.fromCssColorString("#FF4500"));le.ORCHID=Object.freeze(le.fromCssColorString("#DA70D6"));le.PALEGOLDENROD=Object.freeze(le.fromCssColorString("#EEE8AA"));le.PALEGREEN=Object.freeze(le.fromCssColorString("#98FB98"));le.PALETURQUOISE=Object.freeze(le.fromCssColorString("#AFEEEE"));le.PALEVIOLETRED=Object.freeze(le.fromCssColorString("#DB7093"));le.PAPAYAWHIP=Object.freeze(le.fromCssColorString("#FFEFD5"));le.PEACHPUFF=Object.freeze(le.fromCssColorString("#FFDAB9"));le.PERU=Object.freeze(le.fromCssColorString("#CD853F"));le.PINK=Object.freeze(le.fromCssColorString("#FFC0CB"));le.PLUM=Object.freeze(le.fromCssColorString("#DDA0DD"));le.POWDERBLUE=Object.freeze(le.fromCssColorString("#B0E0E6"));le.PURPLE=Object.freeze(le.fromCssColorString("#800080"));le.RED=Object.freeze(le.fromCssColorString("#FF0000"));le.ROSYBROWN=Object.freeze(le.fromCssColorString("#BC8F8F"));le.ROYALBLUE=Object.freeze(le.fromCssColorString("#4169E1"));le.SADDLEBROWN=Object.freeze(le.fromCssColorString("#8B4513"));le.SALMON=Object.freeze(le.fromCssColorString("#FA8072"));le.SANDYBROWN=Object.freeze(le.fromCssColorString("#F4A460"));le.SEAGREEN=Object.freeze(le.fromCssColorString("#2E8B57"));le.SEASHELL=Object.freeze(le.fromCssColorString("#FFF5EE"));le.SIENNA=Object.freeze(le.fromCssColorString("#A0522D"));le.SILVER=Object.freeze(le.fromCssColorString("#C0C0C0"));le.SKYBLUE=Object.freeze(le.fromCssColorString("#87CEEB"));le.SLATEBLUE=Object.freeze(le.fromCssColorString("#6A5ACD"));le.SLATEGRAY=Object.freeze(le.fromCssColorString("#708090"));le.SLATEGREY=le.SLATEGRAY;le.SNOW=Object.freeze(le.fromCssColorString("#FFFAFA"));le.SPRINGGREEN=Object.freeze(le.fromCssColorString("#00FF7F"));le.STEELBLUE=Object.freeze(le.fromCssColorString("#4682B4"));le.TAN=Object.freeze(le.fromCssColorString("#D2B48C"));le.TEAL=Object.freeze(le.fromCssColorString("#008080"));le.THISTLE=Object.freeze(le.fromCssColorString("#D8BFD8"));le.TOMATO=Object.freeze(le.fromCssColorString("#FF6347"));le.TURQUOISE=Object.freeze(le.fromCssColorString("#40E0D0"));le.VIOLET=Object.freeze(le.fromCssColorString("#EE82EE"));le.WHEAT=Object.freeze(le.fromCssColorString("#F5DEB3"));le.WHITE=Object.freeze(le.fromCssColorString("#FFFFFF"));le.WHITESMOKE=Object.freeze(le.fromCssColorString("#F5F5F5"));le.YELLOW=Object.freeze(le.fromCssColorString("#FFFF00"));le.YELLOWGREEN=Object.freeze(le.fromCssColorString("#9ACD32"));le.TRANSPARENT=Object.freeze(new le(0,0,0,0));var U=le;function iD(e){e=e??Q.EMPTY_OBJECT,this.color=e.color,this.depth=e.depth,this.stencil=e.stencil,this.renderState=e.renderState,this.framebuffer=e.framebuffer,this.owner=e.owner,this.pass=e.pass}iD.ALL=Object.freeze(new iD({color:new U(0,0,0,0),depth:1,stencil:0}));iD.prototype.execute=function(e,t){e.clear(this,t)};var mi=iD;var _wt=y(x(),1);var Cwt=y(x(),1),fLe={ENVIRONMENT:0,COMPUTE:1,GLOBE:2,TERRAIN_CLASSIFICATION:3,CESIUM_3D_TILE_EDGES:4,CESIUM_3D_TILE:5,CESIUM_3D_TILE_CLASSIFICATION:6,CESIUM_3D_TILE_CLASSIFICATION_IGNORE_SHOW:7,OPAQUE:8,TRANSLUCENT:9,VOXELS:10,GAUSSIAN_SPLATS:11,OVERLAY:12,NUMBER_OF_PASSES:13},Ge=Object.freeze(fLe);function Nie(e){e=e??Q.EMPTY_OBJECT,this.vertexArray=e.vertexArray,this.fragmentShaderSource=e.fragmentShaderSource,this.shaderProgram=e.shaderProgram,this.uniformMap=e.uniformMap,this.outputTexture=e.outputTexture,this.preExecute=e.preExecute,this.postExecute=e.postExecute,this.canceled=e.canceled,this.persists=e.persists??!1,this.pass=Ge.COMPUTE,this.owner=e.owner}Nie.prototype.execute=function(e){e.execute(this)};var yl=Nie;var xvt=y(x(),1);var vYt=y(x(),1);var Vwt=y(x(),1);var os=class e{constructor(t,n){this.x=t??0,this.y=n??0}static fromElements(t,n,i){return l(i)?(i.x=t,i.y=n,i):new e(t,n)}static clone(t,n){if(l(t))return l(n)?(n.x=t.x,n.y=t.y,n):new e(t.x,t.y)}static pack(t,n,i){return i=i??0,n[i++]=t.x,n[i]=t.y,n}static unpack(t,n,i){return n=n??0,l(i)||(i=new e),i.x=t[n++],i.y=t[n],i}static packArray(t,n){let i=t.length,o=i*2;l(n)?!Array.isArray(n)&&n.length!==o||n.length!==o&&(n.length=o):n=new Array(o);for(let r=0;r<i;++r)e.pack(t[r],n,r*2);return n}static unpackArray(t,n){let i=t.length;l(n)?n.length=i/2:n=new Array(i/2);for(let o=0;o<i;o+=2){let r=o/2;n[r]=e.unpack(t,o,n[r])}return n}static maximumComponent(t){return Math.max(t.x,t.y)}static minimumComponent(t){return Math.min(t.x,t.y)}static minimumByComponent(t,n,i){return i.x=Math.min(t.x,n.x),i.y=Math.min(t.y,n.y),i}static maximumByComponent(t,n,i){return i.x=Math.max(t.x,n.x),i.y=Math.max(t.y,n.y),i}static clamp(t,n,i,o){let r=L.clamp(t.x,n.x,i.x),s=L.clamp(t.y,n.y,i.y);return o.x=r,o.y=s,o}static magnitudeSquared(t){return t.x*t.x+t.y*t.y}static magnitude(t){return Math.sqrt(e.magnitudeSquared(t))}static distance(t,n){return e.subtract(t,n,oD),e.magnitude(oD)}static distanceSquared(t,n){return e.subtract(t,n,oD),e.magnitudeSquared(oD)}static normalize(t,n){let i=e.magnitude(t);return n.x=t.x/i,n.y=t.y/i,n}static dot(t,n){return t.x*n.x+t.y*n.y}static cross(t,n){return t.x*n.y-t.y*n.x}static multiplyComponents(t,n,i){return i.x=t.x*n.x,i.y=t.y*n.y,i}static divideComponents(t,n,i){return i.x=t.x/n.x,i.y=t.y/n.y,i}static add(t,n,i){return i.x=t.x+n.x,i.y=t.y+n.y,i}static subtract(t,n,i){return i.x=t.x-n.x,i.y=t.y-n.y,i}static multiplyByScalar(t,n,i){return i.x=t.x*n,i.y=t.y*n,i}static divideByScalar(t,n,i){return i.x=t.x/n,i.y=t.y/n,i}static negate(t,n){return n.x=-t.x,n.y=-t.y,n}static abs(t,n){return n.x=Math.abs(t.x),n.y=Math.abs(t.y),n}static lerp(t,n,i,o){return e.multiplyByScalar(n,i,Pie),o=e.multiplyByScalar(t,1-i,o),e.add(Pie,o,o)}static angleBetween(t,n){return e.normalize(t,Xie),e.normalize(n,Yie),L.acosClamped(e.dot(Xie,Yie))}static mostOrthogonalAxis(t,n){let i=e.normalize(t,pLe);return e.abs(i,i),i.x<=i.y?n=e.clone(e.UNIT_X,n):n=e.clone(e.UNIT_Y,n),n}static equals(t,n){return t===n||l(t)&&l(n)&&t.x===n.x&&t.y===n.y}static equalsArray(t,n,i){return t.x===n[i]&&t.y===n[i+1]}static equalsEpsilon(t,n,i,o){return t===n||l(t)&&l(n)&&L.equalsEpsilon(t.x,n.x,i,o)&&L.equalsEpsilon(t.y,n.y,i,o)}clone(t){return e.clone(this,t)}equals(t){return e.equals(this,t)}equalsEpsilon(t,n,i){return e.equalsEpsilon(this,t,n,i)}toString(){return`(${this.x}, ${this.y})`}};os.fromCartesian3=os.clone;os.fromCartesian4=os.clone;os.packedLength=2;os.fromArray=os.unpack;var oD=new os,Pie=new os,Xie=new os,Yie=new os,pLe=new os;os.ZERO=Object.freeze(new os(0,0));os.ONE=Object.freeze(new os(1,1));os.UNIT_X=Object.freeze(new os(1,0));os.UNIT_Y=Object.freeze(new os(0,1));var M=os;var Mwt=y(x(),1);var Bwt=y(x(),1);var ALe=new m,gLe=new m;function bLe(e,t,n,i,o){let r=e.x,s=e.y,a=e.z,c=t.x,d=t.y,u=t.z,h=r*r*c*c,p=s*s*d*d,A=a*a*u*u,f=h+p+A,b=Math.sqrt(1/f),C=m.multiplyByScalar(e,b,ALe);if(f<i)return isFinite(b)?m.clone(C,o):void 0;let T=n.x,E=n.y,S=n.z,I=gLe;I.x=C.x*T*2,I.y=C.y*E*2,I.z=C.z*S*2;let R=(1-b)*m.magnitude(e)/(.5*m.magnitude(I)),V=0,W,B,N,P,g,_,Z,G,w,X,k;do{R-=V,N=1/(1+R*T),P=1/(1+R*E),g=1/(1+R*S),_=N*N,Z=P*P,G=g*g,w=_*N,X=Z*P,k=G*g,W=h*_+p*Z+A*G-1,B=h*w*T+p*X*E+A*k*S;let v=-2*B;V=W/v}while(Math.abs(W)>L.EPSILON12);return l(o)?(o.x=r*N,o.y=s*P,o.z=a*g,o):new m(r*N,s*P,a*g)}var ax=bLe;function dr(e,t,n){this.longitude=e??0,this.latitude=t??0,this.height=n??0}dr.fromRadians=function(e,t,n,i){return n=n??0,l(i)?(i.longitude=e,i.latitude=t,i.height=n,i):new dr(e,t,n)};dr.fromDegrees=function(e,t,n,i){return e=L.toRadians(e),t=L.toRadians(t),dr.fromRadians(e,t,n,i)};var yLe=new m,xLe=new m,CLe=new m;dr._ellipsoidOneOverRadii=new m(1/6378137,1/6378137,1/6356752314245179e-9);dr._ellipsoidOneOverRadiiSquared=new m(1/(6378137*6378137),1/(6378137*6378137),1/(6356752314245179e-9*6356752314245179e-9));dr._ellipsoidCenterToleranceSquared=L.EPSILON1;dr.fromCartesian=function(e,t,n){let i=l(t)?t.oneOverRadii:dr._ellipsoidOneOverRadii,o=l(t)?t.oneOverRadiiSquared:dr._ellipsoidOneOverRadiiSquared,r=l(t)?t._centerToleranceSquared:dr._ellipsoidCenterToleranceSquared,s=ax(e,i,o,r,xLe);if(!l(s))return;let a=m.multiplyComponents(s,o,yLe);a=m.normalize(a,a);let c=m.subtract(e,s,CLe),d=Math.atan2(a.y,a.x),u=Math.asin(a.z),h=L.sign(m.dot(c,e))*m.magnitude(c);return l(n)?(n.longitude=d,n.latitude=u,n.height=h,n):new dr(d,u,h)};dr.toCartesian=function(e,t,n){return m.fromRadians(e.longitude,e.latitude,e.height,t,n)};dr.clone=function(e,t){if(l(e))return l(t)?(t.longitude=e.longitude,t.latitude=e.latitude,t.height=e.height,t):new dr(e.longitude,e.latitude,e.height)};dr.equals=function(e,t){return e===t||l(e)&&l(t)&&e.longitude===t.longitude&&e.latitude===t.latitude&&e.height===t.height};dr.equalsEpsilon=function(e,t,n){return n=n??0,e===t||l(e)&&l(t)&&Math.abs(e.longitude-t.longitude)<=n&&Math.abs(e.latitude-t.latitude)<=n&&Math.abs(e.height-t.height)<=n};dr.ZERO=Object.freeze(new dr(0,0,0));dr.prototype.clone=function(e){return dr.clone(this,e)};dr.prototype.equals=function(e){return dr.equals(this,e)};dr.prototype.equalsEpsilon=function(e,t){return dr.equalsEpsilon(this,e,t)};dr.prototype.toString=function(){return`(${this.longitude}, ${this.latitude}, ${this.height})`};var Ae=dr;var Hwt=y(x(),1);function vie(e,t,n,i){t=t??0,n=n??0,i=i??0,e._radii=new m(t,n,i),e._radiiSquared=new m(t*t,n*n,i*i),e._radiiToTheFourth=new m(t*t*t*t,n*n*n*n,i*i*i*i),e._oneOverRadii=new m(t===0?0:1/t,n===0?0:1/n,i===0?0:1/i),e._oneOverRadiiSquared=new m(t===0?0:1/(t*t),n===0?0:1/(n*n),i===0?0:1/(i*i)),e._minimumRadius=Math.min(t,n,i),e._maximumRadius=Math.max(t,n,i),e._centerToleranceSquared=L.EPSILON1,e._radiiSquared.z!==0&&(e._squaredXOverSquaredZ=e._radiiSquared.x/e._radiiSquared.z)}function Vi(e,t,n){this._radii=void 0,this._radiiSquared=void 0,this._radiiToTheFourth=void 0,this._oneOverRadii=void 0,this._oneOverRadiiSquared=void 0,this._minimumRadius=void 0,this._maximumRadius=void 0,this._centerToleranceSquared=void 0,this._squaredXOverSquaredZ=void 0,vie(this,e,t,n)}Object.defineProperties(Vi.prototype,{radii:{get:function(){return this._radii}},radiiSquared:{get:function(){return this._radiiSquared}},radiiToTheFourth:{get:function(){return this._radiiToTheFourth}},oneOverRadii:{get:function(){return this._oneOverRadii}},oneOverRadiiSquared:{get:function(){return this._oneOverRadiiSquared}},minimumRadius:{get:function(){return this._minimumRadius}},maximumRadius:{get:function(){return this._maximumRadius}}});Vi.clone=function(e,t){if(!l(e))return;let n=e._radii;return l(t)?(m.clone(n,t._radii),m.clone(e._radiiSquared,t._radiiSquared),m.clone(e._radiiToTheFourth,t._radiiToTheFourth),m.clone(e._oneOverRadii,t._oneOverRadii),m.clone(e._oneOverRadiiSquared,t._oneOverRadiiSquared),t._minimumRadius=e._minimumRadius,t._maximumRadius=e._maximumRadius,t._centerToleranceSquared=e._centerToleranceSquared,t):new Vi(n.x,n.y,n.z)};Vi.fromCartesian3=function(e,t){return l(t)||(t=new Vi),l(e)&&vie(t,e.x,e.y,e.z),t};Vi.WGS84=Object.freeze(new Vi(6378137,6378137,6356752314245179e-9));Vi.UNIT_SPHERE=Object.freeze(new Vi(1,1,1));Vi.MOON=Object.freeze(new Vi(L.LUNAR_RADIUS,L.LUNAR_RADIUS,L.LUNAR_RADIUS));Vi.MARS=Object.freeze(new Vi(3396190,3396190,3376200));Vi._default=Vi.WGS84;Object.defineProperties(Vi,{default:{get:function(){return Vi._default},set:function(e){Vi._default=e,m._ellipsoidRadiiSquared=e.radiiSquared,Ae._ellipsoidOneOverRadii=e.oneOverRadii,Ae._ellipsoidOneOverRadiiSquared=e.oneOverRadiiSquared,Ae._ellipsoidCenterToleranceSquared=e._centerToleranceSquared}}});Vi.prototype.clone=function(e){return Vi.clone(this,e)};Vi.packedLength=m.packedLength;Vi.pack=function(e,t,n){return n=n??0,m.pack(e._radii,t,n),t};Vi.unpack=function(e,t,n){t=t??0;let i=m.unpack(e,t);return Vi.fromCartesian3(i,n)};Vi.prototype.geocentricSurfaceNormal=m.normalize;Vi.prototype.geodeticSurfaceNormalCartographic=function(e,t){let n=e.longitude,i=e.latitude,o=Math.cos(i),r=o*Math.cos(n),s=o*Math.sin(n),a=Math.sin(i);return l(t)||(t=new m),t.x=r,t.y=s,t.z=a,m.normalize(t,t)};Vi.prototype.geodeticSurfaceNormal=function(e,t){if(!m.equalsEpsilon(e,m.ZERO,L.EPSILON14))return l(t)||(t=new m),t=m.multiplyComponents(e,this._oneOverRadiiSquared,t),m.normalize(t,t)};var TLe=new m,ELe=new m;Vi.prototype.cartographicToCartesian=function(e,t){let n=TLe,i=ELe;this.geodeticSurfaceNormalCartographic(e,n),m.multiplyComponents(this._radiiSquared,n,i);let o=Math.sqrt(m.dot(n,i));return m.divideByScalar(i,o,i),m.multiplyByScalar(n,e.height,n),l(t)||(t=new m),m.add(i,n,t)};Vi.prototype.cartographicArrayToCartesianArray=function(e,t){let n=e.length;l(t)?t.length=n:t=new Array(n);for(let i=0;i<n;i++)t[i]=this.cartographicToCartesian(e[i],t[i]);return t};var SLe=new m,_Le=new m,ILe=new m;Vi.prototype.cartesianToCartographic=function(e,t){let n=this.scaleToGeodeticSurface(e,_Le);if(!l(n))return;let i=this.geodeticSurfaceNormal(n,SLe),o=m.subtract(e,n,ILe),r=Math.atan2(i.y,i.x),s=Math.asin(i.z),a=L.sign(m.dot(o,e))*m.magnitude(o);return l(t)?(t.longitude=r,t.latitude=s,t.height=a,t):new Ae(r,s,a)};Vi.prototype.cartesianArrayToCartographicArray=function(e,t){let n=e.length;l(t)?t.length=n:t=new Array(n);for(let i=0;i<n;++i)t[i]=this.cartesianToCartographic(e[i],t[i]);return t};Vi.prototype.scaleToGeodeticSurface=function(e,t){return ax(e,this._oneOverRadii,this._oneOverRadiiSquared,this._centerToleranceSquared,t)};Vi.prototype.scaleToGeocentricSurface=function(e,t){l(t)||(t=new m);let n=e.x,i=e.y,o=e.z,r=this._oneOverRadiiSquared,s=1/Math.sqrt(n*n*r.x+i*i*r.y+o*o*r.z);return m.multiplyByScalar(e,s,t)};Vi.prototype.transformPositionToScaledSpace=function(e,t){return l(t)||(t=new m),m.multiplyComponents(e,this._oneOverRadii,t)};Vi.prototype.transformPositionFromScaledSpace=function(e,t){return l(t)||(t=new m),m.multiplyComponents(e,this._radii,t)};Vi.prototype.equals=function(e){return this===e||l(e)&&m.equals(this._radii,e._radii)};Vi.prototype.toString=function(){return this._radii.toString()};Vi.prototype.getSurfaceNormalIntersectionWithZAxis=function(e,t,n){t=t??0;let i=this._squaredXOverSquaredZ;if(l(n)||(n=new m),n.x=0,n.y=0,n.z=e.z*(1-i),!(Math.abs(n.z)>=this._radii.z-t))return n};var ZLe=new m;Vi.prototype.getLocalCurvature=function(e,t){l(t)||(t=new M);let n=this.getSurfaceNormalIntersectionWithZAxis(e,0,ZLe),i=m.distance(e,n),o=this.minimumRadius*i/this.maximumRadius**2,r=i*o**2;return M.fromElements(1/i,1/r,t)};var RLe=[.14887433898163,.43339539412925,.67940956829902,.86506336668898,.97390652851717,0],VLe=[.29552422471475,.26926671930999,.21908636251598,.14945134915058,.066671344308684,0];function Mie(e,t,n){let i=.5*(t+e),o=.5*(t-e),r=0;for(let s=0;s<5;s++){let a=o*RLe[s];r+=VLe[s]*(n(i+a)+n(i-a))}return r*=o,r}Vi.prototype.surfaceArea=function(e){let t=e.west,n=e.east,i=e.south,o=e.north;for(;n<t;)n+=L.TWO_PI;let r=this._radiiSquared,s=r.x,a=r.y,c=r.z,d=s*a;return Mie(i,o,function(u){let h=Math.cos(u),p=Math.sin(u);return Math.cos(u)*Mie(t,n,function(A){let f=Math.cos(A),b=Math.sin(A);return Math.sqrt(d*p*p+c*(a*f*f+s*b*b)*h*h)})})};var ie=Vi;var eNt=y(x(),1);function rD(e){this._ellipsoid=e??ie.default,this._semimajorAxis=this._ellipsoid.maximumRadius,this._oneOverSemimajorAxis=1/this._semimajorAxis}Object.defineProperties(rD.prototype,{ellipsoid:{get:function(){return this._ellipsoid}}});rD.prototype.project=function(e,t){let n=this._semimajorAxis,i=e.longitude*n,o=e.latitude*n,r=e.height;return l(t)?(t.x=i,t.y=o,t.z=r,t):new m(i,o,r)};rD.prototype.unproject=function(e,t){let n=this._oneOverSemimajorAxis,i=e.x*n,o=e.y*n,r=e.z;return l(t)?(t.longitude=i,t.latitude=o,t.height=r,t):new Ae(i,o,r)};var ki=rD;var nNt=y(x(),1),GLe={OUTSIDE:-1,INTERSECTING:0,INSIDE:1},qt=Object.freeze(GLe);var WYt=y(x(),1);var EYt=y(x(),1);var VXt=y(x(),1);var oNt=y(x(),1);function LLe(e,t,n){let i=0,o=e.length-1,r,s;for(;i<=o;){if(r=~~((i+o)/2),s=n(e[r],t),s<0){i=r+1;continue}if(s>0){o=r-1;continue}return r}return~(o+1)}var yo=LLe;var sNt=y(x(),1);function WLe(e,t,n,i,o){this.xPoleWander=e,this.yPoleWander=t,this.xPoleOffset=n,this.yPoleOffset=i,this.ut1MinusUtc=o}var vb=WLe;var RNt=y(x(),1);var hNt=y(x(),1);var cNt=y(x(),1);function FLe(e){return e%4===0&&e%100!==0||e%400===0}var Ah=FLe;var Uie=[31,28,31,30,31,30,31,31,30,31,30,31];function BLe(e,t,n,i,o,r,s,a){e=e??1,t=t??1,n=n??1,i=i??0,o=o??0,r=r??0,s=s??0,a=a??!1,this.year=e,this.month=t,this.day=n,this.hour=i,this.minute=o,this.second=r,this.millisecond=s,this.isLeapSecond=a;function b(){vo.typeOf.number.greaterThanOrEquals("Year",e,1),vo.typeOf.number.lessThanOrEquals("Year",e,9999),vo.typeOf.number.greaterThanOrEquals("Month",t,1),vo.typeOf.number.lessThanOrEquals("Month",t,12),vo.typeOf.number.greaterThanOrEquals("Day",n,1),vo.typeOf.number.lessThanOrEquals("Day",n,31),vo.typeOf.number.greaterThanOrEquals("Hour",i,0),vo.typeOf.number.lessThanOrEquals("Hour",i,23),vo.typeOf.number.greaterThanOrEquals("Minute",o,0),vo.typeOf.number.lessThanOrEquals("Minute",o,59),vo.typeOf.bool("IsLeapSecond",a),vo.typeOf.number.greaterThanOrEquals("Second",r,0),vo.typeOf.number.lessThanOrEquals("Second",r,a?60:59),vo.typeOf.number.greaterThanOrEquals("Millisecond",s,0),vo.typeOf.number.lessThan("Millisecond",s,1e3)}function C(){let T=t===2&&Ah(e)?Uie[t-1]+1:Uie[t-1];if(n>T)throw new fe("Month and Day represents invalid date")}}var CA=BLe;var pNt=y(x(),1);function wLe(e,t){this.julianDate=e,this.offset=t}var ho=wLe;var gNt=y(x(),1),NLe={SECONDS_PER_MILLISECOND:.001,SECONDS_PER_MINUTE:60,MINUTES_PER_HOUR:60,HOURS_PER_DAY:24,SECONDS_PER_HOUR:3600,MINUTES_PER_DAY:1440,SECONDS_PER_DAY:86400,DAYS_PER_JULIAN_CENTURY:36525,PICOSECOND:1e-9,MODIFIED_JULIAN_DATE_DIFFERENCE:24000005e-1},di=Object.freeze(NLe);var yNt=y(x(),1),PLe={UTC:0,TAI:1},ci=Object.freeze(PLe);var kie=new CA,A3=[31,28,31,30,31,30,31,31,30,31,30,31],g3=29;function b3(e,t){return vt.compare(e.julianDate,t.julianDate)}var iS=new ho;function aD(e){iS.julianDate=e;let t=vt.leapSeconds,n=yo(t,iS,b3);n<0&&(n=~n),n>=t.length&&(n=t.length-1);let i=t[n].offset;n>0&&vt.secondsDifference(t[n].julianDate,e)>i&&(n--,i=t[n].offset),vt.addSeconds(e,i,e)}function Die(e,t){iS.julianDate=e;let n=vt.leapSeconds,i=yo(n,iS,b3);if(i<0&&(i=~i),i===0)return vt.addSeconds(e,-n[0].offset,t);if(i>=n.length)return vt.addSeconds(e,-n[i-1].offset,t);let o=vt.secondsDifference(n[i].julianDate,e);if(o===0)return vt.addSeconds(e,-n[i].offset,t);if(!(o<=1))return vt.addSeconds(e,-n[--i].offset,t)}function Ub(e,t,n){let i=t/di.SECONDS_PER_DAY|0;return e+=i,t-=di.SECONDS_PER_DAY*i,t<0&&(e--,t+=di.SECONDS_PER_DAY),n.dayNumber=e,n.secondsOfDay=t,n}function y3(e,t,n,i,o,r,s){let a=(t-14)/12|0,c=e+4800+a,d=(1461*c/4|0)+(367*(t-2-12*a)/12|0)-(3*((c+100)/100|0)/4|0)+n-32075;i=i-12,i<0&&(i+=24);let u=r+(i*di.SECONDS_PER_HOUR+o*di.SECONDS_PER_MINUTE+s*di.SECONDS_PER_MILLISECOND);return u>=43200&&(d-=1),[d,u]}var XLe=/^(\d{4})$/,YLe=/^(\d{4})-(\d{2})$/,MLe=/^(\d{4})-?(\d{3})$/,vLe=/^(\d{4})-?W(\d{2})-?(\d{1})?$/,ULe=/^(\d{4})-?(\d{2})-?(\d{2})$/,x3=/([Z+\-])?(\d{2})?:?(\d{2})?$/,DLe=/^(\d{2})(\.\d+)?/.source+x3.source,kLe=/^(\d{2}):?(\d{2})(\.\d+)?/.source+x3.source,QLe=/^(\d{2}):?(\d{2}):?(\d{2})(\.\d+)?/.source+x3.source;function vt(e,t,n){this.dayNumber=void 0,this.secondsOfDay=void 0,e=e??0,t=t??0,n=n??ci.UTC;let i=e|0;t=t+(e-i)*di.SECONDS_PER_DAY,Ub(i,t,this),n===ci.UTC&&aD(this)}vt.fromGregorianDate=function(e,t){let n=y3(e.year,e.month,e.day,e.hour,e.minute,e.second,e.millisecond);return l(t)?(Ub(n[0],n[1],t),aD(t),t):new vt(n[0],n[1],ci.UTC)};vt.fromDate=function(e,t){let n=y3(e.getUTCFullYear(),e.getUTCMonth()+1,e.getUTCDate(),e.getUTCHours(),e.getUTCMinutes(),e.getUTCSeconds(),e.getUTCMilliseconds());return l(t)?(Ub(n[0],n[1],t),aD(t),t):new vt(n[0],n[1],ci.UTC)};vt.fromIso8601=function(e,t){e=e.replace(",",".");let n=e.split("T"),i,o=1,r=1,s=0,a=0,c=0,d=0,u=n[0],h=n[1],p,A;if(n=u.match(ULe),n!==null)i=+n[1],o=+n[2],r=+n[3];else if(n=u.match(YLe),n!==null)i=+n[1],o=+n[2];else if(n=u.match(XLe),n!==null)i=+n[1];else{let T;if(n=u.match(MLe),n!==null)i=+n[1],T=+n[2],A=Ah(i);else if(n=u.match(vLe),n!==null){i=+n[1];let E=+n[2],S=+n[3]||0,I=new Date(Date.UTC(i,0,4));T=E*7+S-I.getUTCDay()-3}p=new Date(Date.UTC(i,0,1)),p.setUTCDate(T),o=p.getUTCMonth()+1,r=p.getUTCDate()}A=Ah(i);let f;if(l(h)){n=h.match(QLe),n!==null?(s=+n[1],a=+n[2],c=+n[3],d=+(n[4]||0)*1e3,f=5):(n=h.match(kLe),n!==null?(s=+n[1],a=+n[2],c=+(n[3]||0)*60,f=4):(n=h.match(DLe),n!==null&&(s=+n[1],a=+(n[2]||0)*60,f=3)));let T=n[f],E=+n[f+1],S=+(n[f+2]||0);switch(T){case"+":s=s-E,a=a-S;break;case"-":s=s+E,a=a+S;break;case"Z":break;default:a=a+new Date(Date.UTC(i,o-1,r,s,a)).getTimezoneOffset();break}}let b=c===60;for(b&&c--;a>=60;)a-=60,s++;for(;s>=24;)s-=24,r++;for(p=A&&o===2?g3:A3[o-1];r>p;)r-=p,o++,o>12&&(o-=12,i++),p=A&&o===2?g3:A3[o-1];for(;a<0;)a+=60,s--;for(;s<0;)s+=24,r--;for(;r<1;)o--,o<1&&(o+=12,i--),p=A&&o===2?g3:A3[o-1],r+=p;let C=y3(i,o,r,s,a,c,d);return l(t)?(Ub(C[0],C[1],t),aD(t)):t=new vt(C[0],C[1],ci.UTC),b&&vt.addSeconds(t,1,t),t};vt.now=function(e){return vt.fromDate(new Date,e)};var sD=new vt(0,0,ci.TAI);vt.toGregorianDate=function(e,t){let n=!1,i=Die(e,sD);l(i)||(vt.addSeconds(e,-1,sD),i=Die(sD,sD),n=!0);let o=i.dayNumber,r=i.secondsOfDay;r>=43200&&(o+=1);let s=o+68569|0,a=4*s/146097|0;s=s-((146097*a+3)/4|0)|0;let c=4e3*(s+1)/1461001|0;s=s-(1461*c/4|0)+31|0;let d=80*s/2447|0,u=s-(2447*d/80|0)|0;s=d/11|0;let h=d+2-12*s|0,p=100*(a-49)+c+s|0,A=r/di.SECONDS_PER_HOUR|0,f=r-A*di.SECONDS_PER_HOUR,b=f/di.SECONDS_PER_MINUTE|0;f=f-b*di.SECONDS_PER_MINUTE;let C=f|0,T=(f-C)/di.SECONDS_PER_MILLISECOND;return A+=12,A>23&&(A-=24),n&&(C+=1),l(t)?(t.year=p,t.month=h,t.day=u,t.hour=A,t.minute=b,t.second=C,t.millisecond=T,t.isLeapSecond=n,t):new CA(p,h,u,A,b,C,T,n)};vt.toDate=function(e){let t=vt.toGregorianDate(e,kie),n=t.second;return t.isLeapSecond&&(n-=1),new Date(Date.UTC(t.year,t.month-1,t.day,t.hour,t.minute,n,t.millisecond))};vt.toIso8601=function(e,t){let n=vt.toGregorianDate(e,kie),i=n.year,o=n.month,r=n.day,s=n.hour,a=n.minute,c=n.second,d=n.millisecond;i===1e4&&o===1&&r===1&&s===0&&a===0&&c===0&&d===0&&(i=9999,o=12,r=31,s=24);let u;if(!l(t)&&d!==0){let h=d*.01;return u=h<1e-6?h.toFixed(20).replace(".","").replace(/0+$/,""):h.toString().replace(".",""),`${i.toString().padStart(4,"0")}-${o.toString().padStart(2,"0")}-${r.toString().padStart(2,"0")}T${s.toString().padStart(2,"0")}:${a.toString().padStart(2,"0")}:${c.toString().padStart(2,"0")}.${u}Z`}return!l(t)||t===0?`${i.toString().padStart(4,"0")}-${o.toString().padStart(2,"0")}-${r.toString().padStart(2,"0")}T${s.toString().padStart(2,"0")}:${a.toString().padStart(2,"0")}:${c.toString().padStart(2,"0")}Z`:(u=(d*.01).toFixed(t).replace(".","").slice(0,t),`${i.toString().padStart(4,"0")}-${o.toString().padStart(2,"0")}-${r.toString().padStart(2,"0")}T${s.toString().padStart(2,"0")}:${a.toString().padStart(2,"0")}:${c.toString().padStart(2,"0")}.${u}Z`)};vt.clone=function(e,t){if(l(e))return l(t)?(t.dayNumber=e.dayNumber,t.secondsOfDay=e.secondsOfDay,t):new vt(e.dayNumber,e.secondsOfDay,ci.TAI)};vt.compare=function(e,t){let n=e.dayNumber-t.dayNumber;return n!==0?n:e.secondsOfDay-t.secondsOfDay};vt.equals=function(e,t){return e===t||l(e)&&l(t)&&e.dayNumber===t.dayNumber&&e.secondsOfDay===t.secondsOfDay};vt.equalsEpsilon=function(e,t,n){return n=n??0,e===t||l(e)&&l(t)&&Math.abs(vt.secondsDifference(e,t))<=n};vt.totalDays=function(e){return e.dayNumber+e.secondsOfDay/di.SECONDS_PER_DAY};vt.secondsDifference=function(e,t){return(e.dayNumber-t.dayNumber)*di.SECONDS_PER_DAY+(e.secondsOfDay-t.secondsOfDay)};vt.daysDifference=function(e,t){let n=e.dayNumber-t.dayNumber,i=(e.secondsOfDay-t.secondsOfDay)/di.SECONDS_PER_DAY;return n+i};vt.computeTaiMinusUtc=function(e){iS.julianDate=e;let t=vt.leapSeconds,n=yo(t,iS,b3);return n<0&&(n=~n,--n,n<0&&(n=0)),t[n].offset};vt.addSeconds=function(e,t,n){return Ub(e.dayNumber,e.secondsOfDay+t,n)};vt.addMinutes=function(e,t,n){let i=e.secondsOfDay+t*di.SECONDS_PER_MINUTE;return Ub(e.dayNumber,i,n)};vt.addHours=function(e,t,n){let i=e.secondsOfDay+t*di.SECONDS_PER_HOUR;return Ub(e.dayNumber,i,n)};vt.addDays=function(e,t,n){let i=e.dayNumber+t;return Ub(i,e.secondsOfDay,n)};vt.lessThan=function(e,t){return vt.compare(e,t)<0};vt.lessThanOrEquals=function(e,t){return vt.compare(e,t)<=0};vt.greaterThan=function(e,t){return vt.compare(e,t)>0};vt.greaterThanOrEquals=function(e,t){return vt.compare(e,t)>=0};vt.prototype.clone=function(e){return vt.clone(this,e)};vt.prototype.equals=function(e){return vt.equals(this,e)};vt.prototype.equalsEpsilon=function(e,t){return vt.equalsEpsilon(this,e,t)};vt.prototype.toString=function(){return vt.toIso8601(this)};vt.leapSeconds=[new ho(new vt(2441317,43210,ci.TAI),10),new ho(new vt(2441499,43211,ci.TAI),11),new ho(new vt(2441683,43212,ci.TAI),12),new ho(new vt(2442048,43213,ci.TAI),13),new ho(new vt(2442413,43214,ci.TAI),14),new ho(new vt(2442778,43215,ci.TAI),15),new ho(new vt(2443144,43216,ci.TAI),16),new ho(new vt(2443509,43217,ci.TAI),17),new ho(new vt(2443874,43218,ci.TAI),18),new ho(new vt(2444239,43219,ci.TAI),19),new ho(new vt(2444786,43220,ci.TAI),20),new ho(new vt(2445151,43221,ci.TAI),21),new ho(new vt(2445516,43222,ci.TAI),22),new ho(new vt(2446247,43223,ci.TAI),23),new ho(new vt(2447161,43224,ci.TAI),24),new ho(new vt(2447892,43225,ci.TAI),25),new ho(new vt(2448257,43226,ci.TAI),26),new ho(new vt(2448804,43227,ci.TAI),27),new ho(new vt(2449169,43228,ci.TAI),28),new ho(new vt(2449534,43229,ci.TAI),29),new ho(new vt(2450083,43230,ci.TAI),30),new ho(new vt(2450630,43231,ci.TAI),31),new ho(new vt(2451179,43232,ci.TAI),32),new ho(new vt(2453736,43233,ci.TAI),33),new ho(new vt(2454832,43234,ci.TAI),34),new ho(new vt(2456109,43235,ci.TAI),35),new ho(new vt(2457204,43236,ci.TAI),36),new ho(new vt(2457754,43237,ci.TAI),37)];var q=vt;var gXt=y(x(),1),loe=y(qd(),1);var BNt=y(x(),1);function OLe(e){return(e.length===0||e[e.length-1]!=="/")&&(e=`${e}/`),e}var VR=OLe;var NNt=y(x(),1);function jie(e,t){if(e===null||typeof e!="object")return e;t=t??!1;let n=new e.constructor;for(let i in e)if(e.hasOwnProperty(i)){let o=e[i];t&&(o=jie(o,t)),n[i]=o}return n}var He=jie;var YNt=y(x(),1);function qie(e,t,n){n=n??!1;let i={},o=l(e),r=l(t),s,a,c;if(o)for(s in e)e.hasOwnProperty(s)&&(a=e[s],r&&n&&typeof a=="object"&&t.hasOwnProperty(s)?(c=t[s],typeof c=="object"?i[s]=qie(a,c,n):i[s]=a):i[s]=a);if(r)for(s in t)t.hasOwnProperty(s)&&!i.hasOwnProperty(s)&&(c=t[s],i[s]=c);return i}var Ft=qie;var vNt=y(x(),1);function zLe(){let e,t,n=new Promise(function(i,o){e=i,t=o});return{resolve:e,reject:t,promise:n}}var dd=zLe;var kNt=y(x(),1),$ie=y(qd(),1);function C3(e,t){let n;return typeof document<"u"&&(n=document),C3._implementation(e,t,n)}C3._implementation=function(e,t,n){if(!l(t)){if(typeof n>"u")return e;t=n.baseURI??n.location.href}let i=new $ie.default(e);return i.scheme()!==""?i.toString():i.absoluteTo(t).toString()};var Hf=C3;var ONt=y(x(),1),eoe=y(qd(),1);function HLe(e,t){let n="",i=e.lastIndexOf("/");return i!==-1&&(n=e.substring(0,i+1)),t&&(e=new eoe.default(e),e.query().length!==0&&(n+=`?${e.query()}`),e.fragment().length!==0&&(n+=`#${e.fragment()}`)),n}var GR=HLe;var HNt=y(x(),1),toe=y(qd(),1);function JLe(e){let t=new toe.default(e);t.normalize();let n=t.path(),i=n.lastIndexOf("/");return i!==-1&&(n=n.substr(i+1)),i=n.lastIndexOf("."),i===-1?n="":n=n.substr(i+1),n}var TA=JLe;var jNt=y(x(),1);var noe={};function KLe(e,t,n){l(t)||(t=e.width),l(n)||(n=e.height);let i=noe[t];l(i)||(i={},noe[t]=i);let o=i[n];if(!l(o)){let r=document.createElement("canvas");r.width=t,r.height=n,o=r.getContext("2d",{willReadFrequently:!0}),o.globalCompositeOperation="copy",i[n]=o}return o.drawImage(e,0,0,t,n),o.getImageData(0,0,t,n).data}var gh=KLe;var $Nt=y(x(),1);var jLe=/^blob:/i;function qLe(e){return jLe.test(e)}var cx=qLe;var nPt=y(x(),1);var Jf;function $Le(e){l(Jf)||(Jf=document.createElement("a")),Jf.href=window.location.href;let t=Jf.host,n=Jf.protocol;return Jf.href=e,Jf.href=Jf.href,n!==Jf.protocol||t!==Jf.host}var Db=$Le;var oPt=y(x(),1);var e1e=/^data:/i;function t1e(e){return e1e.test(e)}var bh=t1e;var sPt=y(x(),1);function n1e(e){let t=document.createElement("script");return t.async=!0,t.src=e,new Promise((n,i)=>{window.crossOriginIsolated&&t.setAttribute("crossorigin","anonymous");let o=document.getElementsByTagName("head")[0];t.onload=function(){t.onload=void 0,o.removeChild(t),n()},t.onerror=function(r){i(r)},o.appendChild(t)})}var lx=n1e;var cPt=y(x(),1);function i1e(e){let t="";for(let n in e)if(e.hasOwnProperty(n)){let i=e[n],o=`${encodeURIComponent(n)}=`;if(Array.isArray(i))for(let r=0,s=i.length;r<s;++r)t+=`${o+encodeURIComponent(i[r])}&`;else t+=`${o+encodeURIComponent(i)}&`}return t=t.slice(0,-1),t}var dx=i1e;var uPt=y(x(),1);function o1e(e){let t={};if(e==="")return t;let n=e.replace(/\+/g,"%20").split(/[&;]/);for(let i=0,o=n.length;i<o;++i){let r=n[i].split("="),s=decodeURIComponent(r[0]),a=r[1];l(a)?a=decodeURIComponent(a):a="";let c=t[s];typeof c=="string"?t[s]=[c,a]:Array.isArray(c)?c.push(a):t[s]=a}return t}var $d=o1e;var CPt=y(x(),1);var hPt=y(x(),1),r1e={UNISSUED:0,ISSUED:1,ACTIVE:2,RECEIVED:3,CANCELLED:4,FAILED:5},Ai=Object.freeze(r1e);var pPt=y(x(),1),s1e={TERRAIN:0,IMAGERY:1,TILES3D:2,OTHER:3},Ds=Object.freeze(s1e);function uD(e){e=e??Q.EMPTY_OBJECT;let t=e.throttleByServer??!1,n=e.throttle??!1;this.url=e.url,this.requestFunction=e.requestFunction,this.cancelFunction=e.cancelFunction,this.priorityFunction=e.priorityFunction,this.priority=e.priority??0,this.throttle=n,this.throttleByServer=t,this.type=e.type??Ds.OTHER,this.serverKey=e.serverKey,this.state=Ai.UNISSUED,this.deferred=void 0,this.cancelled=!1}uD.prototype.cancel=function(){this.cancelled=!0};uD.prototype.clone=function(e){return l(e)?(e.url=this.url,e.requestFunction=this.requestFunction,e.cancelFunction=this.cancelFunction,e.priorityFunction=this.priorityFunction,e.priority=this.priority,e.throttle=this.throttle,e.throttleByServer=this.throttleByServer,e.type=this.type,e.serverKey=this.serverKey,e.state=Ai.UNISSUED,e.deferred=void 0,e.cancelled=!1,e):new uD(this)};var Tr=uD;var ZPt=y(x(),1);var EPt=y(x(),1);function a1e(e){let t={};if(!e)return t;let n=e.split(`\r
`);for(let i=0;i<n.length;++i){let o=n[i],r=o.indexOf(": ");if(r>0){let s=o.substring(0,r),a=o.substring(r+2);t[s]=a}}return t}var LR=a1e;function ioe(e,t,n){this.statusCode=e,this.response=t,this.responseHeaders=n,typeof this.responseHeaders=="string"&&(this.responseHeaders=LR(this.responseHeaders))}ioe.prototype.toString=function(){let e="Request has failed.";return l(this.statusCode)&&(e+=` Status Code: ${this.statusCode}`),e};var Kf=ioe;var UPt=y(x(),1),mD=y(qd(),1);var GPt=y(x(),1);function WR(){this._listeners=new Map,this._toRemove=new Map,this._toAdd=new Map,this._invokingListeners=!1,this._listenerCount=0}Object.defineProperties(WR.prototype,{numberOfListeners:{get:function(){return this._listenerCount}}});WR.prototype.addEventListener=function(e,t){let n=this,i=n._invokingListeners?n._toAdd:n._listeners;return E3(this,i,e,t)&&n._listenerCount++,function(){n.removeEventListener(e,t)}};function E3(e,t,n,i){t.has(n)||t.set(n,new Set);let o=t.get(n);return o.has(i)?!1:(o.add(i),!0)}WR.prototype.removeEventListener=function(e,t){let n=T3(this,this._listeners,e,t),i=T3(this,this._toAdd,e,t),o=n||i;return o&&this._listenerCount--,o};function T3(e,t,n,i){let o=t.get(n);if(!o||!o.has(i))return!1;if(e._invokingListeners){if(!E3(e,e._toRemove,n,i))return!1}else o.delete(i),o.size===0&&t.delete(n);return!0}WR.prototype.raiseEvent=function(){this._invokingListeners=!0;for(let[e,t]of this._listeners.entries())if(l(e))for(let n of t)e.apply(n,arguments);this._invokingListeners=!1;for(let[e,t]of this._toAdd.entries())for(let n of t)E3(this,this._listeners,e,n);this._toAdd.clear();for(let[e,t]of this._toRemove.entries())for(let n of t)T3(this,this._listeners,e,n);this._toRemove.clear()};var xe=WR;var FPt=y(x(),1);function ux(e){this._comparator=e.comparator,this._array=[],this._length=0,this._maximumLength=void 0}Object.defineProperties(ux.prototype,{length:{get:function(){return this._length}},internalArray:{get:function(){return this._array}},maximumLength:{get:function(){return this._maximumLength},set:function(e){let t=this._length;if(e<t){let n=this._array;for(let i=e;i<t;++i)n[i]=void 0;this._length=e,n.length=e}this._maximumLength=e}},comparator:{get:function(){return this._comparator}}});function S3(e,t,n){let i=e[t];e[t]=e[n],e[n]=i}ux.prototype.reserve=function(e){e=e??this._length,this._array.length=e};ux.prototype.heapify=function(e){e=e??0;let t=this._length,n=this._comparator,i=this._array,o=-1,r=!0;for(;r;){let s=2*(e+1),a=s-1;a<t&&n(i[a],i[e])<0?o=a:o=e,s<t&&n(i[s],i[o])<0&&(o=s),o!==e?(S3(i,o,e),e=o):r=!1}};ux.prototype.resort=function(){let e=this._length;for(let t=Math.ceil(e/2);t>=0;--t)this.heapify(t)};ux.prototype.insert=function(e){let t=this._array,n=this._comparator,i=this._maximumLength,o=this._length++;for(o<t.length?t[o]=e:t.push(e);o!==0;){let s=Math.floor((o-1)/2);if(n(t[o],t[s])<0)S3(t,o,s),o=s;else break}let r;return l(i)&&this._length>i&&(r=t[i],this._length=i),r};ux.prototype.pop=function(e){if(e=e??0,this._length===0)return;let t=this._array,n=t[e];return S3(t,e,--this._length),this.heapify(e),t[this._length]=void 0,n};var FR=ux;function c1e(e,t){return e.priority-t.priority}var xo={numberOfAttemptedRequests:0,numberOfActiveRequests:0,numberOfCancelledRequests:0,numberOfCancelledActiveRequests:0,numberOfFailedRequests:0,numberOfActiveRequestsEver:0,lastNumberOfActiveRequests:0},sS=20,Xc=new FR({comparator:c1e});Xc.maximumLength=sS;Xc.reserve(sS);var jf=[],EA={},l1e=typeof document<"u"?new mD.default(document.location.href):new mD.default,hD=new xe;function Er(){}Er.maximumRequests=50;Er.maximumRequestsPerServer=18;Er.requestsByServer={};Er.throttleRequests=!0;Er.debugShowStatistics=!1;Er.requestCompletedEvent=hD;Object.defineProperties(Er,{statistics:{get:function(){return xo}},priorityHeapLength:{get:function(){return sS},set:function(e){if(e<sS)for(;Xc.length>e;){let t=Xc.pop();mx(t)}sS=e,Xc.maximumLength=e,Xc.reserve(e)}}});function ooe(e){l(e.priorityFunction)&&(e.priority=e.priorityFunction())}Er.serverHasOpenSlots=function(e,t){t=t??1;let n=Er.requestsByServer[e]??Er.maximumRequestsPerServer;return EA[e]+t<=n};Er.heapHasOpenSlots=function(e){return Xc.length+e<=sS};function roe(e){return e.state===Ai.UNISSUED&&(e.state=Ai.ISSUED,e.deferred=dd()),e.deferred.promise}function d1e(e){return function(t){if(e.state===Ai.CANCELLED)return;let n=e.deferred;--xo.numberOfActiveRequests,--EA[e.serverKey],hD.raiseEvent(),e.state=Ai.RECEIVED,e.deferred=void 0,n.resolve(t)}}function u1e(e){return function(t){e.state!==Ai.CANCELLED&&(++xo.numberOfFailedRequests,--xo.numberOfActiveRequests,--EA[e.serverKey],hD.raiseEvent(t),e.state=Ai.FAILED,e.deferred.reject(t))}}function soe(e){let t=roe(e);return e.state=Ai.ACTIVE,jf.push(e),++xo.numberOfActiveRequests,++xo.numberOfActiveRequestsEver,++EA[e.serverKey],e.requestFunction().then(d1e(e)).catch(u1e(e)),t}function mx(e){let t=e.state===Ai.ACTIVE;if(e.state=Ai.CANCELLED,++xo.numberOfCancelledRequests,l(e.deferred)){let n=e.deferred;e.deferred=void 0,n.reject()}t&&(--xo.numberOfActiveRequests,--EA[e.serverKey],++xo.numberOfCancelledActiveRequests),l(e.cancelFunction)&&e.cancelFunction()}Er.update=function(){let e,t,n=0,i=jf.length;for(e=0;e<i;++e){if(t=jf[e],t.cancelled&&mx(t),t.state!==Ai.ACTIVE){++n;continue}n>0&&(jf[e-n]=t)}jf.length-=n;let o=Xc.internalArray,r=Xc.length;for(e=0;e<r;++e)ooe(o[e]);Xc.resort();let s=Math.max(Er.maximumRequests-jf.length,0),a=0;for(;a<s&&Xc.length>0;){if(t=Xc.pop(),t.cancelled){mx(t);continue}if(t.throttleByServer&&!Er.serverHasOpenSlots(t.serverKey)){mx(t);continue}soe(t),++a}m1e()};Er.getServerKey=function(e){let t=new mD.default(e);t.scheme()===""&&(t=t.absoluteTo(l1e),t.normalize());let n=t.authority();/:/.test(n)||(n=`${n}:${t.scheme()==="https"?"443":"80"}`);let i=EA[n];return l(i)||(EA[n]=0),n};Er.request=function(e){if(bh(e.url)||cx(e.url))return hD.raiseEvent(),e.state=Ai.RECEIVED,e.requestFunction();if(++xo.numberOfAttemptedRequests,l(e.serverKey)||(e.serverKey=Er.getServerKey(e.url)),Er.throttleRequests&&e.throttleByServer&&!Er.serverHasOpenSlots(e.serverKey))return;if(!Er.throttleRequests||!e.throttle)return soe(e);if(jf.length>=Er.maximumRequests)return;ooe(e);let t=Xc.insert(e);if(l(t)){if(t===e)return;mx(t)}return roe(e)};function m1e(){Er.debugShowStatistics&&(xo.numberOfActiveRequests===0&&xo.lastNumberOfActiveRequests>0&&(xo.numberOfAttemptedRequests>0&&(console.log(`Number of attempted requests: ${xo.numberOfAttemptedRequests}`),xo.numberOfAttemptedRequests=0),xo.numberOfCancelledRequests>0&&(console.log(`Number of cancelled requests: ${xo.numberOfCancelledRequests}`),xo.numberOfCancelledRequests=0),xo.numberOfCancelledActiveRequests>0&&(console.log(`Number of cancelled active requests: ${xo.numberOfCancelledActiveRequests}`),xo.numberOfCancelledActiveRequests=0),xo.numberOfFailedRequests>0&&(console.log(`Number of failed requests: ${xo.numberOfFailedRequests}`),xo.numberOfFailedRequests=0)),xo.lastNumberOfActiveRequests=xo.numberOfActiveRequests)}Er.clearForSpecs=function(){for(;Xc.length>0;){let t=Xc.pop();mx(t)}let e=jf.length;for(let t=0;t<e;++t)mx(jf[t]);jf.length=0,EA={},xo.numberOfAttemptedRequests=0,xo.numberOfActiveRequests=0,xo.numberOfCancelledRequests=0,xo.numberOfCancelledActiveRequests=0,xo.numberOfFailedRequests=0,xo.numberOfActiveRequestsEver=0,xo.lastNumberOfActiveRequests=0};Er.numberOfActiveRequestsByServer=function(e){return EA[e]};Er.requestHeap=Xc;var Yc=Er;var QPt=y(x(),1),aoe=y(qd(),1);var BR={},aS={};BR.add=function(e,t){let n=`${e.toLowerCase()}:${t}`;l(aS[n])||(aS[n]=!0)};BR.remove=function(e,t){let n=`${e.toLowerCase()}:${t}`;l(aS[n])&&delete aS[n]};function h1e(e){let t=new aoe.default(e);t.normalize();let n=t.authority();if(n.length!==0){if(t.authority(n),n.indexOf("@")!==-1&&(n=n.split("@")[1]),n.indexOf(":")===-1){let i=t.scheme();if(i.length===0&&(i=window.location.protocol,i=i.substring(0,i.length-1)),i==="http")n+=":80";else if(i==="https")n+=":443";else return}return n}}BR.contains=function(e){let t=h1e(e);return!!(l(t)&&l(aS[t]))};BR.clear=function(){aS={}};var cS=BR;var doe=(function(){try{let e=new XMLHttpRequest;return e.open("GET","#",!0),e.responseType="blob",e.responseType==="blob"}catch{return!1}})();function Mt(e){e=e??Q.EMPTY_OBJECT,typeof e=="string"&&(e={url:e}),this._url=void 0,this._templateValues=qf(e.templateValues,{}),this._queryParameters=qf(e.queryParameters,{}),this.headers=qf(e.headers,{}),this.request=e.request??new Tr,this.proxy=e.proxy,this.retryCallback=e.retryCallback,this.retryAttempts=e.retryAttempts??0,this._retryCount=0,e.parseUrl??!0?this.parseUrl(e.url,!0,!0):this._url=e.url,this._credits=e.credits}function qf(e,t){return l(e)?He(e):t}Mt.createIfNeeded=function(e){return e instanceof Mt?e.getDerivedResource({request:e.request}):typeof e!="string"?e:new Mt({url:e})};var lS;Mt.supportsImageBitmapOptions=function(){return l(lS)?lS:typeof createImageBitmap!="function"?(lS=Promise.resolve(!1),lS):(lS=Mt.fetchBlob({url:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAIAAACQd1PeAAAABGdBTUEAAE4g3rEiDgAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAADElEQVQI12Ng6GAAAAEUAIngE3ZiAAAAAElFTkSuQmCC"}).then(function(t){let n={imageOrientation:"flipY",premultiplyAlpha:"none",colorSpaceConversion:"none"};return Promise.all([createImageBitmap(t,n),createImageBitmap(t)])}).then(function(t){let n=gh(t[0]),i=gh(t[1]);return n[1]!==i[1]}).catch(function(){return!1}),lS)};Object.defineProperties(Mt,{isBlobSupported:{get:function(){return doe}}});Object.defineProperties(Mt.prototype,{queryParameters:{get:function(){return this._queryParameters}},templateValues:{get:function(){return this._templateValues}},url:{get:function(){return this.getUrlComponent(!0,!0)},set:function(e){this.parseUrl(e,!1,!1)}},extension:{get:function(){return TA(this._url)}},isDataUri:{get:function(){return bh(this._url)}},isBlobUri:{get:function(){return cx(this._url)}},isCrossOriginUrl:{get:function(){return Db(this._url)}},hasHeaders:{get:function(){return Object.keys(this.headers).length>0}},credits:{get:function(){return this._credits}}});Mt.prototype.toString=function(){return this.getUrlComponent(!0,!0)};Mt.prototype.parseUrl=function(e,t,n,i){let o=new loe.default(e),r=f1e(o.query());this._queryParameters=t?pD(r,this.queryParameters,n):r,o.search(""),o.fragment(""),l(i)&&o.scheme()===""&&(o=o.absoluteTo(Hf(i))),this._url=o.toString()};function f1e(e){return e.length===0?{}:e.indexOf("=")===-1?{[e]:void 0}:$d(e)}function pD(e,t,n){if(!n)return Ft(e,t);let i=He(e,!0);for(let o in t)if(t.hasOwnProperty(o)){let r=i[o],s=t[o];l(r)?(Array.isArray(r)||(r=i[o]=[r]),i[o]=r.concat(s)):i[o]=Array.isArray(s)?s.slice():s}return i}Mt.prototype.getUrlComponent=function(e,t){if(this.isDataUri)return this._url;let n=this._url;e&&(n=`${n}${p1e(this.queryParameters)}`),n=n.replace(/%7B/g,"{").replace(/%7D/g,"}");let i=this._templateValues;return Object.keys(i).length>0&&(n=n.replace(/{(.*?)}/g,function(o,r){let s=i[r];return l(s)?encodeURIComponent(s):o})),t&&l(this.proxy)&&(n=this.proxy.getURL(n)),n};function p1e(e){let t=Object.keys(e);return t.length===0?"":t.length===1&&!l(e[t[0]])?`?${t[0]}`:`?${dx(e)}`}Mt.prototype.setQueryParameters=function(e,t){t?this._queryParameters=pD(this._queryParameters,e,!1):this._queryParameters=pD(e,this._queryParameters,!1)};Mt.prototype.appendQueryParameters=function(e){this._queryParameters=pD(e,this._queryParameters,!0)};Mt.prototype.setTemplateValues=function(e,t){t?this._templateValues=Ft(this._templateValues,e):this._templateValues=Ft(e,this._templateValues)};Mt.prototype.getDerivedResource=function(e){let t=this.clone();if(t._retryCount=0,l(e.url)){let n=e.preserveQueryParameters??!1;t.parseUrl(e.url,!0,n,this._url)}return l(e.queryParameters)&&(t._queryParameters=Ft(e.queryParameters,t.queryParameters)),l(e.templateValues)&&(t._templateValues=Ft(e.templateValues,t.templateValues)),l(e.headers)&&(t.headers=Ft(e.headers,t.headers)),l(e.proxy)&&(t.proxy=e.proxy),l(e.request)&&(t.request=e.request),l(e.retryCallback)&&(t.retryCallback=e.retryCallback),l(e.retryAttempts)&&(t.retryAttempts=e.retryAttempts),t};Mt.prototype.retryOnError=function(e){let t=this.retryCallback;if(typeof t!="function"||this._retryCount>=this.retryAttempts)return Promise.resolve(!1);let n=this;return Promise.resolve(t(this,e)).then(function(i){return++n._retryCount,i})};Mt.prototype.clone=function(e){return l(e)?(e._url=this._url,e._queryParameters=He(this._queryParameters),e._templateValues=He(this._templateValues),e.headers=He(this.headers),e.proxy=this.proxy,e.retryCallback=this.retryCallback,e.retryAttempts=this.retryAttempts,e._retryCount=0,e.request=this.request.clone(),e):new Mt({url:this._url,queryParameters:this.queryParameters,templateValues:this.templateValues,headers:this.headers,proxy:this.proxy,retryCallback:this.retryCallback,retryAttempts:this.retryAttempts,request:this.request.clone(),parseUrl:!1,credits:l(this.credits)?this.credits.slice():void 0})};Mt.prototype.getBaseUri=function(e){return GR(this.getUrlComponent(e),e)};Mt.prototype.appendForwardSlash=function(){this._url=VR(this._url)};Mt.prototype.fetchArrayBuffer=function(){return this.fetch({responseType:"arraybuffer"})};Mt.fetchArrayBuffer=function(e){return new Mt(e).fetchArrayBuffer()};Mt.prototype.fetchBlob=function(){return this.fetch({responseType:"blob"})};Mt.fetchBlob=function(e){return new Mt(e).fetchBlob()};Mt.prototype.fetchImage=function(e){e=e??Q.EMPTY_OBJECT;let t=e.preferImageBitmap??!1,n=e.preferBlob??!1,i=e.flipY??!1,o=e.skipColorSpaceConversion??!1;if(_3(this.request),!doe||this.isDataUri||this.isBlobUri||!this.hasHeaders&&!n)return this._fetchImage({resource:this,flipY:i,skipColorSpaceConversion:o,preferImageBitmap:t});let r=this.fetchBlob();if(!l(r))return;let s,a,c,d;return Mt.supportsImageBitmapOptions().then(function(u){return s=u,a=s&&t,r}).then(function(u){if(!l(u))return;if(d=u,a)return Mt.createImageBitmapFromBlob(u,{flipY:i,premultiplyAlpha:!1,skipColorSpaceConversion:o});let h=window.URL.createObjectURL(u);return c=new Mt({url:h}),c._fetchImage({flipY:i,skipColorSpaceConversion:o,preferImageBitmap:!1})}).then(function(u){if(l(u))return u.blob=d,a||window.URL.revokeObjectURL(c.url),u}).catch(function(u){return l(c)&&window.URL.revokeObjectURL(c.url),u.blob=d,Promise.reject(u)})};Mt.prototype._fetchImage=function(e){let t=this,n=e.flipY,i=e.skipColorSpaceConversion,o=e.preferImageBitmap,r=t.request;r.url=t.url,r.requestFunction=function(){let a=!1;!t.isDataUri&&!t.isBlobUri&&(a=t.isCrossOriginUrl);let c=dd();return Mt._Implementations.createImage(r,a,c,n,i,o),c.promise};let s=Yc.request(r);if(l(s))return s.catch(function(a){return r.state!==Ai.FAILED?Promise.reject(a):t.retryOnError(a).then(function(c){return c?(r.state=Ai.UNISSUED,r.deferred=void 0,t._fetchImage({flipY:n,skipColorSpaceConversion:i,preferImageBitmap:o})):Promise.reject(a)})})};Mt.fetchImage=function(e){return new Mt(e).fetchImage({flipY:e.flipY,skipColorSpaceConversion:e.skipColorSpaceConversion,preferBlob:e.preferBlob,preferImageBitmap:e.preferImageBitmap})};Mt.prototype.fetchText=function(){return this.fetch({responseType:"text"})};Mt.fetchText=function(e){return new Mt(e).fetchText()};Mt.prototype.fetchJson=function(){let e=this.fetch({responseType:"text",headers:{Accept:"application/json,*/*;q=0.01"}});if(l(e))return e.then(function(t){if(l(t))return JSON.parse(t)})};Mt.fetchJson=function(e){return new Mt(e).fetchJson()};Mt.prototype.fetchXML=function(){return this.fetch({responseType:"document",overrideMimeType:"text/xml"})};Mt.fetchXML=function(e){return new Mt(e).fetchXML()};Mt.prototype.fetchJsonp=function(e){e=e??"callback",_3(this.request);let t;do t=`loadJsonp${L.nextRandomNumber().toString().substring(2,8)}`;while(l(window[t]));return uoe(this,e,t)};function uoe(e,t,n){let i={};i[t]=n,e.setQueryParameters(i);let o=e.request,r=e.url;o.url=r,o.requestFunction=function(){let a=dd();return window[n]=function(c){a.resolve(c);try{delete window[n]}catch{window[n]=void 0}},Mt._Implementations.loadAndExecuteScript(r,n,a),a.promise};let s=Yc.request(o);if(l(s))return s.catch(function(a){return o.state!==Ai.FAILED?Promise.reject(a):e.retryOnError(a).then(function(c){return c?(o.state=Ai.UNISSUED,o.deferred=void 0,uoe(e,t,n)):Promise.reject(a)})})}Mt.fetchJsonp=function(e){return new Mt(e).fetchJsonp(e.callbackParameterName)};Mt.prototype._makeRequest=function(e){let t=this;_3(t.request);let n=t.request,i=t.url;n.url=i,n.requestFunction=function(){let r=e.responseType,s=Ft(e.headers,t.headers),a=e.overrideMimeType,c=e.method,d=e.data,u=dd(),h=Mt._Implementations.loadWithXhr(i,r,c,d,s,u,a);return l(h)&&l(h.abort)&&(n.cancelFunction=function(){h.abort()}),u.promise};let o=Yc.request(n);if(l(o))return o.then(function(r){return n.cancelFunction=void 0,r}).catch(function(r){return n.cancelFunction=void 0,n.state!==Ai.FAILED?Promise.reject(r):t.retryOnError(r).then(function(s){return s?(n.state=Ai.UNISSUED,n.deferred=void 0,t.fetch(e)):Promise.reject(r)})})};function _3(e){if(e.state===Ai.ISSUED||e.state===Ai.ACTIVE)throw new me("The Resource is already being fetched.");e.state=Ai.UNISSUED,e.deferred=void 0}var A1e=/^data:(.*?)(;base64)?,(.*)$/;function fD(e,t){let n=decodeURIComponent(t);return e?atob(n):n}function coe(e,t){let n=fD(e,t),i=new ArrayBuffer(n.length),o=new Uint8Array(i);for(let r=0;r<n.length;r++)o[r]=n.charCodeAt(r);return i}function g1e(e,t){t=t??"";let n=e[1],i=!!e[2],o=e[3],r,s;switch(t){case"":case"text":return fD(i,o);case"arraybuffer":return coe(i,o);case"blob":return r=coe(i,o),new Blob([r],{type:n});case"document":return s=new DOMParser,s.parseFromString(fD(i,o),n);case"json":return JSON.parse(fD(i,o));default:}}Mt.prototype.fetch=function(e){return e=qf(e,{}),e.method="GET",this._makeRequest(e)};Mt.fetch=function(e){return new Mt(e).fetch({responseType:e.responseType,overrideMimeType:e.overrideMimeType})};Mt.prototype.delete=function(e){return e=qf(e,{}),e.method="DELETE",this._makeRequest(e)};Mt.delete=function(e){return new Mt(e).delete({responseType:e.responseType,overrideMimeType:e.overrideMimeType,data:e.data})};Mt.prototype.head=function(e){return e=qf(e,{}),e.method="HEAD",this._makeRequest(e)};Mt.head=function(e){return new Mt(e).head({responseType:e.responseType,overrideMimeType:e.overrideMimeType})};Mt.prototype.options=function(e){return e=qf(e,{}),e.method="OPTIONS",this._makeRequest(e)};Mt.options=function(e){return new Mt(e).options({responseType:e.responseType,overrideMimeType:e.overrideMimeType})};Mt.prototype.post=function(e,t){return vo.defined("data",e),t=qf(t,{}),t.method="POST",t.data=e,this._makeRequest(t)};Mt.post=function(e){return new Mt(e).post(e.data,{responseType:e.responseType,overrideMimeType:e.overrideMimeType})};Mt.prototype.put=function(e,t){return vo.defined("data",e),t=qf(t,{}),t.method="PUT",t.data=e,this._makeRequest(t)};Mt.put=function(e){return new Mt(e).put(e.data,{responseType:e.responseType,overrideMimeType:e.overrideMimeType})};Mt.prototype.patch=function(e,t){return vo.defined("data",e),t=qf(t,{}),t.method="PATCH",t.data=e,this._makeRequest(t)};Mt.patch=function(e){return new Mt(e).patch(e.data,{responseType:e.responseType,overrideMimeType:e.overrideMimeType})};Mt._Implementations={};Mt._Implementations.loadImageElement=function(e,t,n){let i=new Image;i.onload=function(){i.naturalWidth===0&&i.naturalHeight===0&&i.width===0&&i.height===0&&(i.width=300,i.height=150),n.resolve(i)},i.onerror=function(o){n.reject(o)},t&&(cS.contains(e)?i.crossOrigin="use-credentials":i.crossOrigin=""),i.src=e};Mt._Implementations.createImage=function(e,t,n,i,o,r,s){let a=e.url;Mt.supportsImageBitmapOptions().then(function(c){if(!(c&&r)){Mt._Implementations.loadImageElement(a,t,n);return}let d="blob",u="GET",h=dd(),p=Mt._Implementations.loadWithXhr(a,d,u,void 0,s,h,void 0,void 0,void 0);return l(p)&&l(p.abort)&&(e.cancelFunction=function(){p.abort()}),h.promise.then(function(A){if(!l(A)){n.reject(new me(`Successfully retrieved ${a} but it contained no content.`));return}return Mt.createImageBitmapFromBlob(A,{flipY:i,premultiplyAlpha:!1,skipColorSpaceConversion:o})}).then(function(A){n.resolve(A)})}).catch(function(c){n.reject(c)})};Mt.createImageBitmapFromBlob=function(e,t){return vo.defined("options",t),vo.typeOf.bool("options.flipY",t.flipY),vo.typeOf.bool("options.premultiplyAlpha",t.premultiplyAlpha),vo.typeOf.bool("options.skipColorSpaceConversion",t.skipColorSpaceConversion),createImageBitmap(e,{imageOrientation:t.flipY?"flipY":"none",premultiplyAlpha:t.premultiplyAlpha?"premultiply":"none",colorSpaceConversion:t.skipColorSpaceConversion?"none":"default"})};function b1e(e,t,n,i,o,r,s){fetch(e,{method:n,headers:o}).then(async a=>{if(!a.ok){let c={};a.headers.forEach((d,u)=>{c[u]=d}),r.reject(new Kf(a.status,a,c));return}switch(t){case"text":r.resolve(a.text());break;case"json":r.resolve(a.json());break;default:r.resolve(new Uint8Array(await a.arrayBuffer()).buffer);break}}).catch(()=>{r.reject(new Kf)})}var y1e=typeof XMLHttpRequest>"u";Mt._Implementations.loadWithXhr=function(e,t,n,i,o,r,s){let a=A1e.exec(e);if(a!==null){r.resolve(g1e(a,t));return}if(y1e){b1e(e,t,n,i,o,r,s);return}let c=new XMLHttpRequest;if(cS.contains(e)&&(c.withCredentials=!0),c.open(n,e,!0),l(s)&&l(c.overrideMimeType)&&c.overrideMimeType(s),l(o))for(let u in o)o.hasOwnProperty(u)&&c.setRequestHeader(u,o[u]);l(t)&&(c.responseType=t);let d=!1;return typeof e=="string"&&(d=e.indexOf("file://")===0||typeof window<"u"&&window.location.origin==="file://"),c.onload=function(){if((c.status<200||c.status>=300)&&!(d&&c.status===0)){r.reject(new Kf(c.status,c.response,c.getAllResponseHeaders()));return}let u=c.response,h=c.responseType;if(n==="HEAD"||n==="OPTIONS"){let A=c.getAllResponseHeaders().trim().split(/[\r\n]+/),f={};A.forEach(function(b){let C=b.split(": "),T=C.shift();f[T]=C.join(": ")}),r.resolve(f);return}if(c.status===204)r.resolve(void 0);else if(l(u)&&(!l(t)||h===t))r.resolve(u);else if(t==="json"&&typeof u=="string")try{r.resolve(JSON.parse(u))}catch(p){r.reject(p)}else(h===""||h==="document")&&l(c.responseXML)&&c.responseXML.hasChildNodes()?r.resolve(c.responseXML):(h===""||h==="text")&&l(c.responseText)?r.resolve(c.responseText):r.reject(new me("Invalid XMLHttpRequest response type."))},c.onerror=function(u){r.reject(new Kf)},c.send(i),c};Mt._Implementations.loadAndExecuteScript=function(e,t,n){return lx(e,t).catch(function(i){n.reject(i)})};Mt._DefaultImplementations={};Mt._DefaultImplementations.createImage=Mt._Implementations.createImage;Mt._DefaultImplementations.loadWithXhr=Mt._Implementations.loadWithXhr;Mt._DefaultImplementations.loadAndExecuteScript=Mt._Implementations.loadAndExecuteScript;Mt.DEFAULT=Object.freeze(new Mt({url:typeof document>"u"?"":document.location.href.split("?")[0]}));var Le=Mt;function NR(e){e=e??Q.EMPTY_OBJECT,this._dates=void 0,this._samples=void 0,this._dateColumn=-1,this._xPoleWanderRadiansColumn=-1,this._yPoleWanderRadiansColumn=-1,this._ut1MinusUtcSecondsColumn=-1,this._xCelestialPoleOffsetRadiansColumn=-1,this._yCelestialPoleOffsetRadiansColumn=-1,this._taiMinusUtcSecondsColumn=-1,this._columnCount=0,this._lastIndex=-1,this._addNewLeapSeconds=e.addNewLeapSeconds??!0,l(e.data)?moe(this,e.data):moe(this,{columnNames:["dateIso8601","modifiedJulianDateUtc","xPoleWanderRadians","yPoleWanderRadians","ut1MinusUtcSeconds","lengthOfDayCorrectionSeconds","xCelestialPoleOffsetRadians","yCelestialPoleOffsetRadians","taiMinusUtcSeconds"],samples:[]})}NR.fromUrl=async function(e,t){t=t??Q.EMPTY_OBJECT;let n=Le.createIfNeeded(e),i;try{i=await n.fetchJson()}catch{throw new me(`An error occurred while retrieving the EOP data from the URL ${n.url}.`)}return new NR({addNewLeapSeconds:t.addNewLeapSeconds,data:i})};NR.NONE=Object.freeze({compute:function(e,t){return l(t)?(t.xPoleWander=0,t.yPoleWander=0,t.xPoleOffset=0,t.yPoleOffset=0,t.ut1MinusUtc=0):t=new vb(0,0,0,0,0),t}});NR.prototype.compute=function(e,t){if(!l(this._samples))return;if(l(t)||(t=new vb(0,0,0,0,0)),this._samples.length===0)return t.xPoleWander=0,t.yPoleWander=0,t.xPoleOffset=0,t.yPoleOffset=0,t.ut1MinusUtc=0,t;let n=this._dates,i=this._lastIndex,o=0,r=0;if(l(i)){let a=n[i],c=n[i+1],d=q.lessThanOrEquals(a,e),u=!l(c),h=u||q.greaterThanOrEquals(c,e);if(d&&h)return o=i,!u&&c.equals(e)&&++o,r=o+1,foe(this,n,this._samples,e,o,r,t),t}let s=yo(n,e,q.compare,this._dateColumn);return s>=0?(s<n.length-1&&n[s+1].equals(e)&&++s,o=s,r=s):(r=~s,o=r-1,o<0&&(o=0)),this._lastIndex=o,foe(this,n,this._samples,e,o,r,t),t};function x1e(e,t){return q.compare(e.julianDate,t)}function moe(e,t){if(!l(t.columnNames))throw new me("Error in loaded EOP data: The columnNames property is required.");if(!l(t.samples))throw new me("Error in loaded EOP data: The samples property is required.");let n=t.columnNames.indexOf("modifiedJulianDateUtc"),i=t.columnNames.indexOf("xPoleWanderRadians"),o=t.columnNames.indexOf("yPoleWanderRadians"),r=t.columnNames.indexOf("ut1MinusUtcSeconds"),s=t.columnNames.indexOf("xCelestialPoleOffsetRadians"),a=t.columnNames.indexOf("yCelestialPoleOffsetRadians"),c=t.columnNames.indexOf("taiMinusUtcSeconds");if(n<0||i<0||o<0||r<0||s<0||a<0||c<0)throw new me("Error in loaded EOP data: The columnNames property must include modifiedJulianDateUtc, xPoleWanderRadians, yPoleWanderRadians, ut1MinusUtcSeconds, xCelestialPoleOffsetRadians, yCelestialPoleOffsetRadians, and taiMinusUtcSeconds columns");let d=e._samples=t.samples,u=e._dates=[];e._dateColumn=n,e._xPoleWanderRadiansColumn=i,e._yPoleWanderRadiansColumn=o,e._ut1MinusUtcSecondsColumn=r,e._xCelestialPoleOffsetRadiansColumn=s,e._yCelestialPoleOffsetRadiansColumn=a,e._taiMinusUtcSecondsColumn=c,e._columnCount=t.columnNames.length,e._lastIndex=void 0;let h,p=e._addNewLeapSeconds;for(let A=0,f=d.length;A<f;A+=e._columnCount){let b=d[A+n],C=d[A+c],T=b+di.MODIFIED_JULIAN_DATE_DIFFERENCE,E=new q(T,C,ci.TAI);if(u.push(E),p){if(C!==h&&l(h)){let S=q.leapSeconds,I=yo(S,E,x1e);if(I<0){let R=new ho(E,C);S.splice(~I,0,R)}}h=C}}}function hoe(e,t,n,i,o){let r=n*i;o.xPoleWander=t[r+e._xPoleWanderRadiansColumn],o.yPoleWander=t[r+e._yPoleWanderRadiansColumn],o.xPoleOffset=t[r+e._xCelestialPoleOffsetRadiansColumn],o.yPoleOffset=t[r+e._yCelestialPoleOffsetRadiansColumn],o.ut1MinusUtc=t[r+e._ut1MinusUtcSecondsColumn]}function wR(e,t,n){return t+e*(n-t)}function foe(e,t,n,i,o,r,s){let a=e._columnCount;if(r>t.length-1)return s.xPoleWander=0,s.yPoleWander=0,s.xPoleOffset=0,s.yPoleOffset=0,s.ut1MinusUtc=0,s;let c=t[o],d=t[r];if(c.equals(d)||i.equals(c))return hoe(e,n,o,a,s),s;if(i.equals(d))return hoe(e,n,r,a,s),s;let u=q.secondsDifference(i,c)/q.secondsDifference(d,c),h=o*a,p=r*a,A=n[h+e._ut1MinusUtcSecondsColumn],f=n[p+e._ut1MinusUtcSecondsColumn],b=f-A;if(b>.5||b<-.5){let C=n[h+e._taiMinusUtcSecondsColumn],T=n[p+e._taiMinusUtcSecondsColumn];C!==T&&(d.equals(i)?A=f:f-=T-C)}return s.xPoleWander=wR(u,n[h+e._xPoleWanderRadiansColumn],n[p+e._xPoleWanderRadiansColumn]),s.yPoleWander=wR(u,n[h+e._yPoleWanderRadiansColumn],n[p+e._yPoleWanderRadiansColumn]),s.xPoleOffset=wR(u,n[h+e._xCelestialPoleOffsetRadiansColumn],n[p+e._xCelestialPoleOffsetRadiansColumn]),s.yPoleOffset=wR(u,n[h+e._yCelestialPoleOffsetRadiansColumn],n[p+e._yCelestialPoleOffsetRadiansColumn]),s.ut1MinusUtc=wR(u,A,f),s}var PR=NR;var FXt=y(x(),1);function Mc(e,t,n){this.heading=e??0,this.pitch=t??0,this.roll=n??0}Mc.fromQuaternion=function(e,t){l(t)||(t=new Mc);let n=2*(e.w*e.y-e.z*e.x),i=1-2*(e.x*e.x+e.y*e.y),o=2*(e.w*e.x+e.y*e.z),r=1-2*(e.y*e.y+e.z*e.z),s=2*(e.w*e.z+e.x*e.y);return t.heading=-Math.atan2(s,r),t.roll=Math.atan2(o,i),t.pitch=-L.asinClamped(n),t};Mc.fromDegrees=function(e,t,n,i){return l(i)||(i=new Mc),i.heading=e*L.RADIANS_PER_DEGREE,i.pitch=t*L.RADIANS_PER_DEGREE,i.roll=n*L.RADIANS_PER_DEGREE,i};Mc.clone=function(e,t){if(l(e))return l(t)?(t.heading=e.heading,t.pitch=e.pitch,t.roll=e.roll,t):new Mc(e.heading,e.pitch,e.roll)};Mc.equals=function(e,t){return e===t||l(e)&&l(t)&&e.heading===t.heading&&e.pitch===t.pitch&&e.roll===t.roll};Mc.equalsEpsilon=function(e,t,n,i){return e===t||l(e)&&l(t)&&L.equalsEpsilon(e.heading,t.heading,n,i)&&L.equalsEpsilon(e.pitch,t.pitch,n,i)&&L.equalsEpsilon(e.roll,t.roll,n,i)};Mc.prototype.clone=function(e){return Mc.clone(this,e)};Mc.prototype.equals=function(e){return Mc.equals(this,e)};Mc.prototype.equalsEpsilon=function(e,t,n){return Mc.equalsEpsilon(this,e,t,n)};Mc.prototype.toString=function(){return`(${this.heading}, ${this.pitch}, ${this.roll})`};var yc=Mc;var KXt=y(x(),1);var XXt=y(x(),1);var poe={};var Aoe=/((?:.*\/)|^)Cesium\.js(?:\?|\#|$)/;function C1e(){let e=document.getElementsByTagName("script");for(let t=0,n=e.length;t<n;++t){let i=e[t].getAttribute("src"),o=Aoe.exec(i);if(o!==null)return o[1]}}var AD;function goe(e){return typeof document>"u"?e:(l(AD)||(AD=document.createElement("a")),AD.href=e,AD.href)}var hx;function boe(){if(l(hx))return hx;let e;return typeof CESIUM_BASE_URL<"u"?e=CESIUM_BASE_URL:l(poe?.url)?e=Hf(".",poe.url):typeof define=="object"&&l(define.amd)&&!define.amd.toUrlUndefined&&l(UU.toUrl)?e=Hf("..",fx("Core/buildModuleUrl.js")):e=C1e(),hx=new Le({url:goe(e)}),hx.appendForwardSlash(),hx}function T1e(e){return goe(UU.toUrl(`../${e}`))}function yoe(e){return boe().getDerivedResource({url:e}).url}var gD;function fx(e){return l(gD)||(typeof define=="object"&&l(define.amd)&&!define.amd.toUrlUndefined&&l(UU.toUrl)?gD=T1e:gD=yoe),gD(e)}fx._cesiumScriptRegex=Aoe;fx._buildModuleUrlFromBaseUrl=yoe;fx._clearBaseResource=function(){hx=void 0};fx.setBaseUrl=function(e){hx=Le.DEFAULT.getDerivedResource({url:e})};fx.getCesiumBaseUrl=boe;var en=fx;var vXt=y(x(),1);function E1e(e,t,n){this.x=e,this.y=t,this.s=n}var px=E1e;function R3(e){e=e??Q.EMPTY_OBJECT,this._xysFileUrlTemplate=Le.createIfNeeded(e.xysFileUrlTemplate),this._interpolationOrder=e.interpolationOrder??9,this._sampleZeroJulianEphemerisDate=e.sampleZeroJulianEphemerisDate??24423965e-1,this._sampleZeroDateTT=new q(this._sampleZeroJulianEphemerisDate,0,ci.TAI),this._stepSizeDays=e.stepSizeDays??1,this._samplesPerXysFile=e.samplesPerXysFile??1e3,this._totalSamples=e.totalSamples??27426,this._samples=new Array(this._totalSamples*3),this._chunkDownloadsInProgress=[];let t=this._interpolationOrder,n=this._denominators=new Array(t+1),i=this._xTable=new Array(t+1),o=Math.pow(this._stepSizeDays,t);for(let r=0;r<=t;++r){n[r]=o,i[r]=r*this._stepSizeDays;for(let s=0;s<=t;++s)s!==r&&(n[r]*=r-s);n[r]=1/n[r]}this._work=new Array(t+1),this._coef=new Array(t+1)}var S1e=new q(0,0,ci.TAI);function I3(e,t,n){let i=S1e;return i.dayNumber=t,i.secondsOfDay=n,q.daysDifference(i,e._sampleZeroDateTT)}R3.prototype.preload=function(e,t,n,i){let o=I3(this,e,t),r=I3(this,n,i),s=o/this._stepSizeDays-this._interpolationOrder/2|0;s<0&&(s=0);let a=r/this._stepSizeDays-this._interpolationOrder/2|0+this._interpolationOrder;a>=this._totalSamples&&(a=this._totalSamples-1);let c=s/this._samplesPerXysFile|0,d=a/this._samplesPerXysFile|0,u=[];for(let h=c;h<=d;++h)u.push(Z3(this,h));return Promise.all(u)};R3.prototype.computeXysRadians=function(e,t,n){let i=I3(this,e,t);if(i<0)return;let o=i/this._stepSizeDays|0;if(o>=this._totalSamples)return;let r=this._interpolationOrder,s=o-(r/2|0);s<0&&(s=0);let a=s+r;a>=this._totalSamples&&(a=this._totalSamples-1,s=a-r,s<0&&(s=0));let c=!1,d=this._samples;if(l(d[s*3])||(Z3(this,s/this._samplesPerXysFile|0),c=!0),l(d[a*3])||(Z3(this,a/this._samplesPerXysFile|0),c=!0),c)return;l(n)?(n.x=0,n.y=0,n.s=0):n=new px(0,0,0);let u=i-s*this._stepSizeDays,h=this._work,p=this._denominators,A=this._coef,f=this._xTable,b,C;for(b=0;b<=r;++b)h[b]=u-f[b];for(b=0;b<=r;++b){for(A[b]=1,C=0;C<=r;++C)C!==b&&(A[b]*=h[C]);A[b]*=p[b];let T=(s+b)*3;n.x+=A[b]*d[T++],n.y+=A[b]*d[T++],n.s+=A[b]*d[T]}return n};function Z3(e,t){if(e._chunkDownloadsInProgress[t])return e._chunkDownloadsInProgress[t];let n,i=e._xysFileUrlTemplate;l(i)?n=i.getDerivedResource({templateValues:{0:t}}):n=new Le({url:en(`Assets/IAU2006_XYS/IAU2006_XYS_${t}.json`)});let o=n.fetchJson().then(function(r){e._chunkDownloadsInProgress[t]=!1;let s=e._samples,a=r.samples,c=t*e._samplesPerXysFile*3;for(let d=0,u=a.length;d<u;++d)s[c+d]=a[d]});return e._chunkDownloadsInProgress[t]=o,o}var XR=R3;var iYt=y(x(),1);function ft(e,t,n,i){this.x=e??0,this.y=t??0,this.z=n??0,this.w=i??0}var YR=new m;ft.fromAxisAngle=function(e,t,n){let i=t/2,o=Math.sin(i);YR=m.normalize(e,YR);let r=YR.x*o,s=YR.y*o,a=YR.z*o,c=Math.cos(i);return l(n)?(n.x=r,n.y=s,n.z=a,n.w=c,n):new ft(r,s,a,c)};var _1e=[1,2,0],I1e=new Array(3);ft.fromRotationMatrix=function(e,t){let n,i,o,r,s,a=e[$.COLUMN0ROW0],c=e[$.COLUMN1ROW1],d=e[$.COLUMN2ROW2],u=a+c+d;if(u>0)n=Math.sqrt(u+1),s=.5*n,n=.5/n,i=(e[$.COLUMN1ROW2]-e[$.COLUMN2ROW1])*n,o=(e[$.COLUMN2ROW0]-e[$.COLUMN0ROW2])*n,r=(e[$.COLUMN0ROW1]-e[$.COLUMN1ROW0])*n;else{let h=_1e,p=0;c>a&&(p=1),d>a&&d>c&&(p=2);let A=h[p],f=h[A];n=Math.sqrt(e[$.getElementIndex(p,p)]-e[$.getElementIndex(A,A)]-e[$.getElementIndex(f,f)]+1);let b=I1e;b[p]=.5*n,n=.5/n,s=(e[$.getElementIndex(f,A)]-e[$.getElementIndex(A,f)])*n,b[A]=(e[$.getElementIndex(A,p)]+e[$.getElementIndex(p,A)])*n,b[f]=(e[$.getElementIndex(f,p)]+e[$.getElementIndex(p,f)])*n,i=-b[0],o=-b[1],r=-b[2]}return l(t)?(t.x=i,t.y=o,t.z=r,t.w=s,t):new ft(i,o,r,s)};var xoe=new ft,Coe=new ft,V3=new ft,Toe=new ft;ft.fromHeadingPitchRoll=function(e,t){return Toe=ft.fromAxisAngle(m.UNIT_X,e.roll,xoe),V3=ft.fromAxisAngle(m.UNIT_Y,-e.pitch,t),t=ft.multiply(V3,Toe,V3),Coe=ft.fromAxisAngle(m.UNIT_Z,-e.heading,xoe),ft.multiply(Coe,t,t)};var bD=new m,G3=new m,yh=new ft,Eoe=new ft,yD=new ft;ft.packedLength=4;ft.pack=function(e,t,n){return n=n??0,t[n++]=e.x,t[n++]=e.y,t[n++]=e.z,t[n]=e.w,t};ft.unpack=function(e,t,n){return t=t??0,l(n)||(n=new ft),n.x=e[t],n.y=e[t+1],n.z=e[t+2],n.w=e[t+3],n};ft.packedInterpolationLength=3;ft.convertPackedArrayForInterpolation=function(e,t,n,i){ft.unpack(e,n*4,yD),ft.conjugate(yD,yD);for(let o=0,r=n-t+1;o<r;o++){let s=o*3;ft.unpack(e,(t+o)*4,yh),ft.multiply(yh,yD,yh),yh.w<0&&ft.negate(yh,yh),ft.computeAxis(yh,bD);let a=ft.computeAngle(yh);l(i)||(i=[]),i[s]=bD.x*a,i[s+1]=bD.y*a,i[s+2]=bD.z*a}};ft.unpackInterpolationResult=function(e,t,n,i,o){l(o)||(o=new ft),m.fromArray(e,0,G3);let r=m.magnitude(G3);return ft.unpack(t,i*4,Eoe),r===0?ft.clone(ft.IDENTITY,yh):ft.fromAxisAngle(G3,r,yh),ft.multiply(yh,Eoe,o)};ft.clone=function(e,t){if(l(e))return l(t)?(t.x=e.x,t.y=e.y,t.z=e.z,t.w=e.w,t):new ft(e.x,e.y,e.z,e.w)};ft.conjugate=function(e,t){return t.x=-e.x,t.y=-e.y,t.z=-e.z,t.w=e.w,t};ft.magnitudeSquared=function(e){return e.x*e.x+e.y*e.y+e.z*e.z+e.w*e.w};ft.magnitude=function(e){return Math.sqrt(ft.magnitudeSquared(e))};ft.normalize=function(e,t){let n=1/ft.magnitude(e),i=e.x*n,o=e.y*n,r=e.z*n,s=e.w*n;return t.x=i,t.y=o,t.z=r,t.w=s,t};ft.inverse=function(e,t){let n=ft.magnitudeSquared(e);return t=ft.conjugate(e,t),ft.multiplyByScalar(t,1/n,t)};ft.add=function(e,t,n){return n.x=e.x+t.x,n.y=e.y+t.y,n.z=e.z+t.z,n.w=e.w+t.w,n};ft.subtract=function(e,t,n){return n.x=e.x-t.x,n.y=e.y-t.y,n.z=e.z-t.z,n.w=e.w-t.w,n};ft.negate=function(e,t){return t.x=-e.x,t.y=-e.y,t.z=-e.z,t.w=-e.w,t};ft.dot=function(e,t){return e.x*t.x+e.y*t.y+e.z*t.z+e.w*t.w};ft.multiply=function(e,t,n){let i=e.x,o=e.y,r=e.z,s=e.w,a=t.x,c=t.y,d=t.z,u=t.w,h=s*a+i*u+o*d-r*c,p=s*c-i*d+o*u+r*a,A=s*d+i*c-o*a+r*u,f=s*u-i*a-o*c-r*d;return n.x=h,n.y=p,n.z=A,n.w=f,n};ft.multiplyByScalar=function(e,t,n){return n.x=e.x*t,n.y=e.y*t,n.z=e.z*t,n.w=e.w*t,n};ft.divideByScalar=function(e,t,n){return n.x=e.x/t,n.y=e.y/t,n.z=e.z/t,n.w=e.w/t,n};ft.computeAxis=function(e,t){let n=e.w;if(Math.abs(n-1)<L.EPSILON6||Math.abs(n+1)<L.EPSILON6)return t.x=1,t.y=t.z=0,t;let i=1/Math.sqrt(1-n*n);return t.x=e.x*i,t.y=e.y*i,t.z=e.z*i,t};ft.computeAngle=function(e){return Math.abs(e.w-1)<L.EPSILON6?0:2*Math.acos(e.w)};var L3=new ft;ft.lerp=function(e,t,n,i){return L3=ft.multiplyByScalar(t,n,L3),i=ft.multiplyByScalar(e,1-n,i),ft.add(L3,i,i)};var Soe=new ft,W3=new ft,F3=new ft;ft.slerp=function(e,t,n,i){let o=ft.dot(e,t),r=t;if(o<0&&(o=-o,r=Soe=ft.negate(t,Soe)),1-o<L.EPSILON6)return ft.lerp(e,r,n,i);let s=Math.acos(o);return W3=ft.multiplyByScalar(e,Math.sin((1-n)*s),W3),F3=ft.multiplyByScalar(r,Math.sin(n*s),F3),i=ft.add(W3,F3,i),ft.multiplyByScalar(i,1/Math.sin(s),i)};ft.log=function(e,t){let n=L.acosClamped(e.w),i=0;return n!==0&&(i=n/Math.sin(n)),m.multiplyByScalar(e,i,t)};ft.exp=function(e,t){let n=m.magnitude(e),i=0;return n!==0&&(i=Math.sin(n)/n),t.x=e.x*i,t.y=e.y*i,t.z=e.z*i,t.w=Math.cos(n),t};var Z1e=new m,R1e=new m,MR=new ft,dS=new ft;ft.computeInnerQuadrangle=function(e,t,n,i){let o=ft.conjugate(t,MR);ft.multiply(o,n,dS);let r=ft.log(dS,Z1e);ft.multiply(o,e,dS);let s=ft.log(dS,R1e);return m.add(r,s,r),m.multiplyByScalar(r,.25,r),m.negate(r,r),ft.exp(r,MR),ft.multiply(t,MR,i)};ft.squad=function(e,t,n,i,o,r){let s=ft.slerp(e,t,o,MR),a=ft.slerp(n,i,o,dS);return ft.slerp(s,a,2*o*(1-o),r)};var V1e=new ft,_oe=1.9011074535173003,xD=hn.supportsTypedArrays()?new Float32Array(8):[],CD=hn.supportsTypedArrays()?new Float32Array(8):[],SA=hn.supportsTypedArrays()?new Float32Array(8):[],_A=hn.supportsTypedArrays()?new Float32Array(8):[];for(let e=0;e<7;++e){let t=e+1,n=2*t+1;xD[e]=1/(t*n),CD[e]=t/n}xD[7]=_oe/136;CD[7]=_oe*8/17;ft.fastSlerp=function(e,t,n,i){let o=ft.dot(e,t),r;o>=0?r=1:(r=-1,o=-o);let s=o-1,a=1-n,c=n*n,d=a*a;for(let A=7;A>=0;--A)SA[A]=(xD[A]*c-CD[A])*s,_A[A]=(xD[A]*d-CD[A])*s;let u=r*n*(1+SA[0]*(1+SA[1]*(1+SA[2]*(1+SA[3]*(1+SA[4]*(1+SA[5]*(1+SA[6]*(1+SA[7])))))))),h=a*(1+_A[0]*(1+_A[1]*(1+_A[2]*(1+_A[3]*(1+_A[4]*(1+_A[5]*(1+_A[6]*(1+_A[7])))))))),p=ft.multiplyByScalar(e,h,V1e);return ft.multiplyByScalar(t,u,i),ft.add(p,i,i)};ft.fastSquad=function(e,t,n,i,o,r){let s=ft.fastSlerp(e,t,o,MR),a=ft.fastSlerp(n,i,o,dS);return ft.fastSlerp(s,a,2*o*(1-o),r)};ft.equals=function(e,t){return e===t||l(e)&&l(t)&&e.x===t.x&&e.y===t.y&&e.z===t.z&&e.w===t.w};ft.equalsEpsilon=function(e,t,n){return n=n??0,e===t||l(e)&&l(t)&&Math.abs(e.x-t.x)<=n&&Math.abs(e.y-t.y)<=n&&Math.abs(e.z-t.z)<=n&&Math.abs(e.w-t.w)<=n};ft.ZERO=Object.freeze(new ft(0,0,0,0));ft.IDENTITY=Object.freeze(new ft(0,0,0,1));ft.prototype.clone=function(e){return ft.clone(this,e)};ft.prototype.equals=function(e){return ft.equals(this,e)};ft.prototype.equalsEpsilon=function(e,t){return ft.equalsEpsilon(this,e,t)};ft.prototype.toString=function(){return`(${this.x}, ${this.y}, ${this.z}, ${this.w})`};var Me=ft;var gi={},B3={up:{south:"east",north:"west",west:"south",east:"north"},down:{south:"west",north:"east",west:"north",east:"south"},south:{up:"west",down:"east",west:"down",east:"up"},north:{up:"east",down:"west",west:"up",east:"down"},west:{up:"north",down:"south",north:"down",south:"up"},east:{up:"south",down:"north",north:"up",south:"down"}},uS={north:[-1,0,0],east:[0,1,0],up:[0,0,1],south:[1,0,0],west:[0,-1,0],down:[0,0,-1]},w3={},ud={east:new m,north:new m,up:new m,west:new m,south:new m,down:new m},kb=new m,Qb=new m,Ob=new m;gi.localFrameToFixedFrameGenerator=function(e,t){if(!B3.hasOwnProperty(e)||!B3[e].hasOwnProperty(t))throw new fe("firstAxis and secondAxis must be east, north, up, west, south or down.");let n=B3[e][t],i,o=e+t;return l(w3[o])?i=w3[o]:(i=function(r,s,a){if(l(a)||(a=new F),m.equalsEpsilon(r,m.ZERO,L.EPSILON14))m.unpack(uS[e],0,kb),m.unpack(uS[t],0,Qb),m.unpack(uS[n],0,Ob);else if(L.equalsEpsilon(r.x,0,L.EPSILON14)&&L.equalsEpsilon(r.y,0,L.EPSILON14)){let c=L.sign(r.z);m.unpack(uS[e],0,kb),e!=="east"&&e!=="west"&&m.multiplyByScalar(kb,c,kb),m.unpack(uS[t],0,Qb),t!=="east"&&t!=="west"&&m.multiplyByScalar(Qb,c,Qb),m.unpack(uS[n],0,Ob),n!=="east"&&n!=="west"&&m.multiplyByScalar(Ob,c,Ob)}else{s=s??ie.default,s.geodeticSurfaceNormal(r,ud.up);let c=ud.up,d=ud.east;d.x=-r.y,d.y=r.x,d.z=0,m.normalize(d,ud.east),m.cross(c,d,ud.north),m.multiplyByScalar(ud.up,-1,ud.down),m.multiplyByScalar(ud.east,-1,ud.west),m.multiplyByScalar(ud.north,-1,ud.south),kb=ud[e],Qb=ud[t],Ob=ud[n]}return a[0]=kb.x,a[1]=kb.y,a[2]=kb.z,a[3]=0,a[4]=Qb.x,a[5]=Qb.y,a[6]=Qb.z,a[7]=0,a[8]=Ob.x,a[9]=Ob.y,a[10]=Ob.z,a[11]=0,a[12]=r.x,a[13]=r.y,a[14]=r.z,a[15]=1,a},w3[o]=i),i};gi.eastNorthUpToFixedFrame=gi.localFrameToFixedFrameGenerator("east","north");gi.northEastDownToFixedFrame=gi.localFrameToFixedFrameGenerator("north","east");gi.northUpEastToFixedFrame=gi.localFrameToFixedFrameGenerator("north","up");gi.northWestUpToFixedFrame=gi.localFrameToFixedFrameGenerator("north","west");var G1e=new Me,L1e=new m(1,1,1),W1e=new F;gi.headingPitchRollToFixedFrame=function(e,t,n,i,o){i=i??gi.eastNorthUpToFixedFrame;let r=Me.fromHeadingPitchRoll(t,G1e),s=F.fromTranslationQuaternionRotationScale(m.ZERO,r,L1e,W1e);return o=i(e,n,o),F.multiply(o,s,o)};var F1e=new F,B1e=new $;gi.headingPitchRollQuaternion=function(e,t,n,i,o){let r=gi.headingPitchRollToFixedFrame(e,t,n,i,F1e),s=F.getMatrix3(r,B1e);return Me.fromRotationMatrix(s,o)};var w1e=new m(1,1,1),N1e=new m,Ioe=new F,P1e=new F,X1e=new $,Y1e=new Me;gi.fixedFrameToHeadingPitchRoll=function(e,t,n,i){t=t??ie.default,n=n??gi.eastNorthUpToFixedFrame,l(i)||(i=new yc);let o=F.getTranslation(e,N1e);if(m.equals(o,m.ZERO))return i.heading=0,i.pitch=0,i.roll=0,i;let r=F.inverseTransformation(n(o,t,Ioe),Ioe),s=F.setScale(e,w1e,P1e);s=F.setTranslation(s,m.ZERO,s),r=F.multiply(r,s,r);let a=Me.fromRotationMatrix(F.getMatrix3(r,X1e),Y1e);return a=Me.normalize(a,a),yc.fromQuaternion(a,i)};var M1e=6*3600+2460+50.54841,v1e=8640184812866e-6,U1e=.093104,D1e=-62e-7,k1e=11772758384668e-32,Q1e=72921158553e-15,O1e=L.TWO_PI/86400,TD=new q;gi.computeIcrfToCentralBodyFixedMatrix=function(e,t){let n=gi.computeIcrfToFixedMatrix(e,t);return l(n)||(n=gi.computeTemeToPseudoFixedMatrix(e,t)),n};gi.computeTemeToPseudoFixedMatrix=function(e,t){TD=q.addSeconds(e,-q.computeTaiMinusUtc(e),TD);let n=TD.dayNumber,i=TD.secondsOfDay,o,r=n-2451545;i>=43200?o=(r+.5)/di.DAYS_PER_JULIAN_CENTURY:o=(r-.5)/di.DAYS_PER_JULIAN_CENTURY;let a=(M1e+o*(v1e+o*(U1e+o*D1e)))*O1e%L.TWO_PI,c=Q1e+k1e*(n-24515455e-1),d=(i+di.SECONDS_PER_DAY*.5)%di.SECONDS_PER_DAY,u=a+c*d,h=Math.cos(u),p=Math.sin(u);return l(t)?(t[0]=h,t[1]=-p,t[2]=0,t[3]=p,t[4]=h,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t):new $(h,p,0,-p,h,0,0,0,1)};gi.iau2006XysData=new XR;gi.earthOrientationParameters=PR.NONE;var X3=32.184,z1e=2451545;gi.preloadIcrfFixed=function(e){let t=e.start.dayNumber,n=e.start.secondsOfDay+X3,i=e.stop.dayNumber,o=e.stop.secondsOfDay+X3;return gi.iau2006XysData.preload(t,n,i,o)};gi.computeIcrfToFixedMatrix=function(e,t){l(t)||(t=new $);let n=gi.computeFixedToIcrfMatrix(e,t);if(l(n))return $.transpose(n,t)};var H1e=32.184,J1e=2451545,ED=new yc,K1e=new $,j1e=new q;gi.computeMoonFixedToIcrfMatrix=function(e,t){l(t)||(t=new $);let n=q.addSeconds(e,H1e,j1e),i=q.totalDays(n)-J1e,o=L.toRadians(12.112)-L.toRadians(.052992)*i,r=L.toRadians(24.224)-L.toRadians(.105984)*i,s=L.toRadians(227.645)+L.toRadians(13.012)*i,a=L.toRadians(261.105)+L.toRadians(13.340716)*i,c=L.toRadians(358)+L.toRadians(.9856)*i;return ED.pitch=L.toRadians(180)-L.toRadians(3.878)*Math.sin(o)-L.toRadians(.12)*Math.sin(r)+L.toRadians(.07)*Math.sin(s)-L.toRadians(.017)*Math.sin(a),ED.roll=L.toRadians(66.53-90)+L.toRadians(1.543)*Math.cos(o)+L.toRadians(.24)*Math.cos(r)-L.toRadians(.028)*Math.cos(s)+L.toRadians(.007)*Math.cos(a),ED.heading=L.toRadians(244.375-90)+L.toRadians(13.17635831)*i+L.toRadians(3.558)*Math.sin(o)+L.toRadians(.121)*Math.sin(r)-L.toRadians(.064)*Math.sin(s)+L.toRadians(.016)*Math.sin(a)+L.toRadians(.025)*Math.sin(c),$.fromHeadingPitchRoll(ED,K1e)};gi.computeIcrfToMoonFixedMatrix=function(e,t){l(t)||(t=new $);let n=gi.computeMoonFixedToIcrfMatrix(e,t);if(l(n))return $.transpose(n,t)};var q1e=new px(0,0,0),$1e=new vb(0,0,0,0,0,0),N3=new $,P3=new $;gi.computeFixedToIcrfMatrix=function(e,t){l(t)||(t=new $);let n=gi.earthOrientationParameters.compute(e,$1e);if(!l(n))return;let i=e.dayNumber,o=e.secondsOfDay+X3,r=gi.iau2006XysData.computeXysRadians(i,o,q1e);if(!l(r))return;let s=r.x+n.xPoleOffset,a=r.y+n.yPoleOffset,c=1/(1+Math.sqrt(1-s*s-a*a)),d=N3;d[0]=1-c*s*s,d[3]=-c*s*a,d[6]=s,d[1]=-c*s*a,d[4]=1-c*a*a,d[7]=a,d[2]=-s,d[5]=-a,d[8]=1-c*(s*s+a*a);let u=$.fromRotationZ(-r.s,P3),h=$.multiply(d,u,N3),p=e.dayNumber,A=e.secondsOfDay-q.computeTaiMinusUtc(e)+n.ut1MinusUtc,f=p-2451545,b=A/di.SECONDS_PER_DAY,C=.779057273264+b+.00273781191135448*(f+b);C=C%1*L.TWO_PI;let T=$.fromRotationZ(C,P3),E=$.multiply(h,T,N3),S=Math.cos(n.xPoleWander),I=Math.cos(n.yPoleWander),R=Math.sin(n.xPoleWander),V=Math.sin(n.yPoleWander),W=i-z1e+o/di.SECONDS_PER_DAY;W/=36525;let B=-47e-6*W*L.RADIANS_PER_DEGREE/3600,N=Math.cos(B),P=Math.sin(B),g=P3;return g[0]=S*N,g[1]=S*P,g[2]=R,g[3]=-I*P+V*R*N,g[4]=I*N+V*R*P,g[5]=-V*S,g[6]=-V*P-I*R*N,g[7]=V*N-I*R*P,g[8]=I*S,$.multiply(E,g,t)};var eWe=new re;gi.pointToWindowCoordinates=function(e,t,n,i){return i=gi.pointToGLWindowCoordinates(e,t,n,i),i.y=2*t[5]-i.y,i};gi.pointToGLWindowCoordinates=function(e,t,n,i){l(i)||(i=new M);let o=eWe;return F.multiplyByVector(e,re.fromElements(n.x,n.y,n.z,1,o),o),re.multiplyByScalar(o,1/o.w,o),F.multiplyByVector(t,o,o),M.fromCartesian4(o,i)};var tWe=new m,nWe=new m,iWe=new m;gi.rotationMatrixFromPositionVelocity=function(e,t,n,i){let o=(n??ie.default).geodeticSurfaceNormal(e,tWe),r=m.cross(t,o,nWe);m.equalsEpsilon(r,m.ZERO,L.EPSILON6)&&(r=m.clone(m.UNIT_X,r));let s=m.cross(r,t,iWe);return m.normalize(s,s),m.cross(t,s,r),m.negate(r,r),m.normalize(r,r),l(i)||(i=new $),i[0]=t.x,i[1]=t.y,i[2]=t.z,i[3]=r.x,i[4]=r.y,i[5]=r.z,i[6]=s.x,i[7]=s.y,i[8]=s.z,i};gi.SWIZZLE_3D_TO_2D_MATRIX=Object.freeze(new F(0,0,1,0,1,0,0,0,0,1,0,0,0,0,0,1));var Zoe=new Ae,Y3=new m,oWe=new m,rWe=new $,M3=new F,Roe=new F;gi.basisTo2D=function(e,t,n){let i=F.getTranslation(t,oWe),o=e.ellipsoid,r;if(m.equals(i,m.ZERO))r=m.clone(m.ZERO,Y3);else{let u=o.cartesianToCartographic(i,Zoe);r=e.project(u,Y3),m.fromElements(r.z,r.x,r.y,r)}let s=gi.eastNorthUpToFixedFrame(i,o,M3),a=F.inverseTransformation(s,Roe),c=F.getMatrix3(t,rWe),d=F.multiplyByMatrix3(a,c,n);return F.multiply(gi.SWIZZLE_3D_TO_2D_MATRIX,d,n),F.setTranslation(n,r,n),n};gi.ellipsoidTo2DModelMatrix=function(e,t,n){let i=e.ellipsoid,o=gi.eastNorthUpToFixedFrame(t,i,M3),r=F.inverseTransformation(o,Roe),s=i.cartesianToCartographic(t,Zoe),a=e.project(s,Y3);m.fromElements(a.z,a.x,a.y,a);let c=F.fromTranslation(a,M3);return F.multiply(gi.SWIZZLE_3D_TO_2D_MATRIX,r,n),F.multiply(c,n,n),n};var bt=gi;function Mn(e,t,n,i){this.west=e??0,this.south=t??0,this.east=n??0,this.north=i??0}Object.defineProperties(Mn.prototype,{width:{get:function(){return Mn.computeWidth(this)}},height:{get:function(){return Mn.computeHeight(this)}}});Mn.packedLength=4;Mn.pack=function(e,t,n){return n=n??0,t[n++]=e.west,t[n++]=e.south,t[n++]=e.east,t[n]=e.north,t};Mn.unpack=function(e,t,n){return t=t??0,l(n)||(n=new Mn),n.west=e[t++],n.south=e[t++],n.east=e[t++],n.north=e[t],n};Mn.computeWidth=function(e){let t=e.east,n=e.west;return t<n&&(t+=L.TWO_PI),t-n};Mn.computeHeight=function(e){return e.north-e.south};Mn.fromDegrees=function(e,t,n,i,o){return e=L.toRadians(e??0),t=L.toRadians(t??0),n=L.toRadians(n??0),i=L.toRadians(i??0),l(o)?(o.west=e,o.south=t,o.east=n,o.north=i,o):new Mn(e,t,n,i)};Mn.fromRadians=function(e,t,n,i,o){return l(o)?(o.west=e??0,o.south=t??0,o.east=n??0,o.north=i??0,o):new Mn(e,t,n,i)};Mn.fromCartographicArray=function(e,t){let n=Number.MAX_VALUE,i=-Number.MAX_VALUE,o=Number.MAX_VALUE,r=-Number.MAX_VALUE,s=Number.MAX_VALUE,a=-Number.MAX_VALUE;for(let c=0,d=e.length;c<d;c++){let u=e[c];n=Math.min(n,u.longitude),i=Math.max(i,u.longitude),s=Math.min(s,u.latitude),a=Math.max(a,u.latitude);let h=u.longitude>=0?u.longitude:u.longitude+L.TWO_PI;o=Math.min(o,h),r=Math.max(r,h)}return i-n>r-o&&(n=o,i=r,i>L.PI&&(i=i-L.TWO_PI),n>L.PI&&(n=n-L.TWO_PI)),l(t)?(t.west=n,t.south=s,t.east=i,t.north=a,t):new Mn(n,s,i,a)};Mn.fromCartesianArray=function(e,t,n){t=t??ie.default;let i=Number.MAX_VALUE,o=-Number.MAX_VALUE,r=Number.MAX_VALUE,s=-Number.MAX_VALUE,a=Number.MAX_VALUE,c=-Number.MAX_VALUE;for(let d=0,u=e.length;d<u;d++){let h=t.cartesianToCartographic(e[d]);i=Math.min(i,h.longitude),o=Math.max(o,h.longitude),a=Math.min(a,h.latitude),c=Math.max(c,h.latitude);let p=h.longitude>=0?h.longitude:h.longitude+L.TWO_PI;r=Math.min(r,p),s=Math.max(s,p)}return o-i>s-r&&(i=r,o=s,o>L.PI&&(o=o-L.TWO_PI),i>L.PI&&(i=i-L.TWO_PI)),l(n)?(n.west=i,n.south=a,n.east=o,n.north=c,n):new Mn(i,a,o,c)};var sWe=new m,aWe=new m,cWe=new m,lWe=new m,dWe=new m,v3=new Array(5);for(let e=0;e<v3.length;++e)v3[e]=new m;Mn.fromBoundingSphere=function(e,t,n){let i=e.center,o=e.radius;if(l(t)||(t=ie.default),l(n)||(n=new Mn),m.equals(i,m.ZERO))return Mn.clone(Mn.MAX_VALUE,n),n;let r=bt.eastNorthUpToFixedFrame(i,t,sWe),s=F.multiplyByPointAsVector(r,m.UNIT_X,aWe);m.normalize(s,s);let a=F.multiplyByPointAsVector(r,m.UNIT_Y,cWe);m.normalize(a,a),m.multiplyByScalar(a,o,a),m.multiplyByScalar(s,o,s);let c=m.negate(a,dWe),d=m.negate(s,lWe),u=v3,h=u[0];return m.add(i,a,h),h=u[1],m.add(i,d,h),h=u[2],m.add(i,c,h),h=u[3],m.add(i,s,h),u[4]=i,Mn.fromCartesianArray(u,t,n)};Mn.clone=function(e,t){if(l(e))return l(t)?(t.west=e.west,t.south=e.south,t.east=e.east,t.north=e.north,t):new Mn(e.west,e.south,e.east,e.north)};Mn.equalsEpsilon=function(e,t,n){return n=n??0,e===t||l(e)&&l(t)&&Math.abs(e.west-t.west)<=n&&Math.abs(e.south-t.south)<=n&&Math.abs(e.east-t.east)<=n&&Math.abs(e.north-t.north)<=n};Mn.prototype.clone=function(e){return Mn.clone(this,e)};Mn.prototype.equals=function(e){return Mn.equals(this,e)};Mn.equals=function(e,t){return e===t||l(e)&&l(t)&&e.west===t.west&&e.south===t.south&&e.east===t.east&&e.north===t.north};Mn.prototype.equalsEpsilon=function(e,t){return Mn.equalsEpsilon(this,e,t)};Mn._validate=function(e){};Mn.southwest=function(e,t){return l(t)?(t.longitude=e.west,t.latitude=e.south,t.height=0,t):new Ae(e.west,e.south)};Mn.northwest=function(e,t){return l(t)?(t.longitude=e.west,t.latitude=e.north,t.height=0,t):new Ae(e.west,e.north)};Mn.northeast=function(e,t){return l(t)?(t.longitude=e.east,t.latitude=e.north,t.height=0,t):new Ae(e.east,e.north)};Mn.southeast=function(e,t){return l(t)?(t.longitude=e.east,t.latitude=e.south,t.height=0,t):new Ae(e.east,e.south)};Mn.center=function(e,t){let n=e.east,i=e.west;n<i&&(n+=L.TWO_PI);let o=L.negativePiToPi((i+n)*.5),r=(e.south+e.north)*.5;return l(t)?(t.longitude=o,t.latitude=r,t.height=0,t):new Ae(o,r)};Mn.intersection=function(e,t,n){let i=e.east,o=e.west,r=t.east,s=t.west;i<o&&r>0?i+=L.TWO_PI:r<s&&i>0&&(r+=L.TWO_PI),i<o&&s<0?s+=L.TWO_PI:r<s&&o<0&&(o+=L.TWO_PI);let a=L.negativePiToPi(Math.max(o,s)),c=L.negativePiToPi(Math.min(i,r));if((e.west<e.east||t.west<t.east)&&c<=a)return;let d=Math.max(e.south,t.south),u=Math.min(e.north,t.north);if(!(d>=u))return l(n)?(n.west=a,n.south=d,n.east=c,n.north=u,n):new Mn(a,d,c,u)};Mn.simpleIntersection=function(e,t,n){let i=Math.max(e.west,t.west),o=Math.max(e.south,t.south),r=Math.min(e.east,t.east),s=Math.min(e.north,t.north);if(!(o>=s||i>=r))return l(n)?(n.west=i,n.south=o,n.east=r,n.north=s,n):new Mn(i,o,r,s)};Mn.union=function(e,t,n){l(n)||(n=new Mn);let i=e.east,o=e.west,r=t.east,s=t.west;i<o&&r>0?i+=L.TWO_PI:r<s&&i>0&&(r+=L.TWO_PI),i<o&&s<0?s+=L.TWO_PI:r<s&&o<0&&(o+=L.TWO_PI);let a=L.negativePiToPi(Math.min(o,s)),c=L.negativePiToPi(Math.max(i,r));return n.west=a,n.south=Math.min(e.south,t.south),n.east=c,n.north=Math.max(e.north,t.north),n};Mn.expand=function(e,t,n){return l(n)||(n=new Mn),n.west=Math.min(e.west,t.longitude),n.south=Math.min(e.south,t.latitude),n.east=Math.max(e.east,t.longitude),n.north=Math.max(e.north,t.latitude),n};Mn.contains=function(e,t){let n=t.longitude,i=t.latitude,o=e.west,r=e.east;return r<o&&(r+=L.TWO_PI,n<0&&(n+=L.TWO_PI)),(n>o||L.equalsEpsilon(n,o,L.EPSILON14))&&(n<r||L.equalsEpsilon(n,r,L.EPSILON14))&&i>=e.south&&i<=e.north};var uWe=new Ae;Mn.subsample=function(e,t,n,i){t=t??ie.default,n=n??0,l(i)||(i=[]);let o=0,r=e.north,s=e.south,a=e.east,c=e.west,d=uWe;d.height=n,d.longitude=c,d.latitude=r,i[o]=t.cartographicToCartesian(d,i[o]),o++,d.longitude=a,i[o]=t.cartographicToCartesian(d,i[o]),o++,d.latitude=s,i[o]=t.cartographicToCartesian(d,i[o]),o++,d.longitude=c,i[o]=t.cartographicToCartesian(d,i[o]),o++,r<0?d.latitude=r:s>0?d.latitude=s:d.latitude=0;for(let u=1;u<8;++u)d.longitude=-Math.PI+u*L.PI_OVER_TWO,Mn.contains(e,d)&&(i[o]=t.cartographicToCartesian(d,i[o]),o++);return d.latitude===0&&(d.longitude=c,i[o]=t.cartographicToCartesian(d,i[o]),o++,d.longitude=a,i[o]=t.cartographicToCartesian(d,i[o]),o++),i.length=o,i};Mn.subsection=function(e,t,n,i,o,r){if(l(r)||(r=new Mn),e.west<=e.east){let a=e.east-e.west;r.west=e.west+t*a,r.east=e.west+i*a}else{let a=L.TWO_PI+e.east-e.west;r.west=L.negativePiToPi(e.west+t*a),r.east=L.negativePiToPi(e.west+i*a)}let s=e.north-e.south;return r.south=e.south+n*s,r.north=e.south+o*s,t===1&&(r.west=e.east),i===1&&(r.east=e.east),n===1&&(r.south=e.north),o===1&&(r.north=e.north),r};Mn.MAX_VALUE=Object.freeze(new Mn(-Math.PI,-L.PI_OVER_TWO,Math.PI,L.PI_OVER_TWO));var de=Mn;function rs(e,t,n,i){this.x=e??0,this.y=t??0,this.width=n??0,this.height=i??0}rs.packedLength=4;rs.pack=function(e,t,n){return n=n??0,t[n++]=e.x,t[n++]=e.y,t[n++]=e.width,t[n]=e.height,t};rs.unpack=function(e,t,n){return t=t??0,l(n)||(n=new rs),n.x=e[t++],n.y=e[t++],n.width=e[t++],n.height=e[t],n};rs.fromPoints=function(e,t){if(l(t)||(t=new rs),!l(e)||e.length===0)return t.x=0,t.y=0,t.width=0,t.height=0,t;let n=e.length,i=e[0].x,o=e[0].y,r=e[0].x,s=e[0].y;for(let a=1;a<n;a++){let c=e[a],d=c.x,u=c.y;i=Math.min(d,i),r=Math.max(d,r),o=Math.min(u,o),s=Math.max(u,s)}return t.x=i,t.y=o,t.width=r-i,t.height=s-o,t};var Voe=new ki,mWe=new Ae,hWe=new Ae;rs.fromRectangle=function(e,t,n){if(l(n)||(n=new rs),!l(e))return n.x=0,n.y=0,n.width=0,n.height=0,n;Voe._ellipsoid=ie.default,t=t??Voe;let i=t.project(de.southwest(e,mWe)),o=t.project(de.northeast(e,hWe));return M.subtract(o,i,o),n.x=i.x,n.y=i.y,n.width=o.x,n.height=o.y,n};rs.clone=function(e,t){if(l(e))return l(t)?(t.x=e.x,t.y=e.y,t.width=e.width,t.height=e.height,t):new rs(e.x,e.y,e.width,e.height)};rs.union=function(e,t,n){l(n)||(n=new rs);let i=Math.min(e.x,t.x),o=Math.min(e.y,t.y),r=Math.max(e.x+e.width,t.x+t.width),s=Math.max(e.y+e.height,t.y+t.height);return n.x=i,n.y=o,n.width=r-i,n.height=s-o,n};rs.expand=function(e,t,n){n=rs.clone(e,n);let i=t.x-n.x,o=t.y-n.y;return i>n.width?n.width=i:i<0&&(n.width-=i,n.x=t.x),o>n.height?n.height=o:o<0&&(n.height-=o,n.y=t.y),n};rs.intersect=function(e,t){let n=e.x,i=e.y,o=t.x,r=t.y;return n>o+t.width||n+e.width<o||i+e.height<r||i>r+t.height?qt.OUTSIDE:qt.INTERSECTING};rs.equals=function(e,t){return e===t||l(e)&&l(t)&&e.x===t.x&&e.y===t.y&&e.width===t.width&&e.height===t.height};rs.prototype.clone=function(e){return rs.clone(this,e)};rs.prototype.intersect=function(e){return rs.intersect(this,e)};rs.prototype.equals=function(e){return rs.equals(this,e)};var nt=rs;var kYt=y(x(),1);var xc={POINTS:ne.POINTS,LINES:ne.LINES,LINE_LOOP:ne.LINE_LOOP,LINE_STRIP:ne.LINE_STRIP,TRIANGLES:ne.TRIANGLES,TRIANGLE_STRIP:ne.TRIANGLE_STRIP,TRIANGLE_FAN:ne.TRIANGLE_FAN};xc.isLines=function(e){return e===xc.LINES||e===xc.LINE_LOOP||e===xc.LINE_STRIP};xc.isTriangles=function(e){return e===xc.TRIANGLES||e===xc.TRIANGLE_STRIP||e===xc.TRIANGLE_FAN};xc.validate=function(e){return e===xc.POINTS||e===xc.LINES||e===xc.LINE_LOOP||e===xc.LINE_STRIP||e===xc.TRIANGLES||e===xc.TRIANGLE_STRIP||e===xc.TRIANGLE_FAN};var We=Object.freeze(xc);var OYt=y(x(),1),Ax=`in vec4 position;
in vec2 textureCoordinates;
out vec2 v_textureCoordinates;
void main()
{
gl_Position = position;
v_textureCoordinates = textureCoordinates;
}
`;var jYt=y(x(),1);var kr={CULL:1,OCCLUDE:2,EXECUTE_IN_CLOSEST_FRUSTUM:4,DEBUG_SHOW_BOUNDING_VOLUME:8,CAST_SHADOWS:16,RECEIVE_SHADOWS:32,PICK_ONLY:64,DEPTH_FOR_TRANSLUCENT_CLASSIFICATION:128};function vR(e){e=e??Q.EMPTY_OBJECT,this._boundingVolume=e.boundingVolume,this._orientedBoundingBox=e.orientedBoundingBox,this._modelMatrix=e.modelMatrix,this._primitiveType=e.primitiveType??We.TRIANGLES,this._vertexArray=e.vertexArray,this._count=e.count,this._offset=e.offset??0,this._instanceCount=e.instanceCount??0,this._shaderProgram=e.shaderProgram,this._uniformMap=e.uniformMap,this._renderState=e.renderState,this._framebuffer=e.framebuffer,this._pass=e.pass,this._owner=e.owner,this._debugOverlappingFrustums=0,this._pickId=e.pickId,this._pickMetadataAllowed=e.pickMetadataAllowed===!0,this._pickedMetadataInfo=void 0,this._flags=0,this.cull=e.cull??!0,this.occlude=e.occlude??!0,this.executeInClosestFrustum=e.executeInClosestFrustum??!1,this.debugShowBoundingVolume=e.debugShowBoundingVolume??!1,this.castShadows=e.castShadows??!1,this.receiveShadows=e.receiveShadows??!1,this.pickOnly=e.pickOnly??!1,this.depthForTranslucentClassification=e.depthForTranslucentClassification??!1,this.dirty=!0,this.lastDirtyTime=0,this.derivedCommands={}}function vc(e,t){return(e._flags&t)===t}function zb(e,t,n){n?e._flags|=t:e._flags&=~t}Object.defineProperties(vR.prototype,{boundingVolume:{get:function(){return this._boundingVolume},set:function(e){this._boundingVolume!==e&&(this._boundingVolume=e,this.dirty=!0)}},orientedBoundingBox:{get:function(){return this._orientedBoundingBox},set:function(e){this._orientedBoundingBox!==e&&(this._orientedBoundingBox=e,this.dirty=!0)}},cull:{get:function(){return vc(this,kr.CULL)},set:function(e){vc(this,kr.CULL)!==e&&(zb(this,kr.CULL,e),this.dirty=!0)}},occlude:{get:function(){return vc(this,kr.OCCLUDE)},set:function(e){vc(this,kr.OCCLUDE)!==e&&(zb(this,kr.OCCLUDE,e),this.dirty=!0)}},modelMatrix:{get:function(){return this._modelMatrix},set:function(e){this._modelMatrix!==e&&(this._modelMatrix=e,this.dirty=!0)}},primitiveType:{get:function(){return this._primitiveType},set:function(e){this._primitiveType!==e&&(this._primitiveType=e,this.dirty=!0)}},vertexArray:{get:function(){return this._vertexArray},set:function(e){this._vertexArray!==e&&(this._vertexArray=e,this.dirty=!0)}},count:{get:function(){return this._count},set:function(e){this._count!==e&&(this._count=e,this.dirty=!0)}},offset:{get:function(){return this._offset},set:function(e){this._offset!==e&&(this._offset=e,this.dirty=!0)}},instanceCount:{get:function(){return this._instanceCount},set:function(e){this._instanceCount!==e&&(this._instanceCount=e,this.dirty=!0)}},shaderProgram:{get:function(){return this._shaderProgram},set:function(e){this._shaderProgram!==e&&(this._shaderProgram=e,this.dirty=!0)}},castShadows:{get:function(){return vc(this,kr.CAST_SHADOWS)},set:function(e){vc(this,kr.CAST_SHADOWS)!==e&&(zb(this,kr.CAST_SHADOWS,e),this.dirty=!0)}},receiveShadows:{get:function(){return vc(this,kr.RECEIVE_SHADOWS)},set:function(e){vc(this,kr.RECEIVE_SHADOWS)!==e&&(zb(this,kr.RECEIVE_SHADOWS,e),this.dirty=!0)}},uniformMap:{get:function(){return this._uniformMap},set:function(e){this._uniformMap!==e&&(this._uniformMap=e,this.dirty=!0)}},renderState:{get:function(){return this._renderState},set:function(e){this._renderState!==e&&(this._renderState=e,this.dirty=!0)}},framebuffer:{get:function(){return this._framebuffer},set:function(e){this._framebuffer!==e&&(this._framebuffer=e,this.dirty=!0)}},pass:{get:function(){return this._pass},set:function(e){this._pass!==e&&(this._pass=e,this.dirty=!0)}},executeInClosestFrustum:{get:function(){return vc(this,kr.EXECUTE_IN_CLOSEST_FRUSTUM)},set:function(e){vc(this,kr.EXECUTE_IN_CLOSEST_FRUSTUM)!==e&&(zb(this,kr.EXECUTE_IN_CLOSEST_FRUSTUM,e),this.dirty=!0)}},owner:{get:function(){return this._owner},set:function(e){this._owner!==e&&(this._owner=e,this.dirty=!0)}},debugShowBoundingVolume:{get:function(){return vc(this,kr.DEBUG_SHOW_BOUNDING_VOLUME)},set:function(e){vc(this,kr.DEBUG_SHOW_BOUNDING_VOLUME)!==e&&(zb(this,kr.DEBUG_SHOW_BOUNDING_VOLUME,e),this.dirty=!0)}},debugOverlappingFrustums:{get:function(){return this._debugOverlappingFrustums},set:function(e){this._debugOverlappingFrustums!==e&&(this._debugOverlappingFrustums=e,this.dirty=!0)}},pickId:{get:function(){return this._pickId},set:function(e){this._pickId!==e&&(this._pickId=e,this.dirty=!0)}},pickMetadataAllowed:{get:function(){return this._pickMetadataAllowed}},pickedMetadataInfo:{get:function(){return this._pickedMetadataInfo},set:function(e){this._pickedMetadataInfo!==e&&(this._pickedMetadataInfo=e,this.dirty=!0)}},pickOnly:{get:function(){return vc(this,kr.PICK_ONLY)},set:function(e){vc(this,kr.PICK_ONLY)!==e&&(zb(this,kr.PICK_ONLY,e),this.dirty=!0)}},depthForTranslucentClassification:{get:function(){return vc(this,kr.DEPTH_FOR_TRANSLUCENT_CLASSIFICATION)},set:function(e){vc(this,kr.DEPTH_FOR_TRANSLUCENT_CLASSIFICATION)!==e&&(zb(this,kr.DEPTH_FOR_TRANSLUCENT_CLASSIFICATION,e),this.dirty=!0)}}});vR.shallowClone=function(e,t){if(l(e))return l(t)||(t=new vR),t._boundingVolume=e._boundingVolume,t._orientedBoundingBox=e._orientedBoundingBox,t._modelMatrix=e._modelMatrix,t._primitiveType=e._primitiveType,t._vertexArray=e._vertexArray,t._count=e._count,t._offset=e._offset,t._instanceCount=e._instanceCount,t._shaderProgram=e._shaderProgram,t._uniformMap=e._uniformMap,t._renderState=e._renderState,t._framebuffer=e._framebuffer,t._pass=e._pass,t._owner=e._owner,t._debugOverlappingFrustums=e._debugOverlappingFrustums,t._pickId=e._pickId,t._pickMetadataAllowed=e._pickMetadataAllowed,t._pickedMetadataInfo=e._pickedMetadataInfo,t._flags=e._flags,t.dirty=!0,t.lastDirtyTime=0,t};vR.prototype.execute=function(e,t){e.draw(this,t)};var ot=vR;var mMt=y(x(),1);var oMt=y(x(),1);var eMt=y(x(),1);var Wi={UNSIGNED_BYTE:ne.UNSIGNED_BYTE,UNSIGNED_SHORT:ne.UNSIGNED_SHORT,UNSIGNED_INT:ne.UNSIGNED_INT,FLOAT:ne.FLOAT,HALF_FLOAT:ne.HALF_FLOAT_OES,UNSIGNED_INT_24_8:ne.UNSIGNED_INT_24_8,UNSIGNED_SHORT_4_4_4_4:ne.UNSIGNED_SHORT_4_4_4_4,UNSIGNED_SHORT_5_5_5_1:ne.UNSIGNED_SHORT_5_5_5_1,UNSIGNED_SHORT_5_6_5:ne.UNSIGNED_SHORT_5_6_5};Wi.toWebGLConstant=function(e,t){switch(e){case Wi.UNSIGNED_BYTE:return ne.UNSIGNED_BYTE;case Wi.UNSIGNED_SHORT:return ne.UNSIGNED_SHORT;case Wi.UNSIGNED_INT:return ne.UNSIGNED_INT;case Wi.FLOAT:return ne.FLOAT;case Wi.HALF_FLOAT:return t.webgl2?ne.HALF_FLOAT:ne.HALF_FLOAT_OES;case Wi.UNSIGNED_INT_24_8:return ne.UNSIGNED_INT_24_8;case Wi.UNSIGNED_SHORT_4_4_4_4:return ne.UNSIGNED_SHORT_4_4_4_4;case Wi.UNSIGNED_SHORT_5_5_5_1:return ne.UNSIGNED_SHORT_5_5_5_1;case Wi.UNSIGNED_SHORT_5_6_5:return Wi.UNSIGNED_SHORT_5_6_5}};Wi.isPacked=function(e){return e===Wi.UNSIGNED_INT_24_8||e===Wi.UNSIGNED_SHORT_4_4_4_4||e===Wi.UNSIGNED_SHORT_5_5_5_1||e===Wi.UNSIGNED_SHORT_5_6_5};Wi.sizeInBytes=function(e){switch(e){case Wi.UNSIGNED_BYTE:return 1;case Wi.UNSIGNED_SHORT:case Wi.UNSIGNED_SHORT_4_4_4_4:case Wi.UNSIGNED_SHORT_5_5_5_1:case Wi.UNSIGNED_SHORT_5_6_5:case Wi.HALF_FLOAT:return 2;case Wi.UNSIGNED_INT:case Wi.FLOAT:case Wi.UNSIGNED_INT_24_8:return 4}};Wi.validate=function(e){return e===Wi.UNSIGNED_BYTE||e===Wi.UNSIGNED_SHORT||e===Wi.UNSIGNED_INT||e===Wi.FLOAT||e===Wi.HALF_FLOAT||e===Wi.UNSIGNED_INT_24_8||e===Wi.UNSIGNED_SHORT_4_4_4_4||e===Wi.UNSIGNED_SHORT_5_5_5_1||e===Wi.UNSIGNED_SHORT_5_6_5};Wi.getTypedArrayConstructor=function(e){let t=Wi.sizeInBytes(e);return t===Uint8Array.BYTES_PER_ELEMENT?Uint8Array:t===Uint16Array.BYTES_PER_ELEMENT?Uint16Array:t===Float32Array.BYTES_PER_ELEMENT&&e===Wi.FLOAT?Float32Array:Uint32Array};var Oe=Object.freeze(Wi);var et={DEPTH_COMPONENT:ne.DEPTH_COMPONENT,DEPTH_STENCIL:ne.DEPTH_STENCIL,ALPHA:ne.ALPHA,RED:ne.RED,R:ne.RED,RG:ne.RG,RGB:ne.RGB,RGBA:ne.RGBA,RED_INTEGER:ne.RED_INTEGER,RG_INTEGER:ne.RG_INTEGER,RGB_INTEGER:ne.RGB_INTEGER,RGBA_INTEGER:ne.RGBA_INTEGER,LUMINANCE:ne.LUMINANCE,LUMINANCE_ALPHA:ne.LUMINANCE_ALPHA,RGB_DXT1:ne.COMPRESSED_RGB_S3TC_DXT1_EXT,RGBA_DXT1:ne.COMPRESSED_RGBA_S3TC_DXT1_EXT,RGBA_DXT3:ne.COMPRESSED_RGBA_S3TC_DXT3_EXT,RGBA_DXT5:ne.COMPRESSED_RGBA_S3TC_DXT5_EXT,RGB_PVRTC_4BPPV1:ne.COMPRESSED_RGB_PVRTC_4BPPV1_IMG,RGB_PVRTC_2BPPV1:ne.COMPRESSED_RGB_PVRTC_2BPPV1_IMG,RGBA_PVRTC_4BPPV1:ne.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG,RGBA_PVRTC_2BPPV1:ne.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG,RGBA_ASTC:ne.COMPRESSED_RGBA_ASTC_4x4_WEBGL,RGB_ETC1:ne.COMPRESSED_RGB_ETC1_WEBGL,RGB8_ETC2:ne.COMPRESSED_RGB8_ETC2,RGBA8_ETC2_EAC:ne.COMPRESSED_RGBA8_ETC2_EAC,RGBA_BC7:ne.COMPRESSED_RGBA_BPTC_UNORM};et.componentsLength=function(e){switch(e){case et.RGB:case et.RGB_INTEGER:return 3;case et.RGBA:case et.RGBA_INTEGER:return 4;case et.LUMINANCE_ALPHA:case et.RG:case et.RG_INTEGER:return 2;case et.ALPHA:case et.RED:case et.RED_INTEGER:case et.LUMINANCE:return 1;case et.R:return 4;default:return 1}};et.validate=function(e){return e===et.DEPTH_COMPONENT||e===et.DEPTH_STENCIL||e===et.ALPHA||e===et.RED||e===et.RG||e===et.RGB||e===et.RGBA||e===et.RED_INTEGER||e===et.RG_INTEGER||e===et.RGB_INTEGER||e===et.RGBA_INTEGER||e===et.LUMINANCE||e===et.LUMINANCE_ALPHA||e===et.RGB_DXT1||e===et.RGBA_DXT1||e===et.RGBA_DXT3||e===et.RGBA_DXT5||e===et.RGB_PVRTC_4BPPV1||e===et.RGB_PVRTC_2BPPV1||e===et.RGBA_PVRTC_4BPPV1||e===et.RGBA_PVRTC_2BPPV1||e===et.RGBA_ASTC||e===et.RGB_ETC1||e===et.RGB8_ETC2||e===et.RGBA8_ETC2_EAC||e===et.RGBA_BC7||e===et.R};et.isColorFormat=function(e){return e===et.RED||e===et.ALPHA||e===et.RGB||e===et.RGBA||e===et.LUMINANCE||e===et.LUMINANCE_ALPHA||e===et.R};et.isDepthFormat=function(e){return e===et.DEPTH_COMPONENT||e===et.DEPTH_STENCIL};et.isCompressedFormat=function(e){return e===et.RGB_DXT1||e===et.RGBA_DXT1||e===et.RGBA_DXT3||e===et.RGBA_DXT5||e===et.RGB_PVRTC_4BPPV1||e===et.RGB_PVRTC_2BPPV1||e===et.RGBA_PVRTC_4BPPV1||e===et.RGBA_PVRTC_2BPPV1||e===et.RGBA_ASTC||e===et.RGB_ETC1||e===et.RGB8_ETC2||e===et.RGBA8_ETC2_EAC||e===et.RGBA_BC7};et.isDXTFormat=function(e){return e===et.RGB_DXT1||e===et.RGBA_DXT1||e===et.RGBA_DXT3||e===et.RGBA_DXT5};et.isPVRTCFormat=function(e){return e===et.RGB_PVRTC_4BPPV1||e===et.RGB_PVRTC_2BPPV1||e===et.RGBA_PVRTC_4BPPV1||e===et.RGBA_PVRTC_2BPPV1};et.isASTCFormat=function(e){return e===et.RGBA_ASTC};et.isETC1Format=function(e){return e===et.RGB_ETC1};et.isETC2Format=function(e){return e===et.RGB8_ETC2||e===et.RGBA8_ETC2_EAC};et.isBC7Format=function(e){return e===et.RGBA_BC7};et.compressedTextureSizeInBytes=function(e,t,n){switch(e){case et.RGB_DXT1:case et.RGBA_DXT1:case et.RGB_ETC1:case et.RGB8_ETC2:return Math.floor((t+3)/4)*Math.floor((n+3)/4)*8;case et.RGBA_DXT3:case et.RGBA_DXT5:case et.RGBA_ASTC:case et.RGBA8_ETC2_EAC:return Math.floor((t+3)/4)*Math.floor((n+3)/4)*16;case et.RGB_PVRTC_4BPPV1:case et.RGBA_PVRTC_4BPPV1:return Math.floor((Math.max(t,8)*Math.max(n,8)*4+7)/8);case et.RGB_PVRTC_2BPPV1:case et.RGBA_PVRTC_2BPPV1:return Math.floor((Math.max(t,16)*Math.max(n,8)*2+7)/8);case et.RGBA_BC7:return Math.ceil(t/4)*Math.ceil(n/4)*16;default:return 0}};et.textureSizeInBytes=function(e,t,n,i){let o=et.componentsLength(e);return Oe.isPacked(t)&&(o=1),o*Oe.sizeInBytes(t)*n*i};et.texture3DSizeInBytes=function(e,t,n,i,o){let r=et.componentsLength(e);return Oe.isPacked(t)&&(r=1),r*Oe.sizeInBytes(t)*n*i*o};et.alignmentInBytes=function(e,t,n){let i=et.textureSizeInBytes(e,t,n,1)%4;return i===0?4:i===2?2:1};et.createTypedArray=function(e,t,n,i){let o=Oe.getTypedArrayConstructor(t),r=et.componentsLength(e)*n*i;return new o(r)};et.flipY=function(e,t,n,i,o){if(o===1)return e;let r=et.createTypedArray(t,n,i,o),s=et.componentsLength(t),a=i*s;for(let c=0;c<o;++c){let d=c*i*s,u=(o-c-1)*i*s;for(let h=0;h<a;++h)r[u+h]=e[d+h]}return r};et.toInternalFormat=function(e,t,n){if(!n.webgl2)return e;if(e===et.DEPTH_STENCIL)return ne.DEPTH24_STENCIL8;if(e===et.DEPTH_COMPONENT){if(t===Oe.UNSIGNED_SHORT)return ne.DEPTH_COMPONENT16;if(t===Oe.UNSIGNED_INT)return ne.DEPTH_COMPONENT24}if(t===Oe.FLOAT)switch(e){case et.RGBA:return ne.RGBA32F;case et.RGB:return ne.RGB32F;case et.RG:return ne.RG32F;case et.RED:case et.R:return ne.R32F}if(t===Oe.HALF_FLOAT)switch(e){case et.RGBA:return ne.RGBA16F;case et.RGB:return ne.RGB16F;case et.RG:return ne.RG16F;case et.RED:case et.R:return ne.R16F}if(t===Oe.UNSIGNED_BYTE)switch(e){case et.RGBA:return ne.RGBA8;case et.RGB:return ne.RGB8;case et.RG:return ne.RG8;case et.RED:return ne.R8}if(t===Oe.INT)switch(e){case et.RGBA_INTEGER:return ne.RGBA32I;case et.RGB_INTEGER:return ne.RGB32I;case et.RG_INTEGER:return ne.RG32I;case et.RED_INTEGER:return ne.R32I}if(t===Oe.UNSIGNED_INT)switch(e){case et.RGBA_INTEGER:return ne.RGBA32UI;case et.RGB_INTEGER:return ne.RGB32UI;case et.RG_INTEGER:return ne.RG32UI;case et.RED_INTEGER:return ne.R32UI}return e};var Ke=Object.freeze(et);var sMt=y(x(),1),Fr={_maximumCombinedTextureImageUnits:0,_maximumCubeMapSize:0,_maximumFragmentUniformVectors:0,_maximumTextureImageUnits:0,_maximumRenderbufferSize:0,_maximumTextureSize:0,_maximum3DTextureSize:0,_maximumVaryingVectors:0,_maximumVertexAttributes:0,_maximumVertexTextureImageUnits:0,_maximumVertexUniformVectors:0,_minimumAliasedLineWidth:0,_maximumAliasedLineWidth:0,_minimumAliasedPointSize:0,_maximumAliasedPointSize:0,_maximumViewportWidth:0,_maximumViewportHeight:0,_maximumTextureFilterAnisotropy:0,_maximumDrawBuffers:0,_maximumColorAttachments:0,_maximumSamples:0,_highpFloatSupported:!1,_highpIntSupported:!1};Object.defineProperties(Fr,{maximumCombinedTextureImageUnits:{get:function(){return Fr._maximumCombinedTextureImageUnits}},maximumCubeMapSize:{get:function(){return Fr._maximumCubeMapSize}},maximumFragmentUniformVectors:{get:function(){return Fr._maximumFragmentUniformVectors}},maximumTextureImageUnits:{get:function(){return Fr._maximumTextureImageUnits}},maximumRenderbufferSize:{get:function(){return Fr._maximumRenderbufferSize}},maximumTextureSize:{get:function(){return Fr._maximumTextureSize}},maximum3DTextureSize:{get:function(){return Fr._maximum3DTextureSize}},maximumVaryingVectors:{get:function(){return Fr._maximumVaryingVectors}},maximumVertexAttributes:{get:function(){return Fr._maximumVertexAttributes}},maximumVertexTextureImageUnits:{get:function(){return Fr._maximumVertexTextureImageUnits}},maximumVertexUniformVectors:{get:function(){return Fr._maximumVertexUniformVectors}},minimumAliasedLineWidth:{get:function(){return Fr._minimumAliasedLineWidth}},maximumAliasedLineWidth:{get:function(){return Fr._maximumAliasedLineWidth}},minimumAliasedPointSize:{get:function(){return Fr._minimumAliasedPointSize}},maximumAliasedPointSize:{get:function(){return Fr._maximumAliasedPointSize}},maximumViewportWidth:{get:function(){return Fr._maximumViewportWidth}},maximumViewportHeight:{get:function(){return Fr._maximumViewportHeight}},maximumTextureFilterAnisotropy:{get:function(){return Fr._maximumTextureFilterAnisotropy}},maximumDrawBuffers:{get:function(){return Fr._maximumDrawBuffers}},maximumColorAttachments:{get:function(){return Fr._maximumColorAttachments}},maximumSamples:{get:function(){return Fr._maximumSamples}},highpFloatSupported:{get:function(){return Fr._highpFloatSupported}},highpIntSupported:{get:function(){return Fr._highpIntSupported}}});var Bt=Fr;function U3(e,t,n){let i=e._gl;i.framebufferTexture2D(i.FRAMEBUFFER,t,n._target,n._texture,0)}function SD(e,t,n){let i=e._gl;i.framebufferRenderbuffer(i.FRAMEBUFFER,t,i.RENDERBUFFER,n._getRenderbuffer())}function xh(e){e=e??Q.EMPTY_OBJECT;let n=e.context._gl,i=Bt.maximumColorAttachments;if(this._gl=n,this._framebuffer=n.createFramebuffer(),this._colorTextures=[],this._colorRenderbuffers=[],this._activeColorAttachments=[],this._depthTexture=void 0,this._depthRenderbuffer=void 0,this._stencilRenderbuffer=void 0,this._depthStencilTexture=void 0,this._depthStencilRenderbuffer=void 0,this.destroyAttachments=e.destroyAttachments??!0,this._bind(),l(e.colorTextures)){let o=e.colorTextures,r=this._colorTextures.length=this._activeColorAttachments.length=o.length;for(let s=0;s<r;++s){let a=o[s],c=this._gl.COLOR_ATTACHMENT0+s;U3(this,c,a),this._activeColorAttachments[s]=c,this._colorTextures[s]=a}}if(l(e.colorRenderbuffers)){let o=e.colorRenderbuffers,r=this._colorRenderbuffers.length=this._activeColorAttachments.length=o.length;for(let s=0;s<r;++s){let a=o[s],c=this._gl.COLOR_ATTACHMENT0+s;SD(this,c,a),this._activeColorAttachments[s]=c,this._colorRenderbuffers[s]=a}}if(l(e.depthTexture)){let o=e.depthTexture;U3(this,this._gl.DEPTH_ATTACHMENT,o),this._depthTexture=o}if(l(e.depthRenderbuffer)){let o=e.depthRenderbuffer;SD(this,this._gl.DEPTH_ATTACHMENT,o),this._depthRenderbuffer=o}if(l(e.stencilRenderbuffer)){let o=e.stencilRenderbuffer;SD(this,this._gl.STENCIL_ATTACHMENT,o),this._stencilRenderbuffer=o}if(l(e.depthStencilTexture)){let o=e.depthStencilTexture;U3(this,this._gl.DEPTH_STENCIL_ATTACHMENT,o),this._depthStencilTexture=o}if(l(e.depthStencilRenderbuffer)){let o=e.depthStencilRenderbuffer;SD(this,this._gl.DEPTH_STENCIL_ATTACHMENT,o),this._depthStencilRenderbuffer=o}this._unBind()}Object.defineProperties(xh.prototype,{status:{get:function(){this._bind();let e=this._gl.checkFramebufferStatus(this._gl.FRAMEBUFFER);return this._unBind(),e}},numberOfColorAttachments:{get:function(){return this._activeColorAttachments.length}},depthTexture:{get:function(){return this._depthTexture}},depthRenderbuffer:{get:function(){return this._depthRenderbuffer}},stencilRenderbuffer:{get:function(){return this._stencilRenderbuffer}},depthStencilTexture:{get:function(){return this._depthStencilTexture}},depthStencilRenderbuffer:{get:function(){return this._depthStencilRenderbuffer}},hasDepthAttachment:{get:function(){return!!(this.depthTexture||this.depthRenderbuffer||this.depthStencilTexture||this.depthStencilRenderbuffer)}}});xh.prototype._bind=function(){let e=this._gl;e.bindFramebuffer(e.FRAMEBUFFER,this._framebuffer)};xh.prototype._unBind=function(){let e=this._gl;e.bindFramebuffer(e.FRAMEBUFFER,null)};xh.prototype.bindDraw=function(){let e=this._gl;e.bindFramebuffer(e.DRAW_FRAMEBUFFER,this._framebuffer)};xh.prototype.bindRead=function(){let e=this._gl;e.bindFramebuffer(e.READ_FRAMEBUFFER,this._framebuffer)};xh.prototype._getActiveColorAttachments=function(){return this._activeColorAttachments};xh.prototype.getColorTexture=function(e){return this._colorTextures[e]};xh.prototype.getColorRenderbuffer=function(e){return this._colorRenderbuffers[e]};xh.prototype.isDestroyed=function(){return!1};xh.prototype.destroy=function(){if(this.destroyAttachments){let e=this._colorTextures;for(let n=0;n<e.length;++n){let i=e[n];l(i)&&i.destroy()}let t=this._colorRenderbuffers;for(let n=0;n<t.length;++n){let i=t[n];l(i)&&i.destroy()}this._depthTexture=this._depthTexture&&this._depthTexture.destroy(),this._depthRenderbuffer=this._depthRenderbuffer&&this._depthRenderbuffer.destroy(),this._stencilRenderbuffer=this._stencilRenderbuffer&&this._stencilRenderbuffer.destroy(),this._depthStencilTexture=this._depthStencilTexture&&this._depthStencilTexture.destroy(),this._depthStencilRenderbuffer=this._depthStencilRenderbuffer&&this._depthStencilRenderbuffer.destroy()}return this._gl.deleteFramebuffer(this._framebuffer),he(this)};var ss=xh;var _Mt=y(x(),1);var pMt=y(x(),1);var _D={CLOCKWISE:ne.CW,COUNTER_CLOCKWISE:ne.CCW};_D.validate=function(e){return e===_D.CLOCKWISE||e===_D.COUNTER_CLOCKWISE};var ks=Object.freeze(_D);var gMt=y(x(),1);function Goe(e){if(typeof e!="object"||e===null)return e;let t,n=Object.keys(e);for(let i=0;i<n.length;i++)t=n[i],e.hasOwnProperty(t)&&t!=="_applyFunctions"&&(e[t]=Goe(e[t]));return Object.freeze(e)}var D3=Goe;function ep(e){let t=e??Q.EMPTY_OBJECT,n=t.cull??Q.EMPTY_OBJECT,i=t.polygonOffset??Q.EMPTY_OBJECT,o=t.scissorTest??Q.EMPTY_OBJECT,r=o.rectangle??Q.EMPTY_OBJECT,s=t.depthRange??Q.EMPTY_OBJECT,a=t.depthTest??Q.EMPTY_OBJECT,c=t.colorMask??Q.EMPTY_OBJECT,d=t.blending??Q.EMPTY_OBJECT,u=d.color??Q.EMPTY_OBJECT,h=t.stencilTest??Q.EMPTY_OBJECT,p=h.frontOperation??Q.EMPTY_OBJECT,A=h.backOperation??Q.EMPTY_OBJECT,f=t.sampleCoverage??Q.EMPTY_OBJECT,b=t.viewport;this.frontFace=t.frontFace??ks.COUNTER_CLOCKWISE,this.cull={enabled:n.enabled??!1,face:n.face??ne.BACK},this.lineWidth=t.lineWidth??1,this.polygonOffset={enabled:i.enabled??!1,factor:i.factor??0,units:i.units??0},this.scissorTest={enabled:o.enabled??!1,rectangle:nt.clone(r)},this.depthRange={near:s.near??0,far:s.far??1},this.depthTest={enabled:a.enabled??!1,func:a.func??ne.LESS},this.colorMask={red:c.red??!0,green:c.green??!0,blue:c.blue??!0,alpha:c.alpha??!0},this.depthMask=t.depthMask??!0,this.stencilMask=t.stencilMask??-1,this.blending={enabled:d.enabled??!1,color:new U(u.red??0,u.green??0,u.blue??0,u.alpha??0),equationRgb:d.equationRgb??ne.FUNC_ADD,equationAlpha:d.equationAlpha??ne.FUNC_ADD,functionSourceRgb:d.functionSourceRgb??ne.ONE,functionSourceAlpha:d.functionSourceAlpha??ne.ONE,functionDestinationRgb:d.functionDestinationRgb??ne.ZERO,functionDestinationAlpha:d.functionDestinationAlpha??ne.ZERO},this.stencilTest={enabled:h.enabled??!1,frontFunction:h.frontFunction??ne.ALWAYS,backFunction:h.backFunction??ne.ALWAYS,reference:h.reference??0,mask:h.mask??-1,frontOperation:{fail:p.fail??ne.KEEP,zFail:p.zFail??ne.KEEP,zPass:p.zPass??ne.KEEP},backOperation:{fail:A.fail??ne.KEEP,zFail:A.zFail??ne.KEEP,zPass:A.zPass??ne.KEEP}},this.sampleCoverage={enabled:f.enabled??!1,value:f.value??1,invert:f.invert??!1},this.viewport=l(b)?new nt(b.x,b.y,b.width,b.height):void 0,this.id=0,this._applyFunctions=[]}var fWe=0,$f={};ep.fromCache=function(e){let t=JSON.stringify(e),n=$f[t];if(l(n))return++n.referenceCount,n.state;let i=new ep(e),o=JSON.stringify(i);return n=$f[o],l(n)||(i.id=fWe++,n={referenceCount:0,state:i},$f[o]=n),++n.referenceCount,$f[t]={referenceCount:1,state:n.state},n.state};ep.removeFromCache=function(e){let t=new ep(e),n=JSON.stringify(t),i=$f[n],o=JSON.stringify(e),r=$f[o];l(r)&&(--r.referenceCount,r.referenceCount===0&&(delete $f[o],l(i)&&--i.referenceCount)),l(i)&&i.referenceCount===0&&delete $f[n]};ep.getCache=function(){return $f};ep.clearCache=function(){$f={}};function gx(e,t,n){n?e.enable(t):e.disable(t)}function Loe(e,t){e.frontFace(t.frontFace)}function Woe(e,t){let n=t.cull,i=n.enabled;gx(e,e.CULL_FACE,i),i&&e.cullFace(n.face)}function Foe(e,t){e.lineWidth(t.lineWidth)}function Boe(e,t){let n=t.polygonOffset,i=n.enabled;gx(e,e.POLYGON_OFFSET_FILL,i),i&&e.polygonOffset(n.factor,n.units)}function woe(e,t,n){let i=t.scissorTest,o=l(n.scissorTest)?n.scissorTest.enabled:i.enabled;if(gx(e,e.SCISSOR_TEST,o),o){let r=l(n.scissorTest)?n.scissorTest.rectangle:i.rectangle;e.scissor(r.x,r.y,r.width,r.height)}}function Noe(e,t){let n=t.depthRange;e.depthRange(n.near,n.far)}function Poe(e,t){let n=t.depthTest,i=n.enabled;gx(e,e.DEPTH_TEST,i),i&&e.depthFunc(n.func)}function Xoe(e,t){let n=t.colorMask;e.colorMask(n.red,n.green,n.blue,n.alpha)}function Yoe(e,t){e.depthMask(t.depthMask)}function Moe(e,t){e.stencilMask(t.stencilMask)}function pWe(e,t){e.blendColor(t.red,t.green,t.blue,t.alpha)}function voe(e,t,n){let i=t.blending,o=l(n.blendingEnabled)?n.blendingEnabled:i.enabled;gx(e,e.BLEND,o),o&&(pWe(e,i.color),e.blendEquationSeparate(i.equationRgb,i.equationAlpha),e.blendFuncSeparate(i.functionSourceRgb,i.functionDestinationRgb,i.functionSourceAlpha,i.functionDestinationAlpha))}function Uoe(e,t){let n=t.stencilTest,i=n.enabled;if(gx(e,e.STENCIL_TEST,i),i){let o=n.frontFunction,r=n.backFunction,s=n.reference,a=n.mask;e.stencilFunc(o,s,a),e.stencilFuncSeparate(e.BACK,r,s,a),e.stencilFuncSeparate(e.FRONT,o,s,a);let c=n.frontOperation,d=c.fail,u=c.zFail,h=c.zPass;e.stencilOpSeparate(e.FRONT,d,u,h);let p=n.backOperation,A=p.fail,f=p.zFail,b=p.zPass;e.stencilOpSeparate(e.BACK,A,f,b)}}function Doe(e,t){let n=t.sampleCoverage,i=n.enabled;gx(e,e.SAMPLE_COVERAGE,i),i&&e.sampleCoverage(n.value,n.invert)}var AWe=new nt;function koe(e,t,n){let i=t.viewport??n.viewport;l(i)||(i=AWe,i.width=n.context.drawingBufferWidth,i.height=n.context.drawingBufferHeight),n.context.uniformState.viewport=i,e.viewport(i.x,i.y,i.width,i.height)}ep.apply=function(e,t,n){Loe(e,t),Woe(e,t),Foe(e,t),Boe(e,t),Noe(e,t),Poe(e,t),Xoe(e,t),Yoe(e,t),Moe(e,t),Uoe(e,t),Doe(e,t),woe(e,t,n),voe(e,t,n),koe(e,t,n)};function gWe(e,t){let n=[];return e.frontFace!==t.frontFace&&n.push(Loe),(e.cull.enabled!==t.cull.enabled||e.cull.face!==t.cull.face)&&n.push(Woe),e.lineWidth!==t.lineWidth&&n.push(Foe),(e.polygonOffset.enabled!==t.polygonOffset.enabled||e.polygonOffset.factor!==t.polygonOffset.factor||e.polygonOffset.units!==t.polygonOffset.units)&&n.push(Boe),(e.depthRange.near!==t.depthRange.near||e.depthRange.far!==t.depthRange.far)&&n.push(Noe),(e.depthTest.enabled!==t.depthTest.enabled||e.depthTest.func!==t.depthTest.func)&&n.push(Poe),(e.colorMask.red!==t.colorMask.red||e.colorMask.green!==t.colorMask.green||e.colorMask.blue!==t.colorMask.blue||e.colorMask.alpha!==t.colorMask.alpha)&&n.push(Xoe),e.depthMask!==t.depthMask&&n.push(Yoe),e.stencilMask!==t.stencilMask&&n.push(Moe),(e.stencilTest.enabled!==t.stencilTest.enabled||e.stencilTest.frontFunction!==t.stencilTest.frontFunction||e.stencilTest.backFunction!==t.stencilTest.backFunction||e.stencilTest.reference!==t.stencilTest.reference||e.stencilTest.mask!==t.stencilTest.mask||e.stencilTest.frontOperation.fail!==t.stencilTest.frontOperation.fail||e.stencilTest.frontOperation.zFail!==t.stencilTest.frontOperation.zFail||e.stencilTest.backOperation.fail!==t.stencilTest.backOperation.fail||e.stencilTest.backOperation.zFail!==t.stencilTest.backOperation.zFail||e.stencilTest.backOperation.zPass!==t.stencilTest.backOperation.zPass)&&n.push(Uoe),(e.sampleCoverage.enabled!==t.sampleCoverage.enabled||e.sampleCoverage.value!==t.sampleCoverage.value||e.sampleCoverage.invert!==t.sampleCoverage.invert)&&n.push(Doe),n}ep.partialApply=function(e,t,n,i,o,r){if(t!==n){let u=n._applyFunctions[t.id];l(u)||(u=gWe(t,n),n._applyFunctions[t.id]=u);let h=u.length;for(let p=0;p<h;++p)u[p](e,n)}let s=l(i.scissorTest)?i.scissorTest:t.scissorTest,a=l(o.scissorTest)?o.scissorTest:n.scissorTest;(s!==a||r)&&woe(e,n,o);let c=l(i.blendingEnabled)?i.blendingEnabled:t.blending.enabled,d=l(o.blendingEnabled)?o.blendingEnabled:n.blending.enabled;(c!==d||d&&t.blending!==n.blending)&&voe(e,n,o),(t!==n||i!==o||i.context!==o.context)&&koe(e,n,o)};ep.getState=function(e){return{frontFace:e.frontFace,cull:{enabled:e.cull.enabled,face:e.cull.face},lineWidth:e.lineWidth,polygonOffset:{enabled:e.polygonOffset.enabled,factor:e.polygonOffset.factor,units:e.polygonOffset.units},scissorTest:{enabled:e.scissorTest.enabled,rectangle:nt.clone(e.scissorTest.rectangle)},depthRange:{near:e.depthRange.near,far:e.depthRange.far},depthTest:{enabled:e.depthTest.enabled,func:e.depthTest.func},colorMask:{red:e.colorMask.red,green:e.colorMask.green,blue:e.colorMask.blue,alpha:e.colorMask.alpha},depthMask:e.depthMask,stencilMask:e.stencilMask,blending:{enabled:e.blending.enabled,color:U.clone(e.blending.color),equationRgb:e.blending.equationRgb,equationAlpha:e.blending.equationAlpha,functionSourceRgb:e.blending.functionSourceRgb,functionSourceAlpha:e.blending.functionSourceAlpha,functionDestinationRgb:e.blending.functionDestinationRgb,functionDestinationAlpha:e.blending.functionDestinationAlpha},stencilTest:{enabled:e.stencilTest.enabled,frontFunction:e.stencilTest.frontFunction,backFunction:e.stencilTest.backFunction,reference:e.stencilTest.reference,mask:e.stencilTest.mask,frontOperation:{fail:e.stencilTest.frontOperation.fail,zFail:e.stencilTest.frontOperation.zFail,zPass:e.stencilTest.frontOperation.zPass},backOperation:{fail:e.stencilTest.backOperation.fail,zFail:e.stencilTest.backOperation.zFail,zPass:e.stencilTest.backOperation.zPass}},sampleCoverage:{enabled:e.sampleCoverage.enabled,value:e.sampleCoverage.value,invert:e.sampleCoverage.invert},viewport:l(e.viewport)?nt.clone(e.viewport):void 0}};var Qe=ep;var avt=y(x(),1);var MMt=y(x(),1);var VMt=y(x(),1);function an(e,t,n,i){this[0]=e??0,this[1]=n??0,this[2]=t??0,this[3]=i??0}an.packedLength=4;an.pack=function(e,t,n){return n=n??0,t[n++]=e[0],t[n++]=e[1],t[n++]=e[2],t[n++]=e[3],t};an.unpack=function(e,t,n){return t=t??0,l(n)||(n=new an),n[0]=e[t++],n[1]=e[t++],n[2]=e[t++],n[3]=e[t++],n};an.packArray=function(e,t){let n=e.length,i=n*4;l(t)?!Array.isArray(t)&&t.length!==i||t.length!==i&&(t.length=i):t=new Array(i);for(let o=0;o<n;++o)an.pack(e[o],t,o*4);return t};an.unpackArray=function(e,t){let n=e.length;l(t)?t.length=n/4:t=new Array(n/4);for(let i=0;i<n;i+=4){let o=i/4;t[o]=an.unpack(e,i,t[o])}return t};an.clone=function(e,t){if(l(e))return l(t)?(t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t):new an(e[0],e[2],e[1],e[3])};an.fromArray=an.unpack;an.fromColumnMajorArray=function(e,t){return an.clone(e,t)};an.fromRowMajorArray=function(e,t){return l(t)?(t[0]=e[0],t[1]=e[2],t[2]=e[1],t[3]=e[3],t):new an(e[0],e[1],e[2],e[3])};an.fromScale=function(e,t){return l(t)?(t[0]=e.x,t[1]=0,t[2]=0,t[3]=e.y,t):new an(e.x,0,0,e.y)};an.fromUniformScale=function(e,t){return l(t)?(t[0]=e,t[1]=0,t[2]=0,t[3]=e,t):new an(e,0,0,e)};an.fromRotation=function(e,t){let n=Math.cos(e),i=Math.sin(e);return l(t)?(t[0]=n,t[1]=i,t[2]=-i,t[3]=n,t):new an(n,-i,i,n)};an.toArray=function(e,t){return l(t)?(t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t):[e[0],e[1],e[2],e[3]]};an.getElementIndex=function(e,t){return e*2+t};an.getColumn=function(e,t,n){let i=t*2,o=e[i],r=e[i+1];return n.x=o,n.y=r,n};an.setColumn=function(e,t,n,i){i=an.clone(e,i);let o=t*2;return i[o]=n.x,i[o+1]=n.y,i};an.getRow=function(e,t,n){let i=e[t],o=e[t+2];return n.x=i,n.y=o,n};an.setRow=function(e,t,n,i){return i=an.clone(e,i),i[t]=n.x,i[t+2]=n.y,i};var bWe=new M;an.setScale=function(e,t,n){let i=an.getScale(e,bWe),o=t.x/i.x,r=t.y/i.y;return n[0]=e[0]*o,n[1]=e[1]*o,n[2]=e[2]*r,n[3]=e[3]*r,n};var yWe=new M;an.setUniformScale=function(e,t,n){let i=an.getScale(e,yWe),o=t/i.x,r=t/i.y;return n[0]=e[0]*o,n[1]=e[1]*o,n[2]=e[2]*r,n[3]=e[3]*r,n};var Qoe=new M;an.getScale=function(e,t){return t.x=M.magnitude(M.fromElements(e[0],e[1],Qoe)),t.y=M.magnitude(M.fromElements(e[2],e[3],Qoe)),t};var Ooe=new M;an.getMaximumScale=function(e){return an.getScale(e,Ooe),M.maximumComponent(Ooe)};var xWe=new M;an.setRotation=function(e,t,n){let i=an.getScale(e,xWe);return n[0]=t[0]*i.x,n[1]=t[1]*i.x,n[2]=t[2]*i.y,n[3]=t[3]*i.y,n};var CWe=new M;an.getRotation=function(e,t){let n=an.getScale(e,CWe);return t[0]=e[0]/n.x,t[1]=e[1]/n.x,t[2]=e[2]/n.y,t[3]=e[3]/n.y,t};an.multiply=function(e,t,n){let i=e[0]*t[0]+e[2]*t[1],o=e[0]*t[2]+e[2]*t[3],r=e[1]*t[0]+e[3]*t[1],s=e[1]*t[2]+e[3]*t[3];return n[0]=i,n[1]=r,n[2]=o,n[3]=s,n};an.add=function(e,t,n){return n[0]=e[0]+t[0],n[1]=e[1]+t[1],n[2]=e[2]+t[2],n[3]=e[3]+t[3],n};an.subtract=function(e,t,n){return n[0]=e[0]-t[0],n[1]=e[1]-t[1],n[2]=e[2]-t[2],n[3]=e[3]-t[3],n};an.multiplyByVector=function(e,t,n){let i=e[0]*t.x+e[2]*t.y,o=e[1]*t.x+e[3]*t.y;return n.x=i,n.y=o,n};an.multiplyByScalar=function(e,t,n){return n[0]=e[0]*t,n[1]=e[1]*t,n[2]=e[2]*t,n[3]=e[3]*t,n};an.multiplyByScale=function(e,t,n){return n[0]=e[0]*t.x,n[1]=e[1]*t.x,n[2]=e[2]*t.y,n[3]=e[3]*t.y,n};an.multiplyByUniformScale=function(e,t,n){return n[0]=e[0]*t,n[1]=e[1]*t,n[2]=e[2]*t,n[3]=e[3]*t,n};an.negate=function(e,t){return t[0]=-e[0],t[1]=-e[1],t[2]=-e[2],t[3]=-e[3],t};an.transpose=function(e,t){let n=e[0],i=e[2],o=e[1],r=e[3];return t[0]=n,t[1]=i,t[2]=o,t[3]=r,t};an.abs=function(e,t){return t[0]=Math.abs(e[0]),t[1]=Math.abs(e[1]),t[2]=Math.abs(e[2]),t[3]=Math.abs(e[3]),t};an.equals=function(e,t){return e===t||l(e)&&l(t)&&e[0]===t[0]&&e[1]===t[1]&&e[2]===t[2]&&e[3]===t[3]};an.equalsArray=function(e,t,n){return e[0]===t[n]&&e[1]===t[n+1]&&e[2]===t[n+2]&&e[3]===t[n+3]};an.equalsEpsilon=function(e,t,n){return n=n??0,e===t||l(e)&&l(t)&&Math.abs(e[0]-t[0])<=n&&Math.abs(e[1]-t[1])<=n&&Math.abs(e[2]-t[2])<=n&&Math.abs(e[3]-t[3])<=n};an.IDENTITY=Object.freeze(new an(1,0,0,1));an.ZERO=Object.freeze(new an(0,0,0,0));an.COLUMN0ROW0=0;an.COLUMN0ROW1=1;an.COLUMN1ROW0=2;an.COLUMN1ROW1=3;Object.defineProperties(an.prototype,{length:{get:function(){return an.packedLength}}});an.prototype.clone=function(e){return an.clone(this,e)};an.prototype.equals=function(e){return an.equals(this,e)};an.prototype.equalsEpsilon=function(e,t){return an.equalsEpsilon(this,e,t)};an.prototype.toString=function(){return`(${this[0]}, ${this[2]})
(${this[1]}, ${this[3]})`};var Qi=an;function TWe(e,t,n,i){switch(t.type){case e.FLOAT:return new zoe(e,t,n,i);case e.FLOAT_VEC2:return new Hoe(e,t,n,i);case e.FLOAT_VEC3:return new Joe(e,t,n,i);case e.FLOAT_VEC4:return new Koe(e,t,n,i);case e.SAMPLER_2D:case e.SAMPLER_3D:case e.SAMPLER_CUBE:case e.SAMPLER_2D_ARRAY:return new ID(e,t,n,i);case e.UNSIGNED_INT_SAMPLER_2D:return new ID(e,t,n,i);case e.INT:case e.BOOL:return new joe(e,t,n,i);case e.INT_VEC2:case e.BOOL_VEC2:return new qoe(e,t,n,i);case e.INT_VEC3:case e.BOOL_VEC3:return new $oe(e,t,n,i);case e.INT_VEC4:case e.BOOL_VEC4:return new ere(e,t,n,i);case e.FLOAT_MAT2:return new tre(e,t,n,i);case e.FLOAT_MAT3:return new nre(e,t,n,i);case e.FLOAT_MAT4:return new ire(e,t,n,i);default:throw new me(`Unrecognized uniform type: ${t.type} for uniform "${n}".`)}}function zoe(e,t,n,i){this.name=n,this.value=void 0,this._value=0,this._gl=e,this._location=i}zoe.prototype.set=function(){this.value!==this._value&&(this._value=this.value,this._gl.uniform1f(this._location,this.value))};function Hoe(e,t,n,i){this.name=n,this.value=void 0,this._value=new M,this._gl=e,this._location=i}Hoe.prototype.set=function(){let e=this.value;M.equals(e,this._value)||(M.clone(e,this._value),this._gl.uniform2f(this._location,e.x,e.y))};function Joe(e,t,n,i){this.name=n,this.value=void 0,this._value=void 0,this._gl=e,this._location=i}Joe.prototype.set=function(){let e=this.value;e&&(l(e.red)?U.equals(e,this._value)||(this._value=U.clone(e,this._value),this._gl.uniform3f(this._location,e.red,e.green,e.blue)):l(e.x)&&(m.equals(e,this._value)||(this._value=m.clone(e,this._value),this._gl.uniform3f(this._location,e.x,e.y,e.z))))};function Koe(e,t,n,i){this.name=n,this.value=void 0,this._value=void 0,this._gl=e,this._location=i}Koe.prototype.set=function(){let e=this.value;l(e.red)?U.equals(e,this._value)||(this._value=U.clone(e,this._value),this._gl.uniform4f(this._location,e.red,e.green,e.blue,e.alpha)):l(e.x)&&(re.equals(e,this._value)||(this._value=re.clone(e,this._value),this._gl.uniform4f(this._location,e.x,e.y,e.z,e.w)))};function ID(e,t,n,i){this.name=n,this.value=void 0,this._gl=e,this._location=i,this.textureUnitIndex=void 0}ID.prototype.set=function(){let e=this._gl;e.activeTexture(e.TEXTURE0+this.textureUnitIndex);let t=this.value;t&&e.bindTexture(t._target,t._texture)};ID.prototype._setSampler=function(e){return this.textureUnitIndex=e,this._gl.uniform1i(this._location,e),e+1};function joe(e,t,n,i){this.name=n,this.value=void 0,this._value=0,this._gl=e,this._location=i}joe.prototype.set=function(){this.value!==this._value&&(this._value=this.value,this._gl.uniform1i(this._location,this.value))};function qoe(e,t,n,i){this.name=n,this.value=void 0,this._value=new M,this._gl=e,this._location=i}qoe.prototype.set=function(){let e=this.value;M.equals(e,this._value)||(M.clone(e,this._value),this._gl.uniform2i(this._location,e.x,e.y))};function $oe(e,t,n,i){this.name=n,this.value=void 0,this._value=new m,this._gl=e,this._location=i}$oe.prototype.set=function(){let e=this.value;m.equals(e,this._value)||(m.clone(e,this._value),this._gl.uniform3i(this._location,e.x,e.y,e.z))};function ere(e,t,n,i){this.name=n,this.value=void 0,this._value=new re,this._gl=e,this._location=i}ere.prototype.set=function(){let e=this.value;re.equals(e,this._value)||(re.clone(e,this._value),this._gl.uniform4i(this._location,e.x,e.y,e.z,e.w))};var EWe=new Float32Array(4);function tre(e,t,n,i){this.name=n,this.value=void 0,this._value=new Qi,this._gl=e,this._location=i}tre.prototype.set=function(){if(!Qi.equalsArray(this.value,this._value,0)){Qi.clone(this.value,this._value);let e=Qi.toArray(this.value,EWe);this._gl.uniformMatrix2fv(this._location,!1,e)}};var SWe=new Float32Array(9);function nre(e,t,n,i){this.name=n,this.value=void 0,this._value=new $,this._gl=e,this._location=i}nre.prototype.set=function(){if(!$.equalsArray(this.value,this._value,0)){$.clone(this.value,this._value);let e=$.toArray(this.value,SWe);this._gl.uniformMatrix3fv(this._location,!1,e)}};var _We=new Float32Array(16);function ire(e,t,n,i){this.name=n,this.value=void 0,this._value=new F,this._gl=e,this._location=i}ire.prototype.set=function(){if(!F.equalsArray(this.value,this._value,0)){F.clone(this.value,this._value);let e=F.toArray(this.value,_We);this._gl.uniformMatrix4fv(this._location,!1,e)}};var UR=TWe;var jMt=y(x(),1);function IWe(e,t,n,i){switch(t.type){case e.FLOAT:return new ore(e,t,n,i);case e.FLOAT_VEC2:return new rre(e,t,n,i);case e.FLOAT_VEC3:return new sre(e,t,n,i);case e.FLOAT_VEC4:return new are(e,t,n,i);case e.SAMPLER_2D:case e.SAMPLER_3D:case e.SAMPLER_CUBE:return new k3(e,t,n,i);case e.INT:case e.BOOL:return new cre(e,t,n,i);case e.INT_VEC2:case e.BOOL_VEC2:return new lre(e,t,n,i);case e.INT_VEC3:case e.BOOL_VEC3:return new dre(e,t,n,i);case e.INT_VEC4:case e.BOOL_VEC4:return new ure(e,t,n,i);case e.FLOAT_MAT2:return new mre(e,t,n,i);case e.FLOAT_MAT3:return new hre(e,t,n,i);case e.FLOAT_MAT4:return new fre(e,t,n,i);default:throw new me(`Unrecognized uniform type: ${t.type} for uniform "${n}".`)}}function ore(e,t,n,i){let o=i.length;this.name=n,this.value=new Array(o),this._value=new Float32Array(o),this._gl=e,this._location=i[0]}ore.prototype.set=function(){let e=this.value,t=e.length,n=this._value,i=!1;for(let o=0;o<t;++o){let r=e[o];r!==n[o]&&(n[o]=r,i=!0)}i&&this._gl.uniform1fv(this._location,n)};function rre(e,t,n,i){let o=i.length;this.name=n,this.value=new Array(o),this._value=new Float32Array(o*2),this._gl=e,this._location=i[0]}rre.prototype.set=function(){let e=this.value,t=e.length,n=this._value,i=!1,o=0;for(let r=0;r<t;++r){let s=e[r];M.equalsArray(s,n,o)||(M.pack(s,n,o),i=!0),o+=2}i&&this._gl.uniform2fv(this._location,n)};function sre(e,t,n,i){let o=i.length;this.name=n,this.value=new Array(o),this._value=new Float32Array(o*3),this._gl=e,this._location=i[0]}sre.prototype.set=function(){let e=this.value,t=e.length,n=this._value,i=!1,o=0;for(let r=0;r<t;++r){let s=e[r];l(s.red)?(s.red!==n[o]||s.green!==n[o+1]||s.blue!==n[o+2])&&(n[o]=s.red,n[o+1]=s.green,n[o+2]=s.blue,i=!0):l(s.x)&&(m.equalsArray(s,n,o)||(m.pack(s,n,o),i=!0)),o+=3}i&&this._gl.uniform3fv(this._location,n)};function are(e,t,n,i){let o=i.length;this.name=n,this.value=new Array(o),this._value=new Float32Array(o*4),this._gl=e,this._location=i[0]}are.prototype.set=function(){let e=this.value,t=e.length,n=this._value,i=!1,o=0;for(let r=0;r<t;++r){let s=e[r];l(s.red)?U.equalsArray(s,n,o)||(U.pack(s,n,o),i=!0):l(s.x)&&(re.equalsArray(s,n,o)||(re.pack(s,n,o),i=!0)),o+=4}i&&this._gl.uniform4fv(this._location,n)};function k3(e,t,n,i){let o=i.length;this.name=n,this.value=new Array(o),this._value=new Float32Array(o),this._gl=e,this._locations=i,this.textureUnitIndex=void 0}k3.prototype.set=function(){let e=this._gl,t=e.TEXTURE0+this.textureUnitIndex,n=this.value,i=n.length;for(let o=0;o<i;++o){let r=n[o];r&&(e.activeTexture(t+o),e.bindTexture(r._target,r._texture))}};k3.prototype._setSampler=function(e){this.textureUnitIndex=e;let t=this._locations,n=t.length;for(let i=0;i<n;++i){let o=e+i;this._gl.uniform1i(t[i],o)}return e+n};function cre(e,t,n,i){let o=i.length;this.name=n,this.value=new Array(o),this._value=new Int32Array(o),this._gl=e,this._location=i[0]}cre.prototype.set=function(){let e=this.value,t=e.length,n=this._value,i=!1;for(let o=0;o<t;++o){let r=e[o];r!==n[o]&&(n[o]=r,i=!0)}i&&this._gl.uniform1iv(this._location,n)};function lre(e,t,n,i){let o=i.length;this.name=n,this.value=new Array(o),this._value=new Int32Array(o*2),this._gl=e,this._location=i[0]}lre.prototype.set=function(){let e=this.value,t=e.length,n=this._value,i=!1,o=0;for(let r=0;r<t;++r){let s=e[r];M.equalsArray(s,n,o)||(M.pack(s,n,o),i=!0),o+=2}i&&this._gl.uniform2iv(this._location,n)};function dre(e,t,n,i){let o=i.length;this.name=n,this.value=new Array(o),this._value=new Int32Array(o*3),this._gl=e,this._location=i[0]}dre.prototype.set=function(){let e=this.value,t=e.length,n=this._value,i=!1,o=0;for(let r=0;r<t;++r){let s=e[r];m.equalsArray(s,n,o)||(m.pack(s,n,o),i=!0),o+=3}i&&this._gl.uniform3iv(this._location,n)};function ure(e,t,n,i){let o=i.length;this.name=n,this.value=new Array(o),this._value=new Int32Array(o*4),this._gl=e,this._location=i[0]}ure.prototype.set=function(){let e=this.value,t=e.length,n=this._value,i=!1,o=0;for(let r=0;r<t;++r){let s=e[r];re.equalsArray(s,n,o)||(re.pack(s,n,o),i=!0),o+=4}i&&this._gl.uniform4iv(this._location,n)};function mre(e,t,n,i){let o=i.length;this.name=n,this.value=new Array(o),this._value=new Float32Array(o*4),this._gl=e,this._location=i[0]}mre.prototype.set=function(){let e=this.value,t=e.length,n=this._value,i=!1,o=0;for(let r=0;r<t;++r){let s=e[r];Qi.equalsArray(s,n,o)||(Qi.pack(s,n,o),i=!0),o+=4}i&&this._gl.uniformMatrix2fv(this._location,!1,n)};function hre(e,t,n,i){let o=i.length;this.name=n,this.value=new Array(o),this._value=new Float32Array(o*9),this._gl=e,this._location=i[0]}hre.prototype.set=function(){let e=this.value,t=e.length,n=this._value,i=!1,o=0;for(let r=0;r<t;++r){let s=e[r];$.equalsArray(s,n,o)||($.pack(s,n,o),i=!0),o+=9}i&&this._gl.uniformMatrix3fv(this._location,!1,n)};function fre(e,t,n,i){let o=i.length;this.name=n,this.value=new Array(o),this._value=new Float32Array(o*16),this._gl=e,this._location=i[0]}fre.prototype.set=function(){let e=this.value,t=e.length,n=this._value,i=!1,o=0;for(let r=0;r<t;++r){let s=e[r];F.equalsArray(s,n,o)||(F.pack(s,n,o),i=!0),o+=16}i&&this._gl.uniformMatrix4fv(this._location,!1,n)};var DR=IWe;var ZWe=0;function IA(e){let t=e.vertexShaderText,n=e.fragmentShaderText;typeof spector<"u"&&(t=t.replace(/^#line/gm,"//#line"),n=n.replace(/^#line/gm,"//#line"));let i=RWe(t,n);this._gl=e.gl,this._logShaderCompilation=e.logShaderCompilation,this._debugShaders=e.debugShaders,this._attributeLocations=e.attributeLocations,this._program=void 0,this._numberOfVertexAttributes=void 0,this._vertexAttributes=void 0,this._uniformsByName=void 0,this._uniforms=void 0,this._automaticUniforms=void 0,this._manualUniforms=void 0,this._duplicateUniformNames=i.duplicateUniformNames,this._cachedShader=void 0,this.maximumTextureUnitIndex=void 0,this._vertexShaderSource=e.vertexShaderSource,this._vertexShaderText=e.vertexShaderText,this._fragmentShaderSource=e.fragmentShaderSource,this._fragmentShaderText=i.fragmentShaderText,this.id=ZWe++}IA.fromCache=function(e){return e=e??Q.EMPTY_OBJECT,e.context.shaderCache.getShaderProgram(e)};IA.replaceCache=function(e){return e=e??Q.EMPTY_OBJECT,e.context.shaderCache.replaceShaderProgram(e)};Object.defineProperties(IA.prototype,{vertexShaderSource:{get:function(){return this._vertexShaderSource}},fragmentShaderSource:{get:function(){return this._fragmentShaderSource}},vertexAttributes:{get:function(){return ZD(this),this._vertexAttributes}},numberOfVertexAttributes:{get:function(){return ZD(this),this._numberOfVertexAttributes}},allUniforms:{get:function(){return ZD(this),this._uniformsByName}}});function pre(e){let t=[],n=e.match(/uniform.*?(?![^{]*})(?=[=\[;])/g);if(l(n)){let i=n.length;for(let o=0;o<i;o++){let r=n[o].trim(),s=r.slice(r.lastIndexOf(" ")+1);t.push(s)}}return t}function RWe(e,t){let n={};if(!Bt.highpFloatSupported||!Bt.highpIntSupported){let i,o,r,s,a=pre(e),c=pre(t),d=a.length,u=c.length;for(i=0;i<d;i++)for(o=0;o<u;o++)if(a[i]===c[o]){r=a[i],s=`czm_mediump_${r}`;let h=new RegExp(`${r}\\b`,"g");t=t.replace(h,s),n[s]=r}}return{fragmentShaderText:t,duplicateUniformNames:n}}var tp="[Cesium WebGL] ";function VWe(e,t){let n=t._vertexShaderText,i=t._fragmentShaderText,o=e.createShader(e.VERTEX_SHADER);e.shaderSource(o,n),e.compileShader(o);let r=e.createShader(e.FRAGMENT_SHADER);e.shaderSource(r,i),e.compileShader(r);let s=e.createProgram();e.attachShader(s,o),e.attachShader(s,r);let a=t._attributeLocations;if(l(a))for(let p in a)a.hasOwnProperty(p)&&e.bindAttribLocation(s,a[p],p);e.linkProgram(s);let c;if(e.getProgramParameter(s,e.LINK_STATUS))return t._logShaderCompilation&&(c=e.getShaderInfoLog(o),l(c)&&c.length>0&&console.log(`${tp}Vertex shader compile log: ${c}`),c=e.getShaderInfoLog(r),l(c)&&c.length>0&&console.log(`${tp}Fragment shader compile log: ${c}`),c=e.getProgramInfoLog(s),l(c)&&c.length>0&&console.log(`${tp}Shader program link log: ${c}`)),e.deleteShader(o),e.deleteShader(r),s;let d,u=t._debugShaders;throw e.getShaderParameter(r,e.COMPILE_STATUS)?e.getShaderParameter(o,e.COMPILE_STATUS)?(c=e.getProgramInfoLog(s),console.error(`${tp}Shader program link log: ${c}`),h(o,"vertex"),h(r,"fragment"),d=`Program failed to link. Link log: ${c}`):(c=e.getShaderInfoLog(o),console.error(`${tp}Vertex shader compile log: ${c}`),console.error(`${tp} Vertex shader source:
${n}`),d=`Vertex shader failed to compile. Compile log: ${c}`):(c=e.getShaderInfoLog(r),console.error(`${tp}Fragment shader compile log: ${c}`),console.error(`${tp} Fragment shader source:
${i}`),d=`Fragment shader failed to compile. Compile log: ${c}`),e.deleteShader(o),e.deleteShader(r),e.deleteProgram(s),new me(d);function h(p,A){if(!l(u))return;let f=u.getTranslatedShaderSource(p);if(f===""){console.error(`${tp}${A} shader translation failed.`);return}console.error(`${tp}Translated ${A} shaderSource:
${f}`)}}function GWe(e,t,n){let i={};for(let o=0;o<n;++o){let r=e.getActiveAttrib(t,o),s=e.getAttribLocation(t,r.name);i[r.name]={name:r.name,type:r.type,index:s}}return i}function LWe(e,t){let n={},i=[],o=[],r=e.getProgramParameter(t,e.ACTIVE_UNIFORMS);for(let s=0;s<r;++s){let a=e.getActiveUniform(t,s),c="[0]",d=a.name.indexOf(c,a.name.length-c.length)!==-1?a.name.slice(0,a.name.length-3):a.name;if(d.indexOf("gl_")!==0)if(a.name.indexOf("[")<0){let u=e.getUniformLocation(t,d);if(u!==null){let h=UR(e,a,d,u);n[d]=h,i.push(h),h._setSampler&&o.push(h)}}else{let u,h,p,A,f=d.indexOf("[");if(f>=0){if(u=n[d.slice(0,f)],!l(u))continue;h=u._locations,h.length<=1&&(p=u.value,A=e.getUniformLocation(t,d),A!==null&&(h.push(A),p.push(e.getUniform(t,A))))}else{h=[];for(let b=0;b<a.size;++b)A=e.getUniformLocation(t,`${d}[${b}]`),A!==null&&h.push(A);u=DR(e,a,d,h),n[d]=u,i.push(u),u._setSampler&&o.push(u)}}}return{uniformsByName:n,uniforms:i,samplerUniforms:o}}function WWe(e,t){let n=[],i=[];for(let o in t)if(t.hasOwnProperty(o)){let r=t[o],s=o,a=e._duplicateUniformNames[s];l(a)&&(r.name=a,s=a);let c=yA[s];l(c)?n.push({uniform:r,automaticUniform:c}):i.push(r)}return{automaticUniforms:n,manualUniforms:i}}function FWe(e,t,n){e.useProgram(t);let i=0,o=n.length;for(let r=0;r<o;++r)i=n[r]._setSampler(i);return e.useProgram(null),i}function ZD(e){l(e._program)||Are(e)}function Are(e){let t=e._program,n=e._gl,i=VWe(n,e,e._debugShaders),o=n.getProgramParameter(i,n.ACTIVE_ATTRIBUTES),r=LWe(n,i),s=WWe(e,r.uniformsByName);e._program=i,e._numberOfVertexAttributes=o,e._vertexAttributes=GWe(n,i,o),e._uniformsByName=r.uniformsByName,e._uniforms=r.uniforms,e._automaticUniforms=s.automaticUniforms,e._manualUniforms=s.manualUniforms,e.maximumTextureUnitIndex=FWe(n,i,r.samplerUniforms),t&&e._gl.deleteProgram(t),typeof spector<"u"&&(e._program.__SPECTOR_rebuildProgram=function(a,c,d,u){let h=e._vertexShaderText,p=e._fragmentShaderText,A=/ ! = /g;e._vertexShaderText=a.replace(A," != "),e._fragmentShaderText=c.replace(A," != ");try{Are(e),d(e._program)}catch(f){e._vertexShaderText=h,e._fragmentShaderText=p;let C=/(?:Compile|Link) error: ([^]*)/.exec(f.message);u(C?C[1]:f.message)}})}IA.prototype._bind=function(){ZD(this),this._gl.useProgram(this._program)};IA.prototype._setUniforms=function(e,t,n){let i,o;if(l(e)){let a=this._manualUniforms;for(i=a.length,o=0;o<i;++o){let c=a[o];c.value=e[c.name]()}}let r=this._automaticUniforms;for(i=r.length,o=0;o<i;++o){let a=r[o];a.uniform.value=a.automaticUniform.getValue(t)}let s=this._uniforms;for(i=s.length,o=0;o<i;++o)s[o].set();if(n){let a=this._gl,c=this._program;a.validateProgram(c)}};IA.prototype.isDestroyed=function(){return!1};IA.prototype.destroy=function(){this._cachedShader.cache.releaseShaderProgram(this)};IA.prototype.finalDestroy=function(){return this._gl.deleteProgram(this._program),he(this)};var tn=IA;function RD(e){this._context=e}var kR,BWe=new ot({primitiveType:We.TRIANGLES}),wWe=new mi({color:new U(0,0,0,0)});function NWe(e,t){return new ss({context:e,colorTextures:[t],destroyAttachments:!1})}function PWe(e,t){return tn.fromCache({context:e,vertexShaderSource:Ax,fragmentShaderSource:t,attributeLocations:{position:0,textureCoordinates:1}})}function XWe(e,t){return(!l(kR)||kR.viewport.width!==e||kR.viewport.height!==t)&&(kR=Qe.fromCache({viewport:new nt(0,0,e,t)})),kR}RD.prototype.execute=function(e){l(e.preExecute)&&e.preExecute(e);let t=e.outputTexture,n=t.width,i=t.height,o=this._context,r=l(e.vertexArray)?e.vertexArray:o.getViewportQuadVertexArray(),s=l(e.shaderProgram)?e.shaderProgram:PWe(o,e.fragmentShaderSource),a=NWe(o,t),c=XWe(n,i),d=e.uniformMap,u=wWe;u.framebuffer=a,u.renderState=c,u.execute(o);let h=BWe;h.vertexArray=r,h.renderState=c,h.shaderProgram=s,h.uniformMap=d,h.framebuffer=a,h.execute(o),a.destroy(),e.persists||(s.destroy(),l(e.vertexArray)&&r.destroy()),l(e.postExecute)&&e.postExecute(t)};RD.prototype.isDestroyed=function(){return!1};RD.prototype.destroy=function(){return he(this)};var QR=RD;var z4t=y(x(),1);var Svt=y(x(),1);var wn={BYTE:ne.BYTE,UNSIGNED_BYTE:ne.UNSIGNED_BYTE,SHORT:ne.SHORT,UNSIGNED_SHORT:ne.UNSIGNED_SHORT,INT:ne.INT,UNSIGNED_INT:ne.UNSIGNED_INT,FLOAT:ne.FLOAT,DOUBLE:ne.DOUBLE};wn.getSizeInBytes=function(e){switch(e){case wn.BYTE:return Int8Array.BYTES_PER_ELEMENT;case wn.UNSIGNED_BYTE:return Uint8Array.BYTES_PER_ELEMENT;case wn.SHORT:return Int16Array.BYTES_PER_ELEMENT;case wn.UNSIGNED_SHORT:return Uint16Array.BYTES_PER_ELEMENT;case wn.INT:return Int32Array.BYTES_PER_ELEMENT;case wn.UNSIGNED_INT:return Uint32Array.BYTES_PER_ELEMENT;case wn.FLOAT:return Float32Array.BYTES_PER_ELEMENT;case wn.DOUBLE:return Float64Array.BYTES_PER_ELEMENT}};wn.fromTypedArray=function(e){if(e instanceof Int8Array)return wn.BYTE;if(e instanceof Uint8Array)return wn.UNSIGNED_BYTE;if(e instanceof Int16Array)return wn.SHORT;if(e instanceof Uint16Array)return wn.UNSIGNED_SHORT;if(e instanceof Int32Array)return wn.INT;if(e instanceof Uint32Array)return wn.UNSIGNED_INT;if(e instanceof Float32Array)return wn.FLOAT;if(e instanceof Float64Array)return wn.DOUBLE};wn.validate=function(e){return l(e)&&(e===wn.BYTE||e===wn.UNSIGNED_BYTE||e===wn.SHORT||e===wn.UNSIGNED_SHORT||e===wn.INT||e===wn.UNSIGNED_INT||e===wn.FLOAT||e===wn.DOUBLE)};wn.createTypedArray=function(e,t){switch(e){case wn.BYTE:return new Int8Array(t);case wn.UNSIGNED_BYTE:return new Uint8Array(t);case wn.SHORT:return new Int16Array(t);case wn.UNSIGNED_SHORT:return new Uint16Array(t);case wn.INT:return new Int32Array(t);case wn.UNSIGNED_INT:return new Uint32Array(t);case wn.FLOAT:return new Float32Array(t);case wn.DOUBLE:return new Float64Array(t)}};wn.createArrayBufferView=function(e,t,n,i){switch(n=n??0,i=i??(t.byteLength-n)/wn.getSizeInBytes(e),e){case wn.BYTE:return new Int8Array(t,n,i);case wn.UNSIGNED_BYTE:return new Uint8Array(t,n,i);case wn.SHORT:return new Int16Array(t,n,i);case wn.UNSIGNED_SHORT:return new Uint16Array(t,n,i);case wn.INT:return new Int32Array(t,n,i);case wn.UNSIGNED_INT:return new Uint32Array(t,n,i);case wn.FLOAT:return new Float32Array(t,n,i);case wn.DOUBLE:return new Float64Array(t,n,i)}};wn.fromName=function(e){switch(e){case"BYTE":return wn.BYTE;case"UNSIGNED_BYTE":return wn.UNSIGNED_BYTE;case"SHORT":return wn.SHORT;case"UNSIGNED_SHORT":return wn.UNSIGNED_SHORT;case"INT":return wn.INT;case"UNSIGNED_INT":return wn.UNSIGNED_INT;case"FLOAT":return wn.FLOAT;case"DOUBLE":return wn.DOUBLE}};var H=Object.freeze(wn);var vvt=y(x(),1);var Ivt=y(x(),1),YWe={NONE:0,TRIANGLES:1,LINES:2,POLYLINES:3},sm=Object.freeze(YWe);function Q3(e){e=e??Q.EMPTY_OBJECT,this.attributes=e.attributes,this.indices=e.indices,this.primitiveType=e.primitiveType??We.TRIANGLES,this.boundingSphere=e.boundingSphere,this.geometryType=e.geometryType??sm.NONE,this.boundingSphereCV=e.boundingSphereCV,this.offsetAttribute=e.offsetAttribute}Q3.computeNumberOfVertices=function(e){let t=-1;for(let n in e.attributes)if(e.attributes.hasOwnProperty(n)&&l(e.attributes[n])&&l(e.attributes[n].values)){let i=e.attributes[n];t=i.values.length/i.componentsPerAttribute}return t};var MWe=new Ae,vWe=new m,gre=new F,UWe=[new Ae,new Ae,new Ae],DWe=[new M,new M,new M],kWe=[new M,new M,new M],QWe=new m,OWe=new Me,zWe=new F,HWe=new Qi;Q3._textureCoordinateRotationPoints=function(e,t,n,i){let o,r=de.center(i,MWe),s=Ae.toCartesian(r,n,vWe),a=bt.eastNorthUpToFixedFrame(s,n,gre),c=F.inverse(a,gre),d=DWe,u=UWe;u[0].longitude=i.west,u[0].latitude=i.south,u[1].longitude=i.west,u[1].latitude=i.north,u[2].longitude=i.east,u[2].latitude=i.south;let h=QWe;for(o=0;o<3;o++)Ae.toCartesian(u[o],n,h),h=F.multiplyByPointAsVector(c,h,h),d[o].x=h.x,d[o].y=h.y;let p=Me.fromAxisAngle(m.UNIT_Z,-t,OWe),A=$.fromQuaternion(p,zWe),f=e.length,b=Number.POSITIVE_INFINITY,C=Number.POSITIVE_INFINITY,T=Number.NEGATIVE_INFINITY,E=Number.NEGATIVE_INFINITY;for(o=0;o<f;o++)h=F.multiplyByPointAsVector(c,e[o],h),h=$.multiplyByVector(A,h,h),b=Math.min(b,h.x),C=Math.min(C,h.y),T=Math.max(T,h.x),E=Math.max(E,h.y);let S=Qi.fromRotation(t,HWe),I=kWe;I[0].x=b,I[0].y=C,I[1].x=b,I[1].y=E,I[2].x=T,I[2].y=C;let R=d[0],V=d[2].x-R.x,W=d[1].y-R.y;for(o=0;o<3;o++){let _=I[o];Qi.multiplyByVector(S,_,_),_.x=(_.x-R.x)/V,_.y=(_.y-R.y)/W}let B=I[0],N=I[1],P=I[2],g=new Array(6);return M.pack(B,g),M.pack(N,g,2),M.pack(P,g,4),g};var Ct=Q3;var kvt=y(x(),1);function JWe(e){e=e??Q.EMPTY_OBJECT,this.componentDatatype=e.componentDatatype,this.componentsPerAttribute=e.componentsPerAttribute,this.normalize=e.normalize??!1,this.values=e.values}var we=JWe;var fUt=y(x(),1);var dUt=y(x(),1);var zvt=y(x(),1);function mS(e,t,n,i,o){this._format=e,this._datatype=t,this._width=n,this._height=i,this._buffer=o}Object.defineProperties(mS.prototype,{internalFormat:{get:function(){return this._format}},pixelDatatype:{get:function(){return this._datatype}},width:{get:function(){return this._width}},height:{get:function(){return this._height}},bufferView:{get:function(){return this._buffer}},arrayBufferView:{get:function(){return this._buffer}}});mS.clone=function(e){if(l(e))return new mS(e._format,e._datatype,e._width,e._height,e._buffer)};mS.prototype.clone=function(){return mS.clone(this)};var OR=mS;var oUt=y(x(),1),bre=y(qd(),1);function yre(){if(!l(ja._canTransferArrayBuffer)){let e=H3("transferTypedArrayTest");e.postMessage=e.webkitPostMessage??e.postMessage;let t=99,n=new Int8Array([t]);try{e.postMessage({array:n},[n.buffer])}catch{return ja._canTransferArrayBuffer=!1,ja._canTransferArrayBuffer}ja._canTransferArrayBuffer=new Promise(i=>{e.onmessage=function(o){let r=o.data.array,s=l(r)&&r[0]===t;i(s),e.terminate(),ja._canTransferArrayBuffer=s}})}return ja._canTransferArrayBuffer}var z3=new xe;function O3(e){let t;try{t=new Blob([e],{type:"application/javascript"})}catch{let o=window.BlobBuilder||window.WebKitBlobBuilder||window.MozBlobBuilder||window.MSBlobBuilder,r=new o;r.append(e),t=r.getBlob("application/javascript")}return(window.URL||window.webkitURL).createObjectURL(t)}function H3(e){let t=new bre.default(e),n=t.scheme().length!==0&&t.fragment().length===0,i=e.replace(/\.js$/,""),o={},r,s;if(Db(e))s=e;else if(!n){let a=en(`${ja._workerModulePrefix}/${i}.js`);Db(a)&&(s=a)}if(s){let a=`import "${s}";`;return r=O3(a),o.type="module",new Worker(r,o)}if(!n&&typeof CESIUM_WORKERS<"u"){let a=`
importScripts("${O3(CESIUM_WORKERS)}");
CesiumWorkers["${i}"]();
`;return r=O3(a),new Worker(r,o)}if(r=e,n||(r=en(`${ja._workerModulePrefix+i}.js`)),!hn.supportsEsmWebWorkers())throw new me("This browser is not supported. Please update your browser to continue.");return o.type="module",new Worker(r,o)}async function KWe(e,t){let n={modulePath:void 0,wasmBinaryFile:void 0,wasmBinary:void 0};if(!hn.supportsWebAssembly()){if(!l(t.fallbackModulePath))throw new me(`This browser does not support Web Assembly, and no backup module was provided for ${e._workerPath}`);return n.modulePath=en(t.fallbackModulePath),n}n.wasmBinaryFile=en(t.wasmBinaryFile);let i=await Le.fetchArrayBuffer({url:n.wasmBinaryFile});return n.wasmBinary=i,n}function ja(e,t){this._workerPath=e,this._maximumActiveTasks=t??Number.POSITIVE_INFINITY,this._activeTasks=0,this._nextID=0,this._webAssemblyPromise=void 0}var jWe=(e,t,n,i)=>{let o=({data:r})=>{if(r.id===t){if(l(r.error)){let s=r.error;s.name==="RuntimeError"?(s=new me(r.error.message),s.stack=r.error.stack):s.name==="DeveloperError"?(s=new fe(r.error.message),s.stack=r.error.stack):s.name==="Error"&&(s=new Error(r.error.message),s.stack=r.error.stack),z3.raiseEvent(s),i(s)}else z3.raiseEvent(),n(r.result);e.removeEventListener("message",o)}};return o},qWe=[];async function $We(e,t,n){let i=await Promise.resolve(yre());l(n)?i||(n.length=0):n=qWe;let o=e._nextID++,r=new Promise((s,a)=>{e._worker.addEventListener("message",jWe(e._worker,o,s,a))});return e._worker.postMessage({id:o,baseUrl:en.getCesiumBaseUrl().url,parameters:t,canTransferArrayBuffer:i},n),r}async function eFe(e,t,n){++e._activeTasks;try{let i=await $We(e,t,n);return--e._activeTasks,i}catch(i){throw--e._activeTasks,i}}ja.prototype.scheduleTask=function(e,t){if(l(this._worker)||(this._worker=H3(this._workerPath)),!(this._activeTasks>=this._maximumActiveTasks))return eFe(this,e,t)};ja.prototype.initWebAssemblyModule=async function(e){if(l(this._webAssemblyPromise))return this._webAssemblyPromise;let t=async()=>{let n=this._worker=H3(this._workerPath),i=await KWe(this,e),o=await Promise.resolve(yre()),r,s=i.wasmBinary;l(s)&&o&&(r=[s]);let a=new Promise((c,d)=>{n.onmessage=function({data:u}){l(u)?c(u.result):d(new me("Could not configure wasm module"))}});return n.postMessage({canTransferArrayBuffer:o,parameters:{webAssemblyConfig:i}},r),a};return this._webAssemblyPromise=t(),this._webAssemblyPromise};ja.prototype.isDestroyed=function(){return!1};ja.prototype.destroy=function(){return l(this._worker)&&this._worker.terminate(),he(this)};ja.taskCompletedEvent=z3;ja._defaultWorkerModulePrefix="Workers/";ja._workerModulePrefix=ja._defaultWorkerModulePrefix;ja._canTransferArrayBuffer=void 0;var $n=ja;function ZA(){}ZA._transcodeTaskProcessor=new $n("transcodeKTX2",Number.POSITIVE_INFINITY);ZA._readyPromise=void 0;function tFe(){let e=ZA._transcodeTaskProcessor.initWebAssemblyModule({wasmBinaryFile:"ThirdParty/basis_transcoder.wasm"}).then(function(t){if(t)return ZA._transcodeTaskProcessor;throw new me("KTX2 transcoder could not be initialized.")});ZA._readyPromise=e}ZA.transcode=function(e,t){return l(ZA._readyPromise)||tFe(),ZA._readyPromise.then(function(n){let i=e;e instanceof ArrayBuffer&&(i=new Uint8Array(e));let o={supportedTargetFormats:t,ktx2Buffer:i};return n.scheduleTask(o,[i.buffer])}).then(function(n){let i=n.length,o=Object.keys(n[0]);for(let r=0;r<i;r++){let s=n[r];for(let a=0;a<o.length;a++){let c=s[o[a]];s[o[a]]=new OR(c.internalFormat,c.datatype,c.width,c.height,c.levelBuffer)}}if(o.length===1){for(let r=0;r<i;++r)n[r]=n[r][o[0]];i===1&&(n=n[0])}return n}).catch(function(n){throw n})};var zR=ZA;var xre;Cre.setKTX2SupportedFormats=function(e,t,n,i,o,r){xre={s3tc:e,pvrtc:t,astc:n,etc:i,etc1:o,bc7:r}};function Cre(e){let t;return e instanceof ArrayBuffer||ArrayBuffer.isView(e)?t=Promise.resolve(e):t=Le.createIfNeeded(e).fetchArrayBuffer(),t.then(function(n){return zR.transcode(n,xre)})}var md=Cre;var N9t=y(x(),1);var jUt=y(x(),1);var VUt=y(x(),1);var AUt=y(x(),1);function nFe(e,t){this.start=e??0,this.stop=t??0}var Qr=nFe;function _n(e,t){this.center=m.clone(e??m.ZERO),this.radius=t??0}var j3=new m,q3=new m,$3=new m,eH=new m,tH=new m,nH=new m,iH=new m,qa=new m,oH=new m,rH=new m,sH=new m,aH=new m,iFe=4/3*L.PI;_n.fromPoints=function(e,t){if(l(t)||(t=new _n),!l(e)||e.length===0)return t.center=m.clone(m.ZERO,t.center),t.radius=0,t;let n=m.clone(e[0],iH),i=m.clone(n,j3),o=m.clone(n,q3),r=m.clone(n,$3),s=m.clone(n,eH),a=m.clone(n,tH),c=m.clone(n,nH),d=e.length,u;for(u=1;u<d;u++){m.clone(e[u],n);let B=n.x,N=n.y,P=n.z;B<i.x&&m.clone(n,i),B>s.x&&m.clone(n,s),N<o.y&&m.clone(n,o),N>a.y&&m.clone(n,a),P<r.z&&m.clone(n,r),P>c.z&&m.clone(n,c)}let h=m.magnitudeSquared(m.subtract(s,i,qa)),p=m.magnitudeSquared(m.subtract(a,o,qa)),A=m.magnitudeSquared(m.subtract(c,r,qa)),f=i,b=s,C=h;p>C&&(C=p,f=o,b=a),A>C&&(C=A,f=r,b=c);let T=oH;T.x=(f.x+b.x)*.5,T.y=(f.y+b.y)*.5,T.z=(f.z+b.z)*.5;let E=m.magnitudeSquared(m.subtract(b,T,qa)),S=Math.sqrt(E),I=rH;I.x=i.x,I.y=o.y,I.z=r.z;let R=sH;R.x=s.x,R.y=a.y,R.z=c.z;let V=m.midpoint(I,R,aH),W=0;for(u=0;u<d;u++){m.clone(e[u],n);let B=m.magnitude(m.subtract(n,V,qa));B>W&&(W=B);let N=m.magnitudeSquared(m.subtract(n,T,qa));if(N>E){let P=Math.sqrt(N);S=(S+P)*.5,E=S*S;let g=P-S;T.x=(S*T.x+g*n.x)/P,T.y=(S*T.y+g*n.y)/P,T.z=(S*T.z+g*n.z)/P}}return S<W?(m.clone(T,t.center),t.radius=S):(m.clone(V,t.center),t.radius=W),t};var Tre=new ki,oFe=new m,rFe=new m,J3=new Ae,K3=new Ae;_n.fromRectangle2D=function(e,t,n){return _n.fromRectangleWithHeights2D(e,t,0,0,n)};_n.fromRectangleWithHeights2D=function(e,t,n,i,o){if(l(o)||(o=new _n),!l(e))return o.center=m.clone(m.ZERO,o.center),o.radius=0,o;Tre._ellipsoid=ie.default,t=t??Tre,de.southwest(e,J3),J3.height=n,de.northeast(e,K3),K3.height=i;let r=t.project(J3,oFe),s=t.project(K3,rFe),a=s.x-r.x,c=s.y-r.y,d=s.z-r.z;o.radius=Math.sqrt(a*a+c*c+d*d)*.5;let u=o.center;return u.x=r.x+a*.5,u.y=r.y+c*.5,u.z=r.z+d*.5,o};var sFe=[];_n.fromRectangle3D=function(e,t,n,i){if(t=t??ie.default,n=n??0,l(i)||(i=new _n),!l(e))return i.center=m.clone(m.ZERO,i.center),i.radius=0,i;let o=de.subsample(e,t,n,sFe);return _n.fromPoints(o,i)};_n.fromVertices=function(e,t,n,i){if(l(i)||(i=new _n),!l(e)||e.length===0)return i.center=m.clone(m.ZERO,i.center),i.radius=0,i;t=t??m.ZERO,n=n??3;let o=iH;o.x=e[0]+t.x,o.y=e[1]+t.y,o.z=e[2]+t.z;let r=m.clone(o,j3),s=m.clone(o,q3),a=m.clone(o,$3),c=m.clone(o,eH),d=m.clone(o,tH),u=m.clone(o,nH),h=e.length,p;for(p=0;p<h;p+=n){let P=e[p]+t.x,g=e[p+1]+t.y,_=e[p+2]+t.z;o.x=P,o.y=g,o.z=_,P<r.x&&m.clone(o,r),P>c.x&&m.clone(o,c),g<s.y&&m.clone(o,s),g>d.y&&m.clone(o,d),_<a.z&&m.clone(o,a),_>u.z&&m.clone(o,u)}let A=m.magnitudeSquared(m.subtract(c,r,qa)),f=m.magnitudeSquared(m.subtract(d,s,qa)),b=m.magnitudeSquared(m.subtract(u,a,qa)),C=r,T=c,E=A;f>E&&(E=f,C=s,T=d),b>E&&(E=b,C=a,T=u);let S=oH;S.x=(C.x+T.x)*.5,S.y=(C.y+T.y)*.5,S.z=(C.z+T.z)*.5;let I=m.magnitudeSquared(m.subtract(T,S,qa)),R=Math.sqrt(I),V=rH;V.x=r.x,V.y=s.y,V.z=a.z;let W=sH;W.x=c.x,W.y=d.y,W.z=u.z;let B=m.midpoint(V,W,aH),N=0;for(p=0;p<h;p+=n){o.x=e[p]+t.x,o.y=e[p+1]+t.y,o.z=e[p+2]+t.z;let P=m.magnitude(m.subtract(o,B,qa));P>N&&(N=P);let g=m.magnitudeSquared(m.subtract(o,S,qa));if(g>I){let _=Math.sqrt(g);R=(R+_)*.5,I=R*R;let Z=_-R;S.x=(R*S.x+Z*o.x)/_,S.y=(R*S.y+Z*o.y)/_,S.z=(R*S.z+Z*o.z)/_}}return R<N?(m.clone(S,i.center),i.radius=R):(m.clone(B,i.center),i.radius=N),i};_n.fromEncodedCartesianVertices=function(e,t,n){if(l(n)||(n=new _n),!l(e)||!l(t)||e.length!==t.length||e.length===0)return n.center=m.clone(m.ZERO,n.center),n.radius=0,n;let i=iH;i.x=e[0]+t[0],i.y=e[1]+t[1],i.z=e[2]+t[2];let o=m.clone(i,j3),r=m.clone(i,q3),s=m.clone(i,$3),a=m.clone(i,eH),c=m.clone(i,tH),d=m.clone(i,nH),u=e.length,h;for(h=0;h<u;h+=3){let N=e[h]+t[h],P=e[h+1]+t[h+1],g=e[h+2]+t[h+2];i.x=N,i.y=P,i.z=g,N<o.x&&m.clone(i,o),N>a.x&&m.clone(i,a),P<r.y&&m.clone(i,r),P>c.y&&m.clone(i,c),g<s.z&&m.clone(i,s),g>d.z&&m.clone(i,d)}let p=m.magnitudeSquared(m.subtract(a,o,qa)),A=m.magnitudeSquared(m.subtract(c,r,qa)),f=m.magnitudeSquared(m.subtract(d,s,qa)),b=o,C=a,T=p;A>T&&(T=A,b=r,C=c),f>T&&(T=f,b=s,C=d);let E=oH;E.x=(b.x+C.x)*.5,E.y=(b.y+C.y)*.5,E.z=(b.z+C.z)*.5;let S=m.magnitudeSquared(m.subtract(C,E,qa)),I=Math.sqrt(S),R=rH;R.x=o.x,R.y=r.y,R.z=s.z;let V=sH;V.x=a.x,V.y=c.y,V.z=d.z;let W=m.midpoint(R,V,aH),B=0;for(h=0;h<u;h+=3){i.x=e[h]+t[h],i.y=e[h+1]+t[h+1],i.z=e[h+2]+t[h+2];let N=m.magnitude(m.subtract(i,W,qa));N>B&&(B=N);let P=m.magnitudeSquared(m.subtract(i,E,qa));if(P>S){let g=Math.sqrt(P);I=(I+g)*.5,S=I*I;let _=g-I;E.x=(I*E.x+_*i.x)/g,E.y=(I*E.y+_*i.y)/g,E.z=(I*E.z+_*i.z)/g}}return I<B?(m.clone(E,n.center),n.radius=I):(m.clone(W,n.center),n.radius=B),n};_n.fromCornerPoints=function(e,t,n){l(n)||(n=new _n);let i=m.midpoint(e,t,n.center);return n.radius=m.distance(i,t),n};_n.fromEllipsoid=function(e,t){return l(t)||(t=new _n),m.clone(m.ZERO,t.center),t.radius=e.maximumRadius,t};var aFe=new m;_n.fromBoundingSpheres=function(e,t){if(l(t)||(t=new _n),!l(e)||e.length===0)return t.center=m.clone(m.ZERO,t.center),t.radius=0,t;let n=e.length;if(n===1)return _n.clone(e[0],t);if(n===2)return _n.union(e[0],e[1],t);let i=[],o;for(o=0;o<n;o++)i.push(e[o].center);t=_n.fromPoints(i,t);let r=t.center,s=t.radius;for(o=0;o<n;o++){let a=e[o];s=Math.max(s,m.distance(r,a.center,aFe)+a.radius)}return t.radius=s,t};var cFe=new m,lFe=new m,dFe=new m;_n.fromOrientedBoundingBox=function(e,t){l(t)||(t=new _n);let n=e.halfAxes,i=$.getColumn(n,0,cFe),o=$.getColumn(n,1,lFe),r=$.getColumn(n,2,dFe);return m.add(i,o,i),m.add(i,r,i),t.center=m.clone(e.center,t.center),t.radius=m.magnitude(i),t};var uFe=new m,mFe=new m;_n.fromTransformation=function(e,t){l(t)||(t=new _n);let n=F.getTranslation(e,uFe),i=F.getScale(e,mFe),o=.5*m.magnitude(i);return t.center=m.clone(n,t.center),t.radius=o,t};_n.clone=function(e,t){if(l(e))return l(t)?(t.center=m.clone(e.center,t.center),t.radius=e.radius,t):new _n(e.center,e.radius)};_n.packedLength=4;_n.pack=function(e,t,n){n=n??0;let i=e.center;return t[n++]=i.x,t[n++]=i.y,t[n++]=i.z,t[n]=e.radius,t};_n.unpack=function(e,t,n){t=t??0,l(n)||(n=new _n);let i=n.center;return i.x=e[t++],i.y=e[t++],i.z=e[t++],n.radius=e[t],n};var hFe=new m,fFe=new m;_n.union=function(e,t,n){l(n)||(n=new _n);let i=e.center,o=e.radius,r=t.center,s=t.radius,a=m.subtract(r,i,hFe),c=m.magnitude(a);if(o>=c+s)return e.clone(n),n;if(s>=c+o)return t.clone(n),n;let d=(o+c+s)*.5,u=m.multiplyByScalar(a,(-o+d)/c,fFe);return m.add(u,i,u),m.clone(u,n.center),n.radius=d,n};var pFe=new m;_n.expand=function(e,t,n){n=_n.clone(e,n);let i=m.magnitude(m.subtract(t,n.center,pFe));return i>n.radius&&(n.radius=i),n};_n.intersectPlane=function(e,t){let n=e.center,i=e.radius,o=t.normal,r=m.dot(o,n)+t.distance;return r<-i?qt.OUTSIDE:r<i?qt.INTERSECTING:qt.INSIDE};_n.transform=function(e,t,n){return l(n)||(n=new _n),n.center=F.multiplyByPoint(t,e.center,n.center),n.radius=F.getMaximumScale(t)*e.radius,n};var AFe=new m;_n.distanceSquaredTo=function(e,t){let n=m.subtract(e.center,t,AFe),i=m.magnitude(n)-e.radius;return i<=0?0:i*i};_n.transformWithoutScale=function(e,t,n){return l(n)||(n=new _n),n.center=F.multiplyByPoint(t,e.center,n.center),n.radius=e.radius,n};var gFe=new m;_n.computePlaneDistances=function(e,t,n,i){l(i)||(i=new Qr);let o=m.subtract(e.center,t,gFe),r=m.dot(n,o);return i.start=r-e.radius,i.stop=r+e.radius,i};var Ere=new m,bFe=new m,yFe=new m,xFe=new m,CFe=new m,TFe=new Ae,_re=new Array(8);for(let e=0;e<8;++e)_re[e]=new m;var Sre=new ki;_n.projectTo2D=function(e,t,n){Sre._ellipsoid=ie.default,t=t??Sre;let i=t.ellipsoid,o=e.center,r=e.radius,s;m.equals(o,m.ZERO)?s=m.clone(m.UNIT_X,Ere):s=i.geodeticSurfaceNormal(o,Ere);let a=m.cross(m.UNIT_Z,s,bFe);m.normalize(a,a);let c=m.cross(s,a,yFe);m.normalize(c,c),m.multiplyByScalar(s,r,s),m.multiplyByScalar(c,r,c),m.multiplyByScalar(a,r,a);let d=m.negate(c,CFe),u=m.negate(a,xFe),h=_re,p=h[0];m.add(s,c,p),m.add(p,a,p),p=h[1],m.add(s,c,p),m.add(p,u,p),p=h[2],m.add(s,d,p),m.add(p,u,p),p=h[3],m.add(s,d,p),m.add(p,a,p),m.negate(s,s),p=h[4],m.add(s,c,p),m.add(p,a,p),p=h[5],m.add(s,c,p),m.add(p,u,p),p=h[6],m.add(s,d,p),m.add(p,u,p),p=h[7],m.add(s,d,p),m.add(p,a,p);let A=h.length;for(let T=0;T<A;++T){let E=h[T];m.add(o,E,E);let S=i.cartesianToCartographic(E,TFe);t.project(S,E)}n=_n.fromPoints(h,n),o=n.center;let f=o.x,b=o.y,C=o.z;return o.x=C,o.y=f,o.z=b,n};_n.isOccluded=function(e,t){return!t.isBoundingSphereVisible(e)};_n.equals=function(e,t){return e===t||l(e)&&l(t)&&m.equals(e.center,t.center)&&e.radius===t.radius};_n.prototype.intersectPlane=function(e){return _n.intersectPlane(this,e)};_n.prototype.distanceSquaredTo=function(e){return _n.distanceSquaredTo(this,e)};_n.prototype.computePlaneDistances=function(e,t,n){return _n.computePlaneDistances(this,e,t,n)};_n.prototype.isOccluded=function(e){return _n.isOccluded(this,e)};_n.prototype.equals=function(e){return _n.equals(this,e)};_n.prototype.clone=function(e){return _n.clone(this,e)};_n.prototype.volume=function(){let e=this.radius;return iFe*e*e*e};var ue=_n;var WUt=y(x(),1);function EFe(e){e=e??Q.EMPTY_OBJECT,this.position=e.position,this.normal=e.normal,this.st=e.st,this.bitangent=e.bitangent,this.tangent=e.tangent,this.color=e.color}var xn=EFe;var BUt=y(x(),1),SFe={NONE:0,TOP:1,ALL:2},An=Object.freeze(SFe);var XUt=y(x(),1);function Qs(e){e=e??Q.EMPTY_OBJECT,this.position=e.position??!1,this.normal=e.normal??!1,this.st=e.st??!1,this.bitangent=e.bitangent??!1,this.tangent=e.tangent??!1,this.color=e.color??!1}Qs.POSITION_ONLY=Object.freeze(new Qs({position:!0}));Qs.POSITION_AND_NORMAL=Object.freeze(new Qs({position:!0,normal:!0}));Qs.POSITION_NORMAL_AND_ST=Object.freeze(new Qs({position:!0,normal:!0,st:!0}));Qs.POSITION_AND_ST=Object.freeze(new Qs({position:!0,st:!0}));Qs.POSITION_AND_COLOR=Object.freeze(new Qs({position:!0,color:!0}));Qs.ALL=Object.freeze(new Qs({position:!0,normal:!0,st:!0,tangent:!0,bitangent:!0}));Qs.DEFAULT=Qs.POSITION_NORMAL_AND_ST;Qs.packedLength=6;Qs.pack=function(e,t,n){return n=n??0,t[n++]=e.position?1:0,t[n++]=e.normal?1:0,t[n++]=e.st?1:0,t[n++]=e.tangent?1:0,t[n++]=e.bitangent?1:0,t[n]=e.color?1:0,t};Qs.unpack=function(e,t,n){return t=t??0,l(n)||(n=new Qs),n.position=e[t++]===1,n.normal=e[t++]===1,n.st=e[t++]===1,n.tangent=e[t++]===1,n.bitangent=e[t++]===1,n.color=e[t]===1,n};Qs.clone=function(e,t){if(l(e))return l(t)||(t=new Qs),t.position=e.position,t.normal=e.normal,t.st=e.st,t.tangent=e.tangent,t.bitangent=e.bitangent,t.color=e.color,t};var ve=Qs;var _Fe=new m;function eu(e){e=e??Q.EMPTY_OBJECT;let t=e.minimum,n=e.maximum,i=e.vertexFormat??ve.DEFAULT;this._minimum=m.clone(t),this._maximum=m.clone(n),this._vertexFormat=i,this._offsetAttribute=e.offsetAttribute,this._workerName="createBoxGeometry"}eu.fromDimensions=function(e){e=e??Q.EMPTY_OBJECT;let t=e.dimensions,n=m.multiplyByScalar(t,.5,new m);return new eu({minimum:m.negate(n,new m),maximum:n,vertexFormat:e.vertexFormat,offsetAttribute:e.offsetAttribute})};eu.fromAxisAlignedBoundingBox=function(e){return new eu({minimum:e.minimum,maximum:e.maximum})};eu.packedLength=2*m.packedLength+ve.packedLength+1;eu.pack=function(e,t,n){return n=n??0,m.pack(e._minimum,t,n),m.pack(e._maximum,t,n+m.packedLength),ve.pack(e._vertexFormat,t,n+2*m.packedLength),t[n+2*m.packedLength+ve.packedLength]=e._offsetAttribute??-1,t};var Zre=new m,Rre=new m,Vre=new ve,Ire={minimum:Zre,maximum:Rre,vertexFormat:Vre,offsetAttribute:void 0};eu.unpack=function(e,t,n){t=t??0;let i=m.unpack(e,t,Zre),o=m.unpack(e,t+m.packedLength,Rre),r=ve.unpack(e,t+2*m.packedLength,Vre),s=e[t+2*m.packedLength+ve.packedLength];return l(n)?(n._minimum=m.clone(i,n._minimum),n._maximum=m.clone(o,n._maximum),n._vertexFormat=ve.clone(r,n._vertexFormat),n._offsetAttribute=s===-1?void 0:s,n):(Ire.offsetAttribute=s===-1?void 0:s,new eu(Ire))};eu.createGeometry=function(e){let t=e._minimum,n=e._maximum,i=e._vertexFormat;if(m.equals(t,n))return;let o=new xn,r,s;if(i.position&&(i.st||i.normal||i.tangent||i.bitangent)){if(i.position&&(s=new Float64Array(72),s[0]=t.x,s[1]=t.y,s[2]=n.z,s[3]=n.x,s[4]=t.y,s[5]=n.z,s[6]=n.x,s[7]=n.y,s[8]=n.z,s[9]=t.x,s[10]=n.y,s[11]=n.z,s[12]=t.x,s[13]=t.y,s[14]=t.z,s[15]=n.x,s[16]=t.y,s[17]=t.z,s[18]=n.x,s[19]=n.y,s[20]=t.z,s[21]=t.x,s[22]=n.y,s[23]=t.z,s[24]=n.x,s[25]=t.y,s[26]=t.z,s[27]=n.x,s[28]=n.y,s[29]=t.z,s[30]=n.x,s[31]=n.y,s[32]=n.z,s[33]=n.x,s[34]=t.y,s[35]=n.z,s[36]=t.x,s[37]=t.y,s[38]=t.z,s[39]=t.x,s[40]=n.y,s[41]=t.z,s[42]=t.x,s[43]=n.y,s[44]=n.z,s[45]=t.x,s[46]=t.y,s[47]=n.z,s[48]=t.x,s[49]=n.y,s[50]=t.z,s[51]=n.x,s[52]=n.y,s[53]=t.z,s[54]=n.x,s[55]=n.y,s[56]=n.z,s[57]=t.x,s[58]=n.y,s[59]=n.z,s[60]=t.x,s[61]=t.y,s[62]=t.z,s[63]=n.x,s[64]=t.y,s[65]=t.z,s[66]=n.x,s[67]=t.y,s[68]=n.z,s[69]=t.x,s[70]=t.y,s[71]=n.z,o.position=new we({componentDatatype:H.DOUBLE,componentsPerAttribute:3,values:s})),i.normal){let d=new Float32Array(72);d[0]=0,d[1]=0,d[2]=1,d[3]=0,d[4]=0,d[5]=1,d[6]=0,d[7]=0,d[8]=1,d[9]=0,d[10]=0,d[11]=1,d[12]=0,d[13]=0,d[14]=-1,d[15]=0,d[16]=0,d[17]=-1,d[18]=0,d[19]=0,d[20]=-1,d[21]=0,d[22]=0,d[23]=-1,d[24]=1,d[25]=0,d[26]=0,d[27]=1,d[28]=0,d[29]=0,d[30]=1,d[31]=0,d[32]=0,d[33]=1,d[34]=0,d[35]=0,d[36]=-1,d[37]=0,d[38]=0,d[39]=-1,d[40]=0,d[41]=0,d[42]=-1,d[43]=0,d[44]=0,d[45]=-1,d[46]=0,d[47]=0,d[48]=0,d[49]=1,d[50]=0,d[51]=0,d[52]=1,d[53]=0,d[54]=0,d[55]=1,d[56]=0,d[57]=0,d[58]=1,d[59]=0,d[60]=0,d[61]=-1,d[62]=0,d[63]=0,d[64]=-1,d[65]=0,d[66]=0,d[67]=-1,d[68]=0,d[69]=0,d[70]=-1,d[71]=0,o.normal=new we({componentDatatype:H.FLOAT,componentsPerAttribute:3,values:d})}if(i.st){let d=new Float32Array(48);d[0]=0,d[1]=0,d[2]=1,d[3]=0,d[4]=1,d[5]=1,d[6]=0,d[7]=1,d[8]=1,d[9]=0,d[10]=0,d[11]=0,d[12]=0,d[13]=1,d[14]=1,d[15]=1,d[16]=0,d[17]=0,d[18]=1,d[19]=0,d[20]=1,d[21]=1,d[22]=0,d[23]=1,d[24]=1,d[25]=0,d[26]=0,d[27]=0,d[28]=0,d[29]=1,d[30]=1,d[31]=1,d[32]=1,d[33]=0,d[34]=0,d[35]=0,d[36]=0,d[37]=1,d[38]=1,d[39]=1,d[40]=0,d[41]=0,d[42]=1,d[43]=0,d[44]=1,d[45]=1,d[46]=0,d[47]=1,o.st=new we({componentDatatype:H.FLOAT,componentsPerAttribute:2,values:d})}if(i.tangent){let d=new Float32Array(72);d[0]=1,d[1]=0,d[2]=0,d[3]=1,d[4]=0,d[5]=0,d[6]=1,d[7]=0,d[8]=0,d[9]=1,d[10]=0,d[11]=0,d[12]=-1,d[13]=0,d[14]=0,d[15]=-1,d[16]=0,d[17]=0,d[18]=-1,d[19]=0,d[20]=0,d[21]=-1,d[22]=0,d[23]=0,d[24]=0,d[25]=1,d[26]=0,d[27]=0,d[28]=1,d[29]=0,d[30]=0,d[31]=1,d[32]=0,d[33]=0,d[34]=1,d[35]=0,d[36]=0,d[37]=-1,d[38]=0,d[39]=0,d[40]=-1,d[41]=0,d[42]=0,d[43]=-1,d[44]=0,d[45]=0,d[46]=-1,d[47]=0,d[48]=-1,d[49]=0,d[50]=0,d[51]=-1,d[52]=0,d[53]=0,d[54]=-1,d[55]=0,d[56]=0,d[57]=-1,d[58]=0,d[59]=0,d[60]=1,d[61]=0,d[62]=0,d[63]=1,d[64]=0,d[65]=0,d[66]=1,d[67]=0,d[68]=0,d[69]=1,d[70]=0,d[71]=0,o.tangent=new we({componentDatatype:H.FLOAT,componentsPerAttribute:3,values:d})}if(i.bitangent){let d=new Float32Array(72);d[0]=0,d[1]=1,d[2]=0,d[3]=0,d[4]=1,d[5]=0,d[6]=0,d[7]=1,d[8]=0,d[9]=0,d[10]=1,d[11]=0,d[12]=0,d[13]=1,d[14]=0,d[15]=0,d[16]=1,d[17]=0,d[18]=0,d[19]=1,d[20]=0,d[21]=0,d[22]=1,d[23]=0,d[24]=0,d[25]=0,d[26]=1,d[27]=0,d[28]=0,d[29]=1,d[30]=0,d[31]=0,d[32]=1,d[33]=0,d[34]=0,d[35]=1,d[36]=0,d[37]=0,d[38]=1,d[39]=0,d[40]=0,d[41]=1,d[42]=0,d[43]=0,d[44]=1,d[45]=0,d[46]=0,d[47]=1,d[48]=0,d[49]=0,d[50]=1,d[51]=0,d[52]=0,d[53]=1,d[54]=0,d[55]=0,d[56]=1,d[57]=0,d[58]=0,d[59]=1,d[60]=0,d[61]=0,d[62]=1,d[63]=0,d[64]=0,d[65]=1,d[66]=0,d[67]=0,d[68]=1,d[69]=0,d[70]=0,d[71]=1,o.bitangent=new we({componentDatatype:H.FLOAT,componentsPerAttribute:3,values:d})}r=new Uint16Array(36),r[0]=0,r[1]=1,r[2]=2,r[3]=0,r[4]=2,r[5]=3,r[6]=6,r[7]=5,r[8]=4,r[9]=7,r[10]=6,r[11]=4,r[12]=8,r[13]=9,r[14]=10,r[15]=8,r[16]=10,r[17]=11,r[18]=14,r[19]=13,r[20]=12,r[21]=15,r[22]=14,r[23]=12,r[24]=18,r[25]=17,r[26]=16,r[27]=19,r[28]=18,r[29]=16,r[30]=20,r[31]=21,r[32]=22,r[33]=20,r[34]=22,r[35]=23}else s=new Float64Array(24),s[0]=t.x,s[1]=t.y,s[2]=t.z,s[3]=n.x,s[4]=t.y,s[5]=t.z,s[6]=n.x,s[7]=n.y,s[8]=t.z,s[9]=t.x,s[10]=n.y,s[11]=t.z,s[12]=t.x,s[13]=t.y,s[14]=n.z,s[15]=n.x,s[16]=t.y,s[17]=n.z,s[18]=n.x,s[19]=n.y,s[20]=n.z,s[21]=t.x,s[22]=n.y,s[23]=n.z,o.position=new we({componentDatatype:H.DOUBLE,componentsPerAttribute:3,values:s}),r=new Uint16Array(36),r[0]=4,r[1]=5,r[2]=6,r[3]=4,r[4]=6,r[5]=7,r[6]=1,r[7]=0,r[8]=3,r[9]=1,r[10]=3,r[11]=2,r[12]=1,r[13]=6,r[14]=5,r[15]=1,r[16]=2,r[17]=6,r[18]=2,r[19]=3,r[20]=7,r[21]=2,r[22]=7,r[23]=6,r[24]=3,r[25]=0,r[26]=4,r[27]=3,r[28]=4,r[29]=7,r[30]=0,r[31]=1,r[32]=5,r[33]=0,r[34]=5,r[35]=4;let a=m.subtract(n,t,_Fe),c=m.magnitude(a)*.5;if(l(e._offsetAttribute)){let d=s.length,u=e._offsetAttribute===An.NONE?0:1,h=new Uint8Array(d/3).fill(u);o.applyOffset=new we({componentDatatype:H.UNSIGNED_BYTE,componentsPerAttribute:1,values:h})}return new Ct({attributes:o,indices:r,primitiveType:We.TRIANGLES,boundingSphere:new ue(m.ZERO,c),offsetAttribute:e._offsetAttribute})};var cH;eu.getUnitBox=function(){return l(cH)||(cH=eu.createGeometry(eu.fromDimensions({dimensions:new m(1,1,1),vertexFormat:ve.POSITION_ONLY}))),cH};var Cc=eu;var Gkt=y(x(),1);var hDt=y(x(),1);var rDt=y(x(),1);var Co={SCALAR:"SCALAR",VEC2:"VEC2",VEC3:"VEC3",VEC4:"VEC4",MAT2:"MAT2",MAT3:"MAT3",MAT4:"MAT4"};Co.getMathType=function(e){switch(e){case Co.SCALAR:return Number;case Co.VEC2:return M;case Co.VEC3:return m;case Co.VEC4:return re;case Co.MAT2:return Qi;case Co.MAT3:return $;case Co.MAT4:return F}};Co.getNumberOfComponents=function(e){switch(e){case Co.SCALAR:return 1;case Co.VEC2:return 2;case Co.VEC3:return 3;case Co.VEC4:case Co.MAT2:return 4;case Co.MAT3:return 9;case Co.MAT4:return 16}};Co.getAttributeLocationCount=function(e){switch(e){case Co.SCALAR:case Co.VEC2:case Co.VEC3:case Co.VEC4:return 1;case Co.MAT2:return 2;case Co.MAT3:return 3;case Co.MAT4:return 4}};Co.getGlslType=function(e){switch(e){case Co.SCALAR:return"float";case Co.VEC2:return"vec2";case Co.VEC3:return"vec3";case Co.VEC4:return"vec4";case Co.MAT2:return"mat2";case Co.MAT3:return"mat3";case Co.MAT4:return"mat4"}};var Ut=Object.freeze(Co);var Gre=1/256,IFe=65536,dH=256,Vo={};Vo.octEncodeInRange=function(e,t,n){if(n.x=e.x/(Math.abs(e.x)+Math.abs(e.y)+Math.abs(e.z)),n.y=e.y/(Math.abs(e.x)+Math.abs(e.y)+Math.abs(e.z)),e.z<0){let i=n.x,o=n.y;n.x=(1-Math.abs(o))*L.signNotZero(i),n.y=(1-Math.abs(i))*L.signNotZero(o)}return n.x=L.toSNorm(n.x,t),n.y=L.toSNorm(n.y,t),n};Vo.octEncode=function(e,t){return Vo.octEncodeInRange(e,255,t)};var HR=new M,Lre=new Uint8Array(1);function VD(e){return Lre[0]=e,Lre[0]}Vo.octEncodeToCartesian4=function(e,t){return Vo.octEncodeInRange(e,65535,HR),t.x=VD(HR.x*Gre),t.y=VD(HR.x),t.z=VD(HR.y*Gre),t.w=VD(HR.y),t};Vo.octDecodeInRange=function(e,t,n,i){if(i.x=L.fromSNorm(e,n),i.y=L.fromSNorm(t,n),i.z=1-(Math.abs(i.x)+Math.abs(i.y)),i.z<0){let o=i.x;i.x=(1-Math.abs(i.y))*L.signNotZero(o),i.y=(1-Math.abs(o))*L.signNotZero(i.y)}return m.normalize(i,i)};Vo.octDecode=function(e,t,n){return Vo.octDecodeInRange(e,t,255,n)};Vo.octDecodeFromCartesian4=function(e,t){let n=e.x,i=e.y,o=e.z,r=e.w,s=n*dH+i,a=o*dH+r;return Vo.octDecodeInRange(s,a,65535,t)};Vo.octPackFloat=function(e){return 256*e.x+e.y};var uH=new M;Vo.octEncodeFloat=function(e){return Vo.octEncode(e,uH),Vo.octPackFloat(uH)};Vo.octDecodeFloat=function(e,t){let n=e/256,i=Math.floor(n),o=(n-i)*256;return Vo.octDecode(i,o,t)};Vo.octPack=function(e,t,n,i){let o=Vo.octEncodeFloat(e),r=Vo.octEncodeFloat(t),s=Vo.octEncode(n,uH);return i.x=65536*s.x+o,i.y=65536*s.y+r,i};Vo.octUnpack=function(e,t,n,i){let o=e.x/65536,r=Math.floor(o),s=(o-r)*65536;o=e.y/65536;let a=Math.floor(o),c=(o-a)*65536;Vo.octDecodeFloat(s,t),Vo.octDecodeFloat(c,n),Vo.octDecode(r,a,i)};Vo.compressTextureCoordinates=function(e){let t=e.x*4095|0,n=e.y*4095|0;return 4096*t+n};Vo.decompressTextureCoordinates=function(e,t){let n=e/4096,i=Math.floor(n);return t.x=i/4095,t.y=(e-i*4096)/4095,t};function lH(e){return e>>1^-(e&1)}Vo.zigZagDeltaDecode=function(e,t,n){let i=e.length,o=0,r=0,s=0;for(let a=0;a<i;++a)o+=lH(e[a]),r+=lH(t[a]),e[a]=o,t[a]=r,l(n)&&(s+=lH(n[a]),n[a]=s)};Vo.dequantize=function(e,t,n,i){let o=Ut.getNumberOfComponents(n),r;switch(t){case H.BYTE:r=127;break;case H.UNSIGNED_BYTE:r=255;break;case H.SHORT:r=32767;break;case H.UNSIGNED_SHORT:r=65535;break;case H.INT:r=2147483647;break;case H.UNSIGNED_INT:r=4294967295;break}let s=new Float32Array(i*o);for(let a=0;a<i;a++)for(let c=0;c<o;c++){let d=a*o+c;s[d]=Math.max(e[d]/r,-1)}return s};Vo.encodeRGB8=function(e){return Math.round(L.clamp(e.red*255,0,255))*IFe+Math.round(L.clamp(e.green*255,0,255))*dH+Math.round(L.clamp(e.blue*255,0,255))};Vo.decodeRGB8=function(e,t){return e=Math.floor(e),t.red=(e>>16&255)/255,t.green=(e>>8&255)/255,t.blue=(e&255)/255,t};Vo.decodeRGB565=function(e,t){let n=e.length;l(t)||(t=new Float32Array(n*3));let i=31,o=63,r=1/31,s=1/63;for(let a=0;a<n;a++){let c=e[a],d=c>>11,u=c>>5&o,h=c&i,p=3*a;t[p]=d*r,t[p+1]=u*s,t[p+2]=h*r}return t};var on=Vo;var yDt=y(x(),1);var Wre=new m,Fre=new m,Bre=new m;function ZFe(e,t,n,i,o){l(o)||(o=new m);let r,s,a,c,d,u,h,p;if(l(t.z)){if(m.equalsEpsilon(e,t,L.EPSILON14))return m.clone(m.UNIT_X,o);if(m.equalsEpsilon(e,n,L.EPSILON14))return m.clone(m.UNIT_Y,o);if(m.equalsEpsilon(e,i,L.EPSILON14))return m.clone(m.UNIT_Z,o);r=m.subtract(n,t,Wre),s=m.subtract(i,t,Fre),a=m.subtract(e,t,Bre),c=m.dot(r,r),d=m.dot(r,s),u=m.dot(r,a),h=m.dot(s,s),p=m.dot(s,a)}else{if(M.equalsEpsilon(e,t,L.EPSILON14))return m.clone(m.UNIT_X,o);if(M.equalsEpsilon(e,n,L.EPSILON14))return m.clone(m.UNIT_Y,o);if(M.equalsEpsilon(e,i,L.EPSILON14))return m.clone(m.UNIT_Z,o);r=M.subtract(n,t,Wre),s=M.subtract(i,t,Fre),a=M.subtract(e,t,Bre),c=M.dot(r,r),d=M.dot(r,s),u=M.dot(r,a),h=M.dot(s,s),p=M.dot(s,a)}o.y=h*u-d*p,o.z=c*p-d*u;let A=c*h-d*d;if(A!==0)return o.y/=A,o.z/=A,o.x=1-o.y-o.z,o}var bx=ZFe;var EDt=y(x(),1);function np(){this.high=m.clone(m.ZERO),this.low=m.clone(m.ZERO)}np.encode=function(e,t){l(t)||(t={high:0,low:0});let n;return e>=0?(n=Math.floor(e/65536)*65536,t.high=n,t.low=e-n):(n=Math.floor(-e/65536)*65536,t.high=-n,t.low=e+n),t};var RA={high:0,low:0};np.fromCartesian=function(e,t){l(t)||(t=new np);let n=t.high,i=t.low;return np.encode(e.x,RA),n.x=RA.high,i.x=RA.low,np.encode(e.y,RA),n.y=RA.high,i.y=RA.low,np.encode(e.z,RA),n.z=RA.high,i.z=RA.low,t};var mH=new np;np.writeElements=function(e,t,n){np.fromCartesian(e,mH);let i=mH.high,o=mH.low;t[n]=i.x,t[n+1]=i.y,t[n+2]=i.z,t[n+3]=o.x,t[n+4]=o.y,t[n+5]=o.z};var In=np;var JDt=y(x(),1);var IDt=y(x(),1);var hH={};hH.computeDiscriminant=function(e,t,n){return t*t-4*e*n};function wre(e,t,n){let i=e+t;return L.sign(e)!==L.sign(t)&&Math.abs(i/Math.max(Math.abs(e),Math.abs(t)))<n?0:i}hH.computeRealRoots=function(e,t,n){let i;if(e===0)return t===0?[]:[-n/t];if(t===0){if(n===0)return[0,0];let c=Math.abs(n),d=Math.abs(e);if(c<d&&c/d<L.EPSILON14)return[0,0];if(c>d&&d/c<L.EPSILON14)return[];if(i=-n/e,i<0)return[];let u=Math.sqrt(i);return[-u,u]}else if(n===0)return i=-t/e,i<0?[i,0]:[0,i];let o=t*t,r=4*e*n,s=wre(o,-r,L.EPSILON14);if(s<0)return[];let a=-.5*wre(t,L.sign(t)*Math.sqrt(s),L.EPSILON14);return t>0?[a/e,n/a]:[n/a,a/e]};var xl=hH;var BDt=y(x(),1);var VDt=y(x(),1);var pH={};pH.computeDiscriminant=function(e,t,n,i){let o=e*e,r=t*t,s=n*n,a=i*i;return 18*e*t*n*i+r*s-27*o*a-4*(e*s*n+r*t*i)};function fH(e,t,n,i){let o=e,r=t/3,s=n/3,a=i,c=o*s,d=r*a,u=r*r,h=s*s,p=o*s-u,A=o*a-r*s,f=r*a-h,b=4*p*f-A*A,C,T;if(b<0){let O,J,te;u*d>=c*h?(O=o,J=p,te=-2*r*p+o*A):(O=a,J=f,te=-a*A+2*s*f);let j=-(te<0?-1:1)*Math.abs(O)*Math.sqrt(-b);T=-te+j;let ee=T/2,ge=ee<0?-Math.pow(-ee,1/3):Math.pow(ee,1/3),ye=T===j?-ge:-J/ge;return C=J<=0?ge+ye:-te/(ge*ge+ye*ye+J),u*d>=c*h?[(C-r)/o]:[-a/(C+s)]}let E=p,S=-2*r*p+o*A,I=f,R=-a*A+2*s*f,V=Math.sqrt(b),W=Math.sqrt(3)/2,B=Math.abs(Math.atan2(o*V,-S)/3);C=2*Math.sqrt(-E);let N=Math.cos(B);T=C*N;let P=C*(-N/2-W*Math.sin(B)),g=T+P>2*r?T-r:P-r,_=o,Z=g/_;B=Math.abs(Math.atan2(a*V,-R)/3),C=2*Math.sqrt(-I),N=Math.cos(B),T=C*N,P=C*(-N/2-W*Math.sin(B));let G=-a,w=T+P<2*s?T+s:P+s,X=G/w,k=_*w,v=-g*w-_*G,D=g*G,Y=(s*v-r*D)/(-r*v+s*k);return Z<=Y?Z<=X?Y<=X?[Z,Y,X]:[Z,X,Y]:[X,Z,Y]:Z<=X?[Y,Z,X]:Y<=X?[Y,X,Z]:[X,Y,Z]}pH.computeRealRoots=function(e,t,n,i){let o,r;if(e===0)return xl.computeRealRoots(t,n,i);if(t===0){if(n===0){if(i===0)return[0,0,0];r=-i/e;let s=r<0?-Math.pow(-r,1/3):Math.pow(r,1/3);return[s,s,s]}else if(i===0)return o=xl.computeRealRoots(e,0,n),o.Length===0?[0]:[o[0],0,o[1]];return fH(e,0,n,i)}else{if(n===0)return i===0?(r=-t/e,r<0?[r,0,0]:[0,0,r]):fH(e,t,0,i);if(i===0)return o=xl.computeRealRoots(e,t,n),o.length===0?[0]:o[1]<=0?[o[0],o[1],0]:o[0]>=0?[0,o[0],o[1]]:[o[0],0,o[1]]}return fH(e,t,n,i)};var yx=pH;var AH={};AH.computeDiscriminant=function(e,t,n,i,o){let r=e*e,s=r*e,a=t*t,c=a*t,d=n*n,u=d*n,h=i*i,p=h*i,A=o*o,f=A*o;return a*d*h-4*c*p-4*e*u*h+18*e*t*n*p-27*r*h*h+256*s*f+o*(18*c*n*i-4*a*u+16*e*d*d-80*e*t*d*i-6*e*a*h+144*r*n*h)+A*(144*e*a*n-27*a*a-128*r*d-192*r*t*i)};function Ch(e,t,n,i){let o=e*e,r=t-3*o/8,s=n-t*e/2+o*e/8,a=i-n*e/4+t*o/16-3*o*o/256,c=yx.computeRealRoots(1,2*r,r*r-4*a,-s*s);if(c.length>0){let d=-e/4,u=c[c.length-1];if(Math.abs(u)<L.EPSILON14){let h=xl.computeRealRoots(1,r,a);if(h.length===2){let p=h[0],A=h[1],f;if(p>=0&&A>=0){let b=Math.sqrt(p),C=Math.sqrt(A);return[d-C,d-b,d+b,d+C]}else{if(p>=0&&A<0)return f=Math.sqrt(p),[d-f,d+f];if(p<0&&A>=0)return f=Math.sqrt(A),[d-f,d+f]}}return[]}else if(u>0){let h=Math.sqrt(u),p=(r+u-s/h)/2,A=(r+u+s/h)/2,f=xl.computeRealRoots(1,h,p),b=xl.computeRealRoots(1,-h,A);return f.length!==0?(f[0]+=d,f[1]+=d,b.length!==0?(b[0]+=d,b[1]+=d,f[1]<=b[0]?[f[0],f[1],b[0],b[1]]:b[1]<=f[0]?[b[0],b[1],f[0],f[1]]:f[0]>=b[0]&&f[1]<=b[1]?[b[0],f[0],f[1],b[1]]:b[0]>=f[0]&&b[1]<=f[1]?[f[0],b[0],b[1],f[1]]:f[0]>b[0]&&f[0]<b[1]?[b[0],f[0],b[1],f[1]]:[f[0],b[0],f[1],b[1]]):f):b.length!==0?(b[0]+=d,b[1]+=d,b):[]}}return[]}function JR(e,t,n,i){let o=n*n,r=t*t,s=e*e,a=-2*t,c=n*e+r-4*i,d=s*i-n*t*e+o,u=yx.computeRealRoots(1,a,c,d);if(u.length>0){let h=u[0],p=t-h,A=p*p,f=e/2,b=p/2,C=A-4*i,T=A+4*Math.abs(i),E=s-4*h,S=s+4*Math.abs(h),I,R;if(h<0||C*S<E*T){let _=Math.sqrt(E);I=_/2,R=_===0?0:(e*b-n)/_}else{let _=Math.sqrt(C);I=_===0?0:(e*b-n)/_,R=_/2}let V,W;f===0&&I===0?(V=0,W=0):L.sign(f)===L.sign(I)?(V=f+I,W=h/V):(W=f-I,V=h/W);let B,N;b===0&&R===0?(B=0,N=0):L.sign(b)===L.sign(R)?(B=b+R,N=i/B):(N=b-R,B=i/N);let P=xl.computeRealRoots(1,V,B),g=xl.computeRealRoots(1,W,N);if(P.length!==0)return g.length!==0?P[1]<=g[0]?[P[0],P[1],g[0],g[1]]:g[1]<=P[0]?[g[0],g[1],P[0],P[1]]:P[0]>=g[0]&&P[1]<=g[1]?[g[0],P[0],P[1],g[1]]:g[0]>=P[0]&&g[1]<=P[1]?[P[0],g[0],g[1],P[1]]:P[0]>g[0]&&P[0]<g[1]?[g[0],P[0],g[1],P[1]]:[P[0],g[0],P[1],g[1]]:P;if(g.length!==0)return g}return[]}AH.computeRealRoots=function(e,t,n,i,o){if(Math.abs(e)<L.EPSILON15)return yx.computeRealRoots(t,n,i,o);let r=t/e,s=n/e,a=i/e,c=o/e,d=r<0?1:0;switch(d+=s<0?d+1:d,d+=a<0?d+1:d,d+=c<0?d+1:d,d){case 0:return Ch(r,s,a,c);case 1:return JR(r,s,a,c);case 2:return JR(r,s,a,c);case 3:return Ch(r,s,a,c);case 4:return Ch(r,s,a,c);case 5:return JR(r,s,a,c);case 6:return Ch(r,s,a,c);case 7:return Ch(r,s,a,c);case 8:return JR(r,s,a,c);case 9:return Ch(r,s,a,c);case 10:return Ch(r,s,a,c);case 11:return JR(r,s,a,c);case 12:return Ch(r,s,a,c);case 13:return Ch(r,s,a,c);case 14:return Ch(r,s,a,c);case 15:return Ch(r,s,a,c);default:return}};var KR=AH;var XDt=y(x(),1);function GD(e,t){t=m.clone(t??m.ZERO),m.equals(t,m.ZERO)||m.normalize(t,t),this.origin=m.clone(e??m.ZERO),this.direction=t}GD.clone=function(e,t){if(l(e))return l(t)?(t.origin=m.clone(e.origin),t.direction=m.clone(e.direction),t):new GD(e.origin,e.direction)};GD.getPoint=function(e,t,n){return l(n)||(n=new m),n=m.multiplyByScalar(e.direction,t,n),m.add(e.origin,n,n)};var Cn=GD;var ir={};ir.rayPlane=function(e,t,n){l(n)||(n=new m);let i=e.origin,o=e.direction,r=t.normal,s=m.dot(r,o);if(Math.abs(s)<L.EPSILON15)return;let a=(-t.distance-m.dot(r,i))/s;if(!(a<0))return n=m.multiplyByScalar(o,a,n),m.add(i,n,n)};var RFe=new m,VFe=new m,Dre=new m,Nre=new m,Pre=new m;ir.rayTriangleParametric=function(e,t,n,i,o){o=o??!1;let r=e.origin,s=e.direction,a=m.subtract(n,t,RFe),c=m.subtract(i,t,VFe),d=m.cross(s,c,Dre),u=m.dot(a,d),h,p,A,f,b;if(o){if(u<L.EPSILON6||(h=m.subtract(r,t,Nre),A=m.dot(h,d),A<0||A>u)||(p=m.cross(h,a,Pre),f=m.dot(s,p),f<0||A+f>u))return;b=m.dot(c,p)/u}else{if(Math.abs(u)<L.EPSILON6)return;let C=1/u;if(h=m.subtract(r,t,Nre),A=m.dot(h,d)*C,A<0||A>1||(p=m.cross(h,a,Pre),f=m.dot(s,p)*C,f<0||A+f>1))return;b=m.dot(c,p)*C}return b};ir.rayTriangle=function(e,t,n,i,o,r){let s=ir.rayTriangleParametric(e,t,n,i,o);if(!(!l(s)||s<0))return l(r)||(r=new m),m.multiplyByScalar(e.direction,s,r),m.add(e.origin,r,r)};var GFe=new Cn;ir.lineSegmentTriangle=function(e,t,n,i,o,r,s){let a=GFe;m.clone(e,a.origin),m.subtract(t,e,a.direction),m.normalize(a.direction,a.direction);let c=ir.rayTriangleParametric(a,n,i,o,r);if(!(!l(c)||c<0||c>m.distance(e,t)))return l(s)||(s=new m),m.multiplyByScalar(a.direction,c,s),m.add(a.origin,s,s)};function LFe(e,t,n,i){let o=t*t-4*e*n;if(o<0)return;if(o>0){let s=1/(2*e),a=Math.sqrt(o),c=(-t+a)*s,d=(-t-a)*s;return c<d?(i.root0=c,i.root1=d):(i.root0=d,i.root1=c),i}let r=-t/(2*e);if(r!==0)return i.root0=i.root1=r,i}var WFe={root0:0,root1:0};function kre(e,t,n){l(n)||(n=new Qr);let i=e.origin,o=e.direction,r=t.center,s=t.radius*t.radius,a=m.subtract(i,r,Dre),c=m.dot(o,o),d=2*m.dot(o,a),u=m.magnitudeSquared(a)-s,h=LFe(c,d,u,WFe);if(l(h))return n.start=h.root0,n.stop=h.root1,n}ir.raySphere=function(e,t,n){if(n=kre(e,t,n),!(!l(n)||n.stop<0))return n.start=Math.max(n.start,0),n};var FFe=new Cn;ir.lineSegmentSphere=function(e,t,n,i){let o=FFe;m.clone(e,o.origin);let r=m.subtract(t,e,o.direction),s=m.magnitude(r);if(m.normalize(r,r),i=kre(o,n,i),!(!l(i)||i.stop<0||i.start>s))return i.start=Math.max(i.start,0),i.stop=Math.min(i.stop,s),i};var BFe=new m,wFe=new m;ir.rayEllipsoid=function(e,t){let n=t.oneOverRadii,i=m.multiplyComponents(n,e.origin,BFe),o=m.multiplyComponents(n,e.direction,wFe),r=m.magnitudeSquared(i),s=m.dot(i,o),a,c,d,u,h;if(r>1){if(s>=0)return;let p=s*s;if(a=r-1,c=m.magnitudeSquared(o),d=c*a,p<d)return;if(p>d){u=s*s-d,h=-s+Math.sqrt(u);let f=h/c,b=a/h;return f<b?new Qr(f,b):{start:b,stop:f}}let A=Math.sqrt(a/c);return new Qr(A,A)}else if(r<1)return a=r-1,c=m.magnitudeSquared(o),d=c*a,u=s*s-d,h=-s+Math.sqrt(u),new Qr(0,h/c);if(s<0)return c=m.magnitudeSquared(o),new Qr(0,-s/c)};var NFe=new Qr,PFe=new Qr,XFe=new Qr;ir.rayAxisAlignedBoundingBox=function(e,t,n){l(n)||(n=new Qr);let i=gH(e.origin.x,e.direction.x,t.minimum.x,t.maximum.x,NFe),o=gH(e.origin.y,e.direction.y,t.minimum.y,t.maximum.y,PFe),r=gH(e.origin.z,e.direction.z,t.minimum.z,t.maximum.z,XFe);if(n.start=i.start>o.start?i.start:o.start,n.stop=i.stop<o.stop?i.stop:o.stop,!(i.start>o.stop||o.start>i.stop)&&!(n.start>r.stop||r.start>n.stop))return r.start>n.start&&(n.start=r.start),r.stop<n.stop&&(n.stop=r.stop),n};function gH(e,t,n,i,o){if(o.start=(n-e)/t,o.stop=(i-e)/t,o.stop<o.start){let r=o.stop;o.stop=o.start,o.start=r}return o}function xx(e,t,n){let i=e+t;return L.sign(e)!==L.sign(t)&&Math.abs(i/Math.max(Math.abs(e),Math.abs(t)))<n?0:i}ir.quadraticVectorExpression=function(e,t,n,i,o){let r=i*i,s=o*o,a=(e[$.COLUMN1ROW1]-e[$.COLUMN2ROW2])*s,c=o*(i*xx(e[$.COLUMN1ROW0],e[$.COLUMN0ROW1],L.EPSILON15)+t.y),d=e[$.COLUMN0ROW0]*r+e[$.COLUMN2ROW2]*s+i*t.x+n,u=s*xx(e[$.COLUMN2ROW1],e[$.COLUMN1ROW2],L.EPSILON15),h=o*(i*xx(e[$.COLUMN2ROW0],e[$.COLUMN0ROW2])+t.z),p,A=[];if(h===0&&u===0){if(p=xl.computeRealRoots(a,c,d),p.length===0)return A;let B=p[0],N=Math.sqrt(Math.max(1-B*B,0));if(A.push(new m(i,o*B,o*-N)),A.push(new m(i,o*B,o*N)),p.length===2){let P=p[1],g=Math.sqrt(Math.max(1-P*P,0));A.push(new m(i,o*P,o*-g)),A.push(new m(i,o*P,o*g))}return A}let f=h*h,b=u*u,C=a*a,T=h*u,E=C+b,S=2*(c*a+T),I=2*d*a+c*c-b+f,R=2*(d*c-T),V=d*d-f;if(E===0&&S===0&&I===0&&R===0)return A;p=KR.computeRealRoots(E,S,I,R,V);let W=p.length;if(W===0)return A;for(let B=0;B<W;++B){let N=p[B],P=N*N,g=Math.max(1-P,0),_=Math.sqrt(g),Z;L.sign(a)===L.sign(d)?Z=xx(a*P+d,c*N,L.EPSILON12):L.sign(d)===L.sign(c*N)?Z=xx(a*P,c*N+d,L.EPSILON12):Z=xx(a*P+c*N,d,L.EPSILON12);let G=xx(u*N,h,L.EPSILON15),w=Z*G;w<0?A.push(new m(i,o*N,o*_)):w>0?A.push(new m(i,o*N,o*-_)):_!==0?(A.push(new m(i,o*N,o*-_)),A.push(new m(i,o*N,o*_)),++B):A.push(new m(i,o*N,o*_))}return A};var bH=new m,Xre=new m,Yre=new m,LD=new m,YFe=new m,MFe=new $,vFe=new $,UFe=new $,DFe=new $,kFe=new $,Mre=new $,vre=new $,Ure=new m,QFe=new m,OFe=new Ae;ir.grazingAltitudeLocation=function(e,t){let n=e.origin,i=e.direction;if(!m.equals(n,m.ZERO)){let V=t.geodeticSurfaceNormal(n,bH);if(m.dot(i,V)>=0)return n}let o=l(this.rayEllipsoid(e,t)),r=t.transformPositionToScaledSpace(i,bH),s=m.normalize(r,r),a=m.mostOrthogonalAxis(r,LD),c=m.normalize(m.cross(a,s,Xre),Xre),d=m.normalize(m.cross(s,c,Yre),Yre),u=MFe;u[0]=s.x,u[1]=s.y,u[2]=s.z,u[3]=c.x,u[4]=c.y,u[5]=c.z,u[6]=d.x,u[7]=d.y,u[8]=d.z;let h=$.transpose(u,vFe),p=$.fromScale(t.radii,UFe),A=$.fromScale(t.oneOverRadii,DFe),f=kFe;f[0]=0,f[1]=-i.z,f[2]=i.y,f[3]=i.z,f[4]=0,f[5]=-i.x,f[6]=-i.y,f[7]=i.x,f[8]=0;let b=$.multiply($.multiply(h,A,Mre),f,Mre),C=$.multiply($.multiply(b,p,vre),u,vre),T=$.multiplyByVector(b,n,YFe),E=ir.quadraticVectorExpression(C,m.negate(T,bH),0,0,1),S,I,R=E.length;if(R>0){let V=m.clone(m.ZERO,QFe),W=Number.NEGATIVE_INFINITY;for(let N=0;N<R;++N){S=$.multiplyByVector(p,$.multiplyByVector(u,E[N],Ure),Ure);let P=m.normalize(m.subtract(S,n,LD),LD),g=m.dot(P,i);g>W&&(W=g,V=m.clone(S,V))}let B=t.cartesianToCartographic(V,OFe);return W=L.clamp(W,0,1),I=m.magnitude(m.subtract(V,n,LD))*Math.sqrt(1-W*W),I=o?-I:I,B.height=I,t.cartographicToCartesian(B,new m)}};var zFe=new m;ir.lineSegmentPlane=function(e,t,n,i){l(i)||(i=new m);let o=m.subtract(t,e,zFe),r=n.normal,s=m.dot(r,o);if(Math.abs(s)<L.EPSILON6)return;let a=m.dot(r,e),c=-(n.distance+a)/s;if(!(c<0||c>1))return m.multiplyByScalar(o,c,i),m.add(e,i,i),i};ir.trianglePlaneIntersection=function(e,t,n,i){let o=i.normal,r=i.distance,s=m.dot(o,e)+r<0,a=m.dot(o,t)+r<0,c=m.dot(o,n)+r<0,d=0;d+=s?1:0,d+=a?1:0,d+=c?1:0;let u,h;if((d===1||d===2)&&(u=new m,h=new m),d===1){if(s)return ir.lineSegmentPlane(e,t,i,u),ir.lineSegmentPlane(e,n,i,h),{positions:[e,t,n,u,h],indices:[0,3,4,1,2,4,1,4,3]};if(a)return ir.lineSegmentPlane(t,n,i,u),ir.lineSegmentPlane(t,e,i,h),{positions:[e,t,n,u,h],indices:[1,3,4,2,0,4,2,4,3]};if(c)return ir.lineSegmentPlane(n,e,i,u),ir.lineSegmentPlane(n,t,i,h),{positions:[e,t,n,u,h],indices:[2,3,4,0,1,4,0,4,3]}}else if(d===2)if(s)if(a){if(!c)return ir.lineSegmentPlane(e,n,i,u),ir.lineSegmentPlane(t,n,i,h),{positions:[e,t,n,u,h],indices:[0,1,4,0,4,3,2,3,4]}}else return ir.lineSegmentPlane(n,t,i,u),ir.lineSegmentPlane(e,t,i,h),{positions:[e,t,n,u,h],indices:[2,0,4,2,4,3,1,3,4]};else return ir.lineSegmentPlane(t,e,i,u),ir.lineSegmentPlane(n,e,i,h),{positions:[e,t,n,u,h],indices:[1,2,4,1,4,3,0,3,4]}};var hi=ir;var tkt=y(x(),1);function _a(e,t){this.normal=m.clone(e),this.distance=t}_a.fromPointNormal=function(e,t,n){let i=-m.dot(t,e);return l(n)?(m.clone(t,n.normal),n.distance=i,n):new _a(t,i)};var HFe=new m;_a.fromCartesian4=function(e,t){let n=m.fromCartesian4(e,HFe),i=e.w;return l(t)?(m.clone(n,t.normal),t.distance=i,t):new _a(n,i)};_a.getPointDistance=function(e,t){return m.dot(e.normal,t)+e.distance};var JFe=new m;_a.projectPointOntoPlane=function(e,t,n){l(n)||(n=new m);let i=_a.getPointDistance(e,t),o=m.multiplyByScalar(e.normal,i,JFe);return m.subtract(t,o,n)};var KFe=new F,jFe=new re,qFe=new m;_a.transform=function(e,t,n){let i=e.normal,o=e.distance,r=F.inverseTranspose(t,KFe),s=re.fromElements(i.x,i.y,i.z,o,jFe);s=F.multiplyByVector(r,s,s);let a=m.fromCartesian4(s,qFe);return s=re.divideByScalar(s,m.magnitude(a),s),_a.fromCartesian4(s,n)};_a.clone=function(e,t){return l(t)?(m.clone(e.normal,t.normal),t.distance=e.distance,t):new _a(e.normal,e.distance)};_a.equals=function(e,t){return e.distance===t.distance&&m.equals(e.normal,t.normal)};_a.ORIGIN_XY_PLANE=Object.freeze(new _a(m.UNIT_Z,0));_a.ORIGIN_YZ_PLANE=Object.freeze(new _a(m.UNIT_X,0));_a.ORIGIN_ZX_PLANE=Object.freeze(new _a(m.UNIT_Y,0));var dn=_a;var rkt=y(x(),1);var yH={};yH.calculateACMR=function(e){e=e??Q.EMPTY_OBJECT;let t=e.indices,n=e.maximumIndex,i=e.cacheSize??24,o=t.length;if(!l(n)){n=0;let a=0,c=t[a];for(;a<o;)c>n&&(n=c),++a,c=t[a]}let r=[];for(let a=0;a<n+1;a++)r[a]=0;let s=i+1;for(let a=0;a<o;++a)s-r[t[a]]>i&&(r[t[a]]=s,++s);return(s-i+1)/(o/3)};yH.tipsify=function(e){e=e??Q.EMPTY_OBJECT;let t=e.indices,n=e.maximumIndex,i=e.cacheSize??24,o;function r(g,_,Z,G){for(;_.length>=1;){let w=_[_.length-1];if(_.splice(_.length-1,1),g[w].numLiveTriangles>0)return w}for(;o<G;){if(g[o].numLiveTriangles>0)return++o,o-1;++o}return-1}function s(g,_,Z,G,w,X,k){let v=-1,D,Y=-1,O=0;for(;O<Z.length;){let J=Z[O];G[J].numLiveTriangles&&(D=0,w-G[J].timeStamp+2*G[J].numLiveTriangles<=_&&(D=w-G[J].timeStamp),(D>Y||Y===-1)&&(Y=D,v=J)),++O}return v===-1?r(G,X,g,k):v}let a=t.length,c=0,d=0,u=t[d],h=a;if(l(n))c=n+1;else{for(;d<h;)u>c&&(c=u),++d,u=t[d];if(c===-1)return 0;++c}let p=[],A;for(A=0;A<c;A++)p[A]={numLiveTriangles:0,timeStamp:0,vertexTriangles:[]};d=0;let f=0;for(;d<h;)p[t[d]].vertexTriangles.push(f),++p[t[d]].numLiveTriangles,p[t[d+1]].vertexTriangles.push(f),++p[t[d+1]].numLiveTriangles,p[t[d+2]].vertexTriangles.push(f),++p[t[d+2]].numLiveTriangles,++f,d+=3;let b=0,C=i+1;o=1;let T=[],E=[],S,I,R=0,V=[],W=a/3,B=[];for(A=0;A<W;A++)B[A]=!1;let N,P;for(;b!==-1;){T=[],I=p[b],P=I.vertexTriangles.length;for(let g=0;g<P;++g)if(f=I.vertexTriangles[g],!B[f]){B[f]=!0,d=f+f+f;for(let _=0;_<3;++_)N=t[d],T.push(N),E.push(N),V[R]=N,++R,S=p[N],--S.numLiveTriangles,C-S.timeStamp>i&&(S.timeStamp=C,++C),++d}b=s(t,i,T,p,C,E,c)}return V};var jR=yH;var Cl={};function XD(e,t,n,i,o){e[t++]=n,e[t++]=i,e[t++]=i,e[t++]=o,e[t++]=o,e[t]=n}function $Fe(e){let t=e.length,n=t/3*6,i=Ue.createTypedArray(t,n),o=0;for(let r=0;r<t;r+=3,o+=6)XD(i,o,e[r],e[r+1],e[r+2]);return i}function e2e(e){let t=e.length;if(t>=3){let n=(t-2)*6,i=Ue.createTypedArray(t,n);XD(i,0,e[0],e[1],e[2]);let o=6;for(let r=3;r<t;++r,o+=6)XD(i,o,e[r-1],e[r],e[r-2]);return i}return new Uint16Array}function t2e(e){if(e.length>0){let t=e.length-1,n=(t-1)*6,i=Ue.createTypedArray(t,n),o=e[0],r=0;for(let s=1;s<t;++s,r+=6)XD(i,r,o,e[s],e[s+1]);return i}return new Uint16Array}Cl.toWireframe=function(e){let t=e.indices;if(l(t)){switch(e.primitiveType){case We.TRIANGLES:e.indices=$Fe(t);break;case We.TRIANGLE_STRIP:e.indices=e2e(t);break;case We.TRIANGLE_FAN:e.indices=t2e(t);break}e.primitiveType=We.LINES}return e};Cl.createLineSegmentsForVectors=function(e,t,n){t=t??"normal",n=n??1e4;let i=e.attributes.position.values,o=e.attributes[t].values,r=i.length,s=new Float64Array(2*r),a=0;for(let u=0;u<r;u+=3)s[a++]=i[u],s[a++]=i[u+1],s[a++]=i[u+2],s[a++]=i[u]+o[u]*n,s[a++]=i[u+1]+o[u+1]*n,s[a++]=i[u+2]+o[u+2]*n;let c,d=e.boundingSphere;return l(d)&&(c=new ue(d.center,d.radius+n)),new Ct({attributes:{position:new we({componentDatatype:H.DOUBLE,componentsPerAttribute:3,values:s})},primitiveType:We.LINES,boundingSphere:c})};Cl.createAttributeLocations=function(e){let t=["position","positionHigh","positionLow","position3DHigh","position3DLow","position2DHigh","position2DLow","pickColor","normal","st","tangent","bitangent","extrudeDirection","compressedAttributes"],n=e.attributes,i={},o=0,r,s=t.length;for(r=0;r<s;++r){let a=t[r];l(n[a])&&(i[a]=o++)}for(let a in n)n.hasOwnProperty(a)&&!l(i[a])&&(i[a]=o++);return i};Cl.reorderForPreVertexCache=function(e){let t=Ct.computeNumberOfVertices(e),n=e.indices;if(l(n)){let i=new Int32Array(t);for(let p=0;p<t;p++)i[p]=-1;let o=n,r=o.length,s=Ue.createTypedArray(t,r),a=0,c=0,d=0,u;for(;a<r;)u=i[o[a]],u!==-1?s[c]=u:(u=o[a],i[u]=d,s[c]=d,++d),++a,++c;e.indices=s;let h=e.attributes;for(let p in h)if(h.hasOwnProperty(p)&&l(h[p])&&l(h[p].values)){let A=h[p],f=A.values,b=0,C=A.componentsPerAttribute,T=H.createTypedArray(A.componentDatatype,d*C);for(;b<t;){let E=i[b];if(E!==-1)for(let S=0;S<C;S++)T[C*E+S]=f[C*b+S];++b}A.values=T}}return e};Cl.reorderForPostVertexCache=function(e,t){let n=e.indices;if(e.primitiveType===We.TRIANGLES&&l(n)){let i=n.length,o=0;for(let r=0;r<i;r++)n[r]>o&&(o=n[r]);e.indices=jR.tipsify({indices:n,maximumIndex:o,cacheSize:t})}return e};function Qre(e){let t={};for(let n in e)if(e.hasOwnProperty(n)&&l(e[n])&&l(e[n].values)){let i=e[n];t[n]=new we({componentDatatype:i.componentDatatype,componentsPerAttribute:i.componentsPerAttribute,normalize:i.normalize,values:[]})}return t}function n2e(e,t,n){for(let i in t)if(t.hasOwnProperty(i)&&l(t[i])&&l(t[i].values)){let o=t[i];for(let r=0;r<o.componentsPerAttribute;++r)e[i].values.push(o.values[n*o.componentsPerAttribute+r])}}Cl.fitToUnsignedShortIndices=function(e){let t=[],n=Ct.computeNumberOfVertices(e);if(l(e.indices)&&n>=L.SIXTY_FOUR_KILOBYTES){let i=[],o=[],r=0,s=Qre(e.attributes),a=e.indices,c=a.length,d;e.primitiveType===We.TRIANGLES?d=3:e.primitiveType===We.LINES?d=2:e.primitiveType===We.POINTS&&(d=1);for(let u=0;u<c;u+=d){for(let h=0;h<d;++h){let p=a[u+h],A=i[p];l(A)||(A=r++,i[p]=A,n2e(s,e.attributes,p)),o.push(A)}r+d>=L.SIXTY_FOUR_KILOBYTES&&(t.push(new Ct({attributes:s,indices:o,primitiveType:e.primitiveType,boundingSphere:e.boundingSphere,boundingSphereCV:e.boundingSphereCV})),i=[],o=[],r=0,s=Qre(e.attributes))}o.length!==0&&t.push(new Ct({attributes:s,indices:o,primitiveType:e.primitiveType,boundingSphere:e.boundingSphere,boundingSphereCV:e.boundingSphereCV}))}else t.push(e);return t};var Ore=new m,i2e=new Ae;Cl.projectTo2D=function(e,t,n,i,o){let r=e.attributes[t];o=l(o)?o:new ki;let s=o.ellipsoid,a=r.values,c=new Float64Array(a.length),d=0;for(let u=0;u<a.length;u+=3){let h=m.fromArray(a,u,Ore),p=s.cartesianToCartographic(h,i2e),A=o.project(p,Ore);c[d++]=A.x,c[d++]=A.y,c[d++]=A.z}return e.attributes[n]=r,e.attributes[i]=new we({componentDatatype:H.DOUBLE,componentsPerAttribute:3,values:c}),delete e.attributes[t],e};var xH={high:0,low:0};Cl.encodeAttribute=function(e,t,n,i){let o=e.attributes[t],r=o.values,s=r.length,a=new Float32Array(s),c=new Float32Array(s);for(let u=0;u<s;++u)In.encode(r[u],xH),a[u]=xH.high,c[u]=xH.low;let d=o.componentsPerAttribute;return e.attributes[n]=new we({componentDatatype:H.FLOAT,componentsPerAttribute:d,values:a}),e.attributes[i]=new we({componentDatatype:H.FLOAT,componentsPerAttribute:d,values:c}),delete e.attributes[t],e};var Eh=new m;function CH(e,t){if(l(t)){let n=t.values,i=n.length;for(let o=0;o<i;o+=3)m.unpack(n,o,Eh),F.multiplyByPoint(e,Eh,Eh),m.pack(Eh,n,o)}}function TH(e,t){if(l(t)){let n=t.values,i=n.length;for(let o=0;o<i;o+=3)m.unpack(n,o,Eh),$.multiplyByVector(e,Eh,Eh),Eh=m.normalize(Eh,Eh),m.pack(Eh,n,o)}}var WD=new F,FD=new $;Cl.transformToWorldCoordinates=function(e){let t=e.modelMatrix;if(F.equals(t,F.IDENTITY))return e;let n=e.geometry.attributes;CH(t,n.position),CH(t,n.prevPosition),CH(t,n.nextPosition),(l(n.normal)||l(n.tangent)||l(n.bitangent))&&(F.inverse(t,WD),F.transpose(WD,WD),F.getMatrix3(WD,FD),TH(FD,n.normal),TH(FD,n.tangent),TH(FD,n.bitangent));let i=e.geometry.boundingSphere;return l(i)&&(e.geometry.boundingSphere=ue.transform(i,t,i)),e.modelMatrix=F.clone(F.IDENTITY),e};function o2e(e,t){let n=e.length,i={},o=e[0][t].attributes,r;for(r in o)if(o.hasOwnProperty(r)&&l(o[r])&&l(o[r].values)){let s=o[r],a=s.values.length,c=!0;for(let d=1;d<n;++d){let u=e[d][t].attributes[r];if(!l(u)||s.componentDatatype!==u.componentDatatype||s.componentsPerAttribute!==u.componentsPerAttribute||s.normalize!==u.normalize){c=!1;break}a+=u.values.length}c&&(i[r]=new we({componentDatatype:s.componentDatatype,componentsPerAttribute:s.componentsPerAttribute,normalize:s.normalize,values:H.createTypedArray(s.componentDatatype,a)}))}return i}var r2e=new m;function EH(e,t){let n=e.length,i,o,r,s,a=e[0].modelMatrix,c=l(e[0][t].indices),d=e[0][t].primitiveType,u=o2e(e,t),h,p,A;for(i in u)if(u.hasOwnProperty(i))for(h=u[i].values,s=0,o=0;o<n;++o)for(p=e[o][t].attributes[i].values,A=p.length,r=0;r<A;++r)h[s++]=p[r];let f;if(c){let E=0;for(o=0;o<n;++o)E+=e[o][t].indices.length;let S=Ct.computeNumberOfVertices(new Ct({attributes:u,primitiveType:We.POINTS})),I=Ue.createTypedArray(S,E),R=0,V=0;for(o=0;o<n;++o){let W=e[o][t].indices,B=W.length;for(s=0;s<B;++s)I[R++]=V+W[s];V+=Ct.computeNumberOfVertices(e[o][t])}f=I}let b=new m,C=0,T;for(o=0;o<n;++o){if(T=e[o][t].boundingSphere,!l(T)){b=void 0;break}m.add(T.center,b,b)}if(l(b))for(m.divideByScalar(b,n,b),o=0;o<n;++o){T=e[o][t].boundingSphere;let E=m.magnitude(m.subtract(T.center,b,r2e))+T.radius;E>C&&(C=E)}return new Ct({attributes:u,indices:f,primitiveType:d,boundingSphere:l(b)?new ue(b,C):void 0})}Cl.combineInstances=function(e){let t=[],n=[],i=e.length;for(let r=0;r<i;++r){let s=e[r];l(s.geometry)?t.push(s):l(s.westHemisphereGeometry)&&l(s.eastHemisphereGeometry)&&n.push(s)}let o=[];return t.length>0&&o.push(EH(t,"geometry")),n.length>0&&(o.push(EH(n,"westHemisphereGeometry")),o.push(EH(n,"eastHemisphereGeometry"))),o};var am=new m,qR=new m,hS=new m,fS=new m;Cl.computeNormal=function(e){let t=e.indices,n=e.attributes,i=n.position.values,o=n.position.values.length/3,r=t.length,s=new Array(o),a=new Array(r/3),c=new Array(r),d;for(d=0;d<o;d++)s[d]={indexOffset:0,count:0,currentCount:0};let u=0;for(d=0;d<r;d+=3){let f=t[d],b=t[d+1],C=t[d+2],T=f*3,E=b*3,S=C*3;qR.x=i[T],qR.y=i[T+1],qR.z=i[T+2],hS.x=i[E],hS.y=i[E+1],hS.z=i[E+2],fS.x=i[S],fS.y=i[S+1],fS.z=i[S+2],s[f].count++,s[b].count++,s[C].count++,m.subtract(hS,qR,hS),m.subtract(fS,qR,fS),a[u]=m.cross(hS,fS,new m),u++}let h=0;for(d=0;d<o;d++)s[d].indexOffset+=h,h+=s[d].count;u=0;let p;for(d=0;d<r;d+=3){p=s[t[d]];let f=p.indexOffset+p.currentCount;c[f]=u,p.currentCount++,p=s[t[d+1]],f=p.indexOffset+p.currentCount,c[f]=u,p.currentCount++,p=s[t[d+2]],f=p.indexOffset+p.currentCount,c[f]=u,p.currentCount++,u++}let A=new Float32Array(o*3);for(d=0;d<o;d++){let f=d*3;if(p=s[d],m.clone(m.ZERO,am),p.count>0){for(u=0;u<p.count;u++)m.add(am,a[c[p.indexOffset+u]],am);m.equalsEpsilon(m.ZERO,am,L.EPSILON10)&&m.clone(a[c[p.indexOffset]],am)}m.equalsEpsilon(m.ZERO,am,L.EPSILON10)&&(am.z=1),m.normalize(am,am),A[f]=am.x,A[f+1]=am.y,A[f+2]=am.z}return e.attributes.normal=new we({componentDatatype:H.FLOAT,componentsPerAttribute:3,values:A}),e};var s2e=new m,zre=new m,a2e=new m;Cl.computeTangentAndBitangent=function(e){let t=e.attributes,n=e.indices,i=e.attributes.position.values,o=e.attributes.normal.values,r=e.attributes.st.values,s=e.attributes.position.values.length/3,a=n.length,c=new Array(s*3),d;for(d=0;d<c.length;d++)c[d]=0;let u,h,p;for(d=0;d<a;d+=3){let b=n[d],C=n[d+1],T=n[d+2];u=b*3,h=C*3,p=T*3;let E=b*2,S=C*2,I=T*2,R=i[u],V=i[u+1],W=i[u+2],B=r[E],N=r[E+1],P=r[S+1]-N,g=r[I+1]-N,_=1/((r[S]-B)*g-(r[I]-B)*P),Z=(g*(i[h]-R)-P*(i[p]-R))*_,G=(g*(i[h+1]-V)-P*(i[p+1]-V))*_,w=(g*(i[h+2]-W)-P*(i[p+2]-W))*_;c[u]+=Z,c[u+1]+=G,c[u+2]+=w,c[h]+=Z,c[h+1]+=G,c[h+2]+=w,c[p]+=Z,c[p+1]+=G,c[p+2]+=w}let A=new Float32Array(s*3),f=new Float32Array(s*3);for(d=0;d<s;d++){u=d*3,h=u+1,p=u+2;let b=m.fromArray(o,u,s2e),C=m.fromArray(c,u,a2e),T=m.dot(b,C);m.multiplyByScalar(b,T,zre),m.normalize(m.subtract(C,zre,C),C),A[u]=C.x,A[h]=C.y,A[p]=C.z,m.normalize(m.cross(b,C,C),C),f[u]=C.x,f[h]=C.y,f[p]=C.z}return e.attributes.tangent=new we({componentDatatype:H.FLOAT,componentsPerAttribute:3,values:A}),e.attributes.bitangent=new we({componentDatatype:H.FLOAT,componentsPerAttribute:3,values:f}),e};var $R=new M,Th=new m,Hre=new m,Jre=new m,BD=new M;Cl.compressVertices=function(e){let t=e.attributes.extrudeDirection,n,i;if(l(t)){let V=t.values;i=V.length/3;let W=new Float32Array(i*2),B=0;for(n=0;n<i;++n){if(m.fromArray(V,n*3,Th),m.equals(Th,m.ZERO)){B+=2;continue}BD=on.octEncodeInRange(Th,65535,BD),W[B++]=BD.x,W[B++]=BD.y}return e.attributes.compressedAttributes=new we({componentDatatype:H.FLOAT,componentsPerAttribute:2,values:W}),delete e.attributes.extrudeDirection,e}let o=e.attributes.normal,r=e.attributes.st,s=l(o),a=l(r);if(!s&&!a)return e;let c=e.attributes.tangent,d=e.attributes.bitangent,u=l(c),h=l(d),p,A,f,b;s&&(p=o.values),a&&(A=r.values),u&&(f=c.values),h&&(b=d.values),i=(s?p.length:A.length)/(s?3:2);let E=i,S=a&&s?2:1;S+=u||h?1:0,E*=S;let I=new Float32Array(E),R=0;for(n=0;n<i;++n){a&&(M.fromArray(A,n*2,$R),I[R++]=on.compressTextureCoordinates($R));let V=n*3;s&&l(f)&&l(b)?(m.fromArray(p,V,Th),m.fromArray(f,V,Hre),m.fromArray(b,V,Jre),on.octPack(Th,Hre,Jre,$R),I[R++]=$R.x,I[R++]=$R.y):(s&&(m.fromArray(p,V,Th),I[R++]=on.octEncodeFloat(Th)),u&&(m.fromArray(f,V,Th),I[R++]=on.octEncodeFloat(Th)),h&&(m.fromArray(b,V,Th),I[R++]=on.octEncodeFloat(Th)))}return e.attributes.compressedAttributes=new we({componentDatatype:H.FLOAT,componentsPerAttribute:S,values:I}),s&&delete e.attributes.normal,a&&delete e.attributes.st,h&&delete e.attributes.bitangent,u&&delete e.attributes.tangent,e};function c2e(e){if(l(e.indices))return e;let t=Ct.computeNumberOfVertices(e),n=Ue.createTypedArray(t,t);for(let i=0;i<t;++i)n[i]=i;return e.indices=n,e}function l2e(e){let t=Ct.computeNumberOfVertices(e),n=Ue.createTypedArray(t,(t-2)*3);n[0]=1,n[1]=0,n[2]=2;let i=3;for(let o=3;o<t;++o)n[i++]=o-1,n[i++]=0,n[i++]=o;return e.indices=n,e.primitiveType=We.TRIANGLES,e}function d2e(e){let t=Ct.computeNumberOfVertices(e),n=Ue.createTypedArray(t,(t-2)*3);n[0]=0,n[1]=1,n[2]=2,t>3&&(n[3]=0,n[4]=2,n[5]=3);let i=6;for(let o=3;o<t-1;o+=2)n[i++]=o,n[i++]=o-1,n[i++]=o+1,o+2<t&&(n[i++]=o,n[i++]=o+1,n[i++]=o+2);return e.indices=n,e.primitiveType=We.TRIANGLES,e}function u2e(e){if(l(e.indices))return e;let t=Ct.computeNumberOfVertices(e),n=Ue.createTypedArray(t,t);for(let i=0;i<t;++i)n[i]=i;return e.indices=n,e}function m2e(e){let t=Ct.computeNumberOfVertices(e),n=Ue.createTypedArray(t,(t-1)*2);n[0]=0,n[1]=1;let i=2;for(let o=2;o<t;++o)n[i++]=o-1,n[i++]=o;return e.indices=n,e.primitiveType=We.LINES,e}function h2e(e){let t=Ct.computeNumberOfVertices(e),n=Ue.createTypedArray(t,t*2);n[0]=0,n[1]=1;let i=2;for(let o=2;o<t;++o)n[i++]=o-1,n[i++]=o;return n[i++]=t-1,n[i]=0,e.indices=n,e.primitiveType=We.LINES,e}function f2e(e){switch(e.primitiveType){case We.TRIANGLE_FAN:return l2e(e);case We.TRIANGLE_STRIP:return d2e(e);case We.TRIANGLES:return c2e(e);case We.LINE_STRIP:return m2e(e);case We.LINE_LOOP:return h2e(e);case We.LINES:return u2e(e)}return e}function Hb(e,t){Math.abs(e.y)<L.EPSILON6&&(t?e.y=-L.EPSILON6:e.y=L.EPSILON6)}function p2e(e,t,n){if(e.y!==0&&t.y!==0&&n.y!==0){Hb(e,e.y<0),Hb(t,t.y<0),Hb(n,n.y<0);return}let i=Math.abs(e.y),o=Math.abs(t.y),r=Math.abs(n.y),s;i>o?i>r?s=L.sign(e.y):s=L.sign(n.y):o>r?s=L.sign(t.y):s=L.sign(n.y);let a=s<0;Hb(e,a),Hb(t,a),Hb(n,a)}var Kre=new m;function cm(e,t,n,i){m.add(e,m.multiplyByScalar(m.subtract(t,e,Kre),e.y/(e.y-t.y),Kre),n),m.clone(n,i),Hb(n,!0),Hb(i,!1)}var Cx=new m,Tx=new m,Ex=new m,Sx=new m,SH={positions:new Array(7),indices:new Array(9)};function A2e(e,t,n){if(e.x>=0||t.x>=0||n.x>=0)return;p2e(e,t,n);let i=e.y<0,o=t.y<0,r=n.y<0,s=0;s+=i?1:0,s+=o?1:0,s+=r?1:0;let a=SH.indices;s===1?(a[1]=3,a[2]=4,a[5]=6,a[7]=6,a[8]=5,i?(cm(e,t,Cx,Ex),cm(e,n,Tx,Sx),a[0]=0,a[3]=1,a[4]=2,a[6]=1):o?(cm(t,n,Cx,Ex),cm(t,e,Tx,Sx),a[0]=1,a[3]=2,a[4]=0,a[6]=2):r&&(cm(n,e,Cx,Ex),cm(n,t,Tx,Sx),a[0]=2,a[3]=0,a[4]=1,a[6]=0)):s===2&&(a[2]=4,a[4]=4,a[5]=3,a[7]=5,a[8]=6,i?o?r||(cm(n,e,Cx,Ex),cm(n,t,Tx,Sx),a[0]=0,a[1]=1,a[3]=0,a[6]=2):(cm(t,n,Cx,Ex),cm(t,e,Tx,Sx),a[0]=2,a[1]=0,a[3]=2,a[6]=1):(cm(e,t,Cx,Ex),cm(e,n,Tx,Sx),a[0]=1,a[1]=2,a[3]=1,a[6]=0));let c=SH.positions;return c[0]=e,c[1]=t,c[2]=n,c.length=3,(s===1||s===2)&&(c[3]=Cx,c[4]=Tx,c[5]=Ex,c[6]=Sx,c.length=7),SH}function jre(e,t){let n=e.attributes;if(n.position.values.length===0)return;for(let o in n)if(n.hasOwnProperty(o)&&l(n[o])&&l(n[o].values)){let r=n[o];r.values=H.createTypedArray(r.componentDatatype,r.values)}let i=Ct.computeNumberOfVertices(e);return e.indices=Ue.createTypedArray(i,e.indices),t&&(e.boundingSphere=ue.fromVertices(n.position.values)),e}function AS(e){let t=e.attributes,n={};for(let i in t)if(t.hasOwnProperty(i)&&l(t[i])&&l(t[i].values)){let o=t[i];n[i]=new we({componentDatatype:o.componentDatatype,componentsPerAttribute:o.componentsPerAttribute,normalize:o.normalize,values:[]})}return new Ct({attributes:n,indices:[],primitiveType:e.primitiveType})}function RH(e,t,n){let i=l(e.geometry.boundingSphere);t=jre(t,i),n=jre(n,i),l(n)&&!l(t)?e.geometry=n:!l(n)&&l(t)?e.geometry=t:(e.westHemisphereGeometry=t,e.eastHemisphereGeometry=n,e.geometry=void 0)}function VH(e,t){let n=new e,i=new e,o=new e;return function(r,s,a,c,d,u,h,p){let A=e.fromArray(d,r*t,n),f=e.fromArray(d,s*t,i),b=e.fromArray(d,a*t,o);e.multiplyByScalar(A,c.x,A),e.multiplyByScalar(f,c.y,f),e.multiplyByScalar(b,c.z,b);let C=e.add(A,f,A);e.add(C,b,C),p&&e.normalize(C,C),e.pack(C,u,h*t)}}var g2e=VH(re,4),PD=VH(m,3),ise=VH(M,2),b2e=function(e,t,n,i,o,r,s){let a=o[e]*i.x,c=o[t]*i.y,d=o[n]*i.z;r[s]=a+c+d>L.EPSILON6?1:0},eV=new m,_H=new m,IH=new m,y2e=new m;function wD(e,t,n,i,o,r,s,a,c,d,u,h,p,A,f,b){if(!l(r)&&!l(s)&&!l(a)&&!l(c)&&!l(d)&&A===0)return;let C=m.fromArray(o,e*3,eV),T=m.fromArray(o,t*3,_H),E=m.fromArray(o,n*3,IH),S=bx(i,C,T,E,y2e);if(l(S)){if(l(r)&&PD(e,t,n,S,r,h.normal.values,b,!0),l(d)){let I=m.fromArray(d,e*3,eV),R=m.fromArray(d,t*3,_H),V=m.fromArray(d,n*3,IH);m.multiplyByScalar(I,S.x,I),m.multiplyByScalar(R,S.y,R),m.multiplyByScalar(V,S.z,V);let W;!m.equals(I,m.ZERO)||!m.equals(R,m.ZERO)||!m.equals(V,m.ZERO)?(W=m.add(I,R,I),m.add(W,V,W),m.normalize(W,W)):(W=eV,W.x=0,W.y=0,W.z=0),m.pack(W,h.extrudeDirection.values,b*3)}if(l(u)&&b2e(e,t,n,S,u,h.applyOffset.values,b),l(s)&&PD(e,t,n,S,s,h.tangent.values,b,!0),l(a)&&PD(e,t,n,S,a,h.bitangent.values,b,!0),l(c)&&ise(e,t,n,S,c,h.st.values,b),A>0)for(let I=0;I<A;I++){let R=p[I];x2e(e,t,n,S,b,f[R],h[R])}}}function x2e(e,t,n,i,o,r,s){let a=r.componentsPerAttribute,c=r.values,d=s.values;switch(a){case 4:g2e(e,t,n,i,c,d,o,!1);break;case 3:PD(e,t,n,i,c,d,o,!1);break;case 2:ise(e,t,n,i,c,d,o,!1);break;default:d[o]=c[e]*i.x+c[t]*i.y+c[n]*i.z}}function ip(e,t,n,i,o,r){let s=e.position.values.length/3;if(o!==-1){let a=i[o],c=n[a];return c===-1?(n[a]=s,e.position.values.push(r.x,r.y,r.z),t.push(s),s):(t.push(c),c)}return e.position.values.push(r.x,r.y,r.z),t.push(s),s}var C2e={position:!0,normal:!0,bitangent:!0,tangent:!0,st:!0,extrudeDirection:!0,applyOffset:!0};function qre(e){let t=e.geometry,n=t.attributes,i=n.position.values,o=l(n.normal)?n.normal.values:void 0,r=l(n.bitangent)?n.bitangent.values:void 0,s=l(n.tangent)?n.tangent.values:void 0,a=l(n.st)?n.st.values:void 0,c=l(n.extrudeDirection)?n.extrudeDirection.values:void 0,d=l(n.applyOffset)?n.applyOffset.values:void 0,u=t.indices,h=[];for(let W in n)n.hasOwnProperty(W)&&!C2e[W]&&l(n[W])&&h.push(W);let p=h.length,A=AS(t),f=AS(t),b,C,T,E,S,I=[];I.length=i.length/3;let R=[];for(R.length=i.length/3,S=0;S<I.length;++S)I[S]=-1,R[S]=-1;let V=u.length;for(S=0;S<V;S+=3){let W=u[S],B=u[S+1],N=u[S+2],P=m.fromArray(i,W*3),g=m.fromArray(i,B*3),_=m.fromArray(i,N*3),Z=A2e(P,g,_);if(l(Z)&&Z.positions.length>3){let G=Z.positions,w=Z.indices,X=w.length;for(let k=0;k<X;++k){let v=w[k],D=G[v];D.y<0?(b=f.attributes,C=f.indices,T=I):(b=A.attributes,C=A.indices,T=R),E=ip(b,C,T,u,v<3?S+v:-1,D),wD(W,B,N,D,i,o,s,r,a,c,d,b,h,p,n,E)}}else l(Z)&&(P=Z.positions[0],g=Z.positions[1],_=Z.positions[2]),P.y<0?(b=f.attributes,C=f.indices,T=I):(b=A.attributes,C=A.indices,T=R),E=ip(b,C,T,u,S,P),wD(W,B,N,P,i,o,s,r,a,c,d,b,h,p,n,E),E=ip(b,C,T,u,S+1,g),wD(W,B,N,g,i,o,s,r,a,c,d,b,h,p,n,E),E=ip(b,C,T,u,S+2,_),wD(W,B,N,_,i,o,s,r,a,c,d,b,h,p,n,E)}RH(e,f,A)}var ose=dn.fromPointNormal(m.ZERO,m.UNIT_Y),T2e=new m,E2e=new m;function pS(e,t,n,i,o,r,s){if(!l(s))return;let a=m.fromArray(i,e*3,eV);m.equalsEpsilon(a,n,L.EPSILON10)?r.applyOffset.values[o]=s[e]:r.applyOffset.values[o]=s[t]}function $re(e){let t=e.geometry,n=t.attributes,i=n.position.values,o=l(n.applyOffset)?n.applyOffset.values:void 0,r=t.indices,s=AS(t),a=AS(t),c,d=r.length,u=[];u.length=i.length/3;let h=[];for(h.length=i.length/3,c=0;c<u.length;++c)u[c]=-1,h[c]=-1;for(c=0;c<d;c+=2){let p=r[c],A=r[c+1],f=m.fromArray(i,p*3,eV),b=m.fromArray(i,A*3,_H),C;Math.abs(f.y)<L.EPSILON6&&(f.y<0?f.y=-L.EPSILON6:f.y=L.EPSILON6),Math.abs(b.y)<L.EPSILON6&&(b.y<0?b.y=-L.EPSILON6:b.y=L.EPSILON6);let T=s.attributes,E=s.indices,S=h,I=a.attributes,R=a.indices,V=u,W=hi.lineSegmentPlane(f,b,ose,IH);if(l(W)){let B=m.multiplyByScalar(m.UNIT_Y,5*L.EPSILON9,T2e);f.y<0&&(m.negate(B,B),T=a.attributes,E=a.indices,S=u,I=s.attributes,R=s.indices,V=h);let N=m.add(W,B,E2e);C=ip(T,E,S,r,c,f),pS(p,A,f,i,C,T,o),C=ip(T,E,S,r,-1,N),pS(p,A,N,i,C,T,o),m.negate(B,B),m.add(W,B,N),C=ip(I,R,V,r,-1,N),pS(p,A,N,i,C,I,o),C=ip(I,R,V,r,c+1,b),pS(p,A,b,i,C,I,o)}else{let B,N,P;f.y<0?(B=a.attributes,N=a.indices,P=u):(B=s.attributes,N=s.indices,P=h),C=ip(B,N,P,r,c,f),pS(p,A,f,i,C,B,o),C=ip(B,N,P,r,c+1,b),pS(p,A,b,i,C,B,o)}}RH(e,a,s)}var ese=new M,S2e=new M,rse=new m,sse=new m,ZH=new m,_2e=new m,I2e=new m,Z2e=new m,tse=new re;function nse(e){let t=e.attributes,n=t.position.values,i=t.prevPosition.values,o=t.nextPosition.values,r=n.length;for(let s=0;s<r;s+=3){let a=m.unpack(n,s,rse);if(a.x>0)continue;let c=m.unpack(i,s,sse);(a.y<0&&c.y>0||a.y>0&&c.y<0)&&(s-3>0?(i[s]=n[s-3],i[s+1]=n[s-2],i[s+2]=n[s-1]):m.pack(a,i,s));let d=m.unpack(o,s,ZH);(a.y<0&&d.y>0||a.y>0&&d.y<0)&&(s+3<r?(o[s]=n[s+3],o[s+1]=n[s+4],o[s+2]=n[s+5]):m.pack(a,o,s))}}var R2e=5*L.EPSILON9,ND=L.EPSILON6;function V2e(e){let t=e.geometry,n=t.attributes,i=n.position.values,o=n.prevPosition.values,r=n.nextPosition.values,s=n.expandAndWidth.values,a=l(n.st)?n.st.values:void 0,c=l(n.color)?n.color.values:void 0,d=AS(t),u=AS(t),h,p,A,f=!1,b=i.length/3;for(h=0;h<b;h+=4){let C=h,T=h+2,E=m.fromArray(i,C*3,rse),S=m.fromArray(i,T*3,sse);if(Math.abs(E.y)<ND)for(E.y=ND*(S.y<0?-1:1),i[h*3+1]=E.y,i[(h+1)*3+1]=E.y,p=C*3;p<C*3+12;p+=3)o[p]=i[h*3],o[p+1]=i[h*3+1],o[p+2]=i[h*3+2];if(Math.abs(S.y)<ND)for(S.y=ND*(E.y<0?-1:1),i[(h+2)*3+1]=S.y,i[(h+3)*3+1]=S.y,p=C*3;p<C*3+12;p+=3)r[p]=i[(h+2)*3],r[p+1]=i[(h+2)*3+1],r[p+2]=i[(h+2)*3+2];let I=d.attributes,R=d.indices,V=u.attributes,W=u.indices,B=hi.lineSegmentPlane(E,S,ose,_2e);if(l(B)){f=!0;let N=m.multiplyByScalar(m.UNIT_Y,R2e,I2e);E.y<0&&(m.negate(N,N),I=u.attributes,R=u.indices,V=d.attributes,W=d.indices);let P=m.add(B,N,Z2e);I.position.values.push(E.x,E.y,E.z,E.x,E.y,E.z),I.position.values.push(P.x,P.y,P.z),I.position.values.push(P.x,P.y,P.z),I.prevPosition.values.push(o[C*3],o[C*3+1],o[C*3+2]),I.prevPosition.values.push(o[C*3+3],o[C*3+4],o[C*3+5]),I.prevPosition.values.push(E.x,E.y,E.z,E.x,E.y,E.z),I.nextPosition.values.push(P.x,P.y,P.z),I.nextPosition.values.push(P.x,P.y,P.z),I.nextPosition.values.push(P.x,P.y,P.z),I.nextPosition.values.push(P.x,P.y,P.z),m.negate(N,N),m.add(B,N,P),V.position.values.push(P.x,P.y,P.z),V.position.values.push(P.x,P.y,P.z),V.position.values.push(S.x,S.y,S.z,S.x,S.y,S.z),V.prevPosition.values.push(P.x,P.y,P.z),V.prevPosition.values.push(P.x,P.y,P.z),V.prevPosition.values.push(P.x,P.y,P.z),V.prevPosition.values.push(P.x,P.y,P.z),V.nextPosition.values.push(S.x,S.y,S.z,S.x,S.y,S.z),V.nextPosition.values.push(r[T*3],r[T*3+1],r[T*3+2]),V.nextPosition.values.push(r[T*3+3],r[T*3+4],r[T*3+5]);let g=M.fromArray(s,C*2,ese),_=Math.abs(g.y);I.expandAndWidth.values.push(-1,_,1,_),I.expandAndWidth.values.push(-1,-_,1,-_),V.expandAndWidth.values.push(-1,_,1,_),V.expandAndWidth.values.push(-1,-_,1,-_);let Z=m.magnitudeSquared(m.subtract(B,E,ZH));if(Z/=m.magnitudeSquared(m.subtract(S,E,ZH)),l(c)){let G=re.fromArray(c,C*4,tse),w=re.fromArray(c,T*4,tse),X=L.lerp(G.x,w.x,Z),k=L.lerp(G.y,w.y,Z),v=L.lerp(G.z,w.z,Z),D=L.lerp(G.w,w.w,Z);for(p=C*4;p<C*4+8;++p)I.color.values.push(c[p]);for(I.color.values.push(X,k,v,D),I.color.values.push(X,k,v,D),V.color.values.push(X,k,v,D),V.color.values.push(X,k,v,D),p=T*4;p<T*4+8;++p)V.color.values.push(c[p])}if(l(a)){let G=M.fromArray(a,C*2,ese),w=M.fromArray(a,(h+3)*2,S2e),X=L.lerp(G.x,w.x,Z);for(p=C*2;p<C*2+4;++p)I.st.values.push(a[p]);for(I.st.values.push(X,G.y),I.st.values.push(X,w.y),V.st.values.push(X,G.y),V.st.values.push(X,w.y),p=T*2;p<T*2+4;++p)V.st.values.push(a[p])}A=I.position.values.length/3-4,R.push(A,A+2,A+1),R.push(A+1,A+2,A+3),A=V.position.values.length/3-4,W.push(A,A+2,A+1),W.push(A+1,A+2,A+3)}else{let N,P;for(E.y<0?(N=u.attributes,P=u.indices):(N=d.attributes,P=d.indices),N.position.values.push(E.x,E.y,E.z),N.position.values.push(E.x,E.y,E.z),N.position.values.push(S.x,S.y,S.z),N.position.values.push(S.x,S.y,S.z),p=h*3;p<h*3+12;++p)N.prevPosition.values.push(o[p]),N.nextPosition.values.push(r[p]);for(p=h*2;p<h*2+8;++p)N.expandAndWidth.values.push(s[p]),l(a)&&N.st.values.push(a[p]);if(l(c))for(p=h*4;p<h*4+16;++p)N.color.values.push(c[p]);A=N.position.values.length/3-4,P.push(A,A+2,A+1),P.push(A+1,A+2,A+3)}}f&&(nse(u),nse(d)),RH(e,u,d)}Cl.splitLongitude=function(e){let t=e.geometry,n=t.boundingSphere;if(l(n)&&(n.center.x-n.radius>0||ue.intersectPlane(n,dn.ORIGIN_ZX_PLANE)!==qt.INTERSECTING))return e;if(t.geometryType!==sm.NONE)switch(t.geometryType){case sm.POLYLINES:V2e(e);break;case sm.TRIANGLES:qre(e);break;case sm.LINES:$re(e);break}else f2e(t),t.primitiveType===We.TRIANGLES?qre(e):t.primitiveType===We.LINES&&$re(e);return e};var zn=Cl;var wkt=y(x(),1);function tV(e,t,n,i,o,r,s,a,c,d,u){this._context=e,this._texture=t,this._textureTarget=n,this._targetFace=i,this._pixelDatatype=s,this._internalFormat=o,this._pixelFormat=r,this._size=a,this._preMultiplyAlpha=c,this._flipY=d,this._initialized=u}Object.defineProperties(tV.prototype,{pixelFormat:{get:function(){return this._pixelFormat}},pixelDatatype:{get:function(){return this._pixelDatatype}},_target:{get:function(){return this._targetFace}}});tV.prototype.copyFrom=function(e){let{xOffset:t=0,yOffset:n=0,source:i,skipColorSpaceConversion:o=!1}=e,{width:r,height:s}=i,a=this._context._gl,c=this._textureTarget,d=this._targetFace;a.activeTexture(a.TEXTURE0),a.bindTexture(c,this._texture);let u=i.arrayBufferView,h=this._size,p=this._pixelFormat,A=this._internalFormat,f=this._pixelDatatype,b=this._preMultiplyAlpha,C=this._flipY,T=4;l(u)&&(T=Ke.alignmentInBytes(p,f,r)),a.pixelStorei(a.UNPACK_ALIGNMENT,T),o?a.pixelStorei(a.UNPACK_COLORSPACE_CONVERSION_WEBGL,a.NONE):a.pixelStorei(a.UNPACK_COLORSPACE_CONVERSION_WEBGL,a.BROWSER_DEFAULT_WEBGL);let E=!1;if(!this._initialized){let S;t===0&&n===0&&r===h&&s===h?(l(u)?(a.pixelStorei(a.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!1),a.pixelStorei(a.UNPACK_FLIP_Y_WEBGL,!1),C&&(u=Ke.flipY(u,p,f,h,h)),S=u):(a.pixelStorei(a.UNPACK_PREMULTIPLY_ALPHA_WEBGL,b),a.pixelStorei(a.UNPACK_FLIP_Y_WEBGL,C),S=i),E=!0):(a.pixelStorei(a.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!1),a.pixelStorei(a.UNPACK_FLIP_Y_WEBGL,!1),S=Ke.createTypedArray(p,f,h,h)),a.texImage2D(d,0,A,h,h,0,p,Oe.toWebGLConstant(f,this._context),S),this._initialized=!0}E||(l(u)?(a.pixelStorei(a.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!1),a.pixelStorei(a.UNPACK_FLIP_Y_WEBGL,!1),C&&(u=Ke.flipY(u,p,f,r,s)),a.texSubImage2D(d,0,t,n,r,s,p,Oe.toWebGLConstant(f,this._context),u)):(a.pixelStorei(a.UNPACK_PREMULTIPLY_ALPHA_WEBGL,b),a.pixelStorei(a.UNPACK_FLIP_Y_WEBGL,C),a.texSubImage2D(d,0,t,n,p,Oe.toWebGLConstant(f,this._context),i))),a.bindTexture(c,null)};tV.prototype.copyFromFramebuffer=function(e,t,n,i,o,r){e=e??0,t=t??0,n=n??0,i=i??0,o=o??this._size,r=r??this._size;let s=this._context._gl,a=this._textureTarget;s.activeTexture(s.TEXTURE0),s.bindTexture(a,this._texture),s.copyTexSubImage2D(this._targetFace,0,e,t,n,i,o,r),s.bindTexture(a,null),this._initialized=!0};tV.prototype.copyMipmapFromFramebuffer=function(e,t,n,i,o){e=e??0,t=t??0,n=n??this._size,i=i??this._size,o=o??0;let r=this._context._gl,s=this._textureTarget;r.activeTexture(r.TEXTURE0),r.bindTexture(s,this._texture),r.copyTexImage2D(this._targetFace,o,this._internalFormat,e,t,n,i,0),r.bindTexture(s,null),this._initialized=!0};var nV=tV;var Xkt=y(x(),1);var YD={DONT_CARE:ne.DONT_CARE,FASTEST:ne.FASTEST,NICEST:ne.NICEST,validate:function(e){return e===YD.DONT_CARE||e===YD.FASTEST||e===YD.NICEST}},lm=Object.freeze(YD);var e9t=y(x(),1);var vkt=y(x(),1);var MD={NEAREST:ne.NEAREST,LINEAR:ne.LINEAR};MD.validate=function(e){return e===MD.NEAREST||e===MD.LINEAR};var li=Object.freeze(MD);var kkt=y(x(),1);var Jb={NEAREST:ne.NEAREST,LINEAR:ne.LINEAR,NEAREST_MIPMAP_NEAREST:ne.NEAREST_MIPMAP_NEAREST,LINEAR_MIPMAP_NEAREST:ne.LINEAR_MIPMAP_NEAREST,NEAREST_MIPMAP_LINEAR:ne.NEAREST_MIPMAP_LINEAR,LINEAR_MIPMAP_LINEAR:ne.LINEAR_MIPMAP_LINEAR};Jb.validate=function(e){return e===Jb.NEAREST||e===Jb.LINEAR||e===Jb.NEAREST_MIPMAP_NEAREST||e===Jb.LINEAR_MIPMAP_NEAREST||e===Jb.NEAREST_MIPMAP_LINEAR||e===Jb.LINEAR_MIPMAP_LINEAR};var zt=Object.freeze(Jb);var zkt=y(x(),1);var vD={CLAMP_TO_EDGE:ne.CLAMP_TO_EDGE,REPEAT:ne.REPEAT,MIRRORED_REPEAT:ne.MIRRORED_REPEAT,validate:function(e){return e===vD.CLAMP_TO_EDGE||e===vD.REPEAT||e===vD.MIRRORED_REPEAT}},gn=Object.freeze(vD);function iV(e){e=e??Q.EMPTY_OBJECT;let{wrapR:t=gn.CLAMP_TO_EDGE,wrapS:n=gn.CLAMP_TO_EDGE,wrapT:i=gn.CLAMP_TO_EDGE,minificationFilter:o=zt.LINEAR,magnificationFilter:r=li.LINEAR,maximumAnisotropy:s=1}=e;this._wrapR=t,this._wrapS=n,this._wrapT=i,this._minificationFilter=o,this._magnificationFilter=r,this._maximumAnisotropy=s}Object.defineProperties(iV.prototype,{wrapR:{get:function(){return this._wrapR}},wrapS:{get:function(){return this._wrapS}},wrapT:{get:function(){return this._wrapT}},minificationFilter:{get:function(){return this._minificationFilter}},magnificationFilter:{get:function(){return this._magnificationFilter}},maximumAnisotropy:{get:function(){return this._maximumAnisotropy}}});iV.equals=function(e,t){return e===t||l(e)&&l(t)&&e._wrapR===t._wrapR&&e._wrapS===t._wrapS&&e._wrapT===t._wrapT&&e._minificationFilter===t._minificationFilter&&e._magnificationFilter===t._magnificationFilter&&e._maximumAnisotropy===t._maximumAnisotropy};iV.NEAREST=Object.freeze(new iV({wrapR:gn.CLAMP_TO_EDGE,wrapS:gn.CLAMP_TO_EDGE,wrapT:gn.CLAMP_TO_EDGE,minificationFilter:zt.NEAREST,magnificationFilter:li.NEAREST}));var Ht=iV;var g9t=y(x(),1);var i9t=y(x(),1);function G2e(e,t){if(!e)throw new fe(t)}var GH=G2e;function L2e(e,t,n,i){let o=l(t.vertexBuffer),r=l(t.value),s=t.value?t.value.length:t.componentsPerAttribute,a={index:t.index??n,enabled:t.enabled??!0,vertexBuffer:t.vertexBuffer,value:r?t.value.slice(0):void 0,componentsPerAttribute:s,componentDatatype:t.componentDatatype??H.FLOAT,normalize:t.normalize??!1,offsetInBytes:t.offsetInBytes??0,strideInBytes:t.strideInBytes??0,instanceDivisor:t.instanceDivisor??0};if(o)a.vertexAttrib=function(c){let d=this.index;c.bindBuffer(c.ARRAY_BUFFER,this.vertexBuffer._getBuffer()),c.vertexAttribPointer(d,this.componentsPerAttribute,this.componentDatatype,this.normalize,this.strideInBytes,this.offsetInBytes),c.enableVertexAttribArray(d),this.instanceDivisor>0&&(i.glVertexAttribDivisor(d,this.instanceDivisor),i._vertexAttribDivisors[d]=this.instanceDivisor,i._previousDrawInstanced=!0)},a.disableVertexAttribArray=function(c){c.disableVertexAttribArray(this.index),this.instanceDivisor>0&&i.glVertexAttribDivisor(n,0)};else{switch(a.componentsPerAttribute){case 1:a.vertexAttrib=function(c){c.vertexAttrib1fv(this.index,this.value)};break;case 2:a.vertexAttrib=function(c){c.vertexAttrib2fv(this.index,this.value)};break;case 3:a.vertexAttrib=function(c){c.vertexAttrib3fv(this.index,this.value)};break;case 4:a.vertexAttrib=function(c){c.vertexAttrib4fv(this.index,this.value)};break}a.disableVertexAttribArray=function(c){}}e.push(a)}function cse(e,t,n){for(let i=0;i<t.length;++i){let o=t[i];o.enabled&&o.vertexAttrib(e)}l(n)&&e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,n._getBuffer())}function Sh(e){e=e??Q.EMPTY_OBJECT;let t=e.context,n=t._gl,i=e.attributes,o=e.indexBuffer,r,s=[],a=1,c=!1,d=!1,u=i.length;for(r=0;r<u;++r)L2e(s,i[r],r,t);for(u=s.length,r=0;r<u;++r){let p=s[r];if(l(p.vertexBuffer)&&p.instanceDivisor===0){let A=p.strideInBytes||p.componentsPerAttribute*H.getSizeInBytes(p.componentDatatype);a=p.vertexBuffer.sizeInBytes/A;break}}for(r=0;r<u;++r)s[r].instanceDivisor>0&&(c=!0),l(s[r].value)&&(d=!0);let h;t.vertexArrayObject&&(h=t.glCreateVertexArray(),t.glBindVertexArray(h),cse(n,s,o),t.glBindVertexArray(null)),this._numberOfVertices=a,this._hasInstancedAttributes=c,this._hasConstantAttributes=d,this._context=t,this._gl=n,this._vao=h,this._attributes=s,this._indexBuffer=o}function ase(e){return e.values.length/e.componentsPerAttribute}function W2e(e){return H.getSizeInBytes(e.componentDatatype)*e.componentsPerAttribute}function F2e(e){let t,n,i,o=[];for(n in e)e.hasOwnProperty(n)&&l(e[n])&&l(e[n].values)&&(o.push(n),e[n].componentDatatype===H.DOUBLE&&(e[n].componentDatatype=H.FLOAT,e[n].values=H.createTypedArray(H.FLOAT,e[n].values)));let r,s=o.length;if(s>0)for(r=ase(e[o[0]]),t=1;t<s;++t){let d=ase(e[o[t]]);if(d!==r)throw new me(`Each attribute list must have the same number of vertices. Attribute ${o[t]} has a different number of vertices (${d.toString()}) than attribute ${o[0]} (${r.toString()}).`)}o.sort(function(d,u){return H.getSizeInBytes(e[u].componentDatatype)-H.getSizeInBytes(e[d].componentDatatype)});let a=0,c={};for(t=0;t<s;++t)n=o[t],i=e[n],c[n]=a,a+=W2e(i);if(a>0){let d=H.getSizeInBytes(e[o[0]].componentDatatype),u=a%d;u!==0&&(a+=d-u);let h=r*a,p=new ArrayBuffer(h),A={};for(t=0;t<s;++t){n=o[t];let f=H.getSizeInBytes(e[n].componentDatatype);A[n]={pointer:H.createTypedArray(e[n].componentDatatype,p),index:c[n]/f,strideInComponentType:a/f}}for(t=0;t<r;++t)for(let f=0;f<s;++f){n=o[f],i=e[n];let b=i.values,C=A[n],T=C.pointer,E=i.componentsPerAttribute;for(let S=0;S<E;++S)T[C.index+S]=b[t*E+S];C.index+=C.strideInComponentType}return{buffer:p,offsetsInBytes:c,vertexSizeInBytes:a}}}Sh.fromGeometry=function(e){e=e??Q.EMPTY_OBJECT;let t=e.context,n=e.geometry??Q.EMPTY_OBJECT,i=e.bufferUsage??Be.DYNAMIC_DRAW,o=e.attributeLocations??Q.EMPTY_OBJECT,r=e.interleave??!1,s=e.vertexArrayAttributes,a,c,d,u=l(s)?s:[],h=n.attributes;if(r){let f=F2e(h);if(l(f)){d=it.createVertexBuffer({context:t,typedArray:f.buffer,usage:i});let b=f.offsetsInBytes,C=f.vertexSizeInBytes;for(a in h)h.hasOwnProperty(a)&&l(h[a])&&(c=h[a],l(c.values)?u.push({index:o[a],vertexBuffer:d,componentDatatype:c.componentDatatype,componentsPerAttribute:c.componentsPerAttribute,normalize:c.normalize,offsetInBytes:b[a],strideInBytes:C}):u.push({index:o[a],value:c.value,componentDatatype:c.componentDatatype,normalize:c.normalize}))}}else for(a in h)if(h.hasOwnProperty(a)&&l(h[a])){c=h[a];let f=c.componentDatatype;f===H.DOUBLE&&(f=H.FLOAT);let b={};d=void 0,l(c.values)&&(d=it.createVertexBuffer({context:t,typedArray:H.createTypedArray(f,c.values),usage:i}),b={index:o[a],vertexBuffer:d,value:c.value,componentDatatype:f,componentsPerAttribute:c.componentsPerAttribute,normalize:c.normalize}),l(c.typedArray)&&(d=it.createVertexBuffer({context:t,typedArray:c.typedArray,usage:i}),b={index:o[a],vertexBuffer:d,value:void 0,componentDatatype:f,componentsPerAttribute:Ut.getNumberOfComponents(c.type),normalize:c.normalized,instanceDivisor:c.instanceDivisor}),u.push(b)}let p,A=n.indices;return l(A)&&(Ct.computeNumberOfVertices(n)>=L.SIXTY_FOUR_KILOBYTES&&t.elementIndexUint?p=it.createIndexBuffer({context:t,typedArray:new Uint32Array(A),usage:i,indexDatatype:Ue.UNSIGNED_INT}):p=it.createIndexBuffer({context:t,typedArray:new Uint16Array(A),usage:i,indexDatatype:Ue.UNSIGNED_SHORT})),new Sh({context:t,attributes:u,indexBuffer:p})};Object.defineProperties(Sh.prototype,{numberOfAttributes:{get:function(){return this._attributes.length}},numberOfVertices:{get:function(){return this._numberOfVertices}},indexBuffer:{get:function(){return this._indexBuffer}}});Sh.prototype.getAttribute=function(e){return this._attributes[e]};function B2e(e){let t=e._context,n=e._hasInstancedAttributes;if(!n&&!t._previousDrawInstanced)return;t._previousDrawInstanced=n;let i=t._vertexAttribDivisors,o=e._attributes,r=Bt.maximumVertexAttributes,s;if(n){let a=o.length;for(s=0;s<a;++s){let c=o[s];if(c.enabled){let d=c.instanceDivisor,u=c.index;d!==i[u]&&(t.glVertexAttribDivisor(u,d),i[u]=d)}}}else for(s=0;s<r;++s)i[s]>0&&(t.glVertexAttribDivisor(s,0),i[s]=0)}function w2e(e,t){let n=e._attributes,i=n.length;for(let o=0;o<i;++o){let r=n[o];r.enabled&&l(r.value)&&r.vertexAttrib(t)}}Sh.prototype.copyAttributeFromRange=function(e,t,n,i){let o=this.getAttribute(e),r=o.vertexBuffer,s=o.componentsPerAttribute,a=t.constructor,c=n*s*a.BYTES_PER_ELEMENT,d=new a(t.buffer,t.byteOffset+c,i*s);r.copyFromArrayView(d,c)};Sh.prototype.copyIndexFromRange=function(e,t,n){let i=this._indexBuffer,o=e.constructor,r=t*o.BYTES_PER_ELEMENT,s=new o(e.buffer,e.byteOffset+r,n);i.copyFromArrayView(s,r)};Sh.prototype._bind=function(){l(this._vao)?(this._context.glBindVertexArray(this._vao),this._context.instancedArrays&&B2e(this),this._hasConstantAttributes&&w2e(this,this._gl)):cse(this._gl,this._attributes,this._indexBuffer)};Sh.prototype._unBind=function(){if(l(this._vao))this._context.glBindVertexArray(null);else{let e=this._attributes,t=this._gl;for(let n=0;n<e.length;++n){let i=e[n];i.enabled&&i.disableVertexAttribArray(t)}this._indexBuffer&&t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,null)}};Sh.prototype.isDestroyed=function(){return!1};Sh.prototype.destroy=function(){let e=this._attributes;for(let n=0;n<e.length;++n){let i=e[n].vertexBuffer;l(i)&&!i.isDestroyed()&&i.vertexArrayDestroyable&&i.destroy()}let t=this._indexBuffer;return l(t)&&!t.isDestroyed()&&t.vertexArrayDestroyable&&t.destroy(),l(this._vao)&&this._context.glDeleteVertexArray(this._vao),he(this)};var kn=Sh;function Sr(e){e=e??Q.EMPTY_OBJECT;let{context:t,source:n,pixelFormat:i=Ke.RGBA,pixelDatatype:o=Oe.UNSIGNED_BYTE,flipY:r=!0,skipColorSpaceConversion:s=!1,sampler:a=new Ht}=e,c=e.preMultiplyAlpha||i===Ke.RGB||i===Ke.LUMINANCE,{width:d,height:u}=e;l(n)&&({width:d,height:u}=n.positiveX);let h=d,p=Ke.textureSizeInBytes(i,o,h,h)*6,A=Ke.toInternalFormat(i,o,t),f=t._gl,b=f.TEXTURE_CUBE_MAP,C=f.createTexture();this._context=t,this._textureFilterAnisotropic=t._textureFilterAnisotropic,this._textureTarget=b,this._texture=C,this._pixelFormat=i,this._pixelDatatype=o,this._size=h,this._hasMipmap=!1,this._sizeInBytes=p,this._preMultiplyAlpha=c,this._flipY=r;let T=l(n);function E(S){return new nV(t,C,b,S,A,i,o,h,c,r,T)}this._positiveX=E(f.TEXTURE_CUBE_MAP_POSITIVE_X),this._negativeX=E(f.TEXTURE_CUBE_MAP_NEGATIVE_X),this._positiveY=E(f.TEXTURE_CUBE_MAP_POSITIVE_Y),this._negativeY=E(f.TEXTURE_CUBE_MAP_NEGATIVE_Y),this._positiveZ=E(f.TEXTURE_CUBE_MAP_POSITIVE_Z),this._negativeZ=E(f.TEXTURE_CUBE_MAP_NEGATIVE_Z),this._sampler=a,lse(this,a),f.activeTexture(f.TEXTURE0),f.bindTexture(b,C),s?f.pixelStorei(f.UNPACK_COLORSPACE_CONVERSION_WEBGL,f.NONE):f.pixelStorei(f.UNPACK_COLORSPACE_CONVERSION_WEBGL,f.BROWSER_DEFAULT_WEBGL);for(let S of Sr.faceNames())LH(this[S],n?.[S],0);f.bindTexture(b,null)}Sr.prototype.copyFace=function(e,t,n,i){let o=e.context,r=new ss({context:o,colorTextures:[t],destroyAttachments:!1});r._bind(),this[n].copyMipmapFromFramebuffer(0,0,t.width,t.height,i??0),r._unBind(),r.destroy()};Sr.FaceName=Object.freeze({POSITIVEX:"positiveX",NEGATIVEX:"negativeX",POSITIVEY:"positiveY",NEGATIVEY:"negativeY",POSITIVEZ:"positiveZ",NEGATIVEZ:"negativeZ"});function*N2e(){yield Sr.FaceName.POSITIVEX,yield Sr.FaceName.NEGATIVEX,yield Sr.FaceName.POSITIVEY,yield Sr.FaceName.NEGATIVEY,yield Sr.FaceName.POSITIVEZ,yield Sr.FaceName.NEGATIVEZ}Sr.faceNames=function(){return N2e()};function LH(e,t,n){n=n??0;let i=e._targetFace,o=Math.max(Math.floor(e._size/2**n),1),r=e._pixelFormat,s=e._pixelDatatype,a=e._internalFormat,c=e._flipY,d=e._preMultiplyAlpha,u=e._context,h=u._gl;if(!l(t)){h.texImage2D(i,n,a,o,o,0,r,Oe.toWebGLConstant(s,u),null);return}let{arrayBufferView:p}=t,A=4;l(p)&&(A=Ke.alignmentInBytes(r,s,o)),h.pixelStorei(h.UNPACK_ALIGNMENT,A),l(p)?(h.pixelStorei(h.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!1),h.pixelStorei(h.UNPACK_FLIP_Y_WEBGL,!1),c&&(p=Ke.flipY(p,r,s,o,o)),h.texImage2D(i,n,a,o,o,0,r,Oe.toWebGLConstant(s,u),p)):(h.pixelStorei(h.UNPACK_PREMULTIPLY_ALPHA_WEBGL,d),h.pixelStorei(h.UNPACK_FLIP_Y_WEBGL,c),h.texImage2D(i,n,a,r,Oe.toWebGLConstant(s,u),t))}Sr.loadFace=LH;Object.defineProperties(Sr.prototype,{positiveX:{get:function(){return this._positiveX}},negativeX:{get:function(){return this._negativeX}},positiveY:{get:function(){return this._positiveY}},negativeY:{get:function(){return this._negativeY}},positiveZ:{get:function(){return this._positiveZ}},negativeZ:{get:function(){return this._negativeZ}},sampler:{get:function(){return this._sampler},set:function(e){lse(this,e),this._sampler=e}},pixelFormat:{get:function(){return this._pixelFormat}},pixelDatatype:{get:function(){return this._pixelDatatype}},width:{get:function(){return this._size}},height:{get:function(){return this._size}},sizeInBytes:{get:function(){return this._hasMipmap?Math.floor(this._sizeInBytes*4/3):this._sizeInBytes}},preMultiplyAlpha:{get:function(){return this._preMultiplyAlpha}},flipY:{get:function(){return this._flipY}},_target:{get:function(){return this._textureTarget}}});Sr.getDirection=function(e,t){switch(e){case Sr.FaceName.POSITIVEX:return m.clone(m.UNIT_X,t);case Sr.FaceName.NEGATIVEX:return m.negate(m.UNIT_X,t);case Sr.FaceName.POSITIVEY:return m.clone(m.UNIT_Y,t);case Sr.FaceName.NEGATIVEY:return m.negate(m.UNIT_Y,t);case Sr.FaceName.POSITIVEZ:return m.clone(m.UNIT_Z,t);case Sr.FaceName.NEGATIVEZ:return m.negate(m.UNIT_Z,t)}};function lse(e,t){let{minificationFilter:n,magnificationFilter:i}=t,o=[zt.NEAREST_MIPMAP_NEAREST,zt.NEAREST_MIPMAP_LINEAR,zt.LINEAR_MIPMAP_NEAREST,zt.LINEAR_MIPMAP_LINEAR].includes(n),r=e._context,s=e._pixelDatatype;(s===Oe.FLOAT&&!r.textureFloatLinear||s===Oe.HALF_FLOAT&&!r.textureHalfFloatLinear)&&(n=o?zt.NEAREST_MIPMAP_NEAREST:zt.NEAREST,i=li.NEAREST);let a=r._gl,c=e._textureTarget;a.activeTexture(a.TEXTURE0),a.bindTexture(c,e._texture),a.texParameteri(c,a.TEXTURE_MIN_FILTER,n),a.texParameteri(c,a.TEXTURE_MAG_FILTER,i),a.texParameteri(c,a.TEXTURE_WRAP_S,t.wrapS),a.texParameteri(c,a.TEXTURE_WRAP_T,t.wrapT),l(e._textureFilterAnisotropic)&&a.texParameteri(c,e._textureFilterAnisotropic.TEXTURE_MAX_ANISOTROPY_EXT,t.maximumAnisotropy),a.bindTexture(c,null)}Sr.prototype.loadMipmaps=function(e,t){t=t??!1;let n=this._context._gl,i=this._texture,o=this._textureTarget;n.activeTexture(n.TEXTURE0),n.bindTexture(o,i),t?n.pixelStorei(n.UNPACK_COLORSPACE_CONVERSION_WEBGL,n.NONE):n.pixelStorei(n.UNPACK_COLORSPACE_CONVERSION_WEBGL,n.BROWSER_DEFAULT_WEBGL);for(let r=0;r<e.length;r++){let s=e[r],a=r+1;for(let c of Sr.faceNames())LH(this[c],s[c],a)}n.bindTexture(o,null),this._hasMipmap=!0};Sr.prototype.generateMipmap=function(e){e=e??lm.DONT_CARE,this._hasMipmap=!0;let t=this._context._gl,n=this._textureTarget;t.hint(t.GENERATE_MIPMAP_HINT,e),t.activeTexture(t.TEXTURE0),t.bindTexture(n,this._texture),t.generateMipmap(n),t.bindTexture(n,null)};Sr.createVertexArray=function(e){let t=Cc.createGeometry(Cc.fromDimensions({dimensions:new m(2,2,2),vertexFormat:ve.POSITION_ONLY})),n=this._attributeLocations=zn.createAttributeLocations(t);return kn.fromGeometry({context:e,geometry:t,attributeLocations:n,bufferUsage:Be.STATIC_DRAW})};Sr.prototype.isDestroyed=function(){return!1};Sr.prototype.destroy=function(){return this._context._gl.deleteTexture(this._texture),this._positiveX=he(this._positiveX),this._negativeX=he(this._negativeX),this._positiveY=he(this._positiveY),this._negativeY=he(this._negativeY),this._positiveZ=he(this._positiveZ),this._negativeZ=he(this._negativeZ),he(this)};var Or=Sr;var X9t=y(x(),1);function P2e(e){this.context=e,this.framebuffer=void 0,this.blendingEnabled=void 0,this.scissorTest=void 0,this.viewport=void 0}var Uc=P2e;var M9t=y(x(),1),WH=class{constructor(t,n,i){this._pickObjects=t,this.key=n,this.color=i}get object(){return this._pickObjects.get(this.key)}set object(t){this._pickObjects.set(this.key,t)}destroy(){this._pickObjects.delete(this.key)}},oV=WH;var HKt=y(x(),1);var UKt=y(x(),1);var FKt=y(x(),1);var U9t=y(x(),1),rV=`/**
* A built-in GLSL floating-point constant for converting radians to degrees.
*
* @alias czm_degreesPerRadian
* @glslConstant
*
* @see CesiumMath.DEGREES_PER_RADIAN
*
* @example
* // GLSL declaration
* const float czm_degreesPerRadian = ...;
*
* // Example
* float deg = czm_degreesPerRadian * rad;
*/
const float czm_degreesPerRadian = 57.29577951308232;
`;var k9t=y(x(),1),sV=`/**
* A built-in GLSL vec2 constant for defining the depth range.
* This is a workaround to a bug where IE11 does not implement gl_DepthRange.
*
* @alias czm_depthRange
* @glslConstant
*
* @example
* // GLSL declaration
* float depthRangeNear = czm_depthRange.near;
* float depthRangeFar = czm_depthRange.far;
*
*/
const czm_depthRangeStruct czm_depthRange = czm_depthRangeStruct(0.0, 1.0);
`;var O9t=y(x(),1),aV=`/**
* 0.1
*
* @name czm_epsilon1
* @glslConstant
*/
const float czm_epsilon1 = 0.1;
`;var H9t=y(x(),1),cV=`/**
* 0.01
*
* @name czm_epsilon2
* @glslConstant
*/
const float czm_epsilon2 = 0.01;
`;var K9t=y(x(),1),lV=`/**
* 0.001
*
* @name czm_epsilon3
* @glslConstant
*/
const float czm_epsilon3 = 0.001;
`;var q9t=y(x(),1),dV=`/**
* 0.0001
*
* @name czm_epsilon4
* @glslConstant
*/
const float czm_epsilon4 = 0.0001;
`;var e5t=y(x(),1),uV=`/**
* 0.00001
*
* @name czm_epsilon5
* @glslConstant
*/
const float czm_epsilon5 = 0.00001;
`;var n5t=y(x(),1),mV=`/**
* 0.000001
*
* @name czm_epsilon6
* @glslConstant
*/
const float czm_epsilon6 = 0.000001;
`;var o5t=y(x(),1),hV=`/**
* 0.0000001
*
* @name czm_epsilon7
* @glslConstant
*/
const float czm_epsilon7 = 0.0000001;
`;var s5t=y(x(),1),fV=`/**
* DOC_TBA
*
* @name czm_infinity
* @glslConstant
*/
const float czm_infinity = 5906376272000.0; // Distance from the Sun to Pluto in meters. TODO: What is best given lowp, mediump, and highp?
`;var c5t=y(x(),1),pV=`/**
* A built-in GLSL floating-point constant for <code>1/pi</code>.
*
* @alias czm_oneOverPi
* @glslConstant
*
* @see CesiumMath.ONE_OVER_PI
*
* @example
* // GLSL declaration
* const float czm_oneOverPi = ...;
*
* // Example
* float pi = 1.0 / czm_oneOverPi;
*/
const float czm_oneOverPi = 0.3183098861837907;
`;var d5t=y(x(),1),AV=`/**
* A built-in GLSL floating-point constant for <code>1/2pi</code>.
*
* @alias czm_oneOverTwoPi
* @glslConstant
*
* @see CesiumMath.ONE_OVER_TWO_PI
*
* @example
* // GLSL declaration
* const float czm_oneOverTwoPi = ...;
*
* // Example
* float pi = 2.0 * czm_oneOverTwoPi;
*/
const float czm_oneOverTwoPi = 0.15915494309189535;
`;var m5t=y(x(),1),gV=`/**
* The automatic GLSL constant for {@link Pass#CESIUM_3D_TILE}
*
* @name czm_passCesium3DTile
* @glslConstant
*
* @see czm_pass
*/
const float czm_passCesium3DTile = 5.0;
`;var f5t=y(x(),1),bV=`/**
* The automatic GLSL constant for {@link Pass#CESIUM_3D_TILE_CLASSIFICATION}
*
* @name czm_passCesium3DTileClassification
* @glslConstant
*
* @see czm_pass
*/
const float czm_passCesium3DTileClassification = 6.0;
`;var A5t=y(x(),1),yV=`/**
* The automatic GLSL constant for {@link Pass#CESIUM_3D_TILE_CLASSIFICATION_IGNORE_SHOW}
*
* @name czm_passCesium3DTileClassificationIgnoreShow
* @glslConstant
*
* @see czm_pass
*/
const float czm_passCesium3DTileClassificationIgnoreShow = 7.0;
`;var b5t=y(x(),1),xV=`/**
* The automatic GLSL constant for {@link Pass#CESIUM_3D_TILE_EDGES}
*
* @name czm_passCesium3DTileEdges
* @glslConstant
*
* @see czm_pass
*/
const float czm_passCesium3DTileEdges = 4.0;
`;var x5t=y(x(),1),CV=`/**
* The automatic GLSL constant for {@link Pass#CLASSIFICATION}
*
* @name czm_passClassification
* @glslConstant
*
* @see czm_pass
*/
const float czm_passClassification = 7.0;
`;var T5t=y(x(),1),TV=`/**
* The automatic GLSL constant for {@link Pass#COMPUTE}
*
* @name czm_passCompute
* @glslConstant
*
* @see czm_pass
*/
const float czm_passCompute = 1.0;
`;var S5t=y(x(),1),EV=`/**
* The automatic GLSL constant for {@link Pass#ENVIRONMENT}
*
* @name czm_passEnvironment
* @glslConstant
*
* @see czm_pass
*/
const float czm_passEnvironment = 0.0;
`;var I5t=y(x(),1),SV=`/**
* The automatic GLSL constant for {@link Pass#GAUSSIAN_SPLATS}
*
* @name czm_passGaussianSplats
* @glslConstant
*
* @see czm_pass
*/
const float czm_passGaussianSplats = 11.0;
`;var R5t=y(x(),1),_V=`/**
* The automatic GLSL constant for {@link Pass#GLOBE}
*
* @name czm_passGlobe
* @glslConstant
*
* @see czm_pass
*/
const float czm_passGlobe = 2.0;
`;var G5t=y(x(),1),IV=`/**
* The automatic GLSL constant for {@link Pass#OPAQUE}
*
* @name czm_passOpaque
* @glslConstant
*
* @see czm_pass
*/
const float czm_passOpaque = 8.0;
`;var W5t=y(x(),1),ZV=`/**
* The automatic GLSL constant for {@link Pass#OVERLAY}
*
* @name czm_passOverlay
* @glslConstant
*
* @see czm_pass
*/
const float czm_passOverlay = 12.0;
`;var B5t=y(x(),1),RV=`/**
* The automatic GLSL constant for {@link Pass#TERRAIN_CLASSIFICATION}
*
* @name czm_passTerrainClassification
* @glslConstant
*
* @see czm_pass
*/
const float czm_passTerrainClassification = 3.0;
`;var N5t=y(x(),1),VV=`/**
* The automatic GLSL constant for {@link Pass#TRANSLUCENT}
*
* @name czm_passTranslucent
* @glslConstant
*
* @see czm_pass
*/
const float czm_passTranslucent = 9.0;
`;var X5t=y(x(),1),GV=`/**
* The automatic GLSL constant for {@link Pass#VOXELS}
*
* @name czm_passVoxels
* @glslConstant
*
* @see czm_pass
*/
const float czm_passVoxels = 10.0;
`;var M5t=y(x(),1),LV=`/**
* A built-in GLSL floating-point constant for <code>Math.PI</code>.
*
* @alias czm_pi
* @glslConstant
*
* @see CesiumMath.PI
*
* @example
* // GLSL declaration
* const float czm_pi = ...;
*
* // Example
* float twoPi = 2.0 * czm_pi;
*/
const float czm_pi = 3.141592653589793;
`;var U5t=y(x(),1),WV=`/**
* A built-in GLSL floating-point constant for <code>pi/4</code>.
*
* @alias czm_piOverFour
* @glslConstant
*
* @see CesiumMath.PI_OVER_FOUR
*
* @example
* // GLSL declaration
* const float czm_piOverFour = ...;
*
* // Example
* float pi = 4.0 * czm_piOverFour;
*/
const float czm_piOverFour = 0.7853981633974483;
`;var k5t=y(x(),1),FV=`/**
* A built-in GLSL floating-point constant for <code>pi/6</code>.
*
* @alias czm_piOverSix
* @glslConstant
*
* @see CesiumMath.PI_OVER_SIX
*
* @example
* // GLSL declaration
* const float czm_piOverSix = ...;
*
* // Example
* float pi = 6.0 * czm_piOverSix;
*/
const float czm_piOverSix = 0.5235987755982988;
`;var O5t=y(x(),1),BV=`/**
* A built-in GLSL floating-point constant for <code>pi/3</code>.
*
* @alias czm_piOverThree
* @glslConstant
*
* @see CesiumMath.PI_OVER_THREE
*
* @example
* // GLSL declaration
* const float czm_piOverThree = ...;
*
* // Example
* float pi = 3.0 * czm_piOverThree;
*/
const float czm_piOverThree = 1.0471975511965976;
`;var H5t=y(x(),1),wV=`/**
* A built-in GLSL floating-point constant for <code>pi/2</code>.
*
* @alias czm_piOverTwo
* @glslConstant
*
* @see CesiumMath.PI_OVER_TWO
*
* @example
* // GLSL declaration
* const float czm_piOverTwo = ...;
*
* // Example
* float pi = 2.0 * czm_piOverTwo;
*/
const float czm_piOverTwo = 1.5707963267948966;
`;var K5t=y(x(),1),NV=`/**
* A built-in GLSL floating-point constant for converting degrees to radians.
*
* @alias czm_radiansPerDegree
* @glslConstant
*
* @see CesiumMath.RADIANS_PER_DEGREE
*
* @example
* // GLSL declaration
* const float czm_radiansPerDegree = ...;
*
* // Example
* float rad = czm_radiansPerDegree * deg;
*/
const float czm_radiansPerDegree = 0.017453292519943295;
`;var q5t=y(x(),1),PV=`/**
* The constant identifier for the 2D {@link SceneMode}
*
* @name czm_sceneMode2D
* @glslConstant
* @see czm_sceneMode
* @see czm_sceneModeColumbusView
* @see czm_sceneMode3D
* @see czm_sceneModeMorphing
*/
const float czm_sceneMode2D = 2.0;
`;var eQt=y(x(),1),XV=`/**
* The constant identifier for the 3D {@link SceneMode}
*
* @name czm_sceneMode3D
* @glslConstant
* @see czm_sceneMode
* @see czm_sceneMode2D
* @see czm_sceneModeColumbusView
* @see czm_sceneModeMorphing
*/
const float czm_sceneMode3D = 3.0;
`;var nQt=y(x(),1),YV=`/**
* The constant identifier for the Columbus View {@link SceneMode}
*
* @name czm_sceneModeColumbusView
* @glslConstant
* @see czm_sceneMode
* @see czm_sceneMode2D
* @see czm_sceneMode3D
* @see czm_sceneModeMorphing
*/
const float czm_sceneModeColumbusView = 1.0;
`;var oQt=y(x(),1),MV=`/**
* The constant identifier for the Morphing {@link SceneMode}
*
* @name czm_sceneModeMorphing
* @glslConstant
* @see czm_sceneMode
* @see czm_sceneMode2D
* @see czm_sceneModeColumbusView
* @see czm_sceneMode3D
*/
const float czm_sceneModeMorphing = 0.0;
`;var sQt=y(x(),1),vV=`/**
* A built-in GLSL floating-point constant for one solar radius.
*
* @alias czm_solarRadius
* @glslConstant
*
* @see CesiumMath.SOLAR_RADIUS
*
* @example
* // GLSL declaration
* const float czm_solarRadius = ...;
*/
const float czm_solarRadius = 695500000.0;
`;var cQt=y(x(),1),UV=`/**
* A built-in GLSL floating-point constant for <code>3pi/2</code>.
*
* @alias czm_threePiOver2
* @glslConstant
*
* @see CesiumMath.THREE_PI_OVER_TWO
*
* @example
* // GLSL declaration
* const float czm_threePiOver2 = ...;
*
* // Example
* float pi = (2.0 / 3.0) * czm_threePiOver2;
*/
const float czm_threePiOver2 = 4.71238898038469;
`;var dQt=y(x(),1),DV=`/**
* A built-in GLSL floating-point constant for <code>2pi</code>.
*
* @alias czm_twoPi
* @glslConstant
*
* @see CesiumMath.TWO_PI
*
* @example
* // GLSL declaration
* const float czm_twoPi = ...;
*
* // Example
* float pi = czm_twoPi / 2.0;
*/
const float czm_twoPi = 6.283185307179586;
`;var mQt=y(x(),1),kV=`/**
* The maximum latitude, in radians, both North and South, supported by a Web Mercator
* (EPSG:3857) projection. Technically, the Mercator projection is defined
* for any latitude up to (but not including) 90 degrees, but it makes sense
* to cut it off sooner because it grows exponentially with increasing latitude.
* The logic behind this particular cutoff value, which is the one used by
* Google Maps, Bing Maps, and Esri, is that it makes the projection
* square. That is, the rectangle is equal in the X and Y directions.
*
* The constant value is computed as follows:
* czm_pi * 0.5 - (2.0 * atan(exp(-czm_pi)))
*
* @name czm_webMercatorMaxLatitude
* @glslConstant
*/
const float czm_webMercatorMaxLatitude = 1.4844222297453324;
`;var fQt=y(x(),1),QV=`/**
* @name czm_depthRangeStruct
* @glslStruct
*/
struct czm_depthRangeStruct
{
float near;
float far;
};
`;var AQt=y(x(),1),OV=`/**
* Holds material information that can be used for lighting. Returned by all czm_getMaterial functions.
*
* @name czm_material
* @glslStruct
*
* @property {vec3} diffuse Incoming light that scatters evenly in all directions.
* @property {float} specular Intensity of incoming light reflecting in a single direction.
* @property {float} shininess The sharpness of the specular reflection. Higher values create a smaller, more focused specular highlight.
* @property {vec3} normal Surface's normal in eye coordinates. It is used for effects such as normal mapping. The default is the surface's unmodified normal.
* @property {vec3} emission Light emitted by the material equally in all directions. The default is vec3(0.0), which emits no light.
* @property {float} alpha Alpha of this material. 0.0 is completely transparent; 1.0 is completely opaque.
*/
struct czm_material
{
vec3 diffuse;
float specular;
float shininess;
vec3 normal;
vec3 emission;
float alpha;
};
`;var bQt=y(x(),1),zV=`/**
* Used as input to every material's czm_getMaterial function.
*
* @name czm_materialInput
* @glslStruct
*
* @property {float} s 1D texture coordinates.
* @property {vec2} st 2D texture coordinates.
* @property {vec3} str 3D texture coordinates.
* @property {vec3} normalEC Unperturbed surface normal in eye coordinates.
* @property {mat3} tangentToEyeMatrix Matrix for converting a tangent space normal to eye space.
* @property {vec3} positionToEyeEC Vector from the fragment to the eye in eye coordinates. The magnitude is the distance in meters from the fragment to the eye.
* @property {float} height The height of the terrain in meters above or below the ellipsoid. Only available for globe materials.
* @property {float} slope The slope of the terrain in radians. 0 is flat; pi/2 is vertical. Only available for globe materials.
* @property {float} aspect The aspect of the terrain in radians. 0 is East, pi/2 is North, pi is West, 3pi/2 is South. Only available for globe materials.
* @property {float} waterMask The value of the water mask. 0 is land, 1 is water. Only available for globe materials.
*/
struct czm_materialInput
{
float s;
vec2 st;
vec3 str;
vec3 normalEC;
mat3 tangentToEyeMatrix;
vec3 positionToEyeEC;
float height;
float slope;
float aspect;
float waterMask;
};
`;var xQt=y(x(),1),HV=`/**
* Struct for representing a material for a {@link Model}. The model
* rendering pipeline will pass this struct between material, custom shaders,
* and lighting stages. This is not to be confused with {@link czm_material}
* which is used by the older Fabric materials system, although they are similar.
* <p>
* All color values (diffuse, specular, emissive) are in linear color space.
* </p>
*
* @name czm_modelMaterial
* @glslStruct
*
* @property {vec4} baseColor The base color of the material.
* @property {vec3} diffuse Incoming light that scatters evenly in all directions.
* @property {float} alpha Alpha of this material. 0.0 is completely transparent; 1.0 is completely opaque.
* @property {vec3} specular Color of reflected light at normal incidence in PBR materials. This is sometimes referred to as f0 in the literature.
* @property {float} roughness A number from 0.0 to 1.0 representing how rough the surface is. Values near 0.0 produce glossy surfaces, while values near 1.0 produce rough surfaces.
* @property {vec3} normalEC Surface's normal in eye coordinates. It is used for effects such as normal mapping. The default is the surface's unmodified normal.
* @property {float} occlusion Ambient occlusion recieved at this point on the material. 1.0 means fully lit, 0.0 means fully occluded.
* @property {vec3} emissive Light emitted by the material equally in all directions. The default is vec3(0.0), which emits no light.
*/
struct czm_modelMaterial {
vec4 baseColor;
vec3 diffuse;
float alpha;
vec3 specular;
float roughness;
vec3 normalEC;
float occlusion;
vec3 emissive;
#ifdef USE_SPECULAR
float specularWeight;
#endif
#ifdef USE_ANISOTROPY
vec3 anisotropicT;
vec3 anisotropicB;
float anisotropyStrength;
#endif
#ifdef USE_CLEARCOAT
float clearcoatFactor;
float clearcoatRoughness;
vec3 clearcoatNormal;
// Add clearcoatF0 when KHR_materials_ior is implemented
#endif
};
`;var TQt=y(x(),1),JV=`/**
* Struct for representing the output of a custom vertex shader.
*
* @name czm_modelVertexOutput
* @glslStruct
*
* @see {@link CustomShader}
* @see {@link Model}
*
* @property {vec3} positionMC The position of the vertex in model coordinates
* @property {float} pointSize A custom value for gl_PointSize. This is only used for point primitives.
*/
struct czm_modelVertexOutput {
vec3 positionMC;
float pointSize;
};
`;var SQt=y(x(),1),KV=`/**
* DOC_TBA
*
* @name czm_ray
* @glslStruct
*/
struct czm_ray
{
vec3 origin;
vec3 direction;
};
`;var IQt=y(x(),1),jV=`/**
* DOC_TBA
*
* @name czm_raySegment
* @glslStruct
*/
struct czm_raySegment
{
float start;
float stop;
};
/**
* DOC_TBA
*
* @name czm_emptyRaySegment
* @glslConstant
*/
const czm_raySegment czm_emptyRaySegment = czm_raySegment(-czm_infinity, -czm_infinity);
/**
* DOC_TBA
*
* @name czm_fullRaySegment
* @glslConstant
*/
const czm_raySegment czm_fullRaySegment = czm_raySegment(0.0, czm_infinity);
`;var RQt=y(x(),1),qV=`struct czm_shadowParameters
{
#ifdef USE_CUBE_MAP_SHADOW
vec3 texCoords;
#else
vec2 texCoords;
#endif
float depthBias;
float depth;
float nDotL;
vec2 texelStepSize;
float normalShadingSmooth;
float darkness;
};
`;var GQt=y(x(),1),$V=`// See:
// https://knarkowicz.wordpress.com/2016/01/06/aces-filmic-tone-mapping-curve/
vec3 czm_acesTonemapping(vec3 color) {
float g = 0.985;
float a = 0.065;
float b = 0.0001;
float c = 0.433;
float d = 0.238;
color = (color * (color + a) - b) / (color * (g * color + c) + d);
color = clamp(color, 0.0, 1.0);
return color;
}
`;var WQt=y(x(),1),eG=`/**
* @private
*/
float czm_alphaWeight(float a)
{
float z = (gl_FragCoord.z - czm_viewportTransformation[3][2]) / czm_viewportTransformation[2][2];
// See Weighted Blended Order-Independent Transparency for examples of different weighting functions:
// http://jcgt.org/published/0002/02/09/
return pow(a + 0.01, 4.0) + max(1e-2, min(3.0 * 1e3, 0.003 / (1e-5 + pow(abs(z) / 200.0, 4.0))));
}
`;var BQt=y(x(),1),tG=`/**
* Procedural anti-aliasing by blurring two colors that meet at a sharp edge.
*
* @name czm_antialias
* @glslFunction
*
* @param {vec4} color1 The color on one side of the edge.
* @param {vec4} color2 The color on the other side of the edge.
* @param {vec4} currentcolor The current color, either <code>color1</code> or <code>color2</code>.
* @param {float} dist The distance to the edge in texture coordinates.
* @param {float} [fuzzFactor=0.1] Controls the blurriness between the two colors.
* @returns {vec4} The anti-aliased color.
*
* @example
* // GLSL declarations
* vec4 czm_antialias(vec4 color1, vec4 color2, vec4 currentColor, float dist, float fuzzFactor);
* vec4 czm_antialias(vec4 color1, vec4 color2, vec4 currentColor, float dist);
*
* // get the color for a material that has a sharp edge at the line y = 0.5 in texture space
* float dist = abs(textureCoordinates.t - 0.5);
* vec4 currentColor = mix(bottomColor, topColor, step(0.5, textureCoordinates.t));
* vec4 color = czm_antialias(bottomColor, topColor, currentColor, dist, 0.1);
*/
vec4 czm_antialias(vec4 color1, vec4 color2, vec4 currentColor, float dist, float fuzzFactor)
{
float val1 = clamp(dist / fuzzFactor, 0.0, 1.0);
float val2 = clamp((dist - 0.5) / fuzzFactor, 0.0, 1.0);
val1 = val1 * (1.0 - val2);
val1 = val1 * val1 * (3.0 - (2.0 * val1));
val1 = pow(val1, 0.5); //makes the transition nicer
vec4 midColor = (color1 + color2) * 0.5;
return mix(midColor, currentColor, val1);
}
vec4 czm_antialias(vec4 color1, vec4 color2, vec4 currentColor, float dist)
{
return czm_antialias(color1, color2, currentColor, dist, 0.1);
}
`;var NQt=y(x(),1),nG=`/**
* Apply a HSB color shift to an RGB color.
*
* @param {vec3} rgb The color in RGB space.
* @param {vec3} hsbShift The amount to shift each component. The xyz components correspond to hue, saturation, and brightness. Shifting the hue by +/- 1.0 corresponds to shifting the hue by a full cycle. Saturation and brightness are clamped between 0 and 1 after the adjustment
* @param {bool} ignoreBlackPixels If true, black pixels will be unchanged. This is necessary in some shaders such as atmosphere-related effects.
*
* @return {vec3} The RGB color after shifting in HSB space and clamping saturation and brightness to a valid range.
*/
vec3 czm_applyHSBShift(vec3 rgb, vec3 hsbShift, bool ignoreBlackPixels) {
// Convert rgb color to hsb
vec3 hsb = czm_RGBToHSB(rgb);
// Perform hsb shift
// Hue cycles around so no clamp is needed.
hsb.x += hsbShift.x; // hue
hsb.y = clamp(hsb.y + hsbShift.y, 0.0, 1.0); // saturation
// brightness
//
// Some shaders such as atmosphere-related effects need to leave black
// pixels unchanged
if (ignoreBlackPixels) {
hsb.z = hsb.z > czm_epsilon7 ? hsb.z + hsbShift.z : 0.0;
} else {
hsb.z = hsb.z + hsbShift.z;
}
hsb.z = clamp(hsb.z, 0.0, 1.0);
// Convert shifted hsb back to rgb
return czm_HSBToRGB(hsb);
}
`;var XQt=y(x(),1),iG=`/**
* Approximately computes spherical coordinates given a normal.
* Uses approximate inverse trigonometry for speed and consistency,
* since inverse trigonometry can differ from vendor-to-vendor and when compared with the CPU.
*
* @name czm_approximateSphericalCoordinates
* @glslFunction
*
* @param {vec3} normal arbitrary-length normal.
*
* @returns {vec2} Approximate latitude and longitude spherical coordinates.
*/
vec2 czm_approximateSphericalCoordinates(vec3 normal) {
// Project into plane with vertical for latitude
float latitudeApproximation = czm_fastApproximateAtan(sqrt(normal.x * normal.x + normal.y * normal.y), normal.z);
float longitudeApproximation = czm_fastApproximateAtan(normal.x, normal.y);
return vec2(latitudeApproximation, longitudeApproximation);
}
`;var MQt=y(x(),1),oG=`/**
* Compute a rational approximation to tanh(x)
*
* @param {float} x A real number input
* @returns {float} An approximation for tanh(x)
*/
float czm_approximateTanh(float x) {
float x2 = x * x;
return max(-1.0, min(1.0, x * (27.0 + x2) / (27.0 + 9.0 * x2)));
}
`;var UQt=y(x(),1),rG=`/**
* Determines if the fragment is back facing
*
* @name czm_backFacing
* @glslFunction
*
* @returns {bool} <code>true</code> if the fragment is back facing; otherwise, <code>false</code>.
*/
bool czm_backFacing()
{
// !gl_FrontFacing doesn't work as expected on Mac/Intel so use the more verbose form instead. See https://github.com/CesiumGS/cesium/pull/8494.
return gl_FrontFacing == false;
}
`;var kQt=y(x(),1),sG=`/**
* Branchless ternary operator to be used when it's inexpensive to explicitly
* evaluate both possibilities for a float expression.
*
* @name czm_branchFreeTernary
* @glslFunction
*
* @param {bool} comparison A comparison statement
* @param {float} a Value to return if the comparison is true.
* @param {float} b Value to return if the comparison is false.
*
* @returns {float} equivalent of comparison ? a : b
*/
float czm_branchFreeTernary(bool comparison, float a, float b) {
float useA = float(comparison);
return a * useA + b * (1.0 - useA);
}
/**
* Branchless ternary operator to be used when it's inexpensive to explicitly
* evaluate both possibilities for a vec2 expression.
*
* @name czm_branchFreeTernary
* @glslFunction
*
* @param {bool} comparison A comparison statement
* @param {vec2} a Value to return if the comparison is true.
* @param {vec2} b Value to return if the comparison is false.
*
* @returns {vec2} equivalent of comparison ? a : b
*/
vec2 czm_branchFreeTernary(bool comparison, vec2 a, vec2 b) {
float useA = float(comparison);
return a * useA + b * (1.0 - useA);
}
/**
* Branchless ternary operator to be used when it's inexpensive to explicitly
* evaluate both possibilities for a vec3 expression.
*
* @name czm_branchFreeTernary
* @glslFunction
*
* @param {bool} comparison A comparison statement
* @param {vec3} a Value to return if the comparison is true.
* @param {vec3} b Value to return if the comparison is false.
*
* @returns {vec3} equivalent of comparison ? a : b
*/
vec3 czm_branchFreeTernary(bool comparison, vec3 a, vec3 b) {
float useA = float(comparison);
return a * useA + b * (1.0 - useA);
}
/**
* Branchless ternary operator to be used when it's inexpensive to explicitly
* evaluate both possibilities for a vec4 expression.
*
* @name czm_branchFreeTernary
* @glslFunction
*
* @param {bool} comparison A comparison statement
* @param {vec3} a Value to return if the comparison is true.
* @param {vec3} b Value to return if the comparison is false.
*
* @returns {vec3} equivalent of comparison ? a : b
*/
vec4 czm_branchFreeTernary(bool comparison, vec4 a, vec4 b) {
float useA = float(comparison);
return a * useA + b * (1.0 - useA);
}
`;var OQt=y(x(),1),aG=`
vec4 czm_cascadeColor(vec4 weights)
{
return vec4(1.0, 0.0, 0.0, 1.0) * weights.x +
vec4(0.0, 1.0, 0.0, 1.0) * weights.y +
vec4(0.0, 0.0, 1.0, 1.0) * weights.z +
vec4(1.0, 0.0, 1.0, 1.0) * weights.w;
}
`;var HQt=y(x(),1),cG=`
uniform vec4 shadowMap_cascadeDistances;
float czm_cascadeDistance(vec4 weights)
{
return dot(shadowMap_cascadeDistances, weights);
}
`;var KQt=y(x(),1),lG=`
uniform mat4 shadowMap_cascadeMatrices[4];
mat4 czm_cascadeMatrix(vec4 weights)
{
return shadowMap_cascadeMatrices[0] * weights.x +
shadowMap_cascadeMatrices[1] * weights.y +
shadowMap_cascadeMatrices[2] * weights.z +
shadowMap_cascadeMatrices[3] * weights.w;
}
`;var qQt=y(x(),1),dG=`
uniform vec4 shadowMap_cascadeSplits[2];
vec4 czm_cascadeWeights(float depthEye)
{
// One component is set to 1.0 and all others set to 0.0.
vec4 near = step(shadowMap_cascadeSplits[0], vec4(depthEye));
vec4 far = step(depthEye, shadowMap_cascadeSplits[1]);
return near * far;
}
`;var eOt=y(x(),1),uG=`float getSignedDistance(vec2 uv, highp sampler2D clippingDistance) {
float signedDistance = texture(clippingDistance, uv).r;
return (signedDistance - 0.5) * 2.0;
}
void czm_clipPolygons(highp sampler2D clippingDistance, int extentsLength, vec2 clippingPosition, int regionIndex) {
// Position is completely outside of polygons bounds
vec2 rectUv = clippingPosition;
if (regionIndex < 0 || rectUv.x <= 0.0 || rectUv.y <= 0.0 || rectUv.x >= 1.0 || rectUv.y >= 1.0) {
#ifdef CLIPPING_INVERSE
discard;
#endif
return;
}
vec2 clippingDistanceTextureDimensions = vec2(textureSize(clippingDistance, 0));
vec2 sampleOffset = max(1.0 / clippingDistanceTextureDimensions, vec2(0.005));
float dimension = float(extentsLength);
if (extentsLength > 2) {
dimension = ceil(log2(float(extentsLength)));
}
vec2 textureOffset = vec2(mod(float(regionIndex), dimension), floor(float(regionIndex) / dimension)) / dimension;
vec2 uv = textureOffset + rectUv / dimension;
float signedDistance = getSignedDistance(uv, clippingDistance);
#ifdef CLIPPING_INVERSE
if (signedDistance > 0.0) {
discard;
}
#else
if (signedDistance < 0.0) {
discard;
}
#endif
}
`;var nOt=y(x(),1),mG=`/**
* DOC_TBA
*
* @name czm_columbusViewMorph
* @glslFunction
*/
vec4 czm_columbusViewMorph(vec4 position2D, vec4 position3D, float time)
{
// Just linear for now.
// We're manually doing the equivalent of a \`mix\` here because, some GPUs
// (NVidia GeForce 3070 Ti and Intel Arc A750, to name two), \`mix\` seems to
// use an alternate formulation that introduces jitter even when \`time\` is
// 0.0 or 1.0. That is, the value of \`p\` won't be exactly \`position2D.xyz\`
// when \`time\` is 0.0 and it won't be exactly \`position3D.xyz\` when \`time\` is
// 1.0. The "textbook" formulation here, while probably a bit slower,
// does not have this problem.
vec3 p = position2D.xyz * (1.0 - time) + position3D.xyz * time;
return vec4(p, 1.0);
}
`;var oOt=y(x(),1),hG=`/**
* Compute the atmosphere color, applying Rayleigh and Mie scattering. This
* builtin uses automatic uniforms so the atmophere settings are synced with the
* state of the Scene, even in other contexts like Model.
*
* @name czm_computeAtmosphereColor
* @glslFunction
*
* @param {vec3} positionWC Position of the fragment in world coords (low precision)
* @param {vec3} lightDirection Light direction from the sun or other light source.
* @param {vec3} rayleighColor The Rayleigh scattering color computed by a scattering function
* @param {vec3} mieColor The Mie scattering color computed by a scattering function
* @param {float} opacity The opacity computed by a scattering function.
*/
vec4 czm_computeAtmosphereColor(
vec3 positionWC,
vec3 lightDirection,
vec3 rayleighColor,
vec3 mieColor,
float opacity
) {
// Setup the primary ray: from the camera position to the vertex position.
vec3 cameraToPositionWC = positionWC - czm_viewerPositionWC;
vec3 cameraToPositionWCDirection = normalize(cameraToPositionWC);
float cosAngle = dot(cameraToPositionWCDirection, lightDirection);
float cosAngleSq = cosAngle * cosAngle;
float G = czm_atmosphereMieAnisotropy;
float GSq = G * G;
// The Rayleigh phase function.
float rayleighPhase = 3.0 / (50.2654824574) * (1.0 + cosAngleSq);
// The Mie phase function.
float miePhase = 3.0 / (25.1327412287) * ((1.0 - GSq) * (cosAngleSq + 1.0)) / (pow(1.0 + GSq - 2.0 * cosAngle * G, 1.5) * (2.0 + GSq));
// The final color is generated by combining the effects of the Rayleigh and Mie scattering.
vec3 rayleigh = rayleighPhase * rayleighColor;
vec3 mie = miePhase * mieColor;
vec3 color = (rayleigh + mie) * czm_atmosphereLightIntensity;
return vec4(color, opacity);
}
/**
* Compute the atmosphere color, applying Rayleigh and Mie scattering. This
* builtin uses automatic uniforms so the atmophere settings are synced with the
* state of the Scene, even in other contexts like Model.
*
* @name czm_computeAtmosphereColor
* @glslFunction
*
* @param {czm_ray} primaryRay Ray from the origin to sky fragment to in world coords (low precision)
* @param {vec3} lightDirection Light direction from the sun or other light source.
* @param {vec3} rayleighColor The Rayleigh scattering color computed by a scattering function
* @param {vec3} mieColor The Mie scattering color computed by a scattering function
* @param {float} opacity The opacity computed by a scattering function.
*/
vec4 czm_computeAtmosphereColor(
czm_ray primaryRay,
vec3 lightDirection,
vec3 rayleighColor,
vec3 mieColor,
float opacity
) {
vec3 direction = normalize(primaryRay.direction);
float cosAngle = dot(direction, lightDirection);
float cosAngleSq = cosAngle * cosAngle;
float G = czm_atmosphereMieAnisotropy;
float GSq = G * G;
// The Rayleigh phase function.
float rayleighPhase = 3.0 / (50.2654824574) * (1.0 + cosAngleSq);
// The Mie phase function.
float miePhase = 3.0 / (25.1327412287) * ((1.0 - GSq) * (cosAngleSq + 1.0)) / (pow(1.0 + GSq - 2.0 * cosAngle * G, 1.5) * (2.0 + GSq));
// The final color is generated by combining the effects of the Rayleigh and Mie scattering.
vec3 rayleigh = rayleighPhase * rayleighColor;
vec3 mie = miePhase * mieColor;
vec3 color = (rayleigh + mie) * czm_atmosphereLightIntensity;
return vec4(color, opacity);
}
`;var sOt=y(x(),1),fG=`/**
* Compute atmosphere scattering for the ground atmosphere and fog. This method
* uses automatic uniforms so it is always synced with the scene settings.
*
* @name czm_computeGroundAtmosphereScattering
* @glslfunction
*
* @param {vec3} positionWC The position of the fragment in world coordinates.
* @param {vec3} lightDirection The direction of the light to calculate the scattering from.
* @param {vec3} rayleighColor The variable the Rayleigh scattering will be written to.
* @param {vec3} mieColor The variable the Mie scattering will be written to.
* @param {float} opacity The variable the transmittance will be written to.
*/
void czm_computeGroundAtmosphereScattering(vec3 positionWC, vec3 lightDirection, out vec3 rayleighColor, out vec3 mieColor, out float opacity) {
vec3 cameraToPositionWC = positionWC - czm_viewerPositionWC;
vec3 cameraToPositionWCDirection = normalize(cameraToPositionWC);
czm_ray primaryRay = czm_ray(czm_viewerPositionWC, cameraToPositionWCDirection);
float atmosphereInnerRadius = length(positionWC);
czm_computeScattering(
primaryRay,
length(cameraToPositionWC),
lightDirection,
atmosphereInnerRadius,
rayleighColor,
mieColor,
opacity
);
}
`;var cOt=y(x(),1),pG=`/**
* Returns a position in model coordinates relative to eye taking into
* account the current scene mode: 3D, 2D, or Columbus view.
* <p>
* This uses standard position attributes, <code>position3DHigh</code>,
* <code>position3DLow</code>, <code>position2DHigh</code>, and <code>position2DLow</code>,
* and should be used when writing a vertex shader for an {@link Appearance}.
* </p>
*
* @name czm_computePosition
* @glslFunction
*
* @returns {vec4} The position relative to eye.
*
* @example
* vec4 p = czm_computePosition();
* v_positionEC = (czm_modelViewRelativeToEye * p).xyz;
* gl_Position = czm_modelViewProjectionRelativeToEye * p;
*
* @see czm_translateRelativeToEye
*/
vec4 czm_computePosition();
`;var dOt=y(x(),1),AG=`/**
* This function computes the colors contributed by Rayliegh and Mie scattering on a given ray, as well as
* the transmittance value for the ray. This function uses automatic uniforms
* so the atmosphere settings are always synced with the current scene.
*
* @name czm_computeScattering
* @glslfunction
*
* @param {czm_ray} primaryRay The ray from the camera to the position.
* @param {float} primaryRayLength The length of the primary ray.
* @param {vec3} lightDirection The direction of the light to calculate the scattering from.
* @param {vec3} rayleighColor The variable the Rayleigh scattering will be written to.
* @param {vec3} mieColor The variable the Mie scattering will be written to.
* @param {float} opacity The variable the transmittance will be written to.
*/
void czm_computeScattering(
czm_ray primaryRay,
float primaryRayLength,
vec3 lightDirection,
float atmosphereInnerRadius,
out vec3 rayleighColor,
out vec3 mieColor,
out float opacity
) {
const float ATMOSPHERE_THICKNESS = 111e3; // The thickness of the atmosphere in meters.
const int PRIMARY_STEPS_MAX = 16; // Maximum number of times the ray from the camera to the world position (primary ray) is sampled.
const int LIGHT_STEPS_MAX = 4; // Maximum number of times the light is sampled from the light source's intersection with the atmosphere to a sample position on the primary ray.
// Initialize the default scattering amounts to 0.
rayleighColor = vec3(0.0);
mieColor = vec3(0.0);
opacity = 0.0;
float atmosphereOuterRadius = atmosphereInnerRadius + ATMOSPHERE_THICKNESS;
vec3 origin = vec3(0.0);
// Calculate intersection from the camera to the outer ring of the atmosphere.
czm_raySegment primaryRayAtmosphereIntersect = czm_raySphereIntersectionInterval(primaryRay, origin, atmosphereOuterRadius);
// Return empty colors if no intersection with the atmosphere geometry.
if (primaryRayAtmosphereIntersect == czm_emptyRaySegment) {
return;
}
// To deal with smaller values of PRIMARY_STEPS (e.g. 4)
// we implement a split strategy: sky or horizon.
// For performance reasons, instead of a if/else branch
// a soft choice is implemented through a weight 0.0 <= w_stop_gt_lprl <= 1.0
float x = 1e-7 * primaryRayAtmosphereIntersect.stop / length(primaryRayLength);
// Value close to 0.0: close to the horizon
// Value close to 1.0: above in the sky
float w_stop_gt_lprl = 0.5 * (1.0 + czm_approximateTanh(x));
// The ray should start from the first intersection with the outer atmopshere, or from the camera position, if it is inside the atmosphere.
float start_0 = primaryRayAtmosphereIntersect.start;
primaryRayAtmosphereIntersect.start = max(primaryRayAtmosphereIntersect.start, 0.0);
// The ray should end at the exit from the atmosphere or at the distance to the vertex, whichever is smaller.
primaryRayAtmosphereIntersect.stop = min(primaryRayAtmosphereIntersect.stop, length(primaryRayLength));
// For the number of ray steps, distinguish inside or outside atmosphere (outer space)
// (1) from outer space we have to use more ray steps to get a realistic rendering
// (2) within atmosphere we need fewer steps for faster rendering
float x_o_a = start_0 - ATMOSPHERE_THICKNESS; // ATMOSPHERE_THICKNESS used as an ad-hoc constant, no precise meaning here, only the order of magnitude matters
float w_inside_atmosphere = 1.0 - 0.5 * (1.0 + czm_approximateTanh(x_o_a));
int PRIMARY_STEPS = PRIMARY_STEPS_MAX - int(w_inside_atmosphere * 12.0); // Number of times the ray from the camera to the world position (primary ray) is sampled.
int LIGHT_STEPS = LIGHT_STEPS_MAX - int(w_inside_atmosphere * 2.0); // Number of times the light is sampled from the light source's intersection with the atmosphere to a sample position on the primary ray.
// Setup for sampling positions along the ray - starting from the intersection with the outer ring of the atmosphere.
float rayPositionLength = primaryRayAtmosphereIntersect.start;
// (1) Outside the atmosphere: constant rayStepLength
// (2) Inside atmosphere: variable rayStepLength to compensate the rough rendering of the smaller number of ray steps
float totalRayLength = primaryRayAtmosphereIntersect.stop - rayPositionLength;
float rayStepLengthIncrease = w_inside_atmosphere * ((1.0 - w_stop_gt_lprl) * totalRayLength / (float(PRIMARY_STEPS * (PRIMARY_STEPS + 1)) / 2.0));
float rayStepLength = max(1.0 - w_inside_atmosphere, w_stop_gt_lprl) * totalRayLength / max(7.0 * w_inside_atmosphere, float(PRIMARY_STEPS));
vec3 rayleighAccumulation = vec3(0.0);
vec3 mieAccumulation = vec3(0.0);
vec2 opticalDepth = vec2(0.0);
vec2 heightScale = vec2(czm_atmosphereRayleighScaleHeight, czm_atmosphereMieScaleHeight);
// Sample positions on the primary ray.
for (int i = 0; i < PRIMARY_STEPS_MAX; ++i) {
// The loop should be: for (int i = 0; i < PRIMARY_STEPS; ++i) {...} but WebGL1 cannot
// loop with non-constant condition, so it has to break early instead
if (i >= PRIMARY_STEPS) {
break;
}
// Calculate sample position along viewpoint ray.
vec3 samplePosition = primaryRay.origin + primaryRay.direction * (rayPositionLength + rayStepLength);
// Calculate height of sample position above ellipsoid.
float sampleHeight = length(samplePosition) - atmosphereInnerRadius;
// Calculate and accumulate density of particles at the sample position.
vec2 sampleDensity = exp(-sampleHeight / heightScale) * rayStepLength;
opticalDepth += sampleDensity;
// Generate ray from the sample position segment to the light source, up to the outer ring of the atmosphere.
czm_ray lightRay = czm_ray(samplePosition, lightDirection);
czm_raySegment lightRayAtmosphereIntersect = czm_raySphereIntersectionInterval(lightRay, origin, atmosphereOuterRadius);
float lightStepLength = lightRayAtmosphereIntersect.stop / float(LIGHT_STEPS);
float lightPositionLength = 0.0;
vec2 lightOpticalDepth = vec2(0.0);
// Sample positions along the light ray, to accumulate incidence of light on the latest sample segment.
for (int j = 0; j < LIGHT_STEPS_MAX; ++j) {
// The loop should be: for (int j = 0; i < LIGHT_STEPS; ++j) {...} but WebGL1 cannot
// loop with non-constant condition, so it has to break early instead
if (j >= LIGHT_STEPS) {
break;
}
// Calculate sample position along light ray.
vec3 lightPosition = samplePosition + lightDirection * (lightPositionLength + lightStepLength * 0.5);
// Calculate height of the light sample position above ellipsoid.
float lightHeight = length(lightPosition) - atmosphereInnerRadius;
// Calculate density of photons at the light sample position.
lightOpticalDepth += exp(-lightHeight / heightScale) * lightStepLength;
// Increment distance on light ray.
lightPositionLength += lightStepLength;
}
// Compute attenuation via the primary ray and the light ray.
vec3 attenuation = exp(-((czm_atmosphereMieCoefficient * (opticalDepth.y + lightOpticalDepth.y)) + (czm_atmosphereRayleighCoefficient * (opticalDepth.x + lightOpticalDepth.x))));
// Accumulate the scattering.
rayleighAccumulation += sampleDensity.x * attenuation;
mieAccumulation += sampleDensity.y * attenuation;
// Increment distance on primary ray.
rayPositionLength += (rayStepLength += rayStepLengthIncrease);
}
// Compute the scattering amount.
rayleighColor = czm_atmosphereRayleighCoefficient * rayleighAccumulation;
mieColor = czm_atmosphereMieCoefficient * mieAccumulation;
// Compute the transmittance i.e. how much light is passing through the atmosphere.
opacity = length(exp(-((czm_atmosphereMieCoefficient * opticalDepth.y) + (czm_atmosphereRayleighCoefficient * opticalDepth.x))));
}
`;var mOt=y(x(),1),gG=`/**
* Applies a 2D texture transformation matrix to texture coordinates.
* This function applies translation, rotation, and scaling transformations
* as specified by the KHR_texture_transform glTF extension.
*
* @name czm_computeTextureTransform
* @glslFunction
*
* @param {vec2} texCoord The texture coordinates to transform.
* @param {mat3} textureTransform The 3x3 transformation matrix.
*
* @returns {vec2} The transformed texture coordinates.
*
* @example
* // GLSL declaration
* vec2 czm_computeTextureTransform(vec2 texCoord, mat3 textureTransform);
*
* // Apply texture transform to UV coordinates
* vec2 transformedUV = czm_computeTextureTransform(uv, u_textureTransform);
*/
vec2 czm_computeTextureTransform(vec2 texCoord, mat3 textureTransform)
{
return vec2(textureTransform * vec3(texCoord, 1.0));
}`;var fOt=y(x(),1),bG=`/**
* @private
*/
vec2 cordic(float angle)
{
// Scale the vector by the appropriate factor for the 24 iterations to follow.
vec2 vector = vec2(6.0725293500888267e-1, 0.0);
// Iteration 1
float sense = (angle < 0.0) ? -1.0 : 1.0;
// float factor = sense * 1.0; // 2^-0
mat2 rotation = mat2(1.0, sense, -sense, 1.0);
vector = rotation * vector;
angle -= sense * 7.8539816339744828e-1; // atan(2^-0)
// Iteration 2
sense = (angle < 0.0) ? -1.0 : 1.0;
float factor = sense * 5.0e-1; // 2^-1
rotation[0][1] = factor;
rotation[1][0] = -factor;
vector = rotation * vector;
angle -= sense * 4.6364760900080609e-1; // atan(2^-1)
// Iteration 3
sense = (angle < 0.0) ? -1.0 : 1.0;
factor = sense * 2.5e-1; // 2^-2
rotation[0][1] = factor;
rotation[1][0] = -factor;
vector = rotation * vector;
angle -= sense * 2.4497866312686414e-1; // atan(2^-2)
// Iteration 4
sense = (angle < 0.0) ? -1.0 : 1.0;
factor = sense * 1.25e-1; // 2^-3
rotation[0][1] = factor;
rotation[1][0] = -factor;
vector = rotation * vector;
angle -= sense * 1.2435499454676144e-1; // atan(2^-3)
// Iteration 5
sense = (angle < 0.0) ? -1.0 : 1.0;
factor = sense * 6.25e-2; // 2^-4
rotation[0][1] = factor;
rotation[1][0] = -factor;
vector = rotation * vector;
angle -= sense * 6.2418809995957350e-2; // atan(2^-4)
// Iteration 6
sense = (angle < 0.0) ? -1.0 : 1.0;
factor = sense * 3.125e-2; // 2^-5
rotation[0][1] = factor;
rotation[1][0] = -factor;
vector = rotation * vector;
angle -= sense * 3.1239833430268277e-2; // atan(2^-5)
// Iteration 7
sense = (angle < 0.0) ? -1.0 : 1.0;
factor = sense * 1.5625e-2; // 2^-6
rotation[0][1] = factor;
rotation[1][0] = -factor;
vector = rotation * vector;
angle -= sense * 1.5623728620476831e-2; // atan(2^-6)
// Iteration 8
sense = (angle < 0.0) ? -1.0 : 1.0;
factor = sense * 7.8125e-3; // 2^-7
rotation[0][1] = factor;
rotation[1][0] = -factor;
vector = rotation * vector;
angle -= sense * 7.8123410601011111e-3; // atan(2^-7)
// Iteration 9
sense = (angle < 0.0) ? -1.0 : 1.0;
factor = sense * 3.90625e-3; // 2^-8
rotation[0][1] = factor;
rotation[1][0] = -factor;
vector = rotation * vector;
angle -= sense * 3.9062301319669718e-3; // atan(2^-8)
// Iteration 10
sense = (angle < 0.0) ? -1.0 : 1.0;
factor = sense * 1.953125e-3; // 2^-9
rotation[0][1] = factor;
rotation[1][0] = -factor;
vector = rotation * vector;
angle -= sense * 1.9531225164788188e-3; // atan(2^-9)
// Iteration 11
sense = (angle < 0.0) ? -1.0 : 1.0;
factor = sense * 9.765625e-4; // 2^-10
rotation[0][1] = factor;
rotation[1][0] = -factor;
vector = rotation * vector;
angle -= sense * 9.7656218955931946e-4; // atan(2^-10)
// Iteration 12
sense = (angle < 0.0) ? -1.0 : 1.0;
factor = sense * 4.8828125e-4; // 2^-11
rotation[0][1] = factor;
rotation[1][0] = -factor;
vector = rotation * vector;
angle -= sense * 4.8828121119489829e-4; // atan(2^-11)
// Iteration 13
sense = (angle < 0.0) ? -1.0 : 1.0;
factor = sense * 2.44140625e-4; // 2^-12
rotation[0][1] = factor;
rotation[1][0] = -factor;
vector = rotation * vector;
angle -= sense * 2.4414062014936177e-4; // atan(2^-12)
// Iteration 14
sense = (angle < 0.0) ? -1.0 : 1.0;
factor = sense * 1.220703125e-4; // 2^-13
rotation[0][1] = factor;
rotation[1][0] = -factor;
vector = rotation * vector;
angle -= sense * 1.2207031189367021e-4; // atan(2^-13)
// Iteration 15
sense = (angle < 0.0) ? -1.0 : 1.0;
factor = sense * 6.103515625e-5; // 2^-14
rotation[0][1] = factor;
rotation[1][0] = -factor;
vector = rotation * vector;
angle -= sense * 6.1035156174208773e-5; // atan(2^-14)
// Iteration 16
sense = (angle < 0.0) ? -1.0 : 1.0;
factor = sense * 3.0517578125e-5; // 2^-15
rotation[0][1] = factor;
rotation[1][0] = -factor;
vector = rotation * vector;
angle -= sense * 3.0517578115526096e-5; // atan(2^-15)
// Iteration 17
sense = (angle < 0.0) ? -1.0 : 1.0;
factor = sense * 1.52587890625e-5; // 2^-16
rotation[0][1] = factor;
rotation[1][0] = -factor;
vector = rotation * vector;
angle -= sense * 1.5258789061315762e-5; // atan(2^-16)
// Iteration 18
sense = (angle < 0.0) ? -1.0 : 1.0;
factor = sense * 7.62939453125e-6; // 2^-17
rotation[0][1] = factor;
rotation[1][0] = -factor;
vector = rotation * vector;
angle -= sense * 7.6293945311019700e-6; // atan(2^-17)
// Iteration 19
sense = (angle < 0.0) ? -1.0 : 1.0;
factor = sense * 3.814697265625e-6; // 2^-18
rotation[0][1] = factor;
rotation[1][0] = -factor;
vector = rotation * vector;
angle -= sense * 3.8146972656064961e-6; // atan(2^-18)
// Iteration 20
sense = (angle < 0.0) ? -1.0 : 1.0;
factor = sense * 1.9073486328125e-6; // 2^-19
rotation[0][1] = factor;
rotation[1][0] = -factor;
vector = rotation * vector;
angle -= sense * 1.9073486328101870e-6; // atan(2^-19)
// Iteration 21
sense = (angle < 0.0) ? -1.0 : 1.0;
factor = sense * 9.5367431640625e-7; // 2^-20
rotation[0][1] = factor;
rotation[1][0] = -factor;
vector = rotation * vector;
angle -= sense * 9.5367431640596084e-7; // atan(2^-20)
// Iteration 22
sense = (angle < 0.0) ? -1.0 : 1.0;
factor = sense * 4.76837158203125e-7; // 2^-21
rotation[0][1] = factor;
rotation[1][0] = -factor;
vector = rotation * vector;
angle -= sense * 4.7683715820308884e-7; // atan(2^-21)
// Iteration 23
sense = (angle < 0.0) ? -1.0 : 1.0;
factor = sense * 2.384185791015625e-7; // 2^-22
rotation[0][1] = factor;
rotation[1][0] = -factor;
vector = rotation * vector;
angle -= sense * 2.3841857910155797e-7; // atan(2^-22)
// Iteration 24
sense = (angle < 0.0) ? -1.0 : 1.0;
factor = sense * 1.1920928955078125e-7; // 2^-23
rotation[0][1] = factor;
rotation[1][0] = -factor;
vector = rotation * vector;
// angle -= sense * 1.1920928955078068e-7; // atan(2^-23)
return vector;
}
/**
* Computes the cosine and sine of the provided angle using the CORDIC algorithm.
*
* @name czm_cosineAndSine
* @glslFunction
*
* @param {float} angle The angle in radians.
*
* @returns {vec2} The resulting cosine of the angle (as the x coordinate) and sine of the angle (as the y coordinate).
*
* @example
* vec2 v = czm_cosineAndSine(czm_piOverSix);
* float cosine = v.x;
* float sine = v.y;
*/
vec2 czm_cosineAndSine(float angle)
{
if (angle < -czm_piOverTwo || angle > czm_piOverTwo)
{
if (angle < 0.0)
{
return -cordic(angle + czm_pi);
}
else
{
return -cordic(angle - czm_pi);
}
}
else
{
return cordic(angle);
}
}
`;var AOt=y(x(),1),yG=`/**
* Decodes RGB values packed into a single float at 8-bit precision. Encoded
* representation is equivalent to 0xFFFFFF in JavaScript.
*
* @name czm_decodeRGB8
* @glslFunction
*
* @param {float} encoded Float-encoded RGB values.
* @returns {vec4} Decoded RGB values.
*/
vec4 czm_decodeRGB8(float encoded) {
const float SHIFT_RIGHT16 = 1.0 / 65536.0;
const float SHIFT_RIGHT8 = 1.0 / 256.0;
const float SHIFT_LEFT16 = 65536.0;
const float SHIFT_LEFT8 = 256.0;
vec4 color = vec4(255.0);
color.r = floor(encoded * SHIFT_RIGHT16);
color.g = floor((encoded - color.r * SHIFT_LEFT16) * SHIFT_RIGHT8);
color.b = floor(encoded - color.r * SHIFT_LEFT16 - color.g * SHIFT_LEFT8);
return color / 255.0;
}
`;var bOt=y(x(),1),xG=`/**
* Decompresses texture coordinates that were packed into a single float.
*
* @name czm_decompressTextureCoordinates
* @glslFunction
*
* @param {float} encoded The compressed texture coordinates.
* @returns {vec2} The decompressed texture coordinates.
*/
vec2 czm_decompressTextureCoordinates(float encoded)
{
float temp = encoded / 4096.0;
float xZeroTo4095 = floor(temp);
float stx = xZeroTo4095 / 4095.0;
float sty = (encoded - xZeroTo4095 * 4096.0) / 4095.0;
return vec2(stx, sty);
}
`;var xOt=y(x(),1),CG=`// emulated noperspective
#if (__VERSION__ == 300 || defined(GL_EXT_frag_depth)) && !defined(LOG_DEPTH)
out float v_WindowZ;
#endif
/**
* Emulates GL_DEPTH_CLAMP, which is not available in WebGL 1 or 2.
* GL_DEPTH_CLAMP clamps geometry that is outside the near and far planes,
* capping the shadow volume. More information here:
* https://www.khronos.org/registry/OpenGL/extensions/ARB/ARB_depth_clamp.txt.
*
* When GL_EXT_frag_depth is available we emulate GL_DEPTH_CLAMP by ensuring
* no geometry gets clipped by setting the clip space z value to 0.0 and then
* sending the unaltered screen space z value (using emulated noperspective
* interpolation) to the frag shader where it is clamped to [0,1] and then
* written with gl_FragDepth (see czm_writeDepthClamp). This technique is based on:
* https://stackoverflow.com/questions/5960757/how-to-emulate-gl-depth-clamp-nv.
*
* When GL_EXT_frag_depth is not available, which is the case on some mobile
* devices, we must attempt to fix this only in the vertex shader.
* The approach is to clamp the z value to the far plane, which closes the
* shadow volume but also distorts the geometry, so there can still be artifacts
* on frustum seams.
*
* @name czm_depthClamp
* @glslFunction
*
* @param {vec4} coords The vertex in clip coordinates.
* @returns {vec4} The modified vertex.
*
* @example
* gl_Position = czm_depthClamp(czm_modelViewProjection * vec4(position, 1.0));
*
* @see czm_writeDepthClamp
*/
vec4 czm_depthClamp(vec4 coords)
{
#ifndef LOG_DEPTH
#if __VERSION__ == 300 || defined(GL_EXT_frag_depth)
v_WindowZ = (0.5 * (coords.z / coords.w) + 0.5) * coords.w;
coords.z = 0.0;
#else
coords.z = min(coords.z, coords.w);
#endif
#endif
return coords;
}
`;var TOt=y(x(),1),TG=`/**
* Computes a 3x3 rotation matrix that transforms vectors from an ellipsoid's east-north-up coordinate system
* to eye coordinates. In east-north-up coordinates, x points east, y points north, and z points along the
* surface normal. East-north-up can be used as an ellipsoid's tangent space for operations such as bump mapping.
* <br /><br />
* The ellipsoid is assumed to be centered at the model coordinate's origin.
*
* @name czm_eastNorthUpToEyeCoordinates
* @glslFunction
*
* @param {vec3} positionMC The position on the ellipsoid in model coordinates.
* @param {vec3} normalEC The normalized ellipsoid surface normal, at <code>positionMC</code>, in eye coordinates.
*
* @returns {mat3} A 3x3 rotation matrix that transforms vectors from the east-north-up coordinate system to eye coordinates.
*
* @example
* // Transform a vector defined in the east-north-up coordinate
* // system, (0, 0, 1) which is the surface normal, to eye
* // coordinates.
* mat3 m = czm_eastNorthUpToEyeCoordinates(positionMC, normalEC);
* vec3 normalEC = m * vec3(0.0, 0.0, 1.0);
*/
mat3 czm_eastNorthUpToEyeCoordinates(vec3 positionMC, vec3 normalEC)
{
vec3 tangentMC = normalize(vec3(-positionMC.y, positionMC.x, 0.0)); // normalized surface tangent in model coordinates
vec3 tangentEC = normalize(czm_normal3D * tangentMC); // normalized surface tangent in eye coordinates
vec3 bitangentEC = normalize(cross(normalEC, tangentEC)); // normalized surface bitangent in eye coordinates
return mat3(
tangentEC.x, tangentEC.y, tangentEC.z,
bitangentEC.x, bitangentEC.y, bitangentEC.z,
normalEC.x, normalEC.y, normalEC.z);
}
`;var SOt=y(x(),1),EG=`/**
* DOC_TBA
*
* @name czm_ellipsoidContainsPoint
* @glslFunction
*
*/
bool czm_ellipsoidContainsPoint(vec3 ellipsoid_inverseRadii, vec3 point)
{
vec3 scaled = ellipsoid_inverseRadii * (czm_inverseModelView * vec4(point, 1.0)).xyz;
return (dot(scaled, scaled) <= 1.0);
}
`;var IOt=y(x(),1),SG=`/**
* Approximate uv coordinates based on the ellipsoid normal.
*
* @name czm_ellipsoidTextureCoordinates
* @glslFunction
*/
vec2 czm_ellipsoidTextureCoordinates(vec3 normal)
{
return vec2(atan(normal.y, normal.x) * czm_oneOverTwoPi + 0.5, asin(normal.z) * czm_oneOverPi + 0.5);
}
`;var ROt=y(x(),1),_G=`/**
* Compares <code>left</code> and <code>right</code> componentwise. Returns <code>true</code>
* if they are within <code>epsilon</code> and <code>false</code> otherwise. The inputs
* <code>left</code> and <code>right</code> can be <code>float</code>s, <code>vec2</code>s,
* <code>vec3</code>s, or <code>vec4</code>s.
*
* @name czm_equalsEpsilon
* @glslFunction
*
* @param {} left The first vector.
* @param {} right The second vector.
* @param {float} epsilon The epsilon to use for equality testing.
* @returns {bool} <code>true</code> if the components are within <code>epsilon</code> and <code>false</code> otherwise.
*
* @example
* // GLSL declarations
* bool czm_equalsEpsilon(float left, float right, float epsilon);
* bool czm_equalsEpsilon(vec2 left, vec2 right, float epsilon);
* bool czm_equalsEpsilon(vec3 left, vec3 right, float epsilon);
* bool czm_equalsEpsilon(vec4 left, vec4 right, float epsilon);
*/
bool czm_equalsEpsilon(vec4 left, vec4 right, float epsilon) {
return all(lessThanEqual(abs(left - right), vec4(epsilon)));
}
bool czm_equalsEpsilon(vec3 left, vec3 right, float epsilon) {
return all(lessThanEqual(abs(left - right), vec3(epsilon)));
}
bool czm_equalsEpsilon(vec2 left, vec2 right, float epsilon) {
return all(lessThanEqual(abs(left - right), vec2(epsilon)));
}
bool czm_equalsEpsilon(float left, float right, float epsilon) {
return (abs(left - right) <= epsilon);
}
`;var GOt=y(x(),1),IG=`/**
* DOC_TBA
*
* @name czm_eyeOffset
* @glslFunction
*
* @param {vec4} positionEC DOC_TBA.
* @param {vec3} eyeOffset DOC_TBA.
*
* @returns {vec4} DOC_TBA.
*/
vec4 czm_eyeOffset(vec4 positionEC, vec3 eyeOffset)
{
// This equation is approximate in x and y.
vec4 p = positionEC;
vec4 zEyeOffset = normalize(p) * eyeOffset.z;
p.xy += eyeOffset.xy + zEyeOffset.xy;
p.z += zEyeOffset.z;
return p;
}
`;var WOt=y(x(),1),ZG=`/**
* Transforms a position from eye to window coordinates. The transformation
* from eye to clip coordinates is done using {@link czm_projection}.
* The transform from normalized device coordinates to window coordinates is
* done using {@link czm_viewportTransformation}, which assumes a depth range
* of <code>near = 0</code> and <code>far = 1</code>.
* <br /><br />
* This transform is useful when there is a need to manipulate window coordinates
* in a vertex shader as done by {@link BillboardCollection}.
*
* @name czm_eyeToWindowCoordinates
* @glslFunction
*
* @param {vec4} position The position in eye coordinates to transform.
*
* @returns {vec4} The transformed position in window coordinates.
*
* @see czm_modelToWindowCoordinates
* @see czm_projection
* @see czm_viewportTransformation
* @see BillboardCollection
*
* @example
* vec4 positionWC = czm_eyeToWindowCoordinates(positionEC);
*/
vec4 czm_eyeToWindowCoordinates(vec4 positionEC)
{
vec4 q = czm_projection * positionEC; // clip coordinates
q.xyz /= q.w; // normalized device coordinates
q.xyz = (czm_viewportTransformation * vec4(q.xyz, 1.0)).xyz; // window coordinates
return q;
}
`;var BOt=y(x(),1),RG=`/**
* Approxiamtes atan over the range [0, 1]. Safe to flip output for negative input.
*
* Based on Michal Drobot's approximation from ShaderFastLibs, which in turn is based on
* "Efficient approximations for the arctangent function," Rajan, S. Sichun Wang Inkol, R. Joyal, A., May 2006.
* Adapted from ShaderFastLibs under MIT License.
*
* Chosen for the following characteristics over range [0, 1]:
* - basically no error at 0 and 1, important for getting around range limit (naive atan2 via atan requires infinite range atan)
* - no visible artifacts from first-derivative discontinuities, unlike latitude via range-reduced sqrt asin approximations (at equator)
*
* The original code is x * (-0.1784 * abs(x) - 0.0663 * x * x + 1.0301);
* Removed the abs() in here because it isn't needed, the input range is guaranteed as [0, 1] by how we're approximating atan2.
*
* @name czm_fastApproximateAtan
* @glslFunction
*
* @param {float} x Value between 0 and 1 inclusive.
*
* @returns {float} Approximation of atan(x)
*/
float czm_fastApproximateAtan(float x) {
return x * (-0.1784 * x - 0.0663 * x * x + 1.0301);
}
/**
* Approximation of atan2.
*
* Range reduction math based on nvidia's cg reference implementation for atan2: http://developer.download.nvidia.com/cg/atan2.html
* However, we replaced their atan curve with Michael Drobot's (see above).
*
* @name czm_fastApproximateAtan
* @glslFunction
*
* @param {float} x Value between -1 and 1 inclusive.
* @param {float} y Value between -1 and 1 inclusive.
*
* @returns {float} Approximation of atan2(x, y)
*/
float czm_fastApproximateAtan(float x, float y) {
// atan approximations are usually only reliable over [-1, 1], or, in our case, [0, 1] due to modifications.
// So range-reduce using abs and by flipping whether x or y is on top.
float t = abs(x); // t used as swap and atan result.
float opposite = abs(y);
float adjacent = max(t, opposite);
opposite = min(t, opposite);
t = czm_fastApproximateAtan(opposite / adjacent);
// Undo range reduction
t = czm_branchFreeTernary(abs(y) > abs(x), czm_piOverTwo - t, t);
t = czm_branchFreeTernary(x < 0.0, czm_pi - t, t);
t = czm_branchFreeTernary(y < 0.0, -t, t);
return t;
}
`;var NOt=y(x(),1),VG=`/**
* Gets the color with fog at a distance from the camera.
*
* @name czm_fog
* @glslFunction
*
* @param {float} distanceToCamera The distance to the camera in meters.
* @param {vec3} color The original color.
* @param {vec3} fogColor The color of the fog.
*
* @returns {vec3} The color adjusted for fog at the distance from the camera.
*/
vec3 czm_fog(float distanceToCamera, vec3 color, vec3 fogColor)
{
float scalar = distanceToCamera * czm_fogDensity;
float fog = 1.0 - exp(-(scalar * scalar));
return mix(color, fogColor, fog);
}
/**
* Gets the color with fog at a distance from the camera.
*
* @name czm_fog
* @glslFunction
*
* @param {float} distanceToCamera The distance to the camera in meters.
* @param {vec3} color The original color.
* @param {vec3} fogColor The color of the fog.
* @param {float} fogModifierConstant A constant to modify the appearance of fog.
*
* @returns {vec3} The color adjusted for fog at the distance from the camera.
*/
vec3 czm_fog(float distanceToCamera, vec3 color, vec3 fogColor, float fogModifierConstant)
{
float scalar = distanceToCamera * czm_fogDensity;
float fog = 1.0 - exp(-((fogModifierConstant * scalar + fogModifierConstant) * (scalar * (1.0 + fogModifierConstant))));
return mix(color, fogColor, fog);
}
`;var XOt=y(x(),1),GG=`/**
* Converts a color from RGB space to linear space.
*
* @name czm_gammaCorrect
* @glslFunction
*
* @param {vec3} color The color in RGB space.
* @returns {vec3} The color in linear space.
*/
vec3 czm_gammaCorrect(vec3 color) {
#ifdef HDR
color = pow(color, vec3(czm_gamma));
#endif
return color;
}
vec4 czm_gammaCorrect(vec4 color) {
#ifdef HDR
color.rgb = pow(color.rgb, vec3(czm_gamma));
#endif
return color;
}
`;var MOt=y(x(),1),LG=`/**
* DOC_TBA
*
* @name czm_geodeticSurfaceNormal
* @glslFunction
*
* @param {vec3} positionOnEllipsoid DOC_TBA
* @param {vec3} ellipsoidCenter DOC_TBA
* @param {vec3} oneOverEllipsoidRadiiSquared DOC_TBA
*
* @returns {vec3} DOC_TBA.
*/
vec3 czm_geodeticSurfaceNormal(vec3 positionOnEllipsoid, vec3 ellipsoidCenter, vec3 oneOverEllipsoidRadiiSquared)
{
return normalize((positionOnEllipsoid - ellipsoidCenter) * oneOverEllipsoidRadiiSquared);
}
`;var UOt=y(x(),1),WG=`/**
* An czm_material with default values. Every material's czm_getMaterial
* should use this default material as a base for the material it returns.
* The default normal value is given by materialInput.normalEC.
*
* @name czm_getDefaultMaterial
* @glslFunction
*
* @param {czm_materialInput} input The input used to construct the default material.
*
* @returns {czm_material} The default material.
*
* @see czm_materialInput
* @see czm_material
* @see czm_getMaterial
*/
czm_material czm_getDefaultMaterial(czm_materialInput materialInput)
{
czm_material material;
material.diffuse = vec3(0.0);
material.specular = 0.0;
material.shininess = 1.0;
material.normal = materialInput.normalEC;
material.emission = vec3(0.0);
material.alpha = 1.0;
return material;
}
`;var kOt=y(x(),1),FG=`/**
* Select which direction vector to use for dynamic atmosphere lighting based on an enum value
*
* @name czm_getDynamicAtmosphereLightDirection
* @glslfunction
* @see DynamicAtmosphereLightingType.js
*
* @param {vec3} positionWC the position of the vertex/fragment in world coordinates. This is normalized and returned when dynamic lighting is turned off.
* @param {float} lightEnum The enum value for selecting between light sources.
* @return {vec3} The normalized light direction vector. Depending on the enum value, it is either positionWC, czm_lightDirectionWC or czm_sunDirectionWC
*/
vec3 czm_getDynamicAtmosphereLightDirection(vec3 positionWC, float lightEnum) {
const float NONE = 0.0;
const float SCENE_LIGHT = 1.0;
const float SUNLIGHT = 2.0;
vec3 lightDirection =
positionWC * float(lightEnum == NONE) +
czm_lightDirectionWC * float(lightEnum == SCENE_LIGHT) +
czm_sunDirectionWC * float(lightEnum == SUNLIGHT);
return normalize(lightDirection);
}
`;var OOt=y(x(),1),BG=`/**
* Calculates the intensity of diffusely reflected light.
*
* @name czm_getLambertDiffuse
* @glslFunction
*
* @param {vec3} lightDirectionEC Unit vector pointing to the light source in eye coordinates.
* @param {vec3} normalEC The surface normal in eye coordinates.
*
* @returns {float} The intensity of the diffuse reflection.
*
* @see czm_phong
*
* @example
* float diffuseIntensity = czm_getLambertDiffuse(lightDirectionEC, normalEC);
* float specularIntensity = czm_getSpecular(lightDirectionEC, toEyeEC, normalEC, 200);
* vec3 color = (diffuseColor * diffuseIntensity) + (specularColor * specularIntensity);
*/
float czm_getLambertDiffuse(vec3 lightDirectionEC, vec3 normalEC)
{
return max(dot(lightDirectionEC, normalEC), 0.0);
}
`;var HOt=y(x(),1),wG=`/**
* Calculates the specular intensity of reflected light.
*
* @name czm_getSpecular
* @glslFunction
*
* @param {vec3} lightDirectionEC Unit vector pointing to the light source in eye coordinates.
* @param {vec3} toEyeEC Unit vector pointing to the eye position in eye coordinates.
* @param {vec3} normalEC The surface normal in eye coordinates.
* @param {float} shininess The sharpness of the specular reflection. Higher values create a smaller, more focused specular highlight.
*
* @returns {float} The intensity of the specular highlight.
*
* @see czm_phong
*
* @example
* float diffuseIntensity = czm_getLambertDiffuse(lightDirectionEC, normalEC);
* float specularIntensity = czm_getSpecular(lightDirectionEC, toEyeEC, normalEC, 200);
* vec3 color = (diffuseColor * diffuseIntensity) + (specularColor * specularIntensity);
*/
float czm_getSpecular(vec3 lightDirectionEC, vec3 toEyeEC, vec3 normalEC, float shininess)
{
vec3 toReflectedLight = reflect(-lightDirectionEC, normalEC);
float specular = max(dot(toReflectedLight, toEyeEC), 0.0);
// pow has undefined behavior if both parameters <= 0.
// Prevent this by making sure shininess is at least czm_epsilon2.
return pow(specular, max(shininess, czm_epsilon2));
}
`;var KOt=y(x(),1),NG=`/**
* @private
*/
vec4 czm_getWaterNoise(sampler2D normalMap, vec2 uv, float time, float angleInRadians)
{
float cosAngle = cos(angleInRadians);
float sinAngle = sin(angleInRadians);
// time dependent sampling directions
vec2 s0 = vec2(1.0/17.0, 0.0);
vec2 s1 = vec2(-1.0/29.0, 0.0);
vec2 s2 = vec2(1.0/101.0, 1.0/59.0);
vec2 s3 = vec2(-1.0/109.0, -1.0/57.0);
// rotate sampling direction by specified angle
s0 = vec2((cosAngle * s0.x) - (sinAngle * s0.y), (sinAngle * s0.x) + (cosAngle * s0.y));
s1 = vec2((cosAngle * s1.x) - (sinAngle * s1.y), (sinAngle * s1.x) + (cosAngle * s1.y));
s2 = vec2((cosAngle * s2.x) - (sinAngle * s2.y), (sinAngle * s2.x) + (cosAngle * s2.y));
s3 = vec2((cosAngle * s3.x) - (sinAngle * s3.y), (sinAngle * s3.x) + (cosAngle * s3.y));
vec2 uv0 = (uv/103.0) + (time * s0);
vec2 uv1 = uv/107.0 + (time * s1) + vec2(0.23);
vec2 uv2 = uv/vec2(897.0, 983.0) + (time * s2) + vec2(0.51);
vec2 uv3 = uv/vec2(991.0, 877.0) + (time * s3) + vec2(0.71);
uv0 = fract(uv0);
uv1 = fract(uv1);
uv2 = fract(uv2);
uv3 = fract(uv3);
vec4 noise = (texture(normalMap, uv0)) +
(texture(normalMap, uv1)) +
(texture(normalMap, uv2)) +
(texture(normalMap, uv3));
// average and scale to between -1 and 1
return ((noise / 4.0) - 0.5) * 2.0;
}
`;var qOt=y(x(),1),PG=`/**
* Converts an HSB color (hue, saturation, brightness) to RGB
* HSB <-> RGB conversion with minimal branching: {@link http://lolengine.net/blog/2013/07/27/rgb-to-hsv-in-glsl}
*
* @name czm_HSBToRGB
* @glslFunction
*
* @param {vec3} hsb The color in HSB.
*
* @returns {vec3} The color in RGB.
*
* @example
* vec3 hsb = czm_RGBToHSB(rgb);
* hsb.z *= 0.1;
* rgb = czm_HSBToRGB(hsb);
*/
const vec4 K_HSB2RGB = vec4(1.0, 2.0 / 3.0, 1.0 / 3.0, 3.0);
vec3 czm_HSBToRGB(vec3 hsb)
{
vec3 p = abs(fract(hsb.xxx + K_HSB2RGB.xyz) * 6.0 - K_HSB2RGB.www);
return hsb.z * mix(K_HSB2RGB.xxx, clamp(p - K_HSB2RGB.xxx, 0.0, 1.0), hsb.y);
}
`;var ezt=y(x(),1),XG=`/**
* Converts an HSL color (hue, saturation, lightness) to RGB
* HSL <-> RGB conversion: {@link http://www.chilliant.com/rgb2hsv.html}
*
* @name czm_HSLToRGB
* @glslFunction
*
* @param {vec3} rgb The color in HSL.
*
* @returns {vec3} The color in RGB.
*
* @example
* vec3 hsl = czm_RGBToHSL(rgb);
* hsl.z *= 0.1;
* rgb = czm_HSLToRGB(hsl);
*/
vec3 hueToRGB(float hue)
{
float r = abs(hue * 6.0 - 3.0) - 1.0;
float g = 2.0 - abs(hue * 6.0 - 2.0);
float b = 2.0 - abs(hue * 6.0 - 4.0);
return clamp(vec3(r, g, b), 0.0, 1.0);
}
vec3 czm_HSLToRGB(vec3 hsl)
{
vec3 rgb = hueToRGB(hsl.x);
float c = (1.0 - abs(2.0 * hsl.z - 1.0)) * hsl.y;
return (rgb - 0.5) * c + hsl.z;
}
`;var nzt=y(x(),1),YG=`/**
* Adjusts the hue of a color.
*
* @name czm_hue
* @glslFunction
*
* @param {vec3} rgb The color.
* @param {float} adjustment The amount to adjust the hue of the color in radians.
*
* @returns {float} The color with the hue adjusted.
*
* @example
* vec3 adjustHue = czm_hue(color, czm_pi); // The same as czm_hue(color, -czm_pi)
*/
vec3 czm_hue(vec3 rgb, float adjustment)
{
const mat3 toYIQ = mat3(0.299, 0.587, 0.114,
0.595716, -0.274453, -0.321263,
0.211456, -0.522591, 0.311135);
const mat3 toRGB = mat3(1.0, 0.9563, 0.6210,
1.0, -0.2721, -0.6474,
1.0, -1.107, 1.7046);
vec3 yiq = toYIQ * rgb;
float hue = atan(yiq.z, yiq.y) + adjustment;
float chroma = sqrt(yiq.z * yiq.z + yiq.y * yiq.y);
vec3 color = vec3(yiq.x, chroma * cos(hue), chroma * sin(hue));
return toRGB * color;
}
`;var ozt=y(x(),1),MG=`/**
* Converts a color in linear space to RGB space.
*
* @name czm_inverseGamma
* @glslFunction
*
* @param {vec3} color The color in linear space.
* @returns {vec3} The color in RGB space.
*/
vec3 czm_inverseGamma(vec3 color) {
return pow(color, vec3(1.0 / czm_gamma));
}
`;var szt=y(x(),1),vG=`/**
* Determines if a time interval is empty.
*
* @name czm_isEmpty
* @glslFunction
*
* @param {czm_raySegment} interval The interval to test.
*
* @returns {bool} <code>true</code> if the time interval is empty; otherwise, <code>false</code>.
*
* @example
* bool b0 = czm_isEmpty(czm_emptyRaySegment); // true
* bool b1 = czm_isEmpty(czm_raySegment(0.0, 1.0)); // false
* bool b2 = czm_isEmpty(czm_raySegment(1.0, 1.0)); // false, contains 1.0.
*/
bool czm_isEmpty(czm_raySegment interval)
{
return (interval.stop < 0.0);
}
`;var czt=y(x(),1),UG=`/**
* Determines if a time interval is empty.
*
* @name czm_isFull
* @glslFunction
*
* @param {czm_raySegment} interval The interval to test.
*
* @returns {bool} <code>true</code> if the time interval is empty; otherwise, <code>false</code>.
*
* @example
* bool b0 = czm_isEmpty(czm_emptyRaySegment); // true
* bool b1 = czm_isEmpty(czm_raySegment(0.0, 1.0)); // false
* bool b2 = czm_isEmpty(czm_raySegment(1.0, 1.0)); // false, contains 1.0.
*/
bool czm_isFull(czm_raySegment interval)
{
return (interval.start == 0.0 && interval.stop == czm_infinity);
}
`;var dzt=y(x(),1),DG=`/**
* Computes the fraction of a Web Wercator rectangle at which a given geodetic latitude is located.
*
* @name czm_latitudeToWebMercatorFraction
* @glslFunction
*
* @param {float} latitude The geodetic latitude, in radians.
* @param {float} southMercatorY The Web Mercator coordinate of the southern boundary of the rectangle.
* @param {float} oneOverMercatorHeight The total height of the rectangle in Web Mercator coordinates.
*
* @returns {float} The fraction of the rectangle at which the latitude occurs. If the latitude is the southern
* boundary of the rectangle, the return value will be zero. If it is the northern boundary, the return
* value will be 1.0. Latitudes in between are mapped according to the Web Mercator projection.
*/
float czm_latitudeToWebMercatorFraction(float latitude, float southMercatorY, float oneOverMercatorHeight)
{
float sinLatitude = sin(latitude);
float mercatorY = 0.5 * log((1.0 + sinLatitude) / (1.0 - sinLatitude));
return (mercatorY - southMercatorY) * oneOverMercatorHeight;
}
`;var mzt=y(x(),1),kG=`/**
* Converts a linear RGB color to an sRGB color.
*
* @param {vec3|vec4} linearIn The color in linear color space.
* @returns {vec3|vec4} The color in sRGB color space. The vector type matches the input.
*/
vec3 czm_linearToSrgb(vec3 linearIn)
{
return pow(linearIn, vec3(1.0/2.2));
}
vec4 czm_linearToSrgb(vec4 linearIn)
{
vec3 srgbOut = pow(linearIn.rgb, vec3(1.0/2.2));
return vec4(srgbOut, linearIn.a);
}
`;var fzt=y(x(),1),QG=`/**
* Computes distance from an point in 2D to a line in 2D.
*
* @name czm_lineDistance
* @glslFunction
*
* param {vec2} point1 A point along the line.
* param {vec2} point2 A point along the line.
* param {vec2} point A point that may or may not be on the line.
* returns {float} The distance from the point to the line.
*/
float czm_lineDistance(vec2 point1, vec2 point2, vec2 point) {
return abs((point2.y - point1.y) * point.x - (point2.x - point1.x) * point.y + point2.x * point1.y - point2.y * point1.x) / distance(point2, point1);
}
`;var Azt=y(x(),1),OG=`/**
* Computes the luminance of a color.
*
* @name czm_luminance
* @glslFunction
*
* @param {vec3} rgb The color.
*
* @returns {float} The luminance.
*
* @example
* float light = czm_luminance(vec3(0.0)); // 0.0
* float dark = czm_luminance(vec3(1.0)); // ~1.0
*/
float czm_luminance(vec3 rgb)
{
// Algorithm from Chapter 10 of Graphics Shaders.
const vec3 W = vec3(0.2125, 0.7154, 0.0721);
return dot(rgb, W);
}
`;var bzt=y(x(),1),zG=`/**
* Find the maximum component of a vector.
*
* @name czm_maximumComponent
* @glslFunction
*
* @param {vec2|vec3|vec4} v The input vector.
* @returns {float} The value of the largest component.
*/
float czm_maximumComponent(vec2 v)
{
return max(v.x, v.y);
}
float czm_maximumComponent(vec3 v)
{
return max(max(v.x, v.y), v.z);
}
float czm_maximumComponent(vec4 v)
{
return max(max(max(v.x, v.y), v.z), v.w);
}
`;var xzt=y(x(),1),HG=`/**
* Computes the size of a pixel in meters at a distance from the eye.
* <p>
* Use this version when passing in a custom pixel ratio. For example, passing in 1.0 will return meters per native device pixel.
* </p>
* @name czm_metersPerPixel
* @glslFunction
*
* @param {vec3} positionEC The position to get the meters per pixel in eye coordinates.
* @param {float} pixelRatio The scaling factor from pixel space to coordinate space
*
* @returns {float} The meters per pixel at positionEC.
*/
float czm_metersPerPixel(vec4 positionEC, float pixelRatio)
{
float width = czm_viewport.z;
float height = czm_viewport.w;
float pixelWidth;
float pixelHeight;
float top = czm_frustumPlanes.x;
float bottom = czm_frustumPlanes.y;
float left = czm_frustumPlanes.z;
float right = czm_frustumPlanes.w;
if (czm_sceneMode == czm_sceneMode2D || czm_orthographicIn3D == 1.0)
{
float frustumWidth = right - left;
float frustumHeight = top - bottom;
pixelWidth = frustumWidth / width;
pixelHeight = frustumHeight / height;
}
else
{
float distanceToPixel = -positionEC.z;
float inverseNear = 1.0 / czm_currentFrustum.x;
float tanTheta = top * inverseNear;
pixelHeight = 2.0 * distanceToPixel * tanTheta / height;
tanTheta = right * inverseNear;
pixelWidth = 2.0 * distanceToPixel * tanTheta / width;
}
return max(pixelWidth, pixelHeight) * pixelRatio;
}
/**
* Computes the size of a pixel in meters at a distance from the eye.
* <p>
* Use this version when scaling by pixel ratio.
* </p>
* @name czm_metersPerPixel
* @glslFunction
*
* @param {vec3} positionEC The position to get the meters per pixel in eye coordinates.
*
* @returns {float} The meters per pixel at positionEC.
*/
float czm_metersPerPixel(vec4 positionEC)
{
return czm_metersPerPixel(positionEC, czm_pixelRatio);
}
`;var Tzt=y(x(),1),JG=`/**
* Transforms a position from model to window coordinates. The transformation
* from model to clip coordinates is done using {@link czm_modelViewProjection}.
* The transform from normalized device coordinates to window coordinates is
* done using {@link czm_viewportTransformation}, which assumes a depth range
* of <code>near = 0</code> and <code>far = 1</code>.
* <br /><br />
* This transform is useful when there is a need to manipulate window coordinates
* in a vertex shader as done by {@link BillboardCollection}.
* <br /><br />
* This function should not be confused with {@link czm_viewportOrthographic},
* which is an orthographic projection matrix that transforms from window
* coordinates to clip coordinates.
*
* @name czm_modelToWindowCoordinates
* @glslFunction
*
* @param {vec4} position The position in model coordinates to transform.
*
* @returns {vec4} The transformed position in window coordinates.
*
* @see czm_eyeToWindowCoordinates
* @see czm_modelViewProjection
* @see czm_viewportTransformation
* @see czm_viewportOrthographic
* @see BillboardCollection
*
* @example
* vec4 positionWC = czm_modelToWindowCoordinates(positionMC);
*/
vec4 czm_modelToWindowCoordinates(vec4 position)
{
vec4 positionEC = czm_modelView * position;
vec4 q = czm_projection * positionEC;
q.xyz /= q.w; // normalized device coordinates
q.xyz = (czm_viewportTransformation * vec4(q.xyz, 1.0)).xyz; // window coordinates
return q;
}
`;var Szt=y(x(),1),KG=`/**
* DOC_TBA
*
* @name czm_multiplyWithColorBalance
* @glslFunction
*/
vec3 czm_multiplyWithColorBalance(vec3 left, vec3 right)
{
// Algorithm from Chapter 10 of Graphics Shaders.
const vec3 W = vec3(0.2125, 0.7154, 0.0721);
vec3 target = left * right;
float leftLuminance = dot(left, W);
float rightLuminance = dot(right, W);
float targetLuminance = dot(target, W);
return ((leftLuminance + rightLuminance) / (2.0 * targetLuminance)) * target;
}
`;var Izt=y(x(),1),jG=`/**
* Computes a value that scales with distance. The scaling is clamped at the near and
* far distances, and does not extrapolate. This function works with the
* {@link NearFarScalar} JavaScript class.
*
* @name czm_nearFarScalar
* @glslFunction
*
* @param {vec4} nearFarScalar A vector with 4 components: Near distance (x), Near value (y), Far distance (z), Far value (w).
* @param {float} cameraDistSq The square of the current distance from the camera.
*
* @returns {float} The value at this distance.
*/
float czm_nearFarScalar(vec4 nearFarScalar, float cameraDistSq)
{
float valueAtMin = nearFarScalar.y;
float valueAtMax = nearFarScalar.w;
float nearDistanceSq = nearFarScalar.x * nearFarScalar.x;
float farDistanceSq = nearFarScalar.z * nearFarScalar.z;
float t = (cameraDistSq - nearDistanceSq) / (farDistanceSq - nearDistanceSq);
t = pow(clamp(t, 0.0, 1.0), 0.2);
return mix(valueAtMin, valueAtMax, t);
}
`;var Rzt=y(x(),1),qG=` /**
* Decodes a unit-length vector in 'oct' encoding to a normalized 3-component Cartesian vector.
* The 'oct' encoding is described in "A Survey of Efficient Representations of Independent Unit Vectors",
* Cigolle et al 2014: http://jcgt.org/published/0003/02/01/
*
* @name czm_octDecode
* @param {vec2} encoded The oct-encoded, unit-length vector
* @param {float} range The maximum value of the SNORM range. The encoded vector is stored in log2(rangeMax+1) bits.
* @returns {vec3} The decoded and normalized vector
*/
vec3 czm_octDecode(vec2 encoded, float range)
{
if (encoded.x == 0.0 && encoded.y == 0.0) {
return vec3(0.0, 0.0, 0.0);
}
encoded = encoded / range * 2.0 - 1.0;
vec3 v = vec3(encoded.x, encoded.y, 1.0 - abs(encoded.x) - abs(encoded.y));
if (v.z < 0.0)
{
v.xy = (1.0 - abs(v.yx)) * czm_signNotZero(v.xy);
}
return normalize(v);
}
/**
* Decodes a unit-length vector in 'oct' encoding to a normalized 3-component Cartesian vector.
* The 'oct' encoding is described in "A Survey of Efficient Representations of Independent Unit Vectors",
* Cigolle et al 2014: http://jcgt.org/published/0003/02/01/
*
* @name czm_octDecode
* @param {vec2} encoded The oct-encoded, unit-length vector
* @returns {vec3} The decoded and normalized vector
*/
vec3 czm_octDecode(vec2 encoded)
{
return czm_octDecode(encoded, 255.0);
}
/**
* Decodes a unit-length vector in 'oct' encoding packed into a floating-point number to a normalized 3-component Cartesian vector.
* The 'oct' encoding is described in "A Survey of Efficient Representations of Independent Unit Vectors",
* Cigolle et al 2014: http://jcgt.org/published/0003/02/01/
*
* @name czm_octDecode
* @param {float} encoded The oct-encoded, unit-length vector
* @returns {vec3} The decoded and normalized vector
*/
vec3 czm_octDecode(float encoded)
{
float temp = encoded / 256.0;
float x = floor(temp);
float y = (temp - x) * 256.0;
return czm_octDecode(vec2(x, y));
}
/**
* Decodes three unit-length vectors in 'oct' encoding packed into two floating-point numbers to normalized 3-component Cartesian vectors.
* The 'oct' encoding is described in "A Survey of Efficient Representations of Independent Unit Vectors",
* Cigolle et al 2014: http://jcgt.org/published/0003/02/01/
*
* @name czm_octDecode
* @param {vec2} encoded The packed oct-encoded, unit-length vectors.
* @param {vec3} vector1 One decoded and normalized vector.
* @param {vec3} vector2 One decoded and normalized vector.
* @param {vec3} vector3 One decoded and normalized vector.
*/
void czm_octDecode(vec2 encoded, out vec3 vector1, out vec3 vector2, out vec3 vector3)
{
float temp = encoded.x / 65536.0;
float x = floor(temp);
float encodedFloat1 = (temp - x) * 65536.0;
temp = encoded.y / 65536.0;
float y = floor(temp);
float encodedFloat2 = (temp - y) * 65536.0;
vector1 = czm_octDecode(encodedFloat1);
vector2 = czm_octDecode(encodedFloat2);
vector3 = czm_octDecode(vec2(x, y));
}
`;var Gzt=y(x(),1),$G=`/**
* Packs a depth value into a vec4 that can be represented by unsigned bytes.
*
* @name czm_packDepth
* @glslFunction
*
* @param {float} depth The floating-point depth.
* @returns {vec4} The packed depth.
*/
vec4 czm_packDepth(float depth)
{
// See Aras Pranckevi\u010Dius' post Encoding Floats to RGBA
// http://aras-p.info/blog/2009/07/30/encoding-floats-to-rgba-the-final/
vec4 enc = vec4(1.0, 255.0, 65025.0, 16581375.0) * depth;
enc = fract(enc);
enc -= enc.yzww * vec4(1.0 / 255.0, 1.0 / 255.0, 1.0 / 255.0, 0.0);
return enc;
}
`;var Wzt=y(x(),1),eL=`vec3 lambertianDiffuse(vec3 diffuseColor)
{
return diffuseColor / czm_pi;
}
vec3 fresnelSchlick2(vec3 f0, vec3 f90, float VdotH)
{
float versine = 1.0 - VdotH;
// pow(versine, 5.0) is slow. See https://stackoverflow.com/a/68793086/10082269
float versineSquared = versine * versine;
return f0 + (f90 - f0) * versineSquared * versineSquared * versine;
}
#ifdef USE_ANISOTROPY
/**
* @param {float} bitangentRoughness Material roughness (along the anisotropy bitangent)
* @param {float} tangentialRoughness Anisotropic roughness (along the anisotropy tangent)
* @param {vec3} lightDirection The direction from the fragment to the light source, transformed to tangent-bitangent-normal coordinates
* @param {vec3} viewDirection The direction from the fragment to the camera, transformed to tangent-bitangent-normal coordinates
*/
float smithVisibilityGGX_anisotropic(float bitangentRoughness, float tangentialRoughness, vec3 lightDirection, vec3 viewDirection)
{
vec3 roughnessScale = vec3(tangentialRoughness, bitangentRoughness, 1.0);
float GGXV = lightDirection.z * length(roughnessScale * viewDirection);
float GGXL = viewDirection.z * length(roughnessScale * lightDirection);
float v = 0.5 / (GGXV + GGXL);
return clamp(v, 0.0, 1.0);
}
/**
* @param {float} bitangentRoughness Material roughness (along the anisotropy bitangent)
* @param {float} tangentialRoughness Anisotropic roughness (along the anisotropy tangent)
* @param {vec3} halfwayDirection The unit vector halfway between light and view directions, transformed to tangent-bitangent-normal coordinates
*/
float GGX_anisotropic(float bitangentRoughness, float tangentialRoughness, vec3 halfwayDirection)
{
float roughnessSquared = bitangentRoughness * tangentialRoughness;
vec3 f = halfwayDirection * vec3(bitangentRoughness, tangentialRoughness, roughnessSquared);
float w2 = roughnessSquared / dot(f, f);
return roughnessSquared * w2 * w2 / czm_pi;
}
#endif
/**
* Estimate the geometric self-shadowing of the microfacets in a surface,
* using the Smith Joint GGX visibility function.
* Note: Vis = G / (4 * NdotL * NdotV)
* see Eric Heitz. 2014. Understanding the Masking-Shadowing Function in Microfacet-Based BRDFs. Journal of Computer Graphics Techniques, 3
* see Real-Time Rendering. Page 331 to 336.
* see https://google.github.io/filament/Filament.md.html#materialsystem/specularbrdf/geometricshadowing(specularg)
*
* @param {float} alphaRoughness The roughness of the material, expressed as the square of perceptual roughness.
* @param {float} NdotL The cosine of the angle between the surface normal and the direction to the light source.
* @param {float} NdotV The cosine of the angle between the surface normal and the direction to the camera.
*/
float smithVisibilityGGX(float alphaRoughness, float NdotL, float NdotV)
{
float alphaRoughnessSq = alphaRoughness * alphaRoughness;
float GGXV = NdotL * sqrt(NdotV * NdotV * (1.0 - alphaRoughnessSq) + alphaRoughnessSq);
float GGXL = NdotV * sqrt(NdotL * NdotL * (1.0 - alphaRoughnessSq) + alphaRoughnessSq);
float GGX = GGXV + GGXL;
if (GGX > 0.0)
{
return 0.5 / GGX;
}
return 0.0;
}
/**
* Estimate the fraction of the microfacets in a surface that are aligned with
* the halfway vector, which is aligned halfway between the directions from
* the fragment to the camera and from the fragment to the light source.
*
* @param {float} alphaRoughness The roughness of the material, expressed as the square of perceptual roughness.
* @param {float} NdotH The cosine of the angle between the surface normal and the halfway vector.
* @return {float} The fraction of microfacets aligned to the halfway vector.
*/
float GGX(float alphaRoughness, float NdotH)
{
float alphaRoughnessSquared = alphaRoughness * alphaRoughness;
float f = (NdotH * alphaRoughnessSquared - NdotH) * NdotH + 1.0;
return alphaRoughnessSquared / (czm_pi * f * f);
}
/**
* Compute the strength of the specular reflection due to direct lighting.
*
* @param {vec3} normal The surface normal.
* @param {vec3} lightDirection The unit vector pointing from the fragment to the light source.
* @param {vec3} viewDirection The unit vector pointing from the fragment to the camera.
* @param {vec3} halfwayDirection The unit vector pointing from the fragment to halfway between the light source and the camera.
* @param {float} alphaRoughness The roughness of the material, expressed as the square of perceptual roughness.
* @return {float} The strength of the specular reflection.
*/
float computeDirectSpecularStrength(vec3 normal, vec3 lightDirection, vec3 viewDirection, vec3 halfwayDirection, float alphaRoughness)
{
float NdotL = clamp(dot(normal, lightDirection), 0.0, 1.0);
float NdotV = clamp(dot(normal, viewDirection), 0.0, 1.0);
float G = smithVisibilityGGX(alphaRoughness, NdotL, NdotV);
float NdotH = clamp(dot(normal, halfwayDirection), 0.0, 1.0);
float D = GGX(alphaRoughness, NdotH);
return G * D;
}
/**
* Compute the diffuse and specular contributions using physically based
* rendering. This function only handles direct lighting.
* <p>
* This function only handles the lighting calculations. Metallic/roughness
* and specular/glossy must be handled separately. See {@MaterialStageFS}
* </p>
*
* @name czm_pbrLighting
* @glslFunction
*
* @param {vec3} viewDirectionEC Unit vector pointing from the fragment to the eye position
* @param {vec3} normalEC The surface normal in eye coordinates
* @param {vec3} lightDirectionEC Unit vector pointing to the light source in eye coordinates.
* @param {czm_modelMaterial} The material properties.
* @return {vec3} The computed HDR color
*/
vec3 czm_pbrLighting(vec3 viewDirectionEC, vec3 normalEC, vec3 lightDirectionEC, czm_modelMaterial material)
{
vec3 halfwayDirectionEC = normalize(viewDirectionEC + lightDirectionEC);
float VdotH = clamp(dot(viewDirectionEC, halfwayDirectionEC), 0.0, 1.0);
float NdotL = clamp(dot(normalEC, lightDirectionEC), 0.001, 1.0);
vec3 f0 = material.specular;
float reflectance = czm_maximumComponent(f0);
// Typical dielectrics will have reflectance 0.04, so f90 will be 1.0.
// In this case, at grazing angle, all incident energy is reflected.
vec3 f90 = vec3(clamp(reflectance * 25.0, 0.0, 1.0));
vec3 F = fresnelSchlick2(f0, f90, VdotH);
#if defined(USE_SPECULAR)
F *= material.specularWeight;
#endif
float alphaRoughness = material.roughness * material.roughness;
#ifdef USE_ANISOTROPY
mat3 tbn = mat3(material.anisotropicT, material.anisotropicB, normalEC);
vec3 lightDirection = lightDirectionEC * tbn;
vec3 viewDirection = viewDirectionEC * tbn;
vec3 halfwayDirection = halfwayDirectionEC * tbn;
float anisotropyStrength = material.anisotropyStrength;
float tangentialRoughness = mix(alphaRoughness, 1.0, anisotropyStrength * anisotropyStrength);
float bitangentRoughness = clamp(alphaRoughness, 0.001, 1.0);
float G = smithVisibilityGGX_anisotropic(bitangentRoughness, tangentialRoughness, lightDirection, viewDirection);
float D = GGX_anisotropic(bitangentRoughness, tangentialRoughness, halfwayDirection);
vec3 specularContribution = F * G * D;
#else
float specularStrength = computeDirectSpecularStrength(normalEC, lightDirectionEC, viewDirectionEC, halfwayDirectionEC, alphaRoughness);
vec3 specularContribution = F * specularStrength;
#endif
vec3 diffuseColor = material.diffuse;
// F here represents the specular contribution
vec3 diffuseContribution = (1.0 - F) * lambertianDiffuse(diffuseColor);
// Lo = (diffuse + specular) * Li * NdotL
return (diffuseContribution + specularContribution) * NdotL;
}
`;var Bzt=y(x(),1),tL=`// KhronosGroup https://github.com/KhronosGroup/ToneMapping/tree/main/PBR_Neutral
// Input color is non-negative and resides in the Linear Rec. 709 color space.
// Output color is also Linear Rec. 709, but in the [0, 1] range.
vec3 czm_pbrNeutralTonemapping(vec3 color) {
const float startCompression = 0.8 - 0.04;
const float desaturation = 0.15;
float x = min(color.r, min(color.g, color.b));
float offset = czm_branchFreeTernary(x < 0.08, x - 6.25 * x * x, 0.04);
color -= offset;
float peak = max(color.r, max(color.g, color.b));
if (peak < startCompression) return color;
const float d = 1.0 - startCompression;
float newPeak = 1.0 - d * d / (peak + d - startCompression);
color *= newPeak / peak;
float g = 1.0 - 1.0 / (desaturation * (peak - newPeak) + 1.0);
return mix(color, newPeak * vec3(1.0, 1.0, 1.0), g);
}
`;var Nzt=y(x(),1),nL=`float czm_private_getLambertDiffuseOfMaterial(vec3 lightDirectionEC, czm_material material)
{
return czm_getLambertDiffuse(lightDirectionEC, material.normal);
}
float czm_private_getSpecularOfMaterial(vec3 lightDirectionEC, vec3 toEyeEC, czm_material material)
{
return czm_getSpecular(lightDirectionEC, toEyeEC, material.normal, material.shininess);
}
/**
* Computes a color using the Phong lighting model.
*
* @name czm_phong
* @glslFunction
*
* @param {vec3} toEye A normalized vector from the fragment to the eye in eye coordinates.
* @param {czm_material} material The fragment's material.
*
* @returns {vec4} The computed color.
*
* @example
* vec3 positionToEyeEC = // ...
* czm_material material = // ...
* vec3 lightDirectionEC = // ...
* out_FragColor = czm_phong(normalize(positionToEyeEC), material, lightDirectionEC);
*
* @see czm_getMaterial
*/
vec4 czm_phong(vec3 toEye, czm_material material, vec3 lightDirectionEC)
{
// Diffuse from directional light sources at eye (for top-down)
float diffuse = czm_private_getLambertDiffuseOfMaterial(vec3(0.0, 0.0, 1.0), material);
if (czm_sceneMode == czm_sceneMode3D) {
// (and horizon views in 3D)
diffuse += czm_private_getLambertDiffuseOfMaterial(vec3(0.0, 1.0, 0.0), material);
}
float specular = czm_private_getSpecularOfMaterial(lightDirectionEC, toEye, material);
// Temporary workaround for adding ambient.
vec3 materialDiffuse = material.diffuse * 0.5;
vec3 ambient = materialDiffuse;
vec3 color = ambient + material.emission;
color += materialDiffuse * diffuse * czm_lightColor;
color += material.specular * specular * czm_lightColor;
return vec4(color, material.alpha);
}
vec4 czm_private_phong(vec3 toEye, czm_material material, vec3 lightDirectionEC)
{
float diffuse = czm_private_getLambertDiffuseOfMaterial(lightDirectionEC, material);
float specular = czm_private_getSpecularOfMaterial(lightDirectionEC, toEye, material);
vec3 ambient = vec3(0.0);
vec3 color = ambient + material.emission;
color += material.diffuse * diffuse * czm_lightColor;
color += material.specular * specular * czm_lightColor;
return vec4(color, material.alpha);
}
`;var Xzt=y(x(),1),iL=`/**
* Computes distance from a point to a plane.
*
* @name czm_planeDistance
* @glslFunction
*
* param {vec4} plane A Plane in Hessian Normal Form. See Plane.js
* param {vec3} point A point in the same space as the plane.
* returns {float} The distance from the point to the plane.
*/
float czm_planeDistance(vec4 plane, vec3 point) {
return (dot(plane.xyz, point) + plane.w);
}
/**
* Computes distance from a point to a plane.
*
* @name czm_planeDistance
* @glslFunction
*
* param {vec3} planeNormal Normal for a plane in Hessian Normal Form. See Plane.js
* param {float} planeDistance Distance for a plane in Hessian Normal form. See Plane.js
* param {vec3} point A point in the same space as the plane.
* returns {float} The distance from the point to the plane.
*/
float czm_planeDistance(vec3 planeNormal, float planeDistance, vec3 point) {
return (dot(planeNormal, point) + planeDistance);
}
`;var Mzt=y(x(),1),oL=`/**
* Computes the point along a ray at the given time. <code>time</code> can be positive, negative, or zero.
*
* @name czm_pointAlongRay
* @glslFunction
*
* @param {czm_ray} ray The ray to compute the point along.
* @param {float} time The time along the ray.
*
* @returns {vec3} The point along the ray at the given time.
*
* @example
* czm_ray ray = czm_ray(vec3(0.0), vec3(1.0, 0.0, 0.0)); // origin, direction
* vec3 v = czm_pointAlongRay(ray, 2.0); // (2.0, 0.0, 0.0)
*/
vec3 czm_pointAlongRay(czm_ray ray, float time)
{
return ray.origin + (time * ray.direction);
}
`;var Uzt=y(x(),1),rL=`/**
* DOC_TBA
*
* @name czm_rayEllipsoidIntersectionInterval
* @glslFunction
*/
czm_raySegment czm_rayEllipsoidIntersectionInterval(czm_ray ray, vec3 ellipsoid_center, vec3 ellipsoid_inverseRadii)
{
// ray and ellipsoid center in eye coordinates. radii in model coordinates.
vec3 q = ellipsoid_inverseRadii * (czm_inverseModelView * vec4(ray.origin, 1.0)).xyz;
vec3 w = ellipsoid_inverseRadii * (czm_inverseModelView * vec4(ray.direction, 0.0)).xyz;
q = q - ellipsoid_inverseRadii * (czm_inverseModelView * vec4(ellipsoid_center, 1.0)).xyz;
float q2 = dot(q, q);
float qw = dot(q, w);
if (q2 > 1.0) // Outside ellipsoid.
{
if (qw >= 0.0) // Looking outward or tangent (0 intersections).
{
return czm_emptyRaySegment;
}
else // qw < 0.0.
{
float qw2 = qw * qw;
float difference = q2 - 1.0; // Positively valued.
float w2 = dot(w, w);
float product = w2 * difference;
if (qw2 < product) // Imaginary roots (0 intersections).
{
return czm_emptyRaySegment;
}
else if (qw2 > product) // Distinct roots (2 intersections).
{
float discriminant = qw * qw - product;
float temp = -qw + sqrt(discriminant); // Avoid cancellation.
float root0 = temp / w2;
float root1 = difference / temp;
if (root0 < root1)
{
czm_raySegment i = czm_raySegment(root0, root1);
return i;
}
else
{
czm_raySegment i = czm_raySegment(root1, root0);
return i;
}
}
else // qw2 == product. Repeated roots (2 intersections).
{
float root = sqrt(difference / w2);
czm_raySegment i = czm_raySegment(root, root);
return i;
}
}
}
else if (q2 < 1.0) // Inside ellipsoid (2 intersections).
{
float difference = q2 - 1.0; // Negatively valued.
float w2 = dot(w, w);
float product = w2 * difference; // Negatively valued.
float discriminant = qw * qw - product;
float temp = -qw + sqrt(discriminant); // Positively valued.
czm_raySegment i = czm_raySegment(0.0, temp / w2);
return i;
}
else // q2 == 1.0. On ellipsoid.
{
if (qw < 0.0) // Looking inward.
{
float w2 = dot(w, w);
czm_raySegment i = czm_raySegment(0.0, -qw / w2);
return i;
}
else // qw >= 0.0. Looking outward or tangent.
{
return czm_emptyRaySegment;
}
}
}
`;var kzt=y(x(),1),sL=`/**
* Compute the intersection interval of a ray with a sphere.
*
* @name czm_raySphereIntersectionInterval
* @glslFunction
*
* @param {czm_ray} ray The ray.
* @param {vec3} center The center of the sphere.
* @param {float} radius The radius of the sphere.
* @return {czm_raySegment} The intersection interval of the ray with the sphere.
*/
czm_raySegment czm_raySphereIntersectionInterval(czm_ray ray, vec3 center, float radius)
{
vec3 o = ray.origin;
vec3 d = ray.direction;
vec3 oc = o - center;
float a = dot(d, d);
float b = 2.0 * dot(d, oc);
float c = dot(oc, oc) - (radius * radius);
float det = (b * b) - (4.0 * a * c);
if (det < 0.0) {
return czm_emptyRaySegment;
}
float sqrtDet = sqrt(det);
float t0 = (-b - sqrtDet) / (2.0 * a);
float t1 = (-b + sqrtDet) / (2.0 * a);
czm_raySegment result = czm_raySegment(t0, t1);
return result;
}
`;var Ozt=y(x(),1),aL=`float czm_readDepth(sampler2D depthTexture, vec2 texCoords)
{
return czm_reverseLogDepth(texture(depthTexture, texCoords).r);
}
`;var Hzt=y(x(),1),cL=`/**
* Reads a value previously transformed with {@link czm_writeNonPerspective}
* by dividing it by \`w\`, the value used in the perspective divide.
* This function is intended to be called in a fragment shader to access a
* \`varying\` that should not be subject to perspective interpolation.
* For example, screen-space texture coordinates. The value should have been
* previously written in the vertex shader with a call to
* {@link czm_writeNonPerspective}.
*
* @name czm_readNonPerspective
* @glslFunction
*
* @param {float|vec2|vec3|vec4} value The non-perspective value to be read.
* @param {float} oneOverW One over the perspective divide value, \`w\`. Usually this is simply \`gl_FragCoord.w\`.
* @returns {float|vec2|vec3|vec4} The usable value.
*/
float czm_readNonPerspective(float value, float oneOverW) {
return value * oneOverW;
}
vec2 czm_readNonPerspective(vec2 value, float oneOverW) {
return value * oneOverW;
}
vec3 czm_readNonPerspective(vec3 value, float oneOverW) {
return value * oneOverW;
}
vec4 czm_readNonPerspective(vec4 value, float oneOverW) {
return value * oneOverW;
}
`;var Kzt=y(x(),1),lL=`float czm_reverseLogDepth(float logZ)
{
#ifdef LOG_DEPTH
float near = czm_currentFrustum.x;
float far = czm_currentFrustum.y;
float log2Depth = logZ * czm_log2FarDepthFromNearPlusOne;
float depthFromNear = exp2(log2Depth) - 1.0;
return far * (1.0 - near / (depthFromNear + near)) / (far - near);
#endif
return logZ;
}
`;var qzt=y(x(),1),dL=`/**
* Converts an RGB color to HSB (hue, saturation, brightness)
* HSB <-> RGB conversion with minimal branching: {@link http://lolengine.net/blog/2013/07/27/rgb-to-hsv-in-glsl}
*
* @name czm_RGBToHSB
* @glslFunction
*
* @param {vec3} rgb The color in RGB.
*
* @returns {vec3} The color in HSB.
*
* @example
* vec3 hsb = czm_RGBToHSB(rgb);
* hsb.z *= 0.1;
* rgb = czm_HSBToRGB(hsb);
*/
const vec4 K_RGB2HSB = vec4(0.0, -1.0 / 3.0, 2.0 / 3.0, -1.0);
vec3 czm_RGBToHSB(vec3 rgb)
{
vec4 p = mix(vec4(rgb.bg, K_RGB2HSB.wz), vec4(rgb.gb, K_RGB2HSB.xy), step(rgb.b, rgb.g));
vec4 q = mix(vec4(p.xyw, rgb.r), vec4(rgb.r, p.yzx), step(p.x, rgb.r));
float d = q.x - min(q.w, q.y);
return vec3(abs(q.z + (q.w - q.y) / (6.0 * d + czm_epsilon7)), d / (q.x + czm_epsilon7), q.x);
}
`;var e3t=y(x(),1),uL=`/**
* Converts an RGB color to HSL (hue, saturation, lightness)
* HSL <-> RGB conversion: {@link http://www.chilliant.com/rgb2hsv.html}
*
* @name czm_RGBToHSL
* @glslFunction
*
* @param {vec3} rgb The color in RGB.
*
* @returns {vec3} The color in HSL.
*
* @example
* vec3 hsl = czm_RGBToHSL(rgb);
* hsl.z *= 0.1;
* rgb = czm_HSLToRGB(hsl);
*/
vec3 RGBtoHCV(vec3 rgb)
{
// Based on work by Sam Hocevar and Emil Persson
vec4 p = (rgb.g < rgb.b) ? vec4(rgb.bg, -1.0, 2.0 / 3.0) : vec4(rgb.gb, 0.0, -1.0 / 3.0);
vec4 q = (rgb.r < p.x) ? vec4(p.xyw, rgb.r) : vec4(rgb.r, p.yzx);
float c = q.x - min(q.w, q.y);
float h = abs((q.w - q.y) / (6.0 * c + czm_epsilon7) + q.z);
return vec3(h, c, q.x);
}
vec3 czm_RGBToHSL(vec3 rgb)
{
vec3 hcv = RGBtoHCV(rgb);
float l = hcv.z - hcv.y * 0.5;
float s = hcv.y / (1.0 - abs(l * 2.0 - 1.0) + czm_epsilon7);
return vec3(hcv.x, s, l);
}
`;var n3t=y(x(),1),mL=`/**
* Converts an RGB color to CIE Yxy.
* <p>The conversion is described in
* {@link http://content.gpwiki.org/index.php/D3DBook:High-Dynamic_Range_Rendering#Luminance_Transform|Luminance Transform}
* </p>
*
* @name czm_RGBToXYZ
* @glslFunction
*
* @param {vec3} rgb The color in RGB.
*
* @returns {vec3} The color in CIE Yxy.
*
* @example
* vec3 xyz = czm_RGBToXYZ(rgb);
* xyz.x = max(xyz.x - luminanceThreshold, 0.0);
* rgb = czm_XYZToRGB(xyz);
*/
vec3 czm_RGBToXYZ(vec3 rgb)
{
const mat3 RGB2XYZ = mat3(0.4124, 0.2126, 0.0193,
0.3576, 0.7152, 0.1192,
0.1805, 0.0722, 0.9505);
vec3 xyz = RGB2XYZ * rgb;
vec3 Yxy;
Yxy.r = xyz.g;
float temp = dot(vec3(1.0), xyz);
Yxy.gb = xyz.rg / temp;
return Yxy;
}
`;var o3t=y(x(),1),hL=`/**
* Round a floating point value. This function exists because round() doesn't
* exist in GLSL 1.00.
*
* @param {float|vec2|vec3|vec4} value The value to round
* @param {float|vec2|vec3|vec3} The rounded value. The type matches the input.
*/
float czm_round(float value) {
return floor(value + 0.5);
}
vec2 czm_round(vec2 value) {
return floor(value + 0.5);
}
vec3 czm_round(vec3 value) {
return floor(value + 0.5);
}
vec4 czm_round(vec4 value) {
return floor(value + 0.5);
}
`;var s3t=y(x(),1),fL=`/**
* Adjusts the saturation of a color.
*
* @name czm_saturation
* @glslFunction
*
* @param {vec3} rgb The color.
* @param {float} adjustment The amount to adjust the saturation of the color.
*
* @returns {float} The color with the saturation adjusted.
*
* @example
* vec3 greyScale = czm_saturation(color, 0.0);
* vec3 doubleSaturation = czm_saturation(color, 2.0);
*/
vec3 czm_saturation(vec3 rgb, float adjustment)
{
// Algorithm from Chapter 16 of OpenGL Shading Language
const vec3 W = vec3(0.2125, 0.7154, 0.0721);
vec3 intensity = vec3(dot(rgb, W));
return mix(intensity, rgb, adjustment);
}
`;var c3t=y(x(),1),pL=`
float czm_sampleShadowMap(highp samplerCube shadowMap, vec3 d)
{
return czm_unpackDepth(czm_textureCube(shadowMap, d));
}
float czm_sampleShadowMap(highp sampler2D shadowMap, vec2 uv)
{
#ifdef USE_SHADOW_DEPTH_TEXTURE
return texture(shadowMap, uv).r;
#else
return czm_unpackDepth(texture(shadowMap, uv));
#endif
}
float czm_shadowDepthCompare(samplerCube shadowMap, vec3 uv, float depth)
{
return step(depth, czm_sampleShadowMap(shadowMap, uv));
}
float czm_shadowDepthCompare(sampler2D shadowMap, vec2 uv, float depth)
{
return step(depth, czm_sampleShadowMap(shadowMap, uv));
}
`;var d3t=y(x(),1),AL=`
float czm_private_shadowVisibility(float visibility, float nDotL, float normalShadingSmooth, float darkness)
{
#ifdef USE_NORMAL_SHADING
#ifdef USE_NORMAL_SHADING_SMOOTH
float strength = clamp(nDotL / normalShadingSmooth, 0.0, 1.0);
#else
float strength = step(0.0, nDotL);
#endif
visibility *= strength;
#endif
visibility = max(visibility, darkness);
return visibility;
}
#ifdef USE_CUBE_MAP_SHADOW
float czm_shadowVisibility(samplerCube shadowMap, czm_shadowParameters shadowParameters)
{
float depthBias = shadowParameters.depthBias;
float depth = shadowParameters.depth;
float nDotL = shadowParameters.nDotL;
float normalShadingSmooth = shadowParameters.normalShadingSmooth;
float darkness = shadowParameters.darkness;
vec3 uvw = shadowParameters.texCoords;
depth -= depthBias;
float visibility = czm_shadowDepthCompare(shadowMap, uvw, depth);
return czm_private_shadowVisibility(visibility, nDotL, normalShadingSmooth, darkness);
}
#else
float czm_shadowVisibility(sampler2D shadowMap, czm_shadowParameters shadowParameters)
{
float depthBias = shadowParameters.depthBias;
float depth = shadowParameters.depth;
float nDotL = shadowParameters.nDotL;
float normalShadingSmooth = shadowParameters.normalShadingSmooth;
float darkness = shadowParameters.darkness;
vec2 uv = shadowParameters.texCoords;
depth -= depthBias;
#ifdef USE_SOFT_SHADOWS
vec2 texelStepSize = shadowParameters.texelStepSize;
float radius = 1.0;
float dx0 = -texelStepSize.x * radius;
float dy0 = -texelStepSize.y * radius;
float dx1 = texelStepSize.x * radius;
float dy1 = texelStepSize.y * radius;
float visibility = (
czm_shadowDepthCompare(shadowMap, uv, depth) +
czm_shadowDepthCompare(shadowMap, uv + vec2(dx0, dy0), depth) +
czm_shadowDepthCompare(shadowMap, uv + vec2(0.0, dy0), depth) +
czm_shadowDepthCompare(shadowMap, uv + vec2(dx1, dy0), depth) +
czm_shadowDepthCompare(shadowMap, uv + vec2(dx0, 0.0), depth) +
czm_shadowDepthCompare(shadowMap, uv + vec2(dx1, 0.0), depth) +
czm_shadowDepthCompare(shadowMap, uv + vec2(dx0, dy1), depth) +
czm_shadowDepthCompare(shadowMap, uv + vec2(0.0, dy1), depth) +
czm_shadowDepthCompare(shadowMap, uv + vec2(dx1, dy1), depth)
) * (1.0 / 9.0);
#else
float visibility = czm_shadowDepthCompare(shadowMap, uv, depth);
#endif
return czm_private_shadowVisibility(visibility, nDotL, normalShadingSmooth, darkness);
}
#endif
`;var m3t=y(x(),1),gL=`/**
* Returns 1.0 if the given value is positive or zero, and -1.0 if it is negative. This is similar to the GLSL
* built-in function <code>sign</code> except that returns 1.0 instead of 0.0 when the input value is 0.0.
*
* @name czm_signNotZero
* @glslFunction
*
* @param {} value The value for which to determine the sign.
* @returns {} 1.0 if the value is positive or zero, -1.0 if the value is negative.
*/
float czm_signNotZero(float value)
{
return value >= 0.0 ? 1.0 : -1.0;
}
vec2 czm_signNotZero(vec2 value)
{
return vec2(czm_signNotZero(value.x), czm_signNotZero(value.y));
}
vec3 czm_signNotZero(vec3 value)
{
return vec3(czm_signNotZero(value.x), czm_signNotZero(value.y), czm_signNotZero(value.z));
}
vec4 czm_signNotZero(vec4 value)
{
return vec4(czm_signNotZero(value.x), czm_signNotZero(value.y), czm_signNotZero(value.z), czm_signNotZero(value.w));
}
`;var f3t=y(x(),1),bL=`/**
* Computes a color from the third order spherical harmonic coefficients and a normalized direction vector.
* <p>
* The order of the coefficients is [L00, L1_1, L10, L11, L2_2, L2_1, L20, L21, L22].
* </p>
*
* @name czm_sphericalHarmonics
* @glslFunction
*
* @param {vec3} normal The normalized direction.
* @param {vec3[9]} coefficients The third order spherical harmonic coefficients.
* @returns {vec3} The color at the direction.
*
* @see https://graphics.stanford.edu/papers/envmap/envmap.pdf
*/
vec3 czm_sphericalHarmonics(vec3 normal, vec3 coefficients[9])
{
vec3 L00 = coefficients[0];
vec3 L1_1 = coefficients[1];
vec3 L10 = coefficients[2];
vec3 L11 = coefficients[3];
vec3 L2_2 = coefficients[4];
vec3 L2_1 = coefficients[5];
vec3 L20 = coefficients[6];
vec3 L21 = coefficients[7];
vec3 L22 = coefficients[8];
float x = normal.x;
float y = normal.y;
float z = normal.z;
vec3 L =
L00
+ L1_1 * y
+ L10 * z
+ L11 * x
+ L2_2 * (y * x)
+ L2_1 * (y * z)
+ L20 * (3.0 * z * z - 1.0)
+ L21 * (z * x)
+ L22 * (x * x - y * y);
return max(L, vec3(0.0));
}
`;var A3t=y(x(),1),yL=`/**
* Converts an sRGB color to a linear RGB color.
*
* @param {vec3|vec4} srgbIn The color in sRGB space
* @returns {vec3|vec4} The color in linear color space. The vector type matches the input.
*/
vec3 czm_srgbToLinear(vec3 srgbIn)
{
return pow(srgbIn, vec3(2.2));
}
vec4 czm_srgbToLinear(vec4 srgbIn)
{
vec3 linearOut = pow(srgbIn.rgb, vec3(2.2));
return vec4(linearOut, srgbIn.a);
}
`;var b3t=y(x(),1),xL=`/**
* Creates a matrix that transforms vectors from tangent space to eye space.
*
* @name czm_tangentToEyeSpaceMatrix
* @glslFunction
*
* @param {vec3} normalEC The normal vector in eye coordinates.
* @param {vec3} tangentEC The tangent vector in eye coordinates.
* @param {vec3} bitangentEC The bitangent vector in eye coordinates.
*
* @returns {mat3} The matrix that transforms from tangent space to eye space.
*
* @example
* mat3 tangentToEye = czm_tangentToEyeSpaceMatrix(normalEC, tangentEC, bitangentEC);
* vec3 normal = tangentToEye * texture(normalMap, st).xyz;
*/
mat3 czm_tangentToEyeSpaceMatrix(vec3 normalEC, vec3 tangentEC, vec3 bitangentEC)
{
vec3 normal = normalize(normalEC);
vec3 tangent = normalize(tangentEC);
vec3 bitangent = normalize(bitangentEC);
return mat3(tangent.x , tangent.y , tangent.z,
bitangent.x, bitangent.y, bitangent.z,
normal.x , normal.y , normal.z);
}
`;var x3t=y(x(),1),CL=`/**
* A wrapper around the texture (WebGL2) / textureCube (WebGL1)
* function to allow for WebGL 1 support.
*
* @name czm_textureCube
* @glslFunction
*
* @param {samplerCube} sampler The sampler.
* @param {vec3} p The coordinate at which to sample the texture.
*/
vec4 czm_textureCube(samplerCube sampler, vec3 p) {
#if __VERSION__ == 300
return texture(sampler, p);
#else
return textureCube(sampler, p);
#endif
}
/**
* A wrapper around the textureLod (WebGL2) / textureCube (WebGL1)
* function to allow for WebGL 1 support in fragment shaders.
*
* @name czm_textureCubeLod
* @glslFunction
*
* @param {samplerCube} sampler The sampler.
* @param {vec3} p The coordinate at which to sample the texture.
* @param {float} lod The mipmap level from which to sample.
*/
vec4 czm_textureCube(samplerCube sampler, vec3 p, float lod) {
#if __VERSION__ == 300
return textureLod(sampler, p, lod);
#elif defined(GL_EXT_shader_texture_lod)
return textureCubeLodEXT(sampler, p, lod);
#endif
}`;var T3t=y(x(),1),TL=`/**
* Transforms a plane.
*
* @name czm_transformPlane
* @glslFunction
*
* @param {vec4} plane The plane in Hessian Normal Form.
* @param {mat4} transform The inverse-transpose of a transformation matrix.
*/
vec4 czm_transformPlane(vec4 plane, mat4 transform) {
vec4 transformedPlane = transform * plane;
// Convert the transformed plane to Hessian Normal Form
float normalMagnitude = length(transformedPlane.xyz);
return transformedPlane / normalMagnitude;
}
`;var S3t=y(x(),1),EL=`/**
* Translates a position (or any <code>vec3</code>) that was encoded with {@link EncodedCartesian3},
* and then provided to the shader as separate <code>high</code> and <code>low</code> bits to
* be relative to the eye. As shown in the example, the position can then be transformed in eye
* or clip coordinates using {@link czm_modelViewRelativeToEye} or {@link czm_modelViewProjectionRelativeToEye},
* respectively.
* <p>
* This technique, called GPU RTE, eliminates jittering artifacts when using large coordinates as
* described in {@link http://help.agi.com/AGIComponents/html/BlogPrecisionsPrecisions.htm|Precisions, Precisions}.
* </p>
*
* @name czm_translateRelativeToEye
* @glslFunction
*
* @param {vec3} high The position's high bits.
* @param {vec3} low The position's low bits.
* @returns {vec3} The position translated to be relative to the camera's position.
*
* @example
* in vec3 positionHigh;
* in vec3 positionLow;
*
* void main()
* {
* vec4 p = czm_translateRelativeToEye(positionHigh, positionLow);
* gl_Position = czm_modelViewProjectionRelativeToEye * p;
* }
*
* @see czm_modelViewRelativeToEye
* @see czm_modelViewProjectionRelativeToEye
* @see czm_computePosition
* @see EncodedCartesian3
*/
vec4 czm_translateRelativeToEye(vec3 high, vec3 low)
{
vec3 highDifference = high - czm_encodedCameraPositionMCHigh;
// This check handles the case when NaN values have gotten into \`highDifference\`.
// Such a thing could happen on devices running iOS.
if (length(highDifference) == 0.0) {
highDifference = vec3(0);
}
vec3 lowDifference = low - czm_encodedCameraPositionMCLow;
return vec4(highDifference + lowDifference, 1.0);
}
`;var I3t=y(x(),1),SL=`/**
* @private
*/
vec4 czm_translucentPhong(vec3 toEye, czm_material material, vec3 lightDirectionEC)
{
// Diffuse from directional light sources at eye (for top-down and horizon views)
float diffuse = czm_getLambertDiffuse(vec3(0.0, 0.0, 1.0), material.normal);
if (czm_sceneMode == czm_sceneMode3D) {
// (and horizon views in 3D)
diffuse += czm_getLambertDiffuse(vec3(0.0, 1.0, 0.0), material.normal);
}
diffuse = clamp(diffuse, 0.0, 1.0);
float specular = czm_getSpecular(lightDirectionEC, toEye, material.normal, material.shininess);
// Temporary workaround for adding ambient.
vec3 materialDiffuse = material.diffuse * 0.5;
vec3 ambient = materialDiffuse;
vec3 color = ambient + material.emission;
color += materialDiffuse * diffuse * czm_lightColor;
color += material.specular * specular * czm_lightColor;
return vec4(color, material.alpha);
}
`;var R3t=y(x(),1),_L=`/**
* Returns the transpose of the matrix. The input <code>matrix</code> can be
* a <code>mat2</code>, <code>mat3</code>, or <code>mat4</code>.
*
* @name czm_transpose
* @glslFunction
*
* @param {} matrix The matrix to transpose.
*
* @returns {} The transposed matrix.
*
* @example
* // GLSL declarations
* mat2 czm_transpose(mat2 matrix);
* mat3 czm_transpose(mat3 matrix);
* mat4 czm_transpose(mat4 matrix);
*
* // Transpose a 3x3 rotation matrix to find its inverse.
* mat3 eastNorthUpToEye = czm_eastNorthUpToEyeCoordinates(
* positionMC, normalEC);
* mat3 eyeToEastNorthUp = czm_transpose(eastNorthUpToEye);
*/
mat2 czm_transpose(mat2 matrix)
{
return mat2(
matrix[0][0], matrix[1][0],
matrix[0][1], matrix[1][1]);
}
mat3 czm_transpose(mat3 matrix)
{
return mat3(
matrix[0][0], matrix[1][0], matrix[2][0],
matrix[0][1], matrix[1][1], matrix[2][1],
matrix[0][2], matrix[1][2], matrix[2][2]);
}
mat4 czm_transpose(mat4 matrix)
{
return mat4(
matrix[0][0], matrix[1][0], matrix[2][0], matrix[3][0],
matrix[0][1], matrix[1][1], matrix[2][1], matrix[3][1],
matrix[0][2], matrix[1][2], matrix[2][2], matrix[3][2],
matrix[0][3], matrix[1][3], matrix[2][3], matrix[3][3]);
}
`;var G3t=y(x(),1),IL=`vec2 getLookupUv(vec2 dimensions, int i) {
int pixY = i / int(dimensions.x);
int pixX = i - (pixY * int(dimensions.x));
float pixelWidth = 1.0 / dimensions.x;
float pixelHeight = 1.0 / dimensions.y;
float u = (float(pixX) + 0.5) * pixelWidth; // sample from center of pixel
float v = (float(pixY) + 0.5) * pixelHeight;
return vec2(u, v);
}
vec4 czm_unpackClippingExtents(highp sampler2D extentsTexture, int index) {
vec2 textureDimensions = vec2(textureSize(extentsTexture, 0));
return texture(extentsTexture, getLookupUv(textureDimensions, index));
}`;var W3t=y(x(),1),ZL=`/**
* Unpacks a vec4 depth value to a float in [0, 1) range.
*
* @name czm_unpackDepth
* @glslFunction
*
* @param {vec4} packedDepth The packed depth.
*
* @returns {float} The floating-point depth in [0, 1) range.
*/
float czm_unpackDepth(vec4 packedDepth)
{
// See Aras Pranckevi\u010Dius' post Encoding Floats to RGBA
// http://aras-p.info/blog/2009/07/30/encoding-floats-to-rgba-the-final/
return dot(packedDepth, vec4(1.0, 1.0 / 255.0, 1.0 / 65025.0, 1.0 / 16581375.0));
}
`;var B3t=y(x(),1),RL=`/**
* Unpack an IEEE 754 single-precision float that is packed as a little-endian unsigned normalized vec4.
*
* @name czm_unpackFloat
* @glslFunction
*
* @param {vec4} packedFloat The packed float.
*
* @returns {float} The floating-point depth in arbitrary range.
*/
float czm_unpackFloat(vec4 packedFloat)
{
// Convert to [0.0, 255.0] and round to integer
packedFloat = floor(packedFloat * 255.0 + 0.5);
float sign = 1.0 - step(128.0, packedFloat[3]) * 2.0;
float exponent = 2.0 * mod(packedFloat[3], 128.0) + step(128.0, packedFloat[2]) - 127.0;
if (exponent == -127.0)
{
return 0.0;
}
float mantissa = mod(packedFloat[2], 128.0) * 65536.0 + packedFloat[1] * 256.0 + packedFloat[0] + float(0x800000);
float result = sign * exp2(exponent - 23.0) * mantissa;
return result;
}
`;var N3t=y(x(),1),VL=`/**
* Useful for reinterpreting texture data as higher-precision values.
* Only works correctly in WebGL 2, which supports the uint type and bitwise operations.
*
* @param {float|vec2|vec3|vec4} 1-4 values from a texture lookup (RGBA channels), normalized to [0.0, 1.0].
* @return {uint} Raw bits as an unsigned integer.
*/
uint czm_unpackTexture(float packedValue) {
float rounded = czm_round(packedValue * 255.0);
return uint(rounded);
}
uint czm_unpackTexture(vec2 packedValue) {
vec2 rounded = czm_round(packedValue * 255.0);
uint byte0 = uint(rounded.x);
uint byte1 = uint(rounded.y);
return byte0 | (byte1 << 8);
}
uint czm_unpackTexture(vec3 packedValue) {
vec3 rounded = czm_round(packedValue * 255.0);
uint byte0 = uint(rounded.x);
uint byte1 = uint(rounded.y);
uint byte2 = uint(rounded.z);
return byte0 | (byte1 << 8) | (byte2 << 16);
}
uint czm_unpackTexture(vec4 packedValue) {
vec4 rounded = czm_round(packedValue * 255.0);
uint byte0 = uint(rounded.x);
uint byte1 = uint(rounded.y);
uint byte2 = uint(rounded.z);
uint byte3 = uint(rounded.w);
return byte0 | (byte1 << 8) | (byte2 << 16) | (byte3 << 24);
}
`;var X3t=y(x(),1),GL=`/**
* Unpack unsigned integers of 1-4 bytes. in WebGL 1, there is no uint type,
* so the return value is an int.
* <p>
* There are also precision limitations in WebGL 1. highp int is still limited
* to 24 bits. Above the value of 2^24 = 16777216, precision loss may occur.
* </p>
*
* @param {float|vec2|vec3|vec4} packed The packed value. For vectors, the components are listed in little-endian order.
*
* @return {int} The unpacked value.
*/
int czm_unpackUint(float packedValue) {
float rounded = czm_round(packedValue * 255.0);
return int(rounded);
}
int czm_unpackUint(vec2 packedValue) {
vec2 rounded = czm_round(packedValue * 255.0);
return int(dot(rounded, vec2(1.0, 256.0)));
}
int czm_unpackUint(vec3 packedValue) {
vec3 rounded = czm_round(packedValue * 255.0);
return int(dot(rounded, vec3(1.0, 256.0, 65536.0)));
}
int czm_unpackUint(vec4 packedValue) {
vec4 rounded = czm_round(packedValue * 255.0);
return int(dot(rounded, vec4(1.0, 256.0, 65536.0, 16777216.0)));
}
`;var M3t=y(x(),1),LL=`/**
* Transform metadata values following the EXT_structural_metadata spec
* by multiplying by scale and adding the offset. Operations are always
* performed component-wise, even for matrices.
*
* @param {float|vec2|vec3|vec4|mat2|mat3|mat4} offset The offset to add
* @param {float|vec2|vec3|vec4|mat2|mat3|mat4} scale The scale factor to multiply
* @param {float|vec2|vec3|vec4|mat2|mat3|mat4} value The original value.
*
* @return {float|vec2|vec3|vec4|mat2|mat3|mat4} The transformed value of the same scalar/vector/matrix type as the input.
*/
float czm_valueTransform(float offset, float scale, float value) {
return scale * value + offset;
}
vec2 czm_valueTransform(vec2 offset, vec2 scale, vec2 value) {
return scale * value + offset;
}
vec3 czm_valueTransform(vec3 offset, vec3 scale, vec3 value) {
return scale * value + offset;
}
vec4 czm_valueTransform(vec4 offset, vec4 scale, vec4 value) {
return scale * value + offset;
}
mat2 czm_valueTransform(mat2 offset, mat2 scale, mat2 value) {
return matrixCompMult(scale, value) + offset;
}
mat3 czm_valueTransform(mat3 offset, mat3 scale, mat3 value) {
return matrixCompMult(scale, value) + offset;
}
mat4 czm_valueTransform(mat4 offset, mat4 scale, mat4 value) {
return matrixCompMult(scale, value) + offset;
}
`;var U3t=y(x(),1),WL=`#ifdef LOG_DEPTH
// 1.0 at the near plane, increasing linearly from there.
out float v_depthFromNearPlusOne;
#ifdef SHADOW_MAP
out vec3 v_logPositionEC;
#endif
#endif
vec4 czm_updatePositionDepth(vec4 coords) {
#if defined(LOG_DEPTH)
#ifdef SHADOW_MAP
vec3 logPositionEC = (czm_inverseProjection * coords).xyz;
v_logPositionEC = logPositionEC;
#endif
// With the very high far/near ratios used with the logarithmic depth
// buffer, floating point rounding errors can cause linear depth values
// to end up on the wrong side of the far plane, even for vertices that
// are really nowhere near it. Since we always write a correct logarithmic
// depth value in the fragment shader anyway, we just need to make sure
// such errors don't cause the primitive to be clipped entirely before
// we even get to the fragment shader.
coords.z = clamp(coords.z / coords.w, -1.0, 1.0) * coords.w;
#endif
return coords;
}
/**
* Writes the logarithmic depth to gl_Position using the already computed gl_Position.
*
* @name czm_vertexLogDepth
* @glslFunction
*/
void czm_vertexLogDepth()
{
#ifdef LOG_DEPTH
v_depthFromNearPlusOne = (gl_Position.w - czm_currentFrustum.x) + 1.0;
gl_Position = czm_updatePositionDepth(gl_Position);
#endif
}
/**
* Writes the logarithmic depth to gl_Position using the provided clip coordinates.
* <p>
* An example use case for this function would be moving the vertex in window coordinates
* before converting back to clip coordinates. Use the original vertex clip coordinates.
* </p>
* @name czm_vertexLogDepth
* @glslFunction
*
* @param {vec4} clipCoords The vertex in clip coordinates.
*
* @example
* czm_vertexLogDepth(czm_projection * vec4(positionEyeCoordinates, 1.0));
*/
void czm_vertexLogDepth(vec4 clipCoords)
{
#ifdef LOG_DEPTH
v_depthFromNearPlusOne = (clipCoords.w - czm_currentFrustum.x) + 1.0;
czm_updatePositionDepth(clipCoords);
#endif
}
`;var k3t=y(x(),1),FL=`vec4 czm_screenToEyeCoordinates(vec4 screenCoordinate)
{
// Reconstruct NDC coordinates
float x = 2.0 * screenCoordinate.x - 1.0;
float y = 2.0 * screenCoordinate.y - 1.0;
float z = (screenCoordinate.z - czm_viewportTransformation[3][2]) / czm_viewportTransformation[2][2];
vec4 q = vec4(x, y, z, 1.0);
// Reverse the perspective division to obtain clip coordinates.
q /= screenCoordinate.w;
// Reverse the projection transformation to obtain eye coordinates.
if (!(czm_inverseProjection == mat4(0.0))) // IE and Edge sometimes do something weird with != between mat4s
{
q = czm_inverseProjection * q;
}
else
{
float top = czm_frustumPlanes.x;
float bottom = czm_frustumPlanes.y;
float left = czm_frustumPlanes.z;
float right = czm_frustumPlanes.w;
float near = czm_currentFrustum.x;
float far = czm_currentFrustum.y;
q.x = (q.x * (right - left) + left + right) * 0.5;
q.y = (q.y * (top - bottom) + bottom + top) * 0.5;
q.z = (q.z * (near - far) - near - far) * 0.5;
q.w = 1.0;
}
return q;
}
/**
* Transforms a position from window to eye coordinates.
* The transform from window to normalized device coordinates is done using components
* of (@link czm_viewport} and {@link czm_viewportTransformation} instead of calculating
* the inverse of <code>czm_viewportTransformation</code>. The transformation from
* normalized device coordinates to clip coordinates is done using <code>fragmentCoordinate.w</code>,
* which is expected to be the scalar used in the perspective divide. The transformation
* from clip to eye coordinates is done using {@link czm_inverseProjection}.
*
* @name czm_windowToEyeCoordinates
* @glslFunction
*
* @param {vec4} fragmentCoordinate The position in window coordinates to transform.
*
* @returns {vec4} The transformed position in eye coordinates.
*
* @see czm_modelToWindowCoordinates
* @see czm_eyeToWindowCoordinates
* @see czm_inverseProjection
* @see czm_viewport
* @see czm_viewportTransformation
*
* @example
* vec4 positionEC = czm_windowToEyeCoordinates(gl_FragCoord);
*/
vec4 czm_windowToEyeCoordinates(vec4 fragmentCoordinate)
{
vec2 screenCoordXY = (fragmentCoordinate.xy - czm_viewport.xy) / czm_viewport.zw;
return czm_screenToEyeCoordinates(vec4(screenCoordXY, fragmentCoordinate.zw));
}
vec4 czm_screenToEyeCoordinates(vec2 screenCoordinateXY, float depthOrLogDepth)
{
// See reverseLogDepth.glsl. This is separate to re-use the pow.
#if defined(LOG_DEPTH) || defined(LOG_DEPTH_READ_ONLY)
float near = czm_currentFrustum.x;
float far = czm_currentFrustum.y;
float log2Depth = depthOrLogDepth * czm_log2FarDepthFromNearPlusOne;
float depthFromNear = exp2(log2Depth) - 1.0;
float depthFromCamera = depthFromNear + near;
vec4 screenCoord = vec4(screenCoordinateXY, far * (1.0 - near / depthFromCamera) / (far - near), 1.0);
vec4 eyeCoordinate = czm_screenToEyeCoordinates(screenCoord);
eyeCoordinate.w = 1.0 / depthFromCamera; // Better precision
#else
vec4 screenCoord = vec4(screenCoordinateXY, depthOrLogDepth, 1.0);
vec4 eyeCoordinate = czm_screenToEyeCoordinates(screenCoord);
#endif
return eyeCoordinate;
}
/**
* Transforms a position given as window x/y and a depth or a log depth from window to eye coordinates.
* This function produces more accurate results for window positions with log depth than
* conventionally unpacking the log depth using czm_reverseLogDepth and using the standard version
* of czm_windowToEyeCoordinates.
*
* @name czm_windowToEyeCoordinates
* @glslFunction
*
* @param {vec2} fragmentCoordinateXY The XY position in window coordinates to transform.
* @param {float} depthOrLogDepth A depth or log depth for the fragment.
*
* @see czm_modelToWindowCoordinates
* @see czm_eyeToWindowCoordinates
* @see czm_inverseProjection
* @see czm_viewport
* @see czm_viewportTransformation
*
* @returns {vec4} The transformed position in eye coordinates.
*/
vec4 czm_windowToEyeCoordinates(vec2 fragmentCoordinateXY, float depthOrLogDepth)
{
vec2 screenCoordXY = (fragmentCoordinateXY.xy - czm_viewport.xy) / czm_viewport.zw;
return czm_screenToEyeCoordinates(screenCoordXY, depthOrLogDepth);
}
`;var O3t=y(x(),1),BL=`// emulated noperspective
#if !defined(LOG_DEPTH)
in float v_WindowZ;
#endif
/**
* Emulates GL_DEPTH_CLAMP. Clamps a fragment to the near and far plane
* by writing the fragment's depth. See czm_depthClamp for more details.
*
* @name czm_writeDepthClamp
* @glslFunction
*
* @example
* out_FragColor = color;
* czm_writeDepthClamp();
*
* @see czm_depthClamp
*/
void czm_writeDepthClamp()
{
#if (!defined(LOG_DEPTH) && (__VERSION__ == 300 || defined(GL_EXT_frag_depth)))
gl_FragDepth = clamp(v_WindowZ * gl_FragCoord.w, 0.0, 1.0);
#endif
}
`;var H3t=y(x(),1),wL=`#ifdef LOG_DEPTH
in float v_depthFromNearPlusOne;
#ifdef POLYGON_OFFSET
uniform vec2 u_polygonOffset;
#endif
#endif
/**
* Writes the fragment depth to the logarithmic depth buffer.
* <p>
* Use this when the vertex shader does not call {@link czm_vertexLogDepth}, for example, when
* ray-casting geometry using a full screen quad.
* </p>
* @name czm_writeLogDepth
* @glslFunction
*
* @param {float} depth The depth coordinate, where 1.0 is on the near plane and
* depth increases in eye-space units from there
*
* @example
* czm_writeLogDepth((czm_projection * v_positionEyeCoordinates).w + 1.0);
*/
void czm_writeLogDepth(float depth)
{
#if (defined(LOG_DEPTH) && (__VERSION__ == 300 || defined(GL_EXT_frag_depth)))
// Discard the vertex if it's not between the near and far planes.
// We allow a bit of epsilon on the near plane comparison because a 1.0
// from the vertex shader (indicating the vertex should be _on_ the near
// plane) will not necessarily come here as exactly 1.0.
if (depth <= 0.9999999 || depth > czm_farDepthFromNearPlusOne) {
discard;
}
#ifdef POLYGON_OFFSET
// Polygon offset: m * factor + r * units
float factor = u_polygonOffset[0];
float units = u_polygonOffset[1];
#if (__VERSION__ == 300 || defined(GL_OES_standard_derivatives))
// This factor doesn't work in IE 10
if (factor != 0.0) {
// m = sqrt(dZdX^2 + dZdY^2);
float x = dFdx(depth);
float y = dFdy(depth);
float m = sqrt(x * x + y * y);
// Apply the factor before computing the log depth.
depth += m * factor;
}
#endif
#endif
gl_FragDepth = log2(depth) * czm_oneOverLog2FarDepthFromNearPlusOne;
#ifdef POLYGON_OFFSET
// Apply the units after the log depth.
gl_FragDepth += czm_epsilon7 * units;
#endif
#endif
}
/**
* Writes the fragment depth to the logarithmic depth buffer.
* <p>
* Use this when the vertex shader calls {@link czm_vertexLogDepth}.
* </p>
*
* @name czm_writeLogDepth
* @glslFunction
*/
void czm_writeLogDepth() {
#ifdef LOG_DEPTH
czm_writeLogDepth(v_depthFromNearPlusOne);
#endif
}
`;var K3t=y(x(),1),NL=`/**
* Transforms a value for non-perspective interpolation by multiplying
* it by w, the value used in the perspective divide. This function is
* intended to be called in a vertex shader to compute the value of a
* \`varying\` that should not be subject to perspective interpolation.
* For example, screen-space texture coordinates. The fragment shader
* must call {@link czm_readNonPerspective} to retrieve the final
* non-perspective value.
*
* @name czm_writeNonPerspective
* @glslFunction
*
* @param {float|vec2|vec3|vec4} value The value to be interpolated without accounting for perspective.
* @param {float} w The perspective divide value. Usually this is the computed \`gl_Position.w\`.
* @returns {float|vec2|vec3|vec4} The transformed value, intended to be stored in a \`varying\` and read in the
* fragment shader with {@link czm_readNonPerspective}.
*/
float czm_writeNonPerspective(float value, float w) {
return value * w;
}
vec2 czm_writeNonPerspective(vec2 value, float w) {
return value * w;
}
vec3 czm_writeNonPerspective(vec3 value, float w) {
return value * w;
}
vec4 czm_writeNonPerspective(vec4 value, float w) {
return value * w;
}
`;var q3t=y(x(),1),PL=`/**
* Converts a CIE Yxy color to RGB.
* <p>The conversion is described in
* {@link http://content.gpwiki.org/index.php/D3DBook:High-Dynamic_Range_Rendering#Luminance_Transform|Luminance Transform}
* </p>
*
* @name czm_XYZToRGB
* @glslFunction
*
* @param {vec3} Yxy The color in CIE Yxy.
*
* @returns {vec3} The color in RGB.
*
* @example
* vec3 xyz = czm_RGBToXYZ(rgb);
* xyz.x = max(xyz.x - luminanceThreshold, 0.0);
* rgb = czm_XYZToRGB(xyz);
*/
vec3 czm_XYZToRGB(vec3 Yxy)
{
const mat3 XYZ2RGB = mat3( 3.2405, -0.9693, 0.0556,
-1.5371, 1.8760, -0.2040,
-0.4985, 0.0416, 1.0572);
vec3 xyz;
xyz.r = Yxy.r * Yxy.g / Yxy.b;
xyz.g = Yxy.r;
xyz.b = Yxy.r * (1.0 - Yxy.g - Yxy.b) / Yxy.b;
return XYZ2RGB * xyz;
}
`;var _x={czm_degreesPerRadian:rV,czm_depthRange:sV,czm_epsilon1:aV,czm_epsilon2:cV,czm_epsilon3:lV,czm_epsilon4:dV,czm_epsilon5:uV,czm_epsilon6:mV,czm_epsilon7:hV,czm_infinity:fV,czm_oneOverPi:pV,czm_oneOverTwoPi:AV,czm_passCesium3DTile:gV,czm_passCesium3DTileClassification:bV,czm_passCesium3DTileClassificationIgnoreShow:yV,czm_passCesium3DTileEdges:xV,czm_passClassification:CV,czm_passCompute:TV,czm_passEnvironment:EV,czm_passGaussianSplats:SV,czm_passGlobe:_V,czm_passOpaque:IV,czm_passOverlay:ZV,czm_passTerrainClassification:RV,czm_passTranslucent:VV,czm_passVoxels:GV,czm_pi:LV,czm_piOverFour:WV,czm_piOverSix:FV,czm_piOverThree:BV,czm_piOverTwo:wV,czm_radiansPerDegree:NV,czm_sceneMode2D:PV,czm_sceneMode3D:XV,czm_sceneModeColumbusView:YV,czm_sceneModeMorphing:MV,czm_solarRadius:vV,czm_threePiOver2:UV,czm_twoPi:DV,czm_webMercatorMaxLatitude:kV,czm_depthRangeStruct:QV,czm_material:OV,czm_materialInput:zV,czm_modelMaterial:HV,czm_modelVertexOutput:JV,czm_ray:KV,czm_raySegment:jV,czm_shadowParameters:qV,czm_acesTonemapping:$V,czm_alphaWeight:eG,czm_antialias:tG,czm_applyHSBShift:nG,czm_approximateSphericalCoordinates:iG,czm_approximateTanh:oG,czm_backFacing:rG,czm_branchFreeTernary:sG,czm_cascadeColor:aG,czm_cascadeDistance:cG,czm_cascadeMatrix:lG,czm_cascadeWeights:dG,czm_clipPolygons:uG,czm_columbusViewMorph:mG,czm_computeAtmosphereColor:hG,czm_computeGroundAtmosphereScattering:fG,czm_computePosition:pG,czm_computeScattering:AG,czm_computeTextureTransform:gG,czm_cosineAndSine:bG,czm_decodeRGB8:yG,czm_decompressTextureCoordinates:xG,czm_depthClamp:CG,czm_eastNorthUpToEyeCoordinates:TG,czm_ellipsoidContainsPoint:EG,czm_ellipsoidTextureCoordinates:SG,czm_equalsEpsilon:_G,czm_eyeOffset:IG,czm_eyeToWindowCoordinates:ZG,czm_fastApproximateAtan:RG,czm_fog:VG,czm_gammaCorrect:GG,czm_geodeticSurfaceNormal:LG,czm_getDefaultMaterial:WG,czm_getDynamicAtmosphereLightDirection:FG,czm_getLambertDiffuse:BG,czm_getSpecular:wG,czm_getWaterNoise:NG,czm_HSBToRGB:PG,czm_HSLToRGB:XG,czm_hue:YG,czm_inverseGamma:MG,czm_isEmpty:vG,czm_isFull:UG,czm_latitudeToWebMercatorFraction:DG,czm_linearToSrgb:kG,czm_lineDistance:QG,czm_luminance:OG,czm_maximumComponent:zG,czm_metersPerPixel:HG,czm_modelToWindowCoordinates:JG,czm_multiplyWithColorBalance:KG,czm_nearFarScalar:jG,czm_octDecode:qG,czm_packDepth:$G,czm_pbrLighting:eL,czm_pbrNeutralTonemapping:tL,czm_phong:nL,czm_planeDistance:iL,czm_pointAlongRay:oL,czm_rayEllipsoidIntersectionInterval:rL,czm_raySphereIntersectionInterval:sL,czm_readDepth:aL,czm_readNonPerspective:cL,czm_reverseLogDepth:lL,czm_RGBToHSB:dL,czm_RGBToHSL:uL,czm_RGBToXYZ:mL,czm_round:hL,czm_saturation:fL,czm_shadowDepthCompare:pL,czm_shadowVisibility:AL,czm_signNotZero:gL,czm_sphericalHarmonics:bL,czm_srgbToLinear:yL,czm_tangentToEyeSpaceMatrix:xL,czm_textureCube:CL,czm_transformPlane:TL,czm_translateRelativeToEye:EL,czm_translucentPhong:SL,czm_transpose:_L,czm_unpackClippingExtents:IL,czm_unpackDepth:ZL,czm_unpackFloat:RL,czm_unpackTexture:VL,czm_unpackUint:GL,czm_valueTransform:LL,czm_vertexLogDepth:WL,czm_windowToEyeCoordinates:FL,czm_writeDepthClamp:BL,czm_writeLogDepth:wL,czm_writeNonPerspective:NL,czm_XYZToRGB:PL};var wKt=y(x(),1);function X2e(e,t){let n=e;return n=n.replaceAll("version 300 es",""),n=n.replaceAll(/(texture\()/g,"texture2D("),t?(n=n.replaceAll(/\n\s*(in)\s+(vec\d|mat\d|float)/g,`
varying $2`),/out_FragData_(\d+)/.test(n)&&(n=`#extension GL_EXT_draw_buffers : enable
${n}`,n=n.replaceAll(/layout\s+\(location\s*=\s*\d+\)\s*out\s+vec4\s+out_FragData_\d+;/g,""),n=n.replaceAll(/out_FragData_(\d+)/g,"gl_FragData[$1]")),n=n.replaceAll(/layout\s+\(location\s*=\s*0\)\s*out\s+vec4\s+out_FragColor;/g,""),n=n.replaceAll(/out_FragColor/g,"gl_FragColor"),n=n.replaceAll(/out_FragColor\[(\d+)\]/g,"gl_FragColor[$1]"),/gl_FragDepth/.test(n)&&(n=`#extension GL_EXT_frag_depth : enable
${n}`,n=n.replaceAll(/gl_FragDepth/g,"gl_FragDepthEXT")),n=`#ifdef GL_EXT_shader_texture_lod
#extension GL_EXT_shader_texture_lod : enable
#endif
${n}`,n=`#ifdef GL_OES_standard_derivatives
#extension GL_OES_standard_derivatives : enable
#endif
${n}`):(n=n.replaceAll(/(in)\s+(vec\d|mat\d|float)/g,"attribute $2"),n=n.replaceAll(/(out)\s+(vec\d|mat\d|float)\s+([\w]+);/g,"varying $2 $3;")),n=`#version 100
${n}`,n}var XL=X2e;function dse(e){return e=e.replace(/\/\/.*/g,""),e.replace(/\/\*\*[\s\S]*?\*\//gm,function(t){let n=t.match(/\n/gm).length,i="";for(let o=0;o<n;++o)i+=`
`;return i})}function use(e,t,n){let i;for(let o=0;o<n.length;++o)n[o].name===e&&(i=n[o]);return l(i)||(t=dse(t),i={name:e,glslSource:t,dependsOn:[],requiredBy:[],evaluated:!1},n.push(i)),i}function mse(e,t){if(e.evaluated)return;e.evaluated=!0;let n=e.glslSource.match(/\bczm_[a-zA-Z0-9_]*/g);l(n)&&n!==null&&(n=n.filter(function(i,o){return n.indexOf(i)===o}),n.forEach(function(i){if(i!==e.name&&Ia._czmBuiltinsAndUniforms.hasOwnProperty(i)){let o=use(i,Ia._czmBuiltinsAndUniforms[i],t);e.dependsOn.push(o),o.requiredBy.push(e),mse(o,t)}}))}function Y2e(e){let t=[],n=[];for(;e.length>0;){let o=e.pop();n.push(o),o.requiredBy.length===0&&t.push(o)}for(;t.length>0;){let o=t.shift();e.push(o);for(let r=0;r<o.dependsOn.length;++r){let s=o.dependsOn[r],a=s.requiredBy.indexOf(o);s.requiredBy.splice(a,1),s.requiredBy.length===0&&t.push(s)}}let i=[];for(let o=0;o<n.length;++o)n[o].requiredBy.length!==0&&i.push(n[o])}function M2e(e){let t=[],n=use("main",e,t);mse(n,t),Y2e(t);let i="";for(let o=t.length-1;o>=0;--o)i=`${i+t[o].glslSource}
`;return i.replace(n.glslSource,"")}function hse(e,t,n){let i="",o=e.sources;if(l(o))for(let A=0;A<o.length;++A)i+=`
#line 0
${o[A]}`;i=dse(i);let r;i=i.replace(/#version\s+(.*?)\n/gm,function(A,f){return r=f,`
`});let s=[];i=i.replace(/#extension.*\n/gm,function(A){return s.push(A),`
`}),i=i.replace(/precision\s(lowp|mediump|highp)\s(float|int);/,"");let a=e.pickColorQualifier;l(a)&&(i=Ia.createPickFragmentShaderSource(i,a));let c="",d=s.length;for(let A=0;A<d;A++)c+=s[A];t&&(c+=`
#ifdef GL_FRAGMENT_PRECISION_HIGH
precision highp float;
precision highp int;
#else
precision mediump float;
precision mediump int;
#define highp mediump
#endif
`),n.webgl2&&(c+=`precision highp sampler3D;
`);let u=e.defines;if(l(u))for(let A=0,f=u.length;A<f;++A){let b=u[A];b.length!==0&&(c+=`#define ${b}
`)}n.textureFloatLinear&&(c+=`#define OES_texture_float_linear
`),n.floatingPointTexture&&(c+=`#define OES_texture_float
`);let h="";e.includeBuiltIns&&(h=M2e(i)),c+=`
#line 0
`;let p=h+i;return n.webgl2&&t&&!/layout\s*\(location\s*=\s*0\)\s*out\s+vec4\s+out_FragColor;/g.test(p)&&!/czm_out_FragColor/g.test(p)&&/out_FragColor/g.test(p)&&(c+=`layout(location = 0) out vec4 out_FragColor;
`),c+=h,c+=i,n.webgl2?c=`#version 300 es
${c}`:c=XL(c,t),c}function Ia(e){e=e??Q.EMPTY_OBJECT;let t=e.pickColorQualifier;this.defines=l(e.defines)?e.defines.slice(0):[],this.sources=l(e.sources)?e.sources.slice(0):[],this.pickColorQualifier=t,this.includeBuiltIns=e.includeBuiltIns??!0}Ia.prototype.clone=function(){return new Ia({sources:this.sources,defines:this.defines,pickColorQualifier:this.pickColorQualifier,includeBuiltIns:this.includeBuiltIns})};Ia.replaceMain=function(e,t){return t=`void ${t}()`,e.replace(/void\s+main\s*\(\s*(?:void)?\s*\)/g,t)};Ia.prototype.getCacheKey=function(){let t=this.defines.slice().sort().join(","),n=this.pickColorQualifier,i=this.includeBuiltIns,o=this.sources.join(`
`);return`${t}:${n}:${i}:${o}`};Ia.prototype.createCombinedVertexShader=function(e){return hse(this,!1,e)};Ia.prototype.createCombinedFragmentShader=function(e){return hse(this,!0,e)};Ia._czmBuiltinsAndUniforms={};for(let e in _x)_x.hasOwnProperty(e)&&(Ia._czmBuiltinsAndUniforms[e]=_x[e]);for(let e in yA)if(yA.hasOwnProperty(e)){let t=yA[e];typeof t.getDeclaration=="function"&&(Ia._czmBuiltinsAndUniforms[e]=t.getDeclaration(e))}Ia.createPickVertexShaderSource=function(e){return`${Ia.replaceMain(e,"czm_old_main")}
in vec4 pickColor;
out vec4 czm_pickColor;
void main()
{
czm_old_main();
czm_pickColor = pickColor;
}`};Ia.createPickFragmentShaderSource=function(e,t){let n=Ia.replaceMain(e,"czm_old_main"),i=`${t} vec4 czm_pickColor;
void main()
{
czm_old_main();
if (out_FragColor.a == 0.0) {
discard;
}
out_FragColor = czm_pickColor;
}`;return`${n}
${i}`};function v2e(e,t){let n=e.defines,i=n.length;for(let o=0;o<i;++o)if(n[o]===t)return!0;return!1}function fse(e,t){let n=e.sources,i=n.length;for(let o=0;o<i;++o)if(n[o].indexOf(t)!==-1)return!0;return!1}function pse(e,t){let n=t.length;for(let i=0;i<n;++i){let o=t[i];if(fse(e,o))return o}}var U2e=["v_normalEC","v_normal"];Ia.findNormalVarying=function(e){return fse(e,"#ifdef HAS_NORMALS")?v2e(e,"HAS_NORMALS")?"v_normalEC":void 0:pse(e,U2e)};var D2e=["v_positionEC"];Ia.findPositionVarying=function(e){return pse(e,D2e)};var ze=Ia;function _h(e){this._context=e,this._shaders={},this._numberOfShaders=0,this._shadersToRelease={}}Object.defineProperties(_h.prototype,{numberOfShaders:{get:function(){return this._numberOfShaders}}});_h.prototype.replaceShaderProgram=function(e){return l(e.shaderProgram)&&e.shaderProgram.destroy(),this.getShaderProgram(e)};function k2e(e){let t=Object.keys(e).sort();return JSON.stringify(e,t)}_h.prototype.getShaderProgram=function(e){let t=e.vertexShaderSource,n=e.fragmentShaderSource,i=e.attributeLocations;typeof t=="string"&&(t=new ze({sources:[t]})),typeof n=="string"&&(n=new ze({sources:[n]}));let o=t.getCacheKey(),r=n.getCacheKey(),s=l(i)?k2e(i):"",a=`${o}:${r}:${s}`,c;if(l(this._shaders[a]))c=this._shaders[a],delete this._shadersToRelease[a];else{let d=this._context,u=t.createCombinedVertexShader(d),h=n.createCombinedFragmentShader(d),p=new tn({gl:d._gl,logShaderCompilation:d.logShaderCompilation,debugShaders:d.debugShaders,vertexShaderSource:t,vertexShaderText:u,fragmentShaderSource:n,fragmentShaderText:h,attributeLocations:i});c={cache:this,shaderProgram:p,keyword:a,derivedKeywords:[],count:0},p._cachedShader=c,this._shaders[a]=c,++this._numberOfShaders}return++c.count,c.shaderProgram};_h.prototype.replaceDerivedShaderProgram=function(e,t,n){let i=e._cachedShader,o=t+i.keyword,r=this._shaders[o];if(l(r)){FH(this,r);let s=i.derivedKeywords.indexOf(t);s>-1&&i.derivedKeywords.splice(s,1)}return this.createDerivedShaderProgram(e,t,n)};_h.prototype.getDerivedShaderProgram=function(e,t){let n=e._cachedShader,i=t+n.keyword,o=this._shaders[i];if(l(o))return o.shaderProgram};_h.prototype.createDerivedShaderProgram=function(e,t,n){let i=e._cachedShader,o=t+i.keyword,r=n.vertexShaderSource,s=n.fragmentShaderSource,a=n.attributeLocations;typeof r=="string"&&(r=new ze({sources:[r]})),typeof s=="string"&&(s=new ze({sources:[s]}));let c=this._context,d=r.createCombinedVertexShader(c),u=s.createCombinedFragmentShader(c),h=new tn({gl:c._gl,logShaderCompilation:c.logShaderCompilation,debugShaders:c.debugShaders,vertexShaderSource:r,vertexShaderText:d,fragmentShaderSource:s,fragmentShaderText:u,attributeLocations:a}),p={cache:this,shaderProgram:h,keyword:o,derivedKeywords:[],count:0};return i.derivedKeywords.push(t),h._cachedShader=p,this._shaders[o]=p,h};function FH(e,t){let n=t.derivedKeywords,i=n.length;for(let o=0;o<i;++o){let r=n[o]+t.keyword,s=e._shaders[r];FH(e,s)}delete e._shaders[t.keyword],t.shaderProgram.finalDestroy()}_h.prototype.destroyReleasedShaderPrograms=function(){let e=this._shadersToRelease;for(let t in e)if(e.hasOwnProperty(t)){let n=e[t];FH(this,n),--this._numberOfShaders}this._shadersToRelease={}};_h.prototype.releaseShaderProgram=function(e){if(l(e)){let t=e._cachedShader;t&&--t.count===0&&(this._shadersToRelease[t.keyword]=t)}};_h.prototype.isDestroyed=function(){return!1};_h.prototype.destroy=function(){let e=this._shaders;for(let t in e)e.hasOwnProperty(t)&&e[t].shaderProgram.finalDestroy();return he(this)};var YL=_h;var ajt=y(x(),1);function Ih(e){e=e??Q.EMPTY_OBJECT;let{context:t,source:n,pixelFormat:i=Ke.RGBA,pixelDatatype:o=Oe.UNSIGNED_BYTE,flipY:r=!0,skipColorSpaceConversion:s=!1,sampler:a=new Ht}=e,{width:c,height:d}=e;l(n)&&(l(c)||(c=n.videoWidth??n.naturalWidth??n.width),l(d)||(d=n.videoHeight??n.naturalHeight??n.height));let u=e.preMultiplyAlpha||i===Ke.RGB||i===Ke.LUMINANCE,h=Ke.toInternalFormat(i,o,t),p=Ke.isCompressedFormat(h),A=t._gl,f=p?Ke.compressedTextureSizeInBytes(i,c,d):Ke.textureSizeInBytes(i,o,c,d);this._id=e.id??qn(),this._context=t,this._textureFilterAnisotropic=t._textureFilterAnisotropic,this._textureTarget=A.TEXTURE_2D,this._texture=A.createTexture(),this._internalFormat=h,this._pixelFormat=i,this._pixelDatatype=o,this._width=c,this._height=d,this._dimensions=new M(c,d),this._hasMipmap=!1,this._sizeInBytes=f,this._preMultiplyAlpha=u,this._flipY=r,this._initialized=!1,this._sampler=void 0,this._sampler=a,yse(this,a),A.activeTexture(A.TEXTURE0),A.bindTexture(this._textureTarget,this._texture),l(n)?(s?A.pixelStorei(A.UNPACK_COLORSPACE_CONVERSION_WEBGL,A.NONE):A.pixelStorei(A.UNPACK_COLORSPACE_CONVERSION_WEBGL,A.BROWSER_DEFAULT_WEBGL),l(n.arrayBufferView)?Ke.isCompressedFormat(h)?Q2e(this,n):Ase(this,n):l(n.framebuffer)?z2e(this,n):gse(this,n),this._initialized=!0):bse(this),A.bindTexture(this._textureTarget,null)}function Q2e(e,t){let i=e._context._gl,o=e._textureTarget,r=e._internalFormat,{width:s,height:a}=e;if(i.pixelStorei(i.UNPACK_ALIGNMENT,4),i.pixelStorei(i.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!1),i.pixelStorei(i.UNPACK_FLIP_Y_WEBGL,!1),i.compressedTexImage2D(o,0,r,s,a,0,t.arrayBufferView),l(t.mipLevels)){let c=s,d=a;for(let u=0;u<t.mipLevels.length;++u)c=UD(c),d=UD(d),i.compressedTexImage2D(o,u+1,r,c,d,0,t.mipLevels[u])}}function Ase(e,t){let n=e._context,i=n._gl,o=e._textureTarget,r=e._internalFormat,{width:s,height:a,pixelFormat:c,pixelDatatype:d,flipY:u}=e,h=Ke.alignmentInBytes(c,d,s);i.pixelStorei(i.UNPACK_ALIGNMENT,h),i.pixelStorei(i.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!1),i.pixelStorei(i.UNPACK_FLIP_Y_WEBGL,!1);let{arrayBufferView:p}=t;if(u&&(p=Ke.flipY(p,c,d,s,a)),i.texImage2D(o,0,r,s,a,0,c,Oe.toWebGLConstant(d,n),p),l(t.mipLevels)){let A=s,f=a;for(let b=0;b<t.mipLevels.length;++b)A=UD(A),f=UD(f),i.texImage2D(o,b+1,r,A,f,0,c,Oe.toWebGLConstant(d,n),t.mipLevels[b])}}function O2e(e,t,n,i,o,r){let s=e._context,a=s._gl,{pixelFormat:c,pixelDatatype:d}=e,u=Ke.alignmentInBytes(c,d,o);a.pixelStorei(a.UNPACK_ALIGNMENT,u),a.pixelStorei(a.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!1),a.pixelStorei(a.UNPACK_FLIP_Y_WEBGL,!1),e.flipY&&(t=Ke.flipY(t,c,d,o,r)),a.texSubImage2D(e._textureTarget,0,n,i,o,r,c,Oe.toWebGLConstant(d,s),t)}function z2e(e,t){let n=e._context,i=n._gl;i.pixelStorei(i.UNPACK_ALIGNMENT,4),i.pixelStorei(i.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!1),i.pixelStorei(i.UNPACK_FLIP_Y_WEBGL,!1),t.framebuffer!==n.defaultFramebuffer&&t.framebuffer._bind(),i.copyTexImage2D(e._textureTarget,0,e._internalFormat,t.xOffset,t.yOffset,e.width,e.height,0),t.framebuffer!==n.defaultFramebuffer&&t.framebuffer._unBind()}function gse(e,t){let n=e._context,i=n._gl;i.pixelStorei(i.UNPACK_ALIGNMENT,4),i.pixelStorei(i.UNPACK_PREMULTIPLY_ALPHA_WEBGL,e.preMultiplyAlpha),i.pixelStorei(i.UNPACK_FLIP_Y_WEBGL,e.flipY),i.texImage2D(e._textureTarget,0,e._internalFormat,e.pixelFormat,Oe.toWebGLConstant(e.pixelDatatype,n),t)}function H2e(e,t,n,i){let o=e._context,r=o._gl;r.pixelStorei(r.UNPACK_ALIGNMENT,4),r.pixelStorei(r.UNPACK_PREMULTIPLY_ALPHA_WEBGL,e.preMultiplyAlpha),r.pixelStorei(r.UNPACK_FLIP_Y_WEBGL,e.flipY),r.texSubImage2D(e._textureTarget,0,n,i,e.pixelFormat,Oe.toWebGLConstant(e.pixelDatatype,o),t)}function UD(e){let t=Math.floor(e/2)|0;return Math.max(t,1)}function bse(e){let t=e._context;t._gl.texImage2D(e._textureTarget,0,e._internalFormat,e._width,e._height,0,e._pixelFormat,Oe.toWebGLConstant(e._pixelDatatype,t),null)}Ih.create=function(e){return new Ih(e)};Ih.fromFramebuffer=function(e){e=e??Q.EMPTY_OBJECT;let t=e.context,{pixelFormat:n=Ke.RGB,framebufferXOffset:i=0,framebufferYOffset:o=0,width:r=t.drawingBufferWidth,height:s=t.drawingBufferHeight,framebuffer:a}=e;return new Ih({context:t,width:r,height:s,pixelFormat:n,source:{framebuffer:l(a)?a:t.defaultFramebuffer,xOffset:i,yOffset:o,width:r,height:s}})};Object.defineProperties(Ih.prototype,{id:{get:function(){return this._id}},sampler:{get:function(){return this._sampler},set:function(e){yse(this,e),this._sampler=e}},pixelFormat:{get:function(){return this._pixelFormat}},pixelDatatype:{get:function(){return this._pixelDatatype}},dimensions:{get:function(){return this._dimensions}},preMultiplyAlpha:{get:function(){return this._preMultiplyAlpha}},flipY:{get:function(){return this._flipY}},width:{get:function(){return this._width}},height:{get:function(){return this._height}},sizeInBytes:{get:function(){return this._hasMipmap?Math.floor(this._sizeInBytes*4/3):this._sizeInBytes}},_target:{get:function(){return this._textureTarget}}});function yse(e,t){let{minificationFilter:n,magnificationFilter:i}=t,o=[zt.NEAREST_MIPMAP_NEAREST,zt.NEAREST_MIPMAP_LINEAR,zt.LINEAR_MIPMAP_NEAREST,zt.LINEAR_MIPMAP_LINEAR].includes(n),r=e._context,s=e._pixelFormat,a=e._pixelDatatype;(a===Oe.FLOAT&&!r.textureFloatLinear||a===Oe.HALF_FLOAT&&!r.textureHalfFloatLinear)&&(n=o?zt.NEAREST_MIPMAP_NEAREST:zt.NEAREST,i=li.NEAREST),r.webgl2&&Ke.isDepthFormat(s)&&(n=zt.NEAREST,i=li.NEAREST);let c=r._gl,d=e._textureTarget;c.activeTexture(c.TEXTURE0),c.bindTexture(d,e._texture),c.texParameteri(d,c.TEXTURE_MIN_FILTER,n),c.texParameteri(d,c.TEXTURE_MAG_FILTER,i),c.texParameteri(d,c.TEXTURE_WRAP_S,t.wrapS),c.texParameteri(d,c.TEXTURE_WRAP_T,t.wrapT),l(e._textureFilterAnisotropic)&&c.texParameteri(d,e._textureFilterAnisotropic.TEXTURE_MAX_ANISOTROPY_EXT,t.maximumAnisotropy),c.bindTexture(d,null)}Ih.prototype.copyFrom=function(e){let{xOffset:t=0,yOffset:n=0,source:i,skipColorSpaceConversion:o=!1}=e,s=this._context._gl,a=this._textureTarget;s.activeTexture(s.TEXTURE0),s.bindTexture(a,this._texture);let{width:c,height:d}=i;l(i.videoWidth)&&l(i.videoHeight)?(c=i.videoWidth,d=i.videoHeight):l(i.naturalWidth)&&l(i.naturalHeight)&&(c=i.naturalWidth,d=i.naturalHeight),o?s.pixelStorei(s.UNPACK_COLORSPACE_CONVERSION_WEBGL,s.NONE):s.pixelStorei(s.UNPACK_COLORSPACE_CONVERSION_WEBGL,s.BROWSER_DEFAULT_WEBGL);let u=!1;this._initialized||(t===0&&n===0&&c===this._width&&d===this._height?(l(i.arrayBufferView)?Ase(this,i):gse(this,i),u=!0):(s.pixelStorei(s.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!1),s.pixelStorei(s.UNPACK_FLIP_Y_WEBGL,!1),bse(this)),this._initialized=!0),u||(l(i.arrayBufferView)?O2e(this,i.arrayBufferView,t,n,c,d):H2e(this,i,t,n)),s.bindTexture(a,null)};Ih.prototype.copyFromFramebuffer=function(e,t,n,i,o,r){e=e??0,t=t??0,n=n??0,i=i??0,o=o??this._width,r=r??this._height;let s=this._context._gl,a=this._textureTarget;s.activeTexture(s.TEXTURE0),s.bindTexture(a,this._texture),s.copyTexSubImage2D(a,0,e,t,n,i,o,r),s.bindTexture(a,null),this._initialized=!0};Ih.prototype.generateMipmap=function(e){e=e??lm.DONT_CARE,this._hasMipmap=!0;let t=this._context._gl,n=this._textureTarget;t.hint(t.GENERATE_MIPMAP_HINT,e),t.activeTexture(t.TEXTURE0),t.bindTexture(n,this._texture),t.generateMipmap(n),t.bindTexture(n,null)};Ih.prototype.isDestroyed=function(){return!1};Ih.prototype.destroy=function(){return this._context._gl.deleteTexture(this._texture),he(this)};var Lt=Ih;var ujt=y(x(),1);function Ix(){this._textures={},this._numberOfTextures=0,this._texturesToRelease={}}Object.defineProperties(Ix.prototype,{numberOfTextures:{get:function(){return this._numberOfTextures}}});Ix.prototype.getTexture=function(e){let t=this._textures[e];if(l(t))return delete this._texturesToRelease[e],++t.count,t.texture};Ix.prototype.addTexture=function(e,t){let n={texture:t,count:1};t.finalDestroy=t.destroy;let i=this;t.destroy=function(){--n.count===0&&(i._texturesToRelease[e]=n)},this._textures[e]=n,++this._numberOfTextures};Ix.prototype.destroyReleasedTextures=function(){let e=this._texturesToRelease;for(let t in e)if(e.hasOwnProperty(t)){let n=e[t];delete this._textures[t],n.texture.finalDestroy(),--this._numberOfTextures}this._texturesToRelease={}};Ix.prototype.isDestroyed=function(){return!1};Ix.prototype.destroy=function(){let e=this._textures;for(let t in e)e.hasOwnProperty(t)&&e[t].texture.finalDestroy();return he(this)};var ML=Ix;var h4t=y(x(),1);var Fjt=y(x(),1);var Zjt=y(x(),1);var bjt=y(x(),1);function dm(e){this.planes=e??[]}var vL=[new m,new m,new m];m.clone(m.UNIT_X,vL[0]);m.clone(m.UNIT_Y,vL[1]);m.clone(m.UNIT_Z,vL[2]);var Kb=new m,J2e=new m,xse=new dn(new m(1,0,0),0);dm.fromBoundingSphere=function(e,t){l(t)||(t=new dm);let n=vL.length,i=t.planes;i.length=2*n;let o=e.center,r=e.radius,s=0;for(let a=0;a<n;++a){let c=vL[a],d=i[s],u=i[s+1];l(d)||(d=i[s]=new re),l(u)||(u=i[s+1]=new re),m.multiplyByScalar(c,-r,Kb),m.add(o,Kb,Kb),d.x=c.x,d.y=c.y,d.z=c.z,d.w=-m.dot(c,Kb),m.multiplyByScalar(c,r,Kb),m.add(o,Kb,Kb),u.x=-c.x,u.y=-c.y,u.z=-c.z,u.w=-m.dot(m.negate(c,J2e),Kb),s+=2}return t};dm.prototype.computeVisibility=function(e){let t=this.planes,n=!1;for(let i=0,o=t.length;i<o;++i){let r=e.intersectPlane(dn.fromCartesian4(t[i],xse));if(r===qt.OUTSIDE)return qt.OUTSIDE;r===qt.INTERSECTING&&(n=!0)}return n?qt.INTERSECTING:qt.INSIDE};dm.prototype.computeVisibilityWithPlaneMask=function(e,t){if(t===dm.MASK_OUTSIDE||t===dm.MASK_INSIDE)return t;let n=dm.MASK_INSIDE,i=this.planes;for(let o=0,r=i.length;o<r;++o){let s=o<31?1<<o:0;if(o<31&&(t&s)===0)continue;let a=e.intersectPlane(dn.fromCartesian4(i[o],xse));if(a===qt.OUTSIDE)return dm.MASK_OUTSIDE;a===qt.INTERSECTING&&(n|=s)}return n};dm.MASK_OUTSIDE=4294967295;dm.MASK_INSIDE=0;dm.MASK_INDETERMINATE=2147483647;var Os=dm;function op(e){e=e??Q.EMPTY_OBJECT,this.left=e.left,this._left=void 0,this.right=e.right,this._right=void 0,this.top=e.top,this._top=void 0,this.bottom=e.bottom,this._bottom=void 0,this.near=e.near??1,this._near=this.near,this.far=e.far??5e8,this._far=this.far,this._cullingVolume=new Os,this._orthographicMatrix=new F}function Cse(e){(e.top!==e._top||e.bottom!==e._bottom||e.left!==e._left||e.right!==e._right||e.near!==e._near||e.far!==e._far)&&(e._left=e.left,e._right=e.right,e._top=e.top,e._bottom=e.bottom,e._near=e.near,e._far=e.far,e._orthographicMatrix=F.computeOrthographicOffCenter(e.left,e.right,e.bottom,e.top,e.near,e.far,e._orthographicMatrix))}Object.defineProperties(op.prototype,{projectionMatrix:{get:function(){return Cse(this),this._orthographicMatrix}}});var K2e=new m,j2e=new m,q2e=new m,BH=new m;op.prototype.computeCullingVolume=function(e,t,n){let i=this._cullingVolume.planes,o=this.top,r=this.bottom,s=this.right,a=this.left,c=this.near,d=this.far,u=m.cross(t,n,K2e);m.normalize(u,u);let h=j2e;m.multiplyByScalar(t,c,h),m.add(e,h,h);let p=q2e;m.multiplyByScalar(u,a,p),m.add(h,p,p);let A=i[0];return l(A)||(A=i[0]=new re),A.x=u.x,A.y=u.y,A.z=u.z,A.w=-m.dot(u,p),m.multiplyByScalar(u,s,p),m.add(h,p,p),A=i[1],l(A)||(A=i[1]=new re),A.x=-u.x,A.y=-u.y,A.z=-u.z,A.w=-m.dot(m.negate(u,BH),p),m.multiplyByScalar(n,r,p),m.add(h,p,p),A=i[2],l(A)||(A=i[2]=new re),A.x=n.x,A.y=n.y,A.z=n.z,A.w=-m.dot(n,p),m.multiplyByScalar(n,o,p),m.add(h,p,p),A=i[3],l(A)||(A=i[3]=new re),A.x=-n.x,A.y=-n.y,A.z=-n.z,A.w=-m.dot(m.negate(n,BH),p),A=i[4],l(A)||(A=i[4]=new re),A.x=t.x,A.y=t.y,A.z=t.z,A.w=-m.dot(t,h),m.multiplyByScalar(t,d,p),m.add(e,p,p),A=i[5],l(A)||(A=i[5]=new re),A.x=-t.x,A.y=-t.y,A.z=-t.z,A.w=-m.dot(m.negate(t,BH),p),this._cullingVolume};op.prototype.getPixelDimensions=function(e,t,n,i,o){Cse(this);let r=this.right-this.left,s=this.top-this.bottom,a=i*r/e,c=i*s/t;return o.x=a,o.y=c,o};op.prototype.clone=function(e){return l(e)||(e=new op),e.left=this.left,e.right=this.right,e.top=this.top,e.bottom=this.bottom,e.near=this.near,e.far=this.far,e._left=void 0,e._right=void 0,e._top=void 0,e._bottom=void 0,e._near=void 0,e._far=void 0,e};op.prototype.equals=function(e){return l(e)&&e instanceof op&&this.right===e.right&&this.left===e.left&&this.top===e.top&&this.bottom===e.bottom&&this.near===e.near&&this.far===e.far};op.prototype.equalsEpsilon=function(e,t,n){return e===this||l(e)&&e instanceof op&&L.equalsEpsilon(this.right,e.right,t,n)&&L.equalsEpsilon(this.left,e.left,t,n)&&L.equalsEpsilon(this.top,e.top,t,n)&&L.equalsEpsilon(this.bottom,e.bottom,t,n)&&L.equalsEpsilon(this.near,e.near,t,n)&&L.equalsEpsilon(this.far,e.far,t,n)};var as=op;function hd(e){e=e??Q.EMPTY_OBJECT,this._offCenterFrustum=new as,this.width=e.width,this._width=void 0,this.aspectRatio=e.aspectRatio,this._aspectRatio=void 0,this.near=e.near??1,this._near=this.near,this.far=e.far??5e8,this._far=this.far}hd.packedLength=4;hd.pack=function(e,t,n){return n=n??0,t[n++]=e.width,t[n++]=e.aspectRatio,t[n++]=e.near,t[n]=e.far,t};hd.unpack=function(e,t,n){return t=t??0,l(n)||(n=new hd),n.width=e[t++],n.aspectRatio=e[t++],n.near=e[t++],n.far=e[t],n};function jb(e){let t=e._offCenterFrustum;if(e.width!==e._width||e.aspectRatio!==e._aspectRatio||e.near!==e._near||e.far!==e._far){e._aspectRatio=e.aspectRatio,e._width=e.width,e._near=e.near,e._far=e.far;let n=1/e.aspectRatio;t.right=e.width*.5,t.left=-t.right,t.top=n*t.right,t.bottom=-t.top,t.near=e.near,t.far=e.far}}Object.defineProperties(hd.prototype,{projectionMatrix:{get:function(){return jb(this),this._offCenterFrustum.projectionMatrix}},offCenterFrustum:{get:function(){return jb(this),this._offCenterFrustum}}});hd.prototype.computeCullingVolume=function(e,t,n){return jb(this),this._offCenterFrustum.computeCullingVolume(e,t,n)};hd.prototype.getPixelDimensions=function(e,t,n,i,o){return jb(this),this._offCenterFrustum.getPixelDimensions(e,t,n,i,o)};hd.prototype.clone=function(e){return l(e)||(e=new hd),e.aspectRatio=this.aspectRatio,e.width=this.width,e.near=this.near,e.far=this.far,e._aspectRatio=void 0,e._width=void 0,e._near=void 0,e._far=void 0,this._offCenterFrustum.clone(e._offCenterFrustum),e};hd.prototype.equals=function(e){return!l(e)||!(e instanceof hd)?!1:(jb(this),jb(e),this.width===e.width&&this.aspectRatio===e.aspectRatio&&this._offCenterFrustum.equals(e._offCenterFrustum))};hd.prototype.equalsEpsilon=function(e,t,n){return!l(e)||!(e instanceof hd)?!1:(jb(this),jb(e),L.equalsEpsilon(this.width,e.width,t,n)&&L.equalsEpsilon(this.aspectRatio,e.aspectRatio,t,n)&&this._offCenterFrustum.equalsEpsilon(e._offCenterFrustum,t,n))};var bn=hd;var Ujt=y(x(),1);var wH={};function $2e(e){let t=6.239996+.0172019696544*e;return .001657*Math.sin(t+.01671*Math.sin(t))}var eBe=32.184,tBe=2451545;function Mse(e,t){t=q.addSeconds(e,eBe,t);let n=q.totalDays(t)-tBe;return t=q.addSeconds(t,$2e(n),t),t}var DD=new q(2451545,0,ci.TAI),nBe=1e3,um=L.RADIANS_PER_DEGREE,tu=L.RADIANS_PER_ARCSECOND,Tc=14959787e4,Tse=new $;function vse(e,t,n,i,o,r,s){n<0&&(n=-n,o+=L.PI);let a=e*(1-t),c=i-o,d=o,u=oBe(r-i,t),h=iBe(t,0);lBe(c,n,d,Tse);let p=a*(1+t),A=Math.cos(u),f=Math.sin(u),b=1+t*A,C=p/b;return l(s)?(s.x=C*A,s.y=C*f,s.z=0):s=new m(C*A,C*f,0),$.multiplyByVector(Tse,s,s)}function iBe(e,t){return e<=t?"Circular":e<1-t?"Elliptical":e<=1+t?"Parabolic":"Hyperbolic"}function oBe(e,t){let n=aBe(e,t);return cBe(n,t)}var rBe=50,sBe=L.EPSILON8;function aBe(e,t){let n=Math.floor(e/L.TWO_PI);e-=n*L.TWO_PI;let i=e+t*Math.sin(e)/(1-Math.sin(e+t)+Math.sin(e)),o=Number.MAX_VALUE,r;for(r=0;r<rBe&&Math.abs(o-i)>sBe;++r){o=i;let s=o-t*Math.sin(o)-e,a=1-t*Math.cos(o);i=o-s/a}return o=i+n*L.TWO_PI,o}function cBe(e,t){let n=Math.floor(e/L.TWO_PI);e-=n*L.TWO_PI;let i=Math.cos(e)-t,o=Math.sin(e)*Math.sqrt(1-t*t),r=Math.atan2(o,i);return r=L.zeroToTwoPi(r),e<0&&(r-=L.TWO_PI),r+=n*L.TWO_PI,r}function lBe(e,t,n,i){let o=Math.cos(e),r=Math.sin(e),s=Math.cos(t),a=Math.sin(t),c=Math.cos(n),d=Math.sin(n);return l(i)?(i[0]=c*o-d*r*s,i[1]=d*o+c*r*s,i[2]=r*a,i[3]=-c*r-d*o*s,i[4]=-d*r+c*o*s,i[5]=o*a,i[6]=d*a,i[7]=-c*a,i[8]=s):i=new $(c*o-d*r*s,-c*r-d*o*s,d*a,d*o+c*r*s,-d*r+c*o*s,-c*a,r*a,o*a,s),i}var dBe=1.0000010178*Tc,uBe=100.46645683*um,mBe=129597742283429e-5*tu,Ese=16002,Sse=21863,_se=32004,Ise=10931,Zse=14529,Rse=16368,Vse=15318,Gse=32794,hBe=64*1e-7*Tc,fBe=-152*1e-7*Tc,pBe=62*1e-7*Tc,ABe=-8*1e-7*Tc,gBe=32*1e-7*Tc,bBe=-41*1e-7*Tc,yBe=19*1e-7*Tc,xBe=-11*1e-7*Tc,CBe=-150*1e-7*Tc,TBe=-46*1e-7*Tc,EBe=68*1e-7*Tc,SBe=54*1e-7*Tc,_Be=14*1e-7*Tc,IBe=24*1e-7*Tc,ZBe=-28*1e-7*Tc,RBe=22*1e-7*Tc,Lse=10,Wse=16002,Fse=21863,Bse=10931,wse=1473,Nse=32004,Pse=4387,Xse=73,VBe=-325*1e-7,GBe=-322*1e-7,LBe=-79*1e-7,WBe=232*1e-7,FBe=-52*1e-7,BBe=97*1e-7,wBe=55*1e-7,NBe=-41*1e-7,PBe=-105*1e-7,XBe=-137*1e-7,YBe=258*1e-7,MBe=35*1e-7,vBe=-116*1e-7,UBe=-88*1e-7,DBe=-112*1e-7,kBe=-80*1e-7,gS=new q(0,0,ci.TAI);function QBe(e,t){Mse(e,gS);let i=(gS.dayNumber-DD.dayNumber+(gS.secondsOfDay-DD.secondsOfDay)/di.SECONDS_PER_DAY)/(di.DAYS_PER_JULIAN_CENTURY*10),o=.3595362*i,r=dBe+hBe*Math.cos(Ese*o)+CBe*Math.sin(Ese*o)+fBe*Math.cos(Sse*o)+TBe*Math.sin(Sse*o)+pBe*Math.cos(_se*o)+EBe*Math.sin(_se*o)+ABe*Math.cos(Ise*o)+SBe*Math.sin(Ise*o)+gBe*Math.cos(Zse*o)+_Be*Math.sin(Zse*o)+bBe*Math.cos(Rse*o)+IBe*Math.sin(Rse*o)+yBe*Math.cos(Vse*o)+ZBe*Math.sin(Vse*o)+xBe*Math.cos(Gse*o)+RBe*Math.sin(Gse*o),s=uBe+mBe*i+VBe*Math.cos(Lse*o)+PBe*Math.sin(Lse*o)+GBe*Math.cos(Wse*o)+XBe*Math.sin(Wse*o)+LBe*Math.cos(Fse*o)+YBe*Math.sin(Fse*o)+WBe*Math.cos(Bse*o)+MBe*Math.sin(Bse*o)+FBe*Math.cos(wse*o)+vBe*Math.sin(wse*o)+BBe*Math.cos(Nse*o)+UBe*Math.sin(Nse*o)+wBe*Math.cos(Pse*o)+DBe*Math.sin(Pse*o)+NBe*Math.cos(Xse*o)+kBe*Math.sin(Xse*o),a=.0167086342-.0004203654*i,c=102.93734808*um+11612.3529*tu*i,d=469.97289*tu*i,u=174.87317577*um-8679.27034*tu*i;return vse(r,a,d,c,u,s,t)}function Use(e,t){Mse(e,gS);let i=(gS.dayNumber-DD.dayNumber+(gS.secondsOfDay-DD.secondsOfDay)/di.SECONDS_PER_DAY)/di.DAYS_PER_JULIAN_CENTURY,o=i*i,r=o*i,s=r*i,a=383397.7725+.004*i,c=.055545526-16e-9*i,d=5.15668983*um,u=-8e-5*i+.02966*o-42e-6*r-13e-8*s,h=83.35324312*um,p=146434202669e-4*i-38.2702*o-.045047*r+21301e-8*s,A=125.04455501*um,f=-69679193631e-4*i+6.3602*o+.007625*r-3586e-8*s,b=218.31664563*um,C=17325593434847e-4*i-6.391*o+.006588*r-3169e-8*s,T=297.85019547*um+tu*(1602961601209e-3*i-6.3706*o+.006593*r-3169e-8*s),E=93.27209062*um+tu*(17395272628478e-4*i-12.7512*o-.001037*r+417e-8*s),S=134.96340251*um+tu*(17179159232178e-4*i+31.8792*o+.051635*r-2447e-7*s),I=357.52910918*um+tu*(1295965810481e-4*i-.5532*o+136e-6*r-1149e-8*s),R=310.17137918*um-tu*(6967051436e-3*i+6.2068*o+.007618*r-3219e-8*s),V=2*T,W=4*T,B=6*T,N=2*S,P=3*S,g=4*S,_=2*E;a+=3400.4*Math.cos(V)-635.6*Math.cos(V-S)-235.6*Math.cos(S)+218.1*Math.cos(V-I)+181*Math.cos(V+S),c+=.014216*Math.cos(V-S)+.008551*Math.cos(V-N)-.001383*Math.cos(S)+.001356*Math.cos(V+S)-.001147*Math.cos(W-P)-914e-6*Math.cos(W-N)+869e-6*Math.cos(V-I-S)-627e-6*Math.cos(V)-394e-6*Math.cos(W-g)+282e-6*Math.cos(V-I-N)-279e-6*Math.cos(T-S)-236e-6*Math.cos(N)+231e-6*Math.cos(W)+229e-6*Math.cos(B-g)-201e-6*Math.cos(N-_),u+=486.26*Math.cos(V-_)-40.13*Math.cos(V)+37.51*Math.cos(_)+25.73*Math.cos(N-_)+19.97*Math.cos(V-I-_),p+=-55609*Math.sin(V-S)-34711*Math.sin(V-N)-9792*Math.sin(S)+9385*Math.sin(W-P)+7505*Math.sin(W-N)+5318*Math.sin(V+S)+3484*Math.sin(W-g)-3417*Math.sin(V-I-S)-2530*Math.sin(B-g)-2376*Math.sin(V)-2075*Math.sin(V-P)-1883*Math.sin(N)-1736*Math.sin(B-5*S)+1626*Math.sin(I)-1370*Math.sin(B-P),f+=-5392*Math.sin(V-_)-540*Math.sin(I)-441*Math.sin(V)+423*Math.sin(_)-288*Math.sin(N-_),C+=-3332.9*Math.sin(V)+1197.4*Math.sin(V-S)-662.5*Math.sin(I)+396.3*Math.sin(S)-218*Math.sin(V-I);let Z=2*R,G=3*R;u+=46.997*Math.cos(R)*i-.614*Math.cos(V-_+R)*i+.614*Math.cos(V-_-R)*i-.0297*Math.cos(Z)*o-.0335*Math.cos(R)*o+.0012*Math.cos(V-_+Z)*o-16e-5*Math.cos(R)*r+4e-5*Math.cos(G)*r+4e-5*Math.cos(Z)*r;let w=2.116*Math.sin(R)*i-.111*Math.sin(V-_-R)*i-.0015*Math.sin(R)*o;p+=w,C+=w,f+=-520.77*Math.sin(R)*i+13.66*Math.sin(V-_+R)*i+1.12*Math.sin(V-R)*i-1.06*Math.sin(_-R)*i+.66*Math.sin(Z)*o+.371*Math.sin(R)*o-.035*Math.sin(V-_+Z)*o-.015*Math.sin(V-_+R)*o+.0014*Math.sin(R)*r-.0011*Math.sin(G)*r-9e-4*Math.sin(Z)*r,a*=nBe;let X=d+u*tu,k=h+p*tu,v=b+C*tu,D=A+f*tu;return vse(a,c,X,k,D,v,t)}var Yse=.012300034,OBe=Yse/(Yse+1)*-1;function zBe(e,t){return t=Use(e,t),m.multiplyByScalar(t,OBe,t)}var Dse=new $(1.0000000000000002,5619723173785822e-31,4690511510146299e-34,-5154129427414611e-31,.9174820620691819,-.39777715593191376,-223970096136568e-30,.39777715593191376,.9174820620691819),UL=new m;wH.computeSunPositionInEarthInertialFrame=function(e,t){return l(e)||(e=q.now()),l(t)||(t=new m),UL=QBe(e,UL),t=m.negate(UL,t),zBe(e,UL),m.subtract(t,UL,t),$.multiplyByVector(Dse,t,t),t};wH.computeMoonPositionInEarthInertialFrame=function(e,t){return l(e)||(e=q.now()),t=Use(e,t),$.multiplyByVector(Dse,t,t),t};var qb=wH;var kjt=y(x(),1),kD={MORPHING:0,COLUMBUS_VIEW:1,SCENE2D:2,SCENE3D:3};kD.getMorphTime=function(e){return e===kD.SCENE3D?1:e===kD.MORPHING?void 0:0};var se=Object.freeze(kD);var Hjt=y(x(),1);function HBe(e){e=e??Q.EMPTY_OBJECT,this.color=U.clone(e.color??U.WHITE),this.intensity=e.intensity??2}var VA=HBe;function bS(){this.globeDepthTexture=void 0,this.edgeIdTexture=void 0,this.edgeColorTexture=void 0,this.edgeDepthTexture=void 0,this.gamma=void 0,this._viewport=new nt,this._viewportCartesian4=new re,this._viewportDirty=!1,this._viewportOrthographicMatrix=F.clone(F.IDENTITY),this._viewportTransformation=F.clone(F.IDENTITY),this._model=F.clone(F.IDENTITY),this._view=F.clone(F.IDENTITY),this._inverseView=F.clone(F.IDENTITY),this._projection=F.clone(F.IDENTITY),this._infiniteProjection=F.clone(F.IDENTITY),this._entireFrustum=new M,this._currentFrustum=new M,this._frustumPlanes=new re,this._farDepthFromNearPlusOne=void 0,this._log2FarDepthFromNearPlusOne=void 0,this._oneOverLog2FarDepthFromNearPlusOne=void 0,this._frameState=void 0,this._temeToPseudoFixed=$.clone(F.IDENTITY),this._view3DDirty=!0,this._view3D=new F,this._inverseView3DDirty=!0,this._inverseView3D=new F,this._inverseModelDirty=!0,this._inverseModel=new F,this._inverseTransposeModelDirty=!0,this._inverseTransposeModel=new $,this._viewRotation=new $,this._inverseViewRotation=new $,this._viewRotation3D=new $,this._inverseViewRotation3D=new $,this._inverseProjectionDirty=!0,this._inverseProjection=new F,this._modelViewDirty=!0,this._modelView=new F,this._modelView3DDirty=!0,this._modelView3D=new F,this._modelViewRelativeToEyeDirty=!0,this._modelViewRelativeToEye=new F,this._inverseModelViewDirty=!0,this._inverseModelView=new F,this._inverseModelView3DDirty=!0,this._inverseModelView3D=new F,this._viewProjectionDirty=!0,this._viewProjection=new F,this._inverseViewProjectionDirty=!0,this._inverseViewProjection=new F,this._modelViewProjectionDirty=!0,this._modelViewProjection=new F,this._inverseModelViewProjectionDirty=!0,this._inverseModelViewProjection=new F,this._modelViewProjectionRelativeToEyeDirty=!0,this._modelViewProjectionRelativeToEye=new F,this._modelViewInfiniteProjectionDirty=!0,this._modelViewInfiniteProjection=new F,this._normalDirty=!0,this._normal=new $,this._normal3DDirty=!0,this._normal3D=new $,this._inverseNormalDirty=!0,this._inverseNormal=new $,this._inverseNormal3DDirty=!0,this._inverseNormal3D=new $,this._encodedCameraPositionMCDirty=!0,this._encodedCameraPositionMC=new In,this._cameraPosition=new m,this._sunPositionWC=new m,this._sunPositionColumbusView=new m,this._sunDirectionWC=new m,this._sunDirectionEC=new m,this._moonDirectionEC=new m,this._lightDirectionWC=new m,this._lightDirectionEC=new m,this._lightColor=new m,this._lightColorHdr=new m,this._pass=void 0,this._mode=void 0,this._mapProjection=void 0,this._ellipsoid=void 0,this._cameraDirection=new m,this._cameraRight=new m,this._cameraUp=new m,this._frustum2DWidth=0,this._eyeHeight=0,this._eyeHeight2D=new M,this._eyeEllipsoidNormalEC=new m,this._eyeEllipsoidCurvature=new M,this._modelToEnu=new F,this._enuToModel=new F,this._pixelRatio=1,this._orthographicIn3D=!1,this._backgroundColor=new U,this._brdfLut=void 0,this._environmentMap=void 0,this._sphericalHarmonicCoefficients=void 0,this._specularEnvironmentMaps=void 0,this._specularEnvironmentMapsMaximumLOD=void 0,this._fogDensity=void 0,this._fogVisualDensityScalar=void 0,this._fogMinimumBrightness=void 0,this._atmosphereHsbShift=void 0,this._atmosphereLightIntensity=void 0,this._atmosphereRayleighCoefficient=new m,this._atmosphereRayleighScaleHeight=new m,this._atmosphereMieCoefficient=new m,this._atmosphereMieScaleHeight=void 0,this._atmosphereMieAnisotropy=void 0,this._atmosphereDynamicLighting=void 0,this._invertClassificationColor=void 0,this._splitPosition=0,this._pixelSizePerMeter=void 0,this._geometricToleranceOverMeter=void 0,this._minimumDisableDepthTestDistance=void 0}Object.defineProperties(bS.prototype,{frameState:{get:function(){return this._frameState}},viewport:{get:function(){return this._viewport},set:function(e){if(!nt.equals(e,this._viewport)){nt.clone(e,this._viewport);let t=this._viewport,n=this._viewportCartesian4;n.x=t.x,n.y=t.y,n.z=t.width,n.w=t.height,this._viewportDirty=!0}}},viewportCartesian4:{get:function(){return this._viewportCartesian4}},viewportOrthographic:{get:function(){return Qse(this),this._viewportOrthographicMatrix}},viewportTransformation:{get:function(){return Qse(this),this._viewportTransformation}},model:{get:function(){return this._model},set:function(e){F.clone(e,this._model),this._modelView3DDirty=!0,this._inverseModelView3DDirty=!0,this._inverseModelDirty=!0,this._inverseTransposeModelDirty=!0,this._modelViewDirty=!0,this._inverseModelViewDirty=!0,this._modelViewRelativeToEyeDirty=!0,this._inverseModelViewDirty=!0,this._modelViewProjectionDirty=!0,this._inverseModelViewProjectionDirty=!0,this._modelViewProjectionRelativeToEyeDirty=!0,this._modelViewInfiniteProjectionDirty=!0,this._normalDirty=!0,this._inverseNormalDirty=!0,this._normal3DDirty=!0,this._inverseNormal3DDirty=!0,this._encodedCameraPositionMCDirty=!0}},inverseModel:{get:function(){return this._inverseModelDirty&&(this._inverseModelDirty=!1,F.inverse(this._model,this._inverseModel)),this._inverseModel}},inverseTransposeModel:{get:function(){let e=this._inverseTransposeModel;return this._inverseTransposeModelDirty&&(this._inverseTransposeModelDirty=!1,F.getMatrix3(this.inverseModel,e),$.transpose(e,e)),e}},view:{get:function(){return this._view}},view3D:{get:function(){return PH(this),this._view3D}},viewRotation:{get:function(){return PH(this),this._viewRotation}},viewRotation3D:{get:function(){return PH(this),this._viewRotation3D}},inverseView:{get:function(){return this._inverseView}},inverseView3D:{get:function(){return Hse(this),this._inverseView3D}},inverseViewRotation:{get:function(){return this._inverseViewRotation}},inverseViewRotation3D:{get:function(){return Hse(this),this._inverseViewRotation3D}},projection:{get:function(){return this._projection}},inverseProjection:{get:function(){return rwe(this),this._inverseProjection}},infiniteProjection:{get:function(){return this._infiniteProjection}},modelView:{get:function(){return swe(this),this._modelView}},modelView3D:{get:function(){return awe(this),this._modelView3D}},modelViewRelativeToEye:{get:function(){return hwe(this),this._modelViewRelativeToEye}},inverseModelView:{get:function(){return cwe(this),this._inverseModelView}},inverseModelView3D:{get:function(){return lwe(this),this._inverseModelView3D}},viewProjection:{get:function(){return dwe(this),this._viewProjection}},inverseViewProjection:{get:function(){return uwe(this),this._inverseViewProjection}},modelViewProjection:{get:function(){return mwe(this),this._modelViewProjection}},inverseModelViewProjection:{get:function(){return fwe(this),this._inverseModelViewProjection}},modelViewProjectionRelativeToEye:{get:function(){return pwe(this),this._modelViewProjectionRelativeToEye}},modelViewInfiniteProjection:{get:function(){return Awe(this),this._modelViewInfiniteProjection}},normal:{get:function(){return gwe(this),this._normal}},normal3D:{get:function(){return bwe(this),this._normal3D}},inverseNormal:{get:function(){return ywe(this),this._inverseNormal}},inverseNormal3D:{get:function(){return xwe(this),this._inverseNormal3D}},entireFrustum:{get:function(){return this._entireFrustum}},currentFrustum:{get:function(){return this._currentFrustum}},frustumPlanes:{get:function(){return this._frustumPlanes}},farDepthFromNearPlusOne:{get:function(){return this._farDepthFromNearPlusOne}},log2FarDepthFromNearPlusOne:{get:function(){return this._log2FarDepthFromNearPlusOne}},oneOverLog2FarDepthFromNearPlusOne:{get:function(){return this._oneOverLog2FarDepthFromNearPlusOne}},eyeHeight:{get:function(){return this._eyeHeight}},eyeHeight2D:{get:function(){return this._eyeHeight2D}},eyeEllipsoidNormalEC:{get:function(){return this._eyeEllipsoidNormalEC}},eyeEllipsoidCurvature:{get:function(){return this._eyeEllipsoidCurvature}},modelToEnu:{get:function(){return this._modelToEnu}},enuToModel:{get:function(){return this._enuToModel}},sunPositionWC:{get:function(){return this._sunPositionWC}},sunPositionColumbusView:{get:function(){return this._sunPositionColumbusView}},sunDirectionWC:{get:function(){return this._sunDirectionWC}},sunDirectionEC:{get:function(){return this._sunDirectionEC}},moonDirectionEC:{get:function(){return this._moonDirectionEC}},lightDirectionWC:{get:function(){return this._lightDirectionWC}},lightDirectionEC:{get:function(){return this._lightDirectionEC}},lightColor:{get:function(){return this._lightColor}},lightColorHdr:{get:function(){return this._lightColorHdr}},encodedCameraPositionMCHigh:{get:function(){return zse(this),this._encodedCameraPositionMC.high}},encodedCameraPositionMCLow:{get:function(){return zse(this),this._encodedCameraPositionMC.low}},temeToPseudoFixedMatrix:{get:function(){return this._temeToPseudoFixed}},pixelRatio:{get:function(){return this._pixelRatio}},fogDensity:{get:function(){return this._fogDensity}},fogVisualDensityScalar:{get:function(){return this._fogVisualDensityScalar}},fogMinimumBrightness:{get:function(){return this._fogMinimumBrightness}},atmosphereHsbShift:{get:function(){return this._atmosphereHsbShift}},atmosphereLightIntensity:{get:function(){return this._atmosphereLightIntensity}},atmosphereRayleighCoefficient:{get:function(){return this._atmosphereRayleighCoefficient}},atmosphereRayleighScaleHeight:{get:function(){return this._atmosphereRayleighScaleHeight}},atmosphereMieCoefficient:{get:function(){return this._atmosphereMieCoefficient}},atmosphereMieScaleHeight:{get:function(){return this._atmosphereMieScaleHeight}},atmosphereMieAnisotropy:{get:function(){return this._atmosphereMieAnisotropy}},atmosphereDynamicLighting:{get:function(){return this._atmosphereDynamicLighting}},geometricToleranceOverMeter:{get:function(){return this._geometricToleranceOverMeter}},pass:{get:function(){return this._pass}},backgroundColor:{get:function(){return this._backgroundColor}},brdfLut:{get:function(){return this._brdfLut}},environmentMap:{get:function(){return this._environmentMap}},sphericalHarmonicCoefficients:{get:function(){return this._sphericalHarmonicCoefficients}},specularEnvironmentMaps:{get:function(){return this._specularEnvironmentMaps}},specularEnvironmentMapsMaximumLOD:{get:function(){return this._specularEnvironmentMapsMaximumLOD}},splitPosition:{get:function(){return this._splitPosition}},minimumDisableDepthTestDistance:{get:function(){return this._minimumDisableDepthTestDistance}},invertClassificationColor:{get:function(){return this._invertClassificationColor}},orthographicIn3D:{get:function(){return this._orthographicIn3D}},ellipsoid:{get:function(){return this._ellipsoid??ie.default}}});function JBe(e,t){F.clone(t,e._view),F.getMatrix3(t,e._viewRotation),e._view3DDirty=!0,e._inverseView3DDirty=!0,e._modelViewDirty=!0,e._modelView3DDirty=!0,e._modelViewRelativeToEyeDirty=!0,e._inverseModelViewDirty=!0,e._inverseModelView3DDirty=!0,e._viewProjectionDirty=!0,e._inverseViewProjectionDirty=!0,e._modelViewProjectionDirty=!0,e._modelViewProjectionRelativeToEyeDirty=!0,e._modelViewInfiniteProjectionDirty=!0,e._normalDirty=!0,e._inverseNormalDirty=!0,e._normal3DDirty=!0,e._inverseNormal3DDirty=!0}function KBe(e,t){F.clone(t,e._inverseView),F.getMatrix3(t,e._inverseViewRotation)}function jBe(e,t){F.clone(t,e._projection),e._inverseProjectionDirty=!0,e._viewProjectionDirty=!0,e._inverseViewProjectionDirty=!0,e._modelViewProjectionDirty=!0,e._modelViewProjectionRelativeToEyeDirty=!0}function qBe(e,t){F.clone(t,e._infiniteProjection),e._modelViewInfiniteProjectionDirty=!0}var kse=new m,$Be=new F;function ewe(e,t){m.clone(t.positionWC,e._cameraPosition),m.clone(t.directionWC,e._cameraDirection),m.clone(t.rightWC,e._cameraRight),m.clone(t.upWC,e._cameraUp);let n=e._ellipsoid,i,o=t.positionCartographic;if(l(o)?(e._eyeHeight=o.height,e._eyeEllipsoidNormalEC=n.geodeticSurfaceNormalCartographic(o,e._eyeEllipsoidNormalEC),i=m.fromRadians(o.longitude,o.latitude,0,n,kse)):(e._eyeHeight=-n.maximumRadius,m.magnitude(t.positionWC)>0&&(e._eyeEllipsoidNormalEC=m.normalize(t.positionWC,e._eyeEllipsoidNormalEC)),i=n.scaleToGeodeticSurface(t.positionWC,kse)),e._encodedCameraPositionMCDirty=!0,!l(i))return;e._eyeEllipsoidNormalEC=$.multiplyByVector(e._viewRotation,e._eyeEllipsoidNormalEC,e._eyeEllipsoidNormalEC);let r=bt.eastNorthUpToFixedFrame(i,n,$Be);e._enuToModel=F.multiplyTransformation(e.inverseModel,r,e._enuToModel),e._modelToEnu=F.inverseTransformation(e._enuToModel,e._modelToEnu),L.equalsEpsilon(n._radii.x,n._radii.y,L.EPSILON15)&&(e._eyeEllipsoidCurvature=n.getLocalCurvature(i,e._eyeEllipsoidCurvature))}var NH=new $,twe=new Ae;function nwe(e,t){bt.computeIcrfToCentralBodyFixedMatrix(t.time,NH);let n=qb.computeSunPositionInEarthInertialFrame(t.time,e._sunPositionWC);$.multiplyByVector(NH,n,n),m.normalize(n,e._sunDirectionWC),n=$.multiplyByVector(e.viewRotation3D,n,e._sunDirectionEC),m.normalize(n,n),n=qb.computeMoonPositionInEarthInertialFrame(t.time,e._moonDirectionEC),$.multiplyByVector(NH,n,n),$.multiplyByVector(e.viewRotation3D,n,n),m.normalize(n,n);let i=t.mapProjection,r=i.ellipsoid.cartesianToCartographic(e._sunPositionWC,twe);i.project(r,e._sunPositionColumbusView)}bS.prototype.updateCamera=function(e){JBe(this,e.viewMatrix),KBe(this,e.inverseViewMatrix),ewe(this,e),this._entireFrustum.x=e.frustum.near,this._entireFrustum.y=e.frustum.far,this.updateFrustum(e.frustum),this._orthographicIn3D=this._mode!==se.SCENE2D&&e.frustum instanceof bn};bS.prototype.updateFrustum=function(e){jBe(this,e.projectionMatrix),l(e.infiniteProjectionMatrix)&&qBe(this,e.infiniteProjectionMatrix),this._currentFrustum.x=e.near,this._currentFrustum.y=e.far,this._farDepthFromNearPlusOne=e.far-e.near+1,this._log2FarDepthFromNearPlusOne=L.log2(this._farDepthFromNearPlusOne),this._oneOverLog2FarDepthFromNearPlusOne=1/this._log2FarDepthFromNearPlusOne;let t=e.offCenterFrustum;l(t)&&(e=t),this._frustumPlanes.x=e.top,this._frustumPlanes.y=e.bottom,this._frustumPlanes.z=e.left,this._frustumPlanes.w=e.right};bS.prototype.updatePass=function(e){this._pass=e};var iwe=[],owe=new VA;bS.prototype.update=function(e){this._mode=e.mode,this._mapProjection=e.mapProjection,this._ellipsoid=e.mapProjection.ellipsoid,this._pixelRatio=e.pixelRatio;let t=e.camera;this.updateCamera(t),e.mode===se.SCENE2D?(this._frustum2DWidth=t.frustum.right-t.frustum.left,this._eyeHeight2D.x=this._frustum2DWidth*.5,this._eyeHeight2D.y=this._eyeHeight2D.x*this._eyeHeight2D.x):(this._frustum2DWidth=0,this._eyeHeight2D.x=0,this._eyeHeight2D.y=0),nwe(this,e);let n=e.light??owe;n instanceof VA?(this._lightDirectionWC=m.clone(this._sunDirectionWC,this._lightDirectionWC),this._lightDirectionEC=m.clone(this._sunDirectionEC,this._lightDirectionEC)):(this._lightDirectionWC=m.normalize(m.negate(n.direction,this._lightDirectionWC),this._lightDirectionWC),this._lightDirectionEC=$.multiplyByVector(this.viewRotation3D,this._lightDirectionWC,this._lightDirectionEC));let i=n.color,o=m.fromElements(i.red,i.green,i.blue,this._lightColorHdr);o=m.multiplyByScalar(o,n.intensity,o);let r=m.maximumComponent(o);r>1?m.divideByScalar(o,r,this._lightColor):m.clone(o,this._lightColor);let s=e.brdfLutGenerator,a=l(s)?s.colorTexture:void 0;this._brdfLut=a,this._environmentMap=e.environmentMap??e.context.defaultCubeMap,this._sphericalHarmonicCoefficients=e.sphericalHarmonicCoefficients??iwe,this._specularEnvironmentMaps=e.specularEnvironmentMaps,this._specularEnvironmentMapsMaximumLOD=e.specularEnvironmentMapsMaximumLOD,this._fogDensity=e.fog.density,this._fogVisualDensityScalar=e.fog.visualDensityScalar,this._fogMinimumBrightness=e.fog.minimumBrightness;let c=e.atmosphere;l(c)&&(this._atmosphereHsbShift=m.fromElements(c.hueShift,c.saturationShift,c.brightnessShift,this._atmosphereHsbShift),this._atmosphereLightIntensity=c.lightIntensity,this._atmosphereRayleighCoefficient=m.clone(c.rayleighCoefficient,this._atmosphereRayleighCoefficient),this._atmosphereRayleighScaleHeight=c.rayleighScaleHeight,this._atmosphereMieCoefficient=m.clone(c.mieCoefficient,this._atmosphereMieCoefficient),this._atmosphereMieScaleHeight=c.mieScaleHeight,this._atmosphereMieAnisotropy=c.mieAnisotropy,this._atmosphereDynamicLighting=c.dynamicLighting),this._invertClassificationColor=e.invertClassificationColor,this._frameState=e,this._temeToPseudoFixed=bt.computeTemeToPseudoFixedMatrix(e.time,this._temeToPseudoFixed),this._splitPosition=e.splitPosition*e.context.drawingBufferWidth;let d=t.frustum.fov,u=this._viewport,h;l(d)?u.height>u.width?h=Math.tan(.5*d)*2/u.height:h=Math.tan(.5*d)*2/u.width:h=1/Math.max(u.width,u.height),this._geometricToleranceOverMeter=h*e.maximumScreenSpaceError,U.clone(e.backgroundColor,this._backgroundColor),this._minimumDisableDepthTestDistance=e.minimumDisableDepthTestDistance,this._minimumDisableDepthTestDistance*=this._minimumDisableDepthTestDistance,this._minimumDisableDepthTestDistance===Number.POSITIVE_INFINITY&&(this._minimumDisableDepthTestDistance=-1)};function Qse(e){if(e._viewportDirty){let t=e._viewport;F.computeOrthographicOffCenter(t.x,t.x+t.width,t.y,t.y+t.height,0,1,e._viewportOrthographicMatrix),F.computeViewportTransformation(t,0,1,e._viewportTransformation),e._viewportDirty=!1}}function rwe(e){e._inverseProjectionDirty&&(e._inverseProjectionDirty=!1,e._mode!==se.SCENE2D&&e._mode!==se.MORPHING&&!e._orthographicIn3D?F.inverse(e._projection,e._inverseProjection):F.clone(F.ZERO,e._inverseProjection))}function swe(e){e._modelViewDirty&&(e._modelViewDirty=!1,F.multiplyTransformation(e._view,e._model,e._modelView))}function awe(e){e._modelView3DDirty&&(e._modelView3DDirty=!1,F.multiplyTransformation(e.view3D,e._model,e._modelView3D))}function cwe(e){e._inverseModelViewDirty&&(e._inverseModelViewDirty=!1,F.inverse(e.modelView,e._inverseModelView))}function lwe(e){e._inverseModelView3DDirty&&(e._inverseModelView3DDirty=!1,F.inverse(e.modelView3D,e._inverseModelView3D))}function dwe(e){e._viewProjectionDirty&&(e._viewProjectionDirty=!1,F.multiply(e._projection,e._view,e._viewProjection))}function uwe(e){e._inverseViewProjectionDirty&&(e._inverseViewProjectionDirty=!1,F.inverse(e.viewProjection,e._inverseViewProjection))}function mwe(e){e._modelViewProjectionDirty&&(e._modelViewProjectionDirty=!1,F.multiply(e._projection,e.modelView,e._modelViewProjection))}function hwe(e){if(e._modelViewRelativeToEyeDirty){e._modelViewRelativeToEyeDirty=!1;let t=e.modelView,n=e._modelViewRelativeToEye;n[0]=t[0],n[1]=t[1],n[2]=t[2],n[3]=t[3],n[4]=t[4],n[5]=t[5],n[6]=t[6],n[7]=t[7],n[8]=t[8],n[9]=t[9],n[10]=t[10],n[11]=t[11],n[12]=0,n[13]=0,n[14]=0,n[15]=t[15]}}function fwe(e){e._inverseModelViewProjectionDirty&&(e._inverseModelViewProjectionDirty=!1,F.inverse(e.modelViewProjection,e._inverseModelViewProjection))}function pwe(e){e._modelViewProjectionRelativeToEyeDirty&&(e._modelViewProjectionRelativeToEyeDirty=!1,F.multiply(e._projection,e.modelViewRelativeToEye,e._modelViewProjectionRelativeToEye))}function Awe(e){e._modelViewInfiniteProjectionDirty&&(e._modelViewInfiniteProjectionDirty=!1,F.multiply(e._infiniteProjection,e.modelView,e._modelViewInfiniteProjection))}function gwe(e){if(e._normalDirty){e._normalDirty=!1;let t=e._normal;F.getMatrix3(e.inverseModelView,t),$.transpose(t,t)}}function bwe(e){if(e._normal3DDirty){e._normal3DDirty=!1;let t=e._normal3D;F.getMatrix3(e.inverseModelView3D,t),$.transpose(t,t)}}function ywe(e){if(e._inverseNormalDirty){e._inverseNormalDirty=!1;let t=e._inverseNormal;F.getMatrix3(e.modelView,t),$.transpose(t,t)}}function xwe(e){if(e._inverseNormal3DDirty){e._inverseNormal3DDirty=!1;let t=e._inverseNormal3D;F.getMatrix3(e.modelView3D,t),$.transpose(t,t)}}var Ose=new m;function zse(e){e._encodedCameraPositionMCDirty&&(e._encodedCameraPositionMCDirty=!1,F.multiplyByPoint(e.inverseModel,e._cameraPosition,Ose),In.fromCartesian(Ose,e._encodedCameraPositionMC))}var Cwe=new m,Twe=new m,Ewe=new m,Swe=new m,_we=new Ae,Iwe=new m,Zwe=new F;function Rwe(e,t,n,i,o,r,s,a){let c=Cwe;c.x=e.y,c.y=e.z,c.z=e.x;let d=Twe;d.x=n.y,d.y=n.z,d.z=n.x;let u=Ewe;u.x=i.y,u.y=i.z,u.z=i.x;let h=Swe;h.x=t.y,h.y=t.z,h.z=t.x,r===se.SCENE2D&&(c.z=o*.5);let p=s.unproject(c,_we);p.longitude=L.clamp(p.longitude,-Math.PI,Math.PI),p.latitude=L.clamp(p.latitude,-L.PI_OVER_TWO,L.PI_OVER_TWO);let A=s.ellipsoid,f=A.cartographicToCartesian(p,Iwe),b=bt.eastNorthUpToFixedFrame(f,A,Zwe);return F.multiplyByPointAsVector(b,d,d),F.multiplyByPointAsVector(b,u,u),F.multiplyByPointAsVector(b,h,h),l(a)||(a=new F),a[0]=d.x,a[1]=u.x,a[2]=-h.x,a[3]=0,a[4]=d.y,a[5]=u.y,a[6]=-h.y,a[7]=0,a[8]=d.z,a[9]=u.z,a[10]=-h.z,a[11]=0,a[12]=-m.dot(d,f),a[13]=-m.dot(u,f),a[14]=m.dot(h,f),a[15]=1,a}function PH(e){e._view3DDirty&&(e._mode===se.SCENE3D?F.clone(e._view,e._view3D):Rwe(e._cameraPosition,e._cameraDirection,e._cameraRight,e._cameraUp,e._frustum2DWidth,e._mode,e._mapProjection,e._view3D),F.getMatrix3(e._view3D,e._viewRotation3D),e._view3DDirty=!1)}function Hse(e){e._inverseView3DDirty&&(F.inverseTransformation(e.view3D,e._inverseView3D),F.getMatrix3(e._inverseView3D,e._inverseViewRotation3D),e._inverseView3DDirty=!1)}var DL=bS;function fd(e,t){let{getWebGLStub:n,requestWebgl1:i,webgl:o={},allowTextureFilterAnisotropic:r=!0}=t??{};o.alpha=o.alpha??!1,o.stencil=o.stencil??!0,o.powerPreference=o.powerPreference??"high-performance";let s=l(n)?n(e,o):Vwe(e,o,i),c=typeof WebGL2RenderingContext<"u"&&s instanceof WebGL2RenderingContext;this._canvas=e,this._originalGLContext=s,this._gl=s,this._webgl2=c,this._id=qn(),this.validateFramebuffer=!1,this.validateShaderProgram=!1,this.logShaderCompilation=!1,this._throwOnWebGLError=!1,this._shaderCache=new YL(this),this._textureCache=new ML;let d=s;this._stencilBits=d.getParameter(d.STENCIL_BITS),Bt._maximumCombinedTextureImageUnits=d.getParameter(d.MAX_COMBINED_TEXTURE_IMAGE_UNITS),Bt._maximumCubeMapSize=d.getParameter(d.MAX_CUBE_MAP_TEXTURE_SIZE),Bt._maximumFragmentUniformVectors=d.getParameter(d.MAX_FRAGMENT_UNIFORM_VECTORS),Bt._maximumTextureImageUnits=d.getParameter(d.MAX_TEXTURE_IMAGE_UNITS),Bt._maximumRenderbufferSize=d.getParameter(d.MAX_RENDERBUFFER_SIZE),Bt._maximumTextureSize=d.getParameter(d.MAX_TEXTURE_SIZE),Bt._maximum3DTextureSize=d.getParameter(d.MAX_3D_TEXTURE_SIZE),Bt._maximumVaryingVectors=d.getParameter(d.MAX_VARYING_VECTORS),Bt._maximumVertexAttributes=d.getParameter(d.MAX_VERTEX_ATTRIBS),Bt._maximumVertexTextureImageUnits=d.getParameter(d.MAX_VERTEX_TEXTURE_IMAGE_UNITS),Bt._maximumVertexUniformVectors=d.getParameter(d.MAX_VERTEX_UNIFORM_VECTORS),Bt._maximumSamples=this._webgl2?d.getParameter(d.MAX_SAMPLES):0;let u=d.getParameter(d.ALIASED_LINE_WIDTH_RANGE);Bt._minimumAliasedLineWidth=u[0],Bt._maximumAliasedLineWidth=u[1];let h=d.getParameter(d.ALIASED_POINT_SIZE_RANGE);Bt._minimumAliasedPointSize=h[0],Bt._maximumAliasedPointSize=h[1];let p=d.getParameter(d.MAX_VIEWPORT_DIMS);Bt._maximumViewportWidth=p[0],Bt._maximumViewportHeight=p[1];let A=d.getShaderPrecisionFormat(d.FRAGMENT_SHADER,d.HIGH_FLOAT);Bt._highpFloatSupported=A.precision!==0;let f=d.getShaderPrecisionFormat(d.FRAGMENT_SHADER,d.HIGH_INT);Bt._highpIntSupported=f.rangeMax!==0,this._antialias=d.getContextAttributes().antialias,this._standardDerivatives=!!zr(d,["OES_standard_derivatives"]),this._blendMinmax=!!zr(d,["EXT_blend_minmax"]),this._elementIndexUint=!!zr(d,["OES_element_index_uint"]),this._depthTexture=!!zr(d,["WEBGL_depth_texture","WEBKIT_WEBGL_depth_texture"]),this._fragDepth=!!zr(d,["EXT_frag_depth"]),this._debugShaders=zr(d,["WEBGL_debug_shaders"]),this._textureFloat=!!zr(d,["OES_texture_float"]),this._textureHalfFloat=!!zr(d,["OES_texture_half_float"]),this._textureFloatLinear=!!zr(d,["OES_texture_float_linear"]),this._textureHalfFloatLinear=!!zr(d,["OES_texture_half_float_linear"]),this._supportsTextureLod=!!zr(d,["EXT_shader_texture_lod"]),this._colorBufferFloat=!!zr(d,["EXT_color_buffer_float","WEBGL_color_buffer_float"]),this._floatBlend=!!zr(d,["EXT_float_blend"]),this._colorBufferHalfFloat=!!zr(d,["EXT_color_buffer_half_float"]),this._s3tc=!!zr(d,["WEBGL_compressed_texture_s3tc","MOZ_WEBGL_compressed_texture_s3tc","WEBKIT_WEBGL_compressed_texture_s3tc"]),this._pvrtc=!!zr(d,["WEBGL_compressed_texture_pvrtc","WEBKIT_WEBGL_compressed_texture_pvrtc"]),this._astc=!!zr(d,["WEBGL_compressed_texture_astc"]),this._etc=!!zr(d,["WEBG_compressed_texture_etc"]),this._etc1=!!zr(d,["WEBGL_compressed_texture_etc1"]),this._bc7=!!zr(d,["EXT_texture_compression_bptc"]),md.setKTX2SupportedFormats(this._s3tc,this._pvrtc,this._astc,this._etc,this._etc1,this._bc7);let b=r?zr(d,["EXT_texture_filter_anisotropic","WEBKIT_EXT_texture_filter_anisotropic"]):void 0;this._textureFilterAnisotropic=b,Bt._maximumTextureFilterAnisotropy=l(b)?d.getParameter(b.MAX_TEXTURE_MAX_ANISOTROPY_EXT):1;let C,T,E,S,I,R,V,W,B,N;if(c){let Z=this;C=function(){return Z._gl.createVertexArray()},T=function(G){Z._gl.bindVertexArray(G)},E=function(G){Z._gl.deleteVertexArray(G)},S=function(G,w,X,k,v){d.drawElementsInstanced(G,w,X,k,v)},I=function(G,w,X,k){d.drawArraysInstanced(G,w,X,k)},R=function(G,w){d.vertexAttribDivisor(G,w)},V=function(G){d.drawBuffers(G)}}else W=zr(d,["OES_vertex_array_object"]),l(W)&&(C=function(){return W.createVertexArrayOES()},T=function(Z){W.bindVertexArrayOES(Z)},E=function(Z){W.deleteVertexArrayOES(Z)}),B=zr(d,["ANGLE_instanced_arrays"]),l(B)&&(S=function(Z,G,w,X,k){B.drawElementsInstancedANGLE(Z,G,w,X,k)},I=function(Z,G,w,X){B.drawArraysInstancedANGLE(Z,G,w,X)},R=function(Z,G){B.vertexAttribDivisorANGLE(Z,G)}),N=zr(d,["WEBGL_draw_buffers"]),l(N)&&(V=function(Z){N.drawBuffersWEBGL(Z)});this.glCreateVertexArray=C,this.glBindVertexArray=T,this.glDeleteVertexArray=E,this.glDrawElementsInstanced=S,this.glDrawArraysInstanced=I,this.glVertexAttribDivisor=R,this.glDrawBuffers=V,this._vertexArrayObject=!!W,this._instancedArrays=!!B,this._drawBuffers=!!N,Bt._maximumDrawBuffers=this.drawBuffers?d.getParameter(ne.MAX_DRAW_BUFFERS):1,Bt._maximumColorAttachments=this.drawBuffers?d.getParameter(ne.MAX_COLOR_ATTACHMENTS):1,this._clearColor=new U(0,0,0,0),this._clearDepth=1,this._clearStencil=0;let P=new DL,g=new Uc(this),_=Qe.fromCache();this._defaultPassState=g,this._defaultRenderState=_,this._defaultTexture=void 0,this._defaultEmissiveTexture=void 0,this._defaultNormalTexture=void 0,this._defaultCubeMap=void 0,this._us=P,this._currentRenderState=_,this._currentPassState=g,this._currentFramebuffer=void 0,this._maxFrameTextureUnitIndex=0,this._vertexAttribDivisors=[],this._previousDrawInstanced=!1;for(let Z=0;Z<Bt._maximumVertexAttributes;Z++)this._vertexAttribDivisors.push(0);this._pickObjects=new Map,this._nextPickColor=new Uint32Array(1),this.options={getWebGLStub:n,requestWebgl1:i,webgl:o,allowTextureFilterAnisotropic:r},this.cache={},Qe.apply(d,_,g)}function Vwe(e,t,n){if(typeof WebGLRenderingContext>"u")throw new me("The browser does not support WebGL. Visit http://get.webgl.org.");!n&&!(typeof WebGL2RenderingContext<"u")&&(n=!0);let o=n?"webgl":"webgl2",r=e.getContext(o,t);if(!l(r))throw new me("The browser supports WebGL, but initialization failed.");return r}function Gwe(e,t){let n="WebGL Error: ";switch(t){case e.INVALID_ENUM:n+="INVALID_ENUM";break;case e.INVALID_VALUE:n+="INVALID_VALUE";break;case e.INVALID_OPERATION:n+="INVALID_OPERATION";break;case e.OUT_OF_MEMORY:n+="OUT_OF_MEMORY";break;case e.CONTEXT_LOST_WEBGL:n+="CONTEXT_LOST_WEBGL lost";break;default:n+=`Unknown (${t})`}return n}function Lwe(e,t,n,i){let o=`${Gwe(e,i)}: ${t.name}(`;for(let r=0;r<n.length;++r)r!==0&&(o+=", "),o+=n[r];return o+=");",o}function Wwe(e,t,n){let i=e.getError();if(i!==e.NO_ERROR)throw new me(Lwe(e,t,n,i))}function Fwe(e,t,n){return{get:function(){let i=e[t];return n(e,`get: ${t}`,i),e[t]},set:function(i){e[t]=i,n(e,`set: ${t}`,i)}}}function Bwe(e,t){if(!l(t))return e;function n(o){return function(){let r=o.apply(e,arguments);return t(e,o,arguments),r}}let i={};for(let o in e){let r=e[o];r instanceof Function?i[o]=n(r):Object.defineProperty(i,o,Fwe(e,o,t))}return i}function zr(e,t){let n=t.length;for(let i=0;i<n;++i){let o=e.getExtension(t[i]);if(o)return o}}var wwe={};Object.defineProperties(fd.prototype,{id:{get:function(){return this._id}},webgl2:{get:function(){return this._webgl2}},canvas:{get:function(){return this._canvas}},shaderCache:{get:function(){return this._shaderCache}},textureCache:{get:function(){return this._textureCache}},uniformState:{get:function(){return this._us}},stencilBits:{get:function(){return this._stencilBits}},stencilBuffer:{get:function(){return this._stencilBits>=8}},antialias:{get:function(){return this._antialias}},msaa:{get:function(){return this._webgl2}},standardDerivatives:{get:function(){return this._standardDerivatives||this._webgl2}},floatBlend:{get:function(){return this._floatBlend}},blendMinmax:{get:function(){return this._blendMinmax||this._webgl2}},elementIndexUint:{get:function(){return this._elementIndexUint||this._webgl2}},depthTexture:{get:function(){return this._depthTexture||this._webgl2}},floatingPointTexture:{get:function(){return this._webgl2||this._textureFloat}},halfFloatingPointTexture:{get:function(){return this._webgl2||this._textureHalfFloat}},textureFloatLinear:{get:function(){return this._textureFloatLinear}},textureHalfFloatLinear:{get:function(){return this._webgl2&&this._textureFloatLinear||!this._webgl2&&this._textureHalfFloatLinear}},supportsTextureLod:{get:function(){return this._webgl2||this._supportsTextureLod}},textureFilterAnisotropic:{get:function(){return!!this._textureFilterAnisotropic}},s3tc:{get:function(){return this._s3tc}},pvrtc:{get:function(){return this._pvrtc}},astc:{get:function(){return this._astc}},etc:{get:function(){return this._etc}},etc1:{get:function(){return this._etc1}},bc7:{get:function(){return this._bc7}},supportsBasis:{get:function(){return this._s3tc||this._pvrtc||this._astc||this._etc||this._etc1||this._bc7}},vertexArrayObject:{get:function(){return this._vertexArrayObject||this._webgl2}},fragmentDepth:{get:function(){return this._fragDepth||this._webgl2}},instancedArrays:{get:function(){return this._instancedArrays||this._webgl2}},colorBufferFloat:{get:function(){return this._colorBufferFloat}},colorBufferHalfFloat:{get:function(){return this._webgl2&&this._colorBufferFloat||!this._webgl2&&this._colorBufferHalfFloat}},drawBuffers:{get:function(){return this._drawBuffers||this._webgl2}},debugShaders:{get:function(){return this._debugShaders}},throwOnWebGLError:{get:function(){return this._throwOnWebGLError},set:function(e){this._throwOnWebGLError=e,this._gl=Bwe(this._originalGLContext,e?Wwe:void 0)}},defaultTexture:{get:function(){return this._defaultTexture===void 0&&(this._defaultTexture=new Lt({context:this,source:{width:1,height:1,arrayBufferView:new Uint8Array([255,255,255,255])},flipY:!1})),this._defaultTexture}},defaultEmissiveTexture:{get:function(){return this._defaultEmissiveTexture===void 0&&(this._defaultEmissiveTexture=new Lt({context:this,pixelFormat:Ke.RGB,source:{width:1,height:1,arrayBufferView:new Uint8Array([0,0,0])},flipY:!1})),this._defaultEmissiveTexture}},defaultNormalTexture:{get:function(){return this._defaultNormalTexture===void 0&&(this._defaultNormalTexture=new Lt({context:this,pixelFormat:Ke.RGB,source:{width:1,height:1,arrayBufferView:new Uint8Array([128,128,255])},flipY:!1})),this._defaultNormalTexture}},defaultCubeMap:{get:function(){if(this._defaultCubeMap===void 0){let e={width:1,height:1,arrayBufferView:new Uint8Array([255,255,255,255])};this._defaultCubeMap=new Or({context:this,source:{positiveX:e,negativeX:e,positiveY:e,negativeY:e,positiveZ:e,negativeZ:e},flipY:!1})}return this._defaultCubeMap}},drawingBufferHeight:{get:function(){return this._gl.drawingBufferHeight}},drawingBufferWidth:{get:function(){return this._gl.drawingBufferWidth}},defaultFramebuffer:{get:function(){return wwe}}});function Jse(e,t,n,i){let o=e._currentRenderState,r=e._currentPassState;e._currentRenderState=t,e._currentPassState=n,Qe.partialApply(e._gl,o,t,r,n,i)}var XH;typeof WebGLRenderingContext<"u"&&(XH=[ne.BACK]);function QD(e,t){if(t!==e._currentFramebuffer){e._currentFramebuffer=t;let n=XH;if(l(t))t._bind(),n=t._getActiveColorAttachments();else{let i=e._gl;i.bindFramebuffer(i.FRAMEBUFFER,null)}e.drawBuffers&&e.glDrawBuffers(n)}}var Nwe=new mi;fd.prototype.clear=function(e,t){e=e??Nwe,t=t??this._defaultPassState;let n=this._gl,i=0,o=e.color,r=e.depth,s=e.stencil;l(o)&&(U.equals(this._clearColor,o)||(U.clone(o,this._clearColor),n.clearColor(o.red,o.green,o.blue,o.alpha)),i|=n.COLOR_BUFFER_BIT),l(r)&&(r!==this._clearDepth&&(this._clearDepth=r,n.clearDepth(r)),i|=n.DEPTH_BUFFER_BIT),l(s)&&(s!==this._clearStencil&&(this._clearStencil=s,n.clearStencil(s)),i|=n.STENCIL_BUFFER_BIT);let a=e.renderState??this._defaultRenderState;Jse(this,a,t,!0);let c=e.framebuffer??t.framebuffer;QD(this,c),n.clear(i)};function Pwe(e,t,n,i,o){QD(e,t),Jse(e,o,n,!1),i._bind(),e._maxFrameTextureUnitIndex=Math.max(e._maxFrameTextureUnitIndex,i.maximumTextureUnitIndex)}function Xwe(e,t,n,i){let o=t._primitiveType,r=t._vertexArray,s=t._offset,a=t._count,c=t.instanceCount;e._us.model=t._modelMatrix??F.IDENTITY,n._setUniforms(i,e._us,e.validateShaderProgram),r._bind();let d=r.indexBuffer;l(d)?(s=s*d.bytesPerIndex,l(a)?a=Math.min(a,d.numberOfIndices):a=d.numberOfIndices,c===0?e._gl.drawElements(o,a,d.indexDatatype,s):e.glDrawElementsInstanced(o,a,d.indexDatatype,s,c)):(l(a)?a=Math.min(a,r.numberOfVertices):a=r.numberOfVertices,c===0?e._gl.drawArrays(o,s,a):e.glDrawArraysInstanced(o,s,a,c)),r._unBind()}fd.prototype.draw=function(e,t,n,i){t=t??this._defaultPassState;let o=e._framebuffer??t.framebuffer,r=e._renderState??this._defaultRenderState;n=n??e._shaderProgram,i=i??e._uniformMap,Pwe(this,o,t,n,r),Xwe(this,e,n,i)};fd.prototype.beginFrame=function(){};fd.prototype.endFrame=function(){let e=this._gl;e.useProgram(null),this._currentFramebuffer=void 0,e.bindFramebuffer(e.FRAMEBUFFER,null);let t=XH;this.drawBuffers&&this.glDrawBuffers(t);let n=this._maxFrameTextureUnitIndex;this._maxFrameTextureUnitIndex=0;for(let i=0;i<n;++i)e.activeTexture(e.TEXTURE0+i),e.bindTexture(e.TEXTURE_2D,null),e.bindTexture(e.TEXTURE_CUBE_MAP,null)};fd.prototype.readPixelsToPBO=function(e){let t=this._gl;e=e??Q.EMPTY_OBJECT;let n=Math.max(e.x??0,0),i=Math.max(e.y??0,0),o=e.width??this.drawingBufferWidth,r=e.height??this.drawingBufferHeight,s=e.framebuffer;if(!this._webgl2)throw new fe("A WebGL 2 context is required to read pixels using a PBO.");let a=Oe.UNSIGNED_BYTE,c=Ke.RGBA;l(s)&&s.numberOfColorAttachments>0&&(a=s.getColorTexture(0).pixelDatatype,c=s.getColorTexture(0).pixelFormat);let d=it.createPixelBuffer({context:this,sizeInBytes:Ke.textureSizeInBytes(c,a,o,r),usage:Be.DYNAMIC_READ});return QD(this,s),d._bind(),t.readPixels(n,i,o,r,c,Oe.toWebGLConstant(a,this),0),d._unBind(),d};fd.prototype.readPixels=function(e){let t=this._gl;e=e??Q.EMPTY_OBJECT;let n=Math.max(e.x??0,0),i=Math.max(e.y??0,0),o=e.width??this.drawingBufferWidth,r=e.height??this.drawingBufferHeight,s=e.framebuffer,a=Oe.UNSIGNED_BYTE,c=Ke.RGBA;l(s)&&s.numberOfColorAttachments>0&&(a=s.getColorTexture(0).pixelDatatype,c=s.getColorTexture(0).pixelFormat);let d=Ke.createTypedArray(c,a,o,r);return QD(this,s),t.readPixels(n,i,o,r,Ke.RGBA,Oe.toWebGLConstant(a,this),d),d};var Kse={position:0,textureCoordinates:1};fd.prototype.getViewportQuadVertexArray=function(){let e=this.cache.viewportQuad_vertexArray;if(!l(e)){let t=new Ct({attributes:{position:new we({componentDatatype:H.FLOAT,componentsPerAttribute:2,values:[-1,-1,1,-1,1,1,-1,1]}),textureCoordinates:new we({componentDatatype:H.FLOAT,componentsPerAttribute:2,values:[0,0,1,0,1,1,0,1]})},indices:new Uint16Array([0,1,2,0,2,3]),primitiveType:We.TRIANGLES});e=kn.fromGeometry({context:this,geometry:t,attributeLocations:Kse,bufferUsage:Be.STATIC_DRAW,interleave:!0}),this.cache.viewportQuad_vertexArray=e}return e};fd.prototype.createViewportQuadCommand=function(e,t){return t=t??Q.EMPTY_OBJECT,new ot({vertexArray:this.getViewportQuadVertexArray(),primitiveType:We.TRIANGLES,renderState:t.renderState,shaderProgram:tn.fromCache({context:this,vertexShaderSource:Ax,fragmentShaderSource:e,attributeLocations:Kse}),uniformMap:t.uniformMap,owner:t.owner,framebuffer:t.framebuffer,pass:t.pass})};fd.prototype.getObjectByPickColor=function(e){return this._pickObjects.get(e)};fd.prototype.createPickId=function(e){++this._nextPickColor[0];let t=this._nextPickColor[0];if(t===0)throw new me("Out of unique Pick IDs.");return this._pickObjects.set(t,e),new oV(this._pickObjects,t,U.fromRgba(t))};fd.prototype.isDestroyed=function(){return!1};fd.prototype.destroy=function(){let e=this.cache;for(let t in e)if(e.hasOwnProperty(t)){let n=e[t];l(n.destroy)&&n.destroy()}return this._shaderCache=this._shaderCache.destroy(),this._textureCache=this._textureCache.destroy(),this._defaultTexture=this._defaultTexture&&this._defaultTexture.destroy(),this._defaultEmissiveTexture=this._defaultEmissiveTexture&&this._defaultEmissiveTexture.destroy(),this._defaultNormalTexture=this._defaultNormalTexture&&this._defaultNormalTexture.destroy(),this._defaultCubeMap=this._defaultCubeMap&&this._defaultCubeMap.destroy(),he(this)};var Zx=fd;var T8t=y(x(),1);var e8t=y(x(),1);function yS(e){e=e??Q.EMPTY_OBJECT;let{context:t,width:n,height:i,colorRenderbuffers:o,colorTextures:r,depthStencilRenderbuffer:s,depthStencilTexture:a,destroyAttachments:c}=e;if(this._width=n,this._height=i,l(o)!==l(r))throw new fe("Both color renderbuffer and texture attachments must be provided.");if(l(s)!==l(a))throw new fe("Both depth-stencil renderbuffer and texture attachments must be provided.");this._renderFramebuffer=new ss({context:t,colorRenderbuffers:o,depthStencilRenderbuffer:s,destroyAttachments:c}),this._colorFramebuffer=new ss({context:t,colorTextures:r,depthStencilTexture:a,destroyAttachments:c})}yS.prototype.getRenderFramebuffer=function(){return this._renderFramebuffer};yS.prototype.getColorFramebuffer=function(){return this._colorFramebuffer};yS.prototype.blitFramebuffers=function(e,t){this._renderFramebuffer.bindRead(),this._colorFramebuffer.bindDraw();let n=e._gl,i=0;this._colorFramebuffer._colorTextures.length>0&&(i|=n.COLOR_BUFFER_BIT),l(this._colorFramebuffer.depthStencilTexture)&&(i|=n.DEPTH_BUFFER_BIT|(t?n.STENCIL_BUFFER_BIT:0)),n.blitFramebuffer(0,0,this._width,this._height,0,0,this._width,this._height,i,n.NEAREST),n.bindFramebuffer(n.READ_FRAMEBUFFER,null),n.bindFramebuffer(n.DRAW_FRAMEBUFFER,null)};yS.prototype.isDestroyed=function(){return!1};yS.prototype.destroy=function(){return this._renderFramebuffer.destroy(),this._colorFramebuffer.destroy(),he(this)};var kL=yS;var d8t=y(x(),1);var i8t=y(x(),1);var pd={RGBA4:ne.RGBA4,RGBA8:ne.RGBA8,RGBA16F:ne.RGBA16F,RGBA32F:ne.RGBA32F,RGB5_A1:ne.RGB5_A1,RGB565:ne.RGB565,DEPTH_COMPONENT16:ne.DEPTH_COMPONENT16,STENCIL_INDEX8:ne.STENCIL_INDEX8,DEPTH_STENCIL:ne.DEPTH_STENCIL,DEPTH24_STENCIL8:ne.DEPTH24_STENCIL8,validate:function(e){return e===pd.RGBA4||e===pd.RGBA8||e===pd.RGBA16F||e===pd.RGBA32F||e===pd.RGB5_A1||e===pd.RGB565||e===pd.DEPTH_COMPONENT16||e===pd.STENCIL_INDEX8||e===pd.DEPTH_STENCIL||e===pd.DEPTH24_STENCIL8},getColorFormat:function(e){return e===ne.FLOAT?pd.RGBA32F:e===ne.HALF_FLOAT_OES?pd.RGBA16F:pd.RGBA8}},Tl=Object.freeze(pd);function QL(e){e=e??Q.EMPTY_OBJECT;let t=e.context,n=t._gl,i=Bt.maximumRenderbufferSize,o=e.format??Tl.RGBA4,r=l(e.width)?e.width:t.drawingBufferWidth,s=l(e.height)?e.height:t.drawingBufferHeight,a=e.numSamples??1;this._gl=n,this._format=o,this._width=r,this._height=s,this._renderbuffer=this._gl.createRenderbuffer(),n.bindRenderbuffer(n.RENDERBUFFER,this._renderbuffer),a>1?n.renderbufferStorageMultisample(n.RENDERBUFFER,a,o,r,s):n.renderbufferStorage(n.RENDERBUFFER,o,r,s),n.bindRenderbuffer(n.RENDERBUFFER,null)}Object.defineProperties(QL.prototype,{format:{get:function(){return this._format}},width:{get:function(){return this._width}},height:{get:function(){return this._height}}});QL.prototype._getRenderbuffer=function(){return this._renderbuffer};QL.prototype.isDestroyed=function(){return!1};QL.prototype.destroy=function(){return this._gl.deleteRenderbuffer(this._renderbuffer),he(this)};var nu=QL;function ca(e){e=e??Q.EMPTY_OBJECT,this._numSamples=e.numSamples??1,this._colorAttachmentsLength=e.colorAttachmentsLength??1,this._color=e.color??!0,this._depth=e.depth??!1,this._depthStencil=e.depthStencil??!1,this._supportsDepthTexture=e.supportsDepthTexture??!1,this._createColorAttachments=e.createColorAttachments??!0,this._createDepthAttachments=e.createDepthAttachments??!0,this._pixelDatatype=e.pixelDatatype,this._pixelFormat=e.pixelFormat,this._width=void 0,this._height=void 0,this._framebuffer=void 0,this._multisampleFramebuffer=void 0,this._colorTextures=void 0,this._color&&(this._colorTextures=new Array(this._colorAttachmentsLength),this._colorRenderbuffers=new Array(this._colorAttachmentsLength)),this._colorRenderbuffer=void 0,this._depthStencilRenderbuffer=void 0,this._depthStencilTexture=void 0,this._depthRenderbuffer=void 0,this._depthTexture=void 0,this._attachmentsDirty=!1}Object.defineProperties(ca.prototype,{framebuffer:{get:function(){return this._numSamples>1?this._multisampleFramebuffer.getRenderFramebuffer():this._framebuffer}},numSamples:{get:function(){return this._numSamples}},status:{get:function(){return this.framebuffer.status}}});ca.prototype.isDirty=function(e,t,n,i,o){n=n??1;let r=this._width!==e||this._height!==t,s=this._numSamples!==n,a=l(i)&&this._pixelDatatype!==i||l(o)&&this._pixelFormat!==o,c=n===1?l(this._framebuffer):l(this._multisampleFramebuffer);return this._attachmentsDirty||r||s||a||!c||this._color&&!l(this._colorTextures[0])};ca.prototype.update=function(e,t,n,i,o,r){if(i=e.msaa?i??1:1,o=o??(this._color?this._pixelDatatype??Oe.UNSIGNED_BYTE:void 0),r=r??(this._color?this._pixelFormat??Ke.RGBA:void 0),this.isDirty(t,n,i,o,r)){if(this.destroy(),this._width=t,this._height=n,this._numSamples=i,this._pixelDatatype=o,this._pixelFormat=r,this._attachmentsDirty=!1,this._color&&this._createColorAttachments){for(let s=0;s<this._colorAttachmentsLength;++s)if(this._colorTextures[s]=new Lt({context:e,width:t,height:n,pixelFormat:r,pixelDatatype:o,sampler:Ht.NEAREST}),this._numSamples>1){let a=Tl.getColorFormat(o);this._colorRenderbuffers[s]=new nu({context:e,width:t,height:n,format:a,numSamples:this._numSamples})}}this._depthStencil&&this._createDepthAttachments&&(this._supportsDepthTexture&&e.depthTexture?(this._depthStencilTexture=new Lt({context:e,width:t,height:n,pixelFormat:Ke.DEPTH_STENCIL,pixelDatatype:Oe.UNSIGNED_INT_24_8,sampler:Ht.NEAREST}),this._numSamples>1&&(this._depthStencilRenderbuffer=new nu({context:e,width:t,height:n,format:Tl.DEPTH24_STENCIL8,numSamples:this._numSamples}))):this._depthStencilRenderbuffer=new nu({context:e,width:t,height:n,format:Tl.DEPTH_STENCIL})),this._depth&&this._createDepthAttachments&&(this._supportsDepthTexture&&e.depthTexture?this._depthTexture=new Lt({context:e,width:t,height:n,pixelFormat:Ke.DEPTH_COMPONENT,pixelDatatype:Oe.UNSIGNED_INT,sampler:Ht.NEAREST}):this._depthRenderbuffer=new nu({context:e,width:t,height:n,format:Tl.DEPTH_COMPONENT16})),this._numSamples>1?this._multisampleFramebuffer=new kL({context:e,width:this._width,height:this._height,colorTextures:this._colorTextures,colorRenderbuffers:this._colorRenderbuffers,depthStencilTexture:this._depthStencilTexture,depthStencilRenderbuffer:this._depthStencilRenderbuffer,destroyAttachments:!1}):this._framebuffer=new ss({context:e,colorTextures:this._colorTextures,depthTexture:this._depthTexture,depthRenderbuffer:this._depthRenderbuffer,depthStencilTexture:this._depthStencilTexture,depthStencilRenderbuffer:this._depthStencilRenderbuffer,destroyAttachments:!1})}};ca.prototype.getColorTexture=function(e){return e=e??0,this._colorTextures[e]};ca.prototype.setColorTexture=function(e,t){t=t??0,this._attachmentsDirty=e!==this._colorTextures[t],this._colorTextures[t]=e};ca.prototype.getColorRenderbuffer=function(e){return e=e??0,this._colorRenderbuffers[e]};ca.prototype.setColorRenderbuffer=function(e,t){t=t??0,this._attachmentsDirty=e!==this._colorRenderbuffers[t],this._colorRenderbuffers[t]=e};ca.prototype.getDepthRenderbuffer=function(){return this._depthRenderbuffer};ca.prototype.setDepthRenderbuffer=function(e){this._attachmentsDirty=e!==this._depthRenderbuffer,this._depthRenderbuffer=e};ca.prototype.getDepthTexture=function(){return this._depthTexture};ca.prototype.setDepthTexture=function(e){this._attachmentsDirty=e!==this._depthTexture,this._depthTexture=e};ca.prototype.getDepthStencilRenderbuffer=function(){return this._depthStencilRenderbuffer};ca.prototype.setDepthStencilRenderbuffer=function(e){this._attachmentsDirty=e!==this._depthStencilRenderbuffer,this._depthStencilRenderbuffer=e};ca.prototype.getDepthStencilTexture=function(){return this._depthStencilTexture};ca.prototype.setDepthStencilTexture=function(e){this._attachmentsDirty=e!==this._depthStencilTexture,this._depthStencilTexture=e};ca.prototype.prepareTextures=function(e,t){this._numSamples>1&&this._multisampleFramebuffer.blitFramebuffers(e,t)};ca.prototype.clear=function(e,t,n){let i=t.framebuffer;t.framebuffer=this.framebuffer,t.execute(e,n),t.framebuffer=i};ca.prototype.destroyFramebuffer=function(){this._framebuffer=this._framebuffer&&this._framebuffer.destroy(),this._multisampleFramebuffer=this._multisampleFramebuffer&&this._multisampleFramebuffer.destroy()};ca.prototype.destroy=function(){if(this._color){let e=this._colorTextures,t=this._colorRenderbuffers;for(let n=0;n<e.length;++n){let i=e[n];this._createColorAttachments&&l(i)&&!i.isDestroyed()&&i.destroy(),l(i)&&i.isDestroyed()&&(e[n]=void 0);let o=t[n];this._createColorAttachments&&l(o)&&!o.isDestroyed()&&o.destroy(),l(o)&&o.isDestroyed()&&(t[n]=void 0)}}this._depthStencil&&(this._createDepthAttachments&&(this._depthStencilTexture=this._depthStencilTexture&&this._depthStencilTexture.destroy(),this._depthStencilRenderbuffer=this._depthStencilRenderbuffer&&this._depthStencilRenderbuffer.destroy()),l(this._depthStencilTexture)&&this._depthStencilTexture.isDestroyed()&&(this._depthStencilTexture=void 0),l(this._depthStencilRenderbuffer)&&this._depthStencilRenderbuffer.isDestroyed()&&(this._depthStencilRenderbuffer=void 0)),this._depth&&(this._createDepthAttachments&&(this._depthTexture=this._depthTexture&&this._depthTexture.destroy(),this._depthRenderbuffer=this._depthRenderbuffer&&this._depthRenderbuffer.destroy()),l(this._depthTexture)&&this._depthTexture.isDestroyed()&&(this._depthTexture=void 0),l(this._depthRenderbuffer)&&this._depthRenderbuffer.isDestroyed()&&(this._depthRenderbuffer=void 0)),this.destroyFramebuffer()};var Ti=ca;var I8t=y(x(),1);function Ywe(e,t,n){let i={flipY:!0,skipColorSpaceConversion:n,preferImageBitmap:!0},o=[Le.createIfNeeded(t.positiveX).fetchImage(i),Le.createIfNeeded(t.negativeX).fetchImage(i),Le.createIfNeeded(t.positiveY).fetchImage(i),Le.createIfNeeded(t.negativeY).fetchImage(i),Le.createIfNeeded(t.positiveZ).fetchImage(i),Le.createIfNeeded(t.negativeZ).fetchImage(i)];return Promise.all(o).then(function(r){return new Or({context:e,source:{positiveX:r[0],negativeX:r[1],positiveY:r[2],negativeY:r[3],positiveZ:r[4],negativeZ:r[5]}})})}var OL=Ywe;var Q8t=y(x(),1);var R8t=y(x(),1);var Rx={NONE:0,VERTEX:1,FRAGMENT:2,BOTH:3};Rx.includesVertexShader=function(e){return(e&Rx.VERTEX)!==0};Rx.includesFragmentShader=function(e){return(e&Rx.FRAGMENT)!==0};Rx.union=function(...e){let t=0;for(let n=0;n<e.length;n++)t|=e[n];return t};Rx.intersection=function(...e){let t=e[0];for(let n=1;n<e.length;n++)t&=e[n];return t};var pe=Object.freeze(Rx);var G8t=y(x(),1);function YH(e){this.name=e,this.fields=[]}YH.prototype.addField=function(e,t){let n=` ${e} ${t};`;this.fields.push(n)};YH.prototype.generateGlslLines=function(){let e=this.fields;return e.length===0&&(e=[" float _empty;"]),[].concat(`struct ${this.name}`,"{",e,"};")};var zL=YH;var W8t=y(x(),1);function MH(e){this.signature=e,this.body=[]}MH.prototype.addLines=function(e){let t=this.body;if(Array.isArray(e)){let n=e.length;for(let i=0;i<n;i++)t.push(` ${e[i]}`)}else t.push(` ${e}`)};MH.prototype.generateGlslLines=function(){return[].concat(this.signature,"{",this.body,"}")};var HL=MH;var w8t=y(x(),1);function Mwe(e,t){if(!l(t))return;let n=t.length;if(n===0)return;let i=e.length;e.length+=n;for(let o=0;o<n;o++)e[i+o]=t[o]}var ri=Mwe;function El(){this._positionAttributeLine=void 0,this._nextAttributeLocation=1,this._attributeLocations={},this._attributeLines=[],this._structs={},this._functions={},this._vertexShaderParts={defineLines:[],uniformLines:[],shaderLines:[],varyingLines:[],structIds:[],functionIds:[]},this._fragmentShaderParts={defineLines:[],uniformLines:[],shaderLines:[],varyingLines:[],structIds:[],functionIds:[]}}Object.defineProperties(El.prototype,{attributeLocations:{get:function(){return this._attributeLocations}}});El.prototype.addDefine=function(e,t,n){n=n??pe.BOTH;let i=e;l(t)&&(i+=` ${t.toString()}`),pe.includesVertexShader(n)&&this._vertexShaderParts.defineLines.push(i),pe.includesFragmentShader(n)&&this._fragmentShaderParts.defineLines.push(i)};El.prototype.addStruct=function(e,t,n){this._structs[e]=new zL(t),pe.includesVertexShader(n)&&this._vertexShaderParts.structIds.push(e),pe.includesFragmentShader(n)&&this._fragmentShaderParts.structIds.push(e)};El.prototype.addStructField=function(e,t,n){this._structs[e].addField(t,n)};El.prototype.addFunction=function(e,t,n){this._functions[e]=new HL(t),pe.includesVertexShader(n)&&this._vertexShaderParts.functionIds.push(e),pe.includesFragmentShader(n)&&this._fragmentShaderParts.functionIds.push(e)};El.prototype.addFunctionLines=function(e,t){this._functions[e].addLines(t)};El.prototype.addUniform=function(e,t,n){n=n??pe.BOTH;let i=`uniform ${e} ${t};`;pe.includesVertexShader(n)&&this._vertexShaderParts.uniformLines.push(i),pe.includesFragmentShader(n)&&this._fragmentShaderParts.uniformLines.push(i)};El.prototype.setPositionAttribute=function(e,t){return this._positionAttributeLine=`in ${e} ${t};`,this._attributeLocations[t]=0,0};El.prototype.addAttribute=function(e,t){let n=`in ${e} ${t};`;this._attributeLines.push(n);let i=this._nextAttributeLocation;return this._attributeLocations[t]=i,this._nextAttributeLocation+=Uwe(e),i};El.prototype.addVarying=function(e,t,n){n=l(n)?`${n} `:"";let i=`${e} ${t};`;this._vertexShaderParts.varyingLines.push(`${n}out ${i}`),this._fragmentShaderParts.varyingLines.push(`${n}in ${i}`)};El.prototype.addVertexLines=function(e){let t=this._vertexShaderParts.shaderLines;Array.isArray(e)?ri(t,e):t.push(e)};El.prototype.addFragmentLines=function(e){let t=this._fragmentShaderParts.shaderLines;Array.isArray(e)?ri(t,e):t.push(e)};El.prototype.buildShaderProgram=function(e){let t=l(this._positionAttributeLine)?[this._positionAttributeLine]:[],n=vwe(this),i=Dwe(this),o=t.concat(this._attributeLines,this._vertexShaderParts.uniformLines,this._vertexShaderParts.varyingLines,n.vertexLines,i.vertexLines,this._vertexShaderParts.shaderLines).join(`
`),r=new ze({defines:this._vertexShaderParts.defineLines,sources:[o]}),s=this._fragmentShaderParts.uniformLines.concat(this._fragmentShaderParts.varyingLines,n.fragmentLines,i.fragmentLines,this._fragmentShaderParts.shaderLines).join(`
`),a=new ze({defines:this._fragmentShaderParts.defineLines,sources:[s]});return tn.fromCache({context:e,vertexShaderSource:r,fragmentShaderSource:a,attributeLocations:this._attributeLocations})};El.prototype.clone=function(){return He(this,!0)};function vwe(e){let t=[],n=[],i,o=e._vertexShaderParts.structIds,r,s,a;for(i=0;i<o.length;i++)r=o[i],s=e._structs[r],a=s.generateGlslLines(),ri(t,a);for(o=e._fragmentShaderParts.structIds,i=0;i<o.length;i++)r=o[i],s=e._structs[r],a=s.generateGlslLines(),ri(n,a);return{vertexLines:t,fragmentLines:n}}function Uwe(e){switch(e){case"mat2":return 2;case"mat3":return 3;case"mat4":return 4;default:return 1}}function Dwe(e){let t=[],n=[],i,o=e._vertexShaderParts.functionIds,r,s,a;for(i=0;i<o.length;i++)r=o[i],s=e._functions[r],a=s.generateGlslLines(),ri(t,a);for(o=e._fragmentShaderParts.functionIds,i=0;i<o.length;i++)r=o[i],s=e._functions[r],a=s.generateGlslLines(),ri(n,a);return{vertexLines:t,fragmentLines:n}}var GA=El;var K8t=y(x(),1);function OD(e){this._autoDestroy=e?.autoDestroy??!0,this._canvas=document.createElement("canvas"),this._context=new Zx(this._canvas,He(e?.contextOptions)),this._canvases=[]}OD.prototype.createSceneContext=function(e){let t=e.getContext("2d",{alpha:!0}),n=this;n._canvases.push(e);let i=!1,o=function(){i=!0;let c=n._canvases.indexOf(e);c!==-1&&(n._canvases.splice(c,1),n._autoDestroy&&n._canvases.length===0&&n.destroy())},r=function(){let c=n._context.canvas,d=this.drawingBufferWidth;c.width<d&&(c.width=d);let u=this.drawingBufferHeight;c.height<u&&(c.height=u)},s=function(){let c=this.drawingBufferWidth,d=this.drawingBufferHeight,u=n._context.canvas.height-d;t.drawImage(n._context.canvas,0,u,c,d,0,0,c,d),n._context.endFrame()};return new Proxy(this._context,{get(c,d,u){if(d==="isDestroyed")return function(){return i};switch(d){case"_canvas":return e;case"destroy":return o;case"drawingBufferWidth":return e.width;case"drawingBufferHeight":return e.height;case"beginFrame":return r;case"endFrame":return s;default:return Reflect.get(c,d,u)}}})};OD.prototype.destroy=function(){this._context.destroy(),he(this)};OD.prototype.isDestroyed=function(){return!1};var JL=OD;var i7t=y(x(),1);function Vx(e){e=e??Q.EMPTY_OBJECT;let t=e.context;if(!t._webgl2)throw new fe("A WebGL 2 context is required to use Sync operations.");let n=t._gl,i=n.fenceSync(ne.SYNC_GPU_COMMANDS_COMPLETE,0);this._gl=n,this._sync=i}Vx.create=function(e){return new Vx(e)};Vx.prototype.getStatus=function(){return this._gl.getSyncParameter(this._sync,ne.SYNC_STATUS)};Vx.prototype.isDestroyed=function(){return!1};Vx.prototype.destroy=function(){return this._gl.deleteSync(this._sync),he(this)};Vx.prototype.waitForSignal=async function(e,t){let n=this;t=t??10;function i(o,r,s){return()=>{n.getStatus()===ne.SIGNALED?o():s<=0?r(new me("Wait for signal timeout")):e(i(o,r,s-1))}}return new Promise((o,r)=>{e(i(o,r,t))})};var KL=Vx;var g7t=y(x(),1);function $b(e){e=e??Q.EMPTY_OBJECT;let{context:t,source:n,pixelFormat:i=Ke.RGBA,pixelDatatype:o=Oe.UNSIGNED_BYTE,flipY:r=!0,skipColorSpaceConversion:s=!1,sampler:a=new Ht}=e;if(!t.webgl2&&!l(t.options.getWebGLStub))throw new fe("WebGL1 does not support texture3D. Please use a WebGL2 context.");let{width:c,height:d,depth:u}=e;l(n)&&(l(c)||(c=n.width),l(d)||(d=n.height),l(u)||(u=n.depth));let h=e.preMultiplyAlpha||i===Ke.RGB||i===Ke.LUMINANCE,p=Ke.toInternalFormat(i,o,t),A=Ke.isCompressedFormat(p),f=t._gl,b=Ke.texture3DSizeInBytes(i,o,c,d,u);if(this._id=e.id??qn(),this._context=t,this._textureFilterAnisotropic=t._textureFilterAnisotropic,this._textureTarget=f.TEXTURE_3D,this._texture=f.createTexture(),this._internalFormat=p,this._pixelFormat=i,this._pixelDatatype=o,this._width=c,this._height=d,this._depth=u,this._dimensions=new m(c,d,u),this._hasMipmap=!1,this._sizeInBytes=b,this._preMultiplyAlpha=h,this._flipY=r,this._initialized=!1,this._sampler=void 0,this._sampler=a,$se(this,a),f.activeTexture(f.TEXTURE0),f.bindTexture(this._textureTarget,this._texture),l(n)){if(s?f.pixelStorei(f.UNPACK_COLORSPACE_CONVERSION_WEBGL,f.NONE):f.pixelStorei(f.UNPACK_COLORSPACE_CONVERSION_WEBGL,f.BROWSER_DEFAULT_WEBGL),!l(n.arrayBufferView))throw new fe("For Texture3D, options.source.arrayBufferView must be defined");jse(this,n),this._initialized=!0}else qse(this);f.bindTexture(this._textureTarget,null)}function jse(e,t){let n=e._context,i=n._gl,o=e._textureTarget,r=e._internalFormat,{width:s,height:a,depth:c,pixelFormat:d,pixelDatatype:u,flipY:h}=e,p=Ke.alignmentInBytes(d,u,s);i.pixelStorei(i.UNPACK_ALIGNMENT,p),i.pixelStorei(i.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!1),i.pixelStorei(i.UNPACK_FLIP_Y_WEBGL,!1);let{arrayBufferView:A}=t;h&&console.warn("texture3D.flipY is not supported.");let f=1;if(t.mipLevels&&t.mipLevels.length&&(f=t.mipLevels.length+1),i.texStorage3D(o,f,r,s,a,c),i.texSubImage3D(o,0,0,0,0,s,a,c,d,Oe.toWebGLConstant(u,n),A),f>1){let b=s,C=a,T=c;for(let E=0;E<t.mipLevels.length;++E)b=vH(b),C=vH(C),T=vH(T),i.texSubImage3D(o,E+1,0,0,0,b,C,T,d,Oe.toWebGLConstant(u,n),t.mipLevels[E])}}$b.prototype.copyFrom=function(e){e=e??Q.EMPTY_OBJECT;let{source:t,xOffset:n=0,yOffset:i=0,zOffset:o=0}=e,s=this._context._gl,a=this._textureTarget;s.activeTexture(s.TEXTURE0),s.bindTexture(a,this._texture);let{width:c,height:d,depth:u}=t,h=!1;this._initialized||(n===0&&i===0&&o===0&&c===this._width&&d===this._height&&u===this._depth?(jse(this,t),h=!0):(s.pixelStorei(s.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!1),s.pixelStorei(s.UNPACK_FLIP_Y_WEBGL,!1),qse(this)),this._initialized=!0),h||kwe(this,t.arrayBufferView,n,i,o,c,d,u),s.bindTexture(a,null)};function kwe(e,t,n,i,o,r,s,a){let c=e._context,d=c._gl,{pixelFormat:u,pixelDatatype:h}=e,p=Ke.alignmentInBytes(u,h,r);d.pixelStorei(d.UNPACK_ALIGNMENT,p),d.pixelStorei(d.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!1),d.pixelStorei(d.UNPACK_FLIP_Y_WEBGL,!1),d.texSubImage3D(e._textureTarget,0,n,i,o,r,s,a,u,Oe.toWebGLConstant(h,c),t)}function vH(e){let t=Math.floor(e/2)|0;return Math.max(t,1)}function qse(e){let t=e._context;t._gl.texImage3D(e._textureTarget,0,e._internalFormat,e._width,e._height,e._depth,0,e._pixelFormat,Oe.toWebGLConstant(e._pixelDatatype,t),null)}$b.create=function(e){return new $b(e)};Object.defineProperties($b.prototype,{id:{get:function(){return this._id}},sampler:{get:function(){return this._sampler},set:function(e){$se(this,e),this._sampler=e}},pixelFormat:{get:function(){return this._pixelFormat}},pixelDatatype:{get:function(){return this._pixelDatatype}},dimensions:{get:function(){return this._dimensions}},preMultiplyAlpha:{get:function(){return this._preMultiplyAlpha}},flipY:{get:function(){return this._flipY}},width:{get:function(){return this._width}},height:{get:function(){return this._height}},depth:{get:function(){return this._depth}},sizeInBytes:{get:function(){return this._hasMipmap?Math.floor(this._sizeInBytes*8/7):this._sizeInBytes}},_target:{get:function(){return this._textureTarget}}});function $se(e,t){let{minificationFilter:n,magnificationFilter:i}=t,o=[zt.NEAREST_MIPMAP_NEAREST,zt.NEAREST_MIPMAP_LINEAR,zt.LINEAR_MIPMAP_NEAREST,zt.LINEAR_MIPMAP_LINEAR].includes(n),r=e._context,s=e._pixelFormat,a=e._pixelDatatype;(a===Oe.FLOAT&&!r.textureFloatLinear||a===Oe.HALF_FLOAT&&!r.textureHalfFloatLinear)&&(n=o?zt.NEAREST_MIPMAP_NEAREST:zt.NEAREST,i=li.NEAREST),Ke.isDepthFormat(s)&&(n=zt.NEAREST,i=li.NEAREST);let c=r._gl,d=e._textureTarget;c.activeTexture(c.TEXTURE0),c.bindTexture(d,e._texture),c.texParameteri(d,c.TEXTURE_MIN_FILTER,n),c.texParameteri(d,c.TEXTURE_MAG_FILTER,i),c.texParameteri(d,c.TEXTURE_WRAP_R,t.wrapR),c.texParameteri(d,c.TEXTURE_WRAP_S,t.wrapS),c.texParameteri(d,c.TEXTURE_WRAP_T,t.wrapT),l(e._textureFilterAnisotropic)&&c.texParameteri(d,e._textureFilterAnisotropic.TEXTURE_MAX_ANISOTROPY_EXT,t.maximumAnisotropy),c.bindTexture(d,null)}$b.prototype.generateMipmap=function(e){e=e??lm.DONT_CARE,this._hasMipmap=!0;let t=this._context._gl,n=this._textureTarget;t.hint(t.GENERATE_MIPMAP_HINT,e),t.activeTexture(t.TEXTURE0),t.bindTexture(n,this._texture),t.generateMipmap(n),t.bindTexture(n,null)};$b.prototype.isDestroyed=function(){return!1};$b.prototype.destroy=function(){return this._context._gl.deleteTexture(this._texture),he(this)};var jL=$b;var N7t=y(x(),1);var C7t=y(x(),1);function qL({x:e,y:t,width:n,height:i}){this.rectangle=new nt(e,t,n,i),this.childNode1=void 0,this.childNode2=void 0,this.index=void 0}function UH({width:e,height:t,borderPadding:n}){this._width=e,this._height=t,this._borderPadding=n,this._root=new qL({x:n,y:n,width:e-2*n,height:t-2*n})}UH.prototype.pack=function(e,{width:t,height:n}){let i=this._findNode(this._root,{width:t,height:n});if(l(i))return i.index=e,i};UH.prototype._findNode=function(e,{width:t,height:n}){if(l(e)){if(!l(e.childNode1)&&!l(e.childNode2)){if(l(e.index))return;let{rectangle:i}=e,o=i.width,r=i.height,s=o-t,a=r-n;if(s<0||a<0)return;if(s===0&&a===0)return e;let c=this._borderPadding;if(s>a){e.childNode1=new qL({x:i.x,y:i.y,width:t,height:r});let u=s-c;return u>0&&(e.childNode2=new qL({x:i.x+t+c,y:i.y,width:u,height:r})),this._findNode(e.childNode1,{width:t,height:n})}e.childNode1=new qL({x:i.x,y:i.y,width:o,height:n});let d=a-c;return d>0&&(e.childNode2=new qL({x:i.x,y:i.y+n+c,width:o,height:d})),this._findNode(e.childNode1,{width:t,height:n})}return this._findNode(e.childNode1,{width:t,height:n})||this._findNode(e.childNode2,{width:t,height:n})}};var xS=UH;var eae=16;function Sl(e){e=e??Q.EMPTY_OBJECT;let t=e.borderWidthInPixels??1,n=e.initialSize??new M(eae,eae);this._pixelFormat=e.pixelFormat??Ke.RGBA,this._sampler=e.sampler,this._borderWidthInPixels=t,this._initialSize=n,this._texturePacker=void 0,this._rectangles=[],this._subRegions=new Map,this._guid=qn(),this._imagesToAddQueue=[],this._indexById=new Map,this._indexPromiseById=new Map,this._nextIndex=0}Object.defineProperties(Sl.prototype,{borderWidthInPixels:{get:function(){return this._borderWidthInPixels}},rectangles:{get:function(){return this._rectangles}},texture:{get:function(){return this._texture}},pixelFormat:{get:function(){return this._pixelFormat}},sampler:{get:function(){return this._sampler}},numberOfImages:{get:function(){return this._nextIndex}},guid:{get:function(){return this._guid}},sizeInBytes:{get:function(){return l(this._texture)?this._texture.sizeInBytes:0}}});Sl.prototype.computeTextureCoordinates=function(e,t){let n=this._texture,i=this._rectangles[e];if(l(t)||(t=new nt),!l(i))return t.x=0,t.y=0,t.width=0,t.height=0,t;let o=n.width,r=n.height,s=i.width,a=i.height,c=i.x,d=i.y,u=this._subRegions.get(e);if(l(u)){let h=this._rectangles[u];c+=h.x,d+=h.y}return t.x=c/o,t.y=d/r,t.width=s/o,t.height=a/r,t};Sl.prototype._copyFromTexture=function(e,t,n,i){let o=this._pixelFormat,r=this._sampler,s=new Lt({context:e,height:n,width:t,pixelFormat:o,sampler:r}),a=e._gl,c=s._textureTarget,d=this._texture,u=new ss({context:e,colorTextures:[d],destroyAttachments:!1});a.activeTexture(a.TEXTURE0),a.bindTexture(c,s._texture),u._bind();let h=this.rectangles,p=this._subRegions;for(let A=0;A<h.length;++A){let f=i[A],b=h[A];if(!l(f)||!l(b)||l(p.get(A)))continue;let{x:C,y:T,width:E,height:S}=f;a.copyTexSubImage2D(c,0,C,T,b.x,b.y,E,S)}return a.bindTexture(c,null),s._initialized=!0,u._unBind(),u.destroy(),s};Sl.prototype._resize=function(e,t=0){let n=this._borderWidthInPixels,i=this._rectangles,o=this._imagesToAddQueue,r=this._texture,s=r.width,a=r.height,c=this._subRegions,d=i.map((C,T)=>new tae({index:T,image:C})).filter((C,T)=>l(C.image)&&!l(c.get(T))),u=0,h=0,p=0;for(let C=t;C<o.length;++C){let{width:T,height:E}=o[C].image;u=Math.max(u,T),h=Math.max(h,E),p+=T*E,d.push(o[C])}for(s=L.nextPowerOfTwo(Math.max(u,s)),a=L.nextPowerOfTwo(Math.max(h,a));p>=s*a;)s>a?a*=2:s*=2;d.sort(({image:C},{image:T})=>T.height*T.width-C.height*C.width);let A=new Array(this._nextIndex);for(let C of this._subRegions.keys())l(c.get(C))&&(A[C]=i[C]);let f,b=!1;for(;!b;){f=new xS({height:a,width:s,borderPadding:n});let C;for(C=0;C<d.length;++C){let{index:T,image:E}=d[C];if(!l(E))continue;let S=f.pack(T,E);if(!l(S)){s>a?a*=2:s*=2;break}A[T]=S.rectangle}b=C===d.length}this._texturePacker=f,this._texture=this._copyFromTexture(e,s,a,A),r.destroy(),this._rectangles=A,this._guid=qn()};Sl.prototype.getImageIndex=function(e){return this._indexById.get(e)};Sl.prototype._copyImageToTexture=function({index:e,image:t,resolve:n,reject:i}){let o=this._texture,r=this._rectangles[e];try{o.copyFrom({source:t,xOffset:r.x,yOffset:r.y}),l(n)&&n(e)}catch(s){if(l(i)){i(s);return}}};function tae({index:e,image:t,resolve:n,reject:i}){this.index=e,this.image=t,this.resolve=n,this.reject=i,this.rectangle=void 0}Sl.prototype._addImage=function(e,t){return new Promise((n,i)=>{this._imagesToAddQueue.push(new tae({index:e,image:t,resolve:n,reject:i})),this._imagesToAddQueue.sort(({image:o},{image:r})=>r.height*r.width-o.height*o.width)})};Sl.prototype._processImageQueue=function(e){let t=this._imagesToAddQueue;if(t.length===0)return!1;this._rectangles.length=this._nextIndex;let n,i;for(n=0;n<t.length;++n){let o=t[n],{image:r,index:s}=o,a=this._texturePacker.pack(s,r);if(!l(a)){try{this._resize(e,n)}catch(c){i=c,l(o.reject)&&o.reject(i)}break}this._rectangles[s]=a.rectangle}if(l(i)){for(n=n+1;n<t.length;++n){let{resolve:o}=t[n];l(o)&&o(-1)}return t.length=0,!1}for(let o=0;o<t.length;++o)this._copyImageToTexture(t[o]);return t.length=0,!0};Sl.prototype.update=function(e){if(!l(this._texture)){let t=this._initialSize.x,n=this._initialSize.y,i=this._pixelFormat,o=this._sampler,r=this._borderWidthInPixels;this._texture=new Lt({context:e,width:t,height:n,pixelFormat:i,sampler:o}),this._texturePacker=new xS({height:n,width:t,borderPadding:r})}return this._processImageQueue(e)};async function Qwe(e,t){return typeof e=="function"&&(e=e(t)),(typeof e=="string"||e instanceof Le)&&(e=Le.createIfNeeded(e).fetchImage()),e}Sl.prototype.addImage=function(e,t,n,i){let o=this._indexPromiseById.get(e),r=this._indexById.get(e);return l(o)?o:l(r)?r:(r=this._nextIndex++,this._indexById.set(e,r),o=(async()=>{let a=await Qwe(t,e);if(this.isDestroyed()||!l(a))return this._indexPromiseById.delete(e),-1;l(n)&&(a.width=n),l(i)&&(a.height=i);let c=await this._addImage(r,a);return this._indexPromiseById.delete(e),c})(),this._indexPromiseById.set(e,o),o)};Sl.prototype.getCachedImageSubRegion=function(e,t,n){let i=this._indexPromiseById.get(e);for(let[o,r]of this._subRegions.entries())if(n===r&&this._rectangles[o].equals(t))return i?i.then(a=>a===-1?-1:o):o};Sl.prototype.addImageSubRegion=function(e,t){let n=this._indexById.get(e);if(!l(n))throw new me(`image with id "${e}" not found in the atlas.`);let i=this.getCachedImageSubRegion(e,t,n);return l(i)?i:(i=this._nextIndex++,this._subRegions.set(i,n),this._rectangles[i]=t.clone(),(this._indexPromiseById.get(e)??Promise.resolve(n)).then(r=>{if(r===-1)return-1;let s=this._rectangles[r];return i}))};Sl.prototype.isDestroyed=function(){return!1};Sl.prototype.destroy=function(){return this._texture=this._texture&&this._texture.destroy(),this._imagesToAddQueue.forEach(({resolve:e})=>{l(e)&&e(-1)}),he(this)};var Gx=Sl;var Q7t=y(x(),1);function Za(e,t,n,i){let o=Za._verifyAttributes(t);n=n??0;let r=[],s={},a,c,d=o.length;for(let h=0;h<d;++h){let p=o[h];if(p.vertexBuffer){r.push(p);continue}c=p.usage,a=s[c],l(a)||(a=s[c]=[]),a.push(p)}function u(h,p){return H.getSizeInBytes(p.componentDatatype)-H.getSizeInBytes(h.componentDatatype)}this._allBuffers=[];for(c in s)if(s.hasOwnProperty(c)){a=s[c],a.sort(u);let h=Za._vertexSizeInBytes(a),p=a[0].usage,A={vertexSizeInBytes:h,vertexBuffer:void 0,usage:p,needsCommit:!1,arrayBuffer:void 0,arrayViews:Za._createArrayViews(a,h)};this._allBuffers.push(A)}this._size=0,this._instanced=i??!1,this._precreated=r,this._context=e,this.writers=void 0,this.va=void 0,this.resize(n)}Za._verifyAttributes=function(e){let t=[];for(let i=0;i<e.length;++i){let o=e[i],r={index:o.index??i,enabled:o.enabled??!0,componentsPerAttribute:o.componentsPerAttribute,componentDatatype:o.componentDatatype??H.FLOAT,normalize:o.normalize??!1,vertexBuffer:o.vertexBuffer,usage:o.usage??Be.STATIC_DRAW};t.push(r)}let n=new Array(t.length);for(let i=0;i<t.length;++i){let r=t[i].index;n[r]=!0}return t};Za._vertexSizeInBytes=function(e){let t=0,n=e.length;for(let s=0;s<n;++s){let a=e[s];t+=a.componentsPerAttribute*H.getSizeInBytes(a.componentDatatype)}let i=n>0?H.getSizeInBytes(e[0].componentDatatype):0,o=i>0?t%i:0,r=o===0?0:i-o;return t+=r,t};Za._createArrayViews=function(e,t){let n=[],i=0,o=e.length;for(let r=0;r<o;++r){let s=e[r],a=s.componentDatatype;n.push({index:s.index,enabled:s.enabled,componentsPerAttribute:s.componentsPerAttribute,componentDatatype:a,normalize:s.normalize,offsetInBytes:i,vertexSizeInComponentType:t/H.getSizeInBytes(a),view:void 0}),i+=s.componentsPerAttribute*H.getSizeInBytes(a)}return n};Za.prototype.resize=function(e){this._size=e;let t=this._allBuffers;this.writers=[];for(let n=0,i=t.length;n<i;++n){let o=t[n];Za._resize(o,this._size),Za._appendWriters(this.writers,o)}DH(this)};Za._resize=function(e,t){if(e.vertexSizeInBytes>0){let n=new ArrayBuffer(t*e.vertexSizeInBytes);if(l(e.arrayBuffer)){let r=new Uint8Array(n),s=new Uint8Array(e.arrayBuffer),a=s.length;for(let c=0;c<a;++c)r[c]=s[c]}let i=e.arrayViews,o=i.length;for(let r=0;r<o;++r){let s=i[r];s.view=H.createArrayBufferView(s.componentDatatype,n,s.offsetInBytes)}e.arrayBuffer=n}};var Owe=[function(e,t,n){return function(i,o){t[i*n]=o,e.needsCommit=!0}},function(e,t,n){return function(i,o,r){let s=i*n;t[s]=o,t[s+1]=r,e.needsCommit=!0}},function(e,t,n){return function(i,o,r,s){let a=i*n;t[a]=o,t[a+1]=r,t[a+2]=s,e.needsCommit=!0}},function(e,t,n){return function(i,o,r,s,a){let c=i*n;t[c]=o,t[c+1]=r,t[c+2]=s,t[c+3]=a,e.needsCommit=!0}}];Za._appendWriters=function(e,t){let n=t.arrayViews,i=n.length;for(let o=0;o<i;++o){let r=n[o];e[r.index]=Owe[r.componentsPerAttribute-1](t,r.view,r.vertexSizeInComponentType)}};Za.prototype.commit=function(e){let t=!1,n=this._allBuffers,i,o,r;for(o=0,r=n.length;o<r;++o)i=n[o],t=zwe(this,i)||t;if(t||!l(this.va)){DH(this);let s=this.va=[],a=L.SIXTY_FOUR_KILOBYTES-4,c=l(e)&&!this._instanced?Math.ceil(this._size/a):1;for(let d=0;d<c;++d){let u=[];for(o=0,r=n.length;o<r;++o){i=n[o];let h=d*(i.vertexSizeInBytes*a);Za._appendAttributes(u,i,h,this._instanced)}u=u.concat(this._precreated),s.push({va:new kn({context:this._context,attributes:u,indexBuffer:e}),indicesCount:1.5*(d!==c-1?a:this._size%a)})}}};function zwe(e,t){if(t.needsCommit&&t.vertexSizeInBytes>0){t.needsCommit=!1;let n=t.vertexBuffer,i=e._size*t.vertexSizeInBytes,o=l(n);if(!o||n.sizeInBytes<i)return o&&n.destroy(),t.vertexBuffer=it.createVertexBuffer({context:e._context,typedArray:t.arrayBuffer,usage:t.usage}),t.vertexBuffer.vertexArrayDestroyable=!1,!0;t.vertexBuffer.copyFromArrayView(t.arrayBuffer)}return!1}Za._appendAttributes=function(e,t,n,i){let o=t.arrayViews,r=o.length;for(let s=0;s<r;++s){let a=o[s];e.push({index:a.index,enabled:a.enabled,componentsPerAttribute:a.componentsPerAttribute,componentDatatype:a.componentDatatype,normalize:a.normalize,vertexBuffer:t.vertexBuffer,offsetInBytes:n+a.offsetInBytes,strideInBytes:t.vertexSizeInBytes,instanceDivisor:i?1:0})}};Za.prototype.subCommit=function(e,t){let n=this._allBuffers;for(let i=0,o=n.length;i<o;++i)Hwe(n[i],e,t)};function Hwe(e,t,n){if(e.needsCommit&&e.vertexSizeInBytes>0){let i=e.vertexSizeInBytes*t,o=e.vertexSizeInBytes*n;e.vertexBuffer.copyFromArrayView(new Uint8Array(e.arrayBuffer,i,o),i)}}Za.prototype.endSubCommits=function(){let e=this._allBuffers;for(let t=0,n=e.length;t<n;++t)e[t].needsCommit=!1};function DH(e){let t=e.va;if(!l(t))return;let n=t.length;for(let i=0;i<n;++i)t[i].va.destroy();e.va=void 0}Za.prototype.isDestroyed=function(){return!1};Za.prototype.destroy=function(){let e=this._allBuffers;for(let t=0,n=e.length;t<n;++t){let i=e[t];i.vertexBuffer=i.vertexBuffer&&i.vertexBuffer.destroy()}return DH(this),he(this)};var LA=Za;var r6t=y(x(),1);var $7t=y(x(),1);var J7t=y(x(),1);function e0(e){this._value=void 0,this._hasClone=!1,this._hasEquals=!1,this._definitionChanged=new xe,this.setValue(e)}Object.defineProperties(e0.prototype,{isConstant:{value:!0},definitionChanged:{get:function(){return this._definitionChanged}}});e0.prototype.getValue=function(e,t){return this._hasClone?this._value.clone(t):this._value};e0.prototype.setValue=function(e){let t=this._value;if(t!==e){let n=l(e),i=n&&typeof e.clone=="function",o=n&&typeof e.equals=="function";(!o||!e.equals(t))&&(this._hasClone=i,this._hasEquals=o,this._value=i?e.clone(this._value):e,this._definitionChanged.raiseEvent(this))}};e0.prototype.equals=function(e){return this===e||e instanceof e0&&(!this._hasEquals&&this._value===e._value||this._hasEquals&&this._value.equals(e._value))};e0.prototype.valueOf=function(){return this._value};e0.prototype.toString=function(){return String(this._value)};var fi=e0;function Jwe(e,t,n,i,o){return{configurable:i,get:function(){return this[t]},set:function(r){let s=this[t],a=this[n];l(a)&&(a(),this[n]=void 0),r!==void 0&&(!l(r)||!l(r.getValue))&&l(o)&&(r=o(r)),s!==r&&(this[t]=r,this._definitionChanged.raiseEvent(this,e,r,s)),l(r)&&l(r.definitionChanged)&&(this[n]=r.definitionChanged.addEventListener(function(){this._definitionChanged.raiseEvent(this,e,r,r)},this))}}}function Kwe(e){return new fi(e)}function jwe(e,t,n){return Jwe(e,`_${e.toString()}`,`_${e.toString()}Subscription`,t??!1,n??Kwe)}var be=jwe;function $L(e){this._definitionChanged=new xe,this._show=void 0,this._showSubscription=void 0,this._image=void 0,this._imageSubscription=void 0,this._scale=void 0,this._scaleSubscription=void 0,this._pixelOffset=void 0,this._pixelOffsetSubscription=void 0,this._eyeOffset=void 0,this._eyeOffsetSubscription=void 0,this._horizontalOrigin=void 0,this._horizontalOriginSubscription=void 0,this._verticalOrigin=void 0,this._verticalOriginSubscription=void 0,this._heightReference=void 0,this._heightReferenceSubscription=void 0,this._color=void 0,this._colorSubscription=void 0,this._rotation=void 0,this._rotationSubscription=void 0,this._alignedAxis=void 0,this._alignedAxisSubscription=void 0,this._sizeInMeters=void 0,this._sizeInMetersSubscription=void 0,this._width=void 0,this._widthSubscription=void 0,this._height=void 0,this._heightSubscription=void 0,this._scaleByDistance=void 0,this._scaleByDistanceSubscription=void 0,this._translucencyByDistance=void 0,this._translucencyByDistanceSubscription=void 0,this._pixelOffsetScaleByDistance=void 0,this._pixelOffsetScaleByDistanceSubscription=void 0,this._imageSubRegion=void 0,this._imageSubRegionSubscription=void 0,this._distanceDisplayCondition=void 0,this._distanceDisplayConditionSubscription=void 0,this._disableDepthTestDistance=void 0,this._disableDepthTestDistanceSubscription=void 0,this._splitDirection=void 0,this._splitDirectionSubscription=void 0,this.merge(e??Q.EMPTY_OBJECT)}Object.defineProperties($L.prototype,{definitionChanged:{get:function(){return this._definitionChanged}},show:be("show"),image:be("image"),scale:be("scale"),pixelOffset:be("pixelOffset"),eyeOffset:be("eyeOffset"),horizontalOrigin:be("horizontalOrigin"),verticalOrigin:be("verticalOrigin"),heightReference:be("heightReference"),color:be("color"),rotation:be("rotation"),alignedAxis:be("alignedAxis"),sizeInMeters:be("sizeInMeters"),width:be("width"),height:be("height"),scaleByDistance:be("scaleByDistance"),translucencyByDistance:be("translucencyByDistance"),pixelOffsetScaleByDistance:be("pixelOffsetScaleByDistance"),imageSubRegion:be("imageSubRegion"),distanceDisplayCondition:be("distanceDisplayCondition"),disableDepthTestDistance:be("disableDepthTestDistance"),splitDirection:be("splitDirection")});$L.prototype.clone=function(e){return l(e)?(e.show=this._show,e.image=this._image,e.scale=this._scale,e.pixelOffset=this._pixelOffset,e.eyeOffset=this._eyeOffset,e.horizontalOrigin=this._horizontalOrigin,e.verticalOrigin=this._verticalOrigin,e.heightReference=this._heightReference,e.color=this._color,e.rotation=this._rotation,e.alignedAxis=this._alignedAxis,e.sizeInMeters=this._sizeInMeters,e.width=this._width,e.height=this._height,e.scaleByDistance=this._scaleByDistance,e.translucencyByDistance=this._translucencyByDistance,e.pixelOffsetScaleByDistance=this._pixelOffsetScaleByDistance,e.imageSubRegion=this._imageSubRegion,e.distanceDisplayCondition=this._distanceDisplayCondition,e.disableDepthTestDistance=this._disableDepthTestDistance,e.splitDirection=this._splitDirection,e):new $L(this)};$L.prototype.merge=function(e){this.show=this._show??e.show,this.image=this._image??e.image,this.scale=this._scale??e.scale,this.pixelOffset=this._pixelOffset??e.pixelOffset,this.eyeOffset=this._eyeOffset??e.eyeOffset,this.horizontalOrigin=this._horizontalOrigin??e.horizontalOrigin,this.verticalOrigin=this._verticalOrigin??e.verticalOrigin,this.heightReference=this._heightReference??e.heightReference,this.color=this._color??e.color,this.rotation=this._rotation??e.rotation,this.alignedAxis=this._alignedAxis??e.alignedAxis,this.sizeInMeters=this._sizeInMeters??e.sizeInMeters,this.width=this._width??e.width,this.height=this._height??e.height,this.scaleByDistance=this._scaleByDistance??e.scaleByDistance,this.translucencyByDistance=this._translucencyByDistance??e.translucencyByDistance,this.pixelOffsetScaleByDistance=this._pixelOffsetScaleByDistance??e.pixelOffsetScaleByDistance,this.imageSubRegion=this._imageSubRegion??e.imageSubRegion,this.distanceDisplayCondition=this._distanceDisplayCondition??e.distanceDisplayCondition,this.disableDepthTestDistance=this._disableDepthTestDistance??e.disableDepthTestDistance,this.splitDirection=this.splitDirection??e.splitDirection};var Dc=$L;var Q6t=y(x(),1);var c6t=y(x(),1);function Lx(){this._array=[],this._hash={}}Object.defineProperties(Lx.prototype,{length:{get:function(){return this._array.length}},values:{get:function(){return this._array}}});Lx.prototype.contains=function(e){return l(this._hash[e])};Lx.prototype.set=function(e,t){let n=this._hash[e];t!==n&&(this.remove(e),this._hash[e]=t,this._array.push(t))};Lx.prototype.get=function(e){return this._hash[e]};Lx.prototype.remove=function(e){let t=this._hash[e],n=l(t);if(n){let i=this._array;i.splice(i.indexOf(t),1),delete this._hash[e]}return n};Lx.prototype.removeAll=function(){let e=this._array;e.length>0&&(this._hash={},e.length=0)};var Xt=Lx;var u6t=y(x(),1);function iu(e,t){e=e??0,this._near=e,t=t??Number.MAX_VALUE,this._far=t}Object.defineProperties(iu.prototype,{near:{get:function(){return this._near},set:function(e){this._near=e}},far:{get:function(){return this._far},set:function(e){this._far=e}}});iu.packedLength=2;iu.pack=function(e,t,n){return n=n??0,t[n++]=e.near,t[n]=e.far,t};iu.unpack=function(e,t,n){return t=t??0,l(n)||(n=new iu),n.near=e[t++],n.far=e[t],n};iu.equals=function(e,t){return e===t||l(e)&&l(t)&&e.near===t.near&&e.far===t.far};iu.clone=function(e,t){if(l(e))return l(t)||(t=new iu),t.near=e.near,t.far=e.far,t};iu.prototype.clone=function(e){return iu.clone(this,e)};iu.prototype.equals=function(e){return iu.equals(this,e)};var Dt=iu;var f6t=y(x(),1);function mm(e,t,n,i){this.near=e??0,this.nearValue=t??0,this.far=n??1,this.farValue=i??0}mm.clone=function(e,t){if(l(e))return l(t)?(t.near=e.near,t.nearValue=e.nearValue,t.far=e.far,t.farValue=e.farValue,t):new mm(e.near,e.nearValue,e.far,e.farValue)};mm.packedLength=4;mm.pack=function(e,t,n){return n=n??0,t[n++]=e.near,t[n++]=e.nearValue,t[n++]=e.far,t[n]=e.farValue,t};mm.unpack=function(e,t,n){return t=t??0,l(n)||(n=new mm),n.near=e[t++],n.nearValue=e[t++],n.far=e[t++],n.farValue=e[t],n};mm.equals=function(e,t){return e===t||l(e)&&l(t)&&e.near===t.near&&e.nearValue===t.nearValue&&e.far===t.far&&e.farValue===t.farValue};mm.prototype.clone=function(e){return mm.clone(this,e)};mm.prototype.equals=function(e){return mm.equals(this,e)};var Ot=mm;var A6t=y(x(),1),Wx={NONE:0,CLAMP_TO_GROUND:1,RELATIVE_TO_GROUND:2,CLAMP_TO_TERRAIN:3,RELATIVE_TO_TERRAIN:4,CLAMP_TO_3D_TILE:5,RELATIVE_TO_3D_TILE:6},rt=Object.freeze(Wx);function hm(e){return e===Wx.CLAMP_TO_GROUND||e===Wx.CLAMP_TO_3D_TILE||e===Wx.CLAMP_TO_TERRAIN}function CS(e){return e===Wx.RELATIVE_TO_GROUND||e===Wx.RELATIVE_TO_3D_TILE||e===Wx.RELATIVE_TO_TERRAIN}var b6t=y(x(),1),qwe={CENTER:0,LEFT:1,RIGHT:-1},Bi=Object.freeze(qwe);var x6t=y(x(),1),$we={CENTER:0,BOTTOM:1,BASELINE:2,TOP:-1},Hn=Object.freeze($we);var T6t=y(x(),1),eNe=Object.freeze({DONE:0,PENDING:1,FAILED:2}),Tt=eNe;var I6t=y(x(),1);function Zh(){fe.throwInstantiationError()}Object.defineProperties(Zh.prototype,{isConstant:{get:fe.throwInstantiationError},definitionChanged:{get:fe.throwInstantiationError}});Zh.prototype.getValue=fe.throwInstantiationError;Zh.prototype.equals=fe.throwInstantiationError;Zh.equals=function(e,t){return e===t||l(e)&&e.equals(t)};Zh.arrayEquals=function(e,t){if(e===t)return!0;if(!l(e)||!l(t)||e.length!==t.length)return!1;let n=e.length;for(let i=0;i<n;i++)if(!Zh.equals(e[i],t[i]))return!1;return!0};Zh.isConstant=function(e){return!l(e)||e.isConstant};Zh.getValueOrUndefined=function(e,t,n){return l(e)?e.getValue(t,n):void 0};Zh.getValueOrDefault=function(e,t,n,i){return l(e)?e.getValue(t,i)??n:n};Zh.getValueOrClonedDefault=function(e,t,n,i){let o;return l(e)&&(o=e.getValue(t,i)),l(o)||(o=n.clone(o)),o};var K=Zh;var R6t=y(x(),1),tNe={LEFT:-1,NONE:0,RIGHT:1},Br=Object.freeze(tNe);var nNe=U.WHITE,iNe=m.ZERO,oNe=rt.NONE,rNe=M.ZERO,sNe=1,aNe=0,cNe=m.ZERO,lNe=Bi.CENTER,dNe=Hn.CENTER,uNe=!1,mNe=Br.NONE,hNe=new m,fNe=new U,pNe=new m,ANe=new M,gNe=new Ot,bNe=new Ot,yNe=new Ot,xNe=new nt,CNe=new Dt;function nae(e){this.entity=e,this.billboard=void 0,this.textureValue=void 0}function t0(e,t){t.collectionChanged.addEventListener(t0.prototype._onCollectionChanged,this),this._cluster=e,this._entityCollection=t,this._items=new Xt,this._onCollectionChanged(t,t.values,[],[])}t0.prototype.update=function(e){let t=this._items.values,n=this._cluster;for(let i=0,o=t.length;i<o;i++){let r=t[i],s=r.entity,a=s._billboard,c,d=r.billboard,u=s.isShowing&&s.isAvailable(e)&&K.getValueOrDefault(a._show,e,!0),h;if(u&&(h=K.getValueOrUndefined(s._position,e,hNe),c=K.getValueOrUndefined(a._image,e),u=l(h)&&l(c)),!u){kH(r,s,n);continue}K.isConstant(s._position)||(n._clusterDirty=!0),l(d)||(d=n.getBillboard(s),d.id=s,r.billboard=d,r.textureValue=void 0),d.show=u,d.position=h,d.color=K.getValueOrDefault(a._color,e,nNe,fNe),d.eyeOffset=K.getValueOrDefault(a._eyeOffset,e,iNe,pNe),d.heightReference=K.getValueOrDefault(a._heightReference,e,oNe),d.pixelOffset=K.getValueOrDefault(a._pixelOffset,e,rNe,ANe),d.scale=K.getValueOrDefault(a._scale,e,sNe),d.rotation=K.getValueOrDefault(a._rotation,e,aNe),d.alignedAxis=K.getValueOrDefault(a._alignedAxis,e,cNe),d.horizontalOrigin=K.getValueOrDefault(a._horizontalOrigin,e,lNe),d.verticalOrigin=K.getValueOrDefault(a._verticalOrigin,e,dNe),d.width=K.getValueOrUndefined(a._width,e),d.height=K.getValueOrUndefined(a._height,e),d.scaleByDistance=K.getValueOrUndefined(a._scaleByDistance,e,gNe),d.translucencyByDistance=K.getValueOrUndefined(a._translucencyByDistance,e,bNe),d.pixelOffsetScaleByDistance=K.getValueOrUndefined(a._pixelOffsetScaleByDistance,e,yNe),d.sizeInMeters=K.getValueOrDefault(a._sizeInMeters,e,uNe),d.distanceDisplayCondition=K.getValueOrUndefined(a._distanceDisplayCondition,e,CNe),d.disableDepthTestDistance=K.getValueOrUndefined(a._disableDepthTestDistance,e),d.splitDirection=K.getValueOrDefault(a._splitDirection,e,mNe),r.textureValue!==c&&(d.image=c,r.textureValue=c);let p=K.getValueOrUndefined(a._imageSubRegion,e,xNe);l(p)&&d.setImageSubRegion(d.image,p)}return!0};t0.prototype.getBoundingSphere=function(e,t){let n=this._items.get(e.id);if(!l(n)||!l(n.billboard))return Tt.FAILED;let i=n.billboard;if(i.heightReference===rt.NONE)t.center=m.clone(i.position,t.center);else{if(!l(i._clampedPosition))return Tt.PENDING;t.center=m.clone(i._clampedPosition,t.center)}return t.radius=0,Tt.DONE};t0.prototype.isDestroyed=function(){return!1};t0.prototype.destroy=function(){this._entityCollection.collectionChanged.removeEventListener(t0.prototype._onCollectionChanged,this);let e=this._entityCollection.values;for(let t=0;t<e.length;t++)this._cluster.removeBillboard(e[t]);return he(this)};t0.prototype._onCollectionChanged=function(e,t,n,i){let o,r,s=this._items,a=this._cluster;for(o=t.length-1;o>-1;o--)r=t[o],l(r._billboard)&&l(r._position)&&s.set(r.id,new nae(r));for(o=i.length-1;o>-1;o--)r=i[o],l(r._billboard)&&l(r._position)?s.contains(r.id)||s.set(r.id,new nae(r)):(kH(s.get(r.id),r,a),s.remove(r.id));for(o=n.length-1;o>-1;o--)r=n[o],kH(s.get(r.id),r,a),s.remove(r.id)};function kH(e,t,n){l(e)&&(e.billboard=void 0,n.removeBillboard(t))}var e1=t0;var lhn=y(x(),1);var iqt=y(x(),1);var TNe=new m;function rp(e){e=e??Q.EMPTY_OBJECT;let t=e.minimum,n=e.maximum;this._min=m.clone(t),this._max=m.clone(n),this._offsetAttribute=e.offsetAttribute,this._workerName="createBoxOutlineGeometry"}rp.fromDimensions=function(e){e=e??Q.EMPTY_OBJECT;let t=e.dimensions,n=m.multiplyByScalar(t,.5,new m);return new rp({minimum:m.negate(n,new m),maximum:n,offsetAttribute:e.offsetAttribute})};rp.fromAxisAlignedBoundingBox=function(e){return new rp({minimum:e.minimum,maximum:e.maximum})};rp.packedLength=2*m.packedLength+1;rp.pack=function(e,t,n){return n=n??0,m.pack(e._min,t,n),m.pack(e._max,t,n+m.packedLength),t[n+m.packedLength*2]=e._offsetAttribute??-1,t};var oae=new m,rae=new m,iae={minimum:oae,maximum:rae,offsetAttribute:void 0};rp.unpack=function(e,t,n){t=t??0;let i=m.unpack(e,t,oae),o=m.unpack(e,t+m.packedLength,rae),r=e[t+m.packedLength*2];return l(n)?(n._min=m.clone(i,n._min),n._max=m.clone(o,n._max),n._offsetAttribute=r===-1?void 0:r,n):(iae.offsetAttribute=r===-1?void 0:r,new rp(iae))};rp.createGeometry=function(e){let t=e._min,n=e._max;if(m.equals(t,n))return;let i=new xn,o=new Uint16Array(24),r=new Float64Array(24);r[0]=t.x,r[1]=t.y,r[2]=t.z,r[3]=n.x,r[4]=t.y,r[5]=t.z,r[6]=n.x,r[7]=n.y,r[8]=t.z,r[9]=t.x,r[10]=n.y,r[11]=t.z,r[12]=t.x,r[13]=t.y,r[14]=n.z,r[15]=n.x,r[16]=t.y,r[17]=n.z,r[18]=n.x,r[19]=n.y,r[20]=n.z,r[21]=t.x,r[22]=n.y,r[23]=n.z,i.position=new we({componentDatatype:H.DOUBLE,componentsPerAttribute:3,values:r}),o[0]=4,o[1]=5,o[2]=5,o[3]=6,o[4]=6,o[5]=7,o[6]=7,o[7]=4,o[8]=0,o[9]=1,o[10]=1,o[11]=2,o[12]=2,o[13]=3,o[14]=3,o[15]=0,o[16]=0,o[17]=4,o[18]=1,o[19]=5,o[20]=2,o[21]=6,o[22]=3,o[23]=7;let s=m.subtract(n,t,TNe),a=m.magnitude(s)*.5;if(l(e._offsetAttribute)){let c=r.length,d=e._offsetAttribute===An.NONE?0:1,u=new Uint8Array(c/3).fill(d);i.applyOffset=new we({componentDatatype:H.UNSIGNED_BYTE,componentsPerAttribute:1,values:u})}return new Ct({attributes:i,indices:o,primitiveType:We.LINES,boundingSphere:new ue(m.ZERO,a),offsetAttribute:e._offsetAttribute})};var Rh=rp;var cqt=y(x(),1);function TS(e,t,n,i){e=e??1,t=t??1,n=n??1,i=i??1,this.value=new Uint8Array([U.floatToByte(e),U.floatToByte(t),U.floatToByte(n),U.floatToByte(i)])}Object.defineProperties(TS.prototype,{componentDatatype:{get:function(){return H.UNSIGNED_BYTE}},componentsPerAttribute:{get:function(){return 4}},normalize:{get:function(){return!0}}});TS.fromColor=function(e){return new TS(e.red,e.green,e.blue,e.alpha)};TS.toValue=function(e,t){return l(t)?e.toBytes(t):new Uint8Array(e.toBytes())};TS.equals=function(e,t){return e===t||l(e)&&l(t)&&e.value[0]===t.value[0]&&e.value[1]===t.value[1]&&e.value[2]===t.value[2]&&e.value[3]===t.value[3]};var $t=TS;var mqt=y(x(),1);function t1(e,t){e=e??0,t=t??Number.MAX_VALUE,this.value=new Float32Array([e,t])}Object.defineProperties(t1.prototype,{componentDatatype:{get:function(){return H.FLOAT}},componentsPerAttribute:{get:function(){return 2}},normalize:{get:function(){return!1}}});t1.fromDistanceDisplayCondition=function(e){return new t1(e.near,e.far)};t1.toValue=function(e,t){return l(t)?(t[0]=e.near,t[1]=e.far,t):new Float32Array([e.near,e.far])};var ei=t1;var Aqt=y(x(),1);function ENe(e){e=e??Q.EMPTY_OBJECT,this.geometry=e.geometry,this.modelMatrix=F.clone(e.modelMatrix??F.IDENTITY),this.id=e.id,this.pickPrimitive=e.pickPrimitive,this.attributes=e.attributes??{},this.westHemisphereGeometry=void 0,this.eastHemisphereGeometry=void 0}var wt=ENe;var Iqt=y(x(),1);var Tqt=y(x(),1);function _r(e){e=e??Q.EMPTY_OBJECT,this.start=l(e.start)?q.clone(e.start):new q,this.stop=l(e.stop)?q.clone(e.stop):new q,this.data=e.data,this.isStartIncluded=e.isStartIncluded??!0,this.isStopIncluded=e.isStopIncluded??!0}Object.defineProperties(_r.prototype,{isEmpty:{get:function(){let e=q.compare(this.stop,this.start);return e<0||e===0&&(!this.isStartIncluded||!this.isStopIncluded)}}});var ES={start:void 0,stop:void 0,isStartIncluded:void 0,isStopIncluded:void 0,data:void 0};_r.fromIso8601=function(e,t){let n=e.iso8601.split("/");if(n.length!==2)throw new fe("options.iso8601 is an invalid ISO 8601 interval.");let i=q.fromIso8601(n[0]),o=q.fromIso8601(n[1]),r=e.isStartIncluded??!0,s=e.isStopIncluded??!0,a=e.data;return l(t)?(t.start=i,t.stop=o,t.isStartIncluded=r,t.isStopIncluded=s,t.data=a,t):(ES.start=i,ES.stop=o,ES.isStartIncluded=r,ES.isStopIncluded=s,ES.data=a,new _r(ES))};_r.toIso8601=function(e,t){return`${q.toIso8601(e.start,t)}/${q.toIso8601(e.stop,t)}`};_r.clone=function(e,t){if(l(e))return l(t)?(t.start=e.start,t.stop=e.stop,t.isStartIncluded=e.isStartIncluded,t.isStopIncluded=e.isStopIncluded,t.data=e.data,t):new _r(e)};_r.equals=function(e,t,n){return e===t||l(e)&&l(t)&&(e.isEmpty&&t.isEmpty||e.isStartIncluded===t.isStartIncluded&&e.isStopIncluded===t.isStopIncluded&&q.equals(e.start,t.start)&&q.equals(e.stop,t.stop)&&(e.data===t.data||l(n)&&n(e.data,t.data)))};_r.equalsEpsilon=function(e,t,n,i){return n=n??0,e===t||l(e)&&l(t)&&(e.isEmpty&&t.isEmpty||e.isStartIncluded===t.isStartIncluded&&e.isStopIncluded===t.isStopIncluded&&q.equalsEpsilon(e.start,t.start,n)&&q.equalsEpsilon(e.stop,t.stop,n)&&(e.data===t.data||l(i)&&i(e.data,t.data)))};_r.intersect=function(e,t,n,i){if(!l(t))return _r.clone(_r.EMPTY,n);let o=e.start,r=e.stop,s=t.start,a=t.stop,c=q.greaterThanOrEquals(s,o)&&q.greaterThanOrEquals(r,s),d=!c&&q.lessThanOrEquals(s,o)&&q.lessThanOrEquals(o,a);if(!c&&!d)return _r.clone(_r.EMPTY,n);let u=e.isStartIncluded,h=e.isStopIncluded,p=t.isStartIncluded,A=t.isStopIncluded,f=q.lessThan(r,a);return l(n)||(n=new _r),n.start=c?s:o,n.isStartIncluded=u&&p||!q.equals(s,o)&&(c&&p||d&&u),n.stop=f?r:a,n.isStopIncluded=f?h:h&&A||!q.equals(a,r)&&A,n.data=l(i)?i(e.data,t.data):e.data,n};_r.contains=function(e,t){if(e.isEmpty)return!1;let n=q.compare(e.start,t);if(n===0)return e.isStartIncluded;let i=q.compare(t,e.stop);return i===0?e.isStopIncluded:n<0&&i<0};_r.prototype.clone=function(e){return _r.clone(this,e)};_r.prototype.equals=function(e,t){return _r.equals(this,e,t)};_r.prototype.equalsEpsilon=function(e,t,n){return _r.equalsEpsilon(this,e,t,n)};_r.prototype.toString=function(){return _r.toIso8601(this)};_r.EMPTY=Object.freeze(new _r({start:new q,stop:new q,isStartIncluded:!1,isStopIncluded:!1}));var Wn=_r;var sae=Object.freeze(q.fromIso8601("0000-01-01T00:00:00Z")),aae=Object.freeze(q.fromIso8601("9999-12-31T24:00:00Z")),SNe=Object.freeze(new Wn({start:sae,stop:aae})),_Ne={MINIMUM_VALUE:sae,MAXIMUM_VALUE:aae,MAXIMUM_INTERVAL:SNe},qe=_Ne;var Gqt=y(x(),1);function n1(e,t,n){e=e??0,t=t??0,n=n??0,this.value=new Float32Array([e,t,n])}Object.defineProperties(n1.prototype,{componentDatatype:{get:function(){return H.FLOAT}},componentsPerAttribute:{get:function(){return 3}},normalize:{get:function(){return!1}}});n1.fromCartesian3=function(e){return new n1(e.x,e.y,e.z)};n1.toValue=function(e,t){return l(t)||(t=new Float32Array([e.x,e.y,e.z])),t[0]=e.x,t[1]=e.y,t[2]=e.z,t};var Ao=n1;var Bqt=y(x(),1);function zD(e){e=e??!0,this.value=zD.toValue(e)}Object.defineProperties(zD.prototype,{componentDatatype:{get:function(){return H.UNSIGNED_BYTE}},componentsPerAttribute:{get:function(){return 1}},normalize:{get:function(){return!1}}});zD.toValue=function(e,t){return l(t)?(t[0]=e,t):new Uint8Array([e])};var Rn=zD;var Jen=y(x(),1);var Nqt=y(x(),1),i1=`in vec3 v_positionEC;
in vec3 v_normalEC;
in vec3 v_tangentEC;
in vec3 v_bitangentEC;
in vec2 v_st;
void main()
{
vec3 positionToEyeEC = -v_positionEC;
mat3 tangentToEyeMatrix = czm_tangentToEyeSpaceMatrix(v_normalEC, v_tangentEC, v_bitangentEC);
vec3 normalEC = normalize(v_normalEC);
#ifdef FACE_FORWARD
normalEC = faceforward(normalEC, vec3(0.0, 0.0, 1.0), -normalEC);
#endif
czm_materialInput materialInput;
materialInput.normalEC = normalEC;
materialInput.tangentToEyeMatrix = tangentToEyeMatrix;
materialInput.positionToEyeEC = positionToEyeEC;
materialInput.st = v_st;
czm_material material = czm_getMaterial(materialInput);
#ifdef FLAT
out_FragColor = vec4(material.diffuse + material.emission, material.alpha);
#else
out_FragColor = czm_phong(normalize(positionToEyeEC), material, czm_lightDirectionEC);
#endif
}
`;var Xqt=y(x(),1),o1=`in vec3 position3DHigh;
in vec3 position3DLow;
in vec3 normal;
in vec3 tangent;
in vec3 bitangent;
in vec2 st;
in float batchId;
out vec3 v_positionEC;
out vec3 v_normalEC;
out vec3 v_tangentEC;
out vec3 v_bitangentEC;
out vec2 v_st;
void main()
{
vec4 p = czm_computePosition();
v_positionEC = (czm_modelViewRelativeToEye * p).xyz; // position in eye coordinates
v_normalEC = czm_normal * normal; // normal in eye coordinates
v_tangentEC = czm_normal * tangent; // tangent in eye coordinates
v_bitangentEC = czm_normal * bitangent; // bitangent in eye coordinates
v_st = st;
gl_Position = czm_modelViewProjectionRelativeToEye * p;
}
`;var Mqt=y(x(),1),r1=`in vec3 v_positionEC;
in vec3 v_normalEC;
void main()
{
vec3 positionToEyeEC = -v_positionEC;
vec3 normalEC = normalize(v_normalEC);
#ifdef FACE_FORWARD
normalEC = faceforward(normalEC, vec3(0.0, 0.0, 1.0), -normalEC);
#endif
czm_materialInput materialInput;
materialInput.normalEC = normalEC;
materialInput.positionToEyeEC = positionToEyeEC;
czm_material material = czm_getMaterial(materialInput);
#ifdef FLAT
out_FragColor = vec4(material.diffuse + material.emission, material.alpha);
#else
out_FragColor = czm_phong(normalize(positionToEyeEC), material, czm_lightDirectionEC);
#endif
}
`;var Uqt=y(x(),1),s1=`in vec3 position3DHigh;
in vec3 position3DLow;
in vec3 normal;
in float batchId;
out vec3 v_positionEC;
out vec3 v_normalEC;
void main()
{
vec4 p = czm_computePosition();
v_positionEC = (czm_modelViewRelativeToEye * p).xyz; // position in eye coordinates
v_normalEC = czm_normal * normal; // normal in eye coordinates
gl_Position = czm_modelViewProjectionRelativeToEye * p;
}
`;var kqt=y(x(),1),a1=`in vec3 v_positionEC;
in vec3 v_normalEC;
in vec2 v_st;
void main()
{
vec3 positionToEyeEC = -v_positionEC;
vec3 normalEC = normalize(v_normalEC);
#ifdef FACE_FORWARD
normalEC = faceforward(normalEC, vec3(0.0, 0.0, 1.0), -normalEC);
#endif
czm_materialInput materialInput;
materialInput.normalEC = normalEC;
materialInput.positionToEyeEC = positionToEyeEC;
materialInput.st = v_st;
czm_material material = czm_getMaterial(materialInput);
#ifdef FLAT
out_FragColor = vec4(material.diffuse + material.emission, material.alpha);
#else
out_FragColor = czm_phong(normalize(positionToEyeEC), material, czm_lightDirectionEC);
#endif
}
`;var Oqt=y(x(),1),c1=`in vec3 position3DHigh;
in vec3 position3DLow;
in vec3 normal;
in vec2 st;
in float batchId;
out vec3 v_positionEC;
out vec3 v_normalEC;
out vec2 v_st;
void main()
{
vec4 p = czm_computePosition();
v_positionEC = (czm_modelViewRelativeToEye * p).xyz; // position in eye coordinates
v_normalEC = czm_normal * normal; // normal in eye coordinates
v_st = st;
gl_Position = czm_modelViewProjectionRelativeToEye * p;
}
`;var h$t=y(x(),1);var n$t=y(x(),1);var Jqt=y(x(),1);var INe={ADD:ne.FUNC_ADD,SUBTRACT:ne.FUNC_SUBTRACT,REVERSE_SUBTRACT:ne.FUNC_REVERSE_SUBTRACT,MIN:ne.MIN,MAX:ne.MAX},Ec=Object.freeze(INe);var qqt=y(x(),1);var ZNe={ZERO:ne.ZERO,ONE:ne.ONE,SOURCE_COLOR:ne.SRC_COLOR,ONE_MINUS_SOURCE_COLOR:ne.ONE_MINUS_SRC_COLOR,DESTINATION_COLOR:ne.DST_COLOR,ONE_MINUS_DESTINATION_COLOR:ne.ONE_MINUS_DST_COLOR,SOURCE_ALPHA:ne.SRC_ALPHA,ONE_MINUS_SOURCE_ALPHA:ne.ONE_MINUS_SRC_ALPHA,DESTINATION_ALPHA:ne.DST_ALPHA,ONE_MINUS_DESTINATION_ALPHA:ne.ONE_MINUS_DST_ALPHA,CONSTANT_COLOR:ne.CONSTANT_COLOR,ONE_MINUS_CONSTANT_COLOR:ne.ONE_MINUS_CONSTANT_COLOR,CONSTANT_ALPHA:ne.CONSTANT_ALPHA,ONE_MINUS_CONSTANT_ALPHA:ne.ONE_MINUS_CONSTANT_ALPHA,SOURCE_ALPHA_SATURATE:ne.SRC_ALPHA_SATURATE},Ko=Object.freeze(ZNe);var RNe={DISABLED:Object.freeze({enabled:!1}),ALPHA_BLEND:Object.freeze({enabled:!0,equationRgb:Ec.ADD,equationAlpha:Ec.ADD,functionSourceRgb:Ko.SOURCE_ALPHA,functionSourceAlpha:Ko.ONE,functionDestinationRgb:Ko.ONE_MINUS_SOURCE_ALPHA,functionDestinationAlpha:Ko.ONE_MINUS_SOURCE_ALPHA}),PRE_MULTIPLIED_ALPHA_BLEND:Object.freeze({enabled:!0,equationRgb:Ec.ADD,equationAlpha:Ec.ADD,functionSourceRgb:Ko.ONE,functionSourceAlpha:Ko.ONE,functionDestinationRgb:Ko.ONE_MINUS_SOURCE_ALPHA,functionDestinationAlpha:Ko.ONE_MINUS_SOURCE_ALPHA}),ADDITIVE_BLEND:Object.freeze({enabled:!0,equationRgb:Ec.ADD,equationAlpha:Ec.ADD,functionSourceRgb:Ko.SOURCE_ALPHA,functionSourceAlpha:Ko.ONE,functionDestinationRgb:Ko.ONE,functionDestinationAlpha:Ko.ONE})},ln=Object.freeze(RNe);var r$t=y(x(),1);var VNe={FRONT:ne.FRONT,BACK:ne.BACK,FRONT_AND_BACK:ne.FRONT_AND_BACK},wi=Object.freeze(VNe);function SS(e){e=e??Q.EMPTY_OBJECT,this.material=e.material,this.translucent=e.translucent??!0,this._vertexShaderSource=e.vertexShaderSource,this._fragmentShaderSource=e.fragmentShaderSource,this._renderState=e.renderState,this._closed=e.closed??!1}Object.defineProperties(SS.prototype,{vertexShaderSource:{get:function(){return this._vertexShaderSource}},fragmentShaderSource:{get:function(){return this._fragmentShaderSource}},renderState:{get:function(){return this._renderState}},closed:{get:function(){return this._closed}}});SS.prototype.getFragmentShaderSource=function(){let e=[];return this.flat&&e.push("#define FLAT"),this.faceForward&&e.push("#define FACE_FORWARD"),l(this.material)&&e.push(this.material.shaderSource),e.push(this.fragmentShaderSource),e.join(`
`)};SS.prototype.isTranslucent=function(){return l(this.material)&&this.material.isTranslucent()||!l(this.material)&&this.translucent};SS.prototype.getRenderState=function(){let e=this.isTranslucent(),t=He(this.renderState,!1);return e?(t.depthMask=!1,t.blending=ln.ALPHA_BLEND):t.depthMask=!0,t};SS.getDefaultRenderState=function(e,t,n){let i={depthTest:{enabled:!0}};return e&&(i.depthMask=!1,i.blending=ln.ALPHA_BLEND),t&&(i.cull={enabled:!0,face:wi.BACK}),l(n)&&(i=Ft(n,i,!0)),i};var To=SS;var Nen=y(x(),1);var p$t=y(x(),1),l1=`uniform sampler2D image;
czm_material czm_getMaterial(czm_materialInput materialInput)
{
czm_material material = czm_getDefaultMaterial(materialInput);
vec4 rampColor = texture(image, vec2(materialInput.aspect / (2.0 * czm_pi), 0.5));
rampColor = czm_gammaCorrect(rampColor);
material.diffuse = rampColor.rgb;
material.alpha = rampColor.a;
return material;
}
`;var g$t=y(x(),1),d1=`uniform sampler2D image;
uniform float strength;
uniform vec2 repeat;
czm_material czm_getMaterial(czm_materialInput materialInput)
{
czm_material material = czm_getDefaultMaterial(materialInput);
vec2 st = materialInput.st;
vec2 centerPixel = fract(repeat * st);
float centerBump = texture(image, centerPixel).channel;
float imageWidth = float(imageDimensions.x);
vec2 rightPixel = fract(repeat * (st + vec2(1.0 / imageWidth, 0.0)));
float rightBump = texture(image, rightPixel).channel;
float imageHeight = float(imageDimensions.y);
vec2 leftPixel = fract(repeat * (st + vec2(0.0, 1.0 / imageHeight)));
float topBump = texture(image, leftPixel).channel;
vec3 normalTangentSpace = normalize(vec3(centerBump - rightBump, centerBump - topBump, clamp(1.0 - strength, 0.1, 1.0)));
vec3 normalEC = materialInput.tangentToEyeMatrix * normalTangentSpace;
material.normal = normalEC;
material.diffuse = vec3(0.01);
return material;
}
`;var y$t=y(x(),1),u1=`uniform vec4 lightColor;
uniform vec4 darkColor;
uniform vec2 repeat;
czm_material czm_getMaterial(czm_materialInput materialInput)
{
czm_material material = czm_getDefaultMaterial(materialInput);
vec2 st = materialInput.st;
// From Stefan Gustavson's Procedural Textures in GLSL in OpenGL Insights
float b = mod(floor(repeat.s * st.s) + floor(repeat.t * st.t), 2.0); // 0.0 or 1.0
// Find the distance from the closest separator (region between two colors)
float scaledWidth = fract(repeat.s * st.s);
scaledWidth = abs(scaledWidth - floor(scaledWidth + 0.5));
float scaledHeight = fract(repeat.t * st.t);
scaledHeight = abs(scaledHeight - floor(scaledHeight + 0.5));
float value = min(scaledWidth, scaledHeight);
vec4 currentColor = mix(lightColor, darkColor, b);
vec4 color = czm_antialias(lightColor, darkColor, currentColor, value, 0.03);
color = czm_gammaCorrect(color);
material.diffuse = color.rgb;
material.alpha = color.a;
return material;
}
`;var C$t=y(x(),1),m1=`uniform vec4 lightColor;
uniform vec4 darkColor;
uniform vec2 repeat;
czm_material czm_getMaterial(czm_materialInput materialInput)
{
czm_material material = czm_getDefaultMaterial(materialInput);
// From Stefan Gustavson's Procedural Textures in GLSL in OpenGL Insights
float b = smoothstep(0.3, 0.32, length(fract(repeat * materialInput.st) - 0.5)); // 0.0 or 1.0
vec4 color = mix(lightColor, darkColor, b);
color = czm_gammaCorrect(color);
material.diffuse = color.rgb;
material.alpha = color.a;
return material;
}
`;var E$t=y(x(),1),h1=`uniform sampler2D heights;
uniform sampler2D colors;
// This material expects heights to be sorted from lowest to highest.
float getHeight(int idx, float invTexSize)
{
vec2 uv = vec2((float(idx) + 0.5) * invTexSize, 0.5);
#ifdef OES_texture_float
return texture(heights, uv).x;
#else
return czm_unpackFloat(texture(heights, uv));
#endif
}
czm_material czm_getMaterial(czm_materialInput materialInput)
{
czm_material material = czm_getDefaultMaterial(materialInput);
float height = materialInput.height;
float invTexSize = 1.0 / float(heightsDimensions.x);
float minHeight = getHeight(0, invTexSize);
float maxHeight = getHeight(heightsDimensions.x - 1, invTexSize);
// early-out when outside the height range
if (height < minHeight || height > maxHeight) {
material.diffuse = vec3(0.0);
material.alpha = 0.0;
return material;
}
// Binary search to find heights above and below.
int idxBelow = 0;
int idxAbove = heightsDimensions.x;
float heightBelow = minHeight;
float heightAbove = maxHeight;
// while loop not allowed, so use for loop with max iterations.
// maxIterations of 16 supports a texture size up to 65536 (2^16).
const int maxIterations = 16;
for (int i = 0; i < maxIterations; i++) {
if (idxBelow >= idxAbove - 1) {
break;
}
int idxMid = (idxBelow + idxAbove) / 2;
float heightTex = getHeight(idxMid, invTexSize);
if (height > heightTex) {
idxBelow = idxMid;
heightBelow = heightTex;
} else {
idxAbove = idxMid;
heightAbove = heightTex;
}
}
float lerper = heightBelow == heightAbove ? 1.0 : (height - heightBelow) / (heightAbove - heightBelow);
vec2 colorUv = vec2(invTexSize * (float(idxBelow) + 0.5 + lerper), 0.5);
vec4 color = texture(colors, colorUv);
// undo preumultiplied alpha
if (color.a > 0.0)
{
color.rgb /= color.a;
}
color.rgb = czm_gammaCorrect(color.rgb);
material.diffuse = color.rgb;
material.alpha = color.a;
return material;
}
`;var _$t=y(x(),1),f1=`uniform vec4 color;
uniform float spacing;
uniform float width;
czm_material czm_getMaterial(czm_materialInput materialInput)
{
czm_material material = czm_getDefaultMaterial(materialInput);
float distanceToContour = mod(materialInput.height, spacing);
#if (__VERSION__ == 300 || defined(GL_OES_standard_derivatives))
float dxc = abs(dFdx(materialInput.height));
float dyc = abs(dFdy(materialInput.height));
float dF = max(dxc, dyc) * czm_pixelRatio * width;
float alpha = (distanceToContour < dF) ? 1.0 : 0.0;
#else
// If no derivatives available (IE 10?), use pixel ratio
float alpha = (distanceToContour < (czm_pixelRatio * width)) ? 1.0 : 0.0;
#endif
vec4 outColor = czm_gammaCorrect(vec4(color.rgb, alpha * color.a));
material.diffuse = outColor.rgb;
material.alpha = outColor.a;
return material;
}
`;var Z$t=y(x(),1),p1=`uniform sampler2D image;
uniform float minimumHeight;
uniform float maximumHeight;
czm_material czm_getMaterial(czm_materialInput materialInput)
{
czm_material material = czm_getDefaultMaterial(materialInput);
float scaledHeight = clamp((materialInput.height - minimumHeight) / (maximumHeight - minimumHeight), 0.0, 1.0);
vec4 rampColor = texture(image, vec2(scaledHeight, 0.5));
rampColor = czm_gammaCorrect(rampColor);
material.diffuse = rampColor.rgb;
material.alpha = rampColor.a;
return material;
}
`;var V$t=y(x(),1),A1=`uniform vec4 fadeInColor;
uniform vec4 fadeOutColor;
uniform float maximumDistance;
uniform bool repeat;
uniform vec2 fadeDirection;
uniform vec2 time;
float getTime(float t, float coord)
{
float scalar = 1.0 / maximumDistance;
float q = distance(t, coord) * scalar;
if (repeat)
{
float r = distance(t, coord + 1.0) * scalar;
float s = distance(t, coord - 1.0) * scalar;
q = min(min(r, s), q);
}
return clamp(q, 0.0, 1.0);
}
czm_material czm_getMaterial(czm_materialInput materialInput)
{
czm_material material = czm_getDefaultMaterial(materialInput);
vec2 st = materialInput.st;
float s = getTime(time.x, st.s) * fadeDirection.s;
float t = getTime(time.y, st.t) * fadeDirection.t;
float u = length(vec2(s, t));
vec4 color = mix(fadeInColor, fadeOutColor, u);
color = czm_gammaCorrect(color);
material.emission = color.rgb;
material.alpha = color.a;
return material;
}
`;var L$t=y(x(),1),g1=`uniform vec4 color;
uniform float cellAlpha;
uniform vec2 lineCount;
uniform vec2 lineThickness;
uniform vec2 lineOffset;
czm_material czm_getMaterial(czm_materialInput materialInput)
{
czm_material material = czm_getDefaultMaterial(materialInput);
vec2 st = materialInput.st;
float scaledWidth = fract(lineCount.s * st.s - lineOffset.s);
scaledWidth = abs(scaledWidth - floor(scaledWidth + 0.5));
float scaledHeight = fract(lineCount.t * st.t - lineOffset.t);
scaledHeight = abs(scaledHeight - floor(scaledHeight + 0.5));
float value;
// Fuzz Factor - Controls blurriness of lines
#if (__VERSION__ == 300 || defined(GL_OES_standard_derivatives))
const float fuzz = 1.2;
vec2 thickness = (lineThickness * czm_pixelRatio) - 1.0;
// From "3D Engine Design for Virtual Globes" by Cozzi and Ring, Listing 4.13.
vec2 dx = abs(dFdx(st));
vec2 dy = abs(dFdy(st));
vec2 dF = vec2(max(dx.s, dy.s), max(dx.t, dy.t)) * lineCount;
value = min(
smoothstep(dF.s * thickness.s, dF.s * (fuzz + thickness.s), scaledWidth),
smoothstep(dF.t * thickness.t, dF.t * (fuzz + thickness.t), scaledHeight));
#else
// If no derivatives available (IE 10?), revert to view-dependent fuzz
const float fuzz = 0.05;
vec2 range = 0.5 - (lineThickness * 0.05);
value = min(
1.0 - smoothstep(range.s, range.s + fuzz, scaledWidth),
1.0 - smoothstep(range.t, range.t + fuzz, scaledHeight));
#endif
// Edges taken from RimLightingMaterial.glsl
// See http://www.fundza.com/rman_shaders/surface/fake_rim/fake_rim1.html
float dRim = 1.0 - abs(dot(materialInput.normalEC, normalize(materialInput.positionToEyeEC)));
float sRim = smoothstep(0.8, 1.0, dRim);
value *= (1.0 - sRim);
vec4 halfColor;
halfColor.rgb = color.rgb * 0.5;
halfColor.a = color.a * (1.0 - ((1.0 - cellAlpha) * value));
halfColor = czm_gammaCorrect(halfColor);
material.diffuse = halfColor.rgb;
material.emission = halfColor.rgb;
material.alpha = halfColor.a;
return material;
}
`;var F$t=y(x(),1),b1=`uniform sampler2D image;
uniform float strength;
uniform vec2 repeat;
czm_material czm_getMaterial(czm_materialInput materialInput)
{
czm_material material = czm_getDefaultMaterial(materialInput);
vec4 textureValue = texture(image, fract(repeat * materialInput.st));
vec3 normalTangentSpace = textureValue.channels;
normalTangentSpace.xy = normalTangentSpace.xy * 2.0 - 1.0;
normalTangentSpace.z = clamp(1.0 - strength, 0.1, 1.0);
normalTangentSpace = normalize(normalTangentSpace);
vec3 normalEC = materialInput.tangentToEyeMatrix * normalTangentSpace;
material.normal = normalEC;
return material;
}
`;var w$t=y(x(),1),y1=`uniform vec4 color;
float getPointOnLine(vec2 p0, vec2 p1, float x)
{
float slope = (p0.y - p1.y) / (p0.x - p1.x);
return slope * (x - p0.x) + p0.y;
}
czm_material czm_getMaterial(czm_materialInput materialInput)
{
czm_material material = czm_getDefaultMaterial(materialInput);
vec2 st = materialInput.st;
#if (__VERSION__ == 300 || defined(GL_OES_standard_derivatives))
float base = 1.0 - abs(fwidth(st.s)) * 10.0 * czm_pixelRatio;
#else
// If no derivatives available (IE 10?), 2.5% of the line will be the arrow head
float base = 0.975;
#endif
vec2 center = vec2(1.0, 0.5);
float ptOnUpperLine = getPointOnLine(vec2(base, 1.0), center, st.s);
float ptOnLowerLine = getPointOnLine(vec2(base, 0.0), center, st.s);
float halfWidth = 0.15;
float s = step(0.5 - halfWidth, st.t);
s *= 1.0 - step(0.5 + halfWidth, st.t);
s *= 1.0 - step(base, st.s);
float t = step(base, materialInput.st.s);
t *= 1.0 - step(ptOnUpperLine, st.t);
t *= step(ptOnLowerLine, st.t);
// Find the distance from the closest separator (region between two colors)
float dist;
if (st.s < base)
{
float d1 = abs(st.t - (0.5 - halfWidth));
float d2 = abs(st.t - (0.5 + halfWidth));
dist = min(d1, d2);
}
else
{
float d1 = czm_infinity;
if (st.t < 0.5 - halfWidth && st.t > 0.5 + halfWidth)
{
d1 = abs(st.s - base);
}
float d2 = abs(st.t - ptOnUpperLine);
float d3 = abs(st.t - ptOnLowerLine);
dist = min(min(d1, d2), d3);
}
vec4 outsideColor = vec4(0.0);
vec4 currentColor = mix(outsideColor, color, clamp(s + t, 0.0, 1.0));
vec4 outColor = czm_antialias(outsideColor, color, currentColor, dist);
outColor = czm_gammaCorrect(outColor);
material.diffuse = outColor.rgb;
material.alpha = outColor.a;
return material;
}
`;var P$t=y(x(),1),x1=`uniform vec4 color;
uniform vec4 gapColor;
uniform float dashLength;
uniform float dashPattern;
in float v_polylineAngle;
const float maskLength = 16.0;
mat2 rotate(float rad) {
float c = cos(rad);
float s = sin(rad);
return mat2(
c, s,
-s, c
);
}
czm_material czm_getMaterial(czm_materialInput materialInput)
{
czm_material material = czm_getDefaultMaterial(materialInput);
vec2 pos = rotate(v_polylineAngle) * gl_FragCoord.xy;
// Get the relative position within the dash from 0 to 1
float dashPosition = fract(pos.x / (dashLength * czm_pixelRatio));
// Figure out the mask index.
float maskIndex = floor(dashPosition * maskLength);
// Test the bit mask.
float maskTest = floor(dashPattern / pow(2.0, maskIndex));
vec4 fragColor = (mod(maskTest, 2.0) < 1.0) ? gapColor : color;
if (fragColor.a < 0.005) { // matches 0/255 and 1/255
discard;
}
fragColor = czm_gammaCorrect(fragColor);
material.emission = fragColor.rgb;
material.alpha = fragColor.a;
return material;
}
`;var Y$t=y(x(),1),C1=`uniform vec4 color;
uniform float glowPower;
uniform float taperPower;
czm_material czm_getMaterial(czm_materialInput materialInput)
{
czm_material material = czm_getDefaultMaterial(materialInput);
vec2 st = materialInput.st;
float glow = glowPower / abs(st.t - 0.5) - (glowPower / 0.5);
if (taperPower <= 0.99999) {
glow *= min(1.0, taperPower / (0.5 - st.s * 0.5) - (taperPower / 0.5));
}
vec4 fragColor;
fragColor.rgb = max(vec3(glow - 1.0 + color.rgb), color.rgb);
fragColor.a = clamp(0.0, 1.0, glow) * color.a;
fragColor = czm_gammaCorrect(fragColor);
material.emission = fragColor.rgb;
material.alpha = fragColor.a;
return material;
}
`;var v$t=y(x(),1),T1=`uniform vec4 color;
uniform vec4 outlineColor;
uniform float outlineWidth;
in float v_width;
czm_material czm_getMaterial(czm_materialInput materialInput)
{
czm_material material = czm_getDefaultMaterial(materialInput);
vec2 st = materialInput.st;
float halfInteriorWidth = 0.5 * (v_width - outlineWidth) / v_width;
float b = step(0.5 - halfInteriorWidth, st.t);
b *= 1.0 - step(0.5 + halfInteriorWidth, st.t);
// Find the distance from the closest separator (region between two colors)
float d1 = abs(st.t - (0.5 - halfInteriorWidth));
float d2 = abs(st.t - (0.5 + halfInteriorWidth));
float dist = min(d1, d2);
vec4 currentColor = mix(outlineColor, color, b);
vec4 outColor = czm_antialias(outlineColor, color, currentColor, dist);
outColor = czm_gammaCorrect(outColor);
material.diffuse = outColor.rgb;
material.alpha = outColor.a;
return material;
}
`;var D$t=y(x(),1),E1=`uniform vec4 color;
uniform vec4 rimColor;
uniform float width;
czm_material czm_getMaterial(czm_materialInput materialInput)
{
czm_material material = czm_getDefaultMaterial(materialInput);
// See http://www.fundza.com/rman_shaders/surface/fake_rim/fake_rim1.html
float d = 1.0 - dot(materialInput.normalEC, normalize(materialInput.positionToEyeEC));
float s = smoothstep(1.0 - width, 1.0, d);
vec4 outColor = czm_gammaCorrect(color);
vec4 outRimColor = czm_gammaCorrect(rimColor);
material.diffuse = outColor.rgb;
material.emission = outRimColor.rgb * s;
material.alpha = mix(outColor.a, outRimColor.a, s);
return material;
}
`;var Q$t=y(x(),1),S1=`uniform sampler2D image;
czm_material czm_getMaterial(czm_materialInput materialInput)
{
czm_material material = czm_getDefaultMaterial(materialInput);
vec4 rampColor = texture(image, vec2(materialInput.slope / (czm_pi / 2.0), 0.5));
rampColor = czm_gammaCorrect(rampColor);
material.diffuse = rampColor.rgb;
material.alpha = rampColor.a;
return material;
}
`;var z$t=y(x(),1),_1=`uniform vec4 evenColor;
uniform vec4 oddColor;
uniform float offset;
uniform float repeat;
uniform bool horizontal;
czm_material czm_getMaterial(czm_materialInput materialInput)
{
czm_material material = czm_getDefaultMaterial(materialInput);
// Based on the Stripes Fragment Shader in the Orange Book (11.1.2)
float coord = mix(materialInput.st.s, materialInput.st.t, float(horizontal));
float value = fract((coord - offset) * (repeat * 0.5));
float dist = min(value, min(abs(value - 0.5), 1.0 - value));
vec4 currentColor = mix(evenColor, oddColor, step(0.5, value));
vec4 color = czm_antialias(evenColor, oddColor, currentColor, dist);
color = czm_gammaCorrect(color);
material.diffuse = color.rgb;
material.alpha = color.a;
return material;
}
`;var J$t=y(x(),1),I1=`uniform vec4 waterColor;
uniform vec4 landColor;
czm_material czm_getMaterial(czm_materialInput materialInput)
{
czm_material material = czm_getDefaultMaterial(materialInput);
vec4 outColor = mix(landColor, waterColor, materialInput.waterMask);
outColor = czm_gammaCorrect(outColor);
material.diffuse = outColor.rgb;
material.alpha = outColor.a;
return material;
}
`;var j$t=y(x(),1),Z1=`// Thanks for the contribution Jonas
// http://29a.ch/2012/7/19/webgl-terrain-rendering-water-fog
uniform sampler2D specularMap;
uniform sampler2D normalMap;
uniform vec4 baseWaterColor;
uniform vec4 blendColor;
uniform float frequency;
uniform float animationSpeed;
uniform float amplitude;
uniform float specularIntensity;
uniform float fadeFactor;
czm_material czm_getMaterial(czm_materialInput materialInput)
{
czm_material material = czm_getDefaultMaterial(materialInput);
float time = czm_frameNumber * animationSpeed;
// fade is a function of the distance from the fragment and the frequency of the waves
float fade = max(1.0, (length(materialInput.positionToEyeEC) / 10000000000.0) * frequency * fadeFactor);
float specularMapValue = texture(specularMap, materialInput.st).r;
// note: not using directional motion at this time, just set the angle to 0.0;
vec4 noise = czm_getWaterNoise(normalMap, materialInput.st * frequency, time, 0.0);
vec3 normalTangentSpace = noise.xyz * vec3(1.0, 1.0, (1.0 / amplitude));
// fade out the normal perturbation as we move further from the water surface
normalTangentSpace.xy /= fade;
// attempt to fade out the normal perturbation as we approach non water areas (low specular map value)
normalTangentSpace = mix(vec3(0.0, 0.0, 50.0), normalTangentSpace, specularMapValue);
normalTangentSpace = normalize(normalTangentSpace);
// get ratios for alignment of the new normal vector with a vector perpendicular to the tangent plane
float tsPerturbationRatio = clamp(dot(normalTangentSpace, vec3(0.0, 0.0, 1.0)), 0.0, 1.0);
// fade out water effect as specular map value decreases
material.alpha = mix(blendColor.a, baseWaterColor.a, specularMapValue) * specularMapValue;
// base color is a blend of the water and non-water color based on the value from the specular map
// may need a uniform blend factor to better control this
material.diffuse = mix(blendColor.rgb, baseWaterColor.rgb, specularMapValue);
// diffuse highlights are based on how perturbed the normal is
material.diffuse += (0.1 * tsPerturbationRatio);
material.diffuse = material.diffuse;
material.normal = normalize(materialInput.tangentToEyeMatrix * normalTangentSpace);
material.specular = specularIntensity;
material.shininess = 10.0;
return material;
}
`;function tt(e){this.type=void 0,this.autoDestroyOldTexture=e.autoDestroyOldTexture??!0,this.shaderSource=void 0,this.materials=void 0,this.uniforms=void 0,this._uniforms=void 0,this.translucent=void 0,this._minificationFilter=e.minificationFilter??zt.LINEAR,this._magnificationFilter=e.magnificationFilter??li.LINEAR,this._strict=void 0,this._template=void 0,this._count=void 0,this._texturePaths={},this._loadedImages=[],this._loadedCubeMaps=[],this._textures={},this._updateFunctions=[],this._defaultTexture=void 0,this._initializationPromises=[],this._initializationError=void 0,GNe(e,this),Object.defineProperties(this,{type:{value:this.type,writable:!1},minificationFilter:{get:function(){return this._minificationFilter},set:function(t){this._minificationFilter=t}},magnificationFilter:{get:function(){return this._magnificationFilter},set:function(t){this._magnificationFilter=t}}}),l(tt._uniformList[this.type])||(tt._uniformList[this.type]=Object.keys(this._uniforms))}tt._uniformList={};tt.fromType=function(e,t){let n=new tt({fabric:{type:e}});if(l(t))for(let i in t)t.hasOwnProperty(i)&&(n.uniforms[i]=t[i]);return n};tt.fromTypeAsync=async function(e,t){let n=[],i=new tt({fabric:{type:e,uniforms:t}});if(dae(i,n),await Promise.all(n),n.length=0,l(i._initializationError))throw i._initializationError;return i};function dae(e,t){t.push(...e._initializationPromises);let n=e.materials;for(let i in n)if(n.hasOwnProperty(i)){let o=n[i];dae(o,t)}}tt.prototype.isTranslucent=function(){if(l(this.translucent))return typeof this.translucent=="function"?this.translucent():this.translucent;let e=!0,t=this._translucentFunctions,n=t.length;for(let i=0;i<n;++i){let o=t[i];if(typeof o=="function"?e=e&&o():e=e&&o,!e)break}return e};tt.prototype.update=function(e){this._defaultTexture=e.defaultTexture;let t,n,i=this._loadedImages,o=i.length;for(t=0;t<o;++t){let c=i[t];n=c.id;let d=c.image,u;Array.isArray(d)&&(u=d.slice(1,d.length).map(function(b){return b.bufferView}),d=d[0]);let h=new Ht({minificationFilter:this._minificationFilter,magnificationFilter:this._magnificationFilter}),p;l(d.internalFormat)?p=new Lt({context:e,pixelFormat:d.internalFormat,width:d.width,height:d.height,source:{arrayBufferView:d.bufferView,mipLevels:u},sampler:h}):p=new Lt({context:e,source:d,sampler:h});let A=this._textures[n];l(A)&&A!==this._defaultTexture&&A.destroy(),this._textures[n]=p;let f=`${n}Dimensions`;if(this.uniforms.hasOwnProperty(f)){let b=this.uniforms[f];b.x=p._width,b.y=p._height}}i.length=0;let r=this._loadedCubeMaps;for(o=r.length,t=0;t<o;++t){let c=r[t];n=c.id;let d=c.images,u=new Or({context:e,source:{positiveX:d[0],negativeX:d[1],positiveY:d[2],negativeY:d[3],positiveZ:d[4],negativeZ:d[5]},sampler:new Ht({minificationFilter:this._minificationFilter,magnificationFilter:this._magnificationFilter})});this._textures[n]=u}r.length=0;let s=this._updateFunctions;for(o=s.length,t=0;t<o;++t)s[t](this,e);let a=this.materials;for(let c in a)a.hasOwnProperty(c)&&a[c].update(e)};tt.prototype.isDestroyed=function(){return!1};tt.prototype.destroy=function(){let e=this._textures;for(let n in e)if(e.hasOwnProperty(n)){let i=e[n];i!==this._defaultTexture&&i.destroy()}let t=this.materials;for(let n in t)t.hasOwnProperty(n)&&t[n].destroy();return he(this)};function GNe(e,t){e=e??Q.EMPTY_OBJECT,t._strict=e.strict??!1,t._count=e.count??0,t._template=He(e.fabric??Q.EMPTY_OBJECT),t.fabric=He(e.fabric??Q.EMPTY_OBJECT),t._template.uniforms=He(t._template.uniforms??Q.EMPTY_OBJECT),t._template.materials=He(t._template.materials??Q.EMPTY_OBJECT),t.type=l(t._template.type)?t._template.type:qn(),t.shaderSource="",t.materials={},t.uniforms={},t._uniforms={},t._translucentFunctions=[];let n,i=tt._materialCache.getMaterial(t.type);if(l(i)){let r=He(i.fabric,!0);t._template=Ft(t._template,r,!0),n=i.translucent}BNe(t),NNe(t),MNe(t),UNe(t),l(i)||tt._materialCache.addMaterial(t.type,t);let o=t._translucentFunctions.length===0?!0:void 0;if(n=n??o,n=e.translucent??n,l(n))if(typeof n=="function"){let r=function(){return n(t)};t._translucentFunctions.push(r)}else t._translucentFunctions.push(n)}function QH(e,t,n,i){if(l(e)){for(let o in e)if(e.hasOwnProperty(o)){let r=t.indexOf(o)!==-1;(i&&!r||!i&&r)&&n(o,t)}}}function cae(e,t){}function LNe(e,t){}var WNe=["type","materials","uniforms","components","source"],FNe=["diffuse","specular","shininess","normal","emission","alpha"];function BNe(e){let t=e._template,n=t.uniforms,i=t.materials,o=t.components;QH(t,WNe,cae,!0),QH(o,FNe,cae,!0);let r=[];for(let s in i)i.hasOwnProperty(s)&&r.push(s);QH(n,r,LNe,!1)}function wNe(e,t){let n=t._template.materials;for(let i in n)if(n.hasOwnProperty(i)&&e.indexOf(i)>-1)return!0;return!1}function NNe(e){let t=e._template.components,n=e._template.source;if(l(n))e.shaderSource+=`${n}
`;else{if(e.shaderSource+=`czm_material czm_getMaterial(czm_materialInput materialInput)
{
`,e.shaderSource+=`czm_material material = czm_getDefaultMaterial(materialInput);
`,l(t)){let i=Object.keys(e._template.materials).length>0;for(let o in t)if(t.hasOwnProperty(o))if(o==="diffuse"||o==="emission"){let s=i&&wNe(t[o],e)?t[o]:`czm_gammaCorrect(${t[o]})`;e.shaderSource+=`material.${o} = ${s};
`}else o==="alpha"?e.shaderSource+=`material.alpha = ${t.alpha};
`:e.shaderSource+=`material.${o} = ${t[o]};
`}e.shaderSource+=`return material;
}
`}}var lae={mat2:Qi,mat3:$,mat4:F},PNe=/\.ktx2$/i;function XNe(e){let t;return function(n,i){let o=n.uniforms,r=o[e],s=t!==r,a=!l(r)||r===tt.DefaultImageId;t=r;let c=n._textures[e],d,u;if(r instanceof HTMLVideoElement){if(r.readyState>=2){if(s&&l(c)&&(c!==i.defaultTexture&&c.destroy(),c=void 0),!l(c)||c===i.defaultTexture){let h=new Ht({minificationFilter:n._minificationFilter,magnificationFilter:n._magnificationFilter});c=new Lt({context:i,source:r,sampler:h}),n._textures[e]=c;return}c.copyFrom({source:r})}else l(c)||(n._textures[e]=i.defaultTexture);return}if(r instanceof Lt&&r!==c){n._texturePaths[e]=void 0;let h=n._textures[e];l(h)&&h!==n._defaultTexture&&!h.isDestroyed()&&n.autoDestroyOldTexture&&h.destroy(),n._textures[e]=r,d=`${e}Dimensions`,o.hasOwnProperty(d)&&(u=o[d],u.x=r._width,u.y=r._height);return}if(s&&l(c)&&a&&(c!==n._defaultTexture&&c.destroy(),c=void 0,n._texturePaths[e]=void 0),l(c)||(c=n._textures[e]=n._defaultTexture,d=`${e}Dimensions`,o.hasOwnProperty(d)&&(u=o[d],u.x=c._width,u.y=c._height)),!a){if((r instanceof HTMLCanvasElement||r instanceof HTMLImageElement||r instanceof ImageBitmap||r instanceof OffscreenCanvas)&&r!==n._texturePaths[e]){n._loadedImages.push({id:e,image:r}),n._texturePaths[e]=r;return}uae(n,e)}}}function uae(e,t){let i=e.uniforms[t];if(i===tt.DefaultImageId)return Promise.resolve();let o=Le.createIfNeeded(i);if(!(o instanceof Le))return Promise.resolve();let r=Le.createIfNeeded(e._texturePaths[t]);if(!(!l(r)||r.url!==o.url))return Promise.resolve();let a;return PNe.test(o.url)?a=md(o.url):a=o.fetchImage(),Promise.resolve(a).then(function(c){e._loadedImages.push({id:t,image:c})}).catch(function(c){e._initializationError=c;let d=e._textures[t];l(d)&&d!==e._defaultTexture&&d.destroy(),e._textures[t]=e._defaultTexture}),e._texturePaths[t]=i,a}function YNe(e){return function(t,n){let i=t.uniforms[e];if(i instanceof Or){let o=t._textures[e];o!==t._defaultTexture&&o.destroy(),t._texturePaths[e]=void 0,t._textures[e]=i;return}l(t._textures[e])||(t._textures[e]=n.defaultCubeMap),mae(t,e)}}function mae(e,t){let i=e.uniforms[t];if(i===tt.DefaultCubeMapId)return Promise.resolve();let o=i.positiveX+i.negativeX+i.positiveY+i.negativeY+i.positiveZ+i.negativeZ;if(o===e._texturePaths[t])return Promise.resolve();let r=[Le.createIfNeeded(i.positiveX).fetchImage(),Le.createIfNeeded(i.negativeX).fetchImage(),Le.createIfNeeded(i.positiveY).fetchImage(),Le.createIfNeeded(i.negativeY).fetchImage(),Le.createIfNeeded(i.positiveZ).fetchImage(),Le.createIfNeeded(i.negativeZ).fetchImage()],s=Promise.all(r);return s.then(function(a){e._loadedCubeMaps.push({id:t,images:a})}).catch(function(a){e._initializationError=a}),e._texturePaths[t]=o,s}function MNe(e){let t=e._template.uniforms;for(let n in t)t.hasOwnProperty(n)&&hae(e,n)}function hae(e,t){let n=e._strict,i=e._template.uniforms,o=i[t],r=vNe(o),s;if(r==="channels")s=R1(e,t,o,!1);else{if(r==="sampler2D"){let d=`${t}Dimensions`;DNe(e,d)>0&&(i[d]={type:"ivec3",x:1,y:1},hae(e,d))}if(!new RegExp(`uniform\\s+${r}\\s+${t}\\s*;`).test(e.shaderSource)){let d=`uniform ${r} ${t};`;e.shaderSource=d+e.shaderSource}let c=`${t}_${e._count++}`;if(s=R1(e,t,c),e.uniforms[t]=o,r==="sampler2D")e._uniforms[c]=function(){return e._textures[t]},e._updateFunctions.push(XNe(t)),e._initializationPromises.push(uae(e,t));else if(r==="samplerCube")e._uniforms[c]=function(){return e._textures[t]},e._updateFunctions.push(YNe(t)),e._initializationPromises.push(mae(e,t));else if(r.indexOf("mat")!==-1){let d=new lae[r];e._uniforms[c]=function(){return lae[r].fromColumnMajorArray(e.uniforms[t],d)}}else e._uniforms[c]=function(){return e.uniforms[t]}}}function vNe(e){let t=e.type;if(!l(t)){let n=typeof e;if(n==="number")t="float";else if(n==="boolean")t="bool";else if(n==="string"||e instanceof Le||e instanceof HTMLCanvasElement||e instanceof HTMLImageElement||e instanceof ImageBitmap||e instanceof OffscreenCanvas||e instanceof Lt)/^([rgba]){1,4}$/i.test(e)?t="channels":e===tt.DefaultCubeMapId?t="samplerCube":t="sampler2D";else if(n==="object")if(Array.isArray(e))(e.length===4||e.length===9||e.length===16)&&(t=`mat${Math.sqrt(e.length)}`);else{let i=0;for(let o in e)e.hasOwnProperty(o)&&(i+=1);i>=2&&i<=4?t=`vec${i}`:i===6&&(t="samplerCube")}}return t}function UNe(e){let t=e._strict,n=e._template.materials;for(let i in n)if(n.hasOwnProperty(i)){let o=new tt({strict:t,fabric:n[i],count:e._count});e._count=o._count,e._uniforms=Ft(e._uniforms,o._uniforms,!0),e.materials[i]=o,e._translucentFunctions=e._translucentFunctions.concat(o._translucentFunctions);let r="czm_getMaterial",s=`${r}_${e._count++}`;R1(o,r,s),e.shaderSource=o.shaderSource+e.shaderSource;let a=`${s}(materialInput)`,c=R1(e,i,a)}}function R1(e,t,n,i){i=i??!0;let o=0,r="([\\w])?",s=`([\\w${i?".":""}])?`,a=new RegExp(s+t+r,"g");return e.shaderSource=e.shaderSource.replace(a,function(c,d,u){return d||u?c:(o+=1,n)}),o}function DNe(e,t,n){return R1(e,t,t,n)}tt._materialCache={_materials:{},addMaterial:function(e,t){this._materials[e]=t},getMaterial:function(e){return this._materials[e]}};tt.DefaultImageId="czm_defaultImage";tt.DefaultCubeMapId="czm_defaultCubeMap";tt.ColorType="Color";tt._materialCache.addMaterial(tt.ColorType,{fabric:{type:tt.ColorType,uniforms:{color:new U(1,0,0,.5)},components:{diffuse:"color.rgb",alpha:"color.a"}},translucent:function(e){return e.uniforms.color.alpha<1}});tt.ImageType="Image";tt._materialCache.addMaterial(tt.ImageType,{fabric:{type:tt.ImageType,uniforms:{image:tt.DefaultImageId,repeat:new M(1,1),color:new U(1,1,1,1)},components:{diffuse:"texture(image, fract(repeat * materialInput.st)).rgb * color.rgb",alpha:"texture(image, fract(repeat * materialInput.st)).a * color.a"}},translucent:function(e){return e.uniforms.color.alpha<1}});tt.DiffuseMapType="DiffuseMap";tt._materialCache.addMaterial(tt.DiffuseMapType,{fabric:{type:tt.DiffuseMapType,uniforms:{image:tt.DefaultImageId,channels:"rgb",repeat:new M(1,1)},components:{diffuse:"texture(image, fract(repeat * materialInput.st)).channels"}},translucent:!1});tt.AlphaMapType="AlphaMap";tt._materialCache.addMaterial(tt.AlphaMapType,{fabric:{type:tt.AlphaMapType,uniforms:{image:tt.DefaultImageId,channel:"a",repeat:new M(1,1)},components:{alpha:"texture(image, fract(repeat * materialInput.st)).channel"}},translucent:!0});tt.SpecularMapType="SpecularMap";tt._materialCache.addMaterial(tt.SpecularMapType,{fabric:{type:tt.SpecularMapType,uniforms:{image:tt.DefaultImageId,channel:"r",repeat:new M(1,1)},components:{specular:"texture(image, fract(repeat * materialInput.st)).channel"}},translucent:!1});tt.EmissionMapType="EmissionMap";tt._materialCache.addMaterial(tt.EmissionMapType,{fabric:{type:tt.EmissionMapType,uniforms:{image:tt.DefaultImageId,channels:"rgb",repeat:new M(1,1)},components:{emission:"texture(image, fract(repeat * materialInput.st)).channels"}},translucent:!1});tt.BumpMapType="BumpMap";tt._materialCache.addMaterial(tt.BumpMapType,{fabric:{type:tt.BumpMapType,uniforms:{image:tt.DefaultImageId,channel:"r",strength:.8,repeat:new M(1,1)},source:d1},translucent:!1});tt.NormalMapType="NormalMap";tt._materialCache.addMaterial(tt.NormalMapType,{fabric:{type:tt.NormalMapType,uniforms:{image:tt.DefaultImageId,channels:"rgb",strength:.8,repeat:new M(1,1)},source:b1},translucent:!1});tt.GridType="Grid";tt._materialCache.addMaterial(tt.GridType,{fabric:{type:tt.GridType,uniforms:{color:new U(0,1,0,1),cellAlpha:.1,lineCount:new M(8,8),lineThickness:new M(1,1),lineOffset:new M(0,0)},source:g1},translucent:function(e){let t=e.uniforms;return t.color.alpha<1||t.cellAlpha<1}});tt.StripeType="Stripe";tt._materialCache.addMaterial(tt.StripeType,{fabric:{type:tt.StripeType,uniforms:{horizontal:!0,evenColor:new U(1,1,1,.5),oddColor:new U(0,0,1,.5),offset:0,repeat:5},source:_1},translucent:function(e){let t=e.uniforms;return t.evenColor.alpha<1||t.oddColor.alpha<1}});tt.CheckerboardType="Checkerboard";tt._materialCache.addMaterial(tt.CheckerboardType,{fabric:{type:tt.CheckerboardType,uniforms:{lightColor:new U(1,1,1,.5),darkColor:new U(0,0,0,.5),repeat:new M(5,5)},source:u1},translucent:function(e){let t=e.uniforms;return t.lightColor.alpha<1||t.darkColor.alpha<1}});tt.DotType="Dot";tt._materialCache.addMaterial(tt.DotType,{fabric:{type:tt.DotType,uniforms:{lightColor:new U(1,1,0,.75),darkColor:new U(0,1,1,.75),repeat:new M(5,5)},source:m1},translucent:function(e){let t=e.uniforms;return t.lightColor.alpha<1||t.darkColor.alpha<1}});tt.WaterType="Water";tt._materialCache.addMaterial(tt.WaterType,{fabric:{type:tt.WaterType,uniforms:{baseWaterColor:new U(.2,.3,.6,1),blendColor:new U(0,1,.699,1),specularMap:tt.DefaultImageId,normalMap:tt.DefaultImageId,frequency:10,animationSpeed:.01,amplitude:1,specularIntensity:.5,fadeFactor:1},source:Z1},translucent:function(e){let t=e.uniforms;return t.baseWaterColor.alpha<1||t.blendColor.alpha<1}});tt.RimLightingType="RimLighting";tt._materialCache.addMaterial(tt.RimLightingType,{fabric:{type:tt.RimLightingType,uniforms:{color:new U(1,0,0,.7),rimColor:new U(1,1,1,.4),width:.3},source:E1},translucent:function(e){let t=e.uniforms;return t.color.alpha<1||t.rimColor.alpha<1}});tt.FadeType="Fade";tt._materialCache.addMaterial(tt.FadeType,{fabric:{type:tt.FadeType,uniforms:{fadeInColor:new U(1,0,0,1),fadeOutColor:new U(0,0,0,0),maximumDistance:.5,repeat:!0,fadeDirection:{x:!0,y:!0},time:new M(.5,.5)},source:A1},translucent:function(e){let t=e.uniforms;return t.fadeInColor.alpha<1||t.fadeOutColor.alpha<1}});tt.PolylineArrowType="PolylineArrow";tt._materialCache.addMaterial(tt.PolylineArrowType,{fabric:{type:tt.PolylineArrowType,uniforms:{color:new U(1,1,1,1)},source:y1},translucent:!0});tt.PolylineDashType="PolylineDash";tt._materialCache.addMaterial(tt.PolylineDashType,{fabric:{type:tt.PolylineDashType,uniforms:{color:new U(1,0,1,1),gapColor:new U(0,0,0,0),dashLength:16,dashPattern:255},source:x1},translucent:!0});tt.PolylineGlowType="PolylineGlow";tt._materialCache.addMaterial(tt.PolylineGlowType,{fabric:{type:tt.PolylineGlowType,uniforms:{color:new U(0,.5,1,1),glowPower:.25,taperPower:1},source:C1},translucent:!0});tt.PolylineOutlineType="PolylineOutline";tt._materialCache.addMaterial(tt.PolylineOutlineType,{fabric:{type:tt.PolylineOutlineType,uniforms:{color:new U(1,1,1,1),outlineColor:new U(1,0,0,1),outlineWidth:1},source:T1},translucent:function(e){let t=e.uniforms;return t.color.alpha<1||t.outlineColor.alpha<1}});tt.ElevationContourType="ElevationContour";tt._materialCache.addMaterial(tt.ElevationContourType,{fabric:{type:tt.ElevationContourType,uniforms:{spacing:100,color:new U(1,0,0,1),width:1},source:f1},translucent:!1});tt.ElevationRampType="ElevationRamp";tt._materialCache.addMaterial(tt.ElevationRampType,{fabric:{type:tt.ElevationRampType,uniforms:{image:tt.DefaultImageId,minimumHeight:0,maximumHeight:1e4},source:p1},translucent:!1});tt.SlopeRampMaterialType="SlopeRamp";tt._materialCache.addMaterial(tt.SlopeRampMaterialType,{fabric:{type:tt.SlopeRampMaterialType,uniforms:{image:tt.DefaultImageId},source:S1},translucent:!1});tt.AspectRampMaterialType="AspectRamp";tt._materialCache.addMaterial(tt.AspectRampMaterialType,{fabric:{type:tt.AspectRampMaterialType,uniforms:{image:tt.DefaultImageId},source:l1},translucent:!1});tt.ElevationBandType="ElevationBand";tt._materialCache.addMaterial(tt.ElevationBandType,{fabric:{type:tt.ElevationBandType,uniforms:{heights:tt.DefaultImageId,colors:tt.DefaultImageId},source:h1},translucent:!0});tt.WaterMaskType="WaterMask";tt._materialCache.addMaterial(tt.WaterMaskType,{fabric:{type:tt.WaterMaskType,source:I1,uniforms:{waterColor:new U(1,1,1,1),landColor:new U(0,0,0,0)}},translucent:!1});var Oi=tt;function Fx(e){e=e??Q.EMPTY_OBJECT;let t=e.translucent??!0,n=e.closed??!1,i=e.materialSupport??Fx.MaterialSupport.TEXTURED;this.material=l(e.material)?e.material:Oi.fromType(Oi.ColorType),this.translucent=t,this._vertexShaderSource=e.vertexShaderSource??i.vertexShaderSource,this._fragmentShaderSource=e.fragmentShaderSource??i.fragmentShaderSource,this._renderState=To.getDefaultRenderState(t,n,e.renderState),this._closed=n,this._materialSupport=i,this._vertexFormat=i.vertexFormat,this._flat=e.flat??!1,this._faceForward=e.faceForward??!n}Object.defineProperties(Fx.prototype,{vertexShaderSource:{get:function(){return this._vertexShaderSource}},fragmentShaderSource:{get:function(){return this._fragmentShaderSource}},renderState:{get:function(){return this._renderState}},closed:{get:function(){return this._closed}},materialSupport:{get:function(){return this._materialSupport}},vertexFormat:{get:function(){return this._vertexFormat}},flat:{get:function(){return this._flat}},faceForward:{get:function(){return this._faceForward}}});Fx.prototype.getFragmentShaderSource=To.prototype.getFragmentShaderSource;Fx.prototype.isTranslucent=To.prototype.isTranslucent;Fx.prototype.getRenderState=To.prototype.getRenderState;Fx.MaterialSupport={BASIC:Object.freeze({vertexFormat:ve.POSITION_AND_NORMAL,vertexShaderSource:s1,fragmentShaderSource:r1}),TEXTURED:Object.freeze({vertexFormat:ve.POSITION_NORMAL_AND_ST,vertexShaderSource:c1,fragmentShaderSource:a1}),ALL:Object.freeze({vertexFormat:ve.ALL,vertexShaderSource:o1,fragmentShaderSource:i1})};var go=Fx;var mtn=y(x(),1);var jen=y(x(),1),V1=`in vec3 v_positionEC;
in vec3 v_normalEC;
in vec4 v_color;
void main()
{
vec3 positionToEyeEC = -v_positionEC;
vec3 normalEC = normalize(v_normalEC);
#ifdef FACE_FORWARD
normalEC = faceforward(normalEC, vec3(0.0, 0.0, 1.0), -normalEC);
#endif
vec4 color = czm_gammaCorrect(v_color);
czm_materialInput materialInput;
materialInput.normalEC = normalEC;
materialInput.positionToEyeEC = positionToEyeEC;
czm_material material = czm_getDefaultMaterial(materialInput);
material.diffuse = color.rgb;
material.alpha = color.a;
out_FragColor = czm_phong(normalize(positionToEyeEC), material, czm_lightDirectionEC);
}
`;var $en=y(x(),1),G1=`in vec3 position3DHigh;
in vec3 position3DLow;
in vec3 normal;
in vec4 color;
in float batchId;
out vec3 v_positionEC;
out vec3 v_normalEC;
out vec4 v_color;
void main()
{
vec4 p = czm_computePosition();
v_positionEC = (czm_modelViewRelativeToEye * p).xyz; // position in eye coordinates
v_normalEC = czm_normal * normal; // normal in eye coordinates
v_color = color;
gl_Position = czm_modelViewProjectionRelativeToEye * p;
}
`;var ttn=y(x(),1),Bx=`in vec4 v_color;
void main()
{
out_FragColor = czm_gammaCorrect(v_color);
}
`;var itn=y(x(),1),L1=`in vec3 position3DHigh;
in vec3 position3DLow;
in vec4 color;
in float batchId;
out vec4 v_color;
void main()
{
vec4 p = czm_computePosition();
v_color = color;
gl_Position = czm_modelViewProjectionRelativeToEye * p;
}
`;function WA(e){e=e??Q.EMPTY_OBJECT;let t=e.translucent??!0,n=e.closed??!1,i=e.flat??!1,o=i?L1:G1,r=i?Bx:V1,s=i?WA.FLAT_VERTEX_FORMAT:WA.VERTEX_FORMAT;this.material=void 0,this.translucent=t,this._vertexShaderSource=e.vertexShaderSource??o,this._fragmentShaderSource=e.fragmentShaderSource??r,this._renderState=To.getDefaultRenderState(t,n,e.renderState),this._closed=n,this._vertexFormat=s,this._flat=i,this._faceForward=e.faceForward??!n}Object.defineProperties(WA.prototype,{vertexShaderSource:{get:function(){return this._vertexShaderSource}},fragmentShaderSource:{get:function(){return this._fragmentShaderSource}},renderState:{get:function(){return this._renderState}},closed:{get:function(){return this._closed}},vertexFormat:{get:function(){return this._vertexFormat}},flat:{get:function(){return this._flat}},faceForward:{get:function(){return this._faceForward}}});WA.VERTEX_FORMAT=ve.POSITION_AND_NORMAL;WA.FLAT_VERTEX_FORMAT=ve.POSITION_ONLY;WA.prototype.getFragmentShaderSource=To.prototype.getFragmentShaderSource;WA.prototype.isTranslucent=To.prototype.isTranslucent;WA.prototype.getRenderState=To.prototype.getRenderState;var yn=WA;var xtn=y(x(),1);function _S(e){this._definitionChanged=new xe,this._color=void 0,this._colorSubscription=void 0,this.color=e}Object.defineProperties(_S.prototype,{isConstant:{get:function(){return K.isConstant(this._color)}},definitionChanged:{get:function(){return this._definitionChanged}},color:be("color")});_S.prototype.getType=function(e){return"Color"};var kNe=new q;_S.prototype.getValue=function(e,t){return l(e)||(e=q.now(kNe)),l(t)||(t={}),t.color=K.getValueOrClonedDefault(this._color,e,U.WHITE,t.color),t};_S.prototype.equals=function(e){return this===e||e instanceof _S&&K.equals(this._color,e._color)};var Kt=_S;var qrn=y(x(),1);var Lrn=y(x(),1);var vtn=y(x(),1);var Vtn=y(x(),1);function n0(e){e=e??Q.EMPTY_OBJECT,this._ellipsoid=e.ellipsoid??ie.default,this._rectangle=e.rectangle??de.MAX_VALUE,this._projection=new ki(this._ellipsoid),this._numberOfLevelZeroTilesX=e.numberOfLevelZeroTilesX??2,this._numberOfLevelZeroTilesY=e.numberOfLevelZeroTilesY??1}Object.defineProperties(n0.prototype,{ellipsoid:{get:function(){return this._ellipsoid}},rectangle:{get:function(){return this._rectangle}},projection:{get:function(){return this._projection}}});n0.prototype.getNumberOfXTilesAtLevel=function(e){return this._numberOfLevelZeroTilesX<<e};n0.prototype.getNumberOfYTilesAtLevel=function(e){return this._numberOfLevelZeroTilesY<<e};n0.prototype.rectangleToNativeRectangle=function(e,t){let n=L.toDegrees(e.west),i=L.toDegrees(e.south),o=L.toDegrees(e.east),r=L.toDegrees(e.north);return l(t)?(t.west=n,t.south=i,t.east=o,t.north=r,t):new de(n,i,o,r)};n0.prototype.tileXYToNativeRectangle=function(e,t,n,i){let o=this.tileXYToRectangle(e,t,n,i);return o.west=L.toDegrees(o.west),o.south=L.toDegrees(o.south),o.east=L.toDegrees(o.east),o.north=L.toDegrees(o.north),o};n0.prototype.tileXYToRectangle=function(e,t,n,i){let o=this._rectangle,r=this.getNumberOfXTilesAtLevel(n),s=this.getNumberOfYTilesAtLevel(n),a=o.width/r,c=e*a+o.west,d=(e+1)*a+o.west,u=o.height/s,h=o.north-t*u,p=o.north-(t+1)*u;return l(i)||(i=new de(c,p,d,h)),i.west=c,i.south=p,i.east=d,i.north=h,i};n0.prototype.positionToTileXY=function(e,t,n){let i=this._rectangle;if(!de.contains(i,e))return;let o=this.getNumberOfXTilesAtLevel(t),r=this.getNumberOfYTilesAtLevel(t),s=i.width/o,a=i.height/r,c=e.longitude;i.east<i.west&&(c+=L.TWO_PI);let d=(c-i.west)/s|0;d>=o&&(d=o-1);let u=(i.north-e.latitude)/a|0;return u>=r&&(u=r-1),l(n)?(n.x=d,n.y=u,n):new M(d,u)};var zi=n0;var fae=new m,pae=new m,Aae=new Ae,OH=new m,QNe=new m,gae=new ue,ONe=new zi,W1=[new Ae,new Ae,new Ae,new Ae],F1=new M,Zs={};Zs.initialize=function(){let e=Zs._initPromise;return l(e)||(e=Le.fetchJson(en("Assets/approximateTerrainHeights.json")).then(function(t){Zs._terrainHeights=t}),Zs._initPromise=e),e};Zs.getMinimumMaximumHeights=function(e,t){t=t??ie.default;let n=bae(e),i=Zs._defaultMinTerrainHeight,o=Zs._defaultMaxTerrainHeight;if(l(n)){let r=`${n.level}-${n.x}-${n.y}`,s=Zs._terrainHeights[r];l(s)&&(i=s[0],o=s[1]),t.cartographicToCartesian(de.northeast(e,Aae),fae),t.cartographicToCartesian(de.southwest(e,Aae),pae),m.midpoint(pae,fae,OH);let a=t.scaleToGeodeticSurface(OH,QNe);if(l(a)){let c=m.distance(OH,a);i=Math.min(i,-c)}else i=Zs._defaultMinTerrainHeight}return i=Math.max(Zs._defaultMinTerrainHeight,i),{minimumTerrainHeight:i,maximumTerrainHeight:o}};Zs.getBoundingSphere=function(e,t){t=t??ie.default;let n=bae(e),i=Zs._defaultMaxTerrainHeight;if(l(n)){let r=`${n.level}-${n.x}-${n.y}`,s=Zs._terrainHeights[r];l(s)&&(i=s[1])}let o=ue.fromRectangle3D(e,t,0);return ue.fromRectangle3D(e,t,i,gae),ue.union(o,gae,o)};function bae(e){Ae.fromRadians(e.east,e.north,0,W1[0]),Ae.fromRadians(e.west,e.north,0,W1[1]),Ae.fromRadians(e.east,e.south,0,W1[2]),Ae.fromRadians(e.west,e.south,0,W1[3]);let t=0,n=0,i=0,o=0,r=Zs._terrainHeightsMaxLevel,s;for(s=0;s<=r;++s){let a=!1;for(let c=0;c<4;++c){let d=W1[c];if(ONe.positionToTileXY(d,s,F1),c===0)i=F1.x,o=F1.y;else if(i!==F1.x||o!==F1.y){a=!0;break}}if(a)break;t=i,n=o}if(s!==0)return{x:t,y:n,level:s>r?r:s-1}}Zs._terrainHeightsMaxLevel=6;Zs._defaultMaxTerrainHeight=9e3;Zs._defaultMinTerrainHeight=-1e5;Zs._terrainHeights=void 0;Zs._initPromise=void 0;Object.defineProperties(Zs,{initialized:{get:function(){return l(Zs._terrainHeights)}}});var Gi=Zs;var Cnn=y(x(),1);var rnn=y(x(),1);var Otn=y(x(),1);function $a(e,t,n){this.minimum=m.clone(e??m.ZERO),this.maximum=m.clone(t??m.ZERO),l(n)?n=m.clone(n):n=m.midpoint(this.minimum,this.maximum,new m),this.center=n}$a.fromCorners=function(e,t,n){return l(n)||(n=new $a),n.minimum=m.clone(e,n.minimum),n.maximum=m.clone(t,n.maximum),n.center=m.midpoint(e,t,n.center),n};$a.fromPoints=function(e,t){if(l(t)||(t=new $a),!l(e)||e.length===0)return t.minimum=m.clone(m.ZERO,t.minimum),t.maximum=m.clone(m.ZERO,t.maximum),t.center=m.clone(m.ZERO,t.center),t;let n=e[0].x,i=e[0].y,o=e[0].z,r=e[0].x,s=e[0].y,a=e[0].z,c=e.length;for(let h=1;h<c;h++){let p=e[h],A=p.x,f=p.y,b=p.z;n=Math.min(A,n),r=Math.max(A,r),i=Math.min(f,i),s=Math.max(f,s),o=Math.min(b,o),a=Math.max(b,a)}let d=t.minimum;d.x=n,d.y=i,d.z=o;let u=t.maximum;return u.x=r,u.y=s,u.z=a,t.center=m.midpoint(d,u,t.center),t};$a.clone=function(e,t){if(l(e))return l(t)?(t.minimum=m.clone(e.minimum,t.minimum),t.maximum=m.clone(e.maximum,t.maximum),t.center=m.clone(e.center,t.center),t):new $a(e.minimum,e.maximum,e.center)};$a.equals=function(e,t){return e===t||l(e)&&l(t)&&m.equals(e.center,t.center)&&m.equals(e.minimum,t.minimum)&&m.equals(e.maximum,t.maximum)};var HD=new m;$a.intersectPlane=function(e,t){HD=m.subtract(e.maximum,e.minimum,HD);let n=m.multiplyByScalar(HD,.5,HD),i=t.normal,o=n.x*Math.abs(i.x)+n.y*Math.abs(i.y)+n.z*Math.abs(i.z),r=m.dot(e.center,i)+t.distance;return r-o>0?qt.INSIDE:r+o<0?qt.OUTSIDE:qt.INTERSECTING};$a.intersectAxisAlignedBoundingBox=function(e,t){return e.minimum.x<=t.maximum.x&&e.maximum.x>=t.minimum.x&&e.minimum.y<=t.maximum.y&&e.maximum.y>=t.minimum.y&&e.minimum.z<=t.maximum.z&&e.maximum.z>=t.minimum.z};$a.prototype.clone=function(e){return $a.clone(this,e)};$a.prototype.intersectPlane=function(e){return $a.intersectPlane(this,e)};$a.prototype.intersectAxisAlignedBoundingBox=function(e){return $a.intersectAxisAlignedBoundingBox(this,e)};$a.prototype.equals=function(e){return $a.equals(this,e)};var ou=$a;var zH=new re;function sp(e,t){t=t??ie.default,e=t.scaleToGeodeticSurface(e);let n=bt.eastNorthUpToFixedFrame(e,t);this._ellipsoid=t,this._origin=e,this._xAxis=m.fromCartesian4(F.getColumn(n,0,zH)),this._yAxis=m.fromCartesian4(F.getColumn(n,1,zH));let i=m.fromCartesian4(F.getColumn(n,2,zH));this._plane=dn.fromPointNormal(e,i)}Object.defineProperties(sp.prototype,{ellipsoid:{get:function(){return this._ellipsoid}},origin:{get:function(){return this._origin}},plane:{get:function(){return this._plane}},xAxis:{get:function(){return this._xAxis}},yAxis:{get:function(){return this._yAxis}},zAxis:{get:function(){return this._plane.normal}}});var zNe=new ou;sp.fromPoints=function(e,t){let n=ou.fromPoints(e,zNe);return new sp(n.center,t)};var yae=new Cn,JD=new m;sp.prototype.projectPointOntoPlane=function(e,t){let n=yae;n.origin=e,m.normalize(e,n.direction);let i=hi.rayPlane(n,this._plane,JD);if(l(i)||(m.negate(n.direction,n.direction),i=hi.rayPlane(n,this._plane,JD)),l(i)){let o=m.subtract(i,this._origin,i),r=m.dot(this._xAxis,o),s=m.dot(this._yAxis,o);return l(t)?(t.x=r,t.y=s,t):new M(r,s)}};sp.prototype.projectPointsOntoPlane=function(e,t){l(t)||(t=[]);let n=0,i=e.length;for(let o=0;o<i;o++){let r=this.projectPointOntoPlane(e[o],t[n]);l(r)&&(t[n]=r,n++)}return t.length=n,t};sp.prototype.projectPointToNearestOnPlane=function(e,t){l(t)||(t=new M);let n=yae;n.origin=e,m.clone(this._plane.normal,n.direction);let i=hi.rayPlane(n,this._plane,JD);l(i)||(m.negate(n.direction,n.direction),i=hi.rayPlane(n,this._plane,JD));let o=m.subtract(i,this._origin,i),r=m.dot(this._xAxis,o),s=m.dot(this._yAxis,o);return t.x=r,t.y=s,t};sp.prototype.projectPointsToNearestOnPlane=function(e,t){l(t)||(t=[]);let n=e.length;t.length=n;for(let i=0;i<n;i++)t[i]=this.projectPointToNearestOnPlane(e[i],t[i]);return t};var HNe=new m;sp.prototype.projectPointOntoEllipsoid=function(e,t){l(t)||(t=new m);let n=this._ellipsoid,i=this._origin,o=this._xAxis,r=this._yAxis,s=HNe;return m.multiplyByScalar(o,e.x,s),t=m.add(i,s,t),m.multiplyByScalar(r,e.y,s),m.add(t,s,t),n.scaleToGeocentricSurface(t,t),t};sp.prototype.projectPointsOntoEllipsoid=function(e,t){let n=e.length;l(t)?t.length=n:t=new Array(n);for(let i=0;i<n;++i)t[i]=this.projectPointOntoEllipsoid(e[i],t[i]);return t};var Rs=sp;function oo(e,t){this.center=m.clone(e??m.ZERO),this.halfAxes=$.clone(t??$.ZERO)}oo.packedLength=m.packedLength+$.packedLength;oo.pack=function(e,t,n){return n=n??0,m.pack(e.center,t,n),$.pack(e.halfAxes,t,n+m.packedLength),t};oo.unpack=function(e,t,n){return t=t??0,l(n)||(n=new oo),m.unpack(e,t,n.center),$.unpack(e,t+m.packedLength,n.halfAxes),n};var JNe=new m,KNe=new m,jNe=new m,qNe=new m,$Ne=new m,ePe=new m,tPe=new $,nPe={unitary:new $,diagonal:new $};oo.fromPoints=function(e,t){if(l(t)||(t=new oo),!l(e)||e.length===0)return t.halfAxes=$.ZERO,t.center=m.ZERO,t;let n,i=e.length,o=m.clone(e[0],JNe);for(n=1;n<i;n++)m.add(o,e[n],o);let r=1/i;m.multiplyByScalar(o,r,o);let s=0,a=0,c=0,d=0,u=0,h=0,p;for(n=0;n<i;n++)p=m.subtract(e[n],o,KNe),s+=p.x*p.x,a+=p.x*p.y,c+=p.x*p.z,d+=p.y*p.y,u+=p.y*p.z,h+=p.z*p.z;s*=r,a*=r,c*=r,d*=r,u*=r,h*=r;let A=tPe;A[0]=s,A[1]=a,A[2]=c,A[3]=a,A[4]=d,A[5]=u,A[6]=c,A[7]=u,A[8]=h;let f=$.computeEigenDecomposition(A,nPe),b=$.clone(f.unitary,t.halfAxes),C=$.getColumn(b,0,qNe),T=$.getColumn(b,1,$Ne),E=$.getColumn(b,2,ePe),S=-Number.MAX_VALUE,I=-Number.MAX_VALUE,R=-Number.MAX_VALUE,V=Number.MAX_VALUE,W=Number.MAX_VALUE,B=Number.MAX_VALUE;for(n=0;n<i;n++)p=e[n],S=Math.max(m.dot(C,p),S),I=Math.max(m.dot(T,p),I),R=Math.max(m.dot(E,p),R),V=Math.min(m.dot(C,p),V),W=Math.min(m.dot(T,p),W),B=Math.min(m.dot(E,p),B);C=m.multiplyByScalar(C,.5*(V+S),C),T=m.multiplyByScalar(T,.5*(W+I),T),E=m.multiplyByScalar(E,.5*(B+R),E);let N=m.add(C,T,t.center);m.add(N,E,N);let P=jNe;return P.x=S-V,P.y=I-W,P.z=R-B,m.multiplyByScalar(P,.5,P),$.multiplyByScale(t.halfAxes,P,t.halfAxes),t};var _ae=new m,iPe=new m;function xae(e,t,n,i,o,r,s,a,c,d,u){l(u)||(u=new oo);let h=u.halfAxes;$.setColumn(h,0,t,h),$.setColumn(h,1,n,h),$.setColumn(h,2,i,h);let p=_ae;p.x=(o+r)/2,p.y=(s+a)/2,p.z=(c+d)/2;let A=iPe;A.x=(r-o)/2,A.y=(a-s)/2,A.z=(d-c)/2;let f=u.center;return p=$.multiplyByVector(h,p,p),m.add(e,p,f),$.multiplyByScale(h,A,h),u}var Cae=new Ae,oPe=new m,rPe=new Ae,sPe=new Ae,aPe=new Ae,cPe=new Ae,lPe=new Ae,dPe=new m,Tae=new m,uPe=new m,Eae=new m,mPe=new m,hPe=new M,fPe=new M,pPe=new M,APe=new M,gPe=new M,bPe=new m,yPe=new m,xPe=new m,CPe=new m,TPe=new M,EPe=new m,SPe=new m,_Pe=new m,IPe=new dn(m.UNIT_X,0);oo.fromRectangle=function(e,t,n,i,o){t=t??0,n=n??0,i=i??ie.default;let r,s,a,c,d,u,h;if(e.width<=L.PI){let W=de.center(e,Cae),B=i.cartographicToCartesian(W,oPe),N=new Rs(B,i);h=N.plane;let P=W.longitude,g=e.south<0&&e.north>0?0:W.latitude,_=Ae.fromRadians(P,e.north,n,rPe),Z=Ae.fromRadians(e.west,e.north,n,sPe),G=Ae.fromRadians(e.west,g,n,aPe),w=Ae.fromRadians(e.west,e.south,n,cPe),X=Ae.fromRadians(P,e.south,n,lPe),k=i.cartographicToCartesian(_,dPe),v=i.cartographicToCartesian(Z,Tae),D=i.cartographicToCartesian(G,uPe),Y=i.cartographicToCartesian(w,Eae),O=i.cartographicToCartesian(X,mPe),J=N.projectPointToNearestOnPlane(k,hPe),te=N.projectPointToNearestOnPlane(v,fPe),z=N.projectPointToNearestOnPlane(D,pPe),j=N.projectPointToNearestOnPlane(Y,APe),ee=N.projectPointToNearestOnPlane(O,gPe);return r=Math.min(te.x,z.x,j.x),s=-r,c=Math.max(te.y,J.y),a=Math.min(j.y,ee.y),Z.height=w.height=t,v=i.cartographicToCartesian(Z,Tae),Y=i.cartographicToCartesian(w,Eae),d=Math.min(dn.getPointDistance(h,v),dn.getPointDistance(h,Y)),u=n,xae(N.origin,N.xAxis,N.yAxis,N.zAxis,r,s,a,c,d,u,o)}let p=e.south>0,A=e.north<0,f=p?e.south:A?e.north:0,b=de.center(e,Cae).longitude,C=m.fromRadians(b,f,n,i,bPe);C.z=0;let E=Math.abs(C.x)<L.EPSILON10&&Math.abs(C.y)<L.EPSILON10?m.UNIT_X:m.normalize(C,yPe),S=m.UNIT_Z,I=m.cross(E,S,xPe);h=dn.fromPointNormal(C,E,IPe);let R=m.fromRadians(b+L.PI_OVER_TWO,f,n,i,CPe);s=m.dot(dn.projectPointOntoPlane(h,R,TPe),I),r=-s,c=m.fromRadians(0,e.north,A?t:n,i,EPe).z,a=m.fromRadians(0,e.south,p?t:n,i,SPe).z;let V=m.fromRadians(e.east,f,n,i,_Pe);return d=dn.getPointDistance(h,V),u=0,xae(C,I,S,E,r,s,a,c,d,u,o)};oo.fromTransformation=function(e,t){return l(t)||(t=new oo),t.center=F.getTranslation(e,t.center),t.halfAxes=F.getMatrix3(e,t.halfAxes),t.halfAxes=$.multiplyByScalar(t.halfAxes,.5,t.halfAxes),t};oo.clone=function(e,t){if(l(e))return l(t)?(m.clone(e.center,t.center),$.clone(e.halfAxes,t.halfAxes),t):new oo(e.center,e.halfAxes)};oo.intersectPlane=function(e,t){let n=e.center,i=t.normal,o=e.halfAxes,r=i.x,s=i.y,a=i.z,c=Math.abs(r*o[$.COLUMN0ROW0]+s*o[$.COLUMN0ROW1]+a*o[$.COLUMN0ROW2])+Math.abs(r*o[$.COLUMN1ROW0]+s*o[$.COLUMN1ROW1]+a*o[$.COLUMN1ROW2])+Math.abs(r*o[$.COLUMN2ROW0]+s*o[$.COLUMN2ROW1]+a*o[$.COLUMN2ROW2]),d=m.dot(i,n)+t.distance;return d<=-c?qt.OUTSIDE:d>=c?qt.INSIDE:qt.INTERSECTING};var Iae=new m,Zae=new m,Rae=new m,ZPe=new m,Sae=new m,RPe=new m;oo.distanceSquaredTo=function(e,t){let n=m.subtract(t,e.center,_ae),i=e.halfAxes,o=$.getColumn(i,0,Iae),r=$.getColumn(i,1,Zae),s=$.getColumn(i,2,Rae),a=m.magnitude(o),c=m.magnitude(r),d=m.magnitude(s),u=!0,h=!0,p=!0;a>0?m.divideByScalar(o,a,o):u=!1,c>0?m.divideByScalar(r,c,r):h=!1,d>0?m.divideByScalar(s,d,s):p=!1;let A=!u+!h+!p,f,b,C;if(A===1){let I=o;f=r,b=s,h?p||(I=s,b=o):(I=r,f=o),C=m.cross(f,b,Sae),I===o?o=C:I===r?r=C:I===s&&(s=C)}else if(A===2){f=o,h?f=r:p&&(f=s);let I=m.UNIT_Y;I.equalsEpsilon(f,L.EPSILON3)&&(I=m.UNIT_X),b=m.cross(f,I,ZPe),m.normalize(b,b),C=m.cross(f,b,Sae),m.normalize(C,C),f===o?(r=b,s=C):f===r?(s=b,o=C):f===s&&(o=b,r=C)}else A===3&&(o=m.UNIT_X,r=m.UNIT_Y,s=m.UNIT_Z);let T=RPe;T.x=m.dot(n,o),T.y=m.dot(n,r),T.z=m.dot(n,s);let E=0,S;return T.x<-a?(S=T.x+a,E+=S*S):T.x>a&&(S=T.x-a,E+=S*S),T.y<-c?(S=T.y+c,E+=S*S):T.y>c&&(S=T.y-c,E+=S*S),T.z<-d?(S=T.z+d,E+=S*S):T.z>d&&(S=T.z-d,E+=S*S),E};var VPe=new m,GPe=new m;oo.computePlaneDistances=function(e,t,n,i){l(i)||(i=new Qr);let o=Number.POSITIVE_INFINITY,r=Number.NEGATIVE_INFINITY,s=e.center,a=e.halfAxes,c=$.getColumn(a,0,Iae),d=$.getColumn(a,1,Zae),u=$.getColumn(a,2,Rae),h=m.add(c,d,VPe);m.add(h,u,h),m.add(h,s,h);let p=m.subtract(h,t,GPe),A=m.dot(n,p);return o=Math.min(A,o),r=Math.max(A,r),m.add(s,c,h),m.add(h,d,h),m.subtract(h,u,h),m.subtract(h,t,p),A=m.dot(n,p),o=Math.min(A,o),r=Math.max(A,r),m.add(s,c,h),m.subtract(h,d,h),m.add(h,u,h),m.subtract(h,t,p),A=m.dot(n,p),o=Math.min(A,o),r=Math.max(A,r),m.add(s,c,h),m.subtract(h,d,h),m.subtract(h,u,h),m.subtract(h,t,p),A=m.dot(n,p),o=Math.min(A,o),r=Math.max(A,r),m.subtract(s,c,h),m.add(h,d,h),m.add(h,u,h),m.subtract(h,t,p),A=m.dot(n,p),o=Math.min(A,o),r=Math.max(A,r),m.subtract(s,c,h),m.add(h,d,h),m.subtract(h,u,h),m.subtract(h,t,p),A=m.dot(n,p),o=Math.min(A,o),r=Math.max(A,r),m.subtract(s,c,h),m.subtract(h,d,h),m.add(h,u,h),m.subtract(h,t,p),A=m.dot(n,p),o=Math.min(A,o),r=Math.max(A,r),m.subtract(s,c,h),m.subtract(h,d,h),m.subtract(h,u,h),m.subtract(h,t,p),A=m.dot(n,p),o=Math.min(A,o),r=Math.max(A,r),i.start=o,i.stop=r,i};var LPe=new m,WPe=new m,FPe=new m;oo.computeCorners=function(e,t){l(t)||(t=[new m,new m,new m,new m,new m,new m,new m,new m]);let n=e.center,i=e.halfAxes,o=$.getColumn(i,0,LPe),r=$.getColumn(i,1,WPe),s=$.getColumn(i,2,FPe);return m.clone(n,t[0]),m.subtract(t[0],o,t[0]),m.subtract(t[0],r,t[0]),m.subtract(t[0],s,t[0]),m.clone(n,t[1]),m.subtract(t[1],o,t[1]),m.subtract(t[1],r,t[1]),m.add(t[1],s,t[1]),m.clone(n,t[2]),m.subtract(t[2],o,t[2]),m.add(t[2],r,t[2]),m.subtract(t[2],s,t[2]),m.clone(n,t[3]),m.subtract(t[3],o,t[3]),m.add(t[3],r,t[3]),m.add(t[3],s,t[3]),m.clone(n,t[4]),m.add(t[4],o,t[4]),m.subtract(t[4],r,t[4]),m.subtract(t[4],s,t[4]),m.clone(n,t[5]),m.add(t[5],o,t[5]),m.subtract(t[5],r,t[5]),m.add(t[5],s,t[5]),m.clone(n,t[6]),m.add(t[6],o,t[6]),m.add(t[6],r,t[6]),m.subtract(t[6],s,t[6]),m.clone(n,t[7]),m.add(t[7],o,t[7]),m.add(t[7],r,t[7]),m.add(t[7],s,t[7]),t};var BPe=new $;oo.computeTransformation=function(e,t){l(t)||(t=new F);let n=e.center,i=$.multiplyByUniformScale(e.halfAxes,2,BPe);return F.fromRotationTranslation(i,n,t)};var wPe=new ue;oo.isOccluded=function(e,t){let n=ue.fromOrientedBoundingBox(e,wPe);return!t.isBoundingSphereVisible(n)};oo.prototype.intersectPlane=function(e){return oo.intersectPlane(this,e)};oo.prototype.distanceSquaredTo=function(e){return oo.distanceSquaredTo(this,e)};oo.prototype.computePlaneDistances=function(e,t,n){return oo.computePlaneDistances(this,e,t,n)};oo.prototype.computeCorners=function(e){return oo.computeCorners(this,e)};oo.prototype.computeTransformation=function(e){return oo.computeTransformation(this,e)};oo.prototype.isOccluded=function(e){return oo.isOccluded(this,e)};oo.equals=function(e,t){return e===t||l(e)&&l(t)&&m.equals(e.center,t.center)&&$.equals(e.halfAxes,t.halfAxes)};oo.prototype.clone=function(e){return oo.clone(this,e)};oo.prototype.equals=function(e){return oo.equals(this,e)};var nn=oo;var Inn=y(x(),1);var KD={};KD.getHeight=function(e,t,n){return(e-n)*t+n};var NPe=new Ae;KD.getPosition=function(e,t,n,i,o){let r=t.cartesianToCartographic(e,NPe);if(!l(r))return m.clone(e,o);let s=KD.getHeight(r.height,n,i);return m.fromRadians(r.longitude,r.latitude,s,t,o)};var Eo=KD;var hrn=y(x(),1);var Rnn=y(x(),1),B1=`in vec3 position3DHigh;
in vec3 position3DLow;
in float batchId;
#ifdef EXTRUDED_GEOMETRY
in vec3 extrudeDirection;
uniform float u_globeMinimumAltitude;
#endif // EXTRUDED_GEOMETRY
#ifdef PER_INSTANCE_COLOR
out vec4 v_color;
#endif // PER_INSTANCE_COLOR
#ifdef TEXTURE_COORDINATES
#ifdef SPHERICAL
out vec4 v_sphericalExtents;
#else // SPHERICAL
out vec2 v_inversePlaneExtents;
out vec4 v_westPlane;
out vec4 v_southPlane;
#endif // SPHERICAL
out vec3 v_uvMinAndSphericalLongitudeRotation;
out vec3 v_uMaxAndInverseDistance;
out vec3 v_vMaxAndInverseDistance;
#endif // TEXTURE_COORDINATES
void main()
{
vec4 position = czm_computePosition();
#ifdef EXTRUDED_GEOMETRY
float delta = min(u_globeMinimumAltitude, czm_geometricToleranceOverMeter * length(position.xyz));
delta *= czm_sceneMode == czm_sceneMode3D ? 1.0 : 0.0;
//extrudeDirection is zero for the top layer
position = position + vec4(extrudeDirection * delta, 0.0);
#endif
#ifdef TEXTURE_COORDINATES
#ifdef SPHERICAL
v_sphericalExtents = czm_batchTable_sphericalExtents(batchId);
v_uvMinAndSphericalLongitudeRotation.z = czm_batchTable_longitudeRotation(batchId);
#else // SPHERICAL
#ifdef COLUMBUS_VIEW_2D
vec4 planes2D_high = czm_batchTable_planes2D_HIGH(batchId);
vec4 planes2D_low = czm_batchTable_planes2D_LOW(batchId);
// If the primitive is split across the IDL (planes2D_high.x > planes2D_high.w):
// - If this vertex is on the east side of the IDL (position3DLow.y > 0.0, comparison with position3DHigh may produce artifacts)
// - existing "east" is on the wrong side of the world, far away (planes2D_high/low.w)
// - so set "east" as beyond the eastmost extent of the projection (idlSplitNewPlaneHiLow)
vec2 idlSplitNewPlaneHiLow = vec2(EAST_MOST_X_HIGH - (WEST_MOST_X_HIGH - planes2D_high.w), EAST_MOST_X_LOW - (WEST_MOST_X_LOW - planes2D_low.w));
bool idlSplit = planes2D_high.x > planes2D_high.w && position3DLow.y > 0.0;
planes2D_high.w = czm_branchFreeTernary(idlSplit, idlSplitNewPlaneHiLow.x, planes2D_high.w);
planes2D_low.w = czm_branchFreeTernary(idlSplit, idlSplitNewPlaneHiLow.y, planes2D_low.w);
// - else, if this vertex is on the west side of the IDL (position3DLow.y < 0.0)
// - existing "west" is on the wrong side of the world, far away (planes2D_high/low.x)
// - so set "west" as beyond the westmost extent of the projection (idlSplitNewPlaneHiLow)
idlSplit = planes2D_high.x > planes2D_high.w && position3DLow.y < 0.0;
idlSplitNewPlaneHiLow = vec2(WEST_MOST_X_HIGH - (EAST_MOST_X_HIGH - planes2D_high.x), WEST_MOST_X_LOW - (EAST_MOST_X_LOW - planes2D_low.x));
planes2D_high.x = czm_branchFreeTernary(idlSplit, idlSplitNewPlaneHiLow.x, planes2D_high.x);
planes2D_low.x = czm_branchFreeTernary(idlSplit, idlSplitNewPlaneHiLow.y, planes2D_low.x);
vec3 southWestCorner = (czm_modelViewRelativeToEye * czm_translateRelativeToEye(vec3(0.0, planes2D_high.xy), vec3(0.0, planes2D_low.xy))).xyz;
vec3 northWestCorner = (czm_modelViewRelativeToEye * czm_translateRelativeToEye(vec3(0.0, planes2D_high.x, planes2D_high.z), vec3(0.0, planes2D_low.x, planes2D_low.z))).xyz;
vec3 southEastCorner = (czm_modelViewRelativeToEye * czm_translateRelativeToEye(vec3(0.0, planes2D_high.w, planes2D_high.y), vec3(0.0, planes2D_low.w, planes2D_low.y))).xyz;
#else // COLUMBUS_VIEW_2D
// 3D case has smaller "plane extents," so planes encoded as a 64 bit position and 2 vec3s for distances/direction
vec3 southWestCorner = (czm_modelViewRelativeToEye * czm_translateRelativeToEye(czm_batchTable_southWest_HIGH(batchId), czm_batchTable_southWest_LOW(batchId))).xyz;
vec3 northWestCorner = czm_normal * czm_batchTable_northward(batchId) + southWestCorner;
vec3 southEastCorner = czm_normal * czm_batchTable_eastward(batchId) + southWestCorner;
#endif // COLUMBUS_VIEW_2D
vec3 eastWard = southEastCorner - southWestCorner;
float eastExtent = length(eastWard);
eastWard /= eastExtent;
vec3 northWard = northWestCorner - southWestCorner;
float northExtent = length(northWard);
northWard /= northExtent;
v_westPlane = vec4(eastWard, -dot(eastWard, southWestCorner));
v_southPlane = vec4(northWard, -dot(northWard, southWestCorner));
v_inversePlaneExtents = vec2(1.0 / eastExtent, 1.0 / northExtent);
#endif // SPHERICAL
vec4 uvMinAndExtents = czm_batchTable_uvMinAndExtents(batchId);
vec4 uMaxVmax = czm_batchTable_uMaxVmax(batchId);
v_uMaxAndInverseDistance = vec3(uMaxVmax.xy, uvMinAndExtents.z);
v_vMaxAndInverseDistance = vec3(uMaxVmax.zw, uvMinAndExtents.w);
v_uvMinAndSphericalLongitudeRotation.xy = uvMinAndExtents.xy;
#endif // TEXTURE_COORDINATES
#ifdef PER_INSTANCE_COLOR
v_color = czm_batchTable_color(batchId);
#endif
gl_Position = czm_depthClamp(czm_modelViewProjectionRelativeToEye * position);
}
`;var Gnn=y(x(),1),i0=`#ifdef VECTOR_TILE
uniform vec4 u_highlightColor;
#endif
void main(void)
{
#ifdef VECTOR_TILE
out_FragColor = czm_gammaCorrect(u_highlightColor);
#else
out_FragColor = vec4(1.0);
#endif
czm_writeDepthClamp();
}
`;var Wnn=y(x(),1),Vae={TERRAIN:0,CESIUM_3D_TILE:1,BOTH:2};Vae.NUMBER_OF_CLASSIFICATION_TYPES=3;var ti=Object.freeze(Vae);var wnn=y(x(),1);var PPe={NEVER:ne.NEVER,LESS:ne.LESS,EQUAL:ne.EQUAL,LESS_OR_EQUAL:ne.LEQUAL,GREATER:ne.GREATER,NOT_EQUAL:ne.NOTEQUAL,GREATER_OR_EQUAL:ne.GEQUAL,ALWAYS:ne.ALWAYS},ec=Object.freeze(PPe);var don=y(x(),1);var Pnn=y(x(),1);function XPe(e,t){let n=[],i=e.length,o=0;for(;o<i;){let r=Math.ceil((i-o)/t--);n.push(e.slice(o,o+r)),o+=r}return n}var w1=XPe;var jnn=y(x(),1);function FA(e,t,n){if(this._attributes=t,this._numberOfInstances=n,t.length===0)return;let i=YPe(t),o=e.floatingPointTexture,r=i===Oe.FLOAT&&!o,s=MPe(t,r),a=vPe(s,t,r),c=Math.floor(Bt.maximumTextureSize/a),d=Math.min(n,c),u=a*d,h=Math.ceil(n/d),p=1/u,A=p*.5,f=1/h,b=f*.5;this._textureDimensions=new M(u,h),this._textureStep=new re(p,A,f,b),this._pixelDatatype=r?Oe.UNSIGNED_BYTE:i,this._packFloats=r,this._offsets=s,this._stride=a,this._texture=void 0;let C=4*u*h;this._batchValues=i===Oe.FLOAT&&!r?new Float32Array(C):new Uint8Array(C),this._batchValuesDirty=!1}Object.defineProperties(FA.prototype,{attributes:{get:function(){return this._attributes}},numberOfInstances:{get:function(){return this._numberOfInstances}}});function YPe(e){let t=!1,n=e.length;for(let i=0;i<n;++i)if(e[i].componentDatatype!==H.UNSIGNED_BYTE){t=!0;break}return t?Oe.FLOAT:Oe.UNSIGNED_BYTE}function Lae(e,t){let n=e[t].componentsPerAttribute;return n===2?M:n===3?m:n===4?re:Number}function MPe(e,t){let n=new Array(e.length),i=0,o=e.length;for(let r=0;r<o;++r){let a=e[r].componentDatatype;n[r]=i,a!==H.UNSIGNED_BYTE&&t?i+=4:++i}return n}function vPe(e,t,n){let i=e.length,o=e[i-1];return t[i-1].componentDatatype!==H.UNSIGNED_BYTE&&n?o+4:o+1}var N1=new re;function UPe(e,t,n){let i=re.unpack(e,t,N1),o=re.unpackFloat(i);i=re.unpack(e,t+4,N1);let r=re.unpackFloat(i);i=re.unpack(e,t+8,N1);let s=re.unpackFloat(i);i=re.unpack(e,t+12,N1);let a=re.unpackFloat(i);return re.fromElements(o,r,s,a,n)}function DPe(e,t,n){let i=re.packFloat(e.x,N1);re.pack(i,t,n),i=re.packFloat(e.y,i),re.pack(i,t,n+4),i=re.packFloat(e.z,i),re.pack(i,t,n+8),i=re.packFloat(e.w,i),re.pack(i,t,n+12)}var Gae=new re;FA.prototype.getBatchedAttribute=function(e,t,n){let i=this._attributes,o=this._offsets[t],s=4*this._stride*e+4*o,a;this._packFloats&&i[t].componentDatatype!==Oe.UNSIGNED_BYTE?a=UPe(this._batchValues,s,Gae):a=re.unpack(this._batchValues,s,Gae);let c=Lae(i,t);return l(c.fromCartesian4)?c.fromCartesian4(a,n):l(c.clone)?c.clone(a,n):a.x};var kPe=[void 0,void 0,new M,new m,new re],QPe=new re;FA.prototype.setBatchedAttribute=function(e,t,n){let i=this._attributes,o=kPe[i[t].componentsPerAttribute],r=this.getBatchedAttribute(e,t,o),s=Lae(this._attributes,t);if(l(s.equals)?s.equals(r,n):r===n)return;let c=QPe;c.x=l(n.x)?n.x:n,c.y=l(n.y)?n.y:0,c.z=l(n.z)?n.z:0,c.w=l(n.w)?n.w:0;let d=this._offsets[t],h=4*this._stride*e+4*d;this._packFloats&&i[t].componentDatatype!==Oe.UNSIGNED_BYTE?DPe(c,this._batchValues,h):re.pack(c,this._batchValues,h),this._batchValuesDirty=!0};function OPe(e,t){let n=e._textureDimensions;e._texture=new Lt({context:t,pixelFormat:Ke.RGBA,pixelDatatype:e._pixelDatatype,width:n.x,height:n.y,sampler:Ht.NEAREST,flipY:!1})}function zPe(e){let t=e._textureDimensions;e._texture.copyFrom({source:{width:t.x,height:t.y,arrayBufferView:e._batchValues}})}FA.prototype.update=function(e){l(this._texture)&&!this._batchValuesDirty||this._attributes.length===0||(this._batchValuesDirty=!1,l(this._texture)||OPe(this,e.context),zPe(this))};FA.prototype.getUniformMapCallback=function(){let e=this;return function(t){return e._attributes.length===0?t:Ft(t,{batchTexture:function(){return e._texture},batchTextureDimensions:function(){return e._textureDimensions},batchTextureStep:function(){return e._textureStep}})}};function HPe(e){let t=e._stride;return e._textureDimensions.y===1?`uniform vec4 batchTextureStep;
vec2 computeSt(float batchId)
{
float stepX = batchTextureStep.x;
float centerX = batchTextureStep.y;
float numberOfAttributes = float(${t});
return vec2(centerX + (batchId * numberOfAttributes * stepX), 0.5);
}
`:`uniform vec4 batchTextureStep;
uniform vec2 batchTextureDimensions;
vec2 computeSt(float batchId)
{
float stepX = batchTextureStep.x;
float centerX = batchTextureStep.y;
float stepY = batchTextureStep.z;
float centerY = batchTextureStep.w;
float numberOfAttributes = float(${t});
float xId = mod(batchId * numberOfAttributes, batchTextureDimensions.x);
float yId = floor(batchId * numberOfAttributes / batchTextureDimensions.x);
return vec2(centerX + (xId * stepX), centerY + (yId * stepY));
}
`}function JPe(e){return e===1?"float":`vec${e}`}function KPe(e){return e===1?".x":e===2?".xy":e===3?".xyz":""}function jPe(e,t){let i=e._attributes[t],o=i.componentsPerAttribute,r=i.functionName,s=JPe(o),a=KPe(o),c=e._offsets[t],d=`${s} ${r}(float batchId)
{
vec2 st = computeSt(batchId);
st.x += batchTextureStep.x * float(${c});
`;return e._packFloats&&i.componentDatatype!==Oe.UNSIGNED_BYTE?d+=`vec4 textureValue;
textureValue.x = czm_unpackFloat(texture(batchTexture, st));
textureValue.y = czm_unpackFloat(texture(batchTexture, st + vec2(batchTextureStep.x, 0.0)));
textureValue.z = czm_unpackFloat(texture(batchTexture, st + vec2(batchTextureStep.x * 2.0, 0.0)));
textureValue.w = czm_unpackFloat(texture(batchTexture, st + vec2(batchTextureStep.x * 3.0, 0.0)));
`:d+=` vec4 textureValue = texture(batchTexture, st);
`,d+=` ${s} value = textureValue${a};
`,e._pixelDatatype===Oe.UNSIGNED_BYTE&&i.componentDatatype===H.UNSIGNED_BYTE&&!i.normalize?d+=`value *= 255.0;
`:e._pixelDatatype===Oe.FLOAT&&i.componentDatatype===H.UNSIGNED_BYTE&&i.normalize&&(d+=`value /= 255.0;
`),d+=` return value;
}
`,d}FA.prototype.getVertexShaderCallback=function(){let e=this._attributes;if(e.length===0)return function(i){return i};let t=`uniform highp sampler2D batchTexture;
`;t+=`${HPe(this)}
`;let n=e.length;for(let i=0;i<n;++i)t+=jPe(this,i);return function(i){let o=i.indexOf("void main"),r=i.substring(0,o),s=i.substring(o);return`${r}
${t}
${s}`}};FA.prototype.isDestroyed=function(){return!1};FA.prototype.destroy=function(){return this._texture=this._texture&&this._texture.destroy(),he(this)};var wx=FA;var yin=y(x(),1);var oin=y(x(),1);function Ad(e){this._ellipsoid=e??ie.WGS84,this._semimajorAxis=this._ellipsoid.maximumRadius,this._oneOverSemimajorAxis=1/this._semimajorAxis}Object.defineProperties(Ad.prototype,{ellipsoid:{get:function(){return this._ellipsoid}}});Ad.mercatorAngleToGeodeticLatitude=function(e){return L.PI_OVER_TWO-2*Math.atan(Math.exp(-e))};Ad.geodeticLatitudeToMercatorAngle=function(e){e>Ad.MaximumLatitude?e=Ad.MaximumLatitude:e<-Ad.MaximumLatitude&&(e=-Ad.MaximumLatitude);let t=Math.sin(e);return .5*Math.log((1+t)/(1-t))};Ad.MaximumLatitude=Ad.mercatorAngleToGeodeticLatitude(Math.PI);Ad.prototype.project=function(e,t){let n=this._semimajorAxis,i=e.longitude*n,o=Ad.geodeticLatitudeToMercatorAngle(e.latitude)*n,r=e.height;return l(t)?(t.x=i,t.y=o,t.z=r,t):new m(i,o,r)};Ad.prototype.unproject=function(e,t){let n=this._oneOverSemimajorAxis,i=e.x*n,o=Ad.mercatorAngleToGeodeticLatitude(e.y*n),r=e.z;return l(t)?(t.longitude=i,t.latitude=o,t.height=r,t):new Ae(i,o,r)};var pi=Ad;function qPe(e,t,n){let i=!n,o=e.length,r;if(!i&&o>1){let s=e[0].modelMatrix;for(r=1;r<o;++r)if(!F.equals(s,e[r].modelMatrix)){i=!0;break}}if(i)for(r=0;r<o;++r)l(e[r].geometry)&&zn.transformToWorldCoordinates(e[r]);else F.multiplyTransformation(t,e[0].modelMatrix,t)}function HH(e,t){let n=e.attributes,i=n.position,o=i.values.length/i.componentsPerAttribute;n.batchId=new we({componentDatatype:H.FLOAT,componentsPerAttribute:1,values:new Float32Array(o)});let r=n.batchId.values;for(let s=0;s<o;++s)r[s]=t}function $Pe(e){let t=e.length;for(let n=0;n<t;++n){let i=e[n];l(i.geometry)?HH(i.geometry,n):l(i.westHemisphereGeometry)&&l(i.eastHemisphereGeometry)&&(HH(i.westHemisphereGeometry,n),HH(i.eastHemisphereGeometry,n))}}function eXe(e){let t=e.instances,n=e.projection,i=e.elementIndexUintSupported,o=e.scene3DOnly,r=e.vertexCacheOptimize,s=e.compressVertices,a=e.modelMatrix,c,d,u,h=t.length;for(c=0;c<h;++c)if(l(t[c].geometry)){u=t[c].geometry.primitiveType;break}if(qPe(t,a,o),!o)for(c=0;c<h;++c)l(t[c].geometry)&&zn.splitLongitude(t[c]);if($Pe(t),r)for(c=0;c<h;++c){let A=t[c];l(A.geometry)?(zn.reorderForPostVertexCache(A.geometry),zn.reorderForPreVertexCache(A.geometry)):l(A.westHemisphereGeometry)&&l(A.eastHemisphereGeometry)&&(zn.reorderForPostVertexCache(A.westHemisphereGeometry),zn.reorderForPreVertexCache(A.westHemisphereGeometry),zn.reorderForPostVertexCache(A.eastHemisphereGeometry),zn.reorderForPreVertexCache(A.eastHemisphereGeometry))}let p=zn.combineInstances(t);for(h=p.length,c=0;c<h;++c){d=p[c];let A=d.attributes;if(o)for(let f in A)A.hasOwnProperty(f)&&A[f].componentDatatype===H.DOUBLE&&zn.encodeAttribute(d,f,`${f}3DHigh`,`${f}3DLow`);else for(let f in A)if(A.hasOwnProperty(f)&&A[f].componentDatatype===H.DOUBLE){let b=`${f}3D`,C=`${f}2D`;zn.projectTo2D(d,f,b,C,n),l(d.boundingSphere)&&f==="position"&&(d.boundingSphereCV=ue.fromVertices(d.attributes.position2D.values)),zn.encodeAttribute(d,b,`${b}High`,`${b}Low`),zn.encodeAttribute(d,C,`${C}High`,`${C}Low`)}s&&zn.compressVertices(d)}if(!i){let A=[];for(h=p.length,c=0;c<h;++c)d=p[c],A=A.concat(zn.fitToUnsignedShortIndices(d));p=A}return p}function JH(e,t,n,i){let o,r,s,a=i.length-1;if(a>=0){let d=i[a];o=d.offset+d.count,s=d.index,r=n[s].indices.length}else o=0,s=0,r=n[s].indices.length;let c=e.length;for(let d=0;d<c;++d){let h=e[d][t];if(!l(h))continue;let p=h.indices.length;o+p>r&&(o=0,r=n[++s].indices.length),i.push({index:s,offset:o,count:p}),o+=p}}function tXe(e,t){let n=[];return JH(e,"geometry",t,n),JH(e,"westHemisphereGeometry",t,n),JH(e,"eastHemisphereGeometry",t,n),n}var BA={};BA.combineGeometry=function(e){let t,n,i=e.instances,o=i.length,r,s,a=!1;o>0&&(t=eXe(e),t.length>0&&(n=zn.createAttributeLocations(t[0]),e.createPickOffsets&&(r=tXe(i,t))),l(i[0].attributes)&&l(i[0].attributes.offset)&&(s=new Array(o),a=!0));let c=new Array(o),d=new Array(o);for(let u=0;u<o;++u){let h=i[u],p=h.geometry;l(p)&&(c[u]=p.boundingSphere,d[u]=p.boundingSphereCV,a&&(s[u]=h.geometry.offsetAttribute));let A=h.eastHemisphereGeometry,f=h.westHemisphereGeometry;l(A)&&l(f)&&(l(A.boundingSphere)&&l(f.boundingSphere)&&(c[u]=ue.union(A.boundingSphere,f.boundingSphere)),l(A.boundingSphereCV)&&l(f.boundingSphereCV)&&(d[u]=ue.union(A.boundingSphereCV,f.boundingSphereCV)))}return{geometries:t,modelMatrix:e.modelMatrix,attributeLocations:n,pickOffsets:r,offsetInstanceExtend:s,boundingSpheres:c,boundingSpheresCV:d}};function nXe(e,t){let n=e.attributes;for(let i in n)if(n.hasOwnProperty(i)){let o=n[i];l(o)&&l(o.values)&&t.push(o.values.buffer)}l(e.indices)&&t.push(e.indices.buffer)}function iXe(e,t){let n=e.length;for(let i=0;i<n;++i)nXe(e[i],t)}function oXe(e){let t=1,n=e.length;for(let i=0;i<n;i++){let o=e[i];if(++t,!l(o))continue;let r=o.attributes;t+=7+2*ue.packedLength+(l(o.indices)?o.indices.length:0);for(let s in r)if(r.hasOwnProperty(s)&&l(r[s])){let a=r[s];t+=5+a.values.length}}return t}BA.packCreateGeometryResults=function(e,t){let n=new Float64Array(oXe(e)),i=[],o={},r=e.length,s=0;n[s++]=r;for(let a=0;a<r;a++){let c=e[a],d=l(c);if(n[s++]=d?1:0,!d)continue;n[s++]=c.primitiveType,n[s++]=c.geometryType,n[s++]=c.offsetAttribute??-1;let u=l(c.boundingSphere)?1:0;n[s++]=u,u&&ue.pack(c.boundingSphere,n,s),s+=ue.packedLength;let h=l(c.boundingSphereCV)?1:0;n[s++]=h,h&&ue.pack(c.boundingSphereCV,n,s),s+=ue.packedLength;let p=c.attributes,A=[];for(let b in p)p.hasOwnProperty(b)&&l(p[b])&&(A.push(b),l(o[b])||(o[b]=i.length,i.push(b)));n[s++]=A.length;for(let b=0;b<A.length;b++){let C=A[b],T=p[C];n[s++]=o[C],n[s++]=T.componentDatatype,n[s++]=T.componentsPerAttribute,n[s++]=T.normalize?1:0,n[s++]=T.values.length,n.set(T.values,s),s+=T.values.length}let f=l(c.indices)?c.indices.length:0;n[s++]=f,f>0&&(n.set(c.indices,s),s+=f)}return t.push(n.buffer),{stringTable:i,packedData:n}};BA.unpackCreateGeometryResults=function(e){let t=e.stringTable,n=e.packedData,i,o=new Array(n[0]),r=0,s=1;for(;s<n.length;){if(!(n[s++]===1)){o[r++]=void 0;continue}let c=n[s++],d=n[s++],u=n[s++];u===-1&&(u=void 0);let h,p;n[s++]===1&&(h=ue.unpack(n,s)),s+=ue.packedLength,n[s++]===1&&(p=ue.unpack(n,s)),s+=ue.packedLength;let b,C,T,E=new xn,S=n[s++];for(i=0;i<S;i++){let R=t[n[s++]],V=n[s++];T=n[s++];let W=n[s++]!==0;b=n[s++],C=H.createTypedArray(V,b);for(let B=0;B<b;B++)C[B]=n[s++];E[R]=new we({componentDatatype:V,componentsPerAttribute:T,normalize:W,values:C})}let I;if(b=n[s++],b>0){let R=C.length/T;for(I=Ue.createTypedArray(R,b),i=0;i<b;i++)I[i]=n[s++]}o[r++]=new Ct({primitiveType:c,geometryType:d,boundingSphere:h,boundingSphereCV:p,indices:I,attributes:E,offsetAttribute:u})}return o};function rXe(e,t){let n=e.length,i=new Float64Array(1+n*19),o=0;i[o++]=n;for(let r=0;r<n;r++){let s=e[r];if(F.pack(s.modelMatrix,i,o),o+=F.packedLength,l(s.attributes)&&l(s.attributes.offset)){let a=s.attributes.offset.value;i[o]=a[0],i[o+1]=a[1],i[o+2]=a[2]}o+=3}return t.push(i.buffer),i}function sXe(e){let t=e,n=new Array(t[0]),i=0,o=1;for(;o<t.length;){let r=F.unpack(t,o),s;o+=F.packedLength,l(t[o])&&(s={offset:new Ao(t[o],t[o+1],t[o+2])}),o+=3,n[i++]={modelMatrix:r,attributes:s}}return n}BA.packCombineGeometryParameters=function(e,t){let n=e.createGeometryResults,i=n.length;for(let o=0;o<i;o++)t.push(n[o].packedData.buffer);return{createGeometryResults:e.createGeometryResults,packedInstances:rXe(e.instances,t),ellipsoid:e.ellipsoid,isGeographic:e.projection instanceof ki,elementIndexUintSupported:e.elementIndexUintSupported,scene3DOnly:e.scene3DOnly,vertexCacheOptimize:e.vertexCacheOptimize,compressVertices:e.compressVertices,modelMatrix:e.modelMatrix,createPickOffsets:e.createPickOffsets}};BA.unpackCombineGeometryParameters=function(e){let t=sXe(e.packedInstances),n=e.createGeometryResults,i=n.length,o=0;for(let a=0;a<i;a++){let c=BA.unpackCreateGeometryResults(n[a]),d=c.length;for(let u=0;u<d;u++){let h=c[u],p=t[o];p.geometry=h,++o}}let r=ie.clone(e.ellipsoid),s=e.isGeographic?new ki(r):new pi(r);return{instances:t,ellipsoid:r,projection:s,elementIndexUintSupported:e.elementIndexUintSupported,scene3DOnly:e.scene3DOnly,vertexCacheOptimize:e.vertexCacheOptimize,compressVertices:e.compressVertices,modelMatrix:F.clone(e.modelMatrix),createPickOffsets:e.createPickOffsets}};function Wae(e){let t=e.length,n=1+(ue.packedLength+1)*t,i=new Float32Array(n),o=0;i[o++]=t;for(let r=0;r<t;++r){let s=e[r];l(s)?(i[o++]=1,ue.pack(e[r],i,o)):i[o++]=0,o+=ue.packedLength}return i}function Fae(e){let t=new Array(e[0]),n=0,i=1;for(;i<e.length;)e[i++]===1&&(t[n]=ue.unpack(e,i)),++n,i+=ue.packedLength;return t}BA.packCombineGeometryResults=function(e,t){l(e.geometries)&&iXe(e.geometries,t);let n=Wae(e.boundingSpheres),i=Wae(e.boundingSpheresCV);return t.push(n.buffer,i.buffer),{geometries:e.geometries,attributeLocations:e.attributeLocations,modelMatrix:e.modelMatrix,pickOffsets:e.pickOffsets,offsetInstanceExtend:e.offsetInstanceExtend,boundingSpheres:n,boundingSpheresCV:i}};BA.unpackCombineGeometryResults=function(e){return{geometries:e.geometries,attributeLocations:e.attributeLocations,modelMatrix:e.modelMatrix,pickOffsets:e.pickOffsets,offsetInstanceExtend:e.offsetInstanceExtend,boundingSpheres:Fae(e.boundingSpheres),boundingSpheresCV:Fae(e.boundingSpheresCV)}};var Nx=BA;var Cin=y(x(),1),aXe={READY:0,CREATING:1,CREATED:2,COMBINING:3,COMBINED:4,COMPLETE:5,FAILED:6},Hr=Object.freeze(aXe);var Ein=y(x(),1),ru={DISABLED:0,ENABLED:1,CAST_ONLY:2,RECEIVE_ONLY:3};ru.NUMBER_OF_SHADOW_MODES=4;ru.castShadows=function(e){return e===ru.ENABLED||e===ru.CAST_ONLY};ru.receiveShadows=function(e){return e===ru.ENABLED||e===ru.RECEIVE_ONLY};ru.fromCastReceive=function(e,t){return e&&t?ru.ENABLED:e?ru.CAST_ONLY:t?ru.RECEIVE_ONLY:ru.DISABLED};var Vn=Object.freeze(ru);function Jr(e){e=e??Q.EMPTY_OBJECT,this.geometryInstances=e.geometryInstances,this.appearance=e.appearance,this._appearance=void 0,this._material=void 0,this.depthFailAppearance=e.depthFailAppearance,this._depthFailAppearance=void 0,this._depthFailMaterial=void 0,this.modelMatrix=F.clone(e.modelMatrix??F.IDENTITY),this._modelMatrix=new F,this.show=e.show??!0,this._vertexCacheOptimize=e.vertexCacheOptimize??!1,this._interleave=e.interleave??!1,this._releaseGeometryInstances=e.releaseGeometryInstances??!0,this._allowPicking=e.allowPicking??!0,this._asynchronous=e.asynchronous??!0,this._compressVertices=e.compressVertices??!0,this.cull=e.cull??!0,this.debugShowBoundingVolume=e.debugShowBoundingVolume??!1,this.rtcCenter=e.rtcCenter,this.shadows=e.shadows??Vn.DISABLED,this._translucent=void 0,this._state=Hr.READY,this._geometries=[],this._error=void 0,this._numberOfInstances=0,this._boundingSpheres=[],this._boundingSphereWC=[],this._boundingSphereCV=[],this._boundingSphere2D=[],this._boundingSphereMorph=[],this._perInstanceAttributeCache=new Map,this._instanceIds=[],this._lastPerInstanceAttributeIndex=0,this._va=[],this._attributeLocations=void 0,this._primitiveType=void 0,this._frontFaceRS=void 0,this._backFaceRS=void 0,this._sp=void 0,this._depthFailAppearance=void 0,this._spDepthFail=void 0,this._frontFaceDepthFailRS=void 0,this._backFaceDepthFailRS=void 0,this._pickIds=[],this._colorCommands=[],this._pickCommands=[],this._createBoundingVolumeFunction=e._createBoundingVolumeFunction,this._createRenderStatesFunction=e._createRenderStatesFunction,this._createShaderProgramFunction=e._createShaderProgramFunction,this._createCommandsFunction=e._createCommandsFunction,this._updateAndQueueCommandsFunction=e._updateAndQueueCommandsFunction,this._createPickOffsets=e._createPickOffsets,this._pickOffsets=void 0,this._createGeometryResults=void 0,this._ready=!1,this._batchTable=void 0,this._batchTableAttributeIndices=void 0,this._offsetInstanceExtend=void 0,this._batchTableOffsetAttribute2DIndex=void 0,this._batchTableOffsetsUpdated=!1,this._instanceBoundingSpheres=void 0,this._instanceBoundingSpheresCV=void 0,this._tempBoundingSpheres=void 0,this._recomputeBoundingSpheres=!1,this._batchTableBoundingSpheresUpdated=!1,this._batchTableBoundingSphereAttributeIndices=void 0}Object.defineProperties(Jr.prototype,{vertexCacheOptimize:{get:function(){return this._vertexCacheOptimize}},interleave:{get:function(){return this._interleave}},releaseGeometryInstances:{get:function(){return this._releaseGeometryInstances}},allowPicking:{get:function(){return this._allowPicking}},asynchronous:{get:function(){return this._asynchronous}},compressVertices:{get:function(){return this._compressVertices}},ready:{get:function(){return this._ready}}});function cXe(e){let t=e.length,n=[],i=e[0].attributes,o;for(o in i)if(i.hasOwnProperty(o)&&l(i[o])){let r=i[o],s=!0;for(let a=1;a<t;++a){let c=e[a].attributes[o];if(!l(c)||r.componentDatatype!==c.componentDatatype||r.componentsPerAttribute!==c.componentsPerAttribute||r.normalize!==c.normalize){s=!1;break}}s&&n.push(o)}return n}var lXe=new M,dXe=new m,Uae=new re;function Dae(e){let t=e.length;if(t===1)return e[0];if(t===2)return M.unpack(e,0,lXe);if(t===3)return m.unpack(e,0,dXe);if(t===4)return re.unpack(e,0,Uae)}function uXe(e,t){let n=e.geometryInstances,i=Array.isArray(n)?n:[n],o=i.length;if(o===0)return;let r=cXe(i),s=r.length,a=[],c={},d={},u,p=i[0].attributes,A,f,b;for(A=0;A<s;++A)f=r[A],b=p[f],c[f]=A,a.push({functionName:`czm_batchTable_${f}`,componentDatatype:b.componentDatatype,componentsPerAttribute:b.componentsPerAttribute,normalize:b.normalize});r.indexOf("distanceDisplayCondition")!==-1&&(a.push({functionName:"czm_batchTable_boundingSphereCenter3DHigh",componentDatatype:H.FLOAT,componentsPerAttribute:3},{functionName:"czm_batchTable_boundingSphereCenter3DLow",componentDatatype:H.FLOAT,componentsPerAttribute:3},{functionName:"czm_batchTable_boundingSphereCenter2DHigh",componentDatatype:H.FLOAT,componentsPerAttribute:3},{functionName:"czm_batchTable_boundingSphereCenter2DLow",componentDatatype:H.FLOAT,componentsPerAttribute:3},{functionName:"czm_batchTable_boundingSphereRadius",componentDatatype:H.FLOAT,componentsPerAttribute:1}),d.center3DHigh=a.length-5,d.center3DLow=a.length-4,d.center2DHigh=a.length-3,d.center2DLow=a.length-2,d.radius=a.length-1),r.indexOf("offset")!==-1&&(a.push({functionName:"czm_batchTable_offset2D",componentDatatype:H.FLOAT,componentsPerAttribute:3}),u=a.length-1),a.push({functionName:"czm_batchTable_pickColor",componentDatatype:H.UNSIGNED_BYTE,componentsPerAttribute:4,normalize:!0});let C=a.length,T=new wx(t,a,o);for(A=0;A<o;++A){let E=i[A];p=E.attributes;for(let W=0;W<s;++W){f=r[W],b=p[f];let B=Dae(b.value),N=c[f];T.setBatchedAttribute(A,N,B)}let S={primitive:E.pickPrimitive??e};l(E.id)&&(S.id=E.id);let I=t.createPickId(S);e._pickIds.push(I);let R=I.color,V=Uae;V.x=U.floatToByte(R.red),V.y=U.floatToByte(R.green),V.z=U.floatToByte(R.blue),V.w=U.floatToByte(R.alpha),T.setBatchedAttribute(A,C-1,V)}e._batchTable=T,e._batchTableAttributeIndices=c,e._batchTableBoundingSphereAttributeIndices=d,e._batchTableOffsetAttribute2DIndex=u}function mXe(e){let t;return Array.isArray(e.values)?t=e.values.slice(0):t=new e.values.constructor(e.values),new we({componentDatatype:e.componentDatatype,componentsPerAttribute:e.componentsPerAttribute,normalize:e.normalize,values:t})}function hXe(e){let t=e.attributes,n=new xn;for(let o in t)t.hasOwnProperty(o)&&l(t[o])&&(n[o]=mXe(t[o]));let i;if(l(e.indices)){let o=e.indices;Array.isArray(o)?i=o.slice(0):i=new o.constructor(o)}return new Ct({attributes:n,indices:i,primitiveType:e.primitiveType,boundingSphere:ue.clone(e.boundingSphere)})}function fXe(e,t){return{geometry:t,attributes:e.attributes,modelMatrix:F.clone(e.modelMatrix),pickPrimitive:e.pickPrimitive,id:e.id}}var pXe=/in\s+vec(?:3|4)\s+(.*)3DHigh;/g;Jr._modifyShaderPosition=function(e,t,n){let i,o="",r="",s="";for(;(i=pXe.exec(t))!==null;){let a=i[1],c=`vec4 czm_compute${a[0].toUpperCase()}${a.substr(1)}()`;c!=="vec4 czm_computePosition()"&&(o+=`${c};
`),l(e.rtcCenter)?(t=t.replace(/in\s+vec(?:3|4)\s+position3DHigh;/g,""),t=t.replace(/in\s+vec(?:3|4)\s+position3DLow;/g,""),o+=`uniform mat4 u_modifiedModelView;
`,r+=`in vec4 position;
`,s+=`${c}
{
return u_modifiedModelView * position;
}
`,t=t.replace(/czm_modelViewRelativeToEye\s+\*\s+/g,""),t=t.replace(/czm_modelViewProjectionRelativeToEye/g,"czm_projection")):n?s+=`${c}
{
return czm_translateRelativeToEye(${a}3DHigh, ${a}3DLow);
}
`:(r+=`in vec3 ${a}2DHigh;
in vec3 ${a}2DLow;
`,s+=`${c}
{
vec4 p;
if (czm_morphTime == 1.0)
{
p = czm_translateRelativeToEye(${a}3DHigh, ${a}3DLow);
}
else if (czm_morphTime == 0.0)
{
p = czm_translateRelativeToEye(${a}2DHigh.zxy, ${a}2DLow.zxy);
}
else
{
p = czm_columbusViewMorph(
czm_translateRelativeToEye(${a}2DHigh.zxy, ${a}2DLow.zxy),
czm_translateRelativeToEye(${a}3DHigh, ${a}3DLow),
czm_morphTime);
}
return p;
}
`)}return[o,r,t,s].join(`
`)};Jr._appendShowToShader=function(e,t){return l(e._batchTableAttributeIndices.show)?`${ze.replaceMain(t,"czm_non_show_main")}
void main()
{
czm_non_show_main();
gl_Position *= czm_batchTable_show(batchId);
}`:t};Jr._updateColorAttribute=function(e,t,n){if(!l(e._batchTableAttributeIndices.color)&&!l(e._batchTableAttributeIndices.depthFailColor)||t.search(/in\s+vec4\s+color;/g)===-1)return t;let i=t;return i=i.replace(/in\s+vec4\s+color;/g,""),n?i=i.replace(/(\b)color(\b)/g,"$1czm_batchTable_depthFailColor(batchId)$2"):i=i.replace(/(\b)color(\b)/g,"$1czm_batchTable_color(batchId)$2"),i};function Bae(e){return`${ze.replaceMain(e,"czm_non_pick_main")}
out vec4 v_pickColor;
void main()
{
czm_non_pick_main();
v_pickColor = czm_batchTable_pickColor(batchId);
}`}function wae(e){return`in vec4 v_pickColor;
${e}`}Jr._updatePickColorAttribute=function(e){let t=e.replace(/in\s+vec4\s+pickColor;/g,"");return t=t.replace(/(\b)pickColor(\b)/g,"$1czm_batchTable_pickColor(batchId)$2"),t};Jr._appendOffsetToShader=function(e,t){if(!l(e._batchTableAttributeIndices.offset))return t;let n=`in float batchId;
`;n+="in float applyOffset;";let i=t.replace(/in\s+float\s+batchId;/g,n),o=`vec4 $1 = czm_computePosition();
`;return o+=` if (czm_sceneMode == czm_sceneMode3D)
`,o+=` {
`,o+=" $1 = $1 + vec4(czm_batchTable_offset(batchId) * applyOffset, 0.0);",o+=` }
`,o+=` else
`,o+=` {
`,o+=" $1 = $1 + vec4(czm_batchTable_offset2D(batchId) * applyOffset, 0.0);",o+=` }
`,i=i.replace(/vec4\s+([A-Za-z0-9_]+)\s+=\s+czm_computePosition\(\);/g,o),i};Jr._appendDistanceDisplayConditionToShader=function(e,t,n){if(!l(e._batchTableAttributeIndices.distanceDisplayCondition))return t;let i=ze.replaceMain(t,"czm_non_distanceDisplayCondition_main"),o=`void main()
{
czm_non_distanceDisplayCondition_main();
vec2 distanceDisplayCondition = czm_batchTable_distanceDisplayCondition(batchId);
vec3 boundingSphereCenter3DHigh = czm_batchTable_boundingSphereCenter3DHigh(batchId);
vec3 boundingSphereCenter3DLow = czm_batchTable_boundingSphereCenter3DLow(batchId);
float boundingSphereRadius = czm_batchTable_boundingSphereRadius(batchId);
`;return n?o+=` vec4 centerRTE = czm_translateRelativeToEye(boundingSphereCenter3DHigh, boundingSphereCenter3DLow);
`:o+=` vec3 boundingSphereCenter2DHigh = czm_batchTable_boundingSphereCenter2DHigh(batchId);
vec3 boundingSphereCenter2DLow = czm_batchTable_boundingSphereCenter2DLow(batchId);
vec4 centerRTE;
if (czm_morphTime == 1.0)
{
centerRTE = czm_translateRelativeToEye(boundingSphereCenter3DHigh, boundingSphereCenter3DLow);
}
else if (czm_morphTime == 0.0)
{
centerRTE = czm_translateRelativeToEye(boundingSphereCenter2DHigh.zxy, boundingSphereCenter2DLow.zxy);
}
else
{
centerRTE = czm_columbusViewMorph(
czm_translateRelativeToEye(boundingSphereCenter2DHigh.zxy, boundingSphereCenter2DLow.zxy),
czm_translateRelativeToEye(boundingSphereCenter3DHigh, boundingSphereCenter3DLow),
czm_morphTime);
}
`,o+=` float radiusSq = boundingSphereRadius * boundingSphereRadius;
float distanceSq;
if (czm_sceneMode == czm_sceneMode2D)
{
distanceSq = czm_eyeHeight2D.y - radiusSq;
}
else
{
distanceSq = dot(centerRTE.xyz, centerRTE.xyz) - radiusSq;
}
distanceSq = max(distanceSq, 0.0);
float nearSq = distanceDisplayCondition.x * distanceDisplayCondition.x;
float farSq = distanceDisplayCondition.y * distanceDisplayCondition.y;
float show = (distanceSq >= nearSq && distanceSq <= farSq) ? 1.0 : 0.0;
gl_Position *= show;
}`,`${i}
${o}`};function Nae(e,t){if(!e.compressVertices)return t;let n=t.search(/in\s+vec3\s+normal;/g)!==-1,i=t.search(/in\s+vec2\s+st;/g)!==-1;if(!n&&!i)return t;let o=t.search(/in\s+vec3\s+tangent;/g)!==-1,r=t.search(/in\s+vec3\s+bitangent;/g)!==-1,s=i&&n?2:1;s+=o||r?1:0;let a=s>1?`vec${s}`:"float",c="compressedAttributes",d=`in ${a} ${c};`,u="",h="";if(i){u+=`vec2 st;
`;let f=s>1?`${c}.x`:c;h+=` st = czm_decompressTextureCoordinates(${f});
`}n&&o&&r?(u+=`vec3 normal;
vec3 tangent;
vec3 bitangent;
`,h+=` czm_octDecode(${c}.${i?"yz":"xy"}, normal, tangent, bitangent);
`):(n&&(u+=`vec3 normal;
`,h+=` normal = czm_octDecode(${c}${s>1?`.${i?"y":"x"}`:""});
`),o&&(u+=`vec3 tangent;
`,h+=` tangent = czm_octDecode(${c}.${i&&n?"z":"y"});
`),r&&(u+=`vec3 bitangent;
`,h+=` bitangent = czm_octDecode(${c}.${i&&n?"z":"y"});
`));let p=t;p=p.replace(/in\s+vec3\s+normal;/g,""),p=p.replace(/in\s+vec2\s+st;/g,""),p=p.replace(/in\s+vec3\s+tangent;/g,""),p=p.replace(/in\s+vec3\s+bitangent;/g,""),p=ze.replaceMain(p,"czm_non_compressed_main");let A=`void main()
{
${h} czm_non_compressed_main();
}`;return[d,u,p,A].join(`
`)}function AXe(e){let t=ze.replaceMain(e,"czm_non_depth_clamp_main");return t+=`void main() {
czm_non_depth_clamp_main();
gl_Position = czm_depthClamp(gl_Position);}
`,t}function gXe(e){let t=ze.replaceMain(e,"czm_non_depth_clamp_main");return t+=`void main() {
czm_non_depth_clamp_main();
#if defined(LOG_DEPTH)
czm_writeLogDepth();
#else
czm_writeDepthClamp();
#endif
}
`,t}function Pae(e,t){let n=e.vertexAttributes}function bXe(e,t){return function(){return e[t]}}var KH=Math.max(hn.hardwareConcurrency-1,1),jD,yXe=new $n("combineGeometry");function xXe(e,t){let n,i,o,r,s=e._instanceIds;if(e._state===Hr.READY){n=Array.isArray(e.geometryInstances)?e.geometryInstances:[e.geometryInstances];let a=e._numberOfInstances=n.length,c=[],d=[];for(o=0;o<a;++o)i=n[o].geometry,s.push(n[o].id),d.push({moduleName:i._workerName,modulePath:i._workerPath,geometry:i});if(!l(jD))for(jD=new Array(KH),o=0;o<KH;o++)jD[o]=new $n("createGeometry");let u;for(d=w1(d,KH),o=0;o<d.length;o++){let h=0,p=d[o],A=p.length;for(r=0;r<A;++r)u=p[r],i=u.geometry,l(i.constructor.pack)&&(u.offset=h,h+=i.constructor.packedLength??i.packedLength);let f;if(h>0){let b=new Float64Array(h);for(f=[b.buffer],r=0;r<A;++r)u=p[r],i=u.geometry,l(i.constructor.pack)&&(i.constructor.pack(i,b,u.offset),u.geometry=b)}c.push(jD[o].scheduleTask({subTasks:d[o]},f))}e._state=Hr.CREATING,Promise.all(c).then(function(h){e._createGeometryResults=h,e._state=Hr.CREATED}).catch(function(h){X1(e,t,Hr.FAILED,h)})}else if(e._state===Hr.CREATED){let a=[];n=Array.isArray(e.geometryInstances)?e.geometryInstances:[e.geometryInstances];let c=t.scene3DOnly,d=t.mapProjection,u=yXe.scheduleTask(Nx.packCombineGeometryParameters({createGeometryResults:e._createGeometryResults,instances:n,ellipsoid:d.ellipsoid,projection:d,elementIndexUintSupported:t.context.elementIndexUint,scene3DOnly:c,vertexCacheOptimize:e.vertexCacheOptimize,compressVertices:e.compressVertices,modelMatrix:e.modelMatrix,createPickOffsets:e._createPickOffsets},a),a);e._createGeometryResults=void 0,e._state=Hr.COMBINING,Promise.resolve(u).then(function(h){let p=Nx.unpackCombineGeometryResults(h);e._geometries=p.geometries,e._attributeLocations=p.attributeLocations,e.modelMatrix=F.clone(p.modelMatrix,e.modelMatrix),e._pickOffsets=p.pickOffsets,e._offsetInstanceExtend=p.offsetInstanceExtend,e._instanceBoundingSpheres=p.boundingSpheres,e._instanceBoundingSpheresCV=p.boundingSpheresCV,l(e._geometries)&&e._geometries.length>0?(e._recomputeBoundingSpheres=!0,e._state=Hr.COMBINED):X1(e,t,Hr.FAILED,void 0)}).catch(function(h){X1(e,t,Hr.FAILED,h)})}}function CXe(e,t){let n=Array.isArray(e.geometryInstances)?e.geometryInstances:[e.geometryInstances],i=e._numberOfInstances=n.length,o=new Array(i),r=e._instanceIds,s,a,c=0;for(a=0;a<i;a++){s=n[a];let p=s.geometry,A;l(p.attributes)&&l(p.primitiveType)?A=hXe(p):A=p.constructor.createGeometry(p),o[c++]=fXe(s,A),r.push(s.id)}o.length=c;let d=t.scene3DOnly,u=t.mapProjection,h=Nx.combineGeometry({instances:o,ellipsoid:u.ellipsoid,projection:u,elementIndexUintSupported:t.context.elementIndexUint,scene3DOnly:d,vertexCacheOptimize:e.vertexCacheOptimize,compressVertices:e.compressVertices,modelMatrix:e.modelMatrix,createPickOffsets:e._createPickOffsets});e._geometries=h.geometries,e._attributeLocations=h.attributeLocations,e.modelMatrix=F.clone(h.modelMatrix,e.modelMatrix),e._pickOffsets=h.pickOffsets,e._offsetInstanceExtend=h.offsetInstanceExtend,e._instanceBoundingSpheres=h.boundingSpheres,e._instanceBoundingSpheresCV=h.boundingSpheresCV,l(e._geometries)&&e._geometries.length>0?(e._recomputeBoundingSpheres=!0,e._state=Hr.COMBINED):X1(e,t,Hr.FAILED,void 0)}function TXe(e,t){let n=e._batchTableAttributeIndices.offset;if(!e._recomputeBoundingSpheres||!l(n)){e._recomputeBoundingSpheres=!1;return}let i,o=e._offsetInstanceExtend,r=e._instanceBoundingSpheres,s=r.length,a=e._tempBoundingSpheres;if(!l(a)){for(a=new Array(s),i=0;i<s;i++)a[i]=new ue;e._tempBoundingSpheres=a}for(i=0;i<s;++i){let b=a[i],C=e._batchTable.getBatchedAttribute(i,n,new m);b=r[i].clone(b),zae(b,C,o[i])}let c=[],d=[],u=[];for(i=0;i<s;++i){let b=a[i];b.center.x-b.radius>0||ue.intersectPlane(b,dn.ORIGIN_ZX_PLANE)!==qt.INTERSECTING?c.push(b):(d.push(b),u.push(b))}let h=c[0],p=u[0],A=d[0];for(i=1;i<c.length;i++)h=ue.union(h,c[i]);for(i=1;i<u.length;i++)p=ue.union(p,u[i]);for(i=1;i<d.length;i++)A=ue.union(A,d[i]);let f=[];for(l(h)&&f.push(h),l(p)&&f.push(p),l(A)&&f.push(A),i=0;i<f.length;i++){let b=f[i].clone(e._boundingSpheres[i]);e._boundingSpheres[i]=b,e._boundingSphereCV[i]=ue.projectTo2D(b,t.mapProjection,e._boundingSphereCV[i])}Jr._updateBoundingVolumes(e,t,e.modelMatrix,!0),e._recomputeBoundingSpheres=!1}var Xae=new In,kae=new Ae,Qae=new m,Oae=new ue;function EXe(e,t){if(!l(e._batchTableAttributeIndices.distanceDisplayCondition)||e._batchTableBoundingSpheresUpdated)return;let i=e._batchTableBoundingSphereAttributeIndices,o=i.center3DHigh,r=i.center3DLow,s=i.center2DHigh,a=i.center2DLow,c=i.radius,d=t.mapProjection,u=d.ellipsoid,h=e._batchTable,p=e._instanceBoundingSpheres,A=p.length;for(let f=0;f<A;++f){let b=p[f];if(!l(b))continue;let C=e.modelMatrix;l(C)&&(b=ue.transform(b,C,Oae));let T=b.center,E=b.radius,S=In.fromCartesian(T,Xae);if(h.setBatchedAttribute(f,o,S.high),h.setBatchedAttribute(f,r,S.low),!t.scene3DOnly){let I=u.cartesianToCartographic(T,kae),R=d.project(I,Qae);S=In.fromCartesian(R,Xae),h.setBatchedAttribute(f,s,S.high),h.setBatchedAttribute(f,a,S.low)}h.setBatchedAttribute(f,c,E)}e._batchTableBoundingSpheresUpdated=!0}var jH=new m,SXe=new m;function Yae(e,t){if(!l(e._batchTableAttributeIndices.offset)||e._batchTableOffsetsUpdated||t.scene3DOnly)return;let i=e._batchTableOffsetAttribute2DIndex,o=t.mapProjection,r=o.ellipsoid,s=e._batchTable,a=e._instanceBoundingSpheres,c=a.length;for(let d=0;d<c;++d){let u=a[d];if(!l(u))continue;let h=s.getBatchedAttribute(d,e._batchTableAttributeIndices.offset);if(m.equals(h,m.ZERO)){s.setBatchedAttribute(d,i,m.ZERO);continue}let p=e.modelMatrix;l(p)&&(u=ue.transform(u,p,Oae));let A=u.center;A=r.scaleToGeodeticSurface(A,SXe);let f=r.cartesianToCartographic(A,kae),b=o.project(f,Qae),C=m.add(h,A,jH);f=r.cartesianToCartographic(C,f);let T=o.project(f,jH),E=m.subtract(T,b,jH),S=E.x;E.x=E.z,E.z=E.y,E.y=S,s.setBatchedAttribute(d,i,E)}e._batchTableOffsetsUpdated=!0}function _Xe(e,t){let n=e._attributeLocations,i=e._geometries,o=t.scene3DOnly,r=t.context,s=[],a=i.length;for(let c=0;c<a;++c){let d=i[c];if(s.push(kn.fromGeometry({context:r,geometry:d,attributeLocations:n,bufferUsage:Be.STATIC_DRAW,interleave:e._interleave})),l(e._createBoundingVolumeFunction))e._createBoundingVolumeFunction(t,d);else if(e._boundingSpheres.push(ue.clone(d.boundingSphere)),e._boundingSphereWC.push(new ue),!o){let u=d.boundingSphereCV.center,h=u.x,p=u.y,A=u.z;u.x=A,u.y=h,u.z=p,e._boundingSphereCV.push(ue.clone(d.boundingSphereCV)),e._boundingSphere2D.push(new ue),e._boundingSphereMorph.push(new ue)}}e._va=s,e._primitiveType=i[0].primitiveType,e.releaseGeometryInstances&&(e.geometryInstances=void 0),e._geometries=void 0,X1(e,t,Hr.COMPLETE,void 0)}function IXe(e,t,n,i){let o=n.getRenderState(),r;i?(r=He(o,!1),r.cull={enabled:!0,face:wi.BACK},e._frontFaceRS=Qe.fromCache(r),r.cull.face=wi.FRONT,e._backFaceRS=Qe.fromCache(r)):(e._frontFaceRS=Qe.fromCache(o),e._backFaceRS=e._frontFaceRS),r=He(o,!1),l(e._depthFailAppearance)&&(r.depthTest.enabled=!1),l(e._depthFailAppearance)&&(o=e._depthFailAppearance.getRenderState(),r=He(o,!1),r.depthTest.func=ec.GREATER,i?(r.cull={enabled:!0,face:wi.BACK},e._frontFaceDepthFailRS=Qe.fromCache(r),r.cull.face=wi.FRONT,e._backFaceDepthFailRS=Qe.fromCache(r)):(e._frontFaceDepthFailRS=Qe.fromCache(r),e._backFaceDepthFailRS=e._frontFaceRS))}function ZXe(e,t,n){let i=t.context,o=e._attributeLocations,r=e._batchTable.getVertexShaderCallback()(n.vertexShaderSource);r=Jr._appendOffsetToShader(e,r),r=Jr._appendShowToShader(e,r),r=Jr._appendDistanceDisplayConditionToShader(e,r,t.scene3DOnly),r=Bae(r),r=Jr._updateColorAttribute(e,r,!1),r=Nae(e,r),r=Jr._modifyShaderPosition(e,r,t.scene3DOnly);let s=n.getFragmentShaderSource();s=wae(s),e._sp=tn.replaceCache({context:i,shaderProgram:e._sp,vertexShaderSource:r,fragmentShaderSource:s,attributeLocations:o}),Pae(e._sp,o),l(e._depthFailAppearance)&&(r=e._batchTable.getVertexShaderCallback()(e._depthFailAppearance.vertexShaderSource),r=Jr._appendShowToShader(e,r),r=Jr._appendDistanceDisplayConditionToShader(e,r,t.scene3DOnly),r=Bae(r),r=Jr._updateColorAttribute(e,r,!0),r=Nae(e,r),r=Jr._modifyShaderPosition(e,r,t.scene3DOnly),r=AXe(r),s=e._depthFailAppearance.getFragmentShaderSource(),s=wae(s),s=gXe(s),e._spDepthFail=tn.replaceCache({context:i,shaderProgram:e._spDepthFail,vertexShaderSource:r,fragmentShaderSource:s,attributeLocations:o}),Pae(e._spDepthFail,o))}var P1=new F,Mae=new m;function vae(e,t,n,i){let o=l(n)?n._uniforms:void 0,r={},s=t.uniforms;if(l(s))for(let c in s)s.hasOwnProperty(c)&&(r[c]=bXe(s,c));let a=Ft(r,o);return a=e._batchTable.getUniformMapCallback()(a),l(e.rtcCenter)&&(a.u_modifiedModelView=function(){let c=i.context.uniformState.view;return F.multiply(c,e._modelMatrix,P1),F.multiplyByPoint(P1,e.rtcCenter,Mae),F.setTranslation(P1,Mae,P1),P1}),a}function RXe(e,t,n,i,o,r,s,a){let c=vae(e,t,n,a),d;l(e._depthFailAppearance)&&(d=vae(e,e._depthFailAppearance,e._depthFailAppearance.material,a));let u=i?Ge.TRANSLUCENT:Ge.OPAQUE,h=o?2:1;h*=l(e._depthFailAppearance)?2:1,r.length=e._va.length*h;let p=r.length,A=0;for(let f=0;f<p;++f){let b;o&&(b=r[f],l(b)||(b=r[f]=new ot({owner:e,primitiveType:e._primitiveType})),b.vertexArray=e._va[A],b.renderState=e._backFaceRS,b.shaderProgram=e._sp,b.uniformMap=c,b.pass=u,++f),b=r[f],l(b)||(b=r[f]=new ot({owner:e,primitiveType:e._primitiveType})),b.vertexArray=e._va[A],b.renderState=e._frontFaceRS,b.shaderProgram=e._sp,b.uniformMap=c,b.pass=u,l(e._depthFailAppearance)&&(o&&(++f,b=r[f],l(b)||(b=r[f]=new ot({owner:e,primitiveType:e._primitiveType})),b.vertexArray=e._va[A],b.renderState=e._backFaceDepthFailRS,b.shaderProgram=e._spDepthFail,b.uniformMap=d,b.pass=u),++f,b=r[f],l(b)||(b=r[f]=new ot({owner:e,primitiveType:e._primitiveType})),b.vertexArray=e._va[A],b.renderState=e._frontFaceDepthFailRS,b.shaderProgram=e._spDepthFail,b.uniformMap=d,b.pass=u),++A}}Jr._updateBoundingVolumes=function(e,t,n,i){let o,r,s;if(i||!F.equals(n,e._modelMatrix))for(F.clone(n,e._modelMatrix),r=e._boundingSpheres.length,o=0;o<r;++o)s=e._boundingSpheres[o],l(s)&&(e._boundingSphereWC[o]=ue.transform(s,n,e._boundingSphereWC[o]),t.scene3DOnly||(e._boundingSphere2D[o]=ue.clone(e._boundingSphereCV[o],e._boundingSphere2D[o]),e._boundingSphereMorph[o]=ue.union(e._boundingSphereWC[o],e._boundingSphereCV[o])));let a=e.appearance.pixelSize;if(l(a))for(r=e._boundingSpheres.length,o=0;o<r;++o){s=e._boundingSpheres[o];let c=e._boundingSphereWC[o],u=t.camera.getPixelSize(s,t.context.drawingBufferWidth,t.context.drawingBufferHeight)*a;c.radius=s.radius+u}};function VXe(e,t,n,i,o,r,s,a){Jr._updateBoundingVolumes(e,t,o);let c;t.mode===se.SCENE3D?c=e._boundingSphereWC:t.mode===se.COLUMBUS_VIEW?c=e._boundingSphereCV:t.mode===se.SCENE2D&&l(e._boundingSphere2D)?c=e._boundingSphere2D:l(e._boundingSphereMorph)&&(c=e._boundingSphereMorph);let d=t.commandList,u=t.passes;if(u.render||u.pick){let h=e.allowPicking,p=Vn.castShadows(e.shadows),A=Vn.receiveShadows(e.shadows),f=n.length,b=a?2:1;b*=l(e._depthFailAppearance)?2:1;for(let C=0;C<f;++C){let T=Math.floor(C/b),E=n[C];E.modelMatrix=o,E.boundingVolume=c[T],E.cull=r,E.debugShowBoundingVolume=s,E.castShadows=p,E.receiveShadows=A,h?E.pickId="v_pickColor":E.pickId=void 0,d.push(E)}}}Jr.prototype.update=function(e){if(!l(this.geometryInstances)&&this._va.length===0||l(this.geometryInstances)&&Array.isArray(this.geometryInstances)&&this.geometryInstances.length===0||!l(this.appearance)||e.mode!==se.SCENE3D&&e.scene3DOnly||!e.passes.render&&!e.passes.pick)return;if(l(this._error))throw this._error;if(this._state===Hr.FAILED)return;let t=e.context;if(l(this._batchTable)||uXe(this,t),this._batchTable.attributes.length>0){if(Bt.maximumVertexTextureImageUnits===0)throw new me("Vertex texture fetch support is required to render primitives with per-instance attributes. The maximum number of vertex texture image units must be greater than zero.");this._batchTable.update(e)}if(this._state!==Hr.COMPLETE&&this._state!==Hr.COMBINED&&(this.asynchronous?xXe(this,e):CXe(this,e)),this._state===Hr.COMBINED&&(EXe(this,e),Yae(this,e),_Xe(this,e)),!this.show||this._state!==Hr.COMPLETE)return;this._batchTableOffsetsUpdated||Yae(this,e),this._recomputeBoundingSpheres&&TXe(this,e);let n=this.appearance,i=n.material,o=!1,r=!1;this._appearance!==n?(this._appearance=n,this._material=i,o=!0,r=!0):this._material!==i&&(this._material=i,r=!0);let s=this.depthFailAppearance,a=l(s)?s.material:void 0;this._depthFailAppearance!==s?(this._depthFailAppearance=s,this._depthFailMaterial=a,o=!0,r=!0):this._depthFailMaterial!==a&&(this._depthFailMaterial=a,r=!0);let c=this._appearance.isTranslucent();this._translucent!==c&&(this._translucent=c,o=!0),l(this._material)&&this._material.update(t);let d=n.closed&&c;o&&(this._createRenderStatesFunction??IXe)(this,t,n,d),r&&(this._createShaderProgramFunction??ZXe)(this,e,n),(o||r)&&(this._createCommandsFunction??RXe)(this,n,i,c,d,this._colorCommands,this._pickCommands,e),(this._updateAndQueueCommandsFunction??VXe)(this,e,this._colorCommands,this._pickCommands,this.modelMatrix,this.cull,this.debugShowBoundingVolume,d)};var GXe=new ue,LXe=new ue;function zae(e,t,n){if(n===An.TOP){let i=ue.clone(e,GXe),o=ue.clone(e,LXe);o.center=m.add(o.center,t,o.center),e=ue.union(i,o,e)}else n===An.ALL&&(e.center=m.add(e.center,t,e.center));return e}function WXe(e,t,n){return function(){let i=e.getBatchedAttribute(t,n),o=e.attributes[n],r=o.componentsPerAttribute,s=H.createTypedArray(o.componentDatatype,r);return l(i.constructor.pack)?i.constructor.pack(i,s,0):s[0]=i,s}}function FXe(e,t,n,i,o){return function(r){let s=Dae(r);e.setBatchedAttribute(t,n,s),o==="offset"&&(i._recomputeBoundingSpheres=!0,i._batchTableOffsetsUpdated=!1)}}var BXe=new m;function wXe(e,t,n){t.boundingSphere={get:function(){let i=e._instanceBoundingSpheres[n];if(l(i)){i=i.clone();let o=e.modelMatrix,r=t.offset;l(r)&&zae(i,m.fromArray(r.get(),0,BXe),e._offsetInstanceExtend[n]),l(o)&&(i=ue.transform(i,o))}return i}},t.boundingSphereCV={get:function(){return e._instanceBoundingSpheresCV[n]}}}function NXe(e,t,n){t.pickId={get:function(){return e._pickIds[n]}}}Jr.prototype.getGeometryInstanceAttributes=function(e){let t=this._perInstanceAttributeCache.get(e);if(l(t))return t;let n=-1,i=this._lastPerInstanceAttributeIndex,o=this._instanceIds,r=o.length;for(let d=0;d<r;++d){let u=(i+d)%r;if(e===o[u]){n=u;break}}if(n===-1)return;let s=this._batchTable,a=this._batchTableAttributeIndices;t={};let c={};for(let d in a)if(a.hasOwnProperty(d)){let u=a[d];c[d]={get:WXe(s,n,u),set:FXe(s,n,u,this,d)}}return wXe(this,c,n),NXe(this,c,n),Object.defineProperties(t,c),this._lastPerInstanceAttributeIndex=n,this._perInstanceAttributeCache.set(e,t),t};Jr.prototype.isDestroyed=function(){return!1};Jr.prototype.destroy=function(){let e,t;this._sp=this._sp&&this._sp.destroy(),this._spDepthFail=this._spDepthFail&&this._spDepthFail.destroy();let n=this._va;for(e=n.length,t=0;t<e;++t)n[t].destroy();this._va=void 0;let i=this._pickIds;for(e=i.length,t=0;t<e;++t)i[t].destroy();return this._pickIds=void 0,this._batchTable=this._batchTable&&this._batchTable.destroy(),this._instanceIds=void 0,this._perInstanceAttributeCache=void 0,this._attributeLocations=void 0,he(this)};function X1(e,t,n,i){e._error=i,e._state=n,t.afterRender.push(function(){return e._ready=e._state===Hr.COMPLETE||e._state===Hr.FAILED,!0})}var Nn=Jr;var Lon=y(x(),1);var hon=y(x(),1);function PXe(e){e=e??Q.EMPTY_OBJECT,this.componentDatatype=e.componentDatatype,this.componentsPerAttribute=e.componentsPerAttribute,this.normalize=e.normalize??!1,this.value=e.value}var kc=PXe;var pon=y(x(),1),IS=`#ifdef TEXTURE_COORDINATES
#ifdef SPHERICAL
in vec4 v_sphericalExtents;
#else // SPHERICAL
in vec2 v_inversePlaneExtents;
in vec4 v_westPlane;
in vec4 v_southPlane;
#endif // SPHERICAL
in vec3 v_uvMinAndSphericalLongitudeRotation;
in vec3 v_uMaxAndInverseDistance;
in vec3 v_vMaxAndInverseDistance;
#endif // TEXTURE_COORDINATES
#ifdef PER_INSTANCE_COLOR
in vec4 v_color;
#endif
#ifdef NORMAL_EC
vec3 getEyeCoordinate3FromWindowCoordinate(vec2 fragCoord, float logDepthOrDepth) {
vec4 eyeCoordinate = czm_windowToEyeCoordinates(fragCoord, logDepthOrDepth);
return eyeCoordinate.xyz / eyeCoordinate.w;
}
vec3 vectorFromOffset(vec4 eyeCoordinate, vec2 positiveOffset) {
vec2 glFragCoordXY = gl_FragCoord.xy;
// Sample depths at both offset and negative offset
float upOrRightLogDepth = czm_unpackDepth(texture(czm_globeDepthTexture, (glFragCoordXY + positiveOffset) / czm_viewport.zw));
float downOrLeftLogDepth = czm_unpackDepth(texture(czm_globeDepthTexture, (glFragCoordXY - positiveOffset) / czm_viewport.zw));
// Explicitly evaluate both paths
// Necessary for multifrustum and for edges of the screen
bvec2 upOrRightInBounds = lessThan(glFragCoordXY + positiveOffset, czm_viewport.zw);
float useUpOrRight = float(upOrRightLogDepth > 0.0 && upOrRightInBounds.x && upOrRightInBounds.y);
float useDownOrLeft = float(useUpOrRight == 0.0);
vec3 upOrRightEC = getEyeCoordinate3FromWindowCoordinate(glFragCoordXY + positiveOffset, upOrRightLogDepth);
vec3 downOrLeftEC = getEyeCoordinate3FromWindowCoordinate(glFragCoordXY - positiveOffset, downOrLeftLogDepth);
return (upOrRightEC - (eyeCoordinate.xyz / eyeCoordinate.w)) * useUpOrRight + ((eyeCoordinate.xyz / eyeCoordinate.w) - downOrLeftEC) * useDownOrLeft;
}
#endif // NORMAL_EC
void main(void)
{
#ifdef REQUIRES_EC
float logDepthOrDepth = czm_unpackDepth(texture(czm_globeDepthTexture, gl_FragCoord.xy / czm_viewport.zw));
vec4 eyeCoordinate = czm_windowToEyeCoordinates(gl_FragCoord.xy, logDepthOrDepth);
#endif
#ifdef REQUIRES_WC
vec4 worldCoordinate4 = czm_inverseView * eyeCoordinate;
vec3 worldCoordinate = worldCoordinate4.xyz / worldCoordinate4.w;
#endif
#ifdef TEXTURE_COORDINATES
vec2 uv;
#ifdef SPHERICAL
// Treat world coords as a sphere normal for spherical coordinates
vec2 sphericalLatLong = czm_approximateSphericalCoordinates(worldCoordinate);
sphericalLatLong.y += v_uvMinAndSphericalLongitudeRotation.z;
sphericalLatLong.y = czm_branchFreeTernary(sphericalLatLong.y < czm_pi, sphericalLatLong.y, sphericalLatLong.y - czm_twoPi);
uv.x = (sphericalLatLong.y - v_sphericalExtents.y) * v_sphericalExtents.w;
uv.y = (sphericalLatLong.x - v_sphericalExtents.x) * v_sphericalExtents.z;
#else // SPHERICAL
// Unpack planes and transform to eye space
uv.x = czm_planeDistance(v_westPlane, eyeCoordinate.xyz / eyeCoordinate.w) * v_inversePlaneExtents.x;
uv.y = czm_planeDistance(v_southPlane, eyeCoordinate.xyz / eyeCoordinate.w) * v_inversePlaneExtents.y;
#endif // SPHERICAL
#endif // TEXTURE_COORDINATES
#ifdef CULL_FRAGMENTS
// When classifying translucent geometry, logDepthOrDepth == 0.0
// indicates a region that should not be classified, possibly due to there
// being opaque pixels there in another buffer.
if (uv.x <= 0.0 || 1.0 <= uv.x || uv.y <= 0.0 || 1.0 <= uv.y || logDepthOrDepth == 0.0) {
discard;
}
#endif
#ifdef PICK
out_FragColor.a = 1.0; // Explicitly set the alpha, otherwise this may be discarded by ShaderSource.createPickFragmentShaderSource
#ifdef CULL_FRAGMENTS
czm_writeDepthClamp();
#endif // CULL_FRAGMENTS
#else // PICK
#ifdef NORMAL_EC
// Compute normal by sampling adjacent pixels in 2x2 block in screen space
vec3 downUp = vectorFromOffset(eyeCoordinate, vec2(0.0, 1.0));
vec3 leftRight = vectorFromOffset(eyeCoordinate, vec2(1.0, 0.0));
vec3 normalEC = normalize(cross(leftRight, downUp));
#endif
#ifdef PER_INSTANCE_COLOR
vec4 color = czm_gammaCorrect(v_color);
#ifdef FLAT
out_FragColor = color;
#else // FLAT
czm_materialInput materialInput;
materialInput.normalEC = normalEC;
materialInput.positionToEyeEC = -eyeCoordinate.xyz;
czm_material material = czm_getDefaultMaterial(materialInput);
material.diffuse = color.rgb;
material.alpha = color.a;
out_FragColor = czm_phong(normalize(-eyeCoordinate.xyz), material, czm_lightDirectionEC);
#endif // FLAT
// Premultiply alpha. Required for classification primitives on translucent globe.
out_FragColor.rgb *= out_FragColor.a;
#else // PER_INSTANCE_COLOR
// Material support.
// USES_ is distinct from REQUIRES_, because some things are dependencies of each other or
// dependencies for culling but might not actually be used by the material.
czm_materialInput materialInput;
#ifdef USES_NORMAL_EC
materialInput.normalEC = normalEC;
#endif
#ifdef USES_POSITION_TO_EYE_EC
materialInput.positionToEyeEC = -eyeCoordinate.xyz;
#endif
#ifdef USES_TANGENT_TO_EYE
materialInput.tangentToEyeMatrix = czm_eastNorthUpToEyeCoordinates(worldCoordinate, normalEC);
#endif
#ifdef USES_ST
// Remap texture coordinates from computed (approximately aligned with cartographic space) to the desired
// texture coordinate system, which typically forms a tight oriented bounding box around the geometry.
// Shader is provided a set of reference points for remapping.
materialInput.st.x = czm_lineDistance(v_uvMinAndSphericalLongitudeRotation.xy, v_uMaxAndInverseDistance.xy, uv) * v_uMaxAndInverseDistance.z;
materialInput.st.y = czm_lineDistance(v_uvMinAndSphericalLongitudeRotation.xy, v_vMaxAndInverseDistance.xy, uv) * v_vMaxAndInverseDistance.z;
#endif
czm_material material = czm_getMaterial(materialInput);
#ifdef FLAT
out_FragColor = vec4(material.diffuse + material.emission, material.alpha);
#else // FLAT
out_FragColor = czm_phong(normalize(-eyeCoordinate.xyz), material, czm_lightDirectionEC);
#endif // FLAT
// Premultiply alpha. Required for classification primitives on translucent globe.
out_FragColor.rgb *= out_FragColor.a;
#endif // PER_INSTANCE_COLOR
czm_writeDepthClamp();
#endif // PICK
}
`;function fm(e,t,n){this._projectionExtentDefines={eastMostYhighDefine:"",eastMostYlowDefine:"",westMostYhighDefine:"",westMostYlowDefine:""};let i=new qH;i.requiresTextureCoordinates=e,i.requiresEC=!n.flat;let o=new qH;if(o.requiresTextureCoordinates=e,n instanceof yn)i.requiresNormalEC=!n.flat;else{let r=`${n.material.shaderSource}
${n.fragmentShaderSource}`;i.normalEC=r.indexOf("materialInput.normalEC")!==-1||r.indexOf("czm_getDefaultMaterial")!==-1,i.positionToEyeEC=r.indexOf("materialInput.positionToEyeEC")!==-1,i.tangentToEyeMatrix=r.indexOf("materialInput.tangentToEyeMatrix")!==-1,i.st=r.indexOf("materialInput.st")!==-1}this._colorShaderDependencies=i,this._pickShaderDependencies=o,this._appearance=n,this._extentsCulling=e,this._planarExtents=t}fm.prototype.createFragmentShader=function(e){let t=this._appearance,n=this._colorShaderDependencies,i=[];!e&&!this._planarExtents&&i.push("SPHERICAL"),n.requiresEC&&i.push("REQUIRES_EC"),n.requiresWC&&i.push("REQUIRES_WC"),n.requiresTextureCoordinates&&i.push("TEXTURE_COORDINATES"),this._extentsCulling&&i.push("CULL_FRAGMENTS"),n.requiresNormalEC&&i.push("NORMAL_EC"),t instanceof yn&&i.push("PER_INSTANCE_COLOR"),n.normalEC&&i.push("USES_NORMAL_EC"),n.positionToEyeEC&&i.push("USES_POSITION_TO_EYE_EC"),n.tangentToEyeMatrix&&i.push("USES_TANGENT_TO_EYE"),n.st&&i.push("USES_ST"),t.flat&&i.push("FLAT");let o="";return t instanceof yn||(o=t.material.shaderSource),new ze({defines:i,sources:[o,IS]})};fm.prototype.createPickFragmentShader=function(e){let t=this._pickShaderDependencies,n=["PICK"];return!e&&!this._planarExtents&&n.push("SPHERICAL"),t.requiresEC&&n.push("REQUIRES_EC"),t.requiresWC&&n.push("REQUIRES_WC"),t.requiresTextureCoordinates&&n.push("TEXTURE_COORDINATES"),this._extentsCulling&&n.push("CULL_FRAGMENTS"),new ze({defines:n,sources:[IS],pickColorQualifier:"in"})};fm.prototype.createVertexShader=function(e,t,n,i){return tce(this._colorShaderDependencies,this._planarExtents,n,e,t,this._appearance,i,this._projectionExtentDefines)};fm.prototype.createPickVertexShader=function(e,t,n,i){return tce(this._pickShaderDependencies,this._planarExtents,n,e,t,void 0,i,this._projectionExtentDefines)};var Hae=new m,Jae=new Ae,Kae={high:0,low:0};function tce(e,t,n,i,o,r,s,a){let c=i.slice();if(a.eastMostYhighDefine===""){let d=Jae;d.longitude=L.PI,d.latitude=0,d.height=0;let u=s.project(d,Hae),h=In.encode(u.x,Kae);a.eastMostYhighDefine=`EAST_MOST_X_HIGH ${h.high.toFixed(`${h.high}`.length+1)}`,a.eastMostYlowDefine=`EAST_MOST_X_LOW ${h.low.toFixed(`${h.low}`.length+1)}`;let p=Jae;p.longitude=-L.PI,p.latitude=0,p.height=0;let A=s.project(p,Hae);h=In.encode(A.x,Kae),a.westMostYhighDefine=`WEST_MOST_X_HIGH ${h.high.toFixed(`${h.high}`.length+1)}`,a.westMostYlowDefine=`WEST_MOST_X_LOW ${h.low.toFixed(`${h.low}`.length+1)}`}return n&&(c.push(a.eastMostYhighDefine),c.push(a.eastMostYlowDefine),c.push(a.westMostYhighDefine),c.push(a.westMostYlowDefine)),l(r)&&r instanceof yn&&c.push("PER_INSTANCE_COLOR"),e.requiresTextureCoordinates&&(c.push("TEXTURE_COORDINATES"),t||n||c.push("SPHERICAL"),n&&c.push("COLUMBUS_VIEW_2D")),new ze({defines:c,sources:[o]})}function qH(){this._requiresEC=!1,this._requiresWC=!1,this._requiresNormalEC=!1,this._requiresTextureCoordinates=!1,this._usesNormalEC=!1,this._usesPositionToEyeEC=!1,this._usesTangentToEyeMat=!1,this._usesSt=!1}Object.defineProperties(qH.prototype,{requiresEC:{get:function(){return this._requiresEC},set:function(e){this._requiresEC=e||this._requiresEC}},requiresWC:{get:function(){return this._requiresWC},set:function(e){this._requiresWC=e||this._requiresWC,this.requiresEC=this._requiresWC}},requiresNormalEC:{get:function(){return this._requiresNormalEC},set:function(e){this._requiresNormalEC=e||this._requiresNormalEC,this.requiresEC=this._requiresNormalEC}},requiresTextureCoordinates:{get:function(){return this._requiresTextureCoordinates},set:function(e){this._requiresTextureCoordinates=e||this._requiresTextureCoordinates,this.requiresWC=this._requiresTextureCoordinates}},normalEC:{set:function(e){this.requiresNormalEC=e,this._usesNormalEC=e},get:function(){return this._usesNormalEC}},tangentToEyeMatrix:{set:function(e){this.requiresWC=e,this.requiresNormalEC=e,this._usesTangentToEyeMat=e},get:function(){return this._usesTangentToEyeMat}},positionToEyeEC:{set:function(e){this.requiresEC=e,this._usesPositionToEyeEC=e},get:function(){return this._usesPositionToEyeEC}},st:{set:function(e){this.requiresTextureCoordinates=e,this._usesSt=e},get:function(){return this._usesSt}}});function jae(e,t,n){return Math.abs((t.y-e.y)*n.x-(t.x-e.x)*n.y+t.x*e.y-t.y*e.x)/M.distance(t,e)}var XXe=[new M,new M,new M,new M];function nce(e,t){let n=XXe,i=M.unpack(t,0,n[0]),o=M.unpack(t,2,n[1]),r=M.unpack(t,4,n[2]);e.uMaxVmax=new kc({componentDatatype:H.FLOAT,componentsPerAttribute:4,normalize:!1,value:[o.x,o.y,r.x,r.y]});let s=1/jae(i,o,r),a=1/jae(i,r,o);e.uvMinAndExtents=new kc({componentDatatype:H.FLOAT,componentsPerAttribute:4,normalize:!1,value:[i.x,i.y,s,a]})}var ice=new Ae,oce=new m,YXe=new m,MXe=new m,qD={high:0,low:0};function rce(e,t,n){let i=ice;i.height=0,i.longitude=e.west,i.latitude=e.south;let o=t.project(i,oce);i.latitude=e.north;let r=t.project(i,YXe);i.longitude=e.east,i.latitude=e.south;let s=t.project(i,MXe),a=[0,0,0,0],c=[0,0,0,0],d=In.encode(o.x,qD);a[0]=d.high,c[0]=d.low,d=In.encode(o.y,qD),a[1]=d.high,c[1]=d.low,d=In.encode(r.y,qD),a[2]=d.high,c[2]=d.low,d=In.encode(s.x,qD),a[3]=d.high,c[3]=d.low,n.planes2D_HIGH=new kc({componentDatatype:H.FLOAT,componentsPerAttribute:4,normalize:!1,value:a}),n.planes2D_LOW=new kc({componentDatatype:H.FLOAT,componentsPerAttribute:4,normalize:!1,value:c})}var vXe=new F,UXe=new F,qae=new m,DXe=new Ae,kXe=[new Ae,new Ae,new Ae,new Ae,new Ae,new Ae,new Ae,new Ae];function QXe(e,t,n,i,o,r){let s=de.center(e,DXe);s.height=n;let a=Ae.toCartesian(s,t,qae),c=bt.eastNorthUpToFixedFrame(a,t,vXe),d=F.inverse(c,UXe),u=e.west,h=e.east,p=e.north,A=e.south,f=kXe;f[0].latitude=A,f[0].longitude=u,f[1].latitude=p,f[1].longitude=u,f[2].latitude=p,f[2].longitude=h,f[3].latitude=A,f[3].longitude=h;let b=(u+h)*.5,C=(p+A)*.5;f[4].latitude=A,f[4].longitude=b,f[5].latitude=p,f[5].longitude=b,f[6].latitude=C,f[6].longitude=u,f[7].latitude=C,f[7].longitude=h;let T=Number.POSITIVE_INFINITY,E=Number.NEGATIVE_INFINITY,S=Number.POSITIVE_INFINITY,I=Number.NEGATIVE_INFINITY;for(let B=0;B<8;B++){f[B].height=n;let N=Ae.toCartesian(f[B],t,qae);F.multiplyByPoint(d,N,N),N.z=0,T=Math.min(T,N.x),E=Math.max(E,N.x),S=Math.min(S,N.y),I=Math.max(I,N.y)}let R=i;R.x=T,R.y=S,R.z=0,F.multiplyByPoint(c,R,R);let V=o;V.x=E,V.y=S,V.z=0,F.multiplyByPoint(c,V,V),m.subtract(V,R,o);let W=r;W.x=T,W.y=I,W.z=0,F.multiplyByPoint(c,W,W),m.subtract(W,R,r)}var OXe=new m,zXe=new m,HXe=new In;fm.getPlanarTextureCoordinateAttributes=function(e,t,n,i,o){let r=oce,s=OXe,a=zXe;QXe(e,n,o??0,r,s,a);let c={};nce(c,t);let d=In.fromCartesian(r,HXe);return c.southWest_HIGH=new kc({componentDatatype:H.FLOAT,componentsPerAttribute:3,normalize:!1,value:m.pack(d.high,[0,0,0])}),c.southWest_LOW=new kc({componentDatatype:H.FLOAT,componentsPerAttribute:3,normalize:!1,value:m.pack(d.low,[0,0,0])}),c.eastward=new kc({componentDatatype:H.FLOAT,componentsPerAttribute:3,normalize:!1,value:m.pack(s,[0,0,0])}),c.northward=new kc({componentDatatype:H.FLOAT,componentsPerAttribute:3,normalize:!1,value:m.pack(a,[0,0,0])}),rce(e,i,c),c};var JXe=new m;function $ae(e,t,n,i){let o=ice;o.latitude=e,o.longitude=t,o.height=0;let r=Ae.toCartesian(o,n,JXe),s=Math.sqrt(r.x*r.x+r.y*r.y),a=L.fastApproximateAtan2(s,r.z),c=L.fastApproximateAtan2(r.x,r.y);return i.x=a,i.y=c,i}var ece=new M;fm.getSphericalExtentGeometryInstanceAttributes=function(e,t,n,i){let o=$ae(e.south,e.west,n,ece),r=o.x,s=o.y,a=$ae(e.north,e.east,n,ece),c=a.x,d=a.y,u=0;s>d&&(u=L.PI-s,s=-L.PI,d+=u),r-=L.EPSILON5,s-=L.EPSILON5,c+=L.EPSILON5,d+=L.EPSILON5;let h=1/(d-s),p=1/(c-r),A={sphericalExtents:new kc({componentDatatype:H.FLOAT,componentsPerAttribute:4,normalize:!1,value:[r,s,p,h]}),longitudeRotation:new kc({componentDatatype:H.FLOAT,componentsPerAttribute:1,normalize:!1,value:[u]})};return nce(A,t),rce(e,i,A),A};fm.hasAttributesForTextureCoordinatePlanes=function(e){return l(e.southWest_HIGH)&&l(e.southWest_LOW)&&l(e.northward)&&l(e.eastward)&&l(e.planes2D_HIGH)&&l(e.planes2D_LOW)&&l(e.uMaxVmax)&&l(e.uvMinAndExtents)};fm.hasAttributesForSphericalExtents=function(e){return l(e.sphericalExtents)&&l(e.longitudeRotation)&&l(e.planes2D_HIGH)&&l(e.planes2D_LOW)&&l(e.uMaxVmax)&&l(e.uvMinAndExtents)};function KXe(e){return Math.max(e.width,e.height)>fm.MAX_WIDTH_FOR_PLANAR_EXTENTS}fm.shouldUseSphericalCoordinates=function(e){return KXe(e)};fm.MAX_WIDTH_FOR_PLANAR_EXTENTS=L.toRadians(1);var su=fm;var von=y(x(),1);var Bon=y(x(),1);var jXe={NEVER:ne.NEVER,LESS:ne.LESS,EQUAL:ne.EQUAL,LESS_OR_EQUAL:ne.LEQUAL,GREATER:ne.GREATER,NOT_EQUAL:ne.NOTEQUAL,GREATER_OR_EQUAL:ne.GEQUAL,ALWAYS:ne.ALWAYS},ni=Object.freeze(jXe);var Pon=y(x(),1);var qXe={ZERO:ne.ZERO,KEEP:ne.KEEP,REPLACE:ne.REPLACE,INCREMENT:ne.INCR,DECREMENT:ne.DECR,INVERT:ne.INVERT,INCREMENT_WRAP:ne.INCR_WRAP,DECREMENT_WRAP:ne.DECR_WRAP},Vt=Object.freeze(qXe);var $D={CESIUM_3D_TILE_MASK:128,SKIP_LOD_MASK:112,SKIP_LOD_BIT_SHIFT:4,CLASSIFICATION_MASK:15};$D.setCesium3DTileBit=function(){return{enabled:!0,frontFunction:ni.ALWAYS,frontOperation:{fail:Vt.KEEP,zFail:Vt.KEEP,zPass:Vt.REPLACE},backFunction:ni.ALWAYS,backOperation:{fail:Vt.KEEP,zFail:Vt.KEEP,zPass:Vt.REPLACE},reference:$D.CESIUM_3D_TILE_MASK,mask:$D.CESIUM_3D_TILE_MASK}};var Jt=Object.freeze($D);function Px(e){e=e??Q.EMPTY_OBJECT;let t=e.geometryInstances;this.geometryInstances=t,this.show=e.show??!0,this.classificationType=e.classificationType??ti.BOTH,this.debugShowBoundingVolume=e.debugShowBoundingVolume??!1,this.debugShowShadowVolume=e.debugShowShadowVolume??!1,this._debugShowShadowVolume=!1,this._extruded=e._extruded??!1,this._uniformMap=e._uniformMap,this._sp=void 0,this._spStencil=void 0,this._spPick=void 0,this._spColor=void 0,this._spPick2D=void 0,this._spColor2D=void 0,this._rsStencilDepthPass=void 0,this._rsStencilDepthPass3DTiles=void 0,this._rsColorPass=void 0,this._rsPickPass=void 0,this._commandsIgnoreShow=[],this._ready=!1,this._primitive=void 0,this._pickPrimitive=e._pickPrimitive,this._hasSphericalExtentsAttribute=!1,this._hasPlanarExtentsAttributes=!1,this._hasPerColorAttribute=!1,this.appearance=e.appearance,this._createBoundingVolumeFunction=e._createBoundingVolumeFunction,this._updateAndQueueCommandsFunction=e._updateAndQueueCommandsFunction,this._usePickOffsets=!1,this._primitiveOptions={geometryInstances:void 0,appearance:void 0,vertexCacheOptimize:e.vertexCacheOptimize??!1,interleave:e.interleave??!1,releaseGeometryInstances:e.releaseGeometryInstances??!0,allowPicking:e.allowPicking??!0,asynchronous:e.asynchronous??!0,compressVertices:e.compressVertices??!0,_createBoundingVolumeFunction:void 0,_createRenderStatesFunction:void 0,_createShaderProgramFunction:void 0,_createCommandsFunction:void 0,_updateAndQueueCommandsFunction:void 0,_createPickOffsets:!0}}Object.defineProperties(Px.prototype,{vertexCacheOptimize:{get:function(){return this._primitiveOptions.vertexCacheOptimize}},interleave:{get:function(){return this._primitiveOptions.interleave}},releaseGeometryInstances:{get:function(){return this._primitiveOptions.releaseGeometryInstances}},allowPicking:{get:function(){return this._primitiveOptions.allowPicking}},asynchronous:{get:function(){return this._primitiveOptions.asynchronous}},compressVertices:{get:function(){return this._primitiveOptions.compressVertices}},ready:{get:function(){return this._ready}},_needs2DShader:{get:function(){return this._hasPlanarExtentsAttributes||this._hasSphericalExtentsAttribute}}});Px.isSupported=function(e){return e.context.stencilBuffer};function ZS(e,t){let n=t?ni.EQUAL:ni.ALWAYS;return{colorMask:{red:!1,green:!1,blue:!1,alpha:!1},stencilTest:{enabled:e,frontFunction:n,frontOperation:{fail:Vt.KEEP,zFail:Vt.DECREMENT_WRAP,zPass:Vt.KEEP},backFunction:n,backOperation:{fail:Vt.KEEP,zFail:Vt.INCREMENT_WRAP,zPass:Vt.KEEP},reference:Jt.CESIUM_3D_TILE_MASK,mask:Jt.CESIUM_3D_TILE_MASK},stencilMask:Jt.CLASSIFICATION_MASK,depthTest:{enabled:!0,func:ec.LESS_OR_EQUAL},depthMask:!1}}function eJ(e){return{stencilTest:{enabled:e,frontFunction:ni.NOT_EQUAL,frontOperation:{fail:Vt.ZERO,zFail:Vt.ZERO,zPass:Vt.ZERO},backFunction:ni.NOT_EQUAL,backOperation:{fail:Vt.ZERO,zFail:Vt.ZERO,zPass:Vt.ZERO},reference:0,mask:Jt.CLASSIFICATION_MASK},stencilMask:Jt.CLASSIFICATION_MASK,depthTest:{enabled:!1},depthMask:!1,blending:ln.PRE_MULTIPLIED_ALPHA_BLEND}}var $Xe={stencilTest:{enabled:!0,frontFunction:ni.NOT_EQUAL,frontOperation:{fail:Vt.ZERO,zFail:Vt.ZERO,zPass:Vt.ZERO},backFunction:ni.NOT_EQUAL,backOperation:{fail:Vt.ZERO,zFail:Vt.ZERO,zPass:Vt.ZERO},reference:0,mask:Jt.CLASSIFICATION_MASK},stencilMask:Jt.CLASSIFICATION_MASK,depthTest:{enabled:!1},depthMask:!1};function eYe(e,t,n,i){if(l(e._rsStencilDepthPass))return;let o=!e.debugShowShadowVolume;e._rsStencilDepthPass=Qe.fromCache(ZS(o,!1)),e._rsStencilDepthPass3DTiles=Qe.fromCache(ZS(o,!0)),e._rsColorPass=Qe.fromCache(eJ(o,!1)),e._rsPickPass=Qe.fromCache($Xe)}function tYe(e,t){if(!e.compressVertices)return t;if(t.search(/in\s+vec3\s+extrudeDirection;/g)!==-1){let n="compressedAttributes",i=`in vec2 ${n};`,o=`vec3 extrudeDirection;
`,r=` extrudeDirection = czm_octDecode(${n}, 65535.0);
`,s=t;s=s.replace(/in\s+vec3\s+extrudeDirection;/g,""),s=ze.replaceMain(s,"czm_non_compressed_main");let a=`void main()
{
${r} czm_non_compressed_main();
}`;return[i,o,s,a].join(`
`)}}function nYe(e,t){let n=t.context,i=e._primitive,o=B1;o=e._primitive._batchTable.getVertexShaderCallback()(o),o=Nn._appendDistanceDisplayConditionToShader(i,o),o=Nn._modifyShaderPosition(e,o,t.scene3DOnly),o=Nn._updateColorAttribute(i,o);let r=e._hasPlanarExtentsAttributes,s=r||e._hasSphericalExtentsAttribute;e._extruded&&(o=tYe(i,o));let a=e._extruded?"EXTRUDED_GEOMETRY":"",c=new ze({defines:[a],sources:[o]}),d=new ze({sources:[i0]}),u=e._primitive._attributeLocations,h=new su(s,r,e.appearance);if(e._spStencil=tn.replaceCache({context:n,shaderProgram:e._spStencil,vertexShaderSource:c,fragmentShaderSource:d,attributeLocations:u}),e._primitive.allowPicking){let f=ze.createPickVertexShaderSource(o);f=Nn._appendShowToShader(i,f),f=Nn._updatePickColorAttribute(f);let b=h.createPickFragmentShader(!1),C=h.createPickVertexShader([a],f,!1,t.mapProjection);if(e._spPick=tn.replaceCache({context:n,shaderProgram:e._spPick,vertexShaderSource:C,fragmentShaderSource:b,attributeLocations:u}),s){let T=n.shaderCache.getDerivedShaderProgram(e._spPick,"2dPick");if(!l(T)){let E=h.createPickFragmentShader(!0),S=h.createPickVertexShader([a],f,!0,t.mapProjection);T=n.shaderCache.createDerivedShaderProgram(e._spPick,"2dPick",{vertexShaderSource:S,fragmentShaderSource:E,attributeLocations:u})}e._spPick2D=T}}else e._spPick=tn.fromCache({context:n,vertexShaderSource:c,fragmentShaderSource:d,attributeLocations:u});o=Nn._appendShowToShader(i,o),c=new ze({defines:[a],sources:[o]}),e._sp=tn.replaceCache({context:n,shaderProgram:e._sp,vertexShaderSource:c,fragmentShaderSource:d,attributeLocations:u});let p=h.createFragmentShader(!1),A=h.createVertexShader([a],o,!1,t.mapProjection);if(e._spColor=tn.replaceCache({context:n,shaderProgram:e._spColor,vertexShaderSource:A,fragmentShaderSource:p,attributeLocations:u}),s){let f=n.shaderCache.getDerivedShaderProgram(e._spColor,"2dColor");if(!l(f)){let b=h.createFragmentShader(!0),C=h.createVertexShader([a],o,!0,t.mapProjection);f=n.shaderCache.createDerivedShaderProgram(e._spColor,"2dColor",{vertexShaderSource:C,fragmentShaderSource:b,attributeLocations:u})}e._spColor2D=f}}function iYe(e,t){let n=e._primitive,i=n._va.length*2;t.length=i;let o,r,s,a=0,c=n._batchTable.getUniformMapCallback()(e._uniformMap),d=e._needs2DShader;for(o=0;o<i;o+=2){let A=n._va[a++];r=t[o],l(r)||(r=t[o]=new ot({owner:e,primitiveType:n._primitiveType})),r.vertexArray=A,r.renderState=e._rsStencilDepthPass,r.shaderProgram=e._sp,r.uniformMap=c,r.pass=Ge.TERRAIN_CLASSIFICATION,s=ot.shallowClone(r,r.derivedCommands.tileset),s.renderState=e._rsStencilDepthPass3DTiles,s.pass=Ge.CESIUM_3D_TILE_CLASSIFICATION,r.derivedCommands.tileset=s,r=t[o+1],l(r)||(r=t[o+1]=new ot({owner:e,primitiveType:n._primitiveType})),r.vertexArray=A,r.renderState=e._rsColorPass,r.shaderProgram=e._spColor,r.pass=Ge.TERRAIN_CLASSIFICATION;let b=e.appearance.material;if(l(b)&&(c=Ft(c,b._uniforms)),r.uniformMap=c,s=ot.shallowClone(r,r.derivedCommands.tileset),s.pass=Ge.CESIUM_3D_TILE_CLASSIFICATION,r.derivedCommands.tileset=s,d){let C=ot.shallowClone(r,r.derivedCommands.appearance2D);C.shaderProgram=e._spColor2D,r.derivedCommands.appearance2D=C,C=ot.shallowClone(s,s.derivedCommands.appearance2D),C.shaderProgram=e._spColor2D,s.derivedCommands.appearance2D=C}}let u=e._commandsIgnoreShow,h=e._spStencil,p=0;i=u.length=i/2;for(let A=0;A<i;++A){let f=u[A]=ot.shallowClone(t[p],u[A]);f.shaderProgram=h,f.pass=Ge.CESIUM_3D_TILE_CLASSIFICATION_IGNORE_SHOW,p+=2}}function oYe(e,t){let n=e._usePickOffsets,i=e._primitive,o=i._va.length*2,r,s=0,a;n&&(r=i._pickOffsets,o=r.length*2),t.length=o;let c,d,u,h=0,p=i._batchTable.getUniformMapCallback()(e._uniformMap),A=e._needs2DShader;for(c=0;c<o;c+=2){let f=i._va[h++];if(n&&(a=r[s++],f=i._va[a.index]),d=t[c],l(d)||(d=t[c]=new ot({owner:e,primitiveType:i._primitiveType,pickOnly:!0})),d.vertexArray=f,d.renderState=e._rsStencilDepthPass,d.shaderProgram=e._sp,d.uniformMap=p,d.pass=Ge.TERRAIN_CLASSIFICATION,n&&(d.offset=a.offset,d.count=a.count),u=ot.shallowClone(d,d.derivedCommands.tileset),u.renderState=e._rsStencilDepthPass3DTiles,u.pass=Ge.CESIUM_3D_TILE_CLASSIFICATION,d.derivedCommands.tileset=u,d=t[c+1],l(d)||(d=t[c+1]=new ot({owner:e,primitiveType:i._primitiveType,pickOnly:!0})),d.vertexArray=f,d.renderState=e._rsPickPass,d.shaderProgram=e._spPick,d.uniformMap=p,d.pass=Ge.TERRAIN_CLASSIFICATION,n&&(d.offset=a.offset,d.count=a.count),u=ot.shallowClone(d,d.derivedCommands.tileset),u.pass=Ge.CESIUM_3D_TILE_CLASSIFICATION,d.derivedCommands.tileset=u,A){let b=ot.shallowClone(d,d.derivedCommands.pick2D);b.shaderProgram=e._spPick2D,d.derivedCommands.pick2D=b,b=ot.shallowClone(u,u.derivedCommands.pick2D),b.shaderProgram=e._spPick2D,u.derivedCommands.pick2D=b}}}function rYe(e,t,n,i,o,r,s){iYe(e,r),oYe(e,s)}function sce(e,t){return Math.floor(e%t/2)}function $H(e,t,n,i,o,r){e.modelMatrix=n,e.boundingVolume=o,e.cull=i,e.debugShowBoundingVolume=r,t.commandList.push(e)}function ace(e,t,n,i,o){e.modelMatrix=n,e.boundingVolume=o,e.cull=i,t.commandList.push(e)}function sYe(e,t,n,i,o,r,s,a){let c=e._primitive;Nn._updateBoundingVolumes(c,t,o);let d;t.mode===se.SCENE3D?d=c._boundingSphereWC:t.mode===se.COLUMBUS_VIEW?d=c._boundingSphereCV:t.mode===se.SCENE2D&&l(c._boundingSphere2D)?d=c._boundingSphere2D:l(c._boundingSphereMorph)&&(d=c._boundingSphereMorph);let u=e.classificationType,h=u!==ti.CESIUM_3D_TILE,p=u!==ti.TERRAIN,A=t.passes,f,b,C;if(A.render){let T=n.length;for(f=0;f<T;++f)b=d[sce(f,T)],h&&(C=n[f],$H(C,t,o,r,b,s)),p&&(C=n[f].derivedCommands.tileset,$H(C,t,o,r,b,s));if(t.invertClassification){let E=e._commandsIgnoreShow,S=E.length;for(f=0;f<S;++f)b=d[f],C=E[f],$H(C,t,o,r,b,s)}}if(A.pick){let T=i.length,E=c._pickOffsets;for(f=0;f<T;++f){let S=E[sce(f,T)];b=d[S.index],h&&(C=i[f],ace(C,t,o,r,b)),p&&(C=i[f].derivedCommands.tileset,ace(C,t,o,r,b))}}}Px.prototype.update=function(e){if(!l(this._primitive)&&!l(this.geometryInstances))return;let t=this.appearance;l(t)&&l(t.material)&&t.material.update(e.context);let n=this,i=this._primitiveOptions;if(!l(this._primitive)){let o=Array.isArray(this.geometryInstances)?this.geometryInstances:[this.geometryInstances],r=o.length,s,a,c,d=!1,u=!0,h,p=!1,A=!1;for(r>0&&(c=o[0].attributes,p=su.hasAttributesForSphericalExtents(c),A=su.hasAttributesForTextureCoordinatePlanes(c),h=c.color),s=0;s<r;s++){a=o[s];let b=a.attributes.color;l(b)&&(d=!0),u=u&&l(b)&&$t.equals(h,b)}if(!u&&!p&&!A)throw new fe("All GeometryInstances must have the same color attribute except via GroundPrimitives");d&&!l(t)&&(t=new yn({flat:!0}),this.appearance=t),this._usePickOffsets=!p&&!A,this._hasSphericalExtentsAttribute=p,this._hasPlanarExtentsAttributes=A,this._hasPerColorAttribute=d;let f=new Array(r);for(s=0;s<r;++s)a=o[s],f[s]=new wt({geometry:a.geometry,attributes:a.attributes,modelMatrix:a.modelMatrix,id:a.id,pickPrimitive:this._pickPrimitive??n});i.appearance=t,i.geometryInstances=f,l(this._createBoundingVolumeFunction)&&(i._createBoundingVolumeFunction=function(b,C){n._createBoundingVolumeFunction(b,C)}),i._createRenderStatesFunction=function(b,C,T,E){eYe(n,C)},i._createShaderProgramFunction=function(b,C,T){nYe(n,C)},i._createCommandsFunction=function(b,C,T,E,S,I,R){rYe(n,void 0,void 0,!0,!1,I,R)},l(this._updateAndQueueCommandsFunction)?i._updateAndQueueCommandsFunction=function(b,C,T,E,S,I,R,V){n._updateAndQueueCommandsFunction(b,C,T,E,S,I,R,V)}:i._updateAndQueueCommandsFunction=function(b,C,T,E,S,I,R,V){sYe(n,C,T,E,S,I,R,V)},this._primitive=new Nn(i)}this.debugShowShadowVolume&&!this._debugShowShadowVolume&&this._ready?(this._debugShowShadowVolume=!0,this._rsStencilDepthPass=Qe.fromCache(ZS(!1,!1)),this._rsStencilDepthPass3DTiles=Qe.fromCache(ZS(!1,!0)),this._rsColorPass=Qe.fromCache(eJ(!1))):!this.debugShowShadowVolume&&this._debugShowShadowVolume&&(this._debugShowShadowVolume=!1,this._rsStencilDepthPass=Qe.fromCache(ZS(!0,!1)),this._rsStencilDepthPass3DTiles=Qe.fromCache(ZS(!0,!0)),this._rsColorPass=Qe.fromCache(eJ(!0))),this._primitive.appearance!==t&&(this._primitive.appearance=t),this._primitive.show=this.show,this._primitive.debugShowBoundingVolume=this.debugShowBoundingVolume,this._primitive.update(e),e.afterRender.push(()=>{l(this._primitive)&&this._primitive.ready&&(this._ready=!0,this.releaseGeometryInstances&&(this.geometryInstances=void 0))})};Px.prototype.getGeometryInstanceAttributes=function(e){return this._primitive.getGeometryInstanceAttributes(e)};Px.prototype.isDestroyed=function(){return!1};Px.prototype.destroy=function(){return this._primitive=this._primitive&&this._primitive.destroy(),this._sp=this._sp&&this._sp.destroy(),this._spPick=this._spPick&&this._spPick.destroy(),this._spColor=this._spColor&&this._spColor.destroy(),this._spPick2D=void 0,this._spColor2D=void 0,he(this)};var RS=Px;var aYe={u_globeMinimumAltitude:function(){return 55e3}};function gd(e){e=e??Q.EMPTY_OBJECT;let t=e.appearance,n=e.geometryInstances;if(!l(t)&&l(n)){let o=Array.isArray(n)?n:[n],r=o.length;for(let s=0;s<r;s++){let a=o[s].attributes;if(l(a)&&l(a.color)){t=new yn({flat:!0});break}}}this.appearance=t,this.geometryInstances=e.geometryInstances,this.show=e.show??!0,this.classificationType=e.classificationType??ti.BOTH,this.debugShowBoundingVolume=e.debugShowBoundingVolume??!1,this.debugShowShadowVolume=e.debugShowShadowVolume??!1,this._boundingVolumes=[],this._boundingVolumes2D=[],this._ready=!1,this._primitive=void 0,this._maxHeight=void 0,this._minHeight=void 0,this._maxTerrainHeight=Gi._defaultMaxTerrainHeight,this._minTerrainHeight=Gi._defaultMinTerrainHeight,this._boundingSpheresKeys=[],this._boundingSpheres=[],this._useFragmentCulling=!1,this._zIndex=void 0;let i=this;this._classificationPrimitiveOptions={geometryInstances:void 0,appearance:void 0,vertexCacheOptimize:e.vertexCacheOptimize??!1,interleave:e.interleave??!1,releaseGeometryInstances:e.releaseGeometryInstances??!0,allowPicking:e.allowPicking??!0,asynchronous:e.asynchronous??!0,compressVertices:e.compressVertices??!0,_createBoundingVolumeFunction:void 0,_updateAndQueueCommandsFunction:void 0,_pickPrimitive:i,_extruded:!0,_uniformMap:aYe}}Object.defineProperties(gd.prototype,{vertexCacheOptimize:{get:function(){return this._classificationPrimitiveOptions.vertexCacheOptimize}},interleave:{get:function(){return this._classificationPrimitiveOptions.interleave}},releaseGeometryInstances:{get:function(){return this._classificationPrimitiveOptions.releaseGeometryInstances}},allowPicking:{get:function(){return this._classificationPrimitiveOptions.allowPicking}},asynchronous:{get:function(){return this._classificationPrimitiveOptions.asynchronous}},compressVertices:{get:function(){return this._classificationPrimitiveOptions.compressVertices}},ready:{get:function(){return this._ready}}});gd.isSupported=RS.isSupported;function cce(e){return function(t,n){let i=n.maximumRadius,o=i/Math.cos(t*.5)-i;return e._maxHeight+o}}function lce(e){return function(t,n){return e._minHeight}}var cYe=new m,lYe=new m,dYe=new m,uYe=new Ae,mYe=new de;function ek(e,t){let n=e.mapProjection.ellipsoid;if(!l(t.attributes)||!l(t.attributes.position3DHigh))return l(t.rectangle)?t.rectangle:void 0;let i=t.attributes.position3DHigh.values,o=t.attributes.position3DLow.values,r=i.length,s=Number.POSITIVE_INFINITY,a=Number.POSITIVE_INFINITY,c=Number.NEGATIVE_INFINITY,d=Number.NEGATIVE_INFINITY;for(let h=0;h<r;h+=3){let p=m.unpack(i,h,cYe),A=m.unpack(o,h,lYe),f=m.add(p,A,dYe),b=n.cartesianToCartographic(f,uYe),C=b.latitude,T=b.longitude;s=Math.min(s,C),a=Math.min(a,T),c=Math.max(c,C),d=Math.max(d,T)}let u=mYe;return u.north=c,u.south=s,u.east=d,u.west=a,u}function hYe(e,t,n){let i=Gi.getMinimumMaximumHeights(t,n);e._minTerrainHeight=i.minimumTerrainHeight,e._maxTerrainHeight=i.maximumTerrainHeight}function fYe(e,t,n){let i=t.mapProjection.ellipsoid,o=ek(t,n),r=nn.fromRectangle(o,e._minHeight,e._maxHeight,i);if(e._boundingVolumes.push(r),!t.scene3DOnly){let s=t.mapProjection,a=ue.fromRectangleWithHeights2D(o,s,e._maxHeight,e._minHeight);m.fromElements(a.center.z,a.center.x,a.center.y,a.center),e._boundingVolumes2D.push(a)}}function tJ(e,t){return Math.floor(e%t/2)}function nJ(e,t,n,i,o,r,s){let a=e._primitive;n.mode!==se.SCENE3D&&t.shaderProgram===a._spColor&&a._needs2DShader&&(t=t.derivedCommands.appearance2D),t.owner=e,t.modelMatrix=i,t.boundingVolume=r,t.cull=o,t.debugShowBoundingVolume=s,n.commandList.push(t)}function dce(e,t,n,i,o,r){let s=e._primitive;n.mode!==se.SCENE3D&&t.shaderProgram===s._spPick&&s._needs2DShader&&(t=t.derivedCommands.pick2D),t.owner=e,t.modelMatrix=i,t.boundingVolume=r,t.cull=o,n.commandList.push(t)}function pYe(e,t,n,i,o,r,s,a){let c;t.mode===se.SCENE3D?c=e._boundingVolumes:c=e._boundingVolumes2D;let d=e.classificationType,u=d!==ti.CESIUM_3D_TILE,h=d!==ti.TERRAIN,p=t.passes,A=e._primitive,f,b,C;if(p.render){let T=n.length;for(f=0;f<T;++f)b=c[tJ(f,T)],u&&(C=n[f],nJ(e,C,t,o,r,b,s)),h&&(C=n[f].derivedCommands.tileset,nJ(e,C,t,o,r,b,s));if(t.invertClassification){let E=A._commandsIgnoreShow,S=E.length;for(f=0;f<S;++f)b=c[f],C=E[f],nJ(e,C,t,o,r,b,s)}}if(p.pick){let T=i.length,E;for(e._useFragmentCulling||(E=A._primitive._pickOffsets),f=0;f<T;++f){if(b=c[tJ(f,T)],!e._useFragmentCulling){let S=E[tJ(f,T)];b=c[S.index]}u&&(C=i[f],dce(e,C,t,o,r,b)),h&&(C=i[f].derivedCommands.tileset,dce(e,C,t,o,r,b))}}}gd.initializeTerrainHeights=function(){return Gi.initialize()};gd.prototype.update=function(e){if(!l(this._primitive)&&!l(this.geometryInstances))return;if(!Gi.initialized){gd.initializeTerrainHeights();return}let t=this,n=this._classificationPrimitiveOptions;if(!l(this._primitive)){let i=e.mapProjection.ellipsoid,o,r,s,a=Array.isArray(this.geometryInstances)?this.geometryInstances:[this.geometryInstances],c=a.length,d=new Array(c),u,h;for(u=0;u<c;++u){o=a[u],r=o.geometry;let b=ek(e,r);l(h)?l(b)&&de.union(h,b,h):h=de.clone(b);let C=o.id;if(l(C)&&l(b)){let T=Gi.getBoundingSphere(b,i);this._boundingSpheresKeys.push(C),this._boundingSpheres.push(T)}s=r.constructor,!l(s)||l(s.createShadowVolume)}hYe(this,h,i);let p=e.verticalExaggeration,A=e.verticalExaggerationRelativeHeight;this._minHeight=Eo.getHeight(this._minTerrainHeight,p,A),this._maxHeight=Eo.getHeight(this._maxTerrainHeight,p,A);let f=gd._supportsMaterials(e.context);if(this._useFragmentCulling=f,f){let b,C=!0;for(u=0;u<c;++u)if(o=a[u],r=o.geometry,h=ek(e,r),su.shouldUseSphericalCoordinates(h)){C=!1;break}for(u=0;u<c;++u){o=a[u],r=o.geometry,s=r.constructor;let T=ek(e,r),E=r.textureCoordinateRotationPoints;C?b=su.getPlanarTextureCoordinateAttributes(T,E,i,e.mapProjection,this._maxHeight):b=su.getSphericalExtentGeometryInstanceAttributes(T,E,i,e.mapProjection);let S=o.attributes;for(let I in S)S.hasOwnProperty(I)&&(b[I]=S[I]);d[u]=new wt({geometry:s.createShadowVolume(r,lce(this),cce(this)),attributes:b,id:o.id})}}else for(u=0;u<c;++u)o=a[u],r=o.geometry,s=r.constructor,d[u]=new wt({geometry:s.createShadowVolume(r,lce(this),cce(this)),attributes:o.attributes,id:o.id});n.geometryInstances=d,n.appearance=this.appearance,n._createBoundingVolumeFunction=function(b,C){fYe(t,b,C)},n._updateAndQueueCommandsFunction=function(b,C,T,E,S,I,R,V){pYe(t,C,T,E,S,I,R,V)},this._primitive=new RS(n)}this._primitive.appearance=this.appearance,this._primitive.show=this.show,this._primitive.debugShowShadowVolume=this.debugShowShadowVolume,this._primitive.debugShowBoundingVolume=this.debugShowBoundingVolume,this._primitive.update(e),e.afterRender.push(()=>{!this._ready&&l(this._primitive)&&this._primitive.ready&&(this._ready=!0,this.releaseGeometryInstances&&(this.geometryInstances=void 0))})};gd.prototype.getBoundingSphere=function(e){let t=this._boundingSpheresKeys.indexOf(e);if(t!==-1)return this._boundingSpheres[t]};gd.prototype.getGeometryInstanceAttributes=function(e){return this._primitive.getGeometryInstanceAttributes(e)};gd.prototype.isDestroyed=function(){return!1};gd.prototype.destroy=function(){return this._primitive=this._primitive&&this._primitive.destroy(),he(this)};gd._supportsMaterials=function(e){return e.depthTexture};gd.supportsMaterials=function(e){return gd._supportsMaterials(e.frameState.context)};var _l=gd;var Xrn=y(x(),1);function VS(){fe.throwInstantiationError()}Object.defineProperties(VS.prototype,{isConstant:{get:fe.throwInstantiationError},definitionChanged:{get:fe.throwInstantiationError}});VS.prototype.getType=fe.throwInstantiationError;VS.prototype.getValue=fe.throwInstantiationError;VS.prototype.equals=fe.throwInstantiationError;var AYe=new q;VS.getValue=function(e,t,n){let i;return l(e)||(e=q.now(AYe)),l(t)&&(i=t.getType(e),l(i))?((!l(n)||n.type!==i)&&(n=Oi.fromType(i)),t.getValue(e,n.uniforms),n):((!l(n)||n.type!==Oi.ColorType)&&(n=Oi.fromType(Oi.ColorType)),U.clone(U.WHITE,n.uniforms.color),n)};var Ir=VS;function Xx(e,t,n){this._primitives=t,this._orderedGroundPrimitives=n,this._primitive=void 0,this._outlinePrimitive=void 0,this._geometryUpdater=e,this._options=e._options,this._entity=e._entity,this._material=void 0}Xx.prototype._isHidden=function(e,t,n){return!e.isShowing||!e.isAvailable(n)||!K.getValueOrDefault(t.show,n,!0)};Xx.prototype._setOptions=fe.throwInstantiationError;Xx.prototype.update=function(e){let t=this._geometryUpdater,n=t._onTerrain,i=this._primitives,o=this._orderedGroundPrimitives;n?o.remove(this._primitive):(i.removeAndDestroy(this._primitive),i.removeAndDestroy(this._outlinePrimitive),this._outlinePrimitive=void 0),this._primitive=void 0;let r=this._entity,s=r[this._geometryUpdater._geometryPropertyName];if(this._setOptions(r,s,e),this._isHidden(r,s,e))return;let a=this._geometryUpdater.shadowsProperty.getValue(e),c=this._options;if(!l(s.fill)||s.fill.getValue(e)){let d=t.fillMaterialProperty,u=d instanceof Kt,h,p=t._getIsClosed(c);if(u)h=new yn({closed:p,flat:n&&!t._supportsMaterialsforEntitiesOnTerrain});else{let A=Ir.getValue(e,d,this._material);this._material=A,h=new go({material:A,translucent:A.isTranslucent(),closed:p})}if(n)c.vertexFormat=yn.VERTEX_FORMAT,this._primitive=o.add(new _l({geometryInstances:this._geometryUpdater.createFillGeometryInstance(e),appearance:h,asynchronous:!1,shadows:a,classificationType:this._geometryUpdater.classificationTypeProperty.getValue(e)}),K.getValueOrUndefined(this._geometryUpdater.zIndex,e));else{c.vertexFormat=h.vertexFormat;let A=this._geometryUpdater.createFillGeometryInstance(e);u&&(h.translucent=A.attributes.color.value[3]!==255),this._primitive=i.add(new Nn({geometryInstances:A,appearance:h,asynchronous:!1,shadows:a}))}}if(!n&&l(s.outline)&&s.outline.getValue(e)){let d=this._geometryUpdater.createOutlineGeometryInstance(e),u=K.getValueOrDefault(s.outlineWidth,e,1);this._outlinePrimitive=i.add(new Nn({geometryInstances:d,appearance:new yn({flat:!0,translucent:d.attributes.color.value[3]!==255,renderState:{lineWidth:t._scene.clampLineWidth(u)}}),asynchronous:!1,shadows:a}))}};Xx.prototype.getBoundingSphere=function(e){let t=this._entity,n=this._primitive,i=this._outlinePrimitive,o;return l(n)&&n.show&&n.ready&&(o=n.getGeometryInstanceAttributes(t),l(o)&&l(o.boundingSphere))?(ue.clone(o.boundingSphere,e),Tt.DONE):l(i)&&i.show&&i.ready&&(o=i.getGeometryInstanceAttributes(t),l(o)&&l(o.boundingSphere))?(ue.clone(o.boundingSphere,e),Tt.DONE):l(n)&&!n.ready||l(i)&&!i.ready?Tt.PENDING:Tt.FAILED};Xx.prototype.isDestroyed=function(){return!1};Xx.prototype.destroy=function(){let e=this._primitives,t=this._orderedGroundPrimitives;this._geometryUpdater._onTerrain?t.remove(this._primitive):e.removeAndDestroy(this._primitive),e.removeAndDestroy(this._outlinePrimitive),he(this)};var Ei=Xx;var bmn=y(x(),1);var tsn=y(x(),1);var uce={};function Y1(e,t){l(uce[e])||(uce[e]=!0,console.warn(t??e))}Y1.geometryOutlines="Entity geometry outlines are unsupported on terrain. Outlines will be disabled. To enable outlines, disable geometry terrain clamping by explicitly setting height to 0.";Y1.geometryZIndex="Entity geometry with zIndex are unsupported when height or extrudedHeight are defined. zIndex will be ignored";Y1.geometryHeightReference="Entity corridor, ellipse, polygon or rectangle with heightReference must also have a defined height. heightReference will be ignored";Y1.geometryExtrudedHeightReference="Entity corridor, ellipse, polygon or rectangle with extrudedHeightReference must also have a defined extrudedHeight. extrudedHeightReference will be ignored";var _t=Y1;var nmn=y(x(),1);var isn=y(x(),1),gYe={AUTODETECT:0,ENU:1,INERTIAL:2,VELOCITY:3},wA=Object.freeze(gYe);var ocn=y(x(),1);var Hsn=y(x(),1);var rsn=y(x(),1),bYe={NONE:0,GEODESIC:1,RHUMB:2},un=Object.freeze(bYe);var lsn=y(x(),1);var mce=L.EPSILON10;function yYe(e,t,n,i){if(!l(e))return;n=n??!1;let o=l(i),r=e.length;if(r<2)return e;let s,a=e[0],c,d,u=0,h=-1;for(s=1;s<r;++s)c=e[s],t(a,c,mce)?(l(d)||(d=e.slice(0,s),u=s-1,h=0),o&&i.push(s)):(l(d)&&(d.push(c),u=s,o&&(h=i.length)),a=c);return n&&t(e[0],e[r-1],mce)&&(o&&(l(d)?i.splice(h,0,u):i.push(r-1)),l(d)?d.length-=1:d=e.slice(0,-1)),l(d)?d:e}var Uo=yYe;var Asn=y(x(),1);function xYe(e){let t=e._uSquared,n=e._ellipsoid.maximumRadius,i=e._ellipsoid.minimumRadius,o=(n-i)/n,r=Math.cos(e._startHeading),s=Math.sin(e._startHeading),a=(1-o)*Math.tan(e._start.latitude),c=1/Math.sqrt(1+a*a),d=c*a,u=Math.atan2(a,r),h=c*s,p=h*h,A=1-p,f=Math.sqrt(A),b=t/4,C=b*b,T=C*b,E=C*C,S=1+b-3*C/4+5*T/4-175*E/64,I=1-b+15*C/8-35*T/8,R=1-3*b+35*C/4,V=1-5*b,W=S*u-I*Math.sin(2*u)*b/2-R*Math.sin(4*u)*C/16-V*Math.sin(6*u)*T/48-Math.sin(8*u)*5*E/512,B=e._constants;B.a=n,B.b=i,B.f=o,B.cosineHeading=r,B.sineHeading=s,B.tanU=a,B.cosineU=c,B.sineU=d,B.sigma=u,B.sineAlpha=h,B.sineSquaredAlpha=p,B.cosineSquaredAlpha=A,B.cosineAlpha=f,B.u2Over4=b,B.u4Over16=C,B.u6Over64=T,B.u8Over256=E,B.a0=S,B.a1=I,B.a2=R,B.a3=V,B.distanceRatio=W}function CYe(e,t){return e*t*(4+e*(4-3*t))/16}function hce(e,t,n,i,o,r,s){let a=CYe(e,n);return(1-a)*e*t*(i+a*o*(s+a*r*(2*s*s-1)))}function TYe(e,t,n,i,o,r,s){let a=(t-n)/t,c=r-i,d=Math.atan((1-a)*Math.tan(o)),u=Math.atan((1-a)*Math.tan(s)),h=Math.cos(d),p=Math.sin(d),A=Math.cos(u),f=Math.sin(u),b=h*A,C=h*f,T=p*f,E=p*A,S=c,I=L.TWO_PI,R=Math.cos(S),V=Math.sin(S),W,B,N,P,g;do{R=Math.cos(S),V=Math.sin(S);let Y=C-E*R;N=Math.sqrt(A*A*V*V+Y*Y),B=T+b*R,W=Math.atan2(N,B);let O;N===0?(O=0,P=1):(O=b*V/N,P=1-O*O),I=S,g=B-2*T/P,isFinite(g)||(g=0),S=c+hce(a,O,P,W,N,B,g)}while(Math.abs(S-I)>L.EPSILON12);let _=P*(t*t-n*n)/(n*n),Z=1+_*(4096+_*(_*(320-175*_)-768))/16384,G=_*(256+_*(_*(74-47*_)-128))/1024,w=g*g,X=G*N*(g+G*(B*(2*w-1)-G*g*(4*N*N-3)*(4*w-3)/6)/4),k=n*Z*(W-X),v=Math.atan2(A*V,C-E*R),D=Math.atan2(h*V,C*R-E);e._distance=k,e._startHeading=v,e._endHeading=D,e._uSquared=_}var EYe=new m,iJ=new m;function fce(e,t,n,i){let o=m.normalize(i.cartographicToCartesian(t,iJ),EYe),r=m.normalize(i.cartographicToCartesian(n,iJ),iJ);TYe(e,i.maximumRadius,i.minimumRadius,t.longitude,t.latitude,n.longitude,n.latitude),e._start=Ae.clone(t,e._start),e._end=Ae.clone(n,e._end),e._start.height=0,e._end.height=0,xYe(e)}function M1(e,t,n){let i=n??ie.default;this._ellipsoid=i,this._start=new Ae,this._end=new Ae,this._constants={},this._startHeading=void 0,this._endHeading=void 0,this._distance=void 0,this._uSquared=void 0,l(e)&&l(t)&&fce(this,e,t,i)}Object.defineProperties(M1.prototype,{ellipsoid:{get:function(){return this._ellipsoid}},surfaceDistance:{get:function(){return this._distance}},start:{get:function(){return this._start}},end:{get:function(){return this._end}},startHeading:{get:function(){return this._startHeading}},endHeading:{get:function(){return this._endHeading}}});M1.prototype.setEndPoints=function(e,t){fce(this,e,t,this._ellipsoid)};M1.prototype.interpolateUsingFraction=function(e,t){return this.interpolateUsingSurfaceDistance(this._distance*e,t)};M1.prototype.interpolateUsingSurfaceDistance=function(e,t){let n=this._constants,i=n.distanceRatio+e/n.b,o=Math.cos(2*i),r=Math.cos(4*i),s=Math.cos(6*i),a=Math.sin(2*i),c=Math.sin(4*i),d=Math.sin(6*i),u=Math.sin(8*i),h=i*i,p=i*h,A=n.u8Over256,f=n.u2Over4,b=n.u6Over64,C=n.u4Over16,T=2*p*A*o/3+i*(1-f+7*C/4-15*b/4+579*A/64-(C-15*b/4+187*A/16)*o-(5*b/4-115*A/16)*r-29*A*s/16)+(f/2-C+71*b/32-85*A/16)*a+(5*C/16-5*b/4+383*A/96)*c-h*((b-11*A/2)*a+5*A*c/2)+(29*b/96-29*A/16)*d+539*A*u/1536,E=Math.asin(Math.sin(T)*n.cosineAlpha),S=Math.atan(n.a/n.b*Math.tan(E));T=T-n.sigma;let I=Math.cos(2*n.sigma+T),R=Math.sin(T),V=Math.cos(T),W=n.cosineU*V,B=n.sineU*R,P=Math.atan2(R*n.sineHeading,W-B*n.cosineHeading)-hce(n.f,n.sineAlpha,n.cosineSquaredAlpha,T,R,V,I);return l(t)?(t.longitude=this._start.longitude+P,t.latitude=S,t.height=0,t):new Ae(this._start.longitude+P,S,0)};var NA=M1;var Esn=y(x(),1);function rJ(e,t,n){if(e===0)return t*n;let i=e*e,o=i*i,r=o*i,s=r*i,a=s*i,c=a*i,d=n,u=Math.sin(2*d),h=Math.sin(4*d),p=Math.sin(6*d),A=Math.sin(8*d),f=Math.sin(10*d),b=Math.sin(12*d);return t*((1-i/4-3*o/64-5*r/256-175*s/16384-441*a/65536-4851*c/1048576)*d-(3*i/8+3*o/32+45*r/1024+105*s/4096+2205*a/131072+6237*c/524288)*u+(15*o/256+45*r/1024+525*s/16384+1575*a/65536+155925*c/8388608)*h-(35*r/3072+175*s/12288+3675*a/262144+13475*c/1048576)*p+(315*s/131072+2205*a/524288+43659*c/8388608)*A-(693*a/1310720+6237*c/5242880)*f+1001*c/8388608*b)}function SYe(e,t,n){let i=e/n;if(t===0)return i;let o=i*i,r=o*i,s=r*i,a=t,c=a*a,d=c*c,u=d*c,h=u*c,p=h*c,A=p*c,f=Math.sin(2*i),b=Math.cos(2*i),C=Math.sin(4*i),T=Math.cos(4*i),E=Math.sin(6*i),S=Math.cos(6*i),I=Math.sin(8*i),R=Math.cos(8*i),V=Math.sin(10*i),W=Math.cos(10*i),B=Math.sin(12*i);return i+i*c/4+7*i*d/64+15*i*u/256+579*i*h/16384+1515*i*p/65536+16837*i*A/1048576+(3*i*d/16+45*i*u/256-i*(32*o-561)*h/4096-i*(232*o-1677)*p/16384+i*(399985-90560*o+512*s)*A/5242880)*b+(21*i*u/256+483*i*h/4096-i*(224*o-1969)*p/16384-i*(33152*o-112599)*A/1048576)*T+(151*i*h/4096+4681*i*p/65536+1479*i*A/16384-453*r*A/32768)*S+(1097*i*p/65536+42783*i*A/1048576)*R+8011*i*A/1048576*W+(3*c/8+3*d/16+213*u/2048-3*o*u/64+255*h/4096-33*o*h/512+20861*p/524288-33*o*p/512+s*p/1024+28273*A/1048576-471*o*A/8192+9*s*A/4096)*f+(21*d/256+21*u/256+533*h/8192-21*o*h/512+197*p/4096-315*o*p/4096+584039*A/16777216-12517*o*A/131072+7*s*A/2048)*C+(151*u/6144+151*h/4096+5019*p/131072-453*o*p/16384+26965*A/786432-8607*o*A/131072)*E+(1097*h/131072+1097*p/65536+225797*A/10485760-1097*o*A/65536)*I+(8011*p/2621440+8011*A/1048576)*V+293393*A/251658240*B}function GS(e,t){if(e===0)return Math.log(Math.tan(.5*(L.PI_OVER_TWO+t)));let n=e*Math.sin(t);return Math.log(Math.tan(.5*(L.PI_OVER_TWO+t)))-e/2*Math.log((1+n)/(1-n))}function _Ye(e,t,n,i,o){let r=GS(e._ellipticity,n),s=GS(e._ellipticity,o);return Math.atan2(L.negativePiToPi(i-t),s-r)}function IYe(e,t,n,i,o,r,s){let a=e._heading,c=r-i,d=0;if(L.equalsEpsilon(Math.abs(a),L.PI_OVER_TWO,L.EPSILON8))if(t===n)d=t*Math.cos(o)*L.negativePiToPi(c);else{let u=Math.sin(o);d=t*Math.cos(o)*L.negativePiToPi(c)/Math.sqrt(1-e._ellipticitySquared*u*u)}else{let u=rJ(e._ellipticity,t,o);d=(rJ(e._ellipticity,t,s)-u)/Math.cos(a)}return Math.abs(d)}var ZYe=new m,oJ=new m;function pce(e,t,n,i){let o=m.normalize(i.cartographicToCartesian(t,oJ),ZYe),r=m.normalize(i.cartographicToCartesian(n,oJ),oJ),s=i.maximumRadius,a=i.minimumRadius,c=s*s,d=a*a;e._ellipticitySquared=(c-d)/c,e._ellipticity=Math.sqrt(e._ellipticitySquared),e._start=Ae.clone(t,e._start),e._start.height=0,e._end=Ae.clone(n,e._end),e._end.height=0,e._heading=_Ye(e,t.longitude,t.latitude,n.longitude,n.latitude),e._distance=IYe(e,i.maximumRadius,i.minimumRadius,t.longitude,t.latitude,n.longitude,n.latitude)}function Ace(e,t,n,i,o,r){if(n===0)return Ae.clone(e,r);let s=o*o,a,c,d;if(Math.abs(L.PI_OVER_TWO-Math.abs(t))>L.EPSILON8){let u=rJ(o,i,e.latitude),h=n*Math.cos(t),p=u+h;if(c=SYe(p,o,i),Math.abs(t)<L.EPSILON10)a=L.negativePiToPi(e.longitude);else{let A=GS(o,e.latitude),f=GS(o,c);d=Math.tan(t)*(f-A),a=L.negativePiToPi(e.longitude+d)}}else{c=e.latitude;let u;if(o===0)u=i*Math.cos(e.latitude);else{let h=Math.sin(e.latitude);u=i*Math.cos(e.latitude)/Math.sqrt(1-s*h*h)}d=n/u,t>0?a=L.negativePiToPi(e.longitude+d):a=L.negativePiToPi(e.longitude-d)}return l(r)?(r.longitude=a,r.latitude=c,r.height=0,r):new Ae(a,c,0)}function PA(e,t,n){let i=n??ie.default;this._ellipsoid=i,this._start=new Ae,this._end=new Ae,this._heading=void 0,this._distance=void 0,this._ellipticity=void 0,this._ellipticitySquared=void 0,l(e)&&l(t)&&pce(this,e,t,i)}Object.defineProperties(PA.prototype,{ellipsoid:{get:function(){return this._ellipsoid}},surfaceDistance:{get:function(){return this._distance}},start:{get:function(){return this._start}},end:{get:function(){return this._end}},heading:{get:function(){return this._heading}}});PA.fromStartHeadingDistance=function(e,t,n,i,o){let r=i??ie.default,s=r.maximumRadius,a=r.minimumRadius,c=s*s,d=a*a,u=Math.sqrt((c-d)/c);t=L.negativePiToPi(t);let h=Ace(e,t,n,r.maximumRadius,u);return!l(o)||l(i)&&!i.equals(o.ellipsoid)?new PA(e,h,r):(o.setEndPoints(e,h),o)};PA.prototype.setEndPoints=function(e,t){pce(this,e,t,this._ellipsoid)};PA.prototype.interpolateUsingFraction=function(e,t){return this.interpolateUsingSurfaceDistance(e*this._distance,t)};PA.prototype.interpolateUsingSurfaceDistance=function(e,t){return Ace(this._start,this._heading,e,this._ellipsoid.maximumRadius,this._ellipticity,t)};PA.prototype.findIntersectionWithLongitude=function(e,t){let n=this._ellipticity,i=this._heading,o=Math.abs(i),r=this._start;if(e=L.negativePiToPi(e),L.equalsEpsilon(Math.abs(e),Math.PI,L.EPSILON14)&&(e=L.sign(r.longitude)*Math.PI),l(t)||(t=new Ae),Math.abs(L.PI_OVER_TWO-o)<=L.EPSILON8)return t.longitude=e,t.latitude=r.latitude,t.height=0,t;if(L.equalsEpsilon(Math.abs(L.PI_OVER_TWO-o),L.PI_OVER_TWO,L.EPSILON8))return L.equalsEpsilon(e,r.longitude,L.EPSILON12)?void 0:(t.longitude=e,t.latitude=L.PI_OVER_TWO*L.sign(L.PI_OVER_TWO-i),t.height=0,t);let s=r.latitude,a=n*Math.sin(s),c=Math.tan(.5*(L.PI_OVER_TWO+s))*Math.exp((e-r.longitude)/Math.tan(i)),d=(1+a)/(1-a),u=r.latitude,h;do{h=u;let p=n*Math.sin(h),A=(1+p)/(1-p);u=2*Math.atan(c*Math.pow(A/d,n/2))-L.PI_OVER_TWO}while(!L.equalsEpsilon(u,h,L.EPSILON12));return t.longitude=e,t.latitude=u,t.height=0,t};PA.prototype.findIntersectionWithLatitude=function(e,t){let n=this._ellipticity,i=this._heading,o=this._start;if(L.equalsEpsilon(Math.abs(i),L.PI_OVER_TWO,L.EPSILON8))return;let r=GS(n,o.latitude),s=GS(n,e),a=Math.tan(i)*(s-r),c=L.negativePiToPi(o.longitude+a);return l(t)?(t.longitude=c,t.latitude=e,t.height=0,t):new Ae(c,e,0)};var Sc=PA;var hJ=[ki,pi],RYe=hJ.length,Nce=Math.cos(L.toRadians(30)),gce=Math.cos(L.toRadians(150)),Pce=0,Xce=1e3;function r0(e){e=e??Q.EMPTY_OBJECT;let t=e.positions;this.width=e.width??1,this._positions=t,this.granularity=e.granularity??9999,this.loop=e.loop??!1,this.arcType=e.arcType??un.GEODESIC,this._ellipsoid=ie.default,this._projectionIndex=0,this._workerName="createGroundPolylineGeometry",this._scene3DOnly=!1}Object.defineProperties(r0.prototype,{packedLength:{get:function(){return 1+this._positions.length*3+1+1+1+ie.packedLength+1+1}}});r0.setProjectionAndEllipsoid=function(e,t){let n=0;for(let i=0;i<RYe;i++)if(t instanceof hJ[i]){n=i;break}e._projectionIndex=n,e._ellipsoid=t.ellipsoid};var VYe=new m,bce=new m,yce=new m;function mJ(e,t,n,i,o){let r=Il(i,e,0,VYe),s=Il(i,e,n,bce),a=Il(i,t,0,yce),c=XA(s,r,bce),d=XA(a,r,yce);return m.cross(d,c,o),m.normalize(o,o)}var GYe=new Ae,LYe=new m,WYe=new m,FYe=new m;function sJ(e,t,n,i,o,r,s,a,c,d,u){if(o===0)return;let h;r===un.GEODESIC?h=new NA(e,t,s):r===un.RHUMB&&(h=new Sc(e,t,s));let p=h.surfaceDistance;if(p<o)return;let A=mJ(e,t,i,s,FYe),f=Math.ceil(p/o),b=p/f,C=b,T=f-1,E=a.length;for(let S=0;S<T;S++){let I=h.interpolateUsingSurfaceDistance(C,GYe),R=Il(s,I,n,LYe),V=Il(s,I,i,WYe);m.pack(A,a,E),m.pack(R,c,E),m.pack(V,d,E),u.push(I.latitude),u.push(I.longitude),E+=3,C+=b}}var aJ=new Ae;function Il(e,t,n,i){return Ae.clone(t,aJ),aJ.height=n,Ae.toCartesian(aJ,e,i)}r0.pack=function(e,t,n){let i=n??0,o=e._positions,r=o.length;t[i++]=r;for(let s=0;s<r;++s){let a=o[s];m.pack(a,t,i),i+=3}return t[i++]=e.granularity,t[i++]=e.loop?1:0,t[i++]=e.arcType,ie.pack(e._ellipsoid,t,i),i+=ie.packedLength,t[i++]=e._projectionIndex,t[i++]=e._scene3DOnly?1:0,t};r0.unpack=function(e,t,n){let i=t??0,o=e[i++],r=new Array(o);for(let p=0;p<o;p++)r[p]=m.unpack(e,i),i+=3;let s=e[i++],a=e[i++]===1,c=e[i++],d=ie.unpack(e,i);i+=ie.packedLength;let u=e[i++],h=e[i++]===1;return l(n)||(n=new r0({positions:r})),n._positions=r,n.granularity=s,n.loop=a,n.arcType=c,n._ellipsoid=d,n._projectionIndex=u,n._scene3DOnly=h,n};function XA(e,t,n){return m.subtract(e,t,n),m.normalize(n,n),n}function xce(e,t,n,i){return i=XA(e,t,i),i=m.cross(i,n,i),i=m.normalize(i,i),i=m.cross(n,i,i),i}var BYe=new m,wYe=new m,NYe=new m,Yce=new m,PYe=0,XYe=-1;function cJ(e,t,n,i,o){let r=XA(n,t,Yce),s=xce(e,t,r,BYe),a=xce(i,t,r,wYe);if(L.equalsEpsilon(m.dot(s,a),XYe,L.EPSILON5))return o=m.cross(r,s,o),o=m.normalize(o,o),o;o=m.add(a,s,o),o=m.normalize(o,o);let c=m.cross(r,o,NYe);return m.dot(a,c)<PYe&&(o=m.negate(o,o)),o}var ok=dn.fromPointNormal(m.ZERO,m.UNIT_Y),YYe=new m,MYe=new m,vYe=new m,UYe=new m,DYe=new m,tk=new m,nk=new Ae,Cce=new Ae,Tce=new Ae;r0.createGeometry=function(e){let t=!e._scene3DOnly,n=e.loop,i=e._ellipsoid,o=e.granularity,r=e.arcType,s=new hJ[e._projectionIndex](i),a=Pce,c=Xce,d,u,h=e._positions,p=h.length;p===2&&(n=!1);let A,f,b,C,T=new Sc(void 0,void 0,i),E,S,I,R=[h[0]];for(u=0;u<p-1;u++)A=h[u],f=h[u+1],E=hi.lineSegmentPlane(A,f,ok,tk),l(E)&&!m.equalsEpsilon(E,A,L.EPSILON7)&&!m.equalsEpsilon(E,f,L.EPSILON7)&&(e.arcType===un.GEODESIC?R.push(m.clone(E)):e.arcType===un.RHUMB&&(I=i.cartesianToCartographic(E,nk).longitude,b=i.cartesianToCartographic(A,nk),C=i.cartesianToCartographic(f,Cce),T.setEndPoints(b,C),S=T.findIntersectionWithLongitude(I,Tce),E=i.cartographicToCartesian(S,tk),l(E)&&!m.equalsEpsilon(E,A,L.EPSILON7)&&!m.equalsEpsilon(E,f,L.EPSILON7)&&R.push(m.clone(E)))),R.push(f);n&&(A=h[p-1],f=h[0],E=hi.lineSegmentPlane(A,f,ok,tk),l(E)&&!m.equalsEpsilon(E,A,L.EPSILON7)&&!m.equalsEpsilon(E,f,L.EPSILON7)&&(e.arcType===un.GEODESIC?R.push(m.clone(E)):e.arcType===un.RHUMB&&(I=i.cartesianToCartographic(E,nk).longitude,b=i.cartesianToCartographic(A,nk),C=i.cartesianToCartographic(f,Cce),T.setEndPoints(b,C),S=T.findIntersectionWithLongitude(I,Tce),E=i.cartographicToCartesian(S,tk),l(E)&&!m.equalsEpsilon(E,A,L.EPSILON7)&&!m.equalsEpsilon(E,f,L.EPSILON7)&&R.push(m.clone(E)))));let V=R.length,W=new Array(V);for(u=0;u<V;u++){let J=Ae.fromCartesian(R[u],i);J.height=0,W[u]=J}if(W=Uo(W,Ae.equalsEpsilon),V=W.length,V<2)return;let B=[],N=[],P=[],g=[],_=YYe,Z=MYe,G=vYe,w=UYe,X=DYe,k=W[0],v=W[1],D=W[V-1];for(_=Il(i,D,a,_),w=Il(i,v,a,w),Z=Il(i,k,a,Z),G=Il(i,k,c,G),n?X=cJ(_,Z,G,w,X):X=mJ(k,v,c,i,X),m.pack(X,N,0),m.pack(Z,P,0),m.pack(G,g,0),B.push(k.latitude),B.push(k.longitude),sJ(k,v,a,c,o,r,i,N,P,g,B),u=1;u<V-1;++u){_=m.clone(Z,_),Z=m.clone(w,Z);let J=W[u];Il(i,J,c,G),Il(i,W[u+1],a,w),cJ(_,Z,G,w,X),d=N.length,m.pack(X,N,d),m.pack(Z,P,d),m.pack(G,g,d),B.push(J.latitude),B.push(J.longitude),sJ(W[u],W[u+1],a,c,o,r,i,N,P,g,B)}let Y=W[V-1],O=W[V-2];if(Z=Il(i,Y,a,Z),G=Il(i,Y,c,G),n){let J=W[0];_=Il(i,O,a,_),w=Il(i,J,a,w),X=cJ(_,Z,G,w,X)}else X=mJ(O,Y,c,i,X);if(d=N.length,m.pack(X,N,d),m.pack(Z,P,d),m.pack(G,g,d),B.push(Y.latitude),B.push(Y.longitude),n){for(sJ(Y,k,a,c,o,r,i,N,P,g,B),d=N.length,u=0;u<3;++u)N[d+u]=N[u],P[d+u]=P[u],g[d+u]=g[u];B.push(k.latitude),B.push(k.longitude)}return pMe(n,s,P,g,N,B,t)};var kYe=new m,QYe=new $,OYe=new Me;function Ece(e,t,n,i){let o=XA(n,t,kYe),r=m.dot(o,e);if(r>Nce||r<gce){let s=XA(i,n,Yce),a=r<gce?L.PI_OVER_TWO:-L.PI_OVER_TWO,c=Me.fromAxisAngle(s,a,OYe),d=$.fromQuaternion(c,QYe);return $.multiplyByVector(d,e,e),!0}return!1}var Sce=new Ae,zYe=new m,_ce=new m;function v1(e,t,n,i,o){let r=Ae.toCartesian(t,e._ellipsoid,zYe),s=m.add(r,n,_ce),a=!1,c=e._ellipsoid,d=c.cartesianToCartographic(s,Sce);Math.abs(t.longitude-d.longitude)>L.PI_OVER_TWO&&(a=!0,s=m.subtract(r,n,_ce),d=c.cartesianToCartographic(s,Sce)),d.height=0;let u=e.project(d,o);return o=m.subtract(u,i,o),o.z=0,o=m.normalize(o,o),a&&m.negate(o,o),o}var HYe=new m,Ice=new m;function Zce(e,t,n,i,o,r){let s=m.subtract(t,e,HYe);m.normalize(s,s);let a=n-Pce,c=m.multiplyByScalar(s,a,Ice);m.add(e,c,o);let d=i-Xce;c=m.multiplyByScalar(s,d,Ice),m.add(t,c,r)}var JYe=new m;function ik(e,t){let n=dn.getPointDistance(ok,e),i=dn.getPointDistance(ok,t),o=JYe;L.equalsEpsilon(n,0,L.EPSILON2)?(o=XA(t,e,o),m.multiplyByScalar(o,L.EPSILON2,o),m.add(e,o,e)):L.equalsEpsilon(i,0,L.EPSILON2)&&(o=XA(e,t,o),m.multiplyByScalar(o,L.EPSILON2,o),m.add(t,o,t))}function KYe(e,t){let n=Math.abs(e.longitude),i=Math.abs(t.longitude);if(L.equalsEpsilon(n,L.PI,L.EPSILON11)){let o=L.sign(t.longitude);return e.longitude=o*(n-L.EPSILON11),1}else if(L.equalsEpsilon(i,L.PI,L.EPSILON11)){let o=L.sign(e.longitude);return t.longitude=o*(i-L.EPSILON11),2}return 0}var Mce=new Ae,vce=new Ae,Rce=new m,lJ=new m,Vce=new m,Gce=new m,jYe=new m,Lce=new m,qYe=[Mce,vce],$Ye=new de,eMe=new m,tMe=new m,nMe=new m,iMe=new m,oMe=new m,rMe=new m,dJ=new m,uJ=new m,sMe=new m,aMe=new m,cMe=new m,Wce=new m,lMe=new m,dMe=new m,uMe=new In,mMe=new In,Fce=new m,hMe=new m,Bce=new m,fMe=[new ue,new ue],Uce=[0,2,1,0,3,2,0,7,3,0,4,7,0,5,4,0,1,5,5,7,4,5,6,7,5,2,6,5,1,2,3,6,2,3,7,6],wce=Uce.length;function pMe(e,t,n,i,o,r,s){let a,c,d=t._ellipsoid,u=n.length/3-1,h=u*8,p=h*4,A=u*36,f=h>65535?new Uint32Array(A):new Uint16Array(A),b=new Float64Array(h*3),C=new Float32Array(p),T=new Float32Array(p),E=new Float32Array(p),S=new Float32Array(p),I=new Float32Array(p),R,V,W,B;s&&(R=new Float32Array(p),V=new Float32Array(p),W=new Float32Array(p),B=new Float32Array(h*2));let N=r.length/2,P=0,g=Mce;g.height=0;let _=vce;_.height=0;let Z=Rce,G=lJ;if(s)for(c=0,a=1;a<N;a++)g.latitude=r[c],g.longitude=r[c+1],_.latitude=r[c+2],_.longitude=r[c+3],Z=t.project(g,Z),G=t.project(_,G),P+=m.distance(Z,G),c+=2;let w=i.length/3;G=m.unpack(i,0,G);let X=0;for(c=3,a=1;a<w;a++)Z=m.clone(G,Z),G=m.unpack(i,c,G),X+=m.distance(Z,G),c+=3;let k;c=3;let v=0,D=0,Y=0,O=0,J=!1,te=m.unpack(n,0,Gce),z=m.unpack(i,0,lJ),j=m.unpack(o,0,Lce);if(e){let Ne=m.unpack(n,n.length-6,Vce);Ece(j,Ne,te,z)&&(j=m.negate(j,j))}let ee=0,ge=0,ye=0;for(a=0;a<u;a++){let Ne=m.clone(te,Vce),Pe=m.clone(z,Rce),Xe=m.clone(j,jYe);J&&(Xe=m.negate(Xe,Xe)),te=m.unpack(n,c,Gce),z=m.unpack(i,c,lJ),j=m.unpack(o,c,Lce),J=Ece(j,Ne,te,z),g.latitude=r[v],g.longitude=r[v+1],_.latitude=r[v+2],_.longitude=r[v+3];let st,Ye,xt,at;if(s){let Pn=KYe(g,_);st=t.project(g,oMe),Ye=t.project(_,rMe);let Ho=XA(Ye,st,Fce);Ho.y=Math.abs(Ho.y),xt=dJ,at=uJ,Pn===0||m.dot(Ho,m.UNIT_Y)>Nce?(xt=v1(t,g,Xe,st,dJ),at=v1(t,_,j,Ye,uJ)):Pn===1?(at=v1(t,_,j,Ye,uJ),xt.x=0,xt.y=L.sign(g.longitude-Math.abs(_.longitude)),xt.z=0):(xt=v1(t,g,Xe,st,dJ),at.x=0,at.y=L.sign(g.longitude-_.longitude),at.z=0)}let Je=m.distance(Pe,z),lt=In.fromCartesian(Ne,uMe),ht=m.subtract(te,Ne,sMe),Rt=m.normalize(ht,Wce),_e=m.subtract(Pe,Ne,aMe);_e=m.normalize(_e,_e);let Re=m.cross(Rt,_e,Wce);Re=m.normalize(Re,Re);let jt=m.cross(_e,Xe,lMe);jt=m.normalize(jt,jt);let At=m.subtract(z,te,cMe);At=m.normalize(At,At);let kt=m.cross(j,At,dMe);kt=m.normalize(kt,kt);let On=Je/X,$e=ee/X,uo=0,Qt,Bo,no,Yi=0,Oo=0;if(s){uo=m.distance(st,Ye),Qt=In.fromCartesian(st,mMe),Bo=m.subtract(Ye,st,Fce),no=m.normalize(Bo,hMe);let Pn=no.x;no.x=no.y,no.y=-Pn,Yi=uo/P,Oo=ge/P}for(k=0;k<8;k++){let Pn=O+k*4,Ho=D+k*2,Jo=Pn+3,oa=k<4?1:-1,Di=k===2||k===3||k===6||k===7?1:-1;m.pack(lt.high,C,Pn),C[Jo]=ht.x,m.pack(lt.low,T,Pn),T[Jo]=ht.y,m.pack(jt,E,Pn),E[Jo]=ht.z,m.pack(kt,S,Pn),S[Jo]=On*oa,m.pack(Re,I,Pn);let Ro=$e*Di;Ro===0&&Di<0&&(Ro=9),I[Jo]=Ro,s&&(R[Pn]=Qt.high.x,R[Pn+1]=Qt.high.y,R[Pn+2]=Qt.low.x,R[Pn+3]=Qt.low.y,W[Pn]=-xt.y,W[Pn+1]=xt.x,W[Pn+2]=at.y,W[Pn+3]=-at.x,V[Pn]=Bo.x,V[Pn+1]=Bo.y,V[Pn+2]=no.x,V[Pn+3]=no.y,B[Ho]=Yi*oa,Ro=Oo*Di,Ro===0&&Di<0&&(Ro=9),B[Ho+1]=Ro)}let ai=nMe,jn=iMe,io=eMe,wo=tMe,bo=de.fromCartographicArray(qYe,$Ye),nr=Gi.getMinimumMaximumHeights(bo,d),zo=nr.minimumTerrainHeight,Sn=nr.maximumTerrainHeight;ye+=Math.abs(zo),ye+=Math.abs(Sn),Zce(Ne,Pe,zo,Sn,ai,io),Zce(te,z,zo,Sn,jn,wo);let Ri=m.multiplyByScalar(Re,L.EPSILON5,Bce);m.add(ai,Ri,ai),m.add(jn,Ri,jn),m.add(io,Ri,io),m.add(wo,Ri,wo),ik(ai,jn),ik(io,wo),m.pack(ai,b,Y),m.pack(jn,b,Y+3),m.pack(wo,b,Y+6),m.pack(io,b,Y+9),Ri=m.multiplyByScalar(Re,-2*L.EPSILON5,Bce),m.add(ai,Ri,ai),m.add(jn,Ri,jn),m.add(io,Ri,io),m.add(wo,Ri,wo),ik(ai,jn),ik(io,wo),m.pack(ai,b,Y+12),m.pack(jn,b,Y+15),m.pack(wo,b,Y+18),m.pack(io,b,Y+21),v+=2,c+=3,D+=16,Y+=24,O+=32,ee+=Je,ge+=uo}c=0;let ae=0;for(a=0;a<u;a++){for(k=0;k<wce;k++)f[c+k]=Uce[k]+ae;ae+=8,c+=wce}let Ce=fMe;ue.fromVertices(n,m.ZERO,3,Ce[0]),ue.fromVertices(i,m.ZERO,3,Ce[1]);let Te=ue.fromBoundingSpheres(Ce);Te.radius+=ye/(u*2);let Fe={position:new we({componentDatatype:H.DOUBLE,componentsPerAttribute:3,normalize:!1,values:b}),startHiAndForwardOffsetX:o0(C),startLoAndForwardOffsetY:o0(T),startNormalAndForwardOffsetZ:o0(E),endNormalAndTextureCoordinateNormalizationX:o0(S),rightNormalAndTextureCoordinateNormalizationY:o0(I)};return s&&(Fe.startHiLo2D=o0(R),Fe.offsetAndRight2D=o0(V),Fe.startEndNormals2D=o0(W),Fe.texcoordNormalization2D=new we({componentDatatype:H.FLOAT,componentsPerAttribute:2,normalize:!1,values:B})),new Ct({attributes:Fe,indices:f,boundingSphere:Te})}function o0(e){return new we({componentDatatype:H.FLOAT,componentsPerAttribute:4,normalize:!1,values:e})}r0._projectNormal=v1;var Yx=r0;var Ksn=y(x(),1),U1=`in vec4 v_startPlaneNormalEcAndHalfWidth;
in vec4 v_endPlaneNormalEcAndBatchId;
in vec4 v_rightPlaneEC; // Technically can compute distance for this here
in vec4 v_endEcAndStartEcX;
in vec4 v_texcoordNormalizationAndStartEcYZ;
#ifdef PER_INSTANCE_COLOR
in vec4 v_color;
#endif
void main(void)
{
float logDepthOrDepth = czm_branchFreeTernary(czm_sceneMode == czm_sceneMode2D, gl_FragCoord.z, czm_unpackDepth(texture(czm_globeDepthTexture, gl_FragCoord.xy / czm_viewport.zw)));
vec3 ecStart = vec3(v_endEcAndStartEcX.w, v_texcoordNormalizationAndStartEcYZ.zw);
// Discard for sky
if (logDepthOrDepth == 0.0) {
#ifdef DEBUG_SHOW_VOLUME
out_FragColor = vec4(1.0, 0.0, 0.0, 0.5);
return;
#else // DEBUG_SHOW_VOLUME
discard;
#endif // DEBUG_SHOW_VOLUME
}
vec4 eyeCoordinate = czm_windowToEyeCoordinates(gl_FragCoord.xy, logDepthOrDepth);
eyeCoordinate /= eyeCoordinate.w;
float halfMaxWidth = v_startPlaneNormalEcAndHalfWidth.w * czm_metersPerPixel(eyeCoordinate);
// Check distance of the eye coordinate against the right-facing plane
float widthwiseDistance = czm_planeDistance(v_rightPlaneEC, eyeCoordinate.xyz);
// Check eye coordinate against the mitering planes
float distanceFromStart = czm_planeDistance(v_startPlaneNormalEcAndHalfWidth.xyz, -dot(ecStart, v_startPlaneNormalEcAndHalfWidth.xyz), eyeCoordinate.xyz);
float distanceFromEnd = czm_planeDistance(v_endPlaneNormalEcAndBatchId.xyz, -dot(v_endEcAndStartEcX.xyz, v_endPlaneNormalEcAndBatchId.xyz), eyeCoordinate.xyz);
if (abs(widthwiseDistance) > halfMaxWidth || distanceFromStart < 0.0 || distanceFromEnd < 0.0) {
#ifdef DEBUG_SHOW_VOLUME
out_FragColor = vec4(1.0, 0.0, 0.0, 0.5);
return;
#else // DEBUG_SHOW_VOLUME
discard;
#endif // DEBUG_SHOW_VOLUME
}
// Check distance of the eye coordinate against start and end planes with normals in the right plane.
// For computing unskewed lengthwise texture coordinate.
// Can also be used for clipping extremely pointy miters, but in practice unnecessary because of miter breaking.
// aligned plane: cross the right plane normal with miter plane normal, then cross the result with right again to point it more "forward"
vec3 alignedPlaneNormal;
// start aligned plane
alignedPlaneNormal = cross(v_rightPlaneEC.xyz, v_startPlaneNormalEcAndHalfWidth.xyz);
alignedPlaneNormal = normalize(cross(alignedPlaneNormal, v_rightPlaneEC.xyz));
distanceFromStart = czm_planeDistance(alignedPlaneNormal, -dot(alignedPlaneNormal, ecStart), eyeCoordinate.xyz);
// end aligned plane
alignedPlaneNormal = cross(v_rightPlaneEC.xyz, v_endPlaneNormalEcAndBatchId.xyz);
alignedPlaneNormal = normalize(cross(alignedPlaneNormal, v_rightPlaneEC.xyz));
distanceFromEnd = czm_planeDistance(alignedPlaneNormal, -dot(alignedPlaneNormal, v_endEcAndStartEcX.xyz), eyeCoordinate.xyz);
#ifdef PER_INSTANCE_COLOR
out_FragColor = czm_gammaCorrect(v_color);
#else // PER_INSTANCE_COLOR
// Clamp - distance to aligned planes may be negative due to mitering,
// so fragment texture coordinate might be out-of-bounds.
float s = clamp(distanceFromStart / (distanceFromStart + distanceFromEnd), 0.0, 1.0);
s = (s * v_texcoordNormalizationAndStartEcYZ.x) + v_texcoordNormalizationAndStartEcYZ.y;
float t = (widthwiseDistance + halfMaxWidth) / (2.0 * halfMaxWidth);
czm_materialInput materialInput;
materialInput.s = s;
materialInput.st = vec2(s, t);
materialInput.str = vec3(s, t, 0.0);
czm_material material = czm_getMaterial(materialInput);
out_FragColor = vec4(material.diffuse + material.emission, material.alpha);
#endif // PER_INSTANCE_COLOR
// Premultiply alpha. Required for classification primitives on translucent globe.
out_FragColor.rgb *= out_FragColor.a;
czm_writeDepthClamp();
}
`;var qsn=y(x(),1),D1=`in vec3 v_forwardDirectionEC;
in vec3 v_texcoordNormalizationAndHalfWidth;
in float v_batchId;
#ifdef PER_INSTANCE_COLOR
in vec4 v_color;
#else
in vec2 v_alignedPlaneDistances;
in float v_texcoordT;
#endif
float rayPlaneDistanceUnsafe(vec3 origin, vec3 direction, vec3 planeNormal, float planeDistance) {
// We don't expect the ray to ever be parallel to the plane
return (-planeDistance - dot(planeNormal, origin)) / dot(planeNormal, direction);
}
void main(void)
{
vec4 eyeCoordinate = gl_FragCoord;
eyeCoordinate /= eyeCoordinate.w;
#ifdef PER_INSTANCE_COLOR
out_FragColor = czm_gammaCorrect(v_color);
#else // PER_INSTANCE_COLOR
// Use distances for planes aligned with segment to prevent skew in dashing
float distanceFromStart = rayPlaneDistanceUnsafe(eyeCoordinate.xyz, -v_forwardDirectionEC, v_forwardDirectionEC.xyz, v_alignedPlaneDistances.x);
float distanceFromEnd = rayPlaneDistanceUnsafe(eyeCoordinate.xyz, v_forwardDirectionEC, -v_forwardDirectionEC.xyz, v_alignedPlaneDistances.y);
// Clamp - distance to aligned planes may be negative due to mitering
distanceFromStart = max(0.0, distanceFromStart);
distanceFromEnd = max(0.0, distanceFromEnd);
float s = distanceFromStart / (distanceFromStart + distanceFromEnd);
s = (s * v_texcoordNormalizationAndHalfWidth.x) + v_texcoordNormalizationAndHalfWidth.y;
czm_materialInput materialInput;
materialInput.s = s;
materialInput.st = vec2(s, v_texcoordT);
materialInput.str = vec3(s, v_texcoordT, 0.0);
czm_material material = czm_getMaterial(materialInput);
out_FragColor = vec4(material.diffuse + material.emission, material.alpha);
#endif // PER_INSTANCE_COLOR
}
`;var ean=y(x(),1),k1=`in vec3 position3DHigh;
in vec3 position3DLow;
in vec4 startHiAndForwardOffsetX;
in vec4 startLoAndForwardOffsetY;
in vec4 startNormalAndForwardOffsetZ;
in vec4 endNormalAndTextureCoordinateNormalizationX;
in vec4 rightNormalAndTextureCoordinateNormalizationY;
in vec4 startHiLo2D;
in vec4 offsetAndRight2D;
in vec4 startEndNormals2D;
in vec2 texcoordNormalization2D;
in float batchId;
out vec3 v_forwardDirectionEC;
out vec3 v_texcoordNormalizationAndHalfWidth;
out float v_batchId;
// For materials
#ifdef WIDTH_VARYING
out float v_width;
#endif
#ifdef ANGLE_VARYING
out float v_polylineAngle;
#endif
#ifdef PER_INSTANCE_COLOR
out vec4 v_color;
#else
out vec2 v_alignedPlaneDistances;
out float v_texcoordT;
#endif
// Morphing planes using SLERP or NLERP doesn't seem to work, so instead draw the material directly on the shadow volume.
// Morph views are from very far away and aren't meant to be used precisely, so this should be sufficient.
void main()
{
v_batchId = batchId;
// Start position
vec4 posRelativeToEye2D = czm_translateRelativeToEye(vec3(0.0, startHiLo2D.xy), vec3(0.0, startHiLo2D.zw));
vec4 posRelativeToEye3D = czm_translateRelativeToEye(startHiAndForwardOffsetX.xyz, startLoAndForwardOffsetY.xyz);
vec4 posRelativeToEye = czm_columbusViewMorph(posRelativeToEye2D, posRelativeToEye3D, czm_morphTime);
vec3 posEc2D = (czm_modelViewRelativeToEye * posRelativeToEye2D).xyz;
vec3 posEc3D = (czm_modelViewRelativeToEye * posRelativeToEye3D).xyz;
vec3 startEC = (czm_modelViewRelativeToEye * posRelativeToEye).xyz;
// Start plane
vec4 startPlane2D;
vec4 startPlane3D;
startPlane2D.xyz = czm_normal * vec3(0.0, startEndNormals2D.xy);
startPlane3D.xyz = czm_normal * startNormalAndForwardOffsetZ.xyz;
startPlane2D.w = -dot(startPlane2D.xyz, posEc2D);
startPlane3D.w = -dot(startPlane3D.xyz, posEc3D);
// Right plane
vec4 rightPlane2D;
vec4 rightPlane3D;
rightPlane2D.xyz = czm_normal * vec3(0.0, offsetAndRight2D.zw);
rightPlane3D.xyz = czm_normal * rightNormalAndTextureCoordinateNormalizationY.xyz;
rightPlane2D.w = -dot(rightPlane2D.xyz, posEc2D);
rightPlane3D.w = -dot(rightPlane3D.xyz, posEc3D);
// End position
posRelativeToEye2D = posRelativeToEye2D + vec4(0.0, offsetAndRight2D.xy, 0.0);
posRelativeToEye3D = posRelativeToEye3D + vec4(startHiAndForwardOffsetX.w, startLoAndForwardOffsetY.w, startNormalAndForwardOffsetZ.w, 0.0);
posRelativeToEye = czm_columbusViewMorph(posRelativeToEye2D, posRelativeToEye3D, czm_morphTime);
posEc2D = (czm_modelViewRelativeToEye * posRelativeToEye2D).xyz;
posEc3D = (czm_modelViewRelativeToEye * posRelativeToEye3D).xyz;
vec3 endEC = (czm_modelViewRelativeToEye * posRelativeToEye).xyz;
vec3 forwardEc3D = czm_normal * normalize(vec3(startHiAndForwardOffsetX.w, startLoAndForwardOffsetY.w, startNormalAndForwardOffsetZ.w));
vec3 forwardEc2D = czm_normal * normalize(vec3(0.0, offsetAndRight2D.xy));
// End plane
vec4 endPlane2D;
vec4 endPlane3D;
endPlane2D.xyz = czm_normal * vec3(0.0, startEndNormals2D.zw);
endPlane3D.xyz = czm_normal * endNormalAndTextureCoordinateNormalizationX.xyz;
endPlane2D.w = -dot(endPlane2D.xyz, posEc2D);
endPlane3D.w = -dot(endPlane3D.xyz, posEc3D);
// Forward direction
v_forwardDirectionEC = normalize(endEC - startEC);
vec2 cleanTexcoordNormalization2D;
cleanTexcoordNormalization2D.x = abs(texcoordNormalization2D.x);
cleanTexcoordNormalization2D.y = czm_branchFreeTernary(texcoordNormalization2D.y > 1.0, 0.0, abs(texcoordNormalization2D.y));
vec2 cleanTexcoordNormalization3D;
cleanTexcoordNormalization3D.x = abs(endNormalAndTextureCoordinateNormalizationX.w);
cleanTexcoordNormalization3D.y = rightNormalAndTextureCoordinateNormalizationY.w;
cleanTexcoordNormalization3D.y = czm_branchFreeTernary(cleanTexcoordNormalization3D.y > 1.0, 0.0, abs(cleanTexcoordNormalization3D.y));
v_texcoordNormalizationAndHalfWidth.xy = mix(cleanTexcoordNormalization2D, cleanTexcoordNormalization3D, czm_morphTime);
#ifdef PER_INSTANCE_COLOR
v_color = czm_batchTable_color(batchId);
#else // PER_INSTANCE_COLOR
// For computing texture coordinates
v_alignedPlaneDistances.x = -dot(v_forwardDirectionEC, startEC);
v_alignedPlaneDistances.y = -dot(-v_forwardDirectionEC, endEC);
#endif // PER_INSTANCE_COLOR
#ifdef WIDTH_VARYING
float width = czm_batchTable_width(batchId);
float halfWidth = width * 0.5;
v_width = width;
v_texcoordNormalizationAndHalfWidth.z = halfWidth;
#else
float halfWidth = 0.5 * czm_batchTable_width(batchId);
v_texcoordNormalizationAndHalfWidth.z = halfWidth;
#endif
// Compute a normal along which to "push" the position out, extending the miter depending on view distance.
// Position has already been "pushed" by unit length along miter normal, and miter normals are encoded in the planes.
// Decode the normal to use at this specific vertex, push the position back, and then push to where it needs to be.
// Since this is morphing, compute both 3D and 2D positions and then blend.
// ****** 3D ******
// Check distance to the end plane and start plane, pick the plane that is closer
vec4 positionEc3D = czm_modelViewRelativeToEye * czm_translateRelativeToEye(position3DHigh, position3DLow); // w = 1.0, see czm_computePosition
float absStartPlaneDistance = abs(czm_planeDistance(startPlane3D, positionEc3D.xyz));
float absEndPlaneDistance = abs(czm_planeDistance(endPlane3D, positionEc3D.xyz));
vec3 planeDirection = czm_branchFreeTernary(absStartPlaneDistance < absEndPlaneDistance, startPlane3D.xyz, endPlane3D.xyz);
vec3 upOrDown = normalize(cross(rightPlane3D.xyz, planeDirection)); // Points "up" for start plane, "down" at end plane.
vec3 normalEC = normalize(cross(planeDirection, upOrDown)); // In practice, the opposite seems to work too.
// Nudge the top vertex upwards to prevent flickering
vec3 geodeticSurfaceNormal = normalize(cross(normalEC, forwardEc3D));
geodeticSurfaceNormal *= float(0.0 <= rightNormalAndTextureCoordinateNormalizationY.w && rightNormalAndTextureCoordinateNormalizationY.w <= 1.0);
geodeticSurfaceNormal *= MAX_TERRAIN_HEIGHT;
positionEc3D.xyz += geodeticSurfaceNormal;
// Determine if this vertex is on the "left" or "right"
normalEC *= sign(endNormalAndTextureCoordinateNormalizationX.w);
// A "perfect" implementation would push along normals according to the angle against forward.
// In practice, just pushing the normal out by halfWidth is sufficient for morph views.
positionEc3D.xyz += halfWidth * max(0.0, czm_metersPerPixel(positionEc3D)) * normalEC; // prevent artifacts when czm_metersPerPixel is negative (behind camera)
// ****** 2D ******
// Check distance to the end plane and start plane, pick the plane that is closer
vec4 positionEc2D = czm_modelViewRelativeToEye * czm_translateRelativeToEye(position2DHigh.zxy, position2DLow.zxy); // w = 1.0, see czm_computePosition
absStartPlaneDistance = abs(czm_planeDistance(startPlane2D, positionEc2D.xyz));
absEndPlaneDistance = abs(czm_planeDistance(endPlane2D, positionEc2D.xyz));
planeDirection = czm_branchFreeTernary(absStartPlaneDistance < absEndPlaneDistance, startPlane2D.xyz, endPlane2D.xyz);
upOrDown = normalize(cross(rightPlane2D.xyz, planeDirection)); // Points "up" for start plane, "down" at end plane.
normalEC = normalize(cross(planeDirection, upOrDown)); // In practice, the opposite seems to work too.
// Nudge the top vertex upwards to prevent flickering
geodeticSurfaceNormal = normalize(cross(normalEC, forwardEc2D));
geodeticSurfaceNormal *= float(0.0 <= texcoordNormalization2D.y && texcoordNormalization2D.y <= 1.0);
geodeticSurfaceNormal *= MAX_TERRAIN_HEIGHT;
positionEc2D.xyz += geodeticSurfaceNormal;
// Determine if this vertex is on the "left" or "right"
normalEC *= sign(texcoordNormalization2D.x);
#ifndef PER_INSTANCE_COLOR
// Use vertex's sidedness to compute its texture coordinate.
v_texcoordT = clamp(sign(texcoordNormalization2D.x), 0.0, 1.0);
#endif
// A "perfect" implementation would push along normals according to the angle against forward.
// In practice, just pushing the normal out by halfWidth is sufficient for morph views.
positionEc2D.xyz += halfWidth * max(0.0, czm_metersPerPixel(positionEc2D)) * normalEC; // prevent artifacts when czm_metersPerPixel is negative (behind camera)
// Blend for actual position
gl_Position = czm_projection * mix(positionEc2D, positionEc3D, czm_morphTime);
#ifdef ANGLE_VARYING
// Approximate relative screen space direction of the line.
vec2 approxLineDirection = normalize(vec2(v_forwardDirectionEC.x, -v_forwardDirectionEC.y));
approxLineDirection.y = czm_branchFreeTernary(approxLineDirection.x == 0.0 && approxLineDirection.y == 0.0, -1.0, approxLineDirection.y);
v_polylineAngle = czm_fastApproximateAtan(approxLineDirection.x, approxLineDirection.y);
#endif
}
`;var nan=y(x(),1),Q1=`in vec3 position3DHigh;
in vec3 position3DLow;
// In 2D and in 3D, texture coordinate normalization component signs encodes:
// * X sign - sidedness relative to right plane
// * Y sign - is negative OR magnitude is greater than 1.0 if vertex is on bottom of volume
#ifndef COLUMBUS_VIEW_2D
in vec4 startHiAndForwardOffsetX;
in vec4 startLoAndForwardOffsetY;
in vec4 startNormalAndForwardOffsetZ;
in vec4 endNormalAndTextureCoordinateNormalizationX;
in vec4 rightNormalAndTextureCoordinateNormalizationY;
#else
in vec4 startHiLo2D;
in vec4 offsetAndRight2D;
in vec4 startEndNormals2D;
in vec2 texcoordNormalization2D;
#endif
in float batchId;
out vec4 v_startPlaneNormalEcAndHalfWidth;
out vec4 v_endPlaneNormalEcAndBatchId;
out vec4 v_rightPlaneEC;
out vec4 v_endEcAndStartEcX;
out vec4 v_texcoordNormalizationAndStartEcYZ;
// For materials
#ifdef WIDTH_VARYING
out float v_width;
#endif
#ifdef ANGLE_VARYING
out float v_polylineAngle;
#endif
#ifdef PER_INSTANCE_COLOR
out vec4 v_color;
#endif
void main()
{
#ifdef COLUMBUS_VIEW_2D
vec3 ecStart = (czm_modelViewRelativeToEye * czm_translateRelativeToEye(vec3(0.0, startHiLo2D.xy), vec3(0.0, startHiLo2D.zw))).xyz;
vec3 forwardDirectionEC = czm_normal * vec3(0.0, offsetAndRight2D.xy);
vec3 ecEnd = forwardDirectionEC + ecStart;
forwardDirectionEC = normalize(forwardDirectionEC);
// Right plane
v_rightPlaneEC.xyz = czm_normal * vec3(0.0, offsetAndRight2D.zw);
v_rightPlaneEC.w = -dot(v_rightPlaneEC.xyz, ecStart);
// start plane
vec4 startPlaneEC;
startPlaneEC.xyz = czm_normal * vec3(0.0, startEndNormals2D.xy);
startPlaneEC.w = -dot(startPlaneEC.xyz, ecStart);
// end plane
vec4 endPlaneEC;
endPlaneEC.xyz = czm_normal * vec3(0.0, startEndNormals2D.zw);
endPlaneEC.w = -dot(endPlaneEC.xyz, ecEnd);
v_texcoordNormalizationAndStartEcYZ.x = abs(texcoordNormalization2D.x);
v_texcoordNormalizationAndStartEcYZ.y = texcoordNormalization2D.y;
#else // COLUMBUS_VIEW_2D
vec3 ecStart = (czm_modelViewRelativeToEye * czm_translateRelativeToEye(startHiAndForwardOffsetX.xyz, startLoAndForwardOffsetY.xyz)).xyz;
vec3 offset = czm_normal * vec3(startHiAndForwardOffsetX.w, startLoAndForwardOffsetY.w, startNormalAndForwardOffsetZ.w);
vec3 ecEnd = ecStart + offset;
vec3 forwardDirectionEC = normalize(offset);
// start plane
vec4 startPlaneEC;
startPlaneEC.xyz = czm_normal * startNormalAndForwardOffsetZ.xyz;
startPlaneEC.w = -dot(startPlaneEC.xyz, ecStart);
// end plane
vec4 endPlaneEC;
endPlaneEC.xyz = czm_normal * endNormalAndTextureCoordinateNormalizationX.xyz;
endPlaneEC.w = -dot(endPlaneEC.xyz, ecEnd);
// Right plane
v_rightPlaneEC.xyz = czm_normal * rightNormalAndTextureCoordinateNormalizationY.xyz;
v_rightPlaneEC.w = -dot(v_rightPlaneEC.xyz, ecStart);
v_texcoordNormalizationAndStartEcYZ.x = abs(endNormalAndTextureCoordinateNormalizationX.w);
v_texcoordNormalizationAndStartEcYZ.y = rightNormalAndTextureCoordinateNormalizationY.w;
#endif // COLUMBUS_VIEW_2D
v_endEcAndStartEcX.xyz = ecEnd;
v_endEcAndStartEcX.w = ecStart.x;
v_texcoordNormalizationAndStartEcYZ.zw = ecStart.yz;
#ifdef PER_INSTANCE_COLOR
v_color = czm_batchTable_color(batchId);
#endif // PER_INSTANCE_COLOR
// Compute a normal along which to "push" the position out, extending the miter depending on view distance.
// Position has already been "pushed" by unit length along miter normal, and miter normals are encoded in the planes.
// Decode the normal to use at this specific vertex, push the position back, and then push to where it needs to be.
vec4 positionRelativeToEye = czm_computePosition();
// Check distance to the end plane and start plane, pick the plane that is closer
vec4 positionEC = czm_modelViewRelativeToEye * positionRelativeToEye; // w = 1.0, see czm_computePosition
float absStartPlaneDistance = abs(czm_planeDistance(startPlaneEC, positionEC.xyz));
float absEndPlaneDistance = abs(czm_planeDistance(endPlaneEC, positionEC.xyz));
vec3 planeDirection = czm_branchFreeTernary(absStartPlaneDistance < absEndPlaneDistance, startPlaneEC.xyz, endPlaneEC.xyz);
vec3 upOrDown = normalize(cross(v_rightPlaneEC.xyz, planeDirection)); // Points "up" for start plane, "down" at end plane.
vec3 normalEC = normalize(cross(planeDirection, upOrDown)); // In practice, the opposite seems to work too.
// Extrude bottom vertices downward for far view distances, like for GroundPrimitives
upOrDown = cross(forwardDirectionEC, normalEC);
upOrDown = float(czm_sceneMode == czm_sceneMode3D) * upOrDown;
upOrDown = float(v_texcoordNormalizationAndStartEcYZ.y > 1.0 || v_texcoordNormalizationAndStartEcYZ.y < 0.0) * upOrDown;
upOrDown = min(GLOBE_MINIMUM_ALTITUDE, czm_geometricToleranceOverMeter * length(positionRelativeToEye.xyz)) * upOrDown;
positionEC.xyz += upOrDown;
v_texcoordNormalizationAndStartEcYZ.y = czm_branchFreeTernary(v_texcoordNormalizationAndStartEcYZ.y > 1.0, 0.0, abs(v_texcoordNormalizationAndStartEcYZ.y));
// Determine distance along normalEC to push for a volume of appropriate width.
// Make volumes about double pixel width for a conservative fit - in practice the
// extra cost here is minimal compared to the loose volume heights.
//
// N = normalEC (guaranteed "right-facing")
// R = rightEC
// p = angle between N and R
// w = distance to push along R if R == N
// d = distance to push along N
//
// N R
// { p| } * cos(p) = dot(N, R) = w / d
// d | |w * d = w / dot(N, R)
// { | }
// o---------- polyline segment ---->
//
float width = czm_batchTable_width(batchId);
#ifdef WIDTH_VARYING
v_width = width;
#endif
v_startPlaneNormalEcAndHalfWidth.xyz = startPlaneEC.xyz;
v_startPlaneNormalEcAndHalfWidth.w = width * 0.5;
v_endPlaneNormalEcAndBatchId.xyz = endPlaneEC.xyz;
v_endPlaneNormalEcAndBatchId.w = batchId;
width = width * max(0.0, czm_metersPerPixel(positionEC)); // width = distance to push along R
width = width / dot(normalEC, v_rightPlaneEC.xyz); // width = distance to push along N
// Determine if this vertex is on the "left" or "right"
#ifdef COLUMBUS_VIEW_2D
normalEC *= sign(texcoordNormalization2D.x);
#else
normalEC *= sign(endNormalAndTextureCoordinateNormalizationX.w);
#endif
positionEC.xyz += width * normalEC;
gl_Position = czm_depthClamp(czm_projection * positionEC);
#ifdef ANGLE_VARYING
// Approximate relative screen space direction of the line.
vec2 approxLineDirection = normalize(vec2(forwardDirectionEC.x, -forwardDirectionEC.y));
approxLineDirection.y = czm_branchFreeTernary(approxLineDirection.x == 0.0 && approxLineDirection.y == 0.0, -1.0, approxLineDirection.y);
v_polylineAngle = czm_fastApproximateAtan(approxLineDirection.x, approxLineDirection.y);
#endif
}
`;var fan=y(x(),1);var oan=y(x(),1),O1=`in vec3 position3DHigh;
in vec3 position3DLow;
in vec3 prevPosition3DHigh;
in vec3 prevPosition3DLow;
in vec3 nextPosition3DHigh;
in vec3 nextPosition3DLow;
in vec2 expandAndWidth;
in vec4 color;
in float batchId;
out vec4 v_color;
void main()
{
float expandDir = expandAndWidth.x;
float width = abs(expandAndWidth.y) + 0.5;
bool usePrev = expandAndWidth.y < 0.0;
vec4 p = czm_computePosition();
vec4 prev = czm_computePrevPosition();
vec4 next = czm_computeNextPosition();
float angle;
vec4 positionWC = getPolylineWindowCoordinates(p, prev, next, expandDir, width, usePrev, angle);
gl_Position = czm_viewportOrthographic * positionWC;
v_color = color;
}
`;var san=y(x(),1),Zl=`void clipLineSegmentToNearPlane(
vec3 p0,
vec3 p1,
out vec4 positionWC,
out bool clipped,
out bool culledByNearPlane,
out vec4 clippedPositionEC)
{
culledByNearPlane = false;
clipped = false;
vec3 p0ToP1 = p1 - p0;
float magnitude = length(p0ToP1);
vec3 direction = normalize(p0ToP1);
// Distance that p0 is behind the near plane. Negative means p0 is
// in front of the near plane.
float endPoint0Distance = czm_currentFrustum.x + p0.z;
// Camera looks down -Z.
// When moving a point along +Z: LESS VISIBLE
// * Points in front of the camera move closer to the camera.
// * Points behind the camrea move farther away from the camera.
// When moving a point along -Z: MORE VISIBLE
// * Points in front of the camera move farther away from the camera.
// * Points behind the camera move closer to the camera.
// Positive denominator: -Z, becoming more visible
// Negative denominator: +Z, becoming less visible
// Nearly zero: parallel to near plane
float denominator = -direction.z;
if (endPoint0Distance > 0.0 && abs(denominator) < czm_epsilon7)
{
// p0 is behind the near plane and the line to p1 is nearly parallel to
// the near plane, so cull the segment completely.
culledByNearPlane = true;
}
else if (endPoint0Distance > 0.0)
{
// p0 is behind the near plane, and the line to p1 is moving distinctly
// toward or away from it.
// t = (-plane distance - dot(plane normal, ray origin)) / dot(plane normal, ray direction)
float t = endPoint0Distance / denominator;
if (t < 0.0 || t > magnitude)
{
// Near plane intersection is not between the two points.
// We already confirmed p0 is behind the naer plane, so now
// we know the entire segment is behind it.
culledByNearPlane = true;
}
else
{
// Segment crosses the near plane, update p0 to lie exactly on it.
p0 = p0 + t * direction;
// Numerical noise might put us a bit on the wrong side of the near plane.
// Don't let that happen.
p0.z = min(p0.z, -czm_currentFrustum.x);
clipped = true;
}
}
clippedPositionEC = vec4(p0, 1.0);
positionWC = czm_eyeToWindowCoordinates(clippedPositionEC);
}
vec4 getPolylineWindowCoordinatesEC(vec4 positionEC, vec4 prevEC, vec4 nextEC, float expandDirection, float width, bool usePrevious, out float angle)
{
// expandDirection +1 is to the _left_ when looking from positionEC toward nextEC.
#ifdef POLYLINE_DASH
// Compute the window coordinates of the points.
vec4 positionWindow = czm_eyeToWindowCoordinates(positionEC);
vec4 previousWindow = czm_eyeToWindowCoordinates(prevEC);
vec4 nextWindow = czm_eyeToWindowCoordinates(nextEC);
// Determine the relative screen space direction of the line.
vec2 lineDir;
if (usePrevious) {
lineDir = normalize(positionWindow.xy - previousWindow.xy);
}
else {
lineDir = normalize(nextWindow.xy - positionWindow.xy);
}
angle = atan(lineDir.x, lineDir.y) - 1.570796327; // precomputed atan(1,0)
// Quantize the angle so it doesn't change rapidly between segments.
angle = floor(angle / czm_piOverFour + 0.5) * czm_piOverFour;
#endif
vec4 clippedPrevWC, clippedPrevEC;
bool prevSegmentClipped, prevSegmentCulled;
clipLineSegmentToNearPlane(prevEC.xyz, positionEC.xyz, clippedPrevWC, prevSegmentClipped, prevSegmentCulled, clippedPrevEC);
vec4 clippedNextWC, clippedNextEC;
bool nextSegmentClipped, nextSegmentCulled;
clipLineSegmentToNearPlane(nextEC.xyz, positionEC.xyz, clippedNextWC, nextSegmentClipped, nextSegmentCulled, clippedNextEC);
bool segmentClipped, segmentCulled;
vec4 clippedPositionWC, clippedPositionEC;
clipLineSegmentToNearPlane(positionEC.xyz, usePrevious ? prevEC.xyz : nextEC.xyz, clippedPositionWC, segmentClipped, segmentCulled, clippedPositionEC);
if (segmentCulled)
{
return vec4(0.0, 0.0, 0.0, 1.0);
}
vec2 directionToPrevWC = normalize(clippedPrevWC.xy - clippedPositionWC.xy);
vec2 directionToNextWC = normalize(clippedNextWC.xy - clippedPositionWC.xy);
// If a segment was culled, we can't use the corresponding direction
// computed above. We should never see both of these be true without
// \`segmentCulled\` above also being true.
if (prevSegmentCulled)
{
directionToPrevWC = -directionToNextWC;
}
else if (nextSegmentCulled)
{
directionToNextWC = -directionToPrevWC;
}
vec2 thisSegmentForwardWC, otherSegmentForwardWC;
if (usePrevious)
{
thisSegmentForwardWC = -directionToPrevWC;
otherSegmentForwardWC = directionToNextWC;
}
else
{
thisSegmentForwardWC = directionToNextWC;
otherSegmentForwardWC = -directionToPrevWC;
}
vec2 thisSegmentLeftWC = vec2(-thisSegmentForwardWC.y, thisSegmentForwardWC.x);
vec2 leftWC = thisSegmentLeftWC;
float expandWidth = width * 0.5;
// When lines are split at the anti-meridian, the position may be at the
// same location as the next or previous position, and we need to handle
// that to avoid producing NaNs.
if (!czm_equalsEpsilon(prevEC.xyz - positionEC.xyz, vec3(0.0), czm_epsilon1) && !czm_equalsEpsilon(nextEC.xyz - positionEC.xyz, vec3(0.0), czm_epsilon1))
{
vec2 otherSegmentLeftWC = vec2(-otherSegmentForwardWC.y, otherSegmentForwardWC.x);
vec2 leftSumWC = thisSegmentLeftWC + otherSegmentLeftWC;
float leftSumLength = length(leftSumWC);
leftWC = leftSumLength < czm_epsilon6 ? thisSegmentLeftWC : (leftSumWC / leftSumLength);
// The sine of the angle between the two vectors is given by the formula
// |a x b| = |a||b|sin(theta)
// which is
// float sinAngle = length(cross(vec3(leftWC, 0.0), vec3(-thisSegmentForwardWC, 0.0)));
// Because the z components of both vectors are zero, the x and y coordinate will be zero.
// Therefore, the sine of the angle is just the z component of the cross product.
vec2 u = -thisSegmentForwardWC;
vec2 v = leftWC;
float sinAngle = abs(u.x * v.y - u.y * v.x);
expandWidth = clamp(expandWidth / sinAngle, 0.0, width * 2.0);
}
vec2 offset = leftWC * expandDirection * expandWidth * czm_pixelRatio;
return vec4(clippedPositionWC.xy + offset, -clippedPositionWC.z, 1.0) * (czm_projection * clippedPositionEC).w;
}
vec4 getPolylineWindowCoordinates(vec4 position, vec4 previous, vec4 next, float expandDirection, float width, bool usePrevious, out float angle)
{
vec4 positionEC = czm_modelViewRelativeToEye * position;
vec4 prevEC = czm_modelViewRelativeToEye * previous;
vec4 nextEC = czm_modelViewRelativeToEye * next;
return getPolylineWindowCoordinatesEC(positionEC, prevEC, nextEC, expandDirection, width, usePrevious, angle);
}
`;var AMe=`#define CLIP_POLYLINE
${Zl}
${O1}`,gMe=Bx;function Mx(e){e=e??Q.EMPTY_OBJECT;let t=e.translucent??!0,n=!1,i=Mx.VERTEX_FORMAT;this.material=void 0,this.translucent=t,this._vertexShaderSource=e.vertexShaderSource??AMe,this._fragmentShaderSource=e.fragmentShaderSource??gMe,this._renderState=To.getDefaultRenderState(t,n,e.renderState),this._closed=n,this._vertexFormat=i}Object.defineProperties(Mx.prototype,{vertexShaderSource:{get:function(){return this._vertexShaderSource}},fragmentShaderSource:{get:function(){return this._fragmentShaderSource}},renderState:{get:function(){return this._renderState}},closed:{get:function(){return this._closed}},vertexFormat:{get:function(){return this._vertexFormat}}});Mx.VERTEX_FORMAT=ve.POSITION_ONLY;Mx.prototype.getFragmentShaderSource=To.prototype.getFragmentShaderSource;Mx.prototype.isTranslucent=To.prototype.isTranslucent;Mx.prototype.getRenderState=To.prototype.getRenderState;var Vs=Mx;var Ran=y(x(),1);var Aan=y(x(),1),z1=`in vec3 position3DHigh;
in vec3 position3DLow;
in vec3 prevPosition3DHigh;
in vec3 prevPosition3DLow;
in vec3 nextPosition3DHigh;
in vec3 nextPosition3DLow;
in vec2 expandAndWidth;
in vec2 st;
in float batchId;
out float v_width;
out vec2 v_st;
out float v_polylineAngle;
void main()
{
float expandDir = expandAndWidth.x;
float width = abs(expandAndWidth.y) + 0.5;
bool usePrev = expandAndWidth.y < 0.0;
vec4 p = czm_computePosition();
vec4 prev = czm_computePrevPosition();
vec4 next = czm_computeNextPosition();
float angle;
vec4 positionWC = getPolylineWindowCoordinates(p, prev, next, expandDir, width, usePrev, angle);
gl_Position = czm_viewportOrthographic * positionWC;
v_width = width;
v_st.s = st.s;
v_st.t = czm_writeNonPerspective(st.t, gl_Position.w);
v_polylineAngle = angle;
}
`;var ban=y(x(),1),vx=`#ifdef VECTOR_TILE
uniform vec4 u_highlightColor;
#endif
in vec2 v_st;
void main()
{
czm_materialInput materialInput;
vec2 st = v_st;
st.t = czm_readNonPerspective(st.t, gl_FragCoord.w);
materialInput.s = st.s;
materialInput.st = st;
materialInput.str = vec3(st, 0.0);
czm_material material = czm_getMaterial(materialInput);
out_FragColor = vec4(material.diffuse + material.emission, material.alpha);
#ifdef VECTOR_TILE
out_FragColor *= u_highlightColor;
#endif
czm_writeLogDepth();
}
`;var bMe=`#define CLIP_POLYLINE
${Zl}
${z1}`,yMe=vx;function Ux(e){e=e??Q.EMPTY_OBJECT;let t=e.translucent??!0,n=!1,i=Ux.VERTEX_FORMAT;this.material=l(e.material)?e.material:Oi.fromType(Oi.ColorType),this.translucent=t,this._vertexShaderSource=e.vertexShaderSource??bMe,this._fragmentShaderSource=e.fragmentShaderSource??yMe,this._renderState=To.getDefaultRenderState(t,n,e.renderState),this._closed=n,this._vertexFormat=i}Object.defineProperties(Ux.prototype,{vertexShaderSource:{get:function(){let e=this._vertexShaderSource;return this.material.shaderSource.search(/in\s+float\s+v_polylineAngle;/g)!==-1&&(e=`#define POLYLINE_DASH
${e}`),e}},fragmentShaderSource:{get:function(){return this._fragmentShaderSource}},renderState:{get:function(){return this._renderState}},closed:{get:function(){return this._closed}},vertexFormat:{get:function(){return this._vertexFormat}}});Ux.VERTEX_FORMAT=ve.POSITION_AND_ST;Ux.prototype.getFragmentShaderSource=To.prototype.getFragmentShaderSource;Ux.prototype.isTranslucent=To.prototype.isTranslucent;Ux.prototype.getRenderState=To.prototype.getRenderState;var tc=Ux;function YA(e){e=e??Q.EMPTY_OBJECT,this.geometryInstances=e.geometryInstances,this._hasPerInstanceColors=!0;let t=e.appearance;l(t)||(t=new tc),this.appearance=t,this.show=e.show??!0,this.classificationType=e.classificationType??ti.BOTH,this.debugShowBoundingVolume=e.debugShowBoundingVolume??!1,this._debugShowShadowVolume=e.debugShowShadowVolume??!1,this._primitiveOptions={geometryInstances:void 0,appearance:void 0,vertexCacheOptimize:!1,interleave:e.interleave??!1,releaseGeometryInstances:e.releaseGeometryInstances??!0,allowPicking:e.allowPicking??!0,asynchronous:e.asynchronous??!0,compressVertices:!1,_createShaderProgramFunction:void 0,_createCommandsFunction:void 0,_updateAndQueueCommandsFunction:void 0},this._zIndex=void 0,this._ready=!1,this._primitive=void 0,this._sp=void 0,this._sp2D=void 0,this._spMorph=void 0,this._renderState=Dce(!1),this._renderState3DTiles=Dce(!0),this._renderStateMorph=Qe.fromCache({cull:{enabled:!0,face:wi.FRONT},depthTest:{enabled:!0},blending:ln.PRE_MULTIPLIED_ALPHA_BLEND,depthMask:!1})}Object.defineProperties(YA.prototype,{interleave:{get:function(){return this._primitiveOptions.interleave}},releaseGeometryInstances:{get:function(){return this._primitiveOptions.releaseGeometryInstances}},allowPicking:{get:function(){return this._primitiveOptions.allowPicking}},asynchronous:{get:function(){return this._primitiveOptions.asynchronous}},ready:{get:function(){return this._ready}},debugShowShadowVolume:{get:function(){return this._debugShowShadowVolume}}});YA.initializeTerrainHeights=function(){return Gi.initialize()};function xMe(e,t,n){let i=t.context,o=e._primitive,r=o._attributeLocations,s=o._batchTable.getVertexShaderCallback()(Q1);s=Nn._appendShowToShader(o,s),s=Nn._appendDistanceDisplayConditionToShader(o,s),s=Nn._modifyShaderPosition(e,s,t.scene3DOnly);let a=o._batchTable.getVertexShaderCallback()(k1);a=Nn._appendShowToShader(o,a),a=Nn._appendDistanceDisplayConditionToShader(o,a),a=Nn._modifyShaderPosition(e,a,t.scene3DOnly);let c=o._batchTable.getVertexShaderCallback()(U1),d=[`GLOBE_MINIMUM_ALTITUDE ${t.mapProjection.ellipsoid.minimumRadius.toFixed(1)}`],u="",h="";l(n.material)?(h=l(n.material)?n.material.shaderSource:"",h.search(/in\s+float\s+v_polylineAngle;/g)!==-1&&d.push("ANGLE_VARYING"),h.search(/in\s+float\s+v_width;/g)!==-1&&d.push("WIDTH_VARYING")):u="PER_INSTANCE_COLOR",d.push(u);let p=e.debugShowShadowVolume?["DEBUG_SHOW_VOLUME",u]:[u],A=new ze({defines:d,sources:[s]}),f=new ze({defines:p,sources:[h,c]});e._sp=tn.replaceCache({context:i,shaderProgram:o._sp,vertexShaderSource:A,fragmentShaderSource:f,attributeLocations:r});let b=i.shaderCache.getDerivedShaderProgram(e._sp,"2dColor");if(!l(b)){let T=new ze({defines:d.concat(["COLUMBUS_VIEW_2D"]),sources:[s]});b=i.shaderCache.createDerivedShaderProgram(e._sp,"2dColor",{context:i,shaderProgram:e._sp2D,vertexShaderSource:T,fragmentShaderSource:f,attributeLocations:r})}e._sp2D=b;let C=i.shaderCache.getDerivedShaderProgram(e._sp,"MorphColor");if(!l(C)){let T=new ze({defines:d.concat([`MAX_TERRAIN_HEIGHT ${Gi._defaultMaxTerrainHeight.toFixed(1)}`]),sources:[a]});c=o._batchTable.getVertexShaderCallback()(D1);let E=new ze({defines:p,sources:[h,c]});C=i.shaderCache.createDerivedShaderProgram(e._sp,"MorphColor",{context:i,shaderProgram:e._spMorph,vertexShaderSource:T,fragmentShaderSource:E,attributeLocations:r})}e._spMorph=C}function Dce(e){return Qe.fromCache({cull:{enabled:!0},blending:ln.PRE_MULTIPLIED_ALPHA_BLEND,depthMask:!1,stencilTest:{enabled:e,frontFunction:ni.EQUAL,frontOperation:{fail:Vt.KEEP,zFail:Vt.KEEP,zPass:Vt.KEEP},backFunction:ni.EQUAL,backOperation:{fail:Vt.KEEP,zFail:Vt.KEEP,zPass:Vt.KEEP},reference:Jt.CESIUM_3D_TILE_MASK,mask:Jt.CESIUM_3D_TILE_MASK}})}function CMe(e,t,n,i,o,r){let s=e._primitive,a=s._va.length;o.length=a,r.length=a;let d=t instanceof Vs?{}:n._uniforms,u=s._batchTable.getUniformMapCallback()(d);for(let h=0;h<a;h++){let p=s._va[h],A=o[h];l(A)||(A=o[h]=new ot({owner:e,primitiveType:s._primitiveType})),A.vertexArray=p,A.renderState=e._renderState,A.shaderProgram=e._sp,A.uniformMap=u,A.pass=Ge.TERRAIN_CLASSIFICATION,A.pickId="czm_batchTable_pickColor(v_endPlaneNormalEcAndBatchId.w)";let f=ot.shallowClone(A,A.derivedCommands.tileset);f.renderState=e._renderState3DTiles,f.pass=Ge.CESIUM_3D_TILE_CLASSIFICATION,A.derivedCommands.tileset=f;let b=ot.shallowClone(A,A.derivedCommands.color2D);b.shaderProgram=e._sp2D,A.derivedCommands.color2D=b;let C=ot.shallowClone(f,f.derivedCommands.color2D);C.shaderProgram=e._sp2D,f.derivedCommands.color2D=C;let T=ot.shallowClone(A,A.derivedCommands.colorMorph);T.renderState=e._renderStateMorph,T.shaderProgram=e._spMorph,T.pickId="czm_batchTable_pickColor(v_batchId)",A.derivedCommands.colorMorph=T}}function kce(e,t,n,i,o,r,s){n.mode===se.MORPHING?t=t.derivedCommands.colorMorph:n.mode!==se.SCENE3D&&(t=t.derivedCommands.color2D),t.modelMatrix=i,t.boundingVolume=r,t.cull=o,t.debugShowBoundingVolume=s,n.commandList.push(t)}function TMe(e,t,n,i,o,r,s){let a=e._primitive;Nn._updateBoundingVolumes(a,t,o);let c;t.mode===se.SCENE3D?c=a._boundingSphereWC:t.mode===se.COLUMBUS_VIEW?c=a._boundingSphereCV:t.mode===se.SCENE2D&&l(a._boundingSphere2D)?c=a._boundingSphere2D:l(a._boundingSphereMorph)&&(c=a._boundingSphereMorph);let d=t.mode===se.MORPHING,u=e.classificationType,h=u!==ti.CESIUM_3D_TILE,p=u!==ti.TERRAIN&&!d,A,f=t.passes;if(f.render||f.pick&&a.allowPicking){let b=n.length;for(let C=0;C<b;++C){let T=c[C];h&&(A=n[C],kce(e,A,t,o,r,T,s)),p&&(A=n[C].derivedCommands.tileset,kce(e,A,t,o,r,T,s))}}}YA.prototype.update=function(e){if(!l(this._primitive)&&!l(this.geometryInstances))return;if(!Gi.initialized){YA.initializeTerrainHeights();return}let t,n=this,i=this._primitiveOptions;if(!l(this._primitive)){let o=Array.isArray(this.geometryInstances)?this.geometryInstances:[this.geometryInstances],r=o.length,s=new Array(r),a;for(t=0;t<r;++t)if(a=o[t].attributes,!l(a)||!l(a.color)){this._hasPerInstanceColors=!1;break}for(t=0;t<r;++t){let c=o[t];a={};let d=c.attributes;for(let u in d)d.hasOwnProperty(u)&&(a[u]=d[u]);l(a.width)||(a.width=new kc({componentDatatype:H.UNSIGNED_BYTE,componentsPerAttribute:1,value:[c.geometry.width]})),c.geometry._scene3DOnly=e.scene3DOnly,Yx.setProjectionAndEllipsoid(c.geometry,e.mapProjection),s[t]=new wt({geometry:c.geometry,attributes:a,id:c.id,pickPrimitive:n})}i.geometryInstances=s,i.appearance=this.appearance,i._createShaderProgramFunction=function(c,d,u){xMe(n,d,u)},i._createCommandsFunction=function(c,d,u,h,p,A,f){CMe(n,d,u,h,A,f)},i._updateAndQueueCommandsFunction=function(c,d,u,h,p,A,f,b){TMe(n,d,u,h,p,A,f)},this._primitive=new Nn(i)}if(this.appearance instanceof Vs&&!this._hasPerInstanceColors)throw new fe("All GeometryInstances must have color attributes to use PolylineColorAppearance with GroundPolylinePrimitive.");this._primitive.appearance=this.appearance,this._primitive.show=this.show,this._primitive.debugShowBoundingVolume=this.debugShowBoundingVolume,this._primitive.update(e),e.afterRender.push(()=>{!this._ready&&l(this._primitive)&&this._primitive.ready&&(this._ready=!0,this.releaseGeometryInstances&&(this.geometryInstances=void 0))})};YA.prototype.getGeometryInstanceAttributes=function(e){return this._primitive.getGeometryInstanceAttributes(e)};YA.isSupported=function(e){return e.frameState.context.depthTexture};YA.prototype.isDestroyed=function(){return!1};YA.prototype.destroy=function(){return this._primitive=this._primitive&&this._primitive.destroy(),this._sp=this._sp&&this._sp.destroy(),this._sp2D=void 0,this._spMorph=void 0,he(this)};var Vh=YA;var Rcn=y(x(),1);var Ccn=y(x(),1);var fcn=y(x(),1);var EMe=new M(1,1),SMe=!1,_Me=U.WHITE;function LS(e){e=e??Q.EMPTY_OBJECT,this._definitionChanged=new xe,this._image=void 0,this._imageSubscription=void 0,this._repeat=void 0,this._repeatSubscription=void 0,this._color=void 0,this._colorSubscription=void 0,this._transparent=void 0,this._transparentSubscription=void 0,this.image=e.image,this.repeat=e.repeat,this.color=e.color,this.transparent=e.transparent}Object.defineProperties(LS.prototype,{isConstant:{get:function(){return K.isConstant(this._image)&&K.isConstant(this._repeat)}},definitionChanged:{get:function(){return this._definitionChanged}},image:be("image"),repeat:be("repeat"),color:be("color"),transparent:be("transparent")});LS.prototype.getType=function(e){return"Image"};var IMe=new q;LS.prototype.getValue=function(e,t){return l(e)||(e=q.now(IMe)),l(t)||(t={}),t.image=K.getValueOrUndefined(this._image,e),t.repeat=K.getValueOrClonedDefault(this._repeat,e,EMe,t.repeat),t.color=K.getValueOrClonedDefault(this._color,e,_Me,t.color),K.getValueOrDefault(this._transparent,e,SMe)&&(t.color.alpha=Math.min(.99,t.color.alpha)),t};LS.prototype.equals=function(e){return this===e||e instanceof LS&&K.equals(this._image,e._image)&&K.equals(this._repeat,e._repeat)&&K.equals(this._color,e._color)&&K.equals(this._transparent,e._transparent)};var s0=LS;function ZMe(e){if(e instanceof U)return new Kt(e);if(typeof e=="string"||e instanceof Le||e instanceof HTMLCanvasElement||e instanceof HTMLVideoElement){let t=new s0;return t.image=e,t}}function RMe(e,t){return be(e,t,ZMe)}var or=RMe;function H1(e){this._definitionChanged=new xe,this._show=void 0,this._showSubscription=void 0,this._dimensions=void 0,this._dimensionsSubscription=void 0,this._heightReference=void 0,this._heightReferenceSubscription=void 0,this._fill=void 0,this._fillSubscription=void 0,this._material=void 0,this._materialSubscription=void 0,this._outline=void 0,this._outlineSubscription=void 0,this._outlineColor=void 0,this._outlineColorSubscription=void 0,this._outlineWidth=void 0,this._outlineWidthSubscription=void 0,this._shadows=void 0,this._shadowsSubscription=void 0,this._distanceDisplayCondition=void 0,this._distanceDisplayConditionSubscription=void 0,this.merge(e??Q.EMPTY_OBJECT)}Object.defineProperties(H1.prototype,{definitionChanged:{get:function(){return this._definitionChanged}},show:be("show"),dimensions:be("dimensions"),heightReference:be("heightReference"),fill:be("fill"),material:or("material"),outline:be("outline"),outlineColor:be("outlineColor"),outlineWidth:be("outlineWidth"),shadows:be("shadows"),distanceDisplayCondition:be("distanceDisplayCondition")});H1.prototype.clone=function(e){return l(e)?(e.show=this.show,e.dimensions=this.dimensions,e.heightReference=this.heightReference,e.fill=this.fill,e.material=this.material,e.outline=this.outline,e.outlineColor=this.outlineColor,e.outlineWidth=this.outlineWidth,e.shadows=this.shadows,e.distanceDisplayCondition=this.distanceDisplayCondition,e):new H1(this)};H1.prototype.merge=function(e){this.show=this.show??e.show,this.dimensions=this.dimensions??e.dimensions,this.heightReference=this.heightReference??e.heightReference,this.fill=this.fill??e.fill,this.material=this.material??e.material,this.outline=this.outline??e.outline,this.outlineColor=this.outlineColor??e.outlineColor,this.outlineWidth=this.outlineWidth??e.outlineWidth,this.shadows=this.shadows??e.shadows,this.distanceDisplayCondition=this.distanceDisplayCondition??e.distanceDisplayCondition};var Dx=H1;var Ocn=y(x(),1);var Gcn=y(x(),1),VMe={FIXED:0,INERTIAL:1},Ni=Object.freeze(VMe);var Xcn=y(x(),1);function WS(){fe.throwInstantiationError()}Object.defineProperties(WS.prototype,{isConstant:{get:fe.throwInstantiationError},definitionChanged:{get:fe.throwInstantiationError},referenceFrame:{get:fe.throwInstantiationError}});WS.prototype.getValue=fe.throwInstantiationError;WS.prototype.getValueInReferenceFrame=fe.throwInstantiationError;WS.prototype.equals=fe.throwInstantiationError;var Qce=new $;WS.convertToReferenceFrame=function(e,t,n,i,o){if(!l(t))return t;if(l(o)||(o=new m),n===i)return m.clone(t,o);let r=bt.computeIcrfToCentralBodyFixedMatrix(e,Qce);if(n===Ni.INERTIAL)return $.multiplyByVector(r,t,o);if(n===Ni.FIXED)return $.multiplyByVector($.transpose(r,Qce),t,o)};var Gh=WS;function kx(e,t){this._definitionChanged=new xe,this._value=m.clone(e),this._referenceFrame=t??Ni.FIXED}Object.defineProperties(kx.prototype,{isConstant:{get:function(){return!l(this._value)||this._referenceFrame===Ni.FIXED}},definitionChanged:{get:function(){return this._definitionChanged}},referenceFrame:{get:function(){return this._referenceFrame}}});var GMe=new q;kx.prototype.getValue=function(e,t){return l(e)||(e=q.now(GMe)),this.getValueInReferenceFrame(e,Ni.FIXED,t)};kx.prototype.setValue=function(e,t){let n=!1;m.equals(this._value,e)||(n=!0,this._value=m.clone(e)),l(t)&&this._referenceFrame!==t&&(n=!0,this._referenceFrame=t),n&&this._definitionChanged.raiseEvent(this)};kx.prototype.getValueInReferenceFrame=function(e,t,n){return Gh.convertToReferenceFrame(e,this._value,this._referenceFrame,t,n)};kx.prototype.equals=function(e){return this===e||e instanceof kx&&m.equals(this._value,e._value)&&this._referenceFrame===e._referenceFrame};var Rl=kx;var $cn=y(x(),1);function J1(e){this._definitionChanged=new xe,this._show=void 0,this._showSubscription=void 0,this._positions=void 0,this._positionsSubscription=void 0,this._width=void 0,this._widthSubscription=void 0,this._height=void 0,this._heightSubscription=void 0,this._heightReference=void 0,this._heightReferenceSubscription=void 0,this._extrudedHeight=void 0,this._extrudedHeightSubscription=void 0,this._extrudedHeightReference=void 0,this._extrudedHeightReferenceSubscription=void 0,this._cornerType=void 0,this._cornerTypeSubscription=void 0,this._granularity=void 0,this._granularitySubscription=void 0,this._fill=void 0,this._fillSubscription=void 0,this._material=void 0,this._materialSubscription=void 0,this._outline=void 0,this._outlineSubscription=void 0,this._outlineColor=void 0,this._outlineColorSubscription=void 0,this._outlineWidth=void 0,this._outlineWidthSubscription=void 0,this._shadows=void 0,this._shadowsSubscription=void 0,this._distanceDisplayCondition=void 0,this._distanceDisplayConditionSubscription=void 0,this._classificationType=void 0,this._classificationTypeSubscription=void 0,this._zIndex=void 0,this._zIndexSubscription=void 0,this.merge(e??Q.EMPTY_OBJECT)}Object.defineProperties(J1.prototype,{definitionChanged:{get:function(){return this._definitionChanged}},show:be("show"),positions:be("positions"),width:be("width"),height:be("height"),heightReference:be("heightReference"),extrudedHeight:be("extrudedHeight"),extrudedHeightReference:be("extrudedHeightReference"),cornerType:be("cornerType"),granularity:be("granularity"),fill:be("fill"),material:or("material"),outline:be("outline"),outlineColor:be("outlineColor"),outlineWidth:be("outlineWidth"),shadows:be("shadows"),distanceDisplayCondition:be("distanceDisplayCondition"),classificationType:be("classificationType"),zIndex:be("zIndex")});J1.prototype.clone=function(e){return l(e)?(e.show=this.show,e.positions=this.positions,e.width=this.width,e.height=this.height,e.heightReference=this.heightReference,e.extrudedHeight=this.extrudedHeight,e.extrudedHeightReference=this.extrudedHeightReference,e.cornerType=this.cornerType,e.granularity=this.granularity,e.fill=this.fill,e.material=this.material,e.outline=this.outline,e.outlineColor=this.outlineColor,e.outlineWidth=this.outlineWidth,e.shadows=this.shadows,e.distanceDisplayCondition=this.distanceDisplayCondition,e.classificationType=this.classificationType,e.zIndex=this.zIndex,e):new J1(this)};J1.prototype.merge=function(e){this.show=this.show??e.show,this.positions=this.positions??e.positions,this.width=this.width??e.width,this.height=this.height??e.height,this.heightReference=this.heightReference??e.heightReference,this.extrudedHeight=this.extrudedHeight??e.extrudedHeight,this.extrudedHeightReference=this.extrudedHeightReference??e.extrudedHeightReference,this.cornerType=this.cornerType??e.cornerType,this.granularity=this.granularity??e.granularity,this.fill=this.fill??e.fill,this.material=this.material??e.material,this.outline=this.outline??e.outline,this.outlineColor=this.outlineColor??e.outlineColor,this.outlineWidth=this.outlineWidth??e.outlineWidth,this.shadows=this.shadows??e.shadows,this.distanceDisplayCondition=this.distanceDisplayCondition??e.distanceDisplayCondition,this.classificationType=this.classificationType??e.classificationType,this.zIndex=this.zIndex??e.zIndex};var Qx=J1;var nln=y(x(),1);function LMe(e){return e}function WMe(e,t){return be(e,t,LMe)}var Vl=WMe;var lln=y(x(),1);function K1(e){this._definitionChanged=new xe,this._show=void 0,this._showSubscription=void 0,this._length=void 0,this._lengthSubscription=void 0,this._topRadius=void 0,this._topRadiusSubscription=void 0,this._bottomRadius=void 0,this._bottomRadiusSubscription=void 0,this._heightReference=void 0,this._heightReferenceSubscription=void 0,this._fill=void 0,this._fillSubscription=void 0,this._material=void 0,this._materialSubscription=void 0,this._outline=void 0,this._outlineSubscription=void 0,this._outlineColor=void 0,this._outlineColorSubscription=void 0,this._outlineWidth=void 0,this._outlineWidthSubscription=void 0,this._numberOfVerticalLines=void 0,this._numberOfVerticalLinesSubscription=void 0,this._slices=void 0,this._slicesSubscription=void 0,this._shadows=void 0,this._shadowsSubscription=void 0,this._distanceDisplayCondition=void 0,this._distanceDisplayConditionSubscription=void 0,this.merge(e??Q.EMPTY_OBJECT)}Object.defineProperties(K1.prototype,{definitionChanged:{get:function(){return this._definitionChanged}},show:be("show"),length:be("length"),topRadius:be("topRadius"),bottomRadius:be("bottomRadius"),heightReference:be("heightReference"),fill:be("fill"),material:or("material"),outline:be("outline"),outlineColor:be("outlineColor"),outlineWidth:be("outlineWidth"),numberOfVerticalLines:be("numberOfVerticalLines"),slices:be("slices"),shadows:be("shadows"),distanceDisplayCondition:be("distanceDisplayCondition")});K1.prototype.clone=function(e){return l(e)?(e.show=this.show,e.length=this.length,e.topRadius=this.topRadius,e.bottomRadius=this.bottomRadius,e.heightReference=this.heightReference,e.fill=this.fill,e.material=this.material,e.outline=this.outline,e.outlineColor=this.outlineColor,e.outlineWidth=this.outlineWidth,e.numberOfVerticalLines=this.numberOfVerticalLines,e.slices=this.slices,e.shadows=this.shadows,e.distanceDisplayCondition=this.distanceDisplayCondition,e):new K1(this)};K1.prototype.merge=function(e){this.show=this.show??e.show,this.length=this.length??e.length,this.topRadius=this.topRadius??e.topRadius,this.bottomRadius=this.bottomRadius??e.bottomRadius,this.heightReference=this.heightReference??e.heightReference,this.fill=this.fill??e.fill,this.material=this.material??e.material,this.outline=this.outline??e.outline,this.outlineColor=this.outlineColor??e.outlineColor,this.outlineWidth=this.outlineWidth??e.outlineWidth,this.numberOfVerticalLines=this.numberOfVerticalLines??e.numberOfVerticalLines,this.slices=this.slices??e.slices,this.shadows=this.shadows??e.shadows,this.distanceDisplayCondition=this.distanceDisplayCondition??e.distanceDisplayCondition};var Ox=K1;var Aln=y(x(),1);function j1(e){this._definitionChanged=new xe,this._show=void 0,this._showSubscription=void 0,this._semiMajorAxis=void 0,this._semiMajorAxisSubscription=void 0,this._semiMinorAxis=void 0,this._semiMinorAxisSubscription=void 0,this._height=void 0,this._heightSubscription=void 0,this._heightReference=void 0,this._heightReferenceSubscription=void 0,this._extrudedHeight=void 0,this._extrudedHeightSubscription=void 0,this._extrudedHeightReference=void 0,this._extrudedHeightReferenceSubscription=void 0,this._rotation=void 0,this._rotationSubscription=void 0,this._stRotation=void 0,this._stRotationSubscription=void 0,this._granularity=void 0,this._granularitySubscription=void 0,this._fill=void 0,this._fillSubscription=void 0,this._material=void 0,this._materialSubscription=void 0,this._outline=void 0,this._outlineSubscription=void 0,this._outlineColor=void 0,this._outlineColorSubscription=void 0,this._outlineWidth=void 0,this._outlineWidthSubscription=void 0,this._numberOfVerticalLines=void 0,this._numberOfVerticalLinesSubscription=void 0,this._shadows=void 0,this._shadowsSubscription=void 0,this._distanceDisplayCondition=void 0,this._distanceDisplayConditionSubscription=void 0,this._classificationType=void 0,this._classificationTypeSubscription=void 0,this._zIndex=void 0,this._zIndexSubscription=void 0,this.merge(e??Q.EMPTY_OBJECT)}Object.defineProperties(j1.prototype,{definitionChanged:{get:function(){return this._definitionChanged}},show:be("show"),semiMajorAxis:be("semiMajorAxis"),semiMinorAxis:be("semiMinorAxis"),height:be("height"),heightReference:be("heightReference"),extrudedHeight:be("extrudedHeight"),extrudedHeightReference:be("extrudedHeightReference"),rotation:be("rotation"),stRotation:be("stRotation"),granularity:be("granularity"),fill:be("fill"),material:or("material"),outline:be("outline"),outlineColor:be("outlineColor"),outlineWidth:be("outlineWidth"),numberOfVerticalLines:be("numberOfVerticalLines"),shadows:be("shadows"),distanceDisplayCondition:be("distanceDisplayCondition"),classificationType:be("classificationType"),zIndex:be("zIndex")});j1.prototype.clone=function(e){return l(e)?(e.show=this.show,e.semiMajorAxis=this.semiMajorAxis,e.semiMinorAxis=this.semiMinorAxis,e.height=this.height,e.heightReference=this.heightReference,e.extrudedHeight=this.extrudedHeight,e.extrudedHeightReference=this.extrudedHeightReference,e.rotation=this.rotation,e.stRotation=this.stRotation,e.granularity=this.granularity,e.fill=this.fill,e.material=this.material,e.outline=this.outline,e.outlineColor=this.outlineColor,e.outlineWidth=this.outlineWidth,e.numberOfVerticalLines=this.numberOfVerticalLines,e.shadows=this.shadows,e.distanceDisplayCondition=this.distanceDisplayCondition,e.classificationType=this.classificationType,e.zIndex=this.zIndex,e):new j1(this)};j1.prototype.merge=function(e){this.show=this.show??e.show,this.semiMajorAxis=this.semiMajorAxis??e.semiMajorAxis,this.semiMinorAxis=this.semiMinorAxis??e.semiMinorAxis,this.height=this.height??e.height,this.heightReference=this.heightReference??e.heightReference,this.extrudedHeight=this.extrudedHeight??e.extrudedHeight,this.extrudedHeightReference=this.extrudedHeightReference??e.extrudedHeightReference,this.rotation=this.rotation??e.rotation,this.stRotation=this.stRotation??e.stRotation,this.granularity=this.granularity??e.granularity,this.fill=this.fill??e.fill,this.material=this.material??e.material,this.outline=this.outline??e.outline,this.outlineColor=this.outlineColor??e.outlineColor,this.outlineWidth=this.outlineWidth??e.outlineWidth,this.numberOfVerticalLines=this.numberOfVerticalLines??e.numberOfVerticalLines,this.shadows=this.shadows??e.shadows,this.distanceDisplayCondition=this.distanceDisplayCondition??e.distanceDisplayCondition,this.classificationType=this.classificationType??e.classificationType,this.zIndex=this.zIndex??e.zIndex};var zx=j1;var Eln=y(x(),1);function q1(e){this._definitionChanged=new xe,this._show=void 0,this._showSubscription=void 0,this._radii=void 0,this._radiiSubscription=void 0,this._innerRadii=void 0,this._innerRadiiSubscription=void 0,this._minimumClock=void 0,this._minimumClockSubscription=void 0,this._maximumClock=void 0,this._maximumClockSubscription=void 0,this._minimumCone=void 0,this._minimumConeSubscription=void 0,this._maximumCone=void 0,this._maximumConeSubscription=void 0,this._heightReference=void 0,this._heightReferenceSubscription=void 0,this._fill=void 0,this._fillSubscription=void 0,this._material=void 0,this._materialSubscription=void 0,this._outline=void 0,this._outlineSubscription=void 0,this._outlineColor=void 0,this._outlineColorSubscription=void 0,this._outlineWidth=void 0,this._outlineWidthSubscription=void 0,this._stackPartitions=void 0,this._stackPartitionsSubscription=void 0,this._slicePartitions=void 0,this._slicePartitionsSubscription=void 0,this._subdivisions=void 0,this._subdivisionsSubscription=void 0,this._shadows=void 0,this._shadowsSubscription=void 0,this._distanceDisplayCondition=void 0,this._distanceDisplayConditionSubscription=void 0,this.merge(e??Q.EMPTY_OBJECT)}Object.defineProperties(q1.prototype,{definitionChanged:{get:function(){return this._definitionChanged}},show:be("show"),radii:be("radii"),innerRadii:be("innerRadii"),minimumClock:be("minimumClock"),maximumClock:be("maximumClock"),minimumCone:be("minimumCone"),maximumCone:be("maximumCone"),heightReference:be("heightReference"),fill:be("fill"),material:or("material"),outline:be("outline"),outlineColor:be("outlineColor"),outlineWidth:be("outlineWidth"),stackPartitions:be("stackPartitions"),slicePartitions:be("slicePartitions"),subdivisions:be("subdivisions"),shadows:be("shadows"),distanceDisplayCondition:be("distanceDisplayCondition")});q1.prototype.clone=function(e){return l(e)?(e.show=this.show,e.radii=this.radii,e.innerRadii=this.innerRadii,e.minimumClock=this.minimumClock,e.maximumClock=this.maximumClock,e.minimumCone=this.minimumCone,e.maximumCone=this.maximumCone,e.heightReference=this.heightReference,e.fill=this.fill,e.material=this.material,e.outline=this.outline,e.outlineColor=this.outlineColor,e.outlineWidth=this.outlineWidth,e.stackPartitions=this.stackPartitions,e.slicePartitions=this.slicePartitions,e.subdivisions=this.subdivisions,e.shadows=this.shadows,e.distanceDisplayCondition=this.distanceDisplayCondition,e):new q1(this)};q1.prototype.merge=function(e){this.show=this.show??e.show,this.radii=this.radii??e.radii,this.innerRadii=this.innerRadii??e.innerRadii,this.minimumClock=this.minimumClock??e.minimumClock,this.maximumClock=this.maximumClock??e.maximumClock,this.minimumCone=this.minimumCone??e.minimumCone,this.maximumCone=this.maximumCone??e.maximumCone,this.heightReference=this.heightReference??e.heightReference,this.fill=this.fill??e.fill,this.material=this.material??e.material,this.outline=this.outline??e.outline,this.outlineColor=this.outlineColor??e.outlineColor,this.outlineWidth=this.outlineWidth??e.outlineWidth,this.stackPartitions=this.stackPartitions??e.stackPartitions,this.slicePartitions=this.slicePartitions??e.slicePartitions,this.subdivisions=this.subdivisions??e.subdivisions,this.shadows=this.shadows??e.shadows,this.distanceDisplayCondition=this.distanceDisplayCondition??e.distanceDisplayCondition};var Hx=q1;var Vln=y(x(),1);function $1(e){this._definitionChanged=new xe,this._show=void 0,this._showSubscription=void 0,this._text=void 0,this._textSubscription=void 0,this._font=void 0,this._fontSubscription=void 0,this._style=void 0,this._styleSubscription=void 0,this._scale=void 0,this._scaleSubscription=void 0,this._showBackground=void 0,this._showBackgroundSubscription=void 0,this._backgroundColor=void 0,this._backgroundColorSubscription=void 0,this._backgroundPadding=void 0,this._backgroundPaddingSubscription=void 0,this._pixelOffset=void 0,this._pixelOffsetSubscription=void 0,this._eyeOffset=void 0,this._eyeOffsetSubscription=void 0,this._horizontalOrigin=void 0,this._horizontalOriginSubscription=void 0,this._verticalOrigin=void 0,this._verticalOriginSubscription=void 0,this._heightReference=void 0,this._heightReferenceSubscription=void 0,this._fillColor=void 0,this._fillColorSubscription=void 0,this._outlineColor=void 0,this._outlineColorSubscription=void 0,this._outlineWidth=void 0,this._outlineWidthSubscription=void 0,this._translucencyByDistance=void 0,this._translucencyByDistanceSubscription=void 0,this._pixelOffsetScaleByDistance=void 0,this._pixelOffsetScaleByDistanceSubscription=void 0,this._scaleByDistance=void 0,this._scaleByDistanceSubscription=void 0,this._distanceDisplayCondition=void 0,this._distanceDisplayConditionSubscription=void 0,this._disableDepthTestDistance=void 0,this._disableDepthTestDistanceSubscription=void 0,this.merge(e??Q.EMPTY_OBJECT)}Object.defineProperties($1.prototype,{definitionChanged:{get:function(){return this._definitionChanged}},show:be("show"),text:be("text"),font:be("font"),style:be("style"),scale:be("scale"),showBackground:be("showBackground"),backgroundColor:be("backgroundColor"),backgroundPadding:be("backgroundPadding"),pixelOffset:be("pixelOffset"),eyeOffset:be("eyeOffset"),horizontalOrigin:be("horizontalOrigin"),verticalOrigin:be("verticalOrigin"),heightReference:be("heightReference"),fillColor:be("fillColor"),outlineColor:be("outlineColor"),outlineWidth:be("outlineWidth"),translucencyByDistance:be("translucencyByDistance"),pixelOffsetScaleByDistance:be("pixelOffsetScaleByDistance"),scaleByDistance:be("scaleByDistance"),distanceDisplayCondition:be("distanceDisplayCondition"),disableDepthTestDistance:be("disableDepthTestDistance")});$1.prototype.clone=function(e){return l(e)?(e.show=this.show,e.text=this.text,e.font=this.font,e.style=this.style,e.scale=this.scale,e.showBackground=this.showBackground,e.backgroundColor=this.backgroundColor,e.backgroundPadding=this.backgroundPadding,e.pixelOffset=this.pixelOffset,e.eyeOffset=this.eyeOffset,e.horizontalOrigin=this.horizontalOrigin,e.verticalOrigin=this.verticalOrigin,e.heightReference=this.heightReference,e.fillColor=this.fillColor,e.outlineColor=this.outlineColor,e.outlineWidth=this.outlineWidth,e.translucencyByDistance=this.translucencyByDistance,e.pixelOffsetScaleByDistance=this.pixelOffsetScaleByDistance,e.scaleByDistance=this.scaleByDistance,e.distanceDisplayCondition=this.distanceDisplayCondition,e.disableDepthTestDistance=this.disableDepthTestDistance,e):new $1(this)};$1.prototype.merge=function(e){this.show=this.show??e.show,this.text=this.text??e.text,this.font=this.font??e.font,this.style=this.style??e.style,this.scale=this.scale??e.scale,this.showBackground=this.showBackground??e.showBackground,this.backgroundColor=this.backgroundColor??e.backgroundColor,this.backgroundPadding=this.backgroundPadding??e.backgroundPadding,this.pixelOffset=this.pixelOffset??e.pixelOffset,this.eyeOffset=this.eyeOffset??e.eyeOffset,this.horizontalOrigin=this.horizontalOrigin??e.horizontalOrigin,this.verticalOrigin=this.verticalOrigin??e.verticalOrigin,this.heightReference=this.heightReference??e.heightReference,this.fillColor=this.fillColor??e.fillColor,this.outlineColor=this.outlineColor??e.outlineColor,this.outlineWidth=this.outlineWidth??e.outlineWidth,this.translucencyByDistance=this.translucencyByDistance??e.translucencyByDistance,this.pixelOffsetScaleByDistance=this.pixelOffsetScaleByDistance??e.pixelOffsetScaleByDistance,this.scaleByDistance=this.scaleByDistance??e.scaleByDistance,this.distanceDisplayCondition=this.distanceDisplayCondition??e.distanceDisplayCondition,this.disableDepthTestDistance=this.disableDepthTestDistance??e.disableDepthTestDistance};var Lh=$1;var rdn=y(x(),1);var Dln=y(x(),1);var Bln=y(x(),1);var FMe=new m(1,1,1),BMe=m.ZERO,wMe=Me.IDENTITY;function Oce(e,t,n){this.translation=m.clone(e??BMe),this.rotation=Me.clone(t??wMe),this.scale=m.clone(n??FMe)}Oce.prototype.equals=function(e){return this===e||l(e)&&m.equals(this.translation,e.translation)&&Me.equals(this.rotation,e.rotation)&&m.equals(this.scale,e.scale)};var a0=Oce;var fJ=new a0;function eW(e){e=e??Q.EMPTY_OBJECT,this._definitionChanged=new xe,this._translation=void 0,this._translationSubscription=void 0,this._rotation=void 0,this._rotationSubscription=void 0,this._scale=void 0,this._scaleSubscription=void 0,this.translation=e.translation,this.rotation=e.rotation,this.scale=e.scale}Object.defineProperties(eW.prototype,{isConstant:{get:function(){return K.isConstant(this._translation)&&K.isConstant(this._rotation)&&K.isConstant(this._scale)}},definitionChanged:{get:function(){return this._definitionChanged}},translation:be("translation"),rotation:be("rotation"),scale:be("scale")});var NMe=new q;eW.prototype.getValue=function(e,t){return l(e)||(e=q.now(NMe)),l(t)||(t=new a0),t.translation=K.getValueOrClonedDefault(this._translation,e,fJ.translation,t.translation),t.rotation=K.getValueOrClonedDefault(this._rotation,e,fJ.rotation,t.rotation),t.scale=K.getValueOrClonedDefault(this._scale,e,fJ.scale,t.scale),t};eW.prototype.equals=function(e){return this===e||e instanceof eW&&K.equals(this._translation,e._translation)&&K.equals(this._rotation,e._rotation)&&K.equals(this._scale,e._scale)};var Jx=eW;var jln=y(x(),1);function MA(e,t){this._propertyNames=[],this._definitionChanged=new xe,l(e)&&this.merge(e,t)}Object.defineProperties(MA.prototype,{propertyNames:{get:function(){return this._propertyNames}},isConstant:{get:function(){let e=this._propertyNames;for(let t=0,n=e.length;t<n;t++)if(!K.isConstant(this[e[t]]))return!1;return!0}},definitionChanged:{get:function(){return this._definitionChanged}}});MA.prototype.hasProperty=function(e){return this._propertyNames.indexOf(e)!==-1};function PMe(e){return new fi(e)}MA.prototype.addProperty=function(e,t,n){this._propertyNames.push(e),Object.defineProperty(this,e,be(e,!0,n??PMe)),l(t)&&(this[e]=t),this._definitionChanged.raiseEvent(this)};MA.prototype.removeProperty=function(e){let n=this._propertyNames.indexOf(e);this._propertyNames.splice(n,1),delete this[e],this._definitionChanged.raiseEvent(this)};var XMe=new q;MA.prototype.getValue=function(e,t){l(e)||(e=q.now(XMe)),l(t)||(t={});let n=this._propertyNames;for(let i=0,o=n.length;i<o;i++){let r=n[i];t[r]=K.getValueOrUndefined(this[r],e,t[r])}return t};MA.prototype.merge=function(e,t){let n=this._propertyNames,i=l(e._propertyNames)?e._propertyNames:Object.keys(e);for(let o=0,r=i.length;o<r;o++){let s=i[o],a=this[s],c=e[s];a===void 0&&n.indexOf(s)===-1&&this.addProperty(s,void 0,t),c!==void 0&&(a!==void 0?l(a)&&l(a.merge)&&a.merge(c):l(c)&&l(c.merge)&&l(c.clone)?this[s]=c.clone():this[s]=c)}};function YMe(e,t){let n=e._propertyNames,i=t._propertyNames,o=n.length;if(o!==i.length)return!1;for(let r=0;r<o;++r){let s=n[r];if(i.indexOf(s)===-1||!K.equals(e[s],t[s]))return!1}return!0}MA.prototype.equals=function(e){return this===e||e instanceof MA&&YMe(this,e)};var Gl=MA;function zce(e){return new Jx(e)}function MMe(e){return new Gl(e,zce)}function vMe(e){return new Gl(e)}function UMe(e){return new Gl(e)}function tW(e){this._definitionChanged=new xe,this._show=void 0,this._showSubscription=void 0,this._uri=void 0,this._uriSubscription=void 0,this._scale=void 0,this._scaleSubscription=void 0,this._hasVerticalExaggeration=void 0,this._hasVerticalExaggerationSubscription=void 0,this._enableVerticalExaggeration=void 0,this._enableVerticalExaggerationSubscription=void 0,this._minimumPixelSize=void 0,this._minimumPixelSizeSubscription=void 0,this._maximumScale=void 0,this._maximumScaleSubscription=void 0,this._incrementallyLoadTextures=void 0,this._incrementallyLoadTexturesSubscription=void 0,this._runAnimations=void 0,this._runAnimationsSubscription=void 0,this._clampAnimations=void 0,this._clampAnimationsSubscription=void 0,this._shadows=void 0,this._shadowsSubscription=void 0,this._heightReference=void 0,this._heightReferenceSubscription=void 0,this._silhouetteColor=void 0,this._silhouetteColorSubscription=void 0,this._silhouetteSize=void 0,this._silhouetteSizeSubscription=void 0,this._color=void 0,this._colorSubscription=void 0,this._colorBlendMode=void 0,this._colorBlendModeSubscription=void 0,this._colorBlendAmount=void 0,this._colorBlendAmountSubscription=void 0,this._imageBasedLightingFactor=void 0,this._imageBasedLightingFactorSubscription=void 0,this._environmentMapOptions=void 0,this._environmentMapOptionsSubscription=void 0,this._lightColor=void 0,this._lightColorSubscription=void 0,this._distanceDisplayCondition=void 0,this._distanceDisplayConditionSubscription=void 0,this._nodeTransformations=void 0,this._nodeTransformationsSubscription=void 0,this._articulations=void 0,this._articulationsSubscription=void 0,this._clippingPlanes=void 0,this._clippingPlanesSubscription=void 0,this._customShader=void 0,this._customShaderSubscription=void 0,this._marsOptions=e&&e.marsOptions||{},this.merge(e??Q.EMPTY_OBJECT)}Object.defineProperties(tW.prototype,{definitionChanged:{get:function(){return this._definitionChanged}},show:be("show"),uri:be("uri"),scale:be("scale"),enableVerticalExaggeration:be("enableVerticalExaggeration"),minimumPixelSize:be("minimumPixelSize"),maximumScale:be("maximumScale"),incrementallyLoadTextures:be("incrementallyLoadTextures"),runAnimations:be("runAnimations"),clampAnimations:be("clampAnimations"),shadows:be("shadows"),heightReference:be("heightReference"),silhouetteColor:be("silhouetteColor"),silhouetteSize:be("silhouetteSize"),color:be("color"),colorBlendMode:be("colorBlendMode"),colorBlendAmount:be("colorBlendAmount"),imageBasedLightingFactor:be("imageBasedLightingFactor"),environmentMapOptions:be("environmentMapOptions",void 0,UMe),lightColor:be("lightColor"),distanceDisplayCondition:be("distanceDisplayCondition"),nodeTransformations:be("nodeTransformations",void 0,MMe),articulations:be("articulations",void 0,vMe),clippingPlanes:be("clippingPlanes"),customShader:be("customShader")});tW.prototype.clone=function(e){return l(e)?(e.show=this.show,e.uri=this.uri,e.scale=this.scale,e.enableVerticalExaggeration=this.enableVerticalExaggeration,e.minimumPixelSize=this.minimumPixelSize,e.maximumScale=this.maximumScale,e.incrementallyLoadTextures=this.incrementallyLoadTextures,e.runAnimations=this.runAnimations,e.clampAnimations=this.clampAnimations,e.heightReference=this._heightReference,e.silhouetteColor=this.silhouetteColor,e.silhouetteSize=this.silhouetteSize,e.color=this.color,e.colorBlendMode=this.colorBlendMode,e.colorBlendAmount=this.colorBlendAmount,e.imageBasedLightingFactor=this.imageBasedLightingFactor,e.environmentMapOptions=this.environmentMapOptions,e.lightColor=this.lightColor,e.distanceDisplayCondition=this.distanceDisplayCondition,e.nodeTransformations=this.nodeTransformations,e.articulations=this.articulations,e.clippingPlanes=this.clippingPlanes,e.customShader=this.customShader,e):new tW(this)};tW.prototype.merge=function(e){this.show=this.show??e.show,this.uri=this.uri??e.uri,this.scale=this.scale??e.scale,this.enableVerticalExaggeration=this.enableVerticalExaggeration??e.enableVerticalExaggeration,this.minimumPixelSize=this.minimumPixelSize??e.minimumPixelSize,this.maximumScale=this.maximumScale??e.maximumScale,this.incrementallyLoadTextures=this.incrementallyLoadTextures??e.incrementallyLoadTextures,this.runAnimations=this.runAnimations??e.runAnimations,this.clampAnimations=this.clampAnimations??e.clampAnimations,this.shadows=this.shadows??e.shadows,this.heightReference=this.heightReference??e.heightReference,this.silhouetteColor=this.silhouetteColor??e.silhouetteColor,this.silhouetteSize=this.silhouetteSize??e.silhouetteSize,this.color=this.color??e.color,this.colorBlendMode=this.colorBlendMode??e.colorBlendMode,this.colorBlendAmount=this.colorBlendAmount??e.colorBlendAmount,this.imageBasedLightingFactor=this.imageBasedLightingFactor??e.imageBasedLightingFactor,this.environmentMapOptions=this.environmentMapOptions??e.environmentMapOptions,this.lightColor=this.lightColor??e.lightColor,this.distanceDisplayCondition=this.distanceDisplayCondition??e.distanceDisplayCondition,this.clippingPlanes=this.clippingPlanes??e.clippingPlanes,this.customShader=this.customShader??e.customShader;let t=e.nodeTransformations;if(l(t)){let i=this.nodeTransformations;l(i)?i.merge(t):this.nodeTransformations=new Gl(t,zce)}let n=e.articulations;if(l(n)){let i=this.articulations;l(i)?i.merge(n):this.articulations=new Gl(n)}};var vA=tW;var udn=y(x(),1);function nW(e){this._definitionChanged=new xe,this._show=void 0,this._showSubscription=void 0,this._uri=void 0,this._uriSubscription=void 0,this._maximumScreenSpaceError=void 0,this._maximumScreenSpaceErrorSubscription=void 0,this.merge(e??Q.EMPTY_OBJECT)}Object.defineProperties(nW.prototype,{definitionChanged:{get:function(){return this._definitionChanged}},show:be("show"),uri:be("uri"),maximumScreenSpaceError:be("maximumScreenSpaceError")});nW.prototype.clone=function(e){return l(e)?(e.show=this.show,e.uri=this.uri,e.maximumScreenSpaceError=this.maximumScreenSpaceError,e):new nW(this)};nW.prototype.merge=function(e){this.show=this.show??e.show,this.uri=this.uri??e.uri,this.maximumScreenSpaceError=this.maximumScreenSpaceError??e.maximumScreenSpaceError};var Kx=nW;var bdn=y(x(),1);function iW(e){this._definitionChanged=new xe,this._show=void 0,this._showSubscription=void 0,this._leadTime=void 0,this._leadTimeSubscription=void 0,this._trailTime=void 0,this._trailTimeSubscription=void 0,this._width=void 0,this._widthSubscription=void 0,this._resolution=void 0,this._resolutionSubscription=void 0,this._material=void 0,this._materialSubscription=void 0,this._distanceDisplayCondition=void 0,this._distanceDisplayConditionSubscription=void 0,this._relativeTo=void 0,this._relativeToSubscription=void 0,this.merge(e??Q.EMPTY_OBJECT)}Object.defineProperties(iW.prototype,{definitionChanged:{get:function(){return this._definitionChanged}},show:be("show"),leadTime:be("leadTime"),trailTime:be("trailTime"),width:be("width"),resolution:be("resolution"),material:or("material"),distanceDisplayCondition:be("distanceDisplayCondition"),relativeTo:be("relativeTo")});iW.prototype.clone=function(e){return l(e)?(e.show=this.show,e.leadTime=this.leadTime,e.trailTime=this.trailTime,e.width=this.width,e.resolution=this.resolution,e.material=this.material,e.distanceDisplayCondition=this.distanceDisplayCondition,e.relativeTo=this.relativeTo,e):new iW(this)};iW.prototype.merge=function(e){this.show=this.show??e.show,this.leadTime=this.leadTime??e.leadTime,this.trailTime=this.trailTime??e.trailTime,this.width=this.width??e.width,this.resolution=this.resolution??e.resolution,this.material=this.material??e.material,this.distanceDisplayCondition=this.distanceDisplayCondition??e.distanceDisplayCondition,this.relativeTo=this.relativeTo??e.relativeTo};var UA=iW;var _dn=y(x(),1);function oW(e){this._definitionChanged=new xe,this._show=void 0,this._showSubscription=void 0,this._plane=void 0,this._planeSubscription=void 0,this._dimensions=void 0,this._dimensionsSubscription=void 0,this._fill=void 0,this._fillSubscription=void 0,this._material=void 0,this._materialSubscription=void 0,this._outline=void 0,this._outlineSubscription=void 0,this._outlineColor=void 0,this._outlineColorSubscription=void 0,this._outlineWidth=void 0,this._outlineWidthSubscription=void 0,this._shadows=void 0,this._shadowsSubscription=void 0,this._distanceDisplayCondition=void 0,this._distanceDisplayConditionSubscription=void 0,this.merge(e??Q.EMPTY_OBJECT)}Object.defineProperties(oW.prototype,{definitionChanged:{get:function(){return this._definitionChanged}},show:be("show"),plane:be("plane"),dimensions:be("dimensions"),fill:be("fill"),material:or("material"),outline:be("outline"),outlineColor:be("outlineColor"),outlineWidth:be("outlineWidth"),shadows:be("shadows"),distanceDisplayCondition:be("distanceDisplayCondition")});oW.prototype.clone=function(e){return l(e)?(e.show=this.show,e.plane=this.plane,e.dimensions=this.dimensions,e.fill=this.fill,e.material=this.material,e.outline=this.outline,e.outlineColor=this.outlineColor,e.outlineWidth=this.outlineWidth,e.shadows=this.shadows,e.distanceDisplayCondition=this.distanceDisplayCondition,e):new oW(this)};oW.prototype.merge=function(e){this.show=this.show??e.show,this.plane=this.plane??e.plane,this.dimensions=this.dimensions??e.dimensions,this.fill=this.fill??e.fill,this.material=this.material??e.material,this.outline=this.outline??e.outline,this.outlineColor=this.outlineColor??e.outlineColor,this.outlineWidth=this.outlineWidth??e.outlineWidth,this.shadows=this.shadows??e.shadows,this.distanceDisplayCondition=this.distanceDisplayCondition??e.distanceDisplayCondition};var rW=oW;var Ldn=y(x(),1);function sW(e){this._definitionChanged=new xe,this._show=void 0,this._showSubscription=void 0,this._pixelSize=void 0,this._pixelSizeSubscription=void 0,this._heightReference=void 0,this._heightReferenceSubscription=void 0,this._color=void 0,this._colorSubscription=void 0,this._outlineColor=void 0,this._outlineColorSubscription=void 0,this._outlineWidth=void 0,this._outlineWidthSubscription=void 0,this._scaleByDistance=void 0,this._scaleByDistanceSubscription=void 0,this._translucencyByDistance=void 0,this._translucencyByDistanceSubscription=void 0,this._distanceDisplayCondition=void 0,this._distanceDisplayConditionSubscription=void 0,this._disableDepthTestDistance=void 0,this._disableDepthTestDistanceSubscription=void 0,this._splitDirection=void 0,this._splitDirectionSubscription=void 0,this.merge(e??Q.EMPTY_OBJECT)}Object.defineProperties(sW.prototype,{definitionChanged:{get:function(){return this._definitionChanged}},show:be("show"),pixelSize:be("pixelSize"),heightReference:be("heightReference"),color:be("color"),outlineColor:be("outlineColor"),outlineWidth:be("outlineWidth"),scaleByDistance:be("scaleByDistance"),translucencyByDistance:be("translucencyByDistance"),distanceDisplayCondition:be("distanceDisplayCondition"),disableDepthTestDistance:be("disableDepthTestDistance"),splitDirection:be("splitDirection")});sW.prototype.clone=function(e){return l(e)?(e.show=this.show,e.pixelSize=this.pixelSize,e.heightReference=this.heightReference,e.color=this.color,e.outlineColor=this.outlineColor,e.outlineWidth=this.outlineWidth,e.scaleByDistance=this.scaleByDistance,e.translucencyByDistance=this._translucencyByDistance,e.distanceDisplayCondition=this.distanceDisplayCondition,e.disableDepthTestDistance=this.disableDepthTestDistance,e.splitDirection=this.splitDirection,e):new sW(this)};sW.prototype.merge=function(e){this.show=this.show??e.show,this.pixelSize=this.pixelSize??e.pixelSize,this.heightReference=this.heightReference??e.heightReference,this.color=this.color??e.color,this.outlineColor=this.outlineColor??e.outlineColor,this.outlineWidth=this.outlineWidth??e.outlineWidth,this.scaleByDistance=this.scaleByDistance??e.scaleByDistance,this.translucencyByDistance=this._translucencyByDistance??e.translucencyByDistance,this.distanceDisplayCondition=this.distanceDisplayCondition??e.distanceDisplayCondition,this.disableDepthTestDistance=this.disableDepthTestDistance??e.disableDepthTestDistance,this.splitDirection=this.splitDirection??e.splitDirection};var jx=sW;var Ddn=y(x(),1);var Bdn=y(x(),1);function DMe(e,t){this.positions=l(e)?e:[],this.holes=l(t)?t:[]}var _c=DMe;function kMe(e){return Array.isArray(e)&&(e=new _c(e)),new fi(e)}function aW(e){this._definitionChanged=new xe,this._show=void 0,this._showSubscription=void 0,this._hierarchy=void 0,this._hierarchySubscription=void 0,this._height=void 0,this._heightSubscription=void 0,this._heightReference=void 0,this._heightReferenceSubscription=void 0,this._extrudedHeight=void 0,this._extrudedHeightSubscription=void 0,this._extrudedHeightReference=void 0,this._extrudedHeightReferenceSubscription=void 0,this._stRotation=void 0,this._stRotationSubscription=void 0,this._granularity=void 0,this._granularitySubscription=void 0,this._fill=void 0,this._fillSubscription=void 0,this._material=void 0,this._materialSubscription=void 0,this._outline=void 0,this._outlineSubscription=void 0,this._outlineColor=void 0,this._outlineColorSubscription=void 0,this._outlineWidth=void 0,this._outlineWidthSubscription=void 0,this._perPositionHeight=void 0,this._perPositionHeightSubscription=void 0,this._closeTop=void 0,this._closeTopSubscription=void 0,this._closeBottom=void 0,this._closeBottomSubscription=void 0,this._arcType=void 0,this._arcTypeSubscription=void 0,this._shadows=void 0,this._shadowsSubscription=void 0,this._distanceDisplayCondition=void 0,this._distanceDisplayConditionSubscription=void 0,this._classificationType=void 0,this._classificationTypeSubscription=void 0,this._zIndex=void 0,this._zIndexSubscription=void 0,this._textureCoordinates=void 0,this._textureCoordinatesSubscription=void 0,this.merge(e??Q.EMPTY_OBJECT)}Object.defineProperties(aW.prototype,{definitionChanged:{get:function(){return this._definitionChanged}},show:be("show"),hierarchy:be("hierarchy",void 0,kMe),height:be("height"),heightReference:be("heightReference"),extrudedHeight:be("extrudedHeight"),extrudedHeightReference:be("extrudedHeightReference"),stRotation:be("stRotation"),granularity:be("granularity"),fill:be("fill"),material:or("material"),outline:be("outline"),outlineColor:be("outlineColor"),outlineWidth:be("outlineWidth"),perPositionHeight:be("perPositionHeight"),closeTop:be("closeTop"),closeBottom:be("closeBottom"),arcType:be("arcType"),shadows:be("shadows"),distanceDisplayCondition:be("distanceDisplayCondition"),classificationType:be("classificationType"),zIndex:be("zIndex"),textureCoordinates:be("textureCoordinates")});aW.prototype.clone=function(e){return l(e)?(e.show=this.show,e.hierarchy=this.hierarchy,e.height=this.height,e.heightReference=this.heightReference,e.extrudedHeight=this.extrudedHeight,e.extrudedHeightReference=this.extrudedHeightReference,e.stRotation=this.stRotation,e.granularity=this.granularity,e.fill=this.fill,e.material=this.material,e.outline=this.outline,e.outlineColor=this.outlineColor,e.outlineWidth=this.outlineWidth,e.perPositionHeight=this.perPositionHeight,e.closeTop=this.closeTop,e.closeBottom=this.closeBottom,e.arcType=this.arcType,e.shadows=this.shadows,e.distanceDisplayCondition=this.distanceDisplayCondition,e.classificationType=this.classificationType,e.zIndex=this.zIndex,e.textureCoordinates=this.textureCoordinates,e):new aW(this)};aW.prototype.merge=function(e){this.show=this.show??e.show,this.hierarchy=this.hierarchy??e.hierarchy,this.height=this.height??e.height,this.heightReference=this.heightReference??e.heightReference,this.extrudedHeight=this.extrudedHeight??e.extrudedHeight,this.extrudedHeightReference=this.extrudedHeightReference??e.extrudedHeightReference,this.stRotation=this.stRotation??e.stRotation,this.granularity=this.granularity??e.granularity,this.fill=this.fill??e.fill,this.material=this.material??e.material,this.outline=this.outline??e.outline,this.outlineColor=this.outlineColor??e.outlineColor,this.outlineWidth=this.outlineWidth??e.outlineWidth,this.perPositionHeight=this.perPositionHeight??e.perPositionHeight,this.closeTop=this.closeTop??e.closeTop,this.closeBottom=this.closeBottom??e.closeBottom,this.arcType=this.arcType??e.arcType,this.shadows=this.shadows??e.shadows,this.distanceDisplayCondition=this.distanceDisplayCondition??e.distanceDisplayCondition,this.classificationType=this.classificationType??e.classificationType,this.zIndex=this.zIndex??e.zIndex,this.textureCoordinates=this.textureCoordinates??e.textureCoordinates};var Wh=aW;var Kdn=y(x(),1);function cW(e){this._definitionChanged=new xe,this._show=void 0,this._showSubscription=void 0,this._positions=void 0,this._positionsSubscription=void 0,this._width=void 0,this._widthSubscription=void 0,this._granularity=void 0,this._granularitySubscription=void 0,this._material=void 0,this._materialSubscription=void 0,this._depthFailMaterial=void 0,this._depthFailMaterialSubscription=void 0,this._arcType=void 0,this._arcTypeSubscription=void 0,this._clampToGround=void 0,this._clampToGroundSubscription=void 0,this._shadows=void 0,this._shadowsSubscription=void 0,this._distanceDisplayCondition=void 0,this._distanceDisplayConditionSubscription=void 0,this._classificationType=void 0,this._classificationTypeSubscription=void 0,this._zIndex=void 0,this._zIndexSubscription=void 0,this.merge(e??Q.EMPTY_OBJECT)}Object.defineProperties(cW.prototype,{definitionChanged:{get:function(){return this._definitionChanged}},show:be("show"),positions:be("positions"),width:be("width"),granularity:be("granularity"),material:or("material"),depthFailMaterial:or("depthFailMaterial"),arcType:be("arcType"),clampToGround:be("clampToGround"),shadows:be("shadows"),distanceDisplayCondition:be("distanceDisplayCondition"),classificationType:be("classificationType"),zIndex:be("zIndex")});cW.prototype.clone=function(e){return l(e)?(e.show=this.show,e.positions=this.positions,e.width=this.width,e.granularity=this.granularity,e.material=this.material,e.depthFailMaterial=this.depthFailMaterial,e.arcType=this.arcType,e.clampToGround=this.clampToGround,e.shadows=this.shadows,e.distanceDisplayCondition=this.distanceDisplayCondition,e.classificationType=this.classificationType,e.zIndex=this.zIndex,e):new cW(this)};cW.prototype.merge=function(e){this.show=this.show??e.show,this.positions=this.positions??e.positions,this.width=this.width??e.width,this.granularity=this.granularity??e.granularity,this.material=this.material??e.material,this.depthFailMaterial=this.depthFailMaterial??e.depthFailMaterial,this.arcType=this.arcType??e.arcType,this.clampToGround=this.clampToGround??e.clampToGround,this.shadows=this.shadows??e.shadows,this.distanceDisplayCondition=this.distanceDisplayCondition??e.distanceDisplayCondition,this.classificationType=this.classificationType??e.classificationType,this.zIndex=this.zIndex??e.zIndex};var Qc=cW;var iun=y(x(),1);function lW(e){this._definitionChanged=new xe,this._show=void 0,this._showSubscription=void 0,this._positions=void 0,this._positionsSubscription=void 0,this._shape=void 0,this._shapeSubscription=void 0,this._cornerType=void 0,this._cornerTypeSubscription=void 0,this._granularity=void 0,this._granularitySubscription=void 0,this._fill=void 0,this._fillSubscription=void 0,this._material=void 0,this._materialSubscription=void 0,this._outline=void 0,this._outlineSubscription=void 0,this._outlineColor=void 0,this._outlineColorSubscription=void 0,this._outlineWidth=void 0,this._outlineWidthSubscription=void 0,this._shadows=void 0,this._shadowsSubscription=void 0,this._distanceDisplayCondition=void 0,this._distanceDisplayConditionSubsription=void 0,this.merge(e??Q.EMPTY_OBJECT)}Object.defineProperties(lW.prototype,{definitionChanged:{get:function(){return this._definitionChanged}},show:be("show"),positions:be("positions"),shape:be("shape"),cornerType:be("cornerType"),granularity:be("granularity"),fill:be("fill"),material:or("material"),outline:be("outline"),outlineColor:be("outlineColor"),outlineWidth:be("outlineWidth"),shadows:be("shadows"),distanceDisplayCondition:be("distanceDisplayCondition")});lW.prototype.clone=function(e){return l(e)?(e.show=this.show,e.positions=this.positions,e.shape=this.shape,e.cornerType=this.cornerType,e.granularity=this.granularity,e.fill=this.fill,e.material=this.material,e.outline=this.outline,e.outlineColor=this.outlineColor,e.outlineWidth=this.outlineWidth,e.shadows=this.shadows,e.distanceDisplayCondition=this.distanceDisplayCondition,e):new lW(this)};lW.prototype.merge=function(e){this.show=this.show??e.show,this.positions=this.positions??e.positions,this.shape=this.shape??e.shape,this.cornerType=this.cornerType??e.cornerType,this.granularity=this.granularity??e.granularity,this.fill=this.fill??e.fill,this.material=this.material??e.material,this.outline=this.outline??e.outline,this.outlineColor=this.outlineColor??e.outlineColor,this.outlineWidth=this.outlineWidth??e.outlineWidth,this.shadows=this.shadows??e.shadows,this.distanceDisplayCondition=this.distanceDisplayCondition??e.distanceDisplayCondition};var qx=lW;var dun=y(x(),1);function dW(e){this._definitionChanged=new xe,this._show=void 0,this._showSubscription=void 0,this._coordinates=void 0,this._coordinatesSubscription=void 0,this._height=void 0,this._heightSubscription=void 0,this._heightReference=void 0,this._heightReferenceSubscription=void 0,this._extrudedHeight=void 0,this._extrudedHeightSubscription=void 0,this._extrudedHeightReference=void 0,this._extrudedHeightReferenceSubscription=void 0,this._rotation=void 0,this._rotationSubscription=void 0,this._stRotation=void 0,this._stRotationSubscription=void 0,this._granularity=void 0,this._granularitySubscription=void 0,this._fill=void 0,this._fillSubscription=void 0,this._material=void 0,this._materialSubscription=void 0,this._outline=void 0,this._outlineSubscription=void 0,this._outlineColor=void 0,this._outlineColorSubscription=void 0,this._outlineWidth=void 0,this._outlineWidthSubscription=void 0,this._shadows=void 0,this._shadowsSubscription=void 0,this._distanceDisplayCondition=void 0,this._distancedisplayConditionSubscription=void 0,this._classificationType=void 0,this._classificationTypeSubscription=void 0,this._zIndex=void 0,this._zIndexSubscription=void 0,this.merge(e??Q.EMPTY_OBJECT)}Object.defineProperties(dW.prototype,{definitionChanged:{get:function(){return this._definitionChanged}},show:be("show"),coordinates:be("coordinates"),height:be("height"),heightReference:be("heightReference"),extrudedHeight:be("extrudedHeight"),extrudedHeightReference:be("extrudedHeightReference"),rotation:be("rotation"),stRotation:be("stRotation"),granularity:be("granularity"),fill:be("fill"),material:or("material"),outline:be("outline"),outlineColor:be("outlineColor"),outlineWidth:be("outlineWidth"),shadows:be("shadows"),distanceDisplayCondition:be("distanceDisplayCondition"),classificationType:be("classificationType"),zIndex:be("zIndex")});dW.prototype.clone=function(e){return l(e)?(e.show=this.show,e.coordinates=this.coordinates,e.height=this.height,e.heightReference=this.heightReference,e.extrudedHeight=this.extrudedHeight,e.extrudedHeightReference=this.extrudedHeightReference,e.rotation=this.rotation,e.stRotation=this.stRotation,e.granularity=this.granularity,e.fill=this.fill,e.material=this.material,e.outline=this.outline,e.outlineColor=this.outlineColor,e.outlineWidth=this.outlineWidth,e.shadows=this.shadows,e.distanceDisplayCondition=this.distanceDisplayCondition,e.classificationType=this.classificationType,e.zIndex=this.zIndex,e):new dW(this)};dW.prototype.merge=function(e){this.show=this.show??e.show,this.coordinates=this.coordinates??e.coordinates,this.height=this.height??e.height,this.heightReference=this.heightReference??e.heightReference,this.extrudedHeight=this.extrudedHeight??e.extrudedHeight,this.extrudedHeightReference=this.extrudedHeightReference??e.extrudedHeightReference,this.rotation=this.rotation??e.rotation,this.stRotation=this.stRotation??e.stRotation,this.granularity=this.granularity??e.granularity,this.fill=this.fill??e.fill,this.material=this.material??e.material,this.outline=this.outline??e.outline,this.outlineColor=this.outlineColor??e.outlineColor,this.outlineWidth=this.outlineWidth??e.outlineWidth,this.shadows=this.shadows??e.shadows,this.distanceDisplayCondition=this.distanceDisplayCondition??e.distanceDisplayCondition,this.classificationType=this.classificationType??e.classificationType,this.zIndex=this.zIndex??e.zIndex};var Fh=dW;var gun=y(x(),1);function uW(e){this._definitionChanged=new xe,this._show=void 0,this._showSubscription=void 0,this._positions=void 0,this._positionsSubscription=void 0,this._minimumHeights=void 0,this._minimumHeightsSubscription=void 0,this._maximumHeights=void 0,this._maximumHeightsSubscription=void 0,this._granularity=void 0,this._granularitySubscription=void 0,this._fill=void 0,this._fillSubscription=void 0,this._material=void 0,this._materialSubscription=void 0,this._outline=void 0,this._outlineSubscription=void 0,this._outlineColor=void 0,this._outlineColorSubscription=void 0,this._outlineWidth=void 0,this._outlineWidthSubscription=void 0,this._shadows=void 0,this._shadowsSubscription=void 0,this._distanceDisplayCondition=void 0,this._distanceDisplayConditionSubscription=void 0,this.merge(e??Q.EMPTY_OBJECT)}Object.defineProperties(uW.prototype,{definitionChanged:{get:function(){return this._definitionChanged}},show:be("show"),positions:be("positions"),minimumHeights:be("minimumHeights"),maximumHeights:be("maximumHeights"),granularity:be("granularity"),fill:be("fill"),material:or("material"),outline:be("outline"),outlineColor:be("outlineColor"),outlineWidth:be("outlineWidth"),shadows:be("shadows"),distanceDisplayCondition:be("distanceDisplayCondition")});uW.prototype.clone=function(e){return l(e)?(e.show=this.show,e.positions=this.positions,e.minimumHeights=this.minimumHeights,e.maximumHeights=this.maximumHeights,e.granularity=this.granularity,e.fill=this.fill,e.material=this.material,e.outline=this.outline,e.outlineColor=this.outlineColor,e.outlineWidth=this.outlineWidth,e.shadows=this.shadows,e.distanceDisplayCondition=this.distanceDisplayCondition,e):new uW(this)};uW.prototype.merge=function(e){this.show=this.show??e.show,this.positions=this.positions??e.positions,this.minimumHeights=this.minimumHeights??e.minimumHeights,this.maximumHeights=this.maximumHeights??e.maximumHeights,this.granularity=this.granularity??e.granularity,this.fill=this.fill??e.fill,this.material=this.material??e.material,this.outline=this.outline??e.outline,this.outlineColor=this.outlineColor??e.outlineColor,this.outlineWidth=this.outlineWidth??e.outlineWidth,this.shadows=this.shadows??e.shadows,this.distanceDisplayCondition=this.distanceDisplayCondition??e.distanceDisplayCondition};var DA=uW;var QMe=new Ae,pJ=[];function OMe(e){return new Rl(e)}function zMe(e){return be(e,void 0,OMe)}function Ra(e,t){return be(e,void 0,function(n){return n instanceof t?n:new t(n)})}function pm(e){e=e??Q.EMPTY_OBJECT;let t=e.id;l(t)||(t=qn()),this._availability=void 0,this._id=t,this._definitionChanged=new xe,this._name=e.name,this._show=e.show??!0,this._trackingReferenceFrame=e.trackingReferenceFrame??wA.AUTODETECT,this._parent=void 0,this._propertyNames=["billboard","box","corridor","cylinder","description","ellipse","ellipsoid","label","model","tileset","orientation","path","plane","point","polygon","polyline","polylineVolume","position","properties","rectangle","viewFrom","wall",...pJ],this._billboard=void 0,this._billboardSubscription=void 0,this._box=void 0,this._boxSubscription=void 0,this._corridor=void 0,this._corridorSubscription=void 0,this._cylinder=void 0,this._cylinderSubscription=void 0,this._description=void 0,this._descriptionSubscription=void 0,this._ellipse=void 0,this._ellipseSubscription=void 0,this._ellipsoid=void 0,this._ellipsoidSubscription=void 0,this._label=void 0,this._labelSubscription=void 0,this._model=void 0,this._modelSubscription=void 0,this._tileset=void 0,this._tilesetSubscription=void 0,this._orientation=void 0,this._orientationSubscription=void 0,this._path=void 0,this._pathSubscription=void 0,this._plane=void 0,this._planeSubscription=void 0,this._point=void 0,this._pointSubscription=void 0,this._polygon=void 0,this._polygonSubscription=void 0,this._polyline=void 0,this._polylineSubscription=void 0,this._polylineVolume=void 0,this._polylineVolumeSubscription=void 0,this._position=void 0,this._positionSubscription=void 0,this._properties=void 0,this._propertiesSubscription=void 0,this._rectangle=void 0,this._rectangleSubscription=void 0,this._viewFrom=void 0,this._viewFromSubscription=void 0,this._wall=void 0,this._wallSubscription=void 0,this._children=[],this.entityCollection=void 0,this.parent=e.parent,this.merge(e)}function AJ(e,t,n){let i=t.length;for(let o=0;o<i;o++){let r=t[o],s=r._show;(!n&&s)!==(n&&s)&&AJ(r,r._children,n)}e._definitionChanged.raiseEvent(e,"isShowing",n,!n)}Object.defineProperties(pm.prototype,{availability:Vl("availability"),id:{get:function(){return this._id}},definitionChanged:{get:function(){return this._definitionChanged}},name:Vl("name"),show:{get:function(){return this._show},set:function(e){if(e===this._show)return;let t=this.isShowing;this._show=e;let n=this.isShowing;t!==n&&AJ(this,this._children,n),this._definitionChanged.raiseEvent(this,"show",e,!e)}},trackingReferenceFrame:Vl("trackingReferenceFrame"),isShowing:{get:function(){return this._show&&(!l(this.entityCollection)||this.entityCollection.show)&&(!l(this._parent)||this._parent.isShowing)}},parent:{get:function(){return this._parent},set:function(e){let t=this._parent;if(t===e)return;let n=this.isShowing;if(l(t)){let o=t._children.indexOf(this);t._children.splice(o,1)}this._parent=e,l(e)&&e._children.push(this);let i=this.isShowing;n!==i&&AJ(this,this._children,i),this._definitionChanged.raiseEvent(this,"parent",e,t)}},propertyNames:{get:function(){return this._propertyNames}},billboard:Ra("billboard",Dc),box:Ra("box",Dx),corridor:Ra("corridor",Qx),cylinder:Ra("cylinder",Ox),description:be("description"),ellipse:Ra("ellipse",zx),ellipsoid:Ra("ellipsoid",Hx),label:Ra("label",Lh),model:Ra("model",vA),tileset:Ra("tileset",Kx),orientation:be("orientation"),path:Ra("path",UA),plane:Ra("plane",rW),point:Ra("point",jx),polygon:Ra("polygon",Wh),polyline:Ra("polyline",Qc),polylineVolume:Ra("polylineVolume",qx),properties:Ra("properties",Gl),position:zMe("position"),rectangle:Ra("rectangle",Fh),viewFrom:be("viewFrom"),wall:Ra("wall",DA)});pm.registerEntityType=function(e,t){Object.defineProperties(pm.prototype,{[e]:Ra(e,t)}),pJ.includes(e)||pJ.push(e)};pm.prototype.isAvailable=function(e){let t=this._availability;return!l(t)||t.contains(e)};pm.prototype.addProperty=function(e){this._propertyNames.push(e),Object.defineProperty(this,e,Vl(e,!0))};pm.prototype.removeProperty=function(e){let n=this._propertyNames.indexOf(e);this._propertyNames.splice(n,1),delete this[e]};pm.prototype.merge=function(e){this.name=this.name??e.name,this.availability=this.availability??e.availability;let t=this._propertyNames,n=l(e._propertyNames)?e._propertyNames:Object.keys(e),i=n.length;for(let o=0;o<i;o++){let r=n[o];if(r==="parent"||r==="name"||r==="availability"||r==="children")continue;let s=this[r],a=e[r];!l(s)&&t.indexOf(r)===-1&&this.addProperty(r),l(a)&&(l(s)?l(s.merge)&&s.merge(a):l(a.merge)&&l(a.clone)?this[r]=a.clone():this[r]=a)}};var Hce=new $,Jce=new m,Kce=new Me;pm.prototype.computeModelMatrix=function(e,t){let n=K.getValueOrUndefined(this._position,e,Jce);if(!l(n))return;let i=K.getValueOrUndefined(this._orientation,e,Kce);return l(i)?t=F.fromRotationTranslation($.fromQuaternion(i,Hce),n,t):t=bt.eastNorthUpToFixedFrame(n,void 0,t),t};pm.prototype.computeModelMatrixForHeightReference=function(e,t,n,i,o){let r=K.getValueOrDefault(t,e,rt.NONE),s=K.getValueOrUndefined(this._position,e,Jce);if(r===rt.NONE||!l(s)||m.equalsEpsilon(s,m.ZERO,L.EPSILON8))return this.computeModelMatrix(e,o);let a=i.cartesianToCartographic(s,QMe);hm(r)?a.height=n:a.height+=n,s=i.cartographicToCartesian(a,s);let c=K.getValueOrUndefined(this._orientation,e,Kce);return l(c)?o=F.fromRotationTranslation($.fromQuaternion(c,Hce),s,o):o=bt.eastNorthUpToFixedFrame(s,void 0,o),o};pm.supportsMaterialsforEntitiesOnTerrain=function(e){return _l.supportsMaterials(e)};pm.supportsPolylinesOnTerrain=function(e){return Vh.isSupported(e)};var jo=pm;var HMe=new Kt(U.WHITE),JMe=new fi(!0),KMe=new fi(!0),jMe=new fi(!1),qMe=new fi(U.BLACK),$Me=new fi(Vn.DISABLED),eve=new fi(new Dt),tve=new fi(ti.BOTH);function Ll(e){let t=e.entity,n=e.geometryPropertyName;this._entity=t,this._scene=e.scene,this._fillEnabled=!1,this._isClosed=!1,this._onTerrain=!1,this._dynamic=!1,this._outlineEnabled=!1,this._geometryChanged=new xe,this._showProperty=void 0,this._materialProperty=void 0,this._showOutlineProperty=void 0,this._outlineColorProperty=void 0,this._outlineWidth=1,this._shadowsProperty=void 0,this._distanceDisplayConditionProperty=void 0,this._classificationTypeProperty=void 0,this._options=e.geometryOptions,this._geometryPropertyName=n,this._id=`${n}-${t.id}`,this._observedPropertyNames=e.observedPropertyNames,this._supportsMaterialsforEntitiesOnTerrain=jo.supportsMaterialsforEntitiesOnTerrain(e.scene)}Object.defineProperties(Ll.prototype,{id:{get:function(){return this._id}},entity:{get:function(){return this._entity}},fillEnabled:{get:function(){return this._fillEnabled}},hasConstantFill:{get:function(){return!this._fillEnabled||!l(this._entity.availability)&&K.isConstant(this._showProperty)&&K.isConstant(this._fillProperty)}},fillMaterialProperty:{get:function(){return this._materialProperty}},outlineEnabled:{get:function(){return this._outlineEnabled}},hasConstantOutline:{get:function(){return!this._outlineEnabled||!l(this._entity.availability)&&K.isConstant(this._showProperty)&&K.isConstant(this._showOutlineProperty)}},outlineColorProperty:{get:function(){return this._outlineColorProperty}},outlineWidth:{get:function(){return this._outlineWidth}},shadowsProperty:{get:function(){return this._shadowsProperty}},distanceDisplayConditionProperty:{get:function(){return this._distanceDisplayConditionProperty}},classificationTypeProperty:{get:function(){return this._classificationTypeProperty}},isDynamic:{get:function(){return this._dynamic}},isClosed:{get:function(){return this._isClosed}},onTerrain:{get:function(){return this._onTerrain}},geometryChanged:{get:function(){return this._geometryChanged}}});Ll.prototype.isOutlineVisible=function(e){let t=this._entity;return(this._outlineEnabled&&t.isAvailable(e)&&this._showProperty.getValue(e)&&this._showOutlineProperty.getValue(e))??!1};Ll.prototype.isFilled=function(e){let t=this._entity;return(this._fillEnabled&&t.isAvailable(e)&&this._showProperty.getValue(e)&&this._fillProperty.getValue(e))??!1};Ll.prototype.createFillGeometryInstance=fe.throwInstantiationError;Ll.prototype.createOutlineGeometryInstance=fe.throwInstantiationError;Ll.prototype.isDestroyed=function(){return!1};Ll.prototype.destroy=function(){he(this)};Ll.prototype._isHidden=function(e,t){let n=t.show;return l(n)&&n.isConstant&&!n.getValue(qe.MINIMUM_VALUE)};Ll.prototype._isOnTerrain=function(e,t){return!1};Ll.prototype._getIsClosed=function(e){return!0};Ll.prototype._isDynamic=fe.throwInstantiationError;Ll.prototype._setStaticOptions=fe.throwInstantiationError;Ll.prototype._onEntityPropertyChanged=function(e,t,n,i){if(this._observedPropertyNames.indexOf(t)===-1)return;let o=this._entity[this._geometryPropertyName];if(!l(o)){(this._fillEnabled||this._outlineEnabled)&&(this._fillEnabled=!1,this._outlineEnabled=!1,this._geometryChanged.raiseEvent(this));return}let r=o.fill,s=l(r)&&r.isConstant?r.getValue(qe.MINIMUM_VALUE):!0,a=o.outline,c=l(a);if(c&&a.isConstant&&(c=a.getValue(qe.MINIMUM_VALUE)),!s&&!c){(this._fillEnabled||this._outlineEnabled)&&(this._fillEnabled=!1,this._outlineEnabled=!1,this._geometryChanged.raiseEvent(this));return}let d=o.show;if(this._isHidden(e,o)){(this._fillEnabled||this._outlineEnabled)&&(this._fillEnabled=!1,this._outlineEnabled=!1,this._geometryChanged.raiseEvent(this));return}this._materialProperty=o.material??HMe,this._fillProperty=r??KMe,this._showProperty=d??JMe,this._showOutlineProperty=o.outline??jMe,this._outlineColorProperty=c?o.outlineColor??qMe:void 0,this._shadowsProperty=o.shadows??$Me,this._distanceDisplayConditionProperty=o.distanceDisplayCondition??eve,this._classificationTypeProperty=o.classificationType??tve,this._fillEnabled=s;let u=this._isOnTerrain(e,o)&&(this._supportsMaterialsforEntitiesOnTerrain||this._materialProperty instanceof Kt);if(c&&u&&(_t(_t.geometryOutlines),c=!1),this._onTerrain=u,this._outlineEnabled=c,this._isDynamic(e,o))this._dynamic||(this._dynamic=!0,this._geometryChanged.raiseEvent(this));else{this._setStaticOptions(e,o),this._isClosed=this._getIsClosed(this._options);let h=o.outlineWidth;this._outlineWidth=l(h)?h.getValue(qe.MINIMUM_VALUE):1,this._dynamic=!1,this._geometryChanged.raiseEvent(this)}};Ll.prototype.createDynamicUpdater=function(e,t){return new this.constructor.DynamicGeometryUpdater(this,e,t)};var Si=Ll;var vmn=y(x(),1);var Emn=y(x(),1);function FS(e,t){this._callback=void 0,this._isConstant=void 0,this._definitionChanged=new xe,this.setCallback(e,t)}Object.defineProperties(FS.prototype,{isConstant:{get:function(){return this._isConstant}},definitionChanged:{get:function(){return this._definitionChanged}}});var nve=new q;FS.prototype.getValue=function(e,t){return l(e)||(e=q.now(nve)),this._callback(e,t)};FS.prototype.setCallback=function(e,t){let n=this._callback!==e||this._isConstant!==t;this._callback=e,this._isConstant=t,n&&this._definitionChanged.raiseEvent(this)};FS.prototype.equals=function(e){return this===e||e instanceof FS&&this._callback===e._callback&&this._isConstant===e._isConstant};var Bh=FS;var wmn=y(x(),1);var jce=new m;function BS(e,t,n,i){this._scene=e,this._heightReference=n,this._extrudedHeightReference=i,this._positionProperty=t,this._position=new m,this._cartographicPosition=new Ae,this._normal=new m,this._definitionChanged=new xe,this._terrainHeight=0,this._removeCallbackFunc=void 0,this._removeEventListener=void 0,this._removeModeListener=void 0;let o=this;if(l(e.globe)&&(this._removeEventListener=e.terrainProviderChanged.addEventListener(function(){o._updateClamping()}),this._removeModeListener=e.morphComplete.addEventListener(function(){o._updateClamping()})),t.isConstant){let r=t.getValue(qe.MINIMUM_VALUE,jce);if(!l(r)||m.equals(r,m.ZERO)||!l(e.globe))return;this._position=m.clone(r,this._position),this._updateClamping(),this._normal=e.ellipsoid.geodeticSurfaceNormal(r,this._normal)}}Object.defineProperties(BS.prototype,{isConstant:{get:function(){return!1}},definitionChanged:{get:function(){return this._definitionChanged}}});BS.prototype._updateClamping=function(){l(this._removeCallbackFunc)&&this._removeCallbackFunc();let e=this._scene,t=this._position;if(m.equals(t,m.ZERO)){this._terrainHeight=0;return}let i=e.ellipsoid.cartesianToCartographic(t,this._cartographicPosition),o=e.getHeight(i,this._heightReference);l(o)?this._terrainHeight=o:this._terrainHeight=0;let r=s=>{this._terrainHeight=s.height,this.definitionChanged.raiseEvent()};this._removeCallbackFunc=e.updateHeight(i,r,this._heightReference)};var ive=new q;BS.prototype.getValue=function(e,t){l(e)||(e=q.now(ive));let n=K.getValueOrDefault(this._heightReference,e,rt.NONE),i=K.getValueOrDefault(this._extrudedHeightReference,e,rt.NONE);if(n===rt.NONE&&!CS(i))return this._position=m.clone(m.ZERO,this._position),m.clone(m.ZERO,t);if(this._positionProperty.isConstant)return m.multiplyByScalar(this._normal,this._terrainHeight,t);let o=this._scene,r=this._positionProperty.getValue(e,jce);if(!l(r)||m.equals(r,m.ZERO)||!l(o.globe))return m.clone(m.ZERO,t);if(m.equalsEpsilon(this._position,r,L.EPSILON10))return m.multiplyByScalar(this._normal,this._terrainHeight,t);this._position=m.clone(r,this._position),this._updateClamping();let s=o.ellipsoid.geodeticSurfaceNormal(r,this._normal);return m.multiplyByScalar(s,this._terrainHeight,t)};BS.prototype.isDestroyed=function(){return!1};BS.prototype.destroy=function(){return l(this._removeEventListener)&&this._removeEventListener(),l(this._removeModeListener)&&this._removeModeListener(),l(this._removeCallbackFunc)&&this._removeCallbackFunc(),he(this)};var $x=BS;function ove(e,t,n,i){if(Si.prototype._onEntityPropertyChanged.call(this,e,t,n,i),this._observedPropertyNames.indexOf(t)===-1)return;let o=this._entity[this._geometryPropertyName];if(!l(o))return;l(this._terrainOffsetProperty)&&(this._terrainOffsetProperty.destroy(),this._terrainOffsetProperty=void 0);let r=o.heightReference;if(l(r)){let s=new Bh(this._computeCenter.bind(this),!this._dynamic);this._terrainOffsetProperty=new $x(this._scene,s,r)}}var kA=ove;var qce=m.ZERO,$ce=new m,rve=new m,ele=new U;function sve(e){this.id=e,this.vertexFormat=void 0,this.dimensions=void 0,this.offsetAttribute=void 0}function au(e,t){Si.call(this,{entity:e,scene:t,geometryOptions:new sve(e),geometryPropertyName:"box",observedPropertyNames:["availability","position","orientation","box"]}),this._onEntityPropertyChanged(e,"box",e.box,void 0)}l(Object.create)&&(au.prototype=Object.create(Si.prototype),au.prototype.constructor=au);Object.defineProperties(au.prototype,{terrainOffsetProperty:{get:function(){return this._terrainOffsetProperty}}});au.prototype.createFillGeometryInstance=function(e){let t=this._entity,n=t.isAvailable(e),i=new Rn(n&&t.isShowing&&this._showProperty.getValue(e)&&this._fillProperty.getValue(e)),o=this._distanceDisplayConditionProperty.getValue(e),r=ei.fromDistanceDisplayCondition(o),s={show:i,distanceDisplayCondition:r,color:void 0,offset:void 0};if(this._materialProperty instanceof Kt){let a;l(this._materialProperty.color)&&(this._materialProperty.color.isConstant||n)&&(a=this._materialProperty.color.getValue(e,ele)),l(a)||(a=U.WHITE),s.color=$t.fromColor(a)}return l(this._options.offsetAttribute)&&(s.offset=Ao.fromCartesian3(K.getValueOrDefault(this._terrainOffsetProperty,e,qce,$ce))),new wt({id:t,geometry:Cc.fromDimensions(this._options),modelMatrix:t.computeModelMatrixForHeightReference(e,t.box.heightReference,this._options.dimensions.z*.5,this._scene.ellipsoid),attributes:s})};au.prototype.createOutlineGeometryInstance=function(e){let t=this._entity,n=t.isAvailable(e),i=K.getValueOrDefault(this._outlineColorProperty,e,U.BLACK,ele),o=this._distanceDisplayConditionProperty.getValue(e),r={show:new Rn(n&&t.isShowing&&this._showProperty.getValue(e)&&this._showOutlineProperty.getValue(e)),color:$t.fromColor(i),distanceDisplayCondition:ei.fromDistanceDisplayCondition(o),offset:void 0};return l(this._options.offsetAttribute)&&(r.offset=Ao.fromCartesian3(K.getValueOrDefault(this._terrainOffsetProperty,e,qce,$ce))),new wt({id:t,geometry:Rh.fromDimensions(this._options),modelMatrix:t.computeModelMatrixForHeightReference(e,t.box.heightReference,this._options.dimensions.z*.5,this._scene.ellipsoid),attributes:r})};au.prototype._computeCenter=function(e,t){return K.getValueOrUndefined(this._entity.position,e,t)};au.prototype._isHidden=function(e,t){return!l(t.dimensions)||!l(e.position)||Si.prototype._isHidden.call(this,e,t)};au.prototype._isDynamic=function(e,t){return!e.position.isConstant||!K.isConstant(e.orientation)||!t.dimensions.isConstant||!K.isConstant(t.outlineWidth)};au.prototype._setStaticOptions=function(e,t){let n=K.getValueOrDefault(t.heightReference,qe.MINIMUM_VALUE,rt.NONE),i=this._options;i.vertexFormat=this._materialProperty instanceof Kt?yn.VERTEX_FORMAT:go.MaterialSupport.TEXTURED.vertexFormat,i.dimensions=t.dimensions.getValue(qe.MINIMUM_VALUE,i.dimensions),i.offsetAttribute=n!==rt.NONE?An.ALL:void 0};au.prototype._onEntityPropertyChanged=kA;au.DynamicGeometryUpdater=wS;function wS(e,t,n){Ei.call(this,e,t,n)}l(Object.create)&&(wS.prototype=Object.create(Ei.prototype),wS.prototype.constructor=wS);wS.prototype._isHidden=function(e,t,n){let i=K.getValueOrUndefined(e.position,n,rve),o=this._options.dimensions;return!l(i)||!l(o)||Ei.prototype._isHidden.call(this,e,t,n)};wS.prototype._setOptions=function(e,t,n){let i=K.getValueOrDefault(t.heightReference,n,rt.NONE),o=this._options;o.dimensions=K.getValueOrUndefined(t.dimensions,n,o.dimensions),o.offsetAttribute=i!==rt.NONE?An.ALL:void 0};var mW=au;var Ahn=y(x(),1);function eC(e,t,n){this._callback=void 0,this._isConstant=void 0,this._referenceFrame=n??Ni.FIXED,this._definitionChanged=new xe,this.setCallback(e,t)}Object.defineProperties(eC.prototype,{isConstant:{get:function(){return this._isConstant}},definitionChanged:{get:function(){return this._definitionChanged}},referenceFrame:{get:function(){return this._referenceFrame}}});var ave=new q;eC.prototype.getValue=function(e,t){return l(e)||(e=q.now(ave)),this.getValueInReferenceFrame(e,Ni.FIXED,t)};eC.prototype.setCallback=function(e,t){let n=this._callback!==e||this._isConstant!==t;this._callback=e,this._isConstant=t,n&&this._definitionChanged.raiseEvent(this)};eC.prototype.getValueInReferenceFrame=function(e,t,n){let i=this._callback(e,n);return Gh.convertToReferenceFrame(e,i,this._referenceFrame,t,n)};eC.prototype.equals=function(e){return this===e||e instanceof eC&&this._callback===e._callback&&this._isConstant===e._isConstant&&this._referenceFrame===e._referenceFrame};var hW=eC;var emi=y(x(),1);var Dui=y(x(),1);var Thn=y(x(),1);var bhn=y(x(),1);/*! @license DOMPurify 3.3.3 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/3.3.3/LICENSE */var{entries:lle,setPrototypeOf:tle,isFrozen:cve,getPrototypeOf:lve,getOwnPropertyDescriptor:dve}=Object,{freeze:Fl,seal:Am,create:ak}=Object,{apply:EJ,construct:SJ}=typeof Reflect<"u"&&Reflect;Fl||(Fl=function(t){return t});Am||(Am=function(t){return t});EJ||(EJ=function(t,n){for(var i=arguments.length,o=new Array(i>2?i-2:0),r=2;r<i;r++)o[r-2]=arguments[r];return t.apply(n,o)});SJ||(SJ=function(t){for(var n=arguments.length,i=new Array(n>1?n-1:0),o=1;o<n;o++)i[o-1]=arguments[o];return new t(...i)});var rk=Bl(Array.prototype.forEach),uve=Bl(Array.prototype.lastIndexOf),nle=Bl(Array.prototype.pop),fW=Bl(Array.prototype.push),mve=Bl(Array.prototype.splice),ck=Bl(String.prototype.toLowerCase),gJ=Bl(String.prototype.toString),bJ=Bl(String.prototype.match),pW=Bl(String.prototype.replace),hve=Bl(String.prototype.indexOf),fve=Bl(String.prototype.trim),cu=Bl(Object.prototype.hasOwnProperty),Wl=Bl(RegExp.prototype.test),AW=pve(TypeError);function Bl(e){return function(t){t instanceof RegExp&&(t.lastIndex=0);for(var n=arguments.length,i=new Array(n>1?n-1:0),o=1;o<n;o++)i[o-1]=arguments[o];return EJ(e,t,i)}}function pve(e){return function(){for(var t=arguments.length,n=new Array(t),i=0;i<t;i++)n[i]=arguments[i];return SJ(e,n)}}function Mi(e,t){let n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:ck;tle&&tle(e,null);let i=t.length;for(;i--;){let o=t[i];if(typeof o=="string"){let r=n(o);r!==o&&(cve(t)||(t[i]=r),o=r)}e[o]=!0}return e}function Ave(e){for(let t=0;t<e.length;t++)cu(e,t)||(e[t]=null);return e}function ap(e){let t=ak(null);for(let[n,i]of lle(e))cu(e,n)&&(Array.isArray(i)?t[n]=Ave(i):i&&typeof i=="object"&&i.constructor===Object?t[n]=ap(i):t[n]=i);return t}function gW(e,t){for(;e!==null;){let i=dve(e,t);if(i){if(i.get)return Bl(i.get);if(typeof i.value=="function")return Bl(i.value)}e=lve(e)}function n(){return null}return n}var ile=Fl(["a","abbr","acronym","address","area","article","aside","audio","b","bdi","bdo","big","blink","blockquote","body","br","button","canvas","caption","center","cite","code","col","colgroup","content","data","datalist","dd","decorator","del","details","dfn","dialog","dir","div","dl","dt","element","em","fieldset","figcaption","figure","font","footer","form","h1","h2","h3","h4","h5","h6","head","header","hgroup","hr","html","i","img","input","ins","kbd","label","legend","li","main","map","mark","marquee","menu","menuitem","meter","nav","nobr","ol","optgroup","option","output","p","picture","pre","progress","q","rp","rt","ruby","s","samp","search","section","select","shadow","slot","small","source","spacer","span","strike","strong","style","sub","summary","sup","table","tbody","td","template","textarea","tfoot","th","thead","time","tr","track","tt","u","ul","var","video","wbr"]),yJ=Fl(["svg","a","altglyph","altglyphdef","altglyphitem","animatecolor","animatemotion","animatetransform","circle","clippath","defs","desc","ellipse","enterkeyhint","exportparts","filter","font","g","glyph","glyphref","hkern","image","inputmode","line","lineargradient","marker","mask","metadata","mpath","part","path","pattern","polygon","polyline","radialgradient","rect","stop","style","switch","symbol","text","textpath","title","tref","tspan","view","vkern"]),xJ=Fl(["feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feDistantLight","feDropShadow","feFlood","feFuncA","feFuncB","feFuncG","feFuncR","feGaussianBlur","feImage","feMerge","feMergeNode","feMorphology","feOffset","fePointLight","feSpecularLighting","feSpotLight","feTile","feTurbulence"]),gve=Fl(["animate","color-profile","cursor","discard","font-face","font-face-format","font-face-name","font-face-src","font-face-uri","foreignobject","hatch","hatchpath","mesh","meshgradient","meshpatch","meshrow","missing-glyph","script","set","solidcolor","unknown","use"]),CJ=Fl(["math","menclose","merror","mfenced","mfrac","mglyph","mi","mlabeledtr","mmultiscripts","mn","mo","mover","mpadded","mphantom","mroot","mrow","ms","mspace","msqrt","mstyle","msub","msup","msubsup","mtable","mtd","mtext","mtr","munder","munderover","mprescripts"]),bve=Fl(["maction","maligngroup","malignmark","mlongdiv","mscarries","mscarry","msgroup","mstack","msline","msrow","semantics","annotation","annotation-xml","mprescripts","none"]),ole=Fl(["#text"]),rle=Fl(["accept","action","align","alt","autocapitalize","autocomplete","autopictureinpicture","autoplay","background","bgcolor","border","capture","cellpadding","cellspacing","checked","cite","class","clear","color","cols","colspan","controls","controlslist","coords","crossorigin","datetime","decoding","default","dir","disabled","disablepictureinpicture","disableremoteplayback","download","draggable","enctype","enterkeyhint","exportparts","face","for","headers","height","hidden","high","href","hreflang","id","inert","inputmode","integrity","ismap","kind","label","lang","list","loading","loop","low","max","maxlength","media","method","min","minlength","multiple","muted","name","nonce","noshade","novalidate","nowrap","open","optimum","part","pattern","placeholder","playsinline","popover","popovertarget","popovertargetaction","poster","preload","pubdate","radiogroup","readonly","rel","required","rev","reversed","role","rows","rowspan","spellcheck","scope","selected","shape","size","sizes","slot","span","srclang","start","src","srcset","step","style","summary","tabindex","title","translate","type","usemap","valign","value","width","wrap","xmlns","slot"]),TJ=Fl(["accent-height","accumulate","additive","alignment-baseline","amplitude","ascent","attributename","attributetype","azimuth","basefrequency","baseline-shift","begin","bias","by","class","clip","clippathunits","clip-path","clip-rule","color","color-interpolation","color-interpolation-filters","color-profile","color-rendering","cx","cy","d","dx","dy","diffuseconstant","direction","display","divisor","dur","edgemode","elevation","end","exponent","fill","fill-opacity","fill-rule","filter","filterunits","flood-color","flood-opacity","font-family","font-size","font-size-adjust","font-stretch","font-style","font-variant","font-weight","fx","fy","g1","g2","glyph-name","glyphref","gradientunits","gradienttransform","height","href","id","image-rendering","in","in2","intercept","k","k1","k2","k3","k4","kerning","keypoints","keysplines","keytimes","lang","lengthadjust","letter-spacing","kernelmatrix","kernelunitlength","lighting-color","local","marker-end","marker-mid","marker-start","markerheight","markerunits","markerwidth","maskcontentunits","maskunits","max","mask","mask-type","media","method","mode","min","name","numoctaves","offset","operator","opacity","order","orient","orientation","origin","overflow","paint-order","path","pathlength","patterncontentunits","patterntransform","patternunits","points","preservealpha","preserveaspectratio","primitiveunits","r","rx","ry","radius","refx","refy","repeatcount","repeatdur","restart","result","rotate","scale","seed","shape-rendering","slope","specularconstant","specularexponent","spreadmethod","startoffset","stddeviation","stitchtiles","stop-color","stop-opacity","stroke-dasharray","stroke-dashoffset","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke","stroke-width","style","surfacescale","systemlanguage","tabindex","tablevalues","targetx","targety","transform","transform-origin","text-anchor","text-decoration","text-rendering","textlength","type","u1","u2","unicode","values","viewbox","visibility","version","vert-adv-y","vert-origin-x","vert-origin-y","width","word-spacing","wrap","writing-mode","xchannelselector","ychannelselector","x","x1","x2","xmlns","y","y1","y2","z","zoomandpan"]),sle=Fl(["accent","accentunder","align","bevelled","close","columnsalign","columnlines","columnspan","denomalign","depth","dir","display","displaystyle","encoding","fence","frame","height","href","id","largeop","length","linethickness","lspace","lquote","mathbackground","mathcolor","mathsize","mathvariant","maxsize","minsize","movablelimits","notation","numalign","open","rowalign","rowlines","rowspacing","rowspan","rspace","rquote","scriptlevel","scriptminsize","scriptsizemultiplier","selection","separator","separators","stretchy","subscriptshift","supscriptshift","symmetric","voffset","width","xmlns"]),sk=Fl(["xlink:href","xml:id","xlink:title","xml:space","xmlns:xlink"]),yve=Am(/\{\{[\w\W]*|[\w\W]*\}\}/gm),xve=Am(/<%[\w\W]*|[\w\W]*%>/gm),Cve=Am(/\$\{[\w\W]*/gm),Tve=Am(/^data-[\-\w.\u00B7-\uFFFF]+$/),Eve=Am(/^aria-[\-\w]+$/),dle=Am(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp|matrix):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i),Sve=Am(/^(?:\w+script|data):/i),_ve=Am(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g),ule=Am(/^html$/i),Ive=Am(/^[a-z][.\w]*(-[.\w]+)+$/i),ale=Object.freeze({__proto__:null,ARIA_ATTR:Eve,ATTR_WHITESPACE:_ve,CUSTOM_ELEMENT:Ive,DATA_ATTR:Tve,DOCTYPE_NAME:ule,ERB_EXPR:xve,IS_ALLOWED_URI:dle,IS_SCRIPT_OR_DATA:Sve,MUSTACHE_EXPR:yve,TMPLIT_EXPR:Cve}),bW={element:1,attribute:2,text:3,cdataSection:4,entityReference:5,entityNode:6,progressingInstruction:7,comment:8,document:9,documentType:10,documentFragment:11,notation:12},Zve=function(){return typeof window>"u"?null:window},Rve=function(t,n){if(typeof t!="object"||typeof t.createPolicy!="function")return null;let i=null,o="data-tt-policy-suffix";n&&n.hasAttribute(o)&&(i=n.getAttribute(o));let r="dompurify"+(i?"#"+i:"");try{return t.createPolicy(r,{createHTML(s){return s},createScriptURL(s){return s}})}catch{return console.warn("TrustedTypes policy "+r+" could not be created."),null}},cle=function(){return{afterSanitizeAttributes:[],afterSanitizeElements:[],afterSanitizeShadowDOM:[],beforeSanitizeAttributes:[],beforeSanitizeElements:[],beforeSanitizeShadowDOM:[],uponSanitizeAttribute:[],uponSanitizeElement:[],uponSanitizeShadowNode:[]}};function mle(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:Zve(),t=sn=>mle(sn);if(t.version="3.3.3",t.removed=[],!e||!e.document||e.document.nodeType!==bW.document||!e.Element)return t.isSupported=!1,t;let{document:n}=e,i=n,o=i.currentScript,{DocumentFragment:r,HTMLTemplateElement:s,Node:a,Element:c,NodeFilter:d,NamedNodeMap:u=e.NamedNodeMap||e.MozNamedAttrMap,HTMLFormElement:h,DOMParser:p,trustedTypes:A}=e,f=c.prototype,b=gW(f,"cloneNode"),C=gW(f,"remove"),T=gW(f,"nextSibling"),E=gW(f,"childNodes"),S=gW(f,"parentNode");if(typeof s=="function"){let sn=n.createElement("template");sn.content&&sn.content.ownerDocument&&(n=sn.content.ownerDocument)}let I,R="",{implementation:V,createNodeIterator:W,createDocumentFragment:B,getElementsByTagName:N}=n,{importNode:P}=i,g=cle();t.isSupported=typeof lle=="function"&&typeof S=="function"&&V&&V.createHTMLDocument!==void 0;let{MUSTACHE_EXPR:_,ERB_EXPR:Z,TMPLIT_EXPR:G,DATA_ATTR:w,ARIA_ATTR:X,IS_SCRIPT_OR_DATA:k,ATTR_WHITESPACE:v,CUSTOM_ELEMENT:D}=ale,{IS_ALLOWED_URI:Y}=ale,O=null,J=Mi({},[...ile,...yJ,...xJ,...CJ,...ole]),te=null,z=Mi({},[...rle,...TJ,...sle,...sk]),j=Object.seal(ak(null,{tagNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},allowCustomizedBuiltInElements:{writable:!0,configurable:!1,enumerable:!0,value:!1}})),ee=null,ge=null,ye=Object.seal(ak(null,{tagCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeCheck:{writable:!0,configurable:!1,enumerable:!0,value:null}})),ae=!0,Ce=!0,Te=!1,Fe=!0,Ne=!1,Pe=!0,Xe=!1,st=!1,Ye=!1,xt=!1,at=!1,Je=!1,lt=!0,ht=!1,Rt="user-content-",_e=!0,Re=!1,jt={},At=null,kt=Mi({},["annotation-xml","audio","colgroup","desc","foreignobject","head","iframe","math","mi","mn","mo","ms","mtext","noembed","noframes","noscript","plaintext","script","style","svg","template","thead","title","video","xmp"]),On=null,$e=Mi({},["audio","video","img","source","image","track"]),uo=null,Qt=Mi({},["alt","class","for","id","label","name","pattern","placeholder","role","summary","title","value","style","xmlns"]),Bo="http://www.w3.org/1998/Math/MathML",no="http://www.w3.org/2000/svg",Yi="http://www.w3.org/1999/xhtml",Oo=Yi,ai=!1,jn=null,io=Mi({},[Bo,no,Yi],gJ),wo=Mi({},["mi","mo","mn","ms","mtext"]),bo=Mi({},["annotation-xml"]),nr=Mi({},["title","style","font","a","script"]),zo=null,Sn=["application/xhtml+xml","text/html"],Ri="text/html",Pn=null,Ho=null,Jo=n.createElement("form"),oa=function(Ve){return Ve instanceof RegExp||Ve instanceof Function},Di=function(){let Ve=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};if(!(Ho&&Ho===Ve)){if((!Ve||typeof Ve!="object")&&(Ve={}),Ve=ap(Ve),zo=Sn.indexOf(Ve.PARSER_MEDIA_TYPE)===-1?Ri:Ve.PARSER_MEDIA_TYPE,Pn=zo==="application/xhtml+xml"?gJ:ck,O=cu(Ve,"ALLOWED_TAGS")?Mi({},Ve.ALLOWED_TAGS,Pn):J,te=cu(Ve,"ALLOWED_ATTR")?Mi({},Ve.ALLOWED_ATTR,Pn):z,jn=cu(Ve,"ALLOWED_NAMESPACES")?Mi({},Ve.ALLOWED_NAMESPACES,gJ):io,uo=cu(Ve,"ADD_URI_SAFE_ATTR")?Mi(ap(Qt),Ve.ADD_URI_SAFE_ATTR,Pn):Qt,On=cu(Ve,"ADD_DATA_URI_TAGS")?Mi(ap($e),Ve.ADD_DATA_URI_TAGS,Pn):$e,At=cu(Ve,"FORBID_CONTENTS")?Mi({},Ve.FORBID_CONTENTS,Pn):kt,ee=cu(Ve,"FORBID_TAGS")?Mi({},Ve.FORBID_TAGS,Pn):ap({}),ge=cu(Ve,"FORBID_ATTR")?Mi({},Ve.FORBID_ATTR,Pn):ap({}),jt=cu(Ve,"USE_PROFILES")?Ve.USE_PROFILES:!1,ae=Ve.ALLOW_ARIA_ATTR!==!1,Ce=Ve.ALLOW_DATA_ATTR!==!1,Te=Ve.ALLOW_UNKNOWN_PROTOCOLS||!1,Fe=Ve.ALLOW_SELF_CLOSE_IN_ATTR!==!1,Ne=Ve.SAFE_FOR_TEMPLATES||!1,Pe=Ve.SAFE_FOR_XML!==!1,Xe=Ve.WHOLE_DOCUMENT||!1,xt=Ve.RETURN_DOM||!1,at=Ve.RETURN_DOM_FRAGMENT||!1,Je=Ve.RETURN_TRUSTED_TYPE||!1,Ye=Ve.FORCE_BODY||!1,lt=Ve.SANITIZE_DOM!==!1,ht=Ve.SANITIZE_NAMED_PROPS||!1,_e=Ve.KEEP_CONTENT!==!1,Re=Ve.IN_PLACE||!1,Y=Ve.ALLOWED_URI_REGEXP||dle,Oo=Ve.NAMESPACE||Yi,wo=Ve.MATHML_TEXT_INTEGRATION_POINTS||wo,bo=Ve.HTML_INTEGRATION_POINTS||bo,j=Ve.CUSTOM_ELEMENT_HANDLING||{},Ve.CUSTOM_ELEMENT_HANDLING&&oa(Ve.CUSTOM_ELEMENT_HANDLING.tagNameCheck)&&(j.tagNameCheck=Ve.CUSTOM_ELEMENT_HANDLING.tagNameCheck),Ve.CUSTOM_ELEMENT_HANDLING&&oa(Ve.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)&&(j.attributeNameCheck=Ve.CUSTOM_ELEMENT_HANDLING.attributeNameCheck),Ve.CUSTOM_ELEMENT_HANDLING&&typeof Ve.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements=="boolean"&&(j.allowCustomizedBuiltInElements=Ve.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements),Ne&&(Ce=!1),at&&(xt=!0),jt&&(O=Mi({},ole),te=ak(null),jt.html===!0&&(Mi(O,ile),Mi(te,rle)),jt.svg===!0&&(Mi(O,yJ),Mi(te,TJ),Mi(te,sk)),jt.svgFilters===!0&&(Mi(O,xJ),Mi(te,TJ),Mi(te,sk)),jt.mathMl===!0&&(Mi(O,CJ),Mi(te,sle),Mi(te,sk))),cu(Ve,"ADD_TAGS")||(ye.tagCheck=null),cu(Ve,"ADD_ATTR")||(ye.attributeCheck=null),Ve.ADD_TAGS&&(typeof Ve.ADD_TAGS=="function"?ye.tagCheck=Ve.ADD_TAGS:(O===J&&(O=ap(O)),Mi(O,Ve.ADD_TAGS,Pn))),Ve.ADD_ATTR&&(typeof Ve.ADD_ATTR=="function"?ye.attributeCheck=Ve.ADD_ATTR:(te===z&&(te=ap(te)),Mi(te,Ve.ADD_ATTR,Pn))),Ve.ADD_URI_SAFE_ATTR&&Mi(uo,Ve.ADD_URI_SAFE_ATTR,Pn),Ve.FORBID_CONTENTS&&(At===kt&&(At=ap(At)),Mi(At,Ve.FORBID_CONTENTS,Pn)),Ve.ADD_FORBID_CONTENTS&&(At===kt&&(At=ap(At)),Mi(At,Ve.ADD_FORBID_CONTENTS,Pn)),_e&&(O["#text"]=!0),Xe&&Mi(O,["html","head","body"]),O.table&&(Mi(O,["tbody"]),delete ee.tbody),Ve.TRUSTED_TYPES_POLICY){if(typeof Ve.TRUSTED_TYPES_POLICY.createHTML!="function")throw AW('TRUSTED_TYPES_POLICY configuration option must provide a "createHTML" hook.');if(typeof Ve.TRUSTED_TYPES_POLICY.createScriptURL!="function")throw AW('TRUSTED_TYPES_POLICY configuration option must provide a "createScriptURL" hook.');I=Ve.TRUSTED_TYPES_POLICY,R=I.createHTML("")}else I===void 0&&(I=Rve(A,o)),I!==null&&typeof R=="string"&&(R=I.createHTML(""));Fl&&Fl(Ve),Ho=Ve}},Ro=Mi({},[...yJ,...xJ,...gve]),Ca=Mi({},[...CJ,...bve]),Ss=function(Ve){let ut=S(Ve);(!ut||!ut.tagName)&&(ut={namespaceURI:Oo,tagName:"template"});let cn=ck(Ve.tagName),po=ck(ut.tagName);return jn[Ve.namespaceURI]?Ve.namespaceURI===no?ut.namespaceURI===Yi?cn==="svg":ut.namespaceURI===Bo?cn==="svg"&&(po==="annotation-xml"||wo[po]):!!Ro[cn]:Ve.namespaceURI===Bo?ut.namespaceURI===Yi?cn==="math":ut.namespaceURI===no?cn==="math"&&bo[po]:!!Ca[cn]:Ve.namespaceURI===Yi?ut.namespaceURI===no&&!bo[po]||ut.namespaceURI===Bo&&!wo[po]?!1:!Ca[cn]&&(nr[cn]||!Ro[cn]):!!(zo==="application/xhtml+xml"&&jn[Ve.namespaceURI]):!1},Wr=function(Ve){fW(t.removed,{element:Ve});try{S(Ve).removeChild(Ve)}catch{C(Ve)}},Ta=function(Ve,ut){try{fW(t.removed,{attribute:ut.getAttributeNode(Ve),from:ut})}catch{fW(t.removed,{attribute:null,from:ut})}if(ut.removeAttribute(Ve),Ve==="is")if(xt||at)try{Wr(ut)}catch{}else try{ut.setAttribute(Ve,"")}catch{}},zd=function(Ve){let ut=null,cn=null;if(Ye)Ve="<remove></remove>"+Ve;else{let mo=bJ(Ve,/^[\r\n\t ]+/);cn=mo&&mo[0]}zo==="application/xhtml+xml"&&Oo===Yi&&(Ve='<html xmlns="http://www.w3.org/1999/xhtml"><head></head><body>'+Ve+"</body></html>");let po=I?I.createHTML(Ve):Ve;if(Oo===Yi)try{ut=new p().parseFromString(po,zo)}catch{}if(!ut||!ut.documentElement){ut=V.createDocument(Oo,"template",null);try{ut.documentElement.innerHTML=ai?R:po}catch{}}let vs=ut.body||ut.documentElement;return Ve&&cn&&vs.insertBefore(n.createTextNode(cn),vs.childNodes[0]||null),Oo===Yi?N.call(ut,Xe?"html":"body")[0]:Xe?ut.documentElement:vs},Hd=function(Ve){return W.call(Ve.ownerDocument||Ve,Ve,d.SHOW_ELEMENT|d.SHOW_COMMENT|d.SHOW_TEXT|d.SHOW_PROCESSING_INSTRUCTION|d.SHOW_CDATA_SECTION,null)},Jd=function(Ve){return Ve instanceof h&&(typeof Ve.nodeName!="string"||typeof Ve.textContent!="string"||typeof Ve.removeChild!="function"||!(Ve.attributes instanceof u)||typeof Ve.removeAttribute!="function"||typeof Ve.setAttribute!="function"||typeof Ve.namespaceURI!="string"||typeof Ve.insertBefore!="function"||typeof Ve.hasChildNodes!="function")},ph=function(Ve){return typeof a=="function"&&Ve instanceof a};function Ja(sn,Ve,ut){rk(sn,cn=>{cn.call(t,Ve,ut,Ho)})}let Nb=function(Ve){let ut=null;if(Ja(g.beforeSanitizeElements,Ve,null),Jd(Ve))return Wr(Ve),!0;let cn=Pn(Ve.nodeName);if(Ja(g.uponSanitizeElement,Ve,{tagName:cn,allowedTags:O}),Pe&&Ve.hasChildNodes()&&!ph(Ve.firstElementChild)&&Wl(/<[/\w!]/g,Ve.innerHTML)&&Wl(/<[/\w!]/g,Ve.textContent)||Ve.nodeType===bW.progressingInstruction||Pe&&Ve.nodeType===bW.comment&&Wl(/<[/\w]/g,Ve.data))return Wr(Ve),!0;if(!(ye.tagCheck instanceof Function&&ye.tagCheck(cn))&&(!O[cn]||ee[cn])){if(!ee[cn]&&Cr(cn)&&(j.tagNameCheck instanceof RegExp&&Wl(j.tagNameCheck,cn)||j.tagNameCheck instanceof Function&&j.tagNameCheck(cn)))return!1;if(_e&&!At[cn]){let po=S(Ve)||Ve.parentNode,vs=E(Ve)||Ve.childNodes;if(vs&&po){let mo=vs.length;for(let _s=mo-1;_s>=0;--_s){let pl=b(vs[_s],!0);pl.__removalCount=(Ve.__removalCount||0)+1,po.insertBefore(pl,T(Ve))}}}return Wr(Ve),!0}return Ve instanceof c&&!Ss(Ve)||(cn==="noscript"||cn==="noembed"||cn==="noframes")&&Wl(/<\/no(script|embed|frames)/i,Ve.innerHTML)?(Wr(Ve),!0):(Ne&&Ve.nodeType===bW.text&&(ut=Ve.textContent,rk([_,Z,G],po=>{ut=pW(ut,po," ")}),Ve.textContent!==ut&&(fW(t.removed,{element:Ve.cloneNode()}),Ve.textContent=ut)),Ja(g.afterSanitizeElements,Ve,null),!1)},zf=function(Ve,ut,cn){if(ge[ut]||lt&&(ut==="id"||ut==="name")&&(cn in n||cn in Jo))return!1;if(!(Ce&&!ge[ut]&&Wl(w,ut))){if(!(ae&&Wl(X,ut))){if(!(ye.attributeCheck instanceof Function&&ye.attributeCheck(ut,Ve))){if(!te[ut]||ge[ut]){if(!(Cr(Ve)&&(j.tagNameCheck instanceof RegExp&&Wl(j.tagNameCheck,Ve)||j.tagNameCheck instanceof Function&&j.tagNameCheck(Ve))&&(j.attributeNameCheck instanceof RegExp&&Wl(j.attributeNameCheck,ut)||j.attributeNameCheck instanceof Function&&j.attributeNameCheck(ut,Ve))||ut==="is"&&j.allowCustomizedBuiltInElements&&(j.tagNameCheck instanceof RegExp&&Wl(j.tagNameCheck,cn)||j.tagNameCheck instanceof Function&&j.tagNameCheck(cn))))return!1}else if(!uo[ut]){if(!Wl(Y,pW(cn,v,""))){if(!((ut==="src"||ut==="xlink:href"||ut==="href")&&Ve!=="script"&&hve(cn,"data:")===0&&On[Ve])){if(!(Te&&!Wl(k,pW(cn,v,"")))){if(cn)return!1}}}}}}}return!0},Cr=function(Ve){return Ve!=="annotation-xml"&&bJ(Ve,D)},ra=function(Ve){Ja(g.beforeSanitizeAttributes,Ve,null);let{attributes:ut}=Ve;if(!ut||Jd(Ve))return;let cn={attrName:"",attrValue:"",keepAttr:!0,allowedAttributes:te,forceKeepAttr:void 0},po=ut.length;for(;po--;){let vs=ut[po],{name:mo,namespaceURI:_s,value:pl}=vs,Pb=Pn(mo),yR=pl,Ea=mo==="value"?yR:fve(yR);if(cn.attrName=Pb,cn.attrValue=Ea,cn.keepAttr=!0,cn.forceKeepAttr=void 0,Ja(g.uponSanitizeAttribute,Ve,cn),Ea=cn.attrValue,ht&&(Pb==="id"||Pb==="name")&&(Ta(mo,Ve),Ea=Rt+Ea),Pe&&Wl(/((--!?|])>)|<\/(style|script|title|xmp|textarea|noscript|iframe|noembed|noframes)/i,Ea)){Ta(mo,Ve);continue}if(Pb==="attributename"&&bJ(Ea,"href")){Ta(mo,Ve);continue}if(cn.forceKeepAttr)continue;if(!cn.keepAttr){Ta(mo,Ve);continue}if(!Fe&&Wl(/\/>/i,Ea)){Ta(mo,Ve);continue}Ne&&rk([_,Z,G],vU=>{Ea=pW(Ea,vU," ")});let MU=Pn(Ve.nodeName);if(!zf(MU,Pb,Ea)){Ta(mo,Ve);continue}if(I&&typeof A=="object"&&typeof A.getAttributeType=="function"&&!_s)switch(A.getAttributeType(MU,Pb)){case"TrustedHTML":{Ea=I.createHTML(Ea);break}case"TrustedScriptURL":{Ea=I.createScriptURL(Ea);break}}if(Ea!==yR)try{_s?Ve.setAttributeNS(_s,mo,Ea):Ve.setAttribute(mo,Ea),Jd(Ve)?Wr(Ve):nle(t.removed)}catch{Ta(mo,Ve)}}Ja(g.afterSanitizeAttributes,Ve,null)},sa=function sn(Ve){let ut=null,cn=Hd(Ve);for(Ja(g.beforeSanitizeShadowDOM,Ve,null);ut=cn.nextNode();)Ja(g.uponSanitizeShadowNode,ut,null),Nb(ut),ra(ut),ut.content instanceof r&&sn(ut.content);Ja(g.afterSanitizeShadowDOM,Ve,null)};return t.sanitize=function(sn){let Ve=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},ut=null,cn=null,po=null,vs=null;if(ai=!sn,ai&&(sn="<!-->"),typeof sn!="string"&&!ph(sn))if(typeof sn.toString=="function"){if(sn=sn.toString(),typeof sn!="string")throw AW("dirty is not a string, aborting")}else throw AW("toString is not a function");if(!t.isSupported)return sn;if(st||Di(Ve),t.removed=[],typeof sn=="string"&&(Re=!1),Re){if(sn.nodeName){let pl=Pn(sn.nodeName);if(!O[pl]||ee[pl])throw AW("root node is forbidden and cannot be sanitized in-place")}}else if(sn instanceof a)ut=zd("<!---->"),cn=ut.ownerDocument.importNode(sn,!0),cn.nodeType===bW.element&&cn.nodeName==="BODY"||cn.nodeName==="HTML"?ut=cn:ut.appendChild(cn);else{if(!xt&&!Ne&&!Xe&&sn.indexOf("<")===-1)return I&&Je?I.createHTML(sn):sn;if(ut=zd(sn),!ut)return xt?null:Je?R:""}ut&&Ye&&Wr(ut.firstChild);let mo=Hd(Re?sn:ut);for(;po=mo.nextNode();)Nb(po),ra(po),po.content instanceof r&&sa(po.content);if(Re)return sn;if(xt){if(at)for(vs=B.call(ut.ownerDocument);ut.firstChild;)vs.appendChild(ut.firstChild);else vs=ut;return(te.shadowroot||te.shadowrootmode)&&(vs=P.call(i,vs,!0)),vs}let _s=Xe?ut.outerHTML:ut.innerHTML;return Xe&&O["!doctype"]&&ut.ownerDocument&&ut.ownerDocument.doctype&&ut.ownerDocument.doctype.name&&Wl(ule,ut.ownerDocument.doctype.name)&&(_s="<!DOCTYPE "+ut.ownerDocument.doctype.name+`>
`+_s),Ne&&rk([_,Z,G],pl=>{_s=pW(_s,pl," ")}),I&&Je?I.createHTML(_s):_s},t.setConfig=function(){let sn=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};Di(sn),st=!0},t.clearConfig=function(){Ho=null,st=!1},t.isValidAttribute=function(sn,Ve,ut){Ho||Di({});let cn=Pn(sn),po=Pn(Ve);return zf(cn,po,ut)},t.addHook=function(sn,Ve){typeof Ve=="function"&&fW(g[sn],Ve)},t.removeHook=function(sn,Ve){if(Ve!==void 0){let ut=uve(g[sn],Ve);return ut===-1?void 0:mve(g[sn],ut,1)[0]}return nle(g[sn])},t.removeHooks=function(sn){g[sn]=[]},t.removeAllHooks=function(){g=cle()},t}var hle=mle();var Vve=0,_J={};function cp(e,t){let n,i=e;l(_J[i])?n=_J[i]:(n=Vve++,_J[i]=n),t=t??!1,this._id=n,this._html=e,this._showOnScreen=t,this._element=void 0}Object.defineProperties(cp.prototype,{html:{get:function(){return this._html}},id:{get:function(){return this._id}},showOnScreen:{get:function(){return this._showOnScreen},set:function(e){this._showOnScreen=e}},element:{get:function(){if(!l(this._element)){let e=hle.sanitize(this._html),t=document.createElement("div");t.className="cesium-credit-wrapper",t._creditId=this._id,t.style.display="inline",t.innerHTML=e;let n=t.querySelectorAll("a");for(let i=0;i<n.length;i++)n[i].setAttribute("target","_blank");this._element=t}return this._element}}});cp.equals=function(e,t){return e===t||l(e)&&l(t)&&e._id===t._id&&e._showOnScreen===t._showOnScreen};cp.prototype.equals=function(e){return cp.equals(this,e)};cp.prototype.isIon=function(){return this.html.indexOf("ion-credit.png")!==-1};cp.getIonCredit=function(e){let t=l(e.collapsible)&&!e.collapsible;return new cp(e.html,t)};cp.clone=function(e){if(l(e))return new cp(e.html,e.showOnScreen)};var Et=cp;var _hn=y(x(),1);function Gve(e,t){_t(e,t)}var Va=Gve;var Dhn=y(x(),1);var Nhn=y(x(),1);function tC(e){this._url=e,this._cubeMapBuffers=void 0,this._texture=void 0,this._maximumMipmapLevel=void 0,this._loading=!1,this._ready=!1,this._errorEvent=new xe}Object.defineProperties(tC.prototype,{url:{get:function(){return this._url}},errorEvent:{get:function(){return this._errorEvent}},texture:{get:function(){return this._texture}},maximumMipmapLevel:{get:function(){return this._maximumMipmapLevel}},ready:{get:function(){return this._ready}}});tC.isSupported=function(e){return(e.colorBufferHalfFloat&&e.halfFloatingPointTexture||e.floatingPointTexture&&e.colorBufferFloat)&&e.supportsTextureLod};function IJ(e){e._cubeMapBuffers=void 0}tC.prototype.update=function(e){let{context:t}=e;if(!tC.isSupported(t))return;if(l(this._texture)){IJ(this);return}if(!l(this._texture)&&!this._loading){let u=t.textureCache.getTexture(this._url);l(u)&&(IJ(this),this._texture=u,this._maximumMipmapLevel=this._texture.maximumMipmapLevel,this._ready=!0)}let n=this._cubeMapBuffers;if(!l(n)&&!this._loading){let u=this;md(this._url).then(function(h){u._cubeMapBuffers=h,u._loading=!1}).catch(function(h){u.isDestroyed()||u._errorEvent.raiseEvent(h)}),this._loading=!0}if(!l(this._cubeMapBuffers))return;let{pixelDatatype:i}=n[0].positiveX;l(i)||(i=t.halfFloatingPointTexture?Oe.HALF_FLOAT:Oe.FLOAT);let o=Ke.RGBA,r=n.length;this._maximumMipmapLevel=r-1;let s=n[0].positiveX.width,a=Math.log2(s)+1;if(r!==a){let u={};Object.values(Or.FaceName).forEach(h=>{u[h]=void 0});for(let h=r;h<a;h++)n.push(u)}let c=new Ht({minificationFilter:zt.LINEAR_MIPMAP_LINEAR}),d=new Or({context:t,source:n[0],flipY:!1,pixelDatatype:i,pixelFormat:o,sampler:c});d.loadMipmaps(n.slice(1)),this._texture=d,this._texture.maximumMipmapLevel=this._maximumMipmapLevel,t.textureCache.addTexture(this._url,this._texture),this._ready=!0};tC.prototype.isDestroyed=function(){return!1};tC.prototype.destroy=function(){return IJ(this),this._texture=this._texture&&this._texture.destroy(),he(this)};var wh=tC;function yW(e){e=e??Q.EMPTY_OBJECT;let t=l(e.imageBasedLightingFactor)?M.clone(e.imageBasedLightingFactor):new M(1,1);this._imageBasedLightingFactor=t;let n=e.sphericalHarmonicCoefficients;this._sphericalHarmonicCoefficients=n,this._specularEnvironmentMaps=e.specularEnvironmentMaps,this._specularEnvironmentCubeMap=void 0,this._specularEnvironmentCubeMapDirty=!0,this._specularEnvironmentMapLoaded=!1,this._previousSpecularEnvironmentMapLoaded=!1,this._useDefaultSpecularMaps=!1,this._useDefaultSphericalHarmonics=!1,this._shouldRegenerateShaders=!1,this._previousFrameNumber=void 0,this._previousFrameContext=void 0,this._previousImageBasedLightingFactor=M.clone(t),this._previousSphericalHarmonicCoefficients=n,this._removeErrorListener=void 0}Object.defineProperties(yW.prototype,{imageBasedLightingFactor:{get:function(){return this._imageBasedLightingFactor},set:function(e){this._previousImageBasedLightingFactor=M.clone(this._imageBasedLightingFactor,this._previousImageBasedLightingFactor),this._imageBasedLightingFactor=M.clone(e,this._imageBasedLightingFactor)}},sphericalHarmonicCoefficients:{get:function(){return this._sphericalHarmonicCoefficients},set:function(e){this._previousSphericalHarmonicCoefficients=this._sphericalHarmonicCoefficients,this._sphericalHarmonicCoefficients=e}},specularEnvironmentMaps:{get:function(){return this._specularEnvironmentMaps},set:function(e){e!==this._specularEnvironmentMaps&&(this._specularEnvironmentCubeMapDirty=this._specularEnvironmentCubeMapDirty||e!==this._specularEnvironmentMaps,this._specularEnvironmentMapLoaded=!1),this._specularEnvironmentMaps=e}},enabled:{get:function(){return this._imageBasedLightingFactor.x>0||this._imageBasedLightingFactor.y>0}},shouldRegenerateShaders:{get:function(){return this._shouldRegenerateShaders}},specularEnvironmentCubeMap:{get:function(){return this._specularEnvironmentCubeMap}},useDefaultSphericalHarmonics:{get:function(){return this._useDefaultSphericalHarmonics}},useDefaultSpecularMaps:{get:function(){return this._useDefaultSpecularMaps}},useSpecularEnvironmentMaps:{get:function(){return l(this._specularEnvironmentCubeMap)&&this._specularEnvironmentCubeMap.ready||this._useDefaultSpecularMaps}}});function Lve(e,t){if(wh.isSupported(t)){if(e._specularEnvironmentCubeMap=e._specularEnvironmentCubeMap&&e._specularEnvironmentCubeMap.destroy(),l(e._specularEnvironmentMaps)){let n=new wh(e._specularEnvironmentMaps);e._specularEnvironmentCubeMap=n,e._removeErrorListener=n.errorEvent.addEventListener(i=>{console.error(`Error loading specularEnvironmentMaps: ${i}`)})}e._shouldRegenerateShaders=!0}}yW.prototype.update=function(e){if(e.frameNumber===this._previousFrameNumber&&e.context===this._previousFrameContext)return;this._previousFrameNumber=e.frameNumber;let t=this._previousFrameContext=e.context;e.brdfLutGenerator.update(e),this._shouldRegenerateShaders=!1;let n=this._imageBasedLightingFactor,i=this._previousImageBasedLightingFactor;M.equals(n,i)||(this._shouldRegenerateShaders=n.x>0&&i.x===0||n.x===0&&i.x>0,this._shouldRegenerateShaders=this._shouldRegenerateShaders||n.y>0&&i.y===0||n.y===0&&i.y>0,this._previousImageBasedLightingFactor=M.clone(this._imageBasedLightingFactor,this._previousImageBasedLightingFactor)),this._previousSphericalHarmonicCoefficients!==this._sphericalHarmonicCoefficients&&(this._shouldRegenerateShaders=this._shouldRegenerateShaders||l(this._previousSphericalHarmonicCoefficients)!==l(this._sphericalHarmonicCoefficients),this._previousSphericalHarmonicCoefficients=this._sphericalHarmonicCoefficients),this._shouldRegenerateShaders=this._shouldRegenerateShaders||this._previousSpecularEnvironmentMapLoaded!==this._specularEnvironmentMapLoaded,this._previousSpecularEnvironmentMapLoaded=this._specularEnvironmentMapLoaded,this._specularEnvironmentCubeMapDirty&&(Lve(this,t),this._specularEnvironmentCubeMapDirty=!1),l(this._specularEnvironmentCubeMap)&&(this._specularEnvironmentCubeMap.update(e),this._specularEnvironmentCubeMap.ready&&(this._specularEnvironmentMapLoaded=!0));let o=!l(this._specularEnvironmentCubeMap)&&l(e.specularEnvironmentMaps)&&!this._useDefaultSpecularMaps,r=!l(e.specularEnvironmentMaps)&&this._useDefaultSpecularMaps,s=!l(this._sphericalHarmonicCoefficients)&&l(e.sphericalHarmonicCoefficients)&&!this._useDefaultSphericalHarmonics,a=!l(e.sphericalHarmonicCoefficients)&&this._useDefaultSphericalHarmonics;this._shouldRegenerateShaders=this._shouldRegenerateShaders||o||r||s||a,this._useDefaultSpecularMaps=!l(this._specularEnvironmentCubeMap)&&l(e.specularEnvironmentMaps),this._useDefaultSphericalHarmonics=!l(this._sphericalHarmonicCoefficients)&&l(e.sphericalHarmonicCoefficients)};yW.prototype.isDestroyed=function(){return!1};yW.prototype.destroy=function(){return this._specularEnvironmentCubeMap=this._specularEnvironmentCubeMap&&this._specularEnvironmentCubeMap.destroy(),this._removeErrorListener=this._removeErrorListener&&this._removeErrorListener(),he(this)};var nC=yW;var nfn=y(x(),1),RJ=y(qd(),1);var Hhn=y(x(),1);var ZJ,fle="eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiJhMzVlNTU2ZC1lYmM1LTQ2OWEtODRhOS0wYTFkODZmZTQ0OTgiLCJpZCI6MjU5LCJpYXQiOjE3NzI0ODIxOTR9.1oVHvVA9yr1C3CbLjlzcQQUyBuUuNaNCcc9_Giy8t7U",lk={};lk.defaultAccessToken=fle;lk.defaultServer=new Le({url:"https://api.cesium.com/"});lk.getDefaultTokenCredit=function(e){if(e===fle){if(!l(ZJ)){let t=`<b> This application is using Cesium's default ion access token. Please assign <i>Cesium.Ion.defaultAccessToken</i> with an access token from your ion account before making any Cesium API calls. You can sign up for a free ion account at <a href="https://cesium.com">https://cesium.com</a>.</b>`;ZJ=new Et(t,!0)}return ZJ}};var Nh=lk;function wl(e,t){let n,i=e.externalType,o=l(i);if(!o)n={url:e.url,retryAttempts:1,retryCallback:Wve};else if(i==="3DTILES"||i==="STK_TERRAIN_SERVER")n={url:e.options.url};else throw new me("Ion.createResource does not support external imagery assets; use IonImageryProvider instead.");Le.call(this,n),this._ionEndpoint=e,this._ionEndpointDomain=o?void 0:new RJ.default(e.url).authority(),this._ionEndpointResource=t,this._ionRoot=void 0,this._pendingPromise=void 0,this._credits=void 0,this._isExternal=o,this.refreshCallback=void 0}l(Object.create)&&(wl.prototype=Object.create(Le.prototype),wl.prototype.constructor=wl);wl.fromAssetId=function(e,t){let n=wl._createEndpointResource(e,t);return n.fetchJson().then(function(i){return new wl(i,n)})};Object.defineProperties(wl.prototype,{credits:{get:function(){return l(this._ionRoot)?this._ionRoot.credits:l(this._credits)?this._credits:(this._credits=wl.getCreditsFromEndpoint(this._ionEndpoint,this._ionEndpointResource),this._credits)}}});wl.getCreditsFromEndpoint=function(e,t){let n=e.attributions.map(Et.getIonCredit),i=Nh.getDefaultTokenCredit(t.queryParameters.access_token);return l(i)&&n.push(Et.clone(i)),n};wl.prototype.clone=function(e){let t=this._ionRoot??this;return l(e)||(e=new wl(t._ionEndpoint,t._ionEndpointResource)),e=Le.prototype.clone.call(this,e),e._ionRoot=t,e._isExternal=this._isExternal,e};wl.prototype.fetchImage=function(e){if(!this._isExternal){let t=e;e={preferBlob:!0},l(t)&&(e.flipY=t.flipY,e.preferImageBitmap=t.preferImageBitmap)}return Le.prototype.fetchImage.call(this,e)};wl.prototype._makeRequest=function(e){return this._isExternal||new RJ.default(this.url).authority()!==this._ionEndpointDomain?Le.prototype._makeRequest.call(this,e):(e.headers=ple(e.headers),e.headers.Authorization=`Bearer ${this._ionEndpoint.accessToken}`,Le.prototype._makeRequest.call(this,e))};wl._createEndpointResource=function(e,t){t=t??Q.EMPTY_OBJECT;let n=t.server??Nh.defaultServer,i=t.accessToken??Nh.defaultAccessToken;n=Le.createIfNeeded(n);let o={url:`v1/assets/${e}/endpoint`};return l(i)&&(o.queryParameters={access_token:i}),l(t.queryParameters)&&(o.queryParameters={...o.queryParameters,...t.queryParameters}),o.headers=ple(o.headers),n.getDerivedResource(o)};function ple(e={}){return e["X-Cesium-Client"]="CesiumJS",typeof CESIUM_VERSION<"u"&&(e["X-Cesium-Client-Version"]=CESIUM_VERSION),e}function Wve(e,t){let n=e._ionRoot??e,i=n._ionEndpointResource,o=typeof Image<"u";return!l(t)||t.statusCode!==401&&!(o&&t.target instanceof Image)?Promise.resolve(!1):(l(n._pendingPromise)||(n._pendingPromise=i.fetchJson().then(function(r){let s=e.refreshCallback??n.refreshCallback;return l(s)&&s(n,r),n._ionEndpoint=r,n._ionEndpoint}).finally(function(r){return n._pendingPromise=void 0,r})),n._pendingPromise.then(function(r){return e._ionEndpoint=r,!0}))}var cs=wl;var ofn=y(x(),1);function lp(e){e=e??0,this._array=new Array(e),this._length=e}Object.defineProperties(lp.prototype,{length:{get:function(){return this._length},set:function(e){let t=this._array,n=this._length;if(e<n)for(let i=e;i<n;++i)t[i]=void 0;else e>t.length&&(t.length=e);this._length=e}},values:{get:function(){return this._array}}});lp.prototype.get=function(e){return this._array[e]};lp.prototype.set=function(e,t){e>=this._length&&(this.length=e+1),this._array[e]=t};lp.prototype.peek=function(){return this._array[this._length-1]};lp.prototype.push=function(e){let t=this.length++;this._array[t]=e};lp.prototype.pop=function(){if(this._length===0)return;let e=this._array[this._length-1];return--this.length,e};lp.prototype.reserve=function(e){e>this._array.length&&(this._array.length=e)};lp.prototype.resize=function(e){this.length=e};lp.prototype.trim=function(e){e=e??this._length,this._array.length=e};var Nl=lp;var cfn=y(x(),1);var QA={X:0,Y:1,Z:2};QA.Y_UP_TO_Z_UP=F.fromRotationTranslation($.fromArray([1,0,0,0,0,1,0,-1,0]));QA.Z_UP_TO_Y_UP=F.fromRotationTranslation($.fromArray([1,0,0,0,0,-1,0,1,0]));QA.X_UP_TO_Z_UP=F.fromRotationTranslation($.fromArray([0,0,1,0,1,0,-1,0,0]));QA.Z_UP_TO_X_UP=F.fromRotationTranslation($.fromArray([0,0,-1,0,1,0,1,0,0]));QA.X_UP_TO_Y_UP=F.fromRotationTranslation($.fromArray([0,1,0,-1,0,0,0,0,1]));QA.Y_UP_TO_X_UP=F.fromRotationTranslation($.fromArray([0,-1,0,1,0,0,0,0,1]));QA.fromName=function(e){return QA[e]};var ro=Object.freeze(QA);var Hci=y(x(),1);var ufn=y(x(),1);function Ale(e){e=e??Q.EMPTY_OBJECT,this._metadata=e.metadata}Object.defineProperties(Ale.prototype,{metadata:{get:function(){return this._metadata}}});var iC=Ale;var Ioi=y(x(),1);var Sfn=y(x(),1);var gfn=y(x(),1);var ffn=y(x(),1);function c0(e,t,n){return t=t??0,n=n??e.byteLength-t,e=e.subarray(t,t+n),c0.decode(e)}c0.decodeWithTextDecoder=function(e){return new TextDecoder("utf-8").decode(e)};c0.decodeWithFromCharCode=function(e){let t="",n=Fve(e),i=n.length;for(let o=0;o<i;++o){let r=n[o];r<=65535?t+=String.fromCharCode(r):(r-=65536,t+=String.fromCharCode((r>>10)+55296,(r&1023)+56320))}return t};function xW(e,t,n){return t<=e&&e<=n}function Fve(e){let t=0,n=0,i=0,o=128,r=191,s=[],a=e.length;for(let c=0;c<a;++c){let d=e[c];if(i===0){if(xW(d,0,127)){s.push(d);continue}if(xW(d,194,223)){i=1,t=d&31;continue}if(xW(d,224,239)){d===224&&(o=160),d===237&&(r=159),i=2,t=d&15;continue}if(xW(d,240,244)){d===240&&(o=144),d===244&&(r=143),i=3,t=d&7;continue}throw new me("String decoding failed.")}if(!xW(d,o,r)){t=i=n=0,o=128,r=191,--c;continue}o=128,r=191,t=t<<6|d&63,++n,n===i&&(s.push(t),t=i=n=0)}return s}typeof TextDecoder<"u"?c0.decode=c0.decodeWithTextDecoder:c0.decode=c0.decodeWithFromCharCode;var bd=c0;function Bve(e,t){return t=t??0,bd(e,t,Math.min(4,e.length))}var Ph=Bve;function gm(e,t,n,i){this._tileset=e,this._tile=t,this._resource=n,l(i)||(i=[]),this._contents=i,this._metadata=void 0,this._group=void 0,this._ready=!1}Object.defineProperties(gm.prototype,{featurePropertiesDirty:{get:function(){let e=this._contents,t=e.length;for(let n=0;n<t;++n)if(e[n].featurePropertiesDirty)return!0;return!1},set:function(e){let t=this._contents,n=t.length;for(let i=0;i<n;++i)t[i].featurePropertiesDirty=e}},featuresLength:{get:function(){return 0}},pointsLength:{get:function(){return 0}},trianglesLength:{get:function(){return 0}},geometryByteLength:{get:function(){return 0}},texturesByteLength:{get:function(){return 0}},batchTableByteLength:{get:function(){return 0}},innerContents:{get:function(){return this._contents}},ready:{get:function(){return this._ready}},tileset:{get:function(){return this._tileset}},tile:{get:function(){return this._tile}},url:{get:function(){return this._resource.getUrlComponent(!0)}},metadata:{get:function(){return this._metadata},set:function(e){this._metadata=e;let t=this._contents,n=t.length;for(let i=0;i<n;++i)t[i].metadata=e}},batchTable:{get:function(){}},group:{get:function(){return this._group},set:function(e){this._group=e;let t=this._contents,n=t.length;for(let i=0;i<n;++i)t[i].group=e}}});var CW=Uint32Array.BYTES_PER_ELEMENT;gm.fromTileType=async function(e,t,n,i,o,r){o=o??0;let s=new Uint8Array(i),a=new DataView(i);o+=CW;let c=a.getUint32(o,!0);if(c!==1)throw new me(`Only Composite Tile version 1 is supported. Version ${c} is not.`);o+=CW,o+=CW;let d=a.getUint32(o,!0);o+=CW;let u=n.queryParameters.compositeIndex;l(u)?u=`${u}_`:u="";let h=[];h.length=d;for(let f=0;f<d;++f){let b=Ph(s,o),C=a.getUint32(o+CW*2,!0),T=r[b],E=`${u}${f}`,S=n.getDerivedResource({queryParameters:{compositeIndex:E}});if(l(T))h[f]=Promise.resolve(T(e,t,S,i,o));else throw new me(`Unknown tile content type, ${b}, inside Composite tile`);o+=C}let p=await Promise.all(h);return new gm(e,t,n,p)};gm.prototype.hasProperty=function(e,t){return!1};gm.prototype.getFeature=function(e){};gm.prototype.applyDebugSettings=function(e,t){let n=this._contents,i=n.length;for(let o=0;o<i;++o)n[o].applyDebugSettings(e,t)};gm.prototype.applyStyle=function(e){let t=this._contents,n=t.length;for(let i=0;i<n;++i)t[i].applyStyle(e)};gm.prototype.update=function(e,t){let n=this._contents,i=n.length,o=!0;for(let r=0;r<i;++r)n[r].update(e,t),o=o&&n[r].ready;!this._ready&&o&&(this._ready=!0)};gm.prototype.pick=function(e,t,n){if(!this._ready)return;let i,o=Number.POSITIVE_INFINITY,r=this._contents,s=r.length;for(let a=0;a<s;++a){let c=r[a].pick(e,t,n);if(!l(c))continue;let d=m.distance(e.origin,c);d<o&&(i=c,o=d)}if(l(i))return n};gm.prototype.isDestroyed=function(){return!1};gm.prototype.destroy=function(){let e=this._contents,t=e.length;for(let n=0;n<t;++n)e[n].destroy();return he(this)};var TW=gm;var $An=y(x(),1);var Zfn=y(x(),1);function wve(e,t,n){return JSON.parse(bd(e,t,n))}var Zr=wve;var Wpn=y(x(),1);var Mfn=y(x(),1);function Oc(e){this._id=qn();let t=e.featuresLength;this._showAlphaProperties=void 0,this._batchValues=void 0,this._batchValuesDirty=!1,this._batchTexture=void 0,this._defaultTexture=void 0,this._pickTexture=void 0,this._pickIds=[];let n,i;if(t>0){let o=Math.min(t,Bt.maximumTextureSize),r=Math.ceil(t/Bt.maximumTextureSize),s=1/o,a=s*.5,c=1/r,d=c*.5;n=new M(o,r),i=new re(s,a,c,d)}this._translucentFeaturesLength=0,this._featuresLength=t,this._textureDimensions=n,this._textureStep=i,this._owner=e.owner,this._statistics=e.statistics,this._colorChangedCallback=e.colorChangedCallback}Object.defineProperties(Oc.prototype,{translucentFeaturesLength:{get:function(){return this._translucentFeaturesLength}},byteLength:{get:function(){let e=0;return l(this._pickTexture)&&(e+=this._pickTexture.sizeInBytes),l(this._batchTexture)&&(e+=this._batchTexture.sizeInBytes),e}},textureDimensions:{get:function(){return this._textureDimensions}},textureStep:{get:function(){return this._textureStep}},batchTexture:{get:function(){return this._batchTexture}},defaultTexture:{get:function(){return this._defaultTexture}},pickTexture:{get:function(){return this._pickTexture}}});Oc.DEFAULT_COLOR_VALUE=U.WHITE;Oc.DEFAULT_SHOW_VALUE=!0;function gle(e){let t=e._textureDimensions;return t.x*t.y*4}function ble(e){if(!l(e._batchValues)){let t=gle(e),n=new Uint8Array(t).fill(255);e._batchValues=n}return e._batchValues}function yle(e){if(!l(e._showAlphaProperties)){let t=2*e._featuresLength,n=new Uint8Array(t).fill(255);e._showAlphaProperties=n}return e._showAlphaProperties}Oc.prototype.setShow=function(e,t){if(t&&!l(this._showAlphaProperties))return;let n=yle(this),i=e*2,o=t?255:0;if(n[i]!==o){n[i]=o;let r=ble(this),s=e*4+3;r[s]=t?n[i+1]:0,this._batchValuesDirty=!0}};Oc.prototype.setAllShow=function(e){let t=this._featuresLength;for(let n=0;n<t;++n)this.setShow(n,e)};Oc.prototype.getShow=function(e){if(!l(this._showAlphaProperties))return!0;let t=e*2;return this._showAlphaProperties[t]===255};var Nve=new Array(4);Oc.prototype.setColor=function(e,t){if(U.equals(t,Oc.DEFAULT_COLOR_VALUE)&&!l(this._batchValues))return;let n=t.toBytes(Nve),i=n[3],o=ble(this),r=e*4,s=yle(this),a=e*2;if(o[r]!==n[0]||o[r+1]!==n[1]||o[r+2]!==n[2]||s[a+1]!==i){o[r]=n[0],o[r+1]=n[1],o[r+2]=n[2];let c=s[a+1]!==255,d=s[a]!==0;o[r+3]=d?i:0,s[a+1]=i;let u=i!==255;u&&!c?++this._translucentFeaturesLength:!u&&c&&--this._translucentFeaturesLength,this._batchValuesDirty=!0,l(this._colorChangedCallback)&&this._colorChangedCallback(e,t)}};Oc.prototype.setAllColor=function(e){let t=this._featuresLength;for(let n=0;n<t;++n)this.setColor(n,e)};Oc.prototype.getColor=function(e,t){if(!l(this._batchValues))return U.clone(Oc.DEFAULT_COLOR_VALUE,t);let n=this._batchValues,i=e*4,o=this._showAlphaProperties,r=e*2;return U.fromBytes(n[i],n[i+1],n[i+2],o[r+1],t)};Oc.prototype.getPickColor=function(e){return this._pickIds[e]};function xle(e,t,n){let i=e._textureDimensions;return new Lt({context:t,pixelFormat:Ke.RGBA,pixelDatatype:Oe.UNSIGNED_BYTE,source:{width:i.x,height:i.y,arrayBufferView:n},flipY:!1,sampler:Ht.NEAREST})}function Pve(e,t){let n=e._featuresLength;if(!l(e._pickTexture)&&n>0){let i=e._pickIds,o=gle(e),r=new Uint8Array(o),s=e._owner,a=e._statistics;for(let c=0;c<n;++c){let d=t.createPickId(s.getFeature(c));i.push(d);let u=d.color,h=c*4;r[h]=U.floatToByte(u.red),r[h+1]=U.floatToByte(u.green),r[h+2]=U.floatToByte(u.blue),r[h+3]=U.floatToByte(u.alpha)}e._pickTexture=xle(e,t,r),l(a)&&(a.batchTableByteLength+=e._pickTexture.sizeInBytes)}}function Xve(e){let t=e._textureDimensions;e._batchTexture.copyFrom({source:{width:t.x,height:t.y,arrayBufferView:e._batchValues}})}Oc.prototype.update=function(e,t){let n=t.context;this._defaultTexture=n.defaultTexture;let i=t.passes;(i.pick||i.postProcess)&&Pve(this,n),this._batchValuesDirty&&(this._batchValuesDirty=!1,l(this._batchTexture)||(this._batchTexture=xle(this,n,this._batchValues),l(this._statistics)&&(this._statistics.batchTableByteLength+=this._batchTexture.sizeInBytes)),Xve(this))};Oc.prototype.isDestroyed=function(){return!1};Oc.prototype.destroy=function(){this._batchTexture=this._batchTexture&&this._batchTexture.destroy(),this._pickTexture=this._pickTexture&&this._pickTexture.destroy();let e=this._pickIds,t=e.length;for(let n=0;n<t;++n)e[n].destroy();return he(this)};var Pl=Oc;var opn=y(x(),1);var Jfn=y(x(),1);var Yve={SCALAR:1,VEC2:2,VEC3:3,VEC4:4,MAT2:4,MAT3:9,MAT4:16},Mve={SCALAR:void 0,VEC2:M,VEC3:m,VEC4:re,MAT2:Qi,MAT3:$,MAT4:F};function vve(e){let t=e.componentType,n;typeof t=="string"?n=H.fromName(t):n=t;let i=Yve[e.type],o=Mve[e.type];return{componentsPerAttribute:i,classType:o,createArrayBufferView:function(r,s,a){return H.createArrayBufferView(n,r,s,i*a)}}}var bm=vve;function OA(e){this._classes=void 0,this._classIds=void 0,this._classIndexes=void 0,this._parentCounts=void 0,this._parentIndexes=void 0,this._parentIds=void 0,this._byteLength=0,Uve(this,e.extension,e.binaryBody)}Object.defineProperties(OA.prototype,{byteLength:{get:function(){return this._byteLength}}});function Uve(e,t,n){let i,o,r,s=t.instancesLength,a=t.classes,c=t.classIds,d=t.parentCounts,u=t.parentIds,h=s,p=0;l(c.byteOffset)&&(c.componentType=c.componentType??H.UNSIGNED_SHORT,c.type=Ut.SCALAR,r=bm(c),c=r.createArrayBufferView(n.buffer,n.byteOffset+c.byteOffset,s),p+=c.byteLength);let A;if(l(d)){for(l(d.byteOffset)&&(d.componentType=d.componentType??H.UNSIGNED_SHORT,d.type=Ut.SCALAR,r=bm(d),d=r.createArrayBufferView(n.buffer,n.byteOffset+d.byteOffset,s),p+=d.byteLength),A=new Uint16Array(s),h=0,i=0;i<s;++i)A[i]=h,h+=d[i];p+=A.byteLength}l(u)&&l(u.byteOffset)&&(u.componentType=u.componentType??H.UNSIGNED_SHORT,u.type=Ut.SCALAR,r=bm(u),u=r.createArrayBufferView(n.buffer,n.byteOffset+u.byteOffset,h),p+=u.byteLength);let f=a.length;for(i=0;i<f;++i){let T=a[i].length,E=a[i].instances,S=Xh.getBinaryProperties(T,E,n);p+=Dve(S),a[i].instances=Ft(S,E)}let b=new Array(f).fill(0),C=new Uint16Array(s);for(i=0;i<s;++i)o=c[i],C[i]=b[o],++b[o];p+=C.byteLength,e._classes=a,e._classIds=c,e._classIndexes=C,e._parentCounts=d,e._parentIndexes=A,e._parentIds=u,e._byteLength=p}function Dve(e){let t=0;for(let n in e)e.hasOwnProperty(n)&&(t+=e[n].typedArray.byteLength);return t}var kve=[],Qve=[],Ove=0;function zve(e,t,n){let i=e._classIds,o=e._parentCounts,r=e._parentIds,s=e._parentIndexes,a=i.length,c=kve;c.length=Math.max(c.length,a);let d=++Ove,u=Qve;for(u.length=0,u.push(t);u.length>0;){if(t=u.pop(),c[t]===d)continue;c[t]=d;let h=n(e,t);if(l(h))return h;let p=o[t],A=s[t];for(let f=0;f<p;++f){let b=r[A+f];b!==t&&u.push(b)}}}function Hve(e,t,n){let i=!0;for(;i;){let o=n(e,t);if(l(o))return o;let r=e._parentIds[t];i=r!==t,t=r}}function EW(e,t,n){let i=e._parentCounts,o=e._parentIds;if(l(o)){if(l(i))return zve(e,t,n)}else return n(e,t);return Hve(e,t,n)}OA.prototype.hasProperty=function(e,t){let n=EW(this,e,function(i,o){let r=i._classIds[o],s=i._classes[r].instances;if(l(s[t]))return!0});return l(n)};OA.prototype.propertyExists=function(e){let t=this._classes,n=t.length;for(let i=0;i<n;++i){let o=t[i].instances;if(l(o[e]))return!0}return!1};OA.prototype.getPropertyIds=function(e,t){return t=l(t)?t:[],t.length=0,EW(this,e,function(n,i){let o=n._classIds[i],r=n._classes[o].instances;for(let s in r)r.hasOwnProperty(s)&&t.indexOf(s)===-1&&t.push(s)}),t};OA.prototype.getProperty=function(e,t){return EW(this,e,function(n,i){let o=n._classIds[i],r=n._classes[o],s=n._classIndexes[i],a=r.instances[t];if(l(a))return l(a.typedArray)?Jve(a,s):He(a[s],!0)})};function Jve(e,t){let n=e.typedArray,i=e.componentCount;return i===1?n[t]:e.type.unpack(n,t*i)}OA.prototype.setProperty=function(e,t,n){let i=EW(this,e,function(o,r){let s=o._classIds[r],a=o._classes[s],c=o._classIndexes[r],d=a.instances[t];if(l(d))return l(d.typedArray)?Kve(d,c,n):d[c]=He(n,!0),!0});return l(i)};function Kve(e,t,n){let i=e.typedArray,o=e.componentCount;o===1?i[t]=n:e.type.pack(n,i,t*o)}OA.prototype.isClass=function(e,t){let n=EW(this,e,function(i,o){let r=i._classIds[o];if(i._classes[r].name===t)return!0});return l(n)};OA.prototype.getClassName=function(e){let t=this._classIds[e];return this._classes[t].name};var oC=OA;var spn=y(x(),1),jve={HIGHLIGHT:0,REPLACE:1,MIX:2},yd=Object.freeze(jve);var VJ=Pl.DEFAULT_COLOR_VALUE,GJ=Pl.DEFAULT_SHOW_VALUE;function Do(e,t,n,i,o){this.featuresLength=t;let r;l(n)&&(r=n.extensions),this._extensions=r??{};let s=qve(n);this._properties=s,this._batchTableHierarchy=$ve(this,n,i);let a=Tle(t,s,i);this._binaryPropertiesByteLength=eUe(a),this._batchTableBinaryProperties=a,this._content=e,this._batchTexture=new Pl({featuresLength:t,colorChangedCallback:o,owner:e,statistics:e.tileset.statistics})}Do._deprecationWarning=Va;Object.defineProperties(Do.prototype,{batchTableByteLength:{get:function(){let e=this._binaryPropertiesByteLength;return l(this._batchTableHierarchy)&&(e+=this._batchTableHierarchy.byteLength),e+=this._batchTexture.byteLength,e}}});function qve(e){let t={};if(!l(e))return t;for(let n in e)e.hasOwnProperty(n)&&n!=="HIERARCHY"&&n!=="extensions"&&n!=="extras"&&(t[n]=He(e[n],!0));return t}function $ve(e,t,n){if(!l(t))return;let i=e._extensions["3DTILES_batch_table_hierarchy"],o=t.HIERARCHY;if(l(o)&&(Do._deprecationWarning("batchTableHierarchyExtension","The batch table HIERARCHY property has been moved to an extension. Use extensions.3DTILES_batch_table_hierarchy instead."),e._extensions["3DTILES_batch_table_hierarchy"]=o,i=o),!!l(i))return new oC({extension:i,binaryBody:n})}function Tle(e,t,n){let i;for(let o in t)if(t.hasOwnProperty(o)){let r=t[o],s=r.byteOffset;if(l(s)){let a=r.componentType,c=r.type;if(!l(a))throw new me("componentType is required.");if(!l(c))throw new me("type is required.");if(!l(n))throw new me(`Property ${o} requires a batch table binary.`);let d=bm(r),u=d.componentsPerAttribute,h=d.classType,p=d.createArrayBufferView(n.buffer,n.byteOffset+s,e);l(i)||(i={}),i[o]={typedArray:p,componentCount:u,type:h}}}return i}function eUe(e){if(!l(e))return 0;let t=0;for(let n in e)e.hasOwnProperty(n)&&(t+=e[n].typedArray.byteLength);return t}Do.getBinaryProperties=function(e,t,n){return Tle(e,t,n)};Do.prototype.setShow=function(e,t){this._batchTexture.setShow(e,t)};Do.prototype.setAllShow=function(e){this._batchTexture.setAllShow(e)};Do.prototype.getShow=function(e){return this._batchTexture.getShow(e)};Do.prototype.setColor=function(e,t){this._batchTexture.setColor(e,t)};Do.prototype.setAllColor=function(e){this._batchTexture.setAllColor(e)};Do.prototype.getColor=function(e,t){return this._batchTexture.getColor(e,t)};Do.prototype.getPickColor=function(e){return this._batchTexture.getPickColor(e)};var tUe=new U;Do.prototype.applyStyle=function(e){if(!l(e)){this.setAllColor(VJ),this.setAllShow(GJ);return}let t=this._content,n=this.featuresLength;for(let i=0;i<n;++i){let o=t.getFeature(i),r=l(e.color)?e.color.evaluateColor(o,tUe)??VJ:VJ,s=l(e.show)?e.show.evaluate(o)??GJ:GJ;this.setColor(i,r),this.setShow(i,s)}};function nUe(e,t){let n=e.typedArray,i=e.componentCount;return i===1?n[t]:e.type.unpack(n,t*i)}function iUe(e,t,n){let i=e.typedArray,o=e.componentCount;o===1?i[t]=n:e.type.pack(n,i,t*o)}Do.prototype.isClass=function(e,t){let n=this._batchTableHierarchy;return l(n)?n.isClass(e,t):!1};Do.prototype.isExactClass=function(e,t){return this.getExactClassName(e)===t};Do.prototype.getExactClassName=function(e){let t=this._batchTableHierarchy;if(l(t))return t.getClassName(e)};Do.prototype.hasProperty=function(e,t){return l(this._properties[t])||l(this._batchTableHierarchy)&&this._batchTableHierarchy.hasProperty(e,t)};Do.prototype.hasPropertyBySemantic=function(){return!1};Do.prototype.getPropertyIds=function(e,t){t=l(t)?t:[],t.length=0;let n=Object.keys(this._properties);if(ri(t,n),l(this._batchTableHierarchy)){let i=this._batchTableHierarchy.getPropertyIds(e,n);ri(t,i)}return t};Do.prototype.getPropertyBySemantic=function(e,t){};Do.prototype.getProperty=function(e,t){if(l(this._batchTableBinaryProperties)){let i=this._batchTableBinaryProperties[t];if(l(i))return nUe(i,e)}let n=this._properties[t];if(l(n))return He(n[e],!0);if(l(this._batchTableHierarchy)){let i=this._batchTableHierarchy.getProperty(e,t);if(l(i))return i}};Do.prototype.setProperty=function(e,t,n){let i=this.featuresLength;if(l(this._batchTableBinaryProperties)){let r=this._batchTableBinaryProperties[t];if(l(r)){iUe(r,e,n);return}}if(l(this._batchTableHierarchy)&&this._batchTableHierarchy.setProperty(e,t,n))return;let o=this._properties[t];l(o)||(this._properties[t]=new Array(i),o=this._properties[t]),o[e]=He(n,!0)};function oUe(e){return e._batchTexture.textureDimensions.y===1?`uniform vec4 tile_textureStep;
vec2 computeSt(float batchId)
{
float stepX = tile_textureStep.x;
float centerX = tile_textureStep.y;
return vec2(centerX + (batchId * stepX), 0.5);
}
`:`uniform vec4 tile_textureStep;
uniform vec2 tile_textureDimensions;
vec2 computeSt(float batchId)
{
float stepX = tile_textureStep.x;
float centerX = tile_textureStep.y;
float stepY = tile_textureStep.z;
float centerY = tile_textureStep.w;
float xId = mod(batchId, tile_textureDimensions.x);
float yId = floor(batchId / tile_textureDimensions.x);
return vec2(centerX + (xId * stepX), centerY + (yId * stepY));
}
`}Do.prototype.getVertexShaderCallback=function(e,t,n){if(this.featuresLength===0)return;let i=this;return function(o){let r=Ele(o,n,!1),s;return Bt.maximumVertexTextureImageUnits>0?(s="",e&&(s+=`uniform bool tile_translucentCommand;
`),s+=`uniform sampler2D tile_batchTexture;
out vec4 tile_featureColor;
out vec2 tile_featureSt;
void main()
{
vec2 st = computeSt(${t});
vec4 featureProperties = texture(tile_batchTexture, st);
tile_color(featureProperties);
float show = ceil(featureProperties.a);
gl_Position *= show;
`,e&&(s+=` bool isStyleTranslucent = (featureProperties.a != 1.0);
if (czm_pass == czm_passTranslucent)
{
if (!isStyleTranslucent && !tile_translucentCommand)
{
gl_Position *= 0.0;
}
}
else
{
if (isStyleTranslucent)
{
gl_Position *= 0.0;
}
}
`),s+=` tile_featureColor = featureProperties;
tile_featureSt = st;
}`):s=`out vec2 tile_featureSt;
void main()
{
tile_color(vec4(1.0));
tile_featureSt = computeSt(${t});
}`,`${r}
${oUe(i)}${s}`}};function Cle(e,t){return e=ze.replaceMain(e,"tile_main"),t?`${e}uniform float tile_colorBlend;
void tile_color(vec4 tile_featureColor)
{
tile_main();
tile_featureColor = czm_gammaCorrect(tile_featureColor);
out_FragColor.a *= tile_featureColor.a;
float highlight = ceil(tile_colorBlend);
out_FragColor.rgb *= mix(tile_featureColor.rgb, vec3(1.0), highlight);
}
`:`${e}void tile_color(vec4 tile_featureColor)
{
tile_main();
}
`}function rUe(e,t){let n=`texture(${t}`,i=0,o=e.indexOf(n,i),r;for(;o>-1;){let s=0;for(let d=o;d<e.length;++d){let u=e.charAt(d);if(u==="(")++s;else if(u===")"&&(--s,s===0)){r=d+1;break}}let c=`tile_diffuse_final(${e.slice(o,r)}, tile_diffuse)`;e=e.slice(0,o)+c+e.slice(r),i=o+c.length,o=e.indexOf(n,i)}return e}function Ele(e,t,n){if(!l(t))return Cle(e,n);let i=new RegExp(`(uniform|attribute|in)\\s+(vec[34]|sampler2D)\\s+${t};`),o=e.match(i);if(!l(o))return Cle(e,n);let r=o[0],s=o[2];e=ze.replaceMain(e,"tile_main"),e=e.replace(r,"");let a=`bool isWhite(vec3 color)
{
return all(greaterThan(color, vec3(1.0 - czm_epsilon3)));
}
vec4 tile_diffuse_final(vec4 sourceDiffuse, vec4 tileDiffuse)
{
vec4 blendDiffuse = mix(sourceDiffuse, tileDiffuse, tile_colorBlend);
vec4 diffuse = isWhite(tileDiffuse.rgb) ? sourceDiffuse : blendDiffuse;
return vec4(diffuse.rgb, sourceDiffuse.a);
}
`,c=` tile_featureColor = czm_gammaCorrect(tile_featureColor);
out_FragColor.a *= tile_featureColor.a;
float highlight = ceil(tile_colorBlend);
out_FragColor.rgb *= mix(tile_featureColor.rgb, vec3(1.0), highlight);
`,d;if(s==="vec3"||s==="vec4"){let u=s==="vec3"?`vec4(${t}, 1.0)`:t,h=s==="vec3"?"tile_diffuse.xyz":"tile_diffuse";i=new RegExp(t,"g"),e=e.replace(i,h),d=` vec4 source = ${u};
tile_diffuse = tile_diffuse_final(source, tile_featureColor);
tile_main();
`}else s==="sampler2D"&&(e=rUe(e,t),d=` tile_diffuse = tile_featureColor;
tile_main();
`);return e=`uniform float tile_colorBlend;
vec4 tile_diffuse = vec4(1.0);
${a}${r}
${e}
void tile_color(vec4 tile_featureColor)
{
${d}`,n&&(e+=c),e+=`}
`,e}Do.prototype.getFragmentShaderCallback=function(e,t,n){if(this.featuresLength!==0)return function(i){return i=Ele(i,t,!0),Bt.maximumVertexTextureImageUnits>0?(i+=`uniform sampler2D tile_pickTexture;
in vec2 tile_featureSt;
in vec4 tile_featureColor;
void main()
{
tile_color(tile_featureColor);
`,n&&(i+=` out_FragColor.rgb *= out_FragColor.a;
`),i+="}"):(e&&(i+=`uniform bool tile_translucentCommand;
`),i+=`uniform sampler2D tile_pickTexture;
uniform sampler2D tile_batchTexture;
in vec2 tile_featureSt;
void main()
{
vec4 featureProperties = texture(tile_batchTexture, tile_featureSt);
if (featureProperties.a == 0.0) {
discard;
}
`,e&&(i+=` bool isStyleTranslucent = (featureProperties.a != 1.0);
if (czm_pass == czm_passTranslucent)
{
if (!isStyleTranslucent && !tile_translucentCommand)
{
discard;
}
}
else
{
if (isStyleTranslucent)
{
discard;
}
}
`),i+=` tile_color(featureProperties);
`,n&&(i+=` out_FragColor.rgb *= out_FragColor.a;
`),i+=`}
`),i}};function sUe(e){let t=e._content.tileset,n=t.colorBlendMode,i=t.colorBlendAmount;if(n===yd.HIGHLIGHT)return 0;if(n===yd.REPLACE)return 1;if(n===yd.MIX)return L.clamp(i,L.EPSILON4,1)}Do.prototype.getUniformMapCallback=function(){if(this.featuresLength===0)return;let e=this;return function(t){return Ft(t,{tile_batchTexture:function(){return e._batchTexture.batchTexture??e._batchTexture.defaultTexture},tile_textureDimensions:function(){return e._batchTexture.textureDimensions},tile_textureStep:function(){return e._batchTexture.textureStep},tile_colorBlend:function(){return sUe(e)},tile_pickTexture:function(){return e._batchTexture.pickTexture}})}};Do.prototype.getPickId=function(){return"texture(tile_pickTexture, tile_featureSt)"};var l0={ALL_OPAQUE:0,ALL_TRANSLUCENT:1,OPAQUE_AND_TRANSLUCENT:2};Do.prototype.addDerivedCommands=function(e,t){let n=e.commandList,i=n.length,o=this._content._tile,r=o._finalResolution,s=o.tileset,a=s.isSkippingLevelOfDetail&&s.hasMixedContent&&e.context.stencilBuffer,c=aUe(this);for(let d=t;d<i;++d){let u=n[d];if(u.pass===Ge.COMPUTE)continue;let h=u.derivedCommands.tileset;(!l(h)||u.dirty)&&(h={},u.derivedCommands.tileset=h,h.originalCommand=cUe(u),u.dirty=!1);let p=h.originalCommand;c!==l0.ALL_OPAQUE&&u.pass!==Ge.TRANSLUCENT&&(l(h.translucent)||(h.translucent=lUe(p))),c!==l0.ALL_TRANSLUCENT&&u.pass!==Ge.TRANSLUCENT&&(l(h.opaque)||(h.opaque=dUe(p)),a&&(r||(l(h.zback)||(h.zback=mUe(e.context,p)),s._backfaceCommands.push(h.zback)),(!l(h.stencil)||o._selectionDepth!==fUe(h.stencil))&&(u.renderState.depthMask?h.stencil=hUe(p,o._selectionDepth):h.stencil=h.opaque)));let A=a?h.stencil:h.opaque,f=h.translucent;u.pass!==Ge.TRANSLUCENT?(c===l0.ALL_OPAQUE&&(n[d]=A),c===l0.ALL_TRANSLUCENT&&(n[d]=f),c===l0.OPAQUE_AND_TRANSLUCENT&&(n[d]=A,n.push(f))):n[d]=p}};function aUe(e){let t=e._batchTexture.translucentFeaturesLength;return t===0?l0.ALL_OPAQUE:t===e.featuresLength?l0.ALL_TRANSLUCENT:l0.OPAQUE_AND_TRANSLUCENT}function cUe(e){let t=ot.shallowClone(e),n=t.pass===Ge.TRANSLUCENT;return t.uniformMap=l(t.uniformMap)?t.uniformMap:{},t.uniformMap.tile_translucentCommand=function(){return n},t}function lUe(e){let t=ot.shallowClone(e);return t.pass=Ge.TRANSLUCENT,t.renderState=pUe(e.renderState),t}function dUe(e){let t=ot.shallowClone(e);return t.renderState=AUe(e.renderState),t}function uUe(e,t){let n=e.shaderCache.getDerivedShaderProgram(t,"zBackfaceLogDepth");if(!l(n)){let i=t.fragmentShaderSource.clone();i.defines=l(i.defines)?i.defines.slice(0):[],i.defines.push("POLYGON_OFFSET"),n=e.shaderCache.createDerivedShaderProgram(t,"zBackfaceLogDepth",{vertexShaderSource:t.vertexShaderSource,fragmentShaderSource:i,attributeLocations:t._attributeLocations})}return n}function mUe(e,t){let n=ot.shallowClone(t),i=He(n.renderState,!0);i.cull.enabled=!0,i.cull.face=wi.FRONT,i.colorMask={red:!1,green:!1,blue:!1,alpha:!1},i.polygonOffset={enabled:!0,factor:5,units:5},i.stencilTest=Jt.setCesium3DTileBit(),i.stencilMask=Jt.CESIUM_3D_TILE_MASK,n.renderState=Qe.fromCache(i),n.castShadows=!1,n.receiveShadows=!1,n.uniformMap=He(t.uniformMap);let o=new M(5,5);return n.uniformMap.u_polygonOffset=function(){return o},n.shaderProgram=uUe(e,t.shaderProgram),n}function hUe(e,t){let n=ot.shallowClone(e),i=He(n.renderState,!0);return i.stencilTest.enabled=!0,i.stencilTest.mask=Jt.SKIP_LOD_MASK,i.stencilTest.reference=Jt.CESIUM_3D_TILE_MASK|t<<Jt.SKIP_LOD_BIT_SHIFT,i.stencilTest.frontFunction=ni.GREATER_OR_EQUAL,i.stencilTest.frontOperation.zPass=Vt.REPLACE,i.stencilTest.backFunction=ni.GREATER_OR_EQUAL,i.stencilTest.backOperation.zPass=Vt.REPLACE,i.stencilMask=Jt.CESIUM_3D_TILE_MASK|Jt.SKIP_LOD_MASK,n.renderState=Qe.fromCache(i),n}function fUe(e){return(e.renderState.stencilTest.reference&Jt.SKIP_LOD_MASK)>>>Jt.SKIP_LOD_BIT_SHIFT}function pUe(e){let t=He(e,!0);return t.cull.enabled=!1,t.depthTest.enabled=!0,t.depthMask=!1,t.blending=ln.ALPHA_BLEND,t.stencilTest=Jt.setCesium3DTileBit(),t.stencilMask=Jt.CESIUM_3D_TILE_MASK,Qe.fromCache(t)}function AUe(e){let t=He(e,!0);return t.stencilTest=Jt.setCesium3DTileBit(),t.stencilMask=Jt.CESIUM_3D_TILE_MASK,Qe.fromCache(t)}Do.prototype.update=function(e,t){this._batchTexture.update(e,t)};Do.prototype.isDestroyed=function(){return!1};Do.prototype.destroy=function(){return this._batchTexture=this._batchTexture&&this._batchTexture.destroy(),he(this)};var Xh=Do;var DAn=y(x(),1);var Bpn=y(x(),1);function gUe(e){this.offset=e.offset,this.count=e.count,this.color=e.color,this.batchIds=e.batchIds}var dp=gUe;var LAn=y(x(),1);var Npn=y(x(),1),NS=`in vec3 position;
in float a_batchId;
uniform mat4 u_modifiedModelViewProjection;
void main()
{
gl_Position = czm_depthClamp(u_modifiedModelViewProjection * vec4(position, 1.0));
}
`;var Mpn=y(x(),1);var LJ=class e{constructor(t,n){this._content=t,this._batchId=n,this._color=void 0}get show(){return this._content.batchTable.getShow(this._batchId)}set show(t){this._content.batchTable.setShow(this._batchId,t)}get color(){return l(this._color)||(this._color=new U),this._content.batchTable.getColor(this._batchId,this._color)}set color(t){this._content.batchTable.setColor(this._batchId,t)}get polylinePositions(){if(l(this._content.getPolylinePositions))return this._content.getPolylinePositions(this._batchId)}get content(){return this._content}get tileset(){return this._content.tileset}get primitive(){return this._content.tileset}get featureId(){return this._batchId}get pickId(){return this._content.batchTable.getPickColor(this._batchId)}hasProperty(t){return this._content.batchTable.hasProperty(this._batchId,t)}getPropertyIds(t){return this._content.batchTable.getPropertyIds(this._batchId,t)}getProperty(t){return this._content.batchTable.getProperty(this._batchId,t)}static getPropertyInherited(t,n,i){let o=t.batchTable;if(l(o)){if(o.hasPropertyBySemantic(n,i))return o.getPropertyBySemantic(n,i);if(o.hasProperty(n,i))return o.getProperty(n,i)}let r=t.metadata;if(l(r)){if(r.hasPropertyBySemantic(i))return r.getPropertyBySemantic(i);if(r.hasProperty(i))return r.getProperty(i)}let s=t.tile,a=s.metadata;if(l(a)){if(a.hasPropertyBySemantic(i))return a.getPropertyBySemantic(i);if(a.hasProperty(i))return a.getProperty(i)}let c;if(l(s.implicitSubtree)&&(c=s.implicitSubtree.metadata),l(c)){if(c.hasPropertyBySemantic(i))return c.getPropertyBySemantic(i);if(c.hasProperty(i))return c.getProperty(i)}let d=l(t.group)?t.group.metadata:void 0;if(l(d)){if(d.hasPropertyBySemantic(i))return d.getPropertyBySemantic(i);if(d.hasProperty(i))return d.getProperty(i)}let u=t.tileset.metadata;if(l(u)){if(u.hasPropertyBySemantic(i))return u.getPropertyBySemantic(i);if(u.hasProperty(i))return u.getProperty(i)}}getPropertyInherited(t){return e.getPropertyInherited(this._content,this._batchId,t)}setProperty(t,n){this._content.batchTable.setProperty(this._batchId,t,n),this._content.featurePropertiesDirty=!0}isExactClass(t){return this._content.batchTable.isExactClass(this._batchId,t)}isClass(t){return this._content.batchTable.isClass(this._batchId,t)}getExactClassName(){return this._content.batchTable.getExactClassName(this._batchId)}},Ga=LJ;var tAn=y(x(),1);var Upn=y(x(),1),WJ=class{add(t,n,i){if(typeof arguments[0]!="string")for(let o in arguments[0])this.add(o,arguments[0][o],arguments[1]);else(Array.isArray(t)?t:[t]).forEach(function(o){this[o]=this[o]||[],n&&this[o][i?"unshift":"push"](n)},this)}run(t,n){this[t]=this[t]||[],this[t].forEach(function(i){i.call(n&&n.context?n.context:n,n)})}},FJ=class{constructor(t){this.jsep=t,this.registered={}}register(...t){t.forEach(n=>{if(typeof n!="object"||!n.name||!n.init)throw new Error("Invalid JSEP plugin format");this.registered[n.name]||(n.init(this.jsep),this.registered[n.name]=n)})}},xd=class e{static get version(){return"1.3.8"}static toString(){return"JavaScript Expression Parser (JSEP) v"+e.version}static addUnaryOp(t){return e.max_unop_len=Math.max(t.length,e.max_unop_len),e.unary_ops[t]=1,e}static addBinaryOp(t,n,i){return e.max_binop_len=Math.max(t.length,e.max_binop_len),e.binary_ops[t]=n,i?e.right_associative.add(t):e.right_associative.delete(t),e}static addIdentifierChar(t){return e.additional_identifier_chars.add(t),e}static addLiteral(t,n){return e.literals[t]=n,e}static removeUnaryOp(t){return delete e.unary_ops[t],t.length===e.max_unop_len&&(e.max_unop_len=e.getMaxKeyLen(e.unary_ops)),e}static removeAllUnaryOps(){return e.unary_ops={},e.max_unop_len=0,e}static removeIdentifierChar(t){return e.additional_identifier_chars.delete(t),e}static removeBinaryOp(t){return delete e.binary_ops[t],t.length===e.max_binop_len&&(e.max_binop_len=e.getMaxKeyLen(e.binary_ops)),e.right_associative.delete(t),e}static removeAllBinaryOps(){return e.binary_ops={},e.max_binop_len=0,e}static removeLiteral(t){return delete e.literals[t],e}static removeAllLiterals(){return e.literals={},e}get char(){return this.expr.charAt(this.index)}get code(){return this.expr.charCodeAt(this.index)}constructor(t){this.expr=t,this.index=0}static parse(t){return new e(t).parse()}static getMaxKeyLen(t){return Math.max(0,...Object.keys(t).map(n=>n.length))}static isDecimalDigit(t){return t>=48&&t<=57}static binaryPrecedence(t){return e.binary_ops[t]||0}static isIdentifierStart(t){return t>=65&&t<=90||t>=97&&t<=122||t>=128&&!e.binary_ops[String.fromCharCode(t)]||e.additional_identifier_chars.has(String.fromCharCode(t))}static isIdentifierPart(t){return e.isIdentifierStart(t)||e.isDecimalDigit(t)}throwError(t){let n=new Error(t+" at character "+this.index);throw n.index=this.index,n.description=t,n}runHook(t,n){if(e.hooks[t]){let i={context:this,node:n};return e.hooks.run(t,i),i.node}return n}searchHook(t){if(e.hooks[t]){let n={context:this};return e.hooks[t].find(function(i){return i.call(n.context,n),n.node}),n.node}}gobbleSpaces(){let t=this.code;for(;t===e.SPACE_CODE||t===e.TAB_CODE||t===e.LF_CODE||t===e.CR_CODE;)t=this.expr.charCodeAt(++this.index);this.runHook("gobble-spaces")}parse(){this.runHook("before-all");let t=this.gobbleExpressions(),n=t.length===1?t[0]:{type:e.COMPOUND,body:t};return this.runHook("after-all",n)}gobbleExpressions(t){let n=[],i,o;for(;this.index<this.expr.length;)if(i=this.code,i===e.SEMCOL_CODE||i===e.COMMA_CODE)this.index++;else if(o=this.gobbleExpression())n.push(o);else if(this.index<this.expr.length){if(i===t)break;this.throwError('Unexpected "'+this.char+'"')}return n}gobbleExpression(){let t=this.searchHook("gobble-expression")||this.gobbleBinaryExpression();return this.gobbleSpaces(),this.runHook("after-expression",t)}gobbleBinaryOp(){this.gobbleSpaces();let t=this.expr.substr(this.index,e.max_binop_len),n=t.length;for(;n>0;){if(e.binary_ops.hasOwnProperty(t)&&(!e.isIdentifierStart(this.code)||this.index+t.length<this.expr.length&&!e.isIdentifierPart(this.expr.charCodeAt(this.index+t.length))))return this.index+=n,t;t=t.substr(0,--n)}return!1}gobbleBinaryExpression(){let t,n,i,o,r,s,a,c,d;if(s=this.gobbleToken(),!s||(n=this.gobbleBinaryOp(),!n))return s;for(r={value:n,prec:e.binaryPrecedence(n),right_a:e.right_associative.has(n)},a=this.gobbleToken(),a||this.throwError("Expected expression after "+n),o=[s,r,a];n=this.gobbleBinaryOp();){if(i=e.binaryPrecedence(n),i===0){this.index-=n.length;break}r={value:n,prec:i,right_a:e.right_associative.has(n)},d=n;let u=h=>r.right_a&&h.right_a?i>h.prec:i<=h.prec;for(;o.length>2&&u(o[o.length-2]);)a=o.pop(),n=o.pop().value,s=o.pop(),t={type:e.BINARY_EXP,operator:n,left:s,right:a},o.push(t);t=this.gobbleToken(),t||this.throwError("Expected expression after "+d),o.push(r,t)}for(c=o.length-1,t=o[c];c>1;)t={type:e.BINARY_EXP,operator:o[c-1].value,left:o[c-2],right:t},c-=2;return t}gobbleToken(){let t,n,i,o;if(this.gobbleSpaces(),o=this.searchHook("gobble-token"),o)return this.runHook("after-token",o);if(t=this.code,e.isDecimalDigit(t)||t===e.PERIOD_CODE)return this.gobbleNumericLiteral();if(t===e.SQUOTE_CODE||t===e.DQUOTE_CODE)o=this.gobbleStringLiteral();else if(t===e.OBRACK_CODE)o=this.gobbleArray();else{for(n=this.expr.substr(this.index,e.max_unop_len),i=n.length;i>0;){if(e.unary_ops.hasOwnProperty(n)&&(!e.isIdentifierStart(this.code)||this.index+n.length<this.expr.length&&!e.isIdentifierPart(this.expr.charCodeAt(this.index+n.length)))){this.index+=i;let r=this.gobbleToken();return r||this.throwError("missing unaryOp argument"),this.runHook("after-token",{type:e.UNARY_EXP,operator:n,argument:r,prefix:!0})}n=n.substr(0,--i)}e.isIdentifierStart(t)?(o=this.gobbleIdentifier(),e.literals.hasOwnProperty(o.name)?o={type:e.LITERAL,value:e.literals[o.name],raw:o.name}:o.name===e.this_str&&(o={type:e.THIS_EXP})):t===e.OPAREN_CODE&&(o=this.gobbleGroup())}return o?(o=this.gobbleTokenProperty(o),this.runHook("after-token",o)):this.runHook("after-token",!1)}gobbleTokenProperty(t){this.gobbleSpaces();let n=this.code;for(;n===e.PERIOD_CODE||n===e.OBRACK_CODE||n===e.OPAREN_CODE||n===e.QUMARK_CODE;){let i;if(n===e.QUMARK_CODE){if(this.expr.charCodeAt(this.index+1)!==e.PERIOD_CODE)break;i=!0,this.index+=2,this.gobbleSpaces(),n=this.code}this.index++,n===e.OBRACK_CODE?(t={type:e.MEMBER_EXP,computed:!0,object:t,property:this.gobbleExpression()},this.gobbleSpaces(),n=this.code,n!==e.CBRACK_CODE&&this.throwError("Unclosed ["),this.index++):n===e.OPAREN_CODE?t={type:e.CALL_EXP,arguments:this.gobbleArguments(e.CPAREN_CODE),callee:t}:(n===e.PERIOD_CODE||i)&&(i&&this.index--,this.gobbleSpaces(),t={type:e.MEMBER_EXP,computed:!1,object:t,property:this.gobbleIdentifier()}),i&&(t.optional=!0),this.gobbleSpaces(),n=this.code}return t}gobbleNumericLiteral(){let t="",n,i;for(;e.isDecimalDigit(this.code);)t+=this.expr.charAt(this.index++);if(this.code===e.PERIOD_CODE)for(t+=this.expr.charAt(this.index++);e.isDecimalDigit(this.code);)t+=this.expr.charAt(this.index++);if(n=this.char,n==="e"||n==="E"){for(t+=this.expr.charAt(this.index++),n=this.char,(n==="+"||n==="-")&&(t+=this.expr.charAt(this.index++));e.isDecimalDigit(this.code);)t+=this.expr.charAt(this.index++);e.isDecimalDigit(this.expr.charCodeAt(this.index-1))||this.throwError("Expected exponent ("+t+this.char+")")}return i=this.code,e.isIdentifierStart(i)?this.throwError("Variable names cannot start with a number ("+t+this.char+")"):(i===e.PERIOD_CODE||t.length===1&&t.charCodeAt(0)===e.PERIOD_CODE)&&this.throwError("Unexpected period"),{type:e.LITERAL,value:parseFloat(t),raw:t}}gobbleStringLiteral(){let t="",n=this.index,i=this.expr.charAt(this.index++),o=!1;for(;this.index<this.expr.length;){let r=this.expr.charAt(this.index++);if(r===i){o=!0;break}else if(r==="\\")switch(r=this.expr.charAt(this.index++),r){case"n":t+=`
`;break;case"r":t+="\r";break;case"t":t+=" ";break;case"b":t+="\b";break;case"f":t+="\f";break;case"v":t+="\v";break;default:t+=r}else t+=r}return o||this.throwError('Unclosed quote after "'+t+'"'),{type:e.LITERAL,value:t,raw:this.expr.substring(n,this.index)}}gobbleIdentifier(){let t=this.code,n=this.index;for(e.isIdentifierStart(t)?this.index++:this.throwError("Unexpected "+this.char);this.index<this.expr.length&&(t=this.code,e.isIdentifierPart(t));)this.index++;return{type:e.IDENTIFIER,name:this.expr.slice(n,this.index)}}gobbleArguments(t){let n=[],i=!1,o=0;for(;this.index<this.expr.length;){this.gobbleSpaces();let r=this.code;if(r===t){i=!0,this.index++,t===e.CPAREN_CODE&&o&&o>=n.length&&this.throwError("Unexpected token "+String.fromCharCode(t));break}else if(r===e.COMMA_CODE){if(this.index++,o++,o!==n.length){if(t===e.CPAREN_CODE)this.throwError("Unexpected token ,");else if(t===e.CBRACK_CODE)for(let s=n.length;s<o;s++)n.push(null)}}else if(n.length!==o&&o!==0)this.throwError("Expected comma");else{let s=this.gobbleExpression();(!s||s.type===e.COMPOUND)&&this.throwError("Expected comma"),n.push(s)}}return i||this.throwError("Expected "+String.fromCharCode(t)),n}gobbleGroup(){this.index++;let t=this.gobbleExpressions(e.CPAREN_CODE);if(this.code===e.CPAREN_CODE)return this.index++,t.length===1?t[0]:t.length?{type:e.SEQUENCE_EXP,expressions:t}:!1;this.throwError("Unclosed (")}gobbleArray(){return this.index++,{type:e.ARRAY_EXP,elements:this.gobbleArguments(e.CBRACK_CODE)}}},bUe=new WJ;Object.assign(xd,{hooks:bUe,plugins:new FJ(xd),COMPOUND:"Compound",SEQUENCE_EXP:"SequenceExpression",IDENTIFIER:"Identifier",MEMBER_EXP:"MemberExpression",LITERAL:"Literal",THIS_EXP:"ThisExpression",CALL_EXP:"CallExpression",UNARY_EXP:"UnaryExpression",BINARY_EXP:"BinaryExpression",ARRAY_EXP:"ArrayExpression",TAB_CODE:9,LF_CODE:10,CR_CODE:13,SPACE_CODE:32,PERIOD_CODE:46,COMMA_CODE:44,SQUOTE_CODE:39,DQUOTE_CODE:34,OPAREN_CODE:40,CPAREN_CODE:41,OBRACK_CODE:91,CBRACK_CODE:93,QUMARK_CODE:63,SEMCOL_CODE:59,COLON_CODE:58,unary_ops:{"-":1,"!":1,"~":1,"+":1},binary_ops:{"||":1,"&&":2,"|":3,"^":4,"&":5,"==":6,"!=":6,"===":6,"!==":6,"<":7,">":7,"<=":7,">=":7,"<<":8,">>":8,">>>":8,"+":9,"-":9,"*":10,"/":10,"%":10},right_associative:new Set,additional_identifier_chars:new Set(["$","_"]),literals:{true:!0,false:!1,null:null},this_str:"this"});xd.max_unop_len=xd.getMaxKeyLen(xd.unary_ops);xd.max_binop_len=xd.getMaxKeyLen(xd.binary_ops);var d0=e=>new xd(e).parse(),yUe=Object.getOwnPropertyNames(xd);yUe.forEach(e=>{d0[e]===void 0&&e!=="prototype"&&(d0[e]=xd[e])});d0.Jsep=xd;var xUe="ConditionalExpression",CUe={name:"ternary",init(e){e.hooks.add("after-expression",function(n){if(n.node&&this.code===e.QUMARK_CODE){this.index++;let i=n.node,o=this.gobbleExpression();if(o||this.throwError("Expected expression"),this.gobbleSpaces(),this.code===e.COLON_CODE){this.index++;let r=this.gobbleExpression();if(r||this.throwError("Expected expression"),n.node={type:xUe,test:i,consequent:o,alternate:r},i.operator&&e.binary_ops[i.operator]<=.9){let s=i;for(;s.right.operator&&e.binary_ops[s.right.operator]<=.9;)s=s.right;n.node.test=s.right,s.right=n.node,n.node=i}}else this.throwError("Expected :")}})}};d0.plugins.register(CUe);var kpn=y(x(),1),TUe={VARIABLE:0,UNARY:1,BINARY:2,TERNARY:3,CONDITIONAL:4,MEMBER:5,FUNCTION_CALL:6,ARRAY:7,REGEX:8,VARIABLE_IN_STRING:9,LITERAL_NULL:10,LITERAL_BOOLEAN:11,LITERAL_NUMBER:12,LITERAL_STRING:13,LITERAL_COLOR:14,LITERAL_VECTOR:15,LITERAL_REGEX:16,LITERAL_UNDEFINED:17,BUILTIN_VARIABLE:18},Gt=Object.freeze(TUe);function Yh(e,t){this._expression=e,e=wUe(e,t),e=PUe(NUe(e)),d0.addBinaryOp("=~",0),d0.addBinaryOp("!~",0);let n;try{n=d0(e)}catch(i){throw new me(i)}this._runtimeAst=vi(this,n)}Object.defineProperties(Yh.prototype,{expression:{get:function(){return this._expression}}});var Dn={arrayIndex:0,arrayArray:[[]],cartesian2Index:0,cartesian3Index:0,cartesian4Index:0,cartesian2Array:[new M],cartesian3Array:[new m],cartesian4Array:[new re],reset:function(){this.arrayIndex=0,this.cartesian2Index=0,this.cartesian3Index=0,this.cartesian4Index=0},getArray:function(){this.arrayIndex>=this.arrayArray.length&&this.arrayArray.push([]);let e=this.arrayArray[this.arrayIndex++];return e.length=0,e},getCartesian2:function(){return this.cartesian2Index>=this.cartesian2Array.length&&this.cartesian2Array.push(new M),this.cartesian2Array[this.cartesian2Index++]},getCartesian3:function(){return this.cartesian3Index>=this.cartesian3Array.length&&this.cartesian3Array.push(new m),this.cartesian3Array[this.cartesian3Index++]},getCartesian4:function(){return this.cartesian4Index>=this.cartesian4Array.length&&this.cartesian4Array.push(new re),this.cartesian4Array[this.cartesian4Index++]}};Yh.prototype.evaluate=function(e,t){Dn.reset();let n=this._runtimeAst.evaluate(e);return t instanceof U&&n instanceof re?U.fromCartesian4(n,t):n instanceof M||n instanceof m||n instanceof re?n.clone(t):n};Yh.prototype.evaluateColor=function(e,t){Dn.reset();let n=this._runtimeAst.evaluate(e);return U.fromCartesian4(n,t)};Yh.prototype.getShaderFunction=function(e,t,n,i){let o=this.getShaderExpression(t,n);return o=`${i} ${e}
{
return ${o};
}
`,o};Yh.prototype.getShaderExpression=function(e,t){return this._runtimeAst.getShaderExpression(e,t)};Yh.prototype.getVariables=function(){let e=[];return this._runtimeAst.getVariables(e),e=e.filter(function(t,n,i){return i.indexOf(t)===n}),e};var EUe=["!","-","+"],Sle=["+","-","*","/","%","===","!==",">",">=","<","<=","&&","||","!~","=~"],SW=/\${(.*?)}/g,SUe=/\\/g,_Ue="@#%",IUe=/@#%/g,mk=new U,hk={abs:La(Math.abs),sqrt:La(Math.sqrt),cos:La(Math.cos),sin:La(Math.sin),tan:La(Math.tan),acos:La(Math.acos),asin:La(Math.asin),atan:La(Math.atan),radians:La(L.toRadians),degrees:La(L.toDegrees),sign:La(L.sign),floor:La(Math.floor),ceil:La(Math.ceil),round:La(Math.round),exp:La(Math.exp),exp2:La(RUe),log:La(Math.log),log2:La(VUe),fract:La(ZUe),length:GUe,normalize:LUe},fk={atan2:dk(Math.atan2,!1),pow:dk(Math.pow,!1),min:dk(Math.min,!0),max:dk(Math.max,!0),distance:WUe,dot:FUe,cross:BUe},NJ={clamp:_le(L.clamp,!0),mix:_le(L.lerp,!0)};function ZUe(e){return e-Math.floor(e)}function RUe(e){return Math.pow(2,e)}function VUe(e){return L.log2(e)}function La(e){return function(t,n){if(typeof n=="number")return e(n);if(n instanceof M)return M.fromElements(e(n.x),e(n.y),Dn.getCartesian2());if(n instanceof m)return m.fromElements(e(n.x),e(n.y),e(n.z),Dn.getCartesian3());if(n instanceof re)return re.fromElements(e(n.x),e(n.y),e(n.z),e(n.w),Dn.getCartesian4());throw new me(`Function "${t}" requires a vector or number argument. Argument is ${n}.`)}}function dk(e,t){return function(n,i,o){if(t&&typeof o=="number"){if(typeof i=="number")return e(i,o);if(i instanceof M)return M.fromElements(e(i.x,o),e(i.y,o),Dn.getCartesian2());if(i instanceof m)return m.fromElements(e(i.x,o),e(i.y,o),e(i.z,o),Dn.getCartesian3());if(i instanceof re)return re.fromElements(e(i.x,o),e(i.y,o),e(i.z,o),e(i.w,o),Dn.getCartesian4())}if(typeof i=="number"&&typeof o=="number")return e(i,o);if(i instanceof M&&o instanceof M)return M.fromElements(e(i.x,o.x),e(i.y,o.y),Dn.getCartesian2());if(i instanceof m&&o instanceof m)return m.fromElements(e(i.x,o.x),e(i.y,o.y),e(i.z,o.z),Dn.getCartesian3());if(i instanceof re&&o instanceof re)return re.fromElements(e(i.x,o.x),e(i.y,o.y),e(i.z,o.z),e(i.w,o.w),Dn.getCartesian4());throw new me(`Function "${n}" requires vector or number arguments of matching types. Arguments are ${i} and ${o}.`)}}function _le(e,t){return function(n,i,o,r){if(t&&typeof r=="number"){if(typeof i=="number"&&typeof o=="number")return e(i,o,r);if(i instanceof M&&o instanceof M)return M.fromElements(e(i.x,o.x,r),e(i.y,o.y,r),Dn.getCartesian2());if(i instanceof m&&o instanceof m)return m.fromElements(e(i.x,o.x,r),e(i.y,o.y,r),e(i.z,o.z,r),Dn.getCartesian3());if(i instanceof re&&o instanceof re)return re.fromElements(e(i.x,o.x,r),e(i.y,o.y,r),e(i.z,o.z,r),e(i.w,o.w,r),Dn.getCartesian4())}if(typeof i=="number"&&typeof o=="number"&&typeof r=="number")return e(i,o,r);if(i instanceof M&&o instanceof M&&r instanceof M)return M.fromElements(e(i.x,o.x,r.x),e(i.y,o.y,r.y),Dn.getCartesian2());if(i instanceof m&&o instanceof m&&r instanceof m)return m.fromElements(e(i.x,o.x,r.x),e(i.y,o.y,r.y),e(i.z,o.z,r.z),Dn.getCartesian3());if(i instanceof re&&o instanceof re&&r instanceof re)return re.fromElements(e(i.x,o.x,r.x),e(i.y,o.y,r.y),e(i.z,o.z,r.z),e(i.w,o.w,r.w),Dn.getCartesian4());throw new me(`Function "${n}" requires vector or number arguments of matching types. Arguments are ${i}, ${o}, and ${r}.`)}}function GUe(e,t){if(typeof t=="number")return Math.abs(t);if(t instanceof M)return M.magnitude(t);if(t instanceof m)return m.magnitude(t);if(t instanceof re)return re.magnitude(t);throw new me(`Function "${e}" requires a vector or number argument. Argument is ${t}.`)}function LUe(e,t){if(typeof t=="number")return 1;if(t instanceof M)return M.normalize(t,Dn.getCartesian2());if(t instanceof m)return m.normalize(t,Dn.getCartesian3());if(t instanceof re)return re.normalize(t,Dn.getCartesian4());throw new me(`Function "${e}" requires a vector or number argument. Argument is ${t}.`)}function WUe(e,t,n){if(typeof t=="number"&&typeof n=="number")return Math.abs(t-n);if(t instanceof M&&n instanceof M)return M.distance(t,n);if(t instanceof m&&n instanceof m)return m.distance(t,n);if(t instanceof re&&n instanceof re)return re.distance(t,n);throw new me(`Function "${e}" requires vector or number arguments of matching types. Arguments are ${t} and ${n}.`)}function FUe(e,t,n){if(typeof t=="number"&&typeof n=="number")return t*n;if(t instanceof M&&n instanceof M)return M.dot(t,n);if(t instanceof m&&n instanceof m)return m.dot(t,n);if(t instanceof re&&n instanceof re)return re.dot(t,n);throw new me(`Function "${e}" requires vector or number arguments of matching types. Arguments are ${t} and ${n}.`)}function BUe(e,t,n){if(t instanceof m&&n instanceof m)return m.cross(t,n,Dn.getCartesian3());throw new me(`Function "${e}" requires vec3 arguments. Arguments are ${t} and ${n}.`)}function Nt(e,t,n,i,o){this._type=e,this._value=t,this._left=n,this._right=i,this._test=o,this.evaluate=void 0,zUe(this)}function wUe(e,t){if(!l(t))return e;for(let n in t)if(t.hasOwnProperty(n)){let i=new RegExp(`\\$\\{${n}\\}`,"g"),o=`(${t[n]})`;l(o)&&(e=e.replace(i,o))}return e}function NUe(e){return e.replace(SUe,_Ue)}function wJ(e){return e.replace(IUe,"\\")}function PUe(e){let t=e,n="",i=t.indexOf("${");for(;i>=0;){let o=t.indexOf("'"),r=t.indexOf('"'),s;if(o>=0&&o<i)s=t.indexOf("'",o+1),n+=t.substr(0,s+1),t=t.substr(s+1),i=t.indexOf("${");else if(r>=0&&r<i)s=t.indexOf('"',r+1),n+=t.substr(0,s+1),t=t.substr(s+1),i=t.indexOf("${");else{n+=t.substr(0,i);let a=t.indexOf("}");if(a<0)throw new me("Unmatched {.");n+=`czm_${t.substr(i+2,a-(i+2))}`,t=t.substr(a+1),i=t.indexOf("${")}}return n+=t,n}function XUe(e){let t=typeof e.value;if(e.value===null)return new Nt(Gt.LITERAL_NULL,null);if(t==="boolean")return new Nt(Gt.LITERAL_BOOLEAN,e.value);if(t==="number")return new Nt(Gt.LITERAL_NUMBER,e.value);if(t==="string")return e.value.indexOf("${")>=0?new Nt(Gt.VARIABLE_IN_STRING,e.value):new Nt(Gt.LITERAL_STRING,wJ(e.value))}function YUe(e,t){let n=t.arguments,i=n.length,o,r,s,a;if(t.callee.type==="MemberExpression"){o=t.callee.property.name;let c=t.callee.object;if(o==="test"||o==="exec"){if(!l(c.callee)||c.callee.name!=="regExp")throw new me(`${o} is not a function.`);return i===0?o==="test"?new Nt(Gt.LITERAL_BOOLEAN,!1):new Nt(Gt.LITERAL_NULL,null):(s=vi(e,c),a=vi(e,n[0]),new Nt(Gt.FUNCTION_CALL,o,s,a))}else if(o==="toString")return r=vi(e,c),new Nt(Gt.FUNCTION_CALL,o,r);throw new me(`Unexpected function call "${o}".`)}if(o=t.callee.name,o==="color"){if(i===0)return new Nt(Gt.LITERAL_COLOR,o);if(r=vi(e,n[0]),l(n[1])){let c=vi(e,n[1]);return new Nt(Gt.LITERAL_COLOR,o,[r,c])}return new Nt(Gt.LITERAL_COLOR,o,[r])}else if(o==="rgb"||o==="hsl"){if(i<3)throw new me(`${o} requires three arguments.`);return r=[vi(e,n[0]),vi(e,n[1]),vi(e,n[2])],new Nt(Gt.LITERAL_COLOR,o,r)}else if(o==="rgba"||o==="hsla"){if(i<4)throw new me(`${o} requires four arguments.`);return r=[vi(e,n[0]),vi(e,n[1]),vi(e,n[2]),vi(e,n[3])],new Nt(Gt.LITERAL_COLOR,o,r)}else if(o==="vec2"||o==="vec3"||o==="vec4"){r=new Array(i);for(let c=0;c<i;++c)r[c]=vi(e,n[c]);return new Nt(Gt.LITERAL_VECTOR,o,r)}else{if(o==="isNaN"||o==="isFinite")return i===0?o==="isNaN"?new Nt(Gt.LITERAL_BOOLEAN,!0):new Nt(Gt.LITERAL_BOOLEAN,!1):(r=vi(e,n[0]),new Nt(Gt.UNARY,o,r));if(o==="isExactClass"||o==="isClass"){if(i<1||i>1)throw new me(`${o} requires exactly one argument.`);return r=vi(e,n[0]),new Nt(Gt.UNARY,o,r)}else if(o==="getExactClassName"){if(i>0)throw new me(`${o} does not take any argument.`);return new Nt(Gt.UNARY,o)}else if(l(hk[o])){if(i!==1)throw new me(`${o} requires exactly one argument.`);return r=vi(e,n[0]),new Nt(Gt.UNARY,o,r)}else if(l(fk[o])){if(i!==2)throw new me(`${o} requires exactly two arguments.`);return s=vi(e,n[0]),a=vi(e,n[1]),new Nt(Gt.BINARY,o,s,a)}else if(l(NJ[o])){if(i!==3)throw new me(`${o} requires exactly three arguments.`);s=vi(e,n[0]),a=vi(e,n[1]);let c=vi(e,n[2]);return new Nt(Gt.TERNARY,o,s,a,c)}else{if(o==="Boolean")return i===0?new Nt(Gt.LITERAL_BOOLEAN,!1):(r=vi(e,n[0]),new Nt(Gt.UNARY,o,r));if(o==="Number")return i===0?new Nt(Gt.LITERAL_NUMBER,0):(r=vi(e,n[0]),new Nt(Gt.UNARY,o,r));if(o==="String")return i===0?new Nt(Gt.LITERAL_STRING,""):(r=vi(e,n[0]),new Nt(Gt.UNARY,o,r));if(o==="regExp")return MUe(e,t)}}throw new me(`Unexpected function call "${o}".`)}function MUe(e,t){let n=t.arguments;if(n.length===0)return new Nt(Gt.LITERAL_REGEX,new RegExp);let i=vi(e,n[0]),o;if(n.length>1){let r=vi(e,n[1]);if(BJ(i)&&BJ(r)){try{o=new RegExp(wJ(String(i._value)),r._value)}catch(s){throw new me(s)}return new Nt(Gt.LITERAL_REGEX,o)}return new Nt(Gt.REGEX,i,r)}if(BJ(i)){try{o=new RegExp(wJ(String(i._value)))}catch(r){throw new me(r)}return new Nt(Gt.LITERAL_REGEX,o)}return new Nt(Gt.REGEX,i)}function vUe(e){if(QUe(e.name)){let t=OUe(e.name);return t.substr(0,8)==="tiles3d_"?new Nt(Gt.BUILTIN_VARIABLE,t):new Nt(Gt.VARIABLE,t)}else{if(e.name==="NaN")return new Nt(Gt.LITERAL_NUMBER,NaN);if(e.name==="Infinity")return new Nt(Gt.LITERAL_NUMBER,1/0);if(e.name==="undefined")return new Nt(Gt.LITERAL_UNDEFINED,void 0)}throw new me(`${e.name} is not defined.`)}function UUe(e){let t=e.property.name;if(t==="PI")return new Nt(Gt.LITERAL_NUMBER,Math.PI);if(t==="E")return new Nt(Gt.LITERAL_NUMBER,Math.E)}function DUe(e){if(e.property.name==="POSITIVE_INFINITY")return new Nt(Gt.LITERAL_NUMBER,Number.POSITIVE_INFINITY)}function kUe(e,t){if(t.object.name==="Math")return UUe(t);if(t.object.name==="Number")return DUe(t);let n,i=vi(e,t.object);return t.computed?(n=vi(e,t.property),new Nt(Gt.MEMBER,"brackets",i,n)):(n=new Nt(Gt.LITERAL_STRING,t.property.name),new Nt(Gt.MEMBER,"dot",i,n))}function BJ(e){return e._type>=Gt.LITERAL_NULL}function QUe(e){return e.substr(0,4)==="czm_"}function OUe(e){return e.substr(4)}function vi(e,t){let n,i,o,r;if(t.type==="Literal")n=XUe(t);else if(t.type==="CallExpression")n=YUe(e,t);else if(t.type==="Identifier")n=vUe(t);else if(t.type==="UnaryExpression"){i=t.operator;let s=vi(e,t.argument);if(EUe.indexOf(i)>-1)n=new Nt(Gt.UNARY,i,s);else throw new me(`Unexpected operator "${i}".`)}else if(t.type==="BinaryExpression")if(i=t.operator,o=vi(e,t.left),r=vi(e,t.right),Sle.indexOf(i)>-1)n=new Nt(Gt.BINARY,i,o,r);else throw new me(`Unexpected operator "${i}".`);else if(t.type==="LogicalExpression")i=t.operator,o=vi(e,t.left),r=vi(e,t.right),Sle.indexOf(i)>-1&&(n=new Nt(Gt.BINARY,i,o,r));else if(t.type==="ConditionalExpression"){let s=vi(e,t.test);o=vi(e,t.consequent),r=vi(e,t.alternate),n=new Nt(Gt.CONDITIONAL,"?",o,r,s)}else if(t.type==="MemberExpression")n=kUe(e,t);else if(t.type==="ArrayExpression"){let s=[];for(let a=0;a<t.elements.length;a++)s[a]=vi(e,t.elements[a]);n=new Nt(Gt.ARRAY,s)}else throw t.type==="Compound"?new me("Provide exactly one expression."):new me("Cannot parse expression.");return n}function zUe(e){e._type===Gt.CONDITIONAL?e.evaluate=e._evaluateConditional:e._type===Gt.FUNCTION_CALL?e._value==="test"?e.evaluate=e._evaluateRegExpTest:e._value==="exec"?e.evaluate=e._evaluateRegExpExec:e._value==="toString"&&(e.evaluate=e._evaluateToString):e._type===Gt.UNARY?e._value==="!"?e.evaluate=e._evaluateNot:e._value==="-"?e.evaluate=e._evaluateNegative:e._value==="+"?e.evaluate=e._evaluatePositive:e._value==="isNaN"?e.evaluate=e._evaluateNaN:e._value==="isFinite"?e.evaluate=e._evaluateIsFinite:e._value==="isExactClass"?e.evaluate=e._evaluateIsExactClass:e._value==="isClass"?e.evaluate=e._evaluateIsClass:e._value==="getExactClassName"?e.evaluate=e._evaluateGetExactClassName:e._value==="Boolean"?e.evaluate=e._evaluateBooleanConversion:e._value==="Number"?e.evaluate=e._evaluateNumberConversion:e._value==="String"?e.evaluate=e._evaluateStringConversion:l(hk[e._value])&&(e.evaluate=JUe(e._value)):e._type===Gt.BINARY?e._value==="+"?e.evaluate=e._evaluatePlus:e._value==="-"?e.evaluate=e._evaluateMinus:e._value==="*"?e.evaluate=e._evaluateTimes:e._value==="/"?e.evaluate=e._evaluateDivide:e._value==="%"?e.evaluate=e._evaluateMod:e._value==="==="?e.evaluate=e._evaluateEqualsStrict:e._value==="!=="?e.evaluate=e._evaluateNotEqualsStrict:e._value==="<"?e.evaluate=e._evaluateLessThan:e._value==="<="?e.evaluate=e._evaluateLessThanOrEquals:e._value===">"?e.evaluate=e._evaluateGreaterThan:e._value===">="?e.evaluate=e._evaluateGreaterThanOrEquals:e._value==="&&"?e.evaluate=e._evaluateAnd:e._value==="||"?e.evaluate=e._evaluateOr:e._value==="=~"?e.evaluate=e._evaluateRegExpMatch:e._value==="!~"?e.evaluate=e._evaluateRegExpNotMatch:l(fk[e._value])&&(e.evaluate=KUe(e._value)):e._type===Gt.TERNARY?e.evaluate=jUe(e._value):e._type===Gt.MEMBER?e._value==="brackets"?e.evaluate=e._evaluateMemberBrackets:e.evaluate=e._evaluateMemberDot:e._type===Gt.ARRAY?e.evaluate=e._evaluateArray:e._type===Gt.VARIABLE?e.evaluate=e._evaluateVariable:e._type===Gt.VARIABLE_IN_STRING?e.evaluate=e._evaluateVariableString:e._type===Gt.LITERAL_COLOR?e.evaluate=e._evaluateLiteralColor:e._type===Gt.LITERAL_VECTOR?e.evaluate=e._evaluateLiteralVector:e._type===Gt.LITERAL_STRING?e.evaluate=e._evaluateLiteralString:e._type===Gt.REGEX?e.evaluate=e._evaluateRegExp:e._type===Gt.BUILTIN_VARIABLE?e._value==="tiles3d_tileset_time"&&(e.evaluate=HUe):e.evaluate=e._evaluateLiteral}function HUe(e){return l(e)?e.content.tileset.timeSinceLoad:0}function JUe(e){let t=hk[e];return function(n){let i=this._left.evaluate(n);return t(e,i)}}function KUe(e){let t=fk[e];return function(n){let i=this._left.evaluate(n),o=this._right.evaluate(n);return t(e,i,o)}}function jUe(e){let t=NJ[e];return function(n){let i=this._left.evaluate(n),o=this._right.evaluate(n),r=this._test.evaluate(n);return t(e,i,o,r)}}function pk(e,t){if(l(e))return e.getPropertyInherited(t)}Nt.prototype._evaluateLiteral=function(){return this._value};Nt.prototype._evaluateLiteralColor=function(e){let t=mk,n=this._left;if(this._value==="color")l(n)?n.length>1?(U.fromCssColorString(n[0].evaluate(e),t),t.alpha=n[1].evaluate(e)):U.fromCssColorString(n[0].evaluate(e),t):U.fromBytes(255,255,255,255,t);else if(this._value==="rgb")U.fromBytes(n[0].evaluate(e),n[1].evaluate(e),n[2].evaluate(e),255,t);else if(this._value==="rgba"){let i=n[3].evaluate(e)*255;U.fromBytes(n[0].evaluate(e),n[1].evaluate(e),n[2].evaluate(e),i,t)}else this._value==="hsl"?U.fromHsl(n[0].evaluate(e),n[1].evaluate(e),n[2].evaluate(e),1,t):this._value==="hsla"&&U.fromHsl(n[0].evaluate(e),n[1].evaluate(e),n[2].evaluate(e),n[3].evaluate(e),t);return re.fromColor(t,Dn.getCartesian4())};Nt.prototype._evaluateLiteralVector=function(e){let t=Dn.getArray(),n=this._value,i=this._left,o=i.length;for(let a=0;a<o;++a){let c=i[a].evaluate(e);if(typeof c=="number")t.push(c);else if(c instanceof M)t.push(c.x,c.y);else if(c instanceof m)t.push(c.x,c.y,c.z);else if(c instanceof re)t.push(c.x,c.y,c.z,c.w);else throw new me(`${n} argument must be a vector or number. Argument is ${c}.`)}let r=t.length,s=parseInt(n.charAt(3));if(r===0)throw new me(`Invalid ${n} constructor. No valid arguments.`);if(r<s&&r>1)throw new me(`Invalid ${n} constructor. Not enough arguments.`);if(r>s&&o>1)throw new me(`Invalid ${n} constructor. Too many arguments.`);if(r===1){let a=t[0];t.push(a,a,a)}if(n==="vec2")return M.fromArray(t,0,Dn.getCartesian2());if(n==="vec3")return m.fromArray(t,0,Dn.getCartesian3());if(n==="vec4")return re.fromArray(t,0,Dn.getCartesian4())};Nt.prototype._evaluateLiteralString=function(){return this._value};Nt.prototype._evaluateVariableString=function(e){let t=this._value,n=SW.exec(t);for(;n!==null;){let i=n[0],o=n[1],r=pk(e,o);l(r)||(r=""),t=t.replace(i,r),SW.lastIndex+=r.length-i.length,n=SW.exec(t)}return t};Nt.prototype._evaluateVariable=function(e){return pk(e,this._value)};function rC(e){return e._value==="feature"}Nt.prototype._evaluateMemberDot=function(e){if(rC(this._left))return pk(e,this._right.evaluate(e));let t=this._left.evaluate(e);if(!l(t))return;let n=this._right.evaluate(e);if(t instanceof M||t instanceof m||t instanceof re){if(n==="r")return t.x;if(n==="g")return t.y;if(n==="b")return t.z;if(n==="a")return t.w}return t[n]};Nt.prototype._evaluateMemberBrackets=function(e){if(rC(this._left))return pk(e,this._right.evaluate(e));let t=this._left.evaluate(e);if(!l(t))return;let n=this._right.evaluate(e);if(t instanceof M||t instanceof m||t instanceof re){if(n===0||n==="r")return t.x;if(n===1||n==="g")return t.y;if(n===2||n==="b")return t.z;if(n===3||n==="a")return t.w}return t[n]};Nt.prototype._evaluateArray=function(e){let t=[];for(let n=0;n<this._value.length;n++)t[n]=this._value[n].evaluate(e);return t};Nt.prototype._evaluateNot=function(e){let t=this._left.evaluate(e);if(typeof t!="boolean")throw new me(`Operator "!" requires a boolean argument. Argument is ${t}.`);return!t};Nt.prototype._evaluateNegative=function(e){let t=this._left.evaluate(e);if(t instanceof M)return M.negate(t,Dn.getCartesian2());if(t instanceof m)return m.negate(t,Dn.getCartesian3());if(t instanceof re)return re.negate(t,Dn.getCartesian4());if(typeof t=="number")return-t;throw new me(`Operator "-" requires a vector or number argument. Argument is ${t}.`)};Nt.prototype._evaluatePositive=function(e){let t=this._left.evaluate(e);if(!(t instanceof M||t instanceof m||t instanceof re||typeof t=="number"))throw new me(`Operator "+" requires a vector or number argument. Argument is ${t}.`);return t};Nt.prototype._evaluateLessThan=function(e){let t=this._left.evaluate(e),n=this._right.evaluate(e);if(typeof t!="number"||typeof n!="number")throw new me(`Operator "<" requires number arguments. Arguments are ${t} and ${n}.`);return t<n};Nt.prototype._evaluateLessThanOrEquals=function(e){let t=this._left.evaluate(e),n=this._right.evaluate(e);if(typeof t!="number"||typeof n!="number")throw new me(`Operator "<=" requires number arguments. Arguments are ${t} and ${n}.`);return t<=n};Nt.prototype._evaluateGreaterThan=function(e){let t=this._left.evaluate(e),n=this._right.evaluate(e);if(typeof t!="number"||typeof n!="number")throw new me(`Operator ">" requires number arguments. Arguments are ${t} and ${n}.`);return t>n};Nt.prototype._evaluateGreaterThanOrEquals=function(e){let t=this._left.evaluate(e),n=this._right.evaluate(e);if(typeof t!="number"||typeof n!="number")throw new me(`Operator ">=" requires number arguments. Arguments are ${t} and ${n}.`);return t>=n};Nt.prototype._evaluateOr=function(e){let t=this._left.evaluate(e);if(typeof t!="boolean")throw new me(`Operator "||" requires boolean arguments. First argument is ${t}.`);if(t)return!0;let n=this._right.evaluate(e);if(typeof n!="boolean")throw new me(`Operator "||" requires boolean arguments. Second argument is ${n}.`);return t||n};Nt.prototype._evaluateAnd=function(e){let t=this._left.evaluate(e);if(typeof t!="boolean")throw new me(`Operator "&&" requires boolean arguments. First argument is ${t}.`);if(!t)return!1;let n=this._right.evaluate(e);if(typeof n!="boolean")throw new me(`Operator "&&" requires boolean arguments. Second argument is ${n}.`);return t&&n};Nt.prototype._evaluatePlus=function(e){let t=this._left.evaluate(e),n=this._right.evaluate(e);if(n instanceof M&&t instanceof M)return M.add(t,n,Dn.getCartesian2());if(n instanceof m&&t instanceof m)return m.add(t,n,Dn.getCartesian3());if(n instanceof re&&t instanceof re)return re.add(t,n,Dn.getCartesian4());if(typeof t=="string"||typeof n=="string")return t+n;if(typeof t=="number"&&typeof n=="number")return t+n;throw new me(`Operator "+" requires vector or number arguments of matching types, or at least one string argument. Arguments are ${t} and ${n}.`)};Nt.prototype._evaluateMinus=function(e){let t=this._left.evaluate(e),n=this._right.evaluate(e);if(n instanceof M&&t instanceof M)return M.subtract(t,n,Dn.getCartesian2());if(n instanceof m&&t instanceof m)return m.subtract(t,n,Dn.getCartesian3());if(n instanceof re&&t instanceof re)return re.subtract(t,n,Dn.getCartesian4());if(typeof t=="number"&&typeof n=="number")return t-n;throw new me(`Operator "-" requires vector or number arguments of matching types. Arguments are ${t} and ${n}.`)};Nt.prototype._evaluateTimes=function(e){let t=this._left.evaluate(e),n=this._right.evaluate(e);if(n instanceof M&&t instanceof M)return M.multiplyComponents(t,n,Dn.getCartesian2());if(n instanceof M&&typeof t=="number")return M.multiplyByScalar(n,t,Dn.getCartesian2());if(t instanceof M&&typeof n=="number")return M.multiplyByScalar(t,n,Dn.getCartesian2());if(n instanceof m&&t instanceof m)return m.multiplyComponents(t,n,Dn.getCartesian3());if(n instanceof m&&typeof t=="number")return m.multiplyByScalar(n,t,Dn.getCartesian3());if(t instanceof m&&typeof n=="number")return m.multiplyByScalar(t,n,Dn.getCartesian3());if(n instanceof re&&t instanceof re)return re.multiplyComponents(t,n,Dn.getCartesian4());if(n instanceof re&&typeof t=="number")return re.multiplyByScalar(n,t,Dn.getCartesian4());if(t instanceof re&&typeof n=="number")return re.multiplyByScalar(t,n,Dn.getCartesian4());if(typeof t=="number"&&typeof n=="number")return t*n;throw new me(`Operator "*" requires vector or number arguments. If both arguments are vectors they must be matching types. Arguments are ${t} and ${n}.`)};Nt.prototype._evaluateDivide=function(e){let t=this._left.evaluate(e),n=this._right.evaluate(e);if(n instanceof M&&t instanceof M)return M.divideComponents(t,n,Dn.getCartesian2());if(t instanceof M&&typeof n=="number")return M.divideByScalar(t,n,Dn.getCartesian2());if(n instanceof m&&t instanceof m)return m.divideComponents(t,n,Dn.getCartesian3());if(t instanceof m&&typeof n=="number")return m.divideByScalar(t,n,Dn.getCartesian3());if(n instanceof re&&t instanceof re)return re.divideComponents(t,n,Dn.getCartesian4());if(t instanceof re&&typeof n=="number")return re.divideByScalar(t,n,Dn.getCartesian4());if(typeof t=="number"&&typeof n=="number")return t/n;throw new me(`Operator "/" requires vector or number arguments of matching types, or a number as the second argument. Arguments are ${t} and ${n}.`)};Nt.prototype._evaluateMod=function(e){let t=this._left.evaluate(e),n=this._right.evaluate(e);if(n instanceof M&&t instanceof M)return M.fromElements(t.x%n.x,t.y%n.y,Dn.getCartesian2());if(n instanceof m&&t instanceof m)return m.fromElements(t.x%n.x,t.y%n.y,t.z%n.z,Dn.getCartesian3());if(n instanceof re&&t instanceof re)return re.fromElements(t.x%n.x,t.y%n.y,t.z%n.z,t.w%n.w,Dn.getCartesian4());if(typeof t=="number"&&typeof n=="number")return t%n;throw new me(`Operator "%" requires vector or number arguments of matching types. Arguments are ${t} and ${n}.`)};Nt.prototype._evaluateEqualsStrict=function(e){let t=this._left.evaluate(e),n=this._right.evaluate(e);return n instanceof M&&t instanceof M||n instanceof m&&t instanceof m||n instanceof re&&t instanceof re?t.equals(n):t===n};Nt.prototype._evaluateNotEqualsStrict=function(e){let t=this._left.evaluate(e),n=this._right.evaluate(e);return n instanceof M&&t instanceof M||n instanceof m&&t instanceof m||n instanceof re&&t instanceof re?!t.equals(n):t!==n};Nt.prototype._evaluateConditional=function(e){let t=this._test.evaluate(e);if(typeof t!="boolean")throw new me(`Conditional argument of conditional expression must be a boolean. Argument is ${t}.`);return t?this._left.evaluate(e):this._right.evaluate(e)};Nt.prototype._evaluateNaN=function(e){return isNaN(this._left.evaluate(e))};Nt.prototype._evaluateIsFinite=function(e){return isFinite(this._left.evaluate(e))};Nt.prototype._evaluateIsExactClass=function(e){return l(e)?e.isExactClass(this._left.evaluate(e)):!1};Nt.prototype._evaluateIsClass=function(e){return l(e)?e.isClass(this._left.evaluate(e)):!1};Nt.prototype._evaluateGetExactClassName=function(e){if(l(e))return e.getExactClassName()};Nt.prototype._evaluateBooleanConversion=function(e){return!!this._left.evaluate(e)};Nt.prototype._evaluateNumberConversion=function(e){return Number(this._left.evaluate(e))};Nt.prototype._evaluateStringConversion=function(e){return String(this._left.evaluate(e))};Nt.prototype._evaluateRegExp=function(e){let t=this._value.evaluate(e),n="";l(this._left)&&(n=this._left.evaluate(e));let i;try{i=new RegExp(t,n)}catch(o){throw new me(o)}return i};Nt.prototype._evaluateRegExpTest=function(e){let t=this._left.evaluate(e),n=this._right.evaluate(e);if(!(t instanceof RegExp&&typeof n=="string"))throw new me(`RegExp.test requires the first argument to be a RegExp and the second argument to be a string. Arguments are ${t} and ${n}.`);return t.test(n)};Nt.prototype._evaluateRegExpMatch=function(e){let t=this._left.evaluate(e),n=this._right.evaluate(e);if(t instanceof RegExp&&typeof n=="string")return t.test(n);if(n instanceof RegExp&&typeof t=="string")return n.test(t);throw new me(`Operator "=~" requires one RegExp argument and one string argument. Arguments are ${t} and ${n}.`)};Nt.prototype._evaluateRegExpNotMatch=function(e){let t=this._left.evaluate(e),n=this._right.evaluate(e);if(t instanceof RegExp&&typeof n=="string")return!t.test(n);if(n instanceof RegExp&&typeof t=="string")return!n.test(t);throw new me(`Operator "!~" requires one RegExp argument and one string argument. Arguments are ${t} and ${n}.`)};Nt.prototype._evaluateRegExpExec=function(e){let t=this._left.evaluate(e),n=this._right.evaluate(e);if(!(t instanceof RegExp&&typeof n=="string"))throw new me(`RegExp.exec requires the first argument to be a RegExp and the second argument to be a string. Arguments are ${t} and ${n}.`);let i=t.exec(n);return l(i)?i[1]:null};Nt.prototype._evaluateToString=function(e){let t=this._left.evaluate(e);if(t instanceof RegExp||t instanceof M||t instanceof m||t instanceof re)return String(t);throw new me(`Unexpected function call "${this._value}".`)};function Ile(e){let t=e._left,n=t.length;for(let a=0;a<n;++a)if(t[a]._type!==Gt.LITERAL_NUMBER)return;let i=t[0]._value,o=t[1]._value,r=t[2]._value,s=n===4?t[3]._value:1;return U.fromHsl(i,o,r,s,mk)}function Zle(e){let t=e._left,n=t.length;for(let o=0;o<n;++o)if(t[o]._type!==Gt.LITERAL_NUMBER)return;let i=mk;return i.red=t[0]._value/255,i.green=t[1]._value/255,i.blue=t[2]._value/255,i.alpha=n===4?t[3]._value:1,i}function u0(e){return e%1===0?e.toFixed(1):e.toString()}function qUe(e){let t=u0(e.red),n=u0(e.green),i=u0(e.blue);return`vec3(${t}, ${n}, ${i})`}function uk(e){let t=u0(e.red),n=u0(e.green),i=u0(e.blue),o=u0(e.alpha);return`vec4(${t}, ${n}, ${i}, ${o})`}function Rle(e,t,n,i){let o=e.length,r=new Array(o);for(let s=0;s<o;++s)r[s]=e[s].getShaderExpression(t,n,i);return r}function Vle(e,t){return l(t[e])?t[e]:Yh.NULL_SENTINEL}Yh.NULL_SENTINEL="czm_infinity";Nt.prototype.getShaderExpression=function(e,t,n){let i,o,r,s,a=this._type,c=this._value;l(this._left)&&(Array.isArray(this._left)?o=Rle(this._left,e,t,this):o=this._left.getShaderExpression(e,t,this)),l(this._right)&&(r=this._right.getShaderExpression(e,t,this)),l(this._test)&&(s=this._test.getShaderExpression(e,t,this)),Array.isArray(this._value)&&(c=Rle(this._value,e,t,this));let d,u,h;switch(a){case Gt.VARIABLE:return rC(this)?void 0:Vle(c,e);case Gt.UNARY:if(c==="Boolean")return`bool(${o})`;if(c==="Number")return`float(${o})`;if(c==="round")return`floor(${o} + 0.5)`;if(l(hk[c]))return`${c}(${o})`;if(c==="isNaN")return`(${o} != ${o})`;if(c==="isFinite")return`(abs(${o}) < czm_infinity)`;if(c==="String"||c==="isExactClass"||c==="isClass"||c==="getExactClassName")throw new me(`Error generating style shader: "${c}" is not supported.`);return c+o;case Gt.BINARY:return c==="%"?`mod(${o}, ${r})`:c==="==="?`(${o} == ${r})`:c==="!=="?`(${o} != ${r})`:c==="atan2"?`atan(${o}, ${r})`:l(fk[c])?`${c}(${o}, ${r})`:`(${o} ${c} ${r})`;case Gt.TERNARY:if(l(NJ[c]))return`${c}(${o}, ${r}, ${s})`;break;case Gt.CONDITIONAL:return`(${s} ? ${o} : ${r})`;case Gt.MEMBER:return rC(this._left)?Vle(r,e):r==="r"||r==="x"||r==="0.0"?`${o}[0]`:r==="g"||r==="y"||r==="1.0"?`${o}[1]`:r==="b"||r==="z"||r==="2.0"?`${o}[2]`:r==="a"||r==="w"||r==="3.0"?`${o}[3]`:`${o}[int(${r})]`;case Gt.FUNCTION_CALL:throw new me(`Error generating style shader: "${c}" is not supported.`);case Gt.ARRAY:if(c.length===4)return`vec4(${c[0]}, ${c[1]}, ${c[2]}, ${c[3]})`;if(c.length===3)return`vec3(${c[0]}, ${c[1]}, ${c[2]})`;if(c.length===2)return`vec2(${c[0]}, ${c[1]})`;throw new me("Error generating style shader: Invalid array length. Array length should be 2, 3, or 4.");case Gt.REGEX:throw new me("Error generating style shader: Regular expressions are not supported.");case Gt.VARIABLE_IN_STRING:throw new me("Error generating style shader: Converting a variable to a string is not supported.");case Gt.LITERAL_NULL:return Yh.NULL_SENTINEL;case Gt.LITERAL_BOOLEAN:return c?"true":"false";case Gt.LITERAL_NUMBER:return u0(c);case Gt.LITERAL_STRING:if(l(n)&&n._type===Gt.MEMBER&&(c==="r"||c==="g"||c==="b"||c==="a"||c==="x"||c==="y"||c==="z"||c==="w"||rC(n._left)))return c;if(i=U.fromCssColorString(c,mk),l(i))return qUe(i);throw new me("Error generating style shader: String literals are not supported.");case Gt.LITERAL_COLOR:if(d=o,c==="color"){if(l(d)){if(d.length>1){let p=d[0],A=d[1];return A!=="1.0"&&(t.translucent=!0),`vec4(${p}, ${A})`}}else return"vec4(1.0)";return`vec4(${d[0]}, 1.0)`}else{if(c==="rgb")return i=Zle(this),l(i)?uk(i):`vec4(${d[0]} / 255.0, ${d[1]} / 255.0, ${d[2]} / 255.0, 1.0)`;if(c==="rgba")return d[3]!=="1.0"&&(t.translucent=!0),i=Zle(this),l(i)?uk(i):`vec4(${d[0]} / 255.0, ${d[1]} / 255.0, ${d[2]} / 255.0, ${d[3]})`;if(c==="hsl")return i=Ile(this),l(i)?uk(i):`vec4(czm_HSLToRGB(vec3(${d[0]}, ${d[1]}, ${d[2]})), 1.0)`;if(c==="hsla")return i=Ile(this),l(i)?(i.alpha!==1&&(t.translucent=!0),uk(i)):(d[3]!=="1.0"&&(t.translucent=!0),`vec4(czm_HSLToRGB(vec3(${d[0]}, ${d[1]}, ${d[2]})), ${d[3]})`)}break;case Gt.LITERAL_VECTOR:u=o.length,h=`${c}(`;for(let p=0;p<u;++p)h+=o[p],p<u-1&&(h+=", ");return h+=")",h;case Gt.LITERAL_REGEX:throw new me("Error generating style shader: Regular expressions are not supported.");case Gt.LITERAL_UNDEFINED:return Yh.NULL_SENTINEL;case Gt.BUILTIN_VARIABLE:if(c==="tiles3d_tileset_time")return c}};Nt.prototype.getVariables=function(e,t){let n,i,o,r=this._type,s=this._value;if(l(this._left))if(Array.isArray(this._left))for(n=this._left,i=n.length,o=0;o<i;++o)n[o].getVariables(e,this);else this._left.getVariables(e,this);if(l(this._right)&&this._right.getVariables(e,this),l(this._test)&&this._test.getVariables(e,this),Array.isArray(this._value))for(n=this._value,i=n.length,o=0;o<i;++o)n[o].getVariables(e,this);let a;switch(r){case Gt.VARIABLE:rC(this)||e.push(s);break;case Gt.VARIABLE_IN_STRING:for(a=SW.exec(s);a!==null;)e.push(a[1]),a=SW.exec(s);break;case Gt.LITERAL_STRING:l(t)&&t._type===Gt.MEMBER&&rC(t._left)&&e.push(s);break}};var ym=Yh;function zA(e){e=e??Q.EMPTY_OBJECT,this._batchTable=e.batchTable,this._batchIds=e.batchIds,this._positions=e.positions,this._vertexBatchIds=e.vertexBatchIds,this._indices=e.indices,this._indexCounts=e.indexCounts,this._indexOffsets=e.indexOffsets,this._batchedIndices=e.batchedIndices,this._boundingVolume=e.boundingVolume,this._boundingVolumes=e.boundingVolumes,this._center=e.center??m.ZERO,this._va=void 0,this._sp=void 0,this._spStencil=void 0,this._spPick=void 0,this._uniformMap=void 0,this._vaSwap=void 0,this._rsStencilDepthPass=void 0,this._rsStencilDepthPass3DTiles=void 0,this._rsColorPass=void 0,this._rsPickPass=void 0,this._rsWireframe=void 0,this._commands=[],this._commandsIgnoreShow=[],this._pickCommands=[],this._constantColor=U.clone(U.WHITE),this._highlightColor=this._constantColor,this._batchDirty=!0,this._pickCommandsDirty=!0,this._framesSinceLastRebatch=0,this._updatingAllCommands=!1,this._trianglesLength=this._indices.length/3,this._geometryByteLength=this._indices.byteLength+this._positions.byteLength+this._vertexBatchIds.byteLength,this.debugWireframe=!1,this._debugWireframe=this.debugWireframe,this._wireframeDirty=!1,this.forceRebatch=!1,this.classificationType=e.classificationType??ti.BOTH,this._vertexShaderSource=e._vertexShaderSource,this._fragmentShaderSource=e._fragmentShaderSource,this._attributeLocations=e._attributeLocations,this._uniformMap=e._uniformMap,this._pickId=e._pickId,this._modelMatrix=e._modelMatrix,this._boundingSphere=e._boundingSphere,this._batchIdLookUp={};let t=this._batchIds.length;for(let n=0;n<t;++n){let i=this._batchIds[n];this._batchIdLookUp[i]=n}}Object.defineProperties(zA.prototype,{trianglesLength:{get:function(){return this._trianglesLength}},geometryByteLength:{get:function(){return this._geometryByteLength}}});var $Ue={position:0,a_batchId:1};function eDe(e,t){if(l(e._va))return;let n=it.createVertexBuffer({context:t,typedArray:e._positions,usage:Be.STATIC_DRAW}),i=it.createVertexBuffer({context:t,typedArray:e._vertexBatchIds,usage:Be.STATIC_DRAW}),o=it.createIndexBuffer({context:t,typedArray:e._indices,usage:Be.DYNAMIC_DRAW,indexDatatype:e._indices.BYTES_PER_ELEMENT===2?Ue.UNSIGNED_SHORT:Ue.UNSIGNED_INT}),r=[{index:0,vertexBuffer:n,componentDatatype:H.fromTypedArray(e._positions),componentsPerAttribute:3},{index:1,vertexBuffer:i,componentDatatype:H.fromTypedArray(e._vertexBatchIds),componentsPerAttribute:1}];e._va=new kn({context:t,attributes:r,indexBuffer:o}),t.webgl2&&(e._vaSwap=new kn({context:t,attributes:r,indexBuffer:it.createIndexBuffer({context:t,sizeInBytes:o.sizeInBytes,usage:Be.DYNAMIC_DRAW,indexDatatype:o.indexDatatype})})),e._batchedPositions=void 0,e._transferrableBatchIds=void 0,e._vertexBatchIds=void 0}function tDe(e,t){if(l(e._sp))return;let n=e._batchTable,i=e._attributeLocations??$Ue,o=e._pickId,r=e._vertexShaderSource,s=e._fragmentShaderSource;if(l(r)){e._sp=tn.fromCache({context:t,vertexShaderSource:r,fragmentShaderSource:s,attributeLocations:i}),e._spStencil=e._sp,s=ze.replaceMain(s,"czm_non_pick_main"),s=`${s}void main()
{
czm_non_pick_main();
out_FragColor = ${o};
}
`,e._spPick=tn.fromCache({context:t,vertexShaderSource:r,fragmentShaderSource:s,attributeLocations:i});return}let a=n.getVertexShaderCallback(!1,"a_batchId",void 0)(NS),c=n.getFragmentShaderCallback(!1,void 0,!0)(i0);o=n.getPickId();let d=new ze({sources:[a]}),u=new ze({defines:["VECTOR_TILE"],sources:[c]});e._sp=tn.fromCache({context:t,vertexShaderSource:d,fragmentShaderSource:u,attributeLocations:i}),d=new ze({sources:[NS]}),u=new ze({defines:["VECTOR_TILE"],sources:[i0]}),e._spStencil=tn.fromCache({context:t,vertexShaderSource:d,fragmentShaderSource:u,attributeLocations:i}),c=ze.replaceMain(c,"czm_non_pick_main"),c=`${c}
void main()
{
czm_non_pick_main();
out_FragColor = ${o};
}
`;let h=new ze({sources:[a]}),p=new ze({defines:["VECTOR_TILE"],sources:[c]});e._spPick=tn.fromCache({context:t,vertexShaderSource:h,fragmentShaderSource:p,attributeLocations:i})}function Gle(e){let t=e?ni.EQUAL:ni.ALWAYS;return{colorMask:{red:!1,green:!1,blue:!1,alpha:!1},stencilTest:{enabled:!0,frontFunction:t,frontOperation:{fail:Vt.KEEP,zFail:Vt.DECREMENT_WRAP,zPass:Vt.KEEP},backFunction:t,backOperation:{fail:Vt.KEEP,zFail:Vt.INCREMENT_WRAP,zPass:Vt.KEEP},reference:Jt.CESIUM_3D_TILE_MASK,mask:Jt.CESIUM_3D_TILE_MASK},stencilMask:Jt.CLASSIFICATION_MASK,depthTest:{enabled:!0,func:ec.LESS_OR_EQUAL},depthMask:!1}}var nDe={stencilTest:{enabled:!0,frontFunction:ni.NOT_EQUAL,frontOperation:{fail:Vt.ZERO,zFail:Vt.ZERO,zPass:Vt.ZERO},backFunction:ni.NOT_EQUAL,backOperation:{fail:Vt.ZERO,zFail:Vt.ZERO,zPass:Vt.ZERO},reference:0,mask:Jt.CLASSIFICATION_MASK},stencilMask:Jt.CLASSIFICATION_MASK,depthTest:{enabled:!1},depthMask:!1,blending:ln.PRE_MULTIPLIED_ALPHA_BLEND},iDe={stencilTest:{enabled:!0,frontFunction:ni.NOT_EQUAL,frontOperation:{fail:Vt.ZERO,zFail:Vt.ZERO,zPass:Vt.ZERO},backFunction:ni.NOT_EQUAL,backOperation:{fail:Vt.ZERO,zFail:Vt.ZERO,zPass:Vt.ZERO},reference:0,mask:Jt.CLASSIFICATION_MASK},stencilMask:Jt.CLASSIFICATION_MASK,depthTest:{enabled:!1},depthMask:!1};function oDe(e){l(e._rsStencilDepthPass)||(e._rsStencilDepthPass=Qe.fromCache(Gle(!1)),e._rsStencilDepthPass3DTiles=Qe.fromCache(Gle(!0)),e._rsColorPass=Qe.fromCache(nDe),e._rsPickPass=Qe.fromCache(iDe))}var sC=new F,Lle=new m;function rDe(e,t){if(l(e._uniformMap))return;let n={u_modifiedModelViewProjection:function(){let i=t.uniformState.view,o=t.uniformState.projection;return F.clone(i,sC),F.multiplyByPoint(sC,e._center,Lle),F.setTranslation(sC,Lle,sC),F.multiply(o,sC,sC),sC},u_highlightColor:function(){return e._highlightColor}};e._uniformMap=e._batchTable.getUniformMapCallback()(n)}function PJ(e,t,n,i,o,r,s){let a=e.constructor.BYTES_PER_ELEMENT,c=r.length;for(let d=0;d<c;++d){let u=r[d],h=s[u],p=i[h],A=o[h],f=new e.constructor(e.buffer,a*p,A);t.set(f,n),i[h]=n,n+=A}return n}function sDe(e,t){let n=e._indices,i=e._indexOffsets,o=e._indexCounts,r=e._batchIdLookUp,s=new n.constructor(n.length),a=t.pop(),c=[a],d=PJ(n,s,0,i,o,a.batchIds,r);for(a.offset=0,a.count=d;t.length>0;){let u=t.pop();if(U.equals(u.color,a.color))d=PJ(n,s,d,i,o,u.batchIds,r),a.batchIds=a.batchIds.concat(u.batchIds),a.count=d-a.offset;else{let h=d;d=PJ(n,s,d,i,o,u.batchIds,r),u.offset=h,u.count=d-h,c.push(u),a=u}}e._va.indexBuffer.copyFromArrayView(s),e._indices=s,e._batchedIndices=c}function XJ(e,t,n,i,o,r,s){let a=e.bytesPerIndex,c=r.length;for(let d=0;d<c;++d){let u=r[d],h=s[u],p=i[h],A=o[h];t.copyFromBuffer(e,p*a,n*a,A*a),i[h]=n,n+=A}return n}function aDe(e,t){let n=e._indexOffsets,i=e._indexCounts,o=e._batchIdLookUp,r=t.pop(),s=[r],a=e._va.indexBuffer,c=e._vaSwap.indexBuffer,d=XJ(a,c,0,n,i,r.batchIds,o);for(r.offset=0,r.count=d;t.length>0;){let h=t.pop();if(U.equals(h.color,r.color))d=XJ(a,c,d,n,i,h.batchIds,o),r.batchIds=r.batchIds.concat(h.batchIds),r.count=d-r.offset;else{let p=d;d=XJ(a,c,d,n,i,h.batchIds,o),h.offset=p,h.count=d-p,s.push(h),r=h}}let u=e._va;e._va=e._vaSwap,e._vaSwap=u,e._batchedIndices=s}function cDe(e,t){return t.color.toRgba()-e.color.toRgba()}function lDe(e,t){if(!e._batchDirty)return!1;let n=e._batchedIndices,i=n.length,o=!1,r={};for(let s=0;s<i;++s){let c=n[s].color.toRgba();if(l(r[c])){o=!0;break}else r[c]=!0}if(!o)return e._batchDirty=!1,!1;if(o&&!e.forceRebatch&&e._framesSinceLastRebatch<120){++e._framesSinceLastRebatch;return}return n.sort(cDe),t.webgl2?aDe(e,n):sDe(e,n),e._framesSinceLastRebatch=0,e._batchDirty=!1,e._pickCommandsDirty=!0,e._wireframeDirty=!0,!0}function dDe(e,t){let n=lDe(e,t),i=e._commands,o=e._batchedIndices,r=o.length,s=r*2;if(l(i)&&!n&&i.length===s)return;i.length=s;let a=e._va,c=e._sp,d=e._modelMatrix??F.IDENTITY,u=e._uniformMap,h=e._boundingVolume;for(let p=0;p<r;++p){let A=o[p].offset,f=o[p].count,b=i[p*2];l(b)||(b=i[p*2]=new ot({owner:e})),b.vertexArray=a,b.modelMatrix=d,b.offset=A,b.count=f,b.renderState=e._rsStencilDepthPass,b.shaderProgram=c,b.uniformMap=u,b.boundingVolume=h,b.cull=!1,b.pass=Ge.TERRAIN_CLASSIFICATION;let C=ot.shallowClone(b,b.derivedCommands.tileset);C.renderState=e._rsStencilDepthPass3DTiles,C.pass=Ge.CESIUM_3D_TILE_CLASSIFICATION,b.derivedCommands.tileset=C;let T=i[p*2+1];l(T)||(T=i[p*2+1]=new ot({owner:e})),T.vertexArray=a,T.modelMatrix=d,T.offset=A,T.count=f,T.renderState=e._rsColorPass,T.shaderProgram=c,T.uniformMap=u,T.boundingVolume=h,T.cull=!1,T.pass=Ge.TERRAIN_CLASSIFICATION;let E=ot.shallowClone(T,T.derivedCommands.tileset);E.pass=Ge.CESIUM_3D_TILE_CLASSIFICATION,T.derivedCommands.tileset=E}e._commandsDirty=!0}function uDe(e,t){if(e.classificationType===ti.TERRAIN||!t.invertClassification||l(e._commandsIgnoreShow)&&!e._commandsDirty)return;let n=e._commands,i=e._commandsIgnoreShow,o=e._spStencil,r=n.length,s=i.length=r/2,a=0;for(let c=0;c<s;++c){let d=i[c]=ot.shallowClone(n[a],i[c]);d.shaderProgram=o,d.pass=Ge.CESIUM_3D_TILE_CLASSIFICATION_IGNORE_SHOW,a+=2}e._commandsDirty=!1}function mDe(e){if(!e._pickCommandsDirty)return;let t=e._indexOffsets.length,n=e._pickCommands;n.length=t*2;let i=e._va,o=e._spStencil,r=e._spPick,s=e._modelMatrix??F.IDENTITY,a=e._uniformMap;for(let c=0;c<t;++c){let d=e._indexOffsets[c],u=e._indexCounts[c],h=l(e._boundingVolumes)?e._boundingVolumes[c]:e.boundingVolume,p=n[c*2];l(p)||(p=n[c*2]=new ot({owner:e,pickOnly:!0})),p.vertexArray=i,p.modelMatrix=s,p.offset=d,p.count=u,p.renderState=e._rsStencilDepthPass,p.shaderProgram=o,p.uniformMap=a,p.boundingVolume=h,p.pass=Ge.TERRAIN_CLASSIFICATION;let A=ot.shallowClone(p,p.derivedCommands.tileset);A.renderState=e._rsStencilDepthPass3DTiles,A.pass=Ge.CESIUM_3D_TILE_CLASSIFICATION,p.derivedCommands.tileset=A;let f=n[c*2+1];l(f)||(f=n[c*2+1]=new ot({owner:e,pickOnly:!0})),f.vertexArray=i,f.modelMatrix=s,f.offset=d,f.count=u,f.renderState=e._rsPickPass,f.shaderProgram=r,f.uniformMap=a,f.boundingVolume=h,f.pass=Ge.TERRAIN_CLASSIFICATION;let b=ot.shallowClone(f,f.derivedCommands.tileset);b.pass=Ge.CESIUM_3D_TILE_CLASSIFICATION,f.derivedCommands.tileset=b}e._pickCommandsDirty=!1}zA.prototype.createFeatures=function(e,t){let n=this._batchIds,i=n.length;for(let o=0;o<i;++o){let r=n[o];t[r]=new Ga(e,r)}};zA.prototype.applyDebugSettings=function(e,t){this._highlightColor=e?t:this._constantColor};function hDe(e,t){e._updatingAllCommands=!0;let n=e._batchIds,i=n.length,o;for(o=0;o<i;++o){let s=n[o],a=t[s];a.show=!0,a.color=U.WHITE}let r=e._batchedIndices;for(i=r.length,o=0;o<i;++o)r[o].color=U.clone(U.WHITE);e._updatingAllCommands=!1,e._batchDirty=!0}var fDe=new U,pDe=U.WHITE,ADe=!0,gDe=/\$/;zA.prototype.applyStyle=function(e,t){if(!l(e)){hDe(this,t);return}let n=e.color,i=n instanceof ym&&!gDe.test(n.expression);this._updatingAllCommands=i;let o=this._batchIds,r=o.length,s;for(s=0;s<r;++s){let a=o[s],c=t[a];c.color=l(e.color)?e.color.evaluateColor(c,fDe):pDe,c.show=l(e.show)?e.show.evaluate(c):ADe}if(i){let a=this._batchedIndices;for(r=a.length,s=0;s<r;++s)a[s].color=U.clone(U.WHITE);this._updatingAllCommands=!1,this._batchDirty=!0}};zA.prototype.updateCommands=function(e,t){if(this._updatingAllCommands)return;let n=this._batchIdLookUp,i=n[e];if(!l(i))return;let o=this._indexOffsets,r=this._indexCounts,s=o[i],a=r[i],c=this._batchedIndices,d=c.length,u;for(u=0;u<d;++u){let b=c[u].offset,C=c[u].count;if(s>=b&&s<b+C)break}c.push(new dp({color:U.clone(t),offset:s,count:a,batchIds:[e]}));let h=[],p=[],A=c[u].batchIds,f=A.length;for(let b=0;b<f;++b){let C=A[b];if(C===e)continue;let T=n[C];o[T]<s?h.push(C):p.push(C)}p.length!==0&&c.push(new dp({color:U.clone(c[u].color),offset:s+a,count:c[u].offset+c[u].count-(s+a),batchIds:p})),h.length!==0?(c[u].count=s-c[u].offset,c[u].batchIds=h):c.splice(u,1),this._batchDirty=!0};function Wle(e,t,n,i){let o=e.classificationType,r=o!==ti.CESIUM_3D_TILE,s=o!==ti.TERRAIN,a=t.commandList,c=n.length,d,u;for(u=0;u<c;++u)r&&(d=n[u],d.pass=Ge.TERRAIN_CLASSIFICATION,a.push(d)),s&&(d=n[u].derivedCommands.tileset,d.pass=Ge.CESIUM_3D_TILE_CLASSIFICATION,a.push(d));if(!(!t.invertClassification||!l(i)))for(c=i.length,u=0;u<c;++u)a.push(i[u])}function bDe(e,t){let n=e.commandList,i=t.length;for(let o=0;o<i;o+=2){let r=t[o+1];r.pass=Ge.OPAQUE,n.push(r)}}function yDe(e){let t=e.debugWireframe===e._debugWireframe;if(t=t&&!(e.debugWireframe&&e._wireframeDirty),t)return;l(e._rsWireframe)||(e._rsWireframe=Qe.fromCache({}));let n,i;e.debugWireframe?(n=e._rsWireframe,i=We.LINES):(n=e._rsColorPass,i=We.TRIANGLES);let o=e._commands,r=o.length;for(let s=0;s<r;s+=2){let a=o[s+1];a.renderState=n,a.primitiveType=i}e._debugWireframe=e.debugWireframe,e._wireframeDirty=!1}zA.prototype.update=function(e){let t=e.context;eDe(this,t),tDe(this,t),oDe(this),rDe(this,t);let n=e.passes;n.render&&(dDe(this,t),uDe(this,e),yDe(this),this._debugWireframe?bDe(e,this._commands):Wle(this,e,this._commands,this._commandsIgnoreShow)),n.pick&&(mDe(this),Wle(this,e,this._pickCommands))};zA.prototype.isDestroyed=function(){return!1};zA.prototype.destroy=function(){return this._va=this._va&&this._va.destroy(),this._sp=this._sp&&this._sp.destroy(),this._spPick=this._spPick&&this._spPick.destroy(),this._vaSwap=this._vaSwap&&this._vaSwap.destroy(),he(this)};var aC=zA;function lu(e){this._boxes=e.boxes,this._boxBatchIds=e.boxBatchIds,this._cylinders=e.cylinders,this._cylinderBatchIds=e.cylinderBatchIds,this._ellipsoids=e.ellipsoids,this._ellipsoidBatchIds=e.ellipsoidBatchIds,this._spheres=e.spheres,this._sphereBatchIds=e.sphereBatchIds,this._modelMatrix=e.modelMatrix,this._batchTable=e.batchTable,this._boundingVolume=e.boundingVolume,this._center=e.center,l(this._center)||(l(this._boundingVolume)?this._center=m.clone(this._boundingVolume.center):this._center=m.clone(m.ZERO)),this._boundingVolumes=void 0,this._batchedIndices=void 0,this._indices=void 0,this._indexOffsets=void 0,this._indexCounts=void 0,this._positions=void 0,this._vertexBatchIds=void 0,this._batchIds=void 0,this._batchTableColors=void 0,this._packedBuffer=void 0,this._ready=!1,this._promise=void 0,this._error=void 0,this._verticesPromise=void 0,this._primitive=void 0,this.debugWireframe=!1,this.forceRebatch=!1,this.classificationType=ti.BOTH}Object.defineProperties(lu.prototype,{trianglesLength:{get:function(){return l(this._primitive)?this._primitive.trianglesLength:0}},geometryByteLength:{get:function(){return l(this._primitive)?this._primitive.geometryByteLength:0}},ready:{get:function(){return this._ready}}});lu.packedBoxLength=F.packedLength+m.packedLength;lu.packedCylinderLength=F.packedLength+2;lu.packedEllipsoidLength=F.packedLength+m.packedLength;lu.packedSphereLength=m.packedLength+1;function xDe(e){let t=new Float64Array(F.packedLength+m.packedLength),n=0;return m.pack(e._center,t,n),n+=m.packedLength,F.pack(e._modelMatrix,t,n),t}function CDe(e,t){let n=0,i=t[n++],o=t[n++],r=e._boundingVolumes=new Array(o);for(let c=0;c<o;++c)r[c]=ue.unpack(t,n),n+=ue.packedLength;let s=t[n++],a=e._batchedIndices=new Array(s);for(let c=0;c<s;++c){let d=U.unpack(t,n);n+=U.packedLength;let u=t[n++],h=t[n++],p=t[n++],A=new Array(p);for(let f=0;f<p;++f)A[f]=t[n++];a[c]=new dp({color:d,offset:u,count:h,batchIds:A})}return i}var TDe=new $n("createVectorTileGeometries",5),EDe=new U;function SDe(e){if(!l(e._primitive)&&!l(e._verticesPromise)){let t=e._boxes,n=e._boxBatchIds,i=e._cylinders,o=e._cylinderBatchIds,r=e._ellipsoids,s=e._ellipsoidBatchIds,a=e._spheres,c=e._sphereBatchIds,d=e._batchTableColors,u=e._packedBuffer;if(!l(d)){let f=0;l(e._boxes)&&(t=e._boxes=t.slice(),n=e._boxBatchIds=n.slice(),f+=n.length),l(e._cylinders)&&(i=e._cylinders=i.slice(),o=e._cylinderBatchIds=o.slice(),f+=o.length),l(e._ellipsoids)&&(r=e._ellipsoids=r.slice(),s=e._ellipsoidBatchIds=s.slice(),f+=s.length),l(e._spheres)&&(a=e._sphere=a.slice(),c=e._sphereBatchIds=c.slice(),f+=c.length),d=e._batchTableColors=new Uint32Array(f);let b=e._batchTable;for(let C=0;C<f;++C){let T=b.getColor(C,EDe);d[C]=T.toRgba()}u=e._packedBuffer=xDe(e)}let h=[];l(t)&&h.push(t.buffer,n.buffer),l(i)&&h.push(i.buffer,o.buffer),l(r)&&h.push(r.buffer,s.buffer),l(a)&&h.push(a.buffer,c.buffer),h.push(d.buffer,u.buffer);let p={boxes:l(t)?t.buffer:void 0,boxBatchIds:l(t)?n.buffer:void 0,cylinders:l(i)?i.buffer:void 0,cylinderBatchIds:l(i)?o.buffer:void 0,ellipsoids:l(r)?r.buffer:void 0,ellipsoidBatchIds:l(r)?s.buffer:void 0,spheres:l(a)?a.buffer:void 0,sphereBatchIds:l(a)?c.buffer:void 0,batchTableColors:d.buffer,packedBuffer:u.buffer},A=e._verticesPromise=TDe.scheduleTask(p,h);return l(A)?A.then(function(f){if(e.isDestroyed())return;let b=new Float64Array(f.packedBuffer);CDe(e,b)===2?e._indices=new Uint16Array(f.indices):e._indices=new Uint32Array(f.indices),e._indexOffsets=new Uint32Array(f.indexOffsets),e._indexCounts=new Uint32Array(f.indexCounts),e._positions=new Float32Array(f.positions),e._vertexBatchIds=new Uint16Array(f.vertexBatchIds),e._batchIds=new Uint16Array(f.batchIds),_De(e),e._ready=!0}).catch(f=>{e.isDestroyed()||(e._error=f)}):void 0}}function _De(e){l(e._primitive)||(e._primitive=new aC({batchTable:e._batchTable,positions:e._positions,batchIds:e._batchIds,vertexBatchIds:e._vertexBatchIds,indices:e._indices,indexOffsets:e._indexOffsets,indexCounts:e._indexCounts,batchedIndices:e._batchedIndices,boundingVolume:e._boundingVolume,boundingVolumes:e._boundingVolumes,center:e._center,pickObject:e._pickObject??e}),e._boxes=void 0,e._boxBatchIds=void 0,e._cylinders=void 0,e._cylinderBatchIds=void 0,e._ellipsoids=void 0,e._ellipsoidBatchIds=void 0,e._spheres=void 0,e._sphereBatchIds=void 0,e._center=void 0,e._modelMatrix=void 0,e._batchTable=void 0,e._boundingVolume=void 0,e._boundingVolumes=void 0,e._batchedIndices=void 0,e._indices=void 0,e._indexOffsets=void 0,e._indexCounts=void 0,e._positions=void 0,e._vertexBatchIds=void 0,e._batchIds=void 0,e._batchTableColors=void 0,e._packedBuffer=void 0,e._verticesPromise=void 0)}lu.prototype.createFeatures=function(e,t){this._primitive.createFeatures(e,t)};lu.prototype.applyDebugSettings=function(e,t){this._primitive.applyDebugSettings(e,t)};lu.prototype.applyStyle=function(e,t){this._primitive.applyStyle(e,t)};lu.prototype.updateCommands=function(e,t){this._primitive.updateCommands(e,t)};lu.prototype.update=function(e){if(!this._ready){if(l(this._promise)||(this._promise=SDe(this)),l(this._error)){let t=this._error;throw this._error=void 0,t}return}this._primitive.debugWireframe=this.debugWireframe,this._primitive.forceRebatch=this.forceRebatch,this._primitive.classificationType=this.classificationType,this._primitive.update(e)};lu.prototype.isDestroyed=function(){return!1};lu.prototype.destroy=function(){return this._primitive=this._primitive&&this._primitive.destroy(),he(this)};var HA=lu;function up(e,t,n,i,o){this._tileset=e,this._tile=t,this._resource=n,this._geometries=void 0,this._metadata=void 0,this._batchTable=void 0,this._features=void 0,this.featurePropertiesDirty=!1,this._group=void 0,this._ready=!1,RDe(this,i,o)}Object.defineProperties(up.prototype,{featuresLength:{get:function(){return l(this._batchTable)?this._batchTable.featuresLength:0}},pointsLength:{get:function(){return 0}},trianglesLength:{get:function(){return l(this._geometries)?this._geometries.trianglesLength:0}},geometryByteLength:{get:function(){return l(this._geometries)?this._geometries.geometryByteLength:0}},texturesByteLength:{get:function(){return 0}},batchTableByteLength:{get:function(){return l(this._batchTable)?this._batchTable.batchTableByteLength:0}},innerContents:{get:function(){}},ready:{get:function(){return this._ready}},tileset:{get:function(){return this._tileset}},tile:{get:function(){return this._tile}},url:{get:function(){return this._resource.getUrlComponent(!0)}},metadata:{get:function(){return this._metadata},set:function(e){this._metadata=e}},batchTable:{get:function(){return this._batchTable}},group:{get:function(){return this._group},set:function(e){this._group=e}}});function IDe(e){return function(t,n){l(e._geometries)&&e._geometries.updateCommands(t,n)}}function ZDe(e,t){let n,i,o,r,s,a=e.BOXES_LENGTH??0,c=e.CYLINDERS_LENGTH??0,d=e.ELLIPSOIDS_LENGTH??0,u=e.SPHERES_LENGTH??0;if(a>0&&l(e.BOX_BATCH_IDS)){let f=t.byteOffset+e.BOX_BATCH_IDS.byteOffset;n=new Uint16Array(t.buffer,f,a)}if(c>0&&l(e.CYLINDER_BATCH_IDS)){let f=t.byteOffset+e.CYLINDER_BATCH_IDS.byteOffset;i=new Uint16Array(t.buffer,f,c)}if(d>0&&l(e.ELLIPSOID_BATCH_IDS)){let f=t.byteOffset+e.ELLIPSOID_BATCH_IDS.byteOffset;o=new Uint16Array(t.buffer,f,d)}if(u>0&&l(e.SPHERE_BATCH_IDS)){let f=t.byteOffset+e.SPHERE_BATCH_IDS.byteOffset;r=new Uint16Array(t.buffer,f,u)}let h=l(n)||l(i)||l(o)||l(r),p=a>0&&!l(n)||c>0&&!l(i)||d>0&&!l(o)||u>0&&!l(r);if(h&&p)throw new me("If one group of batch ids is defined, then all batch ids must be defined");if(!l(n)&&!l(i)&&!l(o)&&!l(r)){let f=0;if(!l(n)&&a>0)for(n=new Uint16Array(a),s=0;s<a;++s)n[s]=f++;if(!l(i)&&c>0)for(i=new Uint16Array(c),s=0;s<c;++s)i[s]=f++;if(!l(o)&&d>0)for(o=new Uint16Array(d),s=0;s<d;++s)o[s]=f++;if(!l(r)&&u>0)for(r=new Uint16Array(u),s=0;s<u;++s)r[s]=f++}return{boxes:n,cylinders:i,ellipsoids:o,spheres:r}}var cC=Uint32Array.BYTES_PER_ELEMENT;function RDe(e,t,n){n=n??0;let i=new Uint8Array(t),o=new DataView(t);n+=cC;let r=o.getUint32(n,!0);if(r!==1)throw new me(`Only Geometry tile version 1 is supported. Version ${r} is not.`);n+=cC;let s=o.getUint32(n,!0);if(n+=cC,s===0){e._ready=!0;return}let a=o.getUint32(n,!0);if(n+=cC,a===0)throw new me("Feature table must have a byte length greater than zero");let c=o.getUint32(n,!0);n+=cC;let d=o.getUint32(n,!0);n+=cC;let u=o.getUint32(n,!0);n+=cC;let h=Zr(i,n,a);n+=a;let p=new Uint8Array(t,n,c);n+=c;let A,f;d>0&&(A=Zr(i,n,d),n+=d,u>0&&(f=new Uint8Array(t,n,u),f=new Uint8Array(f)));let b=h.BOXES_LENGTH??0,C=h.CYLINDERS_LENGTH??0,T=h.ELLIPSOIDS_LENGTH??0,E=h.SPHERES_LENGTH??0,S=b+C+T+E,I=new Xh(e,S,A,f,IDe(e));if(e._batchTable=I,S===0)return;let R=e.tile.computedTransform,V;l(h.RTC_CENTER)&&(V=m.unpack(h.RTC_CENTER),F.multiplyByPoint(R,V,V));let W=ZDe(h,p);if(b>0||C>0||T>0||E>0){let B,N,P,g;if(b>0){let _=p.byteOffset+h.BOXES.byteOffset;B=new Float32Array(p.buffer,_,HA.packedBoxLength*b)}if(C>0){let _=p.byteOffset+h.CYLINDERS.byteOffset;N=new Float32Array(p.buffer,_,HA.packedCylinderLength*C)}if(T>0){let _=p.byteOffset+h.ELLIPSOIDS.byteOffset;P=new Float32Array(p.buffer,_,HA.packedEllipsoidLength*T)}if(E>0){let _=p.byteOffset+h.SPHERES.byteOffset;g=new Float32Array(p.buffer,_,HA.packedSphereLength*E)}return e._geometries=new HA({boxes:B,boxBatchIds:W.boxes,cylinders:N,cylinderBatchIds:W.cylinders,ellipsoids:P,ellipsoidBatchIds:W.ellipsoids,spheres:g,sphereBatchIds:W.spheres,center:V,modelMatrix:R,batchTable:I,boundingVolume:e.tile.boundingVolume.boundingVolume}),e}return Promise.resolve(e)}function Fle(e){let t=e.featuresLength;if(!l(e._features)&&t>0){let n=new Array(t);l(e._geometries)&&e._geometries.createFeatures(e,n),e._features=n}}up.prototype.hasProperty=function(e,t){return this._batchTable.hasProperty(e,t)};up.prototype.getFeature=function(e){return Fle(this),this._features[e]};up.prototype.applyDebugSettings=function(e,t){l(this._geometries)&&this._geometries.applyDebugSettings(e,t)};up.prototype.applyStyle=function(e){Fle(this),l(this._geometries)&&this._geometries.applyStyle(e,this._features)};up.prototype.update=function(e,t){l(this._geometries)&&(this._geometries.classificationType=this._tileset.classificationType,this._geometries.debugWireframe=this._tileset.debugWireframe,this._geometries.update(t)),l(this._batchTable)&&this._geometries.ready&&(this._batchTable.update(e,t),this._ready=!0)};up.prototype.pick=function(e,t,n){};up.prototype.isDestroyed=function(){return!1};up.prototype.destroy=function(){return this._geometries=this._geometries&&this._geometries.destroy(),this._batchTable=this._batchTable&&this._batchTable.destroy(),he(this)};var _W=up;var QSn=y(x(),1);var tgn=y(x(),1);var YJ={};YJ.encode2D=function(e,t,n){let i=Math.pow(2,e),o={x:t,y:n},r,s,a,c=BigInt(0);for(a=i/2;a>0;a/=2)r=(o.x&a)>0?1:0,s=(o.y&a)>0?1:0,c+=BigInt((3*r^s)*a*a),Ble(i,o,r,s);return c};YJ.decode2D=function(e,t){let n=Math.pow(2,e),i={x:0,y:0},o,r,s,a;for(s=1,a=t;s<n;s*=2)o=1&Number(a/BigInt(2)),r=1&Number(a^BigInt(o)),Ble(s,i,o,r),i.x+=s*o,i.y+=s*r,a/=BigInt(4);return[i.x,i.y]};function Ble(e,t,n,i){if(i!==0)return;n===1&&(t.x=e-1-t.x,t.y=e-1-t.y);let o=t.x;t.x=t.y,t.y=o}var PS=YJ;var cgn=y(x(),1);var lC=30,VDe=1<<lC,GDe=1<<lC+1>>>0,MJ=2*lC+1,m0=4,Ple=[],Xle=[],LDe=[[0,1,3,2],[0,2,3,1],[3,2,0,1],[3,1,0,2]],h0=1,XS=2,Ak=[h0,0,0,h0|XS];function Gs(e){if(!hn.supportsBigInt())throw new me("S2 required BigInt support");this._cellId=e,this._level=Gs.getLevel(e)}Gs.fromToken=function(e){return new Gs(Gs.getIdFromToken(e))};Gs.isValidId=function(e){return!(e<=0||e>>BigInt(MJ)>5||!(e&~e+BigInt(1)&BigInt("0x1555555555555555")))};Gs.isValidToken=function(e){return/^[0-9a-fA-F]{1,16}$/.test(e)?Gs.isValidId(Gs.getIdFromToken(e)):!1};Gs.getIdFromToken=function(e){return BigInt("0x"+e+"0".repeat(16-e.length))};Gs.getTokenFromId=function(e){let t=Math.floor(vDe(e)/4),n=e.toString(16).replace(/0*$/,"");return Array(17-t-n.length).join("0")+n};Gs.getLevel=function(e){let t=0;for(;e!==BigInt(0)&&!(e&BigInt(1));)t++,e=e>>BigInt(1);return lC-(t>>1)};Gs.prototype.getChild=function(e){let t=vle(this._cellId)>>BigInt(2),n=this._cellId+BigInt(2*e+1-4)*t;return new Gs(n)};Gs.prototype.getParent=function(){let e=vle(this._cellId)<<BigInt(2);return new Gs(this._cellId&~e+BigInt(1)|e)};Gs.prototype.getParentAtLevel=function(e){let t=YDe(e);return new Gs(this._cellId&-t|t)};Gs.prototype.getCenter=function(e){e=e??ie.WGS84;let t=WDe(this._cellId,this._level);t=m.normalize(t,t);let n=Ae.fromCartesian(t,ie.UNIT_SPHERE);return Ae.toCartesian(n,e,new m)};Gs.prototype.getVertex=function(e,t){t=t??ie.WGS84;let n=FDe(this._cellId,this._level,e);n=m.normalize(n,n);let i=Ae.fromCartesian(n,ie.UNIT_SPHERE);return Ae.toCartesian(i,t,new m)};Gs.fromFacePositionLevel=function(e,t,n){let i=(e<4?"0":"")+(e<2?"0":"")+e.toString(2),o=t.toString(2),r=Array(2*n-o.length+1).join("0"),s=Array(MJ-2*n).join("0"),a=BigInt(`0b${i}${r}${o}1${s}`);return new Gs(a)};function WDe(e,t){let n=BDe(e,t);return wDe(n[0],n[1],n[2])}function FDe(e,t,n){let i=Yle(e,t),o=NDe([i[1],i[2]],t),r=n>>1&1;return Mle(i[0],o[0][r^n&1],o[1][r])}function BDe(e,t){let n=Yle(e),i=n[0],o=n[1],r=n[2],s=t===30,a=!s&&(BigInt(o)^e>>BigInt(2))&BigInt(1),c=s?1:a?2:0,d=(o<<1)+c,u=(r<<1)+c;return[i,d,u]}function Yle(e){Ple.length===0&&XDe();let t=Number(e>>BigInt(MJ)),n=t&h0,i=(1<<m0)-1,o=0,r=0;for(let s=7;s>=0;s--){let c=(1<<2*(s===7?lC-7*m0:m0))-1;n+=Number(e>>BigInt(s*2*m0+1)&BigInt(c))<<2,n=Xle[n];let d=s*m0;o+=n>>m0+2<<d,r+=(n>>2&i)<<d,n&=h0|XS}return[t,o,r]}function wDe(e,t,n){let i=wle(t),o=wle(n),r=gk(i),s=gk(o);return Mle(e,r,s)}function Mle(e,t,n){switch(e){case 0:return new m(1,t,n);case 1:return new m(-t,1,n);case 2:return new m(-t,-n,1);case 3:return new m(-1,-n,-t);case 4:return new m(n,-1,-t);default:return new m(n,t,-1)}}function gk(e){return e>=.5?1/3*(4*e*e-1):1/3*(1-4*(1-e)*(1-e))}function wle(e){return 1/GDe*e}function NDe(e,t){let n=[[],[]],i=PDe(t);for(let o=0;o<2;++o){let r=e[o]&-i,s=r+i;n[o][0]=gk(Nle(r)),n[o][1]=gk(Nle(s))}return n}function PDe(e){return 1<<lC-e>>>0}function Nle(e){return 1/VDe*e}function f0(e,t,n,i,o,r){if(e===m0){let s=(t<<m0)+n;Ple[(s<<2)+i]=(o<<2)+r,Xle[(o<<2)+i]=(s<<2)+r}else{e++,t<<=1,n<<=1,o<<=2;let s=LDe[r];f0(e,t+(s[0]>>1),n+(s[0]&1),i,o,r^Ak[0]),f0(e,t+(s[1]>>1),n+(s[1]&1),i,o+1,r^Ak[1]),f0(e,t+(s[2]>>1),n+(s[2]&1),i,o+2,r^Ak[2]),f0(e,t+(s[3]>>1),n+(s[3]&1),i,o+3,r^Ak[3])}}function XDe(){f0(0,0,0,0,0,0),f0(0,0,0,h0,0,h0),f0(0,0,0,XS,0,XS),f0(0,0,0,h0|XS,0,h0|XS)}function vle(e){return e&~e+BigInt(1)}function YDe(e){return BigInt(1)<<BigInt(2*(lC-e))}var MDe=[64,0,1,39,2,15,40,23,3,12,16,59,41,19,24,54,4,64,13,10,17,62,60,28,42,30,20,51,25,44,55,47,5,32,65,38,14,22,11,58,18,53,63,9,61,27,29,50,43,46,31,37,21,57,52,8,26,49,45,36,56,7,48,35,6,34,33,0];function vDe(e){return MDe[(-e&e)%BigInt(67)]}var JA=Gs;var SSn=y(x(),1);var ugn=y(x(),1);function UDe(e,t){return l(e)&&l(e.extensions)&&l(e.extensions[t])}var _i=UDe;var pgn=y(x(),1);function vJ(e){let t=e.lengthBits,n=e.availableCount,i=e.constant,o=e.bitstream;if(l(i))n=t;else{let r=Math.ceil(t/8);if(o.length!==r)throw new me(`Availability bitstream must be exactly ${r} bytes long to store ${t} bits. Actual bitstream was ${o.length} bytes long.`);let s=e.computeAvailableCountEnabled??!1;!l(n)&&s&&(n=DDe(o,t))}this._lengthBits=t,this._availableCount=n,this._constant=i,this._bitstream=o}function DDe(e,t){let n=0;for(let i=0;i<t;i++){let o=i>>3,r=i%8;n+=e[o]>>r&1}return n}Object.defineProperties(vJ.prototype,{lengthBits:{get:function(){return this._lengthBits}},availableCount:{get:function(){return this._availableCount}}});vJ.prototype.getBit=function(e){if(l(this._constant))return this._constant;let t=e>>3,n=e%8;return(this._bitstream[t]>>n&1)===1};var YS=vJ;var bgn=y(x(),1);function KA(e){e=e??Q.EMPTY_OBJECT;let t=e.metadataTable,n=e.class,i=e.entityId,o=e.propertyTableJson;this._class=n,this._metadataTable=t,this._entityId=i,this._extensions=o.extensions,this._extras=o.extras}Object.defineProperties(KA.prototype,{class:{get:function(){return this._class}},extras:{get:function(){return this._extras}},extensions:{get:function(){return this._extensions}}});KA.prototype.hasProperty=function(e){return this._metadataTable.hasProperty(e)};KA.prototype.hasPropertyBySemantic=function(e){return this._metadataTable.hasPropertyBySemantic(e)};KA.prototype.getPropertyIds=function(e){return this._metadataTable.getPropertyIds(e)};KA.prototype.getProperty=function(e){return this._metadataTable.getProperty(this._entityId,e)};KA.prototype.setProperty=function(e,t){return this._metadataTable.setProperty(this._entityId,e,t)};KA.prototype.getPropertyBySemantic=function(e){return this._metadataTable.getPropertyBySemantic(this._entityId,e)};KA.prototype.setPropertyBySemantic=function(e,t){return this._metadataTable.setPropertyBySemantic(this._entityId,e,t)};var MS=KA;var xgn=y(x(),1);var bk={QUADTREE:"QUADTREE",OCTREE:"OCTREE"};bk.getBranchingFactor=function(e){switch(e){case bk.OCTREE:return 8;case bk.QUADTREE:return 4}};var Ls=Object.freeze(bk);var Ggn=y(x(),1);var _gn=y(x(),1);function nc(){}Object.defineProperties(nc.prototype,{class:{get:function(){fe.throwInstantiationError()}}});nc.prototype.hasProperty=function(e){fe.throwInstantiationError()};nc.prototype.hasPropertyBySemantic=function(e){fe.throwInstantiationError()};nc.prototype.getPropertyIds=function(e){fe.throwInstantiationError()};nc.prototype.getProperty=function(e){fe.throwInstantiationError()};nc.prototype.setProperty=function(e,t){fe.throwInstantiationError()};nc.prototype.getPropertyBySemantic=function(e){fe.throwInstantiationError()};nc.prototype.setPropertyBySemantic=function(e,t){fe.throwInstantiationError()};nc.hasProperty=function(e,t,n){if(l(t[e]))return!0;let i=n.properties;if(!l(i))return!1;let o=i[e];return!!(l(o)&&l(o.default))};nc.hasPropertyBySemantic=function(e,t,n){let i=n.propertiesBySemantic;if(!l(i))return!1;let o=i[e];return l(o)};nc.getPropertyIds=function(e,t,n){n=l(n)?n:[],n.length=0;for(let o in e)e.hasOwnProperty(o)&&l(e[o])&&n.push(o);let i=t.properties;if(l(i))for(let o in i)i.hasOwnProperty(o)&&!l(e[o])&&l(i[o].default)&&n.push(o);return n};nc.getProperty=function(e,t,n){let i=n.properties[e],o=t[e];Array.isArray(o)&&(o=o.slice());let r=!0;if(o=i.handleNoData(o),!l(o)&&l(i.default))return o=He(i.default,!0),i.unpackVectorAndMatrixTypes(o,r);if(l(o))return o=i.normalize(o),o=i.applyValueTransform(o),i.unpackVectorAndMatrixTypes(o,r)};nc.setProperty=function(e,t,n,i){if(!l(n[e]))return!1;Array.isArray(t)&&(t=t.slice());let o,r=i.properties;return l(r)&&(o=r[e]),l(o)&&(t=o.packVectorAndMatrixTypes(t,!0),t=o.unapplyValueTransform(t),t=o.unnormalize(t)),n[e]=t,!0};nc.getPropertyBySemantic=function(e,t,n){let i=n.propertiesBySemantic;if(!l(i))return;let o=i[e];if(l(o))return nc.getProperty(o.id,t,n)};nc.setPropertyBySemantic=function(e,t,n,i){let o=i.propertiesBySemantic;if(!l(o))return!1;let r=i.propertiesBySemantic[e];return l(r)?nc.setProperty(r.id,t,n,i):!1};var Kn=nc;function jA(e){e=e??Q.EMPTY_OBJECT;let t=e.subtreeMetadata,n=e.class,i=l(t.properties)?t.properties:{};this._class=n,this._properties=i,this._extras=t.extras,this._extensions=t.extensions}Object.defineProperties(jA.prototype,{class:{get:function(){return this._class}},extras:{get:function(){return this._extras}},extensions:{get:function(){return this._extensions}}});jA.prototype.hasProperty=function(e){return Kn.hasProperty(e,this._properties,this._class)};jA.prototype.hasPropertyBySemantic=function(e){return Kn.hasPropertyBySemantic(e,this._properties,this._class)};jA.prototype.getPropertyIds=function(e){return Kn.getPropertyIds(this._properties,this._class,e)};jA.prototype.getProperty=function(e){return Kn.getProperty(e,this._properties,this._class)};jA.prototype.setProperty=function(e,t){return Kn.setProperty(e,t,this._properties,this._class)};jA.prototype.getPropertyBySemantic=function(e){return Kn.getPropertyBySemantic(e,this._properties,this._class)};jA.prototype.setPropertyBySemantic=function(e,t){return Kn.setPropertyBySemantic(e,t,this._properties,this._class)};var IW=jA;var Ebn=y(x(),1);var Abn=y(x(),1);var Ngn=y(x(),1);var fn={INT8:"INT8",UINT8:"UINT8",INT16:"INT16",UINT16:"UINT16",INT32:"INT32",UINT32:"UINT32",INT64:"INT64",UINT64:"UINT64",FLOAT32:"FLOAT32",FLOAT64:"FLOAT64"},zc={INTEGER:"int",UNSIGNED_INTEGER:"uint",FLOAT:"float"};fn.typeInfo={INT8:{vectorCompatible:!0,size:1,maximumValue:127,minimumValue:-128,category:zc.INTEGER},UINT8:{vectorCompatible:!0,size:1,maximumValue:255,minimumValue:0,category:zc.UNSIGNED_INTEGER},INT16:{vectorCompatible:!0,size:2,maximumValue:32767,minimumValue:-32768,category:zc.INTEGER},UINT16:{vectorCompatible:!0,size:2,maximumValue:65535,minimumValue:0,category:zc.UNSIGNED_INTEGER},INT32:{vectorCompatible:!0,size:4,maximumValue:2147483647,minimumValue:-2147483648,category:zc.INTEGER},UINT32:{vectorCompatible:!0,size:4,maximumValue:4294967295,minimumValue:0,category:zc.UNSIGNED_INTEGER},INT64:{vectorCompatible:!1,size:8,maximumValue:BigInt("9223372036854775807"),minimumValue:BigInt("-9223372036854775808"),category:zc.INTEGER,downcastFunction:e=>fn.clampToLimits(e,fn.INT32)},UINT64:{vectorCompatible:!1,size:8,maximumValue:BigInt("18446744073709551615"),minimumValue:BigInt(0),category:zc.UNSIGNED_INTEGER,downcastFunction:e=>fn.clampToLimits(e,fn.UINT32)},FLOAT32:{vectorCompatible:!0,size:4,maximumValue:34028234663852886e22,minimumValue:-34028234663852886e22,category:zc.FLOAT},FLOAT64:{vectorCompatible:!0,size:8,maximumValue:Number.MAX_VALUE,minimumValue:-Number.MAX_VALUE,category:zc.FLOAT,downcastFunction:e=>Math.fround(e)}};fn.getMinimum=function(e){return fn.typeInfo[e].minimumValue};fn.getMaximum=function(e){return fn.typeInfo[e].maximumValue};fn.isIntegerType=function(e){return fn.typeInfo[e].category!==zc.FLOAT};fn.isUnsignedIntegerType=function(e){return fn.typeInfo[e].category===zc.UNSIGNED_INTEGER};fn.isVectorCompatible=function(e){return fn.typeInfo[e].vectorCompatible};fn.category=function(e){return fn.typeInfo[e].category};fn.gpuComponentType=function(e){switch(e){case fn.INT64:return"INT32";case fn.UINT64:return"UINT32";case fn.FLOAT64:return"FLOAT32";default:return e}};fn.normalize=function(e,t){return Math.max(Number(e)/Number(fn.getMaximum(t)),-1)};fn.unnormalize=function(e,t){let n=fn.getMaximum(t),i=fn.isUnsignedIntegerType(t)?0:-n;return e=L.sign(e)*Math.round(Math.abs(e)*Number(n)),(t===fn.INT64||t===fn.UINT64)&&hn.supportsBigInt()&&(e=BigInt(e)),e>n?n:e<i?i:e};fn.applyValueTransform=function(e,t,n){return n*e+t};fn.unapplyValueTransform=function(e,t,n){return n===0?0:(e-t)/n};fn.getSizeInBytes=function(e){return fn.typeInfo[e].size};fn.clampToLimits=function(e,t){let n=fn.getMinimum(t),i=fn.getMaximum(t);if(typeof e=="bigint"){let o=BigInt(n),r=BigInt(i);return e<o?n:e>r?i:Number(e)}return Math.max(n,Math.min(i,e))};fn.downcastFunction=function(e){let n=fn.typeInfo[e].downcastFunction;return l(n)?n:i=>i};fn.fromComponentDatatype=function(e){switch(e){case H.BYTE:return fn.INT8;case H.UNSIGNED_BYTE:return fn.UINT8;case H.SHORT:return fn.INT16;case H.UNSIGNED_SHORT:return fn.UINT16;case H.INT:return fn.INT32;case H.UNSIGNED_INT:return fn.UINT32;case H.FLOAT:return fn.FLOAT32;case H.DOUBLE:return fn.FLOAT64}};fn.toComponentDatatype=function(e){switch(e){case fn.INT8:return H.BYTE;case fn.UINT8:return H.UNSIGNED_BYTE;case fn.INT16:return H.SHORT;case fn.UINT16:return H.UNSIGNED_SHORT;case fn.INT32:return H.INT;case fn.UINT32:return H.UNSIGNED_INT;case fn.FLOAT32:return H.FLOAT;case fn.FLOAT64:return H.DOUBLE}};fn.getDataViewAccessors=function(e,t){return{[fn.UINT8]:{get:e.getUint8.bind(e),set:e.setUint8.bind(e)},[fn.INT8]:{get:e.getInt8.bind(e),set:e.setInt8.bind(e)},[fn.UINT16]:{get:i=>e.getUint16(i,!0),set:(i,o)=>e.setUint16(i,o,!0)},[fn.INT16]:{get:i=>e.getInt16(i,!0),set:(i,o)=>e.setInt16(i,o,!0)},[fn.UINT32]:{get:i=>e.getUint32(i,!0),set:(i,o)=>e.setUint32(i,o,!0)},[fn.INT32]:{get:i=>e.getInt32(i,!0),set:(i,o)=>e.setInt32(i,o,!0)},[fn.FLOAT32]:{get:i=>e.getFloat32(i,!0),set:(i,o)=>e.setFloat32(i,o,!0)},[fn.FLOAT64]:{get:i=>e.getFloat64(i,!0),set:(i,o)=>e.setFloat64(i,o,!0)},[fn.UINT64]:{get:i=>e.getBigUint64(i,!0),set:(i,o)=>e.setBigUint64(i,BigInt(o),!0)},[fn.INT64]:{get:i=>e.getBigInt64(i,!0),set:(i,o)=>e.setBigInt64(i,BigInt(o),!0)}}[t]};var Yt=Object.freeze(fn);var ibn=y(x(),1);var kgn=y(x(),1);var ur={SCALAR:"SCALAR",VEC2:"VEC2",VEC3:"VEC3",VEC4:"VEC4",MAT2:"MAT2",MAT3:"MAT3",MAT4:"MAT4",BOOLEAN:"BOOLEAN",STRING:"STRING",ENUM:"ENUM"};ur.isVectorType=function(e){switch(e){case ur.VEC2:case ur.VEC3:case ur.VEC4:return!0;default:return!1}};ur.isMatrixType=function(e){switch(e){case ur.MAT2:case ur.MAT3:case ur.MAT4:return!0;default:return!1}};ur.getComponentCount=function(e){switch(e){case ur.SCALAR:case ur.STRING:case ur.ENUM:case ur.BOOLEAN:return 1;case ur.VEC2:return 2;case ur.VEC3:return 3;case ur.VEC4:return 4;case ur.MAT2:return 4;case ur.MAT3:return 9;case ur.MAT4:return 16}};ur.getMathType=function(e){switch(e){case ur.VEC2:return M;case ur.VEC3:return m;case ur.VEC4:return re;case ur.MAT2:return Qi;case ur.MAT3:return $;case ur.MAT4:return F;default:return}};var St=Object.freeze(ur);function Kr(e){e=e??Q.EMPTY_OBJECT;let t=e.id,n=e.type,i=e.componentType,o=e.enumType,r=l(i)&&(e.normalized??!1)&&Yt.isIntegerType(i);this._id=t,this._name=e.name,this._description=e.description,this._semantic=e.semantic,this._isLegacyExtension=e.isLegacyExtension,this._type=n,this._componentType=i,this._enumType=o,this._valueType=l(o)?o.valueType:i,this._isArray=e.isArray??!1,this._isVariableLengthArray=e.isVariableLengthArray??!1,this._arrayLength=e.arrayLength,this._min=He(e.min,!0),this._max=He(e.max,!0),this._normalized=r;let s=He(e.offset,!0),a=He(e.scale,!0),c=l(s)||l(a),d=!0;l(s)||(s=this.expandConstant(0,d)),l(a)||(a=this.expandConstant(1,d)),this._offset=s,this._scale=a,this._hasValueTransform=c,this._noData=He(e.noData,!0),this._default=He(e.default,!0),this._required=e.required??!0,this._extras=He(e.extras,!0),this._extensions=He(e.extensions,!0)}Kr.fromJson=function(e){e=e??Q.EMPTY_OBJECT;let t=e.id,n=e.property,i=kDe(n),o=QDe(n,e.enums),r;return l(i)?i?r=l(n.optional)?!n.optional:!0:r=n.required??!1:r=!1,new Kr({id:t,type:o.type,componentType:o.componentType,enumType:o.enumType,isArray:o.isArray,isVariableLengthArray:o.isVariableLengthArray,arrayLength:o.arrayLength,normalized:n.normalized,min:n.min,max:n.max,offset:n.offset,scale:n.scale,noData:n.noData,default:n.default,required:r,name:n.name,description:n.description,semantic:n.semantic,extras:n.extras,extensions:n.extensions,isLegacyExtension:i})};Object.defineProperties(Kr.prototype,{id:{get:function(){return this._id}},name:{get:function(){return this._name}},description:{get:function(){return this._description}},type:{get:function(){return this._type}},enumType:{get:function(){return this._enumType}},componentType:{get:function(){return this._componentType}},valueType:{get:function(){return this._valueType}},isArray:{get:function(){return this._isArray}},isVariableLengthArray:{get:function(){return this._isVariableLengthArray}},arrayLength:{get:function(){return this._arrayLength}},normalized:{get:function(){return this._normalized}},max:{get:function(){return this._max}},min:{get:function(){return this._min}},noData:{get:function(){return this._noData}},default:{get:function(){return this._default}},required:{get:function(){return this._required}},semantic:{get:function(){return this._semantic}},hasValueTransform:{get:function(){return this._hasValueTransform}},offset:{get:function(){return this._offset}},scale:{get:function(){return this._scale}},extras:{get:function(){return this._extras}},extensions:{get:function(){return this._extensions}}});function kDe(e){if(e.type==="ARRAY")return!0;let t=e.type;if(t===St.SCALAR||St.isMatrixType(t)||St.isVectorType(t))return!1;if(l(Yt[t]))return!0;if(l(e.noData)||l(e.scale)||l(e.offset)||l(e.required)||l(e.count)||l(e.array)||l(e.optional))return!1}function QDe(e,t){let n=e.type,i=e.componentType,o=n==="ARRAY",r,s,a;o?(r=!0,s=e.componentCount,a=!l(s)):e.array?(r=!0,s=e.count,a=!l(e.count)):(r=!1,s=void 0,a=!1);let c;if(l(e.enumType)&&(c=t[e.enumType]),n===St.ENUM)return{type:n,componentType:void 0,enumType:c,valueType:c.valueType,isArray:r,isVariableLengthArray:a,arrayLength:s};if(o&&i===St.ENUM)return{type:i,componentType:void 0,enumType:c,valueType:c.valueType,isArray:r,isVariableLengthArray:a,arrayLength:s};if(n===St.SCALAR||St.isMatrixType(n)||St.isVectorType(n))return{type:n,componentType:i,enumType:void 0,valueType:i,isArray:r,isVariableLengthArray:a,arrayLength:s};if(n===St.BOOLEAN||n===St.STRING)return{type:n,componentType:void 0,enumType:void 0,valueType:void 0,isArray:r,isVariableLengthArray:a,arrayLength:s};if(o&&(i===St.BOOLEAN||i===St.STRING))return{type:i,componentType:void 0,enumType:void 0,valueType:void 0,isArray:r,isVariableLengthArray:a,arrayLength:s};if(l(i)&&l(Yt[i]))return{type:St.SCALAR,componentType:i,enumType:void 0,valueType:i,isArray:r,isVariableLengthArray:a,arrayLength:s};if(l(Yt[n]))return{type:St.SCALAR,componentType:n,enumType:void 0,valueType:n,isArray:r,isVariableLengthArray:a,arrayLength:s}}Kr.prototype.normalize=function(e){return this._normalized?UJ(e,this._valueType,Yt.normalize):e};Kr.prototype.unnormalize=function(e){return this._normalized?UJ(e,this._valueType,Yt.unnormalize):e};Kr.prototype.applyValueTransform=function(e){return!this._hasValueTransform||this._isVariableLengthArray?e:Kr.valueTransformInPlace(e,this._offset,this._scale,Yt.applyValueTransform)};Kr.prototype.unapplyValueTransform=function(e){return!this._hasValueTransform||this._isVariableLengthArray?e:Kr.valueTransformInPlace(e,this._offset,this._scale,Yt.unapplyValueTransform)};Kr.prototype.expandConstant=function(e,t){t=t??!1;let n=this._isArray,i=this._arrayLength,o=St.getComponentCount(this._type),r=n&&o>1;if(!n&&o===1)return e;if(!n)return new Array(o).fill(e);if(!r)return new Array(i).fill(e);if(!t)return new Array(this._arrayLength*o).fill(e);let s=new Array(o).fill(e);return new Array(this._arrayLength).fill(s)};Kr.prototype.handleNoData=function(e){let t=this._noData;if(!l(t))return e;if(!Qle(e,t))return e};function Qle(e,t){if(!Array.isArray(e))return e===t;if(!Array.isArray(t)||e.length!==t.length)return!1;for(let n=0;n<e.length;n++)if(!Qle(e[n],t[n]))return!1;return!0}Kr.prototype.unpackVectorAndMatrixTypes=function(e,t){t=t??!1;let n=St.getMathType(this._type),i=this._isArray,o=St.getComponentCount(this._type),r=i&&o>1;return l(n)?t&&r?e.map(function(s){return n.unpack(s)}):i?n.unpackArray(e):n.unpack(e):e};Kr.prototype.packVectorAndMatrixTypes=function(e,t){t=t??!1;let n=St.getMathType(this._type),i=this._isArray,o=St.getComponentCount(this._type),r=i&&o>1;return l(n)?t&&r?e.map(function(s){return n.pack(s,[])}):i?n.packArray(e,[]):n.pack(e,[]):e};Kr.prototype.validate=function(e){if(!(!l(e)&&l(this._default)))return this._required&&!l(e)?"required property must have a value":this._isArray?ODe(this,e):Ole(this,e)};function ODe(e,t){if(!Array.isArray(t))return`value ${t} must be an array`;let n=t.length;if(!e._isVariableLengthArray&&n!==e._arrayLength)return"Array length does not match property.arrayLength";for(let i=0;i<n;i++){let o=Ole(e,t[i]);if(l(o))return o}}function Ole(e,t){let n=e._type,i=e._componentType,o=e._enumType,r=e._normalized;return St.isVectorType(n)?zDe(t,n,i):St.isMatrixType(n)?HDe(t,n,i):n===St.STRING?JDe(t):n===St.BOOLEAN?KDe(t):n===St.ENUM?jDe(t,o):qDe(t,i,r)}function zDe(e,t,n){if(!Yt.isVectorCompatible(n))return`componentType ${n} is incompatible with vector type ${t}`;if(t===St.VEC2&&!(e instanceof M))return`vector value ${e} must be a Cartesian2`;if(t===St.VEC3&&!(e instanceof m))return`vector value ${e} must be a Cartesian3`;if(t===St.VEC4&&!(e instanceof re))return`vector value ${e} must be a Cartesian4`}function HDe(e,t,n){if(!Yt.isVectorCompatible(n))return`componentType ${n} is incompatible with matrix type ${t}`;if(t===St.MAT2&&!(e instanceof Qi))return`matrix value ${e} must be a Matrix2`;if(t===St.MAT3&&!(e instanceof $))return`matrix value ${e} must be a Matrix3`;if(t===St.MAT4&&!(e instanceof F))return`matrix value ${e} must be a Matrix4`}function JDe(e){if(typeof e!="string")return yk(e,St.STRING)}function KDe(e){if(typeof e!="boolean")return yk(e,St.BOOLEAN)}function jDe(e,t){let n=typeof e;if(l(t))return n!=="string"||!l(t.valuesByName[e])?`value ${e} is not a valid enum name for ${t.id}`:void 0}function qDe(e,t,n){let i=typeof e;switch(t){case Yt.INT8:case Yt.UINT8:case Yt.INT16:case Yt.UINT16:case Yt.INT32:case Yt.UINT32:case Yt.FLOAT32:case Yt.FLOAT64:return i!=="number"?yk(e,t):isFinite(e)?Dle(e,t,n):kle(e,t);case Yt.INT64:case Yt.UINT64:return i!=="number"&&i!=="bigint"?yk(e,t):i==="number"&&!isFinite(e)?kle(e,t):Dle(e,t,n)}}function yk(e,t){return`value ${e} does not match type ${t}`}function Ule(e,t,n){let i=`value ${e} is out of range for type ${t}`;return n&&(i+=" (normalized)"),i}function Dle(e,t,n){if(n){let i=Yt.isUnsignedIntegerType(t)?0:-1;return e<i||e>1?Ule(e,t,n):void 0}if(e<Yt.getMinimum(t)||e>Yt.getMaximum(t))return Ule(e,t,n)}function kle(e,t){return`value ${e} of type ${t} must be finite`}function UJ(e,t,n){if(!Array.isArray(e))return n(e,t);for(let i=0;i<e.length;i++)e[i]=UJ(e[i],t,n);return e}Kr.valueTransformInPlace=function(e,t,n,i){if(!Array.isArray(e))return i(e,t,n);for(let o=0;o<e.length;o++)e[o]=Kr.valueTransformInPlace(e[o],t[o],n[o],i);return e};Kr.prototype.cpuBytesPerElement=function(){return zle(this,this.valueType)};Kr.prototype.gpuBytesPerElement=function(){let e=Yt.gpuComponentType(this.valueType);return zle(this,e)};function zle(e,t){let n=e.type,i=St.getComponentCount(n),o=e.isArray?e.arrayLength:1,r=Yt.getSizeInBytes(t);return i*o*r}Kr.prototype.isGpuCompatible=function(e){let t=this.type;return!(this.isVariableLengthArray||t===St.STRING||t===St.BOOLEAN||this.gpuBytesPerElement()>e)};var DJ=[void 0,"float","vec2","vec3","vec4"],Hle=[void 0,"int","ivec2","ivec3","ivec4"],$De=[void 0,"uint","uvec2","uvec3","uvec4"],eke={[zc.FLOAT]:"uintBitsToFloat",[zc.INTEGER]:"int",[zc.UNSIGNED_INTEGER]:""};Kr.prototype.getGlslTypeWebGL1=function(){let e=St.getComponentCount(this.type);return this.isArray&&(e=this.arrayLength),this.normalized?DJ[e]:Hle[e]};Kr.prototype.getGlslType=function(){let e=this.valueType,t=St.getComponentCount(this.type),n=this.isArray?this.arrayLength:1;return t*=n,!Yt.isIntegerType(e)||this.normalized?DJ[t]:Yt.isUnsignedIntegerType(e)?$De[t]:Hle[t]};Kr.prototype.unpackTextureInShader=function(e,t,n,i){let o=this.getGlslType(),r=Yt.gpuComponentType(this.valueType),s=t.length,a=this.type,c=St.getComponentCount(a)*(this.isArray?this.arrayLength:1),d=Math.floor(s/c),u=`${n}_rawChannels`,h=`${n}_rawBits`,p=`${n}_unpackedValue`,A=`${o} ${p};`,f=`uint ${h};`;i.push(A),i.push(f);let b=`${DJ[s]} ${u} = ${e};`;i.push(b);let C=eke[Yt.category(r)],T=c>1;for(let E=0;E<c;E++){let S="rgba".slice(E*d,(E+1)*d),I=s>1?`.${S}`:"",R=`${h} = czm_unpackTexture(${u}${I});`,V="";T&&(V=`[${E}]`);let W="",B="";if(this.normalized){let P=Yt.getMaximum(r);W=` * ${1/Number(P)}`,B="float"}let N=`${p}${V} = ${B}(${C}(${h}))${W};`;i.push(R),i.push(N)}return p};Kr.prototype.unpackTextureInShaderWebGL1=function(e){return this.normalized?e:`${this.getGlslTypeWebGL1()}(255.0 * ${e})`};var mp=Kr;function ZW(e){e=e??Q.EMPTY_OBJECT;let t=e.count,n=e.property,i=e.classProperty,o=e.bufferViews,r=i.type,s=i.isArray,a=i.isVariableLengthArray,c=i.valueType,d=i.enumType,u=r===St.STRING,h=r===St.BOOLEAN,p=0,A;if(a){let g=n.arrayOffsetType??n.offsetType;g=Yt[g]??Yt.UINT32;let _=n.arrayOffsets??n.arrayOffsetBufferView;A=new kJ(o[_],g,t+1),p+=A.typedArray.byteLength}let f=St.getComponentCount(r),b;a?b=A.get(t)-A.get(0):s?b=t*i.arrayLength:b=t;let C=f*b,T;if(u){let g=n.stringOffsetType??n.offsetType;g=Yt[g]??Yt.UINT32;let _=n.stringOffsets??n.stringOffsetBufferView;T=new kJ(o[_],g,C+1),p+=T.typedArray.byteLength}(u||h)&&(c=Yt.UINT8);let E;u?E=T.get(C)-T.get(0):h?E=Math.ceil(C/8):E=C;let S=n.values??n.bufferView,I=new kJ(o[S],c,E);p+=I.typedArray.byteLength;let R=n.offset,V=n.scale,W=i.hasValueTransform||l(R)||l(V);R=R??i.offset,V=V??i.scale,R=Jle(R),V=Jle(V);let B,N,P=this;u?B=function(g){return ike(g,P._values,P._stringOffsets)}:h?(B=function(g){return oke(g,P._values)},N=function(g,_){rke(g,P._values,_)}):l(d)?(B=function(g){let _=P._values.get(g);return d.namesByValue[_]},N=function(g,_){let Z=d.valuesByName[_];P._values.set(g,Z)}):(B=function(g){return P._values.get(g)},N=function(g,_){P._values.set(g,_)}),this._arrayOffsets=A,this._stringOffsets=T,this._values=I,this._classProperty=i,this._count=t,this._vectorComponentCount=f,this._min=n.min,this._max=n.max,this._offset=R,this._scale=V,this._hasValueTransform=W,this._getValue=B,this._setValue=N,this._unpackedValues=void 0,this._extras=n.extras,this._extensions=n.extensions,this._byteLength=p}Object.defineProperties(ZW.prototype,{hasValueTransform:{get:function(){return this._hasValueTransform}},offset:{get:function(){return this._offset}},scale:{get:function(){return this._scale}},extras:{get:function(){return this._extras}},extensions:{get:function(){return this._extensions}},byteLength:{get:function(){return this._byteLength}},classProperty:{get:function(){return this._classProperty}}});ZW.prototype.get=function(e){let t=tke(this,e);return t=this._classProperty.handleNoData(t),l(t)?(t=this._classProperty.normalize(t),t=hke(this,t),this._classProperty.unpackVectorAndMatrixTypes(t)):(t=this._classProperty.default,this._classProperty.unpackVectorAndMatrixTypes(t))};ZW.prototype.set=function(e,t){let n=this._classProperty;t=n.packVectorAndMatrixTypes(t),t=fke(this,t),t=n.unnormalize(t),nke(this,e,t)};ZW.prototype.getTypedArray=function(){if(l(this._values))return this._values.typedArray};function Jle(e){if(!Array.isArray(e))return e;let t=[];for(let n=0;n<e.length;n++){let i=e[n];Array.isArray(i)?ri(t,i):t.push(i)}return t}function tke(e,t){jle(e)&&qle(e);let n=e._classProperty,i=n.isArray,o=n.type,r=St.getComponentCount(o);if(l(e._unpackedValues)){let s=e._unpackedValues[t];return i?He(s,!0):s}return!i&&r===1?e._getValue(t):Kle(e,n,t)}function Kle(e,t,n){let i,o;if(t.isVariableLengthArray){i=e._arrayOffsets.get(n),o=e._arrayOffsets.get(n+1)-i;let s=St.getComponentCount(t.type);i*=s,o*=s}else{let a=(t.arrayLength??1)*e._vectorComponentCount;i=n*a,o=a}let r=new Array(o);for(let s=0;s<o;s++)r[s]=e._getValue(i+s);return r}function nke(e,t,n){uke(e,t,n)&&qle(e);let i=e._classProperty,o=i.isArray,r=i.type,s=St.getComponentCount(r);if(l(e._unpackedValues)){i.isArray&&(n=He(n,!0)),e._unpackedValues[t]=n;return}if(!o&&s===1){e._setValue(t,n);return}let a,c;if(i.isVariableLengthArray)a=e._arrayOffsets.get(t),c=e._arrayOffsets.get(t+1)-a;else{let u=(i.arrayLength??1)*e._vectorComponentCount;a=t*u,c=u}for(let d=0;d<c;++d)e._setValue(a+d,n[d])}function ike(e,t,n){let i=n.get(e),o=n.get(e+1)-i;return bd(t.typedArray,i,o)}function oke(e,t){let n=e>>3,i=e%8;return(t.typedArray[n]>>i&1)===1}function rke(e,t,n){let i=e>>3,o=e%8;n?t.typedArray[i]|=1<<o:t.typedArray[i]&=~(1<<o)}function ske(e,t){let n=t.dataView,i=e*8,o=0,r=(n.getUint8(i+7)&128)>0,s=!0;for(let a=0;a<8;++a){let c=n.getUint8(i+a);r&&(s?c!==0&&(c=~(c-1)&255,s=!1):c=~c&255),o+=c*Math.pow(256,a)}return r&&(o=-o),o}function ake(e,t){let n=t.dataView,i=e*8,o=BigInt(0),r=(n.getUint8(i+7)&128)>0,s=!0;for(let a=0;a<8;++a){let c=n.getUint8(i+a);r&&(s?c!==0&&(c=~(c-1)&255,s=!1):c=~c&255),o+=BigInt(c)*(BigInt(1)<<BigInt(a*8))}return r&&(o=-o),o}function cke(e,t){let n=t.dataView,i=e*8,o=n.getUint32(i,!0),r=n.getUint32(i+4,!0);return o+4294967296*r}function lke(e,t){let n=t.dataView,i=e*8,o=BigInt(n.getUint32(i,!0)),r=BigInt(n.getUint32(i+4,!0));return o+BigInt(4294967296)*r}function dke(e){switch(e){case Yt.INT8:return H.BYTE;case Yt.UINT8:return H.UNSIGNED_BYTE;case Yt.INT16:return H.SHORT;case Yt.UINT16:return H.UNSIGNED_SHORT;case Yt.INT32:return H.INT;case Yt.UINT32:return H.UNSIGNED_INT;case Yt.FLOAT32:return H.FLOAT;case Yt.FLOAT64:return H.DOUBLE}}function jle(e){if(l(e._unpackedValues))return!1;let t=e._classProperty,n=t.type,i=t.valueType;return n===St.STRING||i===Yt.INT64&&!hn.supportsBigInt64Array()||i===Yt.UINT64&&!hn.supportsBigUint64Array()}function uke(e,t,n){if(jle(e))return!0;let i=e._arrayOffsets;if(l(i)){let o=i.get(t+1)-i.get(t),r=n.length;if(o!==r)return!0}return!1}function qle(e){e._unpackedValues=mke(e),e._arrayOffsets=void 0,e._stringOffsets=void 0,e._values=void 0}function mke(e){let t=e._count,n=new Array(t),i=e._classProperty,o=i.isArray,r=i.type,s=St.getComponentCount(r);if(!o&&s===1){for(let a=0;a<t;++a)n[a]=e._getValue(a);return n}for(let a=0;a<t;a++)n[a]=Kle(e,i,a);return n}function hke(e,t){let i=e._classProperty.isVariableLengthArray;return!e._hasValueTransform||i?t:mp.valueTransformInPlace(t,e._offset,e._scale,Yt.applyValueTransform)}function fke(e,t){let i=e._classProperty.isVariableLengthArray;return!e._hasValueTransform||i?t:mp.valueTransformInPlace(t,e._offset,e._scale,Yt.unapplyValueTransform)}function kJ(e,t,n){let i=this,o,r,s;if(t===Yt.INT64)hn.supportsBigInt()?hn.supportsBigInt64Array()?(o=new BigInt64Array(e.buffer,e.byteOffset,n),s=function(a,c){i.typedArray[a]=BigInt(c)}):(o=new Uint8Array(e.buffer,e.byteOffset,n*8),r=function(a){return ake(a,i)}):(_t("INT64 type is not fully supported on this platform. Values greater than 2^53 - 1 or less than -(2^53 - 1) may lose precision when read."),o=new Uint8Array(e.buffer,e.byteOffset,n*8),r=function(a){return ske(a,i)});else if(t===Yt.UINT64)hn.supportsBigInt()?hn.supportsBigUint64Array()?(o=new BigUint64Array(e.buffer,e.byteOffset,n),s=function(a,c){i.typedArray[a]=BigInt(c)}):(o=new Uint8Array(e.buffer,e.byteOffset,n*8),r=function(a){return lke(a,i)}):(_t("UINT64 type is not fully supported on this platform. Values greater than 2^53 - 1 may lose precision when read."),o=new Uint8Array(e.buffer,e.byteOffset,n*8),r=function(a){return cke(a,i)});else{let a=dke(t);o=H.createArrayBufferView(a,e.buffer,e.byteOffset,n),s=function(c,d){i.typedArray[c]=d}}l(r)||(r=function(a){return i.typedArray[a]}),this.typedArray=o,this.dataView=new DataView(o.buffer,o.byteOffset),this.get=r,this.set=s,this._componentType=t}var RW=ZW;function Mh(e){e=e??Q.EMPTY_OBJECT;let t=e.count,n=e.class,i=0,o={};if(l(e.properties)){for(let r in e.properties)if(e.properties.hasOwnProperty(r)){let s=new RW({count:t,property:e.properties[r],classProperty:n.properties[r],bufferViews:e.bufferViews});o[r]=s,i+=s.byteLength}}this._count=t,this._class=n,this._properties=o,this._byteLength=i}Object.defineProperties(Mh.prototype,{count:{get:function(){return this._count}},class:{get:function(){return this._class}},byteLength:{get:function(){return this._byteLength}},properties:{get:function(){return this._properties}}});Mh.prototype.hasProperty=function(e){return Kn.hasProperty(e,this._properties,this._class)};Mh.prototype.hasPropertyBySemantic=function(e){return Kn.hasPropertyBySemantic(e,this._properties,this._class)};Mh.prototype.getPropertyIds=function(e){return Kn.getPropertyIds(this._properties,this._class,e)};Mh.prototype.getProperty=function(e,t){let n=this._properties[t],i;return l(n)?i=n.get(e):i=pke(this._class,t),i};Mh.prototype.setProperty=function(e,t,n){let i=this._properties[t];return l(i)?(i.set(e,n),!0):!1};Mh.prototype.getPropertyBySemantic=function(e,t){let n,i=this._class.propertiesBySemantic;if(l(i)&&(n=i[t]),l(n))return this.getProperty(e,n.id)};Mh.prototype.setPropertyBySemantic=function(e,t,n){let i,o=this._class.propertiesBySemantic;return l(o)&&(i=o[t]),l(i)?this.setProperty(e,i.id,n):!1};Mh.prototype.getPropertyTypedArray=function(e){let t=this._properties[e];if(l(t))return t.getTypedArray()};Mh.prototype.getPropertyTypedArrayBySemantic=function(e){let t,n=this._class.propertiesBySemantic;if(l(n)&&(t=n[e]),l(t))return this.getPropertyTypedArray(t.id)};function pke(e,t){let n=e.properties;if(!l(n))return;let i=n[t];if(l(i)&&l(i.default)){let o=i.default;return i.isArray&&(o=He(o,!0)),o=i.normalize(o),i.unpackVectorAndMatrixTypes(o)}}var xm=Mh;var uSn=y(x(),1);var Pbn=y(x(),1);var Vbn=y(x(),1);var QJ=class{get cacheKey(){fe.throwInstantiationError()}load(){fe.throwInstantiationError()}unload(){}process(t){return!1}getError(t,n){l(n)&&l(n.message)&&(t+=`
${n.message}`);let i=new me(t);return l(n)&&(i.stack=`Original stack:
${n.stack}
Handler stack:
${i.stack}`),i}isDestroyed(){return!1}destroy(){return this.unload(),he(this)}},Hi=QJ;var Lbn=y(x(),1),Ake={UNLOADED:0,LOADING:1,LOADED:2,PROCESSING:3,READY:4,FAILED:5},yt=Object.freeze(Ake);var xk=class extends Hi{constructor(t){super(),t=t??Q.EMPTY_OBJECT;let n=t.typedArray,i=t.resource,o=t.cacheKey;this._typedArray=n,this._resource=i,this._cacheKey=o,this._state=yt.UNLOADED,this._promise=void 0}get cacheKey(){return this._cacheKey}get typedArray(){return this._typedArray}async load(){return l(this._promise)?this._promise:l(this._typedArray)?(this._promise=Promise.resolve(this),this._promise):(this._promise=gke(this),this._promise)}static _fetchArrayBuffer(t){return t.fetchArrayBuffer()}unload(){this._typedArray=void 0}};async function gke(e){let t=e._resource;e._state=yt.LOADING;try{let n=await xk._fetchArrayBuffer(t);return e.isDestroyed()?void 0:(e._typedArray=new Uint8Array(n),e._state=yt.READY,e)}catch(n){if(e.isDestroyed())return;e._state=yt.FAILED;let i=`Failed to load external buffer: ${t.url}`;throw e.getError(i,n)}}var dC=xk;var c0n=y(x(),1);var Kbn=y(x(),1);var Mbn=y(x(),1),Xbn=(function(){var e="b9H79Tebbbe9ok9Geueu9Geub9Gbb9Gruuuuuuueu9Gvuuuuueu9Gduueu9Gluuuueu9Gvuuuuub9Gouuuuuub9Gluuuub9GiuuueuiE8AdilveoveovrrwrrrDDoDrbqqbelve9Weiiviebeoweuecj:Gdkr:PlCo9TW9T9VV95dbH9F9F939H79T9F9J9H229F9Jt9VV7bb8F9TW79O9V9Wt9FW9U9J9V9KW9wWVtW949c919M9MWV9mW4W2be8A9TW79O9V9Wt9FW9U9J9V9KW9wWVtW949c919M9MWVbd8F9TW79O9V9Wt9FW9U9J9V9KW9wWVtW949c919M9MWV9c9V919U9KbiE9TW79O9V9Wt9FW9U9J9V9KW9wWVtW949wWV79P9V9UblY9TW79O9V9Wt9FW9U9J9V9KW69U9KW949c919M9MWVbv8E9TW79O9V9Wt9FW9U9J9V9KW69U9KW949c919M9MWV9c9V919U9Kbo8A9TW79O9V9Wt9FW9U9J9V9KW69U9KW949wWV79P9V9UbrE9TW79O9V9Wt9FW9U9J9V9KW69U9KW949tWG91W9U9JWbwa9TW79O9V9Wt9FW9U9J9V9KW69U9KW949tWG91W9U9JW9c9V919U9KbDL9TW79O9V9Wt9FW9U9J9V9KWS9P2tWV9p9JtbqK9TW79O9V9Wt9FW9U9J9V9KWS9P2tWV9r919HtbkL9TW79O9V9Wt9FW9U9J9V9KWS9P2tWVT949WbxY9TW79O9V9Wt9FW9U9J9V9KWS9P2tWVJ9V29VVbmE9TW79O9V9Wt9F9V9Wt9P9T9P96W9wWVtW94J9H9J9OWbza9TW79O9V9Wt9F9V9Wt9P9T9P96W9wWVtW94J9H9J9OW9ttV9P9WbHa9TW79O9V9Wt9F9V9Wt9P9T9P96W9wWVtW94SWt9J9O9sW9T9H9WbOK9TW79O9V9Wt9F79W9Ht9P9H29t9VVt9sW9T9H9WbAl79IV9RbXDwebcekdKYq:8f8Adbk;wadhud9:8Jjjjjbc;qw9Rgr8KjjjjbcbhwdnaeTmbabcbyd;i:I:cjbaoaocb9iEgDc:GeV86bbarc;adfcbcjdz:xjjjb8AdnaiTmbarc;adfadalz:wjjjb8Akarc;abfalfcbcbcjdal9RalcFe0Ez:xjjjb8Aarc;abfarc;adfalz:wjjjb8Aar9cb83iUar9cb83i8War9cb83iyar9cb83iaar9cb83iKar9cb83izar9cb83iwar9cb83ibcj;abal9Uc;WFbGcjdalca0Ehqdnaicd6mbavcd9imbaDTmbadcefhkaqci2gxal2hmarc;alfclfhParc;qlfceVhsarc;qofclVhzcbhHincdhOcbhAdnavci6mbar9cb83i;Ooar9cb83i;Goar9cb83i;yoar9cb83i;qoadaHfgoybbhCcbhXincbhwcbhQdninaoalfhLaoybbgKaC7aQVhQawcP0meaLhoaKhCawcefgwaXfai6mbkkcbhCarc;qofhwincwhYcwh8AdnaQaC93gocFeGgEcs0mbclh8AaEci0mbcdcbaEEh8Akdnaocw4cFeGgEcs0mbclhYaEci0mbcdcbaEEhYkaYa8AfhEawydbh3cwhYcwh8Adnaocz4cFeGg5cs0mbclh8Aa5ci0mbcdcba5Eh8AkaEa3fhEdnaocFFFFb0mbclhYaocFFF8F0mbcbcdaocjjjw6EhYkawaEa8AfaYfBdbawclfhwaCcefgCcw9hmbkaLhoaKhCaXczfgXai6mbkcbhocehwazhQinawaoaQydbarc;qofaocdtfydb6EhoaQclfhQawcefgwcw9hmbkaoclthAcihOkcbhEarc;qlfcbcjdz:xjjjb8AarcbBd;ilar9cb83i;aladh8Eaqh8Fakh3inarc;qlfadaEaEcb9h9Ral2falz:wjjjb8Aaia8Faia8F6EhadnaqaiaE9RaEaqfai6EgKcsfc9WGgoaK9nmbarc;qofaKfcbaoaK9Rz:xjjjb8AkadaEal2fhhcbhginagaAVcl4hXarc;alfagcdtfh8JaHh8Kcbh8Lina8LaHfhwdndndndndndndnagPlbedibkaKTmvahawfhoarc;qlfawfRbbhQarc;qofhwaahCinawaoRbbgYaQ9RgQcetaQcKtc8F91786bbawcefhwaoalfhoaYhQaEaCcufgC9hmbxvkkaKTmla8Kc9:Ghoa8LcitcwGh8Aarc;qlfawceVfRbbcwtarc;qlfawc9:GfRbbVhQarc;qofhwaahCinawa3aofRbbcwta8EaofRbbVgYaQ9RgQcetaQcztc8F917cFFiGa8A486bbaoalfhoawcefhwaYhQaEaCcufgC9hmbxlkkasa8Kc98GgQfhoa3aQfhYarc;qlfawc98GgQfRbbhCcwhwinaoRbbawtaCVhCaocefhoawcwfgwca9hmbxdkkaKTmdxekaKTmea8Lcith5ahaQfh8AcbhLina8ARbbhQcwhoaYhwinawRbbaotaQVhQawcefhwaocwfgoca9hmbkarc;qofaLfaQaC7aX93a5486bbaYalfhYa8Aalfh8AaQhCaLcefgLaK9hmbkka8Jydbh8AcbhLarc;qofhoincdhQcbhwinaQaoawfRbbcb9hfhQawcefgwcz9hmbkclhCcbhwinaCaoawfRbbcd0fhCawcefgwcz9hmbkcwhYcbhwinaYaoawfRbbcP0fhYawcefgwcz9hmbkaQaCaQaC6EgwaYawaY6Egwczawcz6Ea8Afh8AaoczfhoaLczfgLaK6mbka8Ja8ABdbka8Kcefh8Ka8Lcefg8Lcl9hmbkagcefggaO9hmbka8Eamfh8Ea8Faxfh8Fa3amfh3aEaxfgEai6mbkcbhocehwaPhQinawaoaQydbarc;alfaocdtfydb6EhoaQclfhQaOawcefgw9hmbkaraHcd4faAcdVaoaocdSE86bbaHclfgHal6mbkkabaefhgabcefhoalcd4g8McbaDEhkadcefh8Narc;abfceVhecbhmdndninaiam9nmearc;qofcbcjdz:xjjjb8Aagao9Rak6mdadamal2gwfhxcbhHa8Nawfhzaocbakz:xjjjbg8Fakfh3aqaiam9Ramaqfai6Egscsfgocl4cifcd4hOaoc9WGg8JThPindndndndndndndndndndnaDTmbaraHcd4fRbbgQciGPlbedlbkasTmdaxaHfhoarc;abfaHfRbbhQarc;qofhwashCinawaoRbbgYaQ9RgQcetaQcKtc8F91786bbawcefhwaoalfhoaYhQaCcufgCmbxikkasTmiaHcitcwGh8Aarc;abfaHceVfRbbcwtarc;abfaHc9:GgofRbbVhQaxaofhoarc;qofhwashCinawao8VbbgYaQ9RgQcetaQcztc8F917cFFiGa8A486bbawcefhwaoalfhoaYhQaCcufgCmbxikkaeaHc98Gg8Afhoaza8AfhYarc;abfa8AfRbbhCcwhwinaoRbbawtaCVhCaocefhoawcwfgwca9hmbkasTmdaQcl4hKaHcitcKGhEaxa8Afh8AcbhLina8ARbbhQcwhoaYhwinawRbbaotaQVhQawcefhwaocwfgoca9hmbkarc;qofaLfaQaC7aK93aE486bbaYalfhYa8Aalfh8AaQhCaLcefgLas9hmbkkaDmbcbhoxlka8JTmbcbhodninarc;qofaofgwcwf8Pibaw8Pib:e9qTmeaoczfgoa8J9pmdxbkkdnavmbcehoxikcbh8AaOhLaOhKinarc;qofa8Afgocwf8Pibhyao8Pibh8PcdhQcbhwinaQaoawfRbbcb9hfhQawcefgwcz9hmbkclhCcbhwinaCaoawfRbbcd0fhCawcefgwcz9hmbkcwhYcbhwinaYaoawfRbbcP0fhYawcefgwcz9hmbkaQaCaQaC6EgoaYaoaY6Egoczaocz6EaKfhKaocucbaya8P:e9cb9sEgwaoaw6EaLfhLa8Aczfg8Aa8J9pmdxbkka8FaHcd4fgoaoRbbcdaHcetcoGtV86bbxikdnaLas6mbaKas6mba8FaHcd4fgoaoRbbciaHcetcoGtV86bbaga39Ras6mra3arc;qofasz:wjjjbasfh3xikaLaK9phoka8FaHcd4fgwawRbbaoaHcetcoGtV86bbkaga39RaO6mla3cbaOz:xjjjbgaaOfhKdndna8JmbaPhoxekdnagaK9RcK9pmbaPhoxekaocdtc:q:G:cjbfcj:G:cjbaDEg3ydxghcetc;:FFFeGhAcuhEcuahtcu7cFeGh8Ecbh8Karc;qofhQinarc;qofa8KfhXczh8AdndndnahPDbeeeeeeedekcucbaXcwf8PibaX8Pib:e9cb9sEh8AxekcbhoaAh8Aina8Aa8EaQaofRbb9nfh8Aaocefgocz9hmbkkcih5cbhYinczhwdndndna3aYcdtfydbgLPDbeeeeeeedekcucbaXcwf8PibaX8Pib:e9cb9sEhwxekaLcetc;:FFFeGhwcuaLtcu7cFeGhCcbhoinawaCaQaofRbb9nfhwaocefgocz9hmbkkdndnawa8A6mbaLaE9hmeawa8A9hmea3a5cdtfydbcwSmekaYh5awh8AkaYcefgYci9hmbkaaa8Kco4fgoaoRbba5a8Kci4coGtV86bbdndndna3a5cdtfydbgEPDdbbbbbbbebkdncwaE9Tg5TmbcuaEtcu7hwdndnaEceSmbcbh8LaQhXinaXhoa5hYcbhCinaoRbbg8AawcFeGgLa8AaL6EaCaEtVhCaocefhoaYcufgYmbkaKaC86bbaXa5fhXaKcefhKa8La5fg8Lcz6mbxdkkcbh8LaQhXinaXhoa5hYcbhCinaoRbbg8AawcFeGgLa8AaL6EaCcetVhCaocefhoaYcufgYmbkaKaC:T9cFe:d9c:c:qj:bw9:9c:q;c1:I1e:d9c:b:c:e1z9:9ca188bbaXa5fhXaKcefhKa8La5fg8Lcz6mbkkcbhoinaKaQaofRbbgC86bbaKaCawcFeG9pfhKaocefgocz9hmbxikkdnaEceSmbinaKcb86bbaKcefhKxbkkinaKcb86bbaKcefhKxbkkaKaX8Pbw83bwaKaX8Pbb83bbaKczfhKka8Kczfg8Ka8J9pgomeaQczfhQagaK9RcK9pmbkkaoTmlaKh3aKTmlkaHcefgHal9hmbkarc;abfaxascufal2falz:wjjjb8Aasamfhma3hoa3mbkcbhwxdkdnagao9RakalfgwcKcaaDEgQawaQ0EgC9pmbcbhwxdkdnawaQ9pmbaocbaCaw9Rgwz:xjjjbawfhokaoarc;adfalz:wjjjbalfhodnaDTmbaoara8Mz:wjjjba8Mfhokaoab9Rhwxekcbhwkarc;qwf8Kjjjjbawk5babaeadaialcdcbyd;i:I:cjbz:bjjjbk9reduaecd4gdaefgicaaica0Eabcj;abae9Uc;WFbGcjdaeca0Egifcufai9Uae2aiadfaicl4cifcd4f2fcefkmbcbabBd;i:I:cjbk;HPeLu8Jjjjjbc;ae9Rgl8Kjjjjbcbhvdnaeaici9UgocHf6mbabcbyd;m:I:cjbgrc;GeV86bbalc;abfcFecjez:xjjjb8Aal9cu83iUal9cu83i8Wal9cu83iyal9cu83iaal9cu83iKal9cu83izal9cu83iwal9cu83ibabaefc9WfhwabcefgDaofhednaiTmbcmcsarcb9kgqEhkcbhxcbhmcbhPcbhscbhzindnaeaw9nmbcbhvxikazcufhvadaPcdtfgHydbhOaHcwfydbhAaHclfydbhCcbhXdndndninalc;abfavcsGcitfgoydlhQdndndnaoydbgoaO9hmbaQaCSmekdnaoaC9hmbaQaA9hmbaXcefhXxekaoaA9hmeaQaO9hmeaXcdfhXkaXc870mdascufhvaHaXcdtgAcxGgoyd:4:G:cjbcdtfydbhQaHaoyd:0:G:cjbcdtfydbhCaHaoyd:W:G:cjbcdtfydbhOcbhodnindnalavcsGcdtfydbaQ9hmbaohXxdkcuhXavcufhvaocefgocz9hmbkkaxaQaxSgvaXce9iaXak9oVgoGfhxdndndncbcsavEaXaoEgvcs9hmbarce9imbaQaQamaQcefamSgvEgmcefSmecmcsavEhvkaDavaAc;WeGV86bbavcs9hmeaQam9Rgvcetavc8F917hvinaecbcjeavcje6EavcFbGV86bbaecefheavcr4gvmbkaQhmxvkcPhvaDaAcPV86bbaQhmkavTmiavak9omicdhocehXazhAxlkavcufhvaXclfgXc;ab9hmbkkdnaHcecdcbaAaxSEaCaxSEcdtgvyd:W:G:cjbcdtfydbgOTaHavyd:0:G:cjbcdtfydbgCceSGaHavyd:4:G:cjbcdtfydbgQcdSGaxcb9hGaqGgLce9hmbal9cu83iUal9cu83i8Wal9cu83iyal9cu83iaal9cu83iKal9cu83izal9cu83iwal9cu83ibcbhxkcbhXascufgvhodnindnalaocsGcdtfydbaC9hmbaXhAxdkcuhAaocufhoaXcefgXcz9hmbkkcbhodnindnalavcsGcdtfydbaQ9hmbaohXxdkcuhXavcufhvaocefgocz9hmbkkaxaOaxSgKfhHdndnaAcm0mbaAcefhAxekcbcsaCaHSgvEhAaHavfhHkdndnaXcm0mbaXcefhXxekcbcsaQaHSgvEhXaHavfhHkc9:cuaKEhYcbhvaXaAcltVg8AcFeGhodndndninavc;q:G:cjbfRbbaoSmeavcefgvcz9hmbxdkkaLaOax9havcm0VVmbaDavc;WeV86bbxekaDaY86bbaea8A86bbaecefhekdnaKmbaOam9Rgvcetavc8F917hvinaecbcjeavcje6EavcFbGV86bbaecefheavcr4gvmbkaOhmkdnaAcs9hmbaCam9Rgvcetavc8F917hvinaecbcjeavcje6EavcFbGV86bbaecefheavcr4gvmbkaChmkdnaXcs9hmbaQam9Rgvcetavc8F917hvinaecbcjeavcje6EavcFbGV86bbaecefheavcr4gvmbkaQhmkalascdtfaOBdbascefcsGhvdndnaAPzbeeeeeeeeeeeeeebekalavcdtfaCBdbascdfcsGhvkdndnaXPzbeeeeeeeeeeeeeebekalavcdtfaQBdbavcefcsGhvkcihoalc;abfazcitfgXaOBdlaXaCBdbazcefcsGhAcdhXavhsaHhxxekcdhoalascdtfaQBdbcehXascefcsGhsazhAkalc;abfaAcitfgvaCBdlavaQBdbalc;abfazaXfcsGcitfgvaQBdlavaOBdbaDcefhDazaofcsGhzaPcifgPai6mbkkdnaeaw9nmbcbhvxekcbhvinaeavfavc;q:G:cjbfRbb86bbavcefgvcz9hmbkaeab9Ravfhvkalc;aef8KjjjjbavkZeeucbhddninadcefgdc8F0meaeceadt0mbkkadcrfcFeGcr9Uci2cdfabci9U2cHfkmbcbabBd;m:I:cjbk:zderu8Jjjjjbcz9Rhlcbhvdnaeaicvf6mbabcbRb;m:I:cjbc;qeV86bbal9cb83iwabcefhvabaefc98fhodnaiTmbcbhecbhrcbhwindnavao6mbcbskadawcdtfydbgDalcwfaraDae9Rgeaec8F91ge7ae9Rc507grcdtfgqydb9Rgec8E91c9:Gaecdt7arVheinavcbcjeaecje6EaecFbGV86bbavcefhvaecr4gembkaqaDBdbaDheawcefgwai9hmbkkdnavao9nmbcbskavcbBbbavab9RclfhvkavkBeeucbhddninadcefgdc8F0meaeceadt0mbkkabadcwfcFeGcr9U2cvfk:dvli99dui99ludnaeTmbcuadcetcuftcu7:Zhvdndncuaicuftcu7:ZgoJbbbZMgr:lJbbb9p9DTmbar:Ohwxekcjjjj94hwkcbhicbhDinalclfIdbgrJbbbbJbbjZalIdbgq:lar:lMalcwfIdbgk:lMgr:varJbbbb9BEgrNhxaqarNhralcxfIdbhqdndnakJbbbb9GTmbaxhkxekJbbjZar:l:tgkak:maxJbbbb9GEhkJbbjZax:l:tgxax:marJbbbb9GEhrkdndnaqJbbj:;aqJbbj:;9GEgxJbbjZaxJbbjZ9FEavNJbbbZJbbb:;aqJbbbb9GEMgq:lJbbb9p9DTmbaq:Ohmxekcjjjj94hmkdndnakJbbj:;akJbbj:;9GEgqJbbjZaqJbbjZ9FEaoNJbbbZJbbb:;akJbbbb9GEMgq:lJbbb9p9DTmbaq:OhPxekcjjjj94hPkdndnarJbbj:;arJbbj:;9GEgqJbbjZaqJbbjZ9FEaoNJbbbZJbbb:;arJbbbb9GEMgr:lJbbb9p9DTmbar:Ohsxekcjjjj94hskdndnadcl9hmbabaDfgzas86bbazcifam86bbazcdfaw86bbazcefaP86bbxekabaifgzas87ebazcofam87ebazclfaw87ebazcdfaP87ebkaicwfhiaDclfhDalczfhlaecufgembkkk;hlld99eud99eudnaeTmbdndncuaicuftcu7:ZgvJbbbZMgo:lJbbb9p9DTmbao:Ohixekcjjjj94hikaic;8FiGhrinabcofcicdalclfIdb:lalIdb:l9EgialcwfIdb:lalaicdtfIdb:l9EEgialcxfIdb:lalaicdtfIdb:l9EEgiarV87ebdndnJbbj:;JbbjZalaicdtfIdbJbbbb9DEgoalaicd7cdtfIdbJ;Zl:1ZNNgwJbbj:;awJbbj:;9GEgDJbbjZaDJbbjZ9FEavNJbbbZJbbb:;awJbbbb9GEMgw:lJbbb9p9DTmbaw:Ohqxekcjjjj94hqkabcdfaq87ebdndnalaicefciGcdtfIdbJ;Zl:1ZNaoNgwJbbj:;awJbbj:;9GEgDJbbjZaDJbbjZ9FEavNJbbbZJbbb:;awJbbbb9GEMgw:lJbbb9p9DTmbaw:Ohqxekcjjjj94hqkabaq87ebdndnaoalaicufciGcdtfIdbJ;Zl:1ZNNgoJbbj:;aoJbbj:;9GEgwJbbjZawJbbjZ9FEavNJbbbZJbbb:;aoJbbbb9GEMgo:lJbbb9p9DTmbao:Ohixekcjjjj94hikabclfai87ebabcwfhbalczfhlaecufgembkkk;Pviwue99eu8Jjjjjbcjd9Rgo8Kjjjjbadcd4hrdndndnavcd9hmbarTmbaohdarhwinadc:CuBdbadclfhdawcufgwmbkaeTmdarcdthDalhqcbhkinaohdaqhwarhxinadadydbgmcbawIdbgP:8cL4cFeGc:cufaPJbbbb9BEgsamas9kEBdbawclfhwadclfhdaxcufgxmbkaqaDfhqakcefgkae9hmbxdkkaeTmekarcdthqavce9hhDcbhkindndndnaDmbarTmdc:CuhwalhdarhxinawcbadIdbgP:8cL4cFeGc:cufaPJbbbb9BEgmawam9kEhwadclfhdaxcufgxmbxdkkdndndndnavPleddbdkarTmlaohdalhwarhxinadcbcbawIdbgP:8cL4cFeGgmc:cufgsasam0EaPJbbbb9BEBdbadclfhdawclfhwaxcufgxmbxikkarTmicbhdarhwinaoadfcbaladfIdbgP:8cL4cFeGgxc8Aaxc8A0Ec:cufaPJbbbb9BEBdbadclfhdawcufgwmbxdkkarTmdkc:CuhwkcbhdarhminawhxdnavceSmbaoadfydbhxkdndnaladfIdbgPcjjj;8iaxai9RcefgxcLt9R::NJbbbZJbbb:;aPJbbbb9GEMgP:lJbbb9p9DTmbaP:Ohsxekcjjjj94hskabadfascFFFrGaxcKtVBdbadclfhdamcufgmmbkkabaqfhbalaqfhlakcefgkae9hmbkkaocjdf8Kjjjjbk:Olveue99iue99iudnaeTmbceaicufthvcuaitcu7:Zhocbhradcl9hhwcbhDindndnalcwfIdbgqJbbbbaqJbbbb9GEgqJbbjZaqJbbjZ9FEaoNJbbbZMgq:lJbbb9p9DTmbaq:Ohixekcjjjj94hikdndnalIdbgqJbbbbaqJbbbb9GEgqJbbjZaqJbbjZ9FEaoNJbbbZMgq:lJbbb9p9DTmbaq:Ohdxekcjjjj94hdkadai9Rcd9TgkaifhidndnalclfIdbgqJbbbbaqJbbbb9GEgqJbbjZaqJbbjZ9FEaoNJbbbZMgq:lJbbb9p9DTmbaq:Ohdxekcjjjj94hdkadai9Rcd9ThddndnalcxfIdbgqJbbbbaqJbbbb9GEgqJbbjZaqJbbjZ9FEaoNJbbbZMgq:lJbbb9p9DTmbaq:Ohxxekcjjjj94hxkadaifhiaxce91avVhxdndnawmbabaDfgmai86bbamcifax86bbamcdfad86bbamcefak86bbxekabarfgmai87ebamcofax87ebamclfad87ebamcdfak87ebkarcwfhraDclfhDalczfhlaecufgembkkk;mqdQui998Jjjjjbc:qd9Rgv8Kjjjjbavc:Sefcbc;Kbz:xjjjb8AdnadTmbaiTmbdndnabaeSmbaehoxekavcuadcdtgradcFFFFi0Ecbyd;q:I:cjbHjjjjbbgoBd:SeavceBd:mdaoaearz:wjjjb8AkavcbBd:Oeav9cb83i:Geavc:Gefaoadaiavc:Sefz:pjjjbavyd:Gehwadci9UgDcbyd;q:I:cjbHjjjjbbheavc:Sefavyd:mdgqcdtfaeBdbavaqcefgrBd:mdaecbaDz:xjjjbhkavc:SefarcdtfcuaicdtaicFFFFi0Ecbyd;q:I:cjbHjjjjbbgxBdbavaqcdfgmBd:mdalc;ebfhPawheaxhrinaralIdbaPaeydbgscwascw6EcdtfIdbMUdbaeclfhearclfhraicufgimbkavc:SefamcdtfcuaDcdtadcFFFF970Ecbyd;q:I:cjbHjjjjbbgmBdbdnadci6mbaoheamhraDhiinaraxaeydbcdtfIdbaxaeclfydbcdtfIdbMaxaecwfydbcdtfIdbMUdbaecxfhearclfhraicufgimbkkaqcifhzalc;ebfhHavc;qbfhOavheavyd:KehAavyd:OehCcbhscbhrcbhXcehQinaehLaoarcx2fgKydbhPaKclfydbhdabaXcx2fgecwfaKcwfydbgYBdbaeclfadBdbaeaPBdbakarfce86bbaOaYBdwaOadBdlaOaPBdbamarcdtfcbBdbcih8AdnasTmbaLhiinaOa8AcdtfaiydbgeBdba8AaeaY9haeaP9haead9hGGfh8AaiclfhiascufgsmbkkaXcefhXcbhsinaCaAaKascdtfydbcdtgifydbcdtfgYheawaifgdydbgPhidnaPTmbdninaeydbarSmeaeclfheaicufgiTmdxbkkaeaYaPcdtfc98fydbBdbadadydbcufBdbkascefgsci9hmbkdndndna8ATmbcuhrJbbbbhEcbhdavyd:KehYavyd:OehKindnawaOadcdtfydbcdtgsfydbgeTmbaxasfgiIdbh3aialcuadadcs0EcdtfclfIdbaHaecwaecw6EcdtfIdbMg5Udba5a3:th5aecdthiaKaYasfydbcdtfheinamaeydbgscdtfgPa5aPIdbMg3Udba3aEaEa39DgPEhEasaraPEhraeclfheaic98fgimbkkadcefgda8A9hmbkarcu9hmekaQaD9pmeindnakaQfRbbmbaQhrxdkaDaQcefgQ9hmbxdkka8Acza8Acz6EhsaOheaLhOarcu9hmekkazTmbaqcdtavc:Seffcwfheinaeydbcbyd;u:I:cjbH:bjjjbbaec98fheazcufgzmbkkavc:qdf8Kjjjjbk:0leoucuaicdtgvaicFFFFi0Egocbyd;q:I:cjbHjjjjbbhralalyd9GgwcdtfarBdbalawcefBd9GabarBdbaocbyd;q:I:cjbHjjjjbbhralalyd9GgocdtfarBdbalaocefBd9GabarBdlcuadcdtadcFFFFi0Ecbyd;q:I:cjbHjjjjbbhralalyd9GgocdtfarBdbalaocefBd9GabarBdwabydbcbavz:xjjjb8AabydbhraehladhvinaralydbcdtfgoaoydbcefBdbalclfhlavcufgvmbkcbhvabydlglhoarhwaihDinaoavBdbaoclfhoawydbavfhvawclfhwaDcufgDmbkadci9Uhqdnadcd9nmbabydwhocbhvinaecwfydbhwaeclfydbhDalaeydbcdtfgbabydbgbcefBdbaoabcdtfavBdbalaDcdtfgDaDydbgDcefBdbaoaDcdtfavBdbalawcdtfgwawydbgwcefBdbaoawcdtfavBdbaecxfheaqavcefgv9hmbkkinalalydbarydb9RBdbarclfhralclfhlaicufgimbkkQbabaeadaic;G:G:cjbz:ojjjbkQbabaeadaic;i:H:cjbz:ojjjbk9DeeuabcFeaicdtz:xjjjbhlcbhbdnadTmbindnalaeydbcdtfgiydbcu9hmbaiabBdbabcefhbkaeclfheadcufgdmbkkabk:3vioud9:du8Jjjjjbc;Wa9Rgl8Kjjjjbcbhvalcxfcbc;Kbz:xjjjb8AalcuadcitgoadcFFFFe0Ecbyd;q:I:cjbHjjjjbbgrBdxalceBd2araeadaicezNjjjbalcuaoadcjjjjoGEcbyd;q:I:cjbHjjjjbbgwBdzadcdthednadTmbabhiinaiavBdbaiclfhiadavcefgv9hmbkkawaefhDalabBdwalawBdl9cbhqindnadTmbaq9cq9:hkarhvaDhiadheinaiav8Pibak1:NcFrG87ebavcwfhvaicdfhiaecufgembkkalclfaq:NceGcdtfydbhxalclfaq9ce98gq:NceGcdtfydbhmalc;Wbfcbcjaz:xjjjb8AaDhvadhidnadTmbinalc;Wbfav8VebcdtfgeaeydbcefBdbavcdfhvaicufgimbkkcbhvcbhiinalc;WbfavfgeydbhoaeaiBdbaoaifhiavclfgvcja9hmbkadhvdndnadTmbinalc;WbfaDamydbgicetf8VebcdtfgeaeydbgecefBdbaxaecdtfaiBdbamclfhmavcufgvmbkaq9cv9smdcbhvinabawydbcdtfavBdbawclfhwadavcefgv9hmbxdkkaq9cv9smekkcwhvcbhiinalcxfavfc98fydbcbyd;u:I:cjbH:bjjjbbaiceGheclhvcehiaeTmbkalc;Waf8Kjjjjbk:Awliuo99iud9:cbhv8Jjjjjbca9Rgocbyd:4:I:cjbBdKaocb8Pd:W:I:cjb83izaocbyd;e:I:cjbBdwaocb8Pd:8:I:cjb83ibaicd4hrdndnadmbJFFuFhwJFFuuhDJFFuuhqJFFuFhkJFFuuhxJFFuFhmxekarcdthPaehsincbhiinaoczfaifgzasaifIdbgwazIdbgDaDaw9EEUdbaoaifgzawazIdbgDaDaw9DEUdbaiclfgicx9hmbkasaPfhsavcefgvad9hmbkaoIdKhDaoIdwhwaoIdChqaoIdlhkaoIdzhxaoIdbhmkdnadTmbJbbbbJbFu9hJbbbbamax:tgmamJbbbb9DEgmakaq:tgkakam9DEgkawaD:tgwawak9DEgw:vawJbbbb9BEhwdnalmbarcdthoindndnaeclfIdbaq:tawNJbbbZMgk:lJbbb9p9DTmbak:Ohixekcjjjj94hikai:S9cC:ghHdndnaeIdbax:tawNJbbbZMgk:lJbbb9p9DTmbak:Ohixekcjjjj94hikaHai:S:ehHdndnaecwfIdbaD:tawNJbbbZMgk:lJbbb9p9DTmbak:Ohixekcjjjj94hikabaHai:T9cy:g:e83ibaeaofheabcwfhbadcufgdmbxdkkarcdthoindndnaeIdbax:tawNJbbbZMgk:lJbbb9p9DTmbak:Ohixekcjjjj94hikai:SgH9ca:gaH9cz:g9cjjj;4s:d:eaH9cFe:d:e9cF:bj;4:pj;ar:d9c:bd9:9c:p;G:d;4j:E;ar:d9cH9:9c;d;H:W:y:m:g;d;Hb:d9cv9:9c;j:KM;j:KM;j:Kd:dhOdndnaeclfIdbaq:tawNJbbbZMgk:lJbbb9p9DTmbak:Ohixekcjjjj94hikai:SgH9ca:gaH9cz:g9cjjj;4s:d:eaH9cFe:d:e9cF:bj;4:pj;ar:d9c:bd9:9c:p;G:d;4j:E;ar:d9cH9:9c;d;H:W:y:m:g;d;Hb:d9cq9:9cM;j:KM;j:KM;jl:daO:ehOdndnaecwfIdbaD:tawNJbbbZMgk:lJbbb9p9DTmbak:Ohixekcjjjj94hikabaOai:SgH9ca:gaH9cz:g9cjjj;4s:d:eaH9cFe:d:e9cF:bj;4:pj;ar:d9c:bd9:9c:p;G:d;4j:E;ar:d9cH9:9c;d;H:W:y:m:g;d;Hb:d9cC9:9c:KM;j:KM;j:KMD:d:e83ibaeaofheabcwfhbadcufgdmbkkk9teiucbcbyd;y:I:cjbgeabcifc98GfgbBd;y:I:cjbdndnabZbcztgd9nmbcuhiabad9RcFFifcz4nbcuSmekaehikaik;LeeeudndnaeabVciGTmbabhixekdndnadcz9pmbabhixekabhiinaiaeydbBdbaiclfaeclfydbBdbaicwfaecwfydbBdbaicxfaecxfydbBdbaeczfheaiczfhiadc9Wfgdcs0mbkkadcl6mbinaiaeydbBdbaeclfheaiclfhiadc98fgdci0mbkkdnadTmbinaiaeRbb86bbaicefhiaecefheadcufgdmbkkabk;aeedudndnabciGTmbabhixekaecFeGc:b:c:ew2hldndnadcz9pmbabhixekabhiinaialBdbaicxfalBdbaicwfalBdbaiclfalBdbaiczfhiadc9Wfgdcs0mbkkadcl6mbinaialBdbaiclfhiadc98fgdci0mbkkdnadTmbinaiae86bbaicefhiadcufgdmbkkabk9teiucbcbyd;y:I:cjbgeabcrfc94GfgbBd;y:I:cjbdndnabZbcztgd9nmbcuhiabad9RcFFifcz4nbcuSmekaehikaikTeeucbabcbyd;y:I:cjbge9Rcifc98GaefgbBd;y:I:cjbdnabZbcztge9nmbabae9RcFFifcz4nb8Akkk;Sddbcj:Gdk;idbbbbdbbblbbbwbbbbbbbebbbdbbblbbbwbbbbbbbbbbbbbbbbbbbebbbdbbbbbbbebbbbbbbbbbbbbbbb4:h9w9N94:P:gW:j9O:ye9Pbbbbbb:l29hZ;69:9kZ;N;76Z;rg97Z;z;o9xZ8J;B85Z;:;u9yZ;b;k9HZ:2;Z9DZ9e:l9mZ59A8KZ:r;T3Z:A:zYZ79OHZ;j4::8::Y:D9V8:bbbb9s:49:Z8R:hBZ9M9M;M8:L;z;o8:;8:PG89q;x:J878R:hQ8::M:B;e87bbbbbbjZbbjZbbjZ:E;V;N8::Y:DsZ9i;H;68:xd;R8:;h0838:;W:NoZbbbb:WV9O8:uf888:9i;H;68:9c9G;L89;n;m9m89;D8Ko8:bbbbf:8tZ9m836ZS:2AZL;zPZZ818EZ9e:lxZ;U98F8:819E;68:FFuuFFuuFFuuFFuFFFuFFFuFbc;i:IdkCebbbebbbebbbdbbb9G:rbb",t=new Uint8Array([32,0,65,2,1,106,34,33,3,128,11,4,13,64,6,253,10,7,15,116,127,5,8,12,40,16,19,54,20,9,27,255,113,17,42,67,24,23,146,148,18,14,22,45,70,69,56,114,101,21,25,63,75,136,108,28,118,29,73,115]);if(typeof WebAssembly!="object")return{supported:!1};var n,i=WebAssembly.instantiate(o(e),{}).then(function(A){n=A.instance,n.exports.__wasm_call_ctors(),n.exports.meshopt_encodeVertexVersion(1),n.exports.meshopt_encodeIndexVersion(1)});function o(A){for(var f=new Uint8Array(A.length),b=0;b<A.length;++b){var C=A.charCodeAt(b);f[b]=C>96?C-97:C>64?C-39:C+4}for(var T=0,b=0;b<A.length;++b)f[T++]=f[b]<60?t[f[b]]:(f[b]-60)*64+f[++b];return f.buffer.slice(0,T)}function r(A){if(!A)throw new Error("Assertion failed")}function s(A){return new Uint8Array(A.buffer,A.byteOffset,A.byteLength)}function a(A,f,b,C){var T=n.exports.sbrk,E=T(f.length*4),S=T(b*4),I=new Uint8Array(n.exports.memory.buffer),R=s(f);I.set(R,E),C&&C(E,E,f.length,b);var V=A(S,E,f.length,b);I=new Uint8Array(n.exports.memory.buffer);var W=new Uint32Array(b);new Uint8Array(W.buffer).set(I.subarray(S,S+b*4)),R.set(I.subarray(E,E+f.length*4)),T(E-T(0));for(var B=0;B<f.length;++B)f[B]=W[f[B]];return[W,V]}function c(A,f,b,C){var T=n.exports.sbrk,E=T(b*4),S=T(b*C),I=new Uint8Array(n.exports.memory.buffer);I.set(s(f),S),A(E,S,b,C),I=new Uint8Array(n.exports.memory.buffer);var R=new Uint32Array(b);return new Uint8Array(R.buffer).set(I.subarray(E,E+b*4)),T(E-T(0)),R}function d(A,f,b,C,T,E,S){var I=n.exports.sbrk,R=I(f),V=I(C*T),W=new Uint8Array(n.exports.memory.buffer);W.set(s(b),V);var B=A(R,f,V,C,T,E,S),N=new Uint8Array(B);return N.set(W.subarray(R,R+B)),I(R-I(0)),N}function u(A){for(var f=0,b=0;b<A.length;++b){var C=A[b];f=f<C?C:f}return f}function h(A,f){if(r(f==2||f==4),f==4)return new Uint32Array(A.buffer,A.byteOffset,A.byteLength/4);var b=new Uint16Array(A.buffer,A.byteOffset,A.byteLength/2);return new Uint32Array(b)}function p(A,f,b,C,T,E,S){var I=n.exports.sbrk,R=I(b*C),V=I(b*E),W=new Uint8Array(n.exports.memory.buffer);W.set(s(f),V),A(R,b,C,T,V,S);var B=new Uint8Array(b*C);return B.set(W.subarray(R,R+b*C)),I(R-I(0)),B}return{ready:i,supported:!0,reorderMesh:function(A,f,b){var C=f?b?n.exports.meshopt_optimizeVertexCacheStrip:n.exports.meshopt_optimizeVertexCache:void 0;return a(n.exports.meshopt_optimizeVertexFetchRemap,A,u(A)+1,C)},reorderPoints:function(A,f){return r(A instanceof Float32Array),r(A.length%f==0),r(f>=3),c(n.exports.meshopt_spatialSortRemap,A,A.length/f,f*4)},encodeVertexBuffer:function(A,f,b){r(b>0&&b<=256),r(b%4==0);var C=n.exports.meshopt_encodeVertexBufferBound(f,b);return d(n.exports.meshopt_encodeVertexBuffer,C,A,f,b)},encodeVertexBufferLevel:function(A,f,b,C,T){r(b>0&&b<=256),r(b%4==0),r(C>=0&&C<=3),r(T===void 0||T==0||T==1);var E=n.exports.meshopt_encodeVertexBufferBound(f,b);return d(n.exports.meshopt_encodeVertexBufferLevel,E,A,f,b,C,T===void 0?-1:T)},encodeIndexBuffer:function(A,f,b){r(b==2||b==4),r(f%3==0);var C=h(A,b),T=n.exports.meshopt_encodeIndexBufferBound(f,u(C)+1);return d(n.exports.meshopt_encodeIndexBuffer,T,C,f,4)},encodeIndexSequence:function(A,f,b){r(b==2||b==4);var C=h(A,b),T=n.exports.meshopt_encodeIndexSequenceBound(f,u(C)+1);return d(n.exports.meshopt_encodeIndexSequence,T,C,f,4)},encodeGltfBuffer:function(A,f,b,C,T){var E={ATTRIBUTES:this.encodeVertexBufferLevel,TRIANGLES:this.encodeIndexBuffer,INDICES:this.encodeIndexSequence};return r(E[C]),E[C](A,f,b,2,T===void 0?0:T)},encodeFilterOct:function(A,f,b,C){return r(b==4||b==8),r(C>=2&&C<=16),p(n.exports.meshopt_encodeFilterOct,A,f,b,C,16)},encodeFilterQuat:function(A,f,b,C){return r(b==8),r(C>=4&&C<=16),p(n.exports.meshopt_encodeFilterQuat,A,f,b,C,16)},encodeFilterExp:function(A,f,b,C,T){r(b>0&&b%4==0),r(C>=1&&C<=24);var E={Separate:0,SharedVector:1,SharedComponent:2,Clamped:3};return p(n.exports.meshopt_encodeFilterExp,A,f,b,C,b,T?E[T]:1)},encodeFilterColor:function(A,f,b,C){return r(b==4||b==8),r(C>=2&&C<=16),p(n.exports.meshopt_encodeFilterColor,A,f,b,C,16)}}})();var Ubn=y(x(),1),p0=(function(){var e="b9H79Tebbbe8Fv9Gbb9Gvuuuuueu9Giuuub9Geueu9Giuuueuixkbeeeddddillviebeoweuecj:Gdkr;Neqo9TW9T9VV95dbH9F9F939H79T9F9J9H229F9Jt9VV7bb8A9TW79O9V9Wt9F9KW9J9V9KW9wWVtW949c919M9MWVbeY9TW79O9V9Wt9F9KW9J9V9KW69U9KW949c919M9MWVbdE9TW79O9V9Wt9F9KW9J9V9KW69U9KW949tWG91W9U9JWbiL9TW79O9V9Wt9F9KW9J9V9KWS9P2tWV9p9JtblK9TW79O9V9Wt9F9KW9J9V9KWS9P2tWV9r919HtbvL9TW79O9V9Wt9F9KW9J9V9KWS9P2tWVT949WboY9TW79O9V9Wt9F9KW9J9V9KWS9P2tWVJ9V29VVbrl79IV9Rbwq:VZkdbk:XYi5ud9:du8Jjjjjbcj;kb9Rgv8Kjjjjbc9:hodnalTmbcuhoaiRbbgrc;WeGc:Ge9hmbarcsGgwce0mbc9:hoalcufadcd4cbawEgDadfgrcKcaawEgqaraq0Egk6mbaicefhxcj;abad9Uc;WFbGcjdadca0EhmaialfgPar9Rgoadfhsavaoadz:jjjjbgzceVhHcbhOdndninaeaO9nmeaPax9RaD6mdamaeaO9RaOamfgoae6EgAcsfglc9WGhCabaOad2fhXaAcethQaxaDfhiaOaeaoaeao6E9RhLalcl4cifcd4hKazcj;cbfaAfhYcbh8AazcjdfhEaHh3incbh5dnawTmbaxa8Acd4fRbbh5kcbh8Eazcj;cbfhqinaih8Fdndndndna5a8Ecet4ciGgoc9:fPdebdkaPa8F9RaA6mrazcj;cbfa8EaA2fa8FaAz:jjjjb8Aa8FaAfhixdkazcj;cbfa8EaA2fcbaAz:kjjjb8Aa8FhixekaPa8F9RaK6mva8FaKfhidnaCTmbaPai9RcK6mbaocdtc:q:G:cjbfcj:G:cjbawEhaczhrcbhlinargoc9Wfghaqfhrdndndndndndnaaa8Fahco4fRbbalcoG4ciGcdtfydbPDbedvivvvlvkar9cb83bwar9cb83bbxlkarcbaiRbdai8Xbb9c:c:qj:bw9:9c:q;c1:I1e:d9c:b:c:e1z9:gg9cjjjjjz:dg8J9qE86bbaqaofgrcGfcbaicdfa8J9c8N1:NfghRbbag9cjjjjjw:dg8J9qE86bbarcVfcbaha8J9c8M1:NfghRbbag9cjjjjjl:dg8J9qE86bbarc7fcbaha8J9c8L1:NfghRbbag9cjjjjjd:dg8J9qE86bbarctfcbaha8J9c8K1:NfghRbbag9cjjjjje:dg8J9qE86bbarc91fcbaha8J9c8J1:NfghRbbag9cjjjj;ab:dg8J9qE86bbarc4fcbaha8J9cg1:NfghRbbag9cjjjja:dg8J9qE86bbarc93fcbaha8J9ch1:NfghRbbag9cjjjjz:dgg9qE86bbarc94fcbahag9ca1:NfghRbbai8Xbe9c:c:qj:bw9:9c:q;c1:I1e:d9c:b:c:e1z9:gg9cjjjjjz:dg8J9qE86bbarc95fcbaha8J9c8N1:NfgiRbbag9cjjjjjw:dg8J9qE86bbarc96fcbaia8J9c8M1:NfgiRbbag9cjjjjjl:dg8J9qE86bbarc97fcbaia8J9c8L1:NfgiRbbag9cjjjjjd:dg8J9qE86bbarc98fcbaia8J9c8K1:NfgiRbbag9cjjjjje:dg8J9qE86bbarc99fcbaia8J9c8J1:NfgiRbbag9cjjjj;ab:dg8J9qE86bbarc9:fcbaia8J9cg1:NfgiRbbag9cjjjja:dg8J9qE86bbarcufcbaia8J9ch1:NfgiRbbag9cjjjjz:dgg9qE86bbaiag9ca1:NfhixikaraiRblaiRbbghco4g8Ka8KciSg8KE86bbaqaofgrcGfaiclfa8Kfg8KRbbahcl4ciGg8La8LciSg8LE86bbarcVfa8Ka8Lfg8KRbbahcd4ciGg8La8LciSg8LE86bbarc7fa8Ka8Lfg8KRbbahciGghahciSghE86bbarctfa8Kahfg8KRbbaiRbeghco4g8La8LciSg8LE86bbarc91fa8Ka8Lfg8KRbbahcl4ciGg8La8LciSg8LE86bbarc4fa8Ka8Lfg8KRbbahcd4ciGg8La8LciSg8LE86bbarc93fa8Ka8Lfg8KRbbahciGghahciSghE86bbarc94fa8Kahfg8KRbbaiRbdghco4g8La8LciSg8LE86bbarc95fa8Ka8Lfg8KRbbahcl4ciGg8La8LciSg8LE86bbarc96fa8Ka8Lfg8KRbbahcd4ciGg8La8LciSg8LE86bbarc97fa8Ka8Lfg8KRbbahciGghahciSghE86bbarc98fa8KahfghRbbaiRbigico4g8Ka8KciSg8KE86bbarc99faha8KfghRbbaicl4ciGg8Ka8KciSg8KE86bbarc9:faha8KfghRbbaicd4ciGg8Ka8KciSg8KE86bbarcufaha8KfgrRbbaiciGgiaiciSgiE86bbaraifhixdkaraiRbwaiRbbghcl4g8Ka8KcsSg8KE86bbaqaofgrcGfaicwfa8Kfg8KRbbahcsGghahcsSghE86bbarcVfa8KahfghRbbaiRbeg8Kcl4g8La8LcsSg8LE86bbarc7faha8LfghRbba8KcsGg8Ka8KcsSg8KE86bbarctfaha8KfghRbbaiRbdg8Kcl4g8La8LcsSg8LE86bbarc91faha8LfghRbba8KcsGg8Ka8KcsSg8KE86bbarc4faha8KfghRbbaiRbig8Kcl4g8La8LcsSg8LE86bbarc93faha8LfghRbba8KcsGg8Ka8KcsSg8KE86bbarc94faha8KfghRbbaiRblg8Kcl4g8La8LcsSg8LE86bbarc95faha8LfghRbba8KcsGg8Ka8KcsSg8KE86bbarc96faha8KfghRbbaiRbvg8Kcl4g8La8LcsSg8LE86bbarc97faha8LfghRbba8KcsGg8Ka8KcsSg8KE86bbarc98faha8KfghRbbaiRbog8Kcl4g8La8LcsSg8LE86bbarc99faha8LfghRbba8KcsGg8Ka8KcsSg8KE86bbarc9:faha8KfghRbbaiRbrgicl4g8Ka8KcsSg8KE86bbarcufaha8KfgrRbbaicsGgiaicsSgiE86bbaraifhixekarai8Pbw83bwarai8Pbb83bbaiczfhikdnaoaC9pmbalcdfhlaoczfhraPai9RcL0mekkaoaC6moaimexokaCmva8FTmvkaqaAfhqa8Ecefg8Ecl9hmbkdndndndnawTmbasa8Acd4fRbbgociGPlbedrbkaATmdaza8Afh8Fazcj;cbfhhcbh8EaEhaina8FRbbhraahocbhlinaoahalfRbbgqce4cbaqceG9R7arfgr86bbaoadfhoaAalcefgl9hmbkaacefhaa8Fcefh8FahaAfhha8Ecefg8Ecl9hmbxikkaATmeaza8Afhaazcj;cbfhhcbhoceh8EaYh8FinaEaofhlaa8Vbbhrcbhoinala8FaofRbbcwtahaofRbbgqVc;:FiGce4cbaqceG9R7arfgr87bbaladfhlaLaocefgofmbka8FaQfh8FcdhoaacdfhaahaQfhha8EceGhlcbh8EalmbxdkkaATmbaocl4h8Eaza8AfRbbhqcwhoa3hlinalRbbaotaqVhqalcefhlaocwfgoca9hmbkcbhhaEh8FaYhainazcj;cbfahfRbbhrcwhoaahlinalRbbaotarVhralaAfhlaocwfgoca9hmbkara8E94aq7hqcbhoa8Fhlinalaqao486bbalcefhlaocwfgoca9hmbka8Fadfh8FaacefhaahcefghaA9hmbkkaEclfhEa3clfh3a8Aclfg8Aad6mbkaXazcjdfaAad2z:jjjjb8AazazcjdfaAcufad2fadz:jjjjb8AaAaOfhOaihxaimbkc9:hoxdkcbc99aPax9RakSEhoxekc9:hokavcj;kbf8Kjjjjbaok:ysezu8Jjjjjbc;ae9Rgv8Kjjjjbc9:hodnalaeci9UgrcHf6mbcuhoaiRbbgwc;WeGc;Ge9hmbawcsGgDce0mbavc;abfcFecjez:kjjjb8Aav9cu83iUav9cu83i8Wav9cu83iyav9cu83iaav9cu83iKav9cu83izav9cu83iwav9cu83ibaialfc9WfhqaicefgwarfhldnaeTmbcmcsaDceSEhkcbhxcbhmcbhrcbhicbhoindnalaq9nmbc9:hoxikdndnawRbbgDc;Ve0mbavc;abfaoaDcu7gPcl4fcsGcitfgsydlhzasydbhHdndnaDcsGgsak9pmbavaiaPfcsGcdtfydbaxasEhDaxasTgOfhxxekdndnascsSmbcehOasc987asamffcefhDxekalcefhDal8SbbgscFeGhPdndnascu9mmbaDhlxekalcvfhlaPcFbGhPcrhsdninaD8SbbgOcFbGastaPVhPaOcu9kmeaDcefhDascrfgsc8J9hmbxdkkaDcefhlkcehOaPce4cbaPceG9R7amfhDkaDhmkavc;abfaocitfgsaDBdbasazBdlavaicdtfaDBdbavc;abfaocefcsGcitfgsaHBdbasaDBdlaocdfhoaOaifhidnadcd9hmbabarcetfgsaH87ebasclfaD87ebascdfaz87ebxdkabarcdtfgsaHBdbascwfaDBdbasclfazBdbxekdnaDcpe0mbavaiaqaDcsGfRbbgscl4gP9RcsGcdtfydbaxcefgOaPEhDavaias9RcsGcdtfydbaOaPTgzfgOascsGgPEhsaPThPdndnadcd9hmbabarcetfgHax87ebaHclfas87ebaHcdfaD87ebxekabarcdtfgHaxBdbaHcwfasBdbaHclfaDBdbkavaicdtfaxBdbavc;abfaocitfgHaDBdbaHaxBdlavaicefgicsGcdtfaDBdbavc;abfaocefcsGcitfgHasBdbaHaDBdlavaiazfgicsGcdtfasBdbavc;abfaocdfcsGcitfgDaxBdbaDasBdlaocifhoaiaPfhiaOaPfhxxekaxcbalRbbgsEgHaDc;:eSgDfhOascsGhAdndnascl4gCmbaOcefhzxekaOhzavaiaC9RcsGcdtfydbhOkdndnaAmbazcefhxxekazhxavaias9RcsGcdtfydbhzkdndnaDTmbalcefhDxekalcdfhDal8SbegPcFeGhsdnaPcu9kmbalcofhHascFbGhscrhldninaD8SbbgPcFbGaltasVhsaPcu9kmeaDcefhDalcrfglc8J9hmbkaHhDxekaDcefhDkasce4cbasceG9R7amfgmhHkdndnaCcsSmbaDhsxekaDcefhsaD8SbbglcFeGhPdnalcu9kmbaDcvfhOaPcFbGhPcrhldninas8SbbgDcFbGaltaPVhPaDcu9kmeascefhsalcrfglc8J9hmbkaOhsxekascefhskaPce4cbaPceG9R7amfgmhOkdndnaAcsSmbashlxekascefhlas8SbbgDcFeGhPdnaDcu9kmbascvfhzaPcFbGhPcrhDdninal8SbbgscFbGaDtaPVhPascu9kmealcefhlaDcrfgDc8J9hmbkazhlxekalcefhlkaPce4cbaPceG9R7amfgmhzkdndnadcd9hmbabarcetfgDaH87ebaDclfaz87ebaDcdfaO87ebxekabarcdtfgDaHBdbaDcwfazBdbaDclfaOBdbkavc;abfaocitfgDaOBdbaDaHBdlavaicdtfaHBdbavc;abfaocefcsGcitfgDazBdbaDaOBdlavaicefgicsGcdtfaOBdbavc;abfaocdfcsGcitfgDaHBdbaDazBdlavaiaCTaCcsSVfgicsGcdtfazBdbaiaATaAcsSVfhiaocifhokawcefhwaocsGhoaicsGhiarcifgrae6mbkkcbc99alaqSEhokavc;aef8Kjjjjbaok:clevu8Jjjjjbcz9Rhvdnalaecvf9pmbc9:skdnaiRbbc;:eGc;qeSmbcuskav9cb83iwaicefhoaialfc98fhrdnaeTmbdnadcdSmbcbhwindnaoar6mbc9:skaocefhlao8SbbgicFeGhddndnaicu9mmbalhoxekaocvfhoadcFbGhdcrhidninal8SbbgDcFbGaitadVhdaDcu9kmealcefhlaicrfgic8J9hmbxdkkalcefhokabawcdtfadc8Etc8F91adcd47avcwfadceGcdtVglydbfgiBdbalaiBdbawcefgwae9hmbxdkkcbhwindnaoar6mbc9:skaocefhlao8SbbgicFeGhddndnaicu9mmbalhoxekaocvfhoadcFbGhdcrhidninal8SbbgDcFbGaitadVhdaDcu9kmealcefhlaicrfgic8J9hmbxdkkalcefhokabawcetfadc8Etc8F91adcd47avcwfadceGcdtVglydbfgi87ebalaiBdbawcefgwae9hmbkkcbc99aoarSEk:Lvoeue99dud99eud99dndnadcl9hmbaeTmeindndnabcdfgd8Sbb:Yab8Sbbgi:Ygl:l:tabcefgv8Sbbgo:Ygr:l:tgwJbb;:9cawawNJbbbbawawJbbbb9GgDEgq:mgkaqaicb9iEalMgwawNakaqaocb9iEarMgqaqNMM:r:vglNJbbbZJbbb:;aDEMgr:lJbbb9p9DTmbar:Ohixekcjjjj94hikadai86bbdndnaqalNJbbbZJbbb:;aqJbbbb9GEMgq:lJbbb9p9DTmbaq:Ohdxekcjjjj94hdkavad86bbdndnawalNJbbbZJbbb:;awJbbbb9GEMgw:lJbbb9p9DTmbaw:Ohdxekcjjjj94hdkabad86bbabclfhbaecufgembxdkkaeTmbindndnabclfgd8Ueb:Yab8Uebgi:Ygl:l:tabcdfgv8Uebgo:Ygr:l:tgwJb;:FSawawNJbbbbawawJbbbb9GgDEgq:mgkaqaicb9iEalMgwawNakaqaocb9iEarMgqaqNMM:r:vglNJbbbZJbbb:;aDEMgr:lJbbb9p9DTmbar:Ohixekcjjjj94hikadai87ebdndnaqalNJbbbZJbbb:;aqJbbbb9GEMgq:lJbbb9p9DTmbaq:Ohdxekcjjjj94hdkavad87ebdndnawalNJbbbZJbbb:;awJbbbb9GEMgw:lJbbb9p9DTmbaw:Ohdxekcjjjj94hdkabad87ebabcwfhbaecufgembkkk:4ioiue99dud99dud99dnaeTmbcbhiabhlindndnal8Uebgv:YgoJ:ji:1Salcof8UebgrciVgw:Y:vgDNJbbbZJbbb:;avcu9kEMgq:lJbbb9p9DTmbaq:Ohkxekcjjjj94hkkalclf8Uebhvalcdf8UebhxalarcefciGcetfak87ebdndnax:YgqaDNJbbbZJbbb:;axcu9kEMgm:lJbbb9p9DTmbam:Ohxxekcjjjj94hxkabaiarciGgkfcd7cetfax87ebdndnav:YgmaDNJbbbZJbbb:;avcu9kEMgP:lJbbb9p9DTmbaP:Ohvxekcjjjj94hvkalarcufciGcetfav87ebdndnawaw2:ZgPaPMaoaoN:taqaqN:tamamN:tgoJbbbbaoJbbbb9GE:raDNJbbbZMgD:lJbbb9p9DTmbaD:Ohrxekcjjjj94hrkalakcetfar87ebalcwfhlaiclfhiaecufgembkkk9mbdnadcd4ae2gdTmbinababydbgecwtcw91:Yaece91cjjj98Gcjjj;8if::NUdbabclfhbadcufgdmbkkk:Tvirud99eudndnadcl9hmbaeTmeindndnabRbbgiabcefgl8Sbbgvabcdfgo8Sbbgrf9R:YJbbuJabcifgwRbbgdce4adVgDcd4aDVgDcl4aDVgD:Z:vgqNJbbbZMgk:lJbbb9p9DTmbak:Ohxxekcjjjj94hxkaoax86bbdndnaraif:YaqNJbbbZMgk:lJbbb9p9DTmbak:Ohoxekcjjjj94hokalao86bbdndnavaifar9R:YaqNJbbbZMgk:lJbbb9p9DTmbak:Ohixekcjjjj94hikabai86bbdndnaDadcetGadceGV:ZaqNJbbbZMgq:lJbbb9p9DTmbaq:Ohdxekcjjjj94hdkawad86bbabclfhbaecufgembxdkkaeTmbindndnab8Vebgiabcdfgl8Uebgvabclfgo8Uebgrf9R:YJbFu9habcofgw8Vebgdce4adVgDcd4aDVgDcl4aDVgDcw4aDVgD:Z:vgqNJbbbZMgk:lJbbb9p9DTmbak:Ohxxekcjjjj94hxkaoax87ebdndnaraif:YaqNJbbbZMgk:lJbbb9p9DTmbak:Ohoxekcjjjj94hokalao87ebdndnavaifar9R:YaqNJbbbZMgk:lJbbb9p9DTmbak:Ohixekcjjjj94hikabai87ebdndnaDadcetGadceGV:ZaqNJbbbZMgq:lJbbb9p9DTmbaq:Ohdxekcjjjj94hdkawad87ebabcwfhbaecufgembkkk9teiucbcbyd:K:G:cjbgeabcifc98GfgbBd:K:G:cjbdndnabZbcztgd9nmbcuhiabad9RcFFifcz4nbcuSmekaehikaik;LeeeudndnaeabVciGTmbabhixekdndnadcz9pmbabhixekabhiinaiaeydbBdbaiclfaeclfydbBdbaicwfaecwfydbBdbaicxfaecxfydbBdbaeczfheaiczfhiadc9Wfgdcs0mbkkadcl6mbinaiaeydbBdbaeclfheaiclfhiadc98fgdci0mbkkdnadTmbinaiaeRbb86bbaicefhiaecefheadcufgdmbkkabk;aeedudndnabciGTmbabhixekaecFeGc:b:c:ew2hldndnadcz9pmbabhixekabhiinaialBdbaicxfalBdbaicwfalBdbaiclfalBdbaiczfhiadc9Wfgdcs0mbkkadcl6mbinaialBdbaiclfhiadc98fgdci0mbkkdnadTmbinaiae86bbaicefhiadcufgdmbkkabkk83dbcj:Gdk8Kbbbbdbbblbbbwbbbbbbbebbbdbbblbbbwbbbbc:K:Gdkl8W:qbb",t="b9H79TebbbeKl9Gbb9Gvuuuuueu9Giuuub9Geueuixkbbebeeddddilve9Weeeviebeoweuecj:Gdkr;Neqo9TW9T9VV95dbH9F9F939H79T9F9J9H229F9Jt9VV7bb8A9TW79O9V9Wt9F9KW9J9V9KW9wWVtW949c919M9MWVbdY9TW79O9V9Wt9F9KW9J9V9KW69U9KW949c919M9MWVblE9TW79O9V9Wt9F9KW9J9V9KW69U9KW949tWG91W9U9JWbvL9TW79O9V9Wt9F9KW9J9V9KWS9P2tWV9p9JtboK9TW79O9V9Wt9F9KW9J9V9KWS9P2tWV9r919HtbrL9TW79O9V9Wt9F9KW9J9V9KWS9P2tWVT949WbwY9TW79O9V9Wt9F9KW9J9V9KWS9P2tWVJ9V29VVbDl79IV9Rbqq:W9Dklbzik94evu8Jjjjjbcz9Rhbcbheincbhdcbhiinabcwfadfaicjuaead4ceGglE86bbaialfhiadcefgdcw9hmbkaeai86b:q:W:cjbaecitab8Piw83i:q:G:cjbaecefgecjd9hmbkk:JBl8Aud97dur978Jjjjjbcj;kb9Rgv8Kjjjjbc9:hodnalTmbcuhoaiRbbgrc;WeGc:Ge9hmbarcsGgwce0mbc9:hoalcufadcd4cbawEgDadfgrcKcaawEgqaraq0Egk6mbaialfgxar9RhodnadTgmmbavaoad;8qbbkaicefhPcj;abad9Uc;WFbGcjdadca0EhsdndndnadTmbaoadfhzcbhHinaeaH9nmdaxaP9RaD6miabaHad2fhOaPaDfhAasaeaH9RaHasfae6EgCcsfgocl4cifcd4hXavcj;cbfaoc9WGgQcetfhLavcj;cbfaQci2fhKavcj;cbfaQfhYcbh8Aaoc;ab6hEincbh3dnawTmbaPa8Acd4fRbbh3kcbh5avcj;cbfh8Eindndndndna3a5cet4ciGgoc9:fPdebdkaxaA9RaQ6mwdnaQTmbavcj;cbfa5aQ2faAaQ;8qbbkaAaCfhAxdkaQTmeavcj;cbfa5aQ2fcbaQ;8kbxekaxaA9RaX6moaoclVcbawEhraAaXfhocbhidnaEmbaxao9Rc;Gb6mbcbhlina8EalfhidndndndndndnaAalco4fRbbgqciGarfPDbedibledibkaipxbbbbbbbbbbbbbbbbpklbxlkaiaopbblaopbbbg8Fclp:mea8FpmbzeHdOiAlCvXoQrLg8Fcdp:mea8FpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9ogapxiiiiiiiiiiiiiiiip8Jg8Fp5b9cjF;8;4;W;G;ab9:9cU1:Nghcitpbi:q:G:cjbahRb:q:W:cjbghpsa8Fp5e9cjF;8;4;W;G;ab9:9cU1:Nggcitpbi:q:G:cjbp9UpmbedilvorzHOACXQLpPaaa8Fp9spklbahaoclffagRb:q:W:cjbfhoxikaiaopbbwaopbbbg8Fclp:mea8FpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9ogapxssssssssssssssssp8Jg8Fp5b9cjF;8;4;W;G;ab9:9cU1:Nghcitpbi:q:G:cjbahRb:q:W:cjbghpsa8Fp5e9cjF;8;4;W;G;ab9:9cU1:Nggcitpbi:q:G:cjbp9UpmbedilvorzHOACXQLpPaaa8Fp9spklbahaocwffagRb:q:W:cjbfhoxdkaiaopbbbpklbaoczfhoxekaiaopbbdaoRbbghcitpbi:q:G:cjbahRb:q:W:cjbghpsaoRbeggcitpbi:q:G:cjbp9UpmbedilvorzHOACXQLpPpklbahaocdffagRb:q:W:cjbfhokdndndndndndnaqcd4ciGarfPDbedibledibkaiczfpxbbbbbbbbbbbbbbbbpklbxlkaiczfaopbblaopbbbg8Fclp:mea8FpmbzeHdOiAlCvXoQrLg8Fcdp:mea8FpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9ogapxiiiiiiiiiiiiiiiip8Jg8Fp5b9cjF;8;4;W;G;ab9:9cU1:Nghcitpbi:q:G:cjbahRb:q:W:cjbghpsa8Fp5e9cjF;8;4;W;G;ab9:9cU1:Nggcitpbi:q:G:cjbp9UpmbedilvorzHOACXQLpPaaa8Fp9spklbahaoclffagRb:q:W:cjbfhoxikaiczfaopbbwaopbbbg8Fclp:mea8FpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9ogapxssssssssssssssssp8Jg8Fp5b9cjF;8;4;W;G;ab9:9cU1:Nghcitpbi:q:G:cjbahRb:q:W:cjbghpsa8Fp5e9cjF;8;4;W;G;ab9:9cU1:Nggcitpbi:q:G:cjbp9UpmbedilvorzHOACXQLpPaaa8Fp9spklbahaocwffagRb:q:W:cjbfhoxdkaiczfaopbbbpklbaoczfhoxekaiczfaopbbdaoRbbghcitpbi:q:G:cjbahRb:q:W:cjbghpsaoRbeggcitpbi:q:G:cjbp9UpmbedilvorzHOACXQLpPpklbahaocdffagRb:q:W:cjbfhokdndndndndndnaqcl4ciGarfPDbedibledibkaicafpxbbbbbbbbbbbbbbbbpklbxlkaicafaopbblaopbbbg8Fclp:mea8FpmbzeHdOiAlCvXoQrLg8Fcdp:mea8FpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9ogapxiiiiiiiiiiiiiiiip8Jg8Fp5b9cjF;8;4;W;G;ab9:9cU1:Nghcitpbi:q:G:cjbahRb:q:W:cjbghpsa8Fp5e9cjF;8;4;W;G;ab9:9cU1:Nggcitpbi:q:G:cjbp9UpmbedilvorzHOACXQLpPaaa8Fp9spklbahaoclffagRb:q:W:cjbfhoxikaicafaopbbwaopbbbg8Fclp:mea8FpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9ogapxssssssssssssssssp8Jg8Fp5b9cjF;8;4;W;G;ab9:9cU1:Nghcitpbi:q:G:cjbahRb:q:W:cjbghpsa8Fp5e9cjF;8;4;W;G;ab9:9cU1:Nggcitpbi:q:G:cjbp9UpmbedilvorzHOACXQLpPaaa8Fp9spklbahaocwffagRb:q:W:cjbfhoxdkaicafaopbbbpklbaoczfhoxekaicafaopbbdaoRbbghcitpbi:q:G:cjbahRb:q:W:cjbghpsaoRbeggcitpbi:q:G:cjbp9UpmbedilvorzHOACXQLpPpklbahaocdffagRb:q:W:cjbfhokdndndndndndnaqco4arfPDbedibledibkaic8Wfpxbbbbbbbbbbbbbbbbpklbxlkaic8Wfaopbblaopbbbg8Fclp:mea8FpmbzeHdOiAlCvXoQrLg8Fcdp:mea8FpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9ogapxiiiiiiiiiiiiiiiip8Jg8Fp5b9cjF;8;4;W;G;ab9:9cU1:Ngicitpbi:q:G:cjbaiRb:q:W:cjbgipsa8Fp5e9cjF;8;4;W;G;ab9:9cU1:Ngqcitpbi:q:G:cjbp9UpmbedilvorzHOACXQLpPaaa8Fp9spklbaiaoclffaqRb:q:W:cjbfhoxikaic8Wfaopbbwaopbbbg8Fclp:mea8FpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9ogapxssssssssssssssssp8Jg8Fp5b9cjF;8;4;W;G;ab9:9cU1:Ngicitpbi:q:G:cjbaiRb:q:W:cjbgipsa8Fp5e9cjF;8;4;W;G;ab9:9cU1:Ngqcitpbi:q:G:cjbp9UpmbedilvorzHOACXQLpPaaa8Fp9spklbaiaocwffaqRb:q:W:cjbfhoxdkaic8Wfaopbbbpklbaoczfhoxekaic8WfaopbbdaoRbbgicitpbi:q:G:cjbaiRb:q:W:cjbgipsaoRbegqcitpbi:q:G:cjbp9UpmbedilvorzHOACXQLpPpklbaiaocdffaqRb:q:W:cjbfhokalc;abfhialcjefaQ0meaihlaxao9Rc;Fb0mbkkdnaiaQ9pmbaici4hlinaxao9RcK6mwa8EaifhqdndndndndndnaAaico4fRbbalcoG4ciGarfPDbedibledibkaqpxbbbbbbbbbbbbbbbbpkbbxlkaqaopbblaopbbbg8Fclp:mea8FpmbzeHdOiAlCvXoQrLg8Fcdp:mea8FpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9ogapxiiiiiiiiiiiiiiiip8Jg8Fp5b9cjF;8;4;W;G;ab9:9cU1:Nghcitpbi:q:G:cjbahRb:q:W:cjbghpsa8Fp5e9cjF;8;4;W;G;ab9:9cU1:Nggcitpbi:q:G:cjbp9UpmbedilvorzHOACXQLpPaaa8Fp9spkbbahaoclffagRb:q:W:cjbfhoxikaqaopbbwaopbbbg8Fclp:mea8FpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9ogapxssssssssssssssssp8Jg8Fp5b9cjF;8;4;W;G;ab9:9cU1:Nghcitpbi:q:G:cjbahRb:q:W:cjbghpsa8Fp5e9cjF;8;4;W;G;ab9:9cU1:Nggcitpbi:q:G:cjbp9UpmbedilvorzHOACXQLpPaaa8Fp9spkbbahaocwffagRb:q:W:cjbfhoxdkaqaopbbbpkbbaoczfhoxekaqaopbbdaoRbbghcitpbi:q:G:cjbahRb:q:W:cjbghpsaoRbeggcitpbi:q:G:cjbp9UpmbedilvorzHOACXQLpPpkbbahaocdffagRb:q:W:cjbfhokalcdfhlaiczfgiaQ6mbkkaohAaoTmoka8EaQfh8Ea5cefg5cl9hmbkdndndndnawTmbaza8Acd4fRbbglciGPlbedwbkaQTmdavcjdfa8Afhlava8Afpbdbh8Jcbhoinalavcj;cbfaofpblbg8KaYaofpblbg8LpmbzeHdOiAlCvXoQrLg8MaLaofpblbg8NaKaofpblbgypmbzeHdOiAlCvXoQrLg8PpmbezHdiOAlvCXorQLg8Fcep9Ta8Fpxeeeeeeeeeeeeeeeegap9op9Hp9rg8Fa8Jp9Ug8Jp9Abbbaladfgla8Ja8Fa8Fpmlvorlvorlvorlvorp9Ug8Jp9Abbbaladfgla8Ja8Fa8FpmwDqkwDqkwDqkwDqkp9Ug8Jp9Abbbaladfgla8Ja8Fa8FpmxmPsxmPsxmPsxmPsp9Ug8Jp9Abbbaladfgla8Ja8Ma8PpmwDKYqk8AExm35Ps8E8Fg8Fcep9Ta8Faap9op9Hp9rg8Fp9Ug8Jp9Abbbaladfgla8Ja8Fa8Fpmlvorlvorlvorlvorp9Ug8Jp9Abbbaladfgla8Ja8Fa8FpmwDqkwDqkwDqkwDqkp9Ug8Jp9Abbbaladfgla8Ja8Fa8FpmxmPsxmPsxmPsxmPsp9Ug8Jp9Abbbaladfgla8Ja8Ka8LpmwKDYq8AkEx3m5P8Es8Fg8Ka8NaypmwKDYq8AkEx3m5P8Es8Fg8LpmbezHdiOAlvCXorQLg8Fcep9Ta8Faap9op9Hp9rg8Fp9Ug8Jp9Abbbaladfgla8Ja8Fa8Fpmlvorlvorlvorlvorp9Ug8Jp9Abbbaladfgla8Ja8Fa8FpmwDqkwDqkwDqkwDqkp9Ug8Jp9Abbbaladfgla8Ja8Fa8FpmxmPsxmPsxmPsxmPsp9Ug8Jp9Abbbaladfgla8Ja8Ka8LpmwDKYqk8AExm35Ps8E8Fg8Fcep9Ta8Faap9op9Hp9rg8Fp9Ugap9Abbbaladfglaaa8Fa8Fpmlvorlvorlvorlvorp9Ugap9Abbbaladfglaaa8Fa8FpmwDqkwDqkwDqkwDqkp9Ugap9Abbbaladfglaaa8Fa8FpmxmPsxmPsxmPsxmPsp9Ug8Jp9AbbbaladfhlaoczfgoaQ6mbxikkaQTmeavcjdfa8Afhlava8Afpbdbh8Jcbhoinalavcj;cbfaofpblbg8KaYaofpblbg8LpmbzeHdOiAlCvXoQrLg8MaLaofpblbg8NaKaofpblbgypmbzeHdOiAlCvXoQrLg8PpmbezHdiOAlvCXorQLg8Fcep:nea8Fpxebebebebebebebebgap9op:bep9rg8Fa8Jp:oeg8Jp9Abbbaladfgla8Ja8Fa8Fpmlvorlvorlvorlvorp:oeg8Jp9Abbbaladfgla8Ja8Fa8FpmwDqkwDqkwDqkwDqkp:oeg8Jp9Abbbaladfgla8Ja8Fa8FpmxmPsxmPsxmPsxmPsp:oeg8Jp9Abbbaladfgla8Ja8Ma8PpmwDKYqk8AExm35Ps8E8Fg8Fcep:nea8Faap9op:bep9rg8Fp:oeg8Jp9Abbbaladfgla8Ja8Fa8Fpmlvorlvorlvorlvorp:oeg8Jp9Abbbaladfgla8Ja8Fa8FpmwDqkwDqkwDqkwDqkp:oeg8Jp9Abbbaladfgla8Ja8Fa8FpmxmPsxmPsxmPsxmPsp:oeg8Jp9Abbbaladfgla8Ja8Ka8LpmwKDYq8AkEx3m5P8Es8Fg8Ka8NaypmwKDYq8AkEx3m5P8Es8Fg8LpmbezHdiOAlvCXorQLg8Fcep:nea8Faap9op:bep9rg8Fp:oeg8Jp9Abbbaladfgla8Ja8Fa8Fpmlvorlvorlvorlvorp:oeg8Jp9Abbbaladfgla8Ja8Fa8FpmwDqkwDqkwDqkwDqkp:oeg8Jp9Abbbaladfgla8Ja8Fa8FpmxmPsxmPsxmPsxmPsp:oeg8Jp9Abbbaladfgla8Ja8Ka8LpmwDKYqk8AExm35Ps8E8Fg8Fcep:nea8Faap9op:bep9rg8Fp:oegap9Abbbaladfglaaa8Fa8Fpmlvorlvorlvorlvorp:oegap9Abbbaladfglaaa8Fa8FpmwDqkwDqkwDqkwDqkp:oegap9Abbbaladfglaaa8Fa8FpmxmPsxmPsxmPsxmPsp:oeg8Jp9AbbbaladfhlaoczfgoaQ6mbxdkkaQTmbcbhocbalcl4gl9Rc8FGhiavcjdfa8Afhrava8Afpbdbhainaravcj;cbfaofpblbg8JaYaofpblbg8KpmbzeHdOiAlCvXoQrLg8LaLaofpblbg8MaKaofpblbg8NpmbzeHdOiAlCvXoQrLgypmbezHdiOAlvCXorQLg8Faip:Rea8Falp:Sep9qg8Faap9rgap9Abbbaradfgraaa8Fa8Fpmlvorlvorlvorlvorp9rgap9Abbbaradfgraaa8Fa8FpmwDqkwDqkwDqkwDqkp9rgap9Abbbaradfgraaa8Fa8FpmxmPsxmPsxmPsxmPsp9rgap9Abbbaradfgraaa8LaypmwDKYqk8AExm35Ps8E8Fg8Faip:Rea8Falp:Sep9qg8Fp9rgap9Abbbaradfgraaa8Fa8Fpmlvorlvorlvorlvorp9rgap9Abbbaradfgraaa8Fa8FpmwDqkwDqkwDqkwDqkp9rgap9Abbbaradfgraaa8Fa8FpmxmPsxmPsxmPsxmPsp9rgap9Abbbaradfgraaa8Ja8KpmwKDYq8AkEx3m5P8Es8Fg8Ja8Ma8NpmwKDYq8AkEx3m5P8Es8Fg8KpmbezHdiOAlvCXorQLg8Faip:Rea8Falp:Sep9qg8Fp9rgap9Abbbaradfgraaa8Fa8Fpmlvorlvorlvorlvorp9rgap9Abbbaradfgraaa8Fa8FpmwDqkwDqkwDqkwDqkp9rgap9Abbbaradfgraaa8Fa8FpmxmPsxmPsxmPsxmPsp9rgap9Abbbaradfgraaa8Ja8KpmwDKYqk8AExm35Ps8E8Fg8Faip:Rea8Falp:Sep9qg8Fp9rgap9Abbbaradfgraaa8Fa8Fpmlvorlvorlvorlvorp9rgap9Abbbaradfgraaa8Fa8FpmwDqkwDqkwDqkwDqkp9rgap9Abbbaradfgraaa8Fa8FpmxmPsxmPsxmPsxmPsp9rgap9AbbbaradfhraoczfgoaQ6mbkka8Aclfg8Aad6mbkdnaCad2goTmbaOavcjdfao;8qbbkdnammbavavcjdfaCcufad2fad;8qbbkaCaHfhHc9:hoaAhPaAmbxlkkaeTmbaDalfhrcbhocuhlinaralaD9RglfaD6mdasaeao9Raoasfae6Eaofgoae6mbkaial9RhPkcbc99axaP9RakSEhoxekc9:hokavcj;kbf8Kjjjjbaokwbz:bjjjbkNsezu8Jjjjjbc;ae9Rgv8Kjjjjbc9:hodnalaeci9UgrcHf6mbcuhoaiRbbgwc;WeGc;Ge9hmbawcsGgDce0mbavc;abfcFecje;8kbav9cu83iUav9cu83i8Wav9cu83iyav9cu83iaav9cu83iKav9cu83izav9cu83iwav9cu83ibaialfc9WfhqaicefgwarfhldnaeTmbcmcsaDceSEhkcbhxcbhmcbhrcbhicbhoindnalaq9nmbc9:hoxikdndnawRbbgDc;Ve0mbavc;abfaoaDcu7gPcl4fcsGcitfgsydlhzasydbhHdndnaDcsGgsak9pmbavaiaPfcsGcdtfydbaxasEhDaxasTgOfhxxekdndnascsSmbcehOasc987asamffcefhDxekalcefhDal8SbbgscFeGhPdndnascu9mmbaDhlxekalcvfhlaPcFbGhPcrhsdninaD8SbbgOcFbGastaPVhPaOcu9kmeaDcefhDascrfgsc8J9hmbxdkkaDcefhlkcehOaPce4cbaPceG9R7amfhDkaDhmkavc;abfaocitfgsaDBdbasazBdlavaicdtfaDBdbavc;abfaocefcsGcitfgsaHBdbasaDBdlaocdfhoaOaifhidnadcd9hmbabarcetfgsaH87ebasclfaD87ebascdfaz87ebxdkabarcdtfgsaHBdbascwfaDBdbasclfazBdbxekdnaDcpe0mbavaiaqaDcsGfRbbgscl4gP9RcsGcdtfydbaxcefgOaPEhDavaias9RcsGcdtfydbaOaPTgzfgOascsGgPEhsaPThPdndnadcd9hmbabarcetfgHax87ebaHclfas87ebaHcdfaD87ebxekabarcdtfgHaxBdbaHcwfasBdbaHclfaDBdbkavaicdtfaxBdbavc;abfaocitfgHaDBdbaHaxBdlavaicefgicsGcdtfaDBdbavc;abfaocefcsGcitfgHasBdbaHaDBdlavaiazfgicsGcdtfasBdbavc;abfaocdfcsGcitfgDaxBdbaDasBdlaocifhoaiaPfhiaOaPfhxxekaxcbalRbbgsEgHaDc;:eSgDfhOascsGhAdndnascl4gCmbaOcefhzxekaOhzavaiaC9RcsGcdtfydbhOkdndnaAmbazcefhxxekazhxavaias9RcsGcdtfydbhzkdndnaDTmbalcefhDxekalcdfhDal8SbegPcFeGhsdnaPcu9kmbalcofhHascFbGhscrhldninaD8SbbgPcFbGaltasVhsaPcu9kmeaDcefhDalcrfglc8J9hmbkaHhDxekaDcefhDkasce4cbasceG9R7amfgmhHkdndnaCcsSmbaDhsxekaDcefhsaD8SbbglcFeGhPdnalcu9kmbaDcvfhOaPcFbGhPcrhldninas8SbbgDcFbGaltaPVhPaDcu9kmeascefhsalcrfglc8J9hmbkaOhsxekascefhskaPce4cbaPceG9R7amfgmhOkdndnaAcsSmbashlxekascefhlas8SbbgDcFeGhPdnaDcu9kmbascvfhzaPcFbGhPcrhDdninal8SbbgscFbGaDtaPVhPascu9kmealcefhlaDcrfgDc8J9hmbkazhlxekalcefhlkaPce4cbaPceG9R7amfgmhzkdndnadcd9hmbabarcetfgDaH87ebaDclfaz87ebaDcdfaO87ebxekabarcdtfgDaHBdbaDcwfazBdbaDclfaOBdbkavc;abfaocitfgDaOBdbaDaHBdlavaicdtfaHBdbavc;abfaocefcsGcitfgDazBdbaDaOBdlavaicefgicsGcdtfaOBdbavc;abfaocdfcsGcitfgDaHBdbaDazBdlavaiaCTaCcsSVfgicsGcdtfazBdbaiaATaAcsSVfhiaocifhokawcefhwaocsGhoaicsGhiarcifgrae6mbkkcbc99alaqSEhokavc;aef8Kjjjjbaok:clevu8Jjjjjbcz9Rhvdnalaecvf9pmbc9:skdnaiRbbc;:eGc;qeSmbcuskav9cb83iwaicefhoaialfc98fhrdnaeTmbdnadcdSmbcbhwindnaoar6mbc9:skaocefhlao8SbbgicFeGhddndnaicu9mmbalhoxekaocvfhoadcFbGhdcrhidninal8SbbgDcFbGaitadVhdaDcu9kmealcefhlaicrfgic8J9hmbxdkkalcefhokabawcdtfadc8Etc8F91adcd47avcwfadceGcdtVglydbfgiBdbalaiBdbawcefgwae9hmbxdkkcbhwindnaoar6mbc9:skaocefhlao8SbbgicFeGhddndnaicu9mmbalhoxekaocvfhoadcFbGhdcrhidninal8SbbgDcFbGaitadVhdaDcu9kmealcefhlaicrfgic8J9hmbxdkkalcefhokabawcetfadc8Etc8F91adcd47avcwfadceGcdtVglydbfgi87ebalaiBdbawcefgwae9hmbkkcbc99aoarSEk;Toio97eue97aec98Ghedndnadcl9hmbaeTmecbhdinababpbbbgicKp:RecKp:Sep;6eglaicwp:RecKp:Sep;6ealp;Geaiczp:RecKp:Sep;6egvp;Gep;Kep;Legopxbbbbbbbbbbbbbbbbp:2egralpxbbbjbbbjbbbjbbbjgwp9op9rp;Keglpxbb;:9cbb;:9cbb;:9cbb;:9calalp;Meaoaop;Meavaravawp9op9rp;Keglalp;Mep;Kep;Kep;Jep;Negvp;Mepxbbn0bbn0bbn0bbn0grp;KepxFbbbFbbbFbbbFbbbp9oaipxbbbFbbbFbbbFbbbFp9op9qalavp;Mearp;Kecwp:RepxbFbbbFbbbFbbbFbbp9op9qaoavp;Mearp;Keczp:RepxbbFbbbFbbbFbbbFbp9op9qpkbbabczfhbadclfgdae6mbxdkkaeTmbcbhdinabczfgDaDpbbbgipxbbbbbbFFbbbbbbFFgwp9oabpbbbgoaipmbediwDqkzHOAKY8AEgvczp:Reczp:Sep;6eglaoaipmlvorxmPsCXQL358E8FpxFubbFubbFubbFubbp9op;6eavczp:Sep;6egvp;Gealp;Gep;Kep;Legipxbbbbbbbbbbbbbbbbp:2egralpxbbbjbbbjbbbjbbbjgqp9op9rp;Keglpxb;:FSb;:FSb;:FSb;:FSalalp;Meaiaip;Meavaravaqp9op9rp;Keglalp;Mep;Kep;Kep;Jep;Negvp;Mepxbbn0bbn0bbn0bbn0grp;KepxFFbbFFbbFFbbFFbbp9oaiavp;Mearp;Keczp:Rep9qgialavp;Mearp;KepxFFbbFFbbFFbbFFbbp9oglpmwDKYqk8AExm35Ps8E8Fp9qpkbbabaoawp9oaialpmbezHdiOAlvCXorQLp9qpkbbabcafhbadclfgdae6mbkkk;2ileue97euo97dnaec98GgiTmbcbheinabcKfpx:ji:1S:ji:1S:ji:1S:ji:1SabpbbbglabczfgvpbbbgopmlvorxmPsCXQL358E8Fgrczp:Segwpxibbbibbbibbbibbbp9qp;6egDp;NegqaDaDp;MegDaDp;KealaopmbediwDqkzHOAKY8AEgDczp:Reczp:Sep;6eglalp;MeaDczp:Sep;6egoaop;Mearczp:Reczp:Sep;6egrarp;Mep;Kep;Kep;Lepxbbbbbbbbbbbbbbbbp:4ep;Jep;Mepxbbn0bbn0bbn0bbn0gDp;KepxFFbbFFbbFFbbFFbbgkp9oaqaop;MeaDp;Keczp:Rep9qgoaqalp;MeaDp;Keakp9oaqarp;MeaDp;Keczp:Rep9qgDpmwDKYqk8AExm35Ps8E8Fglp5eawclp:RegqpEi:T:j83ibavalp5baqpEd:T:j83ibabcwfaoaDpmbezHdiOAlvCXorQLgDp5eaqpEe:T:j83ibabaDp5baqpEb:T:j83ibabcafhbaeclfgeai6mbkkkuee97dnadcd4ae2c98GgeTmbcbhdinababpbbbgicwp:Recwp:Sep;6eaicep:SepxbbjFbbjFbbjFbbjFp9opxbbjZbbjZbbjZbbjZp:Uep;Mepkbbabczfhbadclfgdae6mbkkk:Sodw97euaec98Ghedndnadcl9hmbaeTmecbhdinabpxbbuJbbuJbbuJbbuJabpbbbgicKp:TeglaicYp:Tep9qgvcdp:Teavp9qgvclp:Teavp9qgop;6ep;Negvaicwp:RecKp:SegraipxFbbbFbbbFbbbFbbbgwp9ogDp:Uep;6ep;Mepxbbn0bbn0bbn0bbn0gqp;Kecwp:RepxbFbbbFbbbFbbbFbbp9oavaDarp:Xeaiczp:RecKp:Segip:Uep;6ep;Meaqp;Keawp9op9qavaDaraip:Uep:Xep;6ep;Meaqp;Keczp:RepxbbFbbbFbbbFbbbFbp9op9qavaoalcep:Rep9oalpxebbbebbbebbbebbbp9op9qp;6ep;Meaqp;KecKp:Rep9qpkbbabczfhbadclfgdae6mbxdkkaeTmbcbhdinabczfgkpxbFu9hbFu9hbFu9hbFu9habpbbbglakpbbbgrpmlvorxmPsCXQL358E8Fgvczp:TegqavcHp:Tep9qgicdp:Teaip9qgiclp:Teaip9qgicwp:Teaip9qgop;6ep;NegialarpmbediwDqkzHOAKY8AEgDpxFFbbFFbbFFbbFFbbglp9ograDczp:Segwp:Ueavczp:Reczp:SegDp:Xep;6ep;Mepxbbn0bbn0bbn0bbn0gvp;Kealp9oaiarawaDp:Uep:Xep;6ep;Meavp;Keczp:Rep9qgwaiaoaqcep:Rep9oaqpxebbbebbbebbbebbbp9op9qp;6ep;Meavp;Keczp:ReaiaDarp:Uep;6ep;Meavp;Kealp9op9qgipmwDKYqk8AExm35Ps8E8FpkbbabawaipmbezHdiOAlvCXorQLpkbbabcafhbadclfgdae6mbkkk9teiucbcbydj:G:cjbgeabcifc98GfgbBdj:G:cjbdndnabZbcztgd9nmbcuhiabad9RcFFifcz4nbcuSmekaehikaikkxebcj:Gdklz:zbb",n=new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,3,2,0,0,5,3,1,0,1,12,1,0,10,22,2,12,0,65,0,65,0,65,0,252,10,0,0,11,7,0,65,0,253,15,26,11]),i=new Uint8Array([32,0,65,2,1,106,34,33,3,128,11,4,13,64,6,253,10,7,15,116,127,5,8,12,40,16,19,54,20,9,27,255,113,17,42,67,24,23,146,148,18,14,22,45,70,69,56,114,101,21,25,63,75,136,108,28,118,29,73,115]);if(typeof WebAssembly!="object")return{supported:!1};var o=WebAssembly.validate(n)?a(t):a(e),r,s=WebAssembly.instantiate(o,{}).then(function(T){r=T.instance,r.exports.__wasm_call_ctors()});function a(T){for(var E=new Uint8Array(T.length),S=0;S<T.length;++S){var I=T.charCodeAt(S);E[S]=I>96?I-97:I>64?I-39:I+4}for(var R=0,S=0;S<T.length;++S)E[R++]=E[S]<60?i[E[S]]:(E[S]-60)*64+E[++S];return E.buffer.slice(0,R)}function c(T,E,S,I,R,V,W){var B=T.exports.sbrk,N=I+3&-4,P=B(N*R),g=B(V.length),_=new Uint8Array(T.exports.memory.buffer);_.set(V,g);var Z=E(P,I,R,g,V.length);if(Z==0&&W&&W(P,N,R),S.set(_.subarray(P,P+I*R)),B(P-B(0)),Z!=0)throw new Error("Malformed buffer data: "+Z)}var d={NONE:"",OCTAHEDRAL:"meshopt_decodeFilterOct",QUATERNION:"meshopt_decodeFilterQuat",EXPONENTIAL:"meshopt_decodeFilterExp",COLOR:"meshopt_decodeFilterColor"},u={ATTRIBUTES:"meshopt_decodeVertexBuffer",TRIANGLES:"meshopt_decodeIndexBuffer",INDICES:"meshopt_decodeIndexSequence"},h=[],p=0;function A(T){var E={object:new Worker(T),pending:0,requests:{}};return E.object.onmessage=function(S){var I=S.data;E.pending-=I.count,E.requests[I.id][I.action](I.value),delete E.requests[I.id]},E}function f(T){for(var E="self.ready = WebAssembly.instantiate(new Uint8Array(["+new Uint8Array(o)+"]), {}).then(function(result) { result.instance.exports.__wasm_call_ctors(); return result.instance; });self.onmessage = "+C.name+";"+c.toString()+C.toString(),S=new Blob([E],{type:"text/javascript"}),I=URL.createObjectURL(S),R=h.length;R<T;++R)h[R]=A(I);for(var R=T;R<h.length;++R)h[R].object.postMessage({});h.length=T,URL.revokeObjectURL(I)}function b(T,E,S,I,R){for(var V=h[0],W=1;W<h.length;++W)h[W].pending<V.pending&&(V=h[W]);return new Promise(function(B,N){var P=new Uint8Array(S),g=++p;V.pending+=T,V.requests[g]={resolve:B,reject:N},V.object.postMessage({id:g,count:T,size:E,source:P,mode:I,filter:R},[P.buffer])})}function C(T){var E=T.data;if(!E.id)return self.close();self.ready.then(function(S){try{var I=new Uint8Array(E.count*E.size);c(S,S.exports[E.mode],I,E.count,E.size,E.source,S.exports[E.filter]),self.postMessage({id:E.id,count:E.count,action:"resolve",value:I},[I.buffer])}catch(R){self.postMessage({id:E.id,count:E.count,action:"reject",value:R})}})}return{ready:s,supported:!0,useWorkers:function(T){f(T)},decodeVertexBuffer:function(T,E,S,I,R){c(r,r.exports.meshopt_decodeVertexBuffer,T,E,S,I,r.exports[d[R]])},decodeIndexBuffer:function(T,E,S,I){c(r,r.exports.meshopt_decodeIndexBuffer,T,E,S,I)},decodeIndexSequence:function(T,E,S,I){c(r,r.exports.meshopt_decodeIndexSequence,T,E,S,I)},decodeGltfBuffer:function(T,E,S,I,R,V){c(r,r.exports[u[R]],T,E,S,I,r.exports[d[V]])},decodeGltfBufferAsync:function(T,E,S,I,R){return h.length>0?b(T,E,S,u[I],d[R]):s.then(function(){var V=new Uint8Array(T*E);return c(r,r.exports[u[I]],V,T,E,S,r.exports[d[R]]),V})}}})();var Qbn=y(x(),1),Dbn=(function(){var e="b9H79Tebbbe:6eO9Geueu9Geub9Gbb9Gsuuuuuuuuuuuu99uueu9Gvuuuuub9Gruuuuuuub9Gouuuuuue999Gvuuuuueu9Gzuuuuuuuuuuu99uuuub9Gquuuuuuu99uueu9GPuuuuuuuuuuu99uueu9Gquuuuuuuu99ueu9Gruuuuuu99eu9Gwuuuuuu99ueu9Giuuue999Gluuuueu9Gluuuub9GiuuueuiLQdilvorlwDiqkxmPszbHHbelve9Weiiviebeoweuecj:Gdkr:Bdxo9TW9T9VV95dbH9F9F939H79T9F9J9H229F9Jt9VV7bbz9TW79O9V9Wt9F79P9T9W29P9M95bw8E9TW79O9V9Wt9F79P9T9W29P9M959x9Pt9OcttV9P9I91tW7bD8A9TW79O9V9Wt9F79P9T9W29P9M959x9Pt9O9v9W9K9HtWbqQ9TW79O9V9Wt9F79P9T9W29P9M959t29V9W9W95bkX9TW79O9V9Wt9F79P9T9W29P9M959qV919UWbxQ9TW79O9V9Wt9F79P9T9W29P9M959q9V9P9Ut7bmX9TW79O9V9Wt9F79P9T9W29P9M959t9J9H2WbPa9TW79O9V9Wt9F9V9Wt9P9T9P96W9wWVtW94SWt9J9O9sW9T9H9Wbs59TW79O9V9Wt9F9NW9UWV9HtW9q9V79Pt9P9V9U9sW9T9H9Wbzl79IV9RbHDwebcekdCXq;y;WeQdbk;r:herYue99iuY99Xue9:D998Jjjjjbcj;sb9Rgs8Kjjjjbcbhzasc:Cefcbc;Kbz:tjjjb8AdnabaeSmbabaeadcdtzMjjjb8AkdnamcdGTmbalcrfci4cbyd1:H:cjbHjjjjbbhHasc:Cefasyd;8egecdtfaHBdbasaecefBd;8ecbhlcbhednadTmbabheadhOinaHaeydbci4fcb86bbaeclfheaOcufgOmbkcbhlabheadhOinaHaeydbgAci4fgCaCRbbgCceaAcrGgAtV86bbaCcu7aA4ceGalfhlaeclfheaOcufgOmbkcualcdtalcFFFFi0Ehekaecbyd1:H:cjbHjjjjbbhzasc:Cefasyd;8egecdtfazBdbasaecefBd;8ealcd4alfhOcehHinaHgecethHaeaO6mbkcbhXcuaecdtgOaecFFFFi0Ecbyd1:H:cjbHjjjjbbhHasc:Cefasyd;8egAcdtfaHBdbasaAcefBd;8eaHcFeaOz:tjjjbhQdnadTmbaecufhLcbhKindndnaQabaKcdtfgYydbgAc:v;t;h;Ev2aLGgOcdtfgCydbgHcuSmbceheinazaHcdtfydbaASmdaOaefhHaecefheaQaHaLGgOcdtfgCydbgHcu9hmbkkazaXcdtfaABdbaCaXBdbaXhHaXcefhXkaYaHBdbaKcefgKad9hmbkkaQcbyd:m:H:cjbH:bjjjbbasasyd;8ecufBd;8ekcbh8AcualcefgecdtaecFFFFi0Ecbyd1:H:cjbHjjjjbbhLasc:Cefasyd;8egecdtfaLBdbasaLBdNeasaecefBd;8ecuadcitadcFFFFe0Ecbyd1:H:cjbHjjjjbbhEasc:Cefasyd;8egecdtfaEBdbasaEBd:yeasaecefBd;8eascNefabadalcbz:cjjjbcualcdtgealcFFFFi0Eg3cbyd1:H:cjbHjjjjbbhOasc:Cefasyd;8egHcdtfaOBdbasaHcefBd;8ea3cbyd1:H:cjbHjjjjbbhQasc:Cefasyd;8egHcdtfaQBdbasaHcefBd;8eaOaQaialavazasc:Cefz:djjjbalcbyd1:H:cjbHjjjjbbhYasc:Cefasyd;8egHcdtfaYBdbasaHcefBd;8ea3cbyd1:H:cjbHjjjjbbhHasc:Cefasyd;8egAcdtfaHBdbasaAcefBd;8ea3cbyd1:H:cjbHjjjjbbhAasc:Cefasyd;8egCcdtfaABdbasaCcefBd;8eaHcFeaez:tjjjbh5aAcFeaez:tjjjbh8EdnalTmbindnaLa8AgAcefg8AcdtfydbgCaLaAcdtgefydbgHSmbaCaH9Rh8FaEaHcitfhaa8Eaefhha5aefhKcbhCindndnaaaCcitfydbgXaA9hmbaKaABdbahaABdbxekdnaLaXcdtggfgeclfydbgHaeydbgeSmbaHae9RhHaEaecitfheinaeydbaASmdaecwfheaHcufgHmbkka8EagfgeaAaXaeydbcuSEBdbaKaXaAaKydbcuSEBdbkaCcefgCa8F9hmbkka8Aal9hmbkaOhHaQhAa5hXa8EhCcbheindndnaeaHydbgK9hmbdnaeaAydbgK9hmbaXydbhKdnaCydbg8Fcu9hmbaKcu9hmbaYaefcb86bbxikdna8FcuSmbaKcuSmbaea8FSmbaOa8FcdtfydbaOaKcdtfydb9hmbaYaefcd86bbxikaYaefhadnaea8FSmbaeaKSmbaace86bbxikaacl86bbxdkdnaeaQaKcdtg8Ffydb9hmbdnaCydbgacuSmbaeaaSmbaXydbggcuSmbaeagSmba8Ea8FfydbghcuSmbahaKSmba5a8Ffydbg8FcuSmba8FaKSmbdnaOaacdtfydbgKaOa8Fcdtfydb9hmbaKaOagcdtfydbg8FSmba8FaOahcdtfydb9hmbaYaefcd86bbxlkaYaefcl86bbxikaYaefcl86bbxdkaYaefcl86bbxekaYaefaYaKfRbb86bbkaHclfhHaAclfhAaXclfhXaCclfhCalaecefge9hmbkdnamcaGTmbcbh8JindndnaYa8Jfg8KRbbg8Lc9:fPibebekdndndnaOa8Jcdtfydbgea8J9hmbdnaqmbcbh8FxdkdnazTmbcbh8Fa8JheinaqazaecdtgefydbfRbbce4a8FVceGh8FaQaefydbgea8J9hmbxikkcbh8Fa8JheinaqaefRbbce4a8FVceGh8FaQaecdtfydbgea8J9hmbxdkkaYaefRbbhexeka8JheindnaLaecdtg8AfgeclfydbgHaeydbgeSmbaHae9RhgaEaecitfhhaOa8AfhacbhKinahaKcitfydbgXhednindnaLaecdtgCfgeclfydbgHaeydbgeSmbaHae9RhHaEaecitfheaaydbhAdninaOaeydbcdtfydbaASmeaecwfheaHcufgHTmdxbkkcbhexdkaQaCfydbgeaX9hmbkceheka8FaeVh8FaKcefgKag9hmbkkaQa8Afydbgea8J9hmbka8Lcia8FceGEheka8Kae86bbka8Jcefg8Jal9hmbkkdnaqTmbdndnazTmbazheaOhHalhAindnaqaeydbfRbbceGTmbaYaHydbfcl86bbkaeclfheaHclfhHaAcufgAmbxdkkaqheaOhHalhAindnaeRbbceGTmbaYaHydbfcl86bbkaecefheaHclfhHaAcufgAmbkkaOhealhAaYhHindnaYaeydbfRbbcl9hmbaHcl86bbkaeclfheaHcefhHaAcufgAmbkkamceGTmbaYhealhHindnaeRbbce9hmbaecl86bbkaecefheaHcufgHmbkkcbh8Mcualcx2alc;v:Q;v:Qe0Ecbyd1:H:cjbHjjjjbbh8Nasc:Cefasyd;8egecdtfa8NBdbasaecefBd;8eascbBd:qeas9cb83i1ea8Naialavazasc1efz:ejjjbhydndnaDmbcbh8PcbhCxekcbhCawhecbhHindnaeIdbJbbbb9ETmbasaCcdtfaHBdbaCcefhCkaeclfheaDaHcefgH9hmbkcuaCal2gecdtaecFFFFi0Ecbyd1:H:cjbHjjjjbbh8Pasc:Cefasyd;8egecdtfa8PBdbasaecefBd;8ealTmbdnaCmbcbhCxekarcd4hgdnazTmbaCcdthhcbh8Fa8Phainaoaza8Fcdtfydbag2cdtfhKasheaahHaChAinaHaKaeydbcdtgXfIdbawaXfIdbNUdbaeclfheaHclfhHaAcufgAmbkaaahfhaa8Fcefg8Fal9hmbxdkkaCcdthhcbh8Fa8Phainaoa8Fag2cdtfhKasheaahHaChAinaHaKaeydbcdtgXfIdbawaXfIdbNUdbaeclfheaHclfhHaAcufgAmbkaaahfhaa8Fcefg8Fal9hmbkkcualc8S2gHalc;D;O;f8U0EgXcbyd1:H:cjbHjjjjbbheasc:Cefasyd;8egAcdtfaeBdbasaAcefBd;8eaecbaHz:tjjjbhIcbh8RcbhgdnaCTmbcbh8MaXcbyd1:H:cjbHjjjjbbhgasc:Cefasyd;8egecdtfagBdbasaecefBd;8eagcbaHz:tjjjb8AcuaCal2gecltgHaecFFFFb0Ecbyd1:H:cjbHjjjjbbh8Rasc:Cefasyd;8egecdtfa8RBdbasaecefBd;8ea8RcbaHz:tjjjb8AamcjjjjdGTmbcualcltgealcFFFFb0Ecbyd1:H:cjbHjjjjbbh8Masc:Cefasyd;8egHcdtfa8MBdbasaHcefBd;8ea8Mcbaez:tjjjb8AkdnadTmbcbhKabhHina8NaHclfydbg8Fcx2fgeIdba8NaHydbgacx2fgAIdbg8S:tgRa8NaHcwfydbghcx2fgXIdlaAIdlg8U:tg8VNaeIdla8U:tg8WaXIdba8S:tg8XN:tg8Ya8YNa8WaXIdwaAIdwg8Z:tg80NaeIdwa8Z:tg8Wa8VN:tg81a81Na8Wa8XNaRa80N:tg80a80NMMg8V:rhBa8Yh8Xa80h8Wa81hRdna8VJbbbb9EgATmba8YaB:vh8Xa80aB:vh8Wa81aB:vhRkaIaOaacdtfydbgXc8S2fgeaRaB:rg8VaRNNg83aeIdbMUdbaea8Wa8Va8WNgUNg85aeIdlMUdlaea8Xa8Va8XNg86Ng87aeIdwMUdwaeaRaUNgUaeIdxMUdxaea86aRNg88aeIdzMUdzaea8Wa86Ng89aeIdCMUdCaeaRa8Va8Xa8ZNaRa8SNa8Ua8WNMM:mg8:Ng86NgRaeIdKMUdKaea8Wa86Ng8WaeId3MUd3aea8Xa86Ng8XaeIdaMUdaaea86a8:Ng86aeId8KMUd8Kaea8VaeIdyMUdyaIaOa8Fcdtfydbg8Fc8S2fgea83aeIdbMUdbaea85aeIdlMUdlaea87aeIdwMUdwaeaUaeIdxMUdxaea88aeIdzMUdzaea89aeIdCMUdCaeaRaeIdKMUdKaea8WaeId3MUd3aea8XaeIdaMUdaaea86aeId8KMUd8Kaea8VaeIdyMUdyaIaOahcdtfydbgac8S2fgea83aeIdbMUdbaea85aeIdlMUdlaea87aeIdwMUdwaeaUaeIdxMUdxaea88aeIdzMUdzaea89aeIdCMUdCaeaRaeIdKMUdKaea8WaeId3MUd3aea8XaeIdaMUdaaea86aeId8KMUd8Kaea8VaeIdyMUdydna8MTmbdnaATmba8YaB:vh8Ya80aB:vh80a81aB:vh81ka8MaXcltfgeaBJbbbZNgRa80Ng8VaeIdlMUdlaeaRa8YNg8WaeIdwMUdwaeaRa81Ng8XaeIdbMUdbaeaRa8S:ma81Na8Ua80N:ta8Za8YN:tNgRaeIdxMUdxa8Ma8Fcltfgea8VaeIdlMUdlaea8WaeIdwMUdwaea8XaeIdbMUdbaeaRaeIdxMUdxa8Maacltfgea8VaeIdlMUdlaea8WaeIdwMUdwaea8XaeIdbMUdbaeaRaeIdxMUdxkaHcxfhHaKcifgKad6mbkkdnalTmbJq;x8J88J;n;m;m89J:v:;;w8ZamczGEamc;abGEh80cbhHaOhXazhKaIhea8NhAindnaHaXydb9hmbaHh8FdnazTmbaKydbh8Fka80hRdnaqTmbJbbjZa80aqa8FfRbbclGEhRkaecxfg8Fa8FIdbJbbbbMUdbaeczfg8Fa8FIdbJbbbbMUdbaecCfg8Fa8FIdbJbbbbMUdbaeaRaecyfg8FIdbg8YNgRaeIdbMUdbaeclfgaaRaaIdbMUdbaecwfgaaRaaIdbMUdbaecKfgaaaIdbaAIdbg8WaRN:tUdbaAcwfIdbh8Vaec3fgaaaIdbaRaAclfIdbg8XN:tUdbaecafgaaaIdbaRa8VN:tUdbaec8KfgaIdbh81a8Fa8YaRMUdbaaa81aRa8Va8VNa8Wa8WNa8Xa8XNMMNMUdbkaXclfhXaKclfhKaec8SfheaAcxfhAalaHcefgH9hmbkkdnadTmbcbh8Aabhainaba8Acdtfh8FcbhHinaYa8FaHc:G:G:cjbfydbcdtfydbgAfRbbhedndnaYaaaHfydbgXfRbbgKc99fcFeGcpe0mbaec99fcFeGc;:e6mekdnaKcufcFeGce0mba5aXcdtfydbaA9hmekdnaecufcFeGce0mba8EaAcdtfydbaX9hmekJbbacJbbacJbbbZaecFeGceSEaKcFeGceSEhUdna8Na8FaHc:K:G:cjbfydbcdtfydbcx2fgeIdwa8NaXcx2fgKIdwg86:tg8Sa8NaAcx2fghIdwa86:tg8Xa8XNahIdbaKIdbg8U:tg80a80NahIdlaKIdlg8Z:tg8Va8VNMMg81Na8Xa8Sa8XNaeIdba8U:tg83a80Na8VaeIdla8Z:tg85NMMg8WN:tg8Ya8YNa83a81Na80a8WN:tgRaRNa85a81Na8Va8WN:tg8Wa8WNMMgBJbbbb9ETmba8YaB:rgB:vh8Ya8WaB:vh8WaRaB:vhRkaUa81:rNgBa8Ya86NaRa8UNa8Za8WNMM:mg81Ng87a81Nh88a80a85Na8Va83N:tg81a81Na8Va8SNa8Xa85N:tg8Va8VNa8Xa83Na80a8SN:tg8Xa8XNMMg83:rh80a8Ya87Nh85a8Wa87Nh89aRa87Nh87a8WaBa8YNg8SNh8:a8SaRNhZaRaBa8WNgnNhca8Ya8SNh8Ya8WanNh8WaRaBaRNNh8Sdna83Jbbbb9ETmba81a80:vh81a8Xa80:vh8Xa8Va80:vh8VkaIaOaXcdtfydbc8S2fgeaeIdba8Sa8VaUa80:rNgRa8VNNMg80MUdbaea8Wa8XaRa8XNg8SNMg83aeIdlMUdlaea8Ya81aRa81Ng8WNMg8YaeIdwMUdwaeaca8Va8SNMg8SaeIdxMUdxaeaZa8Wa8VNMgUaeIdzMUdzaea8:a8Xa8WNMg8WaeIdCMUdCaea87a8VaRa81a86Na8Va8UNa8Za8XNMMg86:mNgRNMg8VaeIdKMUdKaea89a8XaRNMg8XaeId3MUd3aea85a81aRNMg81aeIdaMUdaaea88a86aRN:tgRaeId8KMUd8KaeaBaeIdyMUdyaIaOaAcdtfydbc8S2fgea80aeIdbMUdbaea83aeIdlMUdlaea8YaeIdwMUdwaea8SaeIdxMUdxaeaUaeIdzMUdzaea8WaeIdCMUdCaea8VaeIdKMUdKaea8XaeId3MUd3aea81aeIdaMUdaaeaRaeId8KMUd8KaeaBaeIdyMUdykaHclfgHcx9hmbkaacxfhaa8Acifg8Aad6mbkaCTmbcbhainJbbbbh80a8Nabaacdtfgeclfydbg8Fcx2fgHIdwa8Naeydbghcx2fgAIdwg8Z:tg8Va8VNaHIdbaAIdbg83:tg8Wa8WNaHIdlaAIdlg85:tg8Xa8XNMMg8Sa8Naecwfydbg8Acx2fgeIdwa8Z:tg8YNa8Va8YNa8WaeIdba83:tg81Na8XaeIdla85:tgBNMMgRa8VN:tJbbbbJbbjZa8Sa8Ya8YNa81a81NaBaBNMMg8UNaRaRN:tg86:va86Jbbbb9BEg86Nh88a8Ua8VNaRa8YN:ta86Nh89a8SaBNaRa8XN:ta86Nh8:a8Ua8XNaRaBN:ta86NhZa8Sa81NaRa8WN:ta86Nhna8Ua8WNaRa81N:ta86Nhca8WaBNa8Xa81N:tgRaRNa8Xa8YNa8VaBN:tgRaRNa8Va81Na8Wa8YN:tgRaRNMM:rJbbbZNhRa8PahaC2g8JcdtfhHa8Pa8AaC2gDcdtfhAa8Pa8FaC2g8KcdtfhXa8Z:mh9ca85:mhJa83:mh9eascjdfheaChKJbbbbhBJbbbbh86Jbbbbh8SJbbbbh8UJbbbbh8ZJbbbbh83Jbbbbh85Jbbbbh87JbbbbhUinaecwfaRa89aXIdbaHIdbg8Y:tg8XNa88aAIdba8Y:tg81NMg8VNUdbaeclfaRaZa8XNa8:a81NMg8WNUdbaeaRaca8XNana81NMg8XNUdbaecxfaRa9ca8VNaJa8WNa8Ya9ea8XNMMMg8YNUdbaRa8Va8WNNa8ZMh8ZaRa8Va8XNNa8UMh8UaRa8Wa8XNNa8SMh8SaRa8Ya8YNNaUMhUaRa8Va8YNNa87Mh87aRa8Wa8YNNa85Mh85aRa8Xa8YNNa83Mh83aRa8Va8VNNa86Mh86aRa8Wa8WNNaBMhBaRa8Xa8XNNa80Mh80aHclfhHaXclfhXaAclfhAaeczfheaKcufgKmbkagahc8S2fgea80aeIdbMUdbaeaBaeIdlMUdlaea86aeIdwMUdwaea8SaeIdxMUdxaea8UaeIdzMUdzaea8ZaeIdCMUdCaea83aeIdKMUdKaea85aeId3MUd3aea87aeIdaMUdaaeaUaeId8KMUd8KaeaRaeIdyMUdyaga8Fc8S2fgea80aeIdbMUdbaeaBaeIdlMUdlaea86aeIdwMUdwaea8SaeIdxMUdxaea8UaeIdzMUdzaea8ZaeIdCMUdCaea83aeIdKMUdKaea85aeId3MUd3aea87aeIdaMUdaaeaUaeId8KMUd8KaeaRaeIdyMUdyaga8Ac8S2fgea80aeIdbMUdbaeaBaeIdlMUdlaea86aeIdwMUdwaea8SaeIdxMUdxaea8UaeIdzMUdzaea8ZaeIdCMUdCaea83aeIdKMUdKaea85aeId3MUd3aea87aeIdaMUdaaeaUaeId8KMUd8KaeaRaeIdyMUdya8Ra8Jcltfh8FcbhHaChXina8FaHfgeascjdfaHfgAIdbaeIdbMUdbaeclfgKaAclfIdbaKIdbMUdbaecwfgKaAcwfIdbaKIdbMUdbaecxfgeaAcxfIdbaeIdbMUdbaHczfhHaXcufgXmbka8Ra8Kcltfh8FcbhHaChXina8FaHfgeascjdfaHfgAIdbaeIdbMUdbaeclfgKaAclfIdbaKIdbMUdbaecwfgKaAcwfIdbaKIdbMUdbaecxfgeaAcxfIdbaeIdbMUdbaHczfhHaXcufgXmbka8RaDcltfh8FcbhHaChXina8FaHfgeascjdfaHfgAIdbaeIdbMUdbaeclfgKaAclfIdbaKIdbMUdbaecwfgKaAcwfIdbaKIdbMUdbaecxfgeaAcxfIdbaeIdbMUdbaHczfhHaXcufgXmbkaacifgaad6mbkkcbhAdndnamcwGgTmbJbbbbh8ScbhScbh9hcbh9ixekcbhSa3cbyd1:H:cjbHjjjjbbh9iasc:Cefasyd;8egecdtfa9iBdbasaecefBd;8ecua9ialabadaOz:fjjjbgXcltaXcjjjjiGEcbyd1:H:cjbHjjjjbbh9hasc:Cefasyd;8egecdtfa9hBdbasaecefBd;8ea9haXa9ia8Nalz:gjjjbJFFuuh8SaXTmba9hheaXhHinaeIdbgRa8Sa8SaR9EEh8SaeclfheaHcufgHmbkaXhSkdnalTmbaLclfheaLydbhXaYhHalhKcbhAincbaeydbg8FaX9RaHRbbcpeGEaAfhAaHcefhHaeclfhea8FhXaKcufgKmbkaAce4hAkcuadaA9Rcifg6cx2a6c;v:Q;v:Qe0Ecbyd1:H:cjbHjjjjbbh9kasc:Cefasyd;8egecdtfa9kBdbasaecefBd;8ecua6cdta6cFFFFi0Ecbyd1:H:cjbHjjjjbbh0asc:Cefasyd;8egecdtfa0BdbasaecefBd;8ea3cbyd1:H:cjbHjjjjbbh9masc:Cefasyd;8egecdtfa9mBdbasaecefBd;8ealcbyd1:H:cjbHjjjjbbh9nasc:Cefasyd;8egecdtfa9nBdbasaecefBd;8eaxaxNayJbbjZamclGEgZaZN:vh87JbbbbhUdnadak9nmbdna6ci6mbaCclth9oa9kcwfh9pJbbbbh85JbbbbhUinascNefabadalaOz:cjjjbabh8Acbh9qcbh9rinaba9rcdtfhDcbheindnaOa8AaefydbgAcdtghfydbgXaOaDaec:W:G:cjbfydbcdtfydbgHcdtg8JfydbgKSmbaYaHfRbbgacv2aYaAfRbbg8FfRb;a:G:cjbg8La8Fcv2aafg8KRb;a:G:cjbg3VcFeGTmbdnaKaX9nmba8KRb;G:G:cjbcFeGmekdna8FcufcFeGce0mbaaTmba5ahfydbaH9hmekdna8FTmbaacufcFeGce0mba8Ea8JfydbaA9hmeka9ka9qcx2fgXaHaAa3cFeGgKEBdlaXaAaHaKEBdbaXaKa8LGcb9hBdwa9qcefh9qkaeclfgecx9hmbkdna9rcifg9rad9pmba8Acxfh8Aa9qcifa69nmekka9qTmdcbh8KinaIaOa9ka8Kcx2fghydbgKcdtgXfydbg8Ac8S2fgeIdwa8Nahydlg8Fcx2fgHIdwg8WNaeIdzaHIdbg8XNaeIdaMgRaRMMa8WNaeIdlaHIdlg8YNaeIdCa8WNaeId3MgRaRMMa8YNaeIdba8XNaeIdxa8YNaeIdKMgRaRMMa8XNaeId8KMMM:lhRJbbbbJbbjZaeIdyg8V:va8VJbbbb9BEh8VdndnahydwgDmbJFFuuh86xekJbbbbJbbjZaIaOa8Fcdtfydbc8S2fgeIdyg81:va81Jbbbb9BEaeIdwa8NaKcx2fgHIdwg81NaeIdzaHIdbg80NaeIdaMgBaBMMa81NaeIdlaHIdlgBNaeIdCa81NaeId3Mg81a81MMaBNaeIdba80NaeIdxaBNaeIdKMg81a81MMa80NaeId8KMMM:lNh86ka8VaRNhBdnaCTmbagaKc8S2fgAIdwa8WNaAIdza8XNaAIdaMgRaRMMa8WNaAIdla8YNaAIdCa8WNaAId3MgRaRMMa8YNaAIdba8XNaAIdxa8YNaAIdKMgRaRMMa8XNaAId8KMMMhRa8Pa8FaC2gacdtfhHa8RaKaC2g8JcltfheaAIdyh81aChAinaHIdbg8Va8Va81NaecxfIdba8WaecwfIdbNa8XaeIdbNa8YaeclfIdbNMMMg8Va8VM:tNaRMhRaHclfhHaeczfheaAcufgAmbkdndnaDmbJbbbbh8Vxekaga8Fc8S2fgAIdwa8NaKcx2fgeIdwg8XNaAIdzaeIdbg8YNaAIdaMg8Va8VMMa8XNaAIdlaeIdlg81NaAIdCa8XNaAId3Mg8Va8VMMa81NaAIdba8YNaAIdxa81NaAIdKMg8Va8VMMa8YNaAId8KMMMh8Va8Pa8JcdtfhHa8RaacltfheaAIdyh80aChAinaHIdbg8Wa8Wa80NaecxfIdba8XaecwfIdbNa8YaeIdbNa81aeclfIdbNMMMg8Wa8WM:tNa8VMh8VaHclfhHaeczfheaAcufgAmbka8V:lh8VkaBaR:lMhBa86a8VMh86dndndnaYaKfRbbc9:fPddbekaQaXfydbgXaKSmbaOa8Fcdtfydbh8Jindndna5aXcdtgafydbgecuSmbaOaecdtfydba8JSmekdna8EaafydbgecuSmbaOaecdtfydba8JSmeka8FhekagaXc8S2fgAIdwa8Naecx2fgHIdwg8WNaAIdzaHIdbg8XNaAIdaMgRaRMMa8WNaAIdlaHIdlg8YNaAIdCa8WNaAId3MgRaRMMa8YNaAIdba8XNaAIdxa8YNaAIdKMgRaRMMa8XNaAId8KMMMhRa8PaeaC2cdtfhHa8RaXaC2cltfheaAIdyh81aChAinaHIdbg8Va8Va81NaecxfIdba8WaecwfIdbNa8XaeIdbNa8YaeclfIdbNMMMg8Va8VM:tNaRMhRaHclfhHaeczfheaAcufgAmbkaBaR:lMhBaQaafydbgXaK9hmbkkaYa8FfRbbci9hmeaDTmeaQa8FcdtfydbgXa8FSmeindndna5aXcdtgafydbgecuSmbaOaecdtfydba8ASmekdna8EaafydbgecuSmbaOaecdtfydba8ASmekaKhekagaXc8S2fgAIdwa8Naecx2fgHIdwg8WNaAIdzaHIdbg8XNaAIdaMgRaRMMa8WNaAIdlaHIdlg8YNaAIdCa8WNaAId3MgRaRMMa8YNaAIdba8XNaAIdxa8YNaAIdKMgRaRMMa8XNaAId8KMMMhRa8PaeaC2cdtfhHa8RaXaC2cltfheaAIdyh81aChAinaHIdbg8Va8Va81NaecxfIdba8WaecwfIdbNa8XaeIdbNa8YaeclfIdbNMMMg8Va8VM:tNaRMhRaHclfhHaeczfheaAcufgAmbka86aR:lMh86aQaafydbgXa8F9hmbxdkkdna8Ea5a5aXfydba8FSEaQaXfydbgacdtfydbgXcu9hmbaQa8FcdtfydbhXkagaac8S2fgAIdwa8NaXcx2fgeIdwg8WNaAIdzaeIdbg8XNaAIdaMgRaRMMa8WNaAIdlaeIdlg8YNaAIdCa8WNaAId3MgRaRMMa8YNaAIdba8XNaAIdxa8YNaAIdKMgRaRMMa8XNaAId8KMMMhRa8PaXaC2g8AcdtfhHa8RaaaC2g8JcltfheaAIdyh81aChAinaHIdbg8Va8Va81NaecxfIdba8WaecwfIdbNa8XaeIdbNa8YaeclfIdbNMMMg8Va8VM:tNaRMhRaHclfhHaeczfheaAcufgAmbkdndnaDmbJbbbbh8VxekagaXc8S2fgAIdwa8Naacx2fgeIdwg8XNaAIdzaeIdbg8YNaAIdaMg8Va8VMMa8XNaAIdlaeIdlg81NaAIdCa8XNaAId3Mg8Va8VMMa81NaAIdba8YNaAIdxa81NaAIdKMg8Va8VMMa8YNaAId8KMMMh8Va8Pa8JcdtfhHa8Ra8AcltfheaAIdyh80aChAinaHIdbg8Wa8Wa80NaecxfIdba8XaecwfIdbNa8YaeIdbNa81aeclfIdbNMMMg8Wa8WM:tNa8VMh8VaHclfhHaeczfheaAcufgAmbka8V:lh8VkaBaR:lMhBa86a8VMh86kaha86aBa86aB9DgeEUdwahaKa8FaeaDcb9hGgeEBdlaha8FaKaeEBdba8Kcefg8Ka9q9hmbkascjdfcbcj;qbz:tjjjb8Aa9phea9qhHinascjdfaeydbcA4cF8FGgAcFAaAcFA6EcdtfgAaAydbcefBdbaecxfheaHcufgHmbkcbhecbhHinascjdfaefgAydbhXaAaHBdbaXaHfhHaeclfgecj;qb9hmbkcbhea9phHinascjdfaHydbcA4cF8FGgAcFAaAcFA6EcdtfgAaAydbgAcefBdba0aAcdtfaeBdbaHcxfhHa9qaecefge9hmbkadak9RgAci9Uh9sdnalTmbcbhea9mhHinaHaeBdbaHclfhHalaecefge9hmbkkcbh9ta9ncbalz:tjjjbh3aAcO9Uh9ua9sce4h9rcbh8Lcbh8Kdnina9ka0a8Kcdtfydbcx2fg8JIdwgRa879Emea8La9s9pmeJFFuuh8Vdna9ra9q9pmba9ka0a9rcdtfydbcx2fIdwJbb;aZNh8VkdnaRa8V9ETmbaRaU9ETmba8La9u0mdkdna3aOa8JydlgDcdtg9vfg8AydbgAfg9wRbba3aOa8Jydbghcdtg9xfydbgefg9yRbbVmbaYahfRbbh9zdndnaLaecdtfgHclfydbgXaHydbgHSmbaXaH9RhXa8NaAcx2fh8Fa8Naecx2fhaaEaHcitfheindna9maeydbcdtfydbgHaASmba9maeclfydbcdtfydbgKaASmbaHaKSmba8NaKcx2fgKIdba8NaHcx2fgHIdbg8W:tgRaaIdlaHIdlg8X:tg80NaKIdla8X:tg8VaaIdba8W:tgBN:tg8YaRa8FIdla8X:tg86Na8Va8FIdba8W:tg8UN:tg8XNa8VaaIdwaHIdwg81:tg8ZNaKIdwa81:tg8Wa80N:tg80a8Va8FIdwa81:tg83Na8Wa86N:tg8VNa8WaBNaRa8ZN:tg81a8Wa8UNaRa83N:tgRNMMa8Ya8YNa80a80Na81a81NMMa8Xa8XNa8Va8VNaRaRNMMN:rJbbj8:N9FmikaecwfheaXcufgXmbkkdndndndna9zc9:fPdebdkahheina8AydbhAdndna5aecdtgHfydbgecuSmbaOaecdtfydbaASmekdna8EaHfydbgecuSmbaOaecdtfydbaASmekaDheka9maHfaeBdbaQaHfydbgeah9hmbxikkdna8Ea5a5a9xfydbaDSEaQa9xfydbghcdtfydbgecu9hmbaQa9vfydbheka9ma9xfaDBdbaehDka9mahcdtfaDBdbka9yce86bba9wce86bba8JIdwgRaUaUaR9DEhUa9tcefh9tcecda9zceSEa8Lfh8Lxeka9rcefh9rka8Kcefg8Ka9q9hmbkka9tTmddnalTmbcbh8Fcbhhindna9mahcdtgefydbgAahSmbaOaAcdtfydbh8AdnahaOaefydb9hg8JmbaIa8Ac8S2fgeaIahc8S2fgHIdbaeIdbMUdbaeaHIdlaeIdlMUdlaeaHIdwaeIdwMUdwaeaHIdxaeIdxMUdxaeaHIdzaeIdzMUdzaeaHIdCaeIdCMUdCaeaHIdKaeIdKMUdKaeaHId3aeId3MUd3aeaHIdaaeIdaMUdaaeaHId8KaeId8KMUd8KaeaHIdyaeIdyMUdya8MTmba8Ma8Acltfgea8MahcltfgHIdbaeIdbMUdbaeaHIdlaeIdlMUdlaeaHIdwaeIdwMUdwaeaHIdxaeIdxMUdxkaCTmbagaAc8S2fgeagahc8S2gDfgHIdbaeIdbMUdbaeaHIdlaeIdlMUdlaeaHIdwaeIdwMUdwaeaHIdxaeIdxMUdxaeaHIdzaeIdzMUdzaeaHIdCaeIdCMUdCaeaHIdKaeIdKMUdKaeaHId3aeId3MUd3aeaHIdaaeIdaMUdaaeaHId8KaeId8KMUd8KaeaHIdyaeIdyMUdya9oaA2haa8RhHaChXinaHaafgeaHa8FfgAIdbaeIdbMUdbaeclfgKaAclfIdbaKIdbMUdbaecwfgKaAcwfIdbaKIdbMUdbaecxfgeaAcxfIdbaeIdbMUdbaHczfhHaXcufgXmbka8JmbJbbbbJbbjZaIaDfgeIdygR:vaRJbbbb9BEaeIdwa8Na8Acx2fgHIdwgRNaeIdzaHIdbg8VNaeIdaMg8Wa8WMMaRNaeIdlaHIdlg8WNaeIdCaRNaeId3MgRaRMMa8WNaeIdba8VNaeIdxa8WNaeIdKMgRaRMMa8VNaeId8KMMM:lNgRa85a85aR9DEh85ka8Fa9ofh8Fahcefghal9hmbkcbhHa5heindnaeydbgAcuSmbdnaHa9maAcdtgXfydbgA9hmbcuhAa5aXfydbgXcuSmba9maXcdtfydbhAkaeaABdbkaeclfhealaHcefgH9hmbkcbhHa8EheindnaeydbgAcuSmbdnaHa9maAcdtgXfydbgA9hmbcuhAa8EaXfydbgXcuSmba9maXcdtfydbhAkaeaABdbkaeclfhealaHcefgH9hmbkka85aUaCEh85cbhHabhecbhAindnaOa9maeydbcdtfydbg8FcdtfydbgXaOa9maeclfydbcdtfydbgacdtfydbgKSmbaXaOa9maecwfydbcdtfydbg8AcdtfydbghSmbaKahSmbabaHcdtfgXa8FBdbaXcwfa8ABdbaXclfaaBdbaHcifhHkaecxfheaAcifgAad6mbkdndnaTmbaHhdxekdnaHak0mbaHhdxekdna8Sa859FmbaHhdxekJFFuuh8ScbhdabhecbhAindna9ha9iaeydbgXcdtfydbcdtfIdbgRa859ETmbaeclf8Pdbh9AabadcdtfgKaXBdbaKclfa9A83dbaRa8Sa8SaR9EEh8SadcifhdkaecxfheaAcifgAaH6mbkkadak0mbxdkkascNefabadalaOz:cjjjbkdndnadak0mbadhaxekdnaTmbadhaxekdna8Sa879FmbadhaxekcehKina8SJbb;aZNgRa87aRa879DEh8WJbbbbhRdnaSTmba9hheaShHinaeIdbg8VaRa8Va8W9FEaRa8VaR9EEhRaeclfheaHcufgHmbkkJFFuuh8ScbhaabhecbhHindna9ha9iaeydbgAcdtfydbcdtfIdbg8Va8W9ETmbaeclf8Pdbh9AabaacdtfgXaABdbaXclfa9A83dba8Va8Sa8Sa8V9EEh8SaacifhakaecxfheaHcifgHad6mbkdnaKaaad9hVceGmbadhaxdkaRaUaUaR9DEhUaaak9nmecbhKaahda8Sa879FmbkkdnamcjjjjdGTmba9ncbalz:tjjjbh8AdnaaTmbabheaahHina8AaeydbgAfce86bba8AaOaAcdtfydbfce86bbaeclfheaHcufgHmbkkascNefabaaalaOz:cjjjbdndnalTmbcbhXindna8AaXfRbbTmbdnaYaXfRbbgecl0mbceaetcQGmekdnaOaXcdtg8FfydbgeaXSmba8NaXcx2fgHa8Naecx2fgeydwBdwaHae8Pdb83dbxekaIaXc8S2fgKIdygcacJL:3;rUNgRMh87aKIdwg9BaRMh8SaKIdlg9CaRMh8UaKIdbg9DaRMh81aKIdag9EaRa8NaXcx2fg8JIdwg88N:th8ZaKId3g9FaRa8JIdlg89N:th83aKIdKg9Ga8JIdbg8:aRN:th80JbbbbhnaKIdCg9HJbbbbMh85aKIdzg9IJbbbbMhBaKIdxg9JJbbbbMh86dndnaCTmbaXhAinJbbbba87agaAc8S2fgHIdygR:vaRJbbbb9BEhRa8RaAaC2cltfheaHIdaa87Na8ZMh8ZaHId3a87Na83Mh83aHIdKa87Na80Mh80aHIdCa87Na85Mh85aHIdza87NaBMhBaHIdxa87Na86Mh86aHIdwa87Na8SMh8SaHIdla87Na8UMh8UaHIdba87Na81Mh81aChHina8ZaecwfIdbg8VaecxfIdbg8YNaRN:th8Za83aeclfIdbg8Wa8YNaRN:th83a85a8Wa8VNaRN:th85a81aeIdbg8Xa8XNaRN:th81a80a8Xa8YNaRN:th80aBa8Xa8VNaRN:thBa86a8Xa8WNaRN:th86a8Sa8Va8VNaRN:th8Sa8Ua8Wa8WNaRN:th8UaeczfheaHcufgHmbkaQaAcdtfydbgAaX9hmbka8MTmba8MaXcltfgeIdxhxaeIdwh9caeIdlhJaeIdbhRxekJbbbbhxJbbbbh9cJbbbbhJJbbbbhRkaBa81:vg8Wa80Na8Z:ta85aBa86a81:vg8VN:tg8Za8Ua86a8VN:tg8Y:vg8Xa8Va80Na83:tg8UN:th83a9caRa8WN:taJaRa8VN:tg86a8XN:tg85a8SaBa8WN:ta8Za8XN:tgB:vg8S:mh8Za86a8Y:vg9c:mhJdnJbbbbaRaRa81:vg9eN:ta86a9cN:ta85a8SN:tg86:la87J:983:g81NgR9ETmba8Za83NaJa8UNa9ea80Nax:tMMa86:vhnka81:laR9ETmba8Y:laR9ETmbaB:laR9ETmba9e:manNa8W:ma8ZanNa83aB:vMgBNa8V:maJanNa8X:maBNa8Ua8Y:vMMg85Na80:ma81:vMMMh87aLa8FfgeclfydbgHaeydbge9RhhaEaecitfh8FJbbbbhRdnaHaeSgDmbJbbbbhRa8FheahhAina8Naeclfydbcx2fgHIdwa88:tg8Va8VNaHIdba8::tg8Va8VNaHIdla89:tg8Va8VNMMg8Va8Naeydbcx2fgHIdwa88:tg8Wa8WNaHIdba8::tg8Wa8WNaHIdla89:tg8Wa8WNMMg8WaRaRa8W9DEgRaRa8V9DEhRaecwfheaAcufgAmbkaR:rgRaRNhRkaBa88:tg8Va8VNa87a8::tg8Va8VNa85a89:tg8Va8VNMMaR9EmbaKId8KhndnaDmbina8Na8Fclfydbcx2fgeIdba8Na8Fydbcx2fgHIdbg8W:tgRa89aHIdlg8X:tg80NaeIdla8X:tg8Va8:a8W:tg86N:tg8YaRa85a8X:tg8SNa8Va87a8W:tg8UN:tg8XNa8Va88aHIdwg81:tg8ZNaeIdwa81:tg8Wa80N:tg80a8VaBa81:tg83Na8Wa8SN:tg8VNa8Wa86NaRa8ZN:tg81a8Wa8UNaRa83N:tgRNMMa8Ya8YNa80a80Na81a81NMMa8Xa8XNa8Va8VNaRaRNMMN:rJbbj8:N9Fmda8Fcwfh8FahcufghmbkkJbbbbJbbjZac:vacJbbbb9BEgRa9BaBNa9Ia87Na9EMg8Va8VMMaBNa9Ca85Na9HaBNa9FMg8Va8VMMa85Na9Da87Na9Ja85Na9GMg8Va8VMMa87NanMMM:lNaRa9Ba88Na9Ia8:Na9EMg8Va8VMMa88Na9Ca89Na9Ha88Na9FMg8Va8VMMa89Na9Da8:Na9Ja89Na9GMg8Va8VMMa8:NanMMM:lNJbb;aZNJ:983:g81M9Emba8JaBUdwa8Ja85Udla8Ja87UdbkaXcefgXal9hmbkdnaCmbcbhCxdkcbhXindna8AaXfRbbTmbaOaXcdtgefydbaX9hmbaYaXfhhaQaefh8Ja8NaXcx2fhAa8PaXaC2cdtfhDcbhEincuhLdnahRbbci9hmbaXhLa8JydbgeaXSmba8PaEcdtgHfhKaDaHfIdbhRaXhLinaLhHcuhLdnaKaeaC2cdtfIdbaR9CmbaHcuSmbaHhLagaec8S2fIdyagaHc8S2fIdy9ETmbaehLkaQaecdtfydbgeaX9hmbkka8PaEcdtfhKa8RaEcltfh8FaXheinaKaeaC2cdtfJbbbbJbbjZagaeaLaLcuSEgHc8S2fIdygR:vaRJbbbb9BEa8FaHaC2cltfgHIdwaAIdwNaHIdbaAIdbNaHIdlaAIdlNMMaHIdxMNUdbaQaecdtfydbgeaX9hmbkaEcefgEaC9hmbkkaXcefgXal9hmbxdkkaCmbcbhCkaiavaoarawaCala8Na8Pazasayasc1efaYa8Aaqz:hjjjbkdnamcjjjjlGTmbazmbaaTmbabhecbhLinaYaeydbgAfRbbc3thQaecwfgXydbhHcjjjj94hCdna5aAcdtgEfydbaeclfgKydbgOSmbcjjjj94cba8EaOcdtfydbaASEhCkaeaQaCVaAVBdbaYaOfRbbc3th8Fcjjjj94hCcjjjj94hQdna5aOcdtfydbaHSmbcjjjj94cba8EaHcdtfydbaOSEhQkaKa8FaQVaOVBdbaYaHfRbbc3thOdna5aHcdtfydbaASmbcjjjj94cba8EaEfydbaHSEhCkaXaOaCVaHVBdbaecxfheaLcifgLaa6mbkkdnazTmbaaTmbaaheinabazabydbcdtfydbBdbabclfhbaecufgembkkdnaPTmbaPaZaU:rNUdbkdnasyd;8egHTmbaHcdtasc:Ceffc98fheinaeydbcbyd:m:H:cjbH:bjjjbbaec98fheaHcufgHmbkkascj;sbf8Kjjjjbaak;Yieouabydlhvabydbclfcbaicdtz:tjjjbhoadci9UhrdnadTmbdnalTmbaehwadhDinaoalawydbcdtfydbcdtfgqaqydbcefBdbawclfhwaDcufgDmbxdkkaehwadhDinaoawydbcdtfgqaqydbcefBdbawclfhwaDcufgDmbkkdnaiTmbcbhDaohwinawydbhqawaDBdbawclfhwaqaDfhDaicufgimbkkdnadci6mbinaecwfydbhwaeclfydbhDaeydbhidnalTmbalawcdtfydbhwalaDcdtfydbhDalaicdtfydbhikavaoaicdtfgqydbcitfaDBdbavaqydbcitfawBdlaqaqydbcefBdbavaoaDcdtfgqydbcitfawBdbavaqydbcitfaiBdlaqaqydbcefBdbavaoawcdtfgwydbcitfaiBdbavawydbcitfaDBdlawawydbcefBdbaecxfhearcufgrmbkkabydbcbBdbk:todDue99aicd4aifhrcehwinawgDcethwaDar6mbkcuaDcdtgraDcFFFFi0Ecbyd1:H:cjbHjjjjbbhwaoaoyd9GgqcefBd9GaoaqcdtfawBdbawcFearz:tjjjbhkdnaiTmbalcd4hlaDcufhxcbhminamhDdnavTmbavamcdtfydbhDkcbadaDal2cdtfgDydlgwawcjjjj94SEgwcH4aw7c:F:b:DD2cbaDydbgwawcjjjj94SEgwcH4aw7c;D;O:B8J27cbaDydwgDaDcjjjj94SEgDcH4aD7c:3F;N8N27axGhwamcdthPdndndnavTmbakawcdtfgrydbgDcuSmeadavaPfydbal2cdtfgsIdbhzcehqinaqhrdnadavaDcdtfydbal2cdtfgqIdbaz9CmbaqIdlasIdl9CmbaqIdwasIdw9BmlkarcefhqakawarfaxGgwcdtfgrydbgDcu9hmbxdkkakawcdtfgrydbgDcuSmbadamal2cdtfgsIdbhzcehqinaqhrdnadaDal2cdtfgqIdbaz9CmbaqIdlasIdl9CmbaqIdwasIdw9BmikarcefhqakawarfaxGgwcdtfgrydbgDcu9hmbkkaramBdbamhDkabaPfaDBdbamcefgmai9hmbkkakcbyd:m:H:cjbH:bjjjbbaoaoyd9GcufBd9GdnaeTmbaiTmbcbhDaehwinawaDBdbawclfhwaiaDcefgD9hmbkcbhDaehwindnaDabydbgrSmbawaearcdtfgrydbBdbaraDBdbkabclfhbawclfhwaiaDcefgD9hmbkkk;:odvuv998Jjjjjbca9Rgocbyd1:G:cjbBdKaocb8Pdj:G:cjb83izaocbydN:G:cjbBdwaocb8Pd:m:G:cjb83ibdnadTmbaicd4hrdnabmbdnalTmbcbhwinaealawcdtfydbar2cdtfhDcbhiinaoczfaifgqaDaifIdbgkaqIdbgxaxak9EEUdbaoaifgqakaqIdbgxaxak9DEUdbaiclfgicx9hmbkawcefgwad9hmbxikkarcdthwcbhDincbhiinaoczfaifgqaeaifIdbgkaqIdbgxaxak9EEUdbaoaifgqakaqIdbgxaxak9DEUdbaiclfgicx9hmbkaeawfheaDcefgDad9hmbxdkkdnalTmbcbhwinabawcx2fgiaealawcdtfydbar2cdtfgDIdbUdbaiaDIdlUdlaiaDIdwUdwcbhiinaoczfaifgqaDaifIdbgkaqIdbgxaxak9EEUdbaoaifgqakaqIdbgxaxak9DEUdbaiclfgicx9hmbkawcefgwad9hmbxdkkarcdthlcbhwaehDinabawcx2fgiaeawar2cdtfgqIdbUdbaiaqIdlUdlaiaqIdwUdwcbhiinaoczfaifgqaDaifIdbgkaqIdbgxaxak9EEUdbaoaifgqakaqIdbgxaxak9DEUdbaiclfgicx9hmbkaDalfhDawcefgwad9hmbkkJbbbbaoIdbaoIdzgx:tgkakJbbbb9DEgkaoIdlaoIdCgm:tgPaPak9DEgkaoIdwaoIdKgP:tgsasak9DEhsdnabTmbadTmbJbbbbJbbjZas:vasJbbbb9BEhkinabakabIdbax:tNUdbabclfgoakaoIdbam:tNUdbabcwfgoakaoIdbaP:tNUdbabcxfhbadcufgdmbkkdnavTmbavaPUdwavamUdlavaxUdbkask:WlewudnaeTmbcbhvabhoinaoavBdbaoclfhoaeavcefgv9hmbkkdnaiTmbcbhrinadarcdtfhwcbhDinalawaDcdtgvyd:G:G:cjbcdtfydbcdtfydbhodnalawavfydbcdtfydbgqabaqcdtfgkydbgvSmbinakabavgqcdtfgxydbgvBdbaxhkaqav9hmbkkdnaoabaocdtfgkydbgvSmbinakabavgocdtfgxydbgvBdbaxhkaoav9hmbkkdnaqaoSmbabaqaoaqao0Ecdtfaqaoaqao6EBdbkaDcefgDci9hmbkarcifgrai6mbkkdnaembcbskcbhxindnalaxcdtgvfydbax9hmbaxhodnaxabavfgDydbgvSmbaDhqinaqabavgocdtfgkydbgvBdbakhqaoav9hmbkkaDaoBdbkaxcefgxae9hmbkcbhkabhvcbhoindndnaoalydbgq9hmbdnaoavydbgq9hmbavakBdbakcefhkxdkavabaqcdtfydbBdbxekavabaqcdtfydbBdbkalclfhlavclfhvaeaocefgo9hmbkakk;jiilud99euabcbaecltz:tjjjbhvdnalTmbadhoaihralhwinarcwfIdbhDarclfIdbhqavaoydbcltfgkarIdbakIdbMUdbakaqakIdlMUdlakaDakIdwMUdwakakIdxJbbjZMUdxaoclfhoarcxfhrawcufgwmbkkdnaeTmbavhkaehrinakcxfgoIdbhDaocbBdbakakIdbJbbbbJbbjZaD:vaDJbbbb9BEgDNUdbakclfgoaDaoIdbNUdbakcwfgoaDaoIdbNUdbakczfhkarcufgrmbkkdnalTmbinavadydbcltfgkaicwfIdbakIdw:tgDaDNaiIdbakIdb:tgDaDNaiclfIdbakIdl:tgDaDNMMgDakIdxgqaqaD9DEUdxadclfhdaicxfhialcufglmbkkdnaeTmbavcxfhkinabakIdbUdbakczfhkabclfhbaecufgembkkk:moerudnaoTmbaecd4hzdnavTmbaicd4hHavcdthOcbhAindnaPaAfRbbTmbaAhednaDTmbaDaAcdtfydbhekdnasTmbasaefRbbceGmekdnamaAfRbbclSmbabaeaz2cdtfgiaraAcx2fgCIdbakNaxIdbMUdbaiaCIdlakNaxIdlMUdlaiaCIdwakNaxIdwMUdwkadaeaH2cdtfhXaqheawhiavhCinaXaeydbcdtgQfaiIdbalaQfIdb:vUdbaeclfheaiclfhiaCcufgCmbkkawaOfhwaAcefgAao9hmbxdkkdnasmbcbheaDhiindnaPaefRbbTmbaehCdnaDTmbaiydbhCkamaefRbbclSmbabaCaz2cdtfgCarIdbakNaxIdbMUdbaCarclfIdbakNaxIdlMUdlaCarcwfIdbakNaxIdwMUdwkaiclfhiarcxfhraoaecefge9hmbxdkkdnaDTmbindnaPRbbTmbasaDydbgefRbbceGmbamRbbclSmbabaeaz2cdtfgearIdbakNaxIdbMUdbaearclfIdbakNaxIdlMUdlaearcwfIdbakNaxIdwMUdwkaPcefhPaDclfhDamcefhmarcxfhraocufgombxdkkazcdthicbheindnaPaefRbbTmbasaefRbbceGmbamaefRbbclSmbabarIdbakNaxIdbMUdbabclfarclfIdbakNaxIdlMUdbabcwfarcwfIdbakNaxIdwMUdbkarcxfhrabaifhbaoaecefge9hmbkkk8MbabaeadaialavcbcbcbcbcbaoarawaDz:bjjjbk8MbabaeadaialavaoarawaDaqakaxamaPz:bjjjbkRbababaeadaialavaoarawaDaqakaxcjjjjdVamz:bjjjbk:g8Koque99due99duq998Jjjjjbc;Wb9Rgq8Kjjjjbcbhkaqcxfcbc;Kbz:tjjjb8Aaqcualcx2alc;v:Q;v:Qe0Ecbyd1:H:cjbHjjjjbbgxBdxaqceBd2axaialavcbcbz:ejjjb8AaqcualcdtalcFFFFi0Egmcbyd1:H:cjbHjjjjbbgiBdzaqcdBd2dndnJFF959eJbbjZawJbbjZawJbbjZ9DE:vawJ9VO:d869DEgw:lJbbb9p9DTmbaw:OhPxekcjjjj94hPkadci9Uhsarco9UhzdndnaombaPcd9imekdnalTmbaPcuf:YhwdnaoTmbcbhvaihHaxhOindndnaoavfRbbceGTmbavcjjjjlVhAxekdndnaOclfIdbawNJbbbZMgC:lJbbb9p9DTmbaC:OhAxekcjjjj94hAkaAcqthAdndnaOcwfIdbawNJbbbZMgC:lJbbb9p9DTmbaC:OhXxekcjjjj94hXkaAaXVhAdndnaOIdbawNJbbbZMgC:lJbbb9p9DTmbaC:OhXxekcjjjj94hXkaAaXcCtVhAkaHaABdbaHclfhHaOcxfhOalavcefgv9hmbxdkkaxhvaihOalhHindndnavIdbawNJbbbZMgC:lJbbb9p9DTmbaC:OhAxekcjjjj94hAkaAcCthAdndnavclfIdbawNJbbbZMgC:lJbbb9p9DTmbaC:OhXxekcjjjj94hXkaXcqtaAVhAdndnavcwfIdbawNJbbbZMgC:lJbbb9p9DTmbaC:OhXxekcjjjj94hXkaOaAaXVBdbavcxfhvaOclfhOaHcufgHmbkkadTmbcbhkaehvcbhOinakaiavclfydbcdtfydbgHaiavcwfydbcdtfydbgA9haiavydbcdtfydbgXaH9haXaA9hGGfhkavcxfhvaOcifgOad6mbkkarci9UhQdndnaz:Z:rJbbbZMgw:lJbbb9p9DTmbaw:Ohvxekcjjjj94hvkaQ:ZhLcbhKc:bwhzdninakaQ9pmeazaP9Rcd9imeavazcufgOavaO9iEaPcefavaP9kEhYdnalTmbaYcuf:YhwdnaoTmbcbhOaihHaxhvindndnaoaOfRbbceGTmbaOcjjjjlVhAxekdndnavclfIdbawNJbbbZMgC:lJbbb9p9DTmbaC:OhAxekcjjjj94hAkaAcqthAdndnavcwfIdbawNJbbbZMgC:lJbbb9p9DTmbaC:OhXxekcjjjj94hXkaAaXVhAdndnavIdbawNJbbbZMgC:lJbbb9p9DTmbaC:OhXxekcjjjj94hXkaAaXcCtVhAkaHaABdbaHclfhHavcxfhvalaOcefgO9hmbxdkkaxhvaihOalhHindndnavIdbawNJbbbZMgC:lJbbb9p9DTmbaC:OhAxekcjjjj94hAkaAcCthAdndnavclfIdbawNJbbbZMgC:lJbbb9p9DTmbaC:OhXxekcjjjj94hXkaXcqtaAVhAdndnavcwfIdbawNJbbbZMgC:lJbbb9p9DTmbaC:OhXxekcjjjj94hXkaOaAaXVBdbavcxfhvaOclfhOaHcufgHmbkkcbhOdnadTmbaehvcbhHinaOaiavclfydbcdtfydbgAaiavcwfydbcdtfydbgX9haiavydbcdtfydbgraA9haraX9hGGfhOavcxfhvaHcifgHad6mbkkdnas:ZgCaL:taY:Ygwaz:Y:tg8ANak:ZgEaO:Zg3:tNaEaL:tawaP:Y:tg5Na3aC:tNMg8EJbbbb9BmbaCaE:ta5a8Aa3aL:tNNNa8E:vawMhwkdndnaOaQ0mbaOhkaYhPxekaOhsaYhzkdndnaKcl0mbdnawJbbbZMgw:lJbbb9p9DTmbaw:Ohvxdkcjjjj94hvxekaPazfcd9ThvkaKcefgKcs9hmbkkdndndnakmbJbbjZhwcbhOcdhvaDmexdkalcd4alfhHcehOinaOgvcethOavaH6mbkcbhOaqcuavcdtgYavcFFFFi0Ecbyd1:H:cjbHjjjjbbgKBdCaqciBd2aqamcbyd1:H:cjbHjjjjbbgzBdKaqclBd2dndndndnalTmbaPcuf:YhwaoTmecbhOaihAaxhHindndnaoaOfRbbceGTmbaOcjjjjlVhXxekdndnaHclfIdbawNJbbbZMgC:lJbbb9p9DTmbaC:OhXxekcjjjj94hXkaXcqthXdndnaHcwfIdbawNJbbbZMgC:lJbbb9p9DTmbaC:Ohrxekcjjjj94hrkaXarVhXdndnaHIdbawNJbbbZMgC:lJbbb9p9DTmbaC:Ohrxekcjjjj94hrkaXarcCtVhXkaAaXBdbaAclfhAaHcxfhHalaOcefgO9hmbxikkaKcFeaYz:tjjjb8AcbhPcbhvxdkaxhOaihHalhAindndnaOIdbawNJbbbZMgC:lJbbb9p9DTmbaC:OhXxekcjjjj94hXkaXcCthXdndnaOclfIdbawNJbbbZMgC:lJbbb9p9DTmbaC:Ohrxekcjjjj94hrkarcqtaXVhXdndnaOcwfIdbawNJbbbZMgC:lJbbb9p9DTmbaC:Ohrxekcjjjj94hrkaHaXarVBdbaOcxfhOaHclfhHaAcufgAmbkkaKcFeaYz:tjjjbhravcufhocbhPcbhYindndndnaraiaYcdtgKfydbgAcm4aA7c:v;t;h;Ev2gvcs4av7aoGgHcdtfgXydbgOcuSmbcehvinaiaOcdtgOfydbaASmdaHavfhOavcefhvaraOaoGgHcdtfgXydbgOcu9hmbkkaXaYBdbaPhvaPcefhPxekazaOfydbhvkazaKfavBdbaYcefgYal9hmbkcuaPc8S2gOaPc;D;O;f8U0EhvkcbhXaqavcbyd1:H:cjbHjjjjbbgvBd3aqcvBd2avcbaOz:tjjjbhOdnadTmbaehiinaxaiclfydbgrcx2fgvIdbaxaiydbgocx2fgHIdbg3:tgCaxaicwfydbgYcx2fgAIdlaHIdlg8A:tgwNavIdla8A:tgEaAIdba3:tg8EN:tgLaLNaEaAIdwaHIdwg5:tg8FNavIdwa5:tgEawN:tgwawNaEa8ENaCa8FN:tgCaCNMMg8E:rhEJbbnnJbbjZazaocdtfydbgvazarcdtfydbgASavazaYcdtfydbgrSGgHEh8Fdna8EJbbbb9ETmbaLaE:vhLaCaE:vhCawaE:vhwkaOavc8S2fgvavIdbawa8FaE:rNgEawNNg8FMUdbavaCaEaCNgaNghavIdlMUdlavaLaEaLNg8ENggavIdwMUdwavawaaNgaavIdxMUdxava8EawNg8JavIdzMUdzavaCa8ENg8EavIdCMUdCavawaEaLa5Nawa3Na8AaCNMM:mg8ANg3NgwavIdKMUdKavaCa3NgCavId3MUd3avaLa3NgLavIdaMUdaava3a8ANg3avId8KMUd8KavaEavIdyMUdydnaHmbaOaAc8S2fgva8FavIdbMUdbavahavIdlMUdlavagavIdwMUdwavaaavIdxMUdxava8JavIdzMUdzava8EavIdCMUdCavawavIdKMUdKavaCavId3MUd3avaLavIdaMUdaava3avId8KMUd8KavaEavIdyMUdyaOarc8S2fgva8FavIdbMUdbavahavIdlMUdlavagavIdwMUdwavaaavIdxMUdxava8JavIdzMUdzava8EavIdCMUdCavawavIdKMUdKavaCavId3MUd3avaLavIdaMUdaava3avId8KMUd8KavaEavIdyMUdykaicxfhiaXcifgXad6mbkkcbhAaqcuaPcdtgvaPcFFFFi0Egicbyd1:H:cjbHjjjjbbgHBdaaqcoBd2aqaicbyd1:H:cjbHjjjjbbgiBd8KaqcrBd2aHcFeavz:tjjjbhYdnalTmbazhHinJbbbbJbbjZaOaHydbgXc8S2fgvIdygw:vawJbbbb9BEavIdwaxcwfIdbgwNavIdzaxIdbgCNavIdaMgLaLMMawNavIdlaxclfIdbgLNavIdCawNavId3MgwawMMaLNavIdbaCNavIdxaLNavIdKMgwawMMaCNavId8KMMM:lNhwdndnaYaXcdtgvfgXydbcuSmbaiavfIdbaw9ETmekaXaABdbaiavfawUdbkaHclfhHaxcxfhxalaAcefgA9hmbkkdndnaPmbJbbbbhwxekJbbbbhwinaiIdbgCawawaC9DEhwaiclfhiaPcufgPmbkaw:rhwkakcd4akfhOcehiinaigvcethiavaO6mbkcbhOaqcuavcdtgiavcFFFFi0Ecbyd1:H:cjbHjjjjbbgHBdyaHcFeaiz:tjjjbhXdnadTmbavcufhrcbhPcbhxindnazaeaxcdtfgvydbcdtfydbgiazavclfydbcdtfydbgOSmbaiazavcwfydbcdtfydbgvSmbaOavSmbaYavcdtfydbhAdndnaYaOcdtfydbgvaYaicdtfydbgi9pmbavaA9pmbaAhlaihoavhAxekdnaAai9pmbaAav9pmbaihlavhoxekavhlaAhoaihAkabaPcx2fgvaABdbavcwfaoBdbavclfalBdbdnaXaoc:3F;N8N2alc:F:b:DD27aAc;D;O:B8J27arGgOcdtfgvydbgicuSmbcehHinaHhvdnabaicx2fgiydbaA9hmbaiydlal9hmbaiydwaoSmikavcefhHaXaOavfarGgOcdtfgvydbgicu9hmbkkavaPBdbaPcefhPkaxcifgxad6mbkaPci2hOkcwhvaDTmekaDawUdbkavcdthvaqcxfc98fhiinaiavfydbcbyd:m:H:cjbH:bjjjbbavc98fgvmbkaqc;Wbf8KjjjjbaOk:3ldrue9:8Jjjjjbc;Wb9Rgr8Kjjjjbcbhwarcxfcbc;Kbz:tjjjb8AdnabaeSmbabaeadcdtzMjjjb8AkarcualcdtalcFFFFi0EgDcbyd1:H:cjbHjjjjbbgqBdxarceBd2aqcbaialavcbarcxfz:djjjbcualcx2alc;v:Q;v:Qe0Ecbyd1:H:cjbHjjjjbbhkarcxfaryd2gxcdtfakBdbaraxcefgmBd2akaialavcbcbz:ejjjb8AarcxfamcdtfaDcbyd1:H:cjbHjjjjbbgiBdbaraxcdfgvBd2arcxfavcdtfcuaialaeadaqz:fjjjbgecltaecjjjjiGEcbyd1:H:cjbHjjjjbbgqBdbaqaeaiakalz:gjjjbaxcifhkdnadTmbaoaoNhocbhwabhlcbheindnaqaialydbgvcdtfydbcdtfIdbao9ETmbalclf8PdbhPabawcdtfgDavBdbaDclfaP83dbawcifhwkalcxfhlaecifgead6mbkkdnakTmbaxcdtarcxffcwfhlinalydbcbyd:m:H:cjbH:bjjjbbalc98fhlakcufgkmbkkarc;Wbf8Kjjjjbawk:WCoDud99vue99vuv998Jjjjjbc;Wb9Rgw8KjjjjbdndnarmbcbhDxekawcxfcbc;Kbz:tjjjb8Aawcuadcx2adc;v:Q;v:Qe0Ecbyd1:H:cjbHjjjjbbgqBdxawceBd2aqaeadaicbcbz:ejjjb8AawcuadcdtadcFFFFi0Egkcbyd1:H:cjbHjjjjbbgxBdzawcdBd2adcd4adfhmceheinaegicetheaiam6mbkcbhPawcuaicdtgsaicFFFFi0Ecbyd1:H:cjbHjjjjbbgzBdCawciBd2dndnar:ZgH:rJbbbZMgO:lJbbb9p9DTmbaO:Ohexekcjjjj94hekaicufhAc:bwhCcbhXadhQcbhLinaeaCcufgiaeai9iEaPcefaeaP9kEhDdndnadTmbaDcuf:YhOaqhiaxheadhmindndnaiIdbaONJbbbZMgK:lJbbb9p9DTmbaK:OhYxekcjjjj94hYkaYcCthYdndnaiclfIdbaONJbbbZMgK:lJbbb9p9DTmbaK:Oh8Axekcjjjj94h8Aka8AcqtaYVhYdndnaicwfIdbaONJbbbZMgK:lJbbb9p9DTmbaK:Oh8Axekcjjjj94h8AkaeaYa8AVBdbaicxfhiaeclfheamcufgmmbkazcFeasz:tjjjbhEcbh3cbh5indnaEaxa5cdtfydbgYcm4aY7c:v;t;h;Ev2gics4ai7aAGgmcdtfg8AydbgecuSmbaeaYSmbcehiinaEamaifaAGgmcdtfg8AydbgecuSmeaicefhiaeaY9hmbkka8AaYBdba3aecuSfh3a5cefg5ad9hmbxdkkazcFeasz:tjjjb8Acbh3kdnaQ:ZgKaH:taD:YgOaC:Y:tg8ENaX:Zg8Fa3:Zga:tNa8FaH:taOaP:Y:tghNaaaK:tNMggJbbbb9BmbaKa8F:taha8EaaaH:tNNNag:vaOMhOkaPaDa3ar0giEhPaXa3aiEhXdna3arSmbaDaCaiEgCaP9Rcd9imbdndnaLcl0mbdnaOJbbbZMgO:lJbbb9p9DTmbaO:Ohexdkcjjjj94hexekaPaCfcd9Theka3aQaiEhQaLcefgLcs9hmekkdndnaXmbcihicbhDxekcbhiawakcbyd1:H:cjbHjjjjbbg5BdKawclBd2aPcuf:YhKdndnadTmbaqhiaxheadhmindndnaiIdbaKNJbbbZMgO:lJbbb9p9DTmbaO:OhYxekcjjjj94hYkaYcCthYdndnaiclfIdbaKNJbbbZMgO:lJbbb9p9DTmbaO:Oh8Axekcjjjj94h8Aka8AcqtaYVhYdndnaicwfIdbaKNJbbbZMgO:lJbbb9p9DTmbaO:Oh8Axekcjjjj94h8AkaeaYa8AVBdbaicxfhiaeclfheamcufgmmbkazcFeasz:tjjjbhEcbhDcbh3indndndnaEaxa3cdtgCfydbgYcm4aY7c:v;t;h;Ev2gics4ai7aAGgmcdtfg8AydbgecuSmbcehiinaxaecdtgefydbaYSmdamaifheaicefhiaEaeaAGgmcdtfg8Aydbgecu9hmbkka8Aa3BdbaDhiaDcefhDxeka5aefydbhika5aCfaiBdba3cefg3ad9hmbkcuaDc32giaDc;j:KM;jb0EhexekazcFeasz:tjjjb8AcbhDcbhekawaecbyd1:H:cjbHjjjjbbgeBd3awcvBd2aecbaiz:tjjjbh8Aavcd4hxdnadTmbdnalTmbaxcdthEa5hYaqhealhmadhAina8AaYydbc32fgiaeIdbaiIdbMUdbaiaeclfIdbaiIdlMUdlaiaecwfIdbaiIdwMUdwaiamIdbaiIdxMUdxaiamclfIdbaiIdzMUdzaiamcwfIdbaiIdCMUdCaiaiIdKJbbjZMUdKaYclfhYaecxfheamaEfhmaAcufgAmbxdkka5hmaqheadhYina8Aamydbc32fgiaeIdbaiIdbMUdbaiaeclfIdbaiIdlMUdlaiaecwfIdbaiIdwMUdwaiaiIdxJbbbbMUdxaiaiIdzJbbbbMUdzaiaiIdCJbbbbMUdCaiaiIdKJbbjZMUdKamclfhmaecxfheaYcufgYmbkkdnaDTmba8AhiaDheinaiaiIdbJbbbbJbbjZaicKfIdbgO:vaOJbbbb9BEgONUdbaiclfgmaOamIdbNUdbaicwfgmaOamIdbNUdbaicxfgmaOamIdbNUdbaiczfgmaOamIdbNUdbaicCfgmaOamIdbNUdbaic3fhiaecufgembkkcbhYawcuaDcdtgCaDcFFFFi0Egicbyd1:H:cjbHjjjjbbgeBdaawcoBd2awaicbyd1:H:cjbHjjjjbbgEBd8KaecFeaCz:tjjjbh3dnadTmbaoJbbjZJbbjZaK:vaPceSENgOaONhKaxcdthxalheinaKaec;8:G:cjbalEgmIdwa8Aa5ydbgAc32fgiIdC:tgOaONamIdbaiIdx:tgOaONamIdlaiIdz:tgOaONMMNaqcwfIdbaiIdw:tgOaONaqIdbaiIdb:tgOaONaqclfIdbaiIdl:tgOaONMMMhOdndna3aAcdtgifgmydbcuSmbaEaifIdbaO9ETmekamaYBdbaEaifaOUdbka5clfh5aqcxfhqaeaxfheadaYcefgY9hmbkkaba3aCzMjjjb8Acrhikaicdthiawcxfc98fheinaeaifydbcbyd:m:H:cjbH:bjjjbbaic98fgimbkkawc;Wbf8KjjjjbaDk:Pdidui99ducbhi8Jjjjjbca9Rglcbyd1:G:cjbBdKalcb8Pdj:G:cjb83izalcbydN:G:cjbBdwalcb8Pd:m:G:cjb83ibdndnaembJbbjFhvJbbjFhoJbbjFhrxekadcd4cdthwincbhdinalczfadfgDabadfIdbgvaDIdbgoaoav9EEUdbaladfgDavaDIdbgoaoav9DEUdbadclfgdcx9hmbkabawfhbaicefgiae9hmbkalIdwalIdK:thralIdlalIdC:thoalIdbalIdz:thvkJbbbbavavJbbbb9DEgvaoaoav9DEgvararav9DEk9DeeuabcFeaicdtz:tjjjbhlcbhbdnadTmbindnalaeydbcdtfgiydbcu9hmbaiabBdbabcefhbkaeclfheadcufgdmbkkabk;Bidqui998Jjjjjbc;Wb9Rgl8Kjjjjbalcxfcbc;Kbz:tjjjb8Aadcd4adfhvcehoinaogrcethoarav6mbkalcuarcdtgoarcFFFFi0Ecbyd1:H:cjbHjjjjbbgvBdxavcFeaoz:tjjjbhwdnadTmbaicd4hDarcufhqcbhkindndnawcbaeakaD2cdtfgrydlgiaicjjjj94SEgocH4ao7c:F:b:DD2cbarydbgxaxcjjjj94SEgocH4ao7c;D;O:B8J27cbarydwgmamcjjjj94SEgrcH4ar7c:3F;N8N27aqGgvcdtfgrydbgocuSmbam::hPai::hsax::hzcehiinaihrdnaeaoaD2cdtfgiIdbaz9CmbaiIdlas9CmbaiIdwaP9BmikarcefhiawavarfaqGgvcdtfgrydbgocu9hmbkkarakBdbakhokabakcdtfaoBdbakcefgkad9hmbkkalydxcbyd:m:H:cjbH:bjjjbbalc;Wbf8Kjjjjbk9teiucbcbyd:q:H:cjbgeabcifc98GfgbBd:q:H:cjbdndnabZbcztgd9nmbcuhiabad9RcFFifcz4nbcuSmekaehikaik;LeeeudndnaeabVciGTmbabhixekdndnadcz9pmbabhixekabhiinaiaeydbBdbaiclfaeclfydbBdbaicwfaecwfydbBdbaicxfaecxfydbBdbaeczfheaiczfhiadc9Wfgdcs0mbkkadcl6mbinaiaeydbBdbaeclfheaiclfhiadc98fgdci0mbkkdnadTmbinaiaeRbb86bbaicefhiaecefheadcufgdmbkkabk;aeedudndnabciGTmbabhixekaecFeGc:b:c:ew2hldndnadcz9pmbabhixekabhiinaialBdbaicxfalBdbaicwfalBdbaiclfalBdbaiczfhiadc9Wfgdcs0mbkkadcl6mbinaialBdbaiclfhiadc98fgdci0mbkkdnadTmbinaiae86bbaicefhiadcufgdmbkkabk9teiucbcbyd:q:H:cjbgeabcrfc94GfgbBd:q:H:cjbdndnabZbcztgd9nmbcuhiabad9RcFFifcz4nbcuSmekaehikaikTeeucbabcbyd:q:H:cjbge9Rcifc98GaefgbBd:q:H:cjbdnabZbcztge9nmbabae9RcFFifcz4nb8Akkk:Kedbcj:Gdk1eFFuuFFuuFFuuFFuFFFuFFFuFbbbbbbbbebbbdbbbbbbbebbbebbbdbbbbbbbbbbbeeeeebebbebbebebbbeebbbbbbbbbbbbeeeeeebebbeeebeebbbbebebbbbbbbbbbbbbbbbbbc1:Hdkxebbbdbbb:G:qbb",t=new Uint8Array([32,0,65,2,1,106,34,33,3,128,11,4,13,64,6,253,10,7,15,116,127,5,8,12,40,16,19,54,20,9,27,255,113,17,42,67,24,23,146,148,18,14,22,45,70,69,56,114,101,21,25,63,75,136,108,28,118,29,73,115]);if(typeof WebAssembly!="object")return{supported:!1};var n,i=WebAssembly.instantiate(o(e),{}).then(function(E){n=E.instance,n.exports.__wasm_call_ctors()});function o(E){for(var S=new Uint8Array(E.length),I=0;I<E.length;++I){var R=E.charCodeAt(I);S[I]=R>96?R-97:R>64?R-39:R+4}for(var V=0,I=0;I<E.length;++I)S[V++]=S[I]<60?t[S[I]]:(S[I]-60)*64+S[++I];return S.buffer.slice(0,V)}function r(E){if(!E)throw new Error("Assertion failed")}function s(E){return new Uint8Array(E.buffer,E.byteOffset,E.byteLength)}function a(E,S,I,R){var V=n.exports.sbrk,W=V(I*4),B=V(I*R*4),N=new Uint8Array(n.exports.memory.buffer);N.set(s(S),B),E(W,B,I,R*4),N=new Uint8Array(n.exports.memory.buffer);var P=new Uint32Array(I);return new Uint8Array(P.buffer).set(N.subarray(W,W+I*4)),V(W-V(0)),P}function c(E,S,I){var R=n.exports.sbrk,V=R(S.length*4),W=R(I*4),B=new Uint8Array(n.exports.memory.buffer),N=s(S);B.set(N,V);var P=E(W,V,S.length,I);B=new Uint8Array(n.exports.memory.buffer);var g=new Uint32Array(I);new Uint8Array(g.buffer).set(B.subarray(W,W+I*4)),N.set(B.subarray(V,V+S.length*4)),R(V-R(0));for(var _=0;_<S.length;++_)S[_]=g[S[_]];return[g,P]}function d(E){for(var S=0,I=0;I<E.length;++I){var R=E[I];S=S<R?R:S}return S}function u(E,S,I,R,V,W,B,N,P){var g=n.exports.sbrk,_=g(4),Z=g(I*4),G=g(V*W),w=g(I*4),X=new Uint8Array(n.exports.memory.buffer);X.set(s(R),G),X.set(s(S),w);var k=E(Z,w,I,G,V,W,B,N,P,_);X=new Uint8Array(n.exports.memory.buffer);var v=new Uint32Array(k);s(v).set(X.subarray(Z,Z+k*4));var D=new Float32Array(1);return s(D).set(X.subarray(_,_+4)),g(_-g(0)),[v,D[0]]}function h(E,S,I,R,V,W,B,N,P,g,_,Z,G){var w=n.exports.sbrk,X=w(4),k=w(I*4),v=w(V*W),D=w(V*N),Y=w(P.length*4),O=w(I*4),J=g?w(V):0,te=new Uint8Array(n.exports.memory.buffer);te.set(s(R),v),te.set(s(B),D),te.set(s(P),Y),te.set(s(S),O),g&&te.set(s(g),J);var z=E(k,O,I,v,V,W,D,N,Y,P.length,J,_,Z,G,X);te=new Uint8Array(n.exports.memory.buffer);var j=new Uint32Array(z);s(j).set(te.subarray(k,k+z*4));var ee=new Float32Array(1);return s(ee).set(te.subarray(X,X+4)),w(X-w(0)),[j,ee[0]]}function p(E,S,I,R,V,W,B,N,P,g,_,Z,G){var w=n.exports.sbrk,X=w(4),k=w(V*W),v=w(V*N),D=w(P.length*4),Y=w(I*4),O=g?w(V):0,J=new Uint8Array(n.exports.memory.buffer);J.set(s(R),k),J.set(s(B),v),J.set(s(P),D),J.set(s(S),Y),g&&J.set(s(g),O);var te=E(Y,I,k,V,W,v,N,D,P.length,O,_,Z,G,X);J=new Uint8Array(n.exports.memory.buffer),s(S).set(J.subarray(Y,Y+te*4)),s(R).set(J.subarray(k,k+V*W)),s(B).set(J.subarray(v,v+V*N));var z=new Float32Array(1);return s(z).set(J.subarray(X,X+4)),w(X-w(0)),[te,z[0]]}function A(E,S,I,R){var V=n.exports.sbrk,W=V(I*R),B=new Uint8Array(n.exports.memory.buffer);B.set(s(S),W);var N=E(W,I,R);return V(W-V(0)),N}function f(E,S,I,R,V,W,B,N){var P=n.exports.sbrk,g=P(N*4),_=P(I*R),Z=P(I*W),G=new Uint8Array(n.exports.memory.buffer);G.set(s(S),_),V&&G.set(s(V),Z);var w=E(g,_,I,R,Z,W,B,N);G=new Uint8Array(n.exports.memory.buffer);var X=new Uint32Array(w);return s(X).set(G.subarray(g,g+w*4)),P(g-P(0)),X}function b(E,S,I,R,V,W,B,N,P){var g=n.exports.sbrk,_=g(4),Z=g(I*4),G=g(V*W),w=g(I*4),X=B?g(V):0,k=new Uint8Array(n.exports.memory.buffer);k.set(s(R),G),k.set(s(S),w),B&&k.set(s(B),X);var v=E(Z,w,I,G,V,W,X,N,P,_);k=new Uint8Array(n.exports.memory.buffer);var D=new Uint32Array(v);s(D).set(k.subarray(Z,Z+v*4));var Y=new Float32Array(1);return s(Y).set(k.subarray(_,_+4)),g(_-g(0)),[D,Y[0]]}function C(E,S,I,R,V,W,B){var N=n.exports.sbrk,P=N(I*4),g=N(V*W),_=N(I*4),Z=new Uint8Array(n.exports.memory.buffer);Z.set(s(R),g),Z.set(s(S),_);var G=E(P,_,I,g,V,W,B);Z=new Uint8Array(n.exports.memory.buffer);var w=new Uint32Array(G);return s(w).set(Z.subarray(P,P+G*4)),N(P-N(0)),w}var T={LockBorder:1,Sparse:2,ErrorAbsolute:4,Prune:8,Regularize:16,Permissive:32,_InternalDebug:1<<30};return{ready:i,supported:!0,compactMesh:function(E){r(E instanceof Uint32Array||E instanceof Int32Array||E instanceof Uint16Array||E instanceof Int16Array),r(E.length%3==0);var S=E.BYTES_PER_ELEMENT==4?E:new Uint32Array(E);return c(n.exports.meshopt_optimizeVertexFetchRemap,S,d(E)+1)},generatePositionRemap:function(E,S){return r(E instanceof Float32Array),r(E.length%S==0),r(S>=3),a(n.exports.meshopt_generatePositionRemap,E,E.length/S,S)},simplify:function(E,S,I,R,V,W){r(E instanceof Uint32Array||E instanceof Int32Array||E instanceof Uint16Array||E instanceof Int16Array),r(E.length%3==0),r(S instanceof Float32Array),r(S.length%I==0),r(I>=3),r(R>=0&&R<=E.length),r(R%3==0),r(V>=0);for(var B=0,N=0;N<(W?W.length:0);++N)r(W[N]in T),B|=T[W[N]];var P=E.BYTES_PER_ELEMENT==4?E:new Uint32Array(E),g=u(n.exports.meshopt_simplify,P,E.length,S,S.length/I,I*4,R,V,B);return g[0]=E instanceof Uint32Array?g[0]:new E.constructor(g[0]),g},simplifyWithAttributes:function(E,S,I,R,V,W,B,N,P,g){r(E instanceof Uint32Array||E instanceof Int32Array||E instanceof Uint16Array||E instanceof Int16Array),r(E.length%3==0),r(S instanceof Float32Array),r(S.length%I==0),r(I>=3),r(R instanceof Float32Array),r(R.length==V*(S.length/I)),r(V>=0),r(B==null||B instanceof Uint8Array),r(B==null||B.length==S.length/I),r(N>=0&&N<=E.length),r(N%3==0),r(P>=0),r(Array.isArray(W)),r(V>=W.length),r(W.length<=32);for(var _=0;_<W.length;++_)r(W[_]>=0);for(var Z=0,_=0;_<(g?g.length:0);++_)r(g[_]in T),Z|=T[g[_]];var G=E.BYTES_PER_ELEMENT==4?E:new Uint32Array(E),w=h(n.exports.meshopt_simplifyWithAttributes,G,E.length,S,S.length/I,I*4,R,V*4,new Float32Array(W),B,N,P,Z);return w[0]=E instanceof Uint32Array?w[0]:new E.constructor(w[0]),w},simplifyWithUpdate:function(E,S,I,R,V,W,B,N,P,g){r(E instanceof Uint32Array||E instanceof Int32Array||E instanceof Uint16Array||E instanceof Int16Array),r(E.length%3==0),r(S instanceof Float32Array),r(S.length%I==0),r(I>=3),r(R instanceof Float32Array),r(R.length==V*(S.length/I)),r(V>=0),r(B==null||B instanceof Uint8Array),r(B==null||B.length==S.length/I),r(N>=0&&N<=E.length),r(N%3==0),r(P>=0),r(Array.isArray(W)),r(V>=W.length),r(W.length<=32);for(var _=0;_<W.length;++_)r(W[_]>=0);for(var Z=0,_=0;_<(g?g.length:0);++_)r(g[_]in T),Z|=T[g[_]];var G=E.BYTES_PER_ELEMENT==4?E:new Uint32Array(E),w=p(n.exports.meshopt_simplifyWithUpdate,G,E.length,S,S.length/I,I*4,R,V*4,new Float32Array(W),B,N,P,Z);if(E!==G)for(var _=0;_<w[0];++_)E[_]=G[_];return w},getScale:function(E,S){return r(E instanceof Float32Array),r(E.length%S==0),r(S>=3),A(n.exports.meshopt_simplifyScale,E,E.length/S,S*4)},simplifyPoints:function(E,S,I,R,V,W){return r(E instanceof Float32Array),r(E.length%S==0),r(S>=3),r(I>=0&&I<=E.length/S),R?(r(R instanceof Float32Array),r(R.length%V==0),r(V>=3),r(E.length/S==R.length/V),f(n.exports.meshopt_simplifyPoints,E,E.length/S,S*4,R,V*4,W,I)):f(n.exports.meshopt_simplifyPoints,E,E.length/S,S*4,void 0,0,0,I)},simplifySloppy:function(E,S,I,R,V,W){r(E instanceof Uint32Array||E instanceof Int32Array||E instanceof Uint16Array||E instanceof Int16Array),r(E.length%3==0),r(S instanceof Float32Array),r(S.length%I==0),r(I>=3),r(R==null||R instanceof Uint8Array),r(R==null||R.length==S.length/I),r(V>=0&&V<=E.length),r(V%3==0),r(W>=0);var B=E.BYTES_PER_ELEMENT==4?E:new Uint32Array(E),N=b(n.exports.meshopt_simplifySloppy,B,E.length,S,S.length/I,I*4,R,V,W);return N[0]=E instanceof Uint32Array?N[0]:new E.constructor(N[0]),N},simplifyPrune:function(E,S,I,R){r(E instanceof Uint32Array||E instanceof Int32Array||E instanceof Uint16Array||E instanceof Int16Array),r(E.length%3==0),r(S instanceof Float32Array),r(S.length%I==0),r(I>=3),r(R>=0);var V=E.BYTES_PER_ELEMENT==4?E:new Uint32Array(E),W=C(n.exports.meshopt_simplifyPrune,V,E.length,S,S.length/I,I*4,R);return W=E instanceof Uint32Array?W:new E.constructor(W),W}}})();var Hbn=y(x(),1),Obn=(function(){var e="b9H79Tebbbe:neP9Geueu9Geub9Gbb9Giuuueu9Gmuuuuuuuuuuu9999eu9Gouuuuuueu9Gruuuuuuub9Gxuuuuuuuuuuuueu9Gxuuuuuuuuuuu99eu9GPuuuuuuuuuuuuu99b9Gouuuuuub9Gwuuuuuuuub9Gvuuuuub9GluuuubiQXdilvorwDqokoqxmbiibeilve9Weiiviebeoweuecj:Gdkr;Zeqo9TW9T9VV95dbH9F9F939H79T9F9J9H229F9Jt9VV7bb8A9TW79O9V9Wt9F9I919P29K9nW79O2Wt79c9V919U9KbeY9TW79O9V9Wt9F9I919P29K9nW79O2Wt7S2W94bd39TW79O9V9Wt9F9I919P29K9nW79O2Wt79t9W9Ht9P9H2bo39TW79O9V9Wt9F9J9V9T9W91tWJ2917tWV9c9V919U9K7bw39TW79O9V9Wt9F9J9V9T9W91tW9nW79O2Wt9c9V919U9K7bkE9TW79O9V9Wt9F9J9V9T9W91tW9t9W9OWVW9c9V919U9K7bxL9TW79O9V9Wt9F9V9Wt9P9T9P96W9nW79O2WtbPl79IV9RbsDwebcekdOAq;E:leXdbkIbabaec9:fgefcufae9Ugeabci9Uadfcufad9Ugbaeab0Ek:88JDPue99eux99due99euo99iu8Jjjjjbc:WD9Rgm8KjjjjbdndnalmbcbhPxekamc:Cwfcbc;Kbz:rjjjb8AcuaocdtgsaocFFFFi0Ehzcbyd;0:G:cjbhHdndnalcb9imbaoal9nmbamazaHHjjjjbbgHBd:CwamceBd;8wamazcbyd;0:G:cjbHjjjjbbgOBd:GwamcdBd;8wamcualcdtalcFFFFi0Ecbyd;0:G:cjbHjjjjbbgABd:KwamciBd;8waihzalhsinaHazydbcdtfcbBdbazclfhzascufgsmbkaihzalhsinaHazydbcdtfgCaCydbcefBdbazclfhzascufgsmbkaihzalhCcbhXindnaHazydbcdtgQfgsydbcb9imbaOaQfaXBdbasasydbgQcjjjj94VBdbaQaXfhXkazclfhzaCcufgCmbkalci9UhLdnalci6mbcbhzaihsinascwfydbhCasclfydbhXaOasydbcdtfgQaQydbgQcefBdbaAaQcdtfazBdbaOaXcdtfgXaXydbgXcefBdbaAaXcdtfazBdbaOaCcdtfgCaCydbgCcefBdbaAaCcdtfazBdbascxfhsaLazcefgz9hmbkkaihzalhsindnaHazydbcdtgCfgXydbgQcu9kmbaXaQcFFFFrGgQBdbaOaCfgCaCydbaQ9RBdbkazclfhzascufgsmbxdkkamazaHHjjjjbbgHBd:CwamceBd;8wamazcbyd;0:G:cjbHjjjjbbgOBd:GwamcdBd;8wamcualcdtalcFFFFi0Ecbyd;0:G:cjbHjjjjbbgABd:KwamciBd;8waHcbasz:rjjjbhXaihzalhsinaXazydbcdtfgCaCydbcefBdbazclfhzascufgsmbkalci9UhLdnaoTmbcbhzaOhsaXhCaohQinasazBdbasclfhsaCydbazfhzaCclfhCaQcufgQmbkkdnalci6mbcbhzaihsinascwfydbhCasclfydbhQaOasydbcdtfgKaKydbgKcefBdbaAaKcdtfazBdbaOaQcdtfgQaQydbgQcefBdbaAaQcdtfazBdbaOaCcdtfgCaCydbgCcefBdbaAaCcdtfazBdbascxfhsaLazcefgz9hmbkkaoTmbcbhzaohsinaOazfgCaCydbaXazfydb9RBdbazclfhzascufgsmbkkamaLcbyd;0:G:cjbHjjjjbbgzBd:OwamclBd;8wazcbaLz:rjjjbhYamcuaLcK2alcjjjjd0Ecbyd;0:G:cjbHjjjjbbg8ABd:SwamcvBd;8wJbbbbhEdnalci6g3mbarcd4hKaihsa8AhzaLhrJbbbbh5inavasclfydbaK2cdtfgCIdlh8EavasydbaK2cdtfgXIdlhEavascwfydbaK2cdtfgQIdlh8FaCIdwhaaXIdwhhaQIdwhgazaCIdbg8JaXIdbg8KMaQIdbg8LMJbbnn:vUdbazclfaXIdlaCIdlMaQIdlMJbbnn:vUdbaQIdwh8MaCIdwh8NaXIdwhyazcxfa8EaE:tg8Eagah:tggNaaah:tgaa8FaE:tghN:tgEJbbbbJbbjZa8Ja8K:tg8FahNa8Ea8La8K:tg8KN:tghahNaEaENaaa8KNa8FagN:tgEaENMMg8K:rg8E:va8KJbbbb9BEg8KNUdbazczfaEa8KNUdbazcCfaha8KNUdbazcwfa8Maya8NMMJbbnn:vUdba5a8EMh5ascxfhsazcKfhzarcufgrmbka5aL:Z:vJbbbZNhEkamcuaLcdtalcFFFF970Ecbyd;0:G:cjbHjjjjbbgCBd:WwamcoBd;8waq:Zhhdna3mbcbhzaChsinasazBdbasclfhsaLazcefgz9hmbkkaEahNhhamcuaLcltalcFFFFd0Ecbyd;0:G:cjbHjjjjbbg8PBd:0wamcrBd;8wcba8Pa8AaCaLcbz:djjjb8AJFFuuh8MJFFuuh8NJFFuuhydnalci6mbJFFuuhya8AhzaLhsJFFuuh8NJFFuuh8MinazcwfIdbgEa8Ma8MaE9EEh8MazclfIdbgEa8Na8NaE9EEh8NazIdbgEayayaE9EEhyazcKfhzascufgsmbkkah:rhEamaocetgzcuaocu9kEcbyd;0:G:cjbHjjjjbbgCBd:4wdndnaoal9nmbaihzalhsinaCazydbcetfcFFi87ebazclfhzascufgsmbxdkkaCcFeazz:rjjjb8AkaEJbbbZNh8JcuhIdnalci6mbcbhsJFFuuhEa8AhzcuhIinazcwfIdba8M:tghahNazIdbay:tghahNazclfIdba8N:tghahNMM:rghaEaIcuSahaE9DVgXEhEasaIaXEhIazcKfhzaLascefgs9hmbkkamczfcbcjwz:rjjjb8Aam9cb83iwam9cb83ibaxa8JNh8RJbbjZak:th8Lcbh8SJbbbbhRJbbbbh8UJbbbbh8VJbbbbh8WJbbbbh8XJbbbbh8Ycbh8ZcbhPinJbbbbhEdna8STmbJbbjZa8S:Z:vhEkJbbbbhhdna8Ya8YNa8Wa8WNa8Xa8XNMMg8KJbbbb9BmbJbbjZa8K:r:vhhka8VaENh8Ka8UaENh5aRaENh8EaIhLdndndndndna8SaPVTmbamydwg80Tmea8YahNh8Fa8XahNhaa8WahNhgaeamydbcdtfh81cbh3JFFuuhEcvhQcuhLindnaHa81a3cdtfydbcdtgzfydbgvTmbaAaOazfydbcdtfhsindndnaCaiasydbgKcx2fgzclfydbgrcetf8Vebcs4aCazydbgXcetf8Vebcs4faCazcwfydbglcetf8Vebcs4fgombcbhzxekcehzaHaXcdtfydbgXceSmbcehzaHarcdtfydbgrceSmbcehzaHalcdtfydbglceSmbdnarcdSaXcdSfalcdSfcd6mbaocefhzxekaocdfhzkdnazaQ9kmba8AaKcK2fgXIdwa8K:tghahNaXIdba8E:tghahNaXIdla5:tghahNMM:ra8J:va8LNJbbjZMJ9VO:d86JbbjZaXIdCa8FNaXIdxagNaaaXIdzNMMakN:tghahJ9VO:d869DENghaEazaQ6ahaE9DVgXEhEaKaLaXEhLazaQaXEhQkasclfhsavcufgvmbkka3cefg3a809hmbkkaLcu9hmekama8KUd:ODama5Ud:KDama8EUd:GDamcuBd:qDamcFFF;7rBdjDa8Pcba8AaYamc:GDfamc:qDfamcjDfz:ejjjbamyd:qDhLdndnaxJbbbb9ETmba8SaD6mbaLcuSmeceh3amIdjDa8R9EmixdkaLcu9hmekdna8STmbabaPcltfgHam8Piw83dwaHam8Pib83dbaPcefhPkc3hHinamc:CwfaHfydbcbyd;4:G:cjbH:bjjjbbaHc98fgHc989hmbxvkkcbh3a8Saq9pmbamydwaCaiaLcx2fgzydbcetf8Vebcs4aCazcwfydbcetf8Vebcs4faCazclfydbcetf8Vebcs4ffaw9nmekcbhzcbhsdna8ZTmbcbhsamczfhXinamczfascdtfaXydbgQBdbaXclfhXasaYaQfRbbTfhsa8Zcufg8ZmbkkamydwhlamydbhXam9cu83i:GDam9cu83i:ODam9cu83i:qDam9cu83i:yDinamcjDfazfcFFF;7rBdbazclfgzcz9hmbkasc;8easclfc:bd6Eg8Zcdth80dnalTmbaeaXcdtfhocbhrindnaHaoarcdtfydbcdtgzfydbgvTmbaAaOazfydbcdtfhscuhQcuhzinaHaiasydbgKcx2fgXclfydbcdtfydbaHaXydbcdtfydbfaHaXcwfydbcdtfydbfgXazaXaz6gXEhzaKaQaXEhQasclfhsavcufgvmbkaQcuSmba8AaQcK2fgsIdwa8M:tgEaENasIdbay:tgEaENasIdla8N:tgEaENMM:rhEcbhsindndnazamc:qDfasfgvydbgX6mbazaX9hmeaEamcjDfasfIdb9FTmekavazBdbamc:GDfasfaQBdbamcjDfasfaEUdbxdkasclfgscz9hmbkkarcefgral9hmbkkamczfa80fhQcbhzcbhsindnamc:GDfazfydbgXcuSmbaQascdtfaXBdbascefhskazclfgzcz9hmbkasa8Zfg8ZTmbJFFuuhhcuhKamczfhza8ZhvcuhQina8AazydbgXcK2fgsIdwa8M:tgEaENasIdbay:tgEaENasIdla8N:tgEaENMM:rhEdndnaHaiaXcx2fgsclfydbcdtfydbaHasydbcdtfydbfaHascwfydbcdtfydbfgsaQ6mbasaQ9hmeaEah9DTmekaEhhashQaXhKkazclfhzavcufgvmbkaKcuSmbaKhLkdnamaiaLcx2fgrydbarclfydbarcwfydbaCabaeadaPawaqa3z:fjjjbTmbaPcefhPJbbbbhRJbbbbh8UJbbbbh8VJbbbbh8WJbbbbh8XJbbbbh8YkcbhXinaAaOaraXcdtfydbcdtgsfydbcdtfgKhzaHasfgvydbgQhsdnaQTmbdninazydbaLSmeazclfhzascufgsTmdxbkkazaKaQcdtfc98fydbBdbavavydbcufBdbkaXcefgXci9hmbka8AaLcK2fgzIdbhEazIdlhhazIdwh8KazIdxh5azIdzh8EazIdCh8FaYaLfce86bba8Ya8FMh8Ya8Xa8EMh8Xa8Wa5Mh8Wa8Va8KMh8Va8UahMh8UaRaEMhRamydxh8Sxbkkamc:WDf8KjjjjbaPkjoivuv99lu8Jjjjjbca9Rgo8Kjjjjbdndnalcw0mbaiydbhraeabcitfgwalcdtciVBdlawarBdbdnalcd6mbaiclfhralcufhDawcxfhwinarydbhqawcuBdbawc98faqBdbawcwfhwarclfhraDcufgDmbkkalabfhwxekcbhqaocbBdKao9cb83izaocbBdwao9cb83ibJbbjZhkJbbjZhxinadaiaqcdtfydbcK2fhDcbhwinaoczfawfgraDawfIdbgmarIdbgP:tgsaxNaPMgPUdbaoawfgrasamaP:tNarIdbMUdbawclfgwcx9hmbkJbbjZakJbbjZMgk:vhxaqcefgqal9hmbkcbhradcbcecdaoIdlgmaoIdwgP9GEgwaoIdbgsaP9GEawasam9GEgzcdtgwfhHaoczfawfIdbhmaihwalhDinaiarcdtfgqydbhOaqawydbgABdbawaOBdbawclfhwaraHaAcK2fIdbam9DfhraDcufgDmbkdndnarcv6mbavc8X9kmbaralc98f6mekaiydbhraeabcitfgwalcdtciVBdlawarBdbaiclfhralcufhDawcxfhwinarydbhqawcuBdbawc98faqBdbawcwfhwarclfhraDcufgDmbkalabfhwxekaeabcitfgwamUdbawawydlc98GazVBdlabcefaeadaiaravcefgqz:djjjbhDawawydlciGaDabcu7fcdtVBdlaDaeadaiarcdtfalar9Raqz:djjjbhwkaocaf8Kjjjjbawk;Oddvue99dninabaecitfgrydlgwcd4gDTmednawciGgqci9hmbcihqdnawcl6mbabaecitfhbcbheawhqcehkindnaiabydbgDfRbbmbcbhkadaDcK2fgwIdwalIdw:tgxaxNawIdbalIdb:tgxaxNawIdlalIdl:tgxaxNMM:rgxaoIdb9DTmbaoaxUdbavaDBdbarydlhqkabcwfhbaecefgeaqcd46mbkakceGTmikaraqciGBdlskdnabcbaDalaqcdtfIdbarIdb:tgxJbbbb9FEgwaD7aecefgDfgecitfydlabawaDfgDcitfydlVci0mbaraqBdlkabaDadaialavaoz:ejjjbax:laoIdb9Fmbkkkjlevudndnabydwgxaladcetfgm8Vebcs4alaecetfgP8Vebgscs4falaicetfgz8Vebcs4ffaD0mbakmbcbhDabydxaq6mekavawcltfgxab8Pdw83dwaxab8Pdb83dbabydbhDdnabydwgwTmbaoaDcdtfhxawhsinalaxydbcetfcFFi87ebaxclfhxascufgsmbkkabaDawfBdbabydxhxab9cb83dwababydlaxci2fBdlaP8VebhscehDcbhxkdnascztcz91cu9kmbabaxcefBdwaPax87ebaoabydbcdtfaxcdtfaeBdbkdnam8Uebcu9kmbababydwgxcefBdwamax87ebaoabydbcdtfaxcdtfadBdbkdnaz8Uebcu9kmbababydwgxcefBdwazax87ebaoabydbcdtfaxcdtfaiBdbkarabydlfabydxci2faPRbb86bbarabydlfabydxci2fcefamRbb86bbarabydlfabydxci2fcdfazRbb86bbababydxcefBdxaDk:mPrHue99eue99eue99iu8Jjjjjbc;W;Gb9Rgx8KjjjjbdndnalmbcbhmxekcbhPaxc:m;Gbfcbc;Kbz:rjjjb8Aaxcualci9UgscltascjjjjiGEcbyd;0:G:cjbHjjjjbbgzBd:m9GaxceBd;S9GaxcuascK2gHcKfalcpFFFe0Ecbyd;0:G:cjbHjjjjbbgOBd:q9GaxcdBd;S9Gdnalci6gAmbarcd4hCascdthXaOhQazhLinavaiaPcx2fgrydwaC2cdtfhKavarydlaC2cdtfhYavarydbaC2cdtfh8AcbhraLhEinaQarfgma8Aarfg3Idbg5aYarfg8EIdbg8Fa5a8F9DEg5UdbamaKarfgaIdbg8Fa5a8Fa59DEg8FUdbamcxfgma3Idbg5a8EIdbgha5ah9EEg5UdbamaaIdbgha5aha59EEg5UdbaEa8Fa5MJbbbZNUdbaEaXfhEarclfgrcx9hmbkaQcKfhQaLclfhLaPcefgPas9hmbkkaOaHfgr9cb83dbar9cb83dzar9cb83dwaxcuascx2gralc:bjjjl0Ecbyd;0:G:cjbHjjjjbbgHBdN9GaxciBd;S9GascdthgazarfhvaxcwVhPaxclVhCaHh8Jazh8KcbhLinaxcbcj;Gbz:rjjjbhEaLas2cdthadnaAmba8Khrash3inaEarydbgmc8F91cjjjj94Vam7gmcQ4cx2fg8Ea8EydwcefBdwaEamcd4cFrGcx2fg8Ea8EydbcefBdbaEamcx4cFrGcx2fgmamydlcefBdlarclfhra3cufg3mbkkazaafh8AaHaafhXcbhmcbh3cbh8EcbhainaEamfgrydbhQara3BdbarcwfgKydbhYaKaaBdbarclfgrydbhKara8EBdbaQa3fh3aYaafhaaKa8Efh8Eamcxfgmcj;Gb9hmbkdnaAmbcbhravhminamarBdbamclfhmasarcefgr9hmbkavhrashminaEa8Aarydbg3cdtfydbg8Ec8F91a8E7cd4cFrGcx2fg8Ea8Eydbg8EcefBdbaXa8Ecdtfa3Bdbarclfhramcufgmmbka8JhrashminaCa8Aarydbg3cdtfydbg8Ec8F91a8E7cx4cFrGcx2fg8Ea8Eydbg8EcefBdbava8Ecdtfa3BdbarclfhramcufgmmbkavhrashminaPa8Aarydbg3cdtfydbg8Ec8F91cjjjj94Va8E7cQ4cx2fg8Ea8Eydbg8EcefBdbaXa8Ecdtfa3Bdbarclfhramcufgmmbkka8Jagfh8Ja8Kagfh8KaLcefgLci9hmbkaEaocetgrcuaocu9kEcbyd;0:G:cjbHjjjjbbgKBd:y9GaEclBd;S9Gdndnaoal9nmbaihralhminaKarydbcetfcFFi87ebarclfhramcufgmmbxdkkaKcFearz:rjjjb8Akcbh8EaEascbyd;0:G:cjbHjjjjbbg8ABd:C9GaOaHaHascdtfaHascitfa8AascbazaKaiawaDaqakz:hjjjbdndnalci6mba8Ahrashmina8EarRbbfh8EarcefhramcufgmmbkaE9cb83iwaE9cb83ibalawc9:fgrfcufar9UgrasaDfcufaD9Ugmaram0EhYcbhmcbhra8Ehaincbh3dnarTmba8AarfRbbceSh3kamaEaiaHydbcx2fgQydbaQclfydbaQcwfydbaKabaeadamawaqa3a3ce7a8EaY9nVaaamfaY6VGz:fjjjbfhmaHclfhHaaa8AarfRbb9Rhaasarcefgr9hmbkaEydxTmeabamcltfgraE8Piw83dwaraE8Pib83dbamcefhmxekaE9cb83iwaE9cb83ibcbhmkczhrinaEc:m;Gbfarfydbcbyd;4:G:cjbH:bjjjbbarc98fgrc989hmbkkaxc;W;Gbf8Kjjjjbamk:wKDQue99iue99iul9:euw99iu8Jjjjjbc;qb9RgP8Kjjjjbaxhsaxhzdndnavax0gHmbdnavTmbcbhOaehzavhAinawaDazydbcx2fgCcwfydbcetfgX8VebhQawaCclfydbcetfgL8VebhKawaCydbcetfgC8VebhYaXce87ebaLce87ebaCce87ebaOaKcs4aYcs4faQcs4ffhOazclfhzaAcufgAmbkaehzavhAinawaDazydbcx2fgCcwfydbcetfcFFi87ebawaCclfydbcetfcFFi87ebawaCydbcetfcFFi87ebazclfhzaAcufgAmbkcehzaqhsaOaq0mekalce86bbalcefcbavcufz:rjjjb8AxekaPaiBdxaPadBdwaPaeBdlavakaqci9Ug8Aaka8Aak6EaHEgK9RhEaxaK9Rh3aKcufh5aKceth8EaKcdtgCc98fh8FavcitgOaC9Rarfc98fhaascufhhavcufhgaraOfh8JJbbjZas:Y:vh8KcbazceakaxSEg8Lcdtg8M9Rh8NJFFuuhycuh8PcbhIcbh8RinaPclfa8RcdtfydbhQaPcb8Pd:y:G:cjbg8S83i9iaPcb8Pd:q:G:cjbgR83inaPcb8Pd1:G:cjbg8U83iUaPcb8Pdj:G:cjbg8V83i8WaPa8S83iyaPaR83iaaPa8U83iKaPa8V83izaQavcdtgYfh8WcbhXinabaQaXcdtgLfydbcK2fhAcbhzinaPc8WfazfgCaAazfgOIdbg8XaCIdbg8Ya8Xa8Y9DEUdbaCczfgCaOcxfIdbg8XaCIdbg8Ya8Xa8Y9EEUdbazclfgzcx9hmbkaba8WaXcu7cdtfydbcK2fhAcbhzaPIdUh8ZaPId9ih80aPId80h81aPId9ehBaPId8Wh83aPIdnhUinaPczfazfgCaAazfgOIdbg8XaCIdbg8Ya8Xa8Y9DEUdbaCczfgCaOcxfIdbg8XaCIdbg8Ya8Xa8Y9EEUdbazclfgzcx9hmbkaraLfgzaBa81:tg8Xa80a8Z:tg8YNaUa83:tg8Za8XNa8Za8YNMMUdbazaYfaPId8KaPIdC:tg8XaPIdyaPIdK:tg8YNaPIdaaPIdz:tg8Za8XNa8Za8YNMMUdbaXcefgXav9hmbkcbh85dnaHmbcbhAaQhza8JhCavhXinawaDazydbcx2fgOcwfydbcetfgL8Vebh8WawaOclfydbcetfg858Vebh86awaOydbcetfgO8Vebh87aLce87eba85ce87ebaOce87ebaCaAa86cs4a87cs4fa8Wcs4ffgABdbazclfhzaCclfhCaXcufgXmbkavhCinawaDaQydbcx2fgzcwfydbcetfcFFi87ebawazclfydbcetfcFFi87ebawazydbcetfcFFi87ebaQclfhQaCcufgCmbka8Jh85kdndndndndndndndndndndnava8E6mba8Eax9nmeavavaK9UgzaK29Raza320mda5aE9pmqa85Th87ceh8WaEhQxwka5ag9pmDa8Eax9nmixokavaK6mea5aE9pmwcehQaEhXa85Tmixlka5ag6mlxrka5ag9pmokcbhQaghXa85mekJFFuuh8XcbhLa5hzindnazcefgCaK6mbaQavaC9RgOaK6GmbarazcdtfIdbg8YaC:YNaravaz9RcdtfaYfc94fIdbg8ZaO:YNMg80a8X9Embdndna8KaOahf:YNg81:lJbbb9p9DTmba81:OhAxekcjjjj94hAka8ZasaA2aO9R:YNh8Zdndna8Kazasf:YNg81:lJbbb9p9DTmba81:OhOxekcjjjj94hOkamasaO2aC9R:Ya8YNa8ZMNa80Mg8Ya8Xa8Ya8X9DgOEh8XaCaLaOEhLkaza8LfgzaX6mbxlkkJFFuuh8XcbhLaEhCaahAa8FhOaKhzindnazaK6mbaQaCaK6GmbaraOfIdbg8Yaz:YNaAIdbg8ZaC:YNMg80a8X9Embdndna8Ka85aOfydbgYahf:YNg81:lJbbb9p9DTmba81:Oh8Wxekcjjjj94h8Wkamasa8W2aY9R:Yg81a8YNa8Za81NMNa80Mg8Ya8Xa8Ya8X9DgYEh8XazaLaYEhLkaCa8L9RhCaAa8NfhAaOa8MfhOaza8LfgzcufaX6mbxikka85Th87cbh8WaghQkJFFuuh8XcbhLaEhCaahAa8FhOaKhzindnazazaK9UgXaK29RaXa320mbdna8WTmbaCaCaK9UgXaK29RaXa320mekaraOfIdbg8Yaz:YNaAIdbg8ZaC:YNMg80a8X9EmbazhXaChYdna87mba85aOfydbgXhYkdndna8KaYahf:YNg81:lJbbb9p9DTmba81:Oh86xekcjjjj94h86ka8Zasa862aY9R:YNh8Zdndna8KaXahf:YNg81:lJbbb9p9DTmba81:OhYxekcjjjj94hYkamasaY2aX9R:Ya8YNa8ZMNa80Mg8Ya8Xa8Ya8X9DgXEh8XazaLaXEhLkaCa8L9RhCaAa8NfhAaOa8MfhOaza8LfgzcufaQ6mbkkaLTmba8Xay9DTmba8XhyaLhIa8Rh8Pka8Rcefg8Rci9hmbkdndnaoc8X9kmba8Pcb9omeka8Acufh85cbhYindndndnavaY9RaxaYaxfav0Eg8WTmbcbhAaeaYcdtfgzhCa8WhXinawaDaCydbcx2fgOcwfydbcetfgQ8VebhbawaOclfydbcetfgL8VebhrawaOydbcetfgO8VebhKaQce87ebaLce87ebaOce87ebaAarcs4aKcs4fabcs4ffhAaCclfhCaXcufgXmbka8WhOinawaDazydbcx2fgCcwfydbcetfcFFi87ebawaCclfydbcetfcFFi87ebawaCydbcetfcFFi87ebazclfhzaOcufgOmbkaAaq0mekalaYfgzce86bbazcefcba8Wcufz:rjjjb8AxekalaYfgzce86bbazcefcba85z:rjjjb8Aa8Ah8Wka8WaYfgYav9pmdxbkkaravcdtg8WfhLdnaITmbaPclfa8PcdtfydbhzaIhCinaLazydbfcb86bbazclfhzaCcufgCmbkkdnavaI9nmbaPclfa8PcdtfydbaIcdtfhzavaI9RhCinaLazydbfce86bbazclfhzaCcufgCmbkkcbhYindnaYa8PSmbcbhzaraPclfaYcdtfydbgKa8Wz:qjjjbhCavhXaIhOinaKaOazaLaCydbgQfRbbgAEcdtfaQBdbaCclfhCaOaAfhOazaA9RcefhzaXcufgXmbkkaYcefgYci9hmbkabaeadaialaIaocefgCarawaDaqakaxamz:hjjjbabaeaIcdtgzfadazfaiazfalaIfavaI9RaCarawaDaqakaxamz:hjjjbkaPc;qbf8Kjjjjbk:Seeru8Jjjjjbc:q;ab9Rgo8Kjjjjbaoc:q8WfcFecjzz:rjjjb8AcbhrdnadTmbaehwadhDinaoarcdtfawydbgqBdbaoc:q8WfaqcFiGcdtfgkydbhxakaqBdbawclfhwaraxaq9hfhraDcufgDmbkkabaeadaoaraiavz:jjjjbaoc:q;abf8Kjjjjbk;Sqloud99euD998Jjjjjbc:W;ab9Rgr8KjjjjbdndnadTmbaocd4hwcbhDcbhqindnavaeclfydbaw2cdtfgkIdbavaeydbaw2cdtfgxIdbgm:tgPavaecwfydbaw2cdtfgsIdlaxIdlgz:tgHNakIdlaz:tgOasIdbam:tgAN:tgCaCNaOasIdwaxIdwgX:tgQNakIdwaX:tgOaHN:tgHaHNaOaANaPaQN:tgPaPNMMgOJbbbb9Bmbarc8WfaDcltfgkaCaO:rgO:vgCUdwakaPaO:vgPUdlakaHaO:vgHUdbakaCaXNaHamNazaPNMM:mUdxaDcefhDkaecxfheaqcifgqad6mbkab9cb83dyab9cb83daab9cb83dKab9cb83dzab9cb83dwab9cb83dbaDTmearcbBd8Sar9cb83iKar9cb83izarczfavalaoarc8Sfcbcraiz:kjjjbarIdKhQarIdChLarIdzhKar9cb83iwar9cb83ibararc8WfaDczarc8Sfcbcicbz:kjjjbJbbbbhmdnarIdwgzazNarIdbgHaHNarIdlgXaXNMMgCJbbbb9BmbJbbjZaC:r:vhmkazamNhCaXamNhXaHamNhHJbbjZhmarc8WfheaDhvinaecwfIdbaCNaeIdbaHNaXaeclfIdbNMMgzamazam9DEhmaeczfheavcufgvmbkabaQUdwabaLUdlabaKUdbabarId3UdxdndnamJ;n;m;m899FmbJbbbbhzarc8WfheinaecxfIdbaQaecwfIdbgPNaKaeIdbgONaLaeclfIdbgANMMMaCaPNaHaONaXaANMM:vgPazaPaz9EEhzaeczfheaDcufgDmbkabaCUd8KabaXUdaabaHUd3abaQaCazN:tUdKabaLaXazN:tUdCabaKaHazN:tUdzabJbbjZamamN:t:rgmUdydndnaCJbbj:;aCJbbj:;9GEgzJbbjZazJbbjZ9FEJbb;:9cNJbbbZJbbb:;aCJbbbb9GEMgz:lJbbb9p9DTmbaz:Ohexekcjjjj94hekabae86b8UdndnaXJbbj:;aXJbbj:;9GEgzJbbjZazJbbjZ9FEJbb;:9cNJbbbZJbbb:;aXJbbbb9GEMgz:lJbbb9p9DTmbaz:Ohvxekcjjjj94hvkabav86bRdndnaHJbbj:;aHJbbj:;9GEgzJbbjZazJbbjZ9FEJbb;:9cNJbbbZJbbb:;aHJbbbb9GEMgz:lJbbb9p9DTmbaz:Ohwxekcjjjj94hwkabaw86b8SdndnaecKtcK91:YJbb;:9c:vaC:t:lavcKtcK91:YJbb;:9c:vaX:t:lawcKtcK91:YJbb;:9c:vaH:t:lamMMMJbb;:9cNJbbjZMgm:lJbbb9p9DTmbam:Ohexekcjjjj94hekaecFbaecFb9iEhexekabcjjj;8iBdycFbhekabae86b8Vxekab9cb83dyab9cb83daab9cb83dKab9cb83dzab9cb83dwab9cb83dbkarc:W;abf8Kjjjjbk;7woDuo99eue99euv998Jjjjjbcje9Rgw8Kjjjjbawc;abfcbaocdtgDz:rjjjb8Aawc;GbfcbaDz:rjjjb8AawcafhDawhqaohkinaqcFFF97BdbaDcFFF;7rBdbaqclfhqaDclfhDakcufgkmbkavcd4hxaicd4hmdnadTmbaocx2hPcbhsinashzdnarTmbarascdtfydbhzkaeazam2cdtfgDIdwhHaDIdlhOaDIdbhAalazax2cdtfIdbhCcbhDawcafhqawc;Gbfhvawhkawc;abfhiinaCaDc:O:G:cjbfIdbaHNaDc:G:G:cjbfIdbaANaDc:K:G:cjbfIdbaONMMgXMhQazhLdnaXaC:tgXaqIdbgK9DgYmbavydbhLkavaLBdbazhLdnaQakIdbg8A9EmbaiydbhLa8AhQkaiaLBdbakaQUdbaqaXaKaYEUdbaiclfhiakclfhkavclfhvaqclfhqaPaDcxfgD9hmbkascefgsad9hmbkkJbbbbhQcbhLawc;GbfhDawc;abfhqcbhkinalaqydbgvax2cdtfIdbalaDydbgiax2cdtfIdbaeavam2cdtfgvIdwaeaiam2cdtfgiIdw:tgCaCNavIdbaiIdb:tgCaCNavIdlaiIdl:tgCaCNMM:rMMgCaQaCaQ9EgvEhQakaLavEhLaqclfhqaDclfhDaoakcefgk9hmbkJbbbbhCdnaeawc;abfaLcdtgqfydbgkam2cdtfgDIdwaeawc;Gbfaqfydbgvam2cdtfgqIdwgH:tgXaXNaDIdbaqIdbgA:tg8Aa8ANaDIdlaqIdlgE:tgOaONMMgKJbbbb9ETmbaK:rgCalakax2cdtfIdbMalavax2cdtfIdb:taCaCM:vhCkaQJbbbZNhKaXaCNaHMhHaOaCNaEMhOa8AaCNaAMhAdnadTmbcbhqarhkinaqhDdnarTmbakydbhDkdnalaDax2cdtfIdbg3aeaDam2cdtfgDIdwaH:tgQaQNaDIdbaA:tgCaCNaDIdlaO:tgXaXNMMg5:rgEMg8EaK9ETmbJbbbbh8Adna5Jbbbb9ETmba8EaK:taEaEM:vh8Aka8AaQNaHMhHa8AaXNaOMhOa8AaCNaAMhAa3aKaEMMJbbbZNhKkakclfhkadaqcefgq9hmbkkabaKUdxabaHUdwabaOUdlabaAUdbawcjef8Kjjjjbk:reevu8Jjjjjbcj8W9Rgr8Kjjjjbaici2hwcbhDdnaiTmbarhiawhqinaiaeadRbbgkcdtfydbBdbaDakcefgkaDak0EhDaiclfhiadcefhdaqcufgqmbkkabarawaeaDalaoz:jjjjbarcj8Wf8Kjjjjbk:Eeeeu8Jjjjjbca9Rgo8Kjjjjbab9cb83dyab9cb83daab9cb83dKab9cb83dzab9cb83dwab9cb83dbdnadTmbaocbBd3ao9cb83iwao9cb83ibaoaeadaialaoc3falEavcbalEcrcbz:kjjjbabao8Pib83dbabao8Piw83dwkaocaf8Kjjjjbk:SmeQu8Jjjjjbcjz9Rgv8KjjjjbcbhoavcjPfcbaez:rjjjb8Aavcjxfcbaez:rjjjb8AdnaiTmbadhoaihrinavcjxfaoRbbfgwawRbbcef86bbavcjxfaocefRbbfgwawRbbcef86bbavcjxfaocdfRbbfgwawRbbcef86bbaocifhoarcufgrmbkcbhDcjehoadhqcehkindndnalTmbcbhxcuhmaqhrakhwcuhPinawcufamaoavcjPfarcefRbbgsfRbb9RcFeGgzci6aoavcjPfarRbbgHfRbb9RcFeGgOci6faoavcjPfarcdfRbbgAfRbb9RcFeGgCci6fgXcOtaOcFr7azaCf9RcwtVavcjxfaAfRbbgzavcjxfaHfRbbgHavcjxfasfRbbgsaHas6Egsazas6EcFe7VgsaP9kgzEhmaXcd6gHaxcefgOal9iVce9hmdasaPazEhPaxaOaHEhxarcifhrawai6hsawcefhwasmbxdkkcuhmaqhrakhwcuhxinawcufamaoavcjPfarcefRbbfRbb9RcFeGci6aoavcjPfarRbbfRbb9RcFeGci6faoavcjPfarcdfRbbfRbb9RcFeGci6fgPax9kgsEhmaPce0meaPaxasEhxarcifhrawai6hPawcefhwaPmbkkadamci2fgrcdfRbbhwarcefRbbhxarRbbhPadaDci2fgrcifaramaD9Rci2zNjjjb8AaPavcjPffaocefgo86bbaPavcjxffgmamRbbcuf86bbaxavcjPffao86bbaxavcjxffgmamRbbcuf86bbarcdfaw86bbarcefax86bbaraP86bbawavcjPffao86bbawavcjxffgrarRbbcuf86bbaqcifhqakcefhkaDcefgDai9hmbkcbhzdnalcb9mmbcbhsavcjPfcbaez:rjjjb8Aadcvfhlinadasci2fgxcefgDRbbhoaxcdfgqRbbhrdndnavcjPfaxRbbgmfRbbmbavcjPfarfRbbhwdndndnavcjPfaofRbbTmbawcFeGTmexikawcFeGmdascefgAai9pmdasc980mdascifhQcbhLarcFeGhCamcFeGhXalhwcbhKcbhYinawcufRbbhPawRbbhOcehkdndnawc9:fRbbgHao9hmbaPcFeGamSmekdnaPcFeGao9hmbaOcFeGamSmekaHamSaOcFeGaoSGhkkceh8AaYceGhYdndnaHar9hmbaPcFeGaoSmekdnaPcFeGar9hmbaOcFeGaoSmekaHaoSaOcFeGarSGh8AkakaYVhYaLaHcFeGgHaXSaPcFeGgPaCSGaPaXSaOcFeGgPaCSGVaHaCSaPaXSGVVhLa8AaKceGVhKdnaAcefgPai9pmbawcifhwaAaQ6hHaPhAaHmekkaYTmeaKmekarhwaohPaohHarhOamhrxdkaYTaLVceGmbamhwarhParhHamhOaohrxekaohwamhPamhHaohOkavcjPfarfce86bbavcjPfawfce86bbaxaH86bbaqar86bbaDaO86bbavcjPfaPfce86bbalcifhlascefgsai9hmbkkavcFeaecetz:rjjjbhwaici2hrindnawadRbbgmcetfgx8Uebgocu9kmbaxaz87ebawcjlfazcdtfabamcdtfydbBdbazhoazcefhzkadao86bbadcefhdarcufgrmbkazcdthokabavcjlfaoz:qjjjb8Aavcjzf8KjjjjbkObabaiaeadcbz:njjjbk9teiucbcbyd;8:G:cjbgeabcifc98GfgbBd;8:G:cjbdndnabZbcztgd9nmbcuhiabad9RcFFifcz4nbcuSmekaehikaik;LeeeudndnaeabVciGTmbabhixekdndnadcz9pmbabhixekabhiinaiaeydbBdbaiclfaeclfydbBdbaicwfaecwfydbBdbaicxfaecxfydbBdbaeczfheaiczfhiadc9Wfgdcs0mbkkadcl6mbinaiaeydbBdbaeclfheaiclfhiadc98fgdci0mbkkdnadTmbinaiaeRbb86bbaicefhiaecefheadcufgdmbkkabk;aeedudndnabciGTmbabhixekaecFeGc:b:c:ew2hldndnadcz9pmbabhixekabhiinaialBdbaicxfalBdbaicwfalBdbaiclfalBdbaiczfhiadc9Wfgdcs0mbkkadcl6mbinaialBdbaiclfhiadc98fgdci0mbkkdnadTmbinaiae86bbaicefhiadcufgdmbkkabk9teiucbcbyd;8:G:cjbgeabcrfc94GfgbBd;8:G:cjbdndnabZbcztgd9nmbcuhiabad9RcFFifcz4nbcuSmekaehikaikTeeucbabcbyd;8:G:cjbge9Rcifc98GaefgbBd;8:G:cjbdnabZbcztge9nmbabae9RcFFifcz4nb8Akk:3qeludndnadch6mbadTmeabaead;8qbbabskabaeSmbdnaeadabfgi9Rcbadcet9R0mbadTmeabaead;8qbbabskaeab7ciGhldndndnabae9pmbdnalTmbadhvabhixikdnabciGmbadhvabhixdkadTmiabaeRbb86bbadcufhvdnabcefgiciGmbaecefhexdkavTmiabaeRbe86beadc9:fhvdnabcdfgiciGmbaecdfhexdkavTmiabaeRbd86bdadc99fhvdnabcifgiciGmbaecifhexdkavTmiabaeRbi86biabclfhiaeclfheadc98fhvxekdnalmbdnaiciGTmbadTmlabadcufgifglaeaifRbb86bbdnalciGmbaihdxekaiTmlabadc9:fgifglaeaifRbb86bbdnalciGmbaihdxekaiTmlabadc99fgifglaeaifRbb86bbdnalciGmbaihdxekaiTmlabadc98fgdfaeadfRbb86bbkadcl6mbdnadc98fgocxGcxSmbaocd4cefciGhiaec98fhlabc98fhvinavadfaladfydbBdbadc98fhdaicufgimbkkaocx6mbaec9Wfhvabc9WfhoinaoadfgicxfavadfglcxfydbBdbaicwfalcwfydbBdbaiclfalclfydbBdbaialydbBdbadc9Wfgdci0mbkkadTmdadhidnadciGglTmbaecufhvabcufhoadhiinaoaifavaifRbb86bbaicufhialcufglmbkkadcl6mdaec98fhlabc98fhvinavaifgecifalaifgdcifRbb86bbaecdfadcdfRbb86bbaecefadcefRbb86bbaeadRbb86bbaic98fgimbxikkavcl6mbdnavc98fglc3Gc3Smbavalcd4cefcrGgdcdt9RhvinaiaeydbBdbaeclfheaiclfhiadcufgdmbkkalc36mbinaiaeydbBdbaiclfaeclfydbBdbaicwfaecwfydbBdbaicxfaecxfydbBdbaiczfaeczfydbBdbaicCfaecCfydbBdbaicKfaecKfydbBdbaic3faec3fydbBdbaecafheaicafhiavc9Gfgvci0mbkkavTmbdndnavcrGgdmbavhlxekavc94GhlinaiaeRbb86bbaicefhiaecefheadcufgdmbkkavcw6mbinaiaeRbb86bbaicefaecefRbb86bbaicdfaecdfRbb86bbaicifaecifRbb86bbaiclfaeclfRbb86bbaicvfaecvfRbb86bbaicofaecofRbb86bbaicrfaecrfRbb86bbaicwfhiaecwfhealc94fglmbkkabkk:pedbcj:GdktFFuuFFuuFFuubbbbFFuFFFuFFFuFbbbbbbjZbbbbbbbbbbbbbbjZbbbbbbbbbbbbbbjZ86;nAZ86;nAZ86;nAZ86;nA:;86;nAZ86;nAZ86;nAZ86;nA:;86;nAZ86;nAZ86;nAZ86;nA:;bc;0:Gdkxebbbdbbbj:qbb",t=new Uint8Array([32,0,65,2,1,106,34,33,3,128,11,4,13,64,6,253,10,7,15,116,127,5,8,12,40,16,19,54,20,9,27,255,113,17,42,67,24,23,146,148,18,14,22,45,70,69,56,114,101,21,25,63,75,136,108,28,118,29,73,115]);if(typeof WebAssembly!="object")return{supported:!1};var n,i=WebAssembly.instantiate(o(e),{}).then(function(b){n=b.instance,n.exports.__wasm_call_ctors()});function o(b){for(var C=new Uint8Array(b.length),T=0;T<b.length;++T){var E=b.charCodeAt(T);C[T]=E>96?E-97:E>64?E-39:E+4}for(var S=0,T=0;T<b.length;++T)C[S++]=C[T]<60?t[C[T]]:(C[T]-60)*64+C[++T];return C.buffer.slice(0,S)}function r(b){if(!b)throw new Error("Assertion failed")}function s(b){return new Uint8Array(b.buffer,b.byteOffset,b.byteLength)}var a=48,c=16;function d(b,C){var T=b.meshlets[C*4+0],E=b.meshlets[C*4+1],S=b.meshlets[C*4+2],I=b.meshlets[C*4+3];return{vertices:b.vertices.subarray(T,T+S),triangles:b.triangles.subarray(E,E+I*3)}}function u(b,C,T,E,S,I,R,V,W,B){var N=n.exports.sbrk,P=n.exports.meshopt_buildMeshletsBound(C.length,I,R),g=N(P*c),_=N(C.length*4),Z=N(C.length),G=N(C.byteLength),w=N(T.byteLength),X=new Uint8Array(n.exports.memory.buffer);X.set(s(C),G),X.set(s(T),w);var k=b(g,_,Z,G,C.length,w,E,S,I,R,V,W,B);X=new Uint8Array(n.exports.memory.buffer);for(var v=X.subarray(g,g+k*c),D=new Uint32Array(v.buffer,v.byteOffset,v.byteLength/4).slice(),Y=0;Y<k;++Y){var O=D[Y*4+0],J=D[Y*4+1],E=D[Y*4+2],te=D[Y*4+3];n.exports.meshopt_optimizeMeshlet(_+O*4,Z+J,te,E)}var z=D[(k-1)*4+0],j=D[(k-1)*4+1],ee=D[(k-1)*4+2],ge=D[(k-1)*4+3],ye=z+ee,ae=j+ge*3,Ce={meshlets:D,vertices:new Uint32Array(X.buffer,_,ye).slice(),triangles:new Uint8Array(X.buffer,Z,ae).slice(),meshletCount:k};return N(g-N(0)),Ce}function h(b){var C=new Float32Array(n.exports.memory.buffer,b,a/4);return{centerX:C[0],centerY:C[1],centerZ:C[2],radius:C[3],coneApexX:C[4],coneApexY:C[5],coneApexZ:C[6],coneAxisX:C[7],coneAxisY:C[8],coneAxisZ:C[9],coneCutoff:C[10]}}function p(b,C,T,E){var S=n.exports.sbrk,I=[],R=S(C.byteLength),V=S(b.vertices.byteLength),W=S(b.triangles.byteLength),B=S(a),N=new Uint8Array(n.exports.memory.buffer);N.set(s(C),R),N.set(s(b.vertices),V),N.set(s(b.triangles),W);for(var P=0;P<b.meshletCount;++P){var g=b.meshlets[P*4+0],_=b.meshlets[P*4+0+1],Z=b.meshlets[P*4+0+3];n.exports.meshopt_computeMeshletBounds(B,V+g*4,W+_,Z,R,T,E),I.push(h(B))}return S(R-S(0)),I}function A(b,C,T,E){var S=n.exports.sbrk,I=S(a),R=S(b.byteLength),V=S(C.byteLength),W=new Uint8Array(n.exports.memory.buffer);W.set(s(b),R),W.set(s(C),V),n.exports.meshopt_computeClusterBounds(I,R,b.length,V,T,E);var B=h(I);return S(I-S(0)),B}function f(b,C,T,E,S){var I=n.exports.sbrk,R=I(a),V=I(b.byteLength),W=E?I(E.byteLength):0,B=new Uint8Array(n.exports.memory.buffer);B.set(s(b),V),E&&B.set(s(E),W),n.exports.meshopt_computeSphereBounds(R,V,C,T,W,E?S:0);var N=h(R);return I(R-I(0)),N}return{ready:i,supported:!0,buildMeshlets:function(b,C,T,E,S,I){r(b.length%3==0),r(C instanceof Float32Array),r(C.length%T==0),r(T>=3),r(E>=3&&E<=256),r(S>=1&&S<=512),I=I||0;var R=b.BYTES_PER_ELEMENT==4?b:new Uint32Array(b);return u(n.exports.meshopt_buildMeshletsFlex,R,C,C.length/T,T*4,E,S,S,I,0)},buildMeshletsFlex:function(b,C,T,E,S,I,R,V){r(b.length%3==0),r(C instanceof Float32Array),r(C.length%T==0),r(T>=3),r(E>=3&&E<=256),r(S>=1&&I<=512),r(S<=I),R=R||0,V=V||0;var W=b.BYTES_PER_ELEMENT==4?b:new Uint32Array(b);return u(n.exports.meshopt_buildMeshletsFlex,W,C,C.length/T,T*4,E,S,I,R,V)},buildMeshletsSpatial:function(b,C,T,E,S,I,R){r(b.length%3==0),r(C instanceof Float32Array),r(C.length%T==0),r(T>=3),r(E>=3&&E<=256),r(S>=1&&I<=512),r(S<=I),R=R||0;var V=b.BYTES_PER_ELEMENT==4?b:new Uint32Array(b);return u(n.exports.meshopt_buildMeshletsSpatial,V,C,C.length/T,T*4,E,S,I,R)},extractMeshlet:function(b,C){return r(C>=0&&C<b.meshletCount),d(b,C)},computeClusterBounds:function(b,C,T){r(b.length%3==0),r(b.length/3<=512),r(C instanceof Float32Array),r(C.length%T==0),r(T>=3);var E=b.BYTES_PER_ELEMENT==4?b:new Uint32Array(b);return A(E,C,C.length/T,T*4)},computeMeshletBounds:function(b,C,T){return r(b.meshletCount!=0),r(C instanceof Float32Array),r(C.length%T==0),r(T>=3),p(b,C,C.length/T,T*4)},computeSphereBounds:function(b,C,T,E){return r(b instanceof Float32Array),r(b.length%C==0),r(C>=3),r(!T||T instanceof Float32Array),r(!T||T.length%E==0),r(!T||E>=1),r(!T||b.length/C==T.length/E),E=E||0,f(b,b.length/C,C*4,T,E*4)}}})();var OJ=class extends Hi{constructor(t){super(),t=t??Q.EMPTY_OBJECT;let n=t.resourceCache,i=t.gltf,o=t.bufferViewId,r=t.gltfResource,s=t.baseResource,a=t.cacheKey,c=i.bufferViews[o],d=c.buffer,u=c.byteOffset,h=c.byteLength,p=!1,A,f,b,C;if(_i(c,"EXT_meshopt_compression")){let E=c.extensions.EXT_meshopt_compression;d=E.buffer,u=E.byteOffset??0,h=E.byteLength,p=!0,A=E.byteStride,f=E.count,b=E.mode,C=E.filter??"NONE"}let T=i.buffers[d];this._hasMeshopt=p,this._meshoptByteStride=A,this._meshoptCount=f,this._meshoptMode=b,this._meshoptFilter=C,this._resourceCache=n,this._gltfResource=r,this._baseResource=s,this._buffer=T,this._bufferId=d,this._byteOffset=u,this._byteLength=h,this._cacheKey=a,this._bufferLoader=void 0,this._typedArray=void 0,this._state=yt.UNLOADED,this._promise=void 0}get cacheKey(){return this._cacheKey}get typedArray(){return this._typedArray}async load(){return l(this._promise)?this._promise:(this._state=yt.LOADING,this._promise=bke(this),this._promise)}unload(){l(this._bufferLoader)&&!this._bufferLoader.isDestroyed()&&this._resourceCache.unload(this._bufferLoader),this._bufferLoader=void 0,this._typedArray=void 0}};async function bke(e){try{let t=yke(e);if(e._bufferLoader=t,await t.load(),e.isDestroyed())return;let n=t.typedArray,i=new Uint8Array(n.buffer,n.byteOffset+e._byteOffset,e._byteLength);if(e.unload(),e._typedArray=i,e._hasMeshopt){let o=e._meshoptCount,r=e._meshoptByteStride,s=new Uint8Array(o*r);p0.decodeGltfBuffer(s,o,r,e._typedArray,e._meshoptMode,e._meshoptFilter),e._typedArray=s}return e._state=yt.READY,e}catch(t){if(e.isDestroyed())return;throw e.unload(),e._state=yt.FAILED,e.getError("Failed to load buffer view",t)}}function yke(e){let t=e._resourceCache,n=e._buffer;if(l(n.uri)){let r=e._baseResource.getDerivedResource({url:n.uri});return t.getExternalBufferLoader({resource:r})}let i=n.extras?._pipeline?.source;return t.getEmbeddedBufferLoader({parentResource:e._gltfResource,bufferId:e._bufferId,typedArray:i})}var vS=OJ;var I0n=y(x(),1);var f0n=y(x(),1);var uC=class e{static _getDecoderTaskProcessor(){if(!l(e._decoderTaskProcessor)){let t=new $n("decodeDraco",e._maxDecodingConcurrency);t.initWebAssemblyModule({wasmBinaryFile:"ThirdParty/draco_decoder.wasm"}).then(function(n){n?e._taskProcessorReady=!0:e._error=new me("Draco decoder could not be initialized.")}).catch(n=>{e._error=n}),e._decoderTaskProcessor=t}return e._decoderTaskProcessor}static decodePointCloud(t){let n=e._getDecoderTaskProcessor();if(l(e._error))throw e._error;if(e._taskProcessorReady)return n.scheduleTask(t,[t.buffer.buffer])}static decodeBufferView(t){let n=e._getDecoderTaskProcessor();if(l(e._error))throw e._error;if(e._taskProcessorReady)return n.scheduleTask(t,[t.array.buffer])}};uC._maxDecodingConcurrency=Math.max(hn.hardwareConcurrency-1,1);uC._decoderTaskProcessor=void 0;uC._taskProcessorReady=!1;uC._error=void 0;var qA=uC;var g0n=y(x(),1);var Xn={POSITION:"POSITION",NORMAL:"NORMAL",TANGENT:"TANGENT",TEXCOORD:"TEXCOORD",COLOR:"COLOR",JOINTS:"JOINTS",WEIGHTS:"WEIGHTS",FEATURE_ID:"_FEATURE_ID",SCALE:"KHR_gaussian_splatting:SCALE",ROTATION:"KHR_gaussian_splatting:ROTATION",CUMULATIVE_DISTANCE:"BENTLEY_materials_line_style:CUMULATIVE_DISTANCE"};function xke(e){switch(e){case Xn.POSITION:return"positionMC";case Xn.NORMAL:return"normalMC";case Xn.TANGENT:return"tangentMC";case Xn.TEXCOORD:return"texCoord";case Xn.COLOR:return"color";case Xn.JOINTS:return"joints";case Xn.WEIGHTS:return"weights";case Xn.FEATURE_ID:return"featureId";case Xn.SCALE:return"scale";case Xn.ROTATION:return"rotation";case Xn.CUMULATIVE_DISTANCE:return"cumulativeDistance"}}Xn.hasSetIndex=function(e){switch(e){case Xn.POSITION:case Xn.NORMAL:case Xn.TANGENT:case Xn.CUMULATIVE_DISTANCE:return!1;case Xn.TEXCOORD:case Xn.COLOR:case Xn.JOINTS:case Xn.WEIGHTS:case Xn.FEATURE_ID:case Xn.SCALE:case Xn.ROTATION:return!0}};Xn.fromGltfSemantic=function(e){let t=e,i=/^(\w+)_\d+$/.exec(e);switch(i!==null&&(t=i[1]),t){case"POSITION":return Xn.POSITION;case"NORMAL":return Xn.NORMAL;case"TANGENT":return Xn.TANGENT;case"TEXCOORD":return Xn.TEXCOORD;case"COLOR":return Xn.COLOR;case"JOINTS":return Xn.JOINTS;case"WEIGHTS":return Xn.WEIGHTS;case"_FEATURE_ID":return Xn.FEATURE_ID;case"KHR_gaussian_splatting:SCALE":case"_SCALE":return Xn.SCALE;case"KHR_gaussian_splatting:ROTATION":case"_ROTATION":return Xn.ROTATION;case"BENTLEY_materials_line_style:CUMULATIVE_DISTANCE":return Xn.CUMULATIVE_DISTANCE}};Xn.fromPntsSemantic=function(e){switch(e){case"POSITION":case"POSITION_QUANTIZED":return Xn.POSITION;case"RGBA":case"RGB":case"RGB565":return Xn.COLOR;case"NORMAL":case"NORMAL_OCT16P":return Xn.NORMAL;case"BATCH_ID":return Xn.FEATURE_ID}};Xn.getGlslType=function(e){switch(e){case Xn.POSITION:case Xn.NORMAL:case Xn.TANGENT:return"vec3";case Xn.TEXCOORD:return"vec2";case Xn.COLOR:return"vec4";case Xn.JOINTS:return"ivec4";case Xn.WEIGHTS:return"vec4";case Xn.FEATURE_ID:return"int";case Xn.SCALE:return"vec3";case Xn.ROTATION:return"vec4";case Xn.CUMULATIVE_DISTANCE:return"float";case Xn.OPACITY:return"float"}};Xn.getVariableName=function(e,t){let n=xke(e);return l(t)&&(n+=`_${t}`),n};var ct=Object.freeze(Xn);var zJ=class extends Hi{constructor(t){super(),t=t??Q.EMPTY_OBJECT;let n=t.resourceCache,i=t.gltf,o=t.primitive,r=t.draco,s=t.gltfResource,a=t.baseResource,c=t.cacheKey;this._resourceCache=n,this._gltfResource=s,this._baseResource=a,this._gltf=i,this._primitive=o,this._draco=r,this._cacheKey=c,this._bufferViewLoader=void 0,this._bufferViewTypedArray=void 0,this._decodePromise=void 0,this._decodedData=void 0,this._state=yt.UNLOADED,this._promise=void 0,this._dracoError=void 0}get cacheKey(){return this._cacheKey}get decodedData(){return this._decodedData}async load(){return l(this._promise)?this._promise:(this._state=yt.LOADING,this._promise=Cke(this),this._promise)}process(t){if(this._state===yt.READY)return!0;if(this._state!==yt.PROCESSING||(l(this._dracoError)&&$le(this,this._dracoError),!l(this._bufferViewTypedArray))||l(this._decodePromise))return!1;let n=this._draco,i=this._primitive,o=this._gltf,r=o.bufferViews,s=n.bufferView,a=r[s],c=n.attributes,d=[];for(let p in i.attributes)if(i.attributes.hasOwnProperty(p)){let A=Eke(p);l(A)&&o.accessors[i.attributes[p]].componentType===H.FLOAT&&(d.includes(A)||d.push(A))}let u={array:new Uint8Array(this._bufferViewTypedArray),bufferView:a,compressedAttributes:c,dequantizeInShader:!0,attributesToSkipTransform:d},h=qA.decodeBufferView(u);if(!l(h))return!1;this._decodePromise=Tke(this,h)}unload(){l(this._bufferViewLoader)&&this._resourceCache.unload(this._bufferViewLoader),this._bufferViewLoader=void 0,this._bufferViewTypedArray=void 0,this._decodedData=void 0,this._gltf=void 0,this._primitive=void 0}};async function Cke(e){let t=e._resourceCache;try{let n=t.getBufferViewLoader({gltf:e._gltf,bufferViewId:e._draco.bufferView,gltfResource:e._gltfResource,baseResource:e._baseResource});return e._bufferViewLoader=n,await n.load(),e.isDestroyed()?void 0:(e._bufferViewTypedArray=n.typedArray,e._state=yt.PROCESSING,e)}catch(n){if(e.isDestroyed())return;$le(e,n)}}function $le(e,t){throw e.unload(),e._state=yt.FAILED,e.getError("Failed to load Draco",t)}async function Tke(e,t){try{let n=await t;return e.isDestroyed()?void 0:(e.unload(),e._decodedData={indices:n.indexArray,vertexAttributes:n.attributeData},e._state=yt.READY,e._baseResource)}catch(n){if(e.isDestroyed())return;e._dracoError=n}}var mC={};mC[ct.POSITION]="POSITION";mC[ct.NORMAL]="NORMAL";mC[ct.COLOR]="COLOR";mC[ct.TEXCOORD]="TEX_COORD";function Eke(e){for(let t in mC)if(mC.hasOwnProperty(t)&&e.startsWith(t))return mC[t]}var US=zJ;var Y0n=y(x(),1);var G0n=y(x(),1);function Ske(e){let{uint8Array:t,format:n,request:i}=e,o=e.flipY??!1,r=e.skipColorSpaceConversion??!1,s=new Blob([t],{type:n}),a;return Le.supportsImageBitmapOptions().then(function(c){return c?Promise.resolve(Le.createImageBitmapFromBlob(s,{flipY:o,premultiplyAlpha:!1,skipColorSpaceConversion:r})):(a=window.URL.createObjectURL(s),new Le({url:a,request:i}).fetchImage({flipY:o,skipColorSpaceConversion:r}))}).then(function(c){return l(a)&&window.URL.revokeObjectURL(a),c}).catch(function(c){return l(a)&&window.URL.revokeObjectURL(a),Promise.reject(c)})}var $A=Ske;var VW=class extends Hi{constructor(t){super(),t=t??Q.EMPTY_OBJECT;let n=t.resourceCache,i=t.gltf,o=t.imageId,r=t.gltfResource,s=t.baseResource,a=t.cacheKey,c=i.images[o],d=c.bufferView,u=c.uri;this._resourceCache=n,this._gltfResource=r,this._baseResource=s,this._gltf=i,this._bufferViewId=d,this._uri=u,this._cacheKey=a,this._bufferViewLoader=void 0,this._image=void 0,this._mipLevels=void 0,this._state=yt.UNLOADED,this._promise=void 0}get cacheKey(){return this._cacheKey}get image(){return this._image}get mipLevels(){return this._mipLevels}load(){return l(this._promise)?this._promise:l(this._bufferViewId)?(this._promise=_ke(this),this._promise):(this._promise=Ike(this),this._promise)}unload(){l(this._bufferViewLoader)&&!this._bufferViewLoader.isDestroyed()&&this._resourceCache.unload(this._bufferViewLoader),this._bufferViewLoader=void 0,this._uri=void 0,this._image=void 0,this._mipLevels=void 0,this._gltf=void 0}};function ede(e){let t;return Array.isArray(e)&&(t=e.slice(1,e.length).map(function(n){return n.bufferView}),e=e[0]),{image:e,mipLevels:t}}async function _ke(e){e._state=yt.LOADING;let t=e._resourceCache;try{let n=t.getBufferViewLoader({gltf:e._gltf,bufferViewId:e._bufferViewId,gltfResource:e._gltfResource,baseResource:e._baseResource});if(e._bufferViewLoader=n,await n.load(),e.isDestroyed())return;let i=n.typedArray,o=await Rke(i);if(e.isDestroyed())return;let r=ede(o);return e.unload(),e._image=r.image,e._mipLevels=r.mipLevels,e._state=yt.READY,e}catch(n){return e.isDestroyed()?void 0:tde(e,n,"Failed to load embedded image")}}async function Ike(e){e._state=yt.LOADING;let t=e._baseResource,n=e._uri,i=t.getDerivedResource({url:n});try{let o=await Gke(i);if(e.isDestroyed())return;let r=ede(o);return e.unload(),e._image=r.image,e._mipLevels=r.mipLevels,e._state=yt.READY,e}catch(o){return e.isDestroyed()?void 0:tde(e,o,`Failed to load image: ${n}`)}}function tde(e,t,n){return e.unload(),e._state=yt.FAILED,Promise.reject(e.getError(n,t))}function Zke(e){let t=e.subarray(0,2),n=e.subarray(0,4),i=e.subarray(8,12);if(t[0]===255&&t[1]===216)return"image/jpeg";if(t[0]===137&&t[1]===80)return"image/png";if(t[0]===171&&t[1]===75)return"image/ktx2";if(n[0]===82&&n[1]===73&&n[2]===70&&n[3]===70&&i[0]===87&&i[1]===69&&i[2]===66&&i[3]===80)return"image/webp";throw new me("Image format is not recognized")}async function Rke(e){let t=Zke(e);if(t==="image/ktx2"){let n=new Uint8Array(e);return md(n)}return VW._loadImageFromTypedArray({uint8Array:e,format:t,flipY:!1,skipColorSpaceConversion:!0})}var Vke=/(^data:image\/ktx2)|(\.ktx2$)/i;function Gke(e){let t=e.getUrlComponent(!1,!0);return Vke.test(t)?md(e):e.fetchImage({skipColorSpaceConversion:!0,preferImageBitmap:!0})}VW._loadImageFromTypedArray=$A;var DS=VW;var $0n=y(x(),1);var v0n=y(x(),1),Lke={TEXTURE:0,PROGRAM:1,BUFFER:2,NUMBER_OF_JOB_TYPES:3},Ic=Object.freeze(Lke);var HJ=class extends Hi{constructor(t){super(),t=t??Q.EMPTY_OBJECT;let n=t.resourceCache,i=t.gltf,o=t.accessorId,r=t.gltfResource,s=t.baseResource,a=t.primitive,c=t.draco,d=t.cacheKey,u=t.asynchronous??!0,h=t.loadBuffer??!1,p=t.loadTypedArray??!1,A=i.accessors[o].componentType;this._resourceCache=n,this._gltfResource=r,this._baseResource=s,this._gltf=i,this._accessorId=o,this._indexDatatype=A,this._primitive=a,this._draco=c,this._cacheKey=d,this._asynchronous=u,this._loadBuffer=h,this._loadTypedArray=p,this._bufferViewLoader=void 0,this._dracoLoader=void 0,this._typedArray=void 0,this._buffer=void 0,this._state=yt.UNLOADED,this._promise=void 0}get cacheKey(){return this._cacheKey}get buffer(){return this._buffer}get typedArray(){return this._typedArray}get indexDatatype(){return this._indexDatatype}async load(){return l(this._promise)?this._promise:l(this._draco)?(this._promise=Fke(this),this._promise):(this._promise=Bke(this),this._promise)}process(t){if(this._state===yt.READY)return!0;if(this._state!==yt.LOADED&&this._state!==yt.PROCESSING)return!1;let n=this._typedArray,i=this._indexDatatype;if(l(this._dracoLoader))try{this._dracoLoader.process(t)&&(n=this._dracoLoader.decodedData.indices.typedArray,this._typedArray=n,i=H.fromTypedArray(n),this._indexDatatype=i)}catch(r){KJ(this,r)}if(!l(n))return!1;let o;if(this._loadBuffer&&this._asynchronous){let r=Wke;if(r.set(n,i,t.context),!t.jobScheduler.execute(r,Ic.BUFFER))return!1;o=r.buffer}else this._loadBuffer&&(o=nde(n,i,t.context));return this.unload(),this._buffer=o,this._typedArray=this._loadTypedArray?n:void 0,this._state=yt.READY,this._resourceCache.statistics.addGeometryLoader(this),!0}unload(){l(this._buffer)&&this._buffer.destroy();let t=this._resourceCache;l(this._bufferViewLoader)&&!this._bufferViewLoader.isDestroyed()&&t.unload(this._bufferViewLoader),l(this._dracoLoader)&&t.unload(this._dracoLoader),this._bufferViewLoader=void 0,this._dracoLoader=void 0,this._typedArray=void 0,this._buffer=void 0,this._gltf=void 0,this._primitive=void 0}},JJ=class{constructor(){this.typedArray=void 0,this.indexDatatype=void 0,this.context=void 0,this.buffer=void 0}set(t,n,i){this.typedArray=t,this.indexDatatype=n,this.context=i}execute(){this.buffer=nde(this.typedArray,this.indexDatatype,this.context)}};function nde(e,t,n){let i=it.createIndexBuffer({typedArray:e,context:n,usage:Be.STATIC_DRAW,indexDatatype:t});return i.vertexArrayDestroyable=!1,i}var Wke=new JJ;async function Fke(e){e._state=yt.LOADING;let t=e._resourceCache;try{let n=t.getDracoLoader({gltf:e._gltf,primitive:e._primitive,draco:e._draco,gltfResource:e._gltfResource,baseResource:e._baseResource});return e._dracoLoader=n,await n.load(),e.isDestroyed()?void 0:(e._state=yt.LOADED,e)}catch(n){if(e.isDestroyed())return;KJ(e,n)}}async function Bke(e){let t=e._gltf,n=e._accessorId,o=t.accessors[n].bufferView;e._state=yt.LOADING;let r=e._resourceCache;try{let s=r.getBufferViewLoader({gltf:t,bufferViewId:o,gltfResource:e._gltfResource,baseResource:e._baseResource});if(e._bufferViewLoader=s,await s.load(),e.isDestroyed())return;let a=s.typedArray;return e._typedArray=wke(e,a),e._state=yt.PROCESSING,e}catch(s){if(e.isDestroyed())return;KJ(e,s)}}function wke(e,t){let n=e._gltf,i=e._accessorId,o=n.accessors[i],r=o.count,s=o.componentType,a=Ue.getSizeInBytes(s),c=t.buffer,d=t.byteOffset+o.byteOffset;if(d%a!==0){let h=r*a,p=new Uint8Array(c,d,h);c=new Uint8Array(p).buffer,d=0,Va("index-buffer-unaligned",`The index array is not aligned to a ${a}-byte boundary.`)}let u;return s===Ue.UNSIGNED_BYTE?u=new Uint8Array(c,d,r):s===Ue.UNSIGNED_SHORT?u=new Uint16Array(c,d,r):s===Ue.UNSIGNED_INT&&(u=new Uint32Array(c,d,r)),u}function KJ(e,t){throw e.unload(),e._state=yt.FAILED,e.getError("Failed to load index buffer",t)}var kS=HJ;var tTn=y(x(),1);var Tyn=y(x(),1);var tyn=y(x(),1);function Nke(e,t,n){if(n=n??!1,n){let i=e.indexOf(t);if(i>-1)return i}return e.push(t),e.length-1}var la=Nke;var cyn=y(x(),1);var oyn=y(x(),1);function Pke(e,t){return l(e.extensionsUsed)&&e.extensionsUsed.indexOf(t)>=0}var wr=Pke;function rn(){}rn.objectLegacy=function(e,t){if(l(e)){for(let n in e)if(Object.prototype.hasOwnProperty.call(e,n)){let i=e[n],o=t(i,n);if(l(o))return o}}};rn.object=function(e,t){if(l(e)){let n=e.length;for(let i=0;i<n;i++){let o=e[i],r=t(o,i);if(l(r))return r}}};rn.topLevel=function(e,t,n){let i=e[t];return l(i)&&!Array.isArray(i)?rn.objectLegacy(i,n):rn.object(i,n)};rn.accessor=function(e,t){return rn.topLevel(e,"accessors",t)};rn.accessorWithSemantic=function(e,t,n){let i={};return rn.mesh(e,function(o){return rn.meshPrimitive(o,function(r){let s=rn.meshPrimitiveAttribute(r,function(a,c){if(c.indexOf(t)===0&&!l(i[a])){i[a]=!0;let d=n(a);if(l(d))return d}});return l(s)?s:rn.meshPrimitiveTarget(r,function(a){return rn.meshPrimitiveTargetAttribute(a,function(c,d){if(d.indexOf(t)===0&&!l(i[c])){i[c]=!0;let u=n(c);if(l(u))return u}})})})})};rn.accessorContainingVertexAttributeData=function(e,t){let n={};return rn.mesh(e,function(i){return rn.meshPrimitive(i,function(o){let r=rn.meshPrimitiveAttribute(o,function(s){if(!l(n[s])){n[s]=!0;let a=t(s);if(l(a))return a}});return l(r)?r:rn.meshPrimitiveTarget(o,function(s){return rn.meshPrimitiveTargetAttribute(s,function(a){if(!l(n[a])){n[a]=!0;let c=t(a);if(l(c))return c}})})})})};rn.accessorContainingIndexData=function(e,t){let n={};return rn.mesh(e,function(i){return rn.meshPrimitive(i,function(o){let r=o.indices;if(l(r)&&!l(n[r])){n[r]=!0;let s=t(r);if(l(s))return s}})})};rn.animation=function(e,t){return rn.topLevel(e,"animations",t)};rn.animationChannel=function(e,t){let n=e.channels;return rn.object(n,t)};rn.animationSampler=function(e,t){let n=e.samplers;return rn.object(n,t)};rn.buffer=function(e,t){return rn.topLevel(e,"buffers",t)};rn.bufferView=function(e,t){return rn.topLevel(e,"bufferViews",t)};rn.camera=function(e,t){return rn.topLevel(e,"cameras",t)};rn.image=function(e,t){return rn.topLevel(e,"images",t)};rn.material=function(e,t){return rn.topLevel(e,"materials",t)};rn.materialValue=function(e,t){let n=e.values;l(e.extensions)&&l(e.extensions.KHR_techniques_webgl)&&(n=e.extensions.KHR_techniques_webgl.values);for(let i in n)if(Object.prototype.hasOwnProperty.call(n,i)){let o=t(n[i],i);if(l(o))return o}};rn.mesh=function(e,t){return rn.topLevel(e,"meshes",t)};rn.meshPrimitive=function(e,t){let n=e.primitives;if(l(n)){let i=n.length;for(let o=0;o<i;o++){let r=n[o],s=t(r,o);if(l(s))return s}}};rn.meshPrimitiveAttribute=function(e,t){let n=e.attributes;for(let i in n)if(Object.prototype.hasOwnProperty.call(n,i)){let o=t(n[i],i);if(l(o))return o}};rn.meshPrimitiveTarget=function(e,t){let n=e.targets;if(l(n)){let i=n.length;for(let o=0;o<i;++o){let r=t(n[o],o);if(l(r))return r}}};rn.meshPrimitiveTargetAttribute=function(e,t){for(let n in e)if(Object.prototype.hasOwnProperty.call(e,n)){let i=e[n],o=t(i,n);if(l(o))return o}};rn.node=function(e,t){return rn.topLevel(e,"nodes",t)};rn.nodeInTree=function(e,t,n){let i=e.nodes;if(l(i)){let o=t.length;for(let r=0;r<o;r++){let s=t[r],a=i[s];if(l(a)){let c=n(a,s);if(l(c))return c;let d=a.children;if(l(d)&&(c=rn.nodeInTree(e,d,n),l(c)))return c}}}};rn.nodeInScene=function(e,t,n){let i=t.nodes;if(l(i))return rn.nodeInTree(e,i,n)};rn.program=function(e,t){return wr(e,"KHR_techniques_webgl")?rn.object(e.extensions.KHR_techniques_webgl.programs,t):rn.topLevel(e,"programs",t)};rn.sampler=function(e,t){return rn.topLevel(e,"samplers",t)};rn.scene=function(e,t){return rn.topLevel(e,"scenes",t)};rn.shader=function(e,t){return wr(e,"KHR_techniques_webgl")?rn.object(e.extensions.KHR_techniques_webgl.shaders,t):rn.topLevel(e,"shaders",t)};rn.skin=function(e,t){return rn.topLevel(e,"skins",t)};rn.skinJoint=function(e,t){let n=e.joints;if(l(n)){let i=n.length;for(let o=0;o<i;o++){let r=n[o],s=t(r);if(l(s))return s}}};rn.techniqueAttribute=function(e,t){let n=e.attributes;for(let i in n)if(Object.prototype.hasOwnProperty.call(n,i)){let o=t(n[i],i);if(l(o))return o}};rn.techniqueUniform=function(e,t){let n=e.uniforms;for(let i in n)if(Object.prototype.hasOwnProperty.call(n,i)){let o=t(n[i],i);if(l(o))return o}};rn.techniqueParameter=function(e,t){let n=e.parameters;for(let i in n)if(Object.prototype.hasOwnProperty.call(n,i)){let o=t(n[i],i);if(l(o))return o}};rn.technique=function(e,t){return wr(e,"KHR_techniques_webgl")?rn.object(e.extensions.KHR_techniques_webgl.techniques,t):rn.topLevel(e,"techniques",t)};rn.texture=function(e,t){return rn.topLevel(e,"textures",t)};var De=rn;var pyn=y(x(),1);var dyn=y(x(),1);function Xke(e){switch(e){case"SCALAR":return 1;case"VEC2":return 2;case"VEC3":return 3;case"VEC4":case"MAT2":return 4;case"MAT3":return 9;case"MAT4":return 16}}var du=Xke;function Yke(e,t){let n=t.bufferView;if(l(n)){let i=e.bufferViews[n];if(l(i.byteStride)&&i.byteStride>0)return i.byteStride}return H.getSizeInBytes(t.componentType)*du(t.type)}var Cd=Yke;function Mke(e){De.accessor(e,function(n){l(n.bufferView)&&(n.byteOffset=n.byteOffset??0)}),De.bufferView(e,function(n){l(n.buffer)&&(n.byteOffset=n.byteOffset??0)}),De.mesh(e,function(n){De.meshPrimitive(n,function(i){if(i.mode=i.mode??ne.TRIANGLES,!l(i.material)){l(e.materials)||(e.materials=[]);let o={name:"default"};i.material=la(e.materials,o)}})}),De.accessorContainingVertexAttributeData(e,function(n){let i=e.accessors[n],o=i.bufferView;if(i.normalized=i.normalized??!1,l(o)){let r=e.bufferViews[o];r.byteStride=Cd(e,i),r.target=ne.ARRAY_BUFFER}}),De.accessorContainingIndexData(e,function(n){let o=e.accessors[n].bufferView;if(l(o)){let r=e.bufferViews[o];r.target=ne.ELEMENT_ARRAY_BUFFER}}),De.material(e,function(n){let i=n.extensions??{},o=i.KHR_materials_common;if(l(o)){let c=o.technique,d=l(o.values)?o.values:{};o.values=d,d.ambient=l(d.ambient)?d.ambient:[0,0,0,1],d.emission=l(d.emission)?d.emission:[0,0,0,1],d.transparency=d.transparency??1,c!=="CONSTANT"&&(d.diffuse=l(d.diffuse)?d.diffuse:[0,0,0,1],c!=="LAMBERT"&&(d.specular=l(d.specular)?d.specular:[0,0,0,1],d.shininess=d.shininess??0)),o.transparent=o.transparent??!1,o.doubleSided=o.doubleSided??!1;return}n.emissiveFactor=n.emissiveFactor??[0,0,0],n.alphaMode=n.alphaMode??"OPAQUE",n.doubleSided=n.doubleSided??!1,n.alphaMode==="MASK"&&(n.alphaCutoff=n.alphaCutoff??.5);let r=i.KHR_techniques_webgl;l(r)&&De.materialValue(n,function(c){l(c.index)&&hC(c)}),hC(n.emissiveTexture),hC(n.normalTexture),hC(n.occlusionTexture);let s=n.pbrMetallicRoughness;l(s)&&(s.baseColorFactor=s.baseColorFactor??[1,1,1,1],s.metallicFactor=s.metallicFactor??1,s.roughnessFactor=s.roughnessFactor??1,hC(s.baseColorTexture),hC(s.metallicRoughnessTexture));let a=i.KHR_materials_pbrSpecularGlossiness;l(a)&&(a.diffuseFactor=a.diffuseFactor??[1,1,1,1],a.specularFactor=a.specularFactor??[1,1,1],a.glossinessFactor=a.glossinessFactor??1,hC(a.specularGlossinessTexture))}),De.animation(e,function(n){De.animationSampler(n,function(i){i.interpolation=i.interpolation??"LINEAR"})});let t=vke(e);return De.node(e,function(n,i){l(t[i])||l(n.translation)||l(n.rotation)||l(n.scale)?(n.translation=n.translation??[0,0,0],n.rotation=n.rotation??[0,0,0,1],n.scale=n.scale??[1,1,1]):n.matrix=n.matrix??[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1]}),De.sampler(e,function(n){n.wrapS=n.wrapS??ne.REPEAT,n.wrapT=n.wrapT??ne.REPEAT}),l(e.scenes)&&!l(e.scene)&&(e.scene=0),e}function vke(e){let t={};return De.animation(e,function(n){De.animationChannel(n,function(i){let o=i.target,r=o.node,s=o.path;(s==="translation"||s==="rotation"||s==="scale")&&(t[r]=!0)})}),t}function hC(e){l(e)&&(e.texCoord=e.texCoord??0)}var GW=Mke;var Iyn=y(x(),1);function Uke(e){return De.shader(e,function(t){Ck(t)}),De.buffer(e,function(t){Ck(t)}),De.image(e,function(t){Ck(t)}),Ck(e),e}function Ck(e){e.extras=l(e.extras)?e.extras:{},e.extras._pipeline=l(e.extras._pipeline)?e.extras._pipeline:{}}var A0=Uke;var vyn=y(x(),1);var Fyn=y(x(),1);var Vyn=y(x(),1);function Dke(e,t){let n=e.extensionsRequired;if(l(n)){let i=n.indexOf(t);i>=0&&n.splice(i,1),n.length===0&&delete e.extensionsRequired}}var LW=Dke;function kke(e,t){let n=e.extensionsUsed;if(l(n)){let i=n.indexOf(t);i>=0&&n.splice(i,1),LW(e,t),n.length===0&&delete e.extensionsUsed}}var fC=kke;var Qke=4;function Oke(e){if(Ph(e)!=="glTF")throw new me("File is not valid binary glTF");let n=ide(e,0,5),i=n[1];if(i!==1&&i!==2)throw new me("Binary glTF version is not 1 or 2");return i===1?zke(e,n):Hke(e,n)}function ide(e,t,n){let i=new DataView(e.buffer),o=new Array(n);for(let r=0;r<n;++r)o[r]=i.getUint32(e.byteOffset+t+r*Qke,!0);return o}function zke(e,t){let n=t[2],i=t[3];if(t[4]!==0)throw new me("Binary glTF scene format is not JSON");let r=20,s=r+i,a=bd(e,r,i),c=JSON.parse(a);A0(c);let d=e.subarray(s,n),u=c.buffers;if(l(u)&&Object.keys(u).length>0){let h=u.binary_glTF??u.KHR_binary_glTF;l(h)&&(h.extras._pipeline.source=d,delete h.uri)}return fC(c,"KHR_binary_glTF"),c}function Hke(e,t){let n=t[2],i=12,o,r;for(;i<n;){let s=ide(e,i,2),a=s[0],c=s[1];i+=8;let d=e.subarray(i,i+a);if(i+=a,c===1313821514){let u=bd(d);o=JSON.parse(u),A0(o)}else c===5130562&&(r=d)}if(l(o)&&l(r)){let s=o.buffers;if(l(s)&&s.length>0){let a=s[0];a.extras._pipeline.source=r}}return o}var pC=Oke;var Qyn=y(x(),1);function Jke(e){return De.shader(e,function(t){Tk(t)}),De.buffer(e,function(t){Tk(t)}),De.image(e,function(t){Tk(t)}),Tk(e),e}function Tk(e){l(e.extras)&&(l(e.extras._pipeline)&&delete e.extras._pipeline,Object.keys(e.extras).length===0&&delete e.extras)}var WW=Jke;var ECn=y(x(),1);var Jyn=y(x(),1);function Kke(e,t){let n=e.extensionsUsed;l(n)||(n=[],e.extensionsUsed=n),la(n,t,!0)}var Cm=Kke;var rxn=y(x(),1);var qyn=y(x(),1);function jke(e){switch(e){case H.BYTE:return function(t,n,i,o,r){for(let s=0;s<i;++s)r[s]=t.getInt8(n+s*o)};case H.UNSIGNED_BYTE:return function(t,n,i,o,r){for(let s=0;s<i;++s)r[s]=t.getUint8(n+s*o)};case H.SHORT:return function(t,n,i,o,r){for(let s=0;s<i;++s)r[s]=t.getInt16(n+s*o,!0)};case H.UNSIGNED_SHORT:return function(t,n,i,o,r){for(let s=0;s<i;++s)r[s]=t.getUint16(n+s*o,!0)};case H.INT:return function(t,n,i,o,r){for(let s=0;s<i;++s)r[s]=t.getInt32(n+s*o,!0)};case H.UNSIGNED_INT:return function(t,n,i,o,r){for(let s=0;s<i;++s)r[s]=t.getUint32(n+s*o,!0)};case H.FLOAT:return function(t,n,i,o,r){for(let s=0;s<i;++s)r[s]=t.getFloat32(n+s*o,!0)};case H.DOUBLE:return function(t,n,i,o,r){for(let s=0;s<i;++s)r[s]=t.getFloat64(n+s*o,!0)}}}var eg=jke;function qke(e,t){let n=e.bufferViews,i=e.buffers,o=t.bufferView,r=du(t.type);if(!l(t.bufferView))return{min:new Array(r).fill(0),max:new Array(r).fill(0)};let s=new Array(r).fill(Number.POSITIVE_INFINITY),a=new Array(r).fill(Number.NEGATIVE_INFINITY),c=n[o],d=c.buffer,h=i[d].extras._pipeline.source,p=t.count,A=Cd(e,t),f=t.byteOffset+c.byteOffset+h.byteOffset,b=t.componentType,C=H.getSizeInBytes(b),T=new DataView(h.buffer),E=new Array(r),S=eg(b);for(let I=0;I<p;I++){S(T,f,r,C,E);for(let R=0;R<r;R++){let V=E[R];s[R]=Math.min(s[R],V),a[R]=Math.max(a[R],V)}f+=A}return{min:s,max:a}}var AC=qke;var uxn=y(x(),1);var $ke=[ne.FUNC_ADD,ne.FUNC_ADD],e9e=[ne.ONE,ne.ZERO,ne.ONE,ne.ZERO];function ode(e,t){let n=e.enable;return l(n)?n.indexOf(t)>-1:!1}var t9e=[ne.ZERO,ne.ONE,ne.SRC_COLOR,ne.ONE_MINUS_SRC_COLOR,ne.SRC_ALPHA,ne.ONE_MINUS_SRC_ALPHA,ne.DST_ALPHA,ne.ONE_MINUS_DST_ALPHA,ne.DST_COLOR,ne.ONE_MINUS_DST_COLOR];function n9e(e,t){if(!l(e))return t;for(let n=0;n<4;n++)if(t9e.indexOf(e[n])===-1)return t;return e}function i9e(e){let t={},n={},i=e.techniques;return l(i)&&(De.technique(e,function(o,r){let s=o.states;if(l(s)){let a=n[r]={};if(ode(s,ne.BLEND)){a.alphaMode="BLEND";let c=s.functions;l(c)&&(l(c.blendEquationSeparate)||l(c.blendFuncSeparate))&&(t[r]={blendEquation:c.blendEquationSeparate??$ke,blendFactors:n9e(c.blendFuncSeparate,e9e)})}ode(s,ne.CULL_FACE)||(a.doubleSided=!0),delete o.states}}),Object.keys(t).length>0&&(l(e.extensions)||(e.extensions={}),Cm(e,"KHR_blend")),De.material(e,function(o){if(l(o.technique)){let r=n[o.technique];De.objectLegacy(r,function(a,c){o[c]=a});let s=t[o.technique];l(s)&&(l(o.extensions)||(o.extensions={}),o.extensions.KHR_blend=s)}})),e}var FW=i9e;var Exn=y(x(),1);var Axn=y(x(),1);function o9e(e,t){let n=e.extensionsRequired;l(n)||(n=[],e.extensionsRequired=n),la(n,t,!0),Cm(e,t)}var BW=o9e;function r9e(e){let t=e.techniques,n={},i={},o={};if(l(t)){let r={programs:[],shaders:[],techniques:[]},s=e.glExtensionsUsed;delete e.glExtensionsUsed,De.technique(e,function(a,c){let d={name:a.name,program:void 0,attributes:{},uniforms:{}},u;if(De.techniqueAttribute(a,function(h,p){u=a.parameters[h],d.attributes[p]={semantic:u.semantic}}),De.techniqueUniform(a,function(h,p){u=a.parameters[h],d.uniforms[p]={count:u.count,node:u.node,type:u.type,semantic:u.semantic,value:u.value},l(n[c])||(n[c]={}),n[c][h]=p}),l(o[a.program]))d.program=o[a.program];else{let h=e.programs[a.program],p={name:h.name,fragmentShader:void 0,vertexShader:void 0,glExtensions:s},A=e.shaders[h.fragmentShader];p.fragmentShader=la(r.shaders,A,!0);let f=e.shaders[h.vertexShader];p.vertexShader=la(r.shaders,f,!0),d.program=la(r.programs,p),o[a.program]=d.program}i[c]=la(r.techniques,d)}),r.techniques.length>0&&(l(e.extensions)||(e.extensions={}),e.extensions.KHR_techniques_webgl=r,Cm(e,"KHR_techniques_webgl"),BW(e,"KHR_techniques_webgl"))}return De.material(e,function(r){if(l(r.technique)){let s={technique:i[r.technique]};De.objectLegacy(r.values,function(a,c){l(s.values)||(s.values={});let d=n[r.technique][c];l(d)&&(s.values[d]=a)}),l(r.extensions)||(r.extensions={}),r.extensions.KHR_techniques_webgl=s}delete r.technique,delete r.values}),delete e.techniques,delete e.programs,delete e.shaders,e}var wW=r9e;var Bxn=y(x(),1);var Rxn=y(x(),1);function s9e(e,t){vo.typeOf.object("material",e),vo.defined("handler",t);let n=e.pbrMetallicRoughness;if(l(n)){if(l(n.baseColorTexture)){let r=n.baseColorTexture,s=t(r.index,r);if(l(s))return s}if(l(n.metallicRoughnessTexture)){let r=n.metallicRoughnessTexture,s=t(r.index,r);if(l(s))return s}}let{extensions:i}=e;if(l(i)){let r=i.KHR_materials_pbrSpecularGlossiness;if(l(r)){if(l(r.diffuseTexture)){let c=r.diffuseTexture,d=t(c.index,c);if(l(d))return d}if(l(r.specularGlossinessTexture)){let c=r.specularGlossinessTexture,d=t(c.index,c);if(l(d))return d}}let s=i.KHR_materials_specular;if(l(s)){let{specularTexture:c,specularColorTexture:d}=s;if(l(c)){let u=t(c.index,c);if(l(u))return u}if(l(d)){let u=t(d.index,d);if(l(u))return u}}let a=i.KHR_materials_common;if(l(a)&&l(a.values)){let{diffuse:c,ambient:d,emission:u,specular:h}=a.values;if(l(c)&&l(c.index)){let p=t(c.index,c);if(l(p))return p}if(l(d)&&l(d.index)){let p=t(d.index,d);if(l(p))return p}if(l(u)&&l(u.index)){let p=t(u.index,u);if(l(p))return p}if(l(h)&&l(h.index)){let p=t(h.index,h);if(l(p))return p}}}let o=De.materialValue(e,function(r){if(l(r.index)){let s=t(r.index,r);if(l(s))return s}});if(l(o))return o;if(l(e.emissiveTexture)){let r=e.emissiveTexture,s=t(r.index,r);if(l(s))return s}if(l(e.normalTexture)){let r=e.normalTexture,s=t(r.index,r);if(l(s))return s}if(l(e.occlusionTexture)){let r=e.occlusionTexture,s=t(r.index,r);if(l(s))return s}}var QS=s9e;var rde=["mesh","node","material","accessor","bufferView","buffer","texture","sampler","image"];function a9e(e,t){return t=t??rde,rde.forEach(function(n){t.indexOf(n)>-1&&l9e(e,n)}),e}var c9e={accessor:"accessors",buffer:"buffers",bufferView:"bufferViews",image:"images",node:"nodes",material:"materials",mesh:"meshes",sampler:"samplers",texture:"textures"};function l9e(e,t){let n=c9e[t],i=e[n];if(l(i)){let o=0,r=fp[t](e),s=i.length;for(let a=0;a<s;++a)r[a]||(hp[t](e,a-o),o++)}}function hp(){}hp.accessor=function(e,t){e.accessors.splice(t,1),De.mesh(e,function(i){De.meshPrimitive(i,function(o){De.meshPrimitiveAttribute(o,function(a,c){a>t&&o.attributes[c]--}),De.meshPrimitiveTarget(o,function(a){De.meshPrimitiveTargetAttribute(a,function(c,d){c>t&&a[d]--})});let r=o.indices;l(r)&&r>t&&o.indices--;let s=o.extensions;l(s)&&l(s.CESIUM_primitive_outline)&&s.CESIUM_primitive_outline.indices>t&&--s.CESIUM_primitive_outline.indices})}),De.skin(e,function(i){l(i.inverseBindMatrices)&&i.inverseBindMatrices>t&&i.inverseBindMatrices--}),De.animation(e,function(i){De.animationSampler(i,function(o){l(o.input)&&o.input>t&&o.input--,l(o.output)&&o.output>t&&o.output--})})};hp.buffer=function(e,t){e.buffers.splice(t,1),De.bufferView(e,function(i){l(i.buffer)&&i.buffer>t&&i.buffer--,l(i.extensions)&&l(i.extensions.EXT_meshopt_compression)&&i.extensions.EXT_meshopt_compression.buffer--})};hp.bufferView=function(e,t){if(e.bufferViews.splice(t,1),De.accessor(e,function(i){l(i.bufferView)&&i.bufferView>t&&i.bufferView--}),De.shader(e,function(i){l(i.bufferView)&&i.bufferView>t&&i.bufferView--}),De.image(e,function(i){l(i.bufferView)&&i.bufferView>t&&i.bufferView--}),wr(e,"KHR_draco_mesh_compression")&&De.mesh(e,function(i){De.meshPrimitive(i,function(o){l(o.extensions)&&l(o.extensions.KHR_draco_mesh_compression)&&o.extensions.KHR_draco_mesh_compression.bufferView>t&&o.extensions.KHR_draco_mesh_compression.bufferView--})}),wr(e,"EXT_feature_metadata")){let o=e.extensions.EXT_feature_metadata.featureTables;for(let r in o)if(o.hasOwnProperty(r)){let a=o[r].properties;if(l(a)){for(let c in a)if(a.hasOwnProperty(c)){let d=a[c];l(d.bufferView)&&d.bufferView>t&&d.bufferView--,l(d.arrayOffsetBufferView)&&d.arrayOffsetBufferView>t&&d.arrayOffsetBufferView--,l(d.stringOffsetBufferView)&&d.stringOffsetBufferView>t&&d.stringOffsetBufferView--}}}}if(wr(e,"EXT_structural_metadata")){let o=e.extensions.EXT_structural_metadata.propertyTables;if(l(o)){let r=o.length;for(let s=0;s<r;++s){let c=o[s].properties;for(let d in c)if(c.hasOwnProperty(d)){let u=c[d];l(u.values)&&u.values>t&&u.values--,l(u.arrayOffsets)&&u.arrayOffsets>t&&u.arrayOffsets--,l(u.stringOffsets)&&u.stringOffsets>t&&u.stringOffsets--}}}}};hp.image=function(e,t){e.images.splice(t,1),De.texture(e,function(i){l(i.source)&&i.source>t&&--i.source;let o=i.extensions;l(o)&&l(o.EXT_texture_webp)&&o.EXT_texture_webp.source>t?--i.extensions.EXT_texture_webp.source:l(o)&&l(o.KHR_texture_basisu)&&o.KHR_texture_basisu.source>t&&--i.extensions.KHR_texture_basisu.source})};hp.mesh=function(e,t){e.meshes.splice(t,1),De.node(e,function(i){l(i.mesh)&&(i.mesh>t?i.mesh--:i.mesh===t&&delete i.mesh)})};hp.node=function(e,t){e.nodes.splice(t,1),De.skin(e,function(i){l(i.skeleton)&&i.skeleton>t&&i.skeleton--,i.joints=i.joints.map(function(o){return o>t?o-1:o})}),De.animation(e,function(i){De.animationChannel(i,function(o){l(o.target)&&l(o.target.node)&&o.target.node>t&&o.target.node--})}),De.technique(e,function(i){De.techniqueUniform(i,function(o){l(o.node)&&o.node>t&&o.node--})}),De.node(e,function(i){l(i.children)&&(i.children=i.children.filter(function(o){return o!==t}).map(function(o){return o>t?o-1:o}))}),De.scene(e,function(i){i.nodes=i.nodes.filter(function(o){return o!==t}).map(function(o){return o>t?o-1:o})})};hp.material=function(e,t){e.materials.splice(t,1),De.mesh(e,function(i){De.meshPrimitive(i,function(o){l(o.material)&&o.material>t&&o.material--})})};hp.sampler=function(e,t){e.samplers.splice(t,1),De.texture(e,function(i){l(i.sampler)&&i.sampler>t&&--i.sampler})};hp.texture=function(e,t){if(e.textures.splice(t,1),De.material(e,function(i){QS(i,function(o,r){r.index>t&&--r.index})}),wr(e,"EXT_feature_metadata")){De.mesh(e,function(r){De.meshPrimitive(r,function(s){let a=s.extensions;if(l(a)&&l(a.EXT_feature_metadata)){let d=a.EXT_feature_metadata.featureIdTextures;if(l(d)){let u=d.length;for(let h=0;h<u;++h){let A=d[h].featureIds.texture;A.index>t&&--A.index}}}})});let o=e.extensions.EXT_feature_metadata.featureTextures;for(let r in o)if(o.hasOwnProperty(r)){let a=o[r].properties;if(l(a)){for(let c in a)if(a.hasOwnProperty(c)){let u=a[c].texture;u.index>t&&--u.index}}}}if(wr(e,"EXT_mesh_features")&&De.mesh(e,function(i){De.meshPrimitive(i,function(o){let r=o.extensions;if(l(r)&&l(r.EXT_mesh_features)){let a=r.EXT_mesh_features.featureIds;if(l(a)){let c=a.length;for(let d=0;d<c;++d){let u=a[d];l(u.texture)&&u.texture.index>t&&--u.texture.index}}}})}),wr(e,"EXT_structural_metadata")){let o=e.extensions.EXT_structural_metadata.propertyTextures;if(l(o)){let r=o.length;for(let s=0;s<r;++s){let c=o[s].properties;for(let d in c)if(c.hasOwnProperty(d)){let u=c[d];u.index>t&&--u.index}}}}};function fp(){}fp.accessor=function(e){let t={};return De.mesh(e,function(n){De.meshPrimitive(n,function(i){De.meshPrimitiveAttribute(i,function(r){t[r]=!0}),De.meshPrimitiveTarget(i,function(r){De.meshPrimitiveTargetAttribute(r,function(s){t[s]=!0})});let o=i.indices;l(o)&&(t[o]=!0)})}),De.skin(e,function(n){l(n.inverseBindMatrices)&&(t[n.inverseBindMatrices]=!0)}),De.animation(e,function(n){De.animationSampler(n,function(i){l(i.input)&&(t[i.input]=!0),l(i.output)&&(t[i.output]=!0)})}),wr(e,"EXT_mesh_gpu_instancing")&&De.node(e,function(n){l(n.extensions)&&l(n.extensions.EXT_mesh_gpu_instancing)&&Object.keys(n.extensions.EXT_mesh_gpu_instancing.attributes).forEach(function(i){let o=n.extensions.EXT_mesh_gpu_instancing.attributes[i];t[o]=!0})}),wr(e,"CESIUM_primitive_outline")&&De.mesh(e,function(n){De.meshPrimitive(n,function(i){let o=i.extensions;if(l(o)&&l(o.CESIUM_primitive_outline)){let s=o.CESIUM_primitive_outline.indices;l(s)&&(t[s]=!0)}})}),t};fp.buffer=function(e){let t={};return De.bufferView(e,function(n){l(n.buffer)&&(t[n.buffer]=!0),l(n.extensions)&&l(n.extensions.EXT_meshopt_compression)&&(t[n.extensions.EXT_meshopt_compression.buffer]=!0)}),t};fp.bufferView=function(e){let t={};if(De.accessor(e,function(n){l(n.bufferView)&&(t[n.bufferView]=!0)}),De.shader(e,function(n){l(n.bufferView)&&(t[n.bufferView]=!0)}),De.image(e,function(n){l(n.bufferView)&&(t[n.bufferView]=!0)}),wr(e,"KHR_draco_mesh_compression")&&De.mesh(e,function(n){De.meshPrimitive(n,function(i){l(i.extensions)&&l(i.extensions.KHR_draco_mesh_compression)&&(t[i.extensions.KHR_draco_mesh_compression.bufferView]=!0)})}),wr(e,"EXT_feature_metadata")){let i=e.extensions.EXT_feature_metadata.featureTables;for(let o in i)if(i.hasOwnProperty(o)){let s=i[o].properties;if(l(s)){for(let a in s)if(s.hasOwnProperty(a)){let c=s[a];l(c.bufferView)&&(t[c.bufferView]=!0),l(c.arrayOffsetBufferView)&&(t[c.arrayOffsetBufferView]=!0),l(c.stringOffsetBufferView)&&(t[c.stringOffsetBufferView]=!0)}}}}if(wr(e,"EXT_structural_metadata")){let i=e.extensions.EXT_structural_metadata.propertyTables;if(l(i)){let o=i.length;for(let r=0;r<o;++r){let a=i[r].properties;for(let c in a)if(a.hasOwnProperty(c)){let d=a[c];l(d.values)&&(t[d.values]=!0),l(d.arrayOffsets)&&(t[d.arrayOffsets]=!0),l(d.stringOffsets)&&(t[d.stringOffsets]=!0)}}}}return t};fp.image=function(e){let t={};return De.texture(e,function(n){l(n.source)&&(t[n.source]=!0),l(n.extensions)&&l(n.extensions.EXT_texture_webp)?t[n.extensions.EXT_texture_webp.source]=!0:l(n.extensions)&&l(n.extensions.KHR_texture_basisu)&&(t[n.extensions.KHR_texture_basisu.source]=!0)}),t};fp.mesh=function(e){let t={};return De.node(e,function(n){if(l(n.mesh&&l(e.meshes))){let i=e.meshes[n.mesh];l(i)&&l(i.primitives)&&i.primitives.length>0&&(t[n.mesh]=!0)}}),t};function sde(e,t,n){let i=e.nodes[t];return l(i.mesh)||l(i.camera)||l(i.skin)||l(i.weights)||l(i.extras)||l(i.extensions)&&Object.keys(i.extensions).length!==0||l(n[t])?!1:!l(i.children)||i.children.filter(function(o){return!sde(e,o,n)}).length===0}fp.node=function(e){let t={};return De.skin(e,function(n){l(n.skeleton)&&(t[n.skeleton]=!0),De.skinJoint(n,function(i){t[i]=!0})}),De.animation(e,function(n){De.animationChannel(n,function(i){l(i.target)&&l(i.target.node)&&(t[i.target.node]=!0)})}),De.technique(e,function(n){De.techniqueUniform(n,function(i){l(i.node)&&(t[i.node]=!0)})}),De.node(e,function(n,i){sde(e,i,t)||(t[i]=!0)}),t};fp.material=function(e){let t={};return De.mesh(e,function(n){De.meshPrimitive(n,function(i){l(i.material)&&(t[i.material]=!0)})}),t};fp.texture=function(e){let t={};if(De.material(e,function(n){QS(n,function(i){t[i]=!0})}),wr(e,"EXT_feature_metadata")){De.mesh(e,function(o){De.meshPrimitive(o,function(r){let s=r.extensions;if(l(s)&&l(s.EXT_feature_metadata)){let c=s.EXT_feature_metadata.featureIdTextures;if(l(c)){let d=c.length;for(let u=0;u<d;++u){let p=c[u].featureIds.texture;t[p.index]=!0}}}})});let i=e.extensions.EXT_feature_metadata.featureTextures;for(let o in i)if(i.hasOwnProperty(o)){let s=i[o].properties;if(l(s)){for(let a in s)if(s.hasOwnProperty(a)){let d=s[a].texture;t[d.index]=!0}}}}if(wr(e,"EXT_mesh_features")&&De.mesh(e,function(n){De.meshPrimitive(n,function(i){let o=i.extensions;if(l(o)&&l(o.EXT_mesh_features)){let s=o.EXT_mesh_features.featureIds;if(l(s)){let a=s.length;for(let c=0;c<a;++c){let d=s[c];l(d.texture)&&(t[d.texture.index]=!0)}}}})}),wr(e,"EXT_structural_metadata")){let i=e.extensions.EXT_structural_metadata.propertyTextures;if(l(i)){let o=i.length;for(let r=0;r<o;++r){let a=i[r].properties;for(let c in a)if(a.hasOwnProperty(c)){let d=a[c];t[d.index]=!0}}}}return t};fp.sampler=function(e){let t={};return De.texture(e,function(n){l(n.sampler)&&(t[n.sampler]=!0)}),t};var NW=a9e;var jxn=y(x(),1);var Pxn=y(x(),1);function d9e(e,t){let n={byteLength:t.length,extras:{_pipeline:{source:t}}},o={buffer:la(e.buffers,n),byteOffset:0,byteLength:t.length};return la(e.bufferViews,o)}var PW=d9e;var kxn=y(x(),1);function u9e(e,t){let n=Cd(e,t),i=H.getSizeInBytes(t.componentType),o=du(t.type),r=t.count,s=new Array(o*r);if(!l(t.bufferView))return s.fill(0);let a=e.bufferViews[t.bufferView],c=e.buffers[a.buffer].extras._pipeline.source,d=t.byteOffset+a.byteOffset+c.byteOffset,u=new DataView(c.buffer),h=new Array(o),p=eg(t.componentType);for(let A=0;A<r;++A){p(u,d,o,i,h);for(let f=0;f<o;++f)s[A*o+f]=h[f];d+=n}return s}var XW=u9e;function m9e(e){let t;return De.accessorWithSemantic(e,"JOINTS_0",function(n){let i=e.accessors[n];t=i.componentType,t===ne.BYTE?Ek(e,i,H.UNSIGNED_BYTE):t!==ne.UNSIGNED_BYTE&&t!==ne.UNSIGNED_SHORT&&Ek(e,i,H.UNSIGNED_SHORT)}),De.accessorWithSemantic(e,"WEIGHTS_0",function(n){let i=e.accessors[n];t=i.componentType,t===ne.BYTE?Ek(e,i,H.UNSIGNED_BYTE):t===ne.SHORT&&Ek(e,i,H.UNSIGNED_SHORT)}),e}function Ek(e,t,n){let i=H.createTypedArray(n,XW(e,t)),o=new Uint8Array(i.buffer);t.bufferView=PW(e,o),t.componentType=n,t.byteOffset=0}var YW=m9e;var nCn=y(x(),1);function h9e(e,t){return fC(e,t),t==="CESIUM_RTC"&&f9e(e),jJ(e,t)}function f9e(e){De.technique(e,function(t){De.techniqueUniform(t,function(n){n.semantic==="CESIUM_RTC_MODELVIEW"&&(n.semantic="MODELVIEW")})})}function jJ(e,t){if(Array.isArray(e)){let n=e.length;for(let i=0;i<n;++i)jJ(e[i],t)}else if(e!==null&&typeof e=="object"&&e.constructor===Object){let n=e.extensions,i;l(n)&&(i=n[t],l(i)&&(delete n[t],Object.keys(n).length===0&&delete e.extensions));for(let o in e)Object.prototype.hasOwnProperty.call(e,o)&&jJ(e[o],t);return i}}var gC=h9e;var Sk={.8:x9e,"1.0":v9e,"2.0":void 0};function p9e(e,t){t=t??{};let n=t.targetVersion,i=e.version;e.asset=e.asset??{version:"1.0"},e.asset.version=e.asset.version??"1.0",i=(i??e.asset.version).toString(),Object.prototype.hasOwnProperty.call(Sk,i)||(l(i)&&(i=i.substring(0,3)),Object.prototype.hasOwnProperty.call(Sk,i)||(i="1.0"));let o=Sk[i];for(;l(o)&&i!==n;)o(e,t),i=e.asset.version,o=Sk[i];return t.keepLegacyExtensions||(k9e(e,t),Q9e(e)),e}function lde(e){let t=e.materials;for(let n in t)if(Object.prototype.hasOwnProperty.call(t,n)){let i=t[n],o=i.instanceTechnique;l(o)&&(i.technique=o.technique,i.values=o.values,delete i.instanceTechnique)}}function A9e(e){let t=e.meshes;for(let n in t)if(Object.prototype.hasOwnProperty.call(t,n)){let o=t[n].primitives;if(l(o)){let r=o.length;for(let s=0;s<r;++s){let a=o[s],c=a.primitive??ne.TRIANGLES;a.mode=a.mode??c,delete a.primitive}}}}function g9e(e){let t=e.nodes,n=new m,i=new Me;for(let o in t)if(Object.prototype.hasOwnProperty.call(t,o)){let r=t[o];if(l(r.rotation)){let a=r.rotation;m.fromArray(a,0,n),Me.fromAxisAngle(n,a[3],i),r.rotation=[i.x,i.y,i.z,i.w]}let s=r.instanceSkin;l(s)&&(r.skeletons=s.skeletons,r.skin=s.skin,r.meshes=s.meshes,delete r.instanceSkin)}}function b9e(e){let t=e.animations,n=e.accessors,i=e.bufferViews,o=e.buffers,r={},s=new m,a=new Me;for(let c in t)if(Object.prototype.hasOwnProperty.call(t,c)){let d=t[c],u=d.channels,h=d.parameters,p=d.samplers;if(l(u)){let A=u.length;for(let f=0;f<A;++f){let b=u[f];if(b.target.path==="rotation"){let C=h[p[b.sampler].output];if(l(r[C]))continue;r[C]=!0;let T=n[C],E=i[T.bufferView],I=o[E.buffer].extras._pipeline.source,R=I.byteOffset+E.byteOffset+T.byteOffset,V=T.componentType,W=T.count,B=du(T.type),N=T.count*B,P=H.createArrayBufferView(V,I.buffer,R,N);for(let g=0;g<W;g++){let _=g*B;m.unpack(P,_,s);let Z=P[_+3];Me.fromAxisAngle(s,Z,a),Me.pack(a,P,_)}}}}}}function y9e(e){let t=e.techniques;for(let n in t)if(Object.prototype.hasOwnProperty.call(t,n)){let i=t[n],o=i.passes;if(l(o)){let r=i.pass??"defaultPass";if(Object.prototype.hasOwnProperty.call(o,r)){let s=o[r],a=s.instanceProgram;i.attributes=i.attributes??a.attributes,i.program=i.program??a.program,i.uniforms=i.uniforms??a.uniforms,i.states=i.states??s.states}delete i.passes,delete i.pass}}}function x9e(e){l(e.asset)||(e.asset={});let t=e.asset;if(t.version="1.0",typeof t.profile=="string"){let n=t.profile.split(" ");t.profile={api:n[0],version:n[1]}}else t.profile={};if(l(e.version)&&delete e.version,lde(e),A9e(e),g9e(e),b9e(e),y9e(e),l(e.allExtensions)&&(e.extensionsUsed=e.allExtensions,delete e.allExtensions),l(e.lights)){let n=e.extensions??{};e.extensions=n;let i=n.KHR_materials_common??{};n.KHR_materials_common=i,i.lights=e.lights,delete e.lights,Cm(e,"KHR_materials_common")}}function C9e(e){let t=e.animations;for(let n in t)if(Object.prototype.hasOwnProperty.call(t,n)){let i=t[n],o=i.parameters;if(l(o)){let r=i.samplers;for(let s in r)if(Object.prototype.hasOwnProperty.call(r,s)){let a=r[s];a.input=o[a.input],a.output=o[a.output]}delete i.parameters}}}function ade(e,t){let n=[];for(let i in e)if(Object.prototype.hasOwnProperty.call(e,i)){let o=e[i];t[i]=n.length,n.push(o),l(o.name)||(o.name=i)}return n}function T9e(e){let t,n={accessors:{},animations:{},buffers:{},bufferViews:{},cameras:{},images:{},materials:{},meshes:{},nodes:{},programs:{},samplers:{},scenes:{},shaders:{},skins:{},textures:{},techniques:{}},i,o={},r=e.nodes;for(let s in r)Object.prototype.hasOwnProperty.call(r,s)&&(i=r[s].jointName,l(i)&&(o[i]=s));for(let s in e)if(Object.prototype.hasOwnProperty.call(e,s)&&l(n[s])){let a={},c=e[s];e[s]=ade(c,a),n[s]=a}for(i in o)Object.prototype.hasOwnProperty.call(o,i)&&(o[i]=n.nodes[o[i]]);l(e.scene)&&(e.scene=n.scenes[e.scene]),De.bufferView(e,function(s){l(s.buffer)&&(s.buffer=n.buffers[s.buffer])}),De.accessor(e,function(s){l(s.bufferView)&&(s.bufferView=n.bufferViews[s.bufferView])}),De.shader(e,function(s){let a=s.extensions;if(l(a)){let c=a.KHR_binary_glTF;l(c)&&(s.bufferView=n.bufferViews[c.bufferView],delete a.KHR_binary_glTF),Object.keys(a).length===0&&delete s.extensions}}),De.program(e,function(s){l(s.vertexShader)&&(s.vertexShader=n.shaders[s.vertexShader]),l(s.fragmentShader)&&(s.fragmentShader=n.shaders[s.fragmentShader])}),De.technique(e,function(s){l(s.program)&&(s.program=n.programs[s.program]),De.techniqueParameter(s,function(a){l(a.node)&&(a.node=n.nodes[a.node]);let c=a.value;typeof c=="string"&&(a.value={index:n.textures[c]})})}),De.mesh(e,function(s){De.meshPrimitive(s,function(a){l(a.indices)&&(a.indices=n.accessors[a.indices]),De.meshPrimitiveAttribute(a,function(c,d){a.attributes[d]=n.accessors[c]}),l(a.material)&&(a.material=n.materials[a.material])})}),De.node(e,function(s){let a=s.children;if(l(a)){let c=a.length;for(t=0;t<c;++t)a[t]=n.nodes[a[t]]}if(l(s.meshes)){let c=s.meshes,d=c.length;if(d>0)for(s.mesh=n.meshes[c[0]],t=1;t<d;++t){let u={mesh:n.meshes[c[t]]},h=la(e.nodes,u);l(a)||(a=[],s.children=a),a.push(h)}delete s.meshes}if(l(s.camera)&&(s.camera=n.cameras[s.camera]),l(s.skin)&&(s.skin=n.skins[s.skin]),l(s.skeletons)){let c=s.skeletons;if(c.length>0&&l(s.skin)){let u=e.skins[s.skin];u.skeleton=n.nodes[c[0]]}delete s.skeletons}l(s.jointName)&&delete s.jointName}),De.skin(e,function(s){l(s.inverseBindMatrices)&&(s.inverseBindMatrices=n.accessors[s.inverseBindMatrices]);let a=s.jointNames;if(l(a)){let c=[],d=a.length;for(t=0;t<d;++t)c[t]=o[a[t]];s.joints=c,delete s.jointNames}}),De.scene(e,function(s){let a=s.nodes;if(l(a)){let c=a.length;for(t=0;t<c;++t)a[t]=n.nodes[a[t]]}}),De.animation(e,function(s){let a={};s.samplers=ade(s.samplers,a),De.animationSampler(s,function(c){c.input=n.accessors[c.input],c.output=n.accessors[c.output]}),De.animationChannel(s,function(c){c.sampler=a[c.sampler];let d=c.target;l(d)&&(d.node=n.nodes[d.id],delete d.id)})}),De.material(e,function(s){l(s.technique)&&(s.technique=n.techniques[s.technique]),De.materialValue(s,function(c,d){typeof c=="string"&&(s.values[d]={index:n.textures[c]})});let a=s.extensions;if(l(a)){let c=a.KHR_materials_common;l(c)&&l(c.values)&&De.materialValue(c,function(d,u){typeof d=="string"&&(c.values[u]={index:n.textures[d]})})}}),De.image(e,function(s){let a=s.extensions;if(l(a)){let c=a.KHR_binary_glTF;l(c)&&(s.bufferView=n.bufferViews[c.bufferView],s.mimeType=c.mimeType,delete a.KHR_binary_glTF),Object.keys(a).length===0&&delete s.extensions}}),De.texture(e,function(s){l(s.sampler)&&(s.sampler=n.samplers[s.sampler]),l(s.source)&&(s.source=n.images[s.source])})}function E9e(e){De.animation(e,function(t){De.animationSampler(t,function(n){delete n.name})})}function S9e(e){for(let t in e)if(Object.prototype.hasOwnProperty.call(e,t)){let n=e[t];Array.isArray(n)&&n.length===0&&delete e[t]}De.node(e,function(t){l(t.children)&&t.children.length===0&&delete t.children})}function _9e(e){let t=e.asset;delete t.profile,delete t.premultipliedAlpha}var I9e={CESIUM_RTC:!0,KHR_materials_common:!0,WEB3D_quantized_attributes:!0};function Z9e(e){let t=e.extensionsUsed;if(e.extensionsRequired=e.extensionsRequired??[],l(t)){let n=t.length;for(let i=0;i<n;++i){let o=t[i];l(I9e[o])&&e.extensionsRequired.push(o)}}}function R9e(e){De.buffer(e,function(t){delete t.type})}function V9e(e){De.texture(e,function(t){delete t.format,delete t.internalFormat,delete t.target,delete t.type})}function G9e(e){De.mesh(e,function(t){De.meshPrimitive(t,function(n){De.meshPrimitiveAttribute(n,function(i,o){o==="TEXCOORD"?n.attributes.TEXCOORD_0=i:o==="COLOR"&&(n.attributes.COLOR_0=i)}),delete n.attributes.TEXCOORD,delete n.attributes.COLOR})}),De.technique(e,function(t){De.techniqueParameter(t,function(n){let i=n.semantic;l(i)&&(i==="TEXCOORD"?n.semantic="TEXCOORD_0":i==="COLOR"&&(n.semantic="COLOR_0"))})})}var L9e={POSITION:!0,NORMAL:!0,TANGENT:!0},W9e={COLOR:"COLOR",JOINT:"JOINTS",JOINTS:"JOINTS",TEXCOORD:"TEXCOORD",WEIGHT:"WEIGHTS",WEIGHTS:"WEIGHTS"};function F9e(e){let t={};De.mesh(e,function(n){De.meshPrimitive(n,function(i){De.meshPrimitiveAttribute(i,function(o,r){if(r.charAt(0)!=="_"){let s=r.search(/_[0-9]+/g),a=r,c="_0";s>=0&&(a=r.substring(0,s),c=r.substring(s));let d,u=W9e[a];l(u)?(d=u+c,t[r]=d):l(L9e[a])||(d=`_${r}`,t[r]=d)}});for(let o in t)if(Object.prototype.hasOwnProperty.call(t,o)){let r=t[o],s=i.attributes[o];l(s)&&(delete i.attributes[o],i.attributes[r]=s)}})}),De.technique(e,function(n){De.techniqueParameter(n,function(i){let o=t[i.semantic];l(o)&&(i.semantic=o)})})}function B9e(e){De.camera(e,function(t){let n=t.perspective;if(l(n)){let i=n.aspectRatio;l(i)&&i===0&&delete n.aspectRatio;let o=n.yfov;l(o)&&o===0&&(n.yfov=1)}})}function $J(e,t){return l(t.byteStride)&&t.byteStride!==0?t.byteStride:Cd(e,t)}function w9e(e){De.buffer(e,function(t){l(t.byteLength)||(t.byteLength=t.extras._pipeline.source.length)}),De.accessor(e,function(t){let n=t.bufferView;if(l(n)){let i=e.bufferViews[n],o=$J(e,t),r=t.byteOffset+t.count*o;i.byteLength=Math.max(i.byteLength??0,r)}})}function N9e(e){let t,n,i,o=e.bufferViews,r={};De.accessorContainingVertexAttributeData(e,function(a){let c=e.accessors[a];l(c.bufferView)&&(r[c.bufferView]=!0)});let s={};De.accessor(e,function(a){l(a.bufferView)&&(s[a.bufferView]=s[a.bufferView]??[],s[a.bufferView].push(a))});for(let a in s)if(Object.prototype.hasOwnProperty.call(s,a)){i=o[a];let c=s[a];c.sort(function(p,A){return p.byteOffset-A.byteOffset});let d=0,u=0,h=c.length;for(t=0;t<h;++t){let p=c[t],A=$J(e,p),f=p.byteOffset,b=p.count*A;delete p.byteStride;let C=t<h-1,T=C?$J(e,c[t+1]):void 0;if(A!==T){let E=He(i,!0);r[a]&&(E.byteStride=A),E.byteOffset+=d,E.byteLength=f+b-d;let S=la(o,E);for(n=u;n<=t;++n)p=c[n],p.bufferView=S,p.byteOffset=p.byteOffset-d;d=C?c[t+1].byteOffset:void 0,u=t+1}}}NW(e,["accessor","bufferView","buffer"])}function P9e(e){De.accessorWithSemantic(e,"POSITION",function(t){let n=e.accessors[t];if(!l(n.min)||!l(n.max)){let i=AC(e,n);n.min=i.min,n.max=i.max}})}function dde(e){return(!l(e.children)||e.children.length===0)&&(!l(e.meshes)||e.meshes.length===0)&&!l(e.camera)&&!l(e.skin)&&!l(e.skeletons)&&!l(e.jointName)&&(!l(e.translation)||m.fromArray(e.translation).equals(m.ZERO))&&(!l(e.scale)||m.fromArray(e.scale).equals(new m(1,1,1)))&&(!l(e.rotation)||re.fromArray(e.rotation).equals(new re(0,0,0,1)))&&(!l(e.matrix)||F.fromColumnMajorArray(e.matrix).equals(F.IDENTITY))&&!l(e.extensions)&&!l(e.extras)}function ude(e,t){De.scene(e,function(n){let i=n.nodes;if(l(i)){let o=i.length;for(let r=o;r>=0;--r)if(i[r]===t){i.splice(r,1);return}}}),De.node(e,function(n,i){if(l(n.children)){let o=n.children.indexOf(t);o>-1&&(n.children.splice(o,1),dde(n)&&ude(e,i))}}),delete e.nodes[t]}function X9e(e){return De.node(e,function(t,n){dde(t)&&ude(e,n)}),e}function Y9e(e){De.animation(e,function(t){De.animationSampler(t,function(n){let i=e.accessors[n.input];if(!l(i.min)||!l(i.max)){let o=AC(e,i);i.min=o.min,i.max=o.max}})})}function M9e(e){De.accessor(e,function(t){if(l(t.min)||l(t.max)){let n=AC(e,t);l(t.min)&&(t.min=n.min),l(t.max)&&(t.max=n.max)}})}function v9e(e){e.asset=e.asset??{},e.asset.version="2.0",lde(e),C9e(e),X9e(e),T9e(e),E9e(e),_9e(e),Z9e(e),w9e(e),N9e(e),P9e(e),Y9e(e),M9e(e),R9e(e),V9e(e),G9e(e),F9e(e),YW(e),B9e(e),FW(e),wW(e),S9e(e)}var U9e=["u_tex","u_diffuse","u_emission","u_diffuse_tex"],D9e=["u_diffuse","u_diffuse_mat"];function eK(e){e.pbrMetallicRoughness=l(e.pbrMetallicRoughness)?e.pbrMetallicRoughness:{},e.pbrMetallicRoughness.roughnessFactor=1,e.pbrMetallicRoughness.metallicFactor=0}function tK(e){return l(e.index)}function nK(e){return Array.isArray(e)&&e.length===4}function mde(e){let t=new Array(4);t[3]=e[3];for(let n=0;n<3;n++){let i=e[n];i<=.04045?t[n]=e[n]*.07739938080495357:t[n]=Math.pow((i+.055)*.9478672985781991,2.4)}return t}function k9e(e,t){t=t??{};let n=t.baseColorTextureNames??U9e,i=t.baseColorFactorNames??D9e;De.material(e,function(o){De.materialValue(o,function(r,s){n.indexOf(s)!==-1&&tK(r)?(eK(o),o.pbrMetallicRoughness.baseColorTexture=r):i.indexOf(s)!==-1&&nK(r)&&(eK(o),o.pbrMetallicRoughness.baseColorFactor=mde(r))})}),gC(e,"KHR_techniques_webgl"),gC(e,"KHR_blend")}function qJ(e,t){l(t)&&(nK(t)?e.pbrMetallicRoughness.baseColorFactor=mde(t):tK(t)&&(e.pbrMetallicRoughness.baseColorTexture=t))}function cde(e,t){l(t)&&(nK(t)?e.emissiveFactor=t.slice(0,3):tK(t)&&(e.emissiveTexture=t))}function Q9e(e){De.material(e,function(t){let n=(t.extensions??{}).KHR_materials_common;if(!l(n))return;let i=n.values??{},o=i.ambient,r=i.diffuse,s=i.emission,a=i.transparency,c=n.doubleSided,d=n.transparent;eK(t),n.technique==="CONSTANT"?(Cm(e,"KHR_materials_unlit"),t.extensions=l(t.extensions)?t.extensions:{},t.extensions.KHR_materials_unlit={},qJ(t,s),qJ(t,o)):(qJ(t,r),cde(t,o),cde(t,s)),l(c)&&(t.doubleSided=c),l(a)&&(l(t.pbrMetallicRoughness.baseColorFactor)?t.pbrMetallicRoughness.baseColorFactor[3]*=a:t.pbrMetallicRoughness.baseColorFactor=[1,1,1,a]),l(d)&&(t.alphaMode=d?"BLEND":"OPAQUE")}),gC(e,"KHR_materials_common")}var MW=p9e;var NCn=y(x(),1);function Hc(){}Hc.getError=function(e,t,n){let i=`Failed to load ${e}: ${t}`;l(n)&&l(n.message)&&(i+=`
${n.message}`);let o=new me(i);return l(n)&&(o.stack=`Original stack:
${n.stack}
Handler stack:
${o.stack}`),o};Hc.getNodeTransform=function(e){return l(e.matrix)?e.matrix:F.fromTranslationQuaternionRotationScale(l(e.translation)?e.translation:m.ZERO,l(e.rotation)?e.rotation:Me.IDENTITY,l(e.scale)?e.scale:m.ONE)};Hc.getAttributeBySemantic=function(e,t,n){let i=e.attributes,o=i.length;for(let r=0;r<o;++r){let s=i[r],a=l(n)?s.setIndex===n:!0;if(s.semantic===t&&a)return s}};Hc.getAttributeByName=function(e,t){let n=e.attributes,i=n.length;for(let o=0;o<i;++o){let r=n[o];if(r.name===t)return r}};Hc.getFeatureIdsByLabel=function(e,t){for(let n=0;n<e.length;n++){let i=e[n];if(i.positionalLabel===t||i.label===t)return i}};Hc.hasQuantizedAttributes=function(e){if(!l(e))return!1;for(let t=0;t<e.length;t++){let n=e[t];if(l(n.quantization))return!0}return!1};Hc.getAttributeInfo=function(e){let t=e.semantic,n=e.setIndex,i,o=!1;l(t)?(i=ct.getVariableName(t,n),o=!0):(i=e.name,i=i.replace(/^_/,""),i=i.toLowerCase());let r=/^color_\d+$/.test(i),s=e.type,a=Ut.getGlslType(s);r&&(a="vec4");let c=l(e.quantization),d;return c&&(d=r?"vec4":Ut.getGlslType(e.quantization.type)),{attribute:e,isQuantized:c,variableName:i,hasSemantic:o,glslType:a,quantizedGlslType:d}};var O9e=new m,z9e=new m;Hc.getPositionMinMax=function(e,t,n){let i=Hc.getAttributeBySemantic(e,"POSITION"),o=i.max,r=i.min;return l(n)&&l(t)&&(r=m.add(r,t,z9e),o=m.add(o,n,O9e)),{min:r,max:o}};Hc.getAxisCorrectionMatrix=function(e,t,n){return n=F.clone(F.IDENTITY,n),e===ro.Y?n=F.clone(ro.Y_UP_TO_Z_UP,n):e===ro.X&&(n=F.clone(ro.X_UP_TO_Z_UP,n)),t===ro.Z&&(n=F.multiplyTransformation(n,ro.Z_UP_TO_X_UP,n)),n};var H9e=new $;Hc.getCullFace=function(e,t){if(!We.isTriangles(t))return wi.BACK;let n=F.getMatrix3(e,H9e);return $.determinant(n)<0?wi.FRONT:wi.BACK};Hc.sanitizeGlslIdentifier=function(e){let t=e.replaceAll(/[^A-Za-z0-9]+/g,"_");return t=t.replace(/^gl_/,""),/^\d/.test(t)&&(t=`_${t}`),t};Hc.supportedExtensions={AGI_articulations:!0,CESIUM_primitive_outline:!0,CESIUM_RTC:!0,EXT_feature_metadata:!0,EXT_implicit_cylinder_region:!0,EXT_implicit_ellipsoid_region:!0,EXT_instance_features:!0,EXT_mesh_features:!0,EXT_mesh_gpu_instancing:!0,EXT_meshopt_compression:!0,EXT_primitive_voxels:!0,EXT_structural_metadata:!0,EXT_texture_webp:!0,KHR_blend:!0,KHR_draco_mesh_compression:!0,KHR_implicit_shapes:!0,KHR_materials_common:!0,KHR_materials_pbrSpecularGlossiness:!0,KHR_materials_specular:!0,KHR_materials_anisotropy:!0,KHR_materials_clearcoat:!0,KHR_materials_unlit:!0,KHR_mesh_quantization:!0,KHR_techniques_webgl:!0,KHR_texture_basisu:!0,KHR_texture_transform:!0,KHR_gaussian_splatting:!0,KHR_gaussian_splatting_compression_spz_2:!0,WEB3D_quantized_attributes:!0};Hc.checkSupportedExtensions=function(e){let t=e.length;for(let n=0;n<t;n++){let i=e[n];if(!Hc.supportedExtensions[i])throw new me(`Unsupported glTF Extension: ${i}`)}};var It=Hc;var iK=class extends Hi{constructor(t){super(),t=t??Q.EMPTY_OBJECT;let n=t.resourceCache,i=t.gltfResource,o=t.baseResource,r=t.typedArray,s=t.gltfJson,a=t.cacheKey;this._resourceCache=n,this._gltfResource=i,this._baseResource=o,this._typedArray=r,this._gltfJson=s,this._cacheKey=a,this._gltf=void 0,this._bufferLoaders=[],this._state=yt.UNLOADED,this._promise=void 0}get cacheKey(){return this._cacheKey}get gltf(){return this._gltf}async load(){return l(this._promise)?this._promise:(this._state=yt.LOADING,l(this._gltfJson)?(this._promise=hde(this,this._gltfJson),this._promise):l(this._typedArray)?(this._promise=fde(this,this._typedArray),this._promise):(this._promise=J9e(this),this._promise))}unload(){let t=this._bufferLoaders,n=t.length;for(let i=0;i<n;++i)t[i]=!t[i].isDestroyed()&&this._resourceCache.unload(t[i]);this._bufferLoaders.length=0,this._gltf=void 0}_fetchGltf(){return this._gltfResource.fetchArrayBuffer()}};async function J9e(e){let t;try{let n=await e._fetchGltf();if(e.isDestroyed())return;t=new Uint8Array(n)}catch(n){if(e.isDestroyed())return;oK(e,n)}return fde(e,t)}function oK(e,t){e.unload(),e._state=yt.FAILED;let n=`Failed to load glTF: ${e._gltfResource.url}`;throw e.getError(n,t)}async function K9e(e,t){if(l(t.asset)&&t.asset.version==="2.0"&&!wr(t,"KHR_techniques_webgl")&&!wr(t,"KHR_materials_common"))return Promise.resolve();let n=[];De.buffer(t,function(i){if(!l(i.extras._pipeline.source)&&l(i.uri)){let o=e._baseResource.getDerivedResource({url:i.uri}),s=e._resourceCache.getExternalBufferLoader({resource:o});e._bufferLoaders.push(s),n.push(s.load().then(function(){s.isDestroyed()||(i.extras._pipeline.source=s.typedArray)}))}}),await Promise.all(n),MW(t)}function j9e(e){let t=[];return De.buffer(e,function(n){let i=n.uri;!l(n.extras._pipeline.source)&&l(i)&&bh(i)&&(delete n.uri,t.push(Le.fetchArrayBuffer(i).then(function(o){n.extras._pipeline.source=new Uint8Array(o)})))}),Promise.all(t)}function q9e(e,t){let n=[];return De.buffer(t,function(i,o){let r=i.extras._pipeline.source;if(l(r)&&!l(i.uri)){let a=e._resourceCache.getEmbeddedBufferLoader({parentResource:e._gltfResource,bufferId:o,typedArray:r});e._bufferLoaders.push(a),n.push(a.load())}}),Promise.all(n)}async function hde(e,t){try{A0(t),await j9e(t),await K9e(e,t),GW(t),await q9e(e,t),WW(t);let n=t.asset.version;if(n!=="1.0"&&n!=="2.0")throw new me(`Unsupported glTF version: ${n}`);let i=t.extensionsRequired;return l(i)&&It.checkSupportedExtensions(i),e._gltf=t,e._state=yt.READY,e}catch(n){if(e.isDestroyed())return;oK(e,n)}}async function fde(e,t){let n;try{Ph(t)==="glTF"?n=pC(t):n=Zr(t)}catch(i){if(e.isDestroyed())return;oK(e,i)}return hde(e,n)}var OS=iK;var YTn=y(x(),1);var TTn=y(x(),1);var dTn=y(x(),1);var iTn=y(x(),1),$9e={OPAQUE:"OPAQUE",MASK:"MASK",BLEND:"BLEND"},pp=Object.freeze($9e);var No={},rK=class{constructor(){this.octEncoded=!1,this.octEncodedZXY=!1,this.normalizationRange=void 0,this.quantizedVolumeOffset=void 0,this.quantizedVolumeDimensions=void 0,this.quantizedVolumeStepSize=void 0,this.componentDatatype=void 0,this.type=void 0}},sK=class{constructor(){this.name=void 0,this.semantic=void 0,this.setIndex=void 0,this.componentDatatype=void 0,this.type=void 0,this.normalized=!1,this.count=void 0,this.min=void 0,this.max=void 0,this.constant=void 0,this.quantization=void 0,this.typedArray=void 0,this.buffer=void 0,this.byteOffset=0,this.byteStride=void 0}},aK=class{constructor(){this.indexDatatype=void 0,this.count=void 0,this.buffer=void 0,this.typedArray=void 0}},cK=class{constructor(){this.featureCount=void 0,this.nullFeatureId=void 0,this.propertyTableId=void 0,this.setIndex=void 0,this.label=void 0,this.positionalLabel=void 0}},lK=class{constructor(){this.featureCount=void 0,this.nullFeatureId=void 0,this.propertyTableId=void 0,this.offset=0,this.repeat=void 0,this.label=void 0,this.positionalLabel=void 0}},dK=class{constructor(){this.featureCount=void 0,this.nullFeatureId=void 0,this.propertyTableId=void 0,this.textureReader=void 0,this.label=void 0,this.positionalLabel=void 0}},uK=class{constructor(){this.attributes=[]}},mK=class{constructor(){this.attributes=[],this.morphTargets=[],this.indices=void 0,this.material=void 0,this.primitiveType=void 0,this.vector=void 0,this.featureIds=[],this.propertyTextureIds=[],this.propertyAttributeIds=[],this.outlineCoordinates=void 0,this.modelPrimitiveImagery=void 0,this.edgeVisibility=void 0}},hK=class{constructor(){this.attributes=[],this.featureIds=[],this.transformInWorldSpace=!1}},fK=class{constructor(){this.index=void 0,this.joints=[],this.inverseBindMatrices=[]}},pK=class{constructor(){this.name=void 0,this.index=void 0,this.children=[],this.primitives=[],this.instances=void 0,this.skin=void 0,this.matrix=void 0,this.translation=void 0,this.rotation=void 0,this.scale=void 0,this.morphWeights=[],this.articulationName=void 0,this.meshVector=void 0}},AK=class{constructor(){this.nodes=[]}},e5e={TRANSLATION:"translation",ROTATION:"rotation",SCALE:"scale",WEIGHTS:"weights"},gK=class{constructor(){this.input=[],this.interpolation=void 0,this.output=[]}},bK=class{constructor(){this.node=void 0,this.path=void 0}},yK=class{constructor(){this.sampler=void 0,this.target=void 0}},xK=class{constructor(){this.name=void 0,this.samplers=[],this.channels=[]}},CK=class{constructor(){this.name=void 0,this.type=void 0,this.minimumValue=void 0,this.maximumValue=void 0,this.initialValue=void 0}},TK=class{constructor(){this.name=void 0,this.stages=[]}},_k=class{constructor(){this.credits=[]}},EK=class{constructor(){this.asset=new _k,this.scene=void 0,this.nodes=[],this.skins=[],this.animations=[],this.articulations=[],this.structuralMetadata=void 0,this.upAxis=void 0,this.forwardAxis=void 0,this.transform=F.clone(F.IDENTITY),this.extensions={}}},SK=class{constructor(){this.texture=void 0,this.index=void 0,this.texCoord=0,this.transform=$.clone($.IDENTITY),this.scale=1,this.channels=void 0,this.constantLod=void 0}},g0=class g0{constructor(){this.baseColorTexture=void 0,this.metallicRoughnessTexture=void 0,this.baseColorFactor=re.clone(g0.DEFAULT_BASE_COLOR_FACTOR),this.metallicFactor=g0.DEFAULT_METALLIC_FACTOR,this.roughnessFactor=g0.DEFAULT_ROUGHNESS_FACTOR}};Bn(g0,"DEFAULT_BASE_COLOR_FACTOR",re.ONE),Bn(g0,"DEFAULT_METALLIC_FACTOR",1),Bn(g0,"DEFAULT_ROUGHNESS_FACTOR",1);var Ik=g0,b0=class b0{constructor(){this.diffuseTexture=void 0,this.specularGlossinessTexture=void 0,this.diffuseFactor=re.clone(b0.DEFAULT_DIFFUSE_FACTOR),this.specularFactor=m.clone(b0.DEFAULT_SPECULAR_FACTOR),this.glossinessFactor=b0.DEFAULT_GLOSSINESS_FACTOR}};Bn(b0,"DEFAULT_DIFFUSE_FACTOR",re.ONE),Bn(b0,"DEFAULT_SPECULAR_FACTOR",m.ONE),Bn(b0,"DEFAULT_GLOSSINESS_FACTOR",1);var _K=b0,zS=class zS{constructor(){this.specularFactor=zS.DEFAULT_SPECULAR_FACTOR,this.specularTexture=void 0,this.specularColorFactor=m.clone(zS.DEFAULT_SPECULAR_COLOR_FACTOR),this.specularColorTexture=void 0}};Bn(zS,"DEFAULT_SPECULAR_FACTOR",1),Bn(zS,"DEFAULT_SPECULAR_COLOR_FACTOR",m.ONE);var IK=zS,HS=class HS{constructor(){this.anisotropyStrength=HS.DEFAULT_ANISOTROPY_STRENGTH,this.anisotropyRotation=HS.DEFAULT_ANISOTROPY_ROTATION,this.anisotropyTexture=void 0}};Bn(HS,"DEFAULT_ANISOTROPY_STRENGTH",0),Bn(HS,"DEFAULT_ANISOTROPY_ROTATION",0);var ZK=HS,JS=class JS{constructor(){this.clearcoatFactor=JS.DEFAULT_CLEARCOAT_FACTOR,this.clearcoatTexture=void 0,this.clearcoatRoughnessFactor=JS.DEFAULT_CLEARCOAT_ROUGHNESS_FACTOR,this.clearcoatRoughnessTexture=void 0,this.clearcoatNormalTexture=void 0}};Bn(JS,"DEFAULT_CLEARCOAT_FACTOR",0),Bn(JS,"DEFAULT_CLEARCOAT_ROUGHNESS_FACTOR",0);var RK=JS,VK=class{constructor(){Bn(this,"width");Bn(this,"pattern")}},Zk=class Zk{constructor(){this.metallicRoughness=new Ik,this.specularGlossiness=void 0,this.specular=void 0,this.anisotropy=void 0,this.clearcoat=void 0,this.emissiveTexture=void 0,this.normalTexture=void 0,this.occlusionTexture=void 0,this.emissiveFactor=m.clone(Zk.DEFAULT_EMISSIVE_FACTOR),this.alphaMode=pp.OPAQUE,this.alphaCutoff=.5,this.doubleSided=!1,this.unlit=!1,this.pointDiameter=void 0,this.lineStyle=void 0}};Bn(Zk,"DEFAULT_EMISSIVE_FACTOR",m.ZERO);var GK=Zk,LK=class{constructor(){Bn(this,"vector",!0);Bn(this,"count",0);Bn(this,"polygonAttributeOffsets");Bn(this,"polygonHoleCounts");Bn(this,"polygonHoleOffsets");Bn(this,"polygonIndicesOffsets")}};No.Quantization=rK;No.Attribute=sK;No.Indices=aK;No.FeatureIdAttribute=cK;No.FeatureIdTexture=dK;No.FeatureIdImplicitRange=lK;No.MorphTarget=uK;No.Primitive=mK;No.Instances=hK;No.Skin=fK;No.Node=pK;No.Scene=AK;No.AnimatedPropertyType=Object.freeze(e5e);No.AnimationSampler=gK;No.AnimationTarget=bK;No.AnimationChannel=yK;No.Animation=xK;No.ArticulationStage=CK;No.Articulation=TK;No.Asset=_k;No.Components=EK;No.TextureReader=SK;No.MetallicRoughness=Ik;No.SpecularGlossiness=_K;No.Specular=IK;No.Anisotropy=ZK;No.Clearcoat=RK;No.LineStyle=VK;No.Material=GK;No.Vector=LK;var Tn=No;var Rk={};Rk.getImageIdFromTexture=function(e){e=e??Q.EMPTY_OBJECT;let{gltf:t,textureId:n,supportedImageFormats:i}=e,o=t.textures[n],r=o.extensions;if(l(r)){if(i.webp&&l(r.EXT_texture_webp))return r.EXT_texture_webp.source;if(i.basis&&l(r.KHR_texture_basisu))return r.KHR_texture_basisu.source}return o.source};Rk.createSampler=function(e){e=e??Q.EMPTY_OBJECT;let{gltf:t,textureInfo:n,compressedTextureNoMipmap:i=!1}=e,o=gn.REPEAT,r=gn.REPEAT,s=zt.LINEAR,a=li.LINEAR,c=n.index,u=t.textures[c].sampler;if(l(u)){let h=t.samplers[u];o=h.wrapS??o,r=h.wrapT??r,s=h.minFilter??s,a=h.magFilter??a}return i&&s!==zt.LINEAR&&s!==zt.NEAREST&&(s===zt.NEAREST_MIPMAP_NEAREST||s===zt.NEAREST_MIPMAP_LINEAR?s=zt.NEAREST:s=zt.LINEAR),new Ht({wrapS:o,wrapT:r,minificationFilter:s,magnificationFilter:a})};var t5e=new M(1,1);Rk.createModelTextureReader=function(e){e=e??Q.EMPTY_OBJECT;let{textureInfo:t,channels:n,texture:i}=e,o=t.texCoord??0,r,s=t.extensions?.KHR_texture_transform;if(l(s)){o=s.texCoord??o;let d=l(s.offset)?M.unpack(s.offset):M.ZERO,u=s.rotation??0,h=l(s.scale)?M.unpack(s.scale):t5e;u=-u,r=new $(Math.cos(u)*h.x,-Math.sin(u)*h.y,d.x,Math.sin(u)*h.x,Math.cos(u)*h.y,d.y,0,0,1)}let a=new Tn.TextureReader;a.index=t.index,a.texture=i,a.texCoord=o,a.scale=t.scale,a.transform=r,a.channels=n;let c=t.extensions?.EXT_textureInfo_constant_lod;return l(c)&&(a.constantLod={repetitions:c.repetitions??1,offset:l(c.offset)?M.unpack(c.offset):M.ZERO,minClampDistance:c.minClampDistance??1,maxClampDistance:c.maxClampDistance??4294967296}),a};var Td=Rk;var _Tn=y(x(),1);function n5e(e){let t=document.createElement("canvas");return t.width=L.nextPowerOfTwo(e.width),t.height=L.nextPowerOfTwo(e.height),t.getContext("2d").drawImage(e,0,0,e.width,e.height,0,0,t.width,t.height),t}var y0=n5e;var WK=class extends Hi{constructor(t){super(),t=t??Q.EMPTY_OBJECT;let n=t.resourceCache,i=t.gltf,o=t.textureInfo,r=t.gltfResource,s=t.baseResource,a=t.supportedImageFormats,c=t.cacheKey,d=t.asynchronous??!0,u=o.index,h=Td.getImageIdFromTexture({gltf:i,textureId:u,supportedImageFormats:a});this._resourceCache=n,this._gltf=i,this._textureInfo=o,this._imageId=h,this._gltfResource=r,this._baseResource=s,this._cacheKey=c,this._asynchronous=d,this._imageLoader=void 0,this._image=void 0,this._mipLevels=void 0,this._texture=void 0,this._state=yt.UNLOADED,this._promise=void 0}get cacheKey(){return this._cacheKey}get texture(){return this._texture}async load(){return l(this._promise)?this._promise:(this._state=yt.LOADING,this._promise=o5e(this),this._promise)}process(t){if(this._state===yt.READY)return!0;if(this._state!==yt.LOADED&&this._state!==yt.PROCESSING||l(this._texture)||!l(this._image))return!1;this._state=yt.PROCESSING;let n;if(this._asynchronous){let i=i5e;if(i.set(this._gltf,this._textureInfo,this._cacheKey,this._image,this._mipLevels,t.context),!t.jobScheduler.execute(i,Ic.TEXTURE))return!1;n=i.texture}else n=pde(this._gltf,this._textureInfo,this._cacheKey,this._image,this._mipLevels,t.context);return this.unload(),this._texture=n,this._state=yt.READY,this._resourceCache.statistics.addTextureLoader(this),!0}unload(){l(this._texture)&&this._texture.destroy(),l(this._imageLoader)&&!this._imageLoader.isDestroyed()&&this._resourceCache.unload(this._imageLoader),this._imageLoader=void 0,this._image=void 0,this._mipLevels=void 0,this._texture=void 0,this._gltf=void 0}},FK=class{constructor(){this.gltf=void 0,this.textureInfo=void 0,this.textureId=void 0,this.image=void 0,this.context=void 0,this.texture=void 0}set(t,n,i,o,r,s){this.gltf=t,this.textureInfo=n,this.textureId=i,this.image=o,this.mipLevels=r,this.context=s}execute(){this.texture=pde(this.gltf,this.textureInfo,this.textureId,this.image,this.mipLevels,this.context)}};function pde(e,t,n,i,o,r){let s=i.internalFormat,a=!1;Ke.isCompressedFormat(s)&&!l(o)&&(a=!0);let c=Td.createSampler({gltf:e,textureInfo:t,compressedTextureNoMipmap:a}),d=c.minificationFilter,u=c.wrapS,h=c.wrapT,p=d===zt.NEAREST_MIPMAP_NEAREST||d===zt.NEAREST_MIPMAP_LINEAR||d===zt.LINEAR_MIPMAP_NEAREST||d===zt.LINEAR_MIPMAP_LINEAR,A=!l(s)&&p,f=A||u===gn.REPEAT||u===gn.MIRRORED_REPEAT||h===gn.REPEAT||h===gn.MIRRORED_REPEAT,b=!L.isPowerOfTwo(i.width)||!L.isPowerOfTwo(i.height),C=f&&b,T;return l(s)?(!r.webgl2&&Ke.isCompressedFormat(s)&&b&&f&&console.warn("Compressed texture uses REPEAT or MIRRORED_REPEAT texture wrap mode and dimensions are not powers of two. The texture may be rendered incorrectly."),T=Lt.create({id:n,context:r,source:{arrayBufferView:i.bufferView,mipLevels:o},width:i.width,height:i.height,pixelFormat:i.internalFormat,sampler:c})):(C&&(i=y0(i)),T=Lt.create({id:n,context:r,source:i,sampler:c,flipY:!1,skipColorSpaceConversion:!0})),A&&T.generateMipmap(),T}var i5e=new FK;async function o5e(e){let t=e._resourceCache;try{let n=t.getImageLoader({gltf:e._gltf,imageId:e._imageId,gltfResource:e._gltfResource,baseResource:e._baseResource});return e._imageLoader=n,await n.load(),e.isDestroyed()?void 0:(e._image=n.image,e._mipLevels=n.mipLevels,e._state=yt.LOADED,e)}catch(n){if(e.isDestroyed())return;throw e.unload(),e._state=yt.FAILED,e.getError("Failed to load texture",n)}}var KS=WK;var jTn=y(x(),1);var BK=class extends Hi{constructor(t){super(),t=t??Q.EMPTY_OBJECT;let n=t.resourceCache,i=t.gltf,o=t.gltfResource,r=t.baseResource,s=t.bufferViewId,a=t.primitive,c=t.draco,d=t.attributeSemantic,u=t.accessorId,h=t.cacheKey,p=t.spz,A=t.asynchronous??!0,f=t.loadBuffer??!1,b=t.loadTypedArray??!1;this._resourceCache=n,this._gltfResource=o,this._baseResource=r,this._gltf=i,this._bufferViewId=s,this._primitive=a,this._draco=c,this._spz=p,this._attributeSemantic=d,this._accessorId=u,this._cacheKey=h,this._asynchronous=A,this._loadBuffer=f,this._loadTypedArray=b,this._bufferViewLoader=void 0,this._dracoLoader=void 0,this._quantization=void 0,this._typedArray=void 0,this._buffer=void 0,this._state=yt.UNLOADED,this._promise=void 0}get cacheKey(){return this._cacheKey}get buffer(){return this._buffer}get typedArray(){return this._typedArray}get quantization(){return this._quantization}async load(){return l(this._promise)?this._promise:l(this._spz)?(this._promise=a5e(this),this._promise):r5e(this._draco,this._attributeSemantic)?(this._promise=u5e(this),this._promise):(this._promise=h5e(this),this._promise)}process(t){if(this._state===yt.READY)return!0;if(this._state!==yt.LOADED&&this._state!==yt.PROCESSING)return!1;if(l(this._dracoLoader)){try{if(!this._dracoLoader.process(t))return!1}catch(o){Vk(this,o)}m5e(this)}if(l(this._spzLoader)){try{if(!this._spzLoader.process(t))return!1}catch(o){Vk(this,o)}d5e(this)}let n,i=this._typedArray;if(this._loadBuffer&&this._asynchronous){let o=f5e;if(o.set(i,t.context),!t.jobScheduler.execute(o,Ic.BUFFER))return!1;n=o.buffer}else this._loadBuffer&&(n=Ade(i,t.context));return this.unload(),this._buffer=n,this._typedArray=this._loadTypedArray?i:void 0,this._state=yt.READY,this._resourceCache.statistics.addGeometryLoader(this),!0}unload(){l(this._buffer)&&this._buffer.destroy();let t=this._resourceCache;l(this._bufferViewLoader)&&!this._bufferViewLoader.isDestroyed()&&t.unload(this._bufferViewLoader),l(this._dracoLoader)&&t.unload(this._dracoLoader),l(this._spzLoader)&&t.unload(this._spzLoader),this._bufferViewLoader=void 0,this._dracoLoader=void 0,this._spzLoader=void 0,this._typedArray=void 0,this._buffer=void 0,this._gltf=void 0,this._primitive=void 0}};function r5e(e,t){return l(e)&&l(e.attributes)&&l(e.attributes[t])}function s5e(e,t,n,i){let r=(1<<e.quantizationBits)-1,s=1/r,a=new Tn.Quantization;if(a.componentDatatype=t,a.octEncoded=e.octEncoded,a.octEncodedZXY=!0,a.type=i,a.octEncoded)a.type=Ut.VEC2,a.normalizationRange=r;else{let c=Ut.getMathType(i);if(c===Number){let d=e.range;a.quantizedVolumeOffset=e.minValues[0],a.quantizedVolumeDimensions=d,a.normalizationRange=r,a.quantizedVolumeStepSize=d*s}else{a.quantizedVolumeOffset=c.unpack(e.minValues),a.normalizationRange=c.unpack(new Array(n).fill(r));let d=new Array(n).fill(e.range);a.quantizedVolumeDimensions=c.unpack(d);let u=d.map(function(h){return h*s});a.quantizedVolumeStepSize=c.unpack(u)}}return a}async function a5e(e){e._state=yt.LOADING;let t=e._resourceCache;try{let n=t.getSpzLoader({gltf:e._gltf,primitive:e._primitive,spz:e._spz,gltfResource:e._gltfResource,baseResource:e._baseResource});return e._spzLoader=n,await n.load(),e.isDestroyed()?void 0:(e._state=yt.LOADED,e)}catch{if(e.isDestroyed())return}}function c5e(e){return`${e.startsWith("KHR_gaussian_splatting:")?"KHR_gaussian_splatting:":"_"}SH_DEGREE_`}function l5e(e){let t=c5e(e),n="_COEF_",i=t.length,o=e.indexOf(n,i),r=parseInt(e.slice(i,o),10),s=parseInt(e.slice(o+n.length),10);return{l:r,n:s}}function d5e(e){e._state=yt.PROCESSING;let n=e._spzLoader.decodedData.gcloud;if(e._attributeSemantic==="POSITION")e._typedArray=n.positions;else if(e._attributeSemantic==="KHR_gaussian_splatting:SCALE"||e._attributeSemantic==="_SCALE")e._typedArray=n.scales;else if(e._attributeSemantic==="KHR_gaussian_splatting:ROTATION"||e._attributeSemantic==="_ROTATION")e._typedArray=n.rotations;else if(e._attributeSemantic==="COLOR_0"){let i=n.colors,o=n.alphas;e._typedArray=new Uint8Array(i.length/3*4);for(let r=0;r<i.length/3;r++)e._typedArray[r*4]=L.clamp(i[r*3]*255,0,255),e._typedArray[r*4+1]=L.clamp(i[r*3+1]*255,0,255),e._typedArray[r*4+2]=L.clamp(i[r*3+2]*255,0,255),e._typedArray[r*4+3]=L.clamp(o[r]*255,0,255)}else if(e._attributeSemantic.includes("SH_DEGREE_")){let{l:i,n:o}=l5e(e._attributeSemantic),r=n.shDegree,s=0,a=[0,9,24];switch(r){case 1:s=9;break;case 2:s=24;break;case 3:s=45;break}let c=n.numPoints,d=n.sh;e._typedArray=new Float32Array(c*3);for(let u=0;u<c;u++){let h=u*s+a[i-1]+o*3;e._typedArray[u*3]=d[h],e._typedArray[u*3+1]=d[h+1],e._typedArray[u*3+2]=d[h+2]}}}async function u5e(e){e._state=yt.LOADING;let t=e._resourceCache;try{let n=t.getDracoLoader({gltf:e._gltf,primitive:e._primitive,draco:e._draco,gltfResource:e._gltfResource,baseResource:e._baseResource});return e._dracoLoader=n,await n.load(),e.isDestroyed()?void 0:(e._state=yt.LOADED,e)}catch{if(e.isDestroyed())return;Vk(e)}}function m5e(e){e._state=yt.PROCESSING;let n=e._dracoLoader.decodedData.vertexAttributes,i=e._attributeSemantic,o=n[i],r=e._accessorId,a=e._gltf.accessors[r].type,c=o.array,d=o.data.quantization;l(d)&&(e._quantization=s5e(d,o.data.componentDatatype,o.data.componentsPerAttribute,a)),e._typedArray=new Uint8Array(c.buffer,c.byteOffset,c.byteLength)}async function h5e(e){e._state=yt.LOADING;let t=e._resourceCache;try{let n=t.getBufferViewLoader({gltf:e._gltf,bufferViewId:e._bufferViewId,gltfResource:e._gltfResource,baseResource:e._baseResource});return e._bufferViewLoader=n,await n.load(),e.isDestroyed()?void 0:(e._typedArray=n.typedArray,e._state=yt.PROCESSING,e)}catch(n){if(e.isDestroyed())return;Vk(e,n)}}function Vk(e,t){throw e.unload(),e._state=yt.FAILED,e.getError("Failed to load vertex buffer",t)}var wK=class{constructor(){this.typedArray=void 0,this.context=void 0,this.buffer=void 0}set(t,n){this.typedArray=t,this.context=n}execute(){this.buffer=Ade(this.typedArray,this.context)}};function Ade(e,t){let n=it.createVertexBuffer({typedArray:e,context:t,usage:Be.STATIC_DRAW});return n.vertexArrayDestroyable=!1,n}var f5e=new wK,jS=BK;var lEn=y(x(),1);var $Tn=y(x(),1),gde={};async function p5e(e={}){var t,n,i=e,o=typeof window=="object",r=typeof WorkerGlobalScope<"u",s=typeof process=="object"&&((t=process.versions)==null?void 0:t.node)&&process.type!="renderer";if(s){let{createRequire:ce}=await Promise.resolve().then(()=>x5e);var a=ce(gde.url)}var c="./this.program",d=gde.url,u;if(s){var h=a("fs");d.startsWith("file:")&&a("path").dirname(a("url").fileURLToPath(d)),u=ce=>(ce=C(ce)?new URL(ce):ce,h.readFileSync(ce)),1<process.argv.length&&(c=process.argv[1].replace(/\\/g,"/")),process.argv.slice(2)}else if(o||r){try{new URL(".",d)}catch{}r&&(u=ce=>{var oe=new XMLHttpRequest;return oe.open("GET",ce,!1),oe.responseType="arraybuffer",oe.send(null),new Uint8Array(oe.response)})}var p=console.log.bind(console),A=console.error.bind(console),f,b=!1,C=ce=>ce.startsWith("file://"),T,E,S,I,R,V,W,B,N,P,g,_,Z,G=!1;function w(){var ce=S.buffer;I=new Int8Array(ce),V=new Int16Array(ce),i.HEAPU8=R=new Uint8Array(ce),W=new Uint16Array(ce),B=new Int32Array(ce),N=new Uint32Array(ce),i.HEAPF32=P=new Float32Array(ce),g=new Float64Array(ce),_=new BigInt64Array(ce),Z=new BigUint64Array(ce)}var X=0,k=null;function v(ce){var oe;throw(oe=i.onAbort)==null||oe.call(i,ce),ce="Aborted("+ce+")",A(ce),b=!0,ce=new WebAssembly.RuntimeError(ce+". Build with -sASSERTIONS for more info."),E?.(ce),ce}var D;async function Y(ce){if(!ArrayBuffer.isView(ce))if(ce==D&&f)ce=new Uint8Array(f);else if(u)ce=u(ce);else throw"both async and sync fetching of the wasm failed";return ce}async function O(ce){var oe=D;try{var Se=await Y(oe);return await WebAssembly.instantiate(Se,ce)}catch(Ze){A(`failed to asynchronously prepare wasm: ${Ze}`),v(Ze)}}async function J(ce){return O(ce)}var te=ce=>{for(;0<ce.length;)ce.shift()(i)},z=[],j=[],ee=()=>{var ce=i.preRun.shift();j.push(ce)},ge=ce=>{if(s)return ce=Buffer.from(ce,"base64"),new Uint8Array(ce.buffer,ce.byteOffset,ce.length);for(var oe,Se,Ze=0,je=0,Zt=ce.length,pt=new Uint8Array((3*Zt>>2)-(ce[Zt-2]=="=")-(ce[Zt-1]=="="));Ze<Zt;Ze+=4,je+=3)oe=pA[ce.charCodeAt(Ze+1)],Se=pA[ce.charCodeAt(Ze+2)],pt[je]=pA[ce.charCodeAt(Ze)]<<2|oe>>4,pt[je+1]=oe<<4|Se>>2,pt[je+2]=Se<<6|pA[ce.charCodeAt(Ze+3)];return pt},ye={},ae=ce=>{for(;ce.length;){var oe=ce.pop();ce.pop()(oe)}};function Ce(ce){return this.N(N[ce>>2])}var Te={},Fe={},Ne={},Pe=class extends Error{constructor(ce){super(ce),this.name="InternalError"}},Xe=(ce,oe,Se)=>{function Ze(Wt){if(Wt=Se(Wt),Wt.length!==ce.length)throw new Pe("Mismatched type converter count");for(var Ln=0;Ln<ce.length;++Ln)Je(ce[Ln],Wt[Ln])}ce.forEach(Wt=>Ne[Wt]=oe);var je=Array(oe.length),Zt=[],pt=0;oe.forEach((Wt,Ln)=>{Fe.hasOwnProperty(Wt)?je[Ln]=Fe[Wt]:(Zt.push(Wt),Te.hasOwnProperty(Wt)||(Te[Wt]=[]),Te[Wt].push(()=>{je[Ln]=Fe[Wt],++pt,pt===Zt.length&&Ze(je)}))}),Zt.length===0&&Ze(je)},st=ce=>{for(var oe="";;){var Se=R[ce++];if(!Se)return oe;oe+=String.fromCharCode(Se)}},Ye=class extends Error{constructor(ce){super(ce),this.name="BindingError"}},xt=ce=>{throw new Ye(ce)};function at(ce,oe,Se={}){var Ze=oe.name;if(!ce)throw new Ye(`type "${Ze}" must have a positive integer typeid pointer`);if(Fe.hasOwnProperty(ce)){if(Se.wa)return;throw new Ye(`Cannot register type '${Ze}' twice`)}Fe[ce]=oe,delete Ne[ce],Te.hasOwnProperty(ce)&&(oe=Te[ce],delete Te[ce],oe.forEach(je=>je()))}function Je(ce,oe,Se={}){return at(ce,oe,Se)}var lt=(ce,oe,Se)=>{switch(oe){case 1:return Se?Ze=>I[Ze]:Ze=>R[Ze];case 2:return Se?Ze=>V[Ze>>1]:Ze=>W[Ze>>1];case 4:return Se?Ze=>B[Ze>>2]:Ze=>N[Ze>>2];case 8:return Se?Ze=>_[Ze>>3]:Ze=>Z[Ze>>3];default:throw new TypeError(`invalid integer width (${oe}): ${ce}`)}},ht=ce=>{throw new Ye(ce.L.P.M.name+" instance already deleted")},Rt=!1,_e=()=>{},Re=ce=>typeof FinalizationRegistry>"u"?(Re=oe=>oe,ce):(Rt=new FinalizationRegistry(oe=>{oe=oe.L,--oe.count.value,oe.count.value===0&&(oe.S?oe.W.Y(oe.S):oe.P.M.Y(oe.O))}),Re=oe=>{var Se=oe.L;return Se.S&&Rt.register(oe,{L:Se},oe),oe},_e=oe=>{Rt.unregister(oe)},Re(ce));function jt(){}var At=(ce,oe)=>Object.defineProperty(oe,"name",{value:ce}),kt={},On=(ce,oe,Se)=>{if(ce[oe].R===void 0){var Ze=ce[oe];ce[oe]=function(...je){if(!ce[oe].R.hasOwnProperty(je.length))throw new Ye(`Function '${Se}' called with an invalid number of arguments (${je.length}) - expects one of (${ce[oe].R})!`);return ce[oe].R[je.length].apply(this,je)},ce[oe].R=[],ce[oe].R[Ze.aa]=Ze}},$e=(ce,oe,Se)=>{if(i.hasOwnProperty(ce)){if(Se===void 0||i[ce].R!==void 0&&i[ce].R[Se]!==void 0)throw new Ye(`Cannot register public name '${ce}' twice`);if(On(i,ce,ce),i[ce].R.hasOwnProperty(Se))throw new Ye(`Cannot register multiple overloads of a function with the same number of arguments (${Se})!`);i[ce].R[Se]=oe}else i[ce]=oe,i[ce].aa=Se},uo=ce=>{ce=ce.replace(/[^a-zA-Z0-9_]/g,"$");var oe=ce.charCodeAt(0);return 48<=oe&&57>=oe?`_${ce}`:ce};function Qt(ce,oe,Se,Ze,je,Zt,pt,Wt){this.name=ce,this.constructor=oe,this.$=Se,this.Y=Ze,this.U=je,this.ra=Zt,this.ea=pt,this.pa=Wt,this.ya=[]}var Bo=(ce,oe,Se)=>{for(;oe!==Se;){if(!oe.ea)throw new Ye(`Expected null or instance of ${Se.name}, got an instance of ${oe.name}`);ce=oe.ea(ce),oe=oe.U}return ce},no=ce=>{if(ce===null)return"null";var oe=typeof ce;return oe==="object"||oe==="array"||oe==="function"?ce.toString():""+ce};function Yi(ce,oe){if(oe===null){if(this.ha)throw new Ye(`null is not a valid ${this.name}`);return 0}if(!oe.L)throw new Ye(`Cannot pass "${no(oe)}" as a ${this.name}`);if(!oe.L.O)throw new Ye(`Cannot pass deleted object as a pointer of type ${this.name}`);return Bo(oe.L.O,oe.L.P.M,this.M)}function Oo(ce,oe){if(oe===null){if(this.ha)throw new Ye(`null is not a valid ${this.name}`);if(this.ga){var Se=this.ia();return ce!==null&&ce.push(this.Y,Se),Se}return 0}if(!oe||!oe.L)throw new Ye(`Cannot pass "${no(oe)}" as a ${this.name}`);if(!oe.L.O)throw new Ye(`Cannot pass deleted object as a pointer of type ${this.name}`);if(!this.fa&&oe.L.P.fa)throw new Ye(`Cannot convert argument of type ${oe.L.W?oe.L.W.name:oe.L.P.name} to parameter type ${this.name}`);if(Se=Bo(oe.L.O,oe.L.P.M,this.M),this.ga){if(oe.L.S===void 0)throw new Ye("Passing raw pointer to smart pointer is illegal");switch(this.Da){case 0:if(oe.L.W===this)Se=oe.L.S;else throw new Ye(`Cannot convert argument of type ${oe.L.W?oe.L.W.name:oe.L.P.name} to parameter type ${this.name}`);break;case 1:Se=oe.L.S;break;case 2:if(oe.L.W===this)Se=oe.L.S;else{var Ze=oe.clone();Se=this.za(Se,Hd(()=>Ze.delete())),ce!==null&&ce.push(this.Y,Se)}break;default:throw new Ye("Unsupporting sharing policy")}}return Se}function ai(ce,oe){if(oe===null){if(this.ha)throw new Ye(`null is not a valid ${this.name}`);return 0}if(!oe.L)throw new Ye(`Cannot pass "${no(oe)}" as a ${this.name}`);if(!oe.L.O)throw new Ye(`Cannot pass deleted object as a pointer of type ${this.name}`);if(oe.L.P.fa)throw new Ye(`Cannot convert argument of type ${oe.L.P.name} to parameter type ${this.name}`);return Bo(oe.L.O,oe.L.P.M,this.M)}var jn=(ce,oe,Se)=>oe===Se?ce:Se.U===void 0?null:(ce=jn(ce,oe,Se.U),ce===null?null:Se.pa(ce)),io={},wo=(ce,oe)=>{if(oe===void 0)throw new Ye("ptr should not be undefined");for(;ce.U;)oe=ce.ea(oe),ce=ce.U;return io[oe]},bo=(ce,oe)=>{if(!oe.P||!oe.O)throw new Pe("makeClassHandle requires ptr and ptrType");if(!!oe.W!=!!oe.S)throw new Pe("Both smartPtrType and smartPtr must be specified");return oe.count={value:1},Re(Object.create(ce,{L:{value:oe,writable:!0}}))};function nr(ce,oe,Se,Ze,je,Zt,pt,Wt,Ln,Jn,pn){this.name=ce,this.M=oe,this.ha=Se,this.fa=Ze,this.ga=je,this.xa=Zt,this.Da=pt,this.na=Wt,this.ia=Ln,this.za=Jn,this.Y=pn,je||oe.U!==void 0?this.T=Oo:(this.T=Ze?Yi:ai,this.V=null)}var zo=(ce,oe,Se)=>{if(!i.hasOwnProperty(ce))throw new Pe("Replacing nonexistent public symbol");i[ce].R!==void 0&&Se!==void 0?i[ce].R[Se]=oe:(i[ce]=oe,i[ce].aa=Se)},Sn,Ri=(ce,oe)=>{ce=st(ce);var Se=Sn.get(oe);if(typeof Se!="function")throw new Ye(`unknown function pointer with signature ${ce}: ${oe}`);return Se};class Pn extends Error{}var Ho=ce=>{ce=pie(ce);var oe=st(ce);return Yb(ce),oe},Jo=(ce,oe)=>{function Se(Zt){je[Zt]||Fe[Zt]||(Ne[Zt]?Ne[Zt].forEach(Se):(Ze.push(Zt),je[Zt]=!0))}var Ze=[],je={};throw oe.forEach(Se),new Pn(`${ce}: `+Ze.map(Ho).join([", "]))},oa=(ce,oe)=>{for(var Se=[],Ze=0;Ze<ce;Ze++)Se.push(N[oe+4*Ze>>2]);return Se};function Di(ce){for(var oe=1;oe<ce.length;++oe)if(ce[oe]!==null&&ce[oe].V===void 0)return!0;return!1}function Ro(ce,oe,Se,Ze,je,Zt){var pt=oe.length;if(2>pt)throw new Ye("argTypes array size mismatch! Must at least get return value and 'this' types!");var Wt=oe[1]!==null&&Se!==null,Ln=Di(oe);Se=!oe[0].ma;var Jn=oe[0],pn=oe[1];for(Ze=[ce,xt,Ze,je,ae,Jn.N.bind(Jn),pn?.T.bind(pn)],je=2;je<pt;++je)Jn=oe[je],Ze.push(Jn.T.bind(Jn));if(!Ln)for(je=Wt?1:2;je<oe.length;++je)oe[je].V!==null&&Ze.push(oe[je].V);for(Ln=Di(oe),je=oe.length-2,pn=[],Jn=["fn"],Wt&&Jn.push("thisWired"),pt=0;pt<je;++pt)pn.push(`arg${pt}`),Jn.push(`arg${pt}Wired`);pn=pn.join(","),Jn=Jn.join(","),pn=`return function (${pn}) {
`,Ln&&(pn+=`var destructors = [];
`);var Is=Ln?"destructors":"null",Kd="humanName throwBindingError invoker fn runDestructors fromRetWire toClassParamWire".split(" ");for(Wt&&(pn+=`var thisWired = toClassParamWire(${Is}, this);
`),pt=0;pt<je;++pt){var Al=`toArg${pt}Wire`;pn+=`var arg${pt}Wired = ${Al}(${Is}, arg${pt});
`,Kd.push(Al)}if(pn+=(Se||Zt?"var rv = ":"")+`invoker(${Jn});
`,Ln)pn+=`runDestructors(destructors);
`;else for(pt=Wt?1:2;pt<oe.length;++pt)Zt=pt===1?"thisWired":"arg"+(pt-2)+"Wired",oe[pt].V!==null&&(pn+=`${Zt}_dtor(${Zt});
`,Kd.push(`${Zt}_dtor`));return Se&&(pn+=`var ret = fromRetWire(rv);
return ret;
`),oe=new Function(Kd,pn+`}
`)(...Ze),At(ce,oe)}for(var Ca=ce=>{ce=ce.trim();let oe=ce.indexOf("(");return oe===-1?ce:ce.slice(0,oe)},Ss=[],Wr=[0,1,,1,null,1,!0,1,!1,1],Ta=ce=>{9<ce&&--Wr[ce+1]===0&&(Wr[ce]=void 0,Ss.push(ce))},zd=ce=>{if(!ce)throw new Ye(`Cannot use deleted val. handle = ${ce}`);return Wr[ce]},Hd=ce=>{switch(ce){case void 0:return 2;case null:return 4;case!0:return 6;case!1:return 8;default:let oe=Ss.pop()||Wr.length;return Wr[oe]=ce,Wr[oe+1]=1,oe}},Jd={name:"emscripten::val",N:ce=>{var oe=zd(ce);return Ta(ce),oe},T:(ce,oe)=>Hd(oe),X:Ce,V:null},ph=(ce,oe,Se)=>{switch(oe){case 1:return Se?function(Ze){return this.N(I[Ze])}:function(Ze){return this.N(R[Ze])};case 2:return Se?function(Ze){return this.N(V[Ze>>1])}:function(Ze){return this.N(W[Ze>>1])};case 4:return Se?function(Ze){return this.N(B[Ze>>2])}:function(Ze){return this.N(N[Ze>>2])};default:throw new TypeError(`invalid integer width (${oe}): ${ce}`)}},Ja=(ce,oe)=>{var Se=Fe[ce];if(Se===void 0)throw ce=`${oe} has unknown type ${Ho(ce)}`,new Ye(ce);return Se},Nb=(ce,oe)=>{switch(oe){case 4:return function(Se){return this.N(P[Se>>2])};case 8:return function(Se){return this.N(g[Se>>3])};default:throw new TypeError(`invalid float width (${oe}): ${ce}`)}},zf=Object.assign({optional:!0},Jd),Cr=(ce,oe,Se)=>{var Ze=R;if(!(0<Se))return 0;var je=oe;Se=oe+Se-1;for(var Zt=0;Zt<ce.length;++Zt){var pt=ce.codePointAt(Zt);if(127>=pt){if(oe>=Se)break;Ze[oe++]=pt}else if(2047>=pt){if(oe+1>=Se)break;Ze[oe++]=192|pt>>6,Ze[oe++]=128|pt&63}else if(65535>=pt){if(oe+2>=Se)break;Ze[oe++]=224|pt>>12,Ze[oe++]=128|pt>>6&63,Ze[oe++]=128|pt&63}else{if(oe+3>=Se)break;Ze[oe++]=240|pt>>18,Ze[oe++]=128|pt>>12&63,Ze[oe++]=128|pt>>6&63,Ze[oe++]=128|pt&63,Zt++}}return Ze[oe]=0,oe-je},ra=ce=>{for(var oe=0,Se=0;Se<ce.length;++Se){var Ze=ce.charCodeAt(Se);127>=Ze?oe++:2047>=Ze?oe+=2:55296<=Ze&&57343>=Ze?(oe+=4,++Se):oe+=3}return oe},sa=new TextDecoder,sn=(ce,oe,Se,Ze)=>{if(Se=oe+Se,Ze)return Se;for(;ce[oe]&&!(oe>=Se);)++oe;return oe},Ve=new TextDecoder("utf-16le"),ut=(ce,oe,Se)=>(ce>>=1,Ve.decode(W.subarray(ce,sn(W,ce,oe/2,Se)))),cn=(ce,oe,Se)=>{if(Se??(Se=2147483647),2>Se)return 0;Se-=2;var Ze=oe;Se=Se<2*ce.length?Se/2:ce.length;for(var je=0;je<Se;++je)V[oe>>1]=ce.charCodeAt(je),oe+=2;return V[oe>>1]=0,oe-Ze},po=ce=>2*ce.length,vs=(ce,oe,Se)=>{var Ze="";ce>>=2;for(var je=0;!(je>=oe/4);je++){var Zt=N[ce+je];if(!Zt&&!Se)break;Ze+=String.fromCodePoint(Zt)}return Ze},mo=(ce,oe,Se)=>{if(Se??(Se=2147483647),4>Se)return 0;var Ze=oe;Se=Ze+Se-4;for(var je=0;je<ce.length;++je){var Zt=ce.codePointAt(je);if(65535<Zt&&je++,B[oe>>2]=Zt,oe+=4,oe+4>Se)break}return B[oe>>2]=0,oe-Ze},_s=ce=>{for(var oe=0,Se=0;Se<ce.length;++Se)65535<ce.codePointAt(Se)&&Se++,oe+=4;return oe},pl=[],Pb=ce=>{var oe=pl.length;return pl.push(ce),oe},yR=(ce,oe)=>{for(var Se=Array(ce),Ze=0;Ze<ce;++Ze)Se[Ze]=Ja(N[oe+4*Ze>>2],`parameter ${Ze}`);return Se},Ea=(ce,oe,Se)=>{var Ze=[];return ce=ce(Ze,Se),Ze.length&&(N[oe>>2]=Hd(Ze)),ce},MU={},vU=ce=>{var oe=MU[ce];return oe===void 0?st(ce):oe},Qz={},fie=()=>{if(!Oz){var ce={USER:"web_user",LOGNAME:"web_user",PATH:"/",PWD:"/",HOME:"/home/web_user",LANG:(typeof navigator=="object"&&navigator.language||"C").replace("-","_")+".UTF-8",_:c||"./this.program"},oe;for(oe in Qz)Qz[oe]===void 0?delete ce[oe]:ce[oe]=Qz[oe];var Se=[];for(oe in ce)Se.push(`${oe}=${ce[oe]}`);Oz=Se}return Oz},Oz,pGe=[null,[],[]],pA=new Uint8Array(123),Xb=25;0<=Xb;--Xb)pA[48+Xb]=52+Xb,pA[65+Xb]=Xb,pA[97+Xb]=26+Xb;pA[43]=62,pA[47]=63,(()=>{let ce=jt.prototype;Object.assign(ce,{isAliasOf:function(Se){if(!(this instanceof jt&&Se instanceof jt))return!1;var Ze=this.L.P.M,je=this.L.O;Se.L=Se.L;var Zt=Se.L.P.M;for(Se=Se.L.O;Ze.U;)je=Ze.ea(je),Ze=Ze.U;for(;Zt.U;)Se=Zt.ea(Se),Zt=Zt.U;return Ze===Zt&&je===Se},clone:function(){if(this.L.O||ht(this),this.L.da)return this.L.count.value+=1,this;var Se=Re,Ze=Object,je=Ze.create,Zt=Object.getPrototypeOf(this),pt=this.L;return Se=Se(je.call(Ze,Zt,{L:{value:{count:pt.count,ba:pt.ba,da:pt.da,O:pt.O,P:pt.P,S:pt.S,W:pt.W}}})),Se.L.count.value+=1,Se.L.ba=!1,Se},delete(){if(this.L.O||ht(this),this.L.ba&&!this.L.da)throw new Ye("Object already scheduled for deletion");_e(this);var Se=this.L;--Se.count.value,Se.count.value===0&&(Se.S?Se.W.Y(Se.S):Se.P.M.Y(Se.O)),this.L.da||(this.L.S=void 0,this.L.O=void 0)},isDeleted:function(){return!this.L.O},deleteLater:function(){if(this.L.O||ht(this),this.L.ba&&!this.L.da)throw new Ye("Object already scheduled for deletion");return this.L.ba=!0,this}});let oe=Symbol.dispose;oe&&(ce[oe]=ce.delete)})(),Object.assign(nr.prototype,{sa(ce){return this.na&&(ce=this.na(ce)),ce},ka(ce){var oe;(oe=this.Y)==null||oe.call(this,ce)},X:Ce,N:function(ce){function oe(){return this.ga?bo(this.M.$,{P:this.xa,O:Se,W:this,S:ce}):bo(this.M.$,{P:this,O:ce})}var Se=this.sa(ce);if(!Se)return this.ka(ce),null;var Ze=wo(this.M,Se);if(Ze!==void 0)return Ze.L.count.value===0?(Ze.L.O=Se,Ze.L.S=ce,Ze.clone()):(Ze=Ze.clone(),this.ka(ce),Ze);if(Ze=this.M.ra(Se),Ze=kt[Ze],!Ze)return oe.call(this);Ze=this.fa?Ze.oa:Ze.pointerType;var je=jn(Se,this.M,Ze.M);return je===null?oe.call(this):this.ga?bo(Ze.M.$,{P:Ze,O:je,W:this,S:ce}):bo(Ze.M.$,{P:Ze,O:je})}}),i.print&&(p=i.print),i.printErr&&(A=i.printErr),i.wasmBinary&&(f=i.wasmBinary),i.thisProgram&&(c=i.thisProgram);var pie,zz,Yb,AGe={x:()=>v(""),q:ce=>{var oe=ye[ce];delete ye[ce];var Se=oe.ia,Ze=oe.Y,je=oe.la,Zt=je.map(pt=>pt.va).concat(je.map(pt=>pt.Ba));Xe([ce],Zt,pt=>{var Wt={};return je.forEach((Ln,Jn)=>{var pn=pt[Jn],Is=Ln.ta,Kd=Ln.ua,Al=pt[Jn+je.length],gl=Ln.Aa,tm=Ln.Ca;Wt[Ln.qa]={read:AA=>pn.N(Is(Kd,AA)),write:(AA,xR)=>{var jd=[];gl(tm,AA,Al.T(jd,xR)),ae(jd)},optional:pt[Jn].optional}}),[{name:oe.name,N:Ln=>{var Jn={},pn;for(pn in Wt)Jn[pn]=Wt[pn].read(Ln);return Ze(Ln),Jn},T:(Ln,Jn)=>{for(var pn in Wt)if(!(pn in Jn||Wt[pn].optional))throw new TypeError(`Missing field: "${pn}"`);var Is=Se();for(pn in Wt)Wt[pn].write(Is,Jn[pn]);return Ln!==null&&Ln.push(Ze,Is),Is},X:Ce,V:Ze}]})},n:(ce,oe,Se,Ze,je)=>{oe=st(oe),Ze=Ze===0n;let Zt=pt=>pt;if(Ze){let pt=8*Se;Zt=Wt=>BigInt.asUintN(pt,Wt),je=Zt(je)}Je(ce,{name:oe,N:Zt,T:(pt,Wt)=>(typeof Wt=="number"&&(Wt=BigInt(Wt)),Wt),X:lt(oe,Se,!Ze),V:null})},B:(ce,oe,Se,Ze)=>{oe=st(oe),Je(ce,{name:oe,N:function(je){return!!je},T:function(je,Zt){return Zt?Se:Ze},X:function(je){return this.N(R[je])},V:null})},j:(ce,oe,Se,Ze,je,Zt,pt,Wt,Ln,Jn,pn,Is,Kd)=>{pn=st(pn),Zt=Ri(je,Zt),Wt&&(Wt=Ri(pt,Wt)),Jn&&(Jn=Ri(Ln,Jn)),Kd=Ri(Is,Kd);var Al=uo(pn);$e(Al,function(){Jo(`Cannot construct ${pn} due to unbound types`,[Ze])}),Xe([ce,oe,Se],Ze?[Ze]:[],gl=>{if(gl=gl[0],Ze)var tm=gl.M,AA=tm.$;else AA=jt.prototype;gl=At(pn,function(...Jz){if(Object.getPrototypeOf(this)!==xR)throw new Ye(`Use 'new' to construct ${pn}`);if(jd.Z===void 0)throw new Ye(`${pn} has no accessible constructor`);var Aie=jd.Z[Jz.length];if(Aie===void 0)throw new Ye(`Tried to invoke ctor of ${pn} with invalid number of parameters (${Jz.length}) - expected (${Object.keys(jd.Z).toString()}) parameters instead!`);return Aie.apply(this,Jz)});var xR=Object.create(AA,{constructor:{value:gl}});gl.prototype=xR;var jd=new Qt(pn,gl,xR,Kd,tm,Zt,Wt,Jn);if(jd.U){var CR;(CR=jd.U).ja??(CR.ja=[]),jd.U.ja.push(jd)}return tm=new nr(pn,jd,!0,!1,!1),CR=new nr(pn+"*",jd,!1,!1,!1),AA=new nr(pn+" const*",jd,!1,!0,!1),kt[ce]={pointerType:CR,oa:AA},zo(Al,gl),[tm,CR,AA]})},g:(ce,oe,Se,Ze,je,Zt)=>{var pt=oa(oe,Se);je=Ri(Ze,je),Xe([],[ce],Wt=>{Wt=Wt[0];var Ln=`constructor ${Wt.name}`;if(Wt.M.Z===void 0&&(Wt.M.Z=[]),Wt.M.Z[oe-1]!==void 0)throw new Ye(`Cannot register multiple constructors with identical number of parameters (${oe-1}) for class '${Wt.name}'! Overload resolution is currently only performed using the parameter count, not actual type info!`);return Wt.M.Z[oe-1]=()=>{Jo(`Cannot construct ${Wt.name} due to unbound types`,pt)},Xe([],pt,Jn=>(Jn.splice(1,0,null),Wt.M.Z[oe-1]=Ro(Ln,Jn,null,je,Zt),[])),[]})},b:(ce,oe,Se,Ze,je,Zt,pt,Wt,Ln)=>{var Jn=oa(Se,Ze);oe=st(oe),oe=Ca(oe),Zt=Ri(je,Zt),Xe([],[ce],pn=>{function Is(){Jo(`Cannot call ${Kd} due to unbound types`,Jn)}pn=pn[0];var Kd=`${pn.name}.${oe}`;oe.startsWith("@@")&&(oe=Symbol[oe.substring(2)]),Wt&&pn.M.ya.push(oe);var Al=pn.M.$,gl=Al[oe];return gl===void 0||gl.R===void 0&&gl.className!==pn.name&&gl.aa===Se-2?(Is.aa=Se-2,Is.className=pn.name,Al[oe]=Is):(On(Al,oe,Kd),Al[oe].R[Se-2]=Is),Xe([],Jn,tm=>(tm=Ro(Kd,tm,pn,Zt,pt,Ln),Al[oe].R===void 0?(tm.aa=Se-2,Al[oe]=tm):Al[oe].R[Se-2]=tm,[])),[]})},z:ce=>Je(ce,Jd),r:(ce,oe,Se,Ze)=>{function je(){}oe=st(oe),je.values={},Je(ce,{name:oe,constructor:je,N:function(Zt){return this.constructor.values[Zt]},T:(Zt,pt)=>pt.value,X:ph(oe,Se,Ze),V:null}),$e(oe,je)},d:(ce,oe,Se)=>{var Ze=Ja(ce,"enum");oe=st(oe),ce=Ze.constructor,Ze=Object.create(Ze.constructor.prototype,{value:{value:Se},constructor:{value:At(`${Ze.name}_${oe}`,function(){})}}),ce.values[Se]=Ze,ce[oe]=Ze},m:(ce,oe,Se)=>{oe=st(oe),Je(ce,{name:oe,N:Ze=>Ze,T:(Ze,je)=>je,X:Nb(oe,Se),V:null})},l:(ce,oe,Se,Ze,je,Zt,pt)=>{var Wt=oa(oe,Se);ce=st(ce),ce=Ca(ce),je=Ri(Ze,je),$e(ce,function(){Jo(`Cannot call ${ce} due to unbound types`,Wt)},oe-1),Xe([],Wt,Ln=>(Ln=[Ln[0],null].concat(Ln.slice(1)),zo(ce,Ro(ce,Ln,null,je,Zt,pt),oe-1),[]))},c:(ce,oe,Se,Ze,je)=>{oe=st(oe);let Zt=Wt=>Wt;if(Ze===0){var pt=32-8*Se;Zt=Wt=>Wt<<pt>>>pt,je=Zt(je)}Je(ce,{name:oe,N:Zt,T:(Wt,Ln)=>Ln,X:lt(oe,Se,Ze!==0),V:null})},a:(ce,oe,Se)=>{function Ze(Zt){return new je(I.buffer,N[Zt+4>>2],N[Zt>>2])}var je=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array,BigInt64Array,BigUint64Array][oe];Se=st(Se),Je(ce,{name:Se,N:Ze,X:Ze},{wa:!0})},h:ce=>{Je(ce,zf)},A:(ce,oe)=>{oe=st(oe),Je(ce,{name:oe,N(Se){var Ze=(Ze=Se+4)?sa.decode(R.subarray(Ze,sn(R,Ze,N[Se>>2],!0))):"";return Yb(Se),Ze},T(Se,Ze){Ze instanceof ArrayBuffer&&(Ze=new Uint8Array(Ze));var je=typeof Ze=="string";if(!(je||ArrayBuffer.isView(Ze)&&Ze.BYTES_PER_ELEMENT==1))throw new Ye("Cannot pass non-string to std::string");var Zt=je?ra(Ze):Ze.length,pt=zz(4+Zt+1),Wt=pt+4;return N[pt>>2]=Zt,je?Cr(Ze,Wt,Zt+1):R.set(Ze,Wt),Se!==null&&Se.push(Yb,pt),pt},X:Ce,V(Se){Yb(Se)}})},f:(ce,oe,Se)=>{if(Se=st(Se),oe===2)var Ze=ut,je=cn,Zt=po;else Ze=vs,je=mo,Zt=_s;Je(ce,{name:Se,N:pt=>{var Wt=Ze(pt+4,N[pt>>2]*oe,!0);return Yb(pt),Wt},T:(pt,Wt)=>{if(typeof Wt!="string")throw new Ye(`Cannot pass non-string to C++ string type ${Se}`);var Ln=Zt(Wt),Jn=zz(4+Ln+oe);return N[Jn>>2]=Ln/oe,je(Wt,Jn+4,Ln+oe),pt!==null&&pt.push(Yb,Jn),Jn},X:Ce,V(pt){Yb(pt)}})},i:(ce,oe,Se,Ze,je,Zt)=>{ye[ce]={name:st(oe),ia:Ri(Se,Ze),Y:Ri(je,Zt),la:[]}},e:(ce,oe,Se,Ze,je,Zt,pt,Wt,Ln,Jn)=>{ye[ce].la.push({qa:st(oe),va:Se,ta:Ri(Ze,je),ua:Zt,Ba:pt,Aa:Ri(Wt,Ln),Ca:Jn})},C:(ce,oe)=>{oe=st(oe),Je(ce,{ma:!0,name:oe,N:()=>{},T:()=>{}})},p:(ce,oe,Se)=>{var[Ze,...je]=yR(ce,oe);oe=Ze.T.bind(Ze);var Zt=je.map(Ln=>Ln.X.bind(Ln));ce--;var pt={toValue:zd};switch(ce=Zt.map((Ln,Jn)=>{var pn=`argFromPtr${Jn}`;return pt[pn]=Ln,`${pn}(args${Jn?"+"+8*Jn:""})`}),Se){case 0:var Wt="toValue(handle)";break;case 2:Wt="new (toValue(handle))";break;case 3:Wt="";break;case 1:pt.getStringOrSymbol=vU,Wt="toValue(handle)[getStringOrSymbol(methodName)]"}return Wt+=`(${ce})`,Ze.ma||(pt.toReturnWire=oe,pt.emval_returnValue=Ea,Wt=`return emval_returnValue(toReturnWire, destructorsRef, ${Wt})`),Wt=`return function (handle, methodName, destructorsRef, args) {
${Wt}
}`,Se=new Function(Object.keys(pt),Wt)(...Object.values(pt)),Wt=`methodCaller<(${je.map(Ln=>Ln.name)}) => ${Ze.name}>`,Pb(At(Wt,Se))},E:Ta,o:(ce,oe,Se,Ze,je)=>pl[ce](oe,Se,Ze,je),D:ce=>{var oe=zd(ce);ae(oe),Ta(ce)},s:(ce,oe,Se,Ze)=>{var je=new Date().getFullYear(),Zt=new Date(je,0,1).getTimezoneOffset();je=new Date(je,6,1).getTimezoneOffset(),N[ce>>2]=60*Math.max(Zt,je),B[oe>>2]=+(Zt!=je),oe=pt=>{var Wt=Math.abs(pt);return`UTC${0<=pt?"-":"+"}${String(Math.floor(Wt/60)).padStart(2,"0")}${String(Wt%60).padStart(2,"0")}`},ce=oe(Zt),oe=oe(je),je<Zt?(Cr(ce,Se,17),Cr(oe,Ze,17)):(Cr(ce,Ze,17),Cr(oe,Se,17))},y:ce=>{var oe=R.length;if(ce>>>=0,2147483648<ce)return!1;for(var Se=1;4>=Se;Se*=2){var Ze=oe*(1+.2/Se);Ze=Math.min(Ze,ce+100663296);e:{Ze=(Math.min(2147483648,65536*Math.ceil(Math.max(ce,Ze)/65536))-S.buffer.byteLength+65535)/65536|0;try{S.grow(Ze),w();var je=1;break e}catch{}je=void 0}if(je)return!0}return!1},t:(ce,oe)=>{var Se=0,Ze=0,je;for(je of fie()){var Zt=oe+Se;N[ce+Ze>>2]=Zt,Se+=Cr(je,Zt,1/0)+1,Ze+=4}return 0},u:(ce,oe)=>{var Se=fie();N[ce>>2]=Se.length,ce=0;for(var Ze of Se)ce+=ra(Ze)+1;return N[oe>>2]=ce,0},v:()=>52,w:function(){return 70},k:(ce,oe,Se,Ze)=>{for(var je=0,Zt=0;Zt<Se;Zt++){var pt=N[oe>>2],Wt=N[oe+4>>2];oe+=8;for(var Ln=0;Ln<Wt;Ln++){var Jn=ce,pn=R[pt+Ln],Is=pGe[Jn];pn===0||pn===10?(Jn=Jn===1?p:A,pn=sn(Is,0),pn=sa.decode(Is.buffer?Is.subarray(0,pn):new Uint8Array(Is.slice(0,pn))),Jn(pn),Is.length=0):Is.push(pn)}je+=Wt}return N[Ze>>2]=je,0}},KE=await(async function(){var ce;function oe(Ze){var je;return KE=Ze.exports,S=KE.F,w(),Sn=KE.H,Ze=KE,pie=Ze.I,i._malloc=zz=Ze.J,i._free=Yb=Ze.K,X--,(je=i.monitorRunDependencies)==null||je.call(i,X),X==0&&k&&(Ze=k,k=null,Ze()),KE}X++,(ce=i.monitorRunDependencies)==null||ce.call(i,X);var Se={a:AGe};return i.instantiateWasm?new Promise(Ze=>{i.instantiateWasm(Se,(je,Zt)=>{Ze(oe(je))})}):(D??(D=ge("AGFzbQEAAAAB2QM5YAF/AX9gAn9/AGABfwBgA39/fwF/YAJ/fwF/YAN/f38AYAZ/f39/f38Bf2AFf39/f38Bf2AEf39/fwBgBH9/f38Bf2AGf39/f39/AGAFf39/f38AYAAAYAh/f39/f39/fwF/YAd/f39/f39/AX9gAAF/YAV/fn5+fgBgCn9/f39/f39/f38AYAd/f39/f39/AGAFf39/f34Bf2AIf39/f39/f38AYAR/fn5/AGADf35/AX5gBX9/fn9/AGACf34AYAp/f39/f39/f39/AX9gDH9/f39/f39/f39/fwF/YAN/f38BfmAGf39/f35/AX9gD39/f39/f39/f39/f39/fwBgC39/f39/f39/f39/AX9gBH9/f38BfmAGf3x/f39/AX9gB39/f39/fn4Bf2AGf39/f35+AX9gBX9/f398AX9gDX9/f39/f39/f39/f38AYAV/f39+fgBgBX9/f39/AXxgBH9+f38Bf2ACf3wAYAR+fn5+AX9gAn5/AX9gBH9/f34BfmACfn4BfGABfwF8YAN/f38BfGADf39/AX1gA39/fgBgAn5+AX1gAn9/AX5gBH9+fn4AYAN+fn4Bf2ACfH8BfGAEf39/fQF/YAR/f399AGADf399AAK7AR8BYQFhAAUBYQFiABEBYQFjAAsBYQFkAAUBYQFlABEBYQFmAAUBYQFnAAoBYQFoAAEBYQFpAAoBYQFqACQBYQFrAAkBYQFsABQBYQFtAAUBYQFuACUBYQFvACYBYQFwAAMBYQFxAAIBYQFyAAgBYQFzAAgBYQF0AAQBYQF1AAQBYQF2AAABYQF3ACcBYQF4AAwBYQF5AAABYQF6AAIBYQFBAAEBYQFCAAgBYQFDAAEBYQFEAAIBYQFFAAIDjQWLBQAAAQQAAAIAAQABAQQEAg8QAgAEBQACAwAAAAIDAQwAABAEBQgVCwAAAAAQBAAFAAEBAwQAAAQBAQEAAAwBAQADAwACBBgFBQcHAwAAKA0NCAEDAQABAAQAAAgEAQEAAAwGBAQBAQYDKQUAFQMMAAQBAAEBBQQEBwMZABkAAQABAAQBBAABACoBAAEHAQAFBAUBAAgDBAIECwEUAgIBAAACCQABBAAACQEJAwcIBA4EDgQJCQQAAQABAAACAQQAAgADAgAGAQoFCAQFAQwAAAMBBAAABAsEAgACAxoLAAMaCwgCGwArAQAJEAAEAgIDAgAABBgBACwEAQUtAQIMAAgCBBwGHAYACQkBBAwIAwECFAUFBQAEBAIABQACBQ8FAwUFAAIAAAcNDQcNDQUABw0EAAQCAgIBAAIBAQIAAwMdEQMBHREAAAADCwEeAQAABQEeAQEBCgsKCgsKCg8AAxICEgcJBxIJBwkHCRIDBgMILgwvHwkGCR8JAQUbCQAABwQCAAQEAzAxMggQEBUzNAEAAAAAAAMEAAEFAQUBAAACAQgCBAAAAgICBAAMAgQDCAAOBzUAAQMAAAkDCAU2Azc4CgoKCwsLAwgICAMCDwIAAgACAAIAAgUAAgACAAIAAgACBAACAAIAAgACAAUBAQEBAQEAAAIEAgAHAAcNDQIHBwMJAwQDBAIHAwkDBAMEAgkJCQMCAg8DCgoGIQUGIQUODgEADg4DDg4NBQYGBgYGBQ0GBgYGBgciIxMHEwcHAAciBCMTBxMJBwcGBgYGBgYGBgYGBgYGBgAGBgYIAQYDCAcDCAcDAwICAAIACAIXBAQAAAACAgAAAgACAAMAAAMIFwMCABYBIBYDDAQHAXABgAOAAwUHAQGCAoCAAgYIAX8BQfD+BQsHGwYBRgIAAUcAqQUBSAEAAUkA1gMBSgA0AUsALQm/BQEAQQEL/wKQA/sE9wTmBOEE3gT/AvsC/ATPBGvJBMUEwgT/AvsCwQS+BNcDuwS2BLUErgTPAssClQSLBIEE9gPsAzDPAssCpQLfA94DoALdA9wDpQLbA9oDoALZA9gDnALVA9QDRqgFpwWmBaUFlAKiBZMCoQWgBZ8FRkaeBZ0FnAXIA5sFyAOQAsYDmgWZBY8CwQOYBZcF2AGOApYFlAWVBZMF/AGMBY0FiwWQBY8FjgWxAYwCigWJBYgFhwWJAoYFhQWEBS3hAdICiQSHBIUEgwSABP4D/AP6A/gD9QPzA/ED7wPtA9YCtASzBNACpgSlBKQEowSiBNECoQSgBJ8E2wKdBJwEmwSaBJkERpgElwTEApYEkwSSBJEEjwSNBMMClASSBZEFkASOBIwEiQEwMLIEsQSwBK8ErQSsBKsEqgTRAqkEqASnBDDOAs4CqgHiAeIBngTiATDKAskCqgFGRsgCvgEwygLJAqoBRkbIAr4BMMcCxgKqAUZGxQK+ATDHAsYCqgFGRsUCvgGJATCDBYIFgQWJATCABf8E/gQw/QT6BPkE+ASUA5QD9gT1BPQE8wTyBDDxBPAE7wTuBIwDjAPtBOwE6wTqBOkEMOgE5wTlBOQE4wTiBOAE3wQw3QTcBNsE2gTZBNgE1wTWBIkBMPwC1QTUBNME0gTRBNAEigSGBIIE9APwA/0D+QOJATD8As4EzQTMBMsEygTIBIgEhAT/A/ID7gP7A/cD7QHCAscE7QHCAsYEMMUBxQFXV1fyAkZ0dDDFAcUBV1dX8gJGdHQwxAHEAVdXV/ECRnR0MMQBxAFXV1fxAkZ0dDDEBMMEMMAEvwQwvQS8BDC6BLkEMNwCuASTAjDcArcEkwKJAesD6wGjBaQFiQEw4QHhAawCMKwCMOoD4APjA+kDMOED5APoAzDiA+UD5wMw5gMMASoKwLAIiwUTACAAEEcEQCAAKAIEDwsgABBeCxoBAX8gABBHBEAgACgCACAAEH4aEIsCCyAAC4sBAQN/IAAQHyICIAFJBEAjAEEQayIEJAAgASACayICBEAgAiAAECgiAyAAEB8iAWtLBEAgACADIAIgA2sgAWogASABEPQBCyABIAAQIyIDaiACQQAQsgIgACABIAJqIgAQgwEgBEEAOgAPIAAgA2ogBEEPahBdCyAEQRBqJAAPCyAAIAAQIyABEMACCwkAIAAQIyABagsRACAAEEcEQCAAKAIADwsgAAsSACAAQgA3AgAgAEEANgIIIAALFgAgACgCACIAQaDxAUcEQCAAEL8BCwuLAgIDfwJ+AkAgACkDcCIEUEUgBCAAKQN4IAAoAgQiASAAKAIsIgJrrHwiBVdxRQRAIwBBEGsiAiQAQX8hAQJAIAAQyQMNACAAIAJBD2pBASAAKAIgEQMAQQFHDQAgAi0ADyEBCyACQRBqJAAgASIDQQBODQEgACgCBCEBIAAoAiwhAgsgAEJ/NwNwIAAgATYCaCAAIAUgAiABa6x8NwN4QX8PCyAFQgF8IQUgACgCBCEBIAAoAgghAgJAIAApA3AiBFANACAEIAV9IgQgAiABa6xZDQAgASAEp2ohAgsgACACNgJoIAAgBSAAKAIsIgAgAWusfDcDeCAAIAFPBEAgAUEBayADOgAACyADCwwAIAAgAUEcahDVAgsZAQF/QQohASAAEEcEfyAAEH5BAWsFQQoLC3kBA38CQCABELcCIQIgABDxASEDIAAQHyEEIAIgA00EQCAAECMiAyABIAIQZSMAQRBrIgEkACAAEB8aIAAgAhCDASABQQA2AgwgAyACQQJ0aiABQQxqEFYgAUEQaiQADAELIAAgAyACIANrIARBACAEIAIgARCvAgsLDgAgACABIAEQqAEQsQILEAAgABCyAyABELIDc0EBcwsQACAAELMDIAEQswNzQQFzC4EMAQh/AkAgAEUNACAAQQhrIgMgAEEEaygCACICQXhxIgBqIQUCQCACQQFxDQAgAkECcUUNASADIAMoAgAiBGsiA0Gc6gEoAgBJDQEgACAEaiEAAkACQAJAQaDqASgCACADRwRAIAMoAgwhASAEQf8BTQRAIAEgAygCCCICRw0CQYzqAUGM6gEoAgBBfiAEQQN2d3E2AgAMBQsgAygCGCEHIAEgA0cEQCADKAIIIgIgATYCDCABIAI2AggMBAsgAygCFCICBH8gA0EUagUgAygCECICRQ0DIANBEGoLIQQDQCAEIQYgAiIBQRRqIQQgASgCFCICDQAgAUEQaiEEIAEoAhAiAg0ACyAGQQA2AgAMAwsgBSgCBCICQQNxQQNHDQNBlOoBIAA2AgAgBSACQX5xNgIEIAMgAEEBcjYCBCAFIAA2AgAPCyACIAE2AgwgASACNgIIDAILQQAhAQsgB0UNAAJAIAMoAhwiBEECdCICKAK87AEgA0YEQCACQbzsAWogATYCACABDQFBkOoBQZDqASgCAEF+IAR3cTYCAAwCCwJAIAMgBygCEEYEQCAHIAE2AhAMAQsgByABNgIUCyABRQ0BCyABIAc2AhggAygCECICBEAgASACNgIQIAIgATYCGAsgAygCFCICRQ0AIAEgAjYCFCACIAE2AhgLIAMgBU8NACAFKAIEIgRBAXFFDQACQAJAAkACQCAEQQJxRQRAQaTqASgCACAFRgRAQaTqASADNgIAQZjqAUGY6gEoAgAgAGoiADYCACADIABBAXI2AgQgA0Gg6gEoAgBHDQZBlOoBQQA2AgBBoOoBQQA2AgAPC0Gg6gEoAgAiByAFRgRAQaDqASADNgIAQZTqAUGU6gEoAgAgAGoiADYCACADIABBAXI2AgQgACADaiAANgIADwsgBEF4cSAAaiEAIAUoAgwhASAEQf8BTQRAIAUoAggiAiABRgRAQYzqAUGM6gEoAgBBfiAEQQN2d3E2AgAMBQsgAiABNgIMIAEgAjYCCAwECyAFKAIYIQggASAFRwRAIAUoAggiAiABNgIMIAEgAjYCCAwDCyAFKAIUIgIEfyAFQRRqBSAFKAIQIgJFDQIgBUEQagshBANAIAQhBiACIgFBFGohBCABKAIUIgINACABQRBqIQQgASgCECICDQALIAZBADYCAAwCCyAFIARBfnE2AgQgAyAAQQFyNgIEIAAgA2ogADYCAAwDC0EAIQELIAhFDQACQCAFKAIcIgRBAnQiAigCvOwBIAVGBEAgAkG87AFqIAE2AgAgAQ0BQZDqAUGQ6gEoAgBBfiAEd3E2AgAMAgsCQCAFIAgoAhBGBEAgCCABNgIQDAELIAggATYCFAsgAUUNAQsgASAINgIYIAUoAhAiAgRAIAEgAjYCECACIAE2AhgLIAUoAhQiAkUNACABIAI2AhQgAiABNgIYCyADIABBAXI2AgQgACADaiAANgIAIAMgB0cNAEGU6gEgADYCAA8LIABB/wFNBEAgAEF4cUG06gFqIQICf0GM6gEoAgAiBEEBIABBA3Z0IgBxRQRAQYzqASAAIARyNgIAIAIMAQsgAigCCAshACACIAM2AgggACADNgIMIAMgAjYCDCADIAA2AggPC0EfIQEgAEH///8HTQRAIABBJiAAQQh2ZyICa3ZBAXEgAkEBdGtBPmohAQsgAyABNgIcIANCADcCECABQQJ0QbzsAWohBAJ/AkACf0GQ6gEoAgAiBkEBIAF0IgJxRQRAQZDqASACIAZyNgIAIAQgAzYCAEEYIQFBCAwBCyAAQRkgAUEBdmtBACABQR9HG3QhASAEKAIAIQQDQCAEIgIoAgRBeHEgAEYNAiABQR12IQQgAUEBdCEBIAIgBEEEcWoiBigCECIEDQALIAYgAzYCEEEYIQEgAiEEQQgLIQAgAyICDAELIAIoAggiBCADNgIMIAIgAzYCCEEYIQBBCCEBQQALIQYgASADaiAENgIAIAMgAjYCDCAAIANqIAY2AgBBrOoBQazqASgCAEEBayIAQX8gABs2AgALC+kCAQZ/QZzxAS0AAARAQZjxASgCAA8LIwBBIGsiAiQAAkACQANAIAJBCGoiBCAAQQJ0IgNqAn9BASAAdEH/////B3EiBUEBckUEQCADKAIADAELIABBjBZBxh8gBRsQogMLIgM2AgAgA0F/Rg0BIABBAWoiAEEGRw0AC0EAEKEDRQRAQZiDASEBIARBmIMBQRgQiwFFDQJBsIMBIQEgBEGwgwFBGBCLAUUNAkEAIQBBvO4BLQAARQRAA0AgAEECdCAAQcYfEKIDNgKM7gEgAEEBaiIAQQZHDQALQbzuAUEBOgAAQaTuAUGM7gEoAgA2AgALQYzuASEBIAJBCGoiAEGM7gFBGBCLAUUNAkGk7gEhASAAQaTuAUEYEIsBRQ0CQRgQNCIBRQ0BCyABIAIpAgg3AgAgASACKQIYNwIQIAEgAikCEDcCCAwBC0EAIQELIAJBIGokAEGc8QFBAToAAEGY8QEgATYCACABC80KAgV/CX4jAEHgAGsiBSQAIARC////////P4MhCiACIASFQoCAgICAgICAgH+DIQsgAkL///////8/gyIMQiCIIQ8gBEIwiKdB//8BcSEHAkACQCACQjCIp0H//wFxIglB//8Ba0GCgH5PBEAgB0H//wFrQYGAfksNAQsgAVAgAkL///////////8AgyINQoCAgICAgMD//wBUIA1CgICAgICAwP//AFEbRQRAIAJCgICAgICAIIQhCwwCCyADUCAEQv///////////wCDIgJCgICAgICAwP//AFQgAkKAgICAgIDA//8AURtFBEAgBEKAgICAgIAghCELIAMhAQwCCyABIA1CgICAgICAwP//AIWEUARAIAIgA4RQBEBCgICAgICA4P//ACELQgAhAQwDCyALQoCAgICAgMD//wCEIQtCACEBDAILIAMgAkKAgICAgIDA//8AhYRQBEAgASANhEIAIQFQBEBCgICAgICA4P//ACELDAMLIAtCgICAgICAwP//AIQhCwwCCyABIA2EUARAQgAhAQwCCyACIAOEUARAQgAhAQwCCyANQv///////z9YBEAgBUHQAGogASAMIAEgDCAMUCIGG3lCwABCACAGG3ynIgZBD2sQREEQIAZrIQYgBSkDWCIMQiCIIQ8gBSkDUCEBCyACQv///////z9WDQAgBUFAayADIAogAyAKIApQIggbeULAAEIAIAgbfKciCEEPaxBEIAYgCGtBEGohBiAFKQNIIQogBSkDQCEDCyAHIAlqIAZqQf//AGshBgJAIApCD4YiDkIgiEKAgICACIQiAiABQiCIIgR+IhAgA0IPhiIRQiCIIgogD0KAgASEIg1+fCIPIBBUrSAPIANCMYggDoRC/////w+DIgMgDEL/////D4MiDH58Ig4gD1StfCACIA1+fCAOIA4gEUKAgP7/D4MiDyAMfiIRIAQgCn58IhAgEVStIBAgECADIAFC/////w+DIgF+fCIQVq18fCIOVq18IAMgDX4iEiACIAx+fCIRIBJUrUIghiARQiCIhHwgDiAOIBFCIIZ8Ig5WrXwgDiANIA9+Ig0gCiAMfnwiDCABIAJ+fCICIAMgBH58IgNCIIggAiADVq0gDCANVK0gAiAMVK18fEIghoR8IgIgDlStfCACIBAgBCAPfiIMIAEgCn58IgRCIIggBCAMVK1CIIaEfCIKIBBUrSAKIANCIIZ8IgMgClStfHwiCiACVK18IAogAyAEQiCGIgIgASAPfnwiASACVK18IgIgA1StfCIEIApUrXwiA0KAgICAgIDAAINQRQRAIAZBAWohBgwBCyABQj+IIANCAYYgBEI/iIQhAyAEQgGGIAJCP4iEIQQgAUIBhiEBIAJCAYaEIQILIAZB//8BTgRAIAtCgICAgICAwP//AIQhC0IAIQEMAQsCfiAGQQBMBEBBASAGayIHQf8ATQRAIAVBMGogASACIAZB/wBqIgYQRCAFQSBqIAQgAyAGEEQgBUEQaiABIAIgBxCKASAFIAQgAyAHEIoBIAUpAzAgBSkDOIRCAFKtIAUpAyAgBSkDEISEIQEgBSkDKCAFKQMYhCECIAUpAwAhBCAFKQMIDAILQgAhAQwCCyADQv///////z+DIAatQjCGhAsgC4QhCyABUCACQgBZIAJCgICAgICAgICAf1EbRQRAIAsgBEIBfCIBUK18IQsMAQsgASACQoCAgICAgICAgH+FhFBFBEAgBCEBDAELIAsgBCAEQgGDfCIBIARUrXwhCwsgACABNwMAIAAgCzcDCCAFQeAAaiQACwYAIAAQLQt8AQN/IwBBEGsiASQAIAEgADYCDCMAQRBrIgIkACAAKAIAQX9HBEAgAkEIaiACQQxqIAFBDGoQVRBVIQMDQCAAKAIAQQFGDQALIAAoAgBFBEAgAEEBNgIAIAMQ0gIgAEF/NgIACwsgAkEQaiQAIAAoAgQgAUEQaiQAQQFrCyAAIAAgAUEBazYCBCAAQeDVATYCACAAQZCtATYCACAAC/cFAQl/IwBBEGsiCSQAIAEQ1wIgCUEMaiABEFUhCCAAQQhqIgMQayACTQRAAkAgAkEBaiIAIAMQayIBSwRAIwBBIGsiCiQAAkAgACABayIHIAMoAgggAygCBGtBAnVNBEAgAyAHENkCDAELIApBDGohAQJ/IAMQayAHaiEFIwBBEGsiACQAIAAgBTYCDCAFELwCIgRNBEAgAxC5AiIFIARBAXZJBEAgACAFQQF0NgIIIABBCGogAEEMahCgASgCACEECyAAQRBqJAAgBAwBCxCMAQALIQQgAxBrIQUjAEEQayIAJAAgASADQQxqIgs2AhAgAUEANgIMIAQEfyAAQQhqIAsgBBC7AiAAKAIIIQYgACgCDAVBAAshBCABIAY2AgAgASAGIAVBAnRqIgU2AgggASAGIARBAnRqNgIMIAEgBTYCBCAAQRBqJAAjAEEQayIGJAAgASgCCCEEIAZBBGoiACABQQhqNgIIIAAgBDYCACAAIAQgB0ECdGo2AgQgACgCACEEA0AgACgCBCAERwRAIAEoAhAaIAQQugIgACAAKAIAQQRqIgQ2AgAMAQsLIAAoAgggACgCADYCACAGQRBqJAAgASgCBCADKAIAIgAgAygCBGtqIQQgAygCBCAAayIHBEAgBCAAIAf8CgAACyABIAQ2AgQgAyADKAIANgIEIAMgAUEEahDXASADQQRqIAFBCGoQ1wEgA0EIaiABQQxqENcBIAEgASgCBDYCACADEGsaIAEoAgQhAANAIAEoAggiBCAARwRAIAEgBEEEazYCCCABKAIQGgwBCwsgASgCACIABEAgASgCECAAIAEoAgwgASgCAGtBAnUQuAILCyAKQSBqJAAMAQsgACABSQRAIAMoAgAgAEECdGohACADEGsaIAMgABDYAgsLCyADIAIQggEoAgAEQCADIAIQggEoAgAQvwELIAgQrAEhACADIAIQggEgADYCACAIKAIAIQAgCEEANgIAIAAEQCAAEL8BCyAJQRBqJAALySgBC38jAEEQayIKJAACQAJAAkACQAJAAkACQAJAAkACQCAAQfQBTQRAQYzqASgCACIEQRAgAEELakH4A3EgAEELSRsiBkEDdiIAdiIBQQNxBEACQCABQX9zQQFxIABqIgJBA3QiAUG06gFqIgAgASgCvOoBIgEoAggiBUYEQEGM6gEgBEF+IAJ3cTYCAAwBCyAFIAA2AgwgACAFNgIICyABQQhqIQAgASACQQN0IgJBA3I2AgQgASACaiIBIAEoAgRBAXI2AgQMCwsgBkGU6gEoAgAiCE0NASABBEACQEECIAB0IgJBACACa3IgASAAdHFoIgFBA3QiAEG06gFqIgIgACgCvOoBIgAoAggiBUYEQEGM6gEgBEF+IAF3cSIENgIADAELIAUgAjYCDCACIAU2AggLIAAgBkEDcjYCBCAAIAZqIgcgAUEDdCIBIAZrIgVBAXI2AgQgACABaiAFNgIAIAgEQCAIQXhxQbTqAWohAUGg6gEoAgAhAgJ/IARBASAIQQN2dCIDcUUEQEGM6gEgAyAEcjYCACABDAELIAEoAggLIQMgASACNgIIIAMgAjYCDCACIAE2AgwgAiADNgIICyAAQQhqIQBBoOoBIAc2AgBBlOoBIAU2AgAMCwtBkOoBKAIAIgtFDQEgC2hBAnQoArzsASICKAIEQXhxIAZrIQMgAiEBA0ACQCABKAIQIgBFBEAgASgCFCIARQ0BCyAAKAIEQXhxIAZrIgEgAyABIANJIgEbIQMgACACIAEbIQIgACEBDAELCyACKAIYIQkgAiACKAIMIgBHBEAgAigCCCIBIAA2AgwgACABNgIIDAoLIAIoAhQiAQR/IAJBFGoFIAIoAhAiAUUNAyACQRBqCyEFA0AgBSEHIAEiAEEUaiEFIAAoAhQiAQ0AIABBEGohBSAAKAIQIgENAAsgB0EANgIADAkLQX8hBiAAQb9/Sw0AIABBC2oiAUF4cSEGQZDqASgCACIHRQ0AQR8hCEEAIAZrIQMgAEH0//8HTQRAIAZBJiABQQh2ZyIAa3ZBAXEgAEEBdGtBPmohCAsCQAJAAkAgCEECdCgCvOwBIgFFBEBBACEADAELQQAhACAGQRkgCEEBdmtBACAIQR9HG3QhAgNAAkAgASgCBEF4cSAGayIEIANPDQAgASEFIAQiAw0AQQAhAyABIQAMAwsgACABKAIUIgQgBCABIAJBHXZBBHFqKAIQIgFGGyAAIAQbIQAgAkEBdCECIAENAAsLIAAgBXJFBEBBACEFQQIgCHQiAEEAIABrciAHcSIARQ0DIABoQQJ0KAK87AEhAAsgAEUNAQsDQCAAKAIEQXhxIAZrIgIgA0khASACIAMgARshAyAAIAUgARshBSAAKAIQIgEEfyABBSAAKAIUCyIADQALCyAFRQ0AIANBlOoBKAIAIAZrTw0AIAUoAhghCCAFIAUoAgwiAEcEQCAFKAIIIgEgADYCDCAAIAE2AggMCAsgBSgCFCIBBH8gBUEUagUgBSgCECIBRQ0DIAVBEGoLIQIDQCACIQQgASIAQRRqIQIgACgCFCIBDQAgAEEQaiECIAAoAhAiAQ0ACyAEQQA2AgAMBwsgBkGU6gEoAgAiBU0EQEGg6gEoAgAhAAJAIAUgBmsiAUEQTwRAIAAgBmoiAiABQQFyNgIEIAAgBWogATYCACAAIAZBA3I2AgQMAQsgACAFQQNyNgIEIAAgBWoiASABKAIEQQFyNgIEQQAhAkEAIQELQZTqASABNgIAQaDqASACNgIAIABBCGohAAwJCyAGQZjqASgCACICSQRAQZjqASACIAZrIgE2AgBBpOoBQaTqASgCACIAIAZqIgI2AgAgAiABQQFyNgIEIAAgBkEDcjYCBCAAQQhqIQAMCQtBACEAIAZBL2oiAwJ/QeTtASgCAARAQeztASgCAAwBC0Hw7QFCfzcCAEHo7QFCgKCAgICABDcCAEHk7QEgCkEMakFwcUHYqtWqBXM2AgBB+O0BQQA2AgBByO0BQQA2AgBBgCALIgFqIgRBACABayIHcSIBIAZNDQhBxO0BKAIAIgUEQEG87QEoAgAiCCABaiIJIAhNIAUgCUlyDQkLAkBByO0BLQAAQQRxRQRAAkACQAJAAkBBpOoBKAIAIgUEQEHM7QEhAANAIAAoAgAiCCAFTQRAIAUgCCAAKAIEakkNAwsgACgCCCIADQALC0EAEKUBIgJBf0YNAyABIQRB6O0BKAIAIgBBAWsiBSACcQRAIAEgAmsgAiAFakEAIABrcWohBAsgBCAGTQ0DQcTtASgCACIABEBBvO0BKAIAIgUgBGoiByAFTSAAIAdJcg0ECyAEEKUBIgAgAkcNAQwFCyAEIAJrIAdxIgQQpQEiAiAAKAIAIAAoAgRqRg0BIAIhAAsgAEF/Rg0BIAZBMGogBE0EQCAAIQIMBAtB7O0BKAIAIgIgAyAEa2pBACACa3EiAhClAUF/Rg0BIAIgBGohBCAAIQIMAwsgAkF/Rw0CC0HI7QFByO0BKAIAQQRyNgIACyABEKUBIgJBf0ZBABClASIAQX9GciAAIAJNcg0FIAAgAmsiBCAGQShqTQ0FC0G87QFBvO0BKAIAIARqIgA2AgBBwO0BKAIAIABJBEBBwO0BIAA2AgALAkBBpOoBKAIAIgMEQEHM7QEhAANAIAIgACgCACIBIAAoAgQiBWpGDQIgACgCCCIADQALDAQLQZzqASgCACIAQQAgACACTRtFBEBBnOoBIAI2AgALQQAhAEHQ7QEgBDYCAEHM7QEgAjYCAEGs6gFBfzYCAEGw6gFB5O0BKAIANgIAQdjtAUEANgIAA0AgAEEDdCIBIAFBtOoBaiIFNgK86gEgASAFNgLA6gEgAEEBaiIAQSBHDQALQZjqASAEQShrIgBBeCACa0EHcSIBayIFNgIAQaTqASABIAJqIgE2AgAgASAFQQFyNgIEIAAgAmpBKDYCBEGo6gFB9O0BKAIANgIADAQLIAIgA00gASADS3INAiAAKAIMQQhxDQIgACAEIAVqNgIEQaTqASADQXggA2tBB3EiAGoiATYCAEGY6gFBmOoBKAIAIARqIgIgAGsiADYCACABIABBAXI2AgQgAiADakEoNgIEQajqAUH07QEoAgA2AgAMAwtBACEADAYLQQAhAAwEC0Gc6gEoAgAgAksEQEGc6gEgAjYCAAsgAiAEaiEFQcztASEAAkADQCAFIAAoAgAiAUcEQCAAKAIIIgANAQwCCwsgAC0ADEEIcUUNAwtBzO0BIQADQAJAIAAoAgAiASADTQRAIAMgASAAKAIEaiIFSQ0BCyAAKAIIIQAMAQsLQZjqASAEQShrIgBBeCACa0EHcSIBayIHNgIAQaTqASABIAJqIgE2AgAgASAHQQFyNgIEIAAgAmpBKDYCBEGo6gFB9O0BKAIANgIAIAMgBUEnIAVrQQdxakEvayIAIAAgA0EQakkbIgFBGzYCBCABQdTtASkCADcCECABQcztASkCADcCCEHU7QEgAUEIajYCAEHQ7QEgBDYCAEHM7QEgAjYCAEHY7QFBADYCACABQRhqIQADQCAAQQc2AgQgAEEIaiAAQQRqIQAgBUkNAAsgASADRg0AIAEgASgCBEF+cTYCBCADIAEgA2siAkEBcjYCBCABIAI2AgACfyACQf8BTQRAIAJBeHFBtOoBaiEAAn9BjOoBKAIAIgFBASACQQN2dCICcUUEQEGM6gEgASACcjYCACAADAELIAAoAggLIQEgACADNgIIIAEgAzYCDEEMIQJBCAwBC0EfIQAgAkH///8HTQRAIAJBJiACQQh2ZyIAa3ZBAXEgAEEBdGtBPmohAAsgAyAANgIcIANCADcCECAAQQJ0QbzsAWohAQJAAkBBkOoBKAIAIgVBASAAdCIEcUUEQEGQ6gEgBCAFcjYCACABIAM2AgAMAQsgAkEZIABBAXZrQQAgAEEfRxt0IQAgASgCACEFA0AgBSIBKAIEQXhxIAJGDQIgAEEddiEFIABBAXQhACABIAVBBHFqIgQoAhAiBQ0ACyAEIAM2AhALIAMgATYCGEEIIQIgAyIBIQBBDAwBCyABKAIIIgAgAzYCDCABIAM2AgggAyAANgIIQQAhAEEYIQJBDAsgA2ogATYCACACIANqIAA2AgALQZjqASgCACIAIAZNDQBBmOoBIAAgBmsiATYCAEGk6gFBpOoBKAIAIgAgBmoiAjYCACACIAFBAXI2AgQgACAGQQNyNgIEIABBCGohAAwEC0GI6gFBMDYCAEEAIQAMAwsgACACNgIAIAAgACgCBCAEajYCBCACQXggAmtBB3FqIgggBkEDcjYCBCABQXggAWtBB3FqIgQgBiAIaiIDayEHAkBBpOoBKAIAIARGBEBBpOoBIAM2AgBBmOoBQZjqASgCACAHaiIANgIAIAMgAEEBcjYCBAwBC0Gg6gEoAgAgBEYEQEGg6gEgAzYCAEGU6gFBlOoBKAIAIAdqIgA2AgAgAyAAQQFyNgIEIAAgA2ogADYCAAwBCyAEKAIEIgBBA3FBAUYEQCAAQXhxIQkgBCgCDCECAkAgAEH/AU0EQCAEKAIIIgEgAkYEQEGM6gFBjOoBKAIAQX4gAEEDdndxNgIADAILIAEgAjYCDCACIAE2AggMAQsgBCgCGCEGAkAgAiAERwRAIAQoAggiACACNgIMIAIgADYCCAwBCwJAIAQoAhQiAAR/IARBFGoFIAQoAhAiAEUNASAEQRBqCyEBA0AgASEFIAAiAkEUaiEBIAAoAhQiAA0AIAJBEGohASACKAIQIgANAAsgBUEANgIADAELQQAhAgsgBkUNAAJAIAQoAhwiAEECdCIBKAK87AEgBEYEQCABQbzsAWogAjYCACACDQFBkOoBQZDqASgCAEF+IAB3cTYCAAwCCwJAIAQgBigCEEYEQCAGIAI2AhAMAQsgBiACNgIUCyACRQ0BCyACIAY2AhggBCgCECIABEAgAiAANgIQIAAgAjYCGAsgBCgCFCIARQ0AIAIgADYCFCAAIAI2AhgLIAcgCWohByAEIAlqIgQoAgQhAAsgBCAAQX5xNgIEIAMgB0EBcjYCBCADIAdqIAc2AgAgB0H/AU0EQCAHQXhxQbTqAWohAAJ/QYzqASgCACIBQQEgB0EDdnQiAnFFBEBBjOoBIAEgAnI2AgAgAAwBCyAAKAIICyEBIAAgAzYCCCABIAM2AgwgAyAANgIMIAMgATYCCAwBC0EfIQIgB0H///8HTQRAIAdBJiAHQQh2ZyIAa3ZBAXEgAEEBdGtBPmohAgsgAyACNgIcIANCADcCECACQQJ0QbzsAWohAAJAAkBBkOoBKAIAIgFBASACdCIFcUUEQEGQ6gEgASAFcjYCACAAIAM2AgAMAQsgB0EZIAJBAXZrQQAgAkEfRxt0IQIgACgCACEBA0AgASIAKAIEQXhxIAdGDQIgAkEddiEBIAJBAXQhAiAAIAFBBHFqIgUoAhAiAQ0ACyAFIAM2AhALIAMgADYCGCADIAM2AgwgAyADNgIIDAELIAAoAggiASADNgIMIAAgAzYCCCADQQA2AhggAyAANgIMIAMgATYCCAsgCEEIaiEADAILAkAgCEUNAAJAIAUoAhwiAUECdCICKAK87AEgBUYEQCACQbzsAWogADYCACAADQFBkOoBIAdBfiABd3EiBzYCAAwCCwJAIAUgCCgCEEYEQCAIIAA2AhAMAQsgCCAANgIUCyAARQ0BCyAAIAg2AhggBSgCECIBBEAgACABNgIQIAEgADYCGAsgBSgCFCIBRQ0AIAAgATYCFCABIAA2AhgLAkAgA0EPTQRAIAUgAyAGaiIAQQNyNgIEIAAgBWoiACAAKAIEQQFyNgIEDAELIAUgBkEDcjYCBCAFIAZqIgQgA0EBcjYCBCADIARqIAM2AgAgA0H/AU0EQCADQXhxQbTqAWohAAJ/QYzqASgCACIBQQEgA0EDdnQiAnFFBEBBjOoBIAEgAnI2AgAgAAwBCyAAKAIICyEBIAAgBDYCCCABIAQ2AgwgBCAANgIMIAQgATYCCAwBC0EfIQAgA0H///8HTQRAIANBJiADQQh2ZyIAa3ZBAXEgAEEBdGtBPmohAAsgBCAANgIcIARCADcCECAAQQJ0QbzsAWohAQJAAkAgB0EBIAB0IgJxRQRAQZDqASACIAdyNgIAIAEgBDYCACAEIAE2AhgMAQsgA0EZIABBAXZrQQAgAEEfRxt0IQAgASgCACEBA0AgASICKAIEQXhxIANGDQIgAEEddiEBIABBAXQhACACIAFBBHFqIgcoAhAiAQ0ACyAHIAQ2AhAgBCACNgIYCyAEIAQ2AgwgBCAENgIIDAELIAIoAggiACAENgIMIAIgBDYCCCAEQQA2AhggBCACNgIMIAQgADYCCAsgBUEIaiEADAELAkAgCUUNAAJAIAIoAhwiAUECdCIFKAK87AEgAkYEQCAFQbzsAWogADYCACAADQFBkOoBIAtBfiABd3E2AgAMAgsCQCACIAkoAhBGBEAgCSAANgIQDAELIAkgADYCFAsgAEUNAQsgACAJNgIYIAIoAhAiAQRAIAAgATYCECABIAA2AhgLIAIoAhQiAUUNACAAIAE2AhQgASAANgIYCwJAIANBD00EQCACIAMgBmoiAEEDcjYCBCAAIAJqIgAgACgCBEEBcjYCBAwBCyACIAZBA3I2AgQgAiAGaiIFIANBAXI2AgQgAyAFaiADNgIAIAgEQCAIQXhxQbTqAWohAEGg6gEoAgAhAQJ/QQEgCEEDdnQiByAEcUUEQEGM6gEgBCAHcjYCACAADAELIAAoAggLIQQgACABNgIIIAQgATYCDCABIAA2AgwgASAENgIIC0Gg6gEgBTYCAEGU6gEgAzYCAAsgAkEIaiEACyAKQRBqJAAgAAsIACAAQQAQPAsVACAAIAE2AgAgACACKAIANgIEIAALCgAgACgCABC9AwsLACAAKAIAEMMDwAsXACAAEEcEQCAAKAIAIAAQfhCpAQsgAAs7AQJ/IwBBEGsiASQAIAEgADYCDCABKAIMIgAoAgAiAgRAIAAgAjYCBCAAKAIIGiACEC0LIAFBEGokAAstACACRQRAIAAoAgQgASgCBEYPCyAAIAFGBEBBAQ8LIAAoAgQgASgCBBDQAUULIQEBfyAAKAIAIQIgACABNgIAIAIEQCACIAAoAgQRAgALCwYAEMoDAAsNACAAKAIAELwDGiAACw0AIAAoAgAQnQIaIAALdQEBfiAAIAEgBH4gAiADfnwgA0IgiCICIAFCIIgiBH58IANC/////w+DIgMgAUL/////D4MiAX4iBUIgiCADIAR+fCIDQiCIfCABIAJ+IANC/////w+DfCIBQiCIfDcDCCAAIAVC/////w+DIAFCIIaENwMACxEAIAAgASAAKAIAKAIcEQQAC8EBAQN/IAAtAABBIHFFBEACQCAAKAIQIgMEfyADBSAAEN8BDQEgACgCEAsgACgCFCIEayACSQRAIAAgASACIAAoAiQRAwAaDAELAkACQCACRSAAKAJQQQBIcg0AIAIhAwNAIAEgA2oiBUEBay0AAEEKRwRAIANBAWsiAw0BDAILCyAAIAEgAyAAKAIkEQMAIANJDQIgAiADayECIAAoAhQhBAwBCyABIQULIAQgBSACEHEaIAAgACgCFCACajYCFAsLC6EBAQJ/AkAgABAfRSACIAFrQQVIcg0AIAEgAhDHASACQQRrIQQgABAjIgIgABAfaiEFAkADQAJAIAIsAAAhACABIARPDQAgAEEATCAAQf8ATnJFBEAgASgCACACLAAARw0DCyABQQRqIQEgAiAFIAJrQQFKaiECDAELCyAAQQBMIABB/wBOcg0BIAIsAAAgBCgCAEEBa0sNAQsgA0EENgIACwtQAQF+AkAgA0HAAHEEQCABIANBQGqthiECQgAhAQwBCyADRQ0AIAIgA60iBIYgAUHAACADa62IhCECIAEgBIYhAQsgACABNwMAIAAgAjcDCAtpAQF/IwBBgAJrIgUkACAEQYDABHEgAiADTHJFBEAgBSABIAIgA2siA0GAAiADQYACSSIBGxCYAiABRQRAA0AgACAFQYACEEIgA0GAAmsiA0H/AUsNAAsLIAAgBSADEEILIAVBgAJqJAALBABBAAsKACAALQALQQd2CwoAIABB0PIBEHoLCgAgAEHY8gEQegvPCQIEfwR+IwBB8ABrIgYkACAEQv///////////wCDIQkCQAJAIAFQIgUgAkL///////////8AgyIKQoCAgICAgMD//wB9QoCAgICAgMCAgH9UIApQG0UEQCADQgBSIAlCgICAgICAwP//AH0iC0KAgICAgIDAgIB/ViALQoCAgICAgMCAgH9RGw0BCyAFIApCgICAgICAwP//AFQgCkKAgICAgIDA//8AURtFBEAgAkKAgICAgIAghCEEIAEhAwwCCyADUCAJQoCAgICAgMD//wBUIAlCgICAgICAwP//AFEbRQRAIARCgICAgICAIIQhBAwCCyABIApCgICAgICAwP//AIWEUARAQoCAgICAgOD//wAgAiABIAOFIAIgBIVCgICAgICAgICAf4WEUCIFGyEEQgAgASAFGyEDDAILIAMgCUKAgICAgIDA//8AhYRQDQEgASAKhFAEQCADIAmEQgBSDQIgASADgyEDIAIgBIMhBAwCCyADIAmEUEUNACABIQMgAiEEDAELIAMgASABIANUIAkgClYgCSAKURsiCBshCiAEIAIgCBsiDEL///////8/gyEJIAIgBCAIGyILQjCIp0H//wFxIQcgDEIwiKdB//8BcSIFRQRAIAZB4ABqIAogCSAKIAkgCVAiBRt5QsAAQgAgBRt8pyIFQQ9rEEQgBikDaCEJIAYpA2AhCkEQIAVrIQULIAEgAyAIGyEDIAtC////////P4MhASAHBH4gAQUgBkHQAGogAyABIAMgASABUCIHG3lCwABCACAHG3ynIgdBD2sQREEQIAdrIQcgBikDUCEDIAYpA1gLQgOGIANCPYiEQoCAgICAgIAEhCEBIAlCA4YgCkI9iIQgAiAEhSEEAn4gA0IDhiICIAUgB0YNABogBSAHayIHQf8ASwRAQgAhAUIBDAELIAZBQGsgAiABQYABIAdrEEQgBkEwaiACIAEgBxCKASAGKQM4IQEgBikDMCAGKQNAIAYpA0iEQgBSrYQLIQlCgICAgICAgASEIQsgCkIDhiEKAkAgBEIAUwRAQgAhA0IAIQQgCSAKhSABIAuFhFANAiAKIAl9IQIgCyABfSAJIApWrX0iBEL/////////A1YNASAGQSBqIAIgBCACIAQgBFAiBxt5QsAAQgAgBxt8p0EMayIHEEQgBSAHayEFIAYpAyghBCAGKQMgIQIMAQsgCSAKfCICIAlUrSABIAt8fCIEQoCAgICAgIAIg1ANACAJQgGDIARCP4YgAkIBiISEIQIgBUEBaiEFIARCAYghBAsgDEKAgICAgICAgIB/gyEDIAVB//8BTgRAIANCgICAgICAwP//AIQhBEIAIQMMAQtBACEHAkAgBUEASgRAIAUhBwwBCyAGQRBqIAIgBCAFQf8AahBEIAYgAiAEQQEgBWsQigEgBikDACAGKQMQIAYpAxiEQgBSrYQhAiAGKQMIIQQLIARCPYYgAkIDiIQhASAEQgOIQv///////z+DIAetQjCGhCADhCEEAkACQCACp0EHcSIFQQRHBEAgBCABIAEgBUEES618IgNWrXwhBAwBCyAEIAEgASABQgGDfCIDVq18IQQMAQsgBUUNAQsLIAAgAzcDACAAIAQ3AwggBkHwAGokAAsRACAAIAEgACgCACgCLBEEAAsIACAAQYABSQsRACACBEAgACABIAL8CgAACwsJACAAECMQ9wELhAECAn8BfiMAQRBrIgMkACAAAn4gAUUEQEIADAELIAMgASABQR91IgJzIAJrIgKtQgAgAmciAkHRAGoQRCADKQMIQoCAgICAgMAAhUGegAEgAmutQjCGfEKAgICAgICAgIB/QgAgAUEASBuEIQQgAykDAAs3AwAgACAENwMIIANBEGokAAsNACAAIAFB/wBxOgALC6oMAQh/An9BACABRQ0AGiAAQX9zIQMgAkEXTwRAAkAgAUEDcUUNACABLQAAIANzQf8BcUECdCgC0DMgA0EIdnMhAyACQQFrIgBFIAFBAWoiBEEDcUVyRQRAIAEtAAEgA3NB/wFxQQJ0KALQMyADQQh2cyEDIAJBAmsiAEUgAUECaiIEQQNxRXJFBEAgAS0AAiADc0H/AXFBAnQoAtAzIANBCHZzIQMgAkEDayIARSABQQNqIgRBA3FFckUEQCABLQADIANzQf8BcUECdCgC0DMgA0EIdnMhAyABQQRqIQEgAkEEayECDAMLIAAhAiAEIQEMAgsgACECIAQhAQwBCyAAIQIgBCEBCyACQRRuIghBbGwhCgJAIAhBAWsiCUUEQEEAIQQMAQsgASEAQQAhBANAIAAoAhAgB3MiB0EWdkH8B3EoAtBTIAdBDnZB/AdxKALQSyAHQQZ2QfwHcSgC0EMgB0H/AXFBAnQoAtA7c3NzIQcgACgCDCAGcyIGQRZ2QfwHcSgC0FMgBkEOdkH8B3EoAtBLIAZBBnZB/AdxKALQQyAGQf8BcUECdCgC0Dtzc3MhBiAAKAIIIARzIgRBFnZB/AdxKALQUyAEQQ52QfwHcSgC0EsgBEEGdkH8B3EoAtBDIARB/wFxQQJ0KALQO3NzcyEEIAAoAgQgBXMiBUEWdkH8B3EoAtBTIAVBDnZB/AdxKALQSyAFQQZ2QfwHcSgC0EMgBUH/AXFBAnQoAtA7c3NzIQUgACgCACADcyIDQRZ2QfwHcSgC0FMgA0EOdkH8B3EoAtBLIANBBnZB/AdxKALQQyADQf8BcUECdCgC0Dtzc3MhAyAAQRRqIQAgCUEBayIJDQALIAEgCEEUbGpBFGshAQsgAiAKaiECIAEoAhAgASgCDCABKAIIIAEoAgQgASgCACADcyIAQQh2IABB/wFxQQJ0KALQM3MiAEEIdiAAQf8BcUECdCgC0DNzIgBBCHYgAEH/AXFBAnQoAtAzcyIAQf8BcUECdCgC0DMgBXNzIABBCHZzIgBBCHYgAEH/AXFBAnQoAtAzcyIAQQh2IABB/wFxQQJ0KALQM3MiAEEIdiAAQf8BcUECdCgC0DNzIgBB/wFxQQJ0KALQMyAEc3MgAEEIdnMiAEEIdiAAQf8BcUECdCgC0DNzIgBBCHYgAEH/AXFBAnQoAtAzcyIAQQh2IABB/wFxQQJ0KALQM3MiAEH/AXFBAnQoAtAzIAZzcyAAQQh2cyIAQQh2IABB/wFxQQJ0KALQM3MiAEEIdiAAQf8BcUECdCgC0DNzIgBBCHYgAEH/AXFBAnQoAtAzcyIAQf8BcUECdCgC0DMgB3NzIABBCHZzIgBBCHYgAEH/AXFBAnQoAtAzcyIAQQh2IABB/wFxQQJ0KALQM3MiAEEIdiAAQf8BcUECdCgC0DNzIgBBCHYgAEH/AXFBAnQoAtAzcyEDIAFBFGohAQsgAkEHSwRAA0AgAS0AACADc0H/AXFBAnQoAtAzIANBCHZzIgBBCHYgAS0AASAAc0H/AXFBAnQoAtAzcyIAQQh2IAEtAAIgAHNB/wFxQQJ0KALQM3MiAEEIdiABLQADIABzQf8BcUECdCgC0DNzIgBBCHYgAS0ABCAAc0H/AXFBAnQoAtAzcyIAQQh2IAEtAAUgAHNB/wFxQQJ0KALQM3MiAEEIdiABLQAGIABzQf8BcUECdCgC0DNzIgBBCHYgAS0AByAAc0H/AXFBAnQoAtAzcyEDIAFBCGohASACQQhrIgJBB0sNAAsLAkAgAkUNACABLQAAIANzQf8BcUECdCgC0DMgA0EIdnMhAyACQQFGDQAgAS0AASADc0H/AXFBAnQoAtAzIANBCHZzIQMgAkECRg0AIAEtAAIgA3NB/wFxQQJ0KALQMyADQQh2cyEDIAJBA0YNACABLQADIANzQf8BcUECdCgC0DMgA0EIdnMhAyACQQRGDQAgAS0ABCADc0H/AXFBAnQoAtAzIANBCHZzIQMgAkEFRg0AIAEtAAUgA3NB/wFxQQJ0KALQMyADQQh2cyEDIAJBBkYNACABLQAGIANzQf8BcUECdCgC0DMgA0EIdnMhAwsgA0F/cwsL5QMBBX8jAEEQayIDJAAgAyAAKAIAIgRBCGsoAgAiAjYCDCADIAAgAmo2AgQgAyAEQQRrKAIANgIIIAMoAggiBCABQQAQOyECIAMoAgQhBQJAIAIEQCADKAIMIQAjAEFAaiIBJAAgAUFAayQAQQAgBSAAGyECDAELIwBBQGoiAiQAIAAgBU4EQCACQgA3AhwgAkIANwIkIAJCADcCLCACQgA3AhQgAkEANgIQIAIgATYCDCACIAQ2AgQgAkEANgI8IAJCgYCAgICAgIABNwI0IAIgADYCCCAEIAJBBGogBSAFQQFBACAEKAIAKAIUEQoAIABBACACKAIcGyEGCyACQUBrJAAgBiICDQAjAEFAaiICJAAgAkEANgIQIAJBlNYBNgIMIAIgADYCCCACIAE2AgRBACEAIAJBFGpBAEEn/AsAIAJBADYCPCACQQE6ADsgBCACQQRqIAVBAUEAIAQoAgAoAhgRCwACQAJAAkAgAigCKA4CAAECCyACKAIYQQAgAigCJEEBRhtBACACKAIgQQFGG0EAIAIoAixBAUYbIQAMAQsgAigCHEEBRwRAIAIoAiwNASACKAIgQQFHDQEgAigCJEEBRw0BCyACKAIUIQALIAJBQGskACAAIQILIANBEGokACACCzwBAn9BASAAIABBAU0bIQEDQAJAIAEQNCIADQBB5P4BKAIAIgJFDQAgAhEMAAwBCwsgAEUEQBDrAQsgAAsUAQF/QQQQUyIBIAAoAgA2AgAgAQsLACAAIAE2AgAgAAsMACAAIAEoAgA2AgALBwAgABAkGgsRACAAIAEgASgCACgCFBEBAAsPACAAIAAoAgAoAhARAAALBwAgABAfRQsJAEGFEBCuAgALEAAgACABQYCAgIB4cjYCCAsMACAAIAEtAAA6AAALCwAgAC0AC0H/AHELEwAgACABIAIgACgCACgCDBEDAAsiAQF/IAIQTAR/IAAoAgggAkECdGooAgAgAXFBAEcFQQALC+wBAQN/IABFBEBB0N4BKAIABEBB0N4BKAIAEGEhAQtBgOABKAIABEBBgOABKAIAEGEgAXIhAQtBwOABKAIAIgAEQANAIAAoAkwaIAAoAhQgACgCHEcEQCAAEGEgAXIhAQsgACgCOCIADQALCyABDwsgACgCTEEASCECAkACQCAAKAIUIAAoAhxGDQAgAEEAQQAgACgCJBEDABogACgCFA0AQX8hAQwBCyAAKAIEIgEgACgCCCIDRwRAIAAgASADa6xBASAAKAIoERYAGgtBACEBIABBADYCHCAAQgA3AxAgAEIANwIEIAINAAsgAQsSACAAKAIAIgAEQCAAEJwDGgsLEQAgACABKAIAEJwDNgIAIAALQQEBfyAAIAE3A3AgACAAKAIsIAAoAgQiAmusNwN4IAAgAVAgASAAKAIIIgAgAmusWXIEfyAABSACIAGnags2AmgLHgACQCACRQ0AIAJBAnQiAkUNACAAIAEgAvwKAAALCxYAIAAgASgCADYCACAAIAIoAgA2AgQLtQEBAn8jAEEQayIFJAAgBSABNgIMQQAhAQJAIAICf0EGIAAgBUEMahArDQAaQQQgA0HAACAAEDciBhBfRQ0AGiADIAYQlAEhAQNAAkAgABA+GiABQTBrIQEgACAFQQxqECsgBEECSHINACADQcAAIAAQNyIGEF9FDQMgBEEBayEEIAMgBhCUASABQQpsaiEBDAELCyAAIAVBDGoQK0UNAUECCyACKAIAcjYCAAsgBUEQaiQAIAELtQEBAn8jAEEQayIFJAAgBSABNgIMQQAhAQJAIAICf0EGIAAgBUEMahAsDQAaQQQgA0HAACAAEDgiBhBgRQ0AGiADIAYQlQEhAQNAAkAgABA/GiABQTBrIQEgACAFQQxqECwgBEECSHINACADQcAAIAAQOCIGEGBFDQMgBEEBayEEIAMgBhCVASABQQpsaiEBDAELCyAAIAVBDGoQLEUNAUECCyACKAIAcjYCAAsgBUEQaiQAIAELYwAgAigCBEGwAXEiAkEgRgRAIAEPCwJAIAJBEEcNAAJAAkAgAC0AACICQStrDgMAAQABCyAAQQFqDwsgAkEwRyABIABrQQJIcg0AIAAtAAFBIHJB+ABHDQAgAEECaiEACyAACy4AAkAgACgCBEHKAHEiAARAIABBwABGBEBBCA8LIABBCEcNAUEQDwtBAA8LQQoLEAAgACgCBCAAKAIAa0ECdQvOAQIEfgJ/IwBBEGsiBiQAIAG9IgVC/////////weDIQIgAAJ+IAVCNIhC/w+DIgNQRQRAIANC/w9SBEAgAkIEiCEEIANCgPgAfCEDIAJCPIYMAgsgAkIEiCEEQv//ASEDIAJCPIYMAQsgAlAEQEIAIQNCAAwBCyAGIAJCACACeaciB0ExahBEIAYpAwhCgICAgICAwACFIQRBjPgAIAdrrSEDIAYpAwALNwMAIAAgBUKAgICAgICAgIB/gyADQjCGhCAEhDcDCCAGQRBqJAALsgMBA38jAEEQayIIJAAgCCACNgIIIAggATYCDCAIQQRqIgEgAxAnIAEQSCEJIAEQJSAEQQA2AgBBACEBAkADQCAGIAdGIAFyDQECQCAIQQxqIAhBCGoQKw0AAkAgCSAGKAIAEJQBQSVGBEAgBkEEaiAHRg0CQQAhAgJ/AkAgCSAGKAIEEJQBIgFBxQBGDQBBBCEKIAFB/wFxQTBGDQAgAQwBCyAGQQhqIAdGDQNBCCEKIAEhAiAJIAYoAggQlAELIQEgCCAAIAgoAgwgCCgCCCADIAQgBSABIAIgACgCACgCJBENADYCDCAGIApqQQRqIQYMAQsgCUEBIAYoAgAQXwRAA0AgByAGQQRqIgZHBEAgCUEBIAYoAgAQXw0BCwsDQCAIQQxqIgEgCEEIahArDQIgCUEBIAEQNxBfRQ0CIAEQPhoMAAsACyAJIAhBDGoiARA3EEEgCSAGKAIAEEFGBEAgBkEEaiEGIAEQPhoMAQsgBEEENgIACyAEKAIAIQEMAQsLIARBBDYCAAsgCEEMaiAIQQhqECsEQCAEIAQoAgBBAnI2AgALIAgoAgwgCEEQaiQAC7QDAQN/IwBBEGsiCCQAIAggAjYCCCAIIAE2AgwgCEEEaiIBIAMQJyABEEkhCSABECUgBEEANgIAQQAhAQJAA0AgBiAHRiABcg0BAkAgCEEMaiAIQQhqECwNAAJAIAkgBiwAABCVAUElRgRAIAZBAWogB0YNAkEAIQICfwJAIAkgBiwAARCVASIBQcUARg0AQQEhCiABQf8BcUEwRg0AIAEMAQsgBkECaiAHRg0DQQIhCiABIQIgCSAGLAACEJUBCyEBIAggACAIKAIMIAgoAgggAyAEIAUgASACIAAoAgAoAiQRDQA2AgwgBiAKakEBaiEGDAELIAlBASAGLAAAEGAEQANAIAcgBkEBaiIGRwRAIAlBASAGLAAAEGANAQsLA0AgCEEMaiIBIAhBCGoQLA0CIAlBASABEDgQYEUNAiABED8aDAALAAsgCSAIQQxqIgEQOBDOASAJIAYsAAAQzgFGBEAgBkEBaiEGIAEQPxoMAQsgBEEENgIACyAEKAIAIQEMAQsLIARBBDYCAAsgCEEMaiAIQQhqECwEQCAEIAQoAgBBAnI2AgALIAgoAgwgCEEQaiQACxYAIAAgASACIAMgACgCACgCMBEJABoLPAAgACwAC0EASARAIAAoAggaIAAoAgAQLQsgACABKQIANwIAIAAgASgCCDYCCCABQQA6AAsgAUEAOgAACxMAIAIEQCAAIAEgAvwKAAALIAALKwEBfyMAQRBrIgIkACACIAE2AgxBwN0BIAAgAUEAQQAQ0QMaIAJBEGokAAsjAQF/IwBBEGsiASQAIAEgADYCDCABQQxqEOwBIAFBEGokAAsMACAAQYKGgCA2AAALEQAgABAjIAAQH0ECdGoQ9wELDQAgACgCACABKAIARgsOACAAECMgABAfahD3AQsPACAAIAAoAgAoAgwRAAALFgAgACABIAIgAyAAKAIAKAIgEQkAGgtEAQF/IAAoAgAhAiABEDEhACACQQhqIgEQayAASwR/IAEgABCCASgCAEEARwVBAAtFBEAQPQALIAJBCGogABCCASgCAAsRACAAIAEgASgCACgCHBEBAAsRACAAIAEgASgCACgCGBEBAAsQACAAQSBGIABBCWtBBUlyCw4AIAAoAghB/////wdxC9cBAQF/AkBBjN4BKAIAIgBBAE4EQCAARQ0BQZThASgCACAAQf////8DcUcNAQsCQEGQ3gEoAgBBCkYNAEHU3QEoAgAiAEHQ3QEoAgBGDQBB1N0BIABBAWo2AgAgAEEKOgAADwtBwN0BEN4BDwtBjN4BQYzeASgCACIAQf////8DIAAbNgIAAkACQEGQ3gEoAgBBCkYNAEHU3QEoAgAiAEHQ3QEoAgBGDQBB1N0BIABBAWo2AgAgAEEKOgAADAELQcDdARDeAQtBjN4BKAIAGkGM3gFBADYCAAvDAQEEfyMAQRBrIgckAAJAIABFDQAgBCgCDCEJIAIgAWsiBkEASgRAIAAgASAGIAAoAgAoAjARAwAgBkcNAQsgAyABayIBIAlIBEAgB0EEaiIGIAkgAWsiASAFELACIAAgBygCBCAGIAcsAA9BAEgbIAEgACgCACgCMBEDACEFIAYQIBogASAFRw0BCyADIAJrIgFBAEoEQCAAIAIgASAAKAIAKAIwEQMAIAFHDQELIARBADYCDCAAIQgLIAdBEGokACAIC14BA38gAEEANgIIIABCADcCACABKAIAIQMgASgCBCIBIANrIgRBAnUiAgRAIAAgAhCuAyAAKAIEIQIgBEUgASADRnJFBEAgAiADIAT8CgAACyAAIAIgBGo2AgQLIAALDQAgACgCACABQQJ0agsXACAAEEcEQCAAIAE2AgQPCyAAIAEQUAthAQF/IwBBEGsiAiQAIAIgADYCDAJAIAAgAUYNAANAIAIgAUEBayIBNgIIIAAgAU8NASACKAIMIAIoAggQ8wIgAiACKAIMQQFqIgA2AgwgAigCCCEBDAALAAsgAkEQaiQAC6wBAQR/IwBBEGsiByQAAkAgAEUNACAEKAIMIQYgAiABa0ECdSIIQQBKBEAgACABIAgQjQIgCEcNAQsgAyABa0ECdSIBIAZIBEAgACAHQQRqIAYgAWsiASAFEP0CIgUQIyABEI0CIQYgBRA5GiABIAZHDQELIAMgAmtBAnUiAUEASgRAIAAgAiABEI0CIAFHDQELIAQoAgwaIARBADYCDCAAIQkLIAdBEGokACAJCycBAX8jAEEQayIDJAAgAyACNgIMIABB5AAgASACENEBIANBEGokAAvbAQIBfwJ+QQEhBAJAIABCAFIgAUL///////////8AgyIFQoCAgICAgMD//wBWIAVCgICAgICAwP//AFEbDQAgAkIAUiADQv///////////wCDIgZCgICAgICAwP//AFYgBkKAgICAgIDA//8AURsNACAAIAKEIAUgBoSEUARAQQAPCyABIAODQgBZBEAgACACVCABIANTIAEgA1EbBEBBfw8LIAAgAoUgASADhYRCAFIPCyAAIAJWIAEgA1UgASADURsEQEF/DwsgACAChSABIAOFhEIAUiEECyAEC+wBAQR/IwBBEGsiBCQAIABBADYCBCMAQRBrIgUkACAEQQA6AA8gACAAKAIAQQxrKAIAahDZASEGIAAgACgCAEEMaygCAGohAwJAIAYEQCADKAJIBEAgACAAKAIAQQxrKAIAaigCSBDFAwsgBCAAIAAoAgBBDGsoAgBqENkBOgAPDAELIANBBBDVAQsgBUEQaiQAQQQhAyAELQAPBEAgACAAIAAoAgBBDGsoAgBqKAIYIgMgASACIAMoAgAoAiARAwAiATYCBEEGQQAgASACRxshAwsgACAAKAIAQQxrKAIAaiADENUBIARBEGokAAsEACAAC1ABAX4CQCADQcAAcQRAIAIgA0FAaq2IIQFCACECDAELIANFDQAgAkHAACADa62GIAEgA60iBIiEIQEgAiAEiCECCyAAIAE3AwAgACACNwMIC0MBA38CQCACRQ0AA0AgAC0AACIEIAEtAAAiBUYEQCABQQFqIQEgAEEBaiEAIAJBAWsiAg0BDAILCyAEIAVrIQMLIAMLCQBB+gsQrgIACxQBAX9BCBBTIgEgACkCADcDACABCwoAIAAgASAAa2oLGQEBfyABEMECIQIgACABNgIEIAAgAjYCAAskACAAQQJPBH8gAEECakF+cSIAIABBAWsiACAAQQJGGwVBAQsLlgEBA38CQCABELcCIQIjAEEQayIDJAAgAkH3////A00EQAJAIAIQvQEEQCAAIAIQUCAAIQQMAQsgA0EIaiACEJABQQFqEI8BIAMoAgwaIAAgAygCCCIENgIAIAAgAygCDBBcIAAgAjYCBAsgBCABIAIQZSADQQA2AgQgBCACQQJ0aiADQQRqEFYgA0EQaiQADAELEFsACwsRACAAIAEgASgCACgCLBEBAAvHAQEGfyMAQRBrIgQkACAAEPIBKAIAIQUCfyACKAIAIAAoAgBrIgNB/////wdJBEAgA0EBdAwBC0F/CyIDQQQgAxshAyABKAIAIQYgACgCACEHIAVB5ABGBH9BAAUgACgCAAsgAxDcASIIBEAgBUHkAEcEQCAAEKwBGgsgBEHjADYCBCAAIARBCGogCCAEQQRqEDYiBRDrAiAFEDUgASAAKAIAIAYgB2tqNgIAIAIgACgCACADQXxxajYCACAEQRBqJAAPCxA9AAsTACAAIAFBACAAKAIAKAI0EQMACxMAIAAgAUEAIAAoAgAoAiQRAwALQgEBfyMAQRBrIgUkACAFIAI2AgwgBSAENgIIIAVBBGogBUEMahBjIAAgASADIAUoAggQ0QEhABBiIAVBEGokACAAC0EBAX8jAEEQayIDJAAgAyACNgIMQaAgIAFB7CBBzSxBHCADQQxqIgEQVEHsIEHRLEEdIAEQVBAEIANBEGokACAAC+oCAQJ/IwBBEGsiCiQAIAogADYCDAJAAkACQCADKAIAIgsgAkcNACAJKAJgIABGBH9BKwUgACAJKAJkRw0BQS0LIQAgAyALQQFqNgIAIAsgADoAAAwBCyAGEB9FIAAgBUdyRQRAQQAhACAIKAIAIgEgB2tBnwFKDQIgBCgCACEAIAggAUEEajYCACABIAA2AgAMAQtBfyEAIAkgCUHoAGogCkEMahD5ASAJa0ECdSIFQRdKDQECQAJAAkAgAUEIaw4DAAIAAQsgASAFSg0BDAMLIAFBEEcgBUEWSHINACADKAIAIgEgAkYgASACa0ECSnINAiABQQFrLQAAQTBHDQJBACEAIARBADYCACADIAFBAWo2AgAgASAFLQDQnwE6AAAMAgsgAyADKAIAIgBBAWo2AgAgACAFQdCfAWotAAA6AAAgBCAEKAIAQQFqNgIAQQAhAAwBC0EAIQAgBEEANgIACyAKQRBqJAAgAAsKACAAQZjzARB6C+wCAQN/IwBBEGsiCiQAIAogADoADwJAAkACQCADKAIAIgsgAkcNACAAQf8BcSIMIAktABhGBH9BKwUgDCAJLQAZRw0BQS0LIQAgAyALQQFqNgIAIAsgADoAAAwBCyAGEB9FIAAgBUdyRQRAQQAhACAIKAIAIgEgB2tBnwFKDQIgBCgCACEAIAggAUEEajYCACABIAA2AgAMAQtBfyEAIAkgCUEaaiAKQQ9qEP0BIAlrIgVBF0oNAQJAAkACQCABQQhrDgMAAgABCyABIAVKDQEMAwsgAUEQRyAFQRZIcg0AIAMoAgAiASACRiABIAJrQQJKcg0CIAFBAWstAABBMEcNAkEAIQAgBEEANgIAIAMgAUEBajYCACABIAUtANCfAToAAAwCCyADIAMoAgAiAEEBajYCACAAIAVB0J8Bai0AADoAACAEIAQoAgBBAWo2AgBBACEADAELQQAhACAEQQA2AgALIApBEGokACAACwoAIABBkPMBEHoLZgIBfwF+IwBBEGsiAiQAIAACfiABRQRAQgAMAQsgAiABrUIAQfAAIAFnIgFBH3NrEEQgAikDCEKAgICAgIDAAIVBnoABIAFrrUIwhnwhAyACKQMACzcDACAAIAM3AwggAkEQaiQACxQAIABB3wBxIAAgAEHhAGtBGkkbCywBAX8Cf0EBENYBBEAgAUEBELQCDAELIAEQUwshAiAAIAE2AgQgACACNgIACyQAIABBC08EfyAAQQhqQXhxIgAgAEEBayIAIABBC0YbBUEKCwskAQJ/IwBBEGsiAiQAIAAgARDTASEDIAJBEGokACABIAAgAxsLPAAgAEEANgIIIABCADcCACAAIAEoAgA2AgAgACABKAIENgIEIAAgASgCCDYCCCABQQA2AgggAUIANwIACywBAX8gAEEANgIIIABCADcCACAAIAEoAgAiAiABKAIEIgEgASACaxDAAyAACwgAIABB/wFxC/wBAQN/IAAoAgQgACgCACIDa0ECdSICIAFJBEAjAEEgayIDJAACQCABIAJrIgIgACgCCCAAKAIEIgFrQQJ1TQRAIAAoAgQiASACQQJ0aiECA0AgASACRgRAIAAgAjYCBAUgAUEANgIAIAFBBGohAQwBCwsMAQsgA0EMaiAAIAEgACgCAGtBAnUgAmoQtgEgACgCBCAAKAIAa0ECdSAAEIcCIgQoAggiASACQQJ0aiECA0AgASACRwRAIAFBADYCACABQQRqIQEMAQsLIAQgAjYCCCAAIAQQhQIgBBCBAgsgA0EgaiQADwsgASACSQRAIAAgAyABQQJ0ajYCBAsLUgECf0HU3gEoAgAiASAAQQdqQXhxIgJqIQACQCACQQAgACABTRtFBEAgAD8AQRB0TQ0BIAAQGA0BC0GI6gFBMDYCAEF/DwtB1N4BIAA2AgAgAQt/AgF+A38CQCAAQoCAgIAQVARAIAAhAgwBCwNAIAFBAWsiASAAIABCCoAiAkIKfn2nQTByOgAAIABC/////58BViACIQANAAsLIAJQRQRAIAKnIQMDQCABQQFrIgEgAyADQQpuIgRBCmxrQTByOgAAIANBCUsgBCEDDQALCyABC78BAQN/IAAoAgQgACgCACIDayICIAFJBEAjAEEgayIDJAACQCABIAJrIgIgACgCCCAAKAIEIgFrTQRAIAAgAhCYAwwBCyACIANBDGogACABIAJqIAAoAgBrELQBIAAoAgQgACgCAGsgABDGASIEKAIIIgFqIQIDQCABIAJHBEAgAUEAOgAAIAFBAWohAQwBCwsgBCACNgIIIAAgBBDvASAEELoBCyADQSBqJAAPCyABIAJJBEAgACABIANqNgIECwt9AQN/AkACQCAAIgFBA3FFDQAgAS0AAEUEQEEADwsDQCABQQFqIgFBA3FFDQEgAS0AAA0ACwwBCwNAIAEiAkEEaiEBQYCChAggAigCACIDayADckGAgYKEeHFBgIGChHhGDQALA0AgAiIBQQFqIQIgAS0AAA0ACwsgASAAawsTAEEEENYBBEAgABAtDwsgABAtCwsAIAQgAjYCAEEDC3wBAn8jAEEQayICJAAgABBHBEAgACgCACAAEH4QqQELIAEQHxogARBHIQMgACABKAIINgIIIAAgASkCADcCACABQQAQUCACQQA2AgwgASACQQxqEFYCQCADIAAgAUYiAXJFDQALIAAQRyABckUEQCAAEF4aCyACQRBqJAALEAEBfyAAKAIAIABBADYCAAs3AQJ/IwBBEGsiAyQAIANBDGoiBCABECcgAiAEEJkBIgEQWTYCACAAIAEQWCAEECUgA0EQaiQACzUBAn8jAEEQayICJAAgAkEMaiIDIAAQJyADEEhB0J8BQeqfASABEG8gAxAlIAJBEGokACABCzcBAn8jAEEQayIDJAAgA0EMaiIEIAEQJyACIAQQmwEiARBZOgAAIAAgARBYIAQQJSADQRBqJAALkwEBA38CQCABEKgBIQIjAEEQayIDJAAgAkH3////B00EQAJAIAIQ1AEEQCAAIAIQUCAAIQQMAQsgA0EIaiACEJ8BQQFqEJ4BIAMoAgwaIAAgAygCCCIENgIAIAAgAygCDBBcIAAgAjYCBAsgBCABIAIQTSADQQA6AAcgAiAEaiADQQdqEF0gA0EQaiQADAELEFsACwtGAQF/IABB+PsAKAIAIgE2AgAgACABQQxrKAIAakGY/AAoAgA2AgAgAEGc/AAoAgA2AgggAEEMahD8ARogAEFAaxDaASAACxcAIAAgAzYCECAAIAI2AgwgACABNgIIC7kHAQV/An8gAEH//wNxIQMgAEEQdiEEIAJBAUYEQCADIAEtAABqIgBB8f8DayAAIABB8P8DSxsiACAEaiIBQRB0IgJBgIA8aiACIAFB8P8DSxsgAHIMAQsgAQR/AkACQAJAAkAgAkEQTwRAAkAgAkGvK0sEQANAQdsCIQUgASEAA0AgAyAALQAAaiIDIARqIAMgAC0AAWoiA2ogAyAALQACaiIDaiADIAAtAANqIgNqIAMgAC0ABGoiA2ogAyAALQAFaiIDaiADIAAtAAZqIgNqIAMgAC0AB2oiA2ogAyAALQAIaiIDaiADIAAtAAlqIgNqIAMgAC0ACmoiA2ogAyAALQALaiIDaiADIAAtAAxqIgNqIAMgAC0ADWoiA2ogAyAALQAOaiIDaiADIAAtAA9qIgNqIQQgAEEQaiEAIAVBAWsiBQ0ACyAEQfH/A3AhBCADQfH/A3AhAyABQbAraiEBIAJBsCtrIgJBrytLDQALIAJFDQYgAkEQSQ0BCwNAIAMgAS0AAGoiACAEaiAAIAEtAAFqIgBqIAAgAS0AAmoiAGogACABLQADaiIAaiAAIAEtAARqIgBqIAAgAS0ABWoiAGogACABLQAGaiIAaiAAIAEtAAdqIgBqIAAgAS0ACGoiAGogACABLQAJaiIAaiAAIAEtAApqIgBqIAAgAS0AC2oiAGogACABLQAMaiIAaiAAIAEtAA1qIgBqIAAgAS0ADmoiAGogACABLQAPaiIDaiEEIAFBEGohASACQRBrIgJBD0sNAAsgAkUNBAsgAkEDcSIHDQEgAiEADAILAkAgAkUNAAJAIAJBA3EiB0UEQCACIQAMAQsgAiEAIAEhBQNAIABBAWshACADIAUtAABqIgMgBGohBCAFQQFqIgEhBSAGQQFqIgYgB0cNAAsLIAJBBEkNAANAIAMgAS0AAGoiAiABLQABaiIFIAEtAAJqIgYgAS0AA2oiAyAGIAUgAiAEampqaiEEIAFBBGohASAAQQRrIgANAAsLIARB8f8DcEEQdCADQfH/A2sgAyADQfD/A0sbcgwFCyACIQAgASEFA0AgAEEBayEAIAMgBS0AAGoiAyAEaiEEIAVBAWoiASEFIAZBAWoiBiAHRw0ACwsgAkEESQ0AA0AgAyABLQAAaiICIAEtAAFqIgUgAS0AAmoiBiABLQADaiIDIAYgBSACIARqampqIQQgAUEEaiEBIABBBGsiAA0ACwsgBEHx/wNwIQQgA0Hx/wNwIQMLIARBEHQgA3IFQQELCws6AQF/IAFBAEgEQBCMAQALQf////8HIAAoAgggACgCAGsiAEEBdCICIAEgASACSRsgAEH/////A08bCxwBAX8gACgCBCIBQQlPBEAgARAeIABBADYCBAsLPgEBfyABQYCAgIAETwRAEIwBAAtB/////wMgACgCCCAAKAIAayIAQQF1IgIgASABIAJJGyAAQfz///8HTxsLSQECfyAAKAIEIgZBCHUhBSAGQQFxBEAgAigCACAFEOgBIQULIAAoAgAiACABIAIgBWogA0ECIAZBAnEbIAQgACgCACgCGBELAAuqAQEDfyMAQRBrIgIkACACIAE6AA8CQAJAAn8gABBHIgRFBEBBCiEBIAAQXgwBCyAAEH5BAWshASAAKAIECyIDIAFGBEAgACABQQEgASABEPQBIAAQIxoMAQsgABAjGiAEDQAgACIBIANBAWoQUAwBCyAAKAIAIQEgACADQQFqNgIECyABIANqIgAgAkEPahBdIAJBADoADiAAQQFqIAJBDmoQXSACQRBqJAALoQIBA38jAEEgayIIJABB9////wciCSABQX9zaiACTwRAIAAQIyEKIAFB8////wNJBEAgCCABQQF0NgIcIAggASACajYCECAIQRBqIAhBHGoQoAEoAgAQnwFBAWohCQsgCEEcaiAIQRhqIAAQVSgCABC8ASAIQRBqIAkQngEgCCgCECECIAgoAhQaIAQEQCACIAogBBBNCyAGBEAgAiAEaiAHIAYQTQsgAyAEIAVqIglrIQcgAyAJRwRAIAIgBGogBmogBCAKaiAFaiAHEE0LIAFBCkcEQCAKEIsCCyAAIAI2AgAgACAIKAIUEFwgACAEIAZqIAdqIgA2AgQgCEEAOgAPIAAgAmogCEEPahBdIAhBHGoQuwEgCEEgaiQADwsQWwALCQAgAEEBEKgCCwoAIAAoAgAQHxoLCQAgACABEFUaCwcAIABBAkkLBABBBAsoAQF/IAAgACgCBEEBayIBNgIEIAFBf0YEQCAAIAAoAgAoAggRAgALC5UBAQN/IwBBEGsiBCQAIAQgATYCDCAEIAM2AgggBEEEaiAEQQxqEGMgBCgCCCEDIwBBEGsiASQAIAEgAzYCDCABIAM2AghBfyEFAkBBAEEAIAIgAxDRASIDQQBIDQAgACADQQFqIgMQNCIANgIAIABFDQAgACADIAIgASgCDBDRASEFCyABQRBqJAAQYiAEQRBqJAAgBQsPACAAIAAoAgAoAiQRAAALEQAgACABIAEoAgAoAiARAQALDgAgACABKAIANgIAIAALCABB/////wcLBQBB/wALOwAgACADNgIQIAAgAQR/IAEQUwVBAAsiAzYCACAAIAIgA2oiAjYCCCAAIAEgA2o2AgwgACACNgIEIAALYQEBfyMAQRBrIgIkACACIAA2AgwCQCAAIAFGDQADQCACIAFBBGsiATYCCCAAIAFPDQEgAigCDCACKAIIENcBIAIgAigCDEEEaiIANgIMIAIoAgghAQwACwALIAJBEGokAAs5AgF/AX4jAEEQayIEJAAgAykDACEFIAQgAykDCDcDCCAEIAU3AwAgACABIAIgBBDAASAEQRBqJAAL0AEBAn8gAkGAEHEEQCAAQSs6AAAgAEEBaiEACyACQYAIcQRAIABBIzoAACAAQQFqIQALIAJBhAJxIgNBhAJHBEAgAEGu1AA7AAAgAEECaiEACyACQYCAAXEhAgNAIAEtAAAiBARAIAAgBDoAACAAQQFqIQAgAUEBaiEBDAELCyAAAn8CQCADQYACRwRAIANBBEcNAUHGAEHmACACGwwCC0HFAEHlACACGwwBC0HBAEHhACACGyADQYQCRg0AGkHHAEHnACACGws6AAAgA0GEAkcLKwEBfyMAQRBrIgUkACAFIAQoAgA2AgAgACABIAIgAyAFEJYBIAVBEGokAAuqAQEBfwJAIANBgBBxRSACRXINACADQcoAcSIEQQhGIARBwABGcg0AIABBKzoAACAAQQFqIQALIANBgARxBEAgAEEjOgAAIABBAWohAAsDQCABLQAAIgQEQCAAIAQ6AAAgAEEBaiEAIAFBAWohAQwBCwsgAAJ/Qe8AIANBygBxIgFBwABGDQAaQdgAQfgAIANBgIABcRsgAUEIRg0AGkHkAEH1ACACGws6AAALDAAgABAjIAFBAnRqC5IEAQt/IwBBgAFrIgokACAKIAE2AnwgAiADELUCIQggCkHjADYCECAKQQhqQQAgCkEQaiIJEDYhDwJAAkACQCAIQeUATwRAIAgQNCIJRQ0BIA8gCRA8CyAJIQcgAiEBA0AgASADRgRAA0AgACAKQfwAaiIBECtBASAIGwRAIAAgARArBEAgBSAFKAIAQQJyNgIACwNAIAIgA0YNBiAJLQAAQQJGDQcgCUEBaiEJIAJBDGohAgwACwALIAAQNyEOIAZFBEAgBCAOEEEhDgsgDUEBaiEMQQAhECAJIQcgAiEBA0AgASADRgRAIAwhDSAQRQ0CIAAQPhogCSEHIAIhASAIIAtqQQJJDQIDQCABIANGBEAMBAUCQCAHLQAAQQJHDQAgARAfIA1GDQAgB0EAOgAAIAtBAWshCwsgB0EBaiEHIAFBDGohAQwBCwALAAUCQCAHLQAAQQFHDQAgASANEMwBKAIAIRECQCAGBH8gEQUgBCAREEELIA5GBEBBASEQIAEQHyAMRw0CIAdBAjoAACALQQFqIQsMAQsgB0EAOgAACyAIQQFrIQgLIAdBAWohByABQQxqIQEMAQsACwALAAUgB0ECQQEgARBaIgwbOgAAIAdBAWohByABQQxqIQEgCyAMaiELIAggDGshCAwBCwALAAsQPQALIAUgBSgCAEEEcjYCAAsgDxA1IApBgAFqJAAgAgsRACAAIAEgACgCACgCDBEEAAuTBAELfyMAQYABayIKJAAgCiABNgJ8IAIgAxC1AiEIIApB4wA2AhAgCkEIakEAIApBEGoiCRA2IQ8CQAJAAkAgCEHlAE8EQCAIEDQiCUUNASAPIAkQPAsgCSEHIAIhAQNAIAEgA0YEQANAIAAgCkH8AGoiARAsQQEgCBsEQCAAIAEQLARAIAUgBSgCAEECcjYCAAsDQCACIANGDQYgCS0AAEECRg0HIAlBAWohCSACQQxqIQIMAAsACyAAEDghDiAGRQRAIAQgDhDOASEOCyANQQFqIQxBACEQIAkhByACIQEDQCABIANGBEAgDCENIBBFDQIgABA/GiAJIQcgAiEBIAggC2pBAkkNAgNAIAEgA0YEQAwEBQJAIActAABBAkcNACABEB8gDUYNACAHQQA6AAAgC0EBayELCyAHQQFqIQcgAUEMaiEBDAELAAsABQJAIActAABBAUcNACABIA0QIiwAACERAkAgBgR/IBEFIAQgERDOAQsgDkYEQEEBIRAgARAfIAxHDQIgB0ECOgAAIAtBAWohCwwBCyAHQQA6AAALIAhBAWshCAsgB0EBaiEHIAFBDGohAQwBCwALAAsABSAHQQJBASABEFoiDBs6AAAgB0EBaiEHIAFBDGohASALIAxqIQsgCCAMayEIDAELAAsACxA9AAsgBSAFKAIAQQRyNgIACyAPEDUgCkGAAWokACACC0oBAn8CQCAALQAAIgJFIAIgAS0AACIDR3INAANAIAEtAAEhAyAALQABIgJFDQEgAUEBaiEBIABBAWohACACIANGDQALCyACIANrC4QBAQJ/IwBBoAFrIgQkACAEIAAgBEGeAWogARsiADYClAEgBCABQQFrIgVBACABIAVPGzYCmAEgBEEAQZAB/AsAIARBfzYCTCAEQeIANgIkIARBfzYCUCAEIARBnwFqNgIsIAQgBEGUAWo2AlQgAEEAOgAAIAQgAiADEM0DIARBoAFqJAALuwIBBH8gA0H87QEgAxsiBSgCACEDAkACfwJAIAFFBEAgAw0BQQAPC0F+IAJFDQEaAkAgAwRAIAIhBAwBCyABLQAAIgPAIgRBAE4EQCAABEAgACADNgIACyAEQQBHDwtB3OEBKAIAKAIARQRAQQEgAEUNAxogACAEQf+/A3E2AgBBAQ8LIANBwgFrIgNBMksNASADQQJ0KAKQgQEhAyACQQFrIgRFDQMgAUEBaiEBCyABLQAAIgZBA3YiB0EQayADQRp1IAdqckEHSw0AA0AgBEEBayEEIAZB/wFxQYABayADQQZ0ciIDQQBOBEAgBUEANgIAIAAEQCAAIAM2AgALIAIgBGsPCyAERQ0DIAFBAWoiASwAACIGQUBIDQALCyAFQQA2AgBBiOoBQRk2AgBBfwsPCyAFIAM2AgBBfgsNACAAKAIAIAEoAgBJCwcAIABBC0kLJgAgACAAKAIYRSAAKAIQIAFyciIBNgIQIAAoAhQgAXEEQBA9AAsLBwAgAEEISwscAQF/IAAoAgAhAiAAIAEoAgA2AgAgASACNgIACwwAIABBDGoQ2gEgAAsIACAAKAIQRQsIACAAEIkCGgusCwEHfyAAIAFqIQUCQAJAIAAoAgQiAkEBcQ0AIAJBAnFFDQEgACgCACICIAFqIQECQAJAAkAgACACayIAQaDqASgCAEcEQCAAKAIMIQMgAkH/AU0EQCADIAAoAggiBEcNAkGM6gFBjOoBKAIAQX4gAkEDdndxNgIADAULIAAoAhghBiAAIANHBEAgACgCCCICIAM2AgwgAyACNgIIDAQLIAAoAhQiBAR/IABBFGoFIAAoAhAiBEUNAyAAQRBqCyECA0AgAiEHIAQiA0EUaiECIAMoAhQiBA0AIANBEGohAiADKAIQIgQNAAsgB0EANgIADAMLIAUoAgQiAkEDcUEDRw0DQZTqASABNgIAIAUgAkF+cTYCBCAAIAFBAXI2AgQgBSABNgIADwsgBCADNgIMIAMgBDYCCAwCC0EAIQMLIAZFDQACQCAAKAIcIgJBAnQiBCgCvOwBIABGBEAgBEG87AFqIAM2AgAgAw0BQZDqAUGQ6gEoAgBBfiACd3E2AgAMAgsCQCAAIAYoAhBGBEAgBiADNgIQDAELIAYgAzYCFAsgA0UNAQsgAyAGNgIYIAAoAhAiAgRAIAMgAjYCECACIAM2AhgLIAAoAhQiAkUNACADIAI2AhQgAiADNgIYCwJAAkACQAJAIAUoAgQiAkECcUUEQEGk6gEoAgAgBUYEQEGk6gEgADYCAEGY6gFBmOoBKAIAIAFqIgE2AgAgACABQQFyNgIEIABBoOoBKAIARw0GQZTqAUEANgIAQaDqAUEANgIADwtBoOoBKAIAIgggBUYEQEGg6gEgADYCAEGU6gFBlOoBKAIAIAFqIgE2AgAgACABQQFyNgIEIAAgAWogATYCAA8LIAJBeHEgAWohASAFKAIMIQMgAkH/AU0EQCAFKAIIIgQgA0YEQEGM6gFBjOoBKAIAQX4gAkEDdndxNgIADAULIAQgAzYCDCADIAQ2AggMBAsgBSgCGCEGIAMgBUcEQCAFKAIIIgIgAzYCDCADIAI2AggMAwsgBSgCFCIEBH8gBUEUagUgBSgCECIERQ0CIAVBEGoLIQIDQCACIQcgBCIDQRRqIQIgAygCFCIEDQAgA0EQaiECIAMoAhAiBA0ACyAHQQA2AgAMAgsgBSACQX5xNgIEIAAgAUEBcjYCBCAAIAFqIAE2AgAMAwtBACEDCyAGRQ0AAkAgBSgCHCICQQJ0IgQoArzsASAFRgRAIARBvOwBaiADNgIAIAMNAUGQ6gFBkOoBKAIAQX4gAndxNgIADAILAkAgBSAGKAIQRgRAIAYgAzYCEAwBCyAGIAM2AhQLIANFDQELIAMgBjYCGCAFKAIQIgIEQCADIAI2AhAgAiADNgIYCyAFKAIUIgJFDQAgAyACNgIUIAIgAzYCGAsgACABQQFyNgIEIAAgAWogATYCACAAIAhHDQBBlOoBIAE2AgAPCyABQf8BTQRAIAFBeHFBtOoBaiECAn9BjOoBKAIAIgNBASABQQN2dCIBcUUEQEGM6gEgASADcjYCACACDAELIAIoAggLIQEgAiAANgIIIAEgADYCDCAAIAI2AgwgACABNgIIDwtBHyEDIAFB////B00EQCABQSYgAUEIdmciAmt2QQFxIAJBAXRrQT5qIQMLIAAgAzYCHCAAQgA3AhAgA0ECdEG87AFqIQICQAJAQZDqASgCACIEQQEgA3QiB3FFBEBBkOoBIAQgB3I2AgAgAiAANgIAIAAgAjYCGAwBCyABQRkgA0EBdmtBACADQR9HG3QhAyACKAIAIQIDQCACIgQoAgRBeHEgAUYNAiADQR12IQIgA0EBdCEDIAQgAkEEcWoiBygCECICDQALIAcgADYCECAAIAQ2AhgLIAAgADYCDCAAIAA2AggPCyAEKAIIIgEgADYCDCAEIAA2AgggAEEANgIYIAAgBDYCDCAAIAE2AggLC40IAQt/IABFBEAgARA0DwsgAUFATwRAQYjqAUEwNgIAQQAPCwJ/QRAgAUELakF4cSABQQtJGyEGIABBCGsiBCgCBCIJQXhxIQgCQCAJQQNxRQRAIAZBgAJJDQEgBkEEaiAITQRAIAQhAiAIIAZrQeztASgCAEEBdE0NAgtBAAwCCyAEIAhqIQcCQCAGIAhNBEAgCCAGayIDQRBJDQEgBCAGIAlBAXFyQQJyNgIEIAQgBmoiAiADQQNyNgIEIAcgBygCBEEBcjYCBCACIAMQ2wEMAQtBpOoBKAIAIAdGBEBBmOoBKAIAIAhqIgggBk0NAiAEIAYgCUEBcXJBAnI2AgQgBCAGaiIDIAggBmsiAkEBcjYCBEGY6gEgAjYCAEGk6gEgAzYCAAwBC0Gg6gEoAgAgB0YEQEGU6gEoAgAgCGoiAyAGSQ0CAkAgAyAGayICQRBPBEAgBCAGIAlBAXFyQQJyNgIEIAQgBmoiCCACQQFyNgIEIAMgBGoiAyACNgIAIAMgAygCBEF+cTYCBAwBCyAEIAlBAXEgA3JBAnI2AgQgAyAEaiICIAIoAgRBAXI2AgRBACECQQAhCAtBoOoBIAg2AgBBlOoBIAI2AgAMAQsgBygCBCIDQQJxDQEgA0F4cSAIaiILIAZJDQEgCyAGayEMIAcoAgwhBQJAIANB/wFNBEAgBygCCCICIAVGBEBBjOoBQYzqASgCAEF+IANBA3Z3cTYCAAwCCyACIAU2AgwgBSACNgIIDAELIAcoAhghCgJAIAUgB0cEQCAHKAIIIgIgBTYCDCAFIAI2AggMAQsCQCAHKAIUIgIEfyAHQRRqBSAHKAIQIgJFDQEgB0EQagshCANAIAghAyACIgVBFGohCCACKAIUIgINACAFQRBqIQggBSgCECICDQALIANBADYCAAwBC0EAIQULIApFDQACQCAHKAIcIgNBAnQiAigCvOwBIAdGBEAgAkG87AFqIAU2AgAgBQ0BQZDqAUGQ6gEoAgBBfiADd3E2AgAMAgsCQCAHIAooAhBGBEAgCiAFNgIQDAELIAogBTYCFAsgBUUNAQsgBSAKNgIYIAcoAhAiAgRAIAUgAjYCECACIAU2AhgLIAcoAhQiAkUNACAFIAI2AhQgAiAFNgIYCyAMQQ9NBEAgBCAJQQFxIAtyQQJyNgIEIAQgC2oiAiACKAIEQQFyNgIEDAELIAQgBiAJQQFxckECcjYCBCAEIAZqIgMgDEEDcjYCBCAEIAtqIgIgAigCBEEBcjYCBCADIAwQ2wELIAQhAgsgAgsiAgRAIAJBCGoPCyABEDQiBEUEQEEADwsgBCAAQXxBeCAAQQRrKAIAIgJBA3EbIAJBeHFqIgIgASABIAJLGxBxGiAAEC0gBAsWACAARQRAQQAPC0GI6gEgADYCAEF/C30BAn8jAEEQayIBJAAgAUEKOgAPAkACQCAAKAIQIgIEfyACBSAAEN8BDQIgACgCEAsgACgCFCICRg0AIAAoAlBBCkYNACAAIAJBAWo2AhQgAkEKOgAADAELIAAgAUEPakEBIAAoAiQRAwBBAUcNACABLQAPGgsgAUEQaiQAC1kBAX8gACAAKAJIIgFBAWsgAXI2AkggACgCACIBQQhxBEAgACABQSByNgIAQX8PCyAAQgA3AgQgACAAKAIsIgE2AhwgACABNgIUIAAgASAAKAIwajYCEEEAC+IBAQJ/IAJBAEchAwJAAkACQCAAQQNxRSACRXINACABQf8BcSEEA0AgAC0AACAERg0CIAJBAWsiAkEARyEDIABBAWoiAEEDcUUNASACDQALCyADRQ0BIAFB/wFxIgMgAC0AAEYgAkEESXJFBEAgA0GBgoQIbCEDA0BBgIKECCAAKAIAIANzIgRrIARyQYCBgoR4cUGAgYKEeEcNAiAAQQRqIQAgAkEEayICQQNLDQALCyACRQ0BCyABQf8BcSEBA0AgASAALQAARgRAIAAPCyAAQQFqIQAgAkEBayICDQALC0EACwIACwQAQQELoBABFn8jAEFAaiIGQgA3AzAgBkIANwM4IAZCADcDICAGQgA3AygCQAJAAn8CQAJ/IAIEQCACQQRPBEAgAUEGaiEIIAFBBGohDSABQQJqIQsgAkF8cSEMA0AgBkEgaiIPIAEgCkEBdCIJai8BAEEBdGoiESARLwEAQQFqOwEAIAkgC2ovAQBBAXQgD2oiESARLwEAQQFqOwEAIAkgDWovAQBBAXQgD2oiESARLwEAQQFqOwEAIAggCWovAQBBAXQgD2oiCSAJLwEAQQFqOwEAIApBBGohCiAOQQRqIg4gDEcNAAsLIAJBA3EiCQRAA0AgBkEgaiABIApBAXRqLwEAQQF0aiIIIAgvAQBBAWo7AQAgCkEBaiEKIAdBAWoiByAJRw0ACwsgBCgCACIKIAYvAT4iEEUNARpBDyELDAILIAQoAgALIQpBACEQIAYvATwEQEEOIQsMAQsgBi8BOgRAQQ0hCwwBCyAGLwE4BEBBDCELDAELIAYvATYEQEELIQsMAQsgBi8BNARAQQohCwwBCyAGLwEyBEBBCSELDAELIAYvATAEQEEIIQsMAQsgBi8BLgRAQQchCwwBCyAGLwEsBEBBBiELDAELIAYvASoEQEEFIQsMAQsgBi8BKARAQQQhCwwBCyAGLwEmBEBBAyELDAELIAYvASQEQEECIQsMAQsgBi8BIkUEQCADIAMoAgAiAEEEajYCACAAQcACNgEAIAMgAygCACIAQQRqNgIAIABBwAI2AQBBASEMDAMLIApBAEchCUEBIQtBASEKQQAMAQsgCiALIAogC0kbIQlBASEKAkADQCAGQSBqIApBAXRqLwEADQEgCkEBaiIKIAtHDQALIAshCgtBAQshD0F/IQcgBi8BIiIIQQJLDQFBBCAIQQF0a0H+/wNxIAYvASQiDWsiDkEASA0BIA5BAXQgBi8BJiIOayIMQQBIDQEgDEEBdCAGLwEoIgxrIhFBAEgNASARQQF0IAYvASoiEWsiGEEASA0BIBhBAXQgBi8BLCIYayISQQBIDQEgEkEBdCAGLwEuIhJrIhNBAEgNASATQQF0IAYvATAiE2siFEEASA0BIBRBAXQgBi8BMiIUayIVQQBIDQEgFUEBdCAGLwE0IhVrIhdBAEgNASAXQQF0IAYvATYiF2siFkEASA0BIBZBAXQgBi8BOCIWayIZQQBIDQEgGUEBdCAGLwE6IhlrIhpBAEgNASAaQQF0IAYvATwiGmsiG0EASA0BIBtBAXQiGyAQSSAQIBtHQQAgAEUgD3Ibcg0BIAkgCkshEEEAIQcgBkEAOwECIAYgCDsBBCAGIAggDWoiCDsBBiAGIAggDmoiCDsBCCAGIAggDGoiCDsBCiAGIAggEWoiCDsBDCAGIAggGGoiCDsBDiAGIAggEmoiCDsBECAGIAggE2oiCDsBEiAGIAggFGoiCDsBFCAGIAggFWoiCDsBFiAGIAggF2oiCDsBGCAGIAggFmoiCDsBGiAGIAggGWoiCDsBHCAGIAggGmo7AR4CQCACRQ0AIAJBAUcEQCACQX5xIQhBACEOA0AgASAHQQF0ai8BACINBEAgBiANQQF0aiINIA0vAQAiDUEBajsBACAFIA1BAXRqIAc7AQALIAEgB0EBciINQQF0ai8BACIMBEAgBiAMQQF0aiIMIAwvAQAiDEEBajsBACAFIAxBAXRqIA07AQALIAdBAmohByAOQQJqIg4gCEcNAAsLIAJBAXFFDQAgASAHQQF0ai8BACICRQ0AIAYgAkEBdGoiAiACLwEAIgJBAWo7AQAgBSACQQF0aiAHOwEACyAJIAogEBshDEEUIRJBACEXIAUiCCERQQAhEwJAAkACQCAADgICAAELQQEhByAMQQlLDQNBgQIhEkHA7QAhEUGA7QAhCEEBIRMMAQsgAEECRiEXQQAhEkHA7gAhEUGA7gAhCCAAQQJHBEAMAQtBASEHIAxBCUsNAgtBASAMdCIUQQFrIRkgAygCACEVQQAhAiAMIQlBACEAQQAhEEF/IQ0DQEEBIAl0IRgCQANAAn9BACASIAUgAkEBdGovAQAiCUEBaksNABogCSASSQRAQQAhCUHgAAwBCyAIIAkgEmtBAXQiB2ovAQAhCSAHIBFqLQAACyEOQX8gCiAAayIPdCEaIBUgECAAdkECdGohGyAYIQcDQCAbIAcgGmoiB0ECdGoiFiAJOwECIBYgDzoAASAWIA46AAAgBw0AC0EBIApBAWt0IQ4DQCAOIgdBAXYhDiAHIBBxDQALIAZBIGogCkEBdGoiCSAJLwEAQQFrIgk7AQAgB0EBayAQcSAHakEAIAcbIRAgAkEBaiECIAlB//8DcUUEQCAKIAtGDQIgASAFIAJBAXRqLwEAQQF0ai8BACEKCyAKIAxNDQAgECAZcSIOIA1GDQALQQEgCiAAIAwgABsiAGsiCXQhDyAKIAtJBEAgAEEBaiEWIAsgAGshDSAKIQcCQANAIA8gBkEgaiAHQQF0ai8BAGsiB0EATA0BIAdBAXQhDyAJIBZqIQcgCUEBaiEJIAcgC0kNAAsgDSEJC0EBIAl0IQ8LQQEhByATIA8gFGoiFEHUBktxIBcgFEHQBEtxcg0DIAMoAgAiDSAOQQJ0aiIHIAw6AAEgByAJOgAAIAcgFSAYQQJ0aiIVIA1rQQJ2OwECIA4hDQwBCwsgEARAIBUgEEECdGoiAEEAOwECIAAgDzoAASAAQcAAOgAACyADIAMoAgAgFEECdGo2AgALIAQgDDYCAEEAIQcLIAcLqgEBA38gASwAC0EATgRAIAAgASkCADcCACAAIAEoAgg2AggPCyABKAIAIQQgASgCBCECIwBBEGsiAyQAAkACQAJAIAIQ1AEEQCAAIgEgAhBQDAELIAJB9////wdLDQEgA0EIaiACEJ8BQQFqEJ4BIAMoAgwaIAAgAygCCCIBNgIAIAAgAygCDBBcIAAgAjYCBAsgASAEIAJBAWoQTSADQRBqJAAMAQsQWwALC0sBAn8gACgCBCIHQQh1IQYgB0EBcQRAIAMoAgAgBhDoASEGCyAAKAIAIgAgASACIAMgBmogBEECIAdBAnEbIAUgACgCACgCFBEKAAsgAAJAIAEgACgCBEcNACAAKAIcQQFGDQAgACACNgIcCwuaAQAgAEEBOgA1AkAgAiAAKAIERw0AIABBAToANAJAIAAoAhAiAkUEQCAAQQE2AiQgACADNgIYIAAgATYCECADQQFHDQIgACgCMEEBRg0BDAILIAEgAkYEQCAAKAIYIgJBAkYEQCAAIAM2AhggAyECCyAAKAIwQQFHDQIgAkEBRg0BDAILIAAgACgCJEEBajYCJAsgAEEBOgA2CwsKACAAIAFqKAIAC3YBAX8gACgCJCIDRQRAIAAgAjYCGCAAIAE2AhAgAEEBNgIkIAAgACgCODYCFA8LAkACQCAAKAIUIAAoAjhHDQAgACgCECABRw0AIAAoAhhBAkcNASAAIAI2AhgPCyAAQQE6ADYgAEECNgIYIAAgA0EBajYCJAsLrQEBA38jAEEQayICJAAgAiABNgIMAkACQAJ/IAAQRyIERQRAQQEhASAAEF4MAQsgABB+QQFrIQEgACgCBAsiAyABRgRAIAAgAUEBIAEgARDoAiAAECMaDAELIAAQIxogBA0AIAAiASADQQFqEFAMAQsgACgCACEBIAAgA0EBajYCBAsgASADQQJ0aiIAIAJBDGoQViACQQA2AgggAEEEaiACQQhqEFYgAkEQaiQACwUAED0ACycBAX8gACgCACEBIwBBEGsiACQAIAAgATYCDCAAKAIMIABBEGokAAsXACAAKAIIEC5HBEAgACgCCBCgAwsgAAs0AQF/IwBBEGsiAyQAIAMgAjYCDCADQQhqIANBDGoQYyAAIAEQlgIhABBiIANBEGokACAAC40BAQN/IAEoAgQgACgCACICIAAoAgQiA2tqIQQgAyACayIDBEAgBCACIAP8CgAACyABIAQ2AgQgACAAKAIAIgI2AgQgACABKAIENgIAIAEgAjYCBCAAKAIEIQIgACABKAIINgIEIAEgAjYCCCAAKAIIIQIgACABKAIMNgIIIAEgAjYCDCABIAEoAgQ2AgALMwEBfyMAQRBrIgIkACACIAAoAgA2AgwgAiACKAIMIAFBAnRqNgIMIAIoAgwgAkEQaiQACxkBAX9BASEBIAAQRwR/IAAQfkEBawVBAQsLBwAgAEEEagswAQF/IwBBEGsiAiQAIAIgACgCADYCDCACIAIoAgwgAWo2AgwgAigCDCACQRBqJAAL9wEBBX8jAEEQayIGJAAgBkEMaiIIIAZBCGogABBVKAIAELwBIwBBEGsiBSQAAkBB9////wcgAWsgAk8EQCAAECMhByAFQQRqIgkgAUHz////A0kEfyAFIAFBAXQ2AgwgBSABIAJqNgIEIAkgBUEMahCgASgCABCfAUEBagVB9////wcLEJ4BIAUoAgQhAiAFKAIIGiAEBEAgAiAHIAQQTQsgAyAERwRAIAIgBGogBCAHaiADIARrEE0LIAFBCkcEQCAHEIsCCyAAIAI2AgAgACAFKAIIEFwgBUEQaiQADAELEFsACyAAIAM2AgQgCBC7ASAGQRBqJAALCgAgASAAa0ECdQsPACAAIAAoAgBBBGo2AgALIAEBfyMAQRBrIgEkACABQQxqIAAQVSgCACABQRBqJAALDwAgACAAKAIAQQFqNgIAC1kBAn8jAEEQayIDJAAgAigCACEEIAACfyABIABrQQJ1IgIEQANAIAAgBCAAKAIARg0CGiAAQQRqIQAgAkEBayICDQALC0EACyIAIAEgABsQjgEgA0EQaiQAC/gDAQF/IwBBEGsiDCQAIAwgADYCDAJAAkAgACAFRgRAIAEtAABBAUcNAUEAIQAgAUEAOgAAIAQgBCgCACIBQQFqNgIAIAFBLjoAACAHEB9FDQIgCSgCACIBIAhrQZ8BSg0CIAooAgAhAiAJIAFBBGo2AgAgASACNgIADAILAkACQCAAIAZHDQAgBxAfRQ0AIAEtAABBAUcNAiAJKAIAIgAgCGtBnwFKDQEgCigCACEBIAkgAEEEajYCACAAIAE2AgBBACEAIApBADYCAAwDCyALIAtB8ABqIAxBDGoQ+QEgC2siAEECdSIGQRtKDQEgBkHQnwFqLAAAIQUCQAJAIABBe3EiAEHYAEcEQCAAQeAARw0BIAMgBCgCACIBRwRAQX8hACABQQFrLAAAEJ0BIAIsAAAQnQFHDQYLIAQgAUEBajYCACABIAU6AAAMAwsgAkHQADoAAAwBCyAFEJ0BIgAgAiwAAEcNACACIAAQsQM6AAAgAS0AAEEBRw0AIAFBADoAACAHEB9FDQAgCSgCACIAIAhrQZ8BSg0AIAooAgAhASAJIABBBGo2AgAgACABNgIACyAEIAQoAgAiAEEBajYCACAAIAU6AABBACEAIAZBFUoNAiAKIAooAgBBAWo2AgAMAgtBACEADAELQX8hAAsgDEEQaiQAIAALUAECfyMAQRBrIgYkACAGQQxqIgUgARAnIAUQSEHQnwFB7J8BIAIQbyADIAUQmQEiARB4NgIAIAQgARBZNgIAIAAgARBYIAUQJSAGQRBqJAALGAAgAEGQ9wA2AgAgAEEgahAgGiAAEJQCCy8BAX8jAEEQayIDJAAgACAAIAIsAAAgASAAaxDgASIAIAEgABsQjgEgA0EQaiQAC/ADAQF/IwBBEGsiDCQAIAwgADoADwJAAkAgACAFRgRAIAEtAABBAUcNAUEAIQAgAUEAOgAAIAQgBCgCACIBQQFqNgIAIAFBLjoAACAHEB9FDQIgCSgCACIBIAhrQZ8BSg0CIAooAgAhAiAJIAFBBGo2AgAgASACNgIADAILAkACQCAAIAZHDQAgBxAfRQ0AIAEtAABBAUcNAiAJKAIAIgAgCGtBnwFKDQEgCigCACEBIAkgAEEEajYCACAAIAE2AgBBACEAIApBADYCAAwDCyALIAtBHGogDEEPahD9ASALayIFQRtKDQEgBUHQnwFqLAAAIQYCQAJAAkACQCAFQX5xQRZrDgMBAgACCyADIAQoAgAiAUcEQEF/IQAgAUEBaywAABCdASACLAAAEJ0BRw0GCyAEIAFBAWo2AgAgASAGOgAADAMLIAJB0AA6AAAMAQsgBhCdASIAIAIsAABHDQAgAiAAELEDOgAAIAEtAABBAUcNACABQQA6AAAgBxAfRQ0AIAkoAgAiACAIa0GfAUoNACAKKAIAIQEgCSAAQQRqNgIAIAAgATYCAAsgBCAEKAIAIgBBAWo2AgAgACAGOgAAQQAhACAFQRVKDQIgCiAKKAIAQQFqNgIADAILQQAhAAwBC0F/IQALIAxBEGokACAAC1ABAn8jAEEQayIGJAAgBkEMaiIFIAEQJyAFEElB0J8BQeyfASACEHkgAyAFEJsBIgEQeDoAACAEIAEQWToAACAAIAEQWCAFECUgBkEQaiQAC34CAn8CfiMAQaABayIEJAAgBCABNgI8IAQgATYCFCAEQX82AhggBEEQaiIFQgAQZCAEIAUgA0EBEKgDIAQpAwghBiAEKQMAIQcgAgRAIAIgBCgCiAEgASAEKAIUIAQoAjxramo2AgALIAAgBjcDCCAAIAc3AwAgBEGgAWokAAsJACAAQQQQqAILDQAgACABIAJCfxCEAgucAQEDf0E1IQECQCAAKAIcIgIgACgCGCIDQQZqQQdwa0EHakEHbiADIAJrIgJB8QJqQQdwQQNJaiIDQTVHBEAgAyIBDQFBNCEBAkACQCACQQZqQQdwQQRrDgIBAAMLIAAoAhRBkANvQQFrEJ0DRQ0CC0E1DwsCQAJAIAJB8wJqQQdwQQNrDgIAAgELIAAoAhQQnQMNAQtBASEBCyABC5sEAgd/BH4jAEEQayIIJAACQAJAAkAgAkEkTARAIAAtAAAiBQ0BIAAhBAwCC0GI6gFBHDYCAEIAIQMMAgsgACEEAkADQCAFwBB9RQ0BIAQtAAEhBSAEQQFqIQQgBQ0ACwwBCwJAIAVB/wFxIgZBK2sOAwABAAELQX9BACAGQS1GGyEHIARBAWohBAsCfwJAIAJBEHJBEEcNACAELQAAQTBHDQBBASEJIAQtAAFB3wFxQdgARgRAIARBAmohBEEQDAILIARBAWohBCACQQggAhsMAQsgAkEKIAIbCyIKrSEMQQAhAgNAAkACQCAELQAAIgZBMGsiBUH/AXFBCkkNACAGQeEAa0H/AXFBGU0EQCAGQdcAayEFDAELIAZBwQBrQf8BcUEZSw0BIAZBN2shBQsgCiAFQf8BcUwNACAIIAxCACALQgAQQEEBIQYCQCAIKQMIQgBSDQAgCyAMfiINIAWtQv8BgyIOQn+FVg0AIA0gDnwhC0EBIQkgAiEGCyAEQQFqIQQgBiECDAELCyABBEAgASAEIAAgCRs2AgALAkACQCACBEBBiOoBQcQANgIAIAdBACADQgGDIgxQGyEHIAMhCwwBCyADIAtWDQEgA0IBgyEMCyAMpyAHckUEQEGI6gFBxAA2AgAgA0IBfSEDDAILIAMgC1oNAEGI6gFBxAA2AgAMAQsgCyAHrCIDhSADfSEDCyAIQRBqJAAgAwuIAQEDfyABKAIEIAAoAgQgACgCACIEayICayEDIAIEQCADIAQgAvwKAAALIAEgAzYCBCAAIAAoAgAiAjYCBCAAIAEoAgQ2AgAgASACNgIEIAAoAgQhAiAAIAEoAgg2AgQgASACNgIIIAAoAgghAiAAIAEoAgw2AgggASACNgIMIAEgASgCBDYCAAuaAwEIfwJAIAAiAUEDcQRAA0AgAS0AACICRSACQT1Gcg0CIAFBAWoiAUEDcQ0ACwsCQAJAQYCChAggASgCACIDayADckGAgYKEeHFBgIGChHhHDQADQEGAgoQIIANBvfr06QNzIgJrIAJyQYCBgoR4cUGAgYKEeEcNASABKAIEIQMgAUEEaiICIQEgA0GAgoQIIANrckGAgYKEeHFBgIGChHhGDQALDAELIAEhAgsDQCACIgEtAAAiA0UNASABQQFqIQIgA0E9Rw0ACwsgACABRgRAQQAPCwJAIAAgASAAayIDai0AAA0AQYDuASgCACIERQ0AIAQoAgAiAUUNAANAAkACfyAAIQJBACADIgZFDQAaIAAtAAAiBQR/AkADQCAFIAEtAAAiB0cgB0VyDQEgBkEBayIGRQ0BIAFBAWohASACLQABIQUgAkEBaiECIAUNAAtBACEFCyAFBUEACyABLQAAawtFBEAgBCgCACADaiIBLQAAQT1GDQELIAQoAgQhASAEQQRqIQQgAQ0BDAILCyABQQFqIQgLIAgLSgEBfyAAIAM2AhAgAEEANgIMIAEEQCABELMCIQQLIAAgBDYCACAAIAQgAkECdGoiAjYCCCAAIAQgAUECdGo2AgwgACACNgIEIAALRAEBfyMAQRBrIgUkACAFIAEgAiADIARCgICAgICAgICAf4UQSiAFKQMAIQEgACAFKQMINwMIIAAgATcDACAFQRBqJAALcgECfyAAQYj+ADYCACAAKAIcBEAgACgCKCEBA0AgAQRAQQAgACABQQFrIgFBAnQiAiAAKAIkaigCACAAKAIgIAJqKAIAEQUADAELCyAAQRxqECUgACgCIBAtIAAoAiQQLSAAKAIwEC0gACgCPBAtCyAACwcAIAEgAGsLDABBARDWARogABAtCwkAIAAQsQEQLQsTACAAIAEgAiAAKAIAKAIwEQMACwkAIAAQ2AEQLQsMACAAQQRqENoBIAALDAAgAEEIahDaASAACygBAn8jAEEQayICJAAgASgCACAAKAIASCEDIAJBEGokACABIAAgAxsLEAAgACABNwMIIABCADcDAAsCAAsUACAAQZj1ADYCACAAQQRqECUgAAvyAwICfgV/IwBBIGsiBSQAIAFC////////P4MhAgJ+IAFCMIhC//8BgyIDpyIEQYH4AGtB/Q9NBEAgAkIEhiAAQjyIhCECIARBgPgAa60hAwJAIABC//////////8PgyIAQoGAgICAgICACFoEQCACQgF8IQIMAQsgAEKAgICAgICAgAhSDQAgAkIBgyACfCECC0IAIAIgAkL/////////B1YiBBshACAErSADfAwBCyAAIAKEUCADQv//AVJyRQRAIAJCBIYgAEI8iIRCgICAgICAgASEIQBC/w8MAQsgBEH+hwFLBEBCACEAQv8PDAELQYD4AEGB+AAgA1AiBxsiCCAEayIGQfAASgRAQgAhAEIADAELIAVBEGogACACIAJCgICAgICAwACEIAcbIgJBgAEgBmsQRCAFIAAgAiAGEIoBIAUpAwhCBIYgBSkDACICQjyIhCEAAkAgBCAIRyAFKQMQIAUpAxiEQgBSca0gAkL//////////w+DhCICQoGAgICAgICACFoEQCAAQgF8IQAMAQsgAkKAgICAgICAgAhSDQAgAEIBgyAAfCEACyAAQoCAgICAgIAIhSAAIABC/////////wdWIgQbIQAgBK0LIQIgBUEgaiQAIAFCgICAgICAgICAf4MgAkI0hoQgAIS/C4kCAAJAIAAEfyABQf8ATQ0BAkBB3OEBKAIAKAIARQRAIAFBgH9xQYC/A0YNAwwBCyABQf8PTQRAIAAgAUE/cUGAAXI6AAEgACABQQZ2QcABcjoAAEECDwsgAUGAQHFBgMADRyABQYCwA09xRQRAIAAgAUE/cUGAAXI6AAIgACABQQx2QeABcjoAACAAIAFBBnZBP3FBgAFyOgABQQMPCyABQYCABGtB//8/TQRAIAAgAUE/cUGAAXI6AAMgACABQRJ2QfABcjoAACAAIAFBBnZBP3FBgAFyOgACIAAgAUEMdkE/cUGAAXI6AAFBBA8LC0GI6gFBGTYCAEF/BUEBCw8LIAAgAToAAEEBCzABAX8jAEEQayICJAAgAiABKAIANgIAIAAgAhByEH9BoPEAKAIAEGEaIAJBEGokAAsRACACBEAgACABwCAC/AsACwupAQEBfEQAAAAAAADwPyEBAkAgAEGACE4EQEQAAAAAAADgfyEBIABB/w9JBEAgAEH/B2shAAwCC0QAAAAAAADwfyEBQf0XIAAgAEH9F08bQf4PayEADAELIABBgXhKDQBEAAAAAAAAYAMhASAAQbhwSwRAIABByQdqIQAMAQtEAAAAAAAAAAAhAUHwaCAAIABB8GhNG0GSD2ohAAsgASAAQf8Haq1CNIa/ogtEAQF/IwBBEGsiAiQAIAAoAgAhACACIAE2AgggAiAANgIEIAJB/BQ2AgBByAsgAhByEH9BoPEAKAIAEGEaIAJBEGokAAt4AQN/AkAgAEUNACAAKAIgRQ0AIAAoAiQiAkUNACAAKAIcIgFFDQAgASgCACAARw0AIAEoAgRBtP4Aa0EfSw0AIAEoAjgiAwRAIAAoAiggAyACEQEAIAAoAiQhAiAAKAIcIQELIAAoAiggASACEQEAIABBADYCHAsL6QMAQZTZAUGFExAcQazZAUGUDkEBQQAQG0G42QFB8QxBAUGAf0H/ABACQdDZAUHqDEEBQYB/Qf8AEAJBxNkBQegMQQFBAEH/ARACQdzZAUGjCUECQYCAfkH//wEQAkHo2QFBmglBAkEAQf//AxACQfTZAUGyCUEEQYCAgIB4Qf////8HEAJBgNoBQakJQQRBAEF/EAJBjNoBQfMPQQRBgICAgHhB/////wcQAkGY2gFB6g9BBEEAQX8QAkGk2gFB4A9BCEKAgICAgICAgIB/Qv///////////wAQDUGw2gFB1w9BCEIAQn8QDUG82gFBogpBBBAMQcjaAUGMEUEIEAxBmC1BkhAQGkHgLUEEQfgPEAVBqC5BAkGeEBAFQfQuQQRBrRAQBUHMJhAZQcAvQQBB9RkQAEHoL0EAQboaEABBkDBBAUGTGhAAQbgwQQJBwhYQAEHgMEEDQeEWEABBiDFBBEGJFxAAQbAxQQVBphcQAEHYMUEEQd8aEABBgDJBBUH9GhAAQegvQQBBjBgQAEGQMEEBQesXEABBuDBBAkHOGBAAQeAwQQNBrBgQAEGIMUEEQdQZEABBsDFBBUGyGRAAQagyQQhBkRkQAEHQMkEJQe8YEABB+DJBBkHMFxAAQaAzQQdBpBsQAAsxAQF/IAAoAgwiASAAKAIQRgRAIAAgACgCACgCKBEAAA8LIAAgAUEBajYCDCABLQAAC2ABBH8gASAAKAIEIgYgA2siB2ohBCAGIQUDQCACIARNBEAgACAFNgIEIAdFIAMgBkZyRQRAIAYgB2sgASAH/AoAAAsFIAUgBC0AADoAACAFQQFqIQUgBEEBaiEEDAELCwsQACAAKAIAIgAEQCAAEB0LCzUBAX8gASAAKAIEIgJBAXVqIQEgACgCACEAIAEgAkEBcQR/IAEoAgAgAGooAgAFIAALEQAAC6ABAQR/IwBBgAJrIgAkACAAIAQ3A/gBIABCJTcD8AEgAEHwAWoiB0EBckGZDiAFIAIoAgQQywEgAEHQAWoiBiAGEC4gByAAQfgBahCJAyAGaiIIIAIQaSEJIABBBGoiByACECcgBiAJIAggAEEQaiIGIABBDGogAEEIaiAHEIADIAcQJSABIAYgACgCDCAAKAIIIAIgAxCFASAAQYACaiQAC6IBAQN/IwBBkAFrIgAkACAAIAQ2AowBIABCJTcDgAEgAEGAAWoiBkEBckGgDiAFIAIoAgQQywEgAEHzAGoiBCAEQQ0QLiAGIABBjAFqEMoBIARqIgcgAhBpIQggAEEEaiIGIAIQJyAEIAggByAAQRBqIgQgAEEMaiAAQQhqIAYQgAMgBhAlIAEgBCAAKAIMIAAoAgggAiADEIUBIABBkAFqJAALnQEBBH8jAEHwAGsiACQAIAAgBDcDaCAAQiU3A2AgAEHgAGoiB0EBckGZDiAFIAIoAgQQywEgAEFAayIGIAYQLiAHIABB6ABqEIkDIAZqIgggAhBpIQkgAEEEaiIHIAIQJyAGIAkgCCAAQRBqIgYgAEEMaiAAQQhqIAcQigMgBxAlIAEgBiAAKAIMIAAoAgggAiADEIABIABB8ABqJAALngEBA38jAEHQAGsiACQAIAAgBDYCTCAAQiU3A0AgAEFAayIGQQFyQaAOIAUgAigCBBDLASAAQTNqIgQgBEENEC4gBiAAQcwAahDKASAEaiIHIAIQaSEIIABBBGoiBiACECcgBCAIIAcgAEEQaiIEIABBDGogAEEIaiAGEIoDIAYQJSABIAQgACgCDCAAKAIIIAIgAxCAASAAQdAAaiQACwcAIAARDwALQgADQCABIAJHBEAgAQJ/IAEsAAAQTARAIAMoAgAgASwAAEECdGooAgAMAQsgAS0AAAs6AAAgAUEBaiEBDAELCyABCz0AA0AgASACRwRAIAEiACAAKAIAEEwEfyADKAIAIAAoAgBBAnRqBSAACygCADYCACAAQQRqIQEMAQsLIAELPwECfyAAKAIEIQMgACgCCCECA0AgAiADRwRAIAAgAiABayICNgIIDAELCyAAKAIAIgIEQCAAKAIMGiACEC0LC0wBAX8CQCABRQ0AIAFBiNgBEFIiAUUNACABKAIIIAAoAghBf3NxDQAgACgCDCABKAIMQQAQO0UNACAAKAIQIAEoAhBBABA7IQILIAILCwBBnBFBABCtAgALgQEBA38gACgCBCIEQQFxIQUCfyABLQA3QQFGBEAgBEEIdSIGIAVFDQEaIAIoAgAgBhDoAQwBCyAEQQh1IAVFDQAaIAEgACgCACgCBDYCOCAAKAIEIQRBACECQQALIQUgACgCACIAIAEgAiAFaiADQQIgBEECcRsgACgCACgCHBEIAAsKACAAIAFBABA7C/gBAQF/IwBBEGsiAiQAIAIgATYCDEGQ1gEoAgAiAiAAIAEQzQMaIAAQqAEgAGpBAWstAABBCkcEQAJAAkAgAigCTCIAQQBOBEAgAEUNAUGU4QEoAgAgAEH/////A3FHDQELAkAgAigCUEEKRg0AIAIoAhQiACACKAIQRg0AIAIgAEEBajYCFCAAQQo6AAAMAgsgAhDeAQwBCyACQcwAaiIBIgAgACgCACIAQf////8DIAAbNgIAAkACQCACKAJQQQpGDQAgAigCFCIAIAIoAhBGDQAgAiAAQQFqNgIUIABBCjoAAAwBCyACEN4BCyABEKwBGgsLEMoDAAsdAQF/IwBBEGsiASQAIAEgADYCAEG9HiABEK0CAAu5AgEDfyMAQSBrIggkAEH3////AyIJIAFBf3NqIAJPBEAgABAjIQogAUHz////AUkEQCAIIAFBAXQ2AhwgCCABIAJqNgIQIAhBEGogCEEcahCgASgCABCQAUEBaiEJCyAIQRxqIAhBGGogABBVKAIAELwBIAhBEGogCRCPASAIKAIQIQIgCCgCFBogBARAIAIgCiAEEGULIAYEQCAEQQJ0IAJqIAcgBhBlCyADIAQgBWoiCWshByADIAlHBEAgBEECdCIDIAJqIAZBAnRqIAMgCmogBUECdGogBxBlCyABQQFqIgFBAkcEQCAKIAEQqQELIAAgAjYCACAAIAgoAhQQXCAAIAQgBmogB2oiADYCBCAIQQA2AgwgAiAAQQJ0aiAIQQxqEFYgCEEcahC7ASAIQSBqJAAPCxBbAAuJAQECfyMAQRBrIgMkACABQff///8HTQRAAkAgARDUAQRAIAAgARBQIAAhBAwBCyADQQhqIAEQnwFBAWoQngEgAygCDBogACADKAIIIgQ2AgAgACADKAIMEFwgACABNgIECyAEIAEgAhCyAiADQQA6AAcgASAEaiADQQdqEF0gA0EQaiQADwsQWwALRAECfyAAECghAyAAEB8hBCACIANNBEAgABAjIgMgASACEE0gACADIAIQwAIPCyAAIAMgAiADayAEQQAgBCACIAEQuQELPQEBfyMAQRBrIgMkACADIAI6AA8DQCABBEAgACADLQAPOgAAIAFBAWshASAAQQFqIQAMAQsLIANBEGokAAsZACAAQYCAgIAETwRAEKoCAAsgAEECdBBTC5IFAQh/QQQgASABQQRNGyEDQQEgACAAQQFNGyEHA0ACQCAHIAMgB2pBAWtBACADa3EiACAAIAdJGyEEQQAhASMAQRBrIggkAAJAIANBA3ENACAEIANwDQACfwJAQTACfyADQQhGBEAgBBA0DAELQRwhASADQQNxIANBBElyDQEgA0ECdiIAIABBAWtxDQFBMEFAIANrIARJDQIaAn9BECEBAkBBEEEQIAMgA0EQTRsiACAAQRBNGyICIAJBAWtxRQRAIAIhAAwBCwNAIAEiAEEBdCEBIAAgAkkNAAsLQUAgAGsgBE0EQEGI6gFBMDYCAEEADAELQQBBECAEQQtqQXhxIARBC0kbIgUgAGpBDGoQNCICRQ0AGiACQQhrIQECQCAAQQFrIAJxRQRAIAEhAAwBCyACQQRrIgkoAgAiBEF4cSAAIAJqQQFrQQAgAGtxQQhrIgIgAEEAIAIgAWtBD00baiIAIAFrIgZrIQIgBEEDcUUEQCABKAIAIQEgACACNgIEIAAgASAGajYCAAwBCyAAIAIgACgCBEEBcXJBAnI2AgQgACACaiICIAIoAgRBAXI2AgQgCSAGIAkoAgBBAXFyQQJyNgIAIAEgBmoiAiACKAIEQQFyNgIEIAEgBhDbAQsCQCAAKAIEIgJBA3FFDQAgAkF4cSIBIAVBEGpNDQAgACAFIAJBAXFyQQJyNgIEIAAgBWoiBCABIAVrIgJBA3I2AgQgACABaiIBIAEoAgRBAXI2AgQgBCACENsBCyAAQQhqCwsiAEUNARogCCAANgIMQQAhAQsgAQshAEEAIAgoAgwgABshAQsgCEEQaiQAIAENAEHk/gEoAgAiAEUNACAAEQwADAELCyABRQRAEOsBCyABCwoAIAEgAGtBDG0LCQAgABAuNgIACyMBAn8gACEBA0AgASICQQRqIQEgAigCAA0ACyACIABrQQJ1Cy8BAX8jAEEQayIDJAACQCAAIAFGBEAgAEEAOgB4DAELIAEgAhCpAQsgA0EQaiQACxAAIAAoAgggACgCAGtBAnULCQAgAEEANgIAC0kBAX8jAEEQayIDJAACQAJAIAJBHksNACABLQB4QQFxDQAgAUEBOgB4DAELIAIQwQIhAQsgA0EQaiQAIAAgAjYCBCAAIAE2AgALOgECfyMAQRBrIgAkACAAQf////8DNgIMIABB/////wc2AgggAEEMaiAAQQhqELUDKAIAIABBEGokAAs0AQF/IwBBEGsiAyQAIAMgARBzNgIMIAMgAhBzNgIIIAAgA0EMaiADQQhqEGYgA0EQaiQAC04BAX8jAEEQayIDJAAgAyABNgIIIAMgADYCDCADIAI2AgRBACEBIANBBGoiACADQQxqENMBRQRAIAAgA0EIahDTASEBCyADQRBqJAAgAQswAQF/IwBBEGsiAyQAIAMgATYCDCADIAI2AgggACADQQxqIANBCGoQZiADQRBqJAALMwEBfyMAQRBrIgMkACAAEB8aIAAgAhCDASADQQA6AA8gASACaiADQQ9qEF0gA0EQaiQACzEAIABB/////wNLBEAQqgIACwJ/IABBAnQhAEEEENYBBEAgAEEEELQCDAELIAAQUwsLCQAgABDtARAtCxUAIABB8KoBNgIAIABBEGoQIBogAAsVACAAQciqATYCACAAQQxqECAaIAALgAMBBH8gAiEAA0ACQCAEIAdNIAAgA09yDQAgACwAACIBQf8BcSEFAn9BASABQQBODQAaIAFBQkkNASABQV9NBEAgAyAAa0ECSA0CIAAtAAFBwAFxQYABRw0CQQIMAQsgAUFvTQRAIAMgAGtBA0gNAiAALQACIAAsAAEhAQJAAkAgBUHtAUcEQCAFQeABRw0BIAFBYHFBoH9GDQIMBQsgAUGgf04NBAwBCyABQb9/Sg0DC0HAAXFBgAFHDQJBAwwBCyADIABrQQRIIAFBdEtyDQEgAC0AAyEGIAAtAAIhCCAALAABIQECQAJAAkACQCAFQfABaw4FAAICAgECCyABQfAAakH/AXFBME8NBAwCCyABQZB/Tg0DDAELIAFBv39KDQILIAhBwAFxQYABRyAGQcABcUGAAUdyIAZBP3EgCEEGdEHAH3EgBUESdEGAgPAAcSABQT9xQQx0cnJyQf//wwBLcg0BQQQLIQEgB0EBaiEHIAAgAWohAAwBCwsgACACawu4BAEEfyMAQRBrIgAkAAJ/IAAgAjYCDCAAIAU2AggCQAJAA0AgAiADTyAFIAZPckUEQCACLAAAIghB/wFxIQECfyAIQQBOBEAgAUH//8MASw0FQQEMAQsgCEFCSQ0EIAhBX00EQEEBIAMgAmtBAkgNBhpBAiEIIAItAAEiCUHAAXFBgAFHDQQgCUE/cSABQQZ0QcAPcXIhAUECDAELIAhBb00EQEEBIQggAyACayIKQQJIDQQgAiwAASEJAkACQCABQe0BRwRAIAFB4AFHDQEgCUFgcUGgf0YNAgwICyAJQaB/SA0BDAcLIAlBv39KDQYLIApBAkYNBCACLQACIghBwAFxQYABRw0FIAhBP3EgAUEMdEGA4ANxIAlBP3FBBnRyciEBQQMMAQsgCEF0Sw0EQQEhCCADIAJrIgpBAkgNAyACLAABIQkCQAJAAkACQCABQfABaw4FAAICAgECCyAJQfAAakH/AXFBME8NBwwCCyAJQZB/Tg0GDAELIAlBv39KDQULIApBAkYNAyACLQACIgtBwAFxQYABRw0EIApBA0YNAyACLQADIgpBwAFxQYABRw0EQQIhCCAKQT9xIAtBBnRBwB9xIAFBEnRBgIDwAHEgCUE/cUEMdHJyciIBQf//wwBLDQNBBAshCCAFIAE2AgAgACACIAhqIgI2AgwgACAFQQRqIgU2AggMAQsLIAIgA0khCAsgCAwBC0ECCyAEIAAoAgw2AgAgByAAKAIINgIAIABBEGokAAv1AwAjAEEQayIAJAACfyAAIAI2AgwgACAFNgIIAkADQAJAIAIgA08EQEEAIQUMAQtBAiEFIAIoAgAiAUH//8MASyABQYBwcUGAsANGcg0AAkAgAUH/AE0EQEEBIQUgBiAAKAIIIgJrQQBMDQIgACACQQFqNgIIIAIgAToAAAwBCyABQf8PTQRAIAYgACgCCCICa0ECSA0EIAAgAkEBajYCCCACIAFBBnZBwAFyOgAAIAAgACgCCCICQQFqNgIIIAIgAUE/cUGAAXI6AAAMAQsgBiAAKAIIIgJrIQUgAUH//wNNBEAgBUEDSA0EIAAgAkEBajYCCCACIAFBDHZB4AFyOgAAIAAgACgCCCICQQFqNgIIIAIgAUEGdkE/cUGAAXI6AAAgACAAKAIIIgJBAWo2AgggAiABQT9xQYABcjoAAAwBCyAFQQRIDQMgACACQQFqNgIIIAIgAUESdkHwAXI6AAAgACAAKAIIIgJBAWo2AgggAiABQQx2QT9xQYABcjoAACAAIAAoAggiAkEBajYCCCACIAFBBnZBP3FBgAFyOgAAIAAgACgCCCICQQFqNgIIIAIgAUE/cUGAAXI6AAALIAAgACgCDEEEaiICNgIMDAELCyAFDAELQQELIAQgACgCDDYCACAHIAAoAgg2AgAgAEEQaiQAC5IDAQR/IAIhAANAAkAgBCAGTSAAIANPcg0AAn8gAEEBaiAALQAAIgHAQQBODQAaIAFBwgFJDQEgAUHfAU0EQCADIABrQQJIDQIgAC0AAUHAAXFBgAFHDQIgAEECagwBCyABQe8BTQRAIAMgAGtBA0gNAiAALQACIAAsAAEhBQJAAkAgAUHtAUcEQCABQeABRw0BIAVBYHFBoH9GDQIMBQsgBUGgf04NBAwBCyAFQb9/Sg0DC0HAAXFBgAFHDQIgAEEDagwBCyADIABrQQRIIAFB9AFLciAEIAZrQQJJcg0BIAAtAAMhByAALQACIQggACwAASEFAkACQAJAAkAgAUHwAWsOBQACAgIBAgsgBUHwAGpB/wFxQTBPDQQMAgsgBUGQf04NAwwBCyAFQb9/Sg0CCyAIQcABcUGAAUcgB0HAAXFBgAFHciAHQT9xIAhBBnRBwB9xIAFBEnRBgIDwAHEgBUE/cUEMdHJyckH//8MAS3INASAGQQFqIQYgAEEEagshACAGQQFqIQYMAQsLIAAgAmsLgQUBBX8jAEEQayIAJAACfyAAIAI2AgwgACAFNgIIAkACQANAIAIgA08gBSAGT3JFBEBBAiEJIAACfyACLQAAIgHAQQBOBEAgBSABOwEAQQEMAQsgAUHCAUkNBCABQd8BTQRAQQEgAyACa0ECSA0GGiACLQABIghBwAFxQYABRw0EIAUgCEE/cSABQQZ0QcAPcXI7AQBBAgwBCyABQe8BTQRAQQEhCSADIAJrIgpBAkgNBCACLAABIQgCQAJAIAFB7QFHBEAgAUHgAUcNASAIQWBxQaB/Rw0IDAILIAhBoH9ODQcMAQsgCEG/f0oNBgsgCkECRg0EIAItAAIiCUHAAXFBgAFHDQUgBSAJQT9xIAhBP3FBBnQgAUEMdHJyOwEAQQMMAQsgAUH0AUsNBEEBIQkgAyACayIKQQJIDQMgAi0AASILwCEIAkACQAJAAkAgAUHwAWsOBQACAgIBAgsgCEHwAGpB/wFxQTBPDQcMAgsgCEGQf04NBgwBCyAIQb9/Sg0FCyAKQQJGDQMgAi0AAiIIQcABcUGAAUcNBCAKQQNGDQMgAi0AAyIKQcABcUGAAUcNBCAGIAVrQQNIDQNBAiEJIApBP3EiCiAIQQZ0IgxBwB9xIAtBDHRBgOAPcSABQQdxIgFBEnRycnJB///DAEsNAyAFIAogDEHAB3FyQYC4A3I7AQIgBSAIQQR2QQNxIAtBAnQiCUHAAXEgAUEIdHIgCUE8cXJyQcD/AGpBgLADcjsBACAFQQJqIQVBBAsgAmoiAjYCDCAAIAVBAmoiBTYCCAwBCwsgAiADSSEJCyAJDAELQQILIAQgACgCDDYCACAHIAAoAgg2AgAgAEEQaiQAC8sFAQJ/IwBBEGsiACQAAn8gACACNgIMIAAgBTYCCAJAAkADQCACIANPBEBBACEFDAILQQIhBQJAAkAgAi8BACIBQf8ATQRAQQEhBSAGIAAoAggiAmtBAEwNBCAAIAJBAWo2AgggAiABOgAADAELIAFB/w9NBEAgBiAAKAIIIgJrQQJIDQUgACACQQFqNgIIIAIgAUEGdkHAAXI6AAAgACAAKAIIIgJBAWo2AgggAiABQT9xQYABcjoAAAwBCyABQf+vA00EQCAGIAAoAggiAmtBA0gNBSAAIAJBAWo2AgggAiABQQx2QeABcjoAACAAIAAoAggiAkEBajYCCCACIAFBBnZBP3FBgAFyOgAAIAAgACgCCCICQQFqNgIIIAIgAUE/cUGAAXI6AAAMAQsgAUH/twNNBEBBASEFIAMgAmtBA0gNBCACLwECIghBgPgDcUGAuANHDQIgBiAAKAIIIglrQQRIDQQgCEH/B3EgAUEKdEGA+ANxIAFBwAdxIgVBCnRyckH//z9LDQIgACACQQJqNgIMIAAgCUEBajYCCCAJIAVBBnZBAWoiAkECdkHwAXI6AAAgACAAKAIIIgVBAWo2AgggBSACQQR0QTBxIAFBAnZBD3FyQYABcjoAACAAIAAoAggiAkEBajYCCCACIAhBBnZBD3EgAUEEdEEwcXJBgAFyOgAAIAAgACgCCCIBQQFqNgIIIAEgCEE/cUGAAXI6AAAMAQsgAUGAwANJDQMgBiAAKAIIIgJrQQNIDQQgACACQQFqNgIIIAIgAUEMdkHgAXI6AAAgACAAKAIIIgJBAWo2AgggAiABQQZ2Qb8BcToAACAAIAAoAggiAkEBajYCCCACIAFBP3FBgAFyOgAACyAAIAAoAgxBAmoiAjYCDAwBCwtBAgwCCyAFDAELQQELIAQgACgCDDYCACAHIAAoAgg2AgAgAEEQaiQACw8AIAEgACgCAGogAjYCAAs8AQJ/IwBBEGsiASQAIAEgADYCDCABQQhqIAFBDGoQY0EEQQFB3OEBKAIAKAIAGyECEGIgAUEQaiQAIAILOAEBfyMAQRBrIgUkACAFIAQ2AgwgBUEIaiAFQQxqEGMgACABIAIgAxDSASEAEGIgBUEQaiQAIAALEgAgBCACNgIAIAcgBTYCAEEDCw0AIAEgACgCAGooAgALKwEBfyAAQdyhATYCAAJAIAAoAggiAUUNACAALQAMQQFxRQ0AIAEQLQsgAAsEACABCycBAX8gACgCACgCACgCAEHM8gFBzPIBKAIAQQFqIgA2AgAgADYCBAu0CgEHf0HI8gEtAABFBEAjAEEQayIFJABBwPIBLQAARQRAIwBBEGsiBiQAIAZBATYCDEGg8QEgBigCDBAyIgFByKEBNgIAIwBBEGsiAyQAIAFBCGoiAkEANgIIIAJCADcCACACQQA6AIQBIANBCGogAhBVKAIAGiADQQA6AA8jAEEQayIEJAAQvAJBHkkEQBCMAQALIARBCGogAkEMakEeELsCIAIgBCgCCCIHNgIEIAIgBzYCACACIAcgBCgCDEECdGo2AgggBEEQaiQAIAJBHhDZAiADQQE6AA8gA0EQaiQAIAFBkAFqQYwWELABIAIQ2gJBrPwBQQEQMkHotQE2AgAgAUGs/AFB+O8BEDEQM0G0/AFBARAyQYi2ATYCACABQbT8AUGA8AEQMRAzQbz8AUEBEDIiAkEAOgAMIAJBADYCCCACQdyhATYCACACQZCiATYCCCABQbz8AUHY8gEQMRAzQcz8AUEBEDJByK0BNgIAIAFBzPwBQdDyARAxEDNB1PwBQQEQMkHgrgE2AgAgAUHU/AFB4PIBEDEQM0Hc/AFBARAyIgJBmKoBNgIAIAIQLjYCCCABQdz8AUHo8gEQMRAzQej8AUEBEDJB9K8BNgIAIAFB6PwBQfDyARAxEDNB8PwBQQEQMkHcsQE2AgAgAUHw/AFBgPMBEDEQM0H4/AFBARAyQeiwATYCACABQfj8AUH48gEQMRAzQYD9AUEBEDJB0LIBNgIAIAFBgP0BQYjzARAxEDNBiP0BQQEQMiICQa7YADsBCCACQciqATYCACACQQxqECQaIAFBiP0BQZDzARAxEDNBoP0BQQEQMiICQq6AgIDABTcCCCACQfCqATYCACACQRBqECQaIAFBoP0BQZjzARAxEDNBvP0BQQEQMkGotgE2AgAgAUG8/QFBiPABEDEQM0HE/QFBARAyQaC4ATYCACABQcT9AUGQ8AEQMRAzQcz9AUEBEDJB9LkBNgIAIAFBzP0BQZjwARAxEDNB1P0BQQEQMkHguwE2AgAgAUHU/QFBoPABEDEQM0Hc/QFBARAyQcTDATYCACABQdz9AUHI8AEQMRAzQeT9AUEBEDJB2MQBNgIAIAFB5P0BQdDwARAxEDNB7P0BQQEQMkHMxQE2AgAgAUHs/QFB2PABEDEQM0H0/QFBARAyQcDGATYCACABQfT9AUHg8AEQMRAzQfz9AUEBEDJBtMcBNgIAIAFB/P0BQejwARAxEDNBhP4BQQEQMkHcyAE2AgAgAUGE/gFB8PABEDEQM0GM/gFBARAyQYTKATYCACABQYz+AUH48AEQMRAzQZT+AUEBEDJBrMsBNgIAIAFBlP4BQYDxARAxEDNBnP4BQQEQMiICQZjVATYCCCACQai9ATYCACACQdi9ATYCCCABQZz+AUGo8AEQMRAzQaj+AUEBEDIiAkG81QE2AgggAkG0vwE2AgAgAkHkvwE2AgggAUGo/gFBsPABEDEQM0G0/gFBARAyIgJBCGoQtgIgAkGkwQE2AgAgAUG0/gFBuPABEDEQM0HA/gFBARAyIgJBCGoQtgIgAkHEwgE2AgAgAUHA/gFBwPABEDEQM0HM/gFBARAyQdTMATYCACABQcz+AUGI8QEQMRAzQdT+AUEBEDJBzM0BNgIAIAFB1P4BQZDxARAxEDMgBkEQaiQAIAVBoPEBNgIIQbzyASAFKAIIEFUaQcDyAUEBOgAACyAFQRBqJABBxPIBQbzyARDVAkHI8gFBAToAAAsgAEHE8gEoAgAiADYCACAAENQCCxEAIABBoPEBRwRAIAAQ1wILCxMAIAAgASgCACIANgIAIAAQ1AILlwEBA38gAEHIoQE2AgAgAEEIaiEBA0AgARBrIAJLBEAgASACEIIBKAIABEAgASACEIIBKAIAEL8BCyACQQFqIQIMAQsLIABBkAFqECAaIwBBEGsiAiQAIAJBDGogARBVIgEoAgAiAygCAARAIAMQ2gIgASgCABogASgCACIBQQxqIAEoAgAgARC5AhC4AgsgAkEQaiQAIAALDwAgACAAKAIEQQFqNgIECyYBAX8gACgCBCECA0AgASACRwRAIAJBBGshAgwBCwsgACABNgIEC3UBAn8jAEEQayIDJAAgA0EEaiICIAA2AgAgAiAAKAIEIgA2AgQgAiAAIAFBAnRqNgIIIAIiASgCBCEAIAIoAgghAgNAIAAgAkYEQCABKAIAIAEoAgQ2AgQgA0EQaiQABSAAELoCIAEgAEEEaiIANgIEDAELCwsRACAAEGsaIAAgACgCABDYAgsgACAAQZiqATYCACAAKAIIEC5HBEAgACgCCBCgAwsgAAsEAEF/C+EBAQR/IwBBEGsiBSQAIwBBIGsiAyQAIANBGGogACABEL0CIAMoAhghBCADKAIcIQYjAEEQayIBJAAgASAGNgIMIAIgBCAGIARrIgRBAnUQZSABIAIgBGo2AgggA0EQaiABQQxqIAFBCGoQZiABQRBqJAAgAygCECEEIwBBEGsiASQAIAEgADYCDCABQQxqIgAgBCAAEOwBa0ECdRDwASEAIAFBEGokACADIAA2AgwgAyACIAMoAhQQjgE2AgggBUEIaiADQQxqIANBCGoQZiADQSBqJAAgBSgCDCAFQRBqJAAL9gUBCn8jAEEQayITJAAgAiAANgIAQQRBACAHGyEVIANBgARxIRYDQCAUQQRGBEAgDRAfQQFLBEAgEyANEE42AgwgAiATQQxqQQEQ8AEgDRB1IAIoAgAQ3QI2AgALIANBsAFxIgNBEEcEQCABIANBIEYEfyACKAIABSAACzYCAAsgE0EQaiQABQJAAkACQAJAAkACQCAIIBRqLQAADgUAAQMCBAULIAEgAigCADYCAAwECyABIAIoAgA2AgAgBkEgEEshByACIAIoAgAiD0EEajYCACAPIAc2AgAMAwsgDRBaDQIgDUEAEMwBKAIAIQcgAiACKAIAIg9BBGo2AgAgDyAHNgIADAILIAwQWiAWRXINASACIAwQTiAMEHUgAigCABDdAjYCAAwBCyACKAIAIAQgFWoiBCEHA0ACQCAFIAdNDQAgBkHAACAHKAIAEF9FDQAgB0EEaiEHDAELCyAOQQBKBEAgAigCACEPIA4hEANAIBBFIAQgB09yRQRAIBBBAWshECAHQQRrIgcoAgAhESACIA9BBGoiEjYCACAPIBE2AgAgEiEPDAELCyAQBH8gBkEwEEsFQQALIREgAigCACEPA0AgEEEASgRAIAIgD0EEaiISNgIAIA8gETYCACAQQQFrIRAgEiEPDAELCyACIAIoAgAiD0EEajYCACAPIAk2AgALAkAgBCAHRgRAIAZBMBBLIQcgAiACKAIAIg9BBGo2AgAgDyAHNgIADAELIAsQWgR/QX8FIAtBABAiLAAACyESQQAhEEEAIREDQCAEIAdGDQECQCAQIBJHBEAgECEPDAELIAIgAigCACIPQQRqNgIAIA8gCjYCAEEAIQ8gCxAfIBFBAWoiEU0EQCAQIRIMAQsgCyARECItAABB/wBGBEBBfyESDAELIAsgERAiLAAAIRILIAdBBGsiBygCACEQIAIgAigCACIYQQRqNgIAIBggEDYCACAPQQFqIRAMAAsACyACKAIAEMcBCyAUQQFqIRQMAQsLC70BAQF/IwBBEGsiCiQAAn8gAARAIAIQ5gIMAQsgAhDlAgshAAJAIAEEQCAKQQRqIgEgABCSASADIAooAgQ2AAAgASAAEMIBDAELIApBBGoiASAAEOECIAMgCigCBDYAACABIAAQewsgCCABEKsBIAEQORogBCAAEHg2AgAgBSAAEFk2AgAgCkEEaiIBIAAQWCAGIAEQcCABECAaIAEgABB8IAcgARCrASABEDkaIAkgABDBATYCACAKQRBqJAAL2wEBBH8jAEEQayIFJAAjAEEgayIDJAAgA0EYaiAAIAEQvQIgAygCGCEEIAMoAhwhBiMAQRBrIgEkACABIAY2AgwgAiAEIAYgBGsiBBBNIAEgAiAEajYCCCADQRBqIAFBDGogAUEIahBmIAFBEGokACADKAIQIQQjAEEQayIBJAAgASAANgIMIAFBDGoiACAEIAAQ7AFrEPMBIQAgAUEQaiQAIAMgADYCDCADIAIgAygCFBCOATYCCCAFQQhqIANBDGogA0EIahBmIANBIGokACAFKAIMIAVBEGokAAsRACAAIAEgASgCACgCKBEBAAvLBQEKfyMAQRBrIhQkACACIAA2AgAgA0GABHEhFgNAIBVBBEYEQCANEB9BAUsEQCAUIA0QTjYCDCACIBRBDGpBARDzASANEHcgAigCABDgAjYCAAsgA0GwAXEiA0EQRwRAIAEgA0EgRgR/IAIoAgAFIAALNgIACyAUQRBqJAAFAkACQAJAAkACQAJAIAggFWotAAAOBQABAwIEBQsgASACKAIANgIADAQLIAEgAigCADYCACAGQSAQQSEPIAIgAigCACIQQQFqNgIAIBAgDzoAAAwDCyANEFoNAiANQQAQIi0AACEPIAIgAigCACIQQQFqNgIAIBAgDzoAAAwCCyAMEFogFkVyDQEgAiAMEE4gDBB3IAIoAgAQ4AI2AgAMAQsgAigCACAEIAdqIgQhEQNAAkAgBSARTQ0AIAZBwAAgESwAABBgRQ0AIBFBAWohEQwBCwsgDiIPQQBKBEADQCAPRSAEIBFPckUEQCAPQQFrIQ8gEUEBayIRLQAAIRAgAiACKAIAIhJBAWo2AgAgEiAQOgAADAELCyAPBH8gBkEwEEEFQQALIRIDQCACIAIoAgAiEEEBajYCACAPQQBKBEAgECASOgAAIA9BAWshDwwBCwsgECAJOgAACwJAIAQgEUYEQCAGQTAQQSEPIAIgAigCACIQQQFqNgIAIBAgDzoAAAwBCyALEFoEf0F/BSALQQAQIiwAAAshEEEAIQ9BACETA0AgBCARRg0BAkAgDyAQRwRAIA8hEgwBCyACIAIoAgAiEEEBajYCACAQIAo6AABBACESIAsQHyATQQFqIhNNBEAgDyEQDAELIAsgExAiLQAAQf8ARgRAQX8hEAwBCyALIBMQIiwAACEQCyARQQFrIhEtAAAhDyACIAIoAgAiGEEBajYCACAYIA86AAAgEkEBaiEPDAALAAsgAigCABCEAQsgFUEBaiEVDAELCwu7AQEBfyMAQRBrIgokAAJ/IAAEQCACEO0CDAELIAIQ7AILIQACQCABBEAgCkEEaiIBIAAQkgEgAyAKKAIENgAAIAEgABDCAQwBCyAKQQRqIgEgABDhAiADIAooAgQ2AAAgASAAEHsLIAggARBwIAEQIBogBCAAEHg6AAAgBSAAEFk6AAAgCkEEaiIBIAAQWCAGIAEQcCABECAaIAEgABB8IAcgARBwIAEQIBogCSAAEMEBNgIAIApBEGokAAsIACAAKAIARQsKACAAQdjwARB6CwoAIABB4PABEHoLFwAgAiAAIAEgAGsiAEECdRBlIAAgAmoLgwIBBX8jAEEQayIGJAAgBkEMaiIJIAZBCGogABBVKAIAELwBIwBBEGsiBSQAAkBB9////wMgAWsgAk8EQCAAECMhByAFQQRqIgggAUHz////AUkEfyAFIAFBAXQ2AgwgBSABIAJqNgIEIAggBUEMahCgASgCABCQAUEBagVB9////wMLEI8BIAUoAgQhAiAFKAIIGiAEBEAgAiAHIAQQZQsgAyAERwRAIARBAnQiCCACaiAHIAhqIAMgBGsQZQsgAUEBaiIBQQJHBEAgByABEKkBCyAAIAI2AgAgACAFKAIIEFwgBUEQaiQADAELEFsACyAAIAM2AgQgCRC7ASAGQRBqJAALHwEBfyABKAIAELwDIQIgACABKAIANgIEIAAgAjYCAAuyDgEKfyMAQZAEayILJAAgCyAKNgKIBCALIAE2AowEAkAgACALQYwEahArBEAgBSAFKAIAQQRyNgIAQQAhAAwBCyALQeQANgJIIAsgC0HoAGogC0HwAGogC0HIAGoiARA2Ig8oAgAiCjYCZCALIApBkANqNgJgIAEQJCERIAtBPGoQJCEMIAtBMGoQJCEOIAtBJGoQJCENIAtBGGoQJCEQIwBBEGsiASQAAkAgAgRAIAFBBGoiCiADEOYCIgIQkgEMAQsgAUEEaiIKIAMQ5QIiAhCSAQsgCyABKAIENgBcIAogAhDCASANIAoQqwEgChA5GiAKIAIQeyAOIAoQqwEgChA5GiALIAIQeDYCWCALIAIQWTYCVCAKIAIQWCARIAoQcCAKECAaIAogAhB8IAwgChCrASAKEDkaIAsgAhDBATYCFCABQRBqJAAgCSAIKAIANgIAIARBgARxIRJBACEDQQAhAQNAIAEhAgJAAkACQAJAIANBBEYNACAAIAtBjARqECsNAEEAIQoCQAJAAkACQAJAAkAgC0HcAGogA2otAAAOBQEABAMFCQsgA0EDRg0HIAdBASAAEDcQXwRAIAtBDGogABDpAiAQIAsoAgwQ6gEMAgsgBSAFKAIAQQRyNgIAQQAhAAwGCyADQQNGDQYLA0AgACALQYwEahArDQYgB0EBIAAQNxBfRQ0GIAtBDGogABDpAiAQIAsoAgwQ6gEMAAsACwJAIA4QH0UNACAAEDcgDhAjKAIARw0AIAAQPhogBkEAOgAAIA4gAiAOEB9BAUsbIQEMBgsCQCANEB9FDQAgABA3IA0QIygCAEcNACAAED4aIAZBAToAACANIAIgDRAfQQFLGyEBDAYLAkAgDhAfRQ0AIA0QH0UNACAFIAUoAgBBBHI2AgBBACEADAQLIA4QH0UEQCANEB9FDQULIAYgDRAfRToAAAwECyASIAIgA0ECSXJyRQRAQQAhASADQQJGIAstAF9BAEdxRQ0FCyALIAwQTjYCCCALQQxqIAtBCGoQwwEhAQJAIANFDQAgAyALai0AW0EBSw0AA0ACQCALIAwQdTYCCCABIAtBCGoQdg0AIAdBASABKAIAKAIAEF9FDQAgARD2AQwBCwsgCyAMEE42AgggASgCACALQQhqIgQoAgBrQQJ1IgogEBAfTQRAIAsgEBB1NgIIIARBACAKaxDwASAQEHUhCiAMEE4hEyMAQRBrIhQkABBzIQQgChBzIQogBCATEHMgCiAEa0F8cRCLAUUgFEEQaiQADQELIAsgDBBONgIEIAEgC0EIaiALQQRqEMMBKAIANgIACyALIAEoAgA2AggDQAJAIAsgDBB1NgIEIAtBCGoiASALQQRqEHYNACAAIAtBjARqECsNACAAEDcgASgCACgCAEcNACAAED4aIAEQ9gEMAQsLIBJFDQMgCyAMEHU2AgQgC0EIaiALQQRqEHYNAyAFIAUoAgBBBHI2AgBBACEADAILA0ACQCAAIAtBjARqECsNAAJ/IAdBwAAgABA3IgEQXwRAIAkoAgAiBCALKAKIBEYEQCAIIAkgC0GIBGoQkwEgCSgCACEECyAJIARBBGo2AgAgBCABNgIAIApBAWoMAQsgERAfRSAKRXINASABIAsoAlRHDQEgCygCZCIBIAsoAmBGBEAgDyALQeQAaiALQeAAahCTASALKAJkIQELIAsgAUEEajYCZCABIAo2AgBBAAshCiAAED4aDAELCyAKRSALKAJkIgEgDygCAEZyRQRAIAsoAmAgAUYEQCAPIAtB5ABqIAtB4ABqEJMBIAsoAmQhAQsgCyABQQRqNgJkIAEgCjYCAAsCQCALKAIUQQBMDQACQCAAIAtBjARqECtFBEAgABA3IAsoAlhGDQELIAUgBSgCAEEEcjYCAEEAIQAMAwsDQCAAED4aIAsoAhRBAEwNAQJAIAAgC0GMBGoQK0UEQCAHQcAAIAAQNxBfDQELIAUgBSgCAEEEcjYCAEEAIQAMBAsgCSgCACALKAKIBEYEQCAIIAkgC0GIBGoQkwELIAAQNyEBIAkgCSgCACIEQQRqNgIAIAQgATYCACALIAsoAhRBAWs2AhQMAAsACyACIQEgCCgCACAJKAIARw0DIAUgBSgCAEEEcjYCAEEAIQAMAQsCQCACRQ0AQQEhCgNAIAIQHyAKTQ0BAkAgACALQYwEahArRQRAIAAQNyACIAoQzAEoAgBGDQELIAUgBSgCAEEEcjYCAEEAIQAMAwsgABA+GiAKQQFqIQoMAAsAC0EBIQAgDygCACALKAJkRg0AQQAhACALQQA2AgwgESAPKAIAIAsoAmQgC0EMahBDIAsoAgwEQCAFIAUoAgBBBHI2AgAMAQtBASEACyAQEDkaIA0QORogDhA5GiAMEDkaIBEQIBogDxA1DAMLIAIhAQsgA0EBaiEDDAALAAsgC0GQBGokACAACxgAIAAgARCsARA8IAAgARDyASgCADYCBAsKACAAQcjwARB6CwoAIABB0PABEHoLxwEBBn8jAEEQayIEJAAgABDyASgCACEFQQECfyACKAIAIAAoAgBrIgNB/////wdJBEAgA0EBdAwBC0F/CyIDIANBAU0bIQMgASgCACEGIAAoAgAhByAFQeQARgR/QQAFIAAoAgALIAMQ3AEiCARAIAVB5ABHBEAgABCsARoLIARB4wA2AgQgACAEQQhqIAggBEEEahA2IgUQ6wIgBRA1IAEgACgCACAGIAdrajYCACACIAMgACgCAGo2AgAgBEEQaiQADwsQPQALIAEBfyABKAIAEJ0CwCECIAAgASgCADYCBCAAIAI6AAALxA4BCn8jAEGQBGsiCyQAIAsgCjYCiAQgCyABNgKMBAJAIAAgC0GMBGoQLARAIAUgBSgCAEEEcjYCAEEAIQAMAQsgC0HkADYCTCALIAtB6ABqIAtB8ABqIAtBzABqIgEQNiIPKAIAIgo2AmQgCyAKQZADajYCYCABECQhESALQUBrECQhDCALQTRqECQhDiALQShqECQhDSALQRxqECQhECMAQRBrIgEkAAJAIAIEQCABQQRqIgogAxDtAiICEJIBDAELIAFBBGoiCiADEOwCIgIQkgELIAsgASgCBDYAXCAKIAIQwgEgDSAKEHAgChAgGiAKIAIQeyAOIAoQcCAKECAaIAsgAhB4OgBbIAsgAhBZOgBaIAogAhBYIBEgChBwIAoQIBogCiACEHwgDCAKEHAgChAgGiALIAIQwQE2AhggAUEQaiQAIAkgCCgCADYCACAEQYAEcSESQQAhA0EAIQEDQCABIQICQAJAAkACQCADQQRGDQAgACALQYwEahAsDQBBACEKAkACQAJAAkACQAJAIAtB3ABqIANqLQAADgUBAAQDBQkLIANBA0YNByAHQQEgABA4EGAEQCALQRBqIAAQ7wIgECALLAAQELgBDAILIAUgBSgCAEEEcjYCAEEAIQAMBgsgA0EDRg0GCwNAIAAgC0GMBGoQLA0GIAdBASAAEDgQYEUNBiALQRBqIAAQ7wIgECALLAAQELgBDAALAAsCQCAOEB9FDQAgABA4Qf8BcSAOQQAQIi0AAEcNACAAED8aIAZBADoAACAOIAIgDhAfQQFLGyEBDAYLAkAgDRAfRQ0AIAAQOEH/AXEgDUEAECItAABHDQAgABA/GiAGQQE6AAAgDSACIA0QH0EBSxshAQwGCwJAIA4QH0UNACANEB9FDQAgBSAFKAIAQQRyNgIAQQAhAAwECyAOEB9FBEAgDRAfRQ0FCyAGIA0QH0U6AAAMBAsgEiACIANBAklyckUEQEEAIQEgA0ECRiALLQBfQQBHcUUNBQsgCyAMEE42AgwgC0EQaiALQQxqEMMBIQECQCADRQ0AIAMgC2otAFtBAUsNAANAAkAgCyAMEHc2AgwgASALQQxqEHYNACAHQQEgASgCACwAABBgRQ0AIAEQ+AEMAQsLIAsgDBBONgIMIAEoAgAgC0EMaiIEKAIAayIKIBAQH00EQCALIBAQdzYCDCAEQQAgCmsQ8wEgEBB3IQogDBBOIRMjAEEQayIUJAAQcyEEIAoQcyEKIAQgExBzIAogBGsQiwFFIBRBEGokAA0BCyALIAwQTjYCCCABIAtBDGogC0EIahDDASgCADYCAAsgCyABKAIANgIMA0ACQCALIAwQdzYCCCALQQxqIgEgC0EIahB2DQAgACALQYwEahAsDQAgABA4Qf8BcSABKAIALQAARw0AIAAQPxogARD4AQwBCwsgEkUNAyALIAwQdzYCCCALQQxqIAtBCGoQdg0DIAUgBSgCAEEEcjYCAEEAIQAMAgsDQAJAIAAgC0GMBGoQLA0AAn8gB0HAACAAEDgiARBgBEAgCSgCACIEIAsoAogERgRAIAggCSALQYgEahDuAiAJKAIAIQQLIAkgBEEBajYCACAEIAE6AAAgCkEBagwBCyAREB9FIApFcg0BIAstAFogAUH/AXFHDQEgCygCZCIBIAsoAmBGBEAgDyALQeQAaiALQeAAahCTASALKAJkIQELIAsgAUEEajYCZCABIAo2AgBBAAshCiAAED8aDAELCyAKRSALKAJkIgEgDygCAEZyRQRAIAsoAmAgAUYEQCAPIAtB5ABqIAtB4ABqEJMBIAsoAmQhAQsgCyABQQRqNgJkIAEgCjYCAAsCQCALKAIYQQBMDQACQCAAIAtBjARqECxFBEAgABA4Qf8BcSALLQBbRg0BCyAFIAUoAgBBBHI2AgBBACEADAMLA0AgABA/GiALKAIYQQBMDQECQCAAIAtBjARqECxFBEAgB0HAACAAEDgQYA0BCyAFIAUoAgBBBHI2AgBBACEADAQLIAkoAgAgCygCiARGBEAgCCAJIAtBiARqEO4CCyAAEDghASAJIAkoAgAiBEEBajYCACAEIAE6AAAgCyALKAIYQQFrNgIYDAALAAsgAiEBIAgoAgAgCSgCAEcNAyAFIAUoAgBBBHI2AgBBACEADAELAkAgAkUNAEEBIQoDQCACEB8gCk0NAQJAIAAgC0GMBGoQLEUEQCAAEDhB/wFxIAIgChAiLQAARg0BCyAFIAUoAgBBBHI2AgBBACEADAMLIAAQPxogCkEBaiEKDAALAAtBASEAIA8oAgAgCygCZEYNAEEAIQAgC0EANgIQIBEgDygCACALKAJkIAtBEGoQQyALKAIQBEAgBSAFKAIAQQRyNgIADAELQQEhAAsgEBAgGiANECAaIA4QIBogDBAgGiARECAaIA8QNQwDCyACIQELIANBAWohAwwACwALIAtBkARqJAAgAAsMACAAQQFBLRD9AhoLCwAgAEEBQS0QsAILHAEBfyAALQAAIQIgACABLQAAOgAAIAEgAjoAAAtlAQF/IwBBEGsiBiQAIAZBADoADyAGIAU6AA4gBiAEOgANIAZBJToADCAFBEAgBkENaiAGQQ5qEPMCCyACIAEgASACKAIAEIoCIAZBDGogAyAAKAIAEJ4DIAFqNgIAIAZBEGokAAtBACABIAIgAyAEQQQQZyEBIAMtAABBBHFFBEAgACABQdAPaiABQewOaiABIAFB5ABJGyABQcUASBtB7A5rNgIACwtAACACIAMgAEEIaiAAKAIIKAIEEQAAIgAgAEGgAmogBSAEQQAQzQEgAGsiAEGfAkwEQCABIABBDG1BDG82AgALC0AAIAIgAyAAQQhqIAAoAggoAgARAAAiACAAQagBaiAFIARBABDNASAAayIAQacBTARAIAEgAEEMbUEHbzYCAAsLQQAgASACIAMgBEEEEGghASADLQAAQQRxRQRAIAAgAUHQD2ogAUHsDmogASABQeQASRsgAUHFAEgbQewOazYCAAsLQAAgAiADIABBCGogACgCCCgCBBEAACIAIABBoAJqIAUgBEEAEM8BIABrIgBBnwJMBEAgASAAQQxtQQxvNgIACwtAACACIAMgAEEIaiAAKAIIKAIAEQAAIgAgAEGoAWogBSAEQQAQzwEgAGsiAEGnAUwEQCABIABBDG1BB282AgALCxgBAX9BDBBTIgBBADYCCCAAQgA3AgAgAAsEAEECC8oBAQR/IwBBEGsiAyQAAkAgAUH3////A00EQAJAIAEQvQEEQCAAIAEQUCAAIQQMAQsgA0EIaiABEJABQQFqEI8BIAMoAgwaIAAgAygCCCIENgIAIAAgAygCDBBcIAAgATYCBAsjAEEQayIFJAAgBSACNgIMIAQhBiABIQIDQCACBEAgBiAFKAIMNgIAIAJBAWshAiAGQQRqIQYMAQsLIAVBEGokACADQQA2AgQgBCABQQJ0aiADQQRqEFYgA0EQaiQADAELEFsACyAAC7IFAQp/IwBBEGsiCyQAIAYQSCEKIAtBBGogBhCZASIOEFggBSADNgIAAkACQCAAIggtAAAiBkEraw4DAAEAAQsgCiAGwBBLIQYgBSAFKAIAIgdBBGo2AgAgByAGNgIAIABBAWohCAsCQAJAIAIgCCIGa0EBTA0AIAYtAABBMEcNACAGLQABQSByQfgARw0AIApBMBBLIQcgBSAFKAIAIghBBGo2AgAgCCAHNgIAIAogBiwAARBLIQcgBSAFKAIAIghBBGo2AgAgCCAHNgIAIAZBAmoiCCEGA0AgAiAGTQ0CIAYsAAAQLhoQsANFDQIgBkEBaiEGDAALAAsDQCACIAZNDQEgBiwAABAuGhCvA0UNASAGQQFqIQYMAAsACwJAIAtBBGoQWgRAIAogCCAGIAUoAgAQbyAFIAUoAgAgBiAIa0ECdGo2AgAMAQsgCCAGEIQBIA4QWSEPIAghBwNAIAYgB00EQCADIAggAGtBAnRqIAUoAgAQxwEFAkAgC0EEaiIMIA0QIiwAAEEATA0AIAkgDCANECIsAABHDQAgBSAFKAIAIglBBGo2AgAgCSAPNgIAIA0gDSAMEB9BAWtJaiENQQAhCQsgCiAHLAAAEEshDCAFIAUoAgAiEEEEajYCACAQIAw2AgAgB0EBaiEHIAlBAWohCQwBCwsLAkACQANAIAIgBk0NASAGQQFqIQcgBiwAACIGQS5HBEAgCiAGEEshBiAFIAUoAgAiCEEEajYCACAIIAY2AgAgByEGDAELCyAOEHghBiAFIAUoAgAiCEEEaiIJNgIAIAggBjYCAAwBCyAFKAIAIQkgBiEHCyAKIAcgAiAJEG8gBSAFKAIAIAIgB2tBAnRqIgU2AgAgBCAFIAMgASAAa0ECdGogASACRhs2AgAgC0EEahAgGiALQRBqJAALDwAgAARAIAAQOgsgABAtC90DAQh/IwBBEGsiCyQAIAYQSCEKIAtBBGoiByAGEJkBIgYQWAJAIAcQWgRAIAogACACIAMQbyAFIAMgAiAAa0ECdGoiBjYCAAwBCyAFIAM2AgACQAJAIAAiBy0AACIIQStrDgMAAQABCyAKIAjAEEshByAFIAUoAgAiCEEEajYCACAIIAc2AgAgAEEBaiEHCwJAIAIgB2tBAkgNACAHLQAAQTBHDQAgBy0AAUEgckH4AEcNACAKQTAQSyEIIAUgBSgCACIJQQRqNgIAIAkgCDYCACAKIAcsAAEQSyEIIAUgBSgCACIJQQRqNgIAIAkgCDYCACAHQQJqIQcLIAcgAhCEAUEAIQkgBhBZIQ1BACEIIAchBgN/IAIgBk0EfyADIAcgAGtBAnRqIAUoAgAQxwEgBSgCAAUCQCALQQRqIgwgCBAiLQAARQ0AIAkgDCAIECIsAABHDQAgBSAFKAIAIglBBGo2AgAgCSANNgIAIAggCCAMEB9BAWtJaiEIQQAhCQsgCiAGLAAAEEshDCAFIAUoAgAiDkEEajYCACAOIAw2AgAgBkEBaiEGIAlBAWohCQwBCwshBgsgBCAGIAMgASAAa0ECdGogASACRhs2AgAgC0EEahAgGiALQRBqJAALRwIBfwF+IwBBIGsiBSQAIAMoAgAhAyAEKQMAIQYgBSAEKQMINwMQIAUgBjcDCCAFIAM2AgAgACABIAIgBRDAASAFQSBqJAALOwIBfwF+IwBBEGsiBCQAIAMpAwAhBSAEIAMpAwg3AwggBCAFNwMAIABBHiABIAIgBBCWASAEQRBqJAALSQIBfwF+IwBBIGsiBSQAIAMoAgAhAyAEKQMAIQYgBSAEKQMINwMQIAUgBjcDCCAFIAM2AgAgAEEeIAEgAiAFEJYBIAVBIGokAAuiBQEKfyMAQRBrIgokACAGEEkhCSAKQQRqIAYQmwEiDhBYIAUgAzYCAAJAAkAgACIILQAAIgZBK2sOAwABAAELIAkgBsAQQSEGIAUgBSgCACIHQQFqNgIAIAcgBjoAACAAQQFqIQgLAkACQCACIAgiBmtBAUwNACAGLQAAQTBHDQAgBi0AAUEgckH4AEcNACAJQTAQQSEHIAUgBSgCACIIQQFqNgIAIAggBzoAACAJIAYsAAEQQSEHIAUgBSgCACIIQQFqNgIAIAggBzoAACAGQQJqIgghBgNAIAIgBk0NAiAGLAAAEC4aELADRQ0CIAZBAWohBgwACwALA0AgAiAGTQ0BIAYsAAAQLhoQrwNFDQEgBkEBaiEGDAALAAsCQCAKQQRqEFoEQCAJIAggBiAFKAIAEHkgBSAFKAIAIAYgCGtqNgIADAELIAggBhCEASAOEFkhDyAIIQcDQCAGIAdNBEAgAyAIIABraiAFKAIAEIQBBQJAIApBBGoiDCANECIsAABBAEwNACALIAwgDRAiLAAARw0AIAUgBSgCACILQQFqNgIAIAsgDzoAACANIA0gDBAfQQFrSWohDUEAIQsLIAkgBywAABBBIQwgBSAFKAIAIhBBAWo2AgAgECAMOgAAIAdBAWohByALQQFqIQsMAQsLCwNAAkACQCACIAZNBEAgBiEHDAELIAZBAWohByAGLAAAIgZBLkcNASAOEHghBiAFIAUoAgAiCEEBajYCACAIIAY6AAALIAkgByACIAUoAgAQeSAFIAUoAgAgAiAHa2oiBTYCACAEIAUgAyABIABraiABIAJGGzYCACAKQQRqECAaIApBEGokAA8LIAkgBhBBIQYgBSAFKAIAIghBAWo2AgAgCCAGOgAAIAchBgwACwALKQEBfyMAQRBrIgQkACAEIAMrAwA5AwAgACABIAIgBBDAASAEQRBqJAALNwEBfyMAQRBrIgUkACADKAIAIQMgBSAEKwMAOQMIIAUgAzYCACAAIAEgAiAFEMABIAVBEGokAAsrAQF/IwBBEGsiBCQAIAQgAysDADkDACAAQR4gASACIAQQlgEgBEEQaiQACzkBAX8jAEEQayIFJAAgAygCACEDIAUgBCsDADkDCCAFIAM2AgAgAEEeIAEgAiAFEJYBIAVBEGokAAsrAQF/IwBBEGsiBCQAIAQgAykDADcDACAAQRggASACIAQQlgEgBEEQaiQAC9QDAQh/IwBBEGsiCyQAIAYQSSEKIAtBBGoiByAGEJsBIgYQWAJAIAcQWgRAIAogACACIAMQeSAFIAMgAiAAa2oiBjYCAAwBCyAFIAM2AgACQAJAIAAiBy0AACIIQStrDgMAAQABCyAKIAjAEEEhByAFIAUoAgAiCEEBajYCACAIIAc6AAAgAEEBaiEHCwJAIAIgB2tBAkgNACAHLQAAQTBHDQAgBy0AAUEgckH4AEcNACAKQTAQQSEIIAUgBSgCACIJQQFqNgIAIAkgCDoAACAKIAcsAAEQQSEIIAUgBSgCACIJQQFqNgIAIAkgCDoAACAHQQJqIQcLIAcgAhCEAUEAIQkgBhBZIQ1BACEIIAchBgN/IAIgBk0EfyADIAcgAGtqIAUoAgAQhAEgBSgCAAUCQCALQQRqIgwgCBAiLQAARQ0AIAkgDCAIECIsAABHDQAgBSAFKAIAIglBAWo2AgAgCSANOgAAIAggCCAMEB9BAWtJaiEIQQAhCQsgCiAGLAAAEEEhDCAFIAUoAgAiDkEBajYCACAOIAw6AAAgBkEBaiEGIAlBAWohCQwBCwshBgsgBCAGIAMgASAAa2ogASACRhs2AgAgC0EEahAgGiALQRBqJAALQwEBfyMAQRBrIgMkACADIAI2AgxBoCAgAUH02QFBuyxBGCADQQxqIgEQVEH02QFBvyxBGSABEFQQBCADQRBqJAAgAAuWAwECfyMAQdACayIAJAAgACACNgLIAiAAIAE2AswCIAMQaiEGIAMgAEHQAWoQrgEhByAAQcQBaiADIABBxAJqEK0BIABBuAFqECQiASABECgQISAAIAFBABAiIgI2ArQBIAAgAEEQajYCDCAAQQA2AggDQAJAIABBzAJqIABByAJqECsNACAAKAK0ASABEB8gAmpGBEAgARAfIQMgASABEB9BAXQQISABIAEQKBAhIAAgAyABQQAQIiICajYCtAELIABBzAJqIgMQNyAGIAIgAEG0AWogAEEIaiAAKALEAiAAQcQBaiAAQRBqIABBDGogBxCYAQ0AIAMQPhoMAQsLAkAgAEHEAWoQH0UNACAAKAIMIgMgAEEQamtBnwFKDQAgACADQQRqNgIMIAMgACgCCDYCAAsgBSACIAAoArQBIAQgBhCTAzYCACAAQcQBaiAAQRBqIAAoAgwgBBBDIABBzAJqIABByAJqECsEQCAEIAQoAgBBAnI2AgALIAAoAswCIAEQIBogAEHEAWoQIBogAEHQAmokAAtbAQF/IwBBEGsiAyQAIAMgAigCADYCACMAQRBrIgIkACACIAE2AgwgAiADNgIIIAJBBGogAkEMahBjIABB1w0gAigCCBCkAyEAEGIgAkEQaiQAIANBEGokACAAC9kCAgR+Bn8jAEEgayIIJAACQAJAAkAgASACRwRAQYjqASgCACENQYjqAUEANgIAIwBBEGsiCSQAEC4aIwBBEGsiCiQAIwBBEGsiCyQAIwBBEGsiDCQAIAwgASAIQRxqQQIQgAIgDCkDACEEIAsgDCkDCDcDCCALIAQ3AwAgDEEQaiQAIAspAwAhBCAKIAspAwg3AwggCiAENwMAIAtBEGokACAKKQMAIQQgCSAKKQMINwMIIAkgBDcDACAKQRBqJAAgCSkDACEEIAggCSkDCDcDECAIIAQ3AwggCUEQaiQAIAgpAxAhBCAIKQMIIQVBiOoBKAIAIgFFDQEgCCgCHCACRw0CIAUhBiAEIQcgAUHEAEcNAwwCCyADQQQ2AgAMAgtBiOoBIA02AgAgCCgCHCACRg0BCyADQQQ2AgAgBiEFIAchBAsgACAFNwMAIAAgBDcDCCAIQSBqJAALwAECA38BfCMAQRBrIgMkAAJAAkACQCAAIAFHBEBBiOoBKAIAIQVBiOoBQQA2AgAQLhojAEEQayIEJAAgBCAAIANBDGpBARCAAiAEKQMAIAQpAwgQlQIhBiAEQRBqJAACQEGI6gEoAgAiAARAIAMoAgwgAUYNAQwDC0GI6gEgBTYCACADKAIMIAFHDQIMBAsgAEHEAEcNAwwCCyACQQQ2AgAMAgtEAAAAAAAAAAAhBgsgAkEENgIACyADQRBqJAAgBgubCgEEfyMAQRBrIgIkAEGACEEEQZAgQd4gQQRBAkEAQQAQC0HtC0ECQeQgQZghQQVBA0EAQQAQCyMAQSBrIgEkAEGY4AEtAABFBEBBmOABQQE6AABBnCFBvNoBEAcLQewgQYwlQcQlQQBB+iVBBkH9JUEAQf0lQQBB1xtB/yVBBxAJQewgQQFBhCZBiCZBIkEIEAYgAUEANgIcIAFBCTYCGCABIAEpAhg3AxAjAEEQayIAJAAgACABKQIQNwIIQewgQYoPQQNBjCZBmCZBIyAAQQhqEI0BQQBBAEEAEAEgAEEQaiQAIAFBADYCHCABQQo2AhggASABKQIYNwMIIwBBEGsiACQAIAAgASkCCDcCCEHsIEHKEEEEQaAmQbAmQSQgAEEIahCNAUEAQQBBABABIABBEGokACABQQA2AhwgAUELNgIYIAEgASkCGDcDACMAQRBrIgAkACAAIAEpAgA3AghB7CBB4BBBAkG4JkHAJkElIABBCGoQjQFBAEEAQQAQASAAQRBqJAAjAEEQayIAJAAgAEEMNgIMQewgQZoKQQNB6CZB9CZBJiAAQQxqEFRBAEEAQQAQASAAQRBqJAAjAEEQayIAJAAgAEENNgIMQewgQZYKQQRBgCdBkCdBJyAAQQxqEFRBAEEAQQAQASAAQRBqJAAgAUEgaiQAIwBBIGsiASQAQaTgAS0AAEUEQEGk4AFBAToAAEGYJ0HE2QEQBwtBpCpB0CpBiCtBAEG+K0EOQf0lQQBB/SVBAEG0FUHBK0EPEAlBpCpBAUHEK0HIK0EoQRAQBiABQQA2AhwgAUERNgIYIAEgASkCGDcDECMAQRBrIgAkACAAIAEpAhA3AghBpCpBig9BA0HMK0HYK0EpIABBCGoQjQFBAEEAQQAQASAAQRBqJAAgAUEANgIcIAFBEjYCGCABIAEpAhg3AwgjAEEQayIAJAAgACABKQIINwIIQaQqQcoQQQRB4CtB8CtBKiAAQQhqEI0BQQBBAEEAEAEgAEEQaiQAIAFBADYCHCABQRM2AhggASABKQIYNwMAIwBBEGsiACQAIAAgASkCADcCCEGkKkHgEEECQfgrQYAsQSsgAEEIahCNAUEAQQBBABABIABBEGokACMAQRBrIgAkACAAQRQ2AgxBpCpBmgpBA0GMLEGYLEEsIABBDGoQVEEAQQBBABABIABBEGokACMAQRBrIgAkACAAQRU2AgxBpCpBlgpBBEGgLEGwLEEtIABBDGoQVEEAQQBBABABIABBEGokACABQSBqJABBoCBBhhJBtixBFkG4LEEXEAggAkEPakHGCkEAEIsDQZMRQQQQiwMjAEEQayIBJAAgAUEINgIMQaAgQZ8TQazZAUHELEEaIAFBDGoiAxBUQazZAUHILEEbIAMQVBAEIAFBEGokAEHlCkEMEJcBQboLQRgQlwFB7wpBJBCXAUHBC0EwEJcBQdAKQTwQlwFBtg9ByAAQlwEaQaAgEBBB2CxB/w1BBEEBEBFB2CxBgBZBABADQdgsQZoWQQEQA0HYLEGWFkECEANB2CxBkhZBAxADQdgsQY4WQQQQA0HYLEH8FUEFEANB2CxB+BVBBhADQdgsQfAVQQcQA0HYLEHsFUEIEANBwCBB1wpB+SxBHkH7LEEfEAgjAEEQayIBJAAgAUEANgIMQcAgQe4NQdgsQf4sQSAgAUEMaiIAEFRB2CxBgi1BISAAEFQQBCABQRBqJABBwCAQECACQRBqJAALvAECA38BfSMAQRBrIgMkAAJAAkACQCAAIAFHBEBBiOoBKAIAIQVBiOoBQQA2AgAQLhojAEEQayIEJAAgBCAAIANBDGpBABCAAiAEKQMAIAQpAwgQpgMhBiAEQRBqJAACQEGI6gEoAgAiAARAIAMoAgwgAUYNAQwDC0GI6gEgBTYCACADKAIMIAFHDQIMBAsgAEHEAEcNAwwCCyACQQQ2AgAMAgtDAAAAACEGCyACQQQ2AgALIANBEGokACAGC8MBAgN/AX4jAEEQayIEJAACfgJAAkAgACABRwRAAkACQCAALQAAIgVBLUcNACAAQQFqIgAgAUcNAAwBC0GI6gEoAgAhBkGI6gFBADYCABAuGiAAIARBDGogAxCCAiEHAkBBiOoBKAIAIgAEQCAEKAIMIAFHDQEgAEHEAEYNBAwFC0GI6gEgBjYCACAEKAIMIAFGDQQLCwsgAkEENgIAQgAMAgsgAkEENgIAQn8MAQtCACAHfSAHIAVBLUYbCyAEQRBqJAAL1AECA38BfiMAQRBrIgQkAAJ/AkACQAJAIAAgAUcEQAJAAkAgAC0AACIFQS1HDQAgAEEBaiIAIAFHDQAMAQtBiOoBKAIAIQZBiOoBQQA2AgAQLhogACAEQQxqIAMQggIhBwJAQYjqASgCACIABEAgBCgCDCABRw0BIABBxABGDQUMBAtBiOoBIAY2AgAgBCgCDCABRg0DCwsLIAJBBDYCAEEADAMLIAdC/////w9YDQELIAJBBDYCAEF/DAELQQAgB6ciAGsgACAFQS1GGwsgBEEQaiQAC4sDAQF/IwBBgAJrIgAkACAAIAI2AvgBIAAgATYC/AEgAxBqIQYgAEHEAWogAyAAQfcBahCvASAAQbgBahAkIgEgARAoECEgACABQQAQIiICNgK0ASAAIABBEGo2AgwgAEEANgIIA0ACQCAAQfwBaiAAQfgBahAsDQAgACgCtAEgARAfIAJqRgRAIAEQHyEDIAEgARAfQQF0ECEgASABECgQISAAIAMgAUEAECIiAmo2ArQBCyAAQfwBaiIDEDggBiACIABBtAFqIABBCGogACwA9wEgAEHEAWogAEEQaiAAQQxqQdCfARCaAQ0AIAMQPxoMAQsLAkAgAEHEAWoQH0UNACAAKAIMIgMgAEEQamtBnwFKDQAgACADQQRqNgIMIAMgACgCCDYCAAsgBSACIAAoArQBIAQgBhCTAzYCACAAQcQBaiAAQRBqIAAoAgwgBBBDIABB/AFqIABB+AFqECwEQCAEIAQoAgBBAnI2AgALIAAoAvwBIAEQIBogAEHEAWoQIBogAEGAAmokAAvZAQIDfwF+IwBBEGsiBCQAAn8CQAJAAkAgACABRwRAAkACQCAALQAAIgVBLUcNACAAQQFqIgAgAUcNAAwBC0GI6gEoAgAhBkGI6gFBADYCABAuGiAAIARBDGogAxCCAiEHAkBBiOoBKAIAIgAEQCAEKAIMIAFHDQEgAEHEAEYNBQwEC0GI6gEgBjYCACAEKAIMIAFGDQMLCwsgAkEENgIAQQAMAwsgB0L//wNYDQELIAJBBDYCAEH//wMMAQtBACAHpyIAayAAIAVBLUYbCyAEQRBqJABB//8DcQu3AQIBfgJ/IwBBEGsiBSQAAkACQCAAIAFHBEBBiOoBKAIAIQZBiOoBQQA2AgAQLhogACAFQQxqIAMQmgMhBAJAQYjqASgCACIABEAgBSgCDCABRw0BIABBxABGDQMMBAtBiOoBIAY2AgAgBSgCDCABRg0DCwsgAkEENgIAQgAhBAwBCyACQQQ2AgAgBEIAVQRAQv///////////wAhBAwBC0KAgICAgICAgIB/IQQLIAVBEGokACAEC8ABAgJ/AX4jAEEQayIEJAACfwJAAkAgACABRwRAQYjqASgCACEFQYjqAUEANgIAEC4aIAAgBEEMaiADEJoDIQYCQEGI6gEoAgAiAARAIAQoAgwgAUcNASAAQcQARg0EDAMLQYjqASAFNgIAIAQoAgwgAUYNAgsLIAJBBDYCAEEADAILIAZCgICAgHhTIAZC/////wdVcg0AIAanDAELIAJBBDYCAEH/////ByAGQgBVDQAaQYCAgIB4CyAEQRBqJAALMwEBfyABIAAoAgQiAWohAgNAIAEgAkYEQCAAIAI2AgQFIAFBADoAACABQQFqIQEMAQsLC5EBAQN/AkAgASACEPUBIQQjAEEQayIDJAAgBEH3////A00EQAJAIAQQvQEEQCAAIAQQUCAAIQUMAQsgA0EIaiAEEJABQQFqEI8BIAMoAgwaIAAgAygCCCIFNgIAIAAgAygCDBBcIAAgBDYCBAsgASACIAUQ5wIgA0EANgIEIANBBGoQViADQRBqJAAMAQsQWwALCxYAIAAgASACQoCAgICAgICAgH8QhAILhwgBBX8gASgCACEEAkACQAJAAkACQAJAAkACfwJAAkACQAJAIANFDQAgAygCACIFRQ0AIABFBEAgAiEDDAMLIANBADYCACACIQMMAQsCQEHc4QEoAgAoAgBFBEAgAEUNASACRQ0MIAIhBQNAIAQsAAAiAwRAIAAgA0H/vwNxNgIAIABBBGohACAEQQFqIQQgBUEBayIFDQEMDgsLIABBADYCACABQQA2AgAgAiAFaw8LIAIhAyAARQ0DDAULIAQQqAEPC0EBIQYMAwtBAAwBC0EBCyEGA0AgBkUEQCAELQAAQQN2IgZBEGsgBUEadSAGanJBB0sNAwJ/IARBAWoiBiAFQYCAgBBxRQ0AGiAGLAAAQUBOBEAgBEEBayEEDAcLIARBAmoiBiAFQYCAIHFFDQAaIAYsAABBQE4EQCAEQQFrIQQMBwsgBEEDagshBCADQQFrIQNBASEGDAELA0ACQCAEQQNxIAQsAAAiBUEATHINACAEKAIAIgVBgYKECGsgBXJBgIGChHhxDQADQCADQQRrIQMgBCgCBCEFIARBBGohBCAFIAVBgYKECGtyQYCBgoR4cUUNAAsLIAXAQQBKBEAgA0EBayEDIARBAWohBAwBCwsgBUH/AXFBwgFrIgZBMksNAyAEQQFqIQQgBkECdCgCkIEBIQVBACEGDAALAAsDQCAGRQRAIANFDQcDQAJAIAQtAAAiBsAiBUEATA0AIARBA3EgA0EFSXJFBEACQANAIAQoAgAiBUGBgoQIayAFckGAgYKEeHENASAAIAVB/wFxNgIAIAAgBC0AATYCBCAAIAQtAAI2AgggACAELQADNgIMIABBEGohACAEQQRqIQQgA0EEayIDQQRLDQALIAQtAAAhBQsgBUH/AXEhBiAFwEEATA0BCyAAIAY2AgAgAEEEaiEAIARBAWohBCADQQFrIgMNAQwJCwsgBkHCAWsiBkEySw0DIARBAWohBCAGQQJ0KAKQgQEhBUEBIQYMAQsgBC0AACIGQQN2IgdBEGsgByAFQRp1anJBB0sNAQJAAkACfyAEQQFqIgcgBkGAAWsgBUEGdHIiBkEATg0AGiAHLQAAQYABayIHQT9LDQEgByAGQQZ0IghyIQYgBEECaiIHIAhBAE4NABogBy0AAEGAAWsiB0E/Sw0BIAcgBkEGdHIhBiAEQQNqCyEEIAAgBjYCACADQQFrIQMgAEEEaiEADAELQYjqAUEZNgIAIARBAWshBAwFC0EAIQYMAAsACyAEQQFrIQQgBQ0BIAQtAAAhBQsgBUH/AXENACAABEAgAEEANgIAIAFBADYCAAsgAiADaw8LQYjqAUEZNgIAIABFDQELIAEgBDYCAAtBfw8LIAEgBDYCACACCzEBAX9B3OEBKAIAIQEgAARAQdzhAUHk4AEgACAAQX9GGzYCAAtBfyABIAFB5OABRhsLOAAgAEHQD2sgACAAQZPx//8HShsiAEEDcQRAQQAPCyAAQewOaiIAQeQAbwRAQQEPCyAAQZADb0ULlxMCD38EfiMAQYABayIIJAAgAQRAAn8DQAJAAn8CQAJAAkAgAi0AACIGQSVHBEAgBg0BIAoMBwtBACEFQQEhCQJAIAItAAEiB0Etaw4EAgMDAgALIAdB3wBGDQEgBw0CCyAAIApqIAY6AAAgCkEBagwCCyAHIQUgAi0AAiEHQQIhCQtBACEOAkACfyACIAlqIAciEkErRmoiCSwAAEEwa0EJTQRAIAkgCEEMakEKQv////8PEIQCpyECIAgoAgwMAQsgCCAJNgIMQQAhAiAJCyIHLQAAIgZBwwBrIgtBFktBASALdEGZgIACcUVyDQAgAiIODQAgByAJRyEOCyAGQc8ARiAGQcUARnIEfyAHLQABIQYgB0EBagUgBwshAiAIQRBqIQcgBSEJQQAhBSMAQdAAayILJABB5QghDUEwIRBBqIAIIQwCQCAIAn8CQAJAAkACQAJAAkACQAJ/AkACQAJAAkACQAJAAkACQAJAAn4CQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIAbAIgZBJWsOViEtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0BAwQnLQcICQotLS0NLS0tLRASFBYYFxweIC0tLS0tLQACJgYFLQgCLQstLQwOLQ8tJRETFS0ZGx0fLQsgAygCGCIFQQZNDSIMKgsgAygCGCIFQQZLDSkgBUGHgAhqDCILIAMoAhAiBUELSw0oIAVBjoAIagwhCyADKAIQIgVBC0sNJyAFQZqACGoMIAsgAzQCFELsDnxC5AB/IRQMIwtB3wAhEAsgAzQCDCEUDCELQa8TIQ0MHwsgAzQCFCIVQuwOfCEUAkAgAygCHCIFQQJMBEAgFCAVQusOfCADEIMCQQFGGyEUDAELIAVB6QJJDQAgFULtDnwgFCADEIMCQQFGGyEUCyAGQecARg0ZDCALIAM0AgghFAweC0ECIQUgAygCCCIGRQRAQgwhFAwgCyAGrCIUQgx9IBQgBkEMShshFAwfCyADKAIcQQFqrCEUQQMhBQweCyADKAIQQQFqrCEUDBsLIAM0AgQhFAwaCyAIQQE2AnxBwx8hBQweC0GngAhBpoAIIAMoAghBC0obDBQLQdQVIQ0MFgtBACEMQQAhESMAQRBrIg8kACADNAIUIRQCfiADKAIQIg1BDE8EQCANIA1BDG0iBkEMbGsiBUEMaiAFIAVBAEgbIQ0gBiAFQR91aqwgFHwhFAsgD0EMaiEGIBRCAn1CiAFYBEAgFKciDEHEAGtBAnUhBQJAIAYCfyAMQQNxRQRAIAVBAWshBSAGRQ0CQQEMAQsgBkUNAUEACzYCAAsgDEGA54QPbCAFQYCjBWxqQYDWr+MHaqwMAQsgFELkAH0iFCAUQpADfyIWQpADfn0iFUI/h6cgFqdqIRMCQAJAAkAgFaciBUGQA2ogBSAVQgBTGyIFBH8CfyAFQcgBTgRAIAVBrAJPBEBBAyEMIAVBrAJrDAILQQIhDCAFQcgBawwBCyAFQeQAayAFIAVB4wBKIgwbCyIFDQFBAAVBAQshBSAGDQEMAgsgBUECdiERIAVBA3FFIQUgBkUNAQsgBiAFNgIACyAUQoDnhA9+IBEgDEEYbCATQeEAbGpqIAVrrEKAowV+fEKAqrrDA3wLIRQgDUECdEGwnAFqKAIAIgVBgKMFaiAFIA8oAgwbIAUgDUEBShshBSADKAIMIQYgAzQCCCEVIAM0AgQhFiADNAIAIA9BEGokACAUIAWsfCAGQQFrrEKAowV+fCAVQpAcfnwgFkI8fnx8IAM0AiR9DAgLIAM0AgAhFAwVCyAIQQE2AnxBxR8hBQwZC0HBFSENDBILIAMoAhgiBUEHIAUbrAwECyADKAIcIAMoAhhrQQdqQQdurSEUDBELIAMoAhwgAygCGEEGakEHcGtBB2pBB26tIRQMEAsgAxCDAq0hFAwPCyADNAIYCyEUQQEhBQwPC0GpgAghDAwKC0GqgAghDAwJCyADNAIUQuwOfELkAIEiFCAUQj+HIhSFIBR9IRQMCgsgAzQCFCIVQuwOfCEUIBVCpD9TDQogCyAUNwMwIAggB0H4EiALQTBqEIYBNgJ8IAchBQwOCyADKAIgQQBIBEAgCEEANgJ8QcYfIQUMDgsgCyADKAIkIgVBkBxtIgZB5ABsIAUgBkGQHGxrwUE8bcFqNgJAIAggB0H+EiALQUBrEIYBNgJ8IAchBQwNCyADKAIgQQBIBEAgCEEANgJ8QcYfIQUMDQsgAygCKEG07wEtAABBAXFFBEBBiO8BQYzvAUHA7wFB4O8BEBJBlO8BQeDvATYCAEGQ7wFBwO8BNgIAQbTvAUEBOgAACwwLCyAIQQE2AnxBux4hBQwLCyAUQuQAgSEUDAULIAVBgIAIcgsgBBCfAwwHC0GrgAghDAsgDCAEEJ8DIQ0LIAggB0HkACANIAMgBBCeAyIFNgJ8IAdBACAFGyEFDAULQQIhBQwBC0EEIQULAkAgCSAQIAkbIgZB3wBHBEAgBkEtRw0BIAsgFDcDECAIIAdB+RIgC0EQahCGATYCfCAHIQUMBAsgCyAUNwMoIAsgBTYCICAIIAdB8hIgC0EgahCGATYCfCAHIQUMAwsgCyAUNwMIIAsgBTYCACAIIAdB6xIgCxCGATYCfCAHIQUMAgtB7RsLIgUQqAE2AnwLIAtB0ABqJAAgBUUNAQJAIA5FBEAgCCgCfCEJDAELAn8CQAJAIAUtAAAiBkEraw4DAQABAAsgCCgCfAwBCyAFLQABIQYgBUEBaiEFIAgoAnxBAWsLIQkCQCAGQf8BcUEwRw0AA0AgBSwAASIHQTBrQQlLDQEgBUEBaiEFIAlBAWshCSAHQTBGDQALCyAIIAk2AnxBACEGA0AgBiIHQQFqIQYgBSAHaiwAAEEwa0EKSQ0ACyAOIAkgCSAOSRshBgJAIAAgCmogAygCFEGUcUgEf0EtBSASQStHDQEgBiAJayAHakEDQQUgCCgCDC0AAEHDAEYbSQ0BQSsLOgAAIAZBAWshBiAKQQFqIQoLIAYgCU0gASAKTXINAANAIAAgCmpBMDoAACAKQQFqIQogBkEBayIGIAlNDQEgASAKSw0ACwsgCCAJIAEgCmsiByAHIAlLGyIHNgJ8IAAgCmogBSAHEHEaIAgoAnwgCmoLIQogAkEBaiECIAEgCksNAQsLIAFBAWsgCiABIApGGyEKQQALIQYgACAKakEAOgAACyAIQYABaiQAIAYLugEBAn8gAEEORgRAQdEbQeEVIAEoAgAbDwsgAEH//wNxIgJB//8DRyAAQRB1IgNBBUpyRQRAIAEgA0ECdGooAgAiAEEIakGMFiAAGw8LQcYfIQACQAJ/AkACQAJAIANBAWsOBQABBAQCBAsgAkEBSw0DQeCcAQwCCyACQTFLDQJB8JwBDAELIAJBA0sNAUGwnwELIQAgAkUEQCAADwsDQCAALQAAIABBAWohAA0AIAJBAWsiAg0ACwsgAAsOACAAEKEDBEAgABAtCwsnACAAQQBHIABBmIMBR3EgAEGwgwFHcSAAQYzuAUdxIABBpO4BR3EL5AIBA38CQCABLQAADQBB2hUQhgIiAQRAIAEtAAANAQsgAEEMbEHQgwFqEIYCIgEEQCABLQAADQELQecVEIYCIgEEQCABLQAADQELQc8bIQELAkADQCABIAJqLQAAIgRFIARBL0ZyRQRAQRchBCACQQFqIgJBF0cNAQwCCwsgAiEEC0HPGyEDAkACQAJAAkACQCABLQAAIgJBLkYNACABIARqLQAADQAgASEDIAJBwwBHDQELIAMtAAFFDQELIANBzxsQ0AFFDQAgA0GuFRDQAQ0BCyAARQRAQfSCASECIAMtAAFBLkYNAgtBAA8LQYjuASgCACICBEADQCADIAJBCGoQ0AFFDQIgAigCICICDQALC0EkEDQiAgRAIAJB9IIBKQIANwIAIAJBCGoiASADIAQQcRogASAEakEAOgAAIAJBiO4BKAIANgIgQYjuASACNgIACyACQfSCASAAIAJyGyECCyACCyUBAX8jAEEQayICJAAgAiABNgIMIABBxhAgARCkAyACQRBqJAALwR4CD38FfiMAQZABayIDJAAgA0EAQZAB/AsAIANBfzYCTCADIAA2AiwgA0HhADYCICADIAA2AlQgASEEIAIhDyMAQbACayIFJAAgAygCTBoCQAJAIAMoAgRFBEAgAxDJAxogAygCBEUNAQsgBC0AACIBRQ0BAkACQANAAkACQCABQf8BcSIAEH0EQANAIAQiAUEBaiEEIAEtAAEQfQ0ACyADQgAQZANAAn8gAygCBCIAIAMoAmhHBEAgAyAAQQFqNgIEIAAtAAAMAQsgAxAmCxB9DQALIAMoAgQhBCADKQNwQgBZBEAgAyAEQQFrIgQ2AgQLIAQgAygCLGusIAMpA3ggFHx8IRQMAQsCfwJAAkAgAEElRgRAIAQtAAEiAEEqRg0BIABBJUcNAgsgA0IAEGQCQCAELQAAQSVGBEADQAJ/IAMoAgQiACADKAJoRwRAIAMgAEEBajYCBCAALQAADAELIAMQJgsiARB9DQALIARBAWohBAwBCyADKAIEIgAgAygCaEcEQCADIABBAWo2AgQgAC0AACEBDAELIAMQJiEBCyAELQAAIAFHBEAgAykDcEIAWQRAIAMgAygCBEEBazYCBAsgAUEATiANcg0KDAkLIAMoAgQgAygCLGusIAMpA3ggFHx8IRQgBCEBDAMLQQAhByAEQQJqDAELAkAgAEEwayIAQQlLDQAgBC0AAkEkRw0AIwBBEGsiASAPNgIMIAEgDyAAQQJ0akEEayAPIABBAUsbIgBBBGo2AgggACgCACEHIARBA2oMAQsgDygCACEHIA9BBGohDyAEQQFqCyEBQQAhC0EAIQIgAS0AACIEQTBrQf8BcUEJTQRAA0AgAkEKbCAEQf8BcWpBMGshAiABLQABIQQgAUEBaiEBIARBMGtB/wFxQQpJDQALCyAEQf8BcUHtAEcEfyABBUEAIQkgB0EARyELIAEtAAEhBEEAIQogAUEBagsiBkEBaiEBQQMhAAJAAkACQAJAAkACQCAEQf8BcUHBAGsOOgQJBAkEBAQJCQkJAwkJCQkJCQQJCQkJBAkJBAkJCQkJBAkEBAQEBAAEBQkBCQQEBAkJBAIECQkECQIJCyAGQQJqIAEgBi0AAUHoAEYiABshAUF+QX8gABshAAwECyAGQQJqIAEgBi0AAUHsAEYiABshAUEDQQEgABshAAwDC0EBIQAMAgtBAiEADAELQQAhACAGIQELQQEgACABLQAAIgBBL3FBA0YiBBshEAJAIABBIHIgACAEGyIMQdsARg0AAkAgDEHuAEcEQCAMQeMARw0BQQEgAiACQQFMGyECDAILIAcgECAUEKUDDAILIANCABBkA0ACfyADKAIEIgAgAygCaEcEQCADIABBAWo2AgQgAC0AAAwBCyADECYLEH0NAAsgAygCBCEEIAMpA3BCAFkEQCADIARBAWsiBDYCBAsgBCADKAIsa6wgAykDeCAUfHwhFAsgAyACrCISEGQCQCADKAIEIgAgAygCaEcEQCADIABBAWo2AgQMAQsgAxAmQQBIDQQLIAMpA3BCAFkEQCADIAMoAgRBAWs2AgQLQRAhBAJAAkACQAJAAkACQAJAAkACQAJAAkACQCAMQdgAaw4hBgsLAgsLCwsLAQsCBAEBAQsFCwsLCwsDBgsLAgsECwsGAAsgDEHBAGsiAEEGS0EBIAB0QfEAcUVyDQoLIAVBCGogAyAQQQAQqAMgAykDeEIAIAMoAgQgAygCLGusfVENDiAHRQ0JIAUpAxAhEiAFKQMIIRMgEA4DBQYHCQsgDEEQckHzAEYEQCAFQSBqQX9BgQIQmAIgBUEAOgAgIAxB8wBHDQggBUEAOgBBIAVBADoALiAFQQA2ASoMCAsgBUEgaiABLQABIgBB3gBGIgRBgQIQmAIgBUEAOgAgIAFBAmogAUEBaiAEGyEGAn8CQAJAIAFBAkEBIAQbai0AACIBQS1HBEAgAUHdAEYNASAAQd4ARyEIIAYMAwsgBSAAQd4ARyIIOgBODAELIAUgAEHeAEciCDoAfgsgBkEBagshAQNAAkAgAS0AACIAQS1HBEAgAEUNDyAAQd0ARg0KDAELQS0hACABLQABIgZFIAZB3QBGcg0AIAFBAWohDgJAIAYgAUEBay0AACIETQRAIAYhAAwBCwNAIARBAWoiBCAFQSBqaiAIOgAAIAQgDi0AACIASQ0ACwsgDiEBCyAAIAVBIGpqIAg6AAEgAUEBaiEBDAALAAtBCCEEDAILQQohBAwBC0EAIQQLQgAhEkEAIQJBACEGQQAhDiMAQRBrIggkAAJAIARBAUcgBEEkTXFFBEBBiOoBQRw2AgAMAQsDQAJ/IAMoAgQiACADKAJoRwRAIAMgAEEBajYCBCAALQAADAELIAMQJgsiABB9DQALAkACQCAAQStrDgMAAQABC0F/QQAgAEEtRhshDiADKAIEIgAgAygCaEcEQCADIABBAWo2AgQgAC0AACEADAELIAMQJiEACwJAAkACQAJAIARBAEcgBEEQR3EgAEEwR3JFBEACfyADKAIEIgAgAygCaEcEQCADIABBAWo2AgQgAC0AAAwBCyADECYLIgBBX3FB2ABGBEBBECEEAn8gAygCBCIAIAMoAmhHBEAgAyAAQQFqNgIEIAAtAAAMAQsgAxAmCyIAQYH/AGotAABBEEkNAyADKQNwQgBZBEAgAyADKAIEQQFrNgIECyADQgAQZAwGCyAEDQFBCCEEDAILIARBCiAEGyIEIABBgf8Aai0AAEsNACADKQNwQgBZBEAgAyADKAIEQQFrNgIECyADQgAQZEGI6gFBHDYCAAwECyAEQQpHDQAgAEEwayICQQlNBEBBACEAA0AgAEEKbCACaiIAQZmz5swBSQJ/IAMoAgQiAiADKAJoRwRAIAMgAkEBajYCBCACLQAADAELIAMQJgtBMGsiAkEJTXENAAsgAK0hEgsgAkEJSw0CIBJCCn4hEyACrSEVA0ACQAJ/IAMoAgQiACADKAJoRwRAIAMgAEEBajYCBCAALQAADAELIAMQJgsiAEEwayICQQlNIBMgFXwiEkKas+bMmbPmzBlUcUUEQCACQQlNDQEMBQsgEkIKfiITIAKtIhVCf4VYDQELC0EKIQQMAQsgBCAEQQFrcQRAIABBgf8Aai0AACIGIARJBEADQCAGIAIgBGxqIgJBx+PxOEkCfyADKAIEIgAgAygCaEcEQCADIABBAWo2AgQgAC0AAAwBCyADECYLIgBBgf8Aai0AACIGIARJcQ0ACyACrSESCyAEIAZNDQEgBK0hEwNAIBIgE34iFSAGrUL/AYMiFkJ/hVYNAiAVIBZ8IRIgBAJ/IAMoAgQiACADKAJoRwRAIAMgAEEBajYCBCAALQAADAELIAMQJgsiAEGB/wBqLQAAIgZNDQIgCCATQgAgEkIAEEAgCCkDCFANAAsMAQsgBEEXbEEFdkEHcSwAgYEBIREgAEGB/wBqLQAAIgIgBEkEQANAIAIgBiARdCIAciEGIABBgICAwABJAn8gAygCBCIAIAMoAmhHBEAgAyAAQQFqNgIEIAAtAAAMAQsgAxAmCyIAQYH/AGotAAAiAiAESXENAAsgBq0hEgsgAiAETw0AQn8gEa0iE4giFSASVA0AA0AgAq1C/wGDIBIgE4aEIRIgBAJ/IAMoAgQiACADKAJoRwRAIAMgAEEBajYCBCAALQAADAELIAMQJgsiAEGB/wBqLQAAIgJNDQEgEiAVWA0ACwsgBCAAQYH/AGotAABNDQADQCAEAn8gAygCBCIAIAMoAmhHBEAgAyAAQQFqNgIEIAAtAAAMAQsgAxAmC0GB/wBqLQAASw0AC0GI6gFBxAA2AgBBACEOQn8hEgsgAykDcEIAWQRAIAMgAygCBEEBazYCBAsgDkEBckUgEkJ/UXEEQEGI6gFBxAA2AgBCfiESDAELIBIgDqwiE4UgE30hEgsgCEEQaiQAIAMpA3hCACADKAIEIAMoAixrrH1RDQkgB0UgDEHwAEdyRQRAIAcgEj4CAAwFCyAHIBAgEhClAwwECyAHIBMgEhCmAzgCAAwDCyAHIBMgEhCVAjkDAAwCCyAHIBM3AwAgByASNwMIDAELQR8gAkEBaiAMQeMARyIGGyEIAn8gEEEBRgRAIAchAiALBEAgCEECdBA0IgJFDQULIAVCADcCqAJBACEEAkACQANAIAIhAANAAn8gAygCBCICIAMoAmhHBEAgAyACQQFqNgIEIAItAAAMAQsgAxAmCyICIAVqLQAhRQ0CIAUgAjoAGyAFQRxqIAVBG2pBASAFQagCahDSASICQX5GDQAgAkF/RgRAQQAhCQwECyAABEAgACAEQQJ0aiAFKAIcNgIAIARBAWohBAsgC0UgBCAIR3INAAsgACAIQQF0QQFyIghBAnQQ3AEiAg0AC0EAIQkgACEKQQEhCwwIC0EAIQkgACAFQagCagR/IAUoAqgCBUEAC0UNAhoLIAAhCgwGCyALBEBBACEEIAgQNCICRQ0EA0AgAiEAA0ACfyADKAIEIgIgAygCaEcEQCADIAJBAWo2AgQgAi0AAAwBCyADECYLIgIgBWotACFFBEAgACEJQQAMBAsgACAEaiACOgAAIARBAWoiBCAIRw0ACyAAIAhBAXRBAXIiCBDcASICDQALQQAhCiAAIQlBASELDAYLQQAhBCAHBEADQAJ/IAMoAgQiACADKAJoRwRAIAMgAEEBajYCBCAALQAADAELIAMQJgsiACAFai0AIQRAIAQgB2ogADoAACAEQQFqIQQMAQUgByIAIQlBAAwDCwALAAsDQAJ/IAMoAgQiACADKAJoRwRAIAMgAEEBajYCBCAALQAADAELIAMQJgsgBWotACENAAtBACEAQQAhCUEACyEKIAMoAgQhAiADKQNwQgBZBEAgAyACQQFrIgI2AgQLIAMpA3ggAiADKAIsa6x8IhNQIAYgEiATUXJFcg0FIAsEQCAHIAA2AgALIAxB4wBGDQAgCgRAIAogBEECdGpBADYCAAsgCUUEQEEAIQkMAQsgBCAJakEAOgAACyADKAIEIAMoAixrrCADKQN4IBR8fCEUIA0gB0EAR2ohDQsgAUEBaiEEIAEtAAEiAQ0BDAULC0EBIQtBACEJQQAhCgsgDUF/IA0bIQ0LIAtFDQEgCRAtIAoQLQwBC0F/IQ0LIAVBsAJqJAAgA0GQAWokACANC0MAAkAgAEUNAAJAAkACQAJAIAFBAmoOBgABAgIEAwQLIAAgAjwAAA8LIAAgAj0BAA8LIAAgAj4CAA8LIAAgAjcDAAsL2QMCBX8CfiMAQSBrIgQkACABQv///////z+DIQcCQCABQjCIQv//AYMiCKciA0GB/wBrQf0BTQRAIAdCGYinIQICQCAAUCABQv///w+DIgdCgICACFQgB0KAgIAIURtFBEAgAkEBaiECDAELIAAgB0KAgIAIhYRCAFINACACQQFxIAJqIQILQQAgAiACQf///wNLIgUbIQJBgYF/QYCBfyAFGyADaiEDDAELIAAgB4RQIAhC//8BUnJFBEAgB0IZiKdBgICAAnIhAkH/ASEDDAELIANB/oABSwRAQf8BIQMMAQtBgP8AQYH/ACAIUCIFGyIGIANrIgJB8ABKBEBBACECQQAhAwwBCyAEQRBqIAAgByAHQoCAgICAgMAAhCAFGyIHQYABIAJrEEQgBCAAIAcgAhCKASAEKQMIIgBCGYinIQICQCAEKQMAIAMgBkcgBCkDECAEKQMYhEIAUnGthCIHUCAAQv///w+DIgBCgICACFQgAEKAgIAIURtFBEAgAkEBaiECDAELIAcgAEKAgIAIhYRCAFINACACQQFxIAJqIQILIAJBgICABHMgAiACQf///wNLIgMbIQILIARBIGokACABQiCIp0GAgICAeHEgA0EXdHIgAnK+C4kEAgN/AX4CQAJAAn8CQAJAAn8gACgCBCICIAAoAmhHBEAgACACQQFqNgIEIAItAAAMAQsgABAmCyICQStrDgMAAQABCyACQS1GIAFFAn8gACgCBCIDIAAoAmhHBEAgACADQQFqNgIEIAMtAAAMAQsgABAmCyIDQTprIgFBdUtyDQEaIAApA3BCAFMNAiAAIAAoAgRBAWs2AgQMAgsgAkE6ayEBIAIhA0EACyEEIAFBdkkNAAJAIANBMGtBCk8NAEEAIQIDQCADIAJBCmxqAn8gACgCBCICIAAoAmhHBEAgACACQQFqNgIEIAItAAAMAQsgABAmCyEDQTBrIQIgAkHMmbPmAEggA0EwayIBQQlNcQ0ACyACrCEFIAFBCk8NAANAIAOtIAVCCn58IQUCfyAAKAIEIgEgACgCaEcEQCAAIAFBAWo2AgQgAS0AAAwBCyAAECYLIgNBMGsiAUEJTSAFQjB9IgVCro+F18fC66MBU3ENAAsgAUEKTw0AA0ACfyAAKAIEIgEgACgCaEcEQCAAIAFBAWo2AgQgAS0AAAwBCyAAECYLQTBrQQpJDQALCyAAKQNwQgBZBEAgACAAKAIEQQFrNgIEC0IAIAV9IAUgBBshBQwBC0KAgICAgICAgIB/IQUgACkDcEIAUw0AIAAgACgCBEEBazYCBEKAgICAgICAgIB/DwsgBQuJMgMRfwd+AXwjAEEwayIMJAACQAJAIAJBAksNACACQQJ0IgIoAux+IREgAigC4H4hEANAAn8gASgCBCICIAEoAmhHBEAgASACQQFqNgIEIAItAAAMAQsgARAmCyICEH0NAAtBASEIAkACQCACQStrDgMAAQABC0F/QQEgAkEtRhshCCABKAIEIgIgASgCaEcEQCABIAJBAWo2AgQgAi0AACECDAELIAEQJiECCwJAAkAgAkFfcUHJAEYEQANAIAZBB0YNAgJ/IAEoAgQiAiABKAJoRwRAIAEgAkEBajYCBCACLQAADAELIAEQJgshAiAGLACKCCAGQQFqIQYgAkEgckYNAAsLIAZBA0cEQCAGQQhGIgcNASADRSAGQQRJcg0CIAcNAQsgASkDcCIVQgBZBEAgASABKAIEQQFrNgIECyADRSAGQQRJcg0AIBVCAFMhAgNAIAJFBEAgASABKAIEQQFrNgIECyAGQQFrIgZBA0sNAAsLQgAhFSMAQRBrIgckACAIskMAAIB/lLwiA0H///8DcSEIAn8gA0EXdiICQf8BcSIBBEAgAUH/AUcEQCAIrUIZhiEVIAJB/wFxQYD/AGoMAgsgCK1CGYYhFUH//wEMAQtBACAIRQ0AGiAHIAitQgAgCGciAUHRAGoQRCAHKQMIQoCAgICAgMAAhSEVIAcpAwAhFkGJ/wAgAWsLIQEgDCAWNwMAIAwgAa1CMIYgA0Efdq1CP4aEIBWENwMIIAdBEGokACAMKQMIIRUgDCkDACEWDAILAkACQAJAAkACQAJAIAYNAEEAIQYgAkFfcUHOAEcNAANAIAZBAkYNAgJ/IAEoAgQiAiABKAJoRwRAIAEgAkEBajYCBCACLQAADAELIAEQJgshAiAGLADnDSAGQQFqIQYgAkEgckYNAAsLIAYOBAMBAQABCwJAAn8gASgCBCICIAEoAmhHBEAgASACQQFqNgIEIAItAAAMAQsgARAmC0EoRgRAQQEhBgwBC0KAgICAgIDg//8AIRUgASkDcEIAUw0GIAEgASgCBEEBazYCBAwGCwNAAn8gASgCBCICIAEoAmhHBEAgASACQQFqNgIEIAItAAAMAQsgARAmCyICQTBrQQpJIAJBwQBrQRpJciACQd8ARnJFIAJB4QBrQRpPcUUEQCAGQQFqIQYMAQsLQoCAgICAgOD//wAhFSACQSlGDQUgASkDcCIWQgBZBEAgASABKAIEQQFrNgIECwJAIAMEQCAGDQEMBQtBiOoBQRw2AgBCACEWDAILA0AgFkIAWQRAIAEgASgCBEEBazYCBAsgBkEBayIGDQALDAMLIAEpA3BCAFkEQCABIAEoAgRBAWs2AgQLQYjqAUEcNgIACyABQgAQZAwCCwJAIAJBMEcNAAJ/IAEoAgQiByABKAJoRwRAIAEgB0EBajYCBCAHLQAADAELIAEQJgtBX3FB2ABGBEAjAEGwA2siBSQAAn8gASgCBCICIAEoAmhHBEAgASACQQFqNgIEIAItAAAMAQsgARAmCyECAkACfwNAIAJBMEcEQAJAIAJBLkcNBCABKAIEIgIgASgCaEYNACABIAJBAWo2AgQgAi0AAAwDCwUgASgCBCICIAEoAmhHBH9BASEPIAEgAkEBajYCBCACLQAABUEBIQ8gARAmCyECDAELCyABECYLIgJBMEcEQEEBIQsMAQsDQCAYQgF9IRgCfyABKAIEIgIgASgCaEcEQCABIAJBAWo2AgQgAi0AAAwBCyABECYLIgJBMEYNAAtBASELQQEhDwtCgICAgICAwP8/IRYDQAJAIAIhBgJAAkAgAkEwayINQQpJDQAgAkEuRyIHIAJBIHIiBkHhAGtBBUtxDQIgBw0AIAsNAkEBIQsgFSEYDAELIAZB1wBrIA0gAkE5ShshAgJAIBVCB1cEQCACIAlBBHRqIQkMAQsgFUIcWARAIAVBMGogAhBPIAVBIGogGiAWQgBCgICAgICAwP0/EC8gBUEQaiAFKQMwIAUpAzggBSkDICIaIAUpAygiFhAvIAUgBSkDECAFKQMYIBcgGRBKIAUpAwghGSAFKQMAIRcMAQsgAkUgCnINACAFQdAAaiAaIBZCAEKAgICAgICA/z8QLyAFQUBrIAUpA1AgBSkDWCAXIBkQSkEBIQogBSkDSCEZIAUpA0AhFwsgFUIBfCEVQQEhDwsgASgCBCICIAEoAmhHBH8gASACQQFqNgIEIAItAAAFIAEQJgshAgwBCwsCfiAPRQRAAkACQCABKQNwQgBZBEAgASABKAIEIgJBAWs2AgQgA0UNASABIAJBAms2AgQgC0UNAiABIAJBA2s2AgQMAgsgAw0BCyABQgAQZAsgBUHgAGpEAAAAAAAAAAAgCLemEGwgBSkDYCEXIAUpA2gMAQsgFUIHVwRAIBUhFgNAIAlBBHQhCSAWQgF8IhZCCFINAAsLAkACQAJAIAJBX3FB0ABGBEAgASADEKcDIhZCgICAgICAgICAf1INAyADBEAgASkDcEIAWQ0CDAMLQgAhFyABQgAQZEIADAQLQgAhFiABKQNwQgBTDQILIAEgASgCBEEBazYCBAtCACEWCyAJRQRAIAVB8ABqRAAAAAAAAAAAIAi3phBsIAUpA3AhFyAFKQN4DAELIBggFSALG0IChiAWfEIgfSIVQQAgEWutVQRAQYjqAUHEADYCACAFQaABaiAIEE8gBUGQAWogBSkDoAEgBSkDqAFCf0L///////+///8AEC8gBUGAAWogBSkDkAEgBSkDmAFCf0L///////+///8AEC8gBSkDgAEhFyAFKQOIAQwBCyARQeIBa6wgFVcEQCAJQQBOBEADQCAFQaADaiAXIBlCAEKAgICAgIDA/79/EEogFyAZQoCAgICAgID/PxCtAyEBIAVBkANqIBcgGSAFKQOgAyAXIAFBAE4iAhsgBSkDqAMgGSACGxBKIAIgCUEBdCIBciEJIBVCAX0hFSAFKQOYAyEZIAUpA5ADIRcgAUEATg0ACwsCfiAVQSAgEWutfCIWpyIBQQAgAUEAShsgECAWIBCtUxsiAUHxAE8EQCAFQYADaiAIEE8gBSkDiAMhFiAFKQOAAyEaQgAMAQsgBUHgAmpBkAEgAWsQmQIQbCAFQdACaiAIEE8gBSkD0AIhGiAFQfACaiAFKQPgAiAFKQPoAiAFKQPYAiIWEKwDIAUpA/gCIRsgBSkD8AILIRggBUHAAmogCSAJQQFxRSAXIBlCAEIAEIcBQQBHIAFBIElxcSIBchCcASAFQbACaiAaIBYgBSkDwAIgBSkDyAIQLyAFQZACaiAFKQOwAiAFKQO4AiAYIBsQSiAFQaACaiAaIBZCACAXIAEbQgAgGSABGxAvIAVBgAJqIAUpA6ACIAUpA6gCIAUpA5ACIAUpA5gCEEogBUHwAWogBSkDgAIgBSkDiAIgGCAbEIgCIAUpA/ABIhggBSkD+AEiFkIAQgAQhwFFBEBBiOoBQcQANgIACyAFQeABaiAYIBYgFacQqwMgBSkD4AEhFyAFKQPoAQwBC0GI6gFBxAA2AgAgBUHQAWogCBBPIAVBwAFqIAUpA9ABIAUpA9gBQgBCgICAgICAwAAQLyAFQbABaiAFKQPAASAFKQPIAUIAQoCAgICAgMAAEC8gBSkDsAEhFyAFKQO4AQshFSAMIBc3AxAgDCAVNwMYIAVBsANqJAAgDCkDGCEVIAwpAxAhFgwECyABKQNwQgBTDQAgASABKAIEQQFrNgIECyABIQYgAiEHIAghDSADIQhBACEDIwBBkMYAayIEJABBACARayIPIBBrIRQCQAJ/A0ACQCAHQTBHBEAgB0EuRw0EIAYoAgQiASAGKAJoRg0BIAYgAUEBajYCBCABLQAADAMLIAYoAgQiASAGKAJoRwRAIAYgAUEBajYCBCABLQAAIQcFIAYQJiEHC0EBIQMMAQsLIAYQJgsiB0EwRgRAA0AgFUIBfSEVAn8gBigCBCIBIAYoAmhHBEAgBiABQQFqNgIEIAEtAAAMAQsgBhAmCyIHQTBGDQALQQEhAwtBASELCyAEQQA2ApAGAn4CQAJAAkACQCAHQS5GIgEgB0EwayICQQlNcgRAA0ACQCABQQFxBEAgC0UEQCAWIRVBASELDAILIANFIQEMBAsgFkIBfCEWIAlB/A9MBEAgDiAWpyAHQTBGGyEOIARBkAZqIAlBAnRqIgEgCgR/IAcgASgCAEEKbGpBMGsFIAILNgIAQQEhA0EAIApBAWoiASABQQlGIgEbIQogASAJaiEJDAELIAdBMEYNACAEIAQoAoBGQQFyNgKARkHcjwEhDgsCfyAGKAIEIgEgBigCaEcEQCAGIAFBAWo2AgQgAS0AAAwBCyAGECYLIgdBLkYiASAHQTBrIgJBCklyDQALCyAVIBYgCxshFSADRSAHQV9xQcUAR3JFBEACQCAGIAgQpwMiF0KAgICAgICAgIB/Ug0AIAhFDQRCACEXIAYpA3BCAFMNACAGIAYoAgRBAWs2AgQLIBUgF3whFQwECyADRSEBIAdBAEgNAQsgBikDcEIAUw0AIAYgBigCBEEBazYCBAsgAUUNAUGI6gFBHDYCAAsgBkIAEGRCACEVQgAMAQsgBCgCkAYiAUUEQCAERAAAAAAAAAAAIA23phBsIAQpAwghFSAEKQMADAELIBUgFlIgFkIJVXIgEEEeTUEAIAEgEHYbckUEQCAEQTBqIA0QTyAEQSBqIAEQnAEgBEEQaiAEKQMwIAQpAzggBCkDICAEKQMoEC8gBCkDGCEVIAQpAxAMAQsgD0EBdq0gFVMEQEGI6gFBxAA2AgAgBEHgAGogDRBPIARB0ABqIAQpA2AgBCkDaEJ/Qv///////7///wAQLyAEQUBrIAQpA1AgBCkDWEJ/Qv///////7///wAQLyAEKQNIIRUgBCkDQAwBCyARQeIBa6wgFVUEQEGI6gFBxAA2AgAgBEGQAWogDRBPIARBgAFqIAQpA5ABIAQpA5gBQgBCgICAgICAwAAQLyAEQfAAaiAEKQOAASAEKQOIAUIAQoCAgICAgMAAEC8gBCkDeCEVIAQpA3AMAQsgCgRAIApBCEwEQCAEQZAGaiAJQQJ0aiIBKAIAIQYDQCAGQQpsIQYgCkEBaiIKQQlHDQALIAEgBjYCAAsgCUEBaiEJCwJAIA5BCU4gFUIRVXIgFaciCiAOSHINACAVQglRBEAgBEHAAWogDRBPIARBsAFqIAQoApAGEJwBIARBoAFqIAQpA8ABIAQpA8gBIAQpA7ABIAQpA7gBEC8gBCkDqAEhFSAEKQOgAQwCCyAVQghXBEAgBEGQAmogDRBPIARBgAJqIAQoApAGEJwBIARB8AFqIAQpA5ACIAQpA5gCIAQpA4ACIAQpA4gCEC8gBEHgAWpBCCAKa0ECdCgCwH4QTyAEQdABaiAEKQPwASAEKQP4ASAEKQPgASAEKQPoARCqAyAEKQPYASEVIAQpA9ABDAILIBAgCkF9bGpBG2oiAkEeTEEAIAQoApAGIgEgAnYbDQAgBEHgAmogDRBPIARB0AJqIAEQnAEgBEHAAmogBCkD4AIgBCkD6AIgBCkD0AIgBCkD2AIQLyAEQbACaiAKQQJ0QZj+AGooAgAQTyAEQaACaiAEKQPAAiAEKQPIAiAEKQOwAiAEKQO4AhAvIAQpA6gCIRUgBCkDoAIMAQsDQCAEQZAGaiAJIgFBAWsiCUECdGooAgBFDQALQQAhDgJAIApBCW8iAkUEQEEAIQIMAQsgAkEJaiACIBVCAFMbIRICQCABRQRAQQAhAkEAIQEMAQtBgJTr3ANBACASa0ECdEHg/gBqKAIAIgVtIQtBACEHQQAhBkEAIQIDQCAEQZAGaiIPIAZBAnRqIgMgByADKAIAIgkgBW4iCGoiAzYCACACQQFqQf8PcSACIANFIAIgBkZxIgMbIQIgCkEJayAKIAMbIQogCyAJIAUgCGxrbCEHIAZBAWoiBiABRw0ACyAHRQ0AIAFBAnQgD2ogBzYCACABQQFqIQELIAogEmtBCWohCgsDQCAEQZAGaiACQQJ0aiEPIApBJEghBgJAA0AgBkUEQCAKQSRHDQIgDygCAEHR6fkETw0CCyABQf8PaiEJQQAhAwNAIAEhCCADrSAEQZAGaiAJQf8PcSILQQJ0aiIBNQIAQh2GfCIVQoGU69wDVAR/QQAFIBUgFUKAlOvcA4AiFkKAlOvcA359IRUgFqcLIQMgASAVPgIAIAggCCALIAggFVAbIAIgC0YbIAsgCEEBa0H/D3EiB0cbIQEgC0EBayEJIAIgC0cNAAsgDkEdayEOIAghASADRQ0ACyACQQFrQf8PcSICIAFGBEAgBEGQBmoiCCABQf4PakH/D3FBAnRqIgEgASgCACAHQQJ0IAhqKAIAcjYCACAHIQELIApBCWohCiAEQZAGaiACQQJ0aiADNgIADAELCwJAA0AgAUEBakH/D3EhCCAEQZAGaiABQQFrQf8PcUECdGohEgNAQQlBASAKQS1KGyETAkADQCACIQNBACEGAkADQAJAIAMgBmpB/w9xIgIgAUYNACAEQZAGaiACQQJ0aigCACIHIAZBAnQoArB+IgJJDQAgAiAHSQ0CIAZBAWoiBkEERw0BCwsgCkEkRw0AQgAhFUEAIQZCACEWA0AgASADIAZqQf8PcSICRgRAIAFBAWpB/w9xIgFBAnQgBGpBADYCjAYLIARBgAZqIARBkAZqIAJBAnRqKAIAEJwBIARB8AVqIBUgFkIAQoCAgIDlmreOwAAQLyAEQeAFaiAEKQPwBSAEKQP4BSAEKQOABiAEKQOIBhBKIAQpA+gFIRYgBCkD4AUhFSAGQQFqIgZBBEcNAAsgBEHQBWogDRBPIARBwAVqIBUgFiAEKQPQBSAEKQPYBRAvQgAhFSAEKQPIBSEWIAQpA8AFIRcgDkHxAGoiByARayIJQQAgCUEAShsgECAJIBBIIggbIgZB8ABNDQIMBQsgDiATaiEOIAEhAiABIANGDQALQYCU69wDIBN2IQVBfyATdEF/cyELQQAhBiADIQIDQCAEQZAGaiIPIANBAnRqIgcgBiAHKAIAIgkgE3ZqIgc2AgAgAkEBakH/D3EgAiAHRSACIANGcSIHGyECIApBCWsgCiAHGyEKIAkgC3EgBWwhBiADQQFqQf8PcSIDIAFHDQALIAZFDQEgAiAIRwRAIAFBAnQgD2ogBjYCACAIIQEMAwsgEiASKAIAQQFyNgIADAELCwsgBEGQBWpB4QEgBmsQmQIQbCAEQbAFaiAEKQOQBSAEKQOYBSAWEKwDIAQpA7gFIRogBCkDsAUhGSAEQYAFakHxACAGaxCZAhBsIARBoAVqIBcgFiAEKQOABSAEKQOIBRCpAyAEQfAEaiAXIBYgBCkDoAUiFSAEKQOoBSIYEIgCIARB4ARqIBkgGiAEKQPwBCAEKQP4BBBKIAQpA+gEIRYgBCkD4AQhFwsCQCADQQRqQf8PcSICIAFGDQACQCAEQZAGaiACQQJ0aigCACICQf/Jte4BTQRAIAJFIANBBWpB/w9xIAFGcQ0BIARB8ANqIA23RAAAAAAAANA/ohBsIARB4ANqIBUgGCAEKQPwAyAEKQP4AxBKIAQpA+gDIRggBCkD4AMhFQwBCyACQYDKte4BRwRAIARB0ARqIA23RAAAAAAAAOg/ohBsIARBwARqIBUgGCAEKQPQBCAEKQPYBBBKIAQpA8gEIRggBCkDwAQhFQwBCyANtyEcIAEgA0EFakH/D3FGBEAgBEGQBGogHEQAAAAAAADgP6IQbCAEQYAEaiAVIBggBCkDkAQgBCkDmAQQSiAEKQOIBCEYIAQpA4AEIRUMAQsgBEGwBGogHEQAAAAAAADoP6IQbCAEQaAEaiAVIBggBCkDsAQgBCkDuAQQSiAEKQOoBCEYIAQpA6AEIRULIAZB7wBLDQAgBEHQA2ogFSAYQgBCgICAgICAwP8/EKkDIAQpA9ADIAQpA9gDQgBCABCHAQ0AIARBwANqIBUgGEIAQoCAgICAgMD/PxBKIAQpA8gDIRggBCkDwAMhFQsgBEGwA2ogFyAWIBUgGBBKIARBoANqIAQpA7ADIAQpA7gDIBkgGhCIAiAEKQOoAyEWIAQpA6ADIRcCQCAUQQJrIAdB/////wdxTg0AIAQgFkL///////////8AgzcDmAMgBCAXNwOQAyAEQYADaiAXIBZCAEKAgICAgICA/z8QLyAEKQOQAyAEKQOYA0KAgICAgICAuMAAEK0DIQIgBCkDiAMgFiACQQBOIgEbIRYgBCkDgAMgFyABGyEXIAggBiAJRyACQQBIcnEgFSAYQgBCABCHAUEAR3FFIBQgASAOaiIOQe4Aak5xDQBBiOoBQcQANgIACyAEQfACaiAXIBYgDhCrAyAEKQP4AiEVIAQpA/ACCyEWIAwgFTcDKCAMIBY3AyAgBEGQxgBqJAAgDCkDKCEVIAwpAyAhFgwCC0IAIRYMAQtCACEVCyAAIBY3AwAgACAVNwMIIAxBMGokAAvDBgIEfwN+IwBBgAFrIgUkAAJAAkACQCADIARCAEIAEIcBRQ0AAn8gBEL///////8/gyEKAn8gBEIwiKdB//8BcSIHQf//AUcEQEEEIAcNARpBAkEDIAMgCoRQGwwCCyADIAqEUAsLRQ0AIAJCMIinIghB//8BcSIGQf//AUcNAQsgBUEQaiABIAIgAyAEEC8gBSAFKQMQIgIgBSkDGCIBIAIgARCqAyAFKQMIIQIgBSkDACEEDAELIAEgAkL///////////8AgyIKIAMgBEL///////////8AgyIJEIcBQQBMBEAgASAKIAMgCRCHAQRAIAEhBAwCCyAFQfAAaiABIAJCAEIAEC8gBSkDeCECIAUpA3AhBAwBCyAEQjCIp0H//wFxIQcgBgR+IAEFIAVB4ABqIAEgCkIAQoCAgICAgMC7wAAQLyAFKQNoIgpCMIinQfgAayEGIAUpA2ALIQQgB0UEQCAFQdAAaiADIAlCAEKAgICAgIDAu8AAEC8gBSkDWCIJQjCIp0H4AGshByAFKQNQIQMLIAlC////////P4NCgICAgICAwACEIQsgCkL///////8/g0KAgICAgIDAAIQhCiAGIAdKBEADQAJ+IAogC30gAyAEVq19IglCAFkEQCAJIAQgA30iBIRQBEAgBUEgaiABIAJCAEIAEC8gBSkDKCECIAUpAyAhBAwFCyAJQgGGIARCP4iEDAELIApCAYYgBEI/iIQLIQogBEIBhiEEIAZBAWsiBiAHSg0ACyAHIQYLAkAgCiALfSADIARWrX0iCUIAUwRAIAohCQwBCyAJIAQgA30iBIRCAFINACAFQTBqIAEgAkIAQgAQLyAFKQM4IQIgBSkDMCEEDAELIAlC////////P1gEQANAIARCP4ggBkEBayEGIARCAYYhBCAJQgGGhCIJQoCAgICAgMAAVA0ACwsgCEGAgAJxIQcgBkEATARAIAVBQGsgBCAJQv///////z+DIAZB+ABqIAdyrUIwhoRCAEKAgICAgIDAwz8QLyAFKQNIIQIgBSkDQCEEDAELIAlC////////P4MgBiAHcq1CMIaEIQILIAAgBDcDACAAIAI3AwggBUGAAWokAAuIEAIFfw9+IwBB0AJrIgUkACAEQv///////z+DIQsgAkL///////8/gyEKIAIgBIVCgICAgICAgICAf4MhDCAEQjCIp0H//wFxIQcCQAJAIAJCMIinQf//AXEiCEH//wFrQYKAfk8EQCAHQf//AWtBgYB+Sw0BCyABUCACQv///////////wCDIg5CgICAgICAwP//AFQgDkKAgICAgIDA//8AURtFBEAgAkKAgICAgIAghCEMDAILIANQIARC////////////AIMiAkKAgICAgIDA//8AVCACQoCAgICAgMD//wBRG0UEQCAEQoCAgICAgCCEIQwgAyEBDAILIAEgDkKAgICAgIDA//8AhYRQBEAgAyACQoCAgICAgMD//wCFhFAEQEIAIQFCgICAgICA4P//ACEMDAMLIAxCgICAgICAwP//AIQhDEIAIQEMAgsgAyACQoCAgICAgMD//wCFhFAEQEIAIQEMAgsgASAOhFAEQEKAgICAgIDg//8AIAwgAiADhFAbIQxCACEBDAILIAIgA4RQBEAgDEKAgICAgIDA//8AhCEMQgAhAQwCCyAOQv///////z9YBEAgBUHAAmogASAKIAEgCiAKUCIGG3lCwABCACAGG3ynIgZBD2sQREEQIAZrIQYgBSkDyAIhCiAFKQPAAiEBCyACQv///////z9WDQAgBUGwAmogAyALIAMgCyALUCIJG3lCwABCACAJG3ynIglBD2sQRCAGIAlqQRBrIQYgBSkDuAIhCyAFKQOwAiEDCyAFQaACaiALQoCAgICAgMAAhCISQg+GIANCMYiEIgJCAEKAgICAsOa8gvUAIAJ9IgRCABBAIAVBkAJqQgAgBSkDqAJ9QgAgBEIAEEAgBUGAAmogBSkDmAJCAYYgBSkDkAJCP4iEIgRCACACQgAQQCAFQfABaiAEQgBCACAFKQOIAn1CABBAIAVB4AFqIAUpA/gBQgGGIAUpA/ABQj+IhCIEQgAgAkIAEEAgBUHQAWogBEIAQgAgBSkD6AF9QgAQQCAFQcABaiAFKQPYAUIBhiAFKQPQAUI/iIQiBEIAIAJCABBAIAVBsAFqIARCAEIAIAUpA8gBfUIAEEAgBUGgAWogAkIAIAUpA7gBQgGGIAUpA7ABQj+IhEIBfSICQgAQQCAFQZABaiADQg+GQgAgAkIAEEAgBUHwAGogAkIAQgAgBSkDqAEgBSkDoAEiDiAFKQOYAXwiBCAOVK18IARCAVatfH1CABBAIAVBgAFqQgEgBH1CACACQgAQQCAGIAggB2tqIghB//8AaiEGAn4gBSkDcCITQgGGIg0gBSkDiAEiD0IBhiAFKQOAAUI/iIR8IhBC5+wAfSIUQiCIIgIgCkKAgICAgIDAAIQiFUIBhiIWQiCIIgR+IhEgAUIBhiIOQiCIIgsgECAUVq0gDSAQVq0gBSkDeEIBhiATQj+IhCAPQj+IfHx8QgF9IhNCIIgiEH58Ig0gEVStIA0gDSATQv////8PgyITIAFCP4giFyAKQgGGhEL/////D4MiCn58Ig1WrXwgBCAQfnwgBCATfiIRIAogEH58Ig8gEVStQiCGIA9CIIiEfCANIA9CIIZ8Ig8gDVStfCAPIA8gFEL/////D4MiFCAKfiINIAIgC358IhEgDVStIBEgESATIA5C/v///w+DIg1+fCIRVq18fCIPVq18IA8gBCAUfiIYIA0gEH58IgQgAiAKfnwiCiALIBN+fCIQQiCIIAogEFatIAQgGFStIAQgClatfHxCIIaEfCIEIA9UrXwgBCAEIBEgAiANfiIKIAsgFH58IgJCIIggAiAKVK1CIIaEfCIKIBFUrSAKIAogEEIghnwiClatfHwiBFatfCAEIAQgCiACQiCGIgIgDSAUfnwgAlStQn+FIgJWIAIgClJxrXwiBFatfCICQv////////8AWARAIBYgF4QhFSAFQdAAaiAEIAJCgICAgICAwABUIgetIguGIgogAiALhiAEQgGIIAdBP3OtiIQiBCADIBIQQCAIQf7/AGogBiAHG0EBayEGIAFCMYYgBSkDWH0gBSkDUCIBQgBSrX0hC0IAIAF9DAELIAVB4ABqIAJCP4YgBEIBiIQiCiACQgGIIgQgAyASEEAgAUIwhiAFKQNofSAFKQNgIgJCAFKtfSELIAEhDkIAIAJ9CyECIAZB//8BTgRAIAxCgICAgICAwP//AIQhDEIAIQEMAQsCfiAGQQBKBEAgC0IBhiACQj+IhCEBIARC////////P4MgBq1CMIaEIQsgAkIBhgwBCyAGQY9/TARAQgAhAQwCCyAFQUBrIAogBEEBIAZrEIoBIAVBMGogDiAVIAZB8ABqEEQgBUEgaiADIBIgBSkDQCIKIAUpA0giCxBAIAUpAzggBSkDKEIBhiAFKQMgIgFCP4iEfSAFKQMwIgIgAUIBhiIEVK19IQEgAiAEfQshAiAFQRBqIAMgEkIDQgAQQCAFIAMgEkIFQgAQQCALIAogAyAKQgGDIgMgAnwiAlQgASACIANUrXwiASASViABIBJRG618IgMgClStfCIEIAMgAyAEQoCAgICAgMD//wBUIAIgBSkDEFYgASAFKQMYIgRWIAEgBFEbca18IgNWrXwiBCADIARCgICAgICAwP//AFQgAiAFKQMAViABIAUpAwgiAlYgASACURtxrXwiASADVK18IAyEIQwLIAAgATcDACAAIAw3AwggBUHQAmokAAu/AgEBfyMAQdAAayIEJAACQCADQYCAAU4EQCAEQSBqIAEgAkIAQoCAgICAgID//wAQLyAEKQMoIQIgBCkDICEBIANB//8BSQRAIANB//8AayEDDAILIARBEGogASACQgBCgICAgICAgP//ABAvQf3/AiADIANB/f8CTxtB/v8BayEDIAQpAxghAiAEKQMQIQEMAQsgA0GBgH9KDQAgBEFAayABIAJCAEKAgICAgICAORAvIAQpA0ghAiAEKQNAIQEgA0H0gH5LBEAgA0GN/wBqIQMMAQsgBEEwaiABIAJCAEKAgICAgICAORAvQeiBfSADIANB6IF9TRtBmv4BaiEDIAQpAzghAiAEKQMwIQELIAQgASACQgAgA0H//wBqrUIwhhAvIAAgBCkDCDcDCCAAIAQpAwA3AwAgBEHQAGokAAs8ACAAIAE3AwAgACACQv///////z+DIAJCgICAgICAwP//AINCMIinIANCMIinQYCAAnFyrUIwhoQ3AwgLwAECAX8CfkF/IQMCQCAAQgBSIAFC////////////AIMiBEKAgICAgIDA//8AViAEQoCAgICAgMD//wBRGw0AIAJC////////////AIMiBUKAgICAgIDA//8AViAFQoCAgICAgMD//wBScQ0AIAAgBCAFhIRQBEBBAA8LIAEgAoNCAFkEQCABIAJSIAEgAlNxDQEgACABIAKFhEIAUg8LIABCAFIgASACVSABIAJRGw0AIAAgASAChYRCAFIhAwsgAws0AQF/IAFBgICAgARPBEAQjAEACyAAIAEQswIiAjYCBCAAIAI2AgAgACACIAFBAnRqNgIICwoAIABBMGtBCkkLFwAgAEEwa0EKSSAAQSByQeEAa0EGSXILEwAgAEEgciAAIABBwQBrQRpJGwspAQF/IAAoAgAiAQRAIAEQvQNBf0cEQCAAKAIARQ8LIABBADYCAAtBAQspAQF/IAAoAgAiAQRAIAEQwwNBf0cEQCAAKAIARQ8LIABBADYCAAtBAQsUACACIAAgASAAayIAEE0gACACagskAQJ/IwBBEGsiAiQAIAEgABDTASEDIAJBEGokACABIAAgAxsLDAAgAEEAIABBf0cbCywBAX8gAUEASARAEIwBAAsgACABEFMiAjYCBCAAIAI2AgAgACABIAJqNgIIC5EBAQN/AkAgASACEIoCIQQjAEEQayIDJAAgBEH3////B00EQAJAIAQQ1AEEQCAAIAQQUCAAIQUMAQsgA0EIaiAEEJ8BQQFqEJ4BIAMoAgwaIAAgAygCCCIFNgIAIAAgAygCDBBcIAAgBDYCBAsgASACIAUQtAMgA0EAOgAHIANBB2oQXSADQRBqJAAMAQsQWwALCw8AIAAgACgCGCABajYCGAsXACAAIAI2AhwgACABNgIUIAAgATYCGAtUAQJ/AkAgACgCACICRQ0AAn8gAigCGCIDIAIoAhxGBEAgAiABIAIoAgAoAjQRBAAMAQsgAiADQQRqNgIYIAMgATYCACABC0F/Rw0AIABBADYCAAsLMQEBfyAAKAIMIgEgACgCEEYEQCAAIAAoAgAoAigRAAAPCyAAIAFBBGo2AgwgASgCAAsnAQF/IAAoAgwiASAAKAIQRgRAIAAgACgCACgCJBEAAA8LIAEoAgALLgEBfyMAQRBrIgEkACABIAA2AgBB6gsgARByEH9BoPEAKAIAEGEaIAFBEGokAAskAQF/AkAgACgCACICRQ0AIAIgARDCA0F/Rw0AIABBADYCAAsLPQEBfyADBEAgACADELcDIAAoAgQhAyACIAFrIgRFIAEgAkZyRQRAIAMgASAE/AoAAAsgACADIARqNgIECwsJACAAEI8CEC0LPQEBfyAAKAIYIgIgACgCHEYEQCAAIAEQowEgACgCACgCNBEEAA8LIAAgAkEBajYCGCACIAE6AAAgARCjAQsqAQF/IAAoAgwiASAAKAIQRgRAIAAgACgCACgCJBEAAA8LIAEsAAAQowELDwAgACAAKAIAKAIYEQAAC6wCAQJ/IwBBEGsiASQAIAAgACgCAEEMaygCAGooAhgEQCABIAA2AgwgAUEAOgAIIAAgACgCAEEMaygCAGoQ2QEEQCAAIAAoAgBBDGsoAgBqKAJIIgIEQCACEMUDCyABQQE6AAgLAkAgAS0ACEUNACAAIAAoAgBBDGsoAgBqKAIYEMQDQX9HDQAgACAAKAIAQQxrKAIAakEBENUBCwJAIAEoAgwiACAAKAIAQQxrKAIAaigCGEUNACABKAIMIgAgACgCAEEMaygCAGoQ2QFFDQAgASgCDCIAIAAoAgBBDGsoAgBqKAIEQYDAAHFFDQAgASgCDCIAIAAoAgBBDGsoAgBqKAIYEMQDQX9HDQAgASgCDCIAIAAoAgBBDGsoAgBqQQEQ1QELCyABQRBqJAALCQAgABCQAhAtCy0AIABByABqEDogAEE8ahA6IABBMGoQOiAAQSRqEDogAEEYahA6IABBDGoQOgsEAEF/C3wBAn8gACAAKAJIIgFBAWsgAXI2AkggACgCFCAAKAIcRwRAIABBAEEAIAAoAiQRAwAaCyAAQQA2AhwgAEIANwMQIAAoAgAiAUEEcQRAIAAgAUEgcjYCAEF/DwsgACAAKAIsIAAoAjBqIgI2AgggACACNgIEIAFBG3RBH3ULBQAQFwALLQAgAEHMAGoQOiAAQUBrEDogAEE0ahA6IABBKGoQOiAAQRxqEDogAEEQahA6CxIAIABFBEBBAA8LIAAgARCWAgsPACAAIAEgAkE0QTUQ0QMLvAIAAkACQAJAAkACQAJAAkACQAJAAkACQCABQQlrDhIACAkKCAkBAgMECgkKCggJBQYHCyACIAIoAgAiAUEEajYCACAAIAEoAgA2AgAPCyACIAIoAgAiAUEEajYCACAAIAEyAQA3AwAPCyACIAIoAgAiAUEEajYCACAAIAEzAQA3AwAPCyACIAIoAgAiAUEEajYCACAAIAEwAAA3AwAPCyACIAIoAgAiAUEEajYCACAAIAExAAA3AwAPCyACIAIoAgBBB2pBeHEiAUEIajYCACAAIAErAwA5AwAPCyAAIAIgAxEBAAsPCyACIAIoAgAiAUEEajYCACAAIAE0AgA3AwAPCyACIAIoAgAiAUEEajYCACAAIAE1AgA3AwAPCyACIAIoAgBBB2pBeHEiAUEIajYCACAAIAEpAwA3AwALbwEFfyAAKAIAIgMsAABBMGsiAUEJSwRAQQAPCwNAQX8hBCACQcyZs+YATQRAQX8gASACQQpsIgVqIAEgBUH/////B3NLGyEECyAAIANBAWoiBTYCACADLAABIAQhAiAFIQNBMGsiAUEKSQ0ACyACC/oSAhN/An4jAEFAaiIIJAAgCCABNgI8IAhBKWohFyAIQSdqIRggCEEoaiERAkACQAJAAkADQEEAIQcDQCABIQ0gByAOQf////8Hc0oNAiAHIA5qIQ4CQAJAAkACQCABIgctAAAiCwRAA0ACQAJAIAtB/wFxIgFFBEAgByEBDAELIAFBJUcNASAHIQsDQCALLQABQSVHBEAgCyEBDAILIAdBAWohByALLQACIAtBAmoiASELQSVGDQALCyAHIA1rIgcgDkH/////B3MiGUoNCSAABEAgACANIAcQQgsgBw0HIAggATYCPCABQQFqIQdBfyEQAkAgASwAAUEwayIKQQlLDQAgAS0AAkEkRw0AIAFBA2ohB0EBIRIgCiEQCyAIIAc2AjxBACEMAkAgBywAACILQSBrIgFBH0sEQCAHIQoMAQsgByEKQQEgAXQiAUGJ0QRxRQ0AA0AgCCAHQQFqIgo2AjwgASAMciEMIAcsAAEiC0EgayIBQSBPDQEgCiEHQQEgAXQiAUGJ0QRxDQALCwJAIAtBKkYEQAJ/AkAgCiwAAUEwayIBQQlLDQAgCi0AAkEkRw0AAn8gAEUEQCAEIAFBAnRqQQo2AgBBAAwBCyADIAFBA3RqKAIACyEPIApBA2ohAUEBDAELIBINBiAKQQFqIQEgAEUEQCAIIAE2AjxBACESQQAhDwwDCyACIAIoAgAiB0EEajYCACAHKAIAIQ9BAAshEiAIIAE2AjwgD0EATg0BQQAgD2shDyAMQYDAAHIhDAwBCyAIQTxqEM8DIg9BAEgNCiAIKAI8IQELQQAhB0F/IQkCf0EAIAEtAABBLkcNABogAS0AAUEqRgRAAn8CQCABLAACQTBrIgpBCUsNACABLQADQSRHDQAgAUEEaiEBAn8gAEUEQCAEIApBAnRqQQo2AgBBAAwBCyADIApBA3RqKAIACwwBCyASDQYgAUECaiEBQQAgAEUNABogAiACKAIAIgpBBGo2AgAgCigCAAshCSAIIAE2AjwgCUEATgwBCyAIIAFBAWo2AjwgCEE8ahDPAyEJIAgoAjwhAUEBCyEUA0AgByEVQRwhCiABIhMsAAAiB0H7AGtBRkkNCyABQQFqIQEgByAVQTpsakHv8ABqLQAAIgdBAWtB/wFxQQhJDQALIAggATYCPAJAIAdBG0cEQCAHRQ0MIBBBAE4EQCAARQRAIAQgEEECdGogBzYCAAwMCyAIIAMgEEEDdGopAwA3AzAMAgsgAEUNCCAIQTBqIAcgAiAGEM4DDAELIBBBAE4NC0EAIQcgAEUNCAsgAC0AAEEgcQ0LIAxB//97cSILIAwgDEGAwABxGyEMQQAhEEHuCCEWIBEhCgJAAkACfwJAAkACQAJAAkACQAJ/AkACQAJAAkACQAJAAkAgEy0AACIHwCITQVNxIBMgB0EPcUEDRhsgEyAVGyIHQdgAaw4hBBYWFhYWFhYWEBYJBhAQEBYGFhYWFgIFAxYWChYBFhYEAAsCQCAHQcEAaw4HEBYLFhAQEAALIAdB0wBGDQsMFQsgCCkDMCEbQe4IDAULQQAhBwJAAkACQAJAAkACQAJAIBUOCAABAgMEHAUGHAsgCCgCMCAONgIADBsLIAgoAjAgDjYCAAwaCyAIKAIwIA6sNwMADBkLIAgoAjAgDjsBAAwYCyAIKAIwIA46AAAMFwsgCCgCMCAONgIADBYLIAgoAjAgDqw3AwAMFQtBCCAJIAlBCE0bIQkgDEEIciEMQfgAIQcLIBEhASAHQSBxIQsgCCkDMCIbIhpQRQRAA0AgAUEBayIBIBqnQQ9xLQCAdSALcjoAACAaQg9WIBpCBIghGg0ACwsgASENIAxBCHFFIBtQcg0DIAdBBHZB7ghqIRZBAiEQDAMLIBEhASAIKQMwIhsiGlBFBEADQCABQQFrIgEgGqdBB3FBMHI6AAAgGkIHViAaQgOIIRoNAAsLIAEhDSAMQQhxRQ0CIAkgFyABayIBIAEgCUgbIQkMAgsgCCkDMCIbQgBTBEAgCEIAIBt9Ihs3AzBBASEQQe4IDAELIAxBgBBxBEBBASEQQe8IDAELQfAIQe4IIAxBAXEiEBsLIRYgGyAREKYBIQ0LIBQgCUEASHENESAMQf//e3EgDCAUGyEMIBtCAFIgCXJFBEAgESENQQAhCQwOCyAJIBtQIBEgDWtqIgEgASAJSBshCQwNCyAILQAwIQcMCwsgCCgCMCIBQZUcIAEbIg1BAEH/////ByAJIAlB/////wdPGyIHEOABIgEgDWsgByABGyIBIA1qIQogCUEATgRAIAshDCABIQkMDAsgCyEMIAEhCSAKLQAADQ8MCwsgCCkDMCIaUEUNAUEAIQcMCQsgCQRAIAgoAjAMAgtBACEHIABBICAPQQAgDBBFDAILIAhBADYCDCAIIBo+AgggCCAIQQhqIgc2AjBBfyEJIAcLIQtBACEHA0ACQCALKAIAIg1FDQAgCEEEaiANEMwDIg1BAEgNDyANIAkgB2tLDQAgC0EEaiELIAcgDWoiByAJSQ0BCwtBPSEKIAdBAEgNDCAAQSAgDyAHIAwQRSAHRQRAQQAhBwwBC0EAIQogCCgCMCELA0AgCygCACINRQ0BIAhBBGoiCSANEMwDIg0gCmoiCiAHSw0BIAAgCSANEEIgC0EEaiELIAcgCksNAAsLIABBICAPIAcgDEGAwABzEEUgDyAHIAcgD0gbIQcMCAsgFCAJQQBIcQ0JQT0hCiAAIAgrAzAgDyAJIAwgByAFESAAIgdBAE4NBwwKCyAHLQABIQsgB0EBaiEHDAALAAsgAA0JIBJFDQNBASEHA0AgBCAHQQJ0aigCACIABEAgAyAHQQN0aiAAIAIgBhDOA0EBIQ4gB0EBaiIHQQpHDQEMCwsLIAdBCk8EQEEBIQ4MCgsDQCAEIAdBAnRqKAIADQFBASEOIAdBAWoiB0EKRw0ACwwJC0EcIQoMBgsgCCAHOgAnQQEhCSAYIQ0gCyEMCyAJIAogDWsiCyAJIAtKGyIBIBBB/////wdzSg0DQT0hCiAPIAEgEGoiCSAJIA9IGyIHIBlLDQQgAEEgIAcgCSAMEEUgACAWIBAQQiAAQTAgByAJIAxBgIAEcxBFIABBMCABIAtBABBFIAAgDSALEEIgAEEgIAcgCSAMQYDAAHMQRSAIKAI8IQEMAQsLC0EAIQ4MAwtBPSEKC0GI6gEgCjYCAAtBfyEOCyAIQUBrJAAgDgvCAgEEfyMAQdABayIFJAAgBSACNgLMASAFQaABaiICQQBBKPwLACAFIAUoAswBNgLIAQJAQQAgASAFQcgBaiAFQdAAaiACIAMgBBDQA0EASARAQX8hBAwBCyAAKAJMQQBIIAAgACgCACIIQV9xNgIAAn8CQAJAIAAoAjBFBEAgAEHQADYCMCAAQQA2AhwgAEIANwMQIAAoAiwhBiAAIAU2AiwMAQsgACgCEA0BC0F/IAAQ3wENARoLIAAgASAFQcgBaiAFQdAAaiAFQaABaiADIAQQ0AMLIQIgBgRAIABBAEEAIAAoAiQRAwAaIABBADYCMCAAIAY2AiwgAEEANgIcIAAoAhQhASAAQgA3AxAgAkF/IAEbIQILIAAgACgCACIAIAhBIHFyNgIAQX8gAiAAQSBxGyEEDQALIAVB0AFqJAAgBAt/AgF/AX4gAL0iA0I0iKdB/w9xIgJB/w9HBHwgAkUEQCABIABEAAAAAAAAAABhBH9BAAUgAEQAAAAAAADwQ6IgARDSAyEAIAEoAgBBQGoLNgIAIAAPCyABIAJB/gdrNgIAIANC/////////4eAf4NCgICAgICAgPA/hL8FIAALCz4BAX8jAEEQayIBJAAgASAANgIMAn8gAEEETwRAQZ0fIAFBDGoQlwJBAAwBCyAAQQJ0KAKILQsgAUEQaiQACwYAIAEQLQsJACABIAJsEDQLJQECfyAAKAIEIgAQqAFBAWoiARA0IgIEfyACIAAgARBxBUEACwsNACAAKAIEIAAoAgBrCzABAX8jAEEQayIEJAAgACgCACEAIAQgAzoADyABIAIgBEEPaiAAEQMAIARBEGokAAuNAgIBfwF8IwBBEGsiAyQAIANBDmogASACIAAoAgARBQAgAyADLwAOOwEMIwBBEGsiASQAAkAgAy0ADUEBRgRAIwBBEGsiAiQAQazgAS0AAEEBcUUEQEECQYQsQQMQDyEAQazgAUEBOgAAQajgASAANgIACyACIAMtAAw2AgggAkEANgIEQajgASgCAEEAQQAgAkEEaiACQQhqEA4hBCACIAIoAgQ2AgAgAUEIaiIAIAT8AzYCBCAAQfzgATYCACACEJ8CIAJBEGokACAAKAIEIQIgAEEANgIEIAAQtQEMAQsgAUEANgIMIAFB/OABNgIIIAFBCGoQtQFBAiECCyABQRBqJAAgA0EQaiQAIAILVAECfyMAQRBrIgQkACABIAAoAgQiBUEBdWohASAAKAIAIQAgBUEBcQRAIAEoAgAgAGooAgAhAAsgBCADOgAPIAEgAiAEQQ9qIAARBQAgBEEQaiQAC1IBAn8jAEEQayIDJAAgASAAKAIEIgRBAXVqIQEgACgCACEAIARBAXEEQCABKAIAIABqKAIAIQALIAMgAjoADyABIANBD2ogABEBACADQRBqJAALMAEBfyMAQRBrIgQkACAAKAIAIQAgBCADOAIMIAEgAiAEQQxqIAARAwAgBEEQaiQAC40CAgF/AXwjAEEQayIDJAAgA0EIaiABIAIgACgCABEFACADIAMpAgg3AwAjAEEQayIBJAACQCADLQAEQQFGBEAjAEEQayICJABBoOABLQAAQQFxRQRAQQJBxCZBAxAPIQBBoOABQQE6AABBnOABIAA2AgALIAIgAyoCADgCCCACQQA2AgRBnOABKAIAQQBBACACQQRqIAJBCGoQDiEEIAIgAigCBDYCACABQQhqIgAgBPwDNgIEIABB/OABNgIAIAIQnwIgAkEQaiQAIAAoAgQhAiAAQQA2AgQgABC1AQwBCyABQQA2AgwgAUH84AE2AgggAUEIahC1AUECIQILIAFBEGokACADQRBqJAAgAgtUAQJ/IwBBEGsiBCQAIAEgACgCBCIFQQF1aiEBIAAoAgAhACAFQQFxBEAgASgCACAAaigCACEACyAEIAM4AgwgASACIARBDGogABEFACAEQRBqJAALUgECfyMAQRBrIgMkACABIAAoAgQiBEEBdWohASAAKAIAIQAgBEEBcQRAIAEoAgAgAGooAgAhAAsgAyACOAIMIAEgA0EMaiAAEQEAIANBEGokAAsbACAAIAEoAgggBRA7BEAgASACIAMgBBDnAQsLOAAgACABKAIIIAUQOwRAIAEgAiADIAQQ5wEPCyAAKAIIIgAgASACIAMgBCAFIAAoAgAoAhQRCgALkgIBBn8gACABKAIIIAUQOwRAIAEgAiADIAQQ5wEPCyABLQA1IAAoAgwhBiABQQA6ADUgAS0ANCABQQA6ADQgAEEQaiIJIAEgAiADIAQgBRDlASABLQA0IgpyIQggAS0ANSILciEHAkAgBkECSQ0AIAkgBkEDdGohCSAAQRhqIQYDQCABLQA2DQECQCAKQQFxBEAgASgCGEEBRg0DIAAtAAhBAnENAQwDCyALQQFxRQ0AIAAtAAhBAXFFDQILIAFBADsBNCAGIAEgAiADIAQgBRDlASABLQA1IgsgB3JBAXEhByABLQA0IgogCHJBAXEhCCAGQQhqIgYgCUkNAAsLIAEgB0EBcToANSABIAhBAXE6ADQLkgEAIAAgASgCCCAEEDsEQCABIAIgAxDmAQ8LAkAgACABKAIAIAQQO0UNAAJAIAEoAhAgAkcEQCACIAEoAhRHDQELIANBAUcNASABQQE2AiAPCyABIAI2AhQgASADNgIgIAEgASgCKEEBajYCKAJAIAEoAiRBAUcNACABKAIYQQJHDQAgAUEBOgA2CyABQQQ2AiwLC/YBACAAIAEoAgggBBA7BEAgASACIAMQ5gEPCwJAIAAgASgCACAEEDsEQAJAIAEoAhAgAkcEQCACIAEoAhRHDQELIANBAUcNAiABQQE2AiAPCyABIAM2AiACQCABKAIsQQRGDQAgAUEAOwE0IAAoAggiACABIAIgAkEBIAQgACgCACgCFBEKACABLQA1QQFGBEAgAUEDNgIsIAEtADRFDQEMAwsgAUEENgIsCyABIAI2AhQgASABKAIoQQFqNgIoIAEoAiRBAUcNASABKAIYQQJHDQEgAUEBOgA2DwsgACgCCCIAIAEgAiADIAQgACgCACgCGBELAAsLrwQBA38gACABKAIIIAQQOwRAIAEgAiADEOYBDwsCQAJAIAAgASgCACAEEDsEQAJAIAEoAhAgAkcEQCACIAEoAhRHDQELIANBAUcNAyABQQE2AiAPCyABIAM2AiAgASgCLEEERg0BIABBEGoiBSAAKAIMQQN0aiEHQQAhAwNAAkACQCABAn8CQCAFIAdPDQAgAUEAOwE0IAUgASACIAJBASAEEOUBIAEtADYNACABLQA1QQFHDQMgAS0ANEEBRgRAIAEoAhhBAUYNA0EBIQNBASEGIAAtAAhBAnFFDQMMBAtBASEDIAAtAAhBAXENA0EDDAELQQNBBCADGws2AiwgBg0FDAQLIAFBAzYCLAwECyAFQQhqIQUMAAsACyAAKAIMIQUgAEEQaiIGIAEgAiADIAQQtwEgBUECSQ0BIAYgBUEDdGohBiAAQRhqIQUCQCAAKAIIIgBBAnFFBEAgASgCJEEBRw0BCwNAIAEtADYNAyAFIAEgAiADIAQQtwEgBUEIaiIFIAZJDQALDAILIABBAXFFBEADQCABLQA2DQMgASgCJEEBRg0DIAUgASACIAMgBBC3ASAFQQhqIgUgBkkNAAwDCwALA0AgAS0ANg0CIAEoAiRBAUYEQCABKAIYQQFGDQMLIAUgASACIAMgBBC3ASAFQQhqIgUgBkkNAAsMAQsgASACNgIUIAEgASgCKEEBajYCKCABKAIkQQFHDQAgASgCGEECRw0AIAFBAToANgsLjgUBBH8jAEFAaiIEJAACQCABQaDZAUEAEDsEQCACQQA2AgBBASEFDAELAkAgACABIAAtAAhBGHEEf0EBBSABRQ0BIAFB9NYBEFIiA0UNASADLQAIQRhxQQBHCxA7IQYLIAYEQEEBIQUgAigCACIARQ0BIAIgACgCADYCAAwBCwJAIAFFDQAgAUGk1wEQUiIGRQ0BIAIoAgAiAQRAIAIgASgCADYCAAsgBigCCCIDIAAoAggiAUF/c3FBB3EgA0F/cyABcUHgAHFyDQFBASEFIAAoAgwgBigCDEEAEDsNASAAKAIMQZTZAUEAEDsEQCAGKAIMIgBFDQIgAEHU1wEQUkUhBQwCCyAAKAIMIgNFDQBBACEFIANBpNcBEFIiAQRAIAAtAAhBAXFFDQICfyAGKAIMIQBBACECAkADQEEAIABFDQIaIABBpNcBEFIiA0UNASADKAIIIAEoAghBf3NxDQFBASABKAIMIAMoAgxBABA7DQIaIAEtAAhBAXFFDQEgASgCDCIARQ0BIABBpNcBEFIiAQRAIAMoAgwhAAwBCwsgAEGI2AEQUiIARQ0AIAAgAygCDBCpAiECCyACCyEFDAILIANBiNgBEFIiAQRAIAAtAAhBAXFFDQIgASAGKAIMEKkCIQUMAgsgA0HE1gEQUiIBRQ0BIAYoAgwiAEUNASAAQcTWARBSIgBFDQEgAigCACEDIARBCGpBAEE4/AsAIAQgA0EARzoAOyAEQX82AhAgBCABNgIMIAQgADYCBCAEQQE2AjQgACAEQQRqIANBASAAKAIAKAIcEQgAIAQoAhwiAEEBRgRAIAIgBCgCFEEAIAMbNgIACyAAQQFGIQUMAQtBACEFCyAEQUBrJAAgBQtvAQJ/IAAgASgCCEEAEDsEQCABIAIgAxDpAQ8LIAAoAgwhBCAAQRBqIgUgASACIAMQqwICQCAEQQJJDQAgBSAEQQN0aiEEIABBGGohAANAIAAgASACIAMQqwIgAS0ANg0BIABBCGoiACAESQ0ACwsLMgAgACABKAIIQQAQOwRAIAEgAiADEOkBDwsgACgCCCIAIAEgAiADIAAoAgAoAhwRCAALGQAgACABKAIIQQAQOwRAIAEgAiADEOkBCwvIAQECfyMAQdAAayIDJAACQAJ/QQEgACABQQAQOw0AGkEAIAFFDQAaQQAgAUHE1gEQUiIBRQ0AGiACKAIAIgRFDQEgA0EYakEAQTj8CwAgA0EBOgBLIANBfzYCICADIAA2AhwgAyABNgIUIANBATYCRCABIANBFGogBEEBIAEoAgAoAhwRCAAgAygCLCIAQQFGBEAgAiADKAIkNgIACyAAQQFGCyADQdAAaiQADwsgA0GeFjYCCCADQecDNgIEIANBig02AgAQPQALAwAACxEBAX9BBBBTIgBBADYCACAACwkAQaD0ARA5GgslAEGs9AEtAABFBEBBoPQBQdisARCRAUGs9AFBAToAAAtBoPQBCwkAQZD0ARAgGgskAEGc9AEtAABFBEBBkPQBQc4NELABQZz0AUEBOgAAC0GQ9AELCQBBgPQBEDkaCyUAQYz0AS0AAEUEQEGA9AFBhKwBEJEBQYz0AUEBOgAAC0GA9AELCQBB8PMBECAaCyQAQfzzAS0AAEUEQEHw8wFBmRUQsAFB/PMBQQE6AAALQfDzAQsJAEHg8wEQORoLqQIBBH8gAiABIAAoAgBqIgBHBEACQCACKAIEIgQgAigCACIBa0ECdSIGIAAoAgggACgCACICa0ECdU0EQCAGIAAoAgQiAyACayIFQQJ1SwRAIAIgA0cEQCAFBEAgAiABIAX8CgAACyAAKAIEIQMLIAQgASAFaiIBayICRSABIARGckUEQCADIAEgAvwKAAALIAAgAiADajYCBAwCCyAEIAFrIgNFIAEgBEZyRQRAIAIgASAD/AoAAAsgACACIANqNgIEDAELIAAoAgAiAgRAIAAgAjYCBCAAKAIIGiACEC0gAEEANgIIIABCADcCAAsgACAAIAYQtgEQrgMgACgCBCECIAQgAWsiA0UgASAERnJFBEAgAiABIAP8CgAACyAAIAIgA2o2AgQLCwslAEHs8wEtAABFBEBB4PMBQeCrARCRAUHs8wFBAToAAAtB4PMBCwkAQeTeARAgGgsaAEHd8wEtAABFBEBB3fMBQQE6AAALQeTeAQsJAEHQ8wEQORoLJQBB3PMBLQAARQRAQdDzAUG8qwEQkQFB3PMBQQE6AAALQdDzAQsJAEHY3gEQIBoLGgBBzfMBLQAARQRAQc3zAUEBOgAAC0HY3gELGwBBqPwBIQADQCAAQQxrEDkiAEGQ/AFHDQALC1QAQczzAS0AAARAQcjzASgCAA8LQaj8AS0AAEUEQEGo/AFBAToAAAtBkPwBQfjUARApQZz8AUGE1QEQKUHM8wFBAToAAEHI8wFBkPwBNgIAQZD8AQsbAEGI/AEhAANAIABBDGsQICIAQfD7AUcNAAsLFQAgASAAKAIAaiEAQQwQUyAAEIEBC1IAQcTzAS0AAARAQcDzASgCAA8LQYj8AS0AAEUEQEGI/AFBAToAAAtB8PsBQdEVECpB/PsBQc4VECpBxPMBQQE6AABBwPMBQfD7ATYCAEHw+wELGwBB4PsBIQADQCAAQQxrEDkiAEHA+QFHDQALC7ACAEG88wEtAAAEQEG48wEoAgAPC0Hg+wEtAABFBEBB4PsBQQE6AAALQcD5AUHw0AEQKUHM+QFBkNEBEClB2PkBQbTRARApQeT5AUHM0QEQKUHw+QFB5NEBEClB/PkBQfTRARApQYj6AUGI0gEQKUGU+gFBnNIBEClBoPoBQbjSARApQaz6AUHg0gEQKUG4+gFBgNMBEClBxPoBQaTTARApQdD6AUHI0wEQKUHc+gFB2NMBEClB6PoBQejTARApQfT6AUH40wEQKUGA+wFB5NEBEClBjPsBQYjUARApQZj7AUGY1AEQKUGk+wFBqNQBEClBsPsBQbjUARApQbz7AUHI1AEQKUHI+wFB2NQBEClB1PsBQejUARApQbzzAUEBOgAAQbjzAUHA+QE2AgBBwPkBCxsAQbD5ASEAA0AgAEEMaxAgIgBBkPcBRw0ACwuYAgBBtPMBLQAABEBBsPMBKAIADwtBsPkBLQAARQRAQbD5AUEBOgAAC0GQ9wFBmwgQKkGc9wFBkggQKkGo9wFBzQ8QKkG09wFBnA4QKkHA9wFB4QgQKkHM9wFBhxEQKkHY9wFBowgQKkHk9wFBkwkQKkHw9wFB1QwQKkH89wFBxAwQKkGI+AFBzAwQKkGU+AFB3wwQKkGg+AFB6g0QKkGs+AFBlRUQKkG4+AFBhg0QKkHE+AFB9gsQKkHQ+AFB4QgQKkHc+AFB3g0QKkHo+AFBkA4QKkH0+AFB0w8QKkGA+QFByg0QKkGM+QFBngoQKkGY+QFBiwkQKkGk+QFB+BQQKkG08wFBAToAAEGw8wFBkPcBNgIAQZD3AQsbAEGI9wEhAANAIABBDGsQOSIAQeD1AUcNAAsLzAEAQazzAS0AAARAQajzASgCAA8LQYj3AS0AAEUEQEGI9wFBAToAAAtB4PUBQZzOARApQez1AUG4zgEQKUH49QFB1M4BEClBhPYBQfTOARApQZD2AUGczwEQKUGc9gFBwM8BEClBqPYBQdzPARApQbT2AUGA0AEQKUHA9gFBkNABEClBzPYBQaDQARApQdj2AUGw0AEQKUHk9gFBwNABEClB8PYBQdDQARApQfz2AUHg0AEQKUGs8wFBAToAAEGo8wFB4PUBNgIAQeD1AQsbAEHY9QEhAANAIABBDGsQICIAQbD0AUcNAAsLvgEAQaTzAS0AAARAQaDzASgCAA8LQdj1AS0AAEUEQEHY9QFBAToAAAtBsPQBQcwIECpBvPQBQdMIECpByPQBQbEIECpB1PQBQbkIECpB4PQBQagIECpB7PQBQdoIECpB+PQBQcMIECpBhPUBQdoNECpBkPUBQeINECpBnPUBQeoQECpBqPUBQasTECpBtPUBQY8JECpBwPUBQbIPECpBzPUBQcIKECpBpPMBQQE6AABBoPMBQbD0ATYCAEGw9AELDwAgASAAKAIAaiACOgAACwsAIABBpKsBEJEBCwoAIABB7hAQsAELCwAgAEGQqwEQkQELCgAgAEHlEBCwAQsMACAAIAFBEGoQ5AELDAAgACABQQxqEOQBCwcAIAAsAAkLBwAgACwACAsJACAAEMMCEC0LDQAgASAAKAIAai0AAAsJACAAEMQCEC0LFQAgACgCCCIARQRAQQEPCyAAEMwCC44BAQZ/A0ACQCACIANGIAQgCE1yDQBBASEGIAAoAgghByMAQRBrIgUkACAFIAc2AgwgBUEIaiAFQQxqEGNBACACIAMgAmsgAUH07wEgARsQ0gEhChBiIAVBEGokAAJAAkAgCiIFQQJqDgMCAgEACyAFIQYLIAhBAWohCCAGIAlqIQkgAiAGaiECDAELCyAJC0YBAn8gACgCCCECIwBBEGsiASQAIAEgAjYCDCABQQhqIAFBDGoQYxBiIAFBEGokACAAKAIIIgBFBEBBAQ8LIAAQzAJBAUYLiQEBAn8jAEEQayIGJAAgBCACNgIAAn9BAiAGQQxqIgVBACAAKAIIEO4BIgBBAWpBAkkNABpBASAAQQFrIgIgAyAEKAIAa0sNABoDfyACBH8gBS0AACEAIAQgBCgCACIBQQFqNgIAIAEgADoAACACQQFrIQIgBUEBaiEFDAEFQQALCwsgBkEQaiQAC7kGAQ1/IwBBEGsiESQAIAIhCANAAkAgAyAIRgRAIAMhCAwBCyAILQAARQ0AIAhBAWohCAwBCwsgByAFNgIAIAQgAjYCAANAAkACfwJAIAIgA0YgBSAGRnINACARIAEpAgA3AwggACgCCCEJIwBBEGsiECQAIBAgCTYCDCAQQQhqIBBBDGoQYyAIIAJrIQ5BACELIwBBkAhrIgwkACAMIAQoAgAiCTYCDCAFIAxBEGogBRshDwJAAkACQCAJRSAGIAVrQQJ1QYACIAUbIg1FckUEQANAIA5BgwFLIA5BAnYiCiANT3JFBEAgCSEKDAQLIA8gDEEMaiAKIA0gCiANSRsgARCbAyESIAwoAgwhCiASQX9GBEBBACENQX8hCwwDCyANIBJBACAPIAxBEGpHGyIUayENIA8gFEECdGohDyAJIA5qIAprQQAgChshDiALIBJqIQsgCkUNAiAKIQkgDQ0ADAILAAsgCSEKCyAKRQ0BCyANRSAORXINACALIQkDQAJAAkAgDyAKIA4gARDSASILQQJqQQJNBEACQAJAIAtBAWoOAgYAAQsgDEEANgIMDAILIAFBADYCAAwBCyAMIAwoAgwgC2oiCjYCDCAJQQFqIQkgDUEBayINDQELIAkhCwwCCyAPQQRqIQ8gDiALayEOIAkhCyAODQALCyAFBEAgBCAMKAIMNgIACyAMQZAIaiQAEGIgEEEQaiQAAkACQAJAAkAgCyIJQX9GBEADQCAHIAU2AgAgAiAEKAIARg0GQQEhBgJAAkACQCAFIAIgCCACayARQQhqIAAoAggQzQIiAUECag4DBwACAQsgBCACNgIADAQLIAEhBgsgAiAGaiECIAcoAgBBBGohBQwACwALIAcgBygCACAJQQJ0aiIFNgIAIAUgBkYNAyAEKAIAIQIgAyAIRg0GIAUgAkEBIAEgACgCCBDNAkUNAQtBAgwECyAHIAcoAgBBBGoiBTYCACAEIAQoAgBBAWoiAjYCACACIQgDQCADIAhGDQUgCC0AAEUNBiAIQQFqIQgMAAsACyAEIAI2AgBBAQwCCyAEKAIAIQILIAIgA0cLIBFBEGokAA8LIAMhCAwACwALpgUBDH8jAEEQayIPJAAgAiEIA0ACQCADIAhGBEAgAyEIDAELIAgoAgBFDQAgCEEEaiEIDAELCyAHIAU2AgAgBCACNgIAAkADQAJAAkAgAiADRiAFIAZGcgR/IAIFIA8gASkCADcDCEEBIRAgBSEJIAYgBWshCyAAKAIIIQpBACENIwBBEGsiDiQAIA4gCjYCDCAOQQhqIA5BDGoQYyMAQRBrIhEkAAJAIAQoAgAiCkUgCCACa0ECdSISRXINACALQQAgBRshCwNAIBFBDGogCSALQQRJGyAKKAIAEJYCIgxBf0YEQEF/IQ0MAgsgCQR/IAtBA00EQCALIAxJDQMgCSARQQxqIAwQcRoLIAsgDGshCyAJIAxqBUEACyEJIAooAgBFBEBBACEKDAILIAwgDWohDSAKQQRqIQogEkEBayISDQALCyAJBEAgBCAKNgIACyARQRBqJAAQYiAOQRBqJAACQAJAAkACQCANIglBAWoOAgAIAQsgByAFNgIAA0AgAiAEKAIARg0CIAUgAigCACAAKAIIEO4BIgFBf0YNAiAHIAcoAgAgAWoiBTYCACACQQRqIQIMAAsACyAHIAcoAgAgCWoiBTYCACAFIAZGDQEgAyAIRgRAIAQoAgAhAiADIQgMBgsgD0EEaiICQQAgACgCCBDuASIIQX9GDQQgBiAHKAIAayAISQ0GA0AgCARAIAItAAAhBSAHIAcoAgAiCUEBajYCACAJIAU6AAAgCEEBayEIIAJBAWohAgwBCwsgBCAEKAIAQQRqIgI2AgAgAiEIA0AgAyAIRgRAIAMhCAwFCyAIKAIARQ0EIAhBBGohCAwACwALIAQgAjYCAAwDCyAEKAIACyADRyEQDAMLIAcoAgAhBQwBCwtBAiEQCyAPQRBqJAAgEAsJACAAENsCEC0LMwAjAEEQayIAJAAgACAENgIMIAAgAyACazYCCCAAQQxqIABBCGoQtQMoAgAgAEEQaiQACzsAA0AgASACRkUEQCADIQAgBCABLAAAEEwEfyABLQAABSAACzoAACAEQQFqIQQgAUEBaiEBDAELCyABCwsAIAEgAiABEEwbCyoAA0AgASACRkUEQCADIAEtAAA6AAAgA0EBaiEDIAFBAWohAQwBCwsgAQsPACAAIAEgAkGgkAEQpgILHQAgARBMBH9BoJABKAIAIAFBAnRqKAIABSABC8ALDwAgACABIAJBmIQBEKYCCyEAIAEQTAR/QZiEASgCACABQf8BcUECdGooAgAFIAELwAsJACAAENACEC0LOwADQCABIAJGRQRAIAMhACAEIAEoAgAQTAR/IAEoAgAFIAALOgAAIARBAWohBCABQQRqIQEMAQsLIAELDAAgASACIAEQTBvACyoAA0AgASACRkUEQCADIAEsAAA2AgAgA0EEaiEDIAFBAWohAQwBCwsgAQsPACAAIAEgAkGgkAEQpwILHAAgARBMBH9BoJABKAIAIAFBAnRqKAIABSABCwsPACAAIAEgAkGYhAEQpwILHAAgARBMBH9BmIQBKAIAIAFBAnRqKAIABSABCwsQACAABEAgABDHAwsgABAtCzoAA0ACQCACIANGDQAgAigCABBMRQ0AIAIoAgBBAnRBkKIBaigCACABcUUNACACQQRqIQIMAQsLIAILOQADQAJAIAIgA0YNACACKAIAEEwEQCACKAIAQQJ0QZCiAWooAgAgAXENAQsgAkEEaiECDAELCyACC0YAA0AgASACRkUEQEEAIQAgAyABKAIAEEwEfyABKAIAQQJ0QZCiAWooAgAFQQALNgIAIANBBGohAyABQQRqIQEMAQsLIAELIwBBACEAIAIQTAR/IAJBAnRBkKIBaigCACABcUEARwVBAAsLDwAgACAAKAIAKAIEEQIACwkAIAAQ1gIQLQsVAQF/QdQAEFMiAEEAQdQA/AsAIAALFAAgACgCACABaiACLQAAOgAAQQELrgEAAkAgBRBHRQRAIAAgBSkCADcCACAAIAUoAgg2AgggABBeGgwBCyAFKAIAIQQgBSgCBCECIwBBEGsiAyQAAkACQAJAIAIQvQEEQCAAIgEgAhBQDAELIAJB9////wNLDQEgA0EIaiACEJABQQFqEI8BIAMoAgwaIAAgAygCCCIBNgIAIAAgAygCDBBcIAAgAjYCBAsgASAEIAJBAWoQZSADQRBqJAAMAQsQWwALCwsJACAAIAUQ5AELhAMBCH8jAEHgA2siACQAIABB3ANqIgYgAxAnIAYQSCEKIAUQHwRAIAVBABDMASgCACAKQS0QS0YhCwsgAiALIABB3ANqIABB2ANqIABB1ANqIABB0ANqIABBxANqECQiDCAAQbgDahAkIgYgAEGsA2oQJCIHIABBqANqEN8CIABB4wA2AhAgAEEIakEAIABBEGoiAhA2IQgCQAJ/IAUQHyAAKAKoA0oEQCAFEB8hCSAAKAKoAyENIAcQHyAJIA1rQQF0aiAGEB9qIAAoAqgDakEBagwBCyAHEB8gBhAfaiAAKAKoA2pBAmoLIglB5QBJDQAgCCAJQQJ0EDQQPCAIKAIAIgINABA9AAsgAiAAQQRqIAAgAygCBCAFECMgBRAjIAUQH0ECdGogCiALIABB2ANqIAAoAtQDIAAoAtADIAwgBiAHIAAoAqgDEN4CIAEgAiAAKAIEIAAoAgAgAyAEEIUBIAgQNSAHEDkaIAYQORogDBAgGiAAQdwDahAlIABB4ANqJAALvgQBC38jAEGgCGsiACQAIAAgBjcDmAggACAFNwOQCCAAIAU3AwAgACAGNwMIIAAgAEGgB2oiBzYCnAcgB0HAECAAEIYBIQcgAEHjADYCgAQgAEH4A2pBACAAQYAEaiIJEDYhDiAAQeMANgKABCAAQfADakEAIAkQNiEKAkAgB0HkAE8EQCAAQZwHahAuQcAQIABBkAhqEMgBIgdBf0YNASAOIAAoApwHEDwgCiAHQQJ0EDQQPCAKEOQCDQEgCigCACEJCyAAQewDaiIIIAMQJyAIEEgiESAAKAKcByIIIAcgCGogCRBvIAdBAEoEQCAAKAKcBy0AAEEtRiEPCyACIA8gAEHsA2ogAEHoA2ogAEHkA2ogAEHgA2ogAEHUA2oQJCIQIABByANqECQiCCAAQbwDahAkIgsgAEG4A2oQ3wIgAEHjADYCICAAQRhqQQAgAEEgaiICEDYhDAJ/IAAoArgDIg0gB0gEQCALEB8gByANa0EBdGogCBAfaiAAKAK4A2pBAWoMAQsgCxAfIAgQH2ogACgCuANqQQJqCyINQeUATwRAIAwgDUECdBA0EDwgDCgCACICRQ0BCyACIABBFGogAEEQaiADKAIEIAkgCSAHQQJ0aiARIA8gAEHoA2ogACgC5AMgACgC4AMgECAIIAsgACgCuAMQ3gIgASACIAAoAhQgACgCECADIAQQhQEgDBA1IAsQORogCBA5GiAQECAaIABB7ANqECUgChA1IA4QNSAAQaAIaiQADwsQPQALMwECfyABKAIEIAEoAgAiAWsgAksEQEEBIQQgASACai0AACEDCyAAIAQ6AAEgACADOgAAC/wCAQh/IwBBsAFrIgAkACAAQawBaiIGIAMQJyAGEEkhCiAFEB8EQCAFQQAQIi0AACAKQS0QQUH/AXFGIQsLIAIgCyAAQawBaiAAQagBaiAAQacBaiAAQaYBaiAAQZgBahAkIgwgAEGMAWoQJCIGIABBgAFqECQiByAAQfwAahDjAiAAQeMANgIQIABBCGpBACAAQRBqIgIQNiEIAkACfyAFEB8gACgCfEoEQCAFEB8hCSAAKAJ8IQ0gBxAfIAkgDWtBAXRqIAYQH2ogACgCfGpBAWoMAQsgBxAfIAYQH2ogACgCfGpBAmoLIglB5QBJDQAgCCAJEDQQPCAIKAIAIgINABA9AAsgAiAAQQRqIAAgAygCBCAFECMgBRAjIAUQH2ogCiALIABBqAFqIAAsAKcBIAAsAKYBIAwgBiAHIAAoAnwQ4gIgASACIAAoAgQgACgCACADIAQQgAEgCBA1IAcQIBogBhAgGiAMECAaIABBrAFqECUgAEGwAWokAAu1BAELfyMAQcADayIAJAAgACAGNwO4AyAAIAU3A7ADIAAgBTcDACAAIAY3AwggACAAQcACaiIHNgK8AiAHQcAQIAAQhgEhByAAQeMANgLQASAAQcgBakEAIABB0AFqIgkQNiEOIABB4wA2AtABIABBwAFqQQAgCRA2IQoCQCAHQeQATwRAIABBvAJqEC5BwBAgAEGwA2oQyAEiB0F/Rg0BIA4gACgCvAIQPCAKIAcQNBA8IAoQ5AINASAKKAIAIQkLIABBvAFqIgggAxAnIAgQSSIRIAAoArwCIgggByAIaiAJEHkgB0EASgRAIAAoArwCLQAAQS1GIQ8LIAIgDyAAQbwBaiAAQbgBaiAAQbcBaiAAQbYBaiAAQagBahAkIhAgAEGcAWoQJCIIIABBkAFqECQiCyAAQYwBahDjAiAAQeMANgIgIABBGGpBACAAQSBqIgIQNiEMAn8gACgCjAEiDSAHSARAIAsQHyAHIA1rQQF0aiAIEB9qIAAoAowBakEBagwBCyALEB8gCBAfaiAAKAKMAWpBAmoLIg1B5QBPBEAgDCANEDQQPCAMKAIAIgJFDQELIAIgAEEUaiAAQRBqIAMoAgQgCSAHIAlqIBEgDyAAQbgBaiAALAC3ASAALAC2ASAQIAggCyAAKAKMARDiAiABIAIgACgCFCAAKAIQIAMgBBCAASAMEDUgCxAgGiAIECAaIBAQIBogAEG8AWoQJSAKEDUgDhA1IABBwANqJAAPCxA9AAvtAQEDfyAAKAIEIAAoAgAiBGsiAyABSQRAIwBBIGsiBCQAAkAgASADayIDIAAoAgggACgCBCIBa00EQCADIAAoAgQiAWohAwNAIAEgA0YEQCAAIAM2AgQFIAEgAi0AADoAACABQQFqIQEMAQsLDAELIAMgBEEMaiAAIAEgA2ogACgCAGsQtAEgACgCBCAAKAIAayAAEMYBIgUoAggiAWohAwNAIAEgA0cEQCABIAItAAA6AAAgAUEBaiEBDAELCyAFIAM2AgggACAFEO8BIAUQugELIARBIGokAA8LIAEgA0kEQCAAIAEgBGo2AgQLC4EFAQR/IwBBwANrIgAkACAAIAI2ArgDIAAgATYCvAMgAEHkADYCFCAAQRhqIABBIGogAEEUaiIIEDYhCiAAQRBqIgEgBBAnIAEQSCEHIABBADoADyAAQbwDaiACIAMgASAEKAIEIAUgAEEPaiAHIAogCCAAQbADahDqAgRAIwBBEGsiASQAIAYQHxoCQCAGEEcEQCAGKAIAIAFBADYCDCABQQxqEFYgBkEANgIEDAELIAFBADYCCCAGIAFBCGoQViAGQQAQUAsgAUEQaiQAIAAtAA9BAUYEQCAGIAdBLRBLEOoBCyAHQTAQSyEBIAooAgAhAiAAKAIUIgNBBGshBANAAkAgAiAETw0AIAIoAgAgAUcNACACQQRqIQIMAQsLIwBBEGsiBCQAIAYQHyEBIAYQ8QEhBwJAIAIgAxD1ASIIRQ0AIAYQIyAGECMgBhAfQQJ0akEEaiACEL4CRQRAIAggByABa0sEQCAGIAcgASAHayAIaiABIAEQ6AILIAIgAyAGECMgAUECdGoQ5wIgBEEANgIEIARBBGoQViAGIAEgCGoQgwEMAQsgBEEEaiIBIAIgAxCZAyABECMhCCABEB8hAiMAQRBrIgckAAJAIAIgBhDxASIJIAYQHyIDa00EQCACRQ0BIAYQIyIJIANBAnRqIAggAhBlIAYgAiADaiICEIMBIAdBADYCDCAJIAJBAnRqIAdBDGoQVgwBCyAGIAkgAiAJayADaiADIANBACACIAgQrwILIAdBEGokACABEDkaCyAEQRBqJAALIABBvANqIABBuANqECsEQCAFIAUoAgBBAnI2AgALIAAoArwDIABBEGoQJSAKEDUgAEHAA2okAAvRAwEDfyMAQfAEayIAJAAgACACNgLoBCAAIAE2AuwEIABB5AA2AhAgAEHIAWogAEHQAWogAEEQaiIBEDYhByAAQcABaiIIIAQQJyAIEEghCSAAQQA6AL8BAkAgAEHsBGogAiADIAggBCgCBCAFIABBvwFqIAkgByAAQcQBaiAAQeAEahDqAkUNACAAQcsbKAAANgC3ASAAQcQbKQAANwOwASAJIABBsAFqIABBugFqIABBgAFqEG8gAEHjADYCECAAQQhqQQAgARA2IQMgASEEAkAgACgCxAEgBygCAGsiAUGJA04EQCADIAFBAnVBAmoQNBA8IAMoAgBFDQEgAygCACEECyAALQC/AUEBRgRAIARBLToAACAEQQFqIQQLIAcoAgAhAgNAIAAoAsQBIAJNBEACQCAEQQA6AAAgACAGNgIAIABBEGogABCjA0EBRw0AIAMQNQwECwUgBCAAQbABaiAAQYABaiIBIAFBKGogAhD5ASABa0ECdWotAAA6AAAgBEEBaiEEIAJBBGohAgwBCwsQPQALED0ACyAAQewEaiAAQegEahArBEAgBSAFKAIAQQJyNgIACyAAKALsBCAAQcABahAlIAcQNSAAQfAEaiQAC5ABAQJ/IAACfyAAKAIEIgIgACgCCEkEQCACIAEtAAA6AAAgAkEBagwBCyMAQSBrIgMkACADQQxqIAAgACgCBCAAKAIAa0EBahC0ASAAKAIEIAAoAgBrIAAQxgEiAigCCCABLQAAOgAAIAIgAigCCEEBajYCCCAAIAIQ7wEgACgCBCACELoBIANBIGokAAs2AgQLBQBBpCoL0AQBA38jAEGQAWsiACQAIAAgAjYCiAEgACABNgKMASAAQeQANgIUIABBGGogAEEgaiAAQRRqIgcQNiEJIABBEGoiCCAEECcgCBBJIQEgAEEAOgAPIABBjAFqIAIgAyAIIAQoAgQgBSAAQQ9qIAEgCSAHIABBhAFqEPACBEACQCAGLAALQQBIBEAgBigCAEEAOgAAIAZBADYCBAwBCyAGQQA6AAsgBkEAOgAACyAALQAPQQFGBEAgBiABQS0QQRC4AQsgAUEwEEEgCSgCACECIAAoAhQiBEEBayEDQf8BcSEBA0ACQCACIANPDQAgAi0AACABRw0AIAJBAWohAgwBCwsjAEEQayIBJAAgBhAfIQMgBhAoIQgCQCACIAQQigIiB0UNACAGECMgBhAjIAYQH2pBAWogAhC+AkUEQCAHIAggA2tLBEAgBiAIIAMgCGsgB2ogAyADEPQBCyACIAQgBhAjIANqELQDIAFBADoADyABQQ9qEF0gBiADIAdqEIMBDAELIAEgAiAEELgDIAEQIyEIIAEQHyECIwBBEGsiBCQAAkAgAiAGECgiByAGEB8iA2tNBEAgAkUNASAGECMiByADaiAIIAIQTSAGIAIgA2oiAhCDASAEQQA6AA8gAiAHaiAEQQ9qEF0MAQsgBiAHIAIgB2sgA2ogAyADQQAgAiAIELkBCyAEQRBqJAAgARAgGgsgAUEQaiQACyAAQYwBaiAAQYgBahAsBEAgBSAFKAIAQQJyNgIACyAAKAKMASAAQRBqECUgCRA1IABBkAFqJAALxwMBA38jAEGQAmsiACQAIAAgAjYCiAIgACABNgKMAiAAQeQANgIQIABBmAFqIABBoAFqIABBEGoiARA2IQcgAEGQAWoiCCAEECcgCBBJIQkgAEEAOgCPAQJAIABBjAJqIAIgAyAIIAQoAgQgBSAAQY8BaiAJIAcgAEGUAWogAEGEAmoQ8AJFDQAgAEHLGygAADYAhwEgAEHEGykAADcDgAEgCSAAQYABaiAAQYoBaiAAQfYAahB5IABB4wA2AhAgAEEIakEAIAEQNiEDIAEhBAJAIAAoApQBIAcoAgBrIgFB4wBOBEAgAyABQQJqEDQQPCADKAIARQ0BIAMoAgAhBAsgAC0AjwFBAUYEQCAEQS06AAAgBEEBaiEECyAHKAIAIQIDQCAAKAKUASACTQRAAkAgBEEAOgAAIAAgBjYCACAAQRBqIAAQowNBAUcNACADEDUMBAsFIAQgAEH2AGoiASABQQpqIAIQ/QEgAGsgAGotAAo6AAAgBEEBaiEEIAJBAWohAgwBCwsQPQALED0ACyAAQYwCaiAAQYgCahAsBEAgBSAFKAIAQQJyNgIACyAAKAKMAiAAQZABahAlIAcQNSAAQZACaiQACxcAIAAoAgAgAUECdGogAioCADgCAEEBC5EDAQJ/IwBBoANrIgckACAHIAdBoANqIgM2AgwjAEGQAWsiAiQAIAIgAkGEAWo2AhwgAEEIaiACQSBqIgggAkEcaiAEIAUgBhD0AiACQgA3AxAgAiAINgIMIAdBEGoiBSAHKAIMEPUBIQQgACgCCCEGIwBBEGsiACQAIAAgBjYCDCAAQQhqIABBDGoQYyAFIAJBDGogBCACQRBqEJsDIQQQYiAAQRBqJAAgBEF/RgRAED0ACyAHIAUgBEECdGo2AgwgAkGQAWokACAHKAIMIQIjAEEQayIGJAAjAEEgayIAJAAgAEEYaiAFIAIQvwIgAEEQaiAAKAIYIQIgACgCHCEIIwBBEGsiBCQAIAQgAjYCCCAEIAE2AgwDQCACIAhHBEAgBEEMaiACKAIAELsDIAQgAkEEaiICNgIIDAELCyAEQQhqIARBDGoQZiAEQRBqJAAgACAFIAAoAhAQjgE2AgwgACAAKAIUNgIIIAZBCGogAEEMaiAAQQhqEGYgAEEgaiQAIAYoAgwgBkEQaiQAIAMkAAuAAgECfyMAQYABayICJAAgAiACQfQAajYCDCAAQQhqIAJBEGoiAyACQQxqIAQgBSAGEPQCIAIoAgwhBCMAQRBrIgYkACMAQSBrIgAkACAAQRhqIAMgBBC/AiAAQRBqIAAoAhghBCAAKAIcIQgjAEEQayIFJAAgBSAENgIIIAUgATYCDANAIAQgCEcEQCAFQQxqIAQsAAAQvwMgBSAEQQFqIgQ2AggMAQsLIAVBCGogBUEMahBmIAVBEGokACAAIAMgACgCEBCOATYCDCAAIAAoAhQ2AgggBkEIaiAAQQxqIABBCGoQZiAAQSBqJAAgBigCDCAGQRBqJAAgAkGAAWokAAvdDAEBfyMAQTBrIgckACAHIAE2AiwgBEEANgIAIAcgAxAnIAcQSCEIIAcQJQJ/AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQCAGQcEAaw45AAEXBBcFFwYHFxcXChcXFxcODxAXFxcTFRcXFxcXFxcAAQIDAxcXARcIFxcJCxcMFw0XCxcXERIUFgsgACAFQRhqIAdBLGogAiAEIAgQ9wIMGAsgACAFQRBqIAdBLGogAiAEIAgQ9gIMFwsgAEEIaiAAKAIIKAIMEQAAIQEgByAAIAcoAiwgAiADIAQgBSABECMgARAjIAEQH0ECdGoQbTYCLAwWCyAHQSxqIAIgBCAIQQIQZyEAAkAgBCgCACIBQQRxIABBAWtBHktyRQRAIAUgADYCDAwBCyAEIAFBBHI2AgALDBULIAdBqKABKQMANwMYIAdBoKABKQMANwMQIAdBmKABKQMANwMIIAdBkKABKQMANwMAIAcgACABIAIgAyAEIAUgByAHQSBqEG02AiwMFAsgB0HIoAEpAwA3AxggB0HAoAEpAwA3AxAgB0G4oAEpAwA3AwggB0GwoAEpAwA3AwAgByAAIAEgAiADIAQgBSAHIAdBIGoQbTYCLAwTCyAHQSxqIAIgBCAIQQIQZyEAAkAgBCgCACIBQQRxIABBF0pyRQRAIAUgADYCCAwBCyAEIAFBBHI2AgALDBILIAdBLGogAiAEIAhBAhBnIQACQCAEKAIAIgFBBHEgAEEBa0ELS3JFBEAgBSAANgIIDAELIAQgAUEEcjYCAAsMEQsgB0EsaiACIAQgCEEDEGchAAJAIAQoAgAiAUEEcSAAQe0CSnJFBEAgBSAANgIcDAELIAQgAUEEcjYCAAsMEAsgB0EsaiACIAQgCEECEGchAAJAIAQoAgAiAUEEcSAAQQFrIgBBC0tyRQRAIAUgADYCEAwBCyAEIAFBBHI2AgALDA8LIAdBLGogAiAEIAhBAhBnIQACQCAEKAIAIgFBBHEgAEE7SnJFBEAgBSAANgIEDAELIAQgAUEEcjYCAAsMDgsgB0EsaiEAIwBBEGsiASQAIAEgAjYCDANAAkAgACABQQxqECsNACAIQQEgABA3EF9FDQAgABA+GgwBCwsgACABQQxqECsEQCAEIAQoAgBBAnI2AgALIAFBEGokAAwNCyAHQSxqIQECQCAAQQhqIAAoAggoAggRAAAiABAfQQAgAEEMahAfa0YEQCAEIAQoAgBBBHI2AgAMAQsgASACIAAgAEEYaiAIIARBABDNASICIABHIAUoAggiAUEMR3JFBEAgBUEANgIIDAELIAIgAGtBDEcgAUELSnJFBEAgBSABQQxqNgIICwsMDAsgB0HQoAFBLPwKAAAgByAAIAEgAiADIAQgBSAHIAdBLGoQbTYCLAwLCyAHQZChASgCADYCECAHQYihASkDADcDCCAHQYChASkDADcDACAHIAAgASACIAMgBCAFIAcgB0EUahBtNgIsDAoLIAdBLGogAiAEIAhBAhBnIQACQCAEKAIAIgFBBHEgAEE8SnJFBEAgBSAANgIADAELIAQgAUEEcjYCAAsMCQsgB0G4oQEpAwA3AxggB0GwoQEpAwA3AxAgB0GooQEpAwA3AwggB0GgoQEpAwA3AwAgByAAIAEgAiADIAQgBSAHIAdBIGoQbTYCLAwICyAHQSxqIAIgBCAIQQEQZyEAAkAgBCgCACIBQQRxIABBBkpyRQRAIAUgADYCGAwBCyAEIAFBBHI2AgALDAcLIAAgASACIAMgBCAFIAAoAgAoAhQRBgAMBwsgAEEIaiAAKAIIKAIYEQAAIQEgByAAIAcoAiwgAiADIAQgBSABECMgARAjIAEQH0ECdGoQbTYCLAwFCyAFQRRqIAdBLGogAiAEIAgQ9QIMBAsgB0EsaiACIAQgCEEEEGchACAELQAAQQRxRQRAIAUgAEHsDms2AhQLDAMLIAZBJUYNAQsgBCAEKAIAQQRyNgIADAELIwBBEGsiACQAIAAgAjYCDAJAIAQCf0EGIAdBLGoiASAAQQxqIgIQKw0AGkEEIAggARA3EJQBQSVHDQAaIAEQPiACECtFDQFBAgsgBCgCAHI2AgALIABBEGokAAsgBygCLAsgB0EwaiQACz0AIAACfyABKAIEIAEoAgAiAWtBAnUgAksEQCAAIAEgAkECdGoqAgA4AgBBAQwBCyAAQQA6AABBAAs6AAQLSAECfyMAQRBrIgYkACAGIAE2AgwgBkEIaiIHIAMQJyAHEEghASAHECUgBUEUaiAGQQxqIAIgBCABEPUCIAYoAgwgBkEQaiQAC0oBAn8jAEEQayIGJAAgBiABNgIMIAZBCGoiByADECcgBxBIIQEgBxAlIAAgBUEQaiAGQQxqIAIgBCABEPYCIAYoAgwgBkEQaiQAC0oBAn8jAEEQayIGJAAgBiABNgIMIAZBCGoiByADECcgBxBIIQEgBxAlIAAgBUEYaiAGQQxqIAIgBCABEPcCIAYoAgwgBkEQaiQACzAAIAAgASACIAMgBCAFIABBCGogACgCCCgCFBEAACIAECMgABAjIAAQH0ECdGoQbQtYAQF/IwBBIGsiBiQAIAZBuKEBKQMANwMYIAZBsKEBKQMANwMQIAZBqKEBKQMANwMIIAZBoKEBKQMANwMAIAAgASACIAMgBCAFIAYgBkEgaiIBEG0gASQAC4ICAQN/IAAoAgQgACgCACIEa0ECdSIDIAFJBEAjAEEgayIEJAACQCABIANrIgMgACgCCCAAKAIEIgFrQQJ1TQRAIAAoAgQiASADQQJ0aiEDA0AgASADRgRAIAAgAzYCBAUgASACKgIAOAIAIAFBBGohAQwBCwsMAQsgBEEMaiAAIAEgACgCAGtBAnUgA2oQtgEgACgCBCAAKAIAa0ECdSAAEIcCIgUoAggiASADQQJ0aiEDA0AgASADRwRAIAEgAioCADgCACABQQRqIQEMAQsLIAUgAzYCCCAAIAUQhQIgBRCBAgsgBEEgaiQADwsgASADSQRAIAAgBCABQQJ0ajYCBAsL9wsBAX8jAEEQayIHJAAgByABNgIMIARBADYCACAHIAMQJyAHEEkhCCAHECUCfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgBkHBAGsOOQABFwQXBRcGBxcXFwoXFxcXDg8QFxcXExUXFxcXFxcXAAECAwMXFwEXCBcXCQsXDBcNFwsXFxESFBYLIAAgBUEYaiAHQQxqIAIgBCAIEPoCDBgLIAAgBUEQaiAHQQxqIAIgBCAIEPkCDBcLIABBCGogACgCCCgCDBEAACEBIAcgACAHKAIMIAIgAyAEIAUgARAjIAEQIyABEB9qEG42AgwMFgsgB0EMaiACIAQgCEECEGghAAJAIAQoAgAiAUEEcSAAQQFrQR5LckUEQCAFIAA2AgwMAQsgBCABQQRyNgIACwwVCyAHQqXavanC7MuS+QA3AwAgByAAIAEgAiADIAQgBSAHIAdBCGoQbjYCDAwUCyAHQqWytanSrcuS5AA3AwAgByAAIAEgAiADIAQgBSAHIAdBCGoQbjYCDAwTCyAHQQxqIAIgBCAIQQIQaCEAAkAgBCgCACIBQQRxIABBF0pyRQRAIAUgADYCCAwBCyAEIAFBBHI2AgALDBILIAdBDGogAiAEIAhBAhBoIQACQCAEKAIAIgFBBHEgAEEBa0ELS3JFBEAgBSAANgIIDAELIAQgAUEEcjYCAAsMEQsgB0EMaiACIAQgCEEDEGghAAJAIAQoAgAiAUEEcSAAQe0CSnJFBEAgBSAANgIcDAELIAQgAUEEcjYCAAsMEAsgB0EMaiACIAQgCEECEGghAAJAIAQoAgAiAUEEcSAAQQFrIgBBC0tyRQRAIAUgADYCEAwBCyAEIAFBBHI2AgALDA8LIAdBDGogAiAEIAhBAhBoIQACQCAEKAIAIgFBBHEgAEE7SnJFBEAgBSAANgIEDAELIAQgAUEEcjYCAAsMDgsgB0EMaiEAIwBBEGsiASQAIAEgAjYCDANAAkAgACABQQxqECwNACAIQQEgABA4EGBFDQAgABA/GgwBCwsgACABQQxqECwEQCAEIAQoAgBBAnI2AgALIAFBEGokAAwNCyAHQQxqIQECQCAAQQhqIAAoAggoAggRAAAiABAfQQAgAEEMahAfa0YEQCAEIAQoAgBBBHI2AgAMAQsgASACIAAgAEEYaiAIIARBABDPASICIABHIAUoAggiAUEMR3JFBEAgBUEANgIIDAELIAIgAGtBDEcgAUELSnJFBEAgBSABQQxqNgIICwsMDAsgB0H4nwEoAAA2AAcgB0HxnwEpAAA3AwAgByAAIAEgAiADIAQgBSAHIAdBC2oQbjYCDAwLCyAHQYCgAS0AADoABCAHQfyfASgAADYCACAHIAAgASACIAMgBCAFIAcgB0EFahBuNgIMDAoLIAdBDGogAiAEIAhBAhBoIQACQCAEKAIAIgFBBHEgAEE8SnJFBEAgBSAANgIADAELIAQgAUEEcjYCAAsMCQsgB0KlkOmp0snOktMANwMAIAcgACABIAIgAyAEIAUgByAHQQhqEG42AgwMCAsgB0EMaiACIAQgCEEBEGghAAJAIAQoAgAiAUEEcSAAQQZKckUEQCAFIAA2AhgMAQsgBCABQQRyNgIACwwHCyAAIAEgAiADIAQgBSAAKAIAKAIUEQYADAcLIABBCGogACgCCCgCGBEAACEBIAcgACAHKAIMIAIgAyAEIAUgARAjIAEQIyABEB9qEG42AgwMBQsgBUEUaiAHQQxqIAIgBCAIEPgCDAQLIAdBDGogAiAEIAhBBBBoIQAgBC0AAEEEcUUEQCAFIABB7A5rNgIUCwwDCyAGQSVGDQELIAQgBCgCAEEEcjYCAAwBCyMAQRBrIgAkACAAIAI2AgwCQCAEAn9BBiAHQQxqIgEgAEEMaiICECwNABpBBCAIIAEQOBCVAUElRw0AGiABED8gAhAsRQ0BQQILIAQoAgByNgIACyAAQRBqJAALIAcoAgwLIAdBEGokAAtIAQJ/IwBBEGsiBiQAIAYgATYCDCAGQQhqIgcgAxAnIAcQSSEBIAcQJSAFQRRqIAZBDGogAiAEIAEQ+AIgBigCDCAGQRBqJAALSgECfyMAQRBrIgYkACAGIAE2AgwgBkEIaiIHIAMQJyAHEEkhASAHECUgACAFQRBqIAZBDGogAiAEIAEQ+QIgBigCDCAGQRBqJAALSgECfyMAQRBrIgYkACAGIAE2AgwgBkEIaiIHIAMQJyAHEEkhASAHECUgACAFQRhqIAZBDGogAiAEIAEQ+gIgBigCDCAGQRBqJAALLQAgACABIAIgAyAEIAUgAEEIaiAAKAIIKAIUEQAAIgAQIyAAECMgABAfahBuCzsBAX8jAEEQayIGJAAgBkKlkOmp0snOktMANwMIIAAgASACIAMgBCAFIAZBCGogBkEQaiIBEG4gASQAC4MBAQR/IwBBwAFrIgAkACAAIAQ2ArwBIABBoAFqIgUgBSAFQRQQLkHXDSAAQbwBahDKASIHaiIEIAIQaSEGIAAgAhAnIAAQSCAAECUgBSAEIAAQbyABIAAgACAHQQJ0aiIBIAAgBiAFa0ECdGogBCAGRhsgASACIAMQhQEgAEHAAWokAAvRAwEHfwJ/IwBB0AJrIgYkACAGIAU3A8gCIAYgBDcDwAIgBkIlNwO4AiAGQbgCaiIHQQFyQd8VIAIoAgQQyQEhCCAGIAZBkAJqIgk2AowCEC4hAAJ/IAgEQCAGIAIoAgg2AiAgCSAAIAcgBkEgaiAGQcACahCDAwwBCyAGQZACaiAAIAZBuAJqIAZBwAJqEIIDCyEAIAZB4wA2AiAgBkGEAmpBACAGQSBqIgoQNiEJIAZBkAJqIQcCQCAAQR5OBEAQLiEAAn8gCARAIAYgAigCCDYCICAGQYwCaiAAIAZBuAJqIAogBkHAAmoQgQMMAQsgBkGMAmogACAGQbgCaiAGQcACahDIAQsiAEF/Rg0BIAkgBigCjAIQPCAGKAKMAiEHCyAHIAAgB2oiCyACEGkhDCAGQeMANgIgIAZBGGpBACAGQSBqIgcQNiEIAkAgBigCjAIiCiAGQZACakYEQCAHIQAMAQsgAEEDdBA0IgBFDQEgCCAAEDwgBigCjAIhCgsgBkEMaiIHIAIQJyAKIAwgCyAAIAZBFGogBkEQaiAHEP4CIAcQJSABIAAgBigCFCAGKAIQIAIgAxCFASAIEDUgCRA1IAZB0AJqJAAMAQsQPQALC8kDAQd/An8jAEHAAmsiBSQAIAUgBDkDuAIgBUIlNwOwAiAFQbACaiIGQQFyQcYfIAIoAgQQyQEhByAFIAVBkAJqIgg2AowCEC4hAAJ/IAcEQCAFIAIoAgg2AiAgCCAAIAYgBUEgaiAFQbgCahCIAwwBCyAFQZACaiAAIAVBsAJqIAVBuAJqEIcDCyEAIAVB4wA2AiAgBUGEAmpBACAFQSBqIgkQNiEIIAVBkAJqIQYCQCAAQR5OBEAQLiEAAn8gBwRAIAUgAigCCDYCICAFQYwCaiAAIAVBsAJqIAkgBUG4AmoQhgMMAQsgBUGMAmogACAFQbACaiAFQbgCahCFAwsiAEF/Rg0BIAggBSgCjAIQPCAFKAKMAiEGCyAGIAAgBmoiCiACEGkhCyAFQeMANgIgIAVBGGpBACAFQSBqIgYQNiEHAkAgBSgCjAIiCSAFQZACakYEQCAGIQAMAQsgAEEDdBA0IgBFDQEgByAAEDwgBSgCjAIhCQsgBUEMaiIGIAIQJyAJIAsgCiAAIAVBFGogBUEQaiAGEP4CIAYQJSABIAAgBSgCFCAFKAIQIAIgAxCFASAHEDUgCBA1IAVBwAJqJAAMAQsQPQALCxEAIAAgASACIAMgBEEAEKECCxEAIAAgASACIAMgBEEAEKICCxEAIAAgASACIAMgBEEBEKECCxEAIAAgASACIAMgBEEBEKICC8kBAQF/IwBBIGsiBSQAIAUgATYCHAJAIAIoAgRBAXFFBEAgACABIAIgAyAEIAAoAgAoAhgRBwAhAgwBCyAFQRBqIgAgAhAnIAAQmQEhASAAECUCQCAEBEAgACABEHwMAQsgBUEQaiABEHsLIAUgBUEQahBONgIMA0AgBSAFQRBqIgAQdTYCCCAFQQxqIAVBCGoQdgRAIAUoAhwhAiAAEDkaBSAFQRxqIAVBDGoiACgCACgCABC7AyAAEPYBDAELCwsgBUEgaiQAIAILBQBB7CALewEEfyMAQdAAayIAJAAgACAENgJMIABBMGoiBSAFIAVBFBAuQdcNIABBzABqEMoBIgdqIgQgAhBpIQYgACACECcgABBJIAAQJSAFIAQgABB5IAEgACAAIAdqIgEgACAGIAVraiAEIAZGGyABIAIgAxCAASAAQdAAaiQAC8wDAQd/An8jAEGwAWsiBiQAIAYgBTcDqAEgBiAENwOgASAGQiU3A5gBIAZBmAFqIgdBAXJB3xUgAigCBBDJASEIIAYgBkHwAGoiCTYCbBAuIQACfyAIBEAgBiACKAIINgIgIAkgACAHIAZBIGogBkGgAWoQgwMMAQsgBkHwAGogACAGQZgBaiAGQaABahCCAwshACAGQeMANgIgIAZB5ABqQQAgBkEgaiIKEDYhCSAGQfAAaiEHAkAgAEEeTgRAEC4hAAJ/IAgEQCAGIAIoAgg2AiAgBkHsAGogACAGQZgBaiAKIAZBoAFqEIEDDAELIAZB7ABqIAAgBkGYAWogBkGgAWoQyAELIgBBf0YNASAJIAYoAmwQPCAGKAJsIQcLIAcgACAHaiILIAIQaSEMIAZB4wA2AiAgBkEYakEAIAZBIGoiBxA2IQgCQCAGKAJsIgogBkHwAGpGBEAgByEADAELIABBAXQQNCIARQ0BIAggABA8IAYoAmwhCgsgBkEMaiIHIAIQJyAKIAwgCyAAIAZBFGogBkEQaiAHEIQDIAcQJSABIAAgBigCFCAGKAIQIAIgAxCAASAIEDUgCRA1IAZBsAFqJAAMAQsQPQALCwkAIAEgABEAAAvEAwEHfwJ/IwBBoAFrIgUkACAFIAQ5A5gBIAVCJTcDkAEgBUGQAWoiBkEBckHGHyACKAIEEMkBIQcgBSAFQfAAaiIINgJsEC4hAAJ/IAcEQCAFIAIoAgg2AiAgCCAAIAYgBUEgaiAFQZgBahCIAwwBCyAFQfAAaiAAIAVBkAFqIAVBmAFqEIcDCyEAIAVB4wA2AiAgBUHkAGpBACAFQSBqIgkQNiEIIAVB8ABqIQYCQCAAQR5OBEAQLiEAAn8gBwRAIAUgAigCCDYCICAFQewAaiAAIAVBkAFqIAkgBUGYAWoQhgMMAQsgBUHsAGogACAFQZABaiAFQZgBahCFAwsiAEF/Rg0BIAggBSgCbBA8IAUoAmwhBgsgBiAAIAZqIgogAhBpIQsgBUHjADYCICAFQRhqQQAgBUEgaiIGEDYhBwJAIAUoAmwiCSAFQfAAakYEQCAGIQAMAQsgAEEBdBA0IgBFDQEgByAAEDwgBSgCbCEJCyAFQQxqIgYgAhAnIAkgCyAKIAAgBUEUaiAFQRBqIAYQhAMgBhAlIAEgACAFKAIUIAUoAhAgAiADEIABIAcQNSAIEDUgBUGgAWokAAwBCxA9AAsLEQAgACABIAIgAyAEQQAQowILEQAgACABIAIgAyAEQQAQpAILEQAgACABIAIgAyAEQQEQowILoQEBAn8jAEHgAGsiBSQAIAVBDGoiBCABIAIgAygCACAAEQgAQdQAEFMiACAEKQIANwIAIAAgBC0ACDoACCAAQQxqIARBDGoQgQEaIABBGGogBEEYahCBARogAEEkaiAEQSRqEIEBGiAAQTBqIARBMGoQgQEaIABBPGogBEE8ahCBARogAEHIAGogBEHIAGoQgQEaIAQQxwMgBUHgAGokACAACxEAIAAgASACIAMgBEEBEKQCC8kBAQF/IwBBIGsiBSQAIAUgATYCHAJAIAIoAgRBAXFFBEAgACABIAIgAyAEIAAoAgAoAhgRBwAhAgwBCyAFQRBqIgAgAhAnIAAQmwEhASAAECUCQCAEBEAgACABEHwMAQsgBUEQaiABEHsLIAUgBUEQahBONgIMA0AgBSAFQRBqIgAQdzYCCCAFQQxqIAVBCGoQdgRAIAUoAhwhAiAAECAaBSAFQRxqIAVBDGoiACgCACwAABC/AyAAEPgBDAELCwsgBUEgaiQAIAIL5gIBAX8jAEHAAmsiACQAIAAgAjYCuAIgACABNgK8AiAAQcQBahAkIQYgAEEQaiICIAMQJyACEEhB0J8BQeqfASAAQdABahBvIAIQJSAAQbgBahAkIgMgAxAoECEgACADQQAQIiIBNgK0ASAAIAI2AgwgAEEANgIIA0ACQCAAQbwCaiAAQbgCahArDQAgACgCtAEgAxAfIAFqRgRAIAMQHyECIAMgAxAfQQF0ECEgAyADECgQISAAIAIgA0EAECIiAWo2ArQBCyAAQbwCaiICEDdBECABIABBtAFqIABBCGpBACAGIABBEGogAEEMaiAAQdABahCYAQ0AIAIQPhoMAQsLIAMgACgCtAEgAWsQISADECMQLiAAIAU2AgQgAEEEahCNA0EBRwRAIARBBDYCAAsgAEG8AmogAEG4AmoQKwRAIAQgBCgCAEECcjYCAAsgACgCvAIgAxAgGiAGECAaIABBwAJqJAAL4QQCA38BfgJ/IwBB8AJrIgAkACAAIAI2AugCIAAgATYC7AIgAEHcAWogAyAAQfABaiAAQewBaiAAQegBahD7ASAAQdABahAkIgEgARAoECEgACABQQAQIiICNgLMASAAIABBIGo2AhwgAEEANgIYIABBAToAFyAAQcUAOgAWQQAhAwNAAkACQAJAIABB7AJqIABB6AJqECsNACAAKALMASABEB8gAmpGBEAgARAfIQYgASABEB9BAXQQISABIAEQKBAhIAAgBiABQQAQIiICajYCzAELIABB7AJqEDcgAEEXaiAAQRZqIAIgAEHMAWogACgC7AEgACgC6AEgAEHcAWogAEEgaiAAQRxqIABBGGogAEHwAWoQ+gENACADDQFBACEDIAAoAswBIAJrIgdBAEwNAgJAAkAgAi0AACIGQStrIggOAwEAAQALIAZBLkYNAkEBIQMgBkEwa0H/AXFBCkkNAwwBCyAHQQFGDQICQCAIDgMAAwADCyACLQABIgZBLkYNAUEBIQMgBkEwa0H/AXFBCU0NAgsCQCAAQdwBahAfRQ0AIAAtABdBAXFFDQAgACgCHCIDIABBIGprQZ8BSg0AIAAgA0EEajYCHCADIAAoAhg2AgALIAAgAiAAKALMASAEEI4DIAApAwAhCSAFIAApAwg3AwggBSAJNwMAIABB3AFqIABBIGogACgCHCAEEEMgAEHsAmogAEHoAmoQKwRAIAQgBCgCAEECcjYCAAsgACgC7AIgARAgGiAAQdwBahAgGiAAQfACaiQADAMLQQEhAwsgAEHsAmoQPhoMAAsACwvKBAEDfwJ/IwBB4AJrIgAkACAAIAI2AtgCIAAgATYC3AIgAEHMAWogAyAAQeABaiAAQdwBaiAAQdgBahD7ASAAQcABahAkIgEgARAoECEgACABQQAQIiICNgK8ASAAIABBEGo2AgwgAEEANgIIIABBAToAByAAQcUAOgAGQQAhAwNAAkACQAJAIABB3AJqIABB2AJqECsNACAAKAK8ASABEB8gAmpGBEAgARAfIQYgASABEB9BAXQQISABIAEQKBAhIAAgBiABQQAQIiICajYCvAELIABB3AJqEDcgAEEHaiAAQQZqIAIgAEG8AWogACgC3AEgACgC2AEgAEHMAWogAEEQaiAAQQxqIABBCGogAEHgAWoQ+gENACADDQFBACEDIAAoArwBIAJrIgdBAEwNAgJAAkAgAi0AACIGQStrIggOAwEAAQALIAZBLkYNAkEBIQMgBkEwa0H/AXFBCkkNAwwBCyAHQQFGDQICQCAIDgMAAwADCyACLQABIgZBLkYNAUEBIQMgBkEwa0H/AXFBCU0NAgsCQCAAQcwBahAfRQ0AIAAtAAdBAXFFDQAgACgCDCIDIABBEGprQZ8BSg0AIAAgA0EEajYCDCADIAAoAgg2AgALIAUgAiAAKAK8ASAEEI8DOQMAIABBzAFqIABBEGogACgCDCAEEEMgAEHcAmogAEHYAmoQKwRAIAQgBCgCAEECcjYCAAsgACgC3AIgARAgGiAAQcwBahAgGiAAQeACaiQADAMLQQEhAwsgAEHcAmoQPhoMAAsACwvKBAEDfwJ/IwBB4AJrIgAkACAAIAI2AtgCIAAgATYC3AIgAEHMAWogAyAAQeABaiAAQdwBaiAAQdgBahD7ASAAQcABahAkIgEgARAoECEgACABQQAQIiICNgK8ASAAIABBEGo2AgwgAEEANgIIIABBAToAByAAQcUAOgAGQQAhAwNAAkACQAJAIABB3AJqIABB2AJqECsNACAAKAK8ASABEB8gAmpGBEAgARAfIQYgASABEB9BAXQQISABIAEQKBAhIAAgBiABQQAQIiICajYCvAELIABB3AJqEDcgAEEHaiAAQQZqIAIgAEG8AWogACgC3AEgACgC2AEgAEHMAWogAEEQaiAAQQxqIABBCGogAEHgAWoQ+gENACADDQFBACEDIAAoArwBIAJrIgdBAEwNAgJAAkAgAi0AACIGQStrIggOAwEAAQALIAZBLkYNAkEBIQMgBkEwa0H/AXFBCkkNAwwBCyAHQQFGDQICQCAIDgMAAwADCyACLQABIgZBLkYNAUEBIQMgBkEwa0H/AXFBCU0NAgsCQCAAQcwBahAfRQ0AIAAtAAdBAXFFDQAgACgCDCIDIABBEGprQZ8BSg0AIAAgA0EEajYCDCADIAAoAgg2AgALIAUgAiAAKAK8ASAEEJEDOAIAIABBzAFqIABBEGogACgCDCAEEEMgAEHcAmogAEHYAmoQKwRAIAQgBCgCAEECcjYCAAsgACgC3AIgARAgGiAAQcwBahAgGiAAQeACaiQADAMLQQEhAwsgAEHcAmoQPhoMAAsACwuWAwECfyMAQdACayIAJAAgACACNgLIAiAAIAE2AswCIAMQaiEGIAMgAEHQAWoQrgEhByAAQcQBaiADIABBxAJqEK0BIABBuAFqECQiASABECgQISAAIAFBABAiIgI2ArQBIAAgAEEQajYCDCAAQQA2AggDQAJAIABBzAJqIABByAJqECsNACAAKAK0ASABEB8gAmpGBEAgARAfIQMgASABEB9BAXQQISABIAEQKBAhIAAgAyABQQAQIiICajYCtAELIABBzAJqIgMQNyAGIAIgAEG0AWogAEEIaiAAKALEAiAAQcQBaiAAQRBqIABBDGogBxCYAQ0AIAMQPhoMAQsLAkAgAEHEAWoQH0UNACAAKAIMIgMgAEEQamtBnwFKDQAgACADQQRqNgIMIAMgACgCCDYCAAsgBSACIAAoArQBIAQgBhCSAzcDACAAQcQBaiAAQRBqIAAoAgwgBBBDIABBzAJqIABByAJqECsEQCAEIAQoAgBBAnI2AgALIAAoAswCIAEQIBogAEHEAWoQIBogAEHQAmokAAuWAwECfyMAQdACayIAJAAgACACNgLIAiAAIAE2AswCIAMQaiEGIAMgAEHQAWoQrgEhByAAQcQBaiADIABBxAJqEK0BIABBuAFqECQiASABECgQISAAIAFBABAiIgI2ArQBIAAgAEEQajYCDCAAQQA2AggDQAJAIABBzAJqIABByAJqECsNACAAKAK0ASABEB8gAmpGBEAgARAfIQMgASABEB9BAXQQISABIAEQKBAhIAAgAyABQQAQIiICajYCtAELIABBzAJqIgMQNyAGIAIgAEG0AWogAEEIaiAAKALEAiAAQcQBaiAAQRBqIABBDGogBxCYAQ0AIAMQPhoMAQsLAkAgAEHEAWoQH0UNACAAKAIMIgMgAEEQamtBnwFKDQAgACADQQRqNgIMIAMgACgCCDYCAAsgBSACIAAoArQBIAQgBhCVAzsBACAAQcQBaiAAQRBqIAAoAgwgBBBDIABBzAJqIABByAJqECsEQCAEIAQoAgBBAnI2AgALIAAoAswCIAEQIBogAEHEAWoQIBogAEHQAmokAAuWAwECfyMAQdACayIAJAAgACACNgLIAiAAIAE2AswCIAMQaiEGIAMgAEHQAWoQrgEhByAAQcQBaiADIABBxAJqEK0BIABBuAFqECQiASABECgQISAAIAFBABAiIgI2ArQBIAAgAEEQajYCDCAAQQA2AggDQAJAIABBzAJqIABByAJqECsNACAAKAK0ASABEB8gAmpGBEAgARAfIQMgASABEB9BAXQQISABIAEQKBAhIAAgAyABQQAQIiICajYCtAELIABBzAJqIgMQNyAGIAIgAEG0AWogAEEIaiAAKALEAiAAQcQBaiAAQRBqIABBDGogBxCYAQ0AIAMQPhoMAQsLAkAgAEHEAWoQH0UNACAAKAIMIgMgAEEQamtBnwFKDQAgACADQQRqNgIMIAMgACgCCDYCAAsgBSACIAAoArQBIAQgBhCWAzcDACAAQcQBaiAAQRBqIAAoAgwgBBBDIABBzAJqIABByAJqECsEQCAEIAQoAgBBAnI2AgALIAAoAswCIAEQIBogAEHEAWoQIBogAEHQAmokAAuWAwECfyMAQdACayIAJAAgACACNgLIAiAAIAE2AswCIAMQaiEGIAMgAEHQAWoQrgEhByAAQcQBaiADIABBxAJqEK0BIABBuAFqECQiASABECgQISAAIAFBABAiIgI2ArQBIAAgAEEQajYCDCAAQQA2AggDQAJAIABBzAJqIABByAJqECsNACAAKAK0ASABEB8gAmpGBEAgARAfIQMgASABEB9BAXQQISABIAEQKBAhIAAgAyABQQAQIiICajYCtAELIABBzAJqIgMQNyAGIAIgAEG0AWogAEEIaiAAKALEAiAAQcQBaiAAQRBqIABBDGogBxCYAQ0AIAMQPhoMAQsLAkAgAEHEAWoQH0UNACAAKAIMIgMgAEEQamtBnwFKDQAgACADQQRqNgIMIAMgACgCCDYCAAsgBSACIAAoArQBIAQgBhCXAzYCACAAQcQBaiAAQRBqIAAoAgwgBBBDIABBzAJqIABByAJqECsEQCAEIAQoAgBBAnI2AgALIAAoAswCIAEQIBogAEHEAWoQIBogAEHQAmokAAvqAQEBfyMAQSBrIgYkACAGIAE2AhwCQCADKAIEQQFxRQRAIAZBfzYCACAAIAEgAiADIAQgBiAAKAIAKAIQEQYAIQECQAJAAkAgBigCAA4CAAECCyAFQQA6AAAMAwsgBUEBOgAADAILIAVBAToAACAEQQQ2AgAMAQsgBiADECcgBhBIIQEgBhAlIAYgAxAnIAYQmQEhACAGECUgBiAAEHwgBkEMciAAEHsgBSAGQRxqIAIgBiAGQRhqIgMgASAEQQEQzQEgBkY6AAAgBigCHCEBA0AgA0EMaxA5IgMgBkcNAAsLIAZBIGokACABC+YCAQF/IwBBgAJrIgAkACAAIAI2AvgBIAAgATYC/AEgAEHEAWoQJCEGIABBEGoiAiADECcgAhBJQdCfAUHqnwEgAEHQAWoQeSACECUgAEG4AWoQJCIDIAMQKBAhIAAgA0EAECIiATYCtAEgACACNgIMIABBADYCCANAAkAgAEH8AWogAEH4AWoQLA0AIAAoArQBIAMQHyABakYEQCADEB8hAiADIAMQH0EBdBAhIAMgAxAoECEgACACIANBABAiIgFqNgK0AQsgAEH8AWoiAhA4QRAgASAAQbQBaiAAQQhqQQAgBiAAQRBqIABBDGogAEHQAWoQmgENACACED8aDAELCyADIAAoArQBIAFrECEgAxAjEC4gACAFNgIEIABBBGoQjQNBAUcEQCAEQQQ2AgALIABB/AFqIABB+AFqECwEQCAEIAQoAgBBAnI2AgALIAAoAvwBIAMQIBogBhAgGiAAQYACaiQAC+EEAgN/AX4CfyMAQZACayIAJAAgACACNgKIAiAAIAE2AowCIABB0AFqIAMgAEHgAWogAEHfAWogAEHeAWoQ/wEgAEHEAWoQJCIBIAEQKBAhIAAgAUEAECIiAjYCwAEgACAAQSBqNgIcIABBADYCGCAAQQE6ABcgAEHFADoAFkEAIQMDQAJAAkACQCAAQYwCaiAAQYgCahAsDQAgACgCwAEgARAfIAJqRgRAIAEQHyEGIAEgARAfQQF0ECEgASABECgQISAAIAYgAUEAECIiAmo2AsABCyAAQYwCahA4IABBF2ogAEEWaiACIABBwAFqIAAsAN8BIAAsAN4BIABB0AFqIABBIGogAEEcaiAAQRhqIABB4AFqEP4BDQAgAw0BQQAhAyAAKALAASACayIHQQBMDQICQAJAIAItAAAiBkErayIIDgMBAAEACyAGQS5GDQJBASEDIAZBMGtB/wFxQQpJDQMMAQsgB0EBRg0CAkAgCA4DAAMAAwsgAi0AASIGQS5GDQFBASEDIAZBMGtB/wFxQQlNDQILAkAgAEHQAWoQH0UNACAALQAXQQFxRQ0AIAAoAhwiAyAAQSBqa0GfAUoNACAAIANBBGo2AhwgAyAAKAIYNgIACyAAIAIgACgCwAEgBBCOAyAAKQMAIQkgBSAAKQMINwMIIAUgCTcDACAAQdABaiAAQSBqIAAoAhwgBBBDIABBjAJqIABBiAJqECwEQCAEIAQoAgBBAnI2AgALIAAoAowCIAEQIBogAEHQAWoQIBogAEGQAmokAAwDC0EBIQMLIABBjAJqED8aDAALAAsLygQBA38CfyMAQYACayIAJAAgACACNgL4ASAAIAE2AvwBIABBwAFqIAMgAEHQAWogAEHPAWogAEHOAWoQ/wEgAEG0AWoQJCIBIAEQKBAhIAAgAUEAECIiAjYCsAEgACAAQRBqNgIMIABBADYCCCAAQQE6AAcgAEHFADoABkEAIQMDQAJAAkACQCAAQfwBaiAAQfgBahAsDQAgACgCsAEgARAfIAJqRgRAIAEQHyEGIAEgARAfQQF0ECEgASABECgQISAAIAYgAUEAECIiAmo2ArABCyAAQfwBahA4IABBB2ogAEEGaiACIABBsAFqIAAsAM8BIAAsAM4BIABBwAFqIABBEGogAEEMaiAAQQhqIABB0AFqEP4BDQAgAw0BQQAhAyAAKAKwASACayIHQQBMDQICQAJAIAItAAAiBkErayIIDgMBAAEACyAGQS5GDQJBASEDIAZBMGtB/wFxQQpJDQMMAQsgB0EBRg0CAkAgCA4DAAMAAwsgAi0AASIGQS5GDQFBASEDIAZBMGtB/wFxQQlNDQILAkAgAEHAAWoQH0UNACAALQAHQQFxRQ0AIAAoAgwiAyAAQRBqa0GfAUoNACAAIANBBGo2AgwgAyAAKAIINgIACyAFIAIgACgCsAEgBBCPAzkDACAAQcABaiAAQRBqIAAoAgwgBBBDIABB/AFqIABB+AFqECwEQCAEIAQoAgBBAnI2AgALIAAoAvwBIAEQIBogAEHAAWoQIBogAEGAAmokAAwDC0EBIQMLIABB/AFqED8aDAALAAsLygQBA38CfyMAQYACayIAJAAgACACNgL4ASAAIAE2AvwBIABBwAFqIAMgAEHQAWogAEHPAWogAEHOAWoQ/wEgAEG0AWoQJCIBIAEQKBAhIAAgAUEAECIiAjYCsAEgACAAQRBqNgIMIABBADYCCCAAQQE6AAcgAEHFADoABkEAIQMDQAJAAkACQCAAQfwBaiAAQfgBahAsDQAgACgCsAEgARAfIAJqRgRAIAEQHyEGIAEgARAfQQF0ECEgASABECgQISAAIAYgAUEAECIiAmo2ArABCyAAQfwBahA4IABBB2ogAEEGaiACIABBsAFqIAAsAM8BIAAsAM4BIABBwAFqIABBEGogAEEMaiAAQQhqIABB0AFqEP4BDQAgAw0BQQAhAyAAKAKwASACayIHQQBMDQICQAJAIAItAAAiBkErayIIDgMBAAEACyAGQS5GDQJBASEDIAZBMGtB/wFxQQpJDQMMAQsgB0EBRg0CAkAgCA4DAAMAAwsgAi0AASIGQS5GDQFBASEDIAZBMGtB/wFxQQlNDQILAkAgAEHAAWoQH0UNACAALQAHQQFxRQ0AIAAoAgwiAyAAQRBqa0GfAUoNACAAIANBBGo2AgwgAyAAKAIINgIACyAFIAIgACgCsAEgBBCRAzgCACAAQcABaiAAQRBqIAAoAgwgBBBDIABB/AFqIABB+AFqECwEQCAEIAQoAgBBAnI2AgALIAAoAvwBIAEQIBogAEHAAWoQIBogAEGAAmokAAwDC0EBIQMLIABB/AFqED8aDAALAAsLiwMBAX8jAEGAAmsiACQAIAAgAjYC+AEgACABNgL8ASADEGohBiAAQcQBaiADIABB9wFqEK8BIABBuAFqECQiASABECgQISAAIAFBABAiIgI2ArQBIAAgAEEQajYCDCAAQQA2AggDQAJAIABB/AFqIABB+AFqECwNACAAKAK0ASABEB8gAmpGBEAgARAfIQMgASABEB9BAXQQISABIAEQKBAhIAAgAyABQQAQIiICajYCtAELIABB/AFqIgMQOCAGIAIgAEG0AWogAEEIaiAALAD3ASAAQcQBaiAAQRBqIABBDGpB0J8BEJoBDQAgAxA/GgwBCwsCQCAAQcQBahAfRQ0AIAAoAgwiAyAAQRBqa0GfAUoNACAAIANBBGo2AgwgAyAAKAIINgIACyAFIAIgACgCtAEgBCAGEJIDNwMAIABBxAFqIABBEGogACgCDCAEEEMgAEH8AWogAEH4AWoQLARAIAQgBCgCAEECcjYCAAsgACgC/AEgARAgGiAAQcQBahAgGiAAQYACaiQACwcAIAAoAgALiwMBAX8jAEGAAmsiACQAIAAgAjYC+AEgACABNgL8ASADEGohBiAAQcQBaiADIABB9wFqEK8BIABBuAFqECQiASABECgQISAAIAFBABAiIgI2ArQBIAAgAEEQajYCDCAAQQA2AggDQAJAIABB/AFqIABB+AFqECwNACAAKAK0ASABEB8gAmpGBEAgARAfIQMgASABEB9BAXQQISABIAEQKBAhIAAgAyABQQAQIiICajYCtAELIABB/AFqIgMQOCAGIAIgAEG0AWogAEEIaiAALAD3ASAAQcQBaiAAQRBqIABBDGpB0J8BEJoBDQAgAxA/GgwBCwsCQCAAQcQBahAfRQ0AIAAoAgwiAyAAQRBqa0GfAUoNACAAIANBBGo2AgwgAyAAKAIINgIACyAFIAIgACgCtAEgBCAGEJUDOwEAIABBxAFqIABBEGogACgCDCAEEEMgAEH8AWogAEH4AWoQLARAIAQgBCgCAEECcjYCAAsgACgC/AEgARAgGiAAQcQBahAgGiAAQYACaiQAC4sDAQF/IwBBgAJrIgAkACAAIAI2AvgBIAAgATYC/AEgAxBqIQYgAEHEAWogAyAAQfcBahCvASAAQbgBahAkIgEgARAoECEgACABQQAQIiICNgK0ASAAIABBEGo2AgwgAEEANgIIA0ACQCAAQfwBaiAAQfgBahAsDQAgACgCtAEgARAfIAJqRgRAIAEQHyEDIAEgARAfQQF0ECEgASABECgQISAAIAMgAUEAECIiAmo2ArQBCyAAQfwBaiIDEDggBiACIABBtAFqIABBCGogACwA9wEgAEHEAWogAEEQaiAAQQxqQdCfARCaAQ0AIAMQPxoMAQsLAkAgAEHEAWoQH0UNACAAKAIMIgMgAEEQamtBnwFKDQAgACADQQRqNgIMIAMgACgCCDYCAAsgBSACIAAoArQBIAQgBhCWAzcDACAAQcQBaiAAQRBqIAAoAgwgBBBDIABB/AFqIABB+AFqECwEQCAEIAQoAgBBAnI2AgALIAAoAvwBIAEQIBogAEHEAWoQIBogAEGAAmokAAuLAwEBfyMAQYACayIAJAAgACACNgL4ASAAIAE2AvwBIAMQaiEGIABBxAFqIAMgAEH3AWoQrwEgAEG4AWoQJCIBIAEQKBAhIAAgAUEAECIiAjYCtAEgACAAQRBqNgIMIABBADYCCANAAkAgAEH8AWogAEH4AWoQLA0AIAAoArQBIAEQHyACakYEQCABEB8hAyABIAEQH0EBdBAhIAEgARAoECEgACADIAFBABAiIgJqNgK0AQsgAEH8AWoiAxA4IAYgAiAAQbQBaiAAQQhqIAAsAPcBIABBxAFqIABBEGogAEEMakHQnwEQmgENACADED8aDAELCwJAIABBxAFqEB9FDQAgACgCDCIDIABBEGprQZ8BSg0AIAAgA0EEajYCDCADIAAoAgg2AgALIAUgAiAAKAK0ASAEIAYQlwM2AgAgAEHEAWogAEEQaiAAKAIMIAQQQyAAQfwBaiAAQfgBahAsBEAgBCAEKAIAQQJyNgIACyAAKAL8ASABECAaIABBxAFqECAaIABBgAJqJAALmIwBAy5/BX0CfCMAQRBrIhkkACAZIAM2AgwgGUEANgIIIBlCADcCACAZIAEgASACaiICIAIgAWsQwAMjAEHgAGsiIiQAICJBCGohDSAZKAIEIBkoAgAiAWshAiMAQcABayITJAAgE0EANgKgASATQgA3A5gBIBNBADYCsAEgE0IANwKoASATQbQBaiIaQQA2AgggGkIANwIAIBpBgMAAELcDIBpBgMAAEJgDIBNBDGpBAEEw/AsAIBMgAjYCCCATIAE2AgQCQAJ/IBNBBGohAgJ/QXpB5RstAABBMUcNABpBfiACRQ0BGiACQQA2AhggAigCICIBRQRAIAJBADYCKCACQS82AiBBLyEBCyACKAIkRQRAIAJBMDYCJAtBfCACKAIoQQFB0DcgAREDACIDRQ0BGiACIAM2AhwgA0EANgI4IAMgAjYCACADQbT+ADYCBEF+IQQCQCACRQ0AIAIoAiBFDQAgAigCJCIFRQ0AIAIoAhwiAUUNACABKAIAIAJHDQAgASgCBEG0/gBrQR9LDQACQAJAIAEoAjgiDARAIAEoAihBD0cNAQsgAUEPNgIoIAFBBjYCDAwBCyACKAIoIAwgBREBACABQQA2AjggAigCICABQQ82AiggAUEGNgIMRQ0BCyACKAIkRQ0AIAIoAhwiAUUNACABKAIAIAJHDQAgASgCBEG0/gBrQR9LDQBBACEEIAFBADYCNCABQgA3AiwgAUEANgIgIAJBADYCCCACQgA3AhQgASgCDCIFBEAgAiAFQQFxNgIwCyABQgA3AjwgAUEANgIkIAFBgIACNgIYIAFCgICAgHA3AhAgAUK0/gA3AgQgAUKBgICAcDcCxDcgASABQbQKaiIFNgJwIAEgBTYCVCABIAU2AlALQQAgBEUNABogAigCKCADIAIoAiQRAQAgAkEANgIcIAQLC0UEQCATQQA2AqwBAkADQCATIBooAgAiATYCECATIBooAgQgAWs2AhRBACEMIwBBEGsiFyQAQX4hHAJAIBNBBGoiCkUNACAKKAIgRQ0AIAooAiRFDQAgCigCHCIGRQ0AIAYoAgAgCkcNACAGKAIEIgVBtP4Aa0EfSw0AIAooAgwiEEUNACAKKAIAIgFFBEAgCigCBA0BCyAFQb/+AEYEQCAGQcD+ADYCBEHA/gAhBQsgBkHcAGohKiAGQfQFaiEgIAZB2ABqISMgBkHwAGohISAGQbQKaiEfIAZB9ABqIRYgBigCQCEDIAYoAjwhByAKKAIEIiQhBCAKKAIQIg8hFQJAAkACQAJAAkADQEF9IQICQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIAVBtP4Aaw4fBwYKDRA5Ojs8BRUWFhcYGQQcAiUmASgAKh0eA0BCQ0QLIAYoAkwhCAwoCyAGKAJMIQgMJQsgBigCbCEIDCELIAYoAgwhBQw5CyADQQ5PDRYgBEUNPCADQQhqIQIgAUEBaiEFIARBAWshCCABLQAAIAN0IAdqIQcgA0EFTQ0VIAUhASAIIQQgAiEDDBYLIANBIE8NDiAERQ07IAFBAWohAiAEQQFrIQUgAS0AACADdCAHaiEHIANBF00NDSACIQEgBSEEDA4LIANBEE8NAiAERQ06IANBCGohAiABQQFqIQUgBEEBayEIIAEtAAAgA3QgB2ohByADQQdNDQEgBSEBIAghBCACIQMMAgsgBigCDCIJRQ0XAkAgA0EQTw0AIARFDTogA0EIaiECIAFBAWohBSAEQQFrIQggAS0AACADdCAHaiEHIANBB0sEQCAFIQEgCCEEIAIhAwwBCyAIRQRAIAUhAUEAIQQgAiEDIAwhAgw8CyADQRByIQMgBEECayEEIAEtAAEgAnQgB2ohByABQQJqIQELIAlBAnFFIAdBn5YCR3JFBEAgBigCKEUEQCAGQQ82AigLQQAhByAGQQBBAEEAEFEiAjYCHCAXQZ+WAjsADCACIBdBDGpBAhBRIQIgBkG1/gA2AgQgBiACNgIcQQAhAyAGKAIEIQUMNwsgBigCJCICBEAgAkF/NgIwCyAHQQh0QYD+A3EgB0EIdmpBH3BFIAlBAXFxRQRAIApBxw42AhggBkHR/gA2AgQgBigCBCEFDDcLIAdBD3FBCEcEQCAKQZcSNgIYIAZB0f4ANgIEIAYoAgQhBQw3CyAHQQR2IgJBD3EiCEEIaiEFIAhBB00gBigCKCIJBH8gCQUgBiAFNgIoIAULIAVPcUUEQCADQQRrIQMgCkHREDYCGCAGQdH+ADYCBCACIQcgBigCBCEFDDcLQQAhAyAGQQA2AhQgBkGAAiAIdDYCGCAGQQBBAEEAELMBIgI2AhwgCiACNgIwIAZBvf4AQb/+ACAHQYDAAHEbNgIEQQAhByAGKAIEIQUMNgsgCEUEQCAFIQFBACEEIAIhAyAMIQIMOgsgA0EQciEDIARBAmshBCABLQABIAJ0IAdqIQcgAUECaiEBCyAGIAc2AhQgB0H/AXFBCEcEQCAKQZcSNgIYIAZB0f4ANgIEIAYoAgQhBQw1CyAHQYDAA3EEQCAKQesJNgIYIAZB0f4ANgIEIAYoAgQhBQw1CyAGKAIkIgIEQCACIAdBCHZBAXE2AgALAkAgB0GABHFFDQAgBi0ADEEEcUUNACAXQQg6AAwgFyAHQQh2OgANIAYgBigCHCAXQQxqQQIQUTYCHAsgBkG2/gA2AgRBACEDQQAhBwwBCyADQR9LDQELIARFDTUgAUEBaiECIARBAWshBSABLQAAIAN0IAdqIQcgA0EXSwRAIAIhASAFIQQMAQsgA0EIaiEIIAVFBEAgAiEBQQAhBCAIIQMgDCECDDcLIAFBAmohAiAEQQJrIQUgAS0AASAIdCAHaiEHIANBD0sEQCACIQEgBSEEDAELIANBEGohCCAFRQRAIAIhAUEAIQQgCCEDIAwhAgw3CyABQQNqIQIgBEEDayEFIAEtAAIgCHQgB2ohByADQQdLBEAgAiEBIAUhBAwBCyADQRhqIQMgBUUEQCACIQEMNgsgBEEEayEEIAEtAAMgA3QgB2ohByABQQRqIQELIAYoAiQiAgRAIAIgBzYCBAsCQCAGLQAVQQJxRQ0AIAYtAAxBBHFFDQAgFyAHNgAMIAYgBigCHCAXQQxqQQQQUTYCHAsgBkG3/gA2AgRBACEDQQAhBwwBCyADQQ9LDQELIARFDTIgAUEBaiECIARBAWshBSABLQAAIAN0IAdqIQcgA0EHSwRAIAIhASAFIQQMAQsgA0EIaiEDIAVFBEAgAiEBDDMLIARBAmshBCABLQABIAN0IAdqIQcgAUECaiEBCyAGKAIkIgIEQCACIAdBCHY2AgwgAiAHQf8BcTYCCAsCQCAGLQAVQQJxRQ0AIAYtAAxBBHFFDQAgFyAHOwAMIAYgBigCHCAXQQxqQQIQUTYCHAsgBkG4/gA2AgRBACEFQQAhA0EAIQcgBigCFCICQYAIcQ0BDCcLIAYoAhQiAkGACHFFBEAgAyEFDCcLIAchBSADQQ9LDQELIARFBEBBACEEIAUhByAMIQIMMQsgAUEBaiEIIARBAWshCSABLQAAIAN0IAVqIQcgA0EHSwRAIAghASAJIQQMAQsgA0EIaiEDIAlFBEAgCCEBDDALIARBAmshBCABLQABIAN0IAdqIQcgAUECaiEBCyAGIAc2AkQgBigCJCIDBEAgAyAHNgIUC0EAIQMCQCACQYAEcUUNACAGLQAMQQRxRQ0AIBcgBzsADCAGIAYoAhwgF0EMakECEFE2AhwLQQAhBwwlCyADQQhqIQggBUUEQCACIQFBACEEIAghAyAMIQIMLwsgAUECaiECIARBAmshBSABLQABIAh0IAdqIQcgA0EPSwRAIAIhASAFIQQMAQsgA0EQaiEIIAVFBEAgAiEBQQAhBCAIIQMgDCECDC8LIAFBA2ohAiAEQQNrIQUgAS0AAiAIdCAHaiEHIANBB0sEQCACIQEgBSEEDAELIANBGGohAyAFRQRAIAIhAQwuCyAEQQRrIQQgAS0AAyADdCAHaiEHIAFBBGohAQsgBiAHQRh0IAdBgP4DcUEIdHIgB0EIdkGA/gNxIAdBGHZyciICNgIcIAogAjYCMCAGQb7+ADYCBEEAIQdBACEDCyAGKAIQRQRAIAogDzYCECAKIBA2AgwgCiAENgIEIAogATYCACAGIAM2AkAgBiAHNgI8QQIhHAwvCyAGQQBBAEEAELMBIgI2AhwgCiACNgIwIAZBv/4ANgIECwJ/AkAgBigCCEUEQCADIANBAksNAhogBA0BDC0LIAZBzv4ANgIEIAcgA0EHcXYhByADQXhxIQMgBigCBCEFDCkLIARBAWshBCABLQAAIAN0IAdqIQcgAUEBaiEBIANBCHILIAYgB0EBcTYCCEHB/gAhBQJAAkACQAJAAkAgB0EBdkEDcUEBaw4DAAECAwsgBkGA3AA2AlAgBkKJgICA0AA3AlggBkGA7AA2AlQgBkHH/gA2AgQMAwtBxP4AIQUMAQsgCkH0EDYCGEHR/gAhBQsgBiAFNgIEC0EDayEDIAdBA3YhByAGKAIEIQUMJwsgByADQQdxdiEHAn8gA0F4cSIFIANBH0sNABogBEUEQEEAIQQgBSEDIAwhAgwsCyAFQQhqIQggAUEBaiECIARBAWshCSABLQAAIAV0IAdqIQcgA0EXSwRAIAIhASAJIQQgCAwBCyAJRQRAIAIhAUEAIQQgCCEDIAwhAgwsCyAFQRBqIQkgAUECaiECIARBAmshCyABLQABIAh0IAdqIQcgA0EPSwRAIAIhASALIQQgCQwBCyALRQRAIAIhAUEAIQQgCSEDIAwhAgwsCyAFQRhqIQUgAUEDaiECIARBA2shCCABLQACIAl0IAdqIQcgA0EHSwRAIAIhASAIIQQgBQwBCyAIRQRAIAIhAUEAIQQgBSEDIAwhAgwsCyAEQQRrIQQgAS0AAyAFdCAHaiEHIAFBBGohAUEgCyEDIAdB//8DcSICIAdBf3NBEHZHBEAgCkGdCzYCGCAGQdH+ADYCBCAGKAIEIQUMJwsgBkHC/gA2AgQgBiACNgJEQQAhB0EAIQMLIAZBw/4ANgIECyAGKAJEIgIEQCACIAQgAiAESRsiAiAPIAIgD0kbIgJFBEAgDCECDCoLIAIEQCAQIAEgAvwKAAALIAYgBigCRCACazYCRCACIBBqIRAgDyACayEPIAEgAmohASAEIAJrIQQgBigCBCEFDCULIAZBv/4ANgIEIAYoAgQhBQwkCyAIRQRAIAUhAUEAIQQgAiEDIAwhAgwoCyADQRByIQMgBEECayEEIAEtAAEgAnQgB2ohByABQQJqIQELIAYgB0EfcSICQYECajYCZCAGIAdBBXZBH3EiBUEBajYCaCAGIAdBCnZBD3FBBGoiCTYCYCADQQ5rIQMgB0EOdiEHIAVBHkkgAkEdTXFFBEAgCkH5CjYCGCAGQdH+ADYCBCAGKAIEIQUMIwsgBkHF/gA2AgRBACEFIAZBADYCbAwGCyAGKAJsIgUgBigCYCIJSQ0FDAYLIA9FDQ0gECAGKAJEOgAAIAZByP4ANgIEIA9BAWshDyAQQQFqIRAgBigCBCEFDCALIAYoAgwiBUUEQEEAIQUMAwsCQCADQR9LBEAgASEIDAELIARFDSMgA0EIaiECIAFBAWohCCAEQQFrIQkgAS0AACADdCAHaiEHIANBF0sEQCAJIQQgAiEDDAELIAlFBEAgCCEBQQAhBCACIQMgDCECDCULIANBEGohCSABQQJqIQggBEECayELIAEtAAEgAnQgB2ohByADQQ9LBEAgCyEEIAkhAwwBCyALRQRAIAghAUEAIQQgCSEDIAwhAgwlCyADQRhqIQIgAUEDaiEIIARBA2shCyABLQACIAl0IAdqIQcgA0EHSwRAIAshBCACIQMMAQsgC0UEQCAIIQFBACEEIAIhAyAMIQIMJQsgA0EgciEDIAFBBGohCCAEQQRrIQQgAS0AAyACdCAHaiEHCyAKIBUgD2siASAKKAIUajYCFCAGIAYoAiAgAWo2AiAgBUEEcSICRSAPIBVGcgR/IAIFIBAgAWshAiAGKAIcIQUgBgJ/IAYoAhQEQCAFIAIgARBRDAELIAUgAiABELMBCyIBNgIcIAogATYCMCAGKAIMIgVBBHELRQ0BIAYoAhwgByAHQRh0IAdBgP4DcUEIdHIgB0EIdkGA/gNxIAdBGHZyciAGKAIUG0YNASAKQfUONgIYIAZB0f4ANgIEIAghASAPIRUgBigCBCEFDB8LIAZBwP4ANgIEDBULIAghAUEAIQdBACEDIA8hFQsgBkHP/gA2AgQMGwsDQCADQQJNBEAgBEUNICAEQQFrIQQgAS0AACADdCAHaiEHIANBCHIhAyABQQFqIQELIAYgBUEBaiICNgJsIBYgBUEBdC8B0FtBAXRqIAdBB3E7AQAgA0EDayEDIAdBA3YhByACIgUgCUcNAAsgCSEFCyAFQRJNBEBBACEIIAUiAkEDcSIMQQNHBEADQCAWIAJBAXQvAdBbQQF0akEAOwEAIAJBAWohAiAMIAhBAWoiCHNBA0cNAAsLIAVBD00EQANAIBYgAkEBdCIFLwHQW0EBdGpBADsBACAWIAVB0tsAai8BAEEBdGpBADsBACAWIAVB1NsAai8BAEEBdGpBADsBACAWIAVB1tsAai8BAEEBdGpBADsBACACQQRqIgJBE0cNAAsLIAZBEzYCbAsgBkEHNgJYIAYgHzYCUCAGIB82AnBBACEIQQAgFkETICEgIyAgEOMBIgwEQCAKQdIJNgIYIAZB0f4ANgIEIAYoAgQhBQwbCyAGQcb+ADYCBCAGQQA2AmxBACEMCyAGKAJkIh0gBigCaGoiGCAISwRAQX8gBigCWHRBf3MhGyAGKAJQIRQDQCADIQ4gBCEFIAEhAgJAAkACQAJAAkACQCAUIAcgG3EiEkECdGotAAEiCyADTQRAIAMhCQwBCwNAIAVFDQIgAi0AACAOdCELIAJBAWohAiAFQQFrIQUgDkEIaiIJIQ4gCSAUIAcgC2oiByAbcSISQQJ0ai0AASILSQ0ACwsgFCASQQJ0ai8BAiIDQQ9NBEAgBiAIQQFqIgE2AmwgFiAIQQF0aiADOwEAIAkgC2shAyAHIAt2IQcgASEIDAULAn8CfwJAAkACQCADQRBrDgIAAQILIAtBAmoiASAJSwRAA0AgBUUNHiAFQQFrIQUgAi0AACAJdCAHaiEHIAJBAWohAiAJQQhqIgkgAUkNAAsLIAkgC2shAyAHIAt2IQkgCEUEQCAKQagKNgIYIAZB0f4ANgIEIAIhASAFIQQgCSEHIAYoAgQhBQwlCyADQQJrIQMgCUECdiEHIAlBA3FBA2ohCyAIQQF0IBZqQQJrLwEADAMLIAtBA2oiASAJSwRAA0AgBUUNHSAFQQFrIQUgAi0AACAJdCAHaiEHIAJBAWohAiAJQQhqIgkgAUkNAAsLIAkgC2tBA2shAyAHIAt2IgFBA3YhByABQQdxQQNqDAELIAtBB2oiASAJSwRAA0AgBUUNHCAFQQFrIQUgAi0AACAJdCAHaiEHIAJBAWohAiAJQQhqIgkgAUkNAAsLIAkgC2tBB2shAyAHIAt2IgFBB3YhByABQf8AcUELagshC0EACyEEIAggC2ogGEsNAkEAIQkgC0EDcSIORQ0BIAshAQNAIBYgCEEBdGogBDsBACAIQQFqIQggAUEBayEBIAlBAWoiCSAORw0ACwwDCyABIARqIQEgAyAEQQN0aiEDDCILIAshAQwBCyAKQagKNgIYIAZB0f4ANgIEIAIhASAFIQQgBigCBCEFDB0LIAtBBE8EQANAIBYgCEEBdGoiCSAEOwEAIAkgBDsBAiAJIAQ7AQQgCSAEOwEGIAhBBGohCCABQQRrIgENAAsLIAYgCDYCbAsgAiEBIAUhBCAIIBhJDQALCyAGLwH0BEUEQCAKQaIONgIYIAZB0f4ANgIEIAYoAgQhBQwaCyAGQQk2AlggBiAfNgJQIAYgHzYCcEEBIBYgHSAhICMgIBDjASIMBEAgCkG2CTYCGCAGQdH+ADYCBCAGKAIEIQUMGgsgBkEGNgJcIAYgBigCcDYCVEECIBYgBigCZEEBdGogBigCaCAhICogIBDjASIMBEAgCkGECjYCGCAGQdH+ADYCBCAGKAIEIQUMGgsgBkHH/gA2AgRBACEMCyAGQcj+ADYCBAsgBEEGSSAPQYICSXJFBEAgCiAPNgIQIAogEDYCDCAKIAQ2AgQgCiABNgIAIAYgAzYCQCAGIAc2AjwgCigCHCIQKAI0IgtBB3EhJSALIBVqISsgCyAQKAIsIixqIS0gCigCDCIBIAooAhAiAmoiHUGBAmshJiABIAIgFWtqIS4gCigCACIIIAooAgRqQQVrISdBfyAQKAJcdEF/cyEvQX8gECgCWHRBf3MhMCAQKAJUISggECgCUCEpIBAoAkAhBSAQKAI8IQ4gECgCOCEHIBAoAjAhMQNAIAVBDk0EfyAILQAAIAV0IA5qIAgtAAEgBUEIanRqIQ4gCEECaiEIIAVBEHIFIAULICkgDiAwcUECdGoiAi0AASIDayEFIA4gA3YhDgJAAkACQAJAAkAgEAJ/IAoCfwJAA0AgAi0AACIDRQRAIAEgAi0AAjoAACABQQFqIQEMCAsgA0EQcQRAIAIvAQIhDwJ/IANBD3EiAkUEQCAIIQMgDgwBCwJ/IAIgBU0EQCAFIQQgCAwBCyAFQQhqIQQgCC0AACAFdCAOaiEOIAhBAWoLIQMgBCACayEFIA5BfyACdEF/c3EgD2ohDyAOIAJ2CyEEIAVBDk0EQCADLQAAIAV0IARqIAMtAAEgBUEIanRqIQQgBUEQciEFIANBAmohAwsgBSAoIAQgL3FBAnRqIgItAAEiCGshBSAEIAh2IQ4gAi0AACIEQRBxDQIDQCAEQcAAcUUEQCAFICggAi8BAkECdGogDkF/IAR0QX9zcUECdGoiAi0AASIEayEFIA4gBHYhDiACLQAAIgRBEHFFDQEMBAsLIAMhCEHwEQwDCyADQcAAcUUEQCAFICkgAi8BAkECdGogDkF/IAN0QX9zcUECdGoiAi0AASIDayEFIA4gA3YhDgwBCwtBv/4AIANBIHENAhpB1BEMAQsgAi8BAiEUAn8gBEEPcSICIAVNBEAgBSEEIAMMAQsgAy0AACAFdCAOaiEOIANBAWogAiAFQQhqIgRNDQAaIAMtAAEgBHQgDmohDiAFQRBqIQQgA0ECagshCCAOQX8gAnRBf3NxIRggBCACayEFIA4gAnYhDiAUIBhqIhsgASAuayICTQ0DIBsgAmsiCSAxTQ0CIBAoAsQ3RQ0CQZQPCzYCGEHR/gALNgIEDAQLAkACQCALRQRAIAcgLCAJa2ohBCAJIA9PBEAgASECDAMLQQAhEiABIQIgCSIDQQdxIh4EQANAIAIgBC0AADoAACADQQFrIQMgAkEBaiECIARBAWohBCASQQFqIhIgHkcNAAsLIBUgGCAdaiAUamsgAWpBeEsNAQNAIAIgBC0AADoAACACIAQtAAE6AAEgAiAELQACOgACIAIgBC0AAzoAAyACIAQtAAQ6AAQgAiAELQAFOgAFIAIgBC0ABjoABiACIAQtAAc6AAcgAkEIaiECIARBCGohBCADQQhrIgMNAAsMAQsgCSALSwRAIAcgLSAJa2ohBCAJIAtrIgkgD08EQCABIQIMAwtBACESIAEhAiAJIgNBB3EiHgRAA0AgAiAELQAAOgAAIANBAWshAyACQQFqIQIgBEEBaiEEIBJBAWoiEiAeRw0ACwsgKyAYIB1qIBRqayABakF4TQRAA0AgAiAELQAAOgAAIAIgBC0AAToAASACIAQtAAI6AAIgAiAELQADOgADIAIgBC0ABDoABCACIAQtAAU6AAUgAiAELQAGOgAGIAIgBC0ABzoAByACQQhqIQIgBEEIaiEEIANBCGsiAw0ACwsgCyAPIAlrIg9PBEAgByEEDAMLQQAhASALIQMgByEEICUEQANAIAIgBC0AADoAACADQQFrIQMgAkEBaiECIARBAWohBCABQQFqIgEgJUcNAAsLIAtBCE8EQANAIAIgBC0AADoAACACIAQtAAE6AAEgAiAELQACOgACIAIgBC0AAzoAAyACIAQtAAQ6AAQgAiAELQAFOgAFIAIgBC0ABjoABiACIAQtAAc6AAcgAkEIaiECIARBCGohBCADQQhrIgMNAAsLIAIgG2shBCAPIAtrIQ8MAgsgByALIAlraiEEIAkgD08EQCABIQIMAgtBACESIAEhAiAJIgNBB3EiHgRAA0AgAiAELQAAOgAAIANBAWshAyACQQFqIQIgBEEBaiEEIBJBAWoiEiAeRw0ACwsgFSAYIB1qIBRqayABakF4Sw0AA0AgAiAELQAAOgAAIAIgBC0AAToAASACIAQtAAI6AAIgAiAELQADOgADIAIgBC0ABDoABCACIAQtAAU6AAUgAiAELQAGOgAGIAIgBC0ABzoAByACQQhqIQIgBEEIaiEEIANBCGsiAw0ACwsgAiAbayEEIA8gCWshDwsCQCAPQQNJDQAgD0EDayIBQQNuIgNBA3FBA0cEQCADQQFqQQNxIQlBACEDA0AgAiAELQAAOgAAIAIgBC0AAToAASACIAQtAAI6AAIgD0EDayEPIAJBA2ohAiAEQQNqIQQgA0EBaiIDIAlHDQALCyABQQlJDQADQCACIAQtAAA6AAAgAiAELQABOgABIAIgBC0AAjoAAiACIAQtAAM6AAMgAiAELQAEOgAEIAIgBC0ABToABSACIAQtAAY6AAYgAiAELQAHOgAHIAIgBC0ACDoACCACIAQtAAk6AAkgAiAELQAKOgAKIAIgBC0ACzoACyACQQxqIQIgBEEMaiEEIA9BDGsiD0ECSw0ACwsgD0UEQCACIQEMAwsgAiAELQAAOgAAIA9BAkYNASACQQFqIQEMAgsgASAbayEDA0AgASICIAMiBC0AADoAACACIAMtAAE6AAEgAiADLQACOgACIAJBA2ohASADQQNqIQMgD0EDayIPQQJLDQALIA9FDQEgAiADLQAAOgADIA9BAkcEQCACQQRqIQEMAgsgAiAELQAEOgAEIAJBBWohAQwBCyACIAQtAAE6AAEgAkECaiEBCyAIICdPDQAgASAmSQ0BCwsgCiABNgIMIAogCCAFQQN2ayICNgIAIAogJiABa0GBAmo2AhAgCiAnIAJrQQVqNgIEIBAgBUEHcSIBNgJAIBAgDkF/IAF0QX9zcTYCPCAGKAJAIQMgBigCPCEHIAooAgQhBCAKKAIAIQEgCigCECEPIAooAgwhECAGKAIEQb/+AEcNDyAGQX82Asg3IAYoAgQhBQwYCyAGQQA2Asg3IAMhCCAEIQUgASECAkAgBigCUCIUIAdBfyAGKAJYdEF/cyIScUECdGoiCy0AASIOIANNBEAgAyEJDAELA0AgBUUNDSACLQAAIAh0IQsgAkEBaiECIAVBAWshBSAIQQhqIgkhCCAJIBQgByALaiIHIBJxQQJ0aiILLQABIg5JDQALCyAOIQMgCy8BAiESAkAgCy0AACILQQFrQf8BcUEOSwRAQQAhAyACIQEgBSEEDAELIAUhBCACIQECQCAJIgggAyAUIBJBAnRqIhQgB0F/IAMgC2p0QX9zIhhxIAN2QQJ0aiISLQABIg5qTwRAIAghCwwBCwNAIARFDQ0gAS0AACAIdCEOIAFBAWohASAEQQFrIQQgCEEIaiILIQggAyAUIAcgDmoiByAYcSADdkECdGoiEi0AASIOaiALSw0ACwsgCyADayEJIAcgA3YhByASLQAAIQsgEi8BAiESCyAGIBJB//8DcTYCRCAGIAMgDmo2Asg3IAkgDmshAyAHIA52IQcgC0H/AXEiAkUEQCAGQc3+ADYCBCAGKAIEIQUMGAsgAkEgcQRAIAZBv/4ANgIEIAZBfzYCyDcgBigCBCEFDBgLIAJBwABxBEAgCkHUETYCGCAGQdH+ADYCBCAGKAIEIQUMGAsgBkHJ/gA2AgQgBiACQQ9xIgg2AkwLIAEhCyAEIQkCQCAIRQRAIAYoAkQhAgwBCyADIQUgASECIAMgCEkEQANAIARFDQsgBEEBayEEIAItAAAgBXQgB2ohByACQQFqIgEhAiAFQQhqIgUgCEkNAAsLIAYgBigCyDcgCGo2Asg3IAYgBigCRCAHQX8gCHRBf3NxaiICNgJEIAUgCGshAyAHIAh2IQcLIAZByv4ANgIEIAYgAjYCzDcLIAMhCCAEIQUgASECAkAgBigCVCIUIAdBfyAGKAJcdEF/cyIScUECdGoiCy0AASIOIANNBEAgAyEJDAELA0AgBUUNCCACLQAAIAh0IQsgAkEBaiECIAVBAWshBSAIQQhqIgkhCCAJIBQgByALaiIHIBJxQQJ0aiILLQABIg5JDQALCyALLwECIRIgBgJ/IAstAAAiCEEQTwRAIAIhASAFIQQgDiELIAYoAsg3DAELIAUhBCACIQECQCAJIgMgDiAUIBJBAnRqIhQgB0F/IAggDmp0QX9zIhhxIA52QQJ0aiISLQABIgtqTwRAIAMhCAwBCwNAIARFDQggAS0AACADdCELIAFBAWohASAEQQFrIQQgA0EIaiIIIQMgDiAUIAcgC2oiByAYcSAOdkECdGoiEi0AASILaiAISw0ACwsgCCAOayEJIAcgDnYhByASLQAAIQggEi8BAiESIAYoAsg3IA5qCyALajYCyDcgCSALayEDIAcgC3YhByAIQcAAcQRAIApB8BE2AhggBkHR/gA2AgQgBigCBCEFDBYLIAZBy/4ANgIEIAYgCEEPcSIINgJMIAYgEkH//wNxNgJICyABIQsgBCEJIAgEQCADIQUgASECIAMgCEkEQANAIARFDQYgBEEBayEEIAItAAAgBXQgB2ohByACQQFqIgEhAiAFQQhqIgUgCEkNAAsLIAYgBigCyDcgCGo2Asg3IAYgBigCSCAHQX8gCHRBf3NxajYCSCAHIAh2IQcgBSAIayEDCyAGQcz+ADYCBAsgDw0BC0EAIQ8gDCECDBYLAn8gBigCSCICIBUgD2siBUsEQAJAIAIgBWsiAiAGKAIwTQ0AIAYoAsQ3RQ0AIApBlA82AhggBkHR/gA2AgQgBigCBCEFDBQLAn8gBigCNCIFIAJJBEAgBigCOCAGKAIsIAIgBWsiAmtqDAELIAYoAjggBSACa2oLIQUgAiAGKAJEIgggAiAISRsMAQsgECACayEFIAYoAkQiCAshAiAGIAggAiAPIAIgD0kbIglrNgJEIAlBAWshC0EAIQggCUEHcSIORQ0GIAkhAgNAIBAgBS0AADoAACACQQFrIQIgEEEBaiEQIAVBAWohBSAIQQFqIgggDkcNAAsMBwsgCSALaiEBIAMgCUEDdGohAwwTCyACIAVqIQEgCSAFQQN0aiEDDBILIAEgBGohASADIARBA3RqIQMMEQsgCSALaiEBIAMgCUEDdGohAwwQCyACIAVqIQEgCSAFQQN0aiEDDA8LIAEgBGohASADIARBA3RqIQMMDgsgCSECCyALQQdPBEADQCAQIAUtAAA6AAAgECAFLQABOgABIBAgBS0AAjoAAiAQIAUtAAM6AAMgECAFLQAEOgAEIBAgBS0ABToABSAQIAUtAAY6AAYgECAFLQAHOgAHIBBBCGohECAFQQhqIQUgAkEIayICDQALCyAPIAlrIQ8gBigCRA0AIAZByP4ANgIEIAYoAgQhBQwJCyAGKAIEIQUMCAtBACEEIAIhASAJIQMgDCECDAsLIAYoAiQiAgRAIAJBADYCEAsgBSEDCyAGQbn+ADYCBAsCQCAGKAIUIghBgAhxRQ0AIAYoAkQiBSAEIAQgBUsbIgIEQAJAIAYoAiQiCUUNACAJKAIQIg5FDQAgCSgCGCILIAkoAhQgBWsiBU0NACALIAVrIAIgAiAFaiALSxsiCARAIAUgDmogASAI/AoAAAsgBigCFCEICwJAIAhBgARxRQ0AIAYtAAxBBHFFDQAgBiAGKAIcIAEgAhBRNgIcCyAGIAYoAkQgAmsiBTYCRCAEIAJrIQQgASACaiEBCyAFRQ0AIAwhAgwJCyAGQbr+ADYCBCAGQQA2AkQLAkAgBi0AFUEIcQRAQQAhBSAERQ0IA0AgASAFai0AACECAkAgBigCJCIIRQ0AIAgoAhwiC0UNACAGKAJEIgkgCCgCIE8NACAGIAlBAWo2AkQgCSALaiACOgAACyACQQAgBCAFQQFqIgVLGw0ACwJAIAYtABVBAnFFDQAgBi0ADEEEcUUNACAGIAYoAhwgASAFEFE2AhwLIAEgBWohASAEIAVrIQQgAkUNASAMIQIMCQsgBigCJCICRQ0AIAJBADYCHAsgBkG7/gA2AgQgBkEANgJECwJAIAYtABVBEHEEQEEAIQUgBEUNBwNAIAEgBWotAAAhAgJAIAYoAiQiCEUNACAIKAIkIgtFDQAgBigCRCIJIAgoAihPDQAgBiAJQQFqNgJEIAkgC2ogAjoAAAsgAkEAIAQgBUEBaiIFSxsNAAsCQCAGLQAVQQJxRQ0AIAYtAAxBBHFFDQAgBiAGKAIcIAEgBRBRNgIcCyABIAVqIQEgBCAFayEEIAJFDQEgDCECDAgLIAYoAiQiAkUNACACQQA2AiQLIAZBvP4ANgIECyAGKAIUIglBgARxBEACQCADQQ9LBEAgASEFDAELIARFDQYgA0EIaiECIAFBAWohBSAEQQFrIQggAS0AACADdCAHaiEHIANBB0sEQCAIIQQgAiEDDAELIAhFBEAgBSEBQQAhBCACIQMgDCECDAgLIANBEHIhAyABQQJqIQUgBEECayEEIAEtAAEgAnQgB2ohBwsCQCAGLQAMQQRxRQ0AIAcgBi8BHEYNACAKQbkPNgIYIAZB0f4ANgIEIAUhASAGKAIEIQUMAwtBACEHQQAhAyAFIQELIAYoAiQiAgRAIAJBATYCMCACIAlBCXZBAXE2AiwLIAZBAEEAQQAQUSICNgIcIAogAjYCMCAGQb/+ADYCBCAGKAIEIQUMAQsgBUUNASAGKAIURQ0BAkAgA0EfSwRAIAEhAgwBCyAERQ0EIANBCGohCCABQQFqIQIgBEEBayEJIAEtAAAgA3QgB2ohByADQRdLBEAgCSEEIAghAwwBCyAJRQRAIAIhAUEAIQQgCCEDIAwhAgwGCyADQRBqIQkgAUECaiECIARBAmshCyABLQABIAh0IAdqIQcgA0EPSwRAIAshBCAJIQMMAQsgC0UEQCACIQFBACEEIAkhAyAMIQIMBgsgA0EYaiEIIAFBA2ohAiAEQQNrIQsgAS0AAiAJdCAHaiEHIANBB0sEQCALIQQgCCEDDAELIAtFBEAgAiEBQQAhBCAIIQMgDCECDAYLIANBIHIhAyABQQRqIQIgBEEEayEEIAEtAAMgCHQgB2ohBwsCQCAFQQRxRQ0AIAcgBigCIEYNACAKQd4ONgIYIAZB0f4ANgIEIAIhASAGKAIEIQUMAQsLIAIhAUEAIQdBACEDCyAGQdD+ADYCBAtBASECDAELQQAhBCAMIQILIAogDzYCECAKIBA2AgwgCiAENgIEIAogATYCACAGIAM2AkAgBiAHNgI8AkACQCAGKAIsRQRAIA8gFUYNASAGKAIEQdD+AEsNAQsCfyAVIA9rIQMCQAJAIAooAhwiASgCOCIMRQRAQQEhBSABIAooAihBASABKAIodEEBIAooAiARAwAiDDYCOCAMRQ0BCyABKAIsIgRFBEAgAUIANwIwIAFBASABKAIodCIENgIsCyADIARPBEAgBARAIAwgECAEayAE/AoAAAsgAUEANgI0DAILIAQgASgCNCIIayIFIAMgAyAFSxsiBARAIAggDGogECADayAE/AoAAAsgAyAFSwRAIAMgBGsiAwRAIAEoAjggECADayAD/AoAAAsgASADNgI0DAILQQAhBSABIAEoAjQgBGoiA0EAIAMgASgCLCIMRxs2AjQgDCABKAIwIgNNDQAgASADIARqNgIwCyAFDAELIAEgASgCLDYCMEEACw0BIAooAhAhDyAKKAIEIQQLIAogCigCCCAkIARrajYCCCAKIBUgD2siASAKKAIUajYCFCAGIAYoAiAgAWo2AiAgBi0ADEEEcUUgDyAVRnJFBEAgCigCDCABayEDIAYoAhwhBSAGAn8gBigCFARAIAUgAyABEFEMAQsgBSADIAEQswELIgE2AhwgCiABNgIwCyAKIAYoAkBBwABBACAGKAIIG2pBgAFBACAGKAIEIgFBv/4ARhtqQYACQYACQQAgAUHC/gBGGyABQcf+AEYbajYCLCACQXsgAhsgAiAPIBVGGyACIAQgJEYbIRwMAgsgBkHS/gA2AgQLQXwhHAsgF0EQaiQAIBxBAUsNASATQagBaiEBIBMoAqwBIQMgGigCACEJIBooAgQgEygCFGshDCMAQSBrIggkAAJAIAwgCWsiBUEATA0AIAEoAgggASgCBCICayAFTgRAIAIgA2siBCAFSARAIAwgBCAJaiIHayILRSAHIAxGckUEQCACIAcgC/wKAAALIAEgAiALajYCBCAEQQBMDQIgASADIAIgAyAFahCeAiAERQ0CIAMgCSAE/AoAAAwCCyABIAMgAiADIAVqEJ4CIAVFDQEgAyAJIAX8CgAADAELIAUgCEEMaiABIAUgASgCAGsgAmoQtAEgAyABKAIAayABEMYBIgIoAggiBGohBQNAIAQgBUcEQCAEIAktAAA6AAAgCUEBaiEJIARBAWohBAwBCwsgAiAFNgIIIAIoAgQaIAEoAgQgA2siBARAIAIoAgggAyAE/AoAAAsgAiACKAIIIAEoAgQgA2tqNgIIIAEgAzYCBCACKAIEIAEoAgAiBCADa2ohBSADIARrIgMEQCAFIAQgA/wKAAALIAIgBTYCBCABIAEoAgAiAzYCBCABIAIoAgQ2AgAgAiADNgIEIAEoAgQhAyABIAIoAgg2AgQgAiADNgIIIAEoAgghAyABIAIoAgw2AgggAiADNgIMIAIgAigCBDYCACACELoBCyAIQSBqJAAgHEEBRw0ACyAKEJsCIBoQOiATQZgBaiIDIBMoAqgBIgIgEygCrAEgAmsQsQIgARA6IApBADYCXCAKQfD7ADYCQCAKQcj7ADYCACAKQdz7ADYCCCAKQYD8ACgCACIBNgIAIAogAUEMaygCAGpBhPwAKAIANgIAIApBADYCBCAKIAooAgBBDGsoAgBqIgJBADYCFCACIApBDGoiATYCGCACQQA2AgwgAkKCoICA4AA3AgQgAiABRTYCECACQSBqQQBBKPwLACACQRxqENMCIAJBADoAUCACQoCAgIBwNwJIIApBiPwAKAIAIgI2AgggAkEMaygCACAKQQhqakGM/AAoAgA2AgAgCkH8+wAoAgAiAjYCACAKIAJBDGsoAgBqQZD8ACgCADYCACAKQZT8ACgCADYCCCAKQcj7ADYCACAKQdz7ADYCCCAKQfD7ADYCQCABQZj1ADYCACABQQRqENMCIAFCADcCGCABQgA3AhAgAUIANwIIIAFCADcCICABQZD3ADYCACABQRg2AjAgAUIANwIoAkAgAyABQSBqIgJGDQAgAhBHRQRAIAMQR0UEQCACEF4aIAIQXiADEF5JBEAgAxBeGiACEF4aCyACIAMpAgA3AgAgAiADKAIINgIIIAIQXhoMAgsgAxAjIQUgAxAfIQMjAEEQayIEJAAgAhBeIQwCQCADQQpNBEAgAiADEFAgAiAFIAMQTSAEQQA6AA8gAiADaiAEQQ9qEF0MAQsgAkEKIANBCmsgDEEAIAwgAyAFELkBCyAEQRBqJAAMAQsgAxAjIQwgAxAfIQMjAEEQayIEJAAgAhB+IQUgAigCBCEIAkAgAyAFSQRAIAIoAgAhBSACIAM2AgQgBSAMIAMQTSAEQQA6AA8gAyAFaiAEQQ9qEF0MAQsgAiAFQQFrIAMgBWtBAWogCEEAIAggAyAMELkBCyAEQRBqJAALIAFBADYCLCABKAIgIAFBIGoiAyABLAArIgJBAEgiBBshCSABKAIkIAIgBBshCCABKAIwIgRBCHEEQCABIAk2AgwgASAJNgIIIAEgCCAJaiIFNgIQIAEgBTYCLAsCQCAEQRBxRQ0AIAEgCCAJajYCLCADQQogASgCKEH/////B3FBAWsgAkEAThsQISABIAk2AhggASAJNgIUIAEgCSABKAIkIAEsACsiAiACQQBIG2o2AhwgAS0AMEEDcUUNAANAIAhBAEgEQCABIAlB/////wdqIgk2AhggCEH/////B2shCAwBCwsgCEUNACABIAggCWo2AhgLIwBBwAFrIgEkACABQgA3ArgBIAFCzo7NgjU3ArABIAogAUGwAWpBEBCIAQJAAkAgCiAKKAIAQQxrKAIAai0AEEEFcUUEQCABKAKwAUHOjs2CBUYNAQtBshIQvgMgDUIANwAFIA1CADcCACANQQE6AA0gDUEQakEAQcgA/AsADAELIAEoArQBQQRrQXxNBEBBthQgAUG0AWoQlwIgDUIANwAFIA1CADcCACANQQE6AA0gDUEQakEAQcgA/AsADAELIAEoArgBIgJBga3iBE8EQEG4EyABQbgBahCXAiANQgA3AAUgDUIANwIAIA1BAToADSANQRBqQQBByAD8CwAMAQsgAS0AvAEiA0EETwRAIAEgAzYCAEH0EyABEHIQf0Gg8QAoAgAQYRogDUIANwAFIA1CADcCACANQQE6AA0gDUEQakEAQcgA/AsADAELIAMQ0wMhDCABKAK0ASEEIAFBAToAZSABQegAaiIFQQBByAD8CwAgASACNgJYIAEgAS0AvAE2AlwgASABLQC9ATYCYCABIAEtAL4BQQFxOgBkIAUgAkEDbCIDQQJBAyAEQQFGG2wQpwEgAUH0AGoiCCADEKcBIAEgBEECSyIEOgBlIAFBgAFqIglBBEEDIAQbIAJsEKcBIAFBjAFqIgQgAhCnASABQZgBaiIHIAMQpwEgAUGkAWoiCyADIAxsEKcBIAogASgCaCABQcwAaiAFEKIBIgIoAgQgAigCAGsQiAEgAhA6IAogASgCjAEgAUFAayAEEKIBIgIoAgQgAigCAGsQiAEgAhA6IAogASgCmAEgAUE0aiAHEKIBIgIoAgQgAigCAGsQiAEgAhA6IAogASgCdCABQShqIAgQogEiAigCBCACKAIAaxCIASACEDogCiABKAKAASABQRxqIAkQogEiAigCBCACKAIAaxCIASACEDogCiABKAKkASABQRBqIAsQogEiAigCBCACKAIAaxCIASACEDoCQCAKIAooAgBBDGsoAgBqLQAQQQVxBEBBkQwQvgMgDUIANwAFIA1CADcCACANQQE6AA0gDUEQakEAQcgA/AsADAELIA0gAUHYAGoiAikCADcCACANIAIpAQY3AQYgDUEQaiACQRBqEKEBIA1BHGogAkEcahChASANQShqIAJBKGoQoQEgDUE0aiACQTRqEKEBIA1BQGsgAkFAaxChASANQcwAaiACQcwAahChAQsgAUHYAGoQywMLIAFBwAFqJAAgChCxARoMAgsgE0EEahCbAgsgGhA6IBNBqAFqEDogDUIANwAFIA1CADcCACANQQE6AA0gDUEQakEAQcgA/AsACyATQZgBahAgGiATQcABaiQAIwBBkAFrIgIkACANKAIAIQQgDSgCBBDTAyEBAkACQAJAIA0oAhQgDSgCEGsiBSAEQQNsIgNBAkEDIAUgDSgCACIMQQZsIghGG2xHBEAgAkH2HTYCOCACQfgANgI0IAJB/BQ2AjBByAsgAkEwahByEH9BoPEAKAIAEGEaDAELIAMgDSgCICANKAIca0cEQCACQfkANgI8IAJBPGpBxhwQmgIMAQsgDSgCLCANKAIoa0EEQQMgDS0ADSIJQQFxGyAEbEcEQCACQZ4dNgIoIAJB+gA2AiQgAkH8FDYCIEHICyACQSBqEHIQf0Gg8QAoAgAQYRoMAQsgBCANKAI4IA0oAjRrRwRAIAJB7xs2AhggAkH7ADYCFCACQfwUNgIQQcgLIAJBEGoQchB/QaDxACgCABBhGgwBCyADIA0oAkQgDSgCQGtHBEAgAkH8ADYCPCACQTxqQZwcEJoCDAELIA0oAlAgDSgCTGsiByABIANsRg0BIAJB8Bw2AgggAkH9ADYCBCACQfwUNgIAQcgLIAIQchB/QaDxACgCABBhGgsgAEIANwIAIABBADoACCAAQQxqQQBByAD8CwAMAQsgAEEMaiIBQQBByAD8CwAgACAMNgIAIAAgDSgCBDYCBCAAIA0tAAw6AAggASADEKQBIABBGGogAxCkASAAQSRqIARBAnQQpAEgAEEwaiAEEKQBIABBPGogAxCkASAAQcgAaiAHEKQBAkAgBSAIRgRAIAEoAgAhDCANKAIQIQgDQCADIBFGDQIgDCARQQJ0agJ9QwAAgD9DAACAvyAIIBFBAXRqLwEAIgHBQQBOGyEzIAFB/wdxIQUCQCABQQp2QR9xIgFBH0cEQCABDQEgM0MAAIA4lCAFs5RDAACAOpQMAgtDAADAfyAzQwAAgH+UIAUbDAELQwAAgD8hMgJAIAFBD2siAUGAAU4EQEMAAAB/ITIgAUH/AUkEQCABQf8AayEBDAILQwAAgH8hMkH9AiABIAFB/QJPG0H+AWshAQwBCyABQYF/Sg0AQwAAgAwhMiABQZt+SwRAIAFB5gBqIQEMAQtDAAAAACEyQbZ9IAEgAUG2fU0bQcwBaiEBCyAFs0MAAIA6lEMAAIA/kiAzIDIgAUEXdEGAgID8A2q+lJSUCzgCACARQQFqIREMAAsACyANKAIQIgVBAmohDCAFQQFqIQhEAAAAAAAA8D9BASANKAIIdLejtiEyIAEoAgAhBwNAIAMgEUYNASAHIBFBAnRqIDIgCCARQQNsIgFqLQAAQQh0IAEgBWotAAByIAEgDGosAAAiAUH/AXFBEHRyQYCAgHhBACABQQBIG3KylDgCACARQQFqIREMAAsACyAAKAIYIQEgDSgCHCEFQQAhEQNAIAMgEUYEQCACQdQAaiEIQQAhESAJQQFxIQcDfyAEIBFGBH8gACgCMCEFIA0oAjQhDEEABQJAIAcEQCAAKAIkIA0oAighBSACQoCAgPyDgIDAPzcCTCACQoCAgPyDgIDAPzcCRCACQoCAgPyDgIDAPzcCPCAIQcgfQTz8CgAAIBFBBHRqIQwgAkE8aiELQwAAAAAhMiAFIBFBAnRqIgEvAAAgAS0AAkEQdHIgAS0AAyIBQRh0ciEFIAFBBnYhCUEDIQEDfyABQQBIBH8gDCAJQQJ0akMAAIA/IDKTkTgCACALQQxqIQVBAAUgASAJRwRAIAwgAUECdGogBUH/A3GzQ/MENT+UQwCA/0OVIjOMIDMgBUGABHEbIjM4AgAgMyAzlCAykiEyIAVBCnYhBQsgAUEBayEBDAELCyEBA0AgAUEDRwRAIAwgAUECdCIJaiILIAUgCWoqAgAgCyoCAJQ4AgAgAUEBaiEBDAELCwwBCyAAKAIkIA0oAiggAkKAgID8g4CAwD83AkwgAkKAgID8g4CAwD83AkQgAkKAgID8g4CAwD83AjwgCEHIH0E8/AoAACMAQRBrIgEkACARQQNsaiIFLQACIQkgBS0AASELIAEgBS0AALNDgYAAPJRDAACAv5IgAioCSJQ4AgQgASALs0OBgAA8lEMAAIC/kiACKgJMlDgCCCABIAmzQ4GAADyUQwAAgL+SIAIqAlCUOAIMIBFBBHRqIgUgASkCBDcCACAFIAEoAgw2AgggBUMAAIA/IAEqAgwgASoCDJQgASoCBCABKgIElCABKgIIIAEqAgiUkpKTIjJDAAAAACAyQwAAAABeG5E4AgwgAUEQaiQACyARQQFqIREMAQsLIREDQCAEIBFHBEAgBSARQQJ0agJ9QwAAAAAgDCARai0AALNDAAB/Q5UiMkMAAIA/IDKTlSIyvCIBQYCAgPwDRg0AGgJAIAFBgICA/AdrQf///4d4TQRAIAFBAXQiCEUEQCMAQRBrIgFDAACAvzgCDCABKgIMQwAAAACVDAMLIAFBgICA/AdGDQEgCEGAgIB4SSABQQBOcUUEQCAyIDKTIjIgMpUMAwsgMkMAAABLlLxBgICA3ABrIQELQYjxACsDACABIAFBgIDM+QNrIgFBgICAfHFrvrsgAUEPdkHwAXEiCCsDgG+iRAAAAAAAAPC/oCI3IDeiIjiiQZDxACsDACA3okGY8QArAwCgoCA4oiABQRd1t0GA8QArAwCiIAgrA4hvoCA3oKC2ITILIDILOAIAIBFBAWohEQwBCwsgACgCPCEBIA0oAkAhBEEAIREDQCADIBFGBEAgDSgCUCANKAJMIgFrIQQgACgCSCEFQQAhAwNAIAMgBEYEQCAZKAIMIQwjAEHgAGsiBCQAIwBBEGsiBSQAQQEhAQJ/QQEhA0EBIAxBAEwNABogDEEBa0EDcyIMQX9zQQFxIQEgDEEEcUUhAyAMQQJxRQshDCAFIAM6AA8gBSAMOgAOIAUgAToADSAFLQAOIQEgBS0ADyEDIAUtAA0hDCAEQYCAgPwDNgJAIARBgICA/AM2AjggBEMAAIA/QwAAgL8gDBsiMzgCXCAEQwAAgD9DAACAvyADGyIyOAJYIAQgMzgCVCAEIDI4AlAgBEMAAIA/QwAAgL8gARsiNDgCTCAEIDQ4AkQgBCAzOAIsIAQgMjgCKCAEIDQ4AiQgBCAyOAIUIAQgNDgCECAEIDM4AgwgBCAzIDKUIjU4AjwgBCA0IDKUIjY4AjQgBCAzIDSUIjM4AjAgBCAzOAIgIAQgNTgCHCAEIDY4AhggBCAzIDKUOAJIIAVBEGokACAAKAIMIgFBCGohDCABQQRqIQggACgCECABa0ECdSEJQQAhAwNAIAMgCU8EQCAAKAIkIgFBCGohDCABQQRqIQggACgCKCABa0ECdSEJQQAhAwNAIAMgCU8EQAJAIAAoAkgiBUEIaiEJIAVBBGohByAAKAJMIAVrQQJ1QQNuIgsgACgCAG4hDCAEQSRqIQ5BACEAQQAhAQNAQQAhAyABIAtPDQEDQCADIAxPBEAgASAMaiEBDAIFIAUgAEECdCIIaiIPIA4gA0ECdGoqAgAiMiAPKgIAlDgCACAHIAhqIg8gMiAPKgIAlDgCACAIIAlqIgggMiAIKgIAlDgCACAAQQNqIQAgA0EBaiEDDAELAAsACwALBSABIANBAnQiBWoiByAEKgIYIAcqAgCUOAIAIAUgCGoiByAEKgIcIAcqAgCUOAIAIAUgDGoiBSAEKgIgIAUqAgCUOAIAIANBBGohAwwBCwsgBEHgAGokAAUgASADQQJ0IgVqIgcgBCoCDCAHKgIAlDgCACAFIAhqIgcgBCoCECAHKgIAlDgCACAFIAxqIgUgBCoCFCAFKgIAlDgCACADQQNqIQMMAQsLBSAFIANBAnRqIAEgA2otAACzQwAAAMOSQwAAADyUOAIAIANBAWohAwwBCwsFIAEgEUECdGogBCARai0AALNDAAB/Q5VDAAAAv5JDmpkZPpU4AgAgEUEBaiERDAELCwUgASARQQJ0aiAFIBFqLQAAs0MAAIA9lEMAACDBkjgCACARQQFqIREMAQsLCyACQZABaiQAIA0QywMgIkHgAGokACAZEDogGUEQaiQAC5UBAQN/IAACfyAAKAIEIgIgACgCCEkEQCACIAEqAgA4AgAgAkEEagwBCyMAQSBrIgMkACADQQxqIAAgACgCBCAAKAIAa0ECdUEBahC2ASAAKAIEIAAoAgBrQQJ1IAAQhwIiAigCCCIEIAEqAgA4AgAgAiAEQQRqNgIIIAAgAhCFAiAAKAIEIAIQgQIgA0EgaiQACzYCBAvqAQEBfyMAQSBrIgYkACAGIAE2AhwCQCADKAIEQQFxRQRAIAZBfzYCACAAIAEgAiADIAQgBiAAKAIAKAIQEQYAIQECQAJAAkAgBigCAA4CAAECCyAFQQA6AAAMAwsgBUEBOgAADAILIAVBAToAACAEQQQ2AgAMAQsgBiADECcgBhBJIQEgBhAlIAYgAxAnIAYQmwEhACAGECUgBiAAEHwgBkEMciAAEHsgBSAGQRxqIAIgBiAGQRhqIgMgASAEQQEQzwEgBkY6AAAgBigCHCEBA0AgA0EMaxAgIgMgBkcNAAsLIAZBIGokACABC0ABAX9BACEAA38gASACRgR/IAAFIAEoAgAgAEEEdGoiAEGAgICAf3EiA0EYdiADciAAcyEAIAFBBGohAQwBCwsLCwAgACACIAMQmQMLVAECfwJAA0AgAyAERwRAQX8hACABIAJGDQIgASgCACIFIAMoAgAiBkgNAiAFIAZKBEBBAQ8FIANBBGohAyABQQRqIQEMAgsACwsgASACRyEACyAAC0ABAX9BACEAA38gASACRgR/IAAFIAEsAAAgAEEEdGoiAEGAgICAf3EiA0EYdiADciAAcyEAIAFBAWohAQwBCwsLCwAgACACIAMQuAMLXgEDfyABIAQgA2tqIQUCQANAIAMgBEcEQEF/IQAgASACRg0CIAEsAAAiBiADLAAAIgdIDQIgBiAHSgRAQQEPBSADQQFqIQMgAUEBaiEBDAILAAsLIAIgBUchAAsgAAuoAQEFfyAAKAJUIgMoAgAhBSADKAIEIgQgACgCFCAAKAIcIgdrIgYgBCAGSRsiBgRAIAUgByAGEHEaIAMgAygCACAGaiIFNgIAIAMgAygCBCAGayIENgIECyAEIAIgAiAESxsiBARAIAUgASAEEHEaIAMgAygCACAEaiIFNgIAIAMgAygCBCAEazYCBAsgBUEAOgAAIAAgACgCLCIBNgIcIAAgATYCFCACC1QBAn8gASAAKAJUIgEgAUEAIAJBgAJqIgMQ4AEiBCABayADIAQbIgMgAiACIANLGyICEHEaIAAgASADaiIDNgJUIAAgAzYCCCAAIAEgAmo2AgQgAgsJACAAEIkCEC0LEwAgACAAKAIAQQxrKAIAahCMAgsTACAAIAAoAgBBDGsoAgBqELEBCwoAIABBCGsQjAILCgAgAEEIaxCxAQsaACAAIAEgAikDCEEAIAMgASgCACgCEBEXAAsJACAAEPwBEC0LlAICAX8DfiABKAIYIAEoAixLBEAgASABKAIYNgIsC0J/IQgCQCAEQRhxIgVFIANBAUYgBUEYRnFyDQAgASgCLCIFBEAgBSABQSBqECNrrCEGCwJAAkACQCADDgMCAAEDCyAEQQhxBEAgASgCDCABKAIIa6whBwwCCyABKAIYIAEoAhRrrCEHDAELIAYhBwsgAiAHfCICQgBTIAIgBlVyDQAgBEEIcSEDAkAgAlANACADBEAgASgCDEUNAgsgBEEQcUUNACABKAIYRQ0BCyADBEAgASABKAIIIAEoAgggAqdqIAEoAiwQsgELIARBEHEEQCABIAEoAhQgASgCHBC6AyABIAKnELkDCyACIQgLIAAgCBCSAgv8AQEJfyMAQRBrIgMkAAJ/IAFBf0cEQCAAKAIMIQQgACgCCCEFIAAoAhggACgCHEYEQEF/IAAtADBBEHFFDQIaIAAoAhghBiAAKAIUIQcgACgCLCEIIAAoAhQhCSAAQSBqIgJBABC4ASACIAIQKBAhIAAgAhAjIgogAhAfIApqELoDIAAgBiAHaxC5AyAAIAAoAhQgCCAJa2o2AiwLIAMgACgCGEEBajYCDCAAIANBDGogAEEsahCgASgCADYCLCAALQAwQQhxBEAgACAAQSBqECMiAiACIAQgBWtqIAAoAiwQsgELIAAgAcAQwgMMAQsgARC2AwsgA0EQaiQAC5YBACAAKAIYIAAoAixLBEAgACAAKAIYNgIsCwJAIAAoAgggACgCDE8NACABQX9GBEAgACAAKAIIIAAoAgxBAWsgACgCLBCyASABELYDDwsgAC0AMEEQcUUEQCAAKAIMQQFrLQAAIAFB/wFxRw0BCyAAIAAoAgggACgCDEEBayAAKAIsELIBIAAoAgwgAcA6AAAgAQ8LQX8LZQAgACgCGCAAKAIsSwRAIAAgACgCGDYCLAsCQCAALQAwQQhxRQ0AIAAoAhAgACgCLEkEQCAAIAAoAgggACgCDCAAKAIsELIBCyAAKAIMIAAoAhBPDQAgACgCDCwAABCjAQ8LQX8LBwAgACgCDAsHACAAKAIICxMAIAAgACgCAEEMaygCAGoQjgILCgAgAEEIaxCOAgsTACAAIAAoAgBBDGsoAgBqENgBCwoAIABBCGsQ2AELEwAgACAAKAIAQQxrKAIAahDBAwsTACAAIAAoAgBBDGsoAgBqEI8CCxMAIAAgACgCAEEMaygCAGoQxgMLEwAgACAAKAIAQQxrKAIAahCQAguuAQEEfyMAQRBrIgUkAANAAkAgAiAETA0AIAAoAhgiAyAAKAIcIgZPBEAgACABLAAAEKMBIAAoAgAoAjQRBABBf0YNASAEQQFqIQQgAUEBaiEBBSAFIAYgA2s2AgwgBSACIARrNgIIIAVBDGogBUEIahCRAiEDIAAoAhggASADKAIAIgMQTSAAIAMgACgCGGo2AhggAyAEaiEEIAEgA2ohAQsMAQsLIAVBEGokACAECy8AIAAgACgCACgCJBEAAEF/RgRAQX8PCyAAIAAoAgwiAEEBajYCDCAALAAAEKMBCwQAQX8LvQEBBH8jAEEQayIEJAADQAJAIAIgBUwNAAJAIAAoAgwiAyAAKAIQIgZJBEAgBEH/////BzYCDCAEIAYgA2s2AgggBCACIAVrNgIEIARBDGogBEEIaiAEQQRqEJECEJECIQMgASAAKAIMIAMoAgAiAxBNIAAgACgCDCADajYCDAwBCyAAIAAoAgAoAigRAAAiA0F/Rg0BIAEgA8A6AABBASEDCyABIANqIQEgAyAFaiEFDAELCyAEQRBqJAAgBQsJACAAQn8QkgILCQAgAEJ/EJICCwQAIAALDAAgABCUAhogABAtCwwAIAAoAjwQFRDdAQs7AQF/IAAoAjwjAEEQayIAJAAgASACQf8BcSAAQQhqEBYQ3QEhAiAAKQMIIQEgAEEQaiQAQn8gASACGwspACABIAEoAgBBB2pBeHEiAUEQajYCACAAIAEpAwAgASkDCBCVAjkDAAu5FwMSfwF8A34jAEGwBGsiCyQAIAtBADYCLAJAIAG9IhlCAFMEQEEBIRBB+AghFCABmiIBvSEZDAELIARBgBBxBEBBASEQQfsIIRQMAQtB/ghB+QggBEEBcSIQGyEUIBBFIRcLAkAgGUKAgICAgICA+P8Ag0KAgICAgICA+P8AUQRAIABBICACIBBBA2oiBiAEQf//e3EQRSAAIBQgEBBCIABB5g1ByhUgBUEgcSIDG0G8EEH0FSADGyABIAFiG0EDEEIgAEEgIAIgBiAEQYDAAHMQRSACIAYgAiAGShshDQwBCyALQRBqIRECQAJAAkAgASALQSxqENIDIgEgAaAiAUQAAAAAAAAAAGIEQCALIAsoAiwiBkEBazYCLCAFQSByIhVB4QBHDQEMAwsgBUEgciIVQeEARg0CIAsoAiwhDAwBCyALIAZBHWsiDDYCLCABRAAAAAAAALBBoiEBC0EGIAMgA0EASBshCiALQTBqQaACQQAgDEEAThtqIg4hBwNAIAcgAfwDIgM2AgAgB0EEaiEHIAEgA7ihRAAAAABlzc1BoiIBRAAAAAAAAAAAYg0ACwJAIAxBAEwEQCAMIQkgByEGIA4hCAwBCyAOIQggDCEJA0BBHSAJIAlBHU8bIQMCQCAHQQRrIgYgCEkNACADrSEbQgAhGQNAIAYgBjUCACAbhiAZfCIaIBpCgJTr3AOAIhlCgJTr3AN+fT4CACAGQQRrIgYgCE8NAAsgGkKAlOvcA1QNACAIQQRrIgggGT4CAAsDQCAIIAciBkkEQCAGQQRrIgcoAgBFDQELCyALIAsoAiwgA2siCTYCLCAGIQcgCUEASg0ACwsgCUEASARAIApBGWpBCW5BAWohEiAVQeYARiETA0BBCUEAIAlrIgMgA0EJTxshDQJAIAYgCE0EQEEAQQQgCCgCABshBwwBC0GAlOvcAyANdiEWQX8gDXRBf3MhD0EAIQkgCCEHA0AgByAHKAIAIgMgDXYgCWo2AgAgAyAPcSAWbCEJIAdBBGoiByAGSQ0AC0EAQQQgCCgCABshByAJRQ0AIAYgCTYCACAGQQRqIQYLIAsgCygCLCANaiIJNgIsIA4gByAIaiIIIBMbIgMgEkECdGogBiAGIANrQQJ1IBJKGyEGIAlBAEgNAAsLQQAhCQJAIAYgCE0NACAOIAhrQQJ1QQlsIQlBCiEHIAgoAgAiA0EKSQ0AA0AgCUEBaiEJIAMgB0EKbCIHTw0ACwsgCiAJQQAgFUHmAEcbayAVQecARiAKQQBHcWsiAyAGIA5rQQJ1QQlsQQlrSARAIAtBMGpBhGBBpGIgDEEASBtqIANBgMgAaiIMQQltIgNBAnRqIQ1BCiEHIAwgA0EJbGsiA0EHTARAA0AgB0EKbCEHIANBAWoiA0EIRw0ACwsCQCANKAIAIgwgDCAHbiISIAdsayIPRSANQQRqIgMgBkZxDQACQCASQQFxRQRARAAAAAAAAEBDIQEgB0GAlOvcA0cgCCANT3INASANQQRrLQAAQQFxRQ0BC0QBAAAAAABAQyEBC0QAAAAAAADgP0QAAAAAAADwP0QAAAAAAAD4PyADIAZGG0QAAAAAAAD4PyAPIAdBAXYiA0YbIAMgD0sbIRgCQCAXDQAgFC0AAEEtRw0AIBiaIRggAZohAQsgDSAMIA9rIgM2AgAgASAYoCABYQ0AIA0gAyAHaiIDNgIAIANBgJTr3ANPBEADQCANQQA2AgAgCCANQQRrIg1LBEAgCEEEayIIQQA2AgALIA0gDSgCAEEBaiIDNgIAIANB/5Pr3ANLDQALCyAOIAhrQQJ1QQlsIQlBCiEHIAgoAgAiA0EKSQ0AA0AgCUEBaiEJIAMgB0EKbCIHTw0ACwsgDUEEaiIDIAYgAyAGSRshBgsDQCAGIgwgCE0iB0UEQCAGQQRrIgYoAgBFDQELCwJAIBVB5wBHBEAgBEEIcSETDAELIAlBf3NBfyAKQQEgChsiBiAJSiAJQXtKcSIDGyAGaiEKQX9BfiADGyAFaiEFIARBCHEiEw0AQXchBgJAIAcNACAMQQRrKAIAIg9FDQBBCiEDQQAhBiAPQQpwDQADQCAGIgdBAWohBiAPIANBCmwiA3BFDQALIAdBf3MhBgsgDCAOa0ECdUEJbCEDIAVBX3FBxgBGBEBBACETIAogAyAGakEJayIDQQAgA0EAShsiAyADIApKGyEKDAELQQAhEyAKIAMgCWogBmpBCWsiA0EAIANBAEobIgMgAyAKShshCgtBfyENIApB/f///wdB/v///wcgCiATciIPG0oNASAKIA9BAEdqQQFqIRYCQCAFQV9xIgdBxgBGBEAgCSAWQf////8Hc0oNAyAJQQAgCUEAShshBgwBCyARIAkgCUEfdSIDcyADa60gERCmASIGa0EBTARAA0AgBkEBayIGQTA6AAAgESAGa0ECSA0ACwsgBkECayISIAU6AAAgBkEBa0EtQSsgCUEASBs6AAAgESASayIGIBZB/////wdzSg0CCyAGIBZqIgMgEEH/////B3NKDQEgAEEgIAIgAyAQaiIJIAQQRSAAIBQgEBBCIABBMCACIAkgBEGAgARzEEUCQAJAAkAgB0HGAEYEQCALQRBqQQlyIQUgDiAIIAggDksbIgMhCANAIAg1AgAgBRCmASEGAkAgAyAIRwRAIAYgC0EQak0NAQNAIAZBAWsiBkEwOgAAIAYgC0EQaksNAAsMAQsgBSAGRw0AIAZBAWsiBkEwOgAACyAAIAYgBSAGaxBCIAhBBGoiCCAOTQ0ACyAPBEAgAEHrG0EBEEILIApBAEwgCCAMT3INAQNAIAg1AgAgBRCmASIGIAtBEGpLBEADQCAGQQFrIgZBMDoAACAGIAtBEGpLDQALCyAAIAZBCSAKIApBCU4bEEIgCkEJayEGIAhBBGoiCCAMTw0DIApBCUogBiEKDQALDAILAkAgCkEASA0AIAwgCEEEaiAIIAxJGyEDIAtBEGpBCXIhDCAIIQcDQCAMIAc1AgAgDBCmASIGRgRAIAZBAWsiBkEwOgAACwJAIAcgCEcEQCAGIAtBEGpNDQEDQCAGQQFrIgZBMDoAACAGIAtBEGpLDQALDAELIAAgBkEBEEIgBkEBaiEGIAogE3JFDQAgAEHrG0EBEEILIAAgBiAMIAZrIgUgCiAFIApIGxBCIAogBWshCiAHQQRqIgcgA08NASAKQQBODQALCyAAQTAgCkESakESQQAQRSAAIBIgESASaxBCDAILIAohBgsgAEEwIAZBCWpBCUEAEEULIABBICACIAkgBEGAwABzEEUgAiAJIAIgCUobIQ0MAQsgFCAFQRp0QR91QQlxaiEJAkAgA0ELSw0AQQwgA2shBkQAAAAAAAAwQCEYA0AgGEQAAAAAAAAwQKIhGCAGQQFrIgYNAAsgCS0AAEEtRgRAIBggAZogGKGgmiEBDAELIAEgGKAgGKEhAQsgESALKAIsIgcgB0EfdSIGcyAGa60gERCmASIGRgRAIAZBAWsiBkEwOgAAIAsoAiwhBwsgEEECciEKIAVBIHEhDCAGQQJrIg4gBUEPajoAACAGQQFrQS1BKyAHQQBIGzoAACAEQQhxRSADQQBMcSEIIAtBEGohBwNAIAciBSAB/AIiBkGA9QBqLQAAIAxyOgAAIAEgBrehRAAAAAAAADBAoiIBRAAAAAAAAAAAYSAIcSAHQQFqIgcgC0EQamtBAUdyRQRAIAVBLjoAASAFQQJqIQcLIAFEAAAAAAAAAABiDQALQX8hDSADQf3///8HIAogESAOayIIaiIGa0oNACAAQSAgAiAGIANBAmogByALQRBqIgVrIgcgB0ECayADSBsgByADGyIDaiIGIAQQRSAAIAkgChBCIABBMCACIAYgBEGAgARzEEUgACAFIAcQQiAAQTAgAyAHa0EAQQAQRSAAIA4gCBBCIABBICACIAYgBEGAwABzEEUgAiAGIAIgBkobIQ0LIAtBsARqJAAgDQsEAEIAC9YCAQd/IwBBIGsiAyQAIAMgACgCHCIENgIQIAAoAhQhBSADIAI2AhwgAyABNgIYIAMgBSAEayIBNgIUIAEgAmohBSADQRBqIQFBAiEHAn8CQAJAAkAgACgCPCABQQIgA0EMahAKEN0BBEAgASEEDAELA0AgBSADKAIMIgZGDQIgBkEASARAIAEhBAwECyABQQhBACAGIAEoAgQiCEsiCRtqIgQgBiAIQQAgCRtrIgggBCgCAGo2AgAgAUEMQQQgCRtqIgEgASgCACAIazYCACAFIAZrIQUgACgCPCAEIgEgByAJayIHIANBDGoQChDdAUUNAAsLIAVBf0cNAQsgACAAKAIsIgE2AhwgACABNgIUIAAgASAAKAIwajYCECACDAELIABBADYCHCAAQgA3AxAgACAAKAIAQSByNgIAQQAgB0ECRg0AGiACIAQoAgRrCyADQSBqJAALiQIBA38jAEEQayIAJAACQCAAQQxqIABBCGoQFA0AQYDuASAAKAIMQQJ0QQRqEDQiATYCACABRQ0AIAAoAggQNCIBBEBBgO4BKAIAIgIgACgCDEECdGpBADYCACACIAEQE0UNAQtBgO4BQQA2AgALIABBEGokAEGU4AFBADYCAEGQ4AFBATYCABCQA0GU4AFBsOABKAIANgIAQbDgAUGQ4AE2AgBBtOABQS42AgBBuOABQQA2AgAQnAJBuOABQbDgASgCADYCAEGw4AFBtOABNgIAQdzhAUHk4AE2AgBBtOEBQYCABDYCAEGw4QFB8P4FNgIAQZThAUEqNgIAQbjhAUG43QEoAgA2AgALC8jAASoAQYAIC4QYbG9hZF9zcHoAaW5maW5pdHkARmVicnVhcnkASmFudWFyeQBKdWx5AFRodXJzZGF5AFR1ZXNkYXkAV2VkbmVzZGF5AFNhdHVyZGF5AFN1bmRheQBNb25kYXkARnJpZGF5AE1heQAlbS8lZC8leQAtKyAgIDBYMHgALTBYKzBYIDBYLTB4KzB4IDB4AE5vdgBUaHUAQXVndXN0AHVuc2lnbmVkIHNob3J0AHVuc2lnbmVkIGludABpbnZhbGlkIGxpdGVyYWwvbGVuZ3RocyBzZXQAaW52YWxpZCBjb2RlIGxlbmd0aHMgc2V0AHVua25vd24gaGVhZGVyIGZsYWdzIHNldABpbnZhbGlkIGRpc3RhbmNlcyBzZXQAZ2V0AE9jdABmbG9hdABpbnZhbGlkIGJpdCBsZW5ndGggcmVwZWF0AFNhdABudW1Qb2ludHMAY29sb3JzAFVucGFja09wdGlvbnMAcG9zaXRpb25zAHJvdGF0aW9ucwB0b28gbWFueSBsZW5ndGggb3IgZGlzdGFuY2Ugc3ltYm9scwBpbnZhbGlkIHN0b3JlZCBibG9jayBsZW5ndGhzAHNjYWxlcwBhbHBoYXMAW1NQWjogRVJST1JdIENoZWNrIGZhaWxlZDogJXM6JWQ6ICVzAHZmMzJfcHRyAEFwcgB2ZWN0b3IAbW9uZXlfZ2V0IGVycm9yAFtTUFogRVJST1JdIGRlc2VyaWFsaXplUGFja2VkR2F1c3NpYW5zOiByZWFkIGVycm9yAE9jdG9iZXIATm92ZW1iZXIAU2VwdGVtYmVyAERlY2VtYmVyAHVuc2lnbmVkIGNoYXIAaW9zX2Jhc2U6OmNsZWFyAE1hcgAvZW1zZGsvZW1zY3JpcHRlbi9zeXN0ZW0vbGliL2xpYmN4eGFiaS9zcmMvcHJpdmF0ZV90eXBlaW5mby5jcHAAU2VwACVJOiVNOiVTICVwAFN1bgBKdW4ATW9uAG5hbgBKYW4AY29vcmRpbmF0ZVN5c3RlbQBDb29yZGluYXRlU3lzdGVtAEp1bABib29sAGxsAEFwcmlsAGludmFsaWQgY29kZSAtLSBtaXNzaW5nIGVuZC1vZi1ibG9jawBpbmNvcnJlY3QgaGVhZGVyIGNoZWNrAGluY29ycmVjdCBsZW5ndGggY2hlY2sAaW5jb3JyZWN0IGRhdGEgY2hlY2sAcHVzaF9iYWNrAGludmFsaWQgZGlzdGFuY2UgdG9vIGZhciBiYWNrAEZyaQBzaABoZWFkZXIgY3JjIG1pc21hdGNoAE1hcmNoAEF1ZwB1bnNpZ25lZCBsb25nIGxvbmcAdW5zaWduZWQgbG9uZwBzdGQ6OndzdHJpbmcAYmFzaWNfc3RyaW5nAHN0ZDo6c3RyaW5nAHN0ZDo6dTE2c3RyaW5nAHN0ZDo6dTMyc3RyaW5nAGluZgAlLjBMZgAlTGYAcmVzaXplAGludmFsaWQgd2luZG93IHNpemUAdHJ1ZQBUdWUAZmFsc2UAaW52YWxpZCBibG9jayB0eXBlAEp1bmUAZG91YmxlAHNoRGVncmVlAGJhZF9hcnJheV9uZXdfbGVuZ3RoIHdhcyB0aHJvd24gaW4gLWZuby1leGNlcHRpb25zIG1vZGUAaW52YWxpZCBsaXRlcmFsL2xlbmd0aCBjb2RlAGludmFsaWQgZGlzdGFuY2UgY29kZQBSYXdHYXVzc2lhbkNsb3VkAHVua25vd24gY29tcHJlc3Npb24gbWV0aG9kAFtTUFogRVJST1JdIGRlc2VyaWFsaXplUGFja2VkR2F1c3NpYW5zOiBoZWFkZXIgbm90IGZvdW5kACUwKmxsZAAlKmxsZAArJWxsZAAlKy40bGQAdm9pZABsb2NhbGUgbm90IHN1cHBvcnRlZABhbnRpYWxpYXNlZABXZWQAJVktJW0tJWQAW1NQWiBFUlJPUl0gZGVzZXJpYWxpemVQYWNrZWRHYXVzc2lhbnM6IFRvbyBtYW55IHBvaW50czogJWQAW1NQWiBFUlJPUl0gZGVzZXJpYWxpemVQYWNrZWRHYXVzc2lhbnM6IFVuc3VwcG9ydGVkIFNIIGRlZ3JlZTogJWQAW1NQWiBFUlJPUl0gZGVzZXJpYWxpemVQYWNrZWRHYXVzc2lhbnM6IHZlcnNpb24gbm90IHN1cHBvcnRlZDogJWQARGVjAC4vc3B6L3NyYy9jYy9sb2FkLXNwei5jYwBGZWIAJWEgJWIgJWQgJUg6JU06JVMgJVkAUE9TSVgAVmVjdG9yVUludDhUACVIOiVNOiVTAE5BTgBQTQBBTQAlSDolTQBMQ19BTEwAQVNDSUkATEFORwBSVUYATFVGAElORgBSREYATERGAFVOU1BFQ0lGSUVEAEMAUlVCAExVQgBSREIATERCAGNhdGNoaW5nIGEgY2xhc3Mgd2l0aG91dCBhbiBvYmplY3Q/AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHNob3J0PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzx1bnNpZ25lZCBzaG9ydD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8aW50PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzx1bnNpZ25lZCBpbnQ+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PGZsb2F0PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzx1aW50OF90PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxpbnQ4X3Q+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHVpbnQxNl90PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxpbnQxNl90PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzx1aW50NjRfdD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8aW50NjRfdD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8dWludDMyX3Q+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PGludDMyX3Q+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PGNoYXI+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHVuc2lnbmVkIGNoYXI+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHNpZ25lZCBjaGFyPgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxsb25nPgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzx1bnNpZ25lZCBsb25nPgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxkb3VibGU+ADAxMjM0NTY3ODkAQy5VVEYtOABWZWN0b3JGbG9hdDMyADEuMy4xAC4ALQAocGFja2VkLmFscGhhcy5zaXplKCkpID09IChudW1Qb2ludHMpAChudWxsKQAocGFja2VkLmNvbG9ycy5zaXplKCkpID09IChudW1Qb2ludHMgKiAzKQAocGFja2VkLnNjYWxlcy5zaXplKCkpID09IChudW1Qb2ludHMgKiAzKQAocGFja2VkLnNoLnNpemUoKSkgPT0gKG51bVBvaW50cyAqIHNoRGltICogMykAKHBhY2tlZC5yb3RhdGlvbnMuc2l6ZSgpKSA9PSAobnVtUG9pbnRzICogKHBhY2tlZC51c2VzUXVhdGVybmlvblNtYWxsZXN0VGhyZWUgPyA0IDogMykpAChwYWNrZWQucG9zaXRpb25zLnNpemUoKSkgPT0gKG51bVBvaW50cyAqIDMgKiAodXNlc0Zsb2F0MTYgPyAyIDogMykpACUAbGVuZ3RoX2Vycm9yIHdhcyB0aHJvd24gaW4gLWZuby1leGNlcHRpb25zIG1vZGUgd2l0aCBtZXNzYWdlICIlcyIAUHVyZSB2aXJ0dWFsIGZ1bmN0aW9uIGNhbGxlZCEAW1NQWjogRVJST1JdIFVuc3VwcG9ydGVkIFNIIGRlZ3JlZTogJWQKAAkAAAAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwBBkCALthMgEAAA9GwAAPRsAABAEAAAqG0AACgQAABOM3NwejEzR2F1c3NpYW5DbG91ZEUAAACobQAASBAAAE4zc3B6MTNVbnBhY2tPcHRpb25zRQBwcGlpcAD0bAAAbBAAAKhtAAB0EAAATlN0M19fMjZ2ZWN0b3JJZk5TXzlhbGxvY2F0b3JJZkVFRUUAaXBwACxuAADEEAAAAAAAAAMAAADcEAAAAAAAACgSAAAAAAAAWBIAAAAAAABOU3QzX18yOG9wdGlvbmFsSWZFRQAAAADQbQAA6BAAABgRAABOU3QzX18yMjdfX29wdGlvbmFsX21vdmVfYXNzaWduX2Jhc2VJZkxiMUVFRQAAAADQbQAAJBEAAFQRAABOU3QzX18yMjdfX29wdGlvbmFsX2NvcHlfYXNzaWduX2Jhc2VJZkxiMUVFRQAAAADQbQAAYBEAAIgRAABOU3QzX18yMjBfX29wdGlvbmFsX21vdmVfYmFzZUlmTGIxRUVFAAAA0G0AAJQRAAC8EQAATlN0M19fMjIwX19vcHRpb25hbF9jb3B5X2Jhc2VJZkxiMUVFRQAAANBtAADIEQAA9BEAAE5TdDNfXzIyM19fb3B0aW9uYWxfc3RvcmFnZV9iYXNlSWZMYjBFRUUAAAAAqG0AAPwRAABOU3QzX18yMjRfX29wdGlvbmFsX2Rlc3RydWN0X2Jhc2VJZkxiMUVFRQAAAKhtAAAwEgAATlN0M19fMjE4X19zZmluYWVfY3Rvcl9iYXNlSUxiMUVMYjFFRUUAAKhtAABgEgAATlN0M19fMjIwX19zZmluYWVfYXNzaWduX2Jhc2VJTGIxRUxiMUVFRQAAAACIbgAAnBIAAAAAAABsEAAAUE5TdDNfXzI2dmVjdG9ySWZOU185YWxsb2NhdG9ySWZFRUVFAAAAAIhuAADUEgAAAQAAAGwQAABQS05TdDNfXzI2dmVjdG9ySWZOU185YWxsb2NhdG9ySWZFRUVFAHBwAHYAdnAAAACMEgAAcHAAAJRsAACMEgAAPG0AAHZwcGQAAAAAlGwAAIwSAAAYbQAAPG0AAHZwcHBkAAAAGG0AAMQSAABwcHAATBMAADxtAACobQAAVBMAAE4xMGVtc2NyaXB0ZW4zdmFsRQAAnBAAAGwQAAAYbQAAcHBwcAAAAAAAAAAArGwAAGwQAAAYbQAAPG0AAGlwcHBkAAAALG4AAMATAAAAAAAAAwAAANgTAAAAAAAAKBIAAAAAAABYEgAAAAAAAE5TdDNfXzI4b3B0aW9uYWxJaEVFAAAAANBtAADkEwAAFBQAAE5TdDNfXzIyN19fb3B0aW9uYWxfbW92ZV9hc3NpZ25fYmFzZUloTGIxRUVFAAAAANBtAAAgFAAAUBQAAE5TdDNfXzIyN19fb3B0aW9uYWxfY29weV9hc3NpZ25fYmFzZUloTGIxRUVFAAAAANBtAABcFAAAhBQAAE5TdDNfXzIyMF9fb3B0aW9uYWxfbW92ZV9iYXNlSWhMYjFFRUUAAADQbQAAkBQAALgUAABOU3QzX18yMjBfX29wdGlvbmFsX2NvcHlfYmFzZUloTGIxRUVFAAAA0G0AAMQUAADwFAAATlN0M19fMjIzX19vcHRpb25hbF9zdG9yYWdlX2Jhc2VJaExiMEVFRQAAAACobQAA+BQAAE5TdDNfXzIyNF9fb3B0aW9uYWxfZGVzdHJ1Y3RfYmFzZUloTGIxRUVFAAAAqG0AACwVAABOU3QzX18yNnZlY3RvckloTlNfOWFsbG9jYXRvckloRUVFRQCIbgAAYBUAAAAAAAAkFQAAUE5TdDNfXzI2dmVjdG9ySWhOU185YWxsb2NhdG9ySWhFRUVFAAAAAIhuAACYFQAAAQAAACQVAABQS05TdDNfXzI2dmVjdG9ySWhOU185YWxsb2NhdG9ySWhFRUVFAHBwAHZwAFAVAABwcAAAlGwAAFAVAADEbAAAdnBwaQAAAACUbAAAUBUAABhtAADEbAAAdnBwcGkAAAAYbQAAiBUAAHBwcABMEwAAxGwAAJgTAAAkFQAAGG0AAHBwcHAAAAAArGwAACQVAAAYbQAAxGwAAGlwcHBpAHAAdnAAaXBwAHZwcGkAaXBwAHZwcGkAcHBwAHZwcHAAAABcbQAAYBYAAE4zc3B6MTZDb29yZGluYXRlU3lzdGVtRQBwAHZwAGlwcAB2cHBpAAAAAAAAAwAAAAgAAAAPAAAAqG0AAKAWAABOU3QzX18yMTJiYXNpY19zdHJpbmdJY05TXzExY2hhcl90cmFpdHNJY0VFTlNfOWFsbG9jYXRvckljRUVFRQAAqG0AAOgWAABOU3QzX18yMTJiYXNpY19zdHJpbmdJd05TXzExY2hhcl90cmFpdHNJd0VFTlNfOWFsbG9jYXRvckl3RUVFRQAAqG0AADAXAABOU3QzX18yMTJiYXNpY19zdHJpbmdJRHNOU18xMWNoYXJfdHJhaXRzSURzRUVOU185YWxsb2NhdG9ySURzRUVFRQAAAKhtAAB8FwAATlN0M19fMjEyYmFzaWNfc3RyaW5nSURpTlNfMTFjaGFyX3RyYWl0c0lEaUVFTlNfOWFsbG9jYXRvcklEaUVFRUUAAACobQAAyBcAAE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SWNFRQAAqG0AAPAXAABOMTBlbXNjcmlwdGVuMTFtZW1vcnlfdmlld0lhRUUAAKhtAAAYGAAATjEwZW1zY3JpcHRlbjExbWVtb3J5X3ZpZXdJaEVFAACobQAAQBgAAE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SXNFRQAAqG0AAGgYAABOMTBlbXNjcmlwdGVuMTFtZW1vcnlfdmlld0l0RUUAAKhtAACQGAAATjEwZW1zY3JpcHRlbjExbWVtb3J5X3ZpZXdJaUVFAACobQAAuBgAAE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SWpFRQAAqG0AAOAYAABOMTBlbXNjcmlwdGVuMTFtZW1vcnlfdmlld0lsRUUAAKhtAAAIGQAATjEwZW1zY3JpcHRlbjExbWVtb3J5X3ZpZXdJbUVFAACobQAAMBkAAE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SXhFRQAAqG0AAFgZAABOMTBlbXNjcmlwdGVuMTFtZW1vcnlfdmlld0l5RUUAAKhtAACAGQAATjEwZW1zY3JpcHRlbjExbWVtb3J5X3ZpZXdJZkVFAACobQAAqBkAAE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SWRFRQBB1DMLoSiWMAd3LGEO7rpRCZkZxG0Hj/RqcDWlY+mjlWSeMojbDqS43Hke6dXgiNnSlytMtgm9fLF+By2455Edv5BkELcd8iCwakhxufPeQb6EfdTaGuvk3W1RtdT0x4XTg1aYbBPAqGtkevli/ezJZYpPXAEU2WwGY2M9D/r1DQiNyCBuO14QaUzkQWDVcnFnotHkAzxH1ARL/YUN0mu1CqX6qLU1bJiyQtbJu9tA+bys42zYMnVc30XPDdbcWT3Rq6ww2SY6AN5RgFHXyBZh0L+19LQhI8SzVpmVus8Ppb24nrgCKAiIBV+y2QzGJOkLsYd8by8RTGhYqx1hwT0tZraQQdx2BnHbAbwg0pgqENXviYWxcR+1tgal5L+fM9S46KLJB3g0+QAPjqgJlhiYDuG7DWp/LT1tCJdsZJEBXGPm9FFra2JhbBzYMGWFTgBi8u2VBmx7pQEbwfQIglfED/XG2bBlUOm3Euq4vot8iLn83x3dYkkt2hXzfNOMZUzU+1hhsk3OUbU6dAC8o+Iwu9RBpd9K15XYPW3E0aT79NbTaulpQ/zZbjRGiGet0Lhg2nMtBETlHQMzX0wKqsl8Dd08cQVQqkECJxAQC76GIAzJJbVoV7OFbyAJ1Ga5n+Rhzg753l6YydkpIpjQsLSo18cXPbNZgQ20LjtcvbetbLrAIIO47bazv5oM4rYDmtKxdDlH1eqvd9KdFSbbBIMW3HMSC2PjhDtklD5qbQ2oWmp6C88O5J3/CZMnrgAKsZ4HfUSTD/DSowiHaPIBHv7CBmldV2L3y2dlgHE2bBnnBmtudhvU/uAr04laetoQzErdZ2/fufn5776OQ763F9WOsGDoo9bWfpPRocTC2DhS8t9P8We70WdXvKbdBrU/SzaySNorDdhMGwqv9koDNmB6BEHD72DfVd9nqO+ObjF5vmlGjLNhyxqDZryg0m8lNuJoUpV3DMwDRwu7uRYCIi8mBVW+O7rFKAu9spJatCsEarNcp//XwjHP0LWLntksHa7eW7DCZJsm8mPsnKNqdQqTbQKpBgmcPzYO64VnB3ITVwAFgkq/lRR6uOKuK7F7OBu2DJuO0pINvtXlt+/cfCHf2wvU0tOGQuLU8fiz3Whug9ofzRa+gVsmufbhd7Bvd0e3GOZaCIhwag//yjsGZlwLARH/nmWPaa5i+NP/a2FFz2wWeOIKoO7SDddUgwROwrMDOWEmZ6f3FmDQTUdpSdt3bj5KatGu3FrW2WYL30DwO9g3U668qcWeu95/z7JH6f+1MBzyvb2KwrrKMJOzU6ajtCQFNtC6kwbXzSlX3lS/Z9kjLnpms7hKYcQCG2hdlCtvKje+C7ShjgzDG98FWo3vAi0AAAAARjtnZYx2zsrKTamvWevtTh/QiivVnSOEk6ZE4bLW25307bz4PqAVV3ibcjLrPTbTrQZRtmdL+BkhcJ98JavG4GOQoYWp3Qgq7+ZvT3xAK646e0zL8DblZLYNggGXfR190UZ6GBsL07ddMLTSzpbwM4itl1ZC4D75BNtZnAtQ/BpNa5t/hyYy0MEdVbVSuxFUFIB2Md7N356Y9rj7uYYnh/+9QOI18OlNc8uOKOBtysmmVq2sbBsEAyogY2Yu+zr6aMBdn6KN9DDktpNVdxDXtDErsNH7Zhl+vV1+G5wt4WfaFoYCEFsvrVZgSMjFxgwpg/1rTEmwwuMPi6WGFqD4NVCbn1Ca1jb/3O1Rmk9LFXsJcHIewz3bsYUGvNSkdiOo4k1EzSgA7WJuO4oH/Z3O5rumqYNx6wAsN9BnSTMLPtV1MFmwv33wH/lGl3pq4NObLNu0/uaWHVGgrXo0gd3lSMfmgi0NqyuCS5BM59g2CAaeDW9jVEDGzBJ7oakd8AQvW8tjSpGGyuXXva2ARBvpYQIgjgTIbSerjlZAzq8m37LpHbjXI1AReGVrdh32zTL8sPZVmXq7/DY8gJtTOFvCz35gpaq0LQwF8hZrYGGwL4Eni0jk7cbhS6v9hi6KjRlSzLZ+Nwb715hAwLD902b0HJVdk3lfEDrWGStdsyxA8Wtqe5YOoDY/oeYNWMR1qxwlM5B7QPnd0u+/5rWKnpYq9titTZMS4OQ8VNuDWcd9x7iBRqDdSwsJcg0wbhcJ6zeLT9BQ7oWd+UHDpp4kUADaxRY7vaDcdhQPmk1zars97Bb9BotzN0si3HFwRbni1gFYpO1mPW6gz5Iom6j3JxANcWErahSrZsO77V2k3n774D84wIda8o0u9bS2SZCVxtbs0/2xiRmwGCZfi39DzC07oooWXMdAW/VoBmCSDQK7y5FEgKz0js0FW8j2Yj5bUCbfHWtButcm6BWRHY9wsG0QDPZWd2k8G97GeiC5o+mG/UKvvZonZfAziCPLVO064AlefNtuO7aWx5TwraDxYwvkECUwg3XvfSraqUZNv4g20sPODbWmBEAcCUJ7e2zR3T+Nl+ZY6F2r8UcbkJYiH0vPvllwqNuTPQF01QZmEUagIvAAm0WVytbsOozti1+tnRQj66ZzRiHr2uln0L2M9Hb5bbJNngh4ADenPjtQwjGw9UR3i5IhvcY7jvv9XOtoWxgKLmB/b+Qt1sCiFrGlg2Yu2cVdSbwPEOATSSuHdtqNw5ectqTyVvsNXRDAajgUGzOkUiBUwZht/W7eVpoLTfDe6gvLuY/BhhAgh713RabN6Dng9o9cKrsm82yAQZb/JgV3uR1iEnNQy701a6zYAAAAAFiA4tfxBrR0qYZWo+INaOm6jYo+EwvcnUuLPkqFHaEJ3Z1D3nQbFX0sm/eqZxDJ4D+QKzeWFn2UzpafQwo7QhNSu6DE+z32Z6O9FLDoNir6sLbILRkwno5BsHxZjybjGtemAc1+IFduJqC1uW0ri/M1q2kknC0/h8St3VAUdoQmTPZm8eVwMFK98NKF9nvsz677DhgHfVi7X/26bJFrJS/J68f4YG2RWzjtc4xzZk3GK+avEYJg+bLa4BtlHk3GNUbNJOLvS3JBt8uQlvxArtykwEwLDUYaqFXG+H+bUGc8w9CF62pW00gy1jGfeV0P1SHd7QKIW7uh0NtZdijsCE1wbOqa2eq8OYFqXu7K4WCkkmGCczvn1NBjZzYHrfGpRPVxS5Nc9x0wBHf/50/8wa0XfCN6vvp12eZ6lw4i10peeleoidPR/iqLURz9wNoit5hawGAx3JbDaVx0FKfK61f/SgmAVsxfIw5MvfRFx4O+HUdhabTBN8rsQdUdPJqMa2QabrzNnDgflRzayN6X5IKGFwZVL5FQ9ncRsiG5hy1i4QfPtUiBmRYQAXvBW4pFiwMKp1yqjPH/8gwTKDahznhuISyvx6d6DJ8nmNvUrKaRjCxERiWqEuV9KvAys7xvces8jaZCutsFGjo50lGxB5gJMeVPoLez7Pg3UTtQ2BGaCFjzTaHepe75Xkc5stV5c+pVm6RD080HG1Mv0NXFsJONRVJEJMME53xD5jA3yNh6b0g6rcbObA6eTo7ZWuNTiQJjsV6r5ef982UFKrjuO2Dgbtm3SeiPFBFobcPf/vKAh34QVy74RvR2eKQjPfOaaWVzeL7M9S4dlHXMykSulbwcLndrtaghyO0owx+mo/1V/iMfglelSSEPJav2wbM0tZkz1mIwtYDBaDViFiO+XFx7Pr6L0rjoKIo4Cv9OldevFhU1eL+TY9vnE4EMrJi/RvQYXZFdngsyBR7p5cuIdqaTCJRxOo7C0mIOIAUphR5PcQX8mNiDqjuAA0jseDQZ1yC0+wCJMq2j0bJPdJo5cT7CuZPpaz/FSjO/J539KbjepalaCQwvDKpUr+59HyTQN0ekMuDuImRDtqKGlHIPW8Qqj7kTgwnvsNuJDWeQAjMtyILR+mEEh1k5hGWO9xL6za+SGBoGFE65XpSsbhUfkiRNn3Dz5BkmULyZxIdsQp3xNMJ/Jp1EKYXFxMtSjk/1GNbPF89/SUFsJ8mju+lfPPix394vGFmIjEDZalsLUlQRU9K2xvpU4GWi1AKyZnnf4j75PTWXf2uWz/+JQYR0twvc9FXcdXIDfy3y4ajjZH7ru+ScPBJiyp9K4ihIAWkWAlnp9NXwb6J2qO9AoQAAAADhtlLvg2vUBWLdhuoG16gL52H65IW8fA5kCi7hDK5RF+0YA/iPxYUSbnPX/Qp5+Rzrz6vziRItGWikf/YYXKMu+erxwZs3dyt6gSXEHosLJf89Wcqd4N8gfFaNzxTy8jn1RKDWl5kmPHYvdNMSJVoy85MI3ZFOjjdw+NzYMLhGXdEOFLKz05JYUmXAtzZv7lbX2by5tQQ6U1SyaLw8FhdK3aBFpb99w09ey5GgOsG/Qdt37a65qmtEWBw5qyjk5XPJUrecq48xdko5Y5kuM014z4Ufl61YmX1M7suSJEq0ZMX85ounIWBhRpcyjiKdHG/DK06AofbIakBAmoVgcI26gcbfVeMbWb8CrQtQZqclsYcRd17lzPG0BHqjW2ze3K2NaI5C77UIqA4DWkdqCXSmi78mSelioKMI1PJMeCwulJmafHv7R/qRGvGofn77hp+fTdRw/ZBSmhwmAHV0gn+DlTQtbPfpq4YWX/lpclXXiJPjhWfxPgONEIhRYlDIy+exfpkI06Mf4jIVTQ1WH2Pst6kxA9V0t+k0wuUGXGaa8L3QyB/fDU71PrscGlqxMvu7B2AU2drm/jhstBFIlGjJqSI6Jsv/vMwqSe4jTkPAwq/1ki3NKBTHLJ5GKEQ6Od6ljGsxx1Ht2ybnvzRC7ZHVo1vDOsGGRdAgMBc/geZrrmBQOUECjb+r4zvtRIcxw6Vmh5FKBFoXoOXsRU+NSDq5bP5oVg4j7rzvlbxTi5+SsmopwF0I9Ea36UIUWJm6yIB4DJpvGtEchftnTmqfbWCLftsyZBwGtI79sOZhlRSZl3Siy3gWf02S98kffZPDMZxydWNzEKjlmfEet3axXi3zUOh/HDI1+fbTg6sZt4mF+FY/1xc04lH91VQDEr3wfORcRi4LPpuo4d8t+g67J9TvWpGGADhMAOrZ+lIFqQKO3Ui03DIqaVrYy98IN6/VJtZOY3Q5LL7y080IoDylrN/KRBqNJSbHC8/HcVkgo3t3wULNJS4gEKPEwabxK+GW5hQAILT7Yv0yEYNLYP7nQU4fBvcc8GQqmhqFnMj17Ti3AwyO5exuU2MGj+Ux6evvHwgKWU3naITLDYkymeL5ykU6GHwX1XqhkT+bF8PQ/x3tMR6rv958djk0ncBr2/VkFC0U0kbCdg/AKJe5ksfzs7wmEgXuyXDYaCORbjrM0S6gSTCY8qZSRXRMs/Mmo9f5CEI2T1qtVJLcR7UkjqjdgPFePDajsV7rJVu/XXe021dZVTrhC7pYPI1QuYrfv8lyA2coxFGIShnXYquvhY3PpatsLhP5g0zOf2mteC2GxdxScCRqAJ9Gt4Z1pwHUmsML+nsivaiUQGAufqHWfJEAAAAAQ8umh8eQPNSEW5pTzycIc4zsrvQItzSnS3ySIJ5PEObdhLZhWd8sMhoUirVRaBiVEqO+Epb4JEHVM4LGfZlRFz5S95C6CW3D+cLLRLK+WWTxdf/jdS5lsDblwzfj1kHxoB3ndiRGfSVnjduiLPFJgm867wXrYXVWqKrT0foyoy65+QWpPaKf+n5pOX01Fatddt4N2vKFl4mxTjEOZH2zyCe2FU+j7Y8c4CYpm6tau7vokR08bMqHby8BIeiHq/I5xGBUvkA7zu0D8GhqSIz6SgtHXM2PHMaezNdgGRnk4t9aL0RY3nTeC52/eIzWw+qslQhMKxFT1nhSmHD/9GVGXbeu4Noz9XqJcD7cDjtCTi54ieip/NJy+r8Z1H1qKla7KeHwPK26am/ucczopQ1eyObG+E9inWIcIVbEm4n8F0rKN7HNTmwrng2njRlG2x85BRC5voFLI+3CgIVqF7MHrFR4oSvQIzt4k+id/9iUD9+bX6lYHwQzC1zPlYwOV+VzTZxD9MnH2aeKDH8gwXDtAIK7S4cG4NHURSt3U5AY9ZXT01MSV4jJQRRDb8ZfP/3mHPRbYZivwTLbZGe1c860ZDAFEuO0Xoiw95UuN7zpvBf/IhqQe3mAwziyJkTtgaSCrkoCBSoRmFZp2j7RIqas8WFtCnblNpAlpv02oujLjLqrACo9L1uwbmyQFukn7ITJZCciTuB8uB2jtx6adoScXDVPOtuxFKCI8t8GD7mjlC/6aDKofjOo+z34DnyVUt2t1pl7KlLC4XkRCUf+WnXV3hm+c1md5ekK3i5PjQsdzUtI1mvMzI3xn49GVxjEOsU4h/FjvwOq+exAYV9rEvkvlFEyiRPVaRNAlqK1x93eJ+eeFYFgGk4bM1mFvbSMtj9yz32Z9UsmA6YI7aUhQ5E3AQBakYaEAQvVx8qtUm9gfoMsq9gEqPBCV+s75NCgR3bw44zQd2fXSiQkHOyj8S9uZbLkyOI2v1KxdXT0Nj4IZhZ9w8CR+ZhawrpT/EUcrsrnX2VsYNs+9jOY9VC004nClJBCZBMUGf5AV9JYx4Lh2gHBKnyGRXHm1Qa6QFJNxtJyDg109YpW7qbJnUghYTeb8CL8PXemp6ck5WwBo64Qk4Pt2zUEaYCvVypLCdD/eIsWvLMtkTjot8J7IxFFMF+DZXOUJeL3z7+xtAQZNuacacmlV89OIQxVHWLH85opu2G6anDHPe4rXW6t4PvpeNN5LzsY36i/Q0X7/IjjfLf0cVz0P9fbcGRNiDOv6w+bBTje2M6eWVyVBAofXqKNVCIwrRfpliqTsgx50Hmq/gVKKDhGgY6/wtoU7IERsmvKbSBLiaaGzA39HJ9ONroYEAARABIAAAAIAAcACQAGAAoABQALAAQADAADAA0AAgAOAAEADwBBgNwAC6IVYAcAAAAIUAAACBAAFAhzABIHHwAACHAAAAgwAAAJwAAQBwoAAAhgAAAIIAAACaAAAAgAAAAIgAAACEAAAAngABAHBgAACFgAAAgYAAAJkAATBzsAAAh4AAAIOAAACdAAEQcRAAAIaAAACCgAAAmwAAAICAAACIgAAAhIAAAJ8AAQBwQAAAhUAAAIFAAVCOMAEwcrAAAIdAAACDQAAAnIABEHDQAACGQAAAgkAAAJqAAACAQAAAiEAAAIRAAACegAEAcIAAAIXAAACBwAAAmYABQHUwAACHwAAAg8AAAJ2AASBxcAAAhsAAAILAAACbgAAAgMAAAIjAAACEwAAAn4ABAHAwAACFIAAAgSABUIowATByMAAAhyAAAIMgAACcQAEQcLAAAIYgAACCIAAAmkAAAIAgAACIIAAAhCAAAJ5AAQBwcAAAhaAAAIGgAACZQAFAdDAAAIegAACDoAAAnUABIHEwAACGoAAAgqAAAJtAAACAoAAAiKAAAISgAACfQAEAcFAAAIVgAACBYAQAgAABMHMwAACHYAAAg2AAAJzAARBw8AAAhmAAAIJgAACawAAAgGAAAIhgAACEYAAAnsABAHCQAACF4AAAgeAAAJnAAUB2MAAAh+AAAIPgAACdwAEgcbAAAIbgAACC4AAAm8AAAIDgAACI4AAAhOAAAJ/ABgBwAAAAhRAAAIEQAVCIMAEgcfAAAIcQAACDEAAAnCABAHCgAACGEAAAghAAAJogAACAEAAAiBAAAIQQAACeIAEAcGAAAIWQAACBkAAAmSABMHOwAACHkAAAg5AAAJ0gARBxEAAAhpAAAIKQAACbIAAAgJAAAIiQAACEkAAAnyABAHBAAACFUAAAgVABAIAgETBysAAAh1AAAINQAACcoAEQcNAAAIZQAACCUAAAmqAAAIBQAACIUAAAhFAAAJ6gAQBwgAAAhdAAAIHQAACZoAFAdTAAAIfQAACD0AAAnaABIHFwAACG0AAAgtAAAJugAACA0AAAiNAAAITQAACfoAEAcDAAAIUwAACBMAFQjDABMHIwAACHMAAAgzAAAJxgARBwsAAAhjAAAIIwAACaYAAAgDAAAIgwAACEMAAAnmABAHBwAACFsAAAgbAAAJlgAUB0MAAAh7AAAIOwAACdYAEgcTAAAIawAACCsAAAm2AAAICwAACIsAAAhLAAAJ9gAQBwUAAAhXAAAIFwBACAAAEwczAAAIdwAACDcAAAnOABEHDwAACGcAAAgnAAAJrgAACAcAAAiHAAAIRwAACe4AEAcJAAAIXwAACB8AAAmeABQHYwAACH8AAAg/AAAJ3gASBxsAAAhvAAAILwAACb4AAAgPAAAIjwAACE8AAAn+AGAHAAAACFAAAAgQABQIcwASBx8AAAhwAAAIMAAACcEAEAcKAAAIYAAACCAAAAmhAAAIAAAACIAAAAhAAAAJ4QAQBwYAAAhYAAAIGAAACZEAEwc7AAAIeAAACDgAAAnRABEHEQAACGgAAAgoAAAJsQAACAgAAAiIAAAISAAACfEAEAcEAAAIVAAACBQAFQjjABMHKwAACHQAAAg0AAAJyQARBw0AAAhkAAAIJAAACakAAAgEAAAIhAAACEQAAAnpABAHCAAACFwAAAgcAAAJmQAUB1MAAAh8AAAIPAAACdkAEgcXAAAIbAAACCwAAAm5AAAIDAAACIwAAAhMAAAJ+QAQBwMAAAhSAAAIEgAVCKMAEwcjAAAIcgAACDIAAAnFABEHCwAACGIAAAgiAAAJpQAACAIAAAiCAAAIQgAACeUAEAcHAAAIWgAACBoAAAmVABQHQwAACHoAAAg6AAAJ1QASBxMAAAhqAAAIKgAACbUAAAgKAAAIigAACEoAAAn1ABAHBQAACFYAAAgWAEAIAAATBzMAAAh2AAAINgAACc0AEQcPAAAIZgAACCYAAAmtAAAIBgAACIYAAAhGAAAJ7QAQBwkAAAheAAAIHgAACZ0AFAdjAAAIfgAACD4AAAndABIHGwAACG4AAAguAAAJvQAACA4AAAiOAAAITgAACf0AYAcAAAAIUQAACBEAFQiDABIHHwAACHEAAAgxAAAJwwAQBwoAAAhhAAAIIQAACaMAAAgBAAAIgQAACEEAAAnjABAHBgAACFkAAAgZAAAJkwATBzsAAAh5AAAIOQAACdMAEQcRAAAIaQAACCkAAAmzAAAICQAACIkAAAhJAAAJ8wAQBwQAAAhVAAAIFQAQCAIBEwcrAAAIdQAACDUAAAnLABEHDQAACGUAAAglAAAJqwAACAUAAAiFAAAIRQAACesAEAcIAAAIXQAACB0AAAmbABQHUwAACH0AAAg9AAAJ2wASBxcAAAhtAAAILQAACbsAAAgNAAAIjQAACE0AAAn7ABAHAwAACFMAAAgTABUIwwATByMAAAhzAAAIMwAACccAEQcLAAAIYwAACCMAAAmnAAAIAwAACIMAAAhDAAAJ5wAQBwcAAAhbAAAIGwAACZcAFAdDAAAIewAACDsAAAnXABIHEwAACGsAAAgrAAAJtwAACAsAAAiLAAAISwAACfcAEAcFAAAIVwAACBcAQAgAABMHMwAACHcAAAg3AAAJzwARBw8AAAhnAAAIJwAACa8AAAgHAAAIhwAACEcAAAnvABAHCQAACF8AAAgfAAAJnwAUB2MAAAh/AAAIPwAACd8AEgcbAAAIbwAACC8AAAm/AAAIDwAACI8AAAhPAAAJ/wAQBQEAFwUBARMFEQAbBQEQEQUFABkFAQQVBUEAHQUBQBAFAwAYBQECFAUhABwFASASBQkAGgUBCBYFgQBABQAAEAUCABcFgQETBRkAGwUBGBEFBwAZBQEGFQVhAB0FAWAQBQQAGAUBAxQFMQAcBQEwEgUNABoFAQwWBcEAQAUAAAMABAAFAAYABwAIAAkACgALAA0ADwARABMAFwAbAB8AIwArADMAOwBDAFMAYwBzAIMAowDDAOMAAgEAAAAAAAAQABAAEAAQABAAEAAQABAAEQARABEAEQASABIAEgASABMAEwATABMAFAAUABQAFAAVABUAFQAVABAAywBNAAAAAQACAAMABAAFAAcACQANABEAGQAhADEAQQBhAIEAwQABAYEBAQIBAwEEAQYBCAEMARABGAEgATABQAFgAAAAABAAEAAQABAAEQARABIAEgATABMAFAAUABUAFQAWABYAFwAXABgAGAAZABkAGgAaABsAGwAcABwAHQAdAEAAQAC+8/h57GH2P96qjID3e9W/PYivSu1x9T/bbcCn8L7Sv7AQ8PA5lfQ/ZzpRf64e0L+FA7iwlcnzP+kkgqbYMcu/pWSIDBkN8z9Yd8AKT1fGv6COC3siXvI/AIGcxyuqwb8/NBpKSrvxP14OjM52Trq/uuWK8Fgj8T/MHGFaPJexv6cAmUE/lfA/HgzhOPRSor8AAAAAAADwPwAAAAAAAAAArEea/Yxg7j+EWfJdqqWqP6BqAh+zpOw/tC42qlNevD/m/GpXNiDrPwjbIHflJsU/LaqhY9HC6T9wRyINhsLLP+1BeAPmhug/4X6gyIsF0T9iSFP13GfnPwnutlcwBNQ/7zn6/kIu5j80g7hIow7Qv2oL4AtbV9U/I0EK8v7/37/AbgBBsPEAC0EZAAsAGRkZAAAAAAUAAAAAAAAJAAAAAAsAAAAAAAAAABkACgoZGRkDCgcAAQAJCxgAAAkGCwAACwAGGQAAABkZGQBBgfIACyEOAAAAAAAAAAAZAAsNGRkZAA0AAAIACQ4AAAAJAA4AAA4AQbvyAAsBDABBx/IACxUTAAAAABMAAAAACQwAAAAAAAwAAAwAQfXyAAsBEABBgfMACxUPAAAABA8AAAAACRAAAAAAABAAABAAQa/zAAsBEgBBu/MACx4RAAAAABEAAAAACRIAAAAAABIAABIAABoAAAAaGhoAQfLzAAsOGgAAABoaGgAAAAAAAAkAQaP0AAsBFABBr/QACxUXAAAAABcAAAAACRQAAAAAABQAABQAQd30AAsBFgBB6fQAC5oOFQAAAAAVAAAAAAkWAAAAAAAWAAAWAAAwMTIzNDU2Nzg5QUJDREVGAAAAAAA8AAA2AAAANwAAADgAAAA5AAAAOgAAADsAAAA8AAAAPQAAAD4AAAA/AAAAQAAAAEEAAABCAAAAQwAAAAgAAAAAAAAAPDwAAEQAAABFAAAA+P////j///88PAAARgAAAEcAAADcOgAA8DoAAAQAAAAAAAAAhDwAAEgAAABJAAAA/P////z///+EPAAASgAAAEsAAAAMOwAAIDsAAAwAAAAAAAAAHD0AAEwAAABNAAAABAAAAPj///8cPQAATgAAAE8AAAD0////9P///xw9AABQAAAAUQAAADw7AADYPAAA7DwAAAA9AAAUPQAAZDsAAFA7AAAAAAAAbD0AAFIAAABTAAAAOAAAADkAAABUAAAAVQAAADwAAAA9AAAAPgAAAFYAAABAAAAAVwAAAEIAAABYAAAA0G0AANQ7AAAQPwAATlN0M19fMjliYXNpY19pb3NJY05TXzExY2hhcl90cmFpdHNJY0VFRUUAAACobQAACDwAAE5TdDNfXzIxNWJhc2ljX3N0cmVhbWJ1ZkljTlNfMTFjaGFyX3RyYWl0c0ljRUVFRQAAAAAsbgAAVDwAAAAAAAABAAAAyDsAAAP0//9OU3QzX18yMTNiYXNpY19pc3RyZWFtSWNOU18xMWNoYXJfdHJhaXRzSWNFRUVFAAAsbgAAnDwAAAAAAAABAAAAyDsAAAP0//9OU3QzX18yMTNiYXNpY19vc3RyZWFtSWNOU18xMWNoYXJfdHJhaXRzSWNFRUVFAAAMAAAAAAAAADw8AABEAAAARQAAAPT////0////PDwAAEYAAABHAAAABAAAAAAAAACEPAAASAAAAEkAAAD8/////P///4Q8AABKAAAASwAAACxuAAA8PQAAAwAAAAIAAAA8PAAAAgAAAIQ8AAACCAAATlN0M19fMjE0YmFzaWNfaW9zdHJlYW1JY05TXzExY2hhcl90cmFpdHNJY0VFRUUA0G0AAHg9AAAAPAAATlN0M19fMjE1YmFzaWNfc3RyaW5nYnVmSWNOU18xMWNoYXJfdHJhaXRzSWNFRU5TXzlhbGxvY2F0b3JJY0VFRUUAAABAAAAAAAAAAKw+AABZAAAAWgAAADgAAAD4////rD4AAFsAAABcAAAAwP///8D///+sPgAAXQAAAF4AAADIPQAALD4AAGg+AAB8PgAAkD4AAKQ+AABUPgAAQD4AAPA9AADcPQAAQAAAAAAAAAAcPQAATAAAAE0AAAA4AAAA+P///xw9AABOAAAATwAAAMD////A////HD0AAFAAAABRAAAAQAAAAAAAAAA8PAAARAAAAEUAAADA////wP///zw8AABGAAAARwAAADgAAAAAAAAAhDwAAEgAAABJAAAAyP///8j///+EPAAASgAAAEsAAADQbQAAuD4AABw9AABOU3QzX18yMThiYXNpY19zdHJpbmdzdHJlYW1JY05TXzExY2hhcl90cmFpdHNJY0VFTlNfOWFsbG9jYXRvckljRUVFRQAAAAAAAAAAED8AAF8AAABgAAAAqG0AABg/AABOU3QzX18yOGlvc19iYXNlRQAAAAAAAADRdJ4AV529KoBwUg///z4nCgAAAGQAAADoAwAAECcAAKCGAQBAQg8AgJaYAADh9QUYAAAANQAAAHEAAABr////zvv//5K///8AAAAAAAAAAP////////////////////////////////////////////////////////////////8AAQIDBAUGBwgJ/////////woLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIj////////CgsMDQ4PEBESExQVFhcYGRobHB0eHyAhIiP/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAECBAcDBgUAAAAAAAAAAgAAwAMAAMAEAADABQAAwAYAAMAHAADACAAAwAkAAMAKAADACwAAwAwAAMANAADADgAAwA8AAMAQAADAEQAAwBIAAMATAADAFAAAwBUAAMAWAADAFwAAwBgAAMAZAADAGgAAwBsAAMAcAADAHQAAwB4AAMAfAADAAAAAswEAAMMCAADDAwAAwwQAAMMFAADDBgAAwwcAAMMIAADDCQAAwwoAAMMLAADDDAAAww0AANMOAADDDwAAwwAADLsBAAzDAgAMwwMADMMEAAzbAAAAAN4SBJUAAAAA////////////////YEEAABQAAABDLlVURi04AEGwgwELAnRBAEHQgwELSkxDX0NUWVBFAAAAAExDX05VTUVSSUMAAExDX1RJTUUAAAAAAExDX0NPTExBVEUAAExDX01PTkVUQVJZAExDX01FU1NBR0VTACBEAEGkiAEL+QMBAAAAAgAAAAMAAAAEAAAABQAAAAYAAAAHAAAACAAAAAkAAAAKAAAACwAAAAwAAAANAAAADgAAAA8AAAAQAAAAEQAAABIAAAATAAAAFAAAABUAAAAWAAAAFwAAABgAAAAZAAAAGgAAABsAAAAcAAAAHQAAAB4AAAAfAAAAIAAAACEAAAAiAAAAIwAAACQAAAAlAAAAJgAAACcAAAAoAAAAKQAAACoAAAArAAAALAAAAC0AAAAuAAAALwAAADAAAAAxAAAAMgAAADMAAAA0AAAANQAAADYAAAA3AAAAOAAAADkAAAA6AAAAOwAAADwAAAA9AAAAPgAAAD8AAABAAAAAQQAAAEIAAABDAAAARAAAAEUAAABGAAAARwAAAEgAAABJAAAASgAAAEsAAABMAAAATQAAAE4AAABPAAAAUAAAAFEAAABSAAAAUwAAAFQAAABVAAAAVgAAAFcAAABYAAAAWQAAAFoAAABbAAAAXAAAAF0AAABeAAAAXwAAAGAAAABBAAAAQgAAAEMAAABEAAAARQAAAEYAAABHAAAASAAAAEkAAABKAAAASwAAAEwAAABNAAAATgAAAE8AAABQAAAAUQAAAFIAAABTAAAAVAAAAFUAAABWAAAAVwAAAFgAAABZAAAAWgAAAHsAAAB8AAAAfQAAAH4AAAB/AEGgkAELAjBKAEG0lAEL+QMBAAAAAgAAAAMAAAAEAAAABQAAAAYAAAAHAAAACAAAAAkAAAAKAAAACwAAAAwAAAANAAAADgAAAA8AAAAQAAAAEQAAABIAAAATAAAAFAAAABUAAAAWAAAAFwAAABgAAAAZAAAAGgAAABsAAAAcAAAAHQAAAB4AAAAfAAAAIAAAACEAAAAiAAAAIwAAACQAAAAlAAAAJgAAACcAAAAoAAAAKQAAACoAAAArAAAALAAAAC0AAAAuAAAALwAAADAAAAAxAAAAMgAAADMAAAA0AAAANQAAADYAAAA3AAAAOAAAADkAAAA6AAAAOwAAADwAAAA9AAAAPgAAAD8AAABAAAAAYQAAAGIAAABjAAAAZAAAAGUAAABmAAAAZwAAAGgAAABpAAAAagAAAGsAAABsAAAAbQAAAG4AAABvAAAAcAAAAHEAAAByAAAAcwAAAHQAAAB1AAAAdgAAAHcAAAB4AAAAeQAAAHoAAABbAAAAXAAAAF0AAABeAAAAXwAAAGAAAABhAAAAYgAAAGMAAABkAAAAZQAAAGYAAABnAAAAaAAAAGkAAABqAAAAawAAAGwAAABtAAAAbgAAAG8AAABwAAAAcQAAAHIAAABzAAAAdAAAAHUAAAB2AAAAdwAAAHgAAAB5AAAAegAAAHsAAAB8AAAAfQAAAH4AAAB/AEG0nAELLYDeKACAyE0AAKd2AAA0ngCAEscAgJ/uAAB+FwGAXEABgOlnAQDIkAEAVbgBLgBB8JwBC9ICU3VuAE1vbgBUdWUAV2VkAFRodQBGcmkAU2F0AFN1bmRheQBNb25kYXkAVHVlc2RheQBXZWRuZXNkYXkAVGh1cnNkYXkARnJpZGF5AFNhdHVyZGF5AEphbgBGZWIATWFyAEFwcgBNYXkASnVuAEp1bABBdWcAU2VwAE9jdABOb3YARGVjAEphbnVhcnkARmVicnVhcnkATWFyY2gAQXByaWwATWF5AEp1bmUASnVseQBBdWd1c3QAU2VwdGVtYmVyAE9jdG9iZXIATm92ZW1iZXIARGVjZW1iZXIAQU0AUE0AJWEgJWIgJWUgJVQgJVkAJW0vJWQvJXkAJUg6JU06JVMAJUk6JU06JVMgJXAAAAAlbS8lZC8leQAwMTIzNDU2Nzg5ACVhICViICVlICVUICVZACVIOiVNOiVTAAAAAABeW3lZXQBeW25OXQB5ZXMAbm8AQdCfAQsxMDEyMzQ1Njc4OWFiY2RlZkFCQ0RFRnhYKy1wUGlJbk4AJUk6JU06JVMgJXAlSDolTQBBkKABC4EBJQAAAG0AAAAvAAAAJQAAAGQAAAAvAAAAJQAAAHkAAAAlAAAAWQAAAC0AAAAlAAAAbQAAAC0AAAAlAAAAZAAAACUAAABJAAAAOgAAACUAAABNAAAAOgAAACUAAABTAAAAIAAAACUAAABwAAAAAAAAACUAAABIAAAAOgAAACUAAABNAEGgoQELZSUAAABIAAAAOgAAACUAAABNAAAAOgAAACUAAABTAAAAAAAAAABaAAB0AAAAdQAAAHYAAAAAAAAAZFoAAHcAAAB4AAAAdgAAAHkAAAB6AAAAewAAAHwAAAB9AAAAfgAAAH8AAACAAEGQogEL/QMEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAFAgAABQAAAAUAAAAFAAAABQAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAMCAACCAAAAggAAAIIAAACCAAAAggAAAIIAAACCAAAAggAAAIIAAACCAAAAggAAAIIAAACCAAAAggAAAIIAAABCAQAAQgEAAEIBAABCAQAAQgEAAEIBAABCAQAAQgEAAEIBAABCAQAAggAAAIIAAACCAAAAggAAAIIAAACCAAAAggAAACoBAAAqAQAAKgEAACoBAAAqAQAAKgEAACoAAAAqAAAAKgAAACoAAAAqAAAAKgAAACoAAAAqAAAAKgAAACoAAAAqAAAAKgAAACoAAAAqAAAAKgAAACoAAAAqAAAAKgAAACoAAAAqAAAAggAAAIIAAACCAAAAggAAAIIAAACCAAAAMgEAADIBAAAyAQAAMgEAADIBAAAyAQAAMgAAADIAAAAyAAAAMgAAADIAAAAyAAAAMgAAADIAAAAyAAAAMgAAADIAAAAyAAAAMgAAADIAAAAyAAAAMgAAADIAAAAyAAAAMgAAADIAAACCAAAAggAAAIIAAACCAAAABABBlKoBC+0CvFkAAIEAAACCAAAAdgAAAIMAAACEAAAAhQAAAIYAAACHAAAAiAAAAIkAAAAAAAAAmFoAAIoAAACLAAAAdgAAAIwAAACNAAAAjgAAAI8AAACQAAAAAAAAALxaAACRAAAAkgAAAHYAAACTAAAAlAAAAJUAAACWAAAAlwAAAHQAAAByAAAAdQAAAGUAAAAAAAAAZgAAAGEAAABsAAAAcwAAAGUAAAAAAAAAJQAAAG0AAAAvAAAAJQAAAGQAAAAvAAAAJQAAAHkAAAAAAAAAJQAAAEgAAAA6AAAAJQAAAE0AAAA6AAAAJQAAAFMAAAAAAAAAJQAAAGEAAAAgAAAAJQAAAGIAAAAgAAAAJQAAAGQAAAAgAAAAJQAAAEgAAAA6AAAAJQAAAE0AAAA6AAAAJQAAAFMAAAAgAAAAJQAAAFkAAAAAAAAAJQAAAEkAAAA6AAAAJQAAAE0AAAA6AAAAJQAAAFMAAAAgAAAAJQAAAHAAQYytAQv9J5xWAACYAAAAmQAAAHYAAADQbQAAqFYAAOxqAABOU3QzX18yNmxvY2FsZTVmYWNldEUAAAAAAAAABFcAAJgAAACaAAAAdgAAAJsAAACcAAAAnQAAAJ4AAACfAAAAoAAAAKEAAACiAAAAowAAAKQAAAClAAAApgAAACxuAAAkVwAAAAAAAAIAAACcVgAAAgAAADhXAAACAAAATlN0M19fMjVjdHlwZUl3RUUAAACobQAAQFcAAE5TdDNfXzIxMGN0eXBlX2Jhc2VFAAAAAAAAAACIVwAAmAAAAKcAAAB2AAAAqAAAAKkAAACqAAAAqwAAAKwAAACtAAAArgAAACxuAACoVwAAAAAAAAIAAACcVgAAAgAAAMxXAAACAAAATlN0M19fMjdjb2RlY3Z0SWNjMTFfX21ic3RhdGVfdEVFAAAAqG0AANRXAABOU3QzX18yMTJjb2RlY3Z0X2Jhc2VFAAAAAAAAHFgAAJgAAACvAAAAdgAAALAAAACxAAAAsgAAALMAAAC0AAAAtQAAALYAAAAsbgAAPFgAAAAAAAACAAAAnFYAAAIAAADMVwAAAgAAAE5TdDNfXzI3Y29kZWN2dElEc2MxMV9fbWJzdGF0ZV90RUUAAAAAAACQWAAAmAAAALcAAAB2AAAAuAAAALkAAAC6AAAAuwAAALwAAAC9AAAAvgAAACxuAACwWAAAAAAAAAIAAACcVgAAAgAAAMxXAAACAAAATlN0M19fMjdjb2RlY3Z0SURzRHUxMV9fbWJzdGF0ZV90RUUAAAAAAARZAACYAAAAvwAAAHYAAADAAAAAwQAAAMIAAADDAAAAxAAAAMUAAADGAAAALG4AACRZAAAAAAAAAgAAAJxWAAACAAAAzFcAAAIAAABOU3QzX18yN2NvZGVjdnRJRGljMTFfX21ic3RhdGVfdEVFAAAAAAAAeFkAAJgAAADHAAAAdgAAAMgAAADJAAAAygAAAMsAAADMAAAAzQAAAM4AAAAsbgAAmFkAAAAAAAACAAAAnFYAAAIAAADMVwAAAgAAAE5TdDNfXzI3Y29kZWN2dElEaUR1MTFfX21ic3RhdGVfdEVFACxuAADcWQAAAAAAAAIAAACcVgAAAgAAAMxXAAACAAAATlN0M19fMjdjb2RlY3Z0SXdjMTFfX21ic3RhdGVfdEVFAAAA0G0AAAxaAACcVgAATlN0M19fMjZsb2NhbGU1X19pbXBFAAAA0G0AADBaAACcVgAATlN0M19fMjdjb2xsYXRlSWNFRQDQbQAAUFoAAJxWAABOU3QzX18yN2NvbGxhdGVJd0VFACxuAACEWgAAAAAAAAIAAACcVgAAAgAAADhXAAACAAAATlN0M19fMjVjdHlwZUljRUUAAADQbQAApFoAAJxWAABOU3QzX18yOG51bXB1bmN0SWNFRQAAAADQbQAAyFoAAJxWAABOU3QzX18yOG51bXB1bmN0SXdFRQAAAAAAAAAAJFoAAM8AAADQAAAAdgAAANEAAADSAAAA0wAAAAAAAABEWgAA1AAAANUAAAB2AAAA1gAAANcAAADYAAAAAAAAAGBbAACYAAAA2QAAAHYAAADaAAAA2wAAANwAAADdAAAA3gAAAN8AAADgAAAA4QAAAOIAAADjAAAA5AAAACxuAACAWwAAAAAAAAIAAACcVgAAAgAAAMRbAAAAAAAATlN0M19fMjdudW1fZ2V0SWNOU18xOWlzdHJlYW1idWZfaXRlcmF0b3JJY05TXzExY2hhcl90cmFpdHNJY0VFRUVFRQAsbgAA3FsAAAAAAAABAAAA9FsAAAAAAABOU3QzX18yOV9fbnVtX2dldEljRUUAAACobQAA/FsAAE5TdDNfXzIxNF9fbnVtX2dldF9iYXNlRQAAAAAAAAAAWFwAAJgAAADlAAAAdgAAAOYAAADnAAAA6AAAAOkAAADqAAAA6wAAAOwAAADtAAAA7gAAAO8AAADwAAAALG4AAHhcAAAAAAAAAgAAAJxWAAACAAAAvFwAAAAAAABOU3QzX18yN251bV9nZXRJd05TXzE5aXN0cmVhbWJ1Zl9pdGVyYXRvckl3TlNfMTFjaGFyX3RyYWl0c0l3RUVFRUVFACxuAADUXAAAAAAAAAEAAAD0WwAAAAAAAE5TdDNfXzI5X19udW1fZ2V0SXdFRQAAAAAAAAAgXQAAmAAAAPEAAAB2AAAA8gAAAPMAAAD0AAAA9QAAAPYAAAD3AAAA+AAAAPkAAAAsbgAAQF0AAAAAAAACAAAAnFYAAAIAAACEXQAAAAAAAE5TdDNfXzI3bnVtX3B1dEljTlNfMTlvc3RyZWFtYnVmX2l0ZXJhdG9ySWNOU18xMWNoYXJfdHJhaXRzSWNFRUVFRUUALG4AAJxdAAAAAAAAAQAAALRdAAAAAAAATlN0M19fMjlfX251bV9wdXRJY0VFAAAAqG0AALxdAABOU3QzX18yMTRfX251bV9wdXRfYmFzZUUAAAAAAAAAAAxeAACYAAAA+gAAAHYAAAD7AAAA/AAAAP0AAAD+AAAA/wAAAAABAAABAQAAAgEAACxuAAAsXgAAAAAAAAIAAACcVgAAAgAAAHBeAAAAAAAATlN0M19fMjdudW1fcHV0SXdOU18xOW9zdHJlYW1idWZfaXRlcmF0b3JJd05TXzExY2hhcl90cmFpdHNJd0VFRUVFRQAsbgAAiF4AAAAAAAABAAAAtF0AAAAAAABOU3QzX18yOV9fbnVtX3B1dEl3RUUAAAAAAAAA9F4AAAMBAAAEAQAAdgAAAAUBAAAGAQAABwEAAAgBAAAJAQAACgEAAAsBAAD4////9F4AAAwBAAANAQAADgEAAA8BAAAQAQAAEQEAABIBAAAsbgAAHF8AAAAAAAADAAAAnFYAAAIAAABkXwAAAgAAAIBfAAAACAAATlN0M19fMjh0aW1lX2dldEljTlNfMTlpc3RyZWFtYnVmX2l0ZXJhdG9ySWNOU18xMWNoYXJfdHJhaXRzSWNFRUVFRUUAAAAAqG0AAGxfAABOU3QzX18yOXRpbWVfYmFzZUUAAKhtAACIXwAATlN0M19fMjIwX190aW1lX2dldF9jX3N0b3JhZ2VJY0VFAAAAAAAAAABgAAATAQAAFAEAAHYAAAAVAQAAFgEAABcBAAAYAQAAGQEAABoBAAAbAQAA+P///wBgAAAcAQAAHQEAAB4BAAAfAQAAIAEAACEBAAAiAQAALG4AAChgAAAAAAAAAwAAAJxWAAACAAAAZF8AAAIAAABwYAAAAAgAAE5TdDNfXzI4dGltZV9nZXRJd05TXzE5aXN0cmVhbWJ1Zl9pdGVyYXRvckl3TlNfMTFjaGFyX3RyYWl0c0l3RUVFRUVFAAAAAKhtAAB4YAAATlN0M19fMjIwX190aW1lX2dldF9jX3N0b3JhZ2VJd0VFAAAAAAAAALRgAAAjAQAAJAEAAHYAAAAlAQAALG4AANRgAAAAAAAAAgAAAJxWAAACAAAAHGEAAAAIAABOU3QzX18yOHRpbWVfcHV0SWNOU18xOW9zdHJlYW1idWZfaXRlcmF0b3JJY05TXzExY2hhcl90cmFpdHNJY0VFRUVFRQAAAACobQAAJGEAAE5TdDNfXzIxMF9fdGltZV9wdXRFAAAAAAAAAABUYQAAJgEAACcBAAB2AAAAKAEAACxuAAB0YQAAAAAAAAIAAACcVgAAAgAAABxhAAAACAAATlN0M19fMjh0aW1lX3B1dEl3TlNfMTlvc3RyZWFtYnVmX2l0ZXJhdG9ySXdOU18xMWNoYXJfdHJhaXRzSXdFRUVFRUUAAAAAAAAAAPRhAACYAAAAKQEAAHYAAAAqAQAAKwEAACwBAAAtAQAALgEAAC8BAAAwAQAAMQEAADIBAAAsbgAAFGIAAAAAAAACAAAAnFYAAAIAAAAwYgAAAgAAAE5TdDNfXzIxMG1vbmV5cHVuY3RJY0xiMEVFRQCobQAAOGIAAE5TdDNfXzIxMG1vbmV5X2Jhc2VFAAAAAAAAAACIYgAAmAAAADMBAAB2AAAANAEAADUBAAA2AQAANwEAADgBAAA5AQAAOgEAADsBAAA8AQAALG4AAKhiAAAAAAAAAgAAAJxWAAACAAAAMGIAAAIAAABOU3QzX18yMTBtb25leXB1bmN0SWNMYjFFRUUAAAAAAPxiAACYAAAAPQEAAHYAAAA+AQAAPwEAAEABAABBAQAAQgEAAEMBAABEAQAARQEAAEYBAAAsbgAAHGMAAAAAAAACAAAAnFYAAAIAAAAwYgAAAgAAAE5TdDNfXzIxMG1vbmV5cHVuY3RJd0xiMEVFRQAAAAAAcGMAAJgAAABHAQAAdgAAAEgBAABJAQAASgEAAEsBAABMAQAATQEAAE4BAABPAQAAUAEAACxuAACQYwAAAAAAAAIAAACcVgAAAgAAADBiAAACAAAATlN0M19fMjEwbW9uZXlwdW5jdEl3TGIxRUVFAAAAAADIYwAAmAAAAFEBAAB2AAAAUgEAAFMBAAAsbgAA6GMAAAAAAAACAAAAnFYAAAIAAAAwZAAAAAAAAE5TdDNfXzI5bW9uZXlfZ2V0SWNOU18xOWlzdHJlYW1idWZfaXRlcmF0b3JJY05TXzExY2hhcl90cmFpdHNJY0VFRUVFRQAAAKhtAAA4ZAAATlN0M19fMjExX19tb25leV9nZXRJY0VFAAAAAAAAAABwZAAAmAAAAFQBAAB2AAAAVQEAAFYBAAAsbgAAkGQAAAAAAAACAAAAnFYAAAIAAADYZAAAAAAAAE5TdDNfXzI5bW9uZXlfZ2V0SXdOU18xOWlzdHJlYW1idWZfaXRlcmF0b3JJd05TXzExY2hhcl90cmFpdHNJd0VFRUVFRQAAAKhtAADgZAAATlN0M19fMjExX19tb25leV9nZXRJd0VFAAAAAAAAAAAYZQAAmAAAAFcBAAB2AAAAWAEAAFkBAAAsbgAAOGUAAAAAAAACAAAAnFYAAAIAAACAZQAAAAAAAE5TdDNfXzI5bW9uZXlfcHV0SWNOU18xOW9zdHJlYW1idWZfaXRlcmF0b3JJY05TXzExY2hhcl90cmFpdHNJY0VFRUVFRQAAAKhtAACIZQAATlN0M19fMjExX19tb25leV9wdXRJY0VFAAAAAAAAAADAZQAAmAAAAFoBAAB2AAAAWwEAAFwBAAAsbgAA4GUAAAAAAAACAAAAnFYAAAIAAAAoZgAAAAAAAE5TdDNfXzI5bW9uZXlfcHV0SXdOU18xOW9zdHJlYW1idWZfaXRlcmF0b3JJd05TXzExY2hhcl90cmFpdHNJd0VFRUVFRQAAAKhtAAAwZgAATlN0M19fMjExX19tb25leV9wdXRJd0VFAAAAAAAAAABsZgAAmAAAAF0BAAB2AAAAXgEAAF8BAABgAQAALG4AAIxmAAAAAAAAAgAAAJxWAAACAAAApGYAAAIAAABOU3QzX18yOG1lc3NhZ2VzSWNFRQAAAACobQAArGYAAE5TdDNfXzIxM21lc3NhZ2VzX2Jhc2VFAAAAAADkZgAAmAAAAGEBAAB2AAAAYgEAAGMBAABkAQAALG4AAARnAAAAAAAAAgAAAJxWAAACAAAApGYAAAIAAABOU3QzX18yOG1lc3NhZ2VzSXdFRQAAAABTAAAAdQAAAG4AAABkAAAAYQAAAHkAAAAAAAAATQAAAG8AAABuAAAAZAAAAGEAAAB5AAAAAAAAAFQAAAB1AAAAZQAAAHMAAABkAAAAYQAAAHkAAAAAAAAAVwAAAGUAAABkAAAAbgAAAGUAAABzAAAAZAAAAGEAAAB5AAAAAAAAAFQAAABoAAAAdQAAAHIAAABzAAAAZAAAAGEAAAB5AAAAAAAAAEYAAAByAAAAaQAAAGQAAABhAAAAeQAAAAAAAABTAAAAYQAAAHQAAAB1AAAAcgAAAGQAAABhAAAAeQAAAAAAAABTAAAAdQAAAG4AAAAAAAAATQAAAG8AAABuAAAAAAAAAFQAAAB1AAAAZQAAAAAAAABXAAAAZQAAAGQAAAAAAAAAVAAAAGgAAAB1AAAAAAAAAEYAAAByAAAAaQAAAAAAAABTAAAAYQAAAHQAAAAAAAAASgAAAGEAAABuAAAAdQAAAGEAAAByAAAAeQAAAAAAAABGAAAAZQAAAGIAAAByAAAAdQAAAGEAAAByAAAAeQAAAAAAAABNAAAAYQAAAHIAAABjAAAAaAAAAAAAAABBAAAAcAAAAHIAAABpAAAAbAAAAAAAAABNAAAAYQAAAHkAAAAAAAAASgAAAHUAAABuAAAAZQAAAAAAAABKAAAAdQAAAGwAAAB5AAAAAAAAAEEAAAB1AAAAZwAAAHUAAABzAAAAdAAAAAAAAABTAAAAZQAAAHAAAAB0AAAAZQAAAG0AAABiAAAAZQAAAHIAAAAAAAAATwAAAGMAAAB0AAAAbwAAAGIAAABlAAAAcgAAAAAAAABOAAAAbwAAAHYAAABlAAAAbQAAAGIAAABlAAAAcgAAAAAAAABEAAAAZQAAAGMAAABlAAAAbQAAAGIAAABlAAAAcgAAAAAAAABKAAAAYQAAAG4AAAAAAAAARgAAAGUAAABiAAAAAAAAAE0AAABhAAAAcgAAAAAAAABBAAAAcAAAAHIAAAAAAAAASgAAAHUAAABuAAAAAAAAAEoAAAB1AAAAbAAAAAAAAABBAAAAdQAAAGcAAAAAAAAAUwAAAGUAAABwAAAAAAAAAE8AAABjAAAAdAAAAAAAAABOAAAAbwAAAHYAAAAAAAAARAAAAGUAAABjAAAAAAAAAEEAAABNAAAAAAAAAFAAAABNAEGU1QELnAiAXwAADAEAAA0BAAAOAQAADwEAABABAAARAQAAEgEAAAAAAABwYAAAHAEAAB0BAAAeAQAAHwEAACABAAAhAQAAIgEAAAAAAADsagAAZQEAAGYBAABnAQAAqG0AAPRqAABOU3QzX18yMTRfX3NoYXJlZF9jb3VudEUAAAAAcG8AANBtAAAgawAAnG4AAE4xMF9fY3h4YWJpdjExNl9fc2hpbV90eXBlX2luZm9FAAAAANBtAABQawAAFGsAAE4xMF9fY3h4YWJpdjExN19fY2xhc3NfdHlwZV9pbmZvRQAAANBtAACAawAAFGsAAE4xMF9fY3h4YWJpdjExN19fcGJhc2VfdHlwZV9pbmZvRQAAANBtAACwawAAdGsAAE4xMF9fY3h4YWJpdjExOV9fcG9pbnRlcl90eXBlX2luZm9FANBtAADgawAAFGsAAE4xMF9fY3h4YWJpdjEyMF9fZnVuY3Rpb25fdHlwZV9pbmZvRQAAAADQbQAAFGwAAHRrAABOMTBfX2N4eGFiaXYxMjlfX3BvaW50ZXJfdG9fbWVtYmVyX3R5cGVfaW5mb0UAAAAAAAAAYGwAAGoBAABrAQAAbAEAAG0BAABuAQAA0G0AAGxsAAAUawAATjEwX19jeHhhYml2MTIzX19mdW5kYW1lbnRhbF90eXBlX2luZm9FAExsAACcbAAAdgAAAExsAACobAAARG4AAExsAAC0bAAAYgAAAExsAADAbAAAYwAAAExsAADMbAAAaAAAAExsAADYbAAAYQAAAExsAADkbAAAcwAAAExsAADwbAAAdAAAAExsAAD8bAAAaQAAAExsAAAIbQAAagAAAExsAAAUbQAAbAAAAExsAAAgbQAAbQAAAExsAAAsbQAAeAAAAExsAAA4bQAAeQAAAExsAABEbQAAZgAAAExsAABQbQAAZAAAAAAAAABwbQAAagEAAG8BAABsAQAAbQEAAHABAADQbQAAfG0AABRrAABOMTBfX2N4eGFiaXYxMTZfX2VudW1fdHlwZV9pbmZvRQAAAAAAAAAARGsAAGoBAABxAQAAbAEAAG0BAAByAQAAcwEAAHQBAAB1AQAAAAAAAPBtAABqAQAAdgEAAGwBAABtAQAAcgEAAHcBAAB4AQAAeQEAANBtAAD8bQAARGsAAE4xMF9fY3h4YWJpdjEyMF9fc2lfY2xhc3NfdHlwZV9pbmZvRQAAAAAAAAAATG4AAGoBAAB6AQAAbAEAAG0BAAByAQAAewEAAHwBAAB9AQAA0G0AAFhuAABEawAATjEwX19jeHhhYml2MTIxX192bWlfY2xhc3NfdHlwZV9pbmZvRQAAAAAAAACkawAAagEAAH4BAABsAQAAbQEAAH8BAACobQAApG4AAFN0OXR5cGVfaW5mbwBBud0BCwggAAAAAAAABQBBzN0BCwExAEHk3QELDjIAAAAzAAAACHEAAAAEAEH83QELAQEAQYzeAQsF/////woAQdDeAQshwG4AAHB/AQAlbS8lZC8leQAAAAglSDolTTolUwAAAAgFAEH83gELAmgBAEGU3wELCjIAAABpAQAAZH8AQazfAQsBAgBBvN8BCwj//////////wBBgOABCwJwbw==")),oe((await J(Se)).instance))})();function Hz(){function ce(){var oe;if(i.calledRun=!0,!b){if(G=!0,KE.G(),T?.(i),(oe=i.onRuntimeInitialized)==null||oe.call(i),i.postRun)for(typeof i.postRun=="function"&&(i.postRun=[i.postRun]);i.postRun.length;){var Se=i.postRun.shift();z.push(Se)}te(z)}}if(0<X)k=Hz;else{if(i.preRun)for(typeof i.preRun=="function"&&(i.preRun=[i.preRun]);i.preRun.length;)ee();te(j),0<X?k=Hz:i.setStatus?(i.setStatus("Running..."),setTimeout(()=>{setTimeout(()=>i.setStatus(""),1),ce()},1)):ce()}}if(i.preInit)for(typeof i.preInit=="function"&&(i.preInit=[i.preInit]);0<i.preInit.length;)i.preInit.shift()();return Hz(),G?n=i:n=new Promise((ce,oe)=>{T=ce,E=oe}),n}var qS=(e,t,n=i=>i)=>{let i=e.vf32_ptr(t),o=t.size();return new Float32Array(e.HEAPF32.buffer,i,o).map(n)},A5e=e=>1/(1+Math.exp(-e)),g5e=e=>t=>t*e+.5,b5e=(e,t,n)=>{let i=n?.colorScaleFactor??.282;return{numPoints:t.numPoints,shDegree:t.shDegree,antialiased:t.antialiased,positions:qS(e,t.positions),scales:qS(e,t.scales,Math.exp),rotations:qS(e,t.rotations),alphas:qS(e,t.alphas,A5e),colors:qS(e,t.colors,g5e(i)),sh:qS(e,t.sh)}},y5e=(e,t)=>{e._free(e.vf32_ptr(t.positions)),e._free(e.vf32_ptr(t.scales)),e._free(e.vf32_ptr(t.rotations)),e._free(e.vf32_ptr(t.alphas)),e._free(e.vf32_ptr(t.colors)),e._free(e.vf32_ptr(t.sh))},bde=async(e,t)=>{var n;let i=await p5e(),o=e instanceof Uint8Array?e:new Uint8Array(e),r=null;try{if(r=i._malloc(Uint8Array.BYTES_PER_ELEMENT*o.length),r===null)throw new Error("couldn't allocate memory");i.HEAPU8.set(o,r/Uint8Array.BYTES_PER_ELEMENT);let s=i.CoordinateSystem[((n=t?.unpackOptions)==null?void 0:n.coordinateSystem)??"UNSPECIFIED"],a=i.load_spz(r,o.length,{coordinateSystem:s}),c=b5e(i,a,t);return y5e(i,a),c}catch(s){throw s}finally{r!==null&&i._free(r)}};var x5e=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"}));var C5e=[0,9,24,45],T5e=14,E5e=1.6*1024*1024*1024;function S5e(e,t){let n=t?.attributes;if(!l(n))return;let i=n.POSITION;if(!l(i))return;let o=e?.accessors?.[i];if(!l(o)||o.count<=0)return;let r=0;for(let s in n)if(Object.prototype.hasOwnProperty.call(n,s)){let a=/SH_DEGREE_(\d+)_COEF_/.exec(s);a&&(r=Math.max(r,parseInt(a[1],10)))}return{numPoints:o.count,shDegree:r}}function _5e(e,t){let n=T5e+(C5e[t]??0);return e*n*Float32Array.BYTES_PER_ELEMENT*2}var NK=class extends Hi{constructor(t){super(),t=t??Q.EMPTY_OBJECT;let n=t.resourceCache,i=t.gltf,o=t.primitive,r=t.spz,s=t.gltfResource,a=t.baseResource,c=t.cacheKey;this._resourceCache=n,this._gltfResource=s,this._baseResource=a,this._gltf=i,this._primitive=o,this._spz=r,this._cacheKey=c,this._bufferViewLoader=void 0,this._bufferViewTypedArray=void 0,this._decodePromise=void 0,this._decodedData=void 0,this._state=yt.UNLOADED,this._promise=void 0,this._spzError=void 0}get cacheKey(){return this._cacheKey}get decodedData(){return this._decodedData}async load(){return l(this._promise)?this._promise:(this._state=yt.LOADING,this._promise=I5e(this),this._promise)}process(t){if(this._state===yt.READY)return!0;if(this._state!==yt.PROCESSING||(l(this._spzError)&&PK(this,this._spzError),!l(this._bufferViewTypedArray))||l(this._decodePromise))return!1;let n=S5e(this._gltf,this._primitive);if(l(n)){let o=_5e(n.numPoints,n.shDegree);if(o>E5e){let r=Math.round(o/1048576);return PK(this,new me(`SPZ data too large to decode: ${n.numPoints.toLocaleString()} splats with spherical harmonics degree ${n.shDegree} would require approximately ${r} MB, which exceeds the WASM memory limit. Consider using a lower spherical harmonics degree or splitting the dataset into smaller tiles.`)),!1}}let i=bde(this._bufferViewTypedArray,{unpackOptions:{coordinateSystem:"UNSPECIFIED"}});if(!l(i))return!1;this._decodePromise=Z5e(this,i)}unload(){l(this._bufferViewLoader)&&this._resourceCache.unload(this._bufferViewLoader),this._bufferViewLoader=void 0,this._bufferViewTypedArray=void 0,this._decodedData=void 0,this._gltf=void 0,this._primitive=void 0}};async function I5e(e){let t=e._resourceCache;try{let n=t.getBufferViewLoader({gltf:e._gltf,bufferViewId:0,gltfResource:e._gltfResource,baseResource:e._baseResource});return e._bufferViewLoader=n,await n.load(),e.isDestroyed()?void 0:(e._bufferViewTypedArray=n.typedArray,e._state=yt.PROCESSING,e)}catch(n){if(e.isDestroyed())return;PK(e,n)}}function PK(e,t){throw e.unload(),e._state=yt.FAILED,e.getError("Failed to load SPZ",t)}async function Z5e(e,t){try{let n=await t;return e.isDestroyed()?void 0:(e.unload(),e._decodedData={gcloud:n},e._state=yt.READY,e._baseResource)}catch(n){if(e.isDestroyed())return;e._spzError=n}}var vW=NK;var YEn=y(x(),1);var WEn=y(x(),1);var pEn=y(x(),1);function UW(e){e=e??Q.EMPTY_OBJECT;let t=e.id,n=e.properties??{},i={};for(let o in n)if(n.hasOwnProperty(o)){let r=n[o];l(r.semantic)&&(i[r.semantic]=r)}this._id=t,this._name=e.name,this._description=e.description,this._properties=n,this._propertiesBySemantic=i,this._extras=He(e.extras,!0),this._extensions=He(e.extensions,!0)}UW.fromJson=function(e){e=e??Q.EMPTY_OBJECT;let t=e.id,n=e.class,i={};for(let o in n.properties)if(n.properties.hasOwnProperty(o)){let r=mp.fromJson({id:o,property:n.properties[o],enums:e.enums});i[o]=r}return new UW({id:t,name:n.name,description:n.description,properties:i,extras:n.extras,extensions:n.extensions})};Object.defineProperties(UW.prototype,{properties:{get:function(){return this._properties}},propertiesBySemantic:{get:function(){return this._propertiesBySemantic}},id:{get:function(){return this._id}},name:{get:function(){return this._name}},description:{get:function(){return this._description}},extras:{get:function(){return this._extras}},extensions:{get:function(){return this._extensions}}});UW.BATCH_TABLE_CLASS_NAME="_batchTable";var vh=UW;var _En=y(x(),1);var yEn=y(x(),1);function Gk(e){e=e??Q.EMPTY_OBJECT;let t=e.value,n=e.name;this._value=t,this._name=n,this._description=e.description,this._extras=He(e.extras,!0),this._extensions=He(e.extensions,!0)}Gk.fromJson=function(e){return new Gk({value:e.value,name:e.name,description:e.description,extras:e.extras,extensions:e.extensions})};Object.defineProperties(Gk.prototype,{value:{get:function(){return this._value}},name:{get:function(){return this._name}},description:{get:function(){return this._description}},extras:{get:function(){return this._extras}},extensions:{get:function(){return this._extensions}}});var DW=Gk;function Lk(e){e=e??Q.EMPTY_OBJECT;let t=e.id,n=e.values,i={},o={},r=n.length;for(let a=0;a<r;++a){let c=n[a];i[c.value]=c.name,o[c.name]=c.value}let s=e.valueType??Yt.UINT16;this._values=n,this._namesByValue=i,this._valuesByName=o,this._valueType=s,this._id=t,this._name=e.name,this._description=e.description,this._extras=He(e.extras,!0),this._extensions=He(e.extensions,!0)}Lk.fromJson=function(e){e=e??Q.EMPTY_OBJECT;let t=e.id,n=e.enum,i=n.values.map(function(o){return DW.fromJson(o)});return new Lk({id:t,values:i,valueType:Yt[n.valueType],name:n.name,description:n.description,extras:n.extras,extensions:n.extensions})};Object.defineProperties(Lk.prototype,{values:{get:function(){return this._values}},namesByValue:{get:function(){return this._namesByValue}},valuesByName:{get:function(){return this._valuesByName}},valueType:{get:function(){return this._valueType}},id:{get:function(){return this._id}},name:{get:function(){return this._name}},description:{get:function(){return this._description}},extras:{get:function(){return this._extras}},extensions:{get:function(){return this._extensions}}});var kW=Lk;function Wk(e){e=e??Q.EMPTY_OBJECT;let t=e.classes??{},n=e.enums??{};this._classes=t,this._enums=n,this._id=e.id,this._name=e.name,this._description=e.description,this._version=e.version,this._extras=He(e.extras,!0),this._extensions=He(e.extensions,!0)}Wk.fromJson=function(e){let t={};if(l(e.enums))for(let i in e.enums)e.enums.hasOwnProperty(i)&&(t[i]=kW.fromJson({id:i,enum:e.enums[i]}));let n={};if(l(e.classes))for(let i in e.classes)e.classes.hasOwnProperty(i)&&(n[i]=vh.fromJson({id:i,class:e.classes[i],enums:t}));return new Wk({id:e.id,name:e.name,description:e.description,version:e.version,classes:n,enums:t,extras:e.extras,extensions:e.extensions})};Object.defineProperties(Wk.prototype,{classes:{get:function(){return this._classes}},enums:{get:function(){return this._enums}},id:{get:function(){return this._id}},name:{get:function(){return this._name}},description:{get:function(){return this._description}},version:{get:function(){return this._version}},extras:{get:function(){return this._extras}},extensions:{get:function(){return this._extensions}}});var Xl=Wk;var XK=class extends Hi{constructor(t){super(),t=t??Q.EMPTY_OBJECT;let n=t.schema,i=t.resource,o=t.cacheKey;this._schema=l(n)?Xl.fromJson(n):void 0,this._resource=i,this._cacheKey=o,this._state=yt.UNLOADED,this._promise=void 0}get cacheKey(){return this._cacheKey}get schema(){return this._schema}async load(){return l(this._promise)?this._promise:l(this._schema)?(this._promise=Promise.resolve(this),this._promise):(this._promise=R5e(this),this._promise)}unload(){this._schema=void 0}};async function R5e(e){let t=e._resource;e._state=yt.LOADING;try{let n=await t.fetchJson();return e.isDestroyed()?void 0:(e._schema=Xl.fromJson(n),e._state=yt.READY,e)}catch(n){if(e.isDestroyed())return;e._state=yt.FAILED;let i=`Failed to load schema: ${t.url}`;throw e.getError(i,n)}}var x0=XK;var OEn=y(x(),1);var Tm={};function $S(e){return Hf(e.url)}function QW(e){let{byteOffset:t,byteLength:n}=e;if(_i(e,"EXT_meshopt_compression")){let i=e.extensions.EXT_meshopt_compression;t=i.byteOffset??0,n=i.byteLength}return`${t}-${t+n}`}function V5e(e,t){let n=t.byteOffset+e.byteOffset,{componentType:i,type:o,count:r}=e;return`${n}-${i}-${o}-${r}`}function yde(e,t){return`${$S(e)}-buffer-id-${t}`}function e_(e,t,n,i){if(l(e.uri)){let o=i.getDerivedResource({url:e.uri});return $S(o)}return yde(n,t)}function YK(e,t,n,i){let o=t.bufferView,r=e.bufferViews[o],s=r.buffer,a=e.buffers[s],c=e_(a,s,n,i),d=QW(r);return`${c}-range-${d}`}function xde(e,t,n,i){let r=e.bufferViews[0],s=r.buffer,a=e.buffers[s],c=e_(a,s,n,i),d=QW(r);return`${c}-range-${d}`}function Cde(e,t,n,i){let o=e.images[t],r=o.bufferView,s=o.uri;if(l(s)){let p=i.getDerivedResource({url:s});return $S(p)}let a=e.bufferViews[r],c=a.buffer,d=e.buffers[c],u=e_(d,c,n,i),h=QW(a);return`${u}-range-${h}`}function G5e(e,t){let n=Td.createSampler({gltf:e,textureInfo:t});return`${n.wrapS}-${n.wrapT}-${n.minificationFilter}-${n.magnificationFilter}`}Tm.getSchemaCacheKey=function(e){let{schema:t,resource:n}=e;return l(t)?`embedded-schema:${JSON.stringify(t)}`:`external-schema:${$S(n)}`};Tm.getExternalBufferCacheKey=function(e){e=e??Q.EMPTY_OBJECT;let{resource:t}=e;return`external-buffer:${$S(t)}`};Tm.getEmbeddedBufferCacheKey=function(e){e=e??Q.EMPTY_OBJECT;let{parentResource:t,bufferId:n}=e;return`embedded-buffer:${yde(t,n)}`};Tm.getGltfCacheKey=function(e){e=e??Q.EMPTY_OBJECT;let{gltfResource:t}=e;return`gltf:${$S(t)}`};Tm.getBufferViewCacheKey=function(e){e=e??Q.EMPTY_OBJECT;let{gltf:t,bufferViewId:n,gltfResource:i,baseResource:o}=e,r=t.bufferViews[n],s=r.buffer,a=t.buffers[s];_i(r,"EXT_meshopt_compression")&&(s=r.extensions.EXT_meshopt_compression.buffer);let c=e_(a,s,i,o),d=QW(r);return`buffer-view:${c}-range-${d}`};Tm.getDracoCacheKey=function(e){e=e??Q.EMPTY_OBJECT;let{gltf:t,draco:n,gltfResource:i,baseResource:o}=e;return`draco:${YK(t,n,i,o)}`};Tm.getSpzCacheKey=function(e){e=e??Q.EMPTY_OBJECT;let{gltf:t,primitive:n,gltfResource:i,baseResource:o}=e;return`spz:${xde(t,n,i,o)}`};Tm.getVertexBufferCacheKey=function(e){e=e??Q.EMPTY_OBJECT;let{gltf:t,gltfResource:n,baseResource:i,frameState:o,bufferViewId:r,draco:s,spz:a,attributeSemantic:c,dequantize:d=!1,loadBuffer:u=!1,loadTypedArray:h=!1}=e,p="";if(d&&(p+="-dequantize"),u&&(p+="-buffer",p+=`-context-${o.context.id}`),h&&(p+="-typed-array"),l(s))return`vertex-buffer:${YK(t,s,n,i)}-draco-${c}${p}`;if(a)return`vertex-buffer:${xde(t,a,n,i)}-spz-${c}${p}`;let A=t.bufferViews[r],f=A.buffer,b=t.buffers[f],C=e_(b,f,n,i),T=QW(A);return`vertex-buffer:${C}-range-${T}${p}`};Tm.getIndexBufferCacheKey=function(e){e=e??Q.EMPTY_OBJECT;let{gltf:t,accessorId:n,gltfResource:i,baseResource:o,frameState:r,draco:s,loadBuffer:a=!1,loadTypedArray:c=!1}=e,d="";if(a&&(d+="-buffer",d+=`-context-${r.context.id}`),c&&(d+="-typed-array"),l(s))return`index-buffer:${YK(t,s,i,o)}-draco${d}`;let u=t.accessors[n],h=u.bufferView,p=t.bufferViews[h],A=p.buffer,f=t.buffers[A],b=e_(f,A,i,o),C=V5e(u,p);return`index-buffer:${b}-accessor-${C}${d}`};Tm.getImageCacheKey=function(e){e=e??Q.EMPTY_OBJECT;let{gltf:t,imageId:n,gltfResource:i,baseResource:o}=e;return`image:${Cde(t,n,i,o)}`};Tm.getTextureCacheKey=function(e){e=e??Q.EMPTY_OBJECT;let{gltf:t,textureInfo:n,gltfResource:i,baseResource:o,supportedImageFormats:r,frameState:s}=e,a=n.index,c=Td.getImageIdFromTexture({gltf:t,textureId:a,supportedImageFormats:r}),d=Cde(t,c,i,o),u=G5e(t,n);return`texture:${d}-sampler-${u}-context-${s.context.id}`};var Yl=Tm;var JEn=y(x(),1);function OW(){this.geometryByteLength=0,this.texturesByteLength=0,this._geometrySizes={},this._textureSizes={}}OW.prototype.clear=function(){this.geometryByteLength=0,this.texturesByteLength=0,this._geometrySizes={},this._textureSizes={}};OW.prototype.addGeometryLoader=function(e){let t=e.cacheKey;if(this._geometrySizes.hasOwnProperty(t))return;this._geometrySizes[t]=0;let n=e.buffer,i=e.typedArray,o=0;l(n)&&(o+=n.sizeInBytes),l(i)&&(o+=i.byteLength),this.geometryByteLength+=o,this._geometrySizes[t]=o};OW.prototype.addTextureLoader=function(e){let t=e.cacheKey;if(this._textureSizes.hasOwnProperty(t))return;this._textureSizes[t]=0;let n=e.texture.sizeInBytes;this.texturesByteLength+=e.texture.sizeInBytes,this._textureSizes[t]=n};OW.prototype.removeLoader=function(e){let t=e.cacheKey,n=this._geometrySizes[t];delete this._geometrySizes[t],l(n)&&(this.geometryByteLength-=n);let i=this._textureSizes[t];delete this._textureSizes[t],l(i)&&(this.texturesByteLength-=i)};var zW=OW;function Yn(){}Yn.cacheEntries={};Yn.statistics=new zW;function L5e(e){this.referenceCount=1,this.resourceLoader=e,this._statisticsPromise=void 0}Yn.get=function(e){let t=Yn.cacheEntries[e];if(l(t))return++t.referenceCount,t.resourceLoader};Yn.add=function(e){let t=e.cacheKey;return Yn.cacheEntries[t]=new L5e(e),e};Yn.unload=function(e){let t=e.cacheKey,n=Yn.cacheEntries[t];--n.referenceCount,n.referenceCount===0&&(Yn.statistics.removeLoader(e),e.destroy(),delete Yn.cacheEntries[t])};Yn.getSchemaLoader=function(e){e=e??Q.EMPTY_OBJECT;let{schema:t,resource:n}=e,i=Yl.getSchemaCacheKey({schema:t,resource:n}),o=Yn.get(i);return l(o)?o:(o=new x0({schema:t,resource:n,cacheKey:i}),Yn.add(o))};Yn.getEmbeddedBufferLoader=function(e){e=e??Q.EMPTY_OBJECT;let{parentResource:t,bufferId:n,typedArray:i}=e,o=Yl.getEmbeddedBufferCacheKey({parentResource:t,bufferId:n}),r=Yn.get(o);return l(r)?r:(r=new dC({typedArray:i,cacheKey:o}),Yn.add(r))};Yn.getExternalBufferLoader=function(e){e=e??Q.EMPTY_OBJECT;let{resource:t}=e,n=Yl.getExternalBufferCacheKey({resource:t}),i=Yn.get(n);return l(i)?i:(i=new dC({resource:t,cacheKey:n}),Yn.add(i))};Yn.getGltfJsonLoader=function(e){e=e??Q.EMPTY_OBJECT;let{gltfResource:t,baseResource:n,typedArray:i,gltfJson:o}=e,r=Yl.getGltfCacheKey({gltfResource:t}),s=Yn.get(r);return l(s)?s:(s=new OS({resourceCache:Yn,gltfResource:t,baseResource:n,typedArray:i,gltfJson:o,cacheKey:r}),Yn.add(s))};Yn.getBufferViewLoader=function(e){e=e??Q.EMPTY_OBJECT;let{gltf:t,bufferViewId:n,gltfResource:i,baseResource:o}=e,r=Yl.getBufferViewCacheKey({gltf:t,bufferViewId:n,gltfResource:i,baseResource:o}),s=Yn.get(r);return l(s)?s:(s=new vS({resourceCache:Yn,gltf:t,bufferViewId:n,gltfResource:i,baseResource:o,cacheKey:r}),Yn.add(s))};Yn.getDracoLoader=function(e){e=e??Q.EMPTY_OBJECT;let{gltf:t,primitive:n,draco:i,gltfResource:o,baseResource:r}=e,s=Yl.getDracoCacheKey({gltf:t,draco:i,gltfResource:o,baseResource:r}),a=Yn.get(s);return l(a)?a:(a=new US({resourceCache:Yn,gltf:t,primitive:n,draco:i,gltfResource:o,baseResource:r,cacheKey:s}),Yn.add(a))};Yn.getSpzLoader=function(e){e=e??Q.EMPTY_OBJECT;let{gltf:t,primitive:n,spz:i,gltfResource:o,baseResource:r}=e,s=Yl.getSpzCacheKey({gltf:t,primitive:n,gltfResource:o,baseResource:r}),a=Yn.get(s);return l(a)?a:(a=new vW({resourceCache:Yn,gltf:t,primitive:n,spz:i,gltfResource:o,baseResource:r,cacheKey:s}),Yn.add(a))};Yn.getVertexBufferLoader=function(e){e=e??Q.EMPTY_OBJECT;let{gltf:t,gltfResource:n,baseResource:i,frameState:o,bufferViewId:r,primitive:s,draco:a,spz:c,attributeSemantic:d,accessorId:u,asynchronous:h=!0,dequantize:p=!1,loadBuffer:A=!1,loadTypedArray:f=!1}=e,b=Yl.getVertexBufferCacheKey({gltf:t,gltfResource:n,baseResource:i,frameState:o,bufferViewId:r,draco:a,spz:c,attributeSemantic:d,dequantize:p,loadBuffer:A,loadTypedArray:f}),C=Yn.get(b);return l(C)?C:(C=new jS({resourceCache:Yn,gltf:t,gltfResource:n,baseResource:i,bufferViewId:r,primitive:s,draco:a,spz:c,attributeSemantic:d,accessorId:u,cacheKey:b,asynchronous:h,dequantize:p,loadBuffer:A,loadTypedArray:f}),Yn.add(C))};Yn.getIndexBufferLoader=function(e){e=e??Q.EMPTY_OBJECT;let{gltf:t,accessorId:n,gltfResource:i,baseResource:o,frameState:r,primitive:s,draco:a,asynchronous:c=!0,loadBuffer:d=!1,loadTypedArray:u=!1}=e,h=Yl.getIndexBufferCacheKey({gltf:t,accessorId:n,gltfResource:i,baseResource:o,frameState:r,draco:a,loadBuffer:d,loadTypedArray:u}),p=Yn.get(h);return l(p)?p:(p=new kS({resourceCache:Yn,gltf:t,accessorId:n,gltfResource:i,baseResource:o,primitive:s,draco:a,cacheKey:h,asynchronous:c,loadBuffer:d,loadTypedArray:u}),Yn.add(p))};Yn.getImageLoader=function(e){e=e??Q.EMPTY_OBJECT;let{gltf:t,imageId:n,gltfResource:i,baseResource:o}=e,r=Yl.getImageCacheKey({gltf:t,imageId:n,gltfResource:i,baseResource:o}),s=Yn.get(r);return l(s)?s:(s=new DS({resourceCache:Yn,gltf:t,imageId:n,gltfResource:i,baseResource:o,cacheKey:r}),Yn.add(s))};Yn.getTextureLoader=function(e){e=e??Q.EMPTY_OBJECT;let{gltf:t,textureInfo:n,gltfResource:i,baseResource:o,supportedImageFormats:r,frameState:s,asynchronous:a=!0}=e,c=Yl.getTextureCacheKey({gltf:t,textureInfo:n,gltfResource:i,baseResource:o,supportedImageFormats:r,frameState:s}),d=Yn.get(c);return l(d)?d:(d=new KS({resourceCache:Yn,gltf:t,textureInfo:n,gltfResource:i,baseResource:o,supportedImageFormats:r,cacheKey:c,asynchronous:a}),Yn.add(d))};Yn.clearForSpecs=function(){let e=[jS,kS,US,KS,DS,vS,dC,x0,OS],t,n=Yn.cacheEntries,i=[];for(t in n)n.hasOwnProperty(t)&&i.push(n[t]);i.sort(function(r,s){let a=e.indexOf(r.resourceLoader.constructor),c=e.indexOf(s.resourceLoader.constructor);return a-c});let o=i.length;for(let r=0;r<o;++r){let s=i[r];t=s.resourceLoader.cacheKey,l(n[t])&&(s.resourceLoader.destroy(),delete n[t])}Yn.statistics.clear()};var Fi=Yn;function ic(e,t,n){this._resource=e,this._subtreeJson=void 0,this._bufferLoader=void 0,this._tileAvailability=void 0,this._contentAvailabilityBitstreams=[],this._childSubtreeAvailability=void 0,this._implicitCoordinates=n,this._subtreeLevels=t.subtreeLevels,this._subdivisionScheme=t.subdivisionScheme,this._branchingFactor=t.branchingFactor,this._metadata=void 0,this._tileMetadataTable=void 0,this._tilePropertyTableJson=void 0,this._contentMetadataTables=[],this._contentPropertyTableJsons=[],this._tileJumpBuffer=void 0,this._contentJumpBuffers=[],this._ready=!1}Object.defineProperties(ic.prototype,{ready:{get:function(){return this._ready}},metadata:{get:function(){return this._metadata}},tileMetadataTable:{get:function(){return this._tileMetadataTable}},tilePropertyTableJson:{get:function(){return this._tilePropertyTableJson}},contentMetadataTables:{get:function(){return this._contentMetadataTables}},contentPropertyTableJsons:{get:function(){return this._contentPropertyTableJsons}},implicitCoordinates:{get:function(){return this._implicitCoordinates}}});ic.prototype.tileIsAvailableAtIndex=function(e){return this._tileAvailability.getBit(e)};ic.prototype.tileIsAvailableAtCoordinates=function(e){let t=this.getTileIndex(e);return this.tileIsAvailableAtIndex(t)};ic.prototype.contentIsAvailableAtIndex=function(e,t){return t=t??0,this._contentAvailabilityBitstreams[t].getBit(e)};ic.prototype.contentIsAvailableAtCoordinates=function(e,t){let n=this.getTileIndex(e);return this.contentIsAvailableAtIndex(n,t)};ic.prototype.childSubtreeIsAvailableAtIndex=function(e){return this._childSubtreeAvailability.getBit(e)};ic.prototype.childSubtreeIsAvailableAtCoordinates=function(e){let t=this.getChildSubtreeIndex(e);return this.childSubtreeIsAvailableAtIndex(t)};ic.prototype.getLevelOffset=function(e){let t=this._branchingFactor;return(Math.pow(t,e)-1)/(t-1)};ic.prototype.getParentMortonIndex=function(e){let t=2;return this._subdivisionScheme===Ls.OCTREE&&(t=3),e>>t};ic.fromSubtreeJson=async function(e,t,n,i,o){let r=new ic(e,i,o),s;l(t)?s={json:t,binary:void 0}:s=W5e(n);let a=s.json;r._subtreeJson=a;let c;if(_i(a,"3DTILES_metadata"))c=a.extensions["3DTILES_metadata"];else if(l(a.tileMetadata)){let E=a.tileMetadata;c=a.propertyTables[E]}let d=[];if(l(a.contentMetadata)){let E=a.contentMetadata.length;for(let S=0;S<E;S++){let I=a.contentMetadata[S];d.push(a.propertyTables[I])}}let u,h=i.metadataSchema,p=a.subtreeMetadata;if(l(p)){let E=p.class,S=h.classes[E];u=new IW({subtreeMetadata:p,class:S})}r._metadata=u,r._tilePropertyTableJson=c,r._contentPropertyTableJsons=d;let A={constant:0};a.contentAvailabilityHeaders=[],_i(a,"3DTILES_multiple_contents")?a.contentAvailabilityHeaders=a.extensions["3DTILES_multiple_contents"].contentAvailability:Array.isArray(a.contentAvailability)?a.contentAvailabilityHeaders=a.contentAvailability:a.contentAvailabilityHeaders.push(a.contentAvailability??A);let f=F5e(a.buffers),b=B5e(a.bufferViews,f);w5e(a,b),l(c)&&Tde(c,b);for(let E=0;E<d.length;E++){let S=d[E];Tde(S,b)}let C=await N5e(r,f,s.binary),T=X5e(b,C);return Y5e(r,a,i,T),l(c)&&(M5e(r,i,T),U5e(r)),v5e(r,i,T),D5e(r),r._ready=!0,r};function W5e(e){let n=new DataView(e.buffer,e.byteOffset),i=8,o=n.getUint32(i,!0);i+=8;let r=n.getUint32(i,!0);i+=8;let s=Zr(e,i,o);i+=o;let a=e.subarray(i,i+r);return{json:s,binary:a}}function F5e(e){e=l(e)?e:[];for(let t=0;t<e.length;t++){let n=e[t];n.isExternal=l(n.uri),n.isActive=!1}return e}function B5e(e,t){e=l(e)?e:[];for(let n=0;n<e.length;n++){let i=e[n],o=t[i.buffer];i.bufferHeader=o,i.isActive=!1}return e}function w5e(e,t){let n,i=e.tileAvailability;l(i.bitstream)?n=t[i.bitstream]:l(i.bufferView)&&(n=t[i.bufferView]),l(n)&&(n.isActive=!0,n.bufferHeader.isActive=!0);let o=e.contentAvailabilityHeaders;for(let s=0;s<o.length;s++)n=void 0,l(o[s].bitstream)?n=t[o[s].bitstream]:l(o[s].bufferView)&&(n=t[o[s].bufferView]),l(n)&&(n.isActive=!0,n.bufferHeader.isActive=!0);n=void 0;let r=e.childSubtreeAvailability;l(r.bitstream)?n=t[r.bitstream]:l(r.bufferView)&&(n=t[r.bufferView]),l(n)&&(n.isActive=!0,n.bufferHeader.isActive=!0)}function Tde(e,t){let n=e.properties,i;for(let o in n)if(n.hasOwnProperty(o)){let r=n[o],s=r.values??r.bufferView;i=t[s],i.isActive=!0,i.bufferHeader.isActive=!0;let a=r.stringOffsets??r.stringOffsetBufferView;l(a)&&(i=t[a],i.isActive=!0,i.bufferHeader.isActive=!0);let c=r.arrayOffsets??r.arrayOffsetBufferView;l(c)&&(i=t[c],i.isActive=!0,i.bufferHeader.isActive=!0)}}function N5e(e,t,n){let i=[];for(let o=0;o<t.length;o++){let r=t[o];if(!r.isActive)i.push(Promise.resolve(void 0));else if(r.isExternal){let s=P5e(e,r);i.push(s)}else i.push(Promise.resolve(n))}return Promise.all(i).then(function(o){let r={};for(let s=0;s<o.length;s++){let a=o[s];l(a)&&(r[s]=a)}return r})}async function P5e(e,t){let i=e._resource.getDerivedResource({url:t.uri}),o=Fi.getExternalBufferLoader({resource:i});e._bufferLoader=o;try{await o.load()}catch(r){if(o.isDestroyed())return;throw r}return o.typedArray}function X5e(e,t){let n={};for(let i=0;i<e.length;i++){let o=e[i];if(!o.isActive)continue;let r=o.byteOffset,s=r+o.byteLength,c=t[o.buffer].subarray(r,s);n[i]=c}return n}function Y5e(e,t,n,i){let o=n.branchingFactor,r=n.subtreeLevels,s=(Math.pow(o,r)-1)/(o-1),a=Math.pow(o,r),c=_i(t,"3DTILES_metadata"),d=l(e._tilePropertyTableJson),u=c||d;e._tileAvailability=MK(t.tileAvailability,i,s,u);let h=e._contentPropertyTableJsons.length>0;u=u||h;for(let p=0;p<t.contentAvailabilityHeaders.length;p++){let A=MK(t.contentAvailabilityHeaders[p],i,s,u);e._contentAvailabilityBitstreams.push(A)}e._childSubtreeAvailability=MK(t.childSubtreeAvailability,i,a)}function MK(e,t,n,i){if(l(e.constant))return new YS({constant:!!e.constant,lengthBits:n,availableCount:e.availableCount});let o;return l(e.bitstream)?o=t[e.bitstream]:l(e.bufferView)&&(o=t[e.bufferView]),new YS({bitstream:o,lengthBits:n,availableCount:e.availableCount,computeAvailableCountEnabled:i})}function M5e(e,t,n){let i=e._tilePropertyTableJson,o=e._tileAvailability.availableCount,r=t.metadataSchema,s=i.class,a=r.classes[s];e._tileMetadataTable=new xm({class:a,count:o,properties:i.properties,bufferViews:n})}function v5e(e,t,n){let i=e._contentPropertyTableJsons,o=e._contentAvailabilityBitstreams,r=t.metadataSchema,s=e._contentMetadataTables;for(let a=0;a<i.length;a++){let c=i[a],u=o[a].availableCount,h=c.class,p=r.classes[h],A=new xm({class:p,count:u,properties:c.properties,bufferViews:n});s.push(A)}}function Ede(e){let t=0,n=e.lengthBits,i=e.availableCount,o;i<256?o=new Uint8Array(n):i<65536?o=new Uint16Array(n):o=new Uint32Array(n);for(let r=0;r<e.lengthBits;r++)e.getBit(r)&&(o[r]=t,t++);return o}function U5e(e){let t=Ede(e._tileAvailability);e._tileJumpBuffer=t}function D5e(e){let t=e._contentJumpBuffers,n=e._contentAvailabilityBitstreams;for(let i=0;i<n.length;i++){let o=n[i],r=Ede(o);t.push(r)}}ic.prototype.getTileIndex=function(e){let t=e.level-this._implicitCoordinates.level;if(t<0||this._subtreeLevels<=t)throw new me("level is out of bounds for this subtree");return e.getSubtreeCoordinates().getOffsetCoordinates(e).tileIndex};ic.prototype.getChildSubtreeIndex=function(e){if(e.level-this._implicitCoordinates.level!==this._implicitCoordinates.subtreeLevels)throw new me("level is out of bounds for this subtree");return e.getParentSubtreeCoordinates().getOffsetCoordinates(e).mortonIndex};function k5e(e,t){if(!l(e._tileMetadataTable))return;let n=e.getTileIndex(t);if(e._tileAvailability.getBit(n))return e._tileJumpBuffer[n]}function Q5e(e,t,n){let i=e._contentMetadataTables;if(!l(i))return;let o=i[n];if(!l(o))return;let r=e._contentAvailabilityBitstreams[n],s=e.getTileIndex(t);if(r.getBit(s))return e._contentJumpBuffers[n][s]}ic.prototype.getTileMetadataView=function(e){let t=k5e(this,e);if(!l(t))return;let n=this._tileMetadataTable;return new MS({class:n.class,metadataTable:n,entityId:t,propertyTableJson:this._tilePropertyTableJson})};ic.prototype.getContentMetadataView=function(e,t){let n=Q5e(this,e,t);if(!l(n))return;let i=this._contentMetadataTables[t],o=this._contentPropertyTableJsons[t];return new MS({class:i.class,metadataTable:i,entityId:n,contentIndex:t,propertyTableJson:o})};ic.prototype.isDestroyed=function(){return!1};ic.prototype.destroy=function(){return l(this._bufferLoader)&&Fi.unload(this._bufferLoader),he(this)};var tg=ic;var ISn=y(x(),1),O5e={ID:"ID",NAME:"NAME",DESCRIPTION:"DESCRIPTION",TILESET_TILE_COUNT:"TILESET_TILE_COUNT",TILE_BOUNDING_BOX:"TILE_BOUNDING_BOX",TILE_BOUNDING_REGION:"TILE_BOUNDING_REGION",TILE_BOUNDING_SPHERE:"TILE_BOUNDING_SPHERE",TILE_MINIMUM_HEIGHT:"TILE_MINIMUM_HEIGHT",TILE_MAXIMUM_HEIGHT:"TILE_MAXIMUM_HEIGHT",TILE_HORIZON_OCCLUSION_POINT:"TILE_HORIZON_OCCLUSION_POINT",TILE_GEOMETRIC_ERROR:"TILE_GEOMETRIC_ERROR",CONTENT_BOUNDING_BOX:"CONTENT_BOUNDING_BOX",CONTENT_BOUNDING_REGION:"CONTENT_BOUNDING_REGION",CONTENT_BOUNDING_SPHERE:"CONTENT_BOUNDING_SPHERE",CONTENT_MINIMUM_HEIGHT:"CONTENT_MINIMUM_HEIGHT",CONTENT_MAXIMUM_HEIGHT:"CONTENT_MAXIMUM_HEIGHT",CONTENT_HORIZON_OCCLUSION_POINT:"CONTENT_HORIZON_OCCLUSION_POINT"},Em=Object.freeze(O5e);var VSn=y(x(),1);var C0={};C0.parseAllBoundingVolumeSemantics=function(e,t){return{boundingVolume:C0.parseBoundingVolumeSemantic(e,t),minimumHeight:C0._parseMinimumHeight(e,t),maximumHeight:C0._parseMaximumHeight(e,t)}};C0.parseBoundingVolumeSemantic=function(e,t){let n=`${e}_BOUNDING_BOX`,i=t.getPropertyBySemantic(n);if(l(i))return{box:i};let o=`${e}_BOUNDING_REGION`,r=t.getPropertyBySemantic(o);if(l(r))return{region:r};let s=`${e}_BOUNDING_SPHERE`,a=t.getPropertyBySemantic(s);if(l(a))return{sphere:a}};C0._parseMinimumHeight=function(e,t){let n=`${e}_MINIMUM_HEIGHT`;return t.getPropertyBySemantic(n)};C0._parseMaximumHeight=function(e,t){let n=`${e}_MAXIMUM_HEIGHT`;return t.getPropertyBySemantic(n)};var T0=C0;function Ml(e,t,n){let i=t.implicitTileset,o=t.implicitCoordinates;this._implicitTileset=i,this._implicitCoordinates=o,this._implicitSubtree=void 0,this._tileset=e,this._tile=t,this._resource=n,this._metadata=void 0,this.featurePropertiesDirty=!1,this._group=void 0;let r=o.getTemplateValues(),s=i.subtreeUriTemplate.getDerivedResource({templateValues:r});this._url=s.getUrlComponent(!0),this._ready=!1}Object.defineProperties(Ml.prototype,{featuresLength:{get:function(){return 0}},pointsLength:{get:function(){return 0}},trianglesLength:{get:function(){return 0}},geometryByteLength:{get:function(){return 0}},texturesByteLength:{get:function(){return 0}},batchTableByteLength:{get:function(){return 0}},innerContents:{get:function(){}},ready:{get:function(){return this._ready}},tileset:{get:function(){return this._tileset}},tile:{get:function(){return this._tile}},url:{get:function(){return this._url}},metadata:{get:function(){},set:function(){}},batchTable:{get:function(){}},group:{get:function(){return this._group},set:function(e){this._group=e}}});Ml.fromSubtreeJson=async function(e,t,n,i,o,r){r=r??0;let s;l(o)&&(s=new Uint8Array(o,r));let a=t.implicitTileset,c=t.implicitCoordinates,d=await tg.fromSubtreeJson(n,i,s,a,c),u=new Ml(e,t,n);return u._implicitSubtree=d,z5e(u,d),u._ready=!0,u};function z5e(e,t){let n=e._tile,i=e._implicitCoordinates.childIndex,o=J5e(e,t,n,i),r=e._tileset.statistics;n.children.push(o.rootTile),r.numberOfTilesTotal++;let s=H5e(e,t,o.bottomRow);for(let a=0;a<s.length;a++){let c=s[a],d=c.tile,u=oQe(e,d,c.childIndex);d.children.push(u),r.numberOfTilesTotal++}}function H5e(e,t,n){let i=[],o=e._implicitTileset.branchingFactor;for(let r=0;r<n.length;r++){let s=n[r];if(l(s))for(let a=0;a<o;a++){let c=r*o+a;t.childSubtreeIsAvailableAtIndex(c)&&i.push({tile:s,childIndex:a})}}return i}function J5e(e,t,n,i){let s=Sde(e,t,n,i,0,!0),a=e._tileset.statistics,c=[s],d=[],u=e._implicitTileset;for(let h=1;h<u.subtreeLevels;h++){let p=t.getLevelOffset(h),A=u.branchingFactor*c.length;for(let f=0;f<A;f++){let b=p+f;if(!t.tileIsAvailableAtIndex(b)){d.push(void 0);continue}let C=t.getParentMortonIndex(f),T=c[C],E=f%u.branchingFactor,S=Sde(e,t,T,E,b);T.children.push(S),a.numberOfTilesTotal++,d.push(S)}c=d,d=[]}return{rootTile:s,bottomRow:c}}function _de(e,t,n){let i=Em.TILE_GEOMETRIC_ERROR;return l(e)&&e.hasPropertyBySemantic(i)?e.getPropertyBySemantic(i):t.geometricError/Math.pow(2,n.level)}function Sde(e,t,n,i,o,r){let s=e._implicitTileset,a;r??!1?a=n.implicitCoordinates:a=n.implicitCoordinates.getChildCoordinates(i);let c,d;l(t.tilePropertyTableJson)&&(c=t.getTileMetadataView(a),d=T0.parseAllBoundingVolumeSemantics("TILE",c));let h=t.contentPropertyTableJsons.length,p=!1;for(let R=0;R<h;R++)if(t.contentIsAvailableAtCoordinates(a,R)){p=!0;break}let A=q5e(s,a,i,r,n,d),f=[];for(let R=0;R<s.contentCount;R++){if(!t.contentIsAvailableAtIndex(o,R))continue;let B={uri:s.contentUriTemplates[R].getDerivedResource({templateValues:a.getTemplateValues()}).url},N;if(t.contentPropertyTableJsons.length>0){let g=t.getContentMetadataView(a,R);N=T0.parseAllBoundingVolumeSemantics("CONTENT",g)}let P=$5e(A,N);l(P)&&(B.boundingVolume=P),f.push(Ft(B,s.contentHeaders[R]))}let b=_de(c,s,a),C={boundingVolume:A,geometricError:b,refine:s.refine,contents:f},T=!0,E=He(s.tileHeader,T);delete E.boundingVolume,delete E.transform,delete E.metadata;let S=Ft(C,E,T),I=Gde(e,s.baseResource,S,n);return I.implicitCoordinates=a,I.implicitSubtree=t,I.metadata=c,I.hasImplicitContentMetadata=p,I}function Fk(e,t){return l(e)&&l(t)&&(l(t.minimumHeight)||l(t.maximumHeight))&&(_i(e,"3DTILES_bounding_volume_S2")||l(e.region))}function UK(e,t){l(t)&&(_i(e,"3DTILES_bounding_volume_S2")?j5e(e.extensions["3DTILES_bounding_volume_S2"],t.minimumHeight,t.maximumHeight):l(e.region)&&K5e(e.region,t.minimumHeight,t.maximumHeight))}function K5e(e,t,n){l(t)&&(e[4]=t),l(n)&&(e[5]=n)}function j5e(e,t,n){l(t)&&(e.minimumHeight=t),l(n)&&(e.maximumHeight=n)}function q5e(e,t,n,i,o,r){let s;return!l(r)||!l(r.boundingVolume)||!Fk(r.boundingVolume,r)&&Fk(e.boundingVolume,r)?s=Ide(e,t,n,i??!1,o):s=r.boundingVolume,UK(s,r),s}function $5e(e,t){let n;return l(t)&&(n=t.boundingVolume),Fk(n,t)?UK(n,t):Fk(e,t)&&(n=He(e,!0),UK(n,t)),n}function Ide(e,t,n,i,o){let r=e.boundingVolume;return _i(r,"3DTILES_bounding_volume_S2")?Zde(i,o,n,t.level,t.x,t.y,t.z):l(r.region)?{region:Vde(r.region,t.level,t.x,t.y,t.z)}:{box:Rde(r.box,t.level,t.x,t.y,t.z)}}function Zde(e,t,n,i,o,r,s){let a=t._boundingVolume;if(e)return{extensions:{"3DTILES_bounding_volume_S2":{token:JA.getTokenFromId(a.s2Cell._cellId),minimumHeight:a.minimumHeight,maximumHeight:a.maximumHeight}}};let c=Number(t._boundingVolume.s2Cell._cellId>>BigInt(61)),d=c%2===0?PS.encode2D(i,o,r):PS.encode2D(i,r,o),u=JA.fromFacePositionLevel(c,BigInt(d),i),h,p;if(l(s)){let A=(a.maximumHeight+a.minimumHeight)/2;h=n<4?a.minimumHeight:A,p=n<4?A:a.maximumHeight}else h=a.minimumHeight,p=a.maximumHeight;return{extensions:{"3DTILES_bounding_volume_S2":{token:JA.getTokenFromId(u._cellId),minimumHeight:h,maximumHeight:p}}}}var eQe=new m,tQe=new m,vK=new m,nQe=new $;function Rde(e,t,n,i,o){if(t===0)return e;let r=m.unpack(e,0,tQe),s=$.unpack(e,3,nQe),a=Math.pow(2,-t),c=-1+(2*n+1)*a,d=-1+(2*i+1)*a,u=0,h=m.fromElements(a,a,1,eQe);l(o)&&(u=-1+(2*o+1)*a,h.z=a);let p=m.fromElements(c,d,u,vK);p=$.multiplyByVector(s,p,vK),p=m.add(p,r,vK);let A=$.clone(s);A=$.multiplyByScale(A,h,A);let f=new Array(12);return m.pack(p,f),$.pack(A,f,3),f}var iQe=new de;function Vde(e,t,n,i,o){if(t===0)return e.slice();let r=de.unpack(e,0,iQe),s=e[4],a=e[5],c=Math.pow(2,-t),d=c*r.width,u=L.negativePiToPi(r.west+n*d),h=L.negativePiToPi(u+d),p=c*r.height,A=L.negativePiToPi(r.south+i*p),f=L.negativePiToPi(A+p),b=s,C=a;if(l(o)){let T=c*(a-s);b+=o*T,C=b+T}return[u,A,h,f,b,C]}function oQe(e,t,n){let i=e._implicitTileset,o=t.implicitCoordinates.getChildCoordinates(n),r=Ide(i,o,n,!1,t),s=_de(void 0,i,o),a=i.subtreeUriTemplate.getDerivedResource({templateValues:o.getTemplateValues()}).url,c={boundingVolume:r,geometricError:s,refine:i.refine,contents:[{uri:a}]},d=Gde(e,i.baseResource,c,t);return d.implicitTileset=i,d.implicitCoordinates=o,d}function Gde(e,t,n,i){let o=e._tile.constructor;return new o(e._tileset,t,n,i)}Ml.prototype.hasProperty=function(e,t){return!1};Ml.prototype.getFeature=function(e){};Ml.prototype.applyDebugSettings=function(e,t){};Ml.prototype.applyStyle=function(e){};Ml.prototype.update=function(e,t){};Ml.prototype.pick=function(e,t,n){};Ml.prototype.isDestroyed=function(){return!1};Ml.prototype.destroy=function(){return this._implicitSubtree=this._implicitSubtree&&this._implicitSubtree.destroy(),he(this)};Ml._deriveBoundingBox=Rde;Ml._deriveBoundingRegion=Vde;Ml._deriveBoundingVolumeS2=Zde;var t_=Ml;var vKn=y(x(),1);var zSn=y(x(),1),rQe={NONE:0,REPEAT:1,MIRRORED_REPEAT:2},Ed=Object.freeze(rQe);var LKn=y(x(),1);var g_n=y(x(),1);var jSn=y(x(),1);function n_(e,t){this._distance=t,this._normal=new Lde(e,this),this.onChangeCallback=void 0,this.index=-1}Object.defineProperties(n_.prototype,{distance:{get:function(){return this._distance},set:function(e){l(this.onChangeCallback)&&e!==this._distance&&this.onChangeCallback(this.index),this._distance=e}},normal:{get:function(){return this._normal},set:function(e){l(this.onChangeCallback)&&!m.equals(this._normal._cartesian3,e)&&this.onChangeCallback(this.index),m.clone(e,this._normal._cartesian3)}}});n_.fromPlane=function(e,t){return l(t)?(t.normal=e.normal,t.distance=e.distance):t=new n_(e.normal,e.distance),t};n_.clone=function(e,t){return l(t)?(t.normal=e.normal,t.distance=e.distance,t):new n_(e.normal,e.distance)};function Lde(e,t){this._clippingPlane=t,this._cartesian3=m.clone(e)}Object.defineProperties(Lde.prototype,{x:{get:function(){return this._cartesian3.x},set:function(e){l(this._clippingPlane.onChangeCallback)&&e!==this._cartesian3.x&&this._clippingPlane.onChangeCallback(this._clippingPlane.index),this._cartesian3.x=e}},y:{get:function(){return this._cartesian3.y},set:function(e){l(this._clippingPlane.onChangeCallback)&&e!==this._cartesian3.y&&this._clippingPlane.onChangeCallback(this._clippingPlane.index),this._cartesian3.y=e}},z:{get:function(){return this._cartesian3.z},set:function(e){l(this._clippingPlane.onChangeCallback)&&e!==this._cartesian3.z&&this._clippingPlane.onChangeCallback(this._clippingPlane.index),this._cartesian3.z=e}}});var zs=n_;function Jc(e){e=e??Q.EMPTY_OBJECT,this._planes=[],this._dirtyIndex=-1,this._multipleDirtyPlanes=!1,this._enabled=e.enabled??!0,this.modelMatrix=F.clone(e.modelMatrix??F.IDENTITY),this.edgeColor=U.clone(e.edgeColor??U.WHITE),this.edgeWidth=e.edgeWidth??0,this.planeAdded=new xe,this.planeRemoved=new xe,this._owner=void 0;let t=e.unionClippingRegions??!1;this._unionClippingRegions=t,this._testIntersection=t?Nde:Pde,this._uint8View=void 0,this._float32View=void 0,this._clippingPlanesTexture=void 0;let n=e.planes;if(l(n)){let i=n.length;for(let o=0;o<i;++o)this.add(n[o])}}function Nde(e){return e===qt.OUTSIDE}function Pde(e){return e===qt.INSIDE}Object.defineProperties(Jc.prototype,{length:{get:function(){return this._planes.length}},unionClippingRegions:{get:function(){return this._unionClippingRegions},set:function(e){this._unionClippingRegions!==e&&(this._unionClippingRegions=e,this._testIntersection=e?Nde:Pde)}},enabled:{get:function(){return this._enabled},set:function(e){this._enabled!==e&&(this._enabled=e)}},texture:{get:function(){return this._clippingPlanesTexture}},owner:{get:function(){return this._owner}},clippingPlanesState:{get:function(){return this._unionClippingRegions?this._planes.length:-this._planes.length}}});function Wde(e,t){e._multipleDirtyPlanes=e._multipleDirtyPlanes||e._dirtyIndex!==-1&&e._dirtyIndex!==t,e._dirtyIndex=t}Jc.prototype.add=function(e){let t=this._planes.length,n=this;e.onChangeCallback=function(i){Wde(n,i)},e.index=t,Wde(this,t),this._planes.push(e),this.planeAdded.raiseEvent(e,t)};Jc.prototype.get=function(e){return this._planes[e]};function Xde(e,t){let n=e.length;for(let i=0;i<n;++i)if(dn.equals(e[i],t))return i;return-1}Jc.prototype.contains=function(e){return Xde(this._planes,e)!==-1};Jc.prototype.remove=function(e){let t=this._planes,n=Xde(t,e);if(n===-1)return!1;e instanceof zs&&(e.onChangeCallback=void 0,e.index=-1);let i=t.length-1;for(let o=n;o<i;++o){let r=t[o+1];t[o]=r,r instanceof zs&&(r.index=o)}return this._multipleDirtyPlanes=!0,t.length=i,this.planeRemoved.raiseEvent(e,n),!0};Jc.prototype.removeAll=function(){let e=this._planes,t=e.length;for(let n=0;n<t;++n){let i=e[n];i instanceof zs&&(i.onChangeCallback=void 0,i.index=-1),this.planeRemoved.raiseEvent(i,n)}this._multipleDirtyPlanes=!0,this._planes=[]};var sQe=new re,aQe=new re;function Fde(e,t,n){let i=e._uint8View,o=e._planes,r=0;for(let s=t;s<n;++s){let a=o[s],c=on.octEncodeToCartesian4(a.normal,aQe);i[r]=c.x,i[r+1]=c.y,i[r+2]=c.z,i[r+3]=c.w;let d=re.packFloat(a.distance,sQe);i[r+4]=d.x,i[r+5]=d.y,i[r+6]=d.z,i[r+7]=d.w,r+=8}}function Bde(e,t,n){let i=e._float32View,o=e._planes,r=0;for(let s=t;s<n;++s){let a=o[s],c=a.normal;i[r]=c.x,i[r+1]=c.y,i[r+2]=c.z,i[r+3]=a.distance,r+=4}}function Yde(e,t){let n=Bt.maximumTextureSize;return t.x=Math.min(e,n),t.y=Math.ceil(e/t.x),t}var cQe=new M;Jc.prototype.update=function(e){let t=this._clippingPlanesTexture,n=e.context,i=Jc.useFloatTexture(n),o=i?this.length:this.length*2;if(l(t)){let s=t.width*t.height;(s<o||o<.25*s)&&(t.destroy(),t=void 0,this._clippingPlanesTexture=void 0)}if(this.length===0)return;if(!l(t)){let s=Yde(o,cQe);s.y*=2,i?(t=new Lt({context:n,width:s.x,height:s.y,pixelFormat:Ke.RGBA,pixelDatatype:Oe.FLOAT,sampler:Ht.NEAREST,flipY:!1}),this._float32View=new Float32Array(s.x*s.y*4)):(t=new Lt({context:n,width:s.x,height:s.y,pixelFormat:Ke.RGBA,pixelDatatype:Oe.UNSIGNED_BYTE,sampler:Ht.NEAREST,flipY:!1}),this._uint8View=new Uint8Array(s.x*s.y*4)),this._clippingPlanesTexture=t,this._multipleDirtyPlanes=!0}let r=this._dirtyIndex;if(!(!this._multipleDirtyPlanes&&r===-1)){if(this._multipleDirtyPlanes)i?(Bde(this,0,this._planes.length),t.copyFrom({source:{width:t.width,height:t.height,arrayBufferView:this._float32View}})):(Fde(this,0,this._planes.length),t.copyFrom({source:{width:t.width,height:t.height,arrayBufferView:this._uint8View}}));else{let s=0,a=0;i?(a=Math.floor(r/t.width),s=Math.floor(r-a*t.width),Bde(this,r,r+1),t.copyFrom({source:{width:1,height:1,arrayBufferView:this._float32View},xOffset:s,yOffset:a})):(a=Math.floor(r*2/t.width),s=Math.floor(r*2-a*t.width),Fde(this,r,r+1),t.copyFrom({source:{width:2,height:1,arrayBufferView:this._uint8View},xOffset:s,yOffset:a}))}this._multipleDirtyPlanes=!1,this._dirtyIndex=-1}};var lQe=new F,wde=new dn(m.UNIT_X,0);Jc.prototype.computeIntersectionWithBoundingVolume=function(e,t){let n=this._planes,i=n.length,o=this.modelMatrix;l(t)&&(o=F.multiply(t,o,lQe));let r=qt.INSIDE;!this.unionClippingRegions&&i>0&&(r=qt.OUTSIDE);for(let s=0;s<i;++s){let a=n[s];dn.transform(a,o,wde);let c=e.intersectPlane(wde);if(c===qt.INTERSECTING)r=c;else if(this._testIntersection(c))return c}return r};Jc.setOwner=function(e,t,n){e!==t[n]&&(t[n]=t[n]&&t[n].destroy(),l(e)&&(e._owner=t,t[n]=e))};Jc.useFloatTexture=function(e){return e.floatingPointTexture};Jc.getTextureResolution=function(e,t,n){let i=e.texture;if(l(i))return n.x=i.width,n.y=i.height,n;let o=Jc.useFloatTexture(t)?e.length:e.length*2,r=Yde(o,n);return r.y*=2,r};Jc.prototype.isDestroyed=function(){return!1};Jc.prototype.destroy=function(){return this._clippingPlanesTexture=this._clippingPlanesTexture&&this._clippingPlanesTexture.destroy(),he(this)};var ls=Jc;var ZZn=y(x(),1);var nZn=y(x(),1);var zIn=y(x(),1);var cIn=y(x(),1);var B_n=y(x(),1);var y_n=y(x(),1);function QK(e,t,n=2){let i=t&&t.length,o=i?t[0]*n:e.length,r=vde(e,0,o,n,!0),s=[];if(!r||r.next===r.prev)return s;let a,c,d;if(i&&(r=fQe(e,t,r,n)),e.length>80*n){a=1/0,c=1/0;let u=-1/0,h=-1/0;for(let p=n;p<o;p+=n){let A=e[p],f=e[p+1];A<a&&(a=A),f<c&&(c=f),A>u&&(u=A),f>h&&(h=f)}d=Math.max(u-a,h-c),d=d!==0?32767/d:0}return HW(r,s,n,a,c,d,0),s}function vde(e,t,n,i,o){let r;if(o===_Qe(e,t,n,i)>0)for(let s=t;s<n;s+=i)r=Mde(s/i|0,e[s],e[s+1],r);else for(let s=n-i;s>=t;s-=i)r=Mde(s/i|0,e[s],e[s+1],r);return r&&Nk(r,r.next)&&(KW(r),r=r.next),r}function bC(e,t){if(!e)return e;t||(t=e);let n=e,i;do if(i=!1,!n.steiner&&(Nk(n,n.next)||ds(n.prev,n,n.next)===0)){if(KW(n),n=t=n.prev,n===n.next)break;i=!0}else n=n.next;while(i||n!==t);return t}function HW(e,t,n,i,o,r,s){if(!e)return;!s&&r&&yQe(e,i,o,r);let a=e;for(;e.prev!==e.next;){let c=e.prev,d=e.next;if(r?uQe(e,i,o,r):dQe(e)){t.push(c.i,e.i,d.i),KW(e),e=d.next,a=d.next;continue}if(e=d,e===a){s?s===1?(e=mQe(bC(e),t),HW(e,t,n,i,o,r,2)):s===2&&hQe(e,t,n,i,o,r):HW(bC(e),t,n,i,o,r,1);break}}}function dQe(e){let t=e.prev,n=e,i=e.next;if(ds(t,n,i)>=0)return!1;let o=t.x,r=n.x,s=i.x,a=t.y,c=n.y,d=i.y,u=o<r?o<s?o:s:r<s?r:s,h=a<c?a<d?a:d:c<d?c:d,p=o>r?o>s?o:s:r>s?r:s,A=a>c?a>d?a:d:c>d?c:d,f=i.next;for(;f!==t;){if(f.x>=u&&f.x<=p&&f.y>=h&&f.y<=A&&i_(o,a,r,c,s,d,f.x,f.y)&&ds(f.prev,f,f.next)>=0)return!1;f=f.next}return!0}function uQe(e,t,n,i){let o=e.prev,r=e,s=e.next;if(ds(o,r,s)>=0)return!1;let a=o.x,c=r.x,d=s.x,u=o.y,h=r.y,p=s.y,A=a<c?a<d?a:d:c<d?c:d,f=u<h?u<p?u:p:h<p?h:p,b=a>c?a>d?a:d:c>d?c:d,C=u>h?u>p?u:p:h>p?h:p,T=DK(A,f,t,n,i),E=DK(b,C,t,n,i),S=e.prevZ,I=e.nextZ;for(;S&&S.z>=T&&I&&I.z<=E;){if(S.x>=A&&S.x<=b&&S.y>=f&&S.y<=C&&S!==o&&S!==s&&i_(a,u,c,h,d,p,S.x,S.y)&&ds(S.prev,S,S.next)>=0||(S=S.prevZ,I.x>=A&&I.x<=b&&I.y>=f&&I.y<=C&&I!==o&&I!==s&&i_(a,u,c,h,d,p,I.x,I.y)&&ds(I.prev,I,I.next)>=0))return!1;I=I.nextZ}for(;S&&S.z>=T;){if(S.x>=A&&S.x<=b&&S.y>=f&&S.y<=C&&S!==o&&S!==s&&i_(a,u,c,h,d,p,S.x,S.y)&&ds(S.prev,S,S.next)>=0)return!1;S=S.prevZ}for(;I&&I.z<=E;){if(I.x>=A&&I.x<=b&&I.y>=f&&I.y<=C&&I!==o&&I!==s&&i_(a,u,c,h,d,p,I.x,I.y)&&ds(I.prev,I,I.next)>=0)return!1;I=I.nextZ}return!0}function mQe(e,t){let n=e;do{let i=n.prev,o=n.next.next;!Nk(i,o)&&Ude(i,n,n.next,o)&&JW(i,o)&&JW(o,i)&&(t.push(i.i,n.i,o.i),KW(n),KW(n.next),n=e=o),n=n.next}while(n!==e);return bC(n)}function hQe(e,t,n,i,o,r){let s=e;do{let a=s.next.next;for(;a!==s.prev;){if(s.i!==a.i&&TQe(s,a)){let c=Dde(s,a);s=bC(s,s.next),c=bC(c,c.next),HW(s,t,n,i,o,r,0),HW(c,t,n,i,o,r,0);return}a=a.next}s=s.next}while(s!==e)}function fQe(e,t,n,i){let o=[];for(let r=0,s=t.length;r<s;r++){let a=t[r]*i,c=r<s-1?t[r+1]*i:e.length,d=vde(e,a,c,i,!1);d===d.next&&(d.steiner=!0),o.push(CQe(d))}o.sort(pQe);for(let r=0;r<o.length;r++)n=AQe(o[r],n);return n}function pQe(e,t){return e.x-t.x}function AQe(e,t){let n=gQe(e,t);if(!n)return t;let i=Dde(n,e);return bC(i,i.next),bC(n,n.next)}function gQe(e,t){let n=t,i=e.x,o=e.y,r=-1/0,s;do{if(o<=n.y&&o>=n.next.y&&n.next.y!==n.y){let h=n.x+(o-n.y)*(n.next.x-n.x)/(n.next.y-n.y);if(h<=i&&h>r&&(r=h,s=n.x<n.next.x?n:n.next,h===i))return s}n=n.next}while(n!==t);if(!s)return null;let a=s,c=s.x,d=s.y,u=1/0;n=s;do{if(i>=n.x&&n.x>=c&&i!==n.x&&i_(o<d?i:r,o,c,d,o<d?r:i,o,n.x,n.y)){let h=Math.abs(o-n.y)/(i-n.x);JW(n,e)&&(h<u||h===u&&(n.x>s.x||n.x===s.x&&bQe(s,n)))&&(s=n,u=h)}n=n.next}while(n!==a);return s}function bQe(e,t){return ds(e.prev,e,t.prev)<0&&ds(t.next,e,e.next)<0}function yQe(e,t,n,i){let o=e;do o.z===0&&(o.z=DK(o.x,o.y,t,n,i)),o.prevZ=o.prev,o.nextZ=o.next,o=o.next;while(o!==e);o.prevZ.nextZ=null,o.prevZ=null,xQe(o)}function xQe(e){let t,n=1;do{let i=e,o;e=null;let r=null;for(t=0;i;){t++;let s=i,a=0;for(let d=0;d<n&&(a++,s=s.nextZ,!!s);d++);let c=n;for(;a>0||c>0&&s;)a!==0&&(c===0||!s||i.z<=s.z)?(o=i,i=i.nextZ,a--):(o=s,s=s.nextZ,c--),r?r.nextZ=o:e=o,o.prevZ=r,r=o;i=s}r.nextZ=null,n*=2}while(t>1);return e}function DK(e,t,n,i,o){return e=(e-n)*o|0,t=(t-i)*o|0,e=(e|e<<8)&16711935,e=(e|e<<4)&252645135,e=(e|e<<2)&858993459,e=(e|e<<1)&1431655765,t=(t|t<<8)&16711935,t=(t|t<<4)&252645135,t=(t|t<<2)&858993459,t=(t|t<<1)&1431655765,e|t<<1}function CQe(e){let t=e,n=e;do(t.x<n.x||t.x===n.x&&t.y<n.y)&&(n=t),t=t.next;while(t!==e);return n}function i_(e,t,n,i,o,r,s,a){return(o-s)*(t-a)>=(e-s)*(r-a)&&(e-s)*(i-a)>=(n-s)*(t-a)&&(n-s)*(r-a)>=(o-s)*(i-a)}function TQe(e,t){return e.next.i!==t.i&&e.prev.i!==t.i&&!EQe(e,t)&&(JW(e,t)&&JW(t,e)&&SQe(e,t)&&(ds(e.prev,e,t.prev)||ds(e,t.prev,t))||Nk(e,t)&&ds(e.prev,e,e.next)>0&&ds(t.prev,t,t.next)>0)}function ds(e,t,n){return(t.y-e.y)*(n.x-t.x)-(t.x-e.x)*(n.y-t.y)}function Nk(e,t){return e.x===t.x&&e.y===t.y}function Ude(e,t,n,i){let o=wk(ds(e,t,n)),r=wk(ds(e,t,i)),s=wk(ds(n,i,e)),a=wk(ds(n,i,t));return!!(o!==r&&s!==a||o===0&&Bk(e,n,t)||r===0&&Bk(e,i,t)||s===0&&Bk(n,e,i)||a===0&&Bk(n,t,i))}function Bk(e,t,n){return t.x<=Math.max(e.x,n.x)&&t.x>=Math.min(e.x,n.x)&&t.y<=Math.max(e.y,n.y)&&t.y>=Math.min(e.y,n.y)}function wk(e){return e>0?1:e<0?-1:0}function EQe(e,t){let n=e;do{if(n.i!==e.i&&n.next.i!==e.i&&n.i!==t.i&&n.next.i!==t.i&&Ude(n,n.next,e,t))return!0;n=n.next}while(n!==e);return!1}function JW(e,t){return ds(e.prev,e,e.next)<0?ds(e,t,e.next)>=0&&ds(e,e.prev,t)>=0:ds(e,t,e.prev)<0||ds(e,e.next,t)<0}function SQe(e,t){let n=e,i=!1,o=(e.x+t.x)/2,r=(e.y+t.y)/2;do n.y>r!=n.next.y>r&&n.next.y!==n.y&&o<(n.next.x-n.x)*(r-n.y)/(n.next.y-n.y)+n.x&&(i=!i),n=n.next;while(n!==e);return i}function Dde(e,t){let n=kK(e.i,e.x,e.y),i=kK(t.i,t.x,t.y),o=e.next,r=t.prev;return e.next=t,t.prev=e,n.next=o,o.prev=n,i.next=n,n.prev=i,r.next=i,i.prev=r,i}function Mde(e,t,n,i){let o=kK(e,t,n);return i?(o.next=i.next,o.prev=i,i.next.prev=o,i.next=o):(o.prev=o,o.next=o),o}function KW(e){e.next.prev=e.prev,e.prev.next=e.next,e.prevZ&&(e.prevZ.nextZ=e.nextZ),e.nextZ&&(e.nextZ.prevZ=e.prevZ)}function kK(e,t,n){return{i:e,x:t,y:n,prev:null,next:null,z:0,prevZ:null,nextZ:null,steiner:!1}}function _Qe(e,t,n,i){let o=0;for(let r=t,s=n-i;r<n;r+=i)o+=(e[s]-e[r])*(e[r+1]+e[s+1]),s=r;return o}var IQe=new m,ZQe=new m,E0={};E0.computeArea2D=function(e){let t=e.length,n=0;for(let i=t-1,o=0;o<t;i=o++){let r=e[i],s=e[o];n+=r.x*s.y-s.x*r.y}return n*.5};E0.computeWindingOrder2D=function(e){return E0.computeArea2D(e)>0?ks.COUNTER_CLOCKWISE:ks.CLOCKWISE};E0.triangulate=function(e,t){let n=M.packArray(e);return QK(n,t,2)};var zde=new m,Hde=new m,Jde=new m,kde=new m,Qde=new m,Ode=new m,ng=new m,Kde=new M,jde=new M,qde=new M,o_=new M;E0.computeSubdivision=function(e,t,n,i,o){o=o??L.RADIANS_PER_DEGREE;let r=l(i),s=n.slice(0),a,c=t.length,d=new Array(c*3),u=new Array(c*2),h=0,p=0;for(a=0;a<c;a++){let S=t[a];if(d[h++]=S.x,d[h++]=S.y,d[h++]=S.z,r){let I=i[a];u[p++]=I.x,u[p++]=I.y}}let A=[],f={},b=e.maximumRadius,C=L.chordLength(o,b),T=C*C;for(;s.length>0;){let S=s.pop(),I=s.pop(),R=s.pop(),V=m.fromArray(d,R*3,zde),W=m.fromArray(d,I*3,Hde),B=m.fromArray(d,S*3,Jde),N,P,g;r&&(N=M.fromArray(u,R*2,Kde),P=M.fromArray(u,I*2,jde),g=M.fromArray(u,S*2,qde));let _=m.multiplyByScalar(m.normalize(V,kde),b,kde),Z=m.multiplyByScalar(m.normalize(W,Qde),b,Qde),G=m.multiplyByScalar(m.normalize(B,Ode),b,Ode),w=m.magnitudeSquared(m.subtract(_,Z,ng)),X=m.magnitudeSquared(m.subtract(Z,G,ng)),k=m.magnitudeSquared(m.subtract(G,_,ng)),v=Math.max(w,X,k),D,Y,O;v>T?w===v?(D=`${Math.min(R,I)} ${Math.max(R,I)}`,a=f[D],l(a)||(Y=m.add(V,W,ng),m.multiplyByScalar(Y,.5,Y),d.push(Y.x,Y.y,Y.z),a=d.length/3-1,f[D]=a,r&&(O=M.add(N,P,o_),M.multiplyByScalar(O,.5,O),u.push(O.x,O.y))),s.push(R,a,S),s.push(a,I,S)):X===v?(D=`${Math.min(I,S)} ${Math.max(I,S)}`,a=f[D],l(a)||(Y=m.add(W,B,ng),m.multiplyByScalar(Y,.5,Y),d.push(Y.x,Y.y,Y.z),a=d.length/3-1,f[D]=a,r&&(O=M.add(P,g,o_),M.multiplyByScalar(O,.5,O),u.push(O.x,O.y))),s.push(I,a,R),s.push(a,S,R)):k===v&&(D=`${Math.min(S,R)} ${Math.max(S,R)}`,a=f[D],l(a)||(Y=m.add(B,V,ng),m.multiplyByScalar(Y,.5,Y),d.push(Y.x,Y.y,Y.z),a=d.length/3-1,f[D]=a,r&&(O=M.add(g,N,o_),M.multiplyByScalar(O,.5,O),u.push(O.x,O.y))),s.push(S,a,I),s.push(a,R,I)):(A.push(R),A.push(I),A.push(S))}let E={attributes:{position:new we({componentDatatype:H.DOUBLE,componentsPerAttribute:3,values:d})},indices:A,primitiveType:We.TRIANGLES};return r&&(E.attributes.st=new we({componentDatatype:H.FLOAT,componentsPerAttribute:2,values:u})),new Ct(E)};var RQe=new Ae,VQe=new Ae,GQe=new Ae,OK=new Ae;E0.computeRhumbLineSubdivision=function(e,t,n,i,o){o=o??L.RADIANS_PER_DEGREE;let r=l(i),s=n.slice(0),a,c=t.length,d=new Array(c*3),u=new Array(c*2),h=0,p=0;for(a=0;a<c;a++){let R=t[a];if(d[h++]=R.x,d[h++]=R.y,d[h++]=R.z,r){let V=i[a];u[p++]=V.x,u[p++]=V.y}}let A=[],f={},b=e.maximumRadius,C=L.chordLength(o,b),T=new Sc(void 0,void 0,e),E=new Sc(void 0,void 0,e),S=new Sc(void 0,void 0,e);for(;s.length>0;){let R=s.pop(),V=s.pop(),W=s.pop(),B=m.fromArray(d,W*3,zde),N=m.fromArray(d,V*3,Hde),P=m.fromArray(d,R*3,Jde),g,_,Z;r&&(g=M.fromArray(u,W*2,Kde),_=M.fromArray(u,V*2,jde),Z=M.fromArray(u,R*2,qde));let G=e.cartesianToCartographic(B,RQe),w=e.cartesianToCartographic(N,VQe),X=e.cartesianToCartographic(P,GQe);T.setEndPoints(G,w);let k=T.surfaceDistance;E.setEndPoints(w,X);let v=E.surfaceDistance;S.setEndPoints(X,G);let D=S.surfaceDistance,Y=Math.max(k,v,D),O,J,te,z,j;Y>C?k===Y?(O=`${Math.min(W,V)} ${Math.max(W,V)}`,a=f[O],l(a)||(J=T.interpolateUsingFraction(.5,OK),te=(G.height+w.height)*.5,z=m.fromRadians(J.longitude,J.latitude,te,e,ng),d.push(z.x,z.y,z.z),a=d.length/3-1,f[O]=a,r&&(j=M.add(g,_,o_),M.multiplyByScalar(j,.5,j),u.push(j.x,j.y))),s.push(W,a,R),s.push(a,V,R)):v===Y?(O=`${Math.min(V,R)} ${Math.max(V,R)}`,a=f[O],l(a)||(J=E.interpolateUsingFraction(.5,OK),te=(w.height+X.height)*.5,z=m.fromRadians(J.longitude,J.latitude,te,e,ng),d.push(z.x,z.y,z.z),a=d.length/3-1,f[O]=a,r&&(j=M.add(_,Z,o_),M.multiplyByScalar(j,.5,j),u.push(j.x,j.y))),s.push(V,a,W),s.push(a,R,W)):D===Y&&(O=`${Math.min(R,W)} ${Math.max(R,W)}`,a=f[O],l(a)||(J=S.interpolateUsingFraction(.5,OK),te=(X.height+G.height)*.5,z=m.fromRadians(J.longitude,J.latitude,te,e,ng),d.push(z.x,z.y,z.z),a=d.length/3-1,f[O]=a,r&&(j=M.add(Z,g,o_),M.multiplyByScalar(j,.5,j),u.push(j.x,j.y))),s.push(R,a,V),s.push(a,W,V)):(A.push(W),A.push(V),A.push(R))}let I={attributes:{position:new we({componentDatatype:H.DOUBLE,componentsPerAttribute:3,values:d})},indices:A,primitiveType:We.TRIANGLES};return r&&(I.attributes.st=new we({componentDatatype:H.FLOAT,componentsPerAttribute:2,values:u})),new Ct(I)};E0.scaleToGeodeticHeight=function(e,t,n,i){n=n??ie.default;let o=IQe,r=ZQe;if(t=t??0,i=i??!0,l(e)){let s=e.length;for(let a=0;a<s;a+=3)m.fromArray(e,a,r),i&&(r=n.scaleToGeodeticSurface(r,r)),t!==0&&(o=n.geodeticSurfaceNormal(r,o),m.multiplyByScalar(o,t,o),m.add(r,o,r)),e[a]=r.x,e[a+1]=r.y,e[a+2]=r.z}return e};var Ii=E0;var N_n=y(x(),1);function S0(){this._array=[],this._offset=0,this._length=0}Object.defineProperties(S0.prototype,{length:{get:function(){return this._length}}});S0.prototype.enqueue=function(e){this._array.push(e),this._length++};S0.prototype.dequeue=function(){if(this._length===0)return;let e=this._array,t=this._offset,n=e[t];return e[t]=void 0,t++,t>10&&t*2>e.length&&(this._array=e.slice(t),t=0),this._offset=t,this._length--,n};S0.prototype.peek=function(){if(this._length!==0)return this._array[this._offset]};S0.prototype.contains=function(e){return this._array.indexOf(e)!==-1};S0.prototype.clear=function(){this._array.length=this._offset=this._length=0};S0.prototype.sort=function(e){this._offset>0&&(this._array=this._array.slice(this._offset),this._offset=0),this._array.sort(e)};var _0=S0;var Rr={};Rr.computeHierarchyPackedLength=function(e,t){let n=0,i=[e];for(;i.length>0;){let o=i.pop();if(!l(o))continue;n+=2;let r=o.positions,s=o.holes;if(l(r)&&r.length>0&&(n+=r.length*t.packedLength),l(s)){let a=s.length;for(let c=0;c<a;++c)i.push(s[c])}}return n};Rr.packPolygonHierarchy=function(e,t,n,i){let o=[e];for(;o.length>0;){let r=o.pop();if(!l(r))continue;let s=r.positions,a=r.holes;if(t[n++]=l(s)?s.length:0,t[n++]=l(a)?a.length:0,l(s)){let c=s.length;for(let d=0;d<c;++d,n+=i.packedLength)i.pack(s[d],t,n)}if(l(a)){let c=a.length;for(let d=0;d<c;++d)o.push(a[d])}}return n};Rr.unpackPolygonHierarchy=function(e,t,n){let i=e[t++],o=e[t++],r=new Array(i),s=o>0?new Array(o):void 0;for(let a=0;a<i;++a,t+=n.packedLength)r[a]=n.unpack(e,t);for(let a=0;a<o;++a)s[a]=Rr.unpackPolygonHierarchy(e,t,n),t=s[a].startingIndex,delete s[a].startingIndex;return{positions:r,holes:s,startingIndex:t}};var yC=new M;function tue(e,t,n,i){return M.subtract(t,e,yC),M.multiplyByScalar(yC,n/i,yC),M.add(e,yC,yC),[yC.x,yC.y]}var I0=new m;function LQe(e,t,n,i){return m.subtract(t,e,I0),m.multiplyByScalar(I0,n/i,I0),m.add(e,I0,I0),[I0.x,I0.y,I0.z]}Rr.subdivideLineCount=function(e,t,n){let o=m.distance(e,t)/n,r=Math.max(0,Math.ceil(L.log2(o)));return Math.pow(2,r)};var Xk=new Ae,Yk=new Ae,WQe=new Ae,FQe=new m,Pk=new Sc;Rr.subdivideRhumbLineCount=function(e,t,n,i){let o=e.cartesianToCartographic(t,Xk),r=e.cartesianToCartographic(n,Yk),a=new Sc(o,r,e).surfaceDistance/i,c=Math.max(0,Math.ceil(L.log2(a)));return Math.pow(2,c)};Rr.subdivideTexcoordLine=function(e,t,n,i,o,r){let s=Rr.subdivideLineCount(n,i,o),a=M.distance(e,t),c=a/s,d=r;d.length=s*2;let u=0;for(let h=0;h<s;h++){let p=tue(e,t,h*c,a);d[u++]=p[0],d[u++]=p[1]}return d};Rr.subdivideLine=function(e,t,n,i){let o=Rr.subdivideLineCount(e,t,n),r=m.distance(e,t),s=r/o;l(i)||(i=[]);let a=i;a.length=o*3;let c=0;for(let d=0;d<o;d++){let u=LQe(e,t,d*s,r);a[c++]=u[0],a[c++]=u[1],a[c++]=u[2]}return a};Rr.subdivideTexcoordRhumbLine=function(e,t,n,i,o,r,s){let a=n.cartesianToCartographic(i,Xk),c=n.cartesianToCartographic(o,Yk);Pk.setEndPoints(a,c);let d=Pk.surfaceDistance/r,u=Math.max(0,Math.ceil(L.log2(d))),h=Math.pow(2,u),p=M.distance(e,t),A=p/h,f=s;f.length=h*2;let b=0;for(let C=0;C<h;C++){let T=tue(e,t,C*A,p);f[b++]=T[0],f[b++]=T[1]}return f};Rr.subdivideRhumbLine=function(e,t,n,i,o){let r=e.cartesianToCartographic(t,Xk),s=e.cartesianToCartographic(n,Yk),a=new Sc(r,s,e);if(l(o)||(o=[]),a.surfaceDistance<=i)return o.length=3,o[0]=t.x,o[1]=t.y,o[2]=t.z,o;let c=a.surfaceDistance/i,d=Math.max(0,Math.ceil(L.log2(c))),u=Math.pow(2,d),h=a.surfaceDistance/u,p=o;p.length=u*3;let A=0;for(let f=0;f<u;f++){let b=a.interpolateUsingSurfaceDistance(f*h,WQe),C=e.cartographicToCartesian(b,FQe);p[A++]=C.x,p[A++]=C.y,p[A++]=C.z}return p};var BQe=new m,wQe=new m,NQe=new m,PQe=new m;Rr.scaleToGeodeticHeightExtruded=function(e,t,n,i,o){i=i??ie.default;let r=BQe,s=wQe,a=NQe,c=PQe;if(l(e)&&l(e.attributes)&&l(e.attributes.position)){let d=e.attributes.position.values,u=d.length/2;for(let h=0;h<u;h+=3)m.fromArray(d,h,a),i.geodeticSurfaceNormal(a,r),c=i.scaleToGeodeticSurface(a,c),s=m.multiplyByScalar(r,n,s),s=m.add(c,s,s),d[h+u]=s.x,d[h+1+u]=s.y,d[h+2+u]=s.z,o&&(c=m.clone(a,c)),s=m.multiplyByScalar(r,t,s),s=m.add(c,s,s),d[h]=s.x,d[h+1]=s.y,d[h+2]=s.z}return e};Rr.polygonOutlinesFromHierarchy=function(e,t,n){let i=[],o=new _0;o.enqueue(e);let r,s,a;for(;o.length!==0;){let c=o.dequeue(),d=c.positions;if(t)for(a=d.length,r=0;r<a;r++)n.scaleToGeodeticSurface(d[r],d[r]);if(d=Uo(d,m.equalsEpsilon,!0),d.length<3)continue;let u=c.holes?c.holes.length:0;for(r=0;r<u;r++){let h=c.holes[r],p=h.positions;if(t)for(a=p.length,s=0;s<a;++s)n.scaleToGeodeticSurface(p[s],p[s]);if(p=Uo(p,m.equalsEpsilon,!0),p.length<3)continue;i.push(p);let A=0;for(l(h.holes)&&(A=h.holes.length),s=0;s<A;s++)o.enqueue(h.holes[s])}i.push(d)}return i};var XQe=new Ae;function YQe(e,t,n){let i=n.cartesianToCartographic(e,Xk),o=n.cartesianToCartographic(t,Yk);if(Math.sign(i.latitude)===Math.sign(o.latitude))return;Pk.setEndPoints(i,o);let r=Pk.findIntersectionWithLatitude(0,XQe);if(!l(r))return;let s=Math.min(i.longitude,o.longitude),a=Math.max(i.longitude,o.longitude);if(Math.abs(a-s)>L.PI){let c=s;s=a,a=c}if(!(r.longitude<s||r.longitude>a))return n.cartographicToCartesian(r)}function MQe(e,t,n,i){if(i===un.RHUMB)return YQe(e,t,n);let o=hi.lineSegmentPlane(e,t,dn.ORIGIN_XY_PLANE);if(l(o))return n.scaleToGeodeticSurface(o,o)}var vQe=new Ae;function UQe(e,t,n){let i=[],o,r,s,a,c,d=0;for(;d<e.length;){o=e[d],r=e[(d+1)%e.length],s=L.sign(o.z),a=L.sign(r.z);let u=h=>t.cartesianToCartographic(h,vQe).longitude;if(s===0)i.push({position:d,type:s,visited:!1,next:a,theta:u(o)});else if(a!==0){if(c=MQe(o,r,t,n),++d,!l(c))continue;e.splice(d,0,c),i.push({position:d,type:s,visited:!1,next:a,theta:u(c)})}++d}return i}function nue(e,t,n,i,o,r,s){let a=[],c=r,d=h=>p=>p.position===h,u=[];do{let h=n[c];a.push(h);let p=i.findIndex(d(c)),A=i[p];if(!l(A)){++c;continue}let{visited:f,type:b,next:C}=A;if(A.visited=!0,b===0){if(C===0){let I=i[p-(s?1:-1)];if(I?.position===c+1)I.visited=!0;else{++c;continue}}if(!f&&s&&C>0||r===c&&!s&&C<0){++c;continue}}if(!(s?b>=0:b<=0)){++c;continue}f||u.push(c);let E=p+(s?1:-1),S=i[E];if(!l(S)){++c;continue}c=S.position}while(c<n.length&&c>=0&&c!==r&&a.length<n.length);e.splice(t,o,a);for(let h of u)t=nue(e,++t,n,i,0,h,!s);return t}Rr.splitPolygonsOnEquator=function(e,t,n,i){l(i)||(i=[]),i.splice(0,0,...e),i.length=e.length;let o=0;for(;o<i.length;){let r=i[o],s=r.slice();if(r.length<3){i[o]=s,++o;continue}let a=UQe(s,t,n);if(s.length===r.length||a.length<=1){i[o]=s,++o;continue}a.sort((d,u)=>d.theta-u.theta);let c=s[0].z>=0;o=nue(i,o,s,a,1,0,c)}return i};Rr.polygonsFromHierarchy=function(e,t,n,i,o,r){let s=[],a=[],c=new _0;c.enqueue(e);let d=l(r);for(;c.length!==0;){let u=c.dequeue(),h=u.positions,p=u.holes,A,f;if(i)for(f=h.length,A=0;A<f;A++)o.scaleToGeodeticSurface(h[A],h[A]);if(t||(h=Uo(h,m.equalsEpsilon,!0)),h.length<3)continue;let b=n(h);if(!l(b))continue;let C=[],T=Ii.computeWindingOrder2D(b);if(T===ks.CLOCKWISE&&(b.reverse(),h=h.slice().reverse()),d){d=!1;let V=[h];if(V=r(V,V),V.length>1){for(let W of V)c.enqueue(new _c(W,p));continue}}let E=h.slice(),S=l(p)?p.length:0,I=[],R;for(A=0;A<S;A++){let V=p[A],W=V.positions;if(i)for(f=W.length,R=0;R<f;++R)o.scaleToGeodeticSurface(W[R],W[R]);if(t||(W=Uo(W,m.equalsEpsilon,!0)),W.length<3)continue;let B=n(W);if(!l(B))continue;T=Ii.computeWindingOrder2D(B),T===ks.CLOCKWISE&&(B.reverse(),W=W.slice().reverse()),I.push(W),C.push(E.length),E=E.concat(W),b=b.concat(B);let N=0;for(l(V.holes)&&(N=V.holes.length),R=0;R<N;R++)c.enqueue(V.holes[R])}s.push({outerRing:h,holes:I}),a.push({positions:E,positions2D:b,holes:C})}return{hierarchy:s,polygons:a}};var DQe=new M,kQe=new m,QQe=new Me,OQe=new $;Rr.computeBoundingRectangle=function(e,t,n,i,o){let r=Me.fromAxisAngle(e,i,QQe),s=$.fromQuaternion(r,OQe),a=Number.POSITIVE_INFINITY,c=Number.NEGATIVE_INFINITY,d=Number.POSITIVE_INFINITY,u=Number.NEGATIVE_INFINITY,h=n.length;for(let p=0;p<h;++p){let A=m.clone(n[p],kQe);$.multiplyByVector(s,A,A);let f=t(A,DQe);l(f)&&(a=Math.min(a,f.x),c=Math.max(c,f.x),d=Math.min(d,f.y),u=Math.max(u,f.y))}return o.x=a,o.y=d,o.width=c-a,o.height=u-d,o};Rr.createGeometryFromPositions=function(e,t,n,i,o,r,s){let a=Ii.triangulate(t.positions2D,t.holes);a.length<3&&(a=[0,1,2]);let c=t.positions,d=l(n),u=d?n.positions:void 0;if(o){let h=c.length,p=new Array(h*3),A=0;for(let C=0;C<h;C++){let T=c[C];p[A++]=T.x,p[A++]=T.y,p[A++]=T.z}let f={attributes:{position:new we({componentDatatype:H.DOUBLE,componentsPerAttribute:3,values:p})},indices:a,primitiveType:We.TRIANGLES};d&&(f.attributes.st=new we({componentDatatype:H.FLOAT,componentsPerAttribute:2,values:M.packArray(u)}));let b=new Ct(f);return r.normal?zn.computeNormal(b):b}if(s===un.GEODESIC)return Ii.computeSubdivision(e,c,a,u,i);if(s===un.RHUMB)return Ii.computeRhumbLineSubdivision(e,c,a,u,i)};var $de=[],eue=[],zQe=new m,HQe=new m;Rr.computeWallGeometry=function(e,t,n,i,o,r){let s,a,c,d,u,h,p,A,f,b=e.length,C=0,T=0,E=l(t),S=E?t.positions:void 0;if(o)for(a=b*3*2,s=new Array(a*2),E&&(f=b*2*2,A=new Array(f*2)),c=0;c<b;c++)d=e[c],u=e[(c+1)%b],s[C]=s[C+a]=d.x,++C,s[C]=s[C+a]=d.y,++C,s[C]=s[C+a]=d.z,++C,s[C]=s[C+a]=u.x,++C,s[C]=s[C+a]=u.y,++C,s[C]=s[C+a]=u.z,++C,E&&(h=S[c],p=S[(c+1)%b],A[T]=A[T+f]=h.x,++T,A[T]=A[T+f]=h.y,++T,A[T]=A[T+f]=p.x,++T,A[T]=A[T+f]=p.y,++T);else{let B=L.chordLength(i,n.maximumRadius),N=0;if(r===un.GEODESIC)for(c=0;c<b;c++)N+=Rr.subdivideLineCount(e[c],e[(c+1)%b],B);else if(r===un.RHUMB)for(c=0;c<b;c++)N+=Rr.subdivideRhumbLineCount(n,e[c],e[(c+1)%b],B);for(a=(N+b)*3,s=new Array(a*2),E&&(f=(N+b)*2,A=new Array(f*2)),c=0;c<b;c++){d=e[c],u=e[(c+1)%b];let P,g;E&&(h=S[c],p=S[(c+1)%b]),r===un.GEODESIC?(P=Rr.subdivideLine(d,u,B,eue),E&&(g=Rr.subdivideTexcoordLine(h,p,d,u,B,$de))):r===un.RHUMB&&(P=Rr.subdivideRhumbLine(n,d,u,B,eue),E&&(g=Rr.subdivideTexcoordRhumbLine(h,p,n,d,u,B,$de)));let _=P.length;for(let Z=0;Z<_;++Z,++C)s[C]=P[Z],s[C+a]=P[Z];if(s[C]=u.x,s[C+a]=u.x,++C,s[C]=u.y,s[C+a]=u.y,++C,s[C]=u.z,s[C+a]=u.z,++C,E){let Z=g.length;for(let G=0;G<Z;++G,++T)A[T]=g[G],A[T+f]=g[G];A[T]=p.x,A[T+f]=p.x,++T,A[T]=p.y,A[T+f]=p.y,++T}}}b=s.length;let I=Ue.createTypedArray(b/3,b-e.length*6),R=0;for(b/=6,c=0;c<b;c++){let B=c,N=B+1,P=B+b,g=P+1;d=m.fromArray(s,B*3,zQe),u=m.fromArray(s,N*3,HQe),!m.equalsEpsilon(d,u,L.EPSILON10,L.EPSILON10)&&(I[R++]=B,I[R++]=P,I[R++]=N,I[R++]=N,I[R++]=P,I[R++]=g)}let V={attributes:new xn({position:new we({componentDatatype:H.DOUBLE,componentsPerAttribute:3,values:s})}),indices:I,primitiveType:We.TRIANGLES};return E&&(V.attributes.st=new we({componentDatatype:H.FLOAT,componentsPerAttribute:2,values:A})),new Ct(V)};var ii=Rr;var yIn=y(x(),1);function us(e,t){this.position=e,l(this.position)||(this.position=new M),this.tangentPlane=t,l(this.tangentPlane)||(this.tangentPlane=us.NORTH_POLE_TANGENT_PLANE)}Object.defineProperties(us.prototype,{ellipsoid:{get:function(){return this.tangentPlane.ellipsoid}},x:{get:function(){return this.position.x}},y:{get:function(){return this.position.y}},conformalLatitude:{get:function(){let e=M.magnitude(this.position),t=2*this.ellipsoid.maximumRadius;return this.tangentPlane.plane.normal.z*(L.PI_OVER_TWO-2*Math.atan2(e,t))}},longitude:{get:function(){let e=L.PI_OVER_TWO+Math.atan2(this.y,this.x);return e>Math.PI&&(e-=L.TWO_PI),e}}});var r_=new Ae,JQe=new m;us.prototype.getLatitude=function(e){l(e)||(e=ie.default),r_.latitude=this.conformalLatitude,r_.longitude=this.longitude,r_.height=0;let t=this.ellipsoid.cartographicToCartesian(r_,JQe);return e.cartesianToCartographic(t,r_),r_.latitude};var KQe=new Cn,jQe=new m,qQe=new m;us.fromCartesian=function(e,t){let n=L.signNotZero(e.z),i=us.NORTH_POLE_TANGENT_PLANE,o=us.SOUTH_POLE;n<0&&(i=us.SOUTH_POLE_TANGENT_PLANE,o=us.NORTH_POLE);let r=KQe;r.origin=i.ellipsoid.scaleToGeocentricSurface(e,r.origin),r.direction=m.subtract(r.origin,o,jQe),m.normalize(r.direction,r.direction);let s=hi.rayPlane(r,i.plane,qQe),a=m.subtract(s,o,s),c=m.dot(i.xAxis,a),d=n*m.dot(i.yAxis,a);return l(t)?(t.position=new M(c,d),t.tangentPlane=i,t):new us(new M(c,d),i)};us.fromCartesianArray=function(e,t){let n=e.length;l(t)?t.length=n:t=new Array(n);for(let i=0;i<n;i++)t[i]=us.fromCartesian(e[i],t[i]);return t};us.clone=function(e,t){if(l(e))return l(t)?(t.position=e.position,t.tangentPlane=e.tangentPlane,t):new us(e.position,e.tangentPlane)};us.HALF_UNIT_SPHERE=Object.freeze(new ie(.5,.5,.5));us.NORTH_POLE=Object.freeze(new m(0,0,.5));us.SOUTH_POLE=Object.freeze(new m(0,0,-.5));us.NORTH_POLE_TANGENT_PLANE=Object.freeze(new Rs(us.NORTH_POLE,us.HALF_UNIT_SPHERE));us.SOUTH_POLE_TANGENT_PLANE=Object.freeze(new Rs(us.SOUTH_POLE,us.HALF_UNIT_SPHERE));var Kc=us;var $Qe=new Ae,iue=new Ae;function eOe(e,t,n,i){let r=i.cartesianToCartographic(e,$Qe).height,s=i.cartesianToCartographic(t,iue);s.height=r,i.cartographicToCartesian(s,t);let a=i.cartesianToCartographic(n,iue);a.height=r-100,i.cartographicToCartesian(a,n)}var oue=new nt,tOe=new m,nOe=new m,iOe=new m,oOe=new m,rOe=new m,sOe=new m,Mk=new m,Ap=new m,s_=new m,aOe=new M,cOe=new M,lOe=new m,rue=new Me,dOe=new $,uOe=new $;function zK(e){let t=e.vertexFormat,n=e.geometry,i=e.shadowVolume,o=n.attributes.position.values,r=l(n.attributes.st)?n.attributes.st.values:void 0,s=o.length,a=e.wall,c=e.top||a,d=e.bottom||a;if(t.st||t.normal||t.tangent||t.bitangent||i){let u=e.boundingRectangle,h=e.rotationAxis,p=e.projectTo2d,A=e.ellipsoid,f=e.stRotation,b=e.perPositionHeight,C=aOe;C.x=u.x,C.y=u.y;let T=t.st?new Float32Array(2*(s/3)):void 0,E;t.normal&&(b&&c&&!a?E=n.attributes.normal.values:E=new Float32Array(s));let S=t.tangent?new Float32Array(s):void 0,I=t.bitangent?new Float32Array(s):void 0,R=i?new Float32Array(s):void 0,V=0,W=0,B=nOe,N=iOe,P=oOe,g=!0,_=dOe,Z=uOe;if(f!==0){let X=Me.fromAxisAngle(h,f,rue);_=$.fromQuaternion(X,_),X=Me.fromAxisAngle(h,-f,rue),Z=$.fromQuaternion(X,Z)}else _=$.clone($.IDENTITY,_),Z=$.clone($.IDENTITY,Z);let G=0,w=0;c&&d&&(G=s/2,w=s/3,s/=2);for(let X=0;X<s;X+=3){let k=m.fromArray(o,X,lOe);if(t.st&&!l(r)){let v=$.multiplyByVector(_,k,tOe);v=A.scaleToGeodeticSurface(v,v);let D=p([v],cOe)[0];M.subtract(D,C,D);let Y=L.clamp(D.x/u.width,0,1),O=L.clamp(D.y/u.height,0,1);d&&(T[V+w]=Y,T[V+1+w]=O),c&&(T[V]=Y,T[V+1]=O),V+=2}if(t.normal||t.tangent||t.bitangent||i){let v=W+1,D=W+2;if(a){if(X+3<s){let Y=m.fromArray(o,X+3,rOe);if(g){let O=m.fromArray(o,X+s,sOe);b&&eOe(k,Y,O,A),m.subtract(Y,k,Y),m.subtract(O,k,O),B=m.normalize(m.cross(O,Y,B),B),g=!1}m.equalsEpsilon(Y,k,L.EPSILON10)&&(g=!0)}(t.tangent||t.bitangent)&&(P=A.geodeticSurfaceNormal(k,P),t.tangent&&(N=m.normalize(m.cross(P,B,N),N)))}else B=A.geodeticSurfaceNormal(k,B),(t.tangent||t.bitangent)&&(b&&(Mk=m.fromArray(E,W,Mk),Ap=m.cross(m.UNIT_Z,Mk,Ap),Ap=m.normalize($.multiplyByVector(Z,Ap,Ap),Ap),t.bitangent&&(s_=m.normalize(m.cross(Mk,Ap,s_),s_))),N=m.cross(m.UNIT_Z,B,N),N=m.normalize($.multiplyByVector(Z,N,N),N),t.bitangent&&(P=m.normalize(m.cross(B,N,P),P)));t.normal&&(e.wall?(E[W+G]=B.x,E[v+G]=B.y,E[D+G]=B.z):d&&(E[W+G]=-B.x,E[v+G]=-B.y,E[D+G]=-B.z),(c&&!b||a)&&(E[W]=B.x,E[v]=B.y,E[D]=B.z)),i&&(a&&(B=A.geodeticSurfaceNormal(k,B)),R[W+G]=-B.x,R[v+G]=-B.y,R[D+G]=-B.z),t.tangent&&(e.wall?(S[W+G]=N.x,S[v+G]=N.y,S[D+G]=N.z):d&&(S[W+G]=-N.x,S[v+G]=-N.y,S[D+G]=-N.z),c&&(b?(S[W]=Ap.x,S[v]=Ap.y,S[D]=Ap.z):(S[W]=N.x,S[v]=N.y,S[D]=N.z))),t.bitangent&&(d&&(I[W+G]=P.x,I[v+G]=P.y,I[D+G]=P.z),c&&(b?(I[W]=s_.x,I[v]=s_.y,I[D]=s_.z):(I[W]=P.x,I[v]=P.y,I[D]=P.z))),W+=3}}t.st&&!l(r)&&(n.attributes.st=new we({componentDatatype:H.FLOAT,componentsPerAttribute:2,values:T})),t.normal&&(n.attributes.normal=new we({componentDatatype:H.FLOAT,componentsPerAttribute:3,values:E})),t.tangent&&(n.attributes.tangent=new we({componentDatatype:H.FLOAT,componentsPerAttribute:3,values:S})),t.bitangent&&(n.attributes.bitangent=new we({componentDatatype:H.FLOAT,componentsPerAttribute:3,values:I})),i&&(n.attributes.extrudeDirection=new we({componentDatatype:H.FLOAT,componentsPerAttribute:3,values:R}))}if(e.extrude&&l(e.offsetAttribute)){let u=o.length/3,h=new Uint8Array(u);if(e.offsetAttribute===An.TOP)c&&d||a?h=h.fill(1,0,u/2):c&&(h=h.fill(1));else{let p=e.offsetAttribute===An.NONE?0:1;h=h.fill(p)}n.attributes.applyOffset=new we({componentDatatype:H.UNSIGNED_BYTE,componentsPerAttribute:1,values:h})}return n}var sue=[];function mOe(e,t,n,i,o,r,s,a,c,d){let u={walls:[]},h;if(s||a){let E=ii.createGeometryFromPositions(e,t,n,i,r,c,d),S=E.attributes.position.values,I=E.indices,R,V;if(s&&a){let W=S.concat(S);R=W.length/3,V=Ue.createTypedArray(R,I.length*2),V.set(I);let B=I.length,N=R/2;for(h=0;h<B;h+=3){let P=V[h]+N,g=V[h+1]+N,_=V[h+2]+N;V[h+B]=_,V[h+1+B]=g,V[h+2+B]=P}if(E.attributes.position.values=W,r&&c.normal){let P=E.attributes.normal.values;E.attributes.normal.values=new Float32Array(W.length),E.attributes.normal.values.set(P)}if(c.st&&l(n)){let P=E.attributes.st.values;E.attributes.st.values=new Float32Array(R*2),E.attributes.st.values=P.concat(P)}E.indices=V}else if(a){for(R=S.length/3,V=Ue.createTypedArray(R,I.length),h=0;h<I.length;h+=3)V[h]=I[h+2],V[h+1]=I[h+1],V[h+2]=I[h];E.indices=V}u.topAndBottom=new wt({geometry:E})}let p=o.outerRing,A=Rs.fromPoints(p,e),f=A.projectPointsOntoPlane(p,sue),b=Ii.computeWindingOrder2D(f);b===ks.CLOCKWISE&&(p=p.slice().reverse());let C=ii.computeWallGeometry(p,n,e,i,r,d);u.walls.push(new wt({geometry:C}));let T=o.holes;for(h=0;h<T.length;h++){let E=T[h];f=A.projectPointsOntoPlane(E,sue),b=Ii.computeWindingOrder2D(f),b===ks.COUNTER_CLOCKWISE&&(E=E.slice().reverse()),C=ii.computeWallGeometry(E,n,e,i,r,d),u.walls.push(new wt({geometry:C}))}return u}function _m(e){let t=e.polygonHierarchy,n=e.vertexFormat??ve.DEFAULT,i=e.ellipsoid??ie.default,o=e.granularity??L.RADIANS_PER_DEGREE,r=e.stRotation??0,s=e.textureCoordinates,a=e.perPositionHeight??!1,c=a&&l(e.extrudedHeight),d=e.height??0,u=e.extrudedHeight??d;if(!c){let h=Math.max(d,u);u=Math.min(d,u),d=h}this._vertexFormat=ve.clone(n),this._ellipsoid=ie.clone(i),this._granularity=o,this._stRotation=r,this._height=d,this._extrudedHeight=u,this._closeTop=e.closeTop??!0,this._closeBottom=e.closeBottom??!0,this._polygonHierarchy=t,this._perPositionHeight=a,this._perPositionHeightExtrude=c,this._shadowVolume=e.shadowVolume??!1,this._workerName="createPolygonGeometry",this._offsetAttribute=e.offsetAttribute,this._arcType=e.arcType??un.GEODESIC,this._rectangle=void 0,this._textureCoordinateRotationPoints=void 0,this._textureCoordinates=s,this.packedLength=ii.computeHierarchyPackedLength(t,m)+ie.packedLength+ve.packedLength+(s?ii.computeHierarchyPackedLength(s,M):1)+12}_m.fromPositions=function(e){e=e??Q.EMPTY_OBJECT;let t={polygonHierarchy:{positions:e.positions},height:e.height,extrudedHeight:e.extrudedHeight,vertexFormat:e.vertexFormat,stRotation:e.stRotation,ellipsoid:e.ellipsoid,granularity:e.granularity,perPositionHeight:e.perPositionHeight,closeTop:e.closeTop,closeBottom:e.closeBottom,offsetAttribute:e.offsetAttribute,arcType:e.arcType,textureCoordinates:e.textureCoordinates};return new _m(t)};_m.pack=function(e,t,n){return n=n??0,n=ii.packPolygonHierarchy(e._polygonHierarchy,t,n,m),ie.pack(e._ellipsoid,t,n),n+=ie.packedLength,ve.pack(e._vertexFormat,t,n),n+=ve.packedLength,t[n++]=e._height,t[n++]=e._extrudedHeight,t[n++]=e._granularity,t[n++]=e._stRotation,t[n++]=e._perPositionHeightExtrude?1:0,t[n++]=e._perPositionHeight?1:0,t[n++]=e._closeTop?1:0,t[n++]=e._closeBottom?1:0,t[n++]=e._shadowVolume?1:0,t[n++]=e._offsetAttribute??-1,t[n++]=e._arcType,l(e._textureCoordinates)?n=ii.packPolygonHierarchy(e._textureCoordinates,t,n,M):t[n++]=-1,t[n++]=e.packedLength,t};var hOe=ie.clone(ie.UNIT_SPHERE),fOe=new ve,pOe={polygonHierarchy:{}};_m.unpack=function(e,t,n){t=t??0;let i=ii.unpackPolygonHierarchy(e,t,m);t=i.startingIndex,delete i.startingIndex;let o=ie.unpack(e,t,hOe);t+=ie.packedLength;let r=ve.unpack(e,t,fOe);t+=ve.packedLength;let s=e[t++],a=e[t++],c=e[t++],d=e[t++],u=e[t++]===1,h=e[t++]===1,p=e[t++]===1,A=e[t++]===1,f=e[t++]===1,b=e[t++],C=e[t++],T=e[t]===-1?void 0:ii.unpackPolygonHierarchy(e,t,M);l(T)?(t=T.startingIndex,delete T.startingIndex):t++;let E=e[t++];return l(n)||(n=new _m(pOe)),n._polygonHierarchy=i,n._ellipsoid=ie.clone(o,n._ellipsoid),n._vertexFormat=ve.clone(r,n._vertexFormat),n._height=s,n._extrudedHeight=a,n._granularity=c,n._stRotation=d,n._perPositionHeightExtrude=u,n._perPositionHeight=h,n._closeTop=p,n._closeBottom=A,n._shadowVolume=f,n._offsetAttribute=b===-1?void 0:b,n._arcType=C,n._textureCoordinates=T,n.packedLength=E,n};var AOe=new M,gOe=new M,bOe=new Kc;function aue(e,t,n,i,o,r){let s=e.longitude,a=s>=0?s:s+L.TWO_PI;o.westOverIdl=Math.min(o.westOverIdl,a),o.eastOverIdl=Math.max(o.eastOverIdl,a),r.west=Math.min(r.west,s),r.east=Math.max(r.east,s);let c=e.getLatitude(n),d=c;if(r.south=Math.min(r.south,c),r.north=Math.max(r.north,c),i!==un.RHUMB){let p=M.subtract(t.position,e.position,AOe),A=M.dot(t.position,p)/M.dot(p,p);if(A>0&&A<1){let f=M.add(t.position,M.multiplyByScalar(p,-A,p),gOe),b=Kc.clone(t,bOe);b.position=f;let C=b.getLatitude(n);r.south=Math.min(r.south,C),r.north=Math.max(r.north,C),Math.abs(c)>Math.abs(C)&&(d=C)}}let u=t.x*e.y-e.x*t.y,h=Math.sign(u);h!==0&&(h*=M.angleBetween(t.position,e.position)),d>=0&&(o.northAngle+=h),d<=0&&(o.southAngle+=h)}var cue=new Kc,yOe=new Kc,Sm={northAngle:0,southAngle:0,westOverIdl:0,eastOverIdl:0};_m.computeRectangleFromPositions=function(e,t,n,i){if(l(i)||(i=new de),e.length<3)return i;i.west=Number.POSITIVE_INFINITY,i.east=Number.NEGATIVE_INFINITY,i.south=Number.POSITIVE_INFINITY,i.north=Number.NEGATIVE_INFINITY,Sm.northAngle=0,Sm.southAngle=0,Sm.westOverIdl=Number.POSITIVE_INFINITY,Sm.eastOverIdl=Number.NEGATIVE_INFINITY;let o=e.length,r=Kc.fromCartesian(e[0],yOe);for(let s=1;s<o;s++){let a=Kc.fromCartesian(e[s],cue);aue(a,r,t,n,Sm,i),r=Kc.clone(a,r)}return aue(Kc.fromCartesian(e[0],cue),r,t,n,Sm,i),i.east-i.west>Sm.eastOverIdl-Sm.westOverIdl&&(i.west=Sm.westOverIdl,i.east=Sm.eastOverIdl,i.east>L.PI&&(i.east=i.east-L.TWO_PI),i.west>L.PI&&(i.west=i.west-L.TWO_PI)),L.equalsEpsilon(Math.abs(Sm.northAngle),L.TWO_PI,L.EPSILON10)&&(i.north=L.PI_OVER_TWO,i.east=L.PI,i.west=-L.PI),L.equalsEpsilon(Math.abs(Sm.southAngle),L.TWO_PI,L.EPSILON10)&&(i.south=-L.PI_OVER_TWO,i.east=L.PI,i.west=-L.PI),i};var xOe=new Kc;function COe(e,t,n){return e.height>=L.PI||e.width>=L.PI?Kc.fromCartesian(t[0],xOe).tangentPlane:Rs.fromPoints(t,n)}var lue=new Ae;function TOe(e,t,n){return(i,o)=>{if(e.height>=L.PI||e.width>=L.PI){if(e.south<0&&e.north>0){l(o)||(o=[]);for(let s=0;s<i.length;++s){let a=n.cartesianToCartographic(i[s],lue);o[s]=new M(a.longitude/L.PI,a.latitude/L.PI_OVER_TWO)}return o.length=i.length,o}return Kc.fromCartesianArray(i,o)}return Rs.fromPoints(t,n).projectPointsOntoPlane(i,o)}}function EOe(e,t,n){if(e.height>=L.PI||e.width>=L.PI)return(o,r)=>{if(e.south<0&&e.north>0){let s=n.cartesianToCartographic(o,lue);return l(r)||(r=new M),r.x=s.longitude/L.PI,r.y=s.latitude/L.PI_OVER_TWO,r}return Kc.fromCartesian(o,r)};let i=Rs.fromPoints(t,n);return(o,r)=>i.projectPointsOntoPlane(o,r)}function SOe(e,t,n,i){return(o,r)=>!i&&(e.height>=L.PI_OVER_TWO||e.width>=2*L.PI_OVER_THREE)?ii.splitPolygonsOnEquator(o,t,n,r):o}function _Oe(e,t,n,i){if(t.height>=L.PI||t.width>=L.PI)return nt.fromRectangle(t,void 0,oue);let o=e,r=Rs.fromPoints(o,n);return ii.computeBoundingRectangle(r.plane.normal,r.projectPointOntoPlane.bind(r),o,i,oue)}_m.createGeometry=function(e){let t=e._vertexFormat,n=e._ellipsoid,i=e._granularity,o=e._stRotation,r=e._polygonHierarchy,s=e._perPositionHeight,a=e._closeTop,c=e._closeBottom,d=e._arcType,u=e._textureCoordinates,h=l(u),p=r.positions;if(p.length<3)return;let A=e.rectangle,f=ii.polygonsFromHierarchy(r,h,TOe(A,p,n),!s,n,SOe(A,n,d,s)),b=f.hierarchy,C=f.polygons,T=function(G){return G},E=h?ii.polygonsFromHierarchy(u,!0,T,!1,n).polygons:void 0;if(b.length===0)return;let S=b[0].outerRing,I=_Oe(S,A,n,o),R=[],V=e._height,W=e._extrudedHeight,B=e._perPositionHeightExtrude||!L.equalsEpsilon(V,W,0,L.EPSILON2),N={perPositionHeight:s,vertexFormat:t,geometry:void 0,rotationAxis:COe(A,S,n).plane.normal,projectTo2d:EOe(A,S,n),boundingRectangle:I,ellipsoid:n,stRotation:o,textureCoordinates:void 0,bottom:!1,top:!0,wall:!1,extrude:!1,arcType:d},P;if(B)for(N.extrude=!0,N.top=a,N.bottom=c,N.shadowVolume=e._shadowVolume,N.offsetAttribute=e._offsetAttribute,P=0;P<C.length;P++){let G=mOe(n,C[P],h?E[P]:void 0,i,b[P],s,a,c,t,d),w;a&&c?(w=G.topAndBottom,N.geometry=ii.scaleToGeodeticHeightExtruded(w.geometry,V,W,n,s)):a?(w=G.topAndBottom,w.geometry.attributes.position.values=Ii.scaleToGeodeticHeight(w.geometry.attributes.position.values,V,n,!s),N.geometry=w.geometry):c&&(w=G.topAndBottom,w.geometry.attributes.position.values=Ii.scaleToGeodeticHeight(w.geometry.attributes.position.values,W,n,!0),N.geometry=w.geometry),(a||c)&&(N.wall=!1,w.geometry=zK(N),R.push(w));let X=G.walls;N.wall=!0;for(let k=0;k<X.length;k++){let v=X[k];N.geometry=ii.scaleToGeodeticHeightExtruded(v.geometry,V,W,n,s),v.geometry=zK(N),R.push(v)}}else for(P=0;P<C.length;P++){let G=new wt({geometry:ii.createGeometryFromPositions(n,C[P],h?E[P]:void 0,i,s,t,d)});if(G.geometry.attributes.position.values=Ii.scaleToGeodeticHeight(G.geometry.attributes.position.values,V,n,!s),N.geometry=G.geometry,G.geometry=zK(N),l(e._offsetAttribute)){let w=G.geometry.attributes.position.values.length,X=e._offsetAttribute===An.NONE?0:1,k=new Uint8Array(w/3).fill(X);G.geometry.attributes.applyOffset=new we({componentDatatype:H.UNSIGNED_BYTE,componentsPerAttribute:1,values:k})}R.push(G)}let g=zn.combineInstances(R)[0];g.attributes.position.values=new Float64Array(g.attributes.position.values),g.indices=Ue.createTypedArray(g.attributes.position.values.length/3,g.indices);let _=g.attributes,Z=ue.fromVertices(_.position.values);return t.position||delete _.position,new Ct({attributes:_,indices:g.indices,primitiveType:g.primitiveType,boundingSphere:Z,offsetAttribute:e._offsetAttribute})};_m.createShadowVolume=function(e,t,n){let i=e._granularity,o=e._ellipsoid,r=t(i,o),s=n(i,o);return new _m({polygonHierarchy:e._polygonHierarchy,ellipsoid:o,stRotation:e._stRotation,granularity:i,perPositionHeight:!1,extrudedHeight:r,height:s,vertexFormat:ve.POSITION_ONLY,shadowVolume:!0,arcType:e._arcType})};function IOe(e){let t=-e._stRotation;if(t===0)return[0,0,0,1,1,0];let n=e._ellipsoid,i=e._polygonHierarchy.positions,o=e.rectangle;return Ct._textureCoordinateRotationPoints(i,t,n,o)}Object.defineProperties(_m.prototype,{rectangle:{get:function(){if(!l(this._rectangle)){let e=this._polygonHierarchy.positions;this._rectangle=_m.computeRectangleFromPositions(e,this._ellipsoid,this._arcType)}return this._rectangle}},textureCoordinateRotationPoints:{get:function(){return l(this._textureCoordinateRotationPoints)||(this._textureCoordinateRotationPoints=IOe(this)),this._textureCoordinateRotationPoints}}});var ig=_m;function xC(e){this._ellipsoid=e.ellipsoid??ie.default,this._positions=uue(e.positions),this._cachedPositions=void 0,this._cachedRectangle=void 0}function uue(e){if(!l(e))return;let t=e.length,n=Array(t);for(let i=0;i<t;i++)n[i]=m.clone(e[i]);return n}function ZOe(e,t){if(!l(e)&&!l(t))return!0;if(l(e)!==l(t)||e.length!==t.length)return!1;let n=e.length;for(let i=0;i<n;i++){let o=e[i],r=t[i];if(!m.equals(o,r))return!1}return!0}Object.defineProperties(xC.prototype,{length:{get:function(){return this._positions.length}},positions:{get:function(){return this._positions}},ellipsoid:{get:function(){return this._ellipsoid}}});xC.clone=function(e,t){return l(t)?(t._ellipsoid=e.ellipsoid,t._positions.length=0,t._positions.push(...e.positions),t):new xC({positions:e.positions,ellipsoid:e.ellipsoid})};xC.equals=function(e,t){return e.ellipsoid.equals(t.ellipsoid)&&e.positions===t.positions};xC.prototype.computeRectangle=function(e){if(ZOe(this._positions,this._cachedPositions))return de.clone(this._cachedRectangle,e);let t=ig.computeRectangleFromPositions(this.positions,this.ellipsoid,void 0,e);return this._cachedPositions=uue(this._positions),this._cachedRectangle=de.clone(t),t};var ROe=new de,due=new m;xC.prototype.computeSphericalExtents=function(e){l(e)||(e=new de);let t=this.computeRectangle(ROe),n=Ae.toCartesian(de.southwest(t),this.ellipsoid,due),i=Math.sqrt(n.x*n.x+n.y*n.y),o=L.fastApproximateAtan2(i,n.z),r=L.fastApproximateAtan2(n.x,n.y);return e.south=o,e.west=r,n=Ae.toCartesian(de.northeast(t),this.ellipsoid,due),i=Math.sqrt(n.x*n.x+n.y*n.y),o=L.fastApproximateAtan2(i,n.z),r=L.fastApproximateAtan2(n.x,n.y),e.north=o,e.east=r,e};var a_=xC;var oZn=y(x(),1),jW=`in vec2 v_textureCoordinates;
uniform int u_polygonsLength;
uniform int u_extentsLength;
uniform highp sampler2D u_polygonTexture;
uniform highp sampler2D u_extentsTexture;
int getPolygonIndex(float dimension, vec2 coord) {
vec2 uv = coord.xy * dimension;
return int(floor(uv.y) * dimension + floor(uv.x));
}
vec2 getLookupUv(ivec2 dimensions, int i) {
int pixY = i / dimensions.x;
int pixX = i - (pixY * dimensions.x);
float pixelWidth = 1.0 / float(dimensions.x);
float pixelHeight = 1.0 / float(dimensions.y);
float u = (float(pixX) + 0.5) * pixelWidth; // sample from center of pixel
float v = (float(pixY) + 0.5) * pixelHeight;
return vec2(u, v);
}
vec4 getExtents(int i) {
return texture(u_extentsTexture, getLookupUv(textureSize(u_extentsTexture, 0), i));
}
ivec2 getPositionsLengthAndExtentsIndex(int i) {
vec2 uv = getLookupUv(textureSize(u_polygonTexture, 0), i);
vec4 value = texture(u_polygonTexture, uv);
return ivec2(int(value.x), int(value.y));
}
vec2 getPolygonPosition(int i) {
vec2 uv = getLookupUv(textureSize(u_polygonTexture, 0), i);
return texture(u_polygonTexture, uv).xy;
}
vec2 getCoordinates(vec2 textureCoordinates, vec4 extents) {
float latitude = mix(extents.x, extents.x + 1.0 / extents.z, textureCoordinates.y);
float longitude = mix(extents.y, extents.y + 1.0 / extents.w, textureCoordinates.x);
return vec2(latitude, longitude);
}
void main() {
int lastPolygonIndex = 0;
out_FragColor = vec4(1.0);
// Get the relevant region of the texture
float dimension = float(u_extentsLength);
if (u_extentsLength > 2) {
dimension = ceil(log2(float(u_extentsLength)));
}
int regionIndex = getPolygonIndex(dimension, v_textureCoordinates);
if (regionIndex >= u_extentsLength) {
return; // done (no polygons in this region)
}
for (int polygonIndex = 0; polygonIndex < u_polygonsLength; polygonIndex++) {
ivec2 positionsLengthAndExtents = getPositionsLengthAndExtentsIndex(lastPolygonIndex);
int positionsLength = positionsLengthAndExtents.x;
int polygonExtentsIndex = positionsLengthAndExtents.y;
lastPolygonIndex += 1;
// Read the individual polygon extent (2 pixels: south/west, latRange/lonRange)
vec2 extentsSouthWest = getPolygonPosition(lastPolygonIndex);
vec2 extentsRange = getPolygonPosition(lastPolygonIndex + 1);
vec4 polygonExtent = vec4(extentsSouthWest, extentsRange);
lastPolygonIndex += 2;
if (polygonExtentsIndex < regionIndex) {
lastPolygonIndex += positionsLength;
continue; // skip to next (TODO: could optimize further if we knew how many polygons to skip)
} else if (polygonExtentsIndex > regionIndex) {
break; // done (we know polygons are sorted by regionIndex)
}
// Only compute signed distance for the relevant part of the atlas
float clipAmount = czm_infinity;
vec4 extents = getExtents(polygonExtentsIndex);
vec2 textureOffset = vec2(mod(float(polygonExtentsIndex), dimension), floor(float(polygonExtentsIndex) / dimension)) / dimension;
vec2 p = getCoordinates((v_textureCoordinates - textureOffset) * dimension, extents); // current pixel position
// Only consider polygons whos boundingbox includes current pixel (with a slight padding)
float padding = 0.05; // 5% of polygon extents
float polygonNorth = polygonExtent.x + polygonExtent.z;
float polygonEast = polygonExtent.y + polygonExtent.w;
float latPadding = padding * polygonExtent.z; // padding as fraction of latitude range
float lonPadding = padding * polygonExtent.w; // padding as fraction of longitude range
if (p.x < polygonExtent.x - latPadding || p.x > polygonNorth + latPadding ||
p.y < polygonExtent.y - lonPadding || p.y > polygonEast + lonPadding) {
lastPolygonIndex += positionsLength;
continue; // skip to next
}
float s = 1.0;
// Check each edge for absolute distance.
// Cache the previous vertex to halve the texture reads per iteration.
vec2 prev = getPolygonPosition(lastPolygonIndex + positionsLength - 1);
for (int i = 0; i < positionsLength; i++) {
vec2 a = getPolygonPosition(lastPolygonIndex + i);
vec2 b = prev;
prev = a;
vec2 ab = b - a;
vec2 pa = p - a;
float t = dot(pa, ab) / dot(ab, ab);
t = clamp(t, 0.0, 1.0);
vec2 pq = pa - t * ab;
float d = length(pq);
// Inside / outside computation to determine sign
bvec3 cond = bvec3(p.y >= a.y,
p.y < b.y,
ab.x * pa.y > ab.y * pa.x);
if (all(cond) || all(not(cond))) s = -s;
if (abs(d) < abs(clipAmount)) {
clipAmount = d;
}
}
// Normalize the range to [0,1]
vec4 result = (s * vec4(clipAmount * length(extents.zw))) / 2.0 + 0.5;
// In the case where we've iterated through multiple polygons, take the minimum
out_FragColor = min(out_FragColor, result);
lastPolygonIndex += positionsLength;
}
}`;function Ws(e){e=e??Q.EMPTY_OBJECT,this._polygons=[],this._totalPositions=0,this.debugShowDistanceTexture=e.debugShowDistanceTexture??!1,this.enabled=e.enabled??!0,this.inverse=e.inverse??!1,this.quality=e.quality??1,this.polygonAdded=new xe,this.polygonRemoved=new xe,this._owner=void 0,this._float32View=void 0,this._extentsFloat32View=void 0,this._extentsCount=0,this._polygonsTexture=void 0,this._extentsTexture=void 0,this._signedDistanceTexture=void 0,this._signedDistanceComputeCommand=void 0;let t=e.polygons;if(l(t)){let n=t.length;for(let i=0;i<n;++i)this._polygons.push(t[i])}}Object.defineProperties(Ws.prototype,{length:{get:function(){return this._polygons.length}},totalPositions:{get:function(){return this._totalPositions}},extentsTexture:{get:function(){return this._extentsTexture}},extentsCount:{get:function(){return this._extentsCount}},pixelsNeededForExtents:{get:function(){return this.length}},pixelsNeededForPolygonPositions:{get:function(){return this.totalPositions+3*this.length}},clippingTexture:{get:function(){return this._signedDistanceTexture}},owner:{get:function(){return this._owner}},clippingPolygonsState:{get:function(){return this.inverse?-this.extentsCount:this.extentsCount}}});Ws.prototype.add=function(e){let t=this._polygons.length;return this._polygons.push(e),this.polygonAdded.raiseEvent(e,t),e};Ws.prototype.get=function(e){return this._polygons[e]};Ws.prototype.contains=function(e){return this._polygons.some(t=>a_.equals(t,e))};Ws.prototype.remove=function(e){let t=this._polygons,n=t.findIndex(i=>a_.equals(i,e));return n===-1?!1:(t.splice(n,1),this.polygonRemoved.raiseEvent(e,n),!0)};function VOe(e,t,n){let i=Math.max(e.height*t,0),o=Math.max(e.width*t,0),r=de.clone(e,n);return r.south-=i,r.west-=o,r.north+=i,r.east+=o,r.south=Math.max(r.south,-Math.PI),r.west=Math.max(r.west,-Math.PI),r.north=Math.min(r.north,Math.PI),r.east=Math.min(r.east,Math.PI),r}function GOe(e,t){let i=[],o=e.length;for(let a=0;a<o;++a){let c=VOe(t[a],2.5),d=-1;for(let u=0;u<i.length;++u)if(l(de.simpleIntersection(i[u].extent,c))){d=u;break}if(d===-1)i.push({extent:c,polygonIndices:[a]});else{let u=i[d];u.polygonIndices.push(a),de.union(u.extent,c,u.extent);for(let h=0;h<i.length;++h)h!==d&&l(de.simpleIntersection(i[h].extent,u.extent))&&(u.polygonIndices.push(...i[h].polygonIndices),de.union(u.extent,i[h].extent,u.extent),i.splice(h,1),h<d&&d--,h=-1)}}let r=i.map(a=>a.extent),s=new Map;return i.forEach((a,c)=>a.polygonIndices.forEach(d=>s.set(d,c))),{extentsList:r,extentsIndexByPolygon:s}}Ws.prototype.removeAll=function(){let e=this._polygons,t=e.length;for(let n=0;n<t;++n){let i=e[n];this.polygonRemoved.raiseEvent(i,n)}this._polygons=[]};function LOe(e){let t=e._float32View,n=e._extentsFloat32View,i=e._polygons,o=i.map(u=>u.computeSphericalExtents()),{extentsList:r,extentsIndexByPolygon:s}=GOe(i,o),a=Array.from(i.keys()).sort((u,h)=>s.get(u)-s.get(h)),c=0;for(let u of a){let h=i[u],p=h.length;t[c++]=p,t[c++]=s.get(u);let A=o[u];t[c++]=A.south,t[c++]=A.west,t[c++]=A.north-A.south,t[c++]=A.east-A.west;for(let f=0;f<p;++f){let b=h.positions[f],C=Math.hypot(b.x,b.y),T=L.fastApproximateAtan2(C,b.z),E=L.fastApproximateAtan2(b.x,b.y);t[c++]=T,t[c++]=E}}let d=0;for(let u of r){let h=1/(u.east-u.west),p=1/(u.north-u.south);n[d++]=u.south,n[d++]=u.west,n[d++]=p,n[d++]=h}e._extentsCount=r.length}var HK=new M;Ws.prototype.update=function(e){let t=e.context;if(!Ws.isSupported(e))throw new me("ClippingPolygonCollections are only supported for WebGL 2.");this.debugShowDistanceTexture&&l(this._signedDistanceTexture)&&(l(this.debugCommand)||(this.debugCommand=WOe(this._signedDistanceTexture,e.context)),e.commandList.push(this.debugCommand));let n=this._polygons.reduce((s,a)=>s+a.length,0);if(n===this.totalPositions||(this._totalPositions=n,this.length===0))return;l(this._signedDistanceComputeCommand)&&(this._signedDistanceComputeCommand.canceled=!0,this._signedDistanceComputeCommand=void 0);let i=this._polygonsTexture,o=this._extentsTexture,r=this._signedDistanceTexture;if(l(i)){let s=i.width*i.height;(s<this.pixelsNeededForPolygonPositions||this.pixelsNeededForPolygonPositions<.25*s)&&(i.destroy(),i=void 0,this._polygonsTexture=void 0)}if(!l(i)){let s=Ws.getTextureResolution(i,this.pixelsNeededForPolygonPositions,HK);i=new Lt({context:t,width:s.x,height:s.y,pixelFormat:Ke.RG,pixelDatatype:Oe.FLOAT,sampler:Ht.NEAREST,flipY:!1}),this._float32View=new Float32Array(s.x*s.y*2),this._polygonsTexture=i}if(l(o)){let s=o.width*o.height;(s<this.pixelsNeededForExtents||this.pixelsNeededForExtents<.25*s)&&(o.destroy(),o=void 0,this._extentsTexture=void 0)}if(!l(o)){let s=Ws.getTextureResolution(o,this.pixelsNeededForExtents,HK);o=new Lt({context:t,width:s.x,height:s.y,pixelFormat:Ke.RGBA,pixelDatatype:Oe.FLOAT,sampler:Ht.NEAREST,flipY:!1}),this._extentsFloat32View=new Float32Array(s.x*s.y*4),this._extentsTexture=o}if(LOe(this),o.copyFrom({source:{width:o.width,height:o.height,arrayBufferView:this._extentsFloat32View}}),i.copyFrom({source:{width:i.width,height:i.height,arrayBufferView:this._float32View}}),!l(r)){let s=Ws.getClippingDistanceTextureResolution(this,HK);r=new Lt({context:t,width:s.x,height:s.y,pixelFormat:t.webgl2?Ke.RED:Ke.LUMINANCE,pixelDatatype:Oe.FLOAT,sampler:new Ht({wrapS:gn.CLAMP_TO_EDGE,wrapT:gn.CLAMP_TO_EDGE,minificationFilter:zt.LINEAR,magnificationFilter:li.LINEAR}),flipY:!1}),this._signedDistanceTexture=r}this._signedDistanceComputeCommand=FOe(this)};function WOe(e,t){let i=t.createViewportQuadCommand(`uniform highp sampler2D billboard_texture;
in vec2 v_textureCoordinates;
float getSignedDistance(vec2 uv, highp sampler2D clippingDistance) {
float signedDistance = texture(clippingDistance, uv).r;
return (signedDistance - 0.5) * 2.0;
}
void main()
{
float dist = texture(billboard_texture, v_textureCoordinates).r;
if (dist > 0.5) {
out_FragColor = vec4(dist, 0.0, 0.0, 1.0);
} else {
out_FragColor = vec4(0.0, dist, 0.0, 1.0);
}
}
`,{uniformMap:{billboard_texture:function(){return e}}});return i.pass=Ge.OVERLAY,i}Ws.prototype.queueCommands=function(e){l(this._signedDistanceComputeCommand)&&e.commandList.push(this._signedDistanceComputeCommand)};function FOe(e){let t=e._polygonsTexture,n=e._extentsTexture;return new yl({fragmentShaderSource:jW,outputTexture:e._signedDistanceTexture,uniformMap:{u_polygonsLength:function(){return e.length},u_extentsLength:function(){return e.extentsCount},u_extentsTexture:function(){return n},u_polygonTexture:function(){return t}},persists:!1,owner:e,postExecute:()=>{e._signedDistanceComputeCommand=void 0}})}var mue=new de,BOe=new de,wOe=new de;Ws.prototype.computeIntersectionWithBoundingVolume=function(e,t){let n=this._polygons,i=n.length,o=qt.OUTSIDE;this.inverse&&(o=qt.INSIDE);let r=e.rectangle;if(!l(r)&&l(e.boundingVolume?.computeCorners)){let s=e.boundingVolume.computeCorners();r=de.fromCartesianArray(s,t,mue)}l(r)||(r=de.fromBoundingSphere(e.boundingSphere,t,mue));for(let s=0;s<i;++s){let c=n[s].computeRectangle(wOe),d=de.simpleIntersection(r,c,BOe);if(l(d))return qt.INTERSECTING}return o};Ws.setOwner=function(e,t,n){e!==t[n]&&(t[n]=t[n]&&t[n].destroy(),l(e)&&(e._owner=t,t[n]=e))};Ws.isSupported=function(e){return e?.context.webgl2};Ws.getTextureResolution=function(e,t,n){if(l(e))return n.x=e.width,n.y=e.height,n;let i=Bt.maximumTextureSize;return n.x=Math.min(t,i),n.y=Math.ceil(t/n.x),n.y*=2,n};Ws.getClippingDistanceTextureResolution=function(e,t){let n=e.signedDistanceTexture;if(l(n))return t.x=n.width,t.y=n.height,t;let i=e.quality,o=Math.max(128,Math.ceil(4096*i));return t.x=Math.min(Bt.maximumTextureSize,o),t.y=Math.min(Bt.maximumTextureSize,o),t};Ws.getClippingExtentsTextureResolution=function(e,t){let n=e.extentsTexture;return l(n)?(t.x=n.width,t.y=n.height,t):Ws.getTextureResolution(n,e.pixelsNeededForExtents,t)};Ws.prototype.isDestroyed=function(){return!1};Ws.prototype.destroy=function(){return l(this._signedDistanceComputeCommand)&&(this._signedDistanceComputeCommand.canceled=!0),this._polygonsTexture=this._polygonsTexture&&this._polygonsTexture.destroy(),this._extentsTexture=this._extentsTexture&&this._extentsTexture.destroy(),this._signedDistanceTexture=this._signedDistanceTexture&&this._signedDistanceTexture.destroy(),he(this)};var Uh=Ws;var CRn=y(x(),1);var BZn=y(x(),1);var VZn=y(x(),1),qW={NONE:0,SCENE_LIGHT:1,SUNLIGHT:2};qW.fromGlobeFlags=function(e){return e.enableLighting&&e.dynamicAtmosphereLighting?e.dynamicAtmosphereLightingFromSun?qW.SUNLIGHT:qW.SCENE_LIGHT:qW.NONE};var og=Object.freeze(qW);function hue(){this.lightIntensity=10,this.rayleighCoefficient=new m(55e-7,13e-6,284e-7),this.mieCoefficient=new m(21e-6,21e-6,21e-6),this.rayleighScaleHeight=1e4,this.mieScaleHeight=3200,this.mieAnisotropy=.9,this.hueShift=0,this.saturationShift=0,this.brightnessShift=0,this.dynamicLighting=og.NONE}hue.requiresColorCorrect=function(e){return!(L.equalsEpsilon(e.hueShift,0,L.EPSILON7)&&L.equalsEpsilon(e.saturationShift,0,L.EPSILON7)&&L.equalsEpsilon(e.brightnessShift,0,L.EPSILON7))};var CC=hue;var NZn=y(x(),1),Dh=`uniform vec3 u_radiiAndDynamicAtmosphereColor;
uniform float u_atmosphereLightIntensity;
uniform float u_atmosphereRayleighScaleHeight;
uniform float u_atmosphereMieScaleHeight;
uniform float u_atmosphereMieAnisotropy;
uniform vec3 u_atmosphereRayleighCoefficient;
uniform vec3 u_atmosphereMieCoefficient;
const float ATMOSPHERE_THICKNESS = 111e3; // The thickness of the atmosphere in meters.
const int PRIMARY_STEPS_MAX = 16; // Maximum number of times the ray from the camera to the world position (primary ray) is sampled.
const int LIGHT_STEPS_MAX = 4; // Maximum number of times the light is sampled from the light source's intersection with the atmosphere to a sample position on the primary ray.
/**
* This function computes the colors contributed by Rayliegh and Mie scattering on a given ray, as well as
* the transmittance value for the ray.
*
* @param {czm_ray} primaryRay The ray from the camera to the position.
* @param {float} primaryRayLength The length of the primary ray.
* @param {vec3} lightDirection The direction of the light to calculate the scattering from.
* @param {vec3} rayleighColor The variable the Rayleigh scattering will be written to.
* @param {vec3} mieColor The variable the Mie scattering will be written to.
* @param {float} opacity The variable the transmittance will be written to.
* @glslFunction
*/
void computeScattering(
czm_ray primaryRay,
float primaryRayLength,
vec3 lightDirection,
float atmosphereInnerRadius,
out vec3 rayleighColor,
out vec3 mieColor,
out float opacity
) {
// Initialize the default scattering amounts to 0.
rayleighColor = vec3(0.0);
mieColor = vec3(0.0);
opacity = 0.0;
float atmosphereOuterRadius = atmosphereInnerRadius + ATMOSPHERE_THICKNESS;
vec3 origin = vec3(0.0);
// Calculate intersection from the camera to the outer ring of the atmosphere.
czm_raySegment primaryRayAtmosphereIntersect = czm_raySphereIntersectionInterval(primaryRay, origin, atmosphereOuterRadius);
// Return empty colors if no intersection with the atmosphere geometry.
if (primaryRayAtmosphereIntersect == czm_emptyRaySegment) {
return;
}
// To deal with smaller values of PRIMARY_STEPS (e.g. 4)
// we implement a split strategy: sky or horizon.
// For performance reasons, instead of a if/else branch
// a soft choice is implemented through a weight 0.0 <= w_stop_gt_lprl <= 1.0
float x = 1e-7 * primaryRayAtmosphereIntersect.stop / length(primaryRayLength);
// Value close to 0.0: close to the horizon
// Value close to 1.0: above in the sky
float w_stop_gt_lprl = 0.5 * (1.0 + czm_approximateTanh(x));
// The ray should start from the first intersection with the outer atmopshere, or from the camera position, if it is inside the atmosphere.
float start_0 = primaryRayAtmosphereIntersect.start;
primaryRayAtmosphereIntersect.start = max(primaryRayAtmosphereIntersect.start, 0.0);
// The ray should end at the exit from the atmosphere or at the distance to the vertex, whichever is smaller.
primaryRayAtmosphereIntersect.stop = min(primaryRayAtmosphereIntersect.stop, length(primaryRayLength));
// For the number of ray steps, distinguish inside or outside atmosphere (outer space)
// (1) from outer space we have to use more ray steps to get a realistic rendering
// (2) within atmosphere we need fewer steps for faster rendering
float x_o_a = start_0 - ATMOSPHERE_THICKNESS; // ATMOSPHERE_THICKNESS used as an ad-hoc constant, no precise meaning here, only the order of magnitude matters
float w_inside_atmosphere = 1.0 - 0.5 * (1.0 + czm_approximateTanh(x_o_a));
int PRIMARY_STEPS = PRIMARY_STEPS_MAX - int(w_inside_atmosphere * 12.0); // Number of times the ray from the camera to the world position (primary ray) is sampled.
int LIGHT_STEPS = LIGHT_STEPS_MAX - int(w_inside_atmosphere * 2.0); // Number of times the light is sampled from the light source's intersection with the atmosphere to a sample position on the primary ray.
// Setup for sampling positions along the ray - starting from the intersection with the outer ring of the atmosphere.
float rayPositionLength = primaryRayAtmosphereIntersect.start;
// (1) Outside the atmosphere: constant rayStepLength
// (2) Inside atmosphere: variable rayStepLength to compensate the rough rendering of the smaller number of ray steps
float totalRayLength = primaryRayAtmosphereIntersect.stop - rayPositionLength;
float rayStepLengthIncrease = w_inside_atmosphere * ((1.0 - w_stop_gt_lprl) * totalRayLength / (float(PRIMARY_STEPS * (PRIMARY_STEPS + 1)) / 2.0));
float rayStepLength = max(1.0 - w_inside_atmosphere, w_stop_gt_lprl) * totalRayLength / max(7.0 * w_inside_atmosphere, float(PRIMARY_STEPS));
vec3 rayleighAccumulation = vec3(0.0);
vec3 mieAccumulation = vec3(0.0);
vec2 opticalDepth = vec2(0.0);
vec2 heightScale = vec2(u_atmosphereRayleighScaleHeight, u_atmosphereMieScaleHeight);
// Sample positions on the primary ray.
for (int i = 0; i < PRIMARY_STEPS_MAX; ++i) {
// The loop should be: for (int i = 0; i < PRIMARY_STEPS; ++i) {...} but WebGL1 cannot
// loop with non-constant condition, so it has to break early instead
if (i >= PRIMARY_STEPS) {
break;
}
// Calculate sample position along viewpoint ray.
vec3 samplePosition = primaryRay.origin + primaryRay.direction * (rayPositionLength + rayStepLength);
// Calculate height of sample position above ellipsoid.
float sampleHeight = length(samplePosition) - atmosphereInnerRadius;
// Calculate and accumulate density of particles at the sample position.
vec2 sampleDensity = exp(-sampleHeight / heightScale) * rayStepLength;
opticalDepth += sampleDensity;
// Generate ray from the sample position segment to the light source, up to the outer ring of the atmosphere.
czm_ray lightRay = czm_ray(samplePosition, lightDirection);
czm_raySegment lightRayAtmosphereIntersect = czm_raySphereIntersectionInterval(lightRay, origin, atmosphereOuterRadius);
float lightStepLength = lightRayAtmosphereIntersect.stop / float(LIGHT_STEPS);
float lightPositionLength = 0.0;
vec2 lightOpticalDepth = vec2(0.0);
// Sample positions along the light ray, to accumulate incidence of light on the latest sample segment.
for (int j = 0; j < LIGHT_STEPS_MAX; ++j) {
// The loop should be: for (int j = 0; i < LIGHT_STEPS; ++j) {...} but WebGL1 cannot
// loop with non-constant condition, so it has to break early instead
if (j >= LIGHT_STEPS) {
break;
}
// Calculate sample position along light ray.
vec3 lightPosition = samplePosition + lightDirection * (lightPositionLength + lightStepLength * 0.5);
// Calculate height of the light sample position above ellipsoid.
float lightHeight = length(lightPosition) - atmosphereInnerRadius;
// Calculate density of photons at the light sample position.
lightOpticalDepth += exp(-lightHeight / heightScale) * lightStepLength;
// Increment distance on light ray.
lightPositionLength += lightStepLength;
}
// Compute attenuation via the primary ray and the light ray.
vec3 attenuation = exp(-((u_atmosphereMieCoefficient * (opticalDepth.y + lightOpticalDepth.y)) + (u_atmosphereRayleighCoefficient * (opticalDepth.x + lightOpticalDepth.x))));
// Accumulate the scattering.
rayleighAccumulation += sampleDensity.x * attenuation;
mieAccumulation += sampleDensity.y * attenuation;
// Increment distance on primary ray.
rayPositionLength += (rayStepLength += rayStepLengthIncrease);
}
// Compute the scattering amount.
rayleighColor = u_atmosphereRayleighCoefficient * rayleighAccumulation;
mieColor = u_atmosphereMieCoefficient * mieAccumulation;
// Compute the transmittance i.e. how much light is passing through the atmosphere.
opacity = length(exp(-((u_atmosphereMieCoefficient * opticalDepth.y) + (u_atmosphereRayleighCoefficient * opticalDepth.x))));
}
vec4 computeAtmosphereColor(
vec3 positionWC,
vec3 lightDirection,
vec3 rayleighColor,
vec3 mieColor,
float opacity
) {
// Setup the primary ray: from the camera position to the vertex position.
vec3 cameraToPositionWC = positionWC - czm_viewerPositionWC;
vec3 cameraToPositionWCDirection = normalize(cameraToPositionWC);
float cosAngle = dot(cameraToPositionWCDirection, lightDirection);
float cosAngleSq = cosAngle * cosAngle;
float G = u_atmosphereMieAnisotropy;
float GSq = G * G;
// The Rayleigh phase function.
float rayleighPhase = 3.0 / (50.2654824574) * (1.0 + cosAngleSq);
// The Mie phase function.
float miePhase = 3.0 / (25.1327412287) * ((1.0 - GSq) * (cosAngleSq + 1.0)) / (pow(1.0 + GSq - 2.0 * cosAngle * G, 1.5) * (2.0 + GSq));
// The final color is generated by combining the effects of the Rayleigh and Mie scattering.
vec3 rayleigh = rayleighPhase * rayleighColor;
vec3 mie = miePhase * mieColor;
vec3 color = (rayleigh + mie) * u_atmosphereLightIntensity;
return vec4(color, opacity);
}
`;var XZn=y(x(),1),$W=`uniform samplerCube u_radianceMap;
in vec2 v_textureCoordinates;
const float twoSqrtPi = 2.0 * sqrt(czm_pi);
// Coutesy of https://www.ppsloan.org/publications/StupidSH36.pdf
float computeShBasis(int index, vec3 s) {
if (index == 0) { // l = 0, m = 0
return 1.0 / twoSqrtPi;
}
if (index == 1) { // l = 1, m = -1
return -sqrt(3.0) * s.y / twoSqrtPi;
}
if (index == 2) { // l = 1, m = 0
return sqrt(3.0) * s.z / twoSqrtPi;
}
if (index == 3) { // l = 1, m = 1
return -sqrt(3.0) * s.x / twoSqrtPi;
}
if (index == 4) { // l = 2, m = -2
return sqrt(15.0) * s.y * s.x / twoSqrtPi;
}
if (index == 5) { // l = 2, m = -1
return -sqrt(15.0) * s.y * s.z / twoSqrtPi;
}
if (index == 6) { // l = 2, m = 0
return sqrt(5.0) * (3.0 * s.z * s.z - 1.0) / 2.0 / twoSqrtPi;
}
if (index == 7) { // l = 2, m = 1
return -sqrt(15.0) * s.x * s.z / twoSqrtPi;
}
if (index == 8) { // l = 2, m = 2
return sqrt(15.0) * (s.x * s.x - s.y * s.y) / 2.0 / twoSqrtPi;
}
return 0.0;
}
float vdcRadicalInverse(int i)
{
float r;
float base = 2.0;
float value = 0.0;
float invBase = 1.0 / base;
float invBi = invBase;
for (int x = 0; x < 100; x++)
{
if (i <= 0)
{
break;
}
r = mod(float(i), base);
value += r * invBi;
invBi *= invBase;
i = int(float(i) * invBase);
}
return value;
}
vec2 hammersley2D(int i, int N)
{
return vec2(float(i) / float(N), vdcRadicalInverse(i));
}
// Sample count is relatively low for the sake of performance, but should still be enough to capture directionality needed for third-order harmonics
const int samples = 256;
const float solidAngle = 1.0 / float(samples);
void main() {
// Get the current coefficient based on the uv
vec2 uv = v_textureCoordinates.xy * 3.0;
int coefficientIndex = int(floor(uv.y) * 3.0 + floor(uv.x));
for (int i = 0; i < samples; ++i) {
vec2 xi = hammersley2D(i, samples);
float phi = czm_twoPi * xi.x;
float cosTheta = 1.0 - 2.0 * sqrt(1.0 - xi.y * xi.y);
float sinTheta = sqrt(1.0 - cosTheta * cosTheta);
vec3 direction = normalize(vec3(sinTheta * cos(phi), cosTheta, sinTheta * sin(phi)));
// Generate the spherical harmonics basis from the direction
float Ylm = computeShBasis(coefficientIndex, direction);
vec3 lookupDirection = -direction.xyz;
lookupDirection.z = -lookupDirection.z;
vec4 color = czm_textureCube(u_radianceMap, lookupDirection, 0.0);
// Use the relevant function for this coefficient
out_FragColor += Ylm * color * solidAngle * sinTheta;
}
}
`;var MZn=y(x(),1),eF=`precision highp float;
in vec2 v_textureCoordinates;
uniform vec3 u_faceDirection; // Current cubemap face
uniform vec3 u_positionWC;
uniform mat4 u_enuToFixedFrame;
uniform vec4 u_brightnessSaturationGammaIntensity;
uniform vec4 u_groundColor; // alpha component represent albedo
vec4 getCubeMapDirection(vec2 uv, vec3 faceDir) {
vec2 scaledUV = uv * 2.0 - 1.0;
if (faceDir.x != 0.0) {
return vec4(faceDir.x, scaledUV.x * faceDir.x, -scaledUV.y, 0.0);
} else if (faceDir.y != 0.0) {
return vec4(scaledUV.x, -scaledUV.y * faceDir.y, faceDir.y, 0.0);
} else {
return vec4(scaledUV.x * faceDir.z, -faceDir.z, -scaledUV.y, 0.0);
}
}
void main() {
float height = length(u_positionWC);
float atmosphereInnerRadius = u_radiiAndDynamicAtmosphereColor.y;
float ellipsoidHeight = max(height - atmosphereInnerRadius, 0.0);
// Scale the position to ensure the sky color is present, even when underground.
vec3 positionWC = u_positionWC / height * (ellipsoidHeight + atmosphereInnerRadius);
float atmosphereOuterRadius = u_radiiAndDynamicAtmosphereColor.x;
float atmosphereHeight = atmosphereOuterRadius - atmosphereInnerRadius;
vec3 direction = (u_enuToFixedFrame * getCubeMapDirection(v_textureCoordinates, u_faceDirection)).xyz;
vec3 normalizedDirection = normalize(direction);
czm_ray ray = czm_ray(positionWC, normalizedDirection);
czm_raySegment intersection = czm_raySphereIntersectionInterval(ray, vec3(0.0), atmosphereInnerRadius);
if (!czm_isEmpty(intersection)) {
intersection = czm_rayEllipsoidIntersectionInterval(ray, vec3(0.0), czm_ellipsoidInverseRadii);
}
bool onEllipsoid = intersection.start >= 0.0;
float rayLength = czm_branchFreeTernary(onEllipsoid, intersection.start, atmosphereOuterRadius);
// Compute sky color for each position on a sphere at radius centered around the provided position's origin
vec3 skyPositionWC = positionWC + normalizedDirection * rayLength;
float lightEnum = u_radiiAndDynamicAtmosphereColor.z;
vec3 lightDirectionWC = normalize(czm_getDynamicAtmosphereLightDirection(skyPositionWC, lightEnum));
vec3 mieColor;
vec3 rayleighColor;
float opacity;
czm_computeScattering(
ray,
rayLength,
lightDirectionWC,
atmosphereInnerRadius,
rayleighColor,
mieColor,
opacity
);
vec4 atmopshereColor = czm_computeAtmosphereColor(ray, lightDirectionWC, rayleighColor, mieColor, opacity);
#ifdef ATMOSPHERE_COLOR_CORRECT
const bool ignoreBlackPixels = true;
atmopshereColor.rgb = czm_applyHSBShift(atmopshereColor.rgb, czm_atmosphereHsbShift, ignoreBlackPixels);
#endif
vec3 lookupDirection = -normalizedDirection;
// Flipping the X vector is a cheap way to get the inverse of czm_temeToPseudoFixed, since that's a rotation about Z.
lookupDirection.x = -lookupDirection.x;
lookupDirection = -normalize(czm_temeToPseudoFixed * lookupDirection);
lookupDirection.x = -lookupDirection.x;
// Values outside the atmopshere are rendered as black, when they should be treated as transparent
float skyAlpha = clamp((1.0 - ellipsoidHeight / atmosphereHeight) * atmopshereColor.a, 0.0, 1.0);
skyAlpha = czm_branchFreeTernary(length(atmopshereColor.rgb) <= czm_epsilon7, 0.0, skyAlpha); // Treat black as transparent
// Blend starmap with atmopshere scattering
float intensity = u_brightnessSaturationGammaIntensity.w;
vec4 sceneSkyBoxColor = czm_textureCube(czm_environmentMap, lookupDirection);
vec3 skyBackgroundColor = mix(czm_backgroundColor.rgb, sceneSkyBoxColor.rgb, sceneSkyBoxColor.a);
vec4 combinedSkyColor = vec4(mix(skyBackgroundColor, atmopshereColor.rgb * intensity, skyAlpha), 1.0);
// Compute ground color based on amount of reflected light, then blend it with ground atmosphere based on height
vec3 up = normalize(positionWC);
float occlusion = max(dot(lightDirectionWC, up), 0.05);
vec4 groundColor = vec4(u_groundColor.rgb * u_groundColor.a * (vec3(intensity * occlusion) + atmopshereColor.rgb), 1.0);
vec4 blendedGroundColor = mix(groundColor, atmopshereColor, clamp(ellipsoidHeight / atmosphereHeight, 0.0, 1.0));
vec4 color = czm_branchFreeTernary(onEllipsoid, blendedGroundColor, combinedSkyColor);
float brightness = u_brightnessSaturationGammaIntensity.x;
float saturation = u_brightnessSaturationGammaIntensity.y;
float gamma = u_brightnessSaturationGammaIntensity.z;
#ifdef ENVIRONMENT_COLOR_CORRECT
color.rgb = mix(vec3(0.0), color.rgb, brightness);
color.rgb = czm_saturation(color.rgb, saturation);
#endif
color.rgb = pow(color.rgb, vec3(gamma)); // Normally this would be in the ifdef above, but there is a precision issue with the atmopshere scattering transmittance (alpha). Having this line is a workaround for that issue, even when gamma is 1.0.
color.rgb = czm_gammaCorrect(color.rgb);
out_FragColor = color;
}
`;var UZn=y(x(),1),tF=`precision highp float;
in vec3 v_textureCoordinates;
uniform float u_roughness;
uniform samplerCube u_radianceTexture;
uniform vec3 u_faceDirection;
float vdcRadicalInverse(int i)
{
float r;
float base = 2.0;
float value = 0.0;
float invBase = 1.0 / base;
float invBi = invBase;
for (int x = 0; x < 100; x++)
{
if (i <= 0)
{
break;
}
r = mod(float(i), base);
value += r * invBi;
invBi *= invBase;
i = int(float(i) * invBase);
}
return value;
}
vec2 hammersley2D(int i, int N)
{
return vec2(float(i) / float(N), vdcRadicalInverse(i));
}
vec3 importanceSampleGGX(vec2 xi, float alphaRoughness, vec3 N)
{
float alphaRoughnessSquared = alphaRoughness * alphaRoughness;
float phi = czm_twoPi * xi.x;
float cosTheta = sqrt((1.0 - xi.y) / (1.0 + (alphaRoughnessSquared - 1.0) * xi.y));
float sinTheta = sqrt(1.0 - cosTheta * cosTheta);
vec3 H = vec3(sinTheta * cos(phi), sinTheta * sin(phi), cosTheta);
vec3 upVector = abs(N.z) < 0.999 ? vec3(0.0, 0.0, 1.0) : vec3(1.0, 0.0, 0.0);
vec3 tangentX = normalize(cross(upVector, N));
vec3 tangentY = cross(N, tangentX);
return tangentX * H.x + tangentY * H.y + N * H.z;
}
// Sample count is relatively low for the sake of performance, but should still be enough to prevent artifacting in lower roughnesses
const int samples = 128;
void main() {
vec3 normal = u_faceDirection;
vec3 V = normalize(v_textureCoordinates);
float roughness = u_roughness;
vec4 color = vec4(0.0);
float weight = 0.0;
for (int i = 0; i < samples; ++i) {
vec2 xi = hammersley2D(i, samples);
vec3 H = importanceSampleGGX(xi, roughness, V);
vec3 L = 2.0 * dot(V, H) * H - V; // reflected vector
float NdotL = max(dot(V, L), 0.0);
if (NdotL > 0.0) {
color += vec4(czm_textureCube(u_radianceTexture, L).rgb, 1.0) * NdotL;
weight += NdotL;
}
}
out_FragColor = color / weight;
}
`;var kZn=y(x(),1),nF=`in vec3 position;
out vec3 v_textureCoordinates;
uniform vec3 u_faceDirection;
vec3 getCubeMapDirection(vec2 uv, vec3 faceDir) {
vec2 scaledUV = uv;
if (faceDir.x != 0.0) {
return vec3(faceDir.x, scaledUV.y, scaledUV.x * faceDir.x);
} else if (faceDir.y != 0.0) {
return vec3(scaledUV.x, -faceDir.y, -scaledUV.y * faceDir.y);
} else {
return vec3(scaledUV.x * faceDir.z, scaledUV.y, -faceDir.z);
}
}
void main()
{
v_textureCoordinates = getCubeMapDirection(position.xy, u_faceDirection);
v_textureCoordinates.y = -v_textureCoordinates.y;
v_textureCoordinates.z = -v_textureCoordinates.z;
gl_Position = vec4(position, 1.0);
}
`;function bi(e){this._position=void 0,this._radianceMapDirty=!1,this._radianceCommandsDirty=!1,this._convolutionsCommandsDirty=!1,this._irradianceCommandDirty=!1,this._irradianceTextureDirty=!1,this._sphericalHarmonicCoefficientsDirty=!1,this._shouldRegenerateShaders=!1,this._shouldReset=!1,e=e??Q.EMPTY_OBJECT;let t=Math.max(Math.floor(Math.min(e.mipmapLevels??7,Math.log2(Bt.maximumCubeMapSize))),0);this._mipmapLevels=t;let n=Math.max(t-1,0)*6;this._radianceMapComputeCommands=new Array(6),this._convolutionComputeCommands=new Array(n),this._irradianceComputeCommand=void 0,this._radianceMapFS=void 0,this._irradianceMapFS=void 0,this._convolveSP=void 0,this._va=void 0,this._radianceMapTextures=new Array(6),this._specularMapTextures=new Array(n),this._radianceCubeMap=void 0,this._irradianceMapTexture=void 0,this._sphericalHarmonicCoefficients=bi.DEFAULT_SPHERICAL_HARMONIC_COEFFICIENTS.slice(),this._lastTime=new q;let i=Math.max(Math.pow(2,t-1),1);this._textureDimensions=new M(i,i),this._radiiAndDynamicAtmosphereColor=new m,this._sceneEnvironmentMap=void 0,this._backgroundColor=void 0,this._owner=void 0,this.enabled=e.enabled??!0,this.shouldUpdate=!0,this.maximumSecondsDifference=e.maximumSecondsDifference??3600,this.maximumPositionEpsilon=e.maximumPositionEpsilon??1e3,this.atmosphereScatteringIntensity=e.atmosphereScatteringIntensity??2,this.gamma=e.gamma??1,this.brightness=e.brightness??1,this.saturation=e.saturation??1,this.groundColor=e.groundColor??bi.AVERAGE_EARTH_GROUND_COLOR,this.groundAlbedo=e.groundAlbedo??.31}Object.defineProperties(bi.prototype,{owner:{get:function(){return this._owner}},shouldRegenerateShaders:{get:function(){return this._shouldRegenerateShaders}},position:{get:function(){return this._position},set:function(e){m.equalsEpsilon(e,this._position,0,this.maximumPositionEpsilon)||(this._position=m.clone(e,this._position),this._shouldReset=!0)}},radianceCubeMap:{get:function(){return this._radianceCubeMap}},maximumMipmapLevel:{get:function(){return this._mipmapLevels}},sphericalHarmonicCoefficients:{get:function(){return this._sphericalHarmonicCoefficients}}});bi._maximumComputeCommandCount=8;bi._activeComputeCommandCount=0;bi._nextFrameCommandQueue=[];bi._queueCommand=(e,t)=>{if(bi._activeComputeCommandCount>=bi._maximumComputeCommandCount){bi._nextFrameCommandQueue.push(e);return}t.commandList.push(e),bi._activeComputeCommandCount++};bi._updateCommandQueue=e=>{if(bi._maximumComputeCommandCount=Math.log2(Bt.maximumCubeMapSize),bi._nextFrameCommandQueue.length>0&&bi._activeComputeCommandCount<bi._maximumComputeCommandCount){let t=bi._nextFrameCommandQueue.shift();for(;l(t)&&bi._activeComputeCommandCount<bi._maximumComputeCommandCount;){if(t.owner.isDestroyed()||t.canceled){t=bi._nextFrameCommandQueue.shift();continue}e.commandList.push(t),bi._activeComputeCommandCount++,t=bi._nextFrameCommandQueue.shift()}l(t)&&bi._nextFrameCommandQueue.push(t)}};bi.setOwner=function(e,t,n){e!==t[n]&&(t[n]=t[n]&&t[n].destroy(),l(e)&&(e._owner=t,t[n]=e))};bi.prototype.reset=function(){let e=this._radianceMapComputeCommands.length;for(let t=0;t<e;++t)l(this._radianceMapComputeCommands[t])&&(this._radianceMapComputeCommands[t].canceled=!0),this._radianceMapComputeCommands[t]=void 0;e=this._convolutionComputeCommands.length;for(let t=0;t<e;++t)l(this._convolutionComputeCommands[t])&&(this._convolutionComputeCommands[t].canceled=!0),this._convolutionComputeCommands[t]=void 0;l(this._irradianceComputeCommand)&&(this._irradianceComputeCommand.canceled=!0,this._irradianceComputeCommand=void 0),this._radianceMapDirty=!0,this._radianceCommandsDirty=!0,this._convolutionsCommandsDirty=!1,this._irradianceCommandDirty=!1};var NOe=new m,POe=new m;function XOe(e,t){let n=e._position,i=t.atmosphere,o=t.mapProjection.ellipsoid,r=o.scaleToGeodeticSurface(n,POe),s=1.025,a=NOe,c=l(r)?m.magnitude(r):o.maximumRadius;return a.x=c*s,a.y=c,a.z=i.dynamicLighting,!m.equalsEpsilon(e._radiiAndDynamicAtmosphereColor,a)||t.environmentMap!==e._sceneEnvironmentMap||t.backgroundColor!==e._backgroundColor?(m.clone(a,e._radiiAndDynamicAtmosphereColor),e._sceneEnvironmentMap=t.environmentMap,e._backgroundColor=t.backgroundColor,!0):!1}var fue=new m,YOe=new F,MOe=new re,vOe=new U;function UOe(e,t){let n=t.context,i=e._textureDimensions;if(l(e._radianceCubeMap)||(e._radianceCubeMap=new Or({context:n,width:i.x,height:i.y,pixelDatatype:Oe.UNSIGNED_BYTE,pixelFormat:Ke.RGBA})),e._radianceCommandsDirty){let o=e._radianceMapFS;l(o)||(o=new ze({sources:[Dh,eF]}),e._radianceMapFS=o),CC.requiresColorCorrect(t.atmosphere)&&o.defines.push("ATMOSPHERE_COLOR_CORRECT");let r=e._position,s=e._radiiAndDynamicAtmosphereColor,a=t.mapProjection.ellipsoid,c=bt.eastNorthUpToFixedFrame(r,a,YOe),d=MOe;d.x=e.brightness,d.y=e.saturation,d.z=e.gamma,d.w=e.atmosphereScatteringIntensity,(e.brightness!==1||e.saturation!==1||e.gamma!==1)&&o.defines.push("ENVIRONMENT_COLOR_CORRECT");let u=0;for(let h of Or.faceNames()){let p=e._radianceMapTextures[u];l(p)&&!p.isDestroyed()&&p.destroy(),p=new Lt({context:n,width:i.x,height:i.y,pixelDatatype:Oe.UNSIGNED_BYTE,pixelFormat:Ke.RGBA}),e._radianceMapTextures[u]=p;let A=u,f=new yl({fragmentShaderSource:o,outputTexture:p,uniformMap:{u_radiiAndDynamicAtmosphereColor:()=>s,u_enuToFixedFrame:()=>c,u_faceDirection:()=>Or.getDirection(h,fue),u_positionWC:()=>r,u_brightnessSaturationGammaIntensity:()=>d,u_groundColor:()=>e.groundColor.withAlpha(e.groundAlbedo,vOe)},owner:e});f.postExecute=()=>{if(e.isDestroyed()||f.canceled){bi._activeComputeCommandCount--;return}let b=e._radianceMapComputeCommands;b[A]=void 0;let C=new ss({context:n,colorTextures:[e._radianceMapTextures[A]]});C._bind(),e._radianceCubeMap[h].copyFromFramebuffer(),C._unBind(),C.destroy(),bi._activeComputeCommandCount--,b.some(l)||(e._convolutionsCommandsDirty=!0,e._shouldRegenerateShaders=!0)},e._radianceMapComputeCommands[u]=f,bi._queueCommand(f,t),u++}e._radianceCommandsDirty=!1}}function DOe(e,t){let n=e._radianceCubeMap;n.generateMipmap();let i=e._mipmapLevels,o=e._textureDimensions,r=o.x/2,s=o.y/2,a=t.context,c=0,d=()=>{let p=e._specularMapTextures.length;c>=p&&(e._irradianceCommandDirty=!0,i>1&&(n.sampler=new Ht({minificationFilter:zt.LINEAR_MIPMAP_LINEAR}),e._shouldRegenerateShaders=!0,e._va.destroy(),e._va=void 0,e._convolveSP.destroy(),e._convolveSP=void 0))},u=(p,A,f,b,C)=>()=>{if(e.isDestroyed()||p.canceled){bi._activeComputeCommandCount--;return}let T=e._convolutionComputeCommands;T[A]=void 0,n.copyFace(t,f,b,C),c++,bi._activeComputeCommandCount--,f.destroy(),e._specularMapTextures[A]=void 0,d()},h=0;for(let p=1;p<i;++p){for(let A of Or.faceNames()){l(e._specularMapTextures[h])&&e._specularMapTextures[h].destroy();let f=e._specularMapTextures[h]=new Lt({context:a,width:r,height:s,pixelDatatype:Oe.UNSIGNED_BYTE,pixelFormat:Ke.RGBA}),b=e._va;l(b)||(b=Or.createVertexArray(a,A),e._va=b);let C=e._convolveSP;l(C)||(C=tn.fromCache({context:a,vertexShaderSource:nF,fragmentShaderSource:tF,attributeLocations:{positions:0}}),e._convolveSP=C);let T=new yl({shaderProgram:C,vertexArray:b,outputTexture:f,persists:!0,owner:e,uniformMap:{u_roughness:()=>p/(i-1),u_radianceTexture:()=>n??a.defaultTexture,u_faceDirection:()=>Or.getDirection(A,fue)}});T.postExecute=u(T,h,f,A,p),e._convolutionComputeCommands[h]=T,bi._queueCommand(T,t),++h}r/=2,s/=2}d()}var pue=new M(3,3);function kOe(e,t){let n=t.context,i=pue,o=e._irradianceMapTexture;l(o)&&!o.isDestroyed()&&o.destroy(),o=new Lt({context:n,width:i.x,height:i.y,pixelDatatype:Oe.FLOAT,pixelFormat:Ke.RGBA}),e._irradianceMapTexture=o;let r=e._irradianceMapFS;l(r)||(r=new ze({sources:[$W]}),e._irradianceMapFS=r);let s=new yl({fragmentShaderSource:r,outputTexture:o,owner:e,uniformMap:{u_radianceMap:()=>e._radianceCubeMap??n.defaultTexture}});s.postExecute=()=>{if(e.isDestroyed()||s.canceled){bi._activeComputeCommandCount--;return}e._irradianceTextureDirty=!1,e._irradianceComputeCommand=void 0,e._sphericalHarmonicCoefficientsDirty=!0,e._irradianceMapFS=void 0,bi._activeComputeCommandCount--},e._irradianceComputeCommand=s,bi._queueCommand(s,t),e._irradianceTextureDirty=!0}function QOe(e,t){let n=t.context;if(!l(e._irradianceMapTexture))return;let i=new ss({context:n,colorTextures:[e._irradianceMapTexture],destroyAttachments:!1}),o=pue,r=n.readPixels({x:0,y:0,width:o.x,height:o.y,framebuffer:i});for(let s=0;s<9;++s)e._sphericalHarmonicCoefficients[s]=m.unpack(r,s*4),m.multiplyByScalar(e._sphericalHarmonicCoefficients[s],e.atmosphereScatteringIntensity,e._sphericalHarmonicCoefficients[s]);i.destroy(),e._irradianceMapTexture.destroy(),e._irradianceMapTexture=void 0,e._shouldRegenerateShaders=!0}bi.prototype.update=function(e){let t=e.mode;if(!(bi.isDynamicUpdateSupported(e)&&this._mipmapLevels>=1)||!this.enabled||!this.shouldUpdate||!l(this._position)||t===se.MORPHING){this._shouldRegenerateShaders=!1;return}bi._updateCommandQueue(e);let i=e.atmosphere.dynamicLighting,o=XOe(this,e)||i===og.SUNLIGHT&&!q.equalsEpsilon(e.time,this._lastTime,this.maximumSecondsDifference);if(this._shouldReset||o){this.reset(),this._shouldReset=!1,this._lastTime=q.clone(e.time,this._lastTime);return}if(this._radianceMapDirty&&(UOe(this,e),this._radianceMapDirty=!1),this._convolutionsCommandsDirty&&(DOe(this,e),this._convolutionsCommandsDirty=!1),this._irradianceCommandDirty&&(kOe(this,e),this._irradianceCommandDirty=!1),this._irradianceTextureDirty){this._shouldRegenerateShaders=!1;return}if(this._sphericalHarmonicCoefficientsDirty){QOe(this,e),this._sphericalHarmonicCoefficientsDirty=!1;return}this._shouldRegenerateShaders=!1};bi.prototype.isDestroyed=function(){return!1};bi.prototype.destroy=function(){let e=this._radianceMapComputeCommands.length;for(let t=0;t<e;++t)this._radianceMapComputeCommands[t]=void 0;e=this._convolutionComputeCommands.length;for(let t=0;t<e;++t)this._convolutionComputeCommands[t]=void 0;this._irradianceMapComputeCommand=void 0,e=this._radianceMapTextures.length;for(let t=0;t<e;++t)this._radianceMapTextures[t]=this._radianceMapTextures[t]&&!this._radianceMapTextures[t].isDestroyed()&&this._radianceMapTextures[t].destroy();e=this._specularMapTextures.length;for(let t=0;t<e;++t)this._specularMapTextures[t]=this._specularMapTextures[t]&&!this._specularMapTextures[t].isDestroyed()&&this._specularMapTextures[t].destroy();return this._radianceCubeMap=this._radianceCubeMap&&this._radianceCubeMap.destroy(),this._irradianceMapTexture=this._irradianceMapTexture&&!this._irradianceMapTexture.isDestroyed()&&this._irradianceMapTexture.destroy(),l(this._va)&&this._va.destroy(),l(this._convolveSP)&&this._convolveSP.destroy(),he(this)};bi.isDynamicUpdateSupported=function(e){let t=e.context;return t.halfFloatingPointTexture||t.colorBufferFloat};bi.AVERAGE_EARTH_GROUND_COLOR=Object.freeze(U.fromCssColorString("#717145"));bi.DEFAULT_SPHERICAL_HARMONIC_COEFFICIENTS=Object.freeze([Object.freeze(new m(.35449,.35449,.35449)),m.ZERO,m.ZERO,m.ZERO,m.ZERO,m.ZERO,m.ZERO,m.ZERO,m.ZERO]);var rg=bi;var SRn=y(x(),1);var iF={HIGHLIGHT:0,REPLACE:1,MIX:2};iF.getColorBlend=function(e,t){if(e===iF.HIGHLIGHT)return 0;if(e===iF.REPLACE)return 1;if(e===iF.MIX)return L.clamp(t,L.EPSILON4,1)};var jc=Object.freeze(iF);var qLn=y(x(),1);var IRn=y(x(),1),OOe={XTRANSLATE:"xTranslate",YTRANSLATE:"yTranslate",ZTRANSLATE:"zTranslate",XROTATE:"xRotate",YROTATE:"yRotate",ZROTATE:"zRotate",XSCALE:"xScale",YSCALE:"yScale",ZSCALE:"zScale",UNIFORMSCALE:"uniformScale"},qc=Object.freeze(OOe);var RRn=y(x(),1),zOe={STEP:0,LINEAR:1,CUBICSPLINE:2},kh=Object.freeze(zOe);var JVn=y(x(),1);var LVn=y(x(),1);var MRn=y(x(),1);var FRn=y(x(),1);var Aue={};function oF(e){this._count=e.count,this._properties=He(e.properties,!0)}oF.prototype.hasProperty=function(e){return Kn.hasProperty(e,this._properties,Aue)};oF.prototype.getPropertyIds=function(e){return Kn.getPropertyIds(this._properties,Aue,e)};oF.prototype.getProperty=function(e,t){let n=this._properties[t];if(l(n))return He(n[e],!0)};oF.prototype.setProperty=function(e,t,n){let i=this._properties[t];l(i)||(i=new Array(this._count),this._properties[t]=i),i[e]=He(n,!0)};var sg=oF;function Zc(e){e=e??Q.EMPTY_OBJECT,this._name=e.name,this._id=e.id,this._count=e.count,this._extras=e.extras,this._extensions=e.extensions,this._metadataTable=e.metadataTable,this._jsonMetadataTable=e.jsonMetadataTable,this._batchTableHierarchy=e.batchTableHierarchy,this._texture=e.texture}Object.defineProperties(Zc.prototype,{name:{get:function(){return this._name}},id:{get:function(){return this._id}},count:{get:function(){return this._count}},class:{get:function(){if(l(this._metadataTable))return this._metadataTable.class}},properties:{get:function(){if(l(this._metadataTable))return this._metadataTable.properties}},extras:{get:function(){return this._extras}},extensions:{get:function(){return this._extensions}},byteLength:{get:function(){let e=0;return l(this._metadataTable)&&(e+=this._metadataTable.byteLength),l(this._batchTableHierarchy)&&(e+=this._batchTableHierarchy.byteLength),e}},texture:{get:function(){return this._texture}}});Zc.prototype.hasProperty=function(e,t){return!!(l(this._metadataTable)&&this._metadataTable.hasProperty(t)||l(this._batchTableHierarchy)&&this._batchTableHierarchy.hasProperty(e,t)||l(this._jsonMetadataTable)&&this._jsonMetadataTable.hasProperty(t))};Zc.prototype.hasPropertyBySemantic=function(e,t){return l(this._metadataTable)?this._metadataTable.hasPropertyBySemantic(t):!1};Zc.prototype.propertyExists=function(e){return!!(l(this._metadataTable)&&this._metadataTable.hasProperty(e)||l(this._batchTableHierarchy)&&this._batchTableHierarchy.propertyExists(e)||l(this._jsonMetadataTable)&&this._jsonMetadataTable.hasProperty(e))};Zc.prototype.propertyExistsBySemantic=function(e){return l(this._metadataTable)?this._metadataTable.hasPropertyBySemantic(e):!1};var JK=[];Zc.prototype.getPropertyIds=function(e,t){if(t=l(t)?t:[],t.length=0,l(this._metadataTable)){let n=this._metadataTable.getPropertyIds(JK);ri(t,n)}if(l(this._batchTableHierarchy)){let n=this._batchTableHierarchy.getPropertyIds(e,JK);ri(t,n)}if(l(this._jsonMetadataTable)){let n=this._jsonMetadataTable.getPropertyIds(JK);ri(t,n)}return t};Zc.prototype.getProperty=function(e,t){let n;if(l(this._metadataTable)&&(n=this._metadataTable.getProperty(e,t),l(n))||l(this._batchTableHierarchy)&&(n=this._batchTableHierarchy.getProperty(e,t),l(n))||l(this._jsonMetadataTable)&&(n=this._jsonMetadataTable.getProperty(e,t),l(n)))return n};Zc.prototype.setProperty=function(e,t,n){l(this._metadataTable)&&this._metadataTable.setProperty(e,t,n)||l(this._batchTableHierarchy)&&this._batchTableHierarchy.setProperty(e,t,n)||(l(this._jsonMetadataTable)||(this._jsonMetadataTable=new sg({count:this._count,properties:{}})),this._jsonMetadataTable.setProperty(e,t,n))};Zc.prototype.getPropertyBySemantic=function(e,t){if(l(this._metadataTable))return this._metadataTable.getPropertyBySemantic(e,t)};Zc.prototype.setPropertyBySemantic=function(e,t,n){return l(this._metadataTable)?this._metadataTable.setPropertyBySemantic(e,t,n):!1};Zc.prototype.getPropertyTypedArray=function(e){if(l(this._metadataTable))return this._metadataTable.getPropertyTypedArray(e)};Zc.prototype.getPropertyTypedArrayBySemantic=function(e){if(l(this._metadataTable))return this._metadataTable.getPropertyTypedArrayBySemantic(e)};Zc.prototype.isClass=function(e,t){let n=this._batchTableHierarchy;return l(n)?n.isClass(e,t):!1};Zc.prototype.isExactClass=function(e,t){return this.getExactClassName(e)===t};Zc.prototype.getExactClassName=function(e){let t=this._batchTableHierarchy;if(l(t))return t.getClassName(e)};Zc.prototype.destroy=function(){return this._texture=this._texture&&this._texture.destroy(),he(this)};var vl=Zc;var KRn=y(x(),1);var QRn=y(x(),1);function gue(e){e=e??Q.EMPTY_OBJECT;let t=e.property,n=e.classProperty,i=e.textures,o=l(t.channels)?t.channels:[0],r=t,s=Td.createModelTextureReader({textureInfo:r,channels:HOe(o),texture:i[r.index]});this._min=t.min,this._max=t.max;let a=t.offset,c=t.scale,d=n.hasValueTransform||l(a)||l(c);a=a??n.offset,c=c??n.scale,a=n.unpackVectorAndMatrixTypes(a),c=n.unpackVectorAndMatrixTypes(c),this._offset=a,this._scale=c,this._hasValueTransform=d,this._textureReader=s,this._classProperty=n,this._extras=t.extras,this._extensions=t.extensions}Object.defineProperties(gue.prototype,{textureReader:{get:function(){return this._textureReader}},hasValueTransform:{get:function(){return this._hasValueTransform}},offset:{get:function(){return this._offset}},scale:{get:function(){return this._scale}},classProperty:{get:function(){return this._classProperty}},extras:{get:function(){return this._extras}},extensions:{get:function(){return this._extensions}}});function HOe(e){return e.map(function(t){return"rgba".charAt(t)}).join("")}var rF=gue;function KK(e){e=e??Q.EMPTY_OBJECT;let t=e.propertyTexture,n=e.class,i=e.textures,o=t.extensions,r=t.extras,s={};if(l(t.properties))for(let a in t.properties)t.properties.hasOwnProperty(a)&&(s[a]=new rF({property:t.properties[a],classProperty:n.properties[a],textures:i}));this._name=e.name,this._id=e.id,this._class=n,this._properties=s,this._extras=r,this._extensions=o}Object.defineProperties(KK.prototype,{name:{get:function(){return this._name}},id:{get:function(){return this._id}},class:{get:function(){return this._class}},properties:{get:function(){return this._properties}},extras:{get:function(){return this._extras}},extensions:{get:function(){return this._extensions}}});KK.prototype.getProperty=function(e){return this._properties[e]};var ag=KK;var rVn=y(x(),1);var eVn=y(x(),1);function bue(e){e=e??Q.EMPTY_OBJECT;let t=e.property,n=e.classProperty;this._attribute=t.attribute,this._classProperty=n,this._min=t.min,this._max=t.max;let i=t.offset,o=t.scale,r=n.hasValueTransform||l(i)||l(o);i=i??n.offset,o=o??n.scale,i=n.unpackVectorAndMatrixTypes(i),o=n.unpackVectorAndMatrixTypes(o),this._offset=i,this._scale=o,this._hasValueTransform=r,this._extras=t.extras,this._extensions=t.extensions}Object.defineProperties(bue.prototype,{attribute:{get:function(){return this._attribute}},hasValueTransform:{get:function(){return this._hasValueTransform}},offset:{get:function(){return this._offset}},scale:{get:function(){return this._scale}},classProperty:{get:function(){return this._classProperty}},extras:{get:function(){return this._extras}},extensions:{get:function(){return this._extensions}}});var sF=bue;function jK(e){e=e??Q.EMPTY_OBJECT;let t=e.propertyAttribute,n=e.class,i={};if(l(t.properties))for(let o in t.properties)t.properties.hasOwnProperty(o)&&(i[o]=new sF({property:t.properties[o],classProperty:n.properties[o]}));this._name=e.name,this._id=e.id,this._class=n,this._properties=i,this._extras=t.extras,this._extensions=t.extensions}Object.defineProperties(jK.prototype,{name:{get:function(){return this._name}},id:{get:function(){return this._id}},class:{get:function(){return this._class}},properties:{get:function(){return this._properties}},extras:{get:function(){return this._extras}},extensions:{get:function(){return this._extensions}}});jK.prototype.getProperty=function(e){return this._properties[e]};var TC=jK;var dVn=y(x(),1);function c_(e){e=e??Q.EMPTY_OBJECT,this._schema=e.schema;let t=e.propertyTables;this._propertyTableCount=l(t)?t.length:0,this._propertyTables=t??[],this._propertyTextures=e.propertyTextures??[],this._propertyAttributes=e.propertyAttributes??[],this._statistics=e.statistics,this._extras=e.extras,this._extensions=e.extensions}Object.defineProperties(c_.prototype,{schema:{get:function(){return this._schema}},statistics:{get:function(){return this._statistics}},extras:{get:function(){return this._extras}},extensions:{get:function(){return this._extensions}},propertyTableCount:{get:function(){return this._propertyTableCount}},propertyTables:{get:function(){return this._propertyTables}},propertyTextures:{get:function(){return this._propertyTextures}},propertyAttributes:{get:function(){return this._propertyAttributes}},propertyTablesByteLength:{get:function(){if(!l(this._propertyTables))return 0;let e=0,t=this._propertyTables.length;for(let n=0;n<t;n++)e+=this._propertyTables[n].byteLength;return e}}});c_.prototype.getPropertyTable=function(e){return this._propertyTables[e]};c_.prototype.getPropertyTexture=function(e){return this._propertyTextures[e]};c_.prototype.getPropertyAttribute=function(e){return this._propertyAttributes[e]};c_.prototype.destroy=function(){let e=this._propertyTables;for(let t=0;t<e.length;t++)e[t]=e[t]&&e[t].destroy();return he(this)};var Wa=c_;function JOe(e){e=e??Q.EMPTY_OBJECT;let t=e.extension,n=e.schema,i=[];if(l(t.propertyTables))for(let s=0;s<t.propertyTables.length;s++){let a=t.propertyTables[s],c=n.classes[a.class],d=KOe(a,e.bufferViews,c,e.context),u=new xm({count:a.count,properties:a.properties,class:c,bufferViews:e.bufferViews});i.push(new vl({id:s,name:a.name,count:a.count,metadataTable:u,extras:a.extras,extensions:a.extensions,texture:d}))}let o=[];if(l(t.propertyTextures))for(let s=0;s<t.propertyTextures.length;s++){let a=t.propertyTextures[s];o.push(new ag({id:s,name:a.name,propertyTexture:a,class:n.classes[a.class],textures:e.textures}))}let r=[];if(l(t.propertyAttributes))for(let s=0;s<t.propertyAttributes.length;s++){let a=t.propertyAttributes[s];r.push(new TC({id:s,name:a.name,class:n.classes[a.class],propertyAttribute:a}))}return new Wa({schema:n,propertyTables:i,propertyTextures:o,propertyAttributes:r,statistics:t.statistics,extras:t.extras,extensions:t.extensions})}var aF=4;function KOe(e,t,n,i){let o=e.properties;if(!l(o))return;let r=e.count,s;try{s=jOe(o,t,n,r)}catch(u){console.warn(`Failed to create texture for property table "${e.name}": ${u.message}`);return}let a=s.length;if(a===0)return;if(r>Bt.maximumTextureSize||a>Bt.maximumTextureSize){_t("PropertyTableTextureExceedsMaximumSize",`Cannot create a texture for the property table "${e.name}" because it exceeds the maximum texture size of ${Bt.maximumTextureSize}.`);return}let c=$Oe(s,r),d=new Ht({wrapS:gn.CLAMP_TO_EDGE,wrapT:gn.CLAMP_TO_EDGE,minificationFilter:zt.NEAREST,magnificationFilter:li.NEAREST});return Lt.create({context:i,pixelFormat:Ke.RGBA,pixelDatatype:Oe.UNSIGNED_BYTE,sampler:d,flipY:!1,source:{width:r,height:a,arrayBufferView:c}})}function jOe(e,t,n,i){let o=[],r=n.properties;for(let[s,a]of Object.entries(r)){if(!a.isGpuCompatible(aF))continue;let c=e[s],d=l(c)?t[c.values]:qOe(a,i),u=d.length,h=a.cpuBytesPerElement(),p=u/h;if(p!==i)throw new me(`Property with ID: "${s}" has (${p}), which does not match number of features in the property table: (${i}).`);o.push({view:d,classProperty:a})}return o}function qOe(e,t){let n=e.noData,i=St.getComponentCount(e.type),o=e.isArray?e.arrayLength:1;e.type===St.ENUM&&(n=e.enumType.valuesByName[n]),i===1&&(n=[n]),o===1&&(n=[n]);let r=e.cpuBytesPerElement(),s=Yt.getSizeInBytes(e.valueType),a=new ArrayBuffer(r*t),c=new DataView(a),d=Yt.getDataViewAccessors(c,e.valueType);for(let u=0;u<t;u++)for(let h=0;h<o;h++)for(let p=0;p<i;p++){let A=h*i+p;d.set(r*u+A*s,n[h][p])}return new Uint8Array(a)}function $Oe(e,t){let n=e.length,i=new Uint8Array(n*t*aF),o=new DataView(i.buffer,i.byteOffset,i.byteLength);for(let r=0;r<n;r++){let s=e[r],a=s.classProperty,c=r*t*aF,d=a.valueType,u=Yt.gpuComponentType(d);if(d!==u){tze(s,o,c);continue}eze(s,i,c)}return i}function eze(e,t,n){let i=e.view,o=e.classProperty.cpuBytesPerElement(),r=i.length/o;for(let s=0;s<r;s++){let a=s*o,c=n+s*aF;t.set(i.subarray(a,a+o),c)}}function tze(e,t,n){let i=e.classProperty,o=e.view,r=i.valueType,s=Yt.gpuComponentType(r),a=i.cpuBytesPerElement(),c=o.length/a,d=new DataView(o.buffer,o.byteOffset,o.byteLength),u=Yt.getDataViewAccessors(d,r),h=Yt.getDataViewAccessors(t,s),p=Yt.downcastFunction(r);for(let A=0;A<c;A++){let f=A*a,b=n+A*aF,C=u.get(f);h.set(b,p(C))}}var cF=JOe;var MVn=y(x(),1);function nze(e){e=e??Q.EMPTY_OBJECT;let t=e.extension,n=e.schema,i,o=[],r;if(l(t.featureTables))for(r=Object.keys(t.featureTables).sort(),i=0;i<r.length;i++){let a=r[i],c=t.featureTables[a],d=n.classes[c.class],u=new xm({count:c.count,properties:c.properties,class:d,bufferViews:e.bufferViews});o.push(new vl({id:a,count:c.count,metadataTable:u,extras:c.extras,extensions:c.extensions}))}let s=[];if(l(t.featureTextures))for(r=Object.keys(t.featureTextures).sort(),i=0;i<r.length;i++){let a=r[i],c=t.featureTextures[a];s.push(new ag({id:a,propertyTexture:ize(c),class:n.classes[c.class],textures:e.textures}))}return new Wa({schema:n,propertyTables:o,propertyTextures:s,statistics:t.statistics,extras:t.extras,extensions:t.extensions})}function ize(e){let t={class:e.class,properties:{}},n=e.properties;for(let i in n)if(n.hasOwnProperty(i)){let o=n[i],r={channels:oze(o.channels),extras:o.extras,extensions:o.extensions};t.properties[i]=Ft(o.texture,r,!0)}return t}function oze(e){let t=e.length,n=new Array(t);for(let i=0;i<t;i++)n[i]="rgba".indexOf(e[i]);return n}var lF=nze;var qK=class extends Hi{constructor(t){super(),t=t??Q.EMPTY_OBJECT;let{gltf:n,extension:i,extensionLegacy:o,gltfResource:r,baseResource:s,supportedImageFormats:a,frameState:c,cacheKey:d,asynchronous:u=!0}=t;this._gltfResource=r,this._baseResource=s,this._gltf=n,this._extension=i,this._extensionLegacy=o,this._supportedImageFormats=a,this._frameState=c,this._cacheKey=d,this._asynchronous=u,this._bufferViewLoaders=[],this._bufferViewIds=[],this._textureLoaders=[],this._textureIds=[],this._schemaLoader=void 0,this._structuralMetadata=void 0,this._state=yt.UNLOADED,this._promise=void 0}get cacheKey(){return this._cacheKey}get structuralMetadata(){return this._structuralMetadata}load(){return l(this._promise)?this._promise:(this._state=yt.LOADING,this._promise=rze(this),this._promise)}process(t){if(this._state===yt.READY)return!0;if(this._state!==yt.LOADED)return!1;let n=this._textureLoaders,i=n.length,o=!0;for(let c=0;c<i;++c){let u=n[c].process(t);o=o&&u}if(!o)return!1;let r=this._schemaLoader.schema,s={};for(let c=0;c<this._bufferViewIds.length;++c){let d=this._bufferViewIds[c],u=this._bufferViewLoaders[c];if(!u.isDestroyed()){let h=new Uint8Array(u.typedArray);s[d]=h}}let a={};for(let c=0;c<this._textureIds.length;++c){let d=this._textureIds[c],u=n[c];u.isDestroyed()||(a[d]=u.texture)}return l(this._extension)?this._structuralMetadata=cF({extension:this._extension,schema:r,bufferViews:s,textures:a,context:t.context}):this._structuralMetadata=lF({extension:this._extensionLegacy,schema:r,bufferViews:s,textures:a}),yue(this),this._state=yt.READY,!0}unload(){yue(this),gze(this),l(this._schemaLoader)&&Fi.unload(this._schemaLoader),this._schemaLoader=void 0,l(this._structuralMetadata)&&this._structuralMetadata.destroy(),this._structuralMetadata=void 0}};async function rze(e){try{let t=dze(e),n=pze(e),i=Aze(e);return await Promise.all([t,n,i]),e.isDestroyed()?void 0:(e._gltf=void 0,e._state=yt.LOADED,e)}catch(t){if(e.isDestroyed())return;throw e.unload(),e._state=yt.FAILED,e.getError("Failed to load structural metadata",t)}}function sze(e,t){for(let n in e)if(e.hasOwnProperty(n)){let i=e[n],o=i.values,r=i.arrayOffsets,s=i.stringOffsets;l(o)&&(t[o]=!0),l(r)&&(t[r]=!0),l(s)&&(t[s]=!0)}}function aze(e,t){for(let n in e)if(e.hasOwnProperty(n)){let i=e[n],o=i.bufferView,r=i.arrayOffsetBufferView,s=i.stringOffsetBufferView;l(o)&&(t[o]=!0),l(r)&&(t[r]=!0),l(s)&&(t[s]=!0)}}function cze(e){let t=e.propertyTables,n={};if(l(t))for(let i=0;i<t.length;i++){let o=t[i];sze(o.properties,n)}return n}function lze(e){let t=e.featureTables,n={};if(l(t)){for(let i in t)if(t.hasOwnProperty(i)){let r=t[i].properties;l(r)&&aze(r,n)}}return n}async function dze(e){let t;l(e._extension)?t=cze(e._extension):t=lze(e._extensionLegacy);let n=[];for(let i in t)if(t.hasOwnProperty(i)){let o=Fi.getBufferViewLoader({gltf:e._gltf,bufferViewId:parseInt(i),gltfResource:e._gltfResource,baseResource:e._baseResource});e._bufferViewLoaders.push(o),e._bufferViewIds.push(i),n.push(o.load())}return Promise.all(n)}function uze(e){let t={},n=e.propertyTextures;if(l(n))for(let i=0;i<n.length;i++){let r=n[i].properties;l(r)&&mze(r,t)}return t}function mze(e,t){for(let n in e)if(e.hasOwnProperty(n)){let i=e[n];t[i.index]=i}}function hze(e){let t={},n=e.featureTextures;if(l(n)){for(let i in n)if(n.hasOwnProperty(i)){let r=n[i].properties;l(r)&&fze(r,t)}}return t}function fze(e,t){for(let n in e)if(e.hasOwnProperty(n)){let o=e[n].texture;t[o.index]=o}}function pze(e){let t;l(e._extension)?t=uze(e._extension):t=hze(e._extensionLegacy);let n=e._gltf,i=e._gltfResource,o=e._baseResource,r=e._supportedImageFormats,s=e._frameState,a=e._asynchronous,c=[];for(let d in t)if(t.hasOwnProperty(d)){let u=Fi.getTextureLoader({gltf:n,textureInfo:t[d],gltfResource:i,baseResource:o,supportedImageFormats:r,frameState:s,asynchronous:a});e._textureLoaders.push(u),e._textureIds.push(d),c.push(u.load())}return Promise.all(c)}async function Aze(e){let t=e._extension??e._extensionLegacy,n;if(l(t.schemaUri)){let i=e._baseResource.getDerivedResource({url:t.schemaUri});n=Fi.getSchemaLoader({resource:i})}else n=Fi.getSchemaLoader({schema:t.schema});if(e._schemaLoader=n,await n.load(),!n.isDestroyed())return n.schema}function yue(e){let t=e._bufferViewLoaders,n=t.length;for(let i=0;i<n;++i)Fi.unload(t[i]);e._bufferViewLoaders.length=0,e._bufferViewIds.length=0}function gze(e){let t=e._textureLoaders,n=t.length;for(let i=0;i<n;++i)Fi.unload(t[i]);e._textureLoaders.length=0,e._textureIds.length=0}var dF=qK;var jVn=y(x(),1);var l_={TRANSLATION:"TRANSLATION",ROTATION:"ROTATION",SCALE:"SCALE",FEATURE_ID:"_FEATURE_ID"};l_.fromGltfSemantic=function(e){let t=e,i=/^(\w+)_\d+$/.exec(e);switch(i!==null&&(t=i[1]),t){case"TRANSLATION":return l_.TRANSLATION;case"ROTATION":return l_.ROTATION;case"SCALE":return l_.SCALE;case"_FEATURE_ID":return l_.FEATURE_ID}};var Fs=Object.freeze(l_);var bGn=y(x(),1);var cGn=y(x(),1);var bze=65534,yze=255;function vk(e){e=e??Q.EMPTY_OBJECT;let t=e.triangleIndices,n=e.outlineIndices,i=e.originalVertexCount;this._triangleIndices=t,this._originalVertexCount=i,this._edges=new Tue(n,i),this._outlineCoordinatesTypedArray=void 0,this._extraVertices=[],xze(this)}Object.defineProperties(vk.prototype,{updatedTriangleIndices:{get:function(){return this._triangleIndices}},outlineCoordinates:{get:function(){return this._outlineCoordinatesTypedArray}}});function xze(e){let t=e._triangleIndices,n=e._edges,i=[],o=e._extraVertices,r=e._originalVertexCount,s={};for(let a=0;a<t.length;a+=3){let c=t[a],d=t[a+1],u=t[a+2],h=!1,p=h||n.hasEdge(c,d),A=h||n.hasEdge(d,u),f=h||n.hasEdge(u,c),b=xue(i,c,d,u,p,A,f);for(;l(b);){let C=s[b];if(!l(C)){C=r+o.length;let T=b;for(;T>=r;)T=o[T-r];o.push(T),s[b]=C}C>bze&&(t instanceof Uint16Array||t instanceof Uint8Array)?t=new Uint32Array(t):C>yze&&t instanceof Uint8Array&&(t=new Uint16Array(t)),b===c?(c=C,t[a]=C):b===d?(d=C,t[a+1]=C):(u=C,t[a+2]=C),b=xue(i,c,d,u,p,A,f)}}e._triangleIndices=t,e._outlineCoordinatesTypedArray=new Float32Array(i)}function xue(e,t,n,i,o,r,s){let a=s?1:0,c=o?1:0,d=0,u=$K(e,t,a,c,d);if(u===0)return t;let h=0,p=o?1:0,A=r?1:0,f=$K(e,n,h,p,A);if(f===0)return n;let b=s?1:0,C=0,T=r?1:0,E=$K(e,i,b,C,T);if(E===0)return i;let S=u&f&E,I,R,V;if(S&1)I=0,R=1,V=2;else if(S&2)I=0,V=1,R=2;else if(S&4)R=0,I=1,V=2;else if(S&8)R=0,V=1,I=2;else if(S&16)V=0,I=1,R=2;else if(S&32)V=0,R=1,I=2;else{let P=ej(u),g=ej(f),_=ej(E);return P<g&&P<_?t:g<_?n:i}let W=t*3;e[W+I]=a,e[W+R]=c,e[W+V]=d;let B=n*3;e[B+I]=h,e[B+R]=p,e[B+V]=A;let N=i*3;e[N+I]=b,e[N+R]=C,e[N+V]=T}function $K(e,t,n,i,o){let r=t*3,s=e[r],a=e[r+1],c=e[r+2];return l(s)?(s===n&&a===i&&c===o)<<0|(s===n&&a===o&&c===i)<<1|(s===i&&a===n&&c===o)<<2|(s===i&&a===o&&c===n)<<3|(s===o&&a===n&&c===i)<<4|(s===o&&a===i&&c===n)<<5:63}function ej(e){return(e&1)+(e>>1&1)+(e>>2&1)+(e>>3&1)+(e>>4&1)+(e>>5&1)}vk.prototype.updateAttribute=function(e){let t=this._extraVertices,n=e.length,i=n/this._originalVertexCount,o=t.length,r=e.constructor,s=new r(e.length+o*i);s.set(e);for(let a=0;a<o;a++){let c=t[a]*i,d=n+a*i;for(let u=0;u<i;u++)s[d+u]=s[c+u]}return s};vk.createTexture=function(e){let t=e.cache.modelOutliningCache;if(l(t)||(t=e.cache.modelOutliningCache={}),l(t.outlineTexture))return t.outlineTexture;let n=Math.min(4096,Bt.maximumTextureSize),i=n,o=Cue(i),r=[];for(;i>1;)i>>=1,r.push(Cue(i));let s=new Lt({context:e,source:{arrayBufferView:o,mipLevels:r},width:n,height:1,pixelFormat:Ke.LUMINANCE,sampler:new Ht({wrapS:gn.CLAMP_TO_EDGE,wrapT:gn.CLAMP_TO_EDGE,minificationFilter:zt.LINEAR_MIPMAP_LINEAR,magnificationFilter:li.LINEAR})});return t.outlineTexture=s,s};function Cue(e){let t=new Uint8Array(e);return t[e-1]=192,e===8?t[e-1]=96:e===4?t[e-1]=48:e===2?t[e-1]=24:e===1&&(t[e-1]=12),t}function Tue(e,t){this._originalVertexCount=t,this._edges=new Set;for(let n=0;n<e.length;n+=2){let i=e[n],o=e[n+1],r=Math.min(i,o),s=Math.max(i,o),a=r*this._originalVertexCount+s;this._edges.add(a)}}Tue.prototype.hasEdge=function(e,t){let n=Math.min(e,t),i=Math.max(e,t),o=n*this._originalVertexCount+i;return this._edges.has(o)};var EC=vk;function Eue(e){this.attribute=e,this.loadBuffer=!1,this.loadTypedArray=!1}function Cze(e){this.indices=e,this.loadBuffer=!1,this.loadTypedArray=!1}function Uk(e){this.primitive=e,this.attributePlans=[],this.indicesPlan=void 0,this.needsOutlines=!1,this.outlineIndices=void 0,this.needsGaussianSplats=!1}Uk.prototype.postProcess=function(e){this.needsOutlines&&(Tze(this),_ze(this,e)),this.needsGaussianSplats&&Sze(this,e)};function Tze(e){let t=e.primitive,n=t.indices,i=t.attributes[0].count,o=new EC({triangleIndices:n.typedArray,outlineIndices:e.outlineIndices,originalVertexCount:i});n.typedArray=o.updatedTriangleIndices,n.indexDatatype=Ue.fromTypedArray(n.typedArray);let r=Eze(o.outlineCoordinates),s=new Eue(r);s.loadBuffer=!0,s.loadTypedArray=!1,e.attributePlans.push(s),t.outlineCoordinates=s.attribute;let a=e.attributePlans,c=e.attributePlans.length;for(let d=0;d<c;d++){let u=a[d].attribute;u.typedArray=o.updateAttribute(u.typedArray)}}function Eze(e){let t=new Tn.Attribute;return t.name="_OUTLINE_COORDINATES",t.typedArray=e,t.componentDatatype=H.FLOAT,t.type=Ut.VEC3,t.normalized=!1,t.count=e.length/3,t}function Sze(e,t){let n=e.attributePlans,i=n.length;for(let o=0;o<i;o++){let r=n[o];r.loadBuffer=!1,r.loadTypedArray=!0}}function _ze(e,t){Ize(e.attributePlans,t),l(e.indicesPlan)&&Zze(e.indicesPlan,t)}function Ize(e,t){let n=e.length;for(let i=0;i<n;i++){let o=e[i],r=o.attribute,s=r.typedArray;if(o.loadBuffer){let a=it.createVertexBuffer({typedArray:s,context:t,usage:Be.STATIC_DRAW});a.vertexArrayDestroyable=!1,r.buffer=a}o.loadTypedArray||(r.typedArray=void 0)}}function Zze(e,t){let n=e.indices;if(e.loadBuffer){let i=it.createIndexBuffer({typedArray:n.typedArray,context:t,usage:Be.STATIC_DRAW,indexDatatype:n.indexDatatype});n.buffer=i,i.vertexArrayDestroyable=!1}e.loadTypedArray||(n.typedArray=void 0)}Uk.AttributeLoadPlan=Eue;Uk.IndicesLoadPlan=Cze;var SC=Uk;var CGn=y(x(),1);function Rze(e){e=e??Q.EMPTY_OBJECT,this.webp=e.webp??!1,this.basis=e.basis??!1}var uF=Rze;var kGn=y(x(),1);var EGn=y(x(),1);function Sue(e){this._position=e.position,this._adjustmentParams=e.adjustmentParams}Object.defineProperties(Sue.prototype,{position:{get:function(){return this._position}},adjustmentParams:{get:function(){return this._adjustmentParams}}});var mF=Sue;var _Gn=y(x(),1);function _ue(e){this._position=e.position,this._adjustmentParams=e.adjustmentParams,this._covarianceMatrix=e.covarianceMatrix}Object.defineProperties(_ue.prototype,{position:{get:function(){return this._position}},adjustmentParams:{get:function(){return this._adjustmentParams}},covarianceMatrix:{get:function(){return this._covarianceMatrix}}});var hF=_ue;var ZGn=y(x(),1);function Iue(e){this._groupFlags=e.groupFlags,this._rotationThetas=e.rotationThetas,this._params=e.params}Object.defineProperties(Iue.prototype,{groupFlags:{get:function(){return this._groupFlags}},rotationThetas:{get:function(){return this._rotationThetas}},params:{get:function(){return this._params}}});var fF=Iue;var LGn=y(x(),1);var VGn=y(x(),1),Vze={Direct:"Direct",Indirect:"Indirect"},Z0=Object.freeze(Vze);function Zue(e){this._storageType=e.storageType,this._anchorPointsIndirect=e.anchorPointsIndirect,this._anchorPointsDirect=e.anchorPointsDirect,this._intraTileCorrelationGroups=e.intraTileCorrelationGroups,this._covarianceDirect=e.covarianceDirect}Object.defineProperties(Zue.prototype,{storageType:{get:function(){return this._storageType}},anchorPointsIndirect:{get:function(){return this._anchorPointsIndirect}},anchorPointsDirect:{get:function(){return this._anchorPointsDirect}},intraTileCorrelationGroups:{get:function(){return this._intraTileCorrelationGroups}},covarianceDirect:{get:function(){return this._covarianceDirect}}});var d_=Zue;var FGn=y(x(),1);function Rue(e){this._A=e.A,this._alpha=e.alpha,this._beta=e.beta,this._T=e.T}Object.defineProperties(Rue.prototype,{A:{get:function(){return this._A}},alpha:{get:function(){return this._alpha}},beta:{get:function(){return this._beta}},T:{get:function(){return this._T}}});var pF=Rue;function u_(){}function Vue(e){return new $(e[0],e[1],e[3],e[1],e[2],e[4],e[3],e[4],e[5])}function Gze(e){let t=m.fromArray(e.position,0,new m),n=m.fromArray(e.adjustmentParams,0,new m);return new mF({position:t,adjustmentParams:n})}function Lze(e){let t=m.fromArray(e.position,0,new m),n=m.fromArray(e.adjustmentParams,0,new m),i=Vue(e.covarianceMatrix);return new hF({position:t,adjustmentParams:n,covarianceMatrix:i})}function Wze(e){let t=e.groupFlags,n=m.fromArray(e.rotationThetas,0,new m),i=[];for(let r of e.params){let s=new pF({A:r.A,alpha:r.alpha,beta:r.beta,T:r.T});i.push(s)}return new fF({groupFlags:t,rotationThetas:n,params:i})}u_.load=function(e){let t=e.storageType;if(t===Z0.Direct)return u_.loadDirect(e);if(t===Z0.Indirect)return u_.loadIndirect(e);throw new me(`Invalid storage type in NGA_gpm_local - expected 'Direct' or 'Indirect', but found ${t}`)};u_.loadDirect=function(e){let t=[],n=e.anchorPointsDirect;for(let r of n){let s=Gze(r);t.push(s)}let i=Vue(e.covarianceDirectUpperTriangle);return new d_({storageType:Z0.Direct,anchorPointsDirect:t,covarianceDirect:i})};u_.loadIndirect=function(e){let t=[],n=e.anchorPointsIndirect;for(let s of n){let a=Lze(s);t.push(a)}let i=e.intraTileCorrelationGroups,o=[];for(let s of i){let a=Wze(s);o.push(a)}return new d_({storageType:Z0.Indirect,anchorPointsIndirect:t,intraTileCorrelationGroups:o})};var AF=u_;var lLn=y(x(),1);var OGn=y(x(),1);function Gue(e){this._traits=e.traits,this._noData=e.noData,this._offset=e.offset,this._scale=e.scale,this._index=e.index,this._texCoord=e.texCoord}Object.defineProperties(Gue.prototype,{traits:{get:function(){return this._traits}},noData:{get:function(){return this._noData}},offset:{get:function(){return this._offset}},scale:{get:function(){return this._scale}},index:{get:function(){return this._index}},texCoord:{get:function(){return this._texCoord}}});var gF=Gue;var HGn=y(x(),1);function Lue(e){this._min=e.min,this._max=e.max,this._source=e.source}Object.defineProperties(Lue.prototype,{min:{get:function(){return this._min}},max:{get:function(){return this._max}},source:{get:function(){return this._source}}});var bF=Lue;var KGn=y(x(),1);function Wue(e){this._ppeTextures=e}Object.defineProperties(Wue.prototype,{ppeTextures:{get:function(){return this._ppeTextures}}});var yF=Wue;function jr(e){e=e??Q.EMPTY_OBJECT;let t=e.gltf,n=e.extension,i=e.gltfResource,o=e.baseResource,r=e.supportedImageFormats,s=e.frameState,a=e.cacheKey,c=e.asynchronous??!0;this._gltfResource=i,this._baseResource=o,this._gltf=t,this._extension=n,this._supportedImageFormats=r,this._frameState=s,this._cacheKey=a,this._asynchronous=c,this._textureLoaders=[],this._textureIds=[],this._meshPrimitiveGpmLocal=void 0,this._structuralMetadata=void 0,this._state=yt.UNLOADED,this._promise=void 0}l(Object.create)&&(jr.prototype=Object.create(Hi.prototype),jr.prototype.constructor=jr);Object.defineProperties(jr.prototype,{cacheKey:{get:function(){return this._cacheKey}},meshPrimitiveGpmLocal:{get:function(){return this._meshPrimitiveGpmLocal}},structuralMetadata:{get:function(){return this._structuralMetadata}}});jr.prototype._loadResources=async function(){try{return await this._loadTextures(),this.isDestroyed()?void 0:(this._gltf=void 0,this._state=yt.LOADED,this)}catch(e){if(this.isDestroyed())return;throw this.unload(),this._state=yt.FAILED,this.getError("Failed to load GPM data",e)}};jr.prototype.load=function(){return l(this._promise)?this._promise:(this._state=yt.LOADING,this._promise=this._loadResources(this),this._promise)};function Fze(e){let t={},n=e.ppeTextures;if(l(n))for(let i=0;i<n.length;i++){let o=n[i];t[o.index]=o}return t}jr.prototype._loadTextures=function(){let e;l(this._extension)&&(e=Fze(this._extension));let t=this._gltf,n=this._gltfResource,i=this._baseResource,o=this._supportedImageFormats,r=this._frameState,s=this._asynchronous,a=[];for(let c in e)if(e.hasOwnProperty(c)){let d=Fi.getTextureLoader({gltf:t,textureInfo:e[c],gltfResource:n,baseResource:i,supportedImageFormats:o,frameState:r,asynchronous:s});this._textureLoaders.push(d),this._textureIds.push(c),a.push(d.load())}return Promise.all(a)};jr.ppeTexturesMetadataSchemaCache=new Map;jr._createPpeTextureClassJson=function(e,t){let n=e.traits,i=n.source,o=e.offset??0,r=(e.scale??1)*255;return{name:`PPE texture class ${t}`,properties:{[i]:{name:"PPE",type:"SCALAR",componentType:"UINT8",normalized:!0,offset:o,scale:r,min:n.min,max:n.max}}}};jr._obtainPpeTexturesMetadataSchema=function(e){let n=jr._collectPpeTexturePropertyIdentifiers(e).toString(),i=jr.ppeTexturesMetadataSchemaCache.get(n);if(l(i))return i;let r={id:`PPE_TEXTURE_SCHEMA_${jr.ppeTexturesMetadataSchemaCache.size}`,classes:{}},s=e.ppeTextures;for(let a=0;a<s.length;a++){let c=s[a],d=`ppeTexture_${a}`,u=jr._createPpeTextureClassJson(c,a);r.classes[d]=u}return i=Xl.fromJson(r),jr.ppeTexturesMetadataSchemaCache.set(n,i),i};jr._collectPpeTexturePropertyIdentifiers=function(e){let t=[],n=e.ppeTextures;for(let i=0;i<n.length;i++){let o=n[i],r=jr._createPpeTextureClassJson(o,i),s=JSON.stringify(r);t.push(s)}return t};jr._convertToStructuralMetadata=function(e,t){let n=[],i=jr._obtainPpeTexturesMetadataSchema(e),o=e.ppeTextures;for(let s=0;s<o.length;s++){let a=o[s],c=`ppeTexture_${s}`,u=a.traits.source,h=i.classes[c],p={class:c,properties:{[u]:{index:a.index,texCoord:a.texCoord}}};n.push(new ag({id:s,name:a.name,propertyTexture:p,class:h,textures:t}))}return new Wa({schema:i,propertyTables:[],propertyTextures:n,propertyAttributes:[]})};jr.prototype.process=function(e){if(this._state===yt.READY)return!0;if(this._state!==yt.LOADED)return!1;let t=this._textureLoaders,n=t.length,i=!0;for(let d=0;d<n;++d){let h=t[d].process(e);i=i&&h}if(!i)return!1;let o={};for(let d=0;d<this._textureIds.length;++d){let u=this._textureIds[d],h=t[d];h.isDestroyed()||(o[u]=h.texture)}let r=[],s=this._extension;if(l(s.ppeTextures)){let d=s.ppeTextures;for(let u of d){let h=u.traits,p=new bF({min:h.min,max:h.max,source:h.source}),A=new gF({traits:p,noData:u.noData,offset:u.offset,scale:u.scale,index:u.index,texCoord:u.texCoord});r.push(A)}}let a=new yF(r);this._meshPrimitiveGpmLocal=a;let c=jr._convertToStructuralMetadata(a,o);return this._structuralMetadata=c,this._state=yt.READY,!0};jr.prototype._unloadTextures=function(){let e=this._textureLoaders,t=e.length;for(let n=0;n<t;++n)Fi.unload(e[n]);this._textureLoaders.length=0,this._textureIds.length=0};jr.prototype.unload=function(){this._unloadTextures(),this._gltf=void 0,this._extension=void 0,this._structuralMetadata=void 0};var xF=jr;var pLn=y(x(),1);function Bze(e){let n=(e.extensions??Q.EMPTY_OBJECT).EXT_mesh_primitive_restart,i=e.primitives;if(!l(n))return i;let o=[];ri(o,i);for(let r of n.primitiveGroups){let s=r.primitives[0];if(!l(s)||!i[s])return i;let a={...i[s],indices:r.indices};switch(a.mode){case ne.TRIANGLE_FAN:case ne.TRIANGLE_STRIP:case ne.LINE_STRIP:case ne.LINE_LOOP:break;default:return i}for(let c of r.primitives){let d=o[c];if(!l(d?.indices)||d.mode!==a.mode)return i;o[c]=void 0}o[s]=a}return o.filter(l)}var CF=Bze;var{Attribute:wze,Indices:Nze,FeatureIdAttribute:Bue,FeatureIdTexture:wue,FeatureIdImplicitRange:Nue,MorphTarget:Pze,Primitive:Xze,Instances:Yze,Skin:Mze,Node:vze,AnimatedPropertyType:Uze,AnimationSampler:Dze,AnimationTarget:kze,AnimationChannel:Qze,Animation:Oze,ArticulationStage:zze,Articulation:Hze,Asset:Jze,Scene:Kze,Components:jze,MetallicRoughness:qze,SpecularGlossiness:$ze,Specular:e3e,Anisotropy:tj,Clearcoat:nj,LineStyle:t3e,Material:n3e,Vector:i3e}=Tn,rr={NOT_LOADED:0,LOADING:1,LOADED:2,PROCESSING:3,POST_PROCESSING:4,PROCESSED:5,READY:6,FAILED:7,UNLOADED:8},ij=class extends Hi{constructor(t){super(),t=t??Q.EMPTY_OBJECT;let{gltfResource:n,typedArray:i,releaseGltfJson:o=!1,asynchronous:r=!0,incrementallyLoadTextures:s=!0,upAxis:a=ro.Y,forwardAxis:c=ro.Z,loadAttributesAsTypedArray:d=!1,loadAttributesFor2D:u=!1,enablePick:h=!1,loadIndicesForWireframe:p=!1,loadPrimitiveOutline:A=!0,loadForClassification:f=!1,renameBatchIdSemantic:b=!1}=t,{baseResource:C=n.clone()}=t;this._gltfJson=t.gltfJson,this._gltfResource=n,this._baseResource=C,this._typedArray=i,this._releaseGltfJson=o,this._asynchronous=r,this._incrementallyLoadTextures=s,this._upAxis=a,this._forwardAxis=c,this._loadAttributesAsTypedArray=d,this._loadAttributesFor2D=u,this._enablePick=h,this._loadIndicesForWireframe=p,this._loadPrimitiveOutline=A,this._loadForClassification=f,this._renameBatchIdSemantic=b,this._sortedPropertyTableIds=void 0,this._sortedFeatureTextureIds=void 0,this._gltfJsonLoader=void 0,this._state=rr.NOT_LOADED,this._textureState=rr.NOT_LOADED,this._promise=void 0,this._processError=void 0,this._textureErrors=[],this._primitiveLoadPlans=[],this._loaderPromises=[],this._textureLoaders=[],this._texturesPromises=[],this._textureCallbacks=[],this._bufferViewLoaders=[],this._geometryLoaders=[],this._geometryCallbacks=[],this._structuralMetadataLoader=void 0,this._meshPrimitiveGpmLoader=void 0,this._loadResourcesPromise=void 0,this._resourcesLoaded=!1,this._texturesLoaded=!1,this._supportedImageFormats=void 0,this._postProcessBuffers=[],this._components=void 0}get cacheKey(){}get components(){return this._components}get gltfJson(){return l(this._gltfJsonLoader)?this._gltfJsonLoader.gltf:this._gltfJson}get incrementallyLoadTextures(){return this._incrementallyLoadTextures}get texturesLoaded(){return this._texturesLoaded}async load(){return l(this._promise)?this._promise:(this._promise=o3e(this),this._promise)}_process(t){return this._state===rr.READY?!0:(this._state===rr.PROCESSING&&s3e(this,t),this._resourcesLoaded&&this._state===rr.POST_PROCESSING&&(a3e(this,t.context),this._state=rr.PROCESSED),this._resourcesLoaded&&this._state===rr.PROCESSED?(Fue(this),this._typedArray=void 0,this._state=rr.READY,!0):!1)}_processTextures(t){if(this._textureState===rr.READY)return!0;if(this._textureState!==rr.PROCESSING)return!1;let n=!0,i=this._textureLoaders;for(let o=0;o<i.length;++o){let r=i[o].process(t);r&&l(this._textureCallbacks[o])&&(this._textureCallbacks[o](),this._textureCallbacks[o]=void 0),n=n&&r}return n?(this._textureState=rr.READY,this._texturesLoaded=!0,!0):!1}process(t){if(this._state===rr.LOADED&&!l(this._loadResourcesPromise)&&(this._loadResourcesPromise=r3e(this,t).then(()=>{this._resourcesLoaded=!0}).catch(r=>{this._processError=r})),l(this._processError)){this._state=rr.FAILED;let r=this._processError;this._processError=void 0,Dk(this,r)}let n=this._textureErrors.pop();if(l(n)){let r=this.getError("Failed to load glTF texture",n);throw r.name="TextureError",r}if(this._state===rr.FAILED)return!1;let i=!1;try{i=this._process(t)}catch(r){this._state=rr.FAILED,Dk(this,r)}let o=!1;try{o=this._processTextures(t)}catch(r){this._textureState=rr.FAILED,Dk(this,r)}return this._incrementallyLoadTextures?i:i&&o}isUnloaded(){return this._state===rr.UNLOADED}unload(){l(this._gltfJsonLoader)&&!this._gltfJsonLoader.isDestroyed()&&Fi.unload(this._gltfJsonLoader),this._gltfJsonLoader=void 0,gHe(this),Fue(this),bHe(this),yHe(this),xHe(this),CHe(this),this._components=void 0,this._typedArray=void 0,this._state=rr.UNLOADED}};async function o3e(e){e._state=rr.LOADING,e._textureState=rr.LOADING;try{let t=Fi.getGltfJsonLoader({gltfResource:e._gltfResource,baseResource:e._baseResource,typedArray:e._typedArray,gltfJson:e._gltfJson});return e._gltfJsonLoader=t,await t.load(),e.isDestroyed()||e.isUnloaded()||t.isDestroyed()?void 0:(e._state=rr.LOADED,e._textureState=rr.LOADED,e)}catch(t){if(e.isDestroyed())return;e._state=rr.FAILED,e._textureState=rr.FAILED,Dk(e,t)}}async function r3e(e,t){hn.supportsWebP.initialized||await hn.supportsWebP.initialize(),e._supportedImageFormats=new uF({webp:hn.supportsWebP(),basis:t.context.supportsBasis});let n=AHe(e,t);return e._state=rr.PROCESSING,e._textureState=rr.PROCESSING,l(e._gltfJsonLoader)&&e._releaseGltfJson&&(Fi.unload(e._gltfJsonLoader),e._gltfJsonLoader=void 0),n}function Dk(e,t){throw e.unload(),e.getError("Failed to load glTF",t)}function s3e(e,t){let n=!0,i=e._geometryLoaders;for(let s=0;s<i.length;++s){let a=i[s].process(t);a&&l(e._geometryCallbacks[s])&&(e._geometryCallbacks[s](),e._geometryCallbacks[s]=void 0),n=n&&a}let o=e._structuralMetadataLoader;if(l(o)){let s=o.process(t);s&&(e._components.structuralMetadata=o.structuralMetadata),n=n&&s}let r=e._meshPrimitiveGpmLoader;if(l(r)){let s=r.process(t);s&&(l(e._components.structuralMetadata)&&_t("structural-metadata-gpm","The model defines both the 'EXT_structural_metadata' extension and the 'NGA_gpm_local' extension. The data from the 'EXT_structural_metadata' extension will be replaced with the data from the 'NGA_gpm_local' extension, and will no longer be available for styling and picking."),e._components.structuralMetadata=r.structuralMetadata),n=n&&s}n&&(e._state=rr.POST_PROCESSING)}function a3e(e,t){let n=e._primitiveLoadPlans;for(let i=0;i<n.length;i++){let o=n[i];o.postProcess(t),(o.needsOutlines||o.needsGaussianSplats)&&c3e(e,o)}}function c3e(e,t){let n=e._postProcessBuffers,i=t.primitive,o=i.outlineCoordinates;l(o)&&n.push(o.buffer);let r=i.attributes;for(let a=0;a<r.length;a++){let c=r[a];l(c.buffer)&&n.push(c.buffer)}let s=i.indices;l(s)&&l(s.buffer)&&n.push(s.buffer)}function l3e(e,t,n,i,o,r,s,a,c){let d=e.gltfJson,h=d.accessors[t].bufferView;return Fi.getVertexBufferLoader({gltf:d,gltfResource:e._gltfResource,baseResource:e._baseResource,frameState:c,bufferViewId:h,primitive:i,draco:o,spz:r,attributeSemantic:n,accessorId:t,asynchronous:e._asynchronous,loadBuffer:s,loadTypedArray:a})}function d3e(e,t,n,i,o,r,s){return Fi.getIndexBufferLoader({gltf:e.gltfJson,accessorId:t,gltfResource:e._gltfResource,baseResource:e._baseResource,frameState:s,primitive:n,draco:i,asynchronous:e._asynchronous,loadBuffer:o,loadTypedArray:r})}function u3e(e,t){let n=Fi.getBufferViewLoader({gltf:e.gltfJson,bufferViewId:t,gltfResource:e._gltfResource,baseResource:e._baseResource});return e._bufferViewLoaders.push(n),n}function Pue(e,t,n){let i=t.byteOffset,o=Cd(e,t),r=t.count,s=du(t.type),a=t.componentType,c=H.getSizeInBytes(a),d=c*s,u=r*s;if(o===d)return n=new Uint8Array(n),H.createArrayBufferView(a,n.buffer,n.byteOffset+i,u);let h=H.createTypedArray(a,u),p=new DataView(n.buffer),A=new Array(s),f=eg(t.componentType);i=n.byteOffset+i;for(let b=0;b<r;++b){f(p,i,s,c,A);for(let C=0;C<s;++C)h[b*s+C]=A[C];i+=o}return h}function m3e(e,t){let n=e.type;if(n===Ut.SCALAR)return t.fill(0);let i=Ut.getMathType(n);return t.fill(i.clone(i.ZERO))}function h3e(e,t,n,i){let o=e.type,r=e.count;if(o===Ut.SCALAR)for(let s=0;s<r;s++)n[s]=t[s];else if(o===Ut.VEC4&&i)for(let s=0;s<r;s++)n[s]=Me.unpack(t,s*4);else{let s=Ut.getMathType(o),a=Ut.getNumberOfComponents(o);for(let c=0;c<r;c++)n[c]=s.unpack(t,c*a)}return n}async function f3e(e,t,n,i,o){let{gltfJson:r}=e;if(await t.load(),e.isDestroyed())return;let s=Pue(r,n,t.typedArray);i=i??!1,h3e(n,s,o,i)}function R0(e,t,n){let i=new Array(t.count),o=t.bufferView;if(l(o)){let r=u3e(e,o),s=f3e(e,r,t,n,i);return e._loaderPromises.push(s),i}return m3e(t,i)}function Sd(e,t){if(l(t))return e===Number?t[0]:e.unpack(t)}function p3e(e){return e===Number?0:new e}function A3e(e){switch(e){case H.BYTE:return 127;case H.UNSIGNED_BYTE:return 255;case H.SHORT:return 32767;case H.UNSIGNED_SHORT:return 65535;default:return 1}}var g3e={VEC2:new M(-1,-1),VEC3:new m(-1,-1,-1),VEC4:new re(-1,-1,-1,-1)};function b3e(e,t){let n=A3e(e.componentDatatype),i=g3e[e.type],o=e.min;l(o)&&(o=t.divideByScalar(o,n,o),o=t.maximumByComponent(o,i,o));let r=e.max;l(r)&&(r=t.divideByScalar(r,n,r),r=t.maximumByComponent(r,i,r)),e.min=o,e.max=r}function y3e(e,t,n){let i=e.decodeMatrix,o=Sd(n,e.decodedMin),r=Sd(n,e.decodedMax);l(o)&&l(r)&&(t.min=o,t.max=r);let s=new Tn.Quantization;s.componentDatatype=t.componentDatatype,s.type=t.type,i.length===4?(s.quantizedVolumeOffset=i[2],s.quantizedVolumeStepSize=i[0]):i.length===9?(s.quantizedVolumeOffset=new M(i[6],i[7]),s.quantizedVolumeStepSize=new M(i[0],i[4])):i.length===16?(s.quantizedVolumeOffset=new m(i[12],i[13],i[14]),s.quantizedVolumeStepSize=new m(i[0],i[5],i[10])):i.length===25&&(s.quantizedVolumeOffset=new re(i[20],i[21],i[22],i[23]),s.quantizedVolumeStepSize=new re(i[0],i[6],i[12],i[18])),t.quantization=s}function x3e(e,t,n,i,o){let r=e.accessors[t],s=Ut.getMathType(r.type),a=r.normalized??!1,c=new wze;c.name=n,c.semantic=i,c.setIndex=o,c.constant=p3e(s),c.componentDatatype=r.componentType,c.normalized=a,c.count=r.count,c.type=r.type,c.min=Sd(s,r.min),c.max=Sd(s,r.max),c.byteOffset=r.byteOffset,c.byteStride=Cd(e,r),_i(r,"WEB3D_quantized_attributes")&&y3e(r.extensions.WEB3D_quantized_attributes,c,s);let d=c.semantic===ct.POSITION||c.semantic===ct.NORMAL||c.semantic===ct.TANGENT||c.semantic===ct.TEXCOORD||c.semantic===ct.FEATURE_ID||c.semantic===ct.SCALE||c.semantic===ct.ROTATION;return e.extensionsRequired?.includes("KHR_mesh_quantization")&&a&&d&&b3e(c,s),c}function Xue(e){let n=/^\w+_(\d+)$/.exec(e);if(n!==null)return parseInt(n[1])}var C3e={gltfSemantic:void 0,renamedSemantic:void 0,modelSemantic:void 0};function oj(e,t,n){let i=n;e._renameBatchIdSemantic&&(n==="_BATCHID"||n==="BATCHID")&&(i="_FEATURE_ID_0");let o=t.fromGltfSemantic(i),r=C3e;return r.gltfSemantic=n,r.renamedSemantic=i,r.modelSemantic=o,r}function T3e(e){let t=e===ct.POSITION,n=e===ct.FEATURE_ID,i=e===ct.TEXCOORD;return t||n||i}function E3e(e,t,n,i){if(e.byteOffset=0,e.byteStride=void 0,e.quantization=t.quantization,n&&(e.buffer=t.buffer),i){let o=l(t.quantization)?t.quantization.componentDatatype:e.componentDatatype;e.typedArray=H.createArrayBufferView(o,t.typedArray.buffer)}}function S3e(e,t,n,i){if(e.byteOffset=0,e.byteStride=void 0,n&&(e.buffer=t.buffer),i&&l(t.typedArray)&&(e.typedArray=H.createArrayBufferView(e.componentDatatype,t.typedArray.buffer)),e.semantic===ct.POSITION){let o=s=>{let a=1/0,c=-1/0,d=1/0,u=-1/0,h=1/0,p=-1/0;for(let A=0;A<s.length;A+=3){let f=s[A],b=s[A+1],C=s[A+2];a=Math.min(a,f),c=Math.max(c,f),d=Math.min(d,b),u=Math.max(u,b),h=Math.min(h,C),p=Math.max(p,C)}return[new m(a,d,h),new m(c,u,p)]},r=e.typedArray;[e.min,e.max]=o(r)}}function _3e(e,t,n,i,o,r){if(o&&(n.buffer=i.buffer),r){let s=i.typedArray;n.typedArray=Pue(e,t,s),o||(n.byteOffset=0,n.byteStride=void 0)}}function Yue(e,t,n,i,o,r,s,a,c){let d=e.gltfJson,u=d.accessors[t],h=u.bufferView,p=n.gltfSemantic,A=n.renamedSemantic,f=n.modelSemantic,b=l(f)?Xue(A):void 0,T=x3e(d,t,p,f,b);if(!l(o)&&!l(h)&&!l(r))return T;let E=l3e(e,t,p,i,o,r,s,a,c),S=e._geometryLoaders.length;e._geometryLoaders.push(E);let I=E.load();return e._loaderPromises.push(I),e._geometryCallbacks[S]=()=>{l(o)&&l(o.attributes)&&l(o.attributes[p])?E3e(T,E,s,a):l(r)?S3e(T,E,s,a):_3e(d,u,T,E,s,a)},T}function Mue(e,t,n,i,o,r,s,a,c){let d=n.modelSemantic,u=d===ct.POSITION,h=d===ct.FEATURE_ID,p=u&&!s&&e._loadAttributesFor2D&&!c.scene3DOnly,A=u&&e._enablePick&&!c.context.webgl2,f=e._loadForClassification&&h,b=e._loadAttributesAsTypedArray,C=!b,T=b||p||A||f,I=Yue(e,t,n,i,o,r,a?!1:C,a?!0:T,c),R=new SC.AttributeLoadPlan(I);return R.loadBuffer=C,R.loadTypedArray=T,R}function I3e(e,t,n,i,o){let r=e.gltfJson.accessors,s=l(n.ROTATION),a=l(n.TRANSLATION)&&l(r[n.TRANSLATION].min)&&l(r[n.TRANSLATION].max),c=oj(e,Fs,i),d=c.modelSemantic,u=d===Fs.TRANSLATION||d===Fs.ROTATION||d===Fs.SCALE,h=d===Fs.TRANSLATION,p=e._loadAttributesAsTypedArray||s&&u||!o.context.instancedArrays,A=e._enablePick&&!o.context.webgl2,f=!p,b=e._loadAttributesFor2D&&!o.scene3DOnly;return Yue(e,t,c,void 0,void 0,void 0,f,p||h&&(!a||b||A),o)}function Z3e(e,t,n,i,o,r){let s=e.gltfJson.accessors[t],a=s.bufferView,c=n.extensions??Q.EMPTY_OBJECT,d=c.KHR_draco_mesh_compression,u=l(c.EXT_mesh_primitive_edge_visibility);if(!l(d)&&!l(a))return;let h=new Nze;h.count=s.count;let p=e._loadAttributesAsTypedArray,A=(e._loadIndicesForWireframe||e._enablePick)&&!r.context.webgl2,f=e._loadForClassification&&i,C=!p,T=p||A||f||u,I=d3e(e,t,n,d,o?!1:C,o?!0:T,r),R=e._geometryLoaders.length;e._geometryLoaders.push(I);let V=I.load();e._loaderPromises.push(V),e._geometryCallbacks[R]=()=>{h.indexDatatype=I.indexDatatype,h.buffer=I.buffer,h.typedArray=I.typedArray};let W=new SC.IndicesLoadPlan(h);return W.loadBuffer=C,W.loadTypedArray=T,W}function Ul(e,t,n,i){let o=e.gltfJson,r=Td.getImageIdFromTexture({gltf:o,textureId:t.index,supportedImageFormats:e._supportedImageFormats});if(!l(r))return;let s=Fi.getTextureLoader({gltf:o,textureInfo:t,gltfResource:e._gltfResource,baseResource:e._baseResource,supportedImageFormats:e._supportedImageFormats,frameState:n,asynchronous:e._asynchronous}),a=Td.createModelTextureReader({textureInfo:t}),c=e._textureLoaders.length;e._textureLoaders.push(s);let d=s.load().catch(u=>{if(!e.isDestroyed()){if(!e._incrementallyLoadTextures)throw u;e._textureState=rr.FAILED,e._textureErrors.push(u)}});return e._texturesPromises.push(d),e._textureCallbacks[c]=()=>{a.texture=s.texture,l(i)&&(a.texture.sampler=i)},a}function R3e(e,t,n){let{diffuseTexture:i,specularGlossinessTexture:o,diffuseFactor:r,specularFactor:s,glossinessFactor:a}=t,c=new $ze;return l(i)&&(c.diffuseTexture=Ul(e,i,n)),l(o)&&(c.specularGlossinessTexture=Ul(e,o,n)),c.diffuseFactor=Sd(re,r),c.specularFactor=Sd(m,s),c.glossinessFactor=a,c}function V3e(e,t,n){let{baseColorTexture:i,metallicRoughnessTexture:o,baseColorFactor:r,metallicFactor:s,roughnessFactor:a}=t,c=new qze;return l(i)&&(c.baseColorTexture=Ul(e,i,n)),l(o)&&(c.metallicRoughnessTexture=Ul(e,o,n)),c.baseColorFactor=Sd(re,r),c.metallicFactor=s,c.roughnessFactor=a,c}function G3e(e,t,n){let{specularFactor:i,specularTexture:o,specularColorFactor:r,specularColorTexture:s}=t,a=new e3e;return l(o)&&(a.specularTexture=Ul(e,o,n)),l(s)&&(a.specularColorTexture=Ul(e,s,n)),a.specularFactor=i,a.specularColorFactor=Sd(m,r),a}function L3e(e,t,n){let{anisotropyStrength:i=tj.DEFAULT_ANISOTROPY_STRENGTH,anisotropyRotation:o=tj.DEFAULT_ANISOTROPY_ROTATION,anisotropyTexture:r}=t,s=new tj;return l(r)&&(s.anisotropyTexture=Ul(e,r,n)),s.anisotropyStrength=i,s.anisotropyRotation=o,s}function W3e(e,t,n){let{clearcoatFactor:i=nj.DEFAULT_CLEARCOAT_FACTOR,clearcoatTexture:o,clearcoatRoughnessFactor:r=nj.DEFAULT_CLEARCOAT_ROUGHNESS_FACTOR,clearcoatRoughnessTexture:s,clearcoatNormalTexture:a}=t,c=new nj;return l(o)&&(c.clearcoatTexture=Ul(e,o,n)),l(s)&&(c.clearcoatRoughnessTexture=Ul(e,s,n)),l(a)&&(c.clearcoatNormalTexture=Ul(e,a,n)),c.clearcoatFactor=i,c.clearcoatRoughnessFactor=r,c}function F3e(e){if(!l(e))return;let t=new t3e;if(l(e.width)){let n=e.width;n>0&&Math.floor(n)===n&&(t.width=n)}if(l(e.pattern)){let n=e.pattern;n>=0&&n<=65535&&Math.floor(n)===n&&(t.pattern=n)}if(!(!l(t.width)&&!l(t.pattern)))return t}function B3e(e,t,n){let i=new n3e,o=t.extensions??Q.EMPTY_OBJECT,r=o.KHR_materials_pbrSpecularGlossiness,s=o.KHR_materials_specular,a=o.KHR_materials_anisotropy,c=o.KHR_materials_clearcoat,d=t.pbrMetallicRoughness;i.unlit=l(o.KHR_materials_unlit),l(r)?i.specularGlossiness=R3e(e,r,n):(l(d)&&(i.metallicRoughness=V3e(e,d,n)),l(s)&&!i.unlit&&(i.specular=G3e(e,s,n)),l(a)&&!i.unlit&&(i.anisotropy=L3e(e,a,n)),l(c)&&!i.unlit&&(i.clearcoat=W3e(e,c,n))),l(t.emissiveTexture)&&(i.emissiveTexture=Ul(e,t.emissiveTexture,n)),l(t.normalTexture)&&!e._loadForClassification&&(i.normalTexture=Ul(e,t.normalTexture,n)),l(t.occlusionTexture)&&(i.occlusionTexture=Ul(e,t.occlusionTexture,n)),i.emissiveFactor=Sd(m,t.emissiveFactor),i.alphaMode=t.alphaMode,i.alphaCutoff=t.alphaCutoff,i.doubleSided=t.doubleSided;let u=o.BENTLEY_materials_point_style;if(l(u)&&l(u.diameter)){let h=u.diameter;h>=1&&(i.pointDiameter=Math.floor(h))}return i.lineStyle=F3e(o.BENTLEY_materials_line_style),i}function vue(e,t){let n=new Bue;return n.featureCount=e.featureCount,n.nullFeatureId=e.nullFeatureId,n.propertyTableId=e.propertyTable,n.setIndex=e.attribute,n.label=e.label,n.positionalLabel=t,n}function Uue(e,t,n,i){let o=new Bue,r=e.featureIds;return o.featureCount=n,o.propertyTableId=t,o.setIndex=Xue(r.attribute),o.positionalLabel=i,o}function Due(e,t){let n=new Nue;return n.propertyTableId=e.propertyTable,n.featureCount=e.featureCount,n.nullFeatureId=e.nullFeatureId,n.label=e.label,n.positionalLabel=t,n.offset=0,n.repeat=1,n}function kue(e,t,n,i){let o=new Nue,r=e.featureIds;o.propertyTableId=t,o.featureCount=n,o.offset=r.constant??0;let s=r.divisor??0;return o.repeat=s===0?void 0:s,o.positionalLabel=i,o}function w3e(e,t,n,i){let o=new wue;o.featureCount=t.featureCount,o.nullFeatureId=t.nullFeatureId,o.propertyTableId=t.propertyTable,o.label=t.label,o.positionalLabel=i;let r=t.texture;o.textureReader=Ul(e,r,n,Ht.NEAREST);let a=(l(r.channels)?r.channels:[0]).map(function(c){return"rgba".charAt(c)}).join("");return o.textureReader.channels=a,o}function N3e(e,t,n,i,o,r){let s=new wue,a=t.featureIds,c=a.texture;return s.featureCount=o,s.propertyTableId=n,s.textureReader=Ul(e,c,i,Ht.NEAREST),s.textureReader.channels=a.channels,s.positionalLabel=r,s}function P3e(e,t,n,i,o){let r=new Pze,s=void 0,a=void 0,c=void 0,d=!1;for(let u in t){if(!t.hasOwnProperty(u))continue;let h=t[u],p=oj(e,ct,u),A=Mue(e,h,p,s,a,c,d,n,o);r.attributes.push(A.attribute),i.attributePlans.push(A)}return r}function X3e(e){let i=e?.KHR_gaussian_splatting?.extensions?.KHR_gaussian_splatting_compression_spz_2;if(l(i))return i}function Que(e,t){if(!l(t))return;let n=e.gltfJson.materials;if(!l(n)||t<0||t>=n.length)return;let i=n[t];if(!l(i))return;let o=i.pbrMetallicRoughness??Q.EMPTY_OBJECT,r=Sd(re,o.baseColorFactor);return l(r)?r:new re(1,1,1,1)}function Y3e(e){switch(e){case H.UNSIGNED_BYTE:return 255;case H.UNSIGNED_SHORT:return 65535;case H.UNSIGNED_INT:return 4294967295;default:throw new me("EXT_mesh_primitive_edge_visibility line strings indices must use unsigned scalar component types.")}}function M3e(e,t,n){if(!l(t)||t.length===0)return;let i=new Array(t.length);for(let o=0;o<t.length;o++){let r=t[o]??Q.EMPTY_OBJECT,s=r.indices,a=e.gltfJson.accessors[s];if(!l(a))throw new me("Edge visibility line string accessor not found!");let c=R0(e,a),d=Y3e(a.componentType),u=l(r.material)?r.material:n;i[o]={indices:c,restartIndex:d,componentType:a.componentType,materialColor:Que(e,u)}}return i}function v3e(e,t){if(!l(t))return;let n={},i=t.visibility;if(l(i)){let o=e.gltfJson.accessors[i];if(!l(o))throw new me("Edge visibility accessor not found!");n.visibility=R0(e,o)}if(n.materialColor=Que(e,t.material),l(t.silhouetteNormals)){let o=e.gltfJson.accessors[t.silhouetteNormals];l(o)&&(n.silhouetteNormals=R0(e,o))}return l(t.lineStrings)&&(n.lineStrings=M3e(e,t.lineStrings,t.material)),n}function U3e(e,t,n,i){let o=new Xze,r=new SC(o);e._primitiveLoadPlans.push(r);let s=t.material;l(s)&&(o.material=B3e(e,e.gltfJson.materials[s],i));let a=t.extensions??Q.EMPTY_OBJECT,c=a.CESIUM_mesh_vector;l(c)&&(o.vector=k3e(e,c));let d=!1,u=a.CESIUM_primitive_outline;e._loadPrimitiveOutline&&l(u)&&(d=!0,r.needsOutlines=!0,r.outlineIndices=D3e(e,u,r)),o.edgeVisibility=v3e(e,a.EXT_mesh_primitive_edge_visibility);let h=X3e(a);l(h)&&(d=!0,r.needsGaussianSplats=!0);let p=e._loadForClassification,A=a.KHR_draco_mesh_compression,f=!1,b=t.attributes;if(l(b))for(let B in b){if(!b.hasOwnProperty(B))continue;let N=b[B],P=oj(e,ct,B),g=P.modelSemantic;if(p&&!T3e(g))continue;g===ct.FEATURE_ID&&(f=!0);let _=Mue(e,N,P,t,A,h,n,d,i);r.attributePlans.push(_),o.attributes.push(_.attribute)}let C=t.targets;if(l(C)&&!p)for(let B=0;B<C.length;++B)o.morphTargets.push(P3e(e,C[B],d,r,i));let T=t.indices;if(l(T)){let B=Z3e(e,T,t,f,d,i);l(B)&&(r.indicesPlan=B,o.indices=B.indices)}let E=a.EXT_structural_metadata,S=a.EXT_mesh_features,I=a.EXT_feature_metadata,R=l(I),V=a.NGA_gpm_local;l(S)?Q3e(e,o,S,i):R&&O3e(e,o,I,i),l(E)?z3e(o,E):R&&H3e(e,o,I),l(V)&&J3e(o,V);let W=t.mode;if(p&&W!==We.TRIANGLES)throw new me("Only triangle meshes can be used for classification.");return o.primitiveType=W,o}function D3e(e,t){let n=t.indices,i=e.gltfJson.accessors[n];return R0(e,i,!1)}function k3e(e,t){if(!l(t))return;let n=new i3e;n.vector=t.vector,n.count=t.count;let i=e.gltfJson.accessors;function o(r,s){if(l(r))return R0(e,i[r])}return n.polygonAttributeOffsets=o(t.polygonAttributeOffsets,"polygonAttributeOffsets"),n.polygonHoleCounts=o(t.polygonHoleCounts,"polygonHoleCounts"),n.polygonHoleOffsets=o(t.polygonHoleOffsets,"polygonHoleOffsets"),n.polygonIndicesOffsets=o(t.polygonIndicesOffsets,"polygonIndicesOffsets"),n}function Q3e(e,t,n,i){let o;l(n)&&l(n.featureIds)?o=n.featureIds:o=[];for(let r=0;r<o.length;r++){let s=o[r],a=`featureId_${r}`,c;l(s.texture)?c=w3e(e,s,i,a):l(s.attribute)?c=vue(s,a):c=Due(s,a),t.featureIds.push(c)}}function O3e(e,t,n,i){let{featureTables:o}=e.gltfJson.extensions.EXT_feature_metadata,r=0,s=n.featureIdAttributes;if(l(s))for(let c=0;c<s.length;++c){let d=s[c],u=d.featureTable,h=e._sortedPropertyTableIds.indexOf(u),p=o[u].count,A=`featureId_${r}`;r++;let f;l(d.featureIds.attribute)?f=Uue(d,h,p,A):f=kue(d,h,p,A),t.featureIds.push(f)}let a=n.featureIdTextures;if(l(a))for(let c=0;c<a.length;++c){let d=a[c],u=d.featureTable,h=e._sortedPropertyTableIds.indexOf(u),p=o[u].count,A=`featureId_${r}`;r++;let f=N3e(e,d,h,i,p,A);t.featureIds.push(f)}}function z3e(e,t){if(!l(t))return;let{propertyTextures:n,propertyAttributes:i}=t;l(n)&&(e.propertyTextureIds=n),l(i)&&(e.propertyAttributeIds=i)}function H3e(e,t,n){l(n.featureTextures)&&(t.propertyTextureIds=n.featureTextures.map(function(i){return e._sortedFeatureTextureIds.indexOf(i)}))}function J3e(e,t){let n=t.ppeTextures??[];for(let i=0;i<n.length;i++)e.propertyTextureIds.push(i)}function K3e(e,t,n){let i=t.EXT_mesh_gpu_instancing,o=new Yze,r=i.attributes;if(l(r))for(let d in r){if(!r.hasOwnProperty(d))continue;let u=r[d];o.attributes.push(I3e(e,u,r,d,n))}let s=i.extensions??Q.EMPTY_OBJECT,a=t.EXT_instance_features,c=s.EXT_feature_metadata;return l(a)?j3e(o,a):l(c)&&q3e(e.gltfJson,o,c,e._sortedPropertyTableIds),o}function j3e(e,t){let n=t.featureIds;for(let i=0;i<n.length;i++){let o=n[i],r=`instanceFeatureId_${i}`,s;l(o.attribute)?s=vue(o,r):s=Due(o,r),e.featureIds.push(s)}}function q3e(e,t,n,i){let o=e.extensions.EXT_feature_metadata.featureTables,r=n.featureIdAttributes;if(l(r))for(let s=0;s<r.length;++s){let a=r[s],c=a.featureTable,d=i.indexOf(c),u=o[c].count,h=`instanceFeatureId_${s}`,p;l(a.featureIds.attribute)?p=Uue(a,d,u,h):p=kue(a,d,u,h),t.featureIds.push(p)}}function $3e(e,t,n){let i=new vze;i.name=t.name,i.matrix=Sd(F,t.matrix),i.translation=Sd(m,t.translation),i.rotation=Sd(Me,t.rotation),i.scale=Sd(m,t.scale);let o=t.extensions??Q.EMPTY_OBJECT,r=o.EXT_mesh_gpu_instancing,s=o.AGI_articulations,a=o.CESIUM_mesh_vector;if(l(r)){if(e._loadForClassification)throw new me("Models with the EXT_mesh_gpu_instancing extension cannot be used for classification.");i.instances=K3e(e,o,n)}l(s)&&(i.articulationName=s.articulationName),l(a)&&(i.meshVector=a);let c=t.mesh;if(l(c)){let d=e.gltfJson.meshes[c],u=CF(d);for(let A=0;A<u.length;++A)i.primitives.push(U3e(e,u[A],l(i.instances),n));let h=t.weights??d.weights,p=i.primitives[0].morphTargets;i.morphWeights=l(h)?h.slice():new Array(p.length).fill(0)}return i}function eHe(e,t){let n=e.gltfJson.nodes;if(!l(n))return[];let i=n.map(function(o,r){let s=$3e(e,o,t);return s.index=r,s});for(let o=0;o<i.length;++o){let r=n[o].children;if(l(r))for(let s=0;s<r.length;++s)i[o].children.push(i[r[s]])}return i}function tHe(e,t,n){let i=new Mze,o=t.joints;i.joints=o.map(s=>n[s]);let r=t.inverseBindMatrices;if(l(r)){let s=e.gltfJson.accessors[r];i.inverseBindMatrices=R0(e,s)}else i.inverseBindMatrices=new Array(o.length).fill(F.IDENTITY);return i}function nHe(e,t){let n=e.gltfJson.skins;if(e._loadForClassification||!l(n))return[];let i=n.map(function(r,s){let a=tHe(e,r,t);return a.index=s,a}),o=e.gltfJson.nodes;for(let r=0;r<t.length;++r){let s=o[r].skin;l(s)&&(t[r].skin=i[s])}return i}async function iHe(e,t,n,i){let o=new dF({gltf:e.gltfJson,extension:t,extensionLegacy:n,gltfResource:e._gltfResource,baseResource:e._baseResource,supportedImageFormats:e._supportedImageFormats,frameState:i,asynchronous:e._asynchronous});return e._structuralMetadataLoader=o,o.load()}async function oHe(e,t,n,i){let o=new xF({gltf:t,extension:n,gltfResource:e._gltfResource,baseResource:e._baseResource,supportedImageFormats:e._supportedImageFormats,frameState:i,asynchronous:e._asynchronous});return e._meshPrimitiveGpmLoader=o,o.load()}function rHe(e,t){let n=new Dze,i=e.gltfJson.accessors,o=i[t.input];n.input=R0(e,o);let r=t.interpolation;n.interpolation=kh[r]??kh.LINEAR;let s=i[t.output];return n.output=R0(e,s,!0),n}function sHe(e,t){let n=new kze,i=e.node;if(!l(i))return;n.node=t[i];let o=e.path.toUpperCase();return n.path=Uze[o],n}function aHe(e,t,n){let i=new Qze,o=e.sampler;return i.sampler=t[o],i.target=sHe(e.target,n),i}function cHe(e,t,n){let i=new Oze;i.name=t.name;let o=t.samplers.map(function(s,a){let c=rHe(e,s);return c.index=a,c}),r=t.channels.map(function(s){return aHe(s,o,n)});return i.samplers=o,i.channels=r,i}function lHe(e,t){let n=e.gltfJson.animations;return e._loadForClassification||!l(n)?[]:n.map(function(o,r){let s=cHe(e,o,t);return s.index=r,s})}function dHe(e){let t=new zze;t.name=e.name;let n=e.type.toUpperCase();return t.type=qc[n],t.minimumValue=e.minimumValue,t.maximumValue=e.maximumValue,t.initialValue=e.initialValue,t}function uHe(e){let t=new Hze;return t.name=e.name,t.stages=e.stages.map(dHe),t}function mHe(e){let n=(e.extensions??Q.EMPTY_OBJECT).AGI_articulations?.articulations;return l(n)?n.map(uHe):[]}function hHe(e){let t;return l(e.scenes)&&l(e.scene)&&(t=e.scenes[e.scene].nodes),t=t??e.nodes,t=l(t)?t:[],t}function fHe(e,t){let n=new Kze,i=hHe(e);return n.nodes=i.map(function(o){return t[o]}),n}var pHe=new m;function AHe(e,t){let n=e.gltfJson,i=n.extensions??Q.EMPTY_OBJECT,o=i.EXT_structural_metadata,r=i.EXT_feature_metadata,s=i.CESIUM_RTC;if(l(r)){let E=r.featureTables,S=r.featureTextures,I=l(E)?E:[],R=l(S)?S:[];e._sortedPropertyTableIds=Object.keys(I).sort(),e._sortedFeatureTextureIds=Object.keys(R).sort()}let a=eHe(e,t),c=nHe(e,a),d=lHe(e,a),u=mHe(n),h=fHe(n,a),p=new jze,A=new Jze,f=n.asset.copyright;if(l(f)){let E=f.split(";").map(function(S){return new Et(S.trim())});A.credits=E}if(p.asset=A,p.scene=h,p.nodes=a,p.skins=c,p.animations=d,p.articulations=u,p.upAxis=e._upAxis,p.forwardAxis=e._forwardAxis,l(s)){let E=m.fromArray(s.center,0,pHe);p.transform=F.fromTranslation(E,p.transform)}if(e._components=p,l(o)||l(r)){let E=iHe(e,o,r,t);e._loaderPromises.push(E)}let b=i.NGA_gpm_local;if(l(b)){let E=AF.load(b);e._components.extensions.NGA_gpm_local=E}let C=n.meshes;if(l(C))for(let E of C){let S=E.primitives;if(l(S))for(let I of S){let R=I.extensions;if(l(R)){let V=R.NGA_gpm_local;if(l(V)){let W=oHe(e,n,V,t);e._loaderPromises.push(W)}}}}let T=[];return ri(T,e._loaderPromises),e._incrementallyLoadTextures||ri(T,e._texturesPromises),Promise.all(T)}function gHe(e){let t=e._textureLoaders;for(let n=0;n<t.length;++n)t[n]=!t[n].isDestroyed()&&Fi.unload(t[n]);e._textureLoaders.length=0}function Fue(e){let t=e._bufferViewLoaders;for(let n=0;n<t.length;++n)t[n]=!t[n].isDestroyed()&&Fi.unload(t[n]);e._bufferViewLoaders.length=0}function bHe(e){let t=e._geometryLoaders;for(let n=0;n<t.length;++n)t[n]=!t[n].isDestroyed()&&Fi.unload(t[n]);e._geometryLoaders.length=0}function yHe(e){let t=e._postProcessBuffers;for(let n=0;n<t.length;n++){let i=t[n];i.isDestroyed()||i.destroy()}t.length=0}function xHe(e){l(e._structuralMetadataLoader)&&!e._structuralMetadataLoader.isDestroyed()&&(e._structuralMetadataLoader.destroy(),e._structuralMetadataLoader=void 0)}function CHe(e){l(e._meshPrimitiveGpmLoader)&&!e._meshPrimitiveGpmLoader.isDestroyed()&&(e._meshPrimitiveGpmLoader.destroy(),e._meshPrimitiveGpmLoader=void 0)}var uu=ij;var y1n=y(x(),1);var A1n=y(x(),1);var e1n=y(x(),1),TF=`uniform sampler2D u_pointCloud_colorGBuffer;
uniform sampler2D u_pointCloud_depthGBuffer;
uniform vec2 u_distanceAndEdlStrength;
in vec2 v_textureCoordinates;
vec2 neighborContribution(float log2Depth, vec2 offset)
{
float dist = u_distanceAndEdlStrength.x;
vec2 texCoordOrig = v_textureCoordinates + offset * dist;
vec2 texCoord0 = v_textureCoordinates + offset * floor(dist);
vec2 texCoord1 = v_textureCoordinates + offset * ceil(dist);
float depthOrLogDepth0 = czm_unpackDepth(texture(u_pointCloud_depthGBuffer, texCoord0));
float depthOrLogDepth1 = czm_unpackDepth(texture(u_pointCloud_depthGBuffer, texCoord1));
// ignore depth values that are the clear depth
if (depthOrLogDepth0 == 0.0 || depthOrLogDepth1 == 0.0) {
return vec2(0.0);
}
// interpolate the two adjacent depth values
float depthMix = mix(depthOrLogDepth0, depthOrLogDepth1, fract(dist));
vec4 eyeCoordinate = czm_windowToEyeCoordinates(texCoordOrig, depthMix);
return vec2(max(0.0, log2Depth - log2(-eyeCoordinate.z / eyeCoordinate.w)), 1.0);
}
void main()
{
float depthOrLogDepth = czm_unpackDepth(texture(u_pointCloud_depthGBuffer, v_textureCoordinates));
vec4 eyeCoordinate = czm_windowToEyeCoordinates(gl_FragCoord.xy, depthOrLogDepth);
eyeCoordinate /= eyeCoordinate.w;
float log2Depth = log2(-eyeCoordinate.z);
if (depthOrLogDepth == 0.0) // 0.0 is the clear value for the gbuffer
{
discard;
}
vec4 color = texture(u_pointCloud_colorGBuffer, v_textureCoordinates);
// sample from neighbors left, right, down, up
vec2 texelSize = 1.0 / czm_viewport.zw;
vec2 responseAndCount = vec2(0.0);
responseAndCount += neighborContribution(log2Depth, vec2(-texelSize.x, 0.0));
responseAndCount += neighborContribution(log2Depth, vec2(+texelSize.x, 0.0));
responseAndCount += neighborContribution(log2Depth, vec2(0.0, -texelSize.y));
responseAndCount += neighborContribution(log2Depth, vec2(0.0, +texelSize.y));
float response = responseAndCount.x / responseAndCount.y;
float strength = u_distanceAndEdlStrength.y;
float shade = exp(-response * 300.0 * strength);
color.rgb *= shade;
out_FragColor = vec4(color);
// Input and output depth are the same.
gl_FragDepth = depthOrLogDepth;
}
`;function m_(){this._framebuffer=new Ti({colorAttachmentsLength:2,depth:!0,supportsDepthTexture:!0}),this._drawCommand=void 0,this._clearCommand=void 0,this._strength=1,this._radius=1}Object.defineProperties(m_.prototype,{framebuffer:{get:function(){return this._framebuffer.framebuffer}},colorGBuffer:{get:function(){return this._framebuffer.getColorTexture(0)}},depthGBuffer:{get:function(){return this._framebuffer.getColorTexture(1)}}});function THe(e){e._framebuffer.destroy(),e._drawCommand=void 0,e._clearCommand=void 0}var rj=new M;function EHe(e,t){let n=new ze({defines:["LOG_DEPTH_WRITE"],sources:[TF]}),i={u_pointCloud_colorGBuffer:function(){return e.colorGBuffer},u_pointCloud_depthGBuffer:function(){return e.depthGBuffer},u_distanceAndEdlStrength:function(){return rj.x=e._radius,rj.y=e._strength,rj}},o=Qe.fromCache({blending:ln.ALPHA_BLEND,depthMask:!0,depthTest:{enabled:!0},stencilTest:Jt.setCesium3DTileBit(),stencilMask:Jt.CESIUM_3D_TILE_MASK});e._drawCommand=t.createViewportQuadCommand(n,{uniformMap:i,renderState:o,pass:Ge.CESIUM_3D_TILE,owner:e}),e._clearCommand=new mi({framebuffer:e.framebuffer,color:new U(0,0,0,0),depth:1,renderState:Qe.fromCache(),pass:Ge.CESIUM_3D_TILE,owner:e})}function SHe(e,t){let n=t.drawingBufferWidth,i=t.drawingBufferHeight;e._framebuffer.update(t,n,i),EHe(e,t)}function Oue(e){return e.drawBuffers&&e.fragmentDepth}m_.isSupported=Oue;function _He(e,t){let n=e.shaderCache.getDerivedShaderProgram(t,"EC");if(!l(n)){let i=t._attributeLocations,o=t.fragmentShaderSource.clone();o.sources.splice(0,0,`layout (location = 0) out vec4 out_FragData_0;
layout (location = 1) out vec4 out_FragData_1;`),o.sources=o.sources.map(function(r){return r=ze.replaceMain(r,"czm_point_cloud_post_process_main"),r=r.replaceAll(/out_FragColor/g,"out_FragData_0"),r}),o.sources.push(`void main()
{
czm_point_cloud_post_process_main();
#ifdef LOG_DEPTH
czm_writeLogDepth();
out_FragData_1 = czm_packDepth(gl_FragDepth);
#else
out_FragData_1 = czm_packDepth(gl_FragCoord.z);
#endif
}`),n=e.shaderCache.createDerivedShaderProgram(t,"EC",{vertexShaderSource:t.vertexShaderSource,fragmentShaderSource:o,attributeLocations:i})}return n}m_.prototype.update=function(e,t,n,i){if(!Oue(e.context))return;this._strength=n.eyeDomeLightingStrength,this._radius=n.eyeDomeLightingRadius*e.pixelRatio,SHe(this,e.context);let o,r=e.commandList,s=r.length;for(o=t;o<s;++o){let d=r[o];if(d.primitiveType!==We.POINTS||d.pass===Ge.TRANSLUCENT)continue;let u,h,p=d.derivedCommands.pointCloudProcessor;l(p)&&(u=p.command,h=p.originalShaderProgram),(!l(u)||d.dirty||h!==d.shaderProgram||u.framebuffer!==this.framebuffer)&&(u=ot.shallowClone(d,u),u.framebuffer=this.framebuffer,u.shaderProgram=_He(e.context,d.shaderProgram),u.castShadows=!1,u.receiveShadows=!1,l(p)||(p={command:u,originalShaderProgram:d.shaderProgram},d.derivedCommands.pointCloudProcessor=p),p.originalShaderProgram=d.shaderProgram),r[o]=u}let a=this._clearCommand,c=this._drawCommand;c.boundingVolume=i,r.push(c),r.push(a)};m_.prototype.isDestroyed=function(){return!1};m_.prototype.destroy=function(){return THe(this),he(this)};var cg=m_;function zue(e){let t=e??{};this.attenuation=t.attenuation??!1,this.geometricErrorScale=t.geometricErrorScale??1,this.maximumAttenuation=t.maximumAttenuation,this.baseResolution=t.baseResolution,this.eyeDomeLighting=t.eyeDomeLighting??!0,this.eyeDomeLightingStrength=t.eyeDomeLightingStrength??1,this.eyeDomeLightingRadius=t.eyeDomeLightingRadius??1,this.backFaceCulling=t.backFaceCulling??!1,this.normalShading=t.normalShading??!0}zue.isSupported=function(e){return cg.isSupported(e.context)};var gp=zue;var F1n=y(x(),1);var Rc={},IHe=new re(0,0,0,1),$c=new re,ZHe=new nt,sj=new M,aj=new M;Rc.worldToWindowCoordinates=function(e,t,n){return Rc.worldWithEyeOffsetToWindowCoordinates(e,t,m.ZERO,n)};var Hue=new re,Jue=new m;function EF(e,t,n,i){let o=n.viewMatrix,r=F.multiplyByVector(o,re.fromElements(e.x,e.y,e.z,1,Hue),Hue),s=m.multiplyComponents(t,m.normalize(r,Jue),Jue);return r.x+=t.x+s.x,r.y+=t.y+s.y,r.z+=s.z,F.multiplyByVector(n.frustum.projectionMatrix,r,i)}var RHe=new Ae(Math.PI,L.PI_OVER_TWO),VHe=new m,GHe=new m;Rc.worldWithEyeOffsetToWindowCoordinates=function(e,t,n,i){let o=e.frameState,r=Rc.computeActualEllipsoidPosition(o,t,IHe);if(!l(r))return;let s=e.canvas,a=ZHe;a.x=0,a.y=0,a.width=s.clientWidth,a.height=s.clientHeight;let c=e.camera,d=!1;if(o.mode===se.SCENE2D){let u=e.mapProjection,h=RHe,p=u.project(h,VHe),A=m.clone(c.position,GHe),f=c.frustum.clone(),b=F.computeViewportTransformation(a,0,1,new F),C=c.frustum.projectionMatrix,T=c.positionWC.y,E=m.fromElements(L.sign(T)*p.x-T,0,-c.positionWC.x),S=bt.pointToGLWindowCoordinates(C,b,E);if(T===0||S.x<=0||S.x>=s.clientWidth)d=!0;else{if(S.x>s.clientWidth*.5){a.width=S.x,c.frustum.right=p.x-T,$c=EF(r,n,c,$c),Rc.clipToGLWindowCoordinates(a,$c,sj),a.x+=S.x,c.position.x=-c.position.x;let I=c.frustum.right;c.frustum.right=-c.frustum.left,c.frustum.left=-I,$c=EF(r,n,c,$c),Rc.clipToGLWindowCoordinates(a,$c,aj)}else{a.x+=S.x,a.width-=S.x,c.frustum.left=-p.x-T,$c=EF(r,n,c,$c),Rc.clipToGLWindowCoordinates(a,$c,sj),a.x=a.x-a.width,c.position.x=-c.position.x;let I=c.frustum.left;c.frustum.left=-c.frustum.right,c.frustum.right=-I,$c=EF(r,n,c,$c),Rc.clipToGLWindowCoordinates(a,$c,aj)}m.clone(A,c.position),c.frustum=f.clone(),i=M.clone(sj,i),(i.x<0||i.x>s.clientWidth)&&(i.x=aj.x)}}if(o.mode!==se.SCENE2D||d){if($c=EF(r,n,c,$c),$c.z<0&&!(c.frustum instanceof bn)&&!(c.frustum instanceof as))return;i=Rc.clipToGLWindowCoordinates(a,$c,i)}return i.y=s.clientHeight-i.y,i};Rc.worldToDrawingBufferCoordinates=function(e,t,n){if(n=Rc.worldToWindowCoordinates(e,t,n),!!l(n))return Rc.transformWindowToDrawingBuffer(e,n,n)};var lg=new m,LHe=new Ae;Rc.computeActualEllipsoidPosition=function(e,t,n){let i=e.mode;if(i===se.SCENE3D)return m.clone(t,n);let o=e.mapProjection,r=o.ellipsoid.cartesianToCartographic(t,LHe);if(!l(r))return;if(o.project(r,lg),i===se.COLUMBUS_VIEW)return m.fromElements(lg.z,lg.x,lg.y,n);if(i===se.SCENE2D)return m.fromElements(0,lg.x,lg.y,n);let s=e.morphTime;return m.fromElements(L.lerp(lg.z,t.x,s),L.lerp(lg.x,t.y,s),L.lerp(lg.y,t.z,s),n)};var Kue=new m,jue=new m,que=new F;Rc.clipToGLWindowCoordinates=function(e,t,n){return m.divideByScalar(t,t.w,Kue),F.computeViewportTransformation(e,0,1,que),F.multiplyByPoint(que,Kue,jue),M.fromCartesian3(jue,n)};Rc.transformWindowToDrawingBuffer=function(e,t,n){let i=e.canvas,o=e.drawingBufferWidth/i.clientWidth,r=e.drawingBufferHeight/i.clientHeight;return M.fromElements(t.x*o,t.y*r,n)};var WHe=new re,$ue=new re;Rc.drawingBufferToWorldCoordinates=function(e,t,n,i){let r=e.context.uniformState,s=r.currentFrustum,a=s.x,c=s.y;if(e.frameState.useLogDepth){let A=n*r.log2FarDepthFromNearPlusOne,f=Math.pow(2,A)-1;n=c*(1-a/(f+a))/(c-a)}let d=e.view.passState.viewport,u=re.clone(re.UNIT_W,WHe);u.x=(t.x-d.x)/d.width*2-1,u.y=(t.y-d.y)/d.height*2-1,u.z=n*2-1,u.w=1;let h,p=e.camera.frustum;if(l(p.fovy)){h=F.multiplyByVector(r.inverseViewProjection,u,$ue);let A=1/h.w;m.multiplyByScalar(h,A,h)}else{let A=p.offCenterFrustum;l(A)&&(p=A),h=$ue,h.x=(u.x*(p.right-p.left)+p.left+p.right)*.5,h.y=(u.y*(p.top-p.bottom)+p.bottom+p.top)*.5,h.z=(u.z*(a-c)-a-c)*.5,h.w=1,h=F.multiplyByVector(r.inverseView,h,h)}return m.fromCartesian4(h,i)};var so=Rc;var _Wn=y(x(),1);var X1n=y(x(),1);var h_={};h_._deprecationWarning=Va;var dg=Uint32Array.BYTES_PER_ELEMENT;h_.parse=function(e,t){let n=t??0;t=n;let i=new Uint8Array(e),o=new DataView(e);t+=dg;let r=o.getUint32(t,!0);if(r!==1)throw new me(`Only Batched 3D Model version 1 is supported. Version ${r} is not.`);t+=dg;let s=o.getUint32(t,!0);t+=dg;let a=o.getUint32(t,!0);t+=dg;let c=o.getUint32(t,!0);t+=dg;let d=o.getUint32(t,!0);t+=dg;let u=o.getUint32(t,!0);t+=dg;let h;d>=570425344?(t-=dg*2,h=a,d=c,u=0,a=0,c=0,h_._deprecationWarning("b3dm-legacy-header","This b3dm header is using the legacy format [batchLength] [batchTableByteLength]. The new format is [featureTableJsonByteLength] [featureTableBinaryByteLength] [batchTableJsonByteLength] [batchTableBinaryByteLength] from https://github.com/CesiumGS/3d-tiles/tree/main/specification/TileFormats/Batched3DModel.")):u>=570425344&&(t-=dg,h=d,d=a,u=c,a=0,c=0,h_._deprecationWarning("b3dm-legacy-header","This b3dm header is using the legacy format [batchTableJsonByteLength] [batchTableBinaryByteLength] [batchLength]. The new format is [featureTableJsonByteLength] [featureTableBinaryByteLength] [batchTableJsonByteLength] [batchTableBinaryByteLength] from https://github.com/CesiumGS/3d-tiles/tree/main/specification/TileFormats/Batched3DModel."));let p;a===0?p={BATCH_LENGTH:h??0}:(p=Zr(i,t,a),t+=a);let A=new Uint8Array(e,t,c);t+=c;let f,b;d>0&&(f=Zr(i,t,d),t+=d,u>0&&(b=new Uint8Array(e,t,u),b=new Uint8Array(b),t+=u));let C=n+s-t;if(C===0)throw new me("glTF byte length must be greater than 0.");let T;return t%4===0?T=new Uint8Array(e,t,C):(h_._deprecationWarning("b3dm-glb-unaligned","The embedded glb is not aligned to a 4-byte boundary."),T=new Uint8Array(i.subarray(t,t+C))),{batchLength:h,featureTableJson:p,featureTableBinary:A,batchTableJson:f,batchTableBinary:b,gltf:T}};var SF=h_;var U1n=y(x(),1);function _F(e,t){this.json=e,this.buffer=t,this._cachedTypedArrays={},this.featuresLength=0}function eme(e,t,n,i,o,r){let s=e._cachedTypedArrays,a=s[t];return l(a)||(a=H.createArrayBufferView(n,e.buffer.buffer,e.buffer.byteOffset+r,o*i),s[t]=a),a}function FHe(e,t,n,i){let o=e._cachedTypedArrays,r=o[t];return l(r)||(r=H.createTypedArray(n,i),o[t]=r),r}_F.prototype.getGlobalProperty=function(e,t,n){let i=this.json[e];if(l(i))return l(i.byteOffset)?(t=t??H.UNSIGNED_INT,n=n??1,eme(this,e,t,n,1,i.byteOffset)):i};_F.prototype.hasProperty=function(e){return l(this.json[e])};_F.prototype.getPropertyArray=function(e,t,n){let i=this.json[e];if(l(i))return l(i.byteOffset)?(l(i.componentType)&&(t=H.fromName(i.componentType)),eme(this,e,t,n,this.featuresLength,i.byteOffset)):FHe(this,e,t,i)};_F.prototype.getProperty=function(e,t,n,i,o){let r=this.json[e];if(!l(r))return;let s=this.getPropertyArray(e,t,n);if(n===1)return s[i];for(let a=0;a<n;++a)o[a]=s[n*i+a];return o};var Qh=_F;var sWn=y(x(),1);function IF(e){let t=e.count,n=e.batchTable,i=e.binaryBody,o=e.parseAsPropertyAttributes??!1,r=e.customAttributeOutput,s=BHe(n),a;l(s.jsonProperties)&&(a=new sg({count:t,properties:s.jsonProperties}));let c;l(s.hierarchy)&&(c=new oC({extension:s.hierarchy,binaryBody:i}));let d=vh.BATCH_TABLE_CLASS_NAME,u=s.binaryProperties,h,p,A;if(o){let C=NHe(t,d,u,i,r);A=C.transcodedSchema,p=[new TC({propertyAttribute:C.propertyAttributeJson,class:C.transcodedClass})]}else{let C=wHe(t,d,u,i);A=C.transcodedSchema;let T=C.featureTableJson;h=new xm({count:T.count,properties:T.properties,class:C.transcodedClass,bufferViews:C.bufferViewsTypedArrays}),p=[]}let f=[];if(l(h)||l(a)||l(c)){let C=new vl({id:0,name:"Batch Table",count:t,metadataTable:h,jsonMetadataTable:a,batchTableHierarchy:c});f.push(C)}let b={schema:A,propertyTables:f,propertyAttributes:p,extensions:s.extensions,extras:s.extras};return new Wa(b)}function BHe(e){let t=e.HIERARCHY,n=e.extras,i=e.extensions,o;l(t)?(IF._deprecationWarning("batchTableHierarchyExtension","The batch table HIERARCHY property has been moved to an extension. Use extensions.3DTILES_batch_table_hierarchy instead."),o=t):l(i)&&(o=i["3DTILES_batch_table_hierarchy"]);let r,s={};for(let a in e){if(!e.hasOwnProperty(a)||a==="HIERARCHY"||a==="extensions"||a==="extras")continue;let c=e[a];Array.isArray(c)?(r=l(r)?r:{},r[a]=c):s[a]=c}return{binaryProperties:s,jsonProperties:r,hierarchy:o,extras:n,extensions:i}}function wHe(e,t,n,i){let o={},r={},s={},a=0;for(let h in n){if(!n.hasOwnProperty(h))continue;if(!l(i))throw new me(`Property ${h} requires a batch table binary.`);let p=n[h],A=bm(p);r[h]={bufferView:a},o[h]=tme(p),s[a]=A.createArrayBufferView(i.buffer,i.byteOffset+p.byteOffset,e),a++}let c={classes:{}};c.classes[t]={properties:o};let d=Xl.fromJson(c);return{featureTableJson:{class:t,count:e,properties:r},bufferViewsTypedArrays:s,transcodedSchema:d,transcodedClass:d.classes[t]}}function NHe(e,t,n,i,o){let r={},s={},a=0;for(let h in n){if(!n.hasOwnProperty(h))continue;let p=n[h];if(!l(i)&&!l(p.typedArray))throw new me(`Property ${h} requires a batch table binary.`);let A=It.sanitizeGlslIdentifier(h);(A===""||r.hasOwnProperty(A))&&(A=`property_${a}`,a++);let f=tme(p);f.name=h,r[A]=f;let b=A.toUpperCase();b.startsWith("_")||(b=`_${b}`);let C=p.typedArray;l(C)||(C=bm(p).createArrayBufferView(i.buffer,i.byteOffset+p.byteOffset,e));let T=new Tn.Attribute;T.name=b,T.count=e,T.type=p.type;let E=H.fromTypedArray(C);(E===H.INT||E===H.UNSIGNED_INT||E===H.DOUBLE)&&(IF._oneTimeWarning("Cast pnts property to floats",`Point cloud property "${b}" will be cast to a float array because INT, UNSIGNED_INT, and DOUBLE are not valid WebGL vertex attribute types. Some precision may be lost.`),C=new Float32Array(C)),T.componentDatatype=H.fromTypedArray(C),T.typedArray=C,o.push(T),s[A]={attribute:b}}let c={classes:{}};c.classes[t]={properties:r};let d=Xl.fromJson(c);return{class:t,propertyAttributeJson:{properties:s},transcodedSchema:d,transcodedClass:d.classes[t]}}function tme(e){let t=PHe(e.componentType);return{type:e.type,componentType:t}}function PHe(e){switch(e){case"BYTE":return"INT8";case"UNSIGNED_BYTE":return"UINT8";case"SHORT":return"INT16";case"UNSIGNED_SHORT":return"UINT16";case"INT":return"INT32";case"UNSIGNED_INT":return"UINT32";case"FLOAT":return"FLOAT32";case"DOUBLE":return"FLOAT64"}}IF._deprecationWarning=Va;IF._oneTimeWarning=_t;var ug=IF;var _C={UNLOADED:0,LOADING:1,PROCESSING:2,READY:3,FAILED:4},XHe=Tn.FeatureIdAttribute,cj=class extends Hi{constructor(t){super(),t=t??Q.EMPTY_OBJECT;let n=t.b3dmResource,i=t.baseResource,o=t.arrayBuffer,r=t.byteOffset??0,s=t.releaseGltfJson??!1,a=t.asynchronous??!0,c=t.incrementallyLoadTextures??!0,d=t.upAxis??ro.Y,u=t.forwardAxis??ro.X,h=t.loadAttributesAsTypedArray??!1,p=t.loadAttributesFor2D??!1,A=t.enablePick??!1,f=t.loadIndicesForWireframe??!1,b=t.loadPrimitiveOutline??!0,C=t.loadForClassification??!1;i=l(i)?i:n.clone(),this._b3dmResource=n,this._baseResource=i,this._arrayBuffer=o,this._byteOffset=r,this._releaseGltfJson=s,this._asynchronous=a,this._incrementallyLoadTextures=c,this._upAxis=d,this._forwardAxis=u,this._loadAttributesAsTypedArray=h,this._loadAttributesFor2D=p,this._enablePick=A,this._loadIndicesForWireframe=f,this._loadPrimitiveOutline=b,this._loadForClassification=C,this._state=_C.UNLOADED,this._promise=void 0,this._gltfLoader=void 0,this._batchLength=0,this._propertyTable=void 0,this._batchTable=void 0,this._components=void 0,this._transform=F.IDENTITY}get texturesLoaded(){return this._gltfLoader?.texturesLoaded}get cacheKey(){}get components(){return this._components}load(){if(l(this._promise))return this._promise;let t=SF.parse(this._arrayBuffer,this._byteOffset),n=t.batchLength,i=t.featureTableJson,o=t.featureTableBinary,r=t.batchTableJson,s=t.batchTableBinary,a=new Qh(i,o);n=a.getGlobalProperty("BATCH_LENGTH"),this._batchLength=n;let c=a.getGlobalProperty("RTC_CENTER",H.FLOAT,3);l(c)&&(this._transform=F.fromTranslation(m.fromArray(c))),this._batchTable={json:r,binary:s};let d=new uu({typedArray:t.gltf,upAxis:this._upAxis,forwardAxis:this._forwardAxis,gltfResource:this._b3dmResource,baseResource:this._baseResource,releaseGltfJson:this._releaseGltfJson,incrementallyLoadTextures:this._incrementallyLoadTextures,loadAttributesAsTypedArray:this._loadAttributesAsTypedArray,loadAttributesFor2D:this._loadAttributesFor2D,enablePick:this._enablePick,loadIndicesForWireframe:this._loadIndicesForWireframe,loadPrimitiveOutline:this._loadPrimitiveOutline,loadForClassification:this._loadForClassification,renameBatchIdSemantic:!0});this._gltfLoader=d,this._state=_C.LOADING;let u=this;return this._promise=d.load().then(function(){if(!u.isDestroyed())return u._state=_C.PROCESSING,u}).catch(function(h){if(!u.isDestroyed())return YHe(u,h)}),this._promise}process(t){if(this._state===_C.READY)return!0;if(this._state!==_C.PROCESSING||!this._gltfLoader.process(t))return!1;let i=this._gltfLoader.components;return i.transform=F.multiplyTransformation(this._transform,i.transform,i.transform),MHe(this,i),this._components=i,this._arrayBuffer=void 0,this._state=_C.READY,!0}unload(){l(this._gltfLoader)&&!this._gltfLoader.isDestroyed()&&this._gltfLoader.unload(),this._components=void 0,this._arrayBuffer=void 0}};function YHe(e,t){return e.unload(),e._state=_C.FAILED,t=e.getError("Failed to load b3dm",t),Promise.reject(t)}function MHe(e,t){let n=e._batchTable,i=e._batchLength;if(i===0)return;let o;if(l(n.json))o=ug({count:i,batchTable:n.json,binaryBody:n.binary});else{let a=new vl({name:vh.BATCH_TABLE_CLASS_NAME,count:i});o=new Wa({schema:{},propertyTables:[a]})}let r=t.scene.nodes,s=r.length;for(let a=0;a<s;a++)nme(r[a]);t.structuralMetadata=o}function nme(e){let t=e.children.length;for(let i=0;i<t;i++)nme(e.children[i]);let n=e.primitives.length;for(let i=0;i<n;i++){let o=e.primitives[i],r=It.getAttributeBySemantic(o,ct.FEATURE_ID);if(l(r)){r.setIndex=0;let s=new XHe;s.propertyTableId=0,s.setIndex=0,s.positionalLabel="featureId_0",o.featureIds.push(s)}}}var ZF=cj;var HWn=y(x(),1);var lj=class extends Hi{constructor(t){super(),t=t??Q.EMPTY_OBJECT,this._geoJson=t.geoJson,this._components=void 0}get cacheKey(){}get components(){return this._components}load(){return Promise.resolve(this)}process(t){return l(this._components)||(this._components=$He(this._geoJson,t),this._geoJson=void 0),!0}unload(){this._components=void 0}};function vHe(){this.lines=void 0,this.points=void 0,this.properties=void 0}function UHe(){this.features=[]}function dj(e){let t=e[0],n=e[1],i=e[2]??0;return new m(t,n,i)}function uj(e){let t=e.length,n=new Array(t);for(let o=0;o<t;o++)n[o]=dj(e[o]);return[n]}function DHe(e){let t=e.length,n=new Array(t);for(let i=0;i<t;i++)n[i]=uj(e[i])[0];return n}function ime(e){let t=e.length,n=new Array(t);for(let i=0;i<t;i++)n[i]=uj(e[i])[0];return n}function kHe(e){let t=e.length,n=[];for(let i=0;i<t;i++){let o=ime(e[i]);ri(n,o)}return n}function QHe(e){return[dj(e)]}function OHe(e){let t=e.length,n=new Array(t);for(let i=0;i<t;i++)n[i]=dj(e[i]);return n}var zHe={LineString:uj,MultiLineString:DHe,MultiPolygon:kHe,Polygon:ime,MultiPoint:OHe,Point:QHe},HHe={LineString:We.LINES,MultiLineString:We.LINES,MultiPolygon:We.LINES,Polygon:We.LINES,MultiPoint:We.POINTS,Point:We.POINTS};function ome(e,t){if(!l(e.geometry))return;let n=e.geometry.type,i=zHe[n],o=HHe[n],r=e.geometry.coordinates;if(!l(i)||!l(r))return;let s=new vHe;o===We.LINES?s.lines=i(r):o===We.POINTS&&(s.points=i(r)),s.properties=e.properties,t.features.push(s)}function JHe(e,t){let n=e.features,i=n.length;for(let o=0;o<i;o++)ome(n[o],t)}var KHe={FeatureCollection:JHe,Feature:ome},kk=new m;function jHe(e,t,n){let i=0,o=0,r=e.length;for(let N=0;N<r;N++){let P=e[N];if(l(P.lines)){let g=P.lines.length;for(let _=0;_<g;_++){let Z=P.lines[_];i+=Z.length,o+=(Z.length-1)*2}}}let s=new Float32Array(i*3),a=new Float32Array(i),c=Ue.createTypedArray(i,o),d=Ue.fromTypedArray(c),u=new m(Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY),h=new m(Number.NEGATIVE_INFINITY,Number.NEGATIVE_INFINITY,Number.NEGATIVE_INFINITY),p=0,A=0;for(let N=0;N<r;N++){let P=e[N];if(!l(P.lines))continue;let g=P.lines.length;for(let _=0;_<g;_++){let Z=P.lines[_],G=Z.length;for(let w=0;w<G;w++){let X=Z[w],k=m.fromDegrees(X.x,X.y,X.z,ie.WGS84,kk),v=F.multiplyByPoint(t,k,kk);m.minimumByComponent(u,v,u),m.maximumByComponent(h,v,h),m.pack(v,s,p*3),a[p]=N,w<G-1&&(c[A*2]=p,c[A*2+1]=p+1,A++),p++}}}let f=it.createVertexBuffer({typedArray:s,context:n.context,usage:Be.STATIC_DRAW});f.vertexArrayDestroyable=!1;let b=it.createVertexBuffer({typedArray:a,context:n.context,usage:Be.STATIC_DRAW});b.vertexArrayDestroyable=!1;let C=it.createIndexBuffer({typedArray:c,context:n.context,usage:Be.STATIC_DRAW,indexDatatype:d});C.vertexArrayDestroyable=!1;let T=new Tn.Attribute;T.semantic=ct.POSITION,T.componentDatatype=H.FLOAT,T.type=Ut.VEC3,T.count=i,T.min=u,T.max=h,T.buffer=f;let E=new Tn.Attribute;E.semantic=ct.FEATURE_ID,E.setIndex=0,E.componentDatatype=H.FLOAT,E.type=Ut.SCALAR,E.count=i,E.buffer=b;let S=[T,E],I=new Tn.Material;I.unlit=!0;let R=new Tn.Indices;R.indexDatatype=d,R.count=c.length,R.buffer=C;let V=new Tn.FeatureIdAttribute;V.featureCount=r,V.propertyTableId=0,V.setIndex=0,V.positionalLabel="featureId_0";let W=[V],B=new Tn.Primitive;return B.attributes=S,B.indices=R,B.featureIds=W,B.primitiveType=We.LINES,B.material=I,B}function qHe(e,t,n){let i=0,o=e.length;for(let S=0;S<o;S++){let I=e[S];l(I.points)&&(i+=I.points.length)}let r=new Float32Array(i*3),s=new Float32Array(i),a=new m(Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY),c=new m(Number.NEGATIVE_INFINITY,Number.NEGATIVE_INFINITY,Number.NEGATIVE_INFINITY),d=0;for(let S=0;S<o;S++){let I=e[S];if(!l(I.points))continue;let R=I.points.length;for(let V=0;V<R;V++){let W=I.points[V],B=m.fromDegrees(W.x,W.y,W.z,ie.WGS84,kk),N=F.multiplyByPoint(t,B,kk);m.minimumByComponent(a,N,a),m.maximumByComponent(c,N,c),m.pack(N,r,d*3),s[d]=S,d++}}let u=it.createVertexBuffer({typedArray:r,context:n.context,usage:Be.STATIC_DRAW});u.vertexArrayDestroyable=!1;let h=it.createVertexBuffer({typedArray:s,context:n.context,usage:Be.STATIC_DRAW});h.vertexArrayDestroyable=!1;let p=new Tn.Attribute;p.semantic=ct.POSITION,p.componentDatatype=H.FLOAT,p.type=Ut.VEC3,p.count=i,p.min=a,p.max=c,p.buffer=u;let A=new Tn.Attribute;A.semantic=ct.FEATURE_ID,A.setIndex=0,A.componentDatatype=H.FLOAT,A.type=Ut.SCALAR,A.count=i,A.buffer=h;let f=[p,A],b=new Tn.Material;b.unlit=!0;let C=new Tn.FeatureIdAttribute;C.featureCount=o,C.propertyTableId=0,C.setIndex=0,C.positionalLabel="featureId_0";let T=[C],E=new Tn.Primitive;return E.attributes=f,E.featureIds=T,E.primitiveType=We.POINTS,E.material=b,E}function $He(e,t){let n=new UHe,i=KHe[e.type];l(i)&&i(e,n);let o=n.features,r=o.length;if(r===0)throw new me("GeoJSON must have at least one feature");let s={};for(let N=0;N<r;N++){let g=o[N].properties??Q.EMPTY_OBJECT;for(let _ in g)g.hasOwnProperty(_)&&(l(s[_])||(s[_]=new Array(r)))}for(let N=0;N<r;N++){let P=o[N];for(let g in s)if(s.hasOwnProperty(g)){let _=P.properties[g]??"";s[g][N]=_}}let a=new sg({count:r,properties:s}),d=[new vl({id:0,count:r,jsonMetadataTable:a})],u=Xl.fromJson({}),h=new Wa({schema:u,propertyTables:d}),p=new m(Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY),A=new m(Number.NEGATIVE_INFINITY,Number.NEGATIVE_INFINITY,Number.NEGATIVE_INFINITY),f=!1,b=!1;for(let N=0;N<r;N++){let P=o[N];if(l(P.lines)){f=!0;let g=P.lines.length;for(let _=0;_<g;_++){let Z=P.lines[_],G=Z.length;for(let w=0;w<G;w++)m.minimumByComponent(p,Z[w],p),m.maximumByComponent(A,Z[w],A)}}if(l(P.points)){b=!0;let g=P.points.length;for(let _=0;_<g;_++){let Z=P.points[_];m.minimumByComponent(p,Z,p),m.maximumByComponent(A,Z,A)}}}let C=m.midpoint(p,A,new m),T=m.fromDegrees(C.x,C.y,C.z,ie.WGS84,new m),E=bt.eastNorthUpToFixedFrame(T,ie.WGS84,new F),S=F.inverseTransformation(E,new F),I=[];f&&I.push(jHe(o,S,t)),b&&I.push(qHe(o,S,t));let R=new Tn.Node;R.index=0,R.primitives=I;let V=[R],W=new Tn.Scene;W.nodes=V;let B=new Tn.Components;return B.scene=W,B.nodes=V,B.transform=E,B.structuralMetadata=h,B}var RF=lj;var VFn=y(x(),1);var $Wn=y(x(),1);var Qk={};Qk._deprecationWarning=Va;var V0=Uint32Array.BYTES_PER_ELEMENT;Qk.parse=function(e,t){let n=t??0;t=n;let i=new Uint8Array(e),o=new DataView(e);t+=V0;let r=o.getUint32(t,!0);if(r!==1)throw new me(`Only Instanced 3D Model version 1 is supported. Version ${r} is not.`);t+=V0;let s=o.getUint32(t,!0);t+=V0;let a=o.getUint32(t,!0);if(a===0)throw new me("featureTableJsonByteLength is zero, the feature table must be defined.");t+=V0;let c=o.getUint32(t,!0);t+=V0;let d=o.getUint32(t,!0);t+=V0;let u=o.getUint32(t,!0);t+=V0;let h=o.getUint32(t,!0);if(h!==1&&h!==0)throw new me(`Only glTF format 0 (uri) or 1 (embedded) are supported. Format ${h} is not.`);t+=V0;let p=Zr(i,t,a);t+=a;let A=new Uint8Array(e,t,c);t+=c;let f,b;d>0&&(f=Zr(i,t,d),t+=d,u>0&&(b=new Uint8Array(e,t,u),b=new Uint8Array(b),t+=u));let C=n+s-t;if(C===0)throw new me("glTF byte length must be greater than 0.");let T;return t%4===0?T=new Uint8Array(e,t,C):(Qk._deprecationWarning("i3dm-glb-unaligned","The embedded glb is not aligned to a 4-byte boundary."),T=new Uint8Array(i.subarray(t,t+C))),{gltfFormat:h,featureTableJson:p,featureTableBinary:A,batchTableJson:f,batchTableBinary:b,gltf:T}};var VF=Qk;var mg={NOT_LOADED:0,LOADING:1,PROCESSING:2,POST_PROCESSING:3,READY:4,FAILED:5,UNLOADED:6},Ok=Tn.Attribute,eJe=Tn.FeatureIdAttribute,sme=Tn.Instances,mj=class extends Hi{constructor(t){super(),t=t??Q.EMPTY_OBJECT;let n=t.i3dmResource,i=t.arrayBuffer,o=t.baseResource,r=t.byteOffset??0,s=t.releaseGltfJson??!1,a=t.asynchronous??!0,c=t.incrementallyLoadTextures??!0,d=t.upAxis??ro.Y,u=t.forwardAxis??ro.X,h=t.loadAttributesAsTypedArray??!1,p=t.loadIndicesForWireframe??!1,A=t.loadPrimitiveOutline??!0,f=t.enablePick??!1;o=l(o)?o:n.clone(),this._i3dmResource=n,this._baseResource=o,this._arrayBuffer=i,this._byteOffset=r,this._releaseGltfJson=s,this._asynchronous=a,this._incrementallyLoadTextures=c,this._upAxis=d,this._forwardAxis=u,this._loadAttributesAsTypedArray=h,this._loadIndicesForWireframe=p,this._loadPrimitiveOutline=A,this._enablePick=f,this._state=mg.NOT_LOADED,this._promise=void 0,this._gltfLoader=void 0,this._buffers=[],this._components=void 0,this._transform=F.IDENTITY,this._batchTable=void 0,this._featureTable=void 0,this._instancesLength=0}get texturesLoaded(){return this._gltfLoader?.texturesLoaded}get cacheKey(){}get components(){return this._components}load(){if(l(this._promise))return this._promise;let t=VF.parse(this._arrayBuffer,this._byteOffset),n=t.featureTableJson,i=t.featureTableBinary,o=t.batchTableJson,r=t.batchTableBinary,s=t.gltfFormat,a=new Qh(n,i);this._featureTable=a;let c=a.getGlobalProperty("INSTANCES_LENGTH");if(a.featuresLength=c,!l(c))throw new me("Feature table global property: INSTANCES_LENGTH must be defined");this._instancesLength=c;let d=a.getGlobalProperty("RTC_CENTER",H.FLOAT,3);l(d)&&(this._transform=F.fromTranslation(m.fromArray(d))),this._batchTable={json:o,binary:r};let u={upAxis:this._upAxis,forwardAxis:this._forwardAxis,releaseGltfJson:this._releaseGltfJson,incrementallyLoadTextures:this._incrementallyLoadTextures,loadAttributesAsTypedArray:this._loadAttributesAsTypedArray,enablePick:this._enablePick,loadIndicesForWireframe:this._loadIndicesForWireframe,loadPrimitiveOutline:this._loadPrimitiveOutline};if(s===0){let p=bd(t.gltf);p=p.replace(/[\s\0]+$/,"");let A=this._baseResource.getDerivedResource({url:p});u.gltfResource=A,u.baseResource=A}else u.gltfResource=this._i3dmResource,u.typedArray=t.gltf;let h=new uu(u);return this._gltfLoader=h,this._state=mg.LOADING,this._promise=h.load().then(()=>{if(!this.isDestroyed())return this._state=mg.PROCESSING,this}).catch(p=>{if(!this.isDestroyed())throw tJe(this,p)}),this._promise}process(t){if(this._state===mg.READY)return!0;let n=this._gltfLoader,i=!1;if(this._state===mg.PROCESSING&&(i=n.process(t)),!i)return!1;let o=n.components;return o.transform=F.multiplyTransformation(this._transform,o.transform,o.transform),oJe(this,o,t),nJe(this,o),this._components=o,this._arrayBuffer=void 0,this._state=mg.READY,!0}isUnloaded(){return this._state===mg.UNLOADED}unload(){l(this._gltfLoader)&&!this._gltfLoader.isDestroyed()&&this._gltfLoader.unload(),lJe(this),this._components=void 0,this._arrayBuffer=void 0,this._state=mg.UNLOADED}};function tJe(e,t){return e.unload(),e._state=mg.FAILED,e.getError("Failed to load i3dm",t)}function nJe(e,t){let n=e._batchTable,i=e._instancesLength;if(i===0)return;let o;if(l(n.json))o=ug({count:i,batchTable:n.json,binaryBody:n.binary});else{let r=new vl({name:vh.BATCH_TABLE_CLASS_NAME,count:i});o=new Wa({schema:{},propertyTables:[r]})}t.structuralMetadata=o}var zk=new m,hj=new Array(4),iJe=new F;function oJe(e,t,n){let i,o=e._featureTable,r=e._instancesLength;if(r===0)return;let s=o.getGlobalProperty("RTC_CENTER",H.FLOAT,3),a=o.getGlobalProperty("EAST_NORTH_UP"),c=o.hasProperty("NORMAL_UP")||o.hasProperty("NORMAL_UP_OCT32P")||a,d=o.hasProperty("SCALE")||o.hasProperty("SCALE_NON_UNIFORM"),u=sJe(o,r),h;c&&(h=new Float32Array(4*r));let p;d&&(p=new Float32Array(3*r));let A=new Float32Array(r),f=m.unpackArray(u),b=new m,C=new m,T=new m,E=new m,S=new $,I=new Me,R=new Array(4),V=new m,W=new Array(3),B=new F;if(!l(s)||m.equals(m.unpack(s),m.ZERO)){let v=ue.fromPoints(f);for(i=0;i<f.length;i++)m.subtract(f[i],v.center,zk),u[3*i+0]=zk.x,u[3*i+1]=zk.y,u[3*i+2]=zk.z;let D=F.fromTranslation(v.center,iJe);t.transform=F.multiplyTransformation(D,t.transform,t.transform)}for(i=0;i<r;i++){b=m.clone(f[i]),l(s)&&m.add(b,m.unpack(s),b),c&&(aJe(o,a,i,I,b,T,C,E,S,B),Me.pack(I,R,0),h[4*i+0]=R[0],h[4*i+1]=R[1],h[4*i+2]=R[2],h[4*i+3]=R[3]),d&&(cJe(o,i,V),m.pack(V,W,0),p[3*i+0]=W[0],p[3*i+1]=W[1],p[3*i+2]=W[2]);let v=o.getProperty("BATCH_ID",H.UNSIGNED_SHORT,1,i);l(v)||(v=i),A[i]=v}let N=new sme;N.transformInWorldSpace=!0;let P=e._buffers,g=new Ok;if(g.name="Instance Translation",g.semantic=Fs.TRANSLATION,g.componentDatatype=H.FLOAT,g.type=Ut.VEC3,g.count=r,g.typedArray=u,!c){let v=it.createVertexBuffer({context:n.context,typedArray:u,usage:Be.STATIC_DRAW});v.vertexArrayDestroyable=!1,P.push(v),g.buffer=v}if(N.attributes.push(g),c){let v=new Ok;v.name="Instance Rotation",v.semantic=Fs.ROTATION,v.componentDatatype=H.FLOAT,v.type=Ut.VEC4,v.count=r,v.typedArray=h,N.attributes.push(v)}if(d){let v=new Ok;if(v.name="Instance Scale",v.semantic=Fs.SCALE,v.componentDatatype=H.FLOAT,v.type=Ut.VEC3,v.count=r,c)v.typedArray=p;else{let D=it.createVertexBuffer({context:n.context,typedArray:p,usage:Be.STATIC_DRAW});D.vertexArrayDestroyable=!1,P.push(D),v.buffer=D}N.attributes.push(v)}let _=new Ok;_.name="Instance Feature ID",_.setIndex=0,_.semantic=Fs.FEATURE_ID,_.componentDatatype=H.FLOAT,_.type=Ut.SCALAR,_.count=r;let Z=it.createVertexBuffer({context:n.context,typedArray:A,usage:Be.STATIC_DRAW});Z.vertexArrayDestroyable=!1,P.push(Z),_.buffer=Z,N.attributes.push(_);let G=new eJe;G.propertyTableId=0,G.setIndex=0,G.positionalLabel="instanceFeatureId_0",N.featureIds.push(G);let w=t.nodes,X=w.length,k=!1;for(i=0;i<X;i++){let v=w[i];v.primitives.length>0&&(v.instances=k?rJe(N):N,k=!0)}}function rJe(e){let t=new sme;t.transformInWorldSpace=e.transformInWorldSpace;let n=e.attributes,i=n.length;for(let o=0;o<i;o++){let r=He(n[o],!1);t.attributes.push(r)}return t.featureIds=e.featureIds,t}function sJe(e,t){if(e.hasProperty("POSITION"))return e.getPropertyArray("POSITION",H.FLOAT,3);if(e.hasProperty("POSITION_QUANTIZED")){let n=e.getPropertyArray("POSITION_QUANTIZED",H.UNSIGNED_SHORT,3),i=e.getGlobalProperty("QUANTIZED_VOLUME_OFFSET",H.FLOAT,3);if(!l(i))throw new me("Global property: QUANTIZED_VOLUME_OFFSET must be defined for quantized positions.");let o=e.getGlobalProperty("QUANTIZED_VOLUME_SCALE",H.FLOAT,3);if(!l(o))throw new me("Global property: QUANTIZED_VOLUME_SCALE must be defined for quantized positions.");let r=new Float32Array(n.length);for(let s=0;s<n.length/3;s++)for(let a=0;a<3;a++){let c=3*s+a;r[c]=n[c]/65535*o[a]+i[a]}return r}else throw new me("Either POSITION or POSITION_QUANTIZED must be defined for each instance.")}var rme=new Array(4);function aJe(e,t,n,i,o,r,s,a,c,d){let u=e.getProperty("NORMAL_UP",H.FLOAT,3,n,hj),h=e.getProperty("NORMAL_RIGHT",H.FLOAT,3,n,rme),p=!1;if(l(u)){if(!l(h))throw new me("To define a custom orientation, both NORMAL_UP and NORMAL_RIGHT must be defined.");m.unpack(u,0,r),m.unpack(h,0,s),p=!0}else{let A=e.getProperty("NORMAL_UP_OCT32P",H.UNSIGNED_SHORT,2,n,hj),f=e.getProperty("NORMAL_RIGHT_OCT32P",H.UNSIGNED_SHORT,2,n,rme);if(l(A)){if(!l(f))throw new me("To define a custom orientation with oct-encoded vectors, both NORMAL_UP_OCT32P and NORMAL_RIGHT_OCT32P must be defined.");on.octDecodeInRange(A[0],A[1],65535,r),on.octDecodeInRange(f[0],f[1],65535,s),p=!0}else t?(bt.eastNorthUpToFixedFrame(o,ie.WGS84,d),F.getMatrix3(d,c)):$.clone($.IDENTITY,c)}p&&(m.cross(s,r,a),m.normalize(a,a),$.setColumn(c,0,s,c),$.setColumn(c,1,r,c),$.setColumn(c,2,a,c)),Me.fromRotationMatrix(c,i)}function cJe(e,t,n){n=m.fromElements(1,1,1,n);let i=e.getProperty("SCALE",H.FLOAT,1,t);l(i)&&m.multiplyByScalar(n,i,n);let o=e.getProperty("SCALE_NON_UNIFORM",H.FLOAT,3,t,hj);l(o)&&(n.x*=o[0],n.y*=o[1],n.z*=o[2])}function lJe(e){let t=e._buffers,n=t.length;for(let i=0;i<n;i++){let o=t[i];o.isDestroyed()||o.destroy()}t.length=0}var GF=mj;var z2n=y(x(),1);var P2n=y(x(),1);var LFn=y(x(),1),dJe={STOPPED:0,ANIMATING:1},Oh=Object.freeze(dJe);var V2n=y(x(),1);var MFn=y(x(),1);var PFn=y(x(),1);function f_(){this.times=void 0,this.points=void 0,fe.throwInstantiationError()}f_.getPointType=function(e){if(typeof e=="number")return Number;if(e instanceof m)return m;if(e instanceof Me)return Me};f_.prototype.evaluate=fe.throwInstantiationError;f_.prototype.findTimeInterval=function(e,t){let n=this.times,i=n.length;if(t=t??0,e>=n[t]){if(t+1<i&&e<n[t+1])return t;if(t+2<i&&e<n[t+2])return t+1}else if(t-1>=0&&e>=n[t-1])return t-1;let o;if(e>n[t])for(o=t;o<i-1&&!(e>=n[o]&&e<n[o+1]);++o);else for(o=t-1;o>=0&&!(e>=n[o]&&e<n[o+1]);--o);return o===i-1&&(o=i-2),o};f_.prototype.wrapTime=function(e){let t=this.times,n=t[t.length-1],i=t[0],o=n-i,r;return e<i&&(r=Math.floor((i-e)/o)+1,e+=r*o),e>n&&(r=Math.floor((e-n)/o)+1,e-=r*o),e};f_.prototype.clampTime=function(e){let t=this.times;return L.clamp(e,t[0],t[t.length-1])};var So=f_;function p_(e){this._value=e,this._valueType=So.getPointType(e)}Object.defineProperties(p_.prototype,{value:{get:function(){return this._value}}});p_.prototype.findTimeInterval=function(e){};p_.prototype.wrapTime=function(e){return 0};p_.prototype.clampTime=function(e){return 0};p_.prototype.evaluate=function(e,t){let n=this._value,i=this._valueType;return i===Number?n:i.clone(n,t)};var LF=p_;var r2n=y(x(),1);var OFn=y(x(),1);function A_(e){e=e??Q.EMPTY_OBJECT;let t=e.points,n=e.times;this._times=n,this._points=t,this._pointType=So.getPointType(t[0]),this._lastTimeIndex=0}Object.defineProperties(A_.prototype,{times:{get:function(){return this._times}},points:{get:function(){return this._points}}});A_.prototype.findTimeInterval=So.prototype.findTimeInterval;A_.prototype.wrapTime=So.prototype.wrapTime;A_.prototype.clampTime=So.prototype.clampTime;A_.prototype.evaluate=function(e,t){let n=this.points,i=this.times,o=this._lastTimeIndex=this.findTimeInterval(e,this._lastTimeIndex),r=(e-i[o])/(i[o+1]-i[o]);return this._pointType===Number?(1-r)*n[o]+r*n[o+1]:(l(t)||(t=new m),m.lerp(n[o],n[o+1],r,t))};var G0=A_;var JFn=y(x(),1);var ame={};ame.solve=function(e,t,n,i){let o=new Array(n.length),r=new Array(i.length),s=new Array(i.length),a;for(a=0;a<r.length;a++)r[a]=new m,s[a]=new m;o[0]=n[0]/t[0],r[0]=m.multiplyByScalar(i[0],1/t[0],r[0]);let c;for(a=1;a<o.length;++a)c=1/(t[a]-o[a-1]*e[a-1]),o[a]=n[a]*c,r[a]=m.subtract(i[a],m.multiplyByScalar(r[a-1],e[a-1],r[a]),r[a]),r[a]=m.multiplyByScalar(r[a],c,r[a]);for(c=1/(t[a]-o[a-1]*e[a-1]),r[a]=m.subtract(i[a],m.multiplyByScalar(r[a-1],e[a-1],r[a]),r[a]),r[a]=m.multiplyByScalar(r[a],c,r[a]),s[s.length-1]=r[r.length-1],a=s.length-2;a>=0;--a)s[a]=m.subtract(r[a],m.multiplyByScalar(s[a+1],o[a],s[a]),s[a]);return s};var g_=ame;var cme=[],lme=[],dme=[],ume=[];function uJe(e,t,n){let i=cme,o=dme,r=lme,s=ume;i.length=o.length=e.length-1,r.length=s.length=e.length;let a;i[0]=r[0]=1,o[0]=0;let c=s[0];for(l(c)||(c=s[0]=new m),m.clone(t,c),a=1;a<i.length-1;++a)i[a]=o[a]=1,r[a]=4,c=s[a],l(c)||(c=s[a]=new m),m.subtract(e[a+1],e[a-1],c),m.multiplyByScalar(c,3,c);return i[a]=0,o[a]=1,r[a]=4,c=s[a],l(c)||(c=s[a]=new m),m.subtract(e[a+1],e[a-1],c),m.multiplyByScalar(c,3,c),r[a+1]=1,c=s[a+1],l(c)||(c=s[a+1]=new m),m.clone(n,c),g_.solve(i,r,o,s)}function mJe(e){let t=cme,n=dme,i=lme,o=ume;t.length=n.length=e.length-1,i.length=o.length=e.length;let r;t[0]=n[0]=1,i[0]=2;let s=o[0];for(l(s)||(s=o[0]=new m),m.subtract(e[1],e[0],s),m.multiplyByScalar(s,3,s),r=1;r<t.length;++r)t[r]=n[r]=1,i[r]=4,s=o[r],l(s)||(s=o[r]=new m),m.subtract(e[r+1],e[r-1],s),m.multiplyByScalar(s,3,s);return i[r]=2,s=o[r],l(s)||(s=o[r]=new m),m.subtract(e[r],e[r-1],s),m.multiplyByScalar(s,3,s),g_.solve(t,i,n,o)}function _d(e){e=e??Q.EMPTY_OBJECT;let t=e.points,n=e.times,i=e.inTangents,o=e.outTangents;this._times=n,this._points=t,this._pointType=So.getPointType(t[0]),this._inTangents=i,this._outTangents=o,this._lastTimeIndex=0}Object.defineProperties(_d.prototype,{times:{get:function(){return this._times}},points:{get:function(){return this._points}},inTangents:{get:function(){return this._inTangents}},outTangents:{get:function(){return this._outTangents}}});_d.createC1=function(e){e=e??Q.EMPTY_OBJECT;let t=e.times,n=e.points,i=e.tangents,o=i.slice(0,i.length-1),r=i.slice(1,i.length);return new _d({times:t,points:n,inTangents:r,outTangents:o})};_d.createNaturalCubic=function(e){e=e??Q.EMPTY_OBJECT;let t=e.times,n=e.points;if(n.length<3)return new G0({points:n,times:t});let i=mJe(n),o=i.slice(0,i.length-1),r=i.slice(1,i.length);return new _d({times:t,points:n,inTangents:r,outTangents:o})};_d.createClampedCubic=function(e){e=e??Q.EMPTY_OBJECT;let t=e.times,n=e.points,i=e.firstTangent,o=e.lastTangent,r=So.getPointType(n[0]);if(n.length<3)return new G0({points:n,times:t});let s=uJe(n,i,o),a=s.slice(0,s.length-1),c=s.slice(1,s.length);return new _d({times:t,points:n,inTangents:c,outTangents:a})};_d.hermiteCoefficientMatrix=new F(2,-3,0,1,-2,3,0,0,1,-2,1,0,1,-1,0,0);_d.prototype.findTimeInterval=So.prototype.findTimeInterval;var hJe=new re,b_=new m;_d.prototype.wrapTime=So.prototype.wrapTime;_d.prototype.clampTime=So.prototype.clampTime;_d.prototype.evaluate=function(e,t){let n=this.points,i=this.times,o=this.inTangents,r=this.outTangents;this._lastTimeIndex=this.findTimeInterval(e,this._lastTimeIndex);let s=this._lastTimeIndex,a=i[s+1]-i[s],c=(e-i[s])/a,d=hJe;d.z=c,d.y=c*c,d.x=d.y*c,d.w=1;let u=F.multiplyByVector(_d.hermiteCoefficientMatrix,d,d);u.z*=a,u.w*=a;let h=this._pointType;return h===Number?n[s]*u.x+n[s+1]*u.y+r[s]*u.z+o[s]*u.w:(l(t)||(t=new h),t=h.multiplyByScalar(n[s],u.x,t),h.multiplyByScalar(n[s+1],u.y,b_),h.add(t,b_,t),h.multiplyByScalar(r[s],u.z,b_),h.add(t,b_,t),h.multiplyByScalar(o[s],u.w,b_),h.add(t,b_,t))};var L0=_d;var d2n=y(x(),1);function y_(e){e=e??Q.EMPTY_OBJECT;let t=e.points,n=e.times;this._times=n,this._points=t,this._pointType=So.getPointType(t[0]),this._lastTimeIndex=0}Object.defineProperties(y_.prototype,{times:{get:function(){return this._times}},points:{get:function(){return this._points}}});y_.prototype.findTimeInterval=So.prototype.findTimeInterval;y_.prototype.wrapTime=So.prototype.wrapTime;y_.prototype.clampTime=So.prototype.clampTime;y_.prototype.evaluate=function(e,t){let n=this.points;this._lastTimeIndex=this.findTimeInterval(e,this._lastTimeIndex);let i=this._lastTimeIndex,o=this._pointType;return o===Number?n[i]:(l(t)||(t=new o),o.clone(n[i],t))};var WF=y_;var A2n=y(x(),1);function fJe(e){let t=e.points,n=e.times;return function(i,o){l(o)||(o=new Me);let r=e._lastTimeIndex=e.findTimeInterval(i,e._lastTimeIndex),s=(i-n[r])/(n[r+1]-n[r]),a=t[r],c=t[r+1];return Me.fastSlerp(a,c,s,o)}}function x_(e){e=e??Q.EMPTY_OBJECT;let t=e.points,n=e.times;this._times=n,this._points=t,this._evaluateFunction=fJe(this),this._lastTimeIndex=0}Object.defineProperties(x_.prototype,{times:{get:function(){return this._times}},points:{get:function(){return this._points}}});x_.prototype.findTimeInterval=So.prototype.findTimeInterval;x_.prototype.wrapTime=So.prototype.wrapTime;x_.prototype.clampTime=So.prototype.clampTime;x_.prototype.evaluate=function(e,t){return this._evaluateFunction(e,t)};var FF=x_;var C_=Tn.AnimatedPropertyType;function fj(e){e=e??Q.EMPTY_OBJECT;let t=e.channel,n=e.runtimeAnimation,i=e.runtimeNode;this._channel=t,this._runtimeAnimation=n,this._runtimeNode=i,this._splines=[],this._path=void 0,yJe(this)}Object.defineProperties(fj.prototype,{channel:{get:function(){return this._channel}},runtimeAnimation:{get:function(){return this._runtimeAnimation}},runtimeNode:{get:function(){return this._runtimeNode}},splines:{get:function(){return this._splines}}});function pJe(e,t){let n=[],i=[],o=[],r=t.length;for(let s=0;s<r;s+=3)i.push(t[s]),n.push(t[s+1]),o.push(t[s+2]);return i.splice(0,1),o.length=o.length-1,new L0({times:e,points:n,inTangents:i,outTangents:o})}function mme(e,t,n,i){if(e.length===1&&t.length===1)return new LF(t[0]);switch(n){case kh.STEP:return new WF({times:e,points:t});case kh.CUBICSPLINE:return pJe(e,t);case kh.LINEAR:return i===C_.ROTATION?new FF({times:e,points:t}):new G0({times:e,points:t})}}function AJe(e,t,n,i,o){let r=[];if(i===C_.WEIGHTS){let a=t.length/o,c,d;for(c=0;c<o;c++){let u=new Array(a),h=c;if(n===kh.CUBICSPLINE)for(d=0;d<a;d+=3)u[d]=t[h],u[d+1]=t[h+o],u[d+2]=t[h+2*o],h+=o*3;else for(d=0;d<a;d++)u[d]=t[h],h+=o;r.push(mme(e,u,n,i))}}else r.push(mme(e,t,n,i));return r}var gJe=new m,bJe=new Me;function yJe(e){let t=e._channel,n=t.sampler,i=n.input,o=n.output,r=n.interpolation,a=t.target.path,c=e._runtimeNode,d=l(c.morphWeights)?c.morphWeights.length:1,u=AJe(i,o,r,a,d);e._splines=u,e._path=a}fj.prototype.animate=function(e){let t=this._splines,n=this._path,i=this._runtimeAnimation.model,o=this._runtimeNode;if(n===C_.WEIGHTS){let r=o.morphWeights,s=r.length;for(let a=0;a<s;a++){let c=t[a],d=i.clampAnimations?c.clampTime(e):c.wrapTime(e);r[a]=c.evaluate(d)}}else{if(o.userAnimated)return;{let r=t[0],s=i.clampAnimations?r.clampTime(e):r.wrapTime(e);n===C_.TRANSLATION||n===C_.SCALE?o[n]=r.evaluate(s,gJe):n===C_.ROTATION&&(o[n]=r.evaluate(s,bJe))}}};var BF=fj;function pj(e,t,n){this._animation=t,this._name=t.name,this._runtimeChannels=void 0,this._startTime=q.clone(n.startTime),this._delay=n.delay??0,this._stopTime=q.clone(n.stopTime),this.removeOnStop=n.removeOnStop??!1,this._multiplier=n.multiplier??1,this._reverse=n.reverse??!1,this._loop=n.loop??Ed.NONE,this._animationTime=n.animationTime,this._prevAnimationDelta=void 0,this.start=new xe,this.update=new xe,this.stop=new xe,this._state=Oh.STOPPED,this._computedStartTime=void 0,this._duration=void 0;let i=this;this._raiseStartEvent=function(){i.start.raiseEvent(e,i)},this._updateEventTime=0,this._raiseUpdateEvent=function(){i.update.raiseEvent(e,i,i._updateEventTime)},this._raiseStopEvent=function(){i.stop.raiseEvent(e,i)},this._model=e,this._localStartTime=void 0,this._localStopTime=void 0,xJe(this)}Object.defineProperties(pj.prototype,{animation:{get:function(){return this._animation}},name:{get:function(){return this._name}},runtimeChannels:{get:function(){return this._runtimeChannels}},model:{get:function(){return this._model}},localStartTime:{get:function(){return this._localStartTime}},localStopTime:{get:function(){return this._localStopTime}},startTime:{get:function(){return this._startTime}},delay:{get:function(){return this._delay}},stopTime:{get:function(){return this._stopTime}},multiplier:{get:function(){return this._multiplier}},reverse:{get:function(){return this._reverse}},loop:{get:function(){return this._loop}},animationTime:{get:function(){return this._animationTime}}});function xJe(e){let t=Number.MAX_VALUE,n=-Number.MAX_VALUE,i=e._model.sceneGraph,r=e._animation.channels,s=r.length,a=[];for(let c=0;c<s;c++){let d=r[c],u=d.target;if(!l(u))continue;let h=u.node.index,p=i._runtimeNodes[h],A=new BF({channel:d,runtimeAnimation:e,runtimeNode:p}),f=d.sampler.input;t=Math.min(t,f[0]),n=Math.max(n,f[f.length-1]),a.push(A)}e._runtimeChannels=a,e._localStartTime=t,e._localStopTime=n}pj.prototype.animate=function(e){let t=this._runtimeChannels,n=t.length;for(let i=0;i<n;i++)t[i].animate(e)};var wF=pj;function hg(e){this.animationAdded=new xe,this.animationRemoved=new xe,this.animateWhilePaused=!1,this._model=e,this._runtimeAnimations=[],this._previousTime=void 0}Object.defineProperties(hg.prototype,{length:{get:function(){return this._runtimeAnimations.length}},model:{get:function(){return this._model}}});function Aj(e,t,n){let i=e._model,o=new wF(i,t,n);return e._runtimeAnimations.push(o),e.animationAdded.raiseEvent(i,o),o}hg.prototype.add=function(e){e=e??Q.EMPTY_OBJECT;let n=this._model.sceneGraph.components.animations,i=e.index;if(l(i))return Aj(this,n[i],e);let o=n.length;for(let r=0;r<o;++r)if(n[r].name===e.name){i=r;break}return Aj(this,n[i],e)};hg.prototype.addAll=function(e){e=e??Q.EMPTY_OBJECT;let n=this._model.sceneGraph.components.animations,i=[],o=n.length;for(let r=0;r<o;++r){let s=Aj(this,n[r],e);i.push(s)}return i};hg.prototype.remove=function(e){if(!l(e))return!1;let t=this._runtimeAnimations,n=t.indexOf(e);return n!==-1?(t.splice(n,1),this.animationRemoved.raiseEvent(this._model,e),!0):!1};hg.prototype.removeAll=function(){let e=this._model,t=this._runtimeAnimations,n=t.length;this._runtimeAnimations.length=0;for(let i=0;i<n;++i)this.animationRemoved.raiseEvent(e,t[i])};hg.prototype.contains=function(e){return l(e)?this._runtimeAnimations.indexOf(e)!==-1:!1};hg.prototype.get=function(e){return this._runtimeAnimations[e]};var Hk=[];function CJe(e,t,n){return function(){e.animationRemoved.raiseEvent(t,n)}}hg.prototype.update=function(e){let t=this._runtimeAnimations,n=t.length;if(n===0)return this._previousTime=void 0,!1;if(!this.animateWhilePaused&&q.equals(e.time,this._previousTime))return!1;this._previousTime=q.clone(e.time,this._previousTime);let i=!1,o=e.time,r=this._model;for(let s=0;s<n;++s){let a=t[s];l(a._computedStartTime)||(a._computedStartTime=q.addSeconds(a.startTime??o,a.delay,new q)),l(a._duration)||(a._duration=a.localStopTime*(1/a.multiplier));let c=a._computedStartTime,d=a._duration,u=a.stopTime,h=q.lessThanOrEquals(c,o),p=l(u)&&q.greaterThan(o,u),A=0;if(d!==0){let C=q.secondsDifference(p?u:o,c);A=l(a._animationTime)?a._animationTime(d,C):C/d}let f=a.loop===Ed.REPEAT||a.loop===Ed.MIRRORED_REPEAT,b=(h||f&&!l(a.startTime))&&(A<=1||f)&&!p;if(A===a._prevAnimationDelta){let C=a._state===Oh.STOPPED;if(b!==C)continue}if(a._prevAnimationDelta=A,b||a._state===Oh.ANIMATING){if(b&&a._state===Oh.STOPPED&&(a._state=Oh.ANIMATING,a.start.numberOfListeners>0&&e.afterRender.push(a._raiseStartEvent)),a.loop===Ed.REPEAT)A=A-Math.floor(A);else if(a.loop===Ed.MIRRORED_REPEAT){let T=Math.floor(A),E=A-T;A=T%2===1?1-E:E}a.reverse&&(A=1-A);let C=A*d*a.multiplier;C=L.clamp(C,a.localStartTime,a.localStopTime),a.animate(C),a.update.numberOfListeners>0&&(a._updateEventTime=C,e.afterRender.push(a._raiseUpdateEvent)),i=!0,b||(a._state=Oh.STOPPED,a.stop.numberOfListeners>0&&e.afterRender.push(a._raiseStopEvent),a.removeOnStop&&Hk.push(a))}}n=Hk.length;for(let s=0;s<n;++s){let a=Hk[s];t.splice(t.indexOf(a),1),e.afterRender.push(CJe(this,r,a))}return Hk.length=0,i};var NF=hg;var uBn=y(x(),1);var j2n=y(x(),1);function IC(e){this._model=e.model,this._featureTable=e.featureTable,this._featureId=e.featureId,this._color=void 0}Object.defineProperties(IC.prototype,{show:{get:function(){return this._featureTable.getShow(this._featureId)},set:function(e){this._featureTable.setShow(this._featureId,e)}},color:{get:function(){return l(this._color)||(this._color=new U),this._featureTable.getColor(this._featureId,this._color)},set:function(e){this._featureTable.setColor(this._featureId,e)}},primitive:{get:function(){return this._model}},featureTable:{get:function(){return this._featureTable}},featureId:{get:function(){return this._featureId}}});IC.prototype.hasProperty=function(e){return this._featureTable.hasProperty(this._featureId,e)};IC.prototype.getProperty=function(e){return this._featureTable.getProperty(this._featureId,e)};IC.prototype.getPropertyInherited=function(e){return this._featureTable.hasPropertyBySemantic(this._featureId,e)?this._featureTable.getPropertyBySemantic(this._featureId,e):this._featureTable.getProperty(this._featureId,e)};IC.prototype.getPropertyIds=function(e){return this._featureTable.getPropertyIds(e)};IC.prototype.setProperty=function(e,t){return this._featureTable.setProperty(this._featureId,e,t)};var PF=IC;var $2n=y(x(),1),XF={ALL_OPAQUE:0,ALL_TRANSLUCENT:1,OPAQUE_AND_TRANSLUCENT:2};XF.getStyleCommandsNeeded=function(e,t){return t===0?XF.ALL_OPAQUE:t===e?XF.ALL_TRANSLUCENT:XF.OPAQUE_AND_TRANSLUCENT};var zh=Object.freeze(XF);var tBn=y(x(),1);var W0={GLTF:"GLTF",TILE_GLTF:"TILE_GLTF",TILE_B3DM:"B3DM",TILE_I3DM:"I3DM",TILE_PNTS:"PNTS",TILE_GEOJSON:"TILE_GEOJSON"};W0.is3DTiles=function(e){switch(e){case W0.TILE_GLTF:case W0.TILE_B3DM:case W0.TILE_I3DM:case W0.TILE_PNTS:case W0.TILE_GEOJSON:return!0;case W0.GLTF:return!1}};var Nr=Object.freeze(W0);function ms(e){let t=e.model,n=e.propertyTable;this._propertyTable=n,this._model=t,this._features=void 0,this._featuresLength=0,this._batchTexture=void 0,this._styleCommandsNeededDirty=!1,this._styleCommandsNeeded=zh.ALL_OPAQUE,TJe(this)}Object.defineProperties(ms.prototype,{batchTexture:{get:function(){return this._batchTexture}},featuresLength:{get:function(){return this._featuresLength}},batchTextureByteLength:{get:function(){return l(this._batchTexture)?this._batchTexture.byteLength:0}},styleCommandsNeededDirty:{get:function(){return this._styleCommandsNeededDirty}}});function TJe(e){let t=e._model,n=Nr.is3DTiles(t.type),i=e._propertyTable.count;if(i===0)return;let o,r=new Array(i);if(n){let s=t.content;for(o=0;o<i;o++)r[o]=new Ga(s,o)}else for(o=0;o<i;o++)r[o]=new PF({model:t,featureId:o,featureTable:e});e._features=r,e._featuresLength=i,e._batchTexture=new Pl({featuresLength:i,owner:e,statistics:n?t.content.tileset.statistics:void 0})}ms.prototype.update=function(e){this._styleCommandsNeededDirty=!1,this._batchTexture.update(void 0,e);let t=zh.getStyleCommandsNeeded(this._featuresLength,this._batchTexture.translucentFeaturesLength);this._styleCommandsNeeded!==t&&(this._styleCommandsNeededDirty=!0,this._styleCommandsNeeded=t)};ms.prototype.setShow=function(e,t){this._batchTexture.setShow(e,t)};ms.prototype.setAllShow=function(e){this._batchTexture.setAllShow(e)};ms.prototype.getShow=function(e){return this._batchTexture.getShow(e)};ms.prototype.setColor=function(e,t){this._batchTexture.setColor(e,t)};ms.prototype.setAllColor=function(e){this._batchTexture.setAllColor(e)};ms.prototype.getColor=function(e,t){return this._batchTexture.getColor(e,t)};ms.prototype.getPickColor=function(e){return this._batchTexture.getPickColor(e)};ms.prototype.getFeature=function(e){return this._features[e]};ms.prototype.hasProperty=function(e,t){return this._propertyTable.hasProperty(e,t)};ms.prototype.hasPropertyBySemantic=function(e,t){return this._propertyTable.hasPropertyBySemantic(e,t)};ms.prototype.getProperty=function(e,t){return this._propertyTable.getProperty(e,t)};ms.prototype.getPropertyBySemantic=function(e,t){return this._propertyTable.getPropertyBySemantic(e,t)};ms.prototype.getPropertyIds=function(e){return this._propertyTable.getPropertyIds(e)};ms.prototype.setProperty=function(e,t,n){return this._propertyTable.setProperty(e,t,n)};ms.prototype.isClass=function(e,t){return this._propertyTable.isClass(e,t)};ms.prototype.isExactClass=function(e,t){return this._propertyTable.isExactClass(e,t)};ms.prototype.getExactClassName=function(e){return this._propertyTable.getExactClassName(e)};var EJe=new U;ms.prototype.applyStyle=function(e){if(!l(e)){this.setAllColor(Pl.DEFAULT_COLOR_VALUE),this.setAllShow(Pl.DEFAULT_SHOW_VALUE);return}for(let t=0;t<this._featuresLength;t++){let n=this.getFeature(t),i=l(e.color)?e.color.evaluateColor(n,EJe)??Pl.DEFAULT_COLOR_VALUE:Pl.DEFAULT_COLOR_VALUE,o=l(e.show)?e.show.evaluate(n)??Pl.DEFAULT_SHOW_VALUE:Pl.DEFAULT_SHOW_VALUE;this.setColor(t,i),this.setShow(t,o)}};ms.prototype.isDestroyed=function(){return!1};ms.prototype.destroy=function(e){this._batchTexture=this._batchTexture&&this._batchTexture.destroy(),he(this)};var YF=ms;var IHn=y(x(),1);var gBn=y(x(),1);var hme={name:"TilesetPipelineStage"};hme.process=function(e,t,n){if(t.hasSkipLevelOfDetail(n)){e.shaderBuilder.addDefine("POLYGON_OFFSET",void 0,pe.FRAGMENT);let r={u_polygonOffset:function(){return M.ZERO}};e.uniformMap=Ft(r,e.uniformMap),e.hasSkipLevelOfDetail=!0}let i=e.renderStateOptions;i.stencilTest=Jt.setCesium3DTileBit(),i.stencilMask=Jt.CESIUM_3D_TILE_MASK};var MF=hme;var RBn=y(x(),1);var yBn=y(x(),1),vF=`// robust iterative solution without trig functions
// https://github.com/0xfaded/ellipse_demo/issues/1
// https://stackoverflow.com/questions/22959698/distance-from-given-point-to-given-ellipse
//
// This version uses only a single iteration for best performance. For fog
// rendering, the difference is negligible.
vec2 nearestPointOnEllipseFast(vec2 pos, vec2 radii) {
vec2 p = abs(pos);
vec2 inverseRadii = 1.0 / radii;
vec2 evoluteScale = (radii.x * radii.x - radii.y * radii.y) * vec2(1.0, -1.0) * inverseRadii;
// We describe the ellipse parametrically: v = radii * vec2(cos(t), sin(t))
// but store the cos and sin of t in a vec2 for efficiency.
// Initial guess: t = cos(pi/4)
vec2 tTrigs = vec2(0.70710678118);
vec2 v = radii * tTrigs;
// Find the evolute of the ellipse (center of curvature) at v.
vec2 evolute = evoluteScale * tTrigs * tTrigs * tTrigs;
// Find the (approximate) intersection of p - evolute with the ellipsoid.
vec2 q = normalize(p - evolute) * length(v - evolute);
// Update the estimate of t.
tTrigs = (q + evolute) * inverseRadii;
tTrigs = normalize(clamp(tTrigs, 0.0, 1.0));
v = radii * tTrigs;
return v * sign(pos);
}
vec3 computeEllipsoidPositionWC(vec3 positionMC) {
// Get the world-space position and project onto a meridian plane of
// the ellipsoid
vec3 positionWC = (czm_model * vec4(positionMC, 1.0)).xyz;
vec2 positionEllipse = vec2(length(positionWC.xy), positionWC.z);
vec2 nearestPoint = nearestPointOnEllipseFast(positionEllipse, czm_ellipsoidRadii.xz);
// Reconstruct a 3D point in world space
return vec3(nearestPoint.x * normalize(positionWC.xy), nearestPoint.y);
}
void applyFog(inout vec4 color, vec4 groundAtmosphereColor, vec3 lightDirection, float distanceToCamera) {
vec3 fogColor = groundAtmosphereColor.rgb;
// If there is dynamic lighting, apply that to the fog.
const float NONE = 0.0;
if (czm_atmosphereDynamicLighting != NONE) {
float darken = clamp(dot(normalize(czm_viewerPositionWC), lightDirection), czm_fogMinimumBrightness, 1.0);
fogColor *= darken;
}
// Tonemap if HDR rendering is disabled
#ifndef HDR
fogColor.rgb = czm_pbrNeutralTonemapping(fogColor.rgb);
fogColor.rgb = czm_inverseGamma(fogColor.rgb);
#endif
vec3 withFog = czm_fog(distanceToCamera, color.rgb, fogColor, czm_fogVisualDensityScalar);
color = vec4(withFog, color.a);
}
void atmosphereStage(inout vec4 color, in ProcessedAttributes attributes) {
vec3 rayleighColor;
vec3 mieColor;
float opacity;
vec3 positionWC;
vec3 lightDirection;
// When the camera is in space, compute the position per-fragment for
// more accurate ground atmosphere. All other cases will use
//
// The if condition will be added in https://github.com/CesiumGS/cesium/issues/11717
if (false) {
positionWC = computeEllipsoidPositionWC(attributes.positionMC);
lightDirection = czm_getDynamicAtmosphereLightDirection(positionWC, czm_atmosphereDynamicLighting);
// The fog color is derived from the ground atmosphere color
czm_computeGroundAtmosphereScattering(
positionWC,
lightDirection,
rayleighColor,
mieColor,
opacity
);
} else {
positionWC = attributes.positionWC;
lightDirection = czm_getDynamicAtmosphereLightDirection(positionWC, czm_atmosphereDynamicLighting);
rayleighColor = v_atmosphereRayleighColor;
mieColor = v_atmosphereMieColor;
opacity = v_atmosphereOpacity;
}
//color correct rayleigh and mie colors
const bool ignoreBlackPixels = true;
rayleighColor = czm_applyHSBShift(rayleighColor, czm_atmosphereHsbShift, ignoreBlackPixels);
mieColor = czm_applyHSBShift(mieColor, czm_atmosphereHsbShift, ignoreBlackPixels);
vec4 groundAtmosphereColor = czm_computeAtmosphereColor(positionWC, lightDirection, rayleighColor, mieColor, opacity);
if (u_isInFog) {
float distanceToCamera = length(attributes.positionEC);
applyFog(color, groundAtmosphereColor, lightDirection, distanceToCamera);
} else {
// Ground atmosphere
}
}
`;var CBn=y(x(),1),UF=`void atmosphereStage(ProcessedAttributes attributes) {
vec3 lightDirection = czm_getDynamicAtmosphereLightDirection(v_positionWC, czm_atmosphereDynamicLighting);
czm_computeGroundAtmosphereScattering(
// This assumes the geometry stage came before this.
v_positionWC,
lightDirection,
v_atmosphereRayleighColor,
v_atmosphereMieColor,
v_atmosphereOpacity
);
}
`;var fme={name:"AtmospherePipelineStage"};fme.process=function(e,t,n){let i=e.shaderBuilder;i.addDefine("HAS_ATMOSPHERE",void 0,pe.BOTH),i.addDefine("COMPUTE_POSITION_WC_ATMOSPHERE",void 0,pe.BOTH),i.addVarying("vec3","v_atmosphereRayleighColor"),i.addVarying("vec3","v_atmosphereMieColor"),i.addVarying("float","v_atmosphereOpacity"),i.addVertexLines([UF]),i.addFragmentLines([vF]),i.addUniform("bool","u_isInFog",pe.FRAGMENT),e.uniformMap.u_isInFog=function(){let o=m.distance(n.camera.positionWC,t.boundingSphere.center);return L.fog(o,n.fog.density)>L.EPSILON3}};var DF=fme;var XBn=y(x(),1);var GBn=y(x(),1),kF=`#ifdef DIFFUSE_IBL
vec3 sampleDiffuseEnvironment(vec3 cubeDir)
{
#ifdef CUSTOM_SPHERICAL_HARMONICS
return czm_sphericalHarmonics(cubeDir, model_sphericalHarmonicCoefficients);
#else
return czm_sphericalHarmonics(cubeDir, czm_sphericalHarmonicCoefficients);
#endif
}
#endif
#ifdef SPECULAR_IBL
vec3 sampleSpecularEnvironment(vec3 cubeDir, float roughness)
{
#ifdef CUSTOM_SPECULAR_IBL
float lod = roughness * model_specularEnvironmentMapsMaximumLOD;
return czm_textureCube(model_specularEnvironmentMaps, cubeDir, lod).rgb;
#else
float lod = roughness * czm_specularEnvironmentMapsMaximumLOD;
return czm_textureCube(czm_specularEnvironmentMaps, cubeDir, lod).rgb;
#endif
}
vec3 computeSpecularIBL(vec3 cubeDir, float NdotV, vec3 f0, float roughness)
{
// see https://bruop.github.io/ibl/ at Single Scattering Results
// Roughness dependent fresnel, from Fdez-Aguera
vec3 f90 = max(vec3(1.0 - roughness), f0);
vec3 F = fresnelSchlick2(f0, f90, NdotV);
vec2 brdfLut = texture(czm_brdfLut, vec2(NdotV, roughness)).rg;
vec3 specularSample = sampleSpecularEnvironment(cubeDir, roughness);
return specularSample * (F * brdfLut.x + brdfLut.y);
}
#endif
#if defined(DIFFUSE_IBL) || defined(SPECULAR_IBL)
/**
* Compute the light contributions from environment maps and spherical harmonic coefficients.
* See Fdez-Aguera, https://www.jcgt.org/published/0008/01/03/paper.pdf, for explanation
* of the single- and multi-scattering terms.
*
* @param {vec3} viewDirectionEC Unit vector pointing from the fragment to the eye position.
* @param {vec3} normalEC The surface normal in eye coordinates.
* @param {czm_modelMaterial} The material properties.
* @return {vec3} The computed HDR color.
*/
vec3 textureIBL(vec3 viewDirectionEC, vec3 normalEC, czm_modelMaterial material) {
vec3 f0 = material.specular;
float roughness = material.roughness;
float specularWeight = 1.0;
#ifdef USE_SPECULAR
specularWeight = material.specularWeight;
#endif
float NdotV = clamp(dot(normalEC, viewDirectionEC), 0.0, 1.0);
// see https://bruop.github.io/ibl/ at Single Scattering Results
// Roughness dependent fresnel, from Fdez-Aguera
vec3 f90 = max(vec3(1.0 - roughness), f0);
vec3 singleScatterFresnel = fresnelSchlick2(f0, f90, NdotV);
vec2 brdfLut = texture(czm_brdfLut, vec2(NdotV, roughness)).rg;
vec3 FssEss = specularWeight * (singleScatterFresnel * brdfLut.x + brdfLut.y);
#ifdef DIFFUSE_IBL
vec3 normalMC = normalize(model_iblReferenceFrameMatrix * normalEC);
vec3 irradiance = sampleDiffuseEnvironment(normalMC);
vec3 averageFresnel = f0 + (1.0 - f0) / 21.0;
float Ems = specularWeight * (1.0 - brdfLut.x - brdfLut.y);
vec3 FmsEms = FssEss * averageFresnel * Ems / (1.0 - averageFresnel * Ems);
vec3 dielectricScattering = (1.0 - FssEss - FmsEms) * material.diffuse;
vec3 diffuseContribution = irradiance * (FmsEms + dielectricScattering) * model_iblFactor.x;
#else
vec3 diffuseContribution = vec3(0.0);
#endif
#ifdef USE_ANISOTROPY
// Bend normal to account for anisotropic distortion of specular reflection
vec3 anisotropyDirection = material.anisotropicB;
vec3 anisotropicTangent = cross(anisotropyDirection, viewDirectionEC);
vec3 anisotropicNormal = cross(anisotropicTangent, anisotropyDirection);
float bendFactor = 1.0 - material.anisotropyStrength * (1.0 - roughness);
float bendFactorPow4 = bendFactor * bendFactor * bendFactor * bendFactor;
vec3 bentNormal = normalize(mix(anisotropicNormal, normalEC, bendFactorPow4));
vec3 reflectEC = reflect(-viewDirectionEC, bentNormal);
#else
vec3 reflectEC = reflect(-viewDirectionEC, normalEC);
#endif
#ifdef SPECULAR_IBL
vec3 reflectMC = normalize(model_iblReferenceFrameMatrix * reflectEC);
vec3 radiance = sampleSpecularEnvironment(reflectMC, roughness);
vec3 specularContribution = radiance * FssEss * model_iblFactor.y;
#else
vec3 specularContribution = vec3(0.0);
#endif
return diffuseContribution + specularContribution;
}
#endif
`;var pme={name:"ImageBasedLightingPipelineStage"},SJe=new M;pme.process=function(e,t,n){let i=t.imageBasedLighting,o=t.environmentMapManager,r=e.shaderBuilder,s;l(i.specularEnvironmentMaps)||(s=o.radianceCubeMap);let a=i.sphericalHarmonicCoefficients??o.sphericalHarmonicCoefficients;r.addDefine("USE_IBL_LIGHTING",void 0,pe.FRAGMENT),r.addUniform("vec2","model_iblFactor",pe.FRAGMENT),wh.isSupported(n.context)&&((i.useSphericalHarmonics||i.useSpecularEnvironmentMaps||i.enabled)&&r.addUniform("mat3","model_iblReferenceFrameMatrix",pe.FRAGMENT),l(s)&&r.addDefine("COMPUTE_POSITION_WC_ATMOSPHERE",void 0,pe.BOTH),l(a)&&l(a[0])?(r.addDefine("DIFFUSE_IBL",void 0,pe.FRAGMENT),r.addDefine("CUSTOM_SPHERICAL_HARMONICS",void 0,pe.FRAGMENT),r.addUniform("vec3","model_sphericalHarmonicCoefficients[9]",pe.FRAGMENT)):i.useDefaultSphericalHarmonics&&r.addDefine("DIFFUSE_IBL",void 0,pe.FRAGMENT),l(i.specularEnvironmentCubeMap)&&i.specularEnvironmentCubeMap.ready||l(s)?(r.addDefine("SPECULAR_IBL",void 0,pe.FRAGMENT),r.addDefine("CUSTOM_SPECULAR_IBL",void 0,pe.FRAGMENT),r.addUniform("samplerCube","model_specularEnvironmentMaps",pe.FRAGMENT),r.addUniform("float","model_specularEnvironmentMapsMaximumLOD",pe.FRAGMENT)):t.useDefaultSpecularMaps&&r.addDefine("SPECULAR_IBL",void 0,pe.FRAGMENT)),r.addFragmentLines(kF);let c={model_iblFactor:function(){return M.multiplyByScalar(i.imageBasedLightingFactor,o?.intensity||1,SJe)},model_iblReferenceFrameMatrix:function(){return t._iblReferenceFrameMatrix},model_sphericalHarmonicCoefficients:function(){return a},model_specularEnvironmentMaps:function(){return i.specularEnvironmentCubeMap.texture},model_specularEnvironmentMapsMaximumLOD:function(){return i.specularEnvironmentCubeMap.maximumMipmapLevel}};l(s)&&(c.model_specularEnvironmentMaps=function(){return s},c.model_specularEnvironmentMapsMaximumLOD=function(){return o.maximumMipmapLevel}),e.uniformMap=Ft(c,e.uniformMap)};var QF=pme;var qBn=y(x(),1);var OBn=y(x(),1);var _Je=L.EPSILON16;function bj(e){e=e??Q.EMPTY_OBJECT;let t=e.stage,n=e.runtimeArticulation;this._stage=t,this._runtimeArticulation=n,this._name=t.name,this._type=t.type,this._minimumValue=t.minimumValue,this._maximumValue=t.maximumValue,this._currentValue=t.initialValue}Object.defineProperties(bj.prototype,{stage:{get:function(){return this._stage}},runtimeArticulation:{get:function(){return this._runtimeArticulation}},name:{get:function(){return this._name}},type:{get:function(){return this._type}},minimumValue:{get:function(){return this._minimumValue}},maximumValue:{get:function(){return this._maximumValue}},currentValue:{get:function(){return this._currentValue},set:function(e){e=L.clamp(e,this.minimumValue,this.maximumValue),L.equalsEpsilon(this._currentValue,e,_Je)||(this._currentValue=e,this.runtimeArticulation._dirty=!0)}}});var IJe=new m,gj=new $;bj.prototype.applyStageToMatrix=function(e){let t=this.type,n=this.currentValue,i=IJe,o;switch(t){case qc.XROTATE:o=$.fromRotationX(L.toRadians(n),gj),e=F.multiplyByMatrix3(e,o,e);break;case qc.YROTATE:o=$.fromRotationY(L.toRadians(n),gj),e=F.multiplyByMatrix3(e,o,e);break;case qc.ZROTATE:o=$.fromRotationZ(L.toRadians(n),gj),e=F.multiplyByMatrix3(e,o,e);break;case qc.XTRANSLATE:i.x=n,i.y=0,i.z=0,e=F.multiplyByTranslation(e,i,e);break;case qc.YTRANSLATE:i.x=0,i.y=n,i.z=0,e=F.multiplyByTranslation(e,i,e);break;case qc.ZTRANSLATE:i.x=0,i.y=0,i.z=n,e=F.multiplyByTranslation(e,i,e);break;case qc.XSCALE:i.x=n,i.y=1,i.z=1,e=F.multiplyByScale(e,i,e);break;case qc.YSCALE:i.x=1,i.y=n,i.z=1,e=F.multiplyByScale(e,i,e);break;case qc.ZSCALE:i.x=1,i.y=1,i.z=n,e=F.multiplyByScale(e,i,e);break;case qc.UNIFORMSCALE:e=F.multiplyByUniformScale(e,n,e);break;default:break}return e};var OF=bj;function Jk(e){e=e??Q.EMPTY_OBJECT;let t=e.articulation,n=e.sceneGraph;this._articulation=t,this._sceneGraph=n,this._name=t.name,this._runtimeStages=[],this._runtimeStagesByName={},this._runtimeNodes=[],this._dirty=!0,ZJe(this)}Object.defineProperties(Jk.prototype,{articulation:{get:function(){return this._articulation}},sceneGraph:{get:function(){return this._sceneGraph}},name:{get:function(){return this._name}},runtimeStages:{get:function(){return this._runtimeStages}},runtimeNodes:{get:function(){return this._runtimeNodes}}});function ZJe(e){let n=e.articulation.stages,i=n.length,o=e._runtimeStages,r=e._runtimeStagesByName;for(let s=0;s<i;s++){let a=n[s],c=new OF({stage:a,runtimeArticulation:e});o.push(c);let d=a.name;r[d]=c}}Jk.prototype.setArticulationStage=function(e,t){let n=this._runtimeStagesByName[e];l(n)&&(n.currentValue=t)};var RJe=new F,VJe=new F;Jk.prototype.apply=function(){if(!this._dirty)return;this._dirty=!1;let e=F.clone(F.IDENTITY,RJe),t,n=this._runtimeStages,i=n.length;for(t=0;t<i;t++)e=n[t].applyStageToMatrix(e);let o=this._runtimeNodes,r=o.length;for(t=0;t<r;t++){let s=o[t],a=F.multiplyTransformation(s.originalTransform,e,VJe);s.transform=a}};var zF=Jk;var awn=y(x(),1);var ewn=y(x(),1),HF=`void modelColorStage(inout czm_modelMaterial material)
{
material.diffuse = mix(material.diffuse, model_color.rgb, model_colorBlend);
float highlight = ceil(model_colorBlend);
material.diffuse *= mix(model_color.rgb, vec3(1.0), highlight);
material.alpha *= model_color.a;
}
`;var T_={name:"ModelColorPipelineStage",COLOR_UNIFORM_NAME:"model_color",COLOR_BLEND_UNIFORM_NAME:"model_colorBlend"};T_.process=function(e,t,n){let i=e.shaderBuilder;i.addDefine("HAS_MODEL_COLOR",void 0,pe.FRAGMENT),i.addFragmentLines(HF);let o={},r=t.color;r.alpha===0&&!t.hasSilhouette(n)&&(e.renderStateOptions.colorMask={red:!1,green:!1,blue:!1,alpha:!1}),r.alpha<1&&(e.alphaOptions.pass=Ge.TRANSLUCENT),i.addUniform("vec4",T_.COLOR_UNIFORM_NAME,pe.FRAGMENT),o[T_.COLOR_UNIFORM_NAME]=function(){return t.color},i.addUniform("float",T_.COLOR_BLEND_UNIFORM_NAME,pe.FRAGMENT),o[T_.COLOR_BLEND_UNIFORM_NAME]=function(){return jc.getColorBlend(t.colorBlendMode,t.colorBlendAmount)},e.uniformMap=Ft(o,e.uniformMap)};var F0=T_;var gwn=y(x(),1);var lwn=y(x(),1),JF=`#ifdef USE_CLIPPING_PLANES_FLOAT_TEXTURE
vec4 getClippingPlane(
highp sampler2D packedClippingPlanes,
int clippingPlaneNumber,
mat4 transform
) {
int pixY = clippingPlaneNumber / CLIPPING_PLANES_TEXTURE_WIDTH;
int pixX = clippingPlaneNumber - (pixY * CLIPPING_PLANES_TEXTURE_WIDTH);
float pixelWidth = 1.0 / float(CLIPPING_PLANES_TEXTURE_WIDTH);
float pixelHeight = 1.0 / float(CLIPPING_PLANES_TEXTURE_HEIGHT);
float u = (float(pixX) + 0.5) * pixelWidth; // sample from center of pixel
float v = (float(pixY) + 0.5) * pixelHeight;
vec4 plane = texture(packedClippingPlanes, vec2(u, v));
return czm_transformPlane(plane, transform);
}
#else
// Handle uint8 clipping texture instead
vec4 getClippingPlane(
highp sampler2D packedClippingPlanes,
int clippingPlaneNumber,
mat4 transform
) {
int clippingPlaneStartIndex = clippingPlaneNumber * 2; // clipping planes are two pixels each
int pixY = clippingPlaneStartIndex / CLIPPING_PLANES_TEXTURE_WIDTH;
int pixX = clippingPlaneStartIndex - (pixY * CLIPPING_PLANES_TEXTURE_WIDTH);
float pixelWidth = 1.0 / float(CLIPPING_PLANES_TEXTURE_WIDTH);
float pixelHeight = 1.0 / float(CLIPPING_PLANES_TEXTURE_HEIGHT);
float u = (float(pixX) + 0.5) * pixelWidth; // sample from center of pixel
float v = (float(pixY) + 0.5) * pixelHeight;
vec4 oct32 = texture(packedClippingPlanes, vec2(u, v)) * 255.0;
vec2 oct = vec2(oct32.x * 256.0 + oct32.y, oct32.z * 256.0 + oct32.w);
vec4 plane;
plane.xyz = czm_octDecode(oct, 65535.0);
plane.w = czm_unpackFloat(texture(packedClippingPlanes, vec2(u + pixelWidth, v)));
return czm_transformPlane(plane, transform);
}
#endif
float clip(vec4 fragCoord, sampler2D clippingPlanes, mat4 clippingPlanesMatrix) {
vec4 position = czm_windowToEyeCoordinates(fragCoord);
vec3 clipNormal = vec3(0.0);
vec3 clipPosition = vec3(0.0);
float pixelWidth = czm_metersPerPixel(position);
#ifdef UNION_CLIPPING_REGIONS
float clipAmount; // For union planes, we want to get the min distance. So we set the initial value to the first plane distance in the loop below.
#else
float clipAmount = 0.0;
bool clipped = true;
#endif
for (int i = 0; i < CLIPPING_PLANES_LENGTH; ++i) {
vec4 clippingPlane = getClippingPlane(clippingPlanes, i, clippingPlanesMatrix);
clipNormal = clippingPlane.xyz;
clipPosition = -clippingPlane.w * clipNormal;
float amount = dot(clipNormal, (position.xyz - clipPosition)) / pixelWidth;
#ifdef UNION_CLIPPING_REGIONS
clipAmount = czm_branchFreeTernary(i == 0, amount, min(amount, clipAmount));
if (amount <= 0.0) {
discard;
}
#else
clipAmount = max(amount, clipAmount);
clipped = clipped && (amount <= 0.0);
#endif
}
#ifndef UNION_CLIPPING_REGIONS
if (clipped) {
discard;
}
#endif
return clipAmount;
}
void modelClippingPlanesStage(inout vec4 color)
{
float clipDistance = clip(gl_FragCoord, model_clippingPlanes, model_clippingPlanesMatrix);
vec4 clippingPlanesEdgeColor = vec4(1.0);
clippingPlanesEdgeColor.rgb = model_clippingPlanesEdgeStyle.rgb;
float clippingPlanesEdgeWidth = model_clippingPlanesEdgeStyle.a;
if (clipDistance > 0.0 && clipDistance < clippingPlanesEdgeWidth) {
color = clippingPlanesEdgeColor;
}
}
`;var Ame={name:"ModelClippingPlanesPipelineStage"},GJe=new M;Ame.process=function(e,t,n){let i=t.clippingPlanes,o=n.context,r=e.shaderBuilder;r.addDefine("HAS_CLIPPING_PLANES",void 0,pe.FRAGMENT),r.addDefine("CLIPPING_PLANES_LENGTH",i.length,pe.FRAGMENT),i.unionClippingRegions&&r.addDefine("UNION_CLIPPING_REGIONS",void 0,pe.FRAGMENT),ls.useFloatTexture(o)&&r.addDefine("USE_CLIPPING_PLANES_FLOAT_TEXTURE",void 0,pe.FRAGMENT);let s=ls.getTextureResolution(i,o,GJe);r.addDefine("CLIPPING_PLANES_TEXTURE_WIDTH",s.x,pe.FRAGMENT),r.addDefine("CLIPPING_PLANES_TEXTURE_HEIGHT",s.y,pe.FRAGMENT),r.addUniform("sampler2D","model_clippingPlanes",pe.FRAGMENT),r.addUniform("vec4","model_clippingPlanesEdgeStyle",pe.FRAGMENT),r.addUniform("mat4","model_clippingPlanesMatrix",pe.FRAGMENT),r.addFragmentLines(JF);let a={model_clippingPlanes:function(){return i.texture},model_clippingPlanesEdgeStyle:function(){let c=U.clone(i.edgeColor);return c.alpha=i.edgeWidth,c},model_clippingPlanesMatrix:function(){return t._clippingPlanesMatrix}};e.uniformMap=Ft(a,e.uniformMap)};var KF=Ame;var Zwn=y(x(),1);var ywn=y(x(),1),jF=`void modelClippingPolygonsStage(ProcessedAttributes attributes)
{
vec2 sphericalLatLong = czm_approximateSphericalCoordinates(v_positionWC);
sphericalLatLong.y = czm_branchFreeTernary(sphericalLatLong.y < czm_pi, sphericalLatLong.y, sphericalLatLong.y - czm_twoPi);
vec2 minDistance = vec2(czm_infinity);
v_regionIndex = -1;
v_clippingPosition = vec2(czm_infinity);
for (int regionIndex = 0; regionIndex < CLIPPING_POLYGON_REGIONS_LENGTH; regionIndex++) {
vec4 extents = czm_unpackClippingExtents(model_clippingExtents, regionIndex);
vec2 rectUv = (sphericalLatLong.yx - extents.yx) * extents.wz;
vec2 clamped = clamp(rectUv, vec2(0.0), vec2(1.0));
vec2 distance = abs(rectUv - clamped) * extents.wz;
if (minDistance.x > distance.x || minDistance.y > distance.y) {
minDistance = distance;
v_clippingPosition = rectUv;
}
float threshold = 0.01;
if (rectUv.x > threshold && rectUv.y > threshold && rectUv.x < 1.0 - threshold && rectUv.y < 1.0 - threshold) {
v_regionIndex = regionIndex;
}
}
}
`;var Cwn=y(x(),1),qF=`void modelClippingPolygonsStage()
{
vec2 clippingPosition = v_clippingPosition;
int regionIndex = v_regionIndex;
czm_clipPolygons(model_clippingDistance, CLIPPING_POLYGON_REGIONS_LENGTH, clippingPosition, regionIndex);
}
`;var gme={name:"ModelClippingPolygonsPipelineStage"};gme.process=function(e,t,n){let i=t.clippingPolygons,o=e.shaderBuilder;o.addDefine("ENABLE_CLIPPING_POLYGONS",void 0,pe.BOTH),i.inverse&&o.addDefine("CLIPPING_INVERSE",void 0,pe.FRAGMENT),o.addDefine("CLIPPING_POLYGON_REGIONS_LENGTH",i.extentsCount,pe.BOTH),o.addUniform("sampler2D","model_clippingDistance",pe.FRAGMENT),o.addUniform("sampler2D","model_clippingExtents",pe.VERTEX),o.addVarying("vec2","v_clippingPosition"),o.addVarying("int","v_regionIndex","flat"),o.addVertexLines(jF),o.addFragmentLines(qF);let r={model_clippingDistance:function(){return i.clippingTexture??n.context.defaultTexture},model_clippingExtents:function(){return i.extentsTexture??n.context.defaultTexture}};e.uniformMap=Ft(r,e.uniformMap)};var $F=gme;var Gwn=y(x(),1);function bme(e,t){this._model=e,this._runtimeNode=t}Object.defineProperties(bme.prototype,{name:{get:function(){return this._runtimeNode._name}},id:{get:function(){return this._runtimeNode._id}},show:{get:function(){return this._runtimeNode.show},set:function(e){this._runtimeNode.show=e}},matrix:{get:function(){return this._runtimeNode.transform},set:function(e){l(e)?(this._runtimeNode.transform=e,this._runtimeNode.userAnimated=!0,this._model._userAnimationDirty=!0):(this._runtimeNode.transform=this.originalMatrix,this._runtimeNode.userAnimated=!1)}},originalMatrix:{get:function(){return this._runtimeNode.originalTransform}}});var e2=bme;var SNn=y(x(),1);var rNn=y(x(),1);var Wwn=y(x(),1),t2=`mat4 getInstancingTransform()
{
mat4 instancingTransform;
#ifdef HAS_INSTANCE_MATRICES
instancingTransform = mat4(
a_instancingTransformRow0.x, a_instancingTransformRow1.x, a_instancingTransformRow2.x, 0.0, // Column 1
a_instancingTransformRow0.y, a_instancingTransformRow1.y, a_instancingTransformRow2.y, 0.0, // Column 2
a_instancingTransformRow0.z, a_instancingTransformRow1.z, a_instancingTransformRow2.z, 0.0, // Column 3
a_instancingTransformRow0.w, a_instancingTransformRow1.w, a_instancingTransformRow2.w, 1.0 // Column 4
);
#else
vec3 translation = vec3(0.0, 0.0, 0.0);
vec3 scale = vec3(1.0, 1.0, 1.0);
#ifdef HAS_INSTANCE_TRANSLATION
translation = a_instanceTranslation;
#endif
#ifdef HAS_INSTANCE_SCALE
scale = a_instanceScale;
#endif
instancingTransform = mat4(
scale.x, 0.0, 0.0, 0.0,
0.0, scale.y, 0.0, 0.0,
0.0, 0.0, scale.z, 0.0,
translation.x, translation.y, translation.z, 1.0
);
#endif
return instancingTransform;
}
#ifdef USE_2D_INSTANCING
mat4 getInstancingTransform2D()
{
mat4 instancingTransform2D;
#ifdef HAS_INSTANCE_MATRICES
instancingTransform2D = mat4(
a_instancingTransform2DRow0.x, a_instancingTransform2DRow1.x, a_instancingTransform2DRow2.x, 0.0, // Column 1
a_instancingTransform2DRow0.y, a_instancingTransform2DRow1.y, a_instancingTransform2DRow2.y, 0.0, // Column 2
a_instancingTransform2DRow0.z, a_instancingTransform2DRow1.z, a_instancingTransform2DRow2.z, 0.0, // Column 3
a_instancingTransform2DRow0.w, a_instancingTransform2DRow1.w, a_instancingTransform2DRow2.w, 1.0 // Column 4
);
#else
vec3 translation2D = vec3(0.0, 0.0, 0.0);
vec3 scale = vec3(1.0, 1.0, 1.0);
#ifdef HAS_INSTANCE_TRANSLATION
translation2D = a_instanceTranslation2D;
#endif
#ifdef HAS_INSTANCE_SCALE
scale = a_instanceScale;
#endif
instancingTransform2D = mat4(
scale.x, 0.0, 0.0, 0.0,
0.0, scale.y, 0.0, 0.0,
0.0, 0.0, scale.z, 0.0,
translation2D.x, translation2D.y, translation2D.z, 1.0
);
#endif
return instancingTransform2D;
}
#endif
`;var Bwn=y(x(),1),n2=`void instancingStage(inout ProcessedAttributes attributes)
{
vec3 positionMC = attributes.positionMC;
mat4 instancingTransform = getInstancingTransform();
attributes.positionMC = (instancingTransform * vec4(positionMC, 1.0)).xyz;
#ifdef HAS_NORMALS
vec3 normalMC = attributes.normalMC;
attributes.normalMC = (instancingTransform * vec4(normalMC, 0.0)).xyz;
#endif
#ifdef USE_2D_INSTANCING
mat4 instancingTransform2D = getInstancingTransform2D();
attributes.position2D = (instancingTransform2D * vec4(positionMC, 1.0)).xyz;
#endif
}
`;var Nwn=y(x(),1),i2=`void legacyInstancingStage(
inout ProcessedAttributes attributes,
out mat4 instanceModelView,
out mat3 instanceModelViewInverseTranspose)
{
vec3 positionMC = attributes.positionMC;
mat4 instancingTransform = getInstancingTransform();
mat4 instanceModel = instancingTransform * u_instance_nodeTransform;
instanceModelView = u_instance_modifiedModelView;
instanceModelViewInverseTranspose = mat3(u_instance_modifiedModelView * instanceModel);
attributes.positionMC = (instanceModel * vec4(positionMC, 1.0)).xyz;
#ifdef USE_2D_INSTANCING
mat4 instancingTransform2D = getInstancingTransform2D();
attributes.position2D = (instancingTransform2D * vec4(positionMC, 1.0)).xyz;
#endif
}
`;var Kk=new F,LJe=new F,WJe=new F,xme={name:"InstancingPipelineStage",_getInstanceTransformsAsMatrices:_me,_transformsToTypedArray:xj};xme.process=function(e,t,n){let i=t.instances,o=i.attributes[0].count,r=e.shaderBuilder;r.addDefine("HAS_INSTANCING"),r.addVertexLines(t2);let s=e.model,a=s.sceneGraph,c=e.runtimeNode,d=n.mode!==se.SCENE3D&&!n.scene3DOnly&&s._projectTo2D,u=s._enablePick&&!n.context.webgl2,h=[];zJe(e,n,i,h,d,u),KJe(e,n,i,h);let p={};if(i.transformInWorldSpace?(r.addDefine("USE_LEGACY_INSTANCING",void 0,pe.VERTEX),r.addUniform("mat4","u_instance_modifiedModelView",pe.VERTEX),r.addUniform("mat4","u_instance_nodeTransform",pe.VERTEX),p.u_instance_modifiedModelView=function(){let A=F.multiplyTransformation(s.modelMatrix,a.components.transform,Kk);return d?F.multiplyTransformation(n.context.uniformState.view3D,A,Kk):(n.mode!==se.SCENE3D&&(A=bt.basisTo2D(n.mapProjection,A,Kk)),F.multiplyTransformation(n.context.uniformState.view,A,Kk))},p.u_instance_nodeTransform=function(){return F.multiplyTransformation(a.axisCorrectionMatrix,c.computedTransform,LJe)},r.addVertexLines(i2)):r.addVertexLines(n2),d){r.addDefine("USE_2D_INSTANCING",void 0,pe.VERTEX),r.addUniform("mat4","u_modelView2D",pe.VERTEX);let A=n.context,f=F.fromTranslation(c.instancingReferencePoint2D,new F);p.u_modelView2D=function(){return F.multiplyTransformation(A.uniformState.view,f,WJe)}}e.uniformMap=Ft(p,e.uniformMap),e.instanceCount=o,ri(e.attributes,h)};var o2=new F,FJe=new m;function BJe(e,t,n,i,o){let r=F.multiplyTransformation(t,e,o2);return r=F.multiplyTransformation(r,n,o2),o=bt.basisTo2D(i.mapProjection,r,o),o}function wJe(e,t,n,i,o){let r=F.fromTranslation(e,o2),s=F.multiplyTransformation(t,r,o2);s=F.multiplyTransformation(s,n,o2);let a=F.getTranslation(s,FJe);return o=so.computeActualEllipsoidPosition(i,a,o),o}function Cme(e,t,n){let i=e.model,o=i.sceneGraph;e.runtimeNode.node.instances.transformInWorldSpace?(t=F.multiplyTransformation(i.modelMatrix,o.components.transform,t),n=F.multiplyTransformation(o.axisCorrectionMatrix,e.runtimeNode.computedTransform,n)):(t=F.clone(o.computedModelMatrix,t),t=F.multiplyTransformation(t,e.runtimeNode.computedTransform,t),n=F.clone(F.IDENTITY,n))}var Tme=new F,Eme=new F,NJe=new F,PJe=new m;function XJe(e,t,n,i){let o=Tme,r=Eme;Cme(t,o,r);let a=t.runtimeNode.instancingReferencePoint2D,c=e.length;for(let d=0;d<c;d++){let u=e[d],h=BJe(u,o,r,n,NJe),p=F.getTranslation(h,PJe),A=m.subtract(p,a,p);i[d]=F.setTranslation(h,A,i[d])}return i}function YJe(e,t,n,i){let o=Tme,r=Eme;Cme(t,o,r);let a=t.runtimeNode.instancingReferencePoint2D,c=e.length;for(let d=0;d<c;d++){let u=e[d],h=wJe(u,o,r,n,u);i[d]=m.subtract(h,a,i[d])}return i}var MJe=new m,vJe=new m;function Sme(e,t){let n=e.runtimeNode,i=e.model.sceneGraph.computedModelMatrix,o=F.multiplyByPoint(i,n.instancingTranslationMin,MJe),r=so.computeActualEllipsoidPosition(t,o,o),s=F.multiplyByPoint(i,n.instancingTranslationMax,vJe),a=so.computeActualEllipsoidPosition(t,s,s);n.instancingReferencePoint2D=m.lerp(r,a,.5,new m)}function xj(e){let n=e.length,i=new Float32Array(n*12);for(let o=0;o<n;o++){let r=e[o],s=12*o;i[s+0]=r[0],i[s+1]=r[4],i[s+2]=r[8],i[s+3]=r[12],i[s+4]=r[1],i[s+5]=r[5],i[s+6]=r[9],i[s+7]=r[13],i[s+8]=r[2],i[s+9]=r[6],i[s+10]=r[10],i[s+11]=r[14]}return i}function UJe(e){let n=e.length,i=new Float32Array(n*3);for(let o=0;o<n;o++){let r=e[o],s=3*o;i[s+0]=r[0],i[s+1]=r[4],i[s+2]=r[8]}return i}var DJe=new m,kJe=new Me,QJe=new m;function _me(e,t,n){let i=new Array(t),o=It.getAttributeBySemantic(e,Fs.TRANSLATION),r=It.getAttributeBySemantic(e,Fs.ROTATION),s=It.getAttributeBySemantic(e,Fs.SCALE),a=new m(-Number.MAX_VALUE,-Number.MAX_VALUE,-Number.MAX_VALUE),c=new m(Number.MAX_VALUE,Number.MAX_VALUE,Number.MAX_VALUE),d=l(o),u=l(r),h=l(s),p=d?o.typedArray:new Float32Array(t*3),A=u?r.typedArray:new Float32Array(t*4);u&&r.normalized&&(A=on.dequantize(A,r.componentDatatype,r.type,t));let f;h?f=s.typedArray:(f=new Float32Array(t*3),f.fill(1));for(let C=0;C<t;C++){let T=new m(p[C*3],p[C*3+1],p[C*3+2],DJe);m.maximumByComponent(a,T,a),m.minimumByComponent(c,T,c);let E=new Me(A[C*4],A[C*4+1],A[C*4+2],u?A[C*4+3]:1,kJe),S=new m(f[C*3],f[C*3+1],f[C*3+2],QJe),I=F.fromTranslationQuaternionRotationScale(T,E,S,new F);i[C]=I}let b=n.runtimeNode;return b.instancingTranslationMin=c,b.instancingTranslationMax=a,d&&(o.typedArray=void 0),u&&(r.typedArray=void 0),h&&(s.typedArray=void 0),i}function OJe(e,t,n){let i=new Array(t),o=e.typedArray,r=new m(Number.MAX_VALUE,Number.MAX_VALUE,Number.MAX_VALUE),s=new m(-Number.MAX_VALUE,-Number.MAX_VALUE,-Number.MAX_VALUE);for(let c=0;c<t;c++){let d=new m(o[c*3],o[c*3+1],o[c*3+2]);i[c]=d,m.minimumByComponent(r,d,r),m.maximumByComponent(s,d,s)}let a=n.runtimeNode;return a.instancingTranslationMin=r,a.instancingTranslationMax=s,e.typedArray=void 0,i}function Cj(e,t){let n=it.createVertexBuffer({context:t.context,typedArray:e,usage:Be.STATIC_DRAW});return n.vertexArrayDestroyable=!1,n}function zJe(e,t,n,i,o,r){let s=It.getAttributeBySemantic(n,Fs.ROTATION);l(s)?HJe(e,n,i,t,o,r):JJe(e,n,i,t,o)}function HJe(e,t,n,i,o,r){let s=e.shaderBuilder,a=t.attributes[0].count,c=e.model,d=e.runtimeNode;s.addDefine("HAS_INSTANCE_MATRICES");let u="Transform",h,p=d.instancingTransformsBuffer;if(!l(p)){h=_me(t,a,e);let C=xj(h);p=Cj(C,i),c._modelResources.push(p),r&&(d.transformsTypedArray=C),d.instancingTransformsBuffer=p}if(yme(e,p,n,u),!o)return;let A=He(i);A.mode=se.COLUMBUS_VIEW,Sme(e,A);let f=d.instancingTransformsBuffer2D;if(!l(f)){let C=XJe(h,e,A,h),T=xj(C);f=Cj(T,i),c._modelResources.push(f),d.instancingTransformsBuffer2D=f}yme(e,f,n,"Transform2D")}function JJe(e,t,n,i,o,r){let s=e.shaderBuilder,a=e.runtimeNode,c=It.getAttributeBySemantic(t,Fs.TRANSLATION),d=It.getAttributeBySemantic(t,Fs.SCALE);if(l(d)&&(s.addDefine("HAS_INSTANCE_SCALE"),yj(e,d.buffer,d.byteOffset,d.byteStride,n,"Scale")),!l(c))return;let u,h=c.typedArray;if(l(h)?u=OJe(c,c.count,e):l(a.instancingTranslationMin)||(a.instancingTranslationMin=c.min,a.instancingTranslationMax=c.max),s.addDefine("HAS_INSTANCE_TRANSLATION"),yj(e,c.buffer,c.byteOffset,c.byteStride,n,"Translation"),!o&&!r)return;let A=He(i);A.mode=se.COLUMBUS_VIEW,Sme(e,A);let f=a.instancingTranslationBuffer2D;if(!l(f)){let E=YJe(u,e,A,u),S=UJe(E);r&&(a.transformsTypedArray=S),f=Cj(S,i),e.model._modelResources.push(f),a.instancingTranslationBuffer2D=f}if(!o)return;yj(e,f,0,void 0,n,"Translation2D")}function yme(e,t,n,i){let r=H.getSizeInBytes(H.FLOAT),s=r*12,a=[{index:e.attributeIndex++,vertexBuffer:t,componentsPerAttribute:4,componentDatatype:H.FLOAT,normalize:!1,offsetInBytes:0,strideInBytes:s,instanceDivisor:1},{index:e.attributeIndex++,vertexBuffer:t,componentsPerAttribute:4,componentDatatype:H.FLOAT,normalize:!1,offsetInBytes:r*4,strideInBytes:s,instanceDivisor:1},{index:e.attributeIndex++,vertexBuffer:t,componentsPerAttribute:4,componentDatatype:H.FLOAT,normalize:!1,offsetInBytes:r*8,strideInBytes:s,instanceDivisor:1}],c=e.shaderBuilder;c.addAttribute("vec4",`a_instancing${i}Row0`),c.addAttribute("vec4",`a_instancing${i}Row1`),c.addAttribute("vec4",`a_instancing${i}Row2`),ri(n,a)}function yj(e,t,n,i,o,r){o.push({index:e.attributeIndex++,vertexBuffer:t,componentsPerAttribute:3,componentDatatype:H.FLOAT,normalize:!1,offsetInBytes:n,strideInBytes:i,instanceDivisor:1}),e.shaderBuilder.addAttribute("vec3",`a_instance${r}`)}function KJe(e,t,n,i){let o=n.attributes,r=e.shaderBuilder;for(let s=0;s<o.length;s++){let a=o[s];a.semantic===Fs.FEATURE_ID&&(a.setIndex>=e.featureIdVertexAttributeSetIndex&&(e.featureIdVertexAttributeSetIndex=a.setIndex+1),i.push({index:e.attributeIndex++,vertexBuffer:a.buffer,componentsPerAttribute:Ut.getNumberOfComponents(a.type),componentDatatype:a.componentDatatype,normalize:!1,offsetInBytes:a.byteOffset,strideInBytes:a.byteStride,instanceDivisor:1}),r.addAttribute("float",`a_instanceFeatureId_${a.setIndex}`))}}var r2=xme;var dNn=y(x(),1);var Tj={};Tj.name="ModelMatrixUpdateStage";Tj.update=function(e,t,n){let i=n.mode!==se.SCENE3D;if(!(i&&t._model._projectTo2D)&&e._transformDirty){let o=i?t._computedModelMatrix2D:t._computedModelMatrix;Ime(e,t,o,e.transformToRoot),e._transformDirty=!1}};function jJe(e,t,n){e.modelMatrix=F.multiplyTransformation(t,n,e.modelMatrix),e.cullFace=It.getCullFace(e.modelMatrix,e.primitiveType)}function Ime(e,t,n,i){let o;i=F.multiplyTransformation(i,e.transform,new F),e.updateComputedTransform();let r=e.runtimePrimitives.length;for(o=0;o<r;o++){let a=e.runtimePrimitives[o];jJe(a.drawCommand,n,i)}let s=e.children.length;for(o=0;o<s;o++){let a=t._runtimeNodes[e.children[o]];a._transformToRoot=F.clone(i,a._transformToRoot),Ime(a,t,n,i),a._transformDirty=!1}}var s2=Tj;var hNn=y(x(),1);var Zme={name:"NodeStatisticsPipelineStage",_countInstancingAttributes:Rme,_countGeneratedBuffers:Vme};Zme.process=function(e,t,n){let i=e.model.statistics,o=t.instances,r=e.runtimeNode;Rme(i,o),Vme(i,r)};function Rme(e,t){if(!l(t))return;let n=t.attributes,i=n.length;for(let o=0;o<i;o++){let r=n[o];l(r.buffer)&&e.addBuffer(r.buffer,!1)}}function Vme(e,t){l(t.instancingTransformsBuffer)&&e.addBuffer(t.instancingTransformsBuffer,!1),l(t.instancingTransformsBuffer2D)&&e.addBuffer(t.instancingTransformsBuffer2D,!1),l(t.instancingTranslationBuffer2D)&&e.addBuffer(t.instancingTranslationBuffer2D,!1)}var a2=Zme;function E_(e){e=e??Q.EMPTY_OBJECT;let t=e.node,n=e.transform,i=e.transformToRoot,o=e.sceneGraph,r=e.children;this._node=t,this._name=t.name,this._id=t.index,this._sceneGraph=o,this._children=r,this._originalTransform=F.clone(n,this._originalTransform),this._transform=F.clone(n,this._transform),this._transformToRoot=F.clone(i,this._transformToRoot),this._computedTransform=new F,this._transformDirty=!1,this._transformParameters=void 0,this._morphWeights=[],this._runtimeSkin=void 0,this._computedJointMatrices=[],this.show=!0,this.userAnimated=!1,this.pipelineStages=[],this.runtimePrimitives=[],this.updateStages=[],this.instancingTranslationMin=void 0,this.instancingTranslationMax=void 0,this.instancingTransformsBuffer=void 0,this.instancingTransformsBuffer2D=void 0,this.instancingTranslationBuffer2D=void 0,this.instancingReferencePoint2D=void 0,qJe(this)}Object.defineProperties(E_.prototype,{node:{get:function(){return this._node}},sceneGraph:{get:function(){return this._sceneGraph}},children:{get:function(){return this._children}},transform:{get:function(){return this._transform},set:function(e){this._transformDirty=!0,this._transform=F.clone(e,this._transform)}},transformToRoot:{get:function(){return this._transformToRoot}},computedTransform:{get:function(){return this._computedTransform}},originalTransform:{get:function(){return this._originalTransform}},translation:{get:function(){return l(this._transformParameters)?this._transformParameters.translation:void 0},set:function(e){let t=this._transformParameters,n=t.translation;m.equals(n,e)||(t.translation=m.clone(e,t.translation),Ej(this,t))}},rotation:{get:function(){return l(this._transformParameters)?this._transformParameters.rotation:void 0},set:function(e){let t=this._transformParameters,n=t.rotation;Me.equals(n,e)||(t.rotation=Me.clone(e,t.rotation),Ej(this,t))}},scale:{get:function(){return l(this._transformParameters)?this._transformParameters.scale:void 0},set:function(e){let t=this._transformParameters,n=t.scale;m.equals(n,e)||(t.scale=m.clone(e,t.scale),Ej(this,t))}},morphWeights:{get:function(){return this._morphWeights},set:function(e){let t=e.length;for(let n=0;n<t;n++)this._morphWeights[n]=e[n]}},runtimeSkin:{get:function(){return this._runtimeSkin}},computedJointMatrices:{get:function(){return this._computedJointMatrices}}});function qJe(e){let t=e.transform,n=e.transformToRoot,i=e._computedTransform;e._computedTransform=F.multiply(n,t,i);let o=e.node;l(o.matrix)||(e._transformParameters=new a0(o.translation,o.rotation,o.scale)),l(o.morphWeights)&&(e._morphWeights=o.morphWeights.slice());let r=o.articulationName;if(l(r)){let c=e.sceneGraph._runtimeArticulations[r];l(c)&&c.runtimeNodes.push(e)}}function Ej(e,t){e._transformDirty=!0,e._transform=F.fromTranslationRotationScale(t,e._transform)}E_.prototype.getChild=function(e){return this.sceneGraph._runtimeNodes[this.children[e]]};E_.prototype.configurePipeline=function(){let e=this.node,t=this.pipelineStages;t.length=0;let n=this.updateStages;n.length=0,l(e.instances)&&t.push(r2),t.push(a2),n.push(s2)};E_.prototype.updateComputedTransform=function(){this._computedTransform=F.multiply(this._transformToRoot,this._transform,this._computedTransform)};E_.prototype.updateJointMatrices=function(){let e=this._runtimeSkin;if(!l(e))return;e.updateJointMatrices();let t=this._computedJointMatrices,n=e.jointMatrices,i=n.length;for(let o=0;o<i;o++){l(t[o])||(t[o]=new F);let r=F.multiplyTransformation(this.transformToRoot,this.transform,t[o]),s=F.inverseTransformation(r,t[o]);t[o]=F.multiplyTransformation(s,n[o],t[o])}};var c2=E_;var izn=y(x(),1);var GNn=y(x(),1);var Gme={name:"AlphaPipelineStage"};Gme.process=function(e,t,n){let i=e.alphaOptions,o=e.model;i.pass=i.pass??o.opaquePass;let r=e.renderStateOptions;i.pass===Ge.TRANSLUCENT&&(r.cull.enabled=!1,r.depthMask=!1,r.blending=ln.ALPHA_BLEND);let s=e.shaderBuilder,a=e.uniformMap;l(i.alphaCutoff)&&(s.addDefine("ALPHA_MODE_MASK",void 0,pe.FRAGMENT),s.addUniform("float","u_alphaCutoff",pe.FRAGMENT),a.u_alphaCutoff=function(){return i.alphaCutoff})};var l2=Gme;var FNn=y(x(),1);var Lme={name:"BatchTexturePipelineStage"};Lme.process=function(e,t,n){let i=e.shaderBuilder,o={},r=e.model,s=r.featureTables[r.featureTableId],a=s.featuresLength;i.addUniform("int","model_featuresLength"),o.model_featuresLength=function(){return a};let c=s.batchTexture;i.addUniform("sampler2D","model_batchTexture"),o.model_batchTexture=function(){return c.batchTexture??c.defaultTexture},i.addUniform("vec4","model_textureStep"),o.model_textureStep=function(){return c.textureStep},c.textureDimensions.y>1&&(i.addDefine("MULTILINE_BATCH_TEXTURE"),i.addUniform("vec2","model_textureDimensions"),o.model_textureDimensions=function(){return c.textureDimensions}),e.uniformMap=Ft(o,e.uniformMap)};var d2=Lme;var MNn=y(x(),1);var Wme={name:"ClassificationPipelineStage"};Wme.process=function(e,t,n){e.shaderBuilder.addDefine("HAS_CLASSIFICATION",void 0,pe.BOTH);let o=e.runtimePrimitive;l(o.batchLengths)||$Je(t,o)};function $Je(e,t){let n=It.getAttributeBySemantic(e,ct.POSITION);if(!l(n))throw new me("Primitives must have a position attribute to be used for classification.");let i,o=e.indices,r=l(o);r&&(i=o.typedArray,o.typedArray=void 0);let s=r?o.count:n.count,a=It.getAttributeBySemantic(e,ct.FEATURE_ID,0);if(!l(a)){t.batchLengths=[s],t.batchOffsets=[0];return}let c=a.typedArray;a.typedArray=void 0;let d=[],u=[0],h=r?i[0]:0,p=c[h],A=0;for(let b=1;b<s;b++){let C=r?i[b]:b,T=c[C];if(T!==p){let E=b-A,S=b;d.push(E),u.push(S),A=S,p=T}}let f=s-A;d.push(f),t.batchLengths=d,t.batchOffsets=u}var u2=Wme;var $Nn=y(x(),1);var UNn=y(x(),1),m2=`void filterByPassType(inout vec3 positionMC, vec4 featureColor)
{
bool styleTranslucent = (featureColor.a != 1.0);
// Only render translucent features in the translucent pass (if the style or the original command has translucency).
if (czm_pass == czm_passTranslucent && !styleTranslucent && !model_commandTranslucent)
{
// If the model has a translucent silhouette, it needs to render during the silhouette color command,
// (i.e. the command where model_silhouettePass = true), even if the model isn't translucent.
#ifdef HAS_SILHOUETTE
positionMC *= float(model_silhouettePass);
#else
positionMC *= 0.0;
#endif
}
// If the current pass is not the translucent pass and the style is not translucent, don't render the feature.
else if (czm_pass != czm_passTranslucent && styleTranslucent)
{
positionMC *= 0.0;
}
}
void cpuStylingStage(inout vec3 positionMC, inout SelectedFeature feature)
{
float show = ceil(feature.color.a);
positionMC *= show;
#if defined(HAS_SELECTED_FEATURE_ID_ATTRIBUTE) && !defined(HAS_CLASSIFICATION)
filterByPassType(positionMC, feature.color);
#endif
}
`;var kNn=y(x(),1),h2=`void filterByPassType(vec4 featureColor)
{
bool styleTranslucent = (featureColor.a != 1.0);
// Only render translucent features in the translucent pass (if the style or the original command has translucency).
if (czm_pass == czm_passTranslucent && !styleTranslucent && !model_commandTranslucent)
{
// If the model has a translucent silhouette, it needs to render during the silhouette color command,
// (i.e. the command where model_silhouettePass = true), even if the model isn't translucent.
#ifdef HAS_SILHOUETTE
if(!model_silhouettePass) {
discard;
}
#else
discard;
#endif
}
// If the current pass is not the translucent pass and the style is not translucent, don't render the feature.
else if (czm_pass != czm_passTranslucent && styleTranslucent)
{
discard;
}
}
void cpuStylingStage(inout czm_modelMaterial material, SelectedFeature feature)
{
vec4 featureColor = feature.color;
if (featureColor.a == 0.0)
{
discard;
}
// If a feature ID vertex attribute is used, the pass type filter is applied in the vertex shader.
// So, we only apply in in the fragment shader if the feature ID texture is used.
#if defined(HAS_SELECTED_FEATURE_ID_TEXTURE) && !defined(HAS_CLASSIFICATION)
filterByPassType(featureColor);
#endif
featureColor = czm_gammaCorrect(featureColor);
// Classification models compute the diffuse differently.
#ifdef HAS_CLASSIFICATION
material.diffuse = featureColor.rgb * featureColor.a;
#else
float highlight = ceil(model_colorBlend);
material.diffuse *= mix(featureColor.rgb, vec3(1.0), highlight);
#endif
material.alpha *= featureColor.a;
}
`;var Fme={name:"CPUStylingPipelineStage"};Fme.process=function(e,t,n){let i=e.model,o=e.shaderBuilder;o.addVertexLines(m2),o.addFragmentLines(h2),o.addDefine("USE_CPU_STYLING",void 0,pe.BOTH),l(i.color)||(o.addUniform("float",F0.COLOR_BLEND_UNIFORM_NAME,pe.FRAGMENT),e.uniformMap[F0.COLOR_BLEND_UNIFORM_NAME]=function(){return jc.getColorBlend(i.colorBlendMode,i.colorBlendAmount)}),o.addUniform("bool","model_commandTranslucent",pe.BOTH),e.uniformMap.model_commandTranslucent=function(){return e.alphaOptions.pass===Ge.TRANSLUCENT}};var f2=Fme;var tPn=y(x(),1),Bme={MODIFY_MATERIAL:"MODIFY_MATERIAL",REPLACE_MATERIAL:"REPLACE_MATERIAL"};Bme.getDefineName=function(e){return`CUSTOM_SHADER_${e}`};var fg=Object.freeze(Bme);var eXn=y(x(),1);var iPn=y(x(),1),p2=`void customShaderStage(
inout czm_modelVertexOutput vsOutput,
inout ProcessedAttributes attributes,
FeatureIds featureIds,
Metadata metadata,
MetadataClass metadataClass,
MetadataStatistics metadataStatistics
) {
// VertexInput and initializeInputStruct() are dynamically generated in JS,
// see CustomShaderPipelineStage.js
VertexInput vsInput;
initializeInputStruct(vsInput, attributes);
vsInput.featureIds = featureIds;
vsInput.metadata = metadata;
vsInput.metadataClass = metadataClass;
vsInput.metadataStatistics = metadataStatistics;
vertexMain(vsInput, vsOutput);
attributes.positionMC = vsOutput.positionMC;
}
`;var rPn=y(x(),1),A2=`void customShaderStage(
inout czm_modelMaterial material,
ProcessedAttributes attributes,
FeatureIds featureIds,
Metadata metadata,
MetadataClass metadataClass,
MetadataStatistics metadataStatistics
) {
// FragmentInput and initializeInputStruct() are dynamically generated in JS,
// see CustomShaderPipelineStage.js
FragmentInput fsInput;
initializeInputStruct(fsInput, attributes);
fsInput.featureIds = featureIds;
fsInput.metadata = metadata;
fsInput.metadataClass = metadataClass;
fsInput.metadataStatistics = metadataStatistics;
fragmentMain(fsInput, material);
}
`;var TPn=y(x(),1);var aPn=y(x(),1),g2=`void featureIdStage(out FeatureIds featureIds, ProcessedAttributes attributes) {
initializeFeatureIds(featureIds, attributes);
initializeFeatureIdAliases(featureIds);
}
`;var lPn=y(x(),1),b2=`void featureIdStage(out FeatureIds featureIds, ProcessedAttributes attributes)
{
initializeFeatureIds(featureIds, attributes);
initializeFeatureIdAliases(featureIds);
setFeatureIdVaryings();
}
`;var ao={name:"FeatureIdPipelineStage",STRUCT_ID_FEATURE_IDS_VS:"FeatureIdsVS",STRUCT_ID_FEATURE_IDS_FS:"FeatureIdsFS",STRUCT_NAME_FEATURE_IDS:"FeatureIds",FUNCTION_ID_INITIALIZE_FEATURE_IDS_VS:"initializeFeatureIdsVS",FUNCTION_ID_INITIALIZE_FEATURE_IDS_FS:"initializeFeatureIdsFS",FUNCTION_ID_INITIALIZE_FEATURE_ID_ALIASES_VS:"initializeFeatureIdAliasesVS",FUNCTION_ID_INITIALIZE_FEATURE_ID_ALIASES_FS:"initializeFeatureIdAliasesFS",FUNCTION_SIGNATURE_INITIALIZE_FEATURE_IDS:"void initializeFeatureIds(out FeatureIds featureIds, ProcessedAttributes attributes)",FUNCTION_SIGNATURE_INITIALIZE_FEATURE_ID_ALIASES:"void initializeFeatureIdAliases(inout FeatureIds featureIds)",FUNCTION_ID_SET_FEATURE_ID_VARYINGS:"setFeatureIdVaryings",FUNCTION_SIGNATURE_SET_FEATURE_ID_VARYINGS:"void setFeatureIdVaryings()"};ao.process=function(e,t,n){let i=e.shaderBuilder;eKe(i);let o=e.runtimeNode.node.instances;l(o)&&tKe(e,o,n),nKe(e,t,n),i.addVertexLines(b2),i.addFragmentLines(g2)};function eKe(e){e.addStruct(ao.STRUCT_ID_FEATURE_IDS_VS,ao.STRUCT_NAME_FEATURE_IDS,pe.VERTEX),e.addStruct(ao.STRUCT_ID_FEATURE_IDS_FS,ao.STRUCT_NAME_FEATURE_IDS,pe.FRAGMENT),e.addFunction(ao.FUNCTION_ID_INITIALIZE_FEATURE_IDS_VS,ao.FUNCTION_SIGNATURE_INITIALIZE_FEATURE_IDS,pe.VERTEX),e.addFunction(ao.FUNCTION_ID_INITIALIZE_FEATURE_IDS_FS,ao.FUNCTION_SIGNATURE_INITIALIZE_FEATURE_IDS,pe.FRAGMENT),e.addFunction(ao.FUNCTION_ID_INITIALIZE_FEATURE_ID_ALIASES_VS,ao.FUNCTION_SIGNATURE_INITIALIZE_FEATURE_ID_ALIASES,pe.VERTEX),e.addFunction(ao.FUNCTION_ID_INITIALIZE_FEATURE_ID_ALIASES_FS,ao.FUNCTION_SIGNATURE_INITIALIZE_FEATURE_ID_ALIASES,pe.FRAGMENT),e.addFunction(ao.FUNCTION_ID_SET_FEATURE_ID_VARYINGS,ao.FUNCTION_SIGNATURE_SET_FEATURE_ID_VARYINGS,pe.VERTEX)}function tKe(e,t,n){let i=t.featureIds,o=t.attributes[0].count;for(let r=0;r<i.length;r++){let s=i[r],a=s.positionalLabel;s instanceof Tn.FeatureIdAttribute?iKe(e,s,a):wme(e,s,a,o,1,n);let c=s.label;l(c)&&Nme(e,a,c,pe.BOTH)}}function nKe(e,t,n){let i=t.featureIds,r=It.getAttributeBySemantic(t,ct.POSITION).count;for(let s=0;s<i.length;s++){let a=i[s],c=a.positionalLabel,d=pe.BOTH;a instanceof Tn.FeatureIdAttribute?oKe(e,a,c):a instanceof Tn.FeatureIdImplicitRange?wme(e,a,c,r,void 0,n):(rKe(e,a,c,s,n),d=pe.FRAGMENT);let u=a.label;l(u)&&Nme(e,c,u,d)}}function iKe(e,t,n){let i=e.shaderBuilder;i.addStructField(ao.STRUCT_ID_FEATURE_IDS_VS,"int",n),i.addStructField(ao.STRUCT_ID_FEATURE_IDS_FS,"int",n);let o=t.setIndex,r=n.replace(/_\d+$/,"_"),s=`a_${r}${o}`,a=`v_${r}${o}`,c=`featureIds.${n} = int(czm_round(${s}));`,d=`featureIds.${n} = int(czm_round(${a}));`;i.addFunctionLines(ao.FUNCTION_ID_INITIALIZE_FEATURE_IDS_VS,[c]),i.addFunctionLines(ao.FUNCTION_ID_INITIALIZE_FEATURE_IDS_FS,[d]),i.addVarying("float",a),i.addFunctionLines(ao.FUNCTION_ID_SET_FEATURE_ID_VARYINGS,[`${a} = ${s};`])}function oKe(e,t,n){let i=e.shaderBuilder;i.addStructField(ao.STRUCT_ID_FEATURE_IDS_VS,"int",n),i.addStructField(ao.STRUCT_ID_FEATURE_IDS_FS,"int",n);let o=t.setIndex,r=n.replace(/_\d+$/,"_"),s=[`featureIds.${n} = int(czm_round(attributes.${r}${o}));`];i.addFunctionLines(ao.FUNCTION_ID_INITIALIZE_FEATURE_IDS_VS,s),i.addFunctionLines(ao.FUNCTION_ID_INITIALIZE_FEATURE_IDS_FS,s)}function wme(e,t,n,i,o,r){sKe(e,t,i,o,r);let s=e.shaderBuilder,a=`a_implicit_${n}`;s.addAttribute("float",a);let c=`v_implicit_${n}`;s.addVarying("float",c),s.addStructField(ao.STRUCT_ID_FEATURE_IDS_VS,"int",n),s.addStructField(ao.STRUCT_ID_FEATURE_IDS_FS,"int",n),s.addFunctionLines(ao.FUNCTION_ID_SET_FEATURE_ID_VARYINGS,[`${c} = ${a};`]),s.addFunctionLines(ao.FUNCTION_ID_INITIALIZE_FEATURE_IDS_VS,[`featureIds.${n} = int(czm_round(${a}));`]),s.addFunctionLines(ao.FUNCTION_ID_INITIALIZE_FEATURE_IDS_FS,[`featureIds.${n} = int(czm_round(${c}));`])}function rKe(e,t,n,i,o){let r=`u_featureIdTexture_${i}`,s=e.uniformMap,a=t.textureReader;s[r]=function(){return a.texture??o.context.defaultTexture};let c=a.channels,d=e.shaderBuilder;d.addStructField(ao.STRUCT_ID_FEATURE_IDS_FS,"int",n),d.addUniform("sampler2D",r,pe.FRAGMENT);let h=`v_texCoord_${a.texCoord}`,p=h,A=a.transform;if(l(A)&&!$.equals(A,$.IDENTITY)){let C=`${r}Transform`;d.addUniform("mat3",C,pe.FRAGMENT),s[C]=function(){return A},p=`vec2(${C} * vec3(${h}, 1.0))`}let f=`texture(${r}, ${p}).${c}`,b=`featureIds.${n} = czm_unpackUint(${f});`;d.addFunctionLines(ao.FUNCTION_ID_INITIALIZE_FEATURE_IDS_FS,[b])}function Nme(e,t,n,i){let o=e.shaderBuilder,r=pe.includesVertexShader(i);r&&o.addStructField(ao.STRUCT_ID_FEATURE_IDS_VS,"int",n),o.addStructField(ao.STRUCT_ID_FEATURE_IDS_FS,"int",n);let s=[`featureIds.${n} = featureIds.${t};`];r&&o.addFunctionLines(ao.FUNCTION_ID_INITIALIZE_FEATURE_ID_ALIASES_VS,s),o.addFunctionLines(ao.FUNCTION_ID_INITIALIZE_FEATURE_ID_ALIASES_FS,s)}function sKe(e,t,n,i,o){let r=e.model,s,a;if(l(t.repeat)){let d=aKe(t,n);s=it.createVertexBuffer({context:o.context,typedArray:d,usage:Be.STATIC_DRAW}),s.vertexArrayDestroyable=!1,r._pipelineResources.push(s),r.statistics.addBuffer(s,!1)}else a=[t.offset];let c={index:e.attributeIndex++,instanceDivisor:i,value:a,vertexBuffer:s,normalize:!1,componentsPerAttribute:1,componentDatatype:H.FLOAT,strideInBytes:H.getSizeInBytes(H.FLOAT),offsetInBytes:0};e.attributes.push(c)}function aKe(e,t){let n=e.offset,i=e.repeat,o=new Float32Array(t);for(let r=0;r<t;r++)o[r]=n+Math.floor(r/i);return o}var B0=ao;var PPn=y(x(),1);var SPn=y(x(),1),y2=`void metadataStage(
FeatureIds featureIds,
out Metadata metadata,
out MetadataClass metadataClass,
out MetadataStatistics metadataStatistics,
ProcessedAttributes attributes
)
{
initializeMetadata(featureIds, metadata, metadataClass, metadataStatistics, attributes);
}
`;var IPn=y(x(),1),x2=`void metadataStage(
FeatureIds featureIds,
out Metadata metadata,
out MetadataClass metadataClass,
out MetadataStatistics metadataStatistics,
ProcessedAttributes attributes
)
{
initializeMetadata(featureIds, metadata, metadataClass, metadataStatistics, attributes);
setMetadataVaryings();
}
`;var Zi={name:"MetadataPipelineStage",STRUCT_ID_METADATA_VS:"MetadataVS",STRUCT_ID_METADATA_FS:"MetadataFS",STRUCT_NAME_METADATA:"Metadata",STRUCT_ID_METADATA_CLASS_VS:"MetadataClassVS",STRUCT_ID_METADATA_CLASS_FS:"MetadataClassFS",STRUCT_NAME_METADATA_CLASS:"MetadataClass",STRUCT_ID_METADATA_STATISTICS_VS:"MetadataStatisticsVS",STRUCT_ID_METADATA_STATISTICS_FS:"MetadataStatisticsFS",STRUCT_NAME_METADATA_STATISTICS:"MetadataStatistics",FUNCTION_ID_INITIALIZE_METADATA_VS:"initializeMetadataVS",FUNCTION_ID_INITIALIZE_METADATA_FS:"initializeMetadataFS",FUNCTION_SIGNATURE_INITIALIZE_METADATA:"void initializeMetadata(FeatureIds featureIds, out Metadata metadata, out MetadataClass metadataClass, out MetadataStatistics metadataStatistics, ProcessedAttributes attributes)",FUNCTION_ID_SET_METADATA_VARYINGS:"setMetadataVaryings",FUNCTION_SIGNATURE_SET_METADATA_VARYINGS:"void setMetadataVaryings()",METADATA_CLASS_FIELDS:[{specName:"noData",shaderName:"noData"},{specName:"default",shaderName:"defaultValue"},{specName:"min",shaderName:"minValue"},{specName:"max",shaderName:"maxValue"}],METADATA_STATISTICS_FIELDS:[{specName:"min",shaderName:"minValue"},{specName:"max",shaderName:"maxValue"},{specName:"mean",shaderName:"mean",type:"float"},{specName:"median",shaderName:"median"},{specName:"standardDeviation",shaderName:"standardDeviation",type:"float"},{specName:"variance",shaderName:"variance",type:"float"},{specName:"sum",shaderName:"sum"}]};Zi.process=function(e,t,n){let{shaderBuilder:i,model:o}=e,{structuralMetadata:r={},content:s}=o,a=s?.tileset.metadataExtension?.statistics,c=n.context.webgl2,d=IKe(o,t),u=cKe(r.propertyAttributes,t,a),h=dKe(r.propertyTextures,a),p=hKe(r.propertyTables,t,e,a,d),A=u.concat(h).concat(p);AKe(i,A),yKe(i),i.addVertexLines(x2),i.addFragmentLines(y2);for(let f=0;f<u.length;f++){let b=u[f];xKe(e,b)}for(let f=0;f<h.length;f++){let b=h[f];TKe(e,b,c)}for(let f=0;f<p.length;f++){let b=p[f];SKe(e,b,c)}};function cKe(e,t,n){return l(e)?e.flatMap(i=>lKe(i,t,n)):[]}function lKe(e,t,n){let{getAttributeByName:i,getAttributeInfo:o,sanitizeGlslIdentifier:r}=It,s=e.class.id,a=n?.classes[s],c=Object.entries(e.properties),d=new Array(c.length);for(let u=0;u<c.length;u++){let[h,p]=c[u],A=i(t,p.attribute),{glslType:f,variableName:b}=o(A);d[u]={metadataVariable:r(h),property:p,classProperty:p.classProperty,type:p.classProperty.type,glslType:f,variableName:b,propertyStatistics:a?.properties[h],shaderDestination:pe.BOTH}}return d}function dKe(e,t){return l(e)?e.flatMap(n=>uKe(n,t)):[]}function uKe(e,t){let{sanitizeGlslIdentifier:n}=It,i=e.class.id,o=t?.classes[i],r=Object.entries(e.properties).filter(([a,c])=>{let d=c.textureReader.channels.length;return c.classProperty.isGpuCompatible(d)}),s=new Array(r.length);for(let a=0;a<r.length;a++){let[c,d]=r[a];s[a]={metadataVariable:n(c),property:d,classProperty:d.classProperty,type:d.classProperty.type,glslType:d.classProperty.getGlslType(),propertyStatistics:o?.properties[c],shaderDestination:pe.FRAGMENT}}return s}var mKe=4;function hKe(e,t,n,i,o){if(!l(e))return[];let r=pKe(n,t);return e.filter(s=>l(s.class)&&r.has(String(s.id))).flatMap(s=>fKe(s,r,i,o))}function fKe(e,t,n,i){let{sanitizeGlslIdentifier:o}=It,r=e.class,s=n?.classes[r.id],a=t.get(String(e.id))??{},c=a.shaderDestination??pe.BOTH,d=e.properties,u=r.properties,h=[],p=0;for(let[A,f]of Object.entries(u)){if(!f.isGpuCompatible(mKe))continue;let b=d[A],C=pe.intersection(VKe(A,i),c);if(C===pe.NONE){p++;continue}h.push({metadataVariable:o(A),property:b,classProperty:f,type:f.type,glslType:f.getGlslType(),propertyStatistics:s?.properties[A],shaderDestination:C,propertyTable:e,featureIdVariableName:a.variableName,propertyInfoIndex:p}),p++}return h}function pKe(e,t){let n=new Map;function i(a,c){let d=a?.propertyTableId;if(!l(d))return;let u=String(d),h={variableName:a.positionalLabel,shaderDestination:c},p=n.get(u);l(p)&&console.warn(`Multiple feature ID sets reference the same property table ${d} in primitive. Only one will be used.`),n.set(u,h)}let o=t?.featureIds??[];for(let a=0;a<o.length;a++){let c=o[a],d=l(c?.textureReader);i(c,d?pe.FRAGMENT:pe.BOTH)}let s=e.runtimeNode?.node?.instances?.featureIds??[];for(let a=0;a<s.length;a++){let c=s[a];i(c,pe.BOTH)}return n}function AKe(e,t){let n=new Set,i=new Set;for(let a=0;a<t.length;a++){let{type:c,glslType:d,propertyStatistics:u}=t[a];n.add(d),l(u)&&c!==St.ENUM&&i.add(d)}let o=Zi.METADATA_CLASS_FIELDS;for(let a of n){let c=`${a}MetadataClass`;s(c,a,o)}let r=Zi.METADATA_STATISTICS_FIELDS;for(let a of i){let c=`${a}MetadataStatistics`;s(c,a,r)}function s(a,c,d){e.addStruct(a,a,pe.BOTH);for(let u=0;u<d.length;u++){let{shaderName:h}=d[u],p=d[u].type==="float"?bKe(c):c;e.addStructField(a,p,h)}}}var gKe={int:"float",ivec2:"vec2",ivec3:"vec3",ivec4:"vec4"};function bKe(e){let t=gKe[e];return l(t)?t:e}function yKe(e){e.addStruct(Zi.STRUCT_ID_METADATA_VS,Zi.STRUCT_NAME_METADATA,pe.VERTEX),e.addStruct(Zi.STRUCT_ID_METADATA_FS,Zi.STRUCT_NAME_METADATA,pe.FRAGMENT),e.addStruct(Zi.STRUCT_ID_METADATA_CLASS_VS,Zi.STRUCT_NAME_METADATA_CLASS,pe.VERTEX),e.addStruct(Zi.STRUCT_ID_METADATA_CLASS_FS,Zi.STRUCT_NAME_METADATA_CLASS,pe.FRAGMENT),e.addStruct(Zi.STRUCT_ID_METADATA_STATISTICS_VS,Zi.STRUCT_NAME_METADATA_STATISTICS,pe.VERTEX),e.addStruct(Zi.STRUCT_ID_METADATA_STATISTICS_FS,Zi.STRUCT_NAME_METADATA_STATISTICS,pe.FRAGMENT),e.addFunction(Zi.FUNCTION_ID_INITIALIZE_METADATA_VS,Zi.FUNCTION_SIGNATURE_INITIALIZE_METADATA,pe.VERTEX),e.addFunction(Zi.FUNCTION_ID_INITIALIZE_METADATA_FS,Zi.FUNCTION_SIGNATURE_INITIALIZE_METADATA,pe.FRAGMENT),e.addFunction(Zi.FUNCTION_ID_SET_METADATA_VARYINGS,Zi.FUNCTION_SIGNATURE_SET_METADATA_VARYINGS,pe.VERTEX)}function xKe(e,t){CKe(e,t),Sj(e.shaderBuilder,t),_j(e.shaderBuilder,t)}function CKe(e,t){let{shaderBuilder:n}=e,{metadataVariable:i,property:o,glslType:r}=t,s=Ij({valueExpression:`attributes.${t.variableName}`,renderResources:e,glslType:r,metadataVariable:i,shaderDestination:pe.BOTH,property:o});n.addStructField(Zi.STRUCT_ID_METADATA_VS,r,i),n.addStructField(Zi.STRUCT_ID_METADATA_FS,r,i);let a=`metadata.${i} = ${s};`;n.addFunctionLines(Zi.FUNCTION_ID_INITIALIZE_METADATA_VS,[a]),n.addFunctionLines(Zi.FUNCTION_ID_INITIALIZE_METADATA_FS,[a])}function TKe(e,t,n){EKe(e,t,n),Sj(e.shaderBuilder,t),_j(e.shaderBuilder,t)}function EKe(e,t,n){let{shaderBuilder:i,uniformMap:o}=e,{metadataVariable:r,glslType:s,property:a}=t,{texCoord:c,channels:d,index:u,texture:h,transform:p}=a.textureReader,A=`u_propertyTexture_${u}`,f=[];o.hasOwnProperty(A)||(i.addUniform("sampler2D",A,pe.FRAGMENT),o[A]=()=>h),i.addStructField(Zi.STRUCT_ID_METADATA_FS,s,r);let b=`attributes.texCoord_${c}`,C=b;if(l(p)&&!$.equals(p,$.IDENTITY)){let V=`${A}Transform`;i.addUniform("mat3",V,pe.FRAGMENT),o[V]=function(){return p},C=`vec2(${V} * vec3(${b}, 1.0))`}let T=`texture(${A}, ${C}).${d}`,E=a.classProperty,S;n?S=E.unpackTextureInShader(T,d,r,f):S=E.unpackTextureInShaderWebGL1(T);let I=Ij({valueExpression:S,renderResources:e,glslType:s,metadataVariable:r,shaderDestination:pe.FRAGMENT,property:a}),R=`metadata.${r} = ${I};`;f.push(R),i.addFunctionLines(Zi.FUNCTION_ID_INITIALIZE_METADATA_FS,f)}function Sj(e,t){let n=t.classProperty,{metadataVariable:i,glslType:o,shaderDestination:r}=t,s=Pme(Zi.METADATA_CLASS_FIELDS,n,`metadataClass.${i}`,o),a=`${o}MetadataClass`;e.addStructField(Zi.STRUCT_ID_METADATA_CLASS_FS,a,i),e.addFunctionLines(Zi.FUNCTION_ID_INITIALIZE_METADATA_FS,s),pe.includesVertexShader(r)&&(e.addStructField(Zi.STRUCT_ID_METADATA_CLASS_VS,a,i),e.addFunctionLines(Zi.FUNCTION_ID_INITIALIZE_METADATA_VS,s))}function _j(e,t){let{propertyStatistics:n}=t;if(!l(n))return;let{metadataVariable:i,type:o,glslType:r}=t;if(o===St.ENUM)return;let s=Zi.METADATA_STATISTICS_FIELDS,a=`metadataStatistics.${i}`,c=Pme(s,n,a,r),d=`${r}MetadataStatistics`;e.addStructField(Zi.STRUCT_ID_METADATA_STATISTICS_FS,d,i),e.addFunctionLines(Zi.FUNCTION_ID_INITIALIZE_METADATA_FS,c),pe.includesVertexShader(t.shaderDestination)&&(e.addStructField(Zi.STRUCT_ID_METADATA_STATISTICS_VS,d,i),e.addFunctionLines(Zi.FUNCTION_ID_INITIALIZE_METADATA_VS,c))}function SKe(e,t,n){_Ke(e,t,n),Sj(e.shaderBuilder,t),_j(e.shaderBuilder,t)}function _Ke(e,t,n){let{shaderBuilder:i,uniformMap:o}=e,{metadataVariable:r,glslType:s,property:a,featureIdVariableName:c,propertyTable:d,propertyInfoIndex:u}=t;if(!n){_t("PropertyTableCustomShader","Property table support for custom shaders requires WebGL2.");return}if(!l(c)||!l(d.texture))return;let h=`u_propertyTableTexture_${d.id}`,p=[];o.hasOwnProperty(h)||(i.addUniform("sampler2D",h,pe.BOTH),o[h]=()=>d.texture);let A=t.shaderDestination;pe.includesVertexShader(A)&&i.addStructField(Zi.STRUCT_ID_METADATA_VS,s,r),pe.includesFragmentShader(A)&&i.addStructField(Zi.STRUCT_ID_METADATA_FS,s,r);let b=`ivec2(${`featureIds.${c}`}, ${u})`,C=`texelFetch(${h}, ${b}, 0)`,T=t.classProperty,E=T.unpackTextureInShader(C,"rgba",r,p),S=Ij({valueExpression:E,renderResources:e,glslType:s,metadataVariable:r,shaderDestination:A,property:a??T}),I=`metadata.${r} = ${S};`;p.push(I),pe.includesVertexShader(A)&&i.addFunctionLines(Zi.FUNCTION_ID_INITIALIZE_METADATA_VS,p),pe.includesFragmentShader(A)&&i.addFunctionLines(Zi.FUNCTION_ID_INITIALIZE_METADATA_FS,p)}function Pme(e,t,n,i){function o(r){let s=t[r.specName];if(l(s))return`${n}.${r.shaderName} = ${i}(${s});`}return l(t)?e.map(o).filter(l):[]}function Ij(e){let{valueExpression:t,property:n}=e;if(!n.hasValueTransform)return t;let i=e.metadataVariable,o=`u_${i}_offset`,r=`u_${i}_scale`,{shaderBuilder:s,uniformMap:a}=e.renderResources,{glslType:c,shaderDestination:d}=e;s.addUniform(c,o,d),s.addUniform(c,r,d);let{offset:u,scale:h}=n;return a[o]=()=>u,a[r]=()=>h,`czm_valueTransform(${o}, ${r}, ${t})`}function IKe(e,t){let n=new Set,i=new Set;return ZKe(e,n,i),RKe(e,t,n,i),{usedInVertex:n,usedInFragment:i}}function ZKe(e,t,n){let i=e.customShader;if(!l(i))return;let o=i.usedVariablesFragment?.metadataSet??{};for(let s in o)o.hasOwnProperty(s)&&n.add(s);let r=i.usedVariablesVertex?.metadataSet??{};for(let s in r)r.hasOwnProperty(s)&&t.add(s)}function RKe(e,t,n,i){let o=e.style;if(!(l(o)&&t.primitiveType===We.POINTS))return;let s=o.color?.getVariables?.()??[];for(let d of s)n.add(d),i.add(d);let a=o.show?.getVariables?.()??[];for(let d of a)n.add(d),i.add(d);let c=o.pointSize?.getVariables?.()??[];for(let d of c)n.add(d)}function VKe(e,t){let n=t.usedInFragment.has(e)?pe.FRAGMENT:pe.NONE,i=t.usedInVertex.has(e)?pe.VERTEX:pe.NONE;return pe.union(n,i)}var Im=Zi;var YPn=y(x(),1),GKe={INHERIT:0,OPAQUE:1,TRANSLUCENT:2},w0=Object.freeze(GKe);var Bs={name:"CustomShaderPipelineStage",STRUCT_ID_ATTRIBUTES_VS:"AttributesVS",STRUCT_ID_ATTRIBUTES_FS:"AttributesFS",STRUCT_NAME_ATTRIBUTES:"Attributes",STRUCT_ID_VERTEX_INPUT:"VertexInput",STRUCT_NAME_VERTEX_INPUT:"VertexInput",STRUCT_ID_FRAGMENT_INPUT:"FragmentInput",STRUCT_NAME_FRAGMENT_INPUT:"FragmentInput",FUNCTION_ID_INITIALIZE_INPUT_STRUCT_VS:"initializeInputStructVS",FUNCTION_SIGNATURE_INITIALIZE_INPUT_STRUCT_VS:"void initializeInputStruct(out VertexInput vsInput, ProcessedAttributes attributes)",FUNCTION_ID_INITIALIZE_INPUT_STRUCT_FS:"initializeInputStructFS",FUNCTION_SIGNATURE_INITIALIZE_INPUT_STRUCT_FS:"void initializeInputStruct(out FragmentInput fsInput, ProcessedAttributes attributes)",_oneTimeWarning:_t};Bs.process=function(e,t,n){let i=e.model.customShader;if(i&&Bs.process_original(e,t,n,i),l(e.model._marsOptions)&&l(e.model._marsOptions.customShaders)){let o=gA.getCache(e.model._marsOptions.customShaders);for(let r in o)Object.prototype.hasOwnProperty.call(o,r)&&Bs.process_original(e,t,n,o[r])}};Bs.process_original=function(e,t,n,i){let{shaderBuilder:o,alphaOptions:r}=e,{lightingModel:s,translucencyMode:a}=i;l(s)&&(e.lightingOptions.lightingModel=s),a===w0.TRANSLUCENT?r.pass=Ge.TRANSLUCENT:a===w0.OPAQUE&&(r.pass=void 0);let c=XKe(i,t,e);if(!c.customShaderEnabled)return;if(UKe(o,i,c),c.shouldComputePositionWC&&o.addDefine("COMPUTE_POSITION_WC_CUSTOM_SHADER",void 0,pe.BOTH),l(i.vertexShaderText)&&o.addDefine("HAS_CUSTOM_VERTEX_SHADER",void 0,pe.VERTEX),l(i.fragmentShaderText)){o.addDefine("HAS_CUSTOM_FRAGMENT_SHADER",void 0,pe.FRAGMENT);let h=fg.getDefineName(i.mode);o.addDefine(h,void 0,pe.FRAGMENT)}let d=i.uniforms;for(let h in d)if(d.hasOwnProperty(h)){let p=d[h];o.addUniform(p.type,h)}let u=i.varyings;for(let h in u)if(u.hasOwnProperty(h)){let p=u[h];o.addVarying(p,h)}e.uniformMap=Ft(e.uniformMap,i.uniformMap)};function LKe(e){let t={};for(let n=0;n<e.length;n++){let i=It.getAttributeInfo(e[n]);t[i.variableName]=i}return t}var WKe={position:"vec3",normal:"vec3",tangent:"vec3",bitangent:"vec3",texCoord:"vec2",color:"vec4",joints:"ivec4",weights:"vec4"},FKe={position:"vec3(0.0)",normal:"vec3(0.0, 0.0, 1.0)",tangent:"vec3(1.0, 0.0, 0.0)",bitangent:"vec3(0.0, 1.0, 0.0)",texCoord:"vec2(0.0)",color:"vec4(1.0)",joints:"ivec4(0)",weights:"vec4(0.0)"};function Xme(e){let t=e.replace(/_[0-9]+$/,"");t=t.replace(/(MC|EC)$/,"");let n=WKe[t],i=FKe[t];if(l(n))return{attributeField:[n,e],value:i}}function BKe(e,t,n){if(!l(e.vertexShaderText))return{enabled:!1};let i=e.usedVariablesVertex;if(!vme(i.metadataSet,n))return{enabled:!1};let o=i.attributeSet,r=Yme(t,o,!1),s=Mme(t,o,!1),a,c=[],d=[];for(let u in r){if(!r.hasOwnProperty(u))continue;let p=[r[u].glslType,u];c.push(p),a=`vsInput.attributes.${u} = attributes.${u};`,d.push(a)}for(let u=0;u<s.length;u++){let h=s[u],p=Xme(h);if(!l(p))return Bs._oneTimeWarning("CustomShaderPipelineStage.incompatiblePrimitiveVS",`Primitive is missing attribute ${h}, disabling custom vertex shader`),{enabled:!1};c.push(p.attributeField),a=`vsInput.attributes.${h} = ${p.value};`,d.push(a)}return{enabled:!0,attributeFields:c,initializationLines:d}}function wKe(e){let t=[],n=[],i=e.usedVariablesFragment.attributeSet;return i.hasOwnProperty("positionWC")&&(t.push(["vec3","positionWC"]),n.push("fsInput.attributes.positionWC = attributes.positionWC;")),i.hasOwnProperty("positionEC")&&(t.push(["vec3","positionEC"]),n.push("fsInput.attributes.positionEC = attributes.positionEC;")),{attributeFields:t,initializationLines:n}}function NKe(e,t,n){if(!l(e.fragmentShaderText))return{enabled:!1};let i=e.usedVariablesFragment;if(!vme(i.metadataSet,n))return{enabled:!1};let o=i.attributeSet,r=Yme(t,o,!0),s=Mme(t,o,!0),a,c=[],d=[];for(let h in r){if(!r.hasOwnProperty(h))continue;let A=[r[h].glslType,h];c.push(A),a=`fsInput.attributes.${h} = attributes.${h};`,d.push(a)}for(let h=0;h<s.length;h++){let p=s[h],A=Xme(p);if(!l(A))return Bs._oneTimeWarning("CustomShaderPipelineStage.incompatiblePrimitiveFS",`Primitive is missing attribute ${p}, disabling custom fragment shader.`),{enabled:!1};c.push(A.attributeField),a=`fsInput.attributes.${p} = ${A.value};`,d.push(a)}let u=wKe(e);return{enabled:!0,attributeFields:c.concat(u.attributeFields),initializationLines:u.initializationLines.concat(d)}}var PKe={positionWC:!0,positionEC:!0};function Yme(e,t,n){let i={};for(let o in e){if(!e.hasOwnProperty(o))continue;let r=e[o],s=o;n&&o==="normalMC"?s="normalEC":n&&o==="tangentMC"&&(s="tangentEC",r.glslType="vec3"),t.hasOwnProperty(s)&&(i[s]=r)}return i}function Mme(e,t,n){let i=[];for(let o in t){if(!t.hasOwnProperty(o)||PKe.hasOwnProperty(o))continue;let r=o;n&&o==="normalEC"?r="normalMC":n&&o==="tangentEC"&&(r="tangentMC"),e.hasOwnProperty(r)||i.push(o)}return i}function XKe(e,t,n){let i=LKe(t.attributes),o=DKe(t,n.model.structuralMetadata),r=BKe(e,i,o),s=NKe(e,i,o),c=e.usedVariablesFragment.attributeSet.hasOwnProperty("positionWC")&&s.enabled;return{vertexLines:r,fragmentLines:s,customShaderEnabled:r.enabled||s.enabled,shouldComputePositionWC:c}}function YKe(e,t){let n=Bs.STRUCT_ID_ATTRIBUTES_VS;e.addStruct(n,Bs.STRUCT_NAME_ATTRIBUTES,pe.VERTEX);let{attributeFields:i,initializationLines:o}=t;for(let s=0;s<i.length;s++){let[a,c]=i[s];e.addStructField(n,a,c)}n=Bs.STRUCT_ID_VERTEX_INPUT,e.addStruct(n,Bs.STRUCT_NAME_VERTEX_INPUT,pe.VERTEX),e.addStructField(n,Bs.STRUCT_NAME_ATTRIBUTES,"attributes"),e.addStructField(n,B0.STRUCT_NAME_FEATURE_IDS,"featureIds"),e.addStructField(n,Im.STRUCT_NAME_METADATA,"metadata"),e.addStructField(n,Im.STRUCT_NAME_METADATA_CLASS,"metadataClass"),e.addStructField(n,Im.STRUCT_NAME_METADATA_STATISTICS,"metadataStatistics");let r=Bs.FUNCTION_ID_INITIALIZE_INPUT_STRUCT_VS;e.addFunction(r,Bs.FUNCTION_SIGNATURE_INITIALIZE_INPUT_STRUCT_VS,pe.VERTEX),e.addFunctionLines(r,o)}function MKe(e,t){let n=Bs.STRUCT_ID_ATTRIBUTES_FS;e.addStruct(n,Bs.STRUCT_NAME_ATTRIBUTES,pe.FRAGMENT);let{attributeFields:i,initializationLines:o}=t;for(let s=0;s<i.length;s++){let[a,c]=i[s];e.addStructField(n,a,c)}n=Bs.STRUCT_ID_FRAGMENT_INPUT,e.addStruct(n,Bs.STRUCT_NAME_FRAGMENT_INPUT,pe.FRAGMENT),e.addStructField(n,Bs.STRUCT_NAME_ATTRIBUTES,"attributes"),e.addStructField(n,B0.STRUCT_NAME_FEATURE_IDS,"featureIds"),e.addStructField(n,Im.STRUCT_NAME_METADATA,"metadata"),e.addStructField(n,Im.STRUCT_NAME_METADATA_CLASS,"metadataClass"),e.addStructField(n,Im.STRUCT_NAME_METADATA_STATISTICS,"metadataStatistics");let r=Bs.FUNCTION_ID_INITIALIZE_INPUT_STRUCT_FS;e.addFunction(r,Bs.FUNCTION_SIGNATURE_INITIALIZE_INPUT_STRUCT_FS,pe.FRAGMENT),e.addFunctionLines(r,o)}var vKe=[];function UKe(e,t,n){let{vertexLines:i,fragmentLines:o}=n,r=vKe;i.enabled&&(YKe(e,i),r.length=0,r.push("#line 0",t.vertexShaderText,p2),e.addVertexLines(r)),o.enabled&&(MKe(e,o),r.length=0,r.push("#line 0",t.fragmentShaderText,A2),e.addFragmentLines(r))}function DKe(e,t){if(!l(t))return new Set;let n=e.propertyTextureIds,i=e.propertyAttributeIds,o=l(e.featureIds)?e.featureIds.map(a=>a.propertyTableId):[],r=new Set;function s(a,c){for(let d of a){let h=c[d].class.properties;Object.keys(h).forEach(p=>r.add(p))}}return s(n,t.propertyTextures),s(i,t.propertyAttributes),s(o,t.propertyTables),r}function vme(e,t){for(let n in e)if(e.hasOwnProperty(n)&&!t.has(n))return Bs._oneTimeWarning("CustomShaderPipelineStage.checkMetadataCompatibility",`A custom shader uses metadata property "${n}" which is not present for all primitives in the tileset. Disabling the custom shader for these primitives.`),!1;return!0}var C2=Bs;var aXn=y(x(),1);var T2={name:"DequantizationPipelineStage",FUNCTION_ID_DEQUANTIZATION_STAGE_VS:"dequantizationStage",FUNCTION_SIGNATURE_DEQUANTIZATION_STAGE_VS:"void dequantizationStage(inout ProcessedAttributes attributes)"};T2.process=function(e,t,n){let i=e.shaderBuilder,o=e.model,r=l(o.classificationType);i.addDefine("USE_DEQUANTIZATION",void 0,pe.VERTEX),i.addFunction(T2.FUNCTION_ID_DEQUANTIZATION_STAGE_VS,T2.FUNCTION_SIGNATURE_DEQUANTIZATION_STAGE_VS,pe.VERTEX);let s=t.attributes;for(let a=0;a<s.length;a++){let c=s[a],d=c.quantization;if(!l(d))continue;let u=c.semantic===ct.POSITION,h=c.semantic===ct.TEXCOORD;if(r&&!u&&!h)continue;let p=It.getAttributeInfo(c);QKe(i,p),kKe(e,p)}};function kKe(e,t){let n=e.shaderBuilder,i=e.uniformMap,o=t.variableName,r=t.attribute.quantization;if(r.octEncoded){let s=`model_normalizationRange_${o}`;n.addUniform("float",s,pe.VERTEX),i[s]=function(){return r.normalizationRange}}else{let s=`model_quantizedVolumeOffset_${o}`,a=`model_quantizedVolumeStepSize_${o}`,c=t.glslType;n.addUniform(c,s,pe.VERTEX),n.addUniform(c,a,pe.VERTEX);let d=r.quantizedVolumeOffset,u=r.quantizedVolumeStepSize;/^color_\d+$/.test(o)&&(d=Ume(d,0),u=Ume(u,1)),i[s]=function(){return d},i[a]=function(){return u}}}function Ume(e,t){return e instanceof re?e:new re(e.x,e.y,e.z,t)}function QKe(e,t){let n=t.variableName,i=t.attribute.quantization,o;i.octEncoded?o=OKe(n,i):o=zKe(n),e.addFunctionLines(T2.FUNCTION_ID_DEQUANTIZATION_STAGE_VS,[o])}function OKe(e,t){let n=`attributes.${e}`,i=`a_quantized_${e}`,o=`model_normalizationRange_${e}`,r=t.octEncodedZXY?".zxy":".xyz";return`${n} = czm_octDecode(${i}, ${o})${r};`}function zKe(e){let t=`attributes.${e}`,n=`a_quantized_${e}`,i=`model_quantizedVolumeOffset_${e}`,o=`model_quantizedVolumeStepSize_${e}`;return`${t} = ${i} + ${n} * ${o};`}var E2=T2;var mXn=y(x(),1);var lXn=y(x(),1),S2=`void edgeDetectionStage(inout vec4 color, inout FeatureIds featureIds) {
if (u_isEdgePass) {
return;
}
vec2 screenCoord = gl_FragCoord.xy / czm_viewport.zw;
vec4 edgeColor = texture(czm_edgeColorTexture, screenCoord);
vec4 edgeId = texture(czm_edgeIdTexture, screenCoord);
// Packed window-space depth from edge pass (0..1)
float edgeDepthWin = czm_unpackDepth(texture(czm_edgeDepthTexture, screenCoord));
// Near / far for current frustum
float n = czm_currentFrustum.x;
float f = czm_currentFrustum.y;
// geometry depth in eye coordinate
vec4 geomEC = czm_windowToEyeCoordinates(gl_FragCoord);
float geomDepthLinear = -geomEC.z;
// Convert edge depth to linear depth
float z_ndc_edge = edgeDepthWin * 2.0 - 1.0;
float edgeDepthLinear = (2.0 * n * f) / (f + n - z_ndc_edge * (f - n));
float d = abs(edgeDepthLinear - geomDepthLinear);
// Adaptive epsilon using linear depth fwidth for robustness
float pixelStepLinear = fwidth(geomDepthLinear);
float rel = geomDepthLinear * 0.0005;
float eps = max(n * 1e-4, max(pixelStepLinear * 1.5, rel));
// If Edge isn't behind any geometry and the pixel has edge data
if (d < eps && edgeId.r > 0.0) {
#ifdef HAS_EDGE_FEATURE_ID
float edgeFeatureId = edgeId.g;
float currentFeatureId = float(featureIds.featureId_0);
#endif
float globeDepth = czm_unpackDepth(texture(czm_globeDepthTexture, screenCoord));
// Background / sky / globe: always show edge
bool isBackground = geomDepthLinear > globeDepth;
bool drawEdge = isBackground;
#ifdef HAS_EDGE_FEATURE_ID
bool hasEdgeFeature = edgeFeatureId > 0.0;
bool hasCurrentFeature = currentFeatureId > 0.0;
bool featuresMatch = edgeFeatureId == currentFeatureId;
drawEdge = drawEdge || !hasEdgeFeature || !hasCurrentFeature || featuresMatch;
#else
drawEdge = true;
#endif
if (drawEdge) {
color = edgeColor;
}
}
}
`;var Dme={name:"EdgeDetectionPipelineStage"};Dme.process=function(e){e.shaderBuilder.addFragmentLines([S2])};var _2=Dme;var JXn=y(x(),1);var fXn=y(x(),1),I2=`// CESIUM_REDIRECTED_COLOR_OUTPUT flag is used to avoid color attachment conflicts
// when shaders are processed by different rendering pipelines (e.g., OIT).
// Only declare MRT outputs when not in a derived shader context.
#if defined(HAS_EDGE_VISIBILITY_MRT) && !defined(CESIUM_REDIRECTED_COLOR_OUTPUT)
layout(location = 1) out vec4 out_id; // edge id / metadata
layout(location = 2) out vec4 out_edgeDepth; // packed depth
#endif
void edgeVisibilityStage(inout vec4 color, inout FeatureIds featureIds)
{
#ifdef HAS_EDGE_VISIBILITY
if (!u_isEdgePass) {
return;
}
float edgeTypeInt = v_edgeType * 255.0;
if (edgeTypeInt < 0.5) {
discard;
}
if (edgeTypeInt > 0.5 && edgeTypeInt < 1.5) { // silhouette candidate
// Silhouette check done in vertex shader
// v_shouldDiscard will be > 0.5 if this edge should be discarded
if (v_shouldDiscard > 0.5) {
discard;
}
}
vec4 finalColor = color;
#ifdef HAS_EDGE_COLOR_ATTRIBUTE
if (v_edgeColor.a >= 0.0) {
finalColor = v_edgeColor;
}
#endif
#ifdef HAS_LINE_PATTERN
// Pattern is 16-bit, each bit represents visibility at that position
const float maskLength = 16.0;
// Get the relative position within the dash from 0 to 1
float dashPosition = fract(v_lineCoord / maskLength);
// Figure out the mask index
float maskIndex = floor(dashPosition * maskLength);
// Test the bit mask
float maskTest = floor(u_linePattern / pow(2.0, maskIndex));
// If bit is 0 (gap), discard the fragment (use < 1.0 for better numerical stability)
if (mod(maskTest, 2.0) < 1.0) {
discard;
}
#endif
color = finalColor;
#if defined(HAS_EDGE_VISIBILITY_MRT) && !defined(CESIUM_REDIRECTED_COLOR_OUTPUT)
// Write edge metadata
out_id = vec4(0.0);
out_id.r = edgeTypeInt; // Edge type (0-3)
#ifdef HAS_EDGE_FEATURE_ID
out_id.g = float(featureIds.featureId_0); // Feature ID if available
#else
out_id.g = 0.0;
#endif
// Pack depth into separate MRT attachment
out_edgeDepth = czm_packDepth(gl_FragCoord.z);
#endif
#endif
}`;var AXn=y(x(),1),Z2=`#ifdef HAS_EDGE_VISIBILITY
void edgeVisibilityStageVS() {
if (!u_isEdgePass) {
return;
}
v_edgeType = a_edgeType;
v_silhouetteNormalView = czm_normal * a_silhouetteNormal;
v_faceNormalAView = czm_normal * a_faceNormalA;
v_faceNormalBView = czm_normal * a_faceNormalB;
v_edgeOffset = a_edgeOffset;
// Silhouette detection: check both endpoints of the edge
v_shouldDiscard = 0.0;
float edgeTypeInt = a_edgeType * 255.0;
if (edgeTypeInt > 0.5 && edgeTypeInt < 1.5) {
vec3 normalA = normalize(v_faceNormalAView);
vec3 normalB = normalize(v_faceNormalBView);
const float perpTol = 2.5e-4;
// Check at current vertex (first endpoint)
vec4 currentPosEC = czm_modelView * vec4(v_positionMC, 1.0);
vec3 toEye1 = normalize(-currentPosEC.xyz);
float dotA1 = dot(normalA, toEye1);
float dotB1 = dot(normalB, toEye1);
// Check at other vertex (second endpoint)
vec4 otherPosEC = czm_modelView * vec4(a_edgeOtherPos, 1.0);
vec3 toEye2 = normalize(-otherPosEC.xyz);
float dotA2 = dot(normalA, toEye2);
float dotB2 = dot(normalB, toEye2);
// Discard if EITHER endpoint is non-silhouette
if (dotA1 * dotB1 > perpTol || dotA2 * dotB2 > perpTol) {
v_shouldDiscard = 1.0;
}
}
#ifdef HAS_EDGE_FEATURE_ID
v_featureId_0 = a_edgeFeatureId;
#endif
#ifdef HAS_EDGE_COLOR_ATTRIBUTE
v_edgeColor = a_edgeColor;
#endif
#ifdef HAS_LINE_PATTERN
#ifdef HAS_EDGE_CUMULATIVE_DISTANCE
v_lineCoord = a_edgeCumulativeDistance * u_pixelsPerWorld;
#else
vec4 currentClip = czm_modelViewProjection * vec4(v_positionMC, 1.0);
vec2 currentScreen = ((currentClip.xy / currentClip.w) * 0.5 + 0.5) * czm_viewport.zw;
vec4 otherClip = czm_modelViewProjection * vec4(a_edgeOtherPos, 1.0);
vec2 otherScreen = ((otherClip.xy / otherClip.w) * 0.5 + 0.5) * czm_viewport.zw;
vec2 windowDir = otherScreen - currentScreen;
const float textureCoordinateBase = 8192.0;
if (abs(windowDir.x) > abs(windowDir.y)) {
v_lineCoord = textureCoordinateBase + currentScreen.x;
} else {
v_lineCoord = textureCoordinateBase + currentScreen.y;
}
#endif
#endif
// Expand vertex to form quad
vec4 posClip = gl_Position;
if (length(a_edgeOtherPos) > 0.0 && abs(a_edgeOffset) > 0.0) {
vec4 currentClip = posClip;
vec4 otherClip = czm_modelViewProjection * vec4(a_edgeOtherPos, 1.0);
vec2 currentNDC = currentClip.xy / currentClip.w;
vec2 otherNDC = otherClip.xy / otherClip.w;
vec2 edgeDirNDC = otherNDC - currentNDC;
// Ensure consistent edge direction
if (edgeDirNDC.x < 0.0 || (abs(edgeDirNDC.x) < 0.001 && edgeDirNDC.y < 0.0)) {
edgeDirNDC = -edgeDirNDC;
}
edgeDirNDC = normalize(edgeDirNDC);
vec2 perpNDC = vec2(-edgeDirNDC.y, edgeDirNDC.x);
// Convert line width from pixels to clip space
float lineWidthPixels = u_lineWidth;
vec2 viewportSize = czm_viewport.zw;
vec2 clipPerPixel = (2.0 / viewportSize) * currentClip.w;
vec2 offsetClip = perpNDC * lineWidthPixels * clipPerPixel * 0.5 * a_edgeOffset;
posClip.xy += offsetClip;
}
gl_Position = posClip;
}
#endif
`;var VXn=y(x(),1);var Zj=class e{static readAttributeAsTypedArray(t){let n=e.readAttributeAsRawCompactTypedArray(t),i=t.normalized,o=t.quantization;if(!l(o)&&!i)return n;let r=t.type,s=t.count,a=n;return i&&(a=on.dequantize(n,t.componentDatatype,r,s)),l(o)?e.dequantize(a,s,r,o):a}static readAttributeAsRawCompactTypedArray(t){let n=t.type,i=t.count,o=Ut.getNumberOfComponents(n),r=i*o,s=t.componentDatatype,a=t.quantization;l(a)&&(s=a.componentDatatype);let c=t.buffer,d=t.byteOffset,u=t.byteStride,h=H.getSizeInBytes(s),p=o*h;if(!l(u)||u===p){let S=H.createTypedArray(s,r);return c.getBufferData(S,d),S}let A=new Uint8Array(c.sizeInBytes);c.getBufferData(A);let f=H.createTypedArray(s,r),b=u??p,C=new DataView(A.buffer,A.byteOffset,A.byteLength),T=new Array(o),E=e.createComponentsReader(s);for(let S=0;S<i;++S){let I=d+S*b;E(C,I,o,T);for(let R=0;R<o;++R)f[S*o+R]=T[R]}return f}static dequantize(t,n,i,o){if(o.octEncoded){let a=e.octDecode(t,n,o.normalizationRange,void 0);return o.octEncodedZXY&&e.convertZxyToXyz(a,a),a}let r=o.quantizedVolumeStepSize,s=o.quantizedVolumeOffset;if(i===Ut.SCALAR)return e.dequantize1D(t,n,r,s,void 0);if(i===Ut.VEC2)return e.dequantize2D(t,n,r,s,void 0);if(i===Ut.VEC3)return e.dequantize3D(t,n,r,s,void 0);if(i===Ut.VEC4)return e.dequantize4D(t,n,r,s,void 0);throw new fe(`Element type for dequantization must be SCALAR, VEC2, VEC3, or VEC4, but is ${i}`)}static octDecode(t,n,i,o){l(o)||(o=new Float32Array(t.length));let r=new m;for(let s=0;s<n;s++)m.unpack(t,s*3,r),on.octDecodeInRange(r,i,r),m.pack(o,r,s*3);return o}static convertZxyToXyz(t,n,i){l(i)||(i=new Float32Array(t.length));let o=0;for(let r=0;r<n;r++,o+=3){let s=t[o+0],a=t[o+1],c=t[o+2];i[o+0]=a,i[o+1]=c,i[o+2]=s}return i}static dequantize1D(t,n,i,o,r){l(r)||(r=new Float32Array(t.length));for(let s=0;s<n;s++){let c=t[s]*i+o;r[s]=c}return r}static dequantize2D(t,n,i,o,r){l(r)||(r=new Float32Array(t.length));let s=new M;for(let a=0;a<n;a++)M.unpack(t,a*2,s),M.multiplyComponents(s,i,s),M.add(s,o,s),M.pack(s,r,a*2);return r}static dequantize3D(t,n,i,o,r){l(r)||(r=new Float32Array(t.length));let s=new m;for(let a=0;a<n;a++)m.unpack(t,a*3,s),m.multiplyComponents(s,i,s),m.add(s,o,s),m.pack(s,r,a*3);return r}static dequantize4D(t,n,i,o,r){l(r)||(r=new Float32Array(t.length));let s=new re;for(let a=0;a<n;a++)re.unpack(t,a*4,s),re.multiplyComponents(s,i,s),re.add(s,o,s),re.pack(s,r,a*4);return r}static createComponentsReader(t){let n=e.createComponentReader(t),i=H.getSizeInBytes(t);return function(o,r,s,a){let c=r;for(let d=0;d<s;++d)a[d]=n(o,c),c+=i}}static createComponentReader(t){switch(t){case H.BYTE:return function(n,i){return n.getInt8(i)};case H.UNSIGNED_BYTE:return function(n,i){return n.getUint8(i)};case H.SHORT:return function(n,i){return n.getInt16(i,!0)};case H.UNSIGNED_SHORT:return function(n,i){return n.getUint16(i,!0)};case H.INT:return function(n,i){return n.getInt32(i,!0)};case H.UNSIGNED_INT:return function(n,i){return n.getUint32(i,!0)};case H.FLOAT:return function(n,i){return n.getFloat32(i,!0)};case H.DOUBLE:return function(n,i){return n.getFloat64(i,!0)}}throw new fe(`The componentType must be a valid ComponentDatatype, but is ${t}`)}static transform3D(t,n,i){l(i)||(i=new Float32Array(t.length));let o=new m,r=t.length/3;for(let s=0;s<r;s++)m.unpack(t,s*3,o),F.multiplyByPoint(n,o,o),m.pack(o,i,s*3);return i}static readIndicesAsTypedArray(t){let n=t.typedArray;if(l(n))return n;let i=t.buffer,o=t.count,r=t.indexDatatype,s=e.createIndexTypedArray(r,o);return i.getBufferData(s),s}static readIndicesAsTriangleIndicesTypedArray(t,n){let i=e.readIndicesAsTypedArray(t);if(n===We.TRIANGLES)return i;if(n===We.TRIANGLE_STRIP)return e.convertTriangleStripToTriangleIndices(i);if(n===We.TRIANGLE_FAN)return e.convertTriangleFanToTriangleIndices(i);throw new fe(`The primitiveType must be TRIANGLES (${We.TRIANGLES}, TRIANGLE_STRIP (${We.TRIANGLE_STRIP}, or TRIANGLE_FAN (${We.TRIANGLE_FAN}, but is ${n}`)}static convertTriangleStripToTriangleIndices(t){let n=t.constructor((t.length-2)*3);for(let i=0;i<t.length-2;i++)i%2===1?(n[i*3+0]=t[i+0],n[i*3+1]=t[i+2],n[i*3+2]=t[i+1]):(n[i*3+0]=t[i+0],n[i*3+1]=t[i+1],n[i*3+2]=t[i+2]);return n}static convertTriangleFanToTriangleIndices(t){let n=t.constructor((t.length-2)*3);for(let i=0;i<t.length-2;i++)n[i*3+0]=t[i+0],n[i*3+1]=t[i+1],n[i*3+2]=t[i+2];return n}static createIndexTypedArray(t,n){switch(t){case Ue.UNSIGNED_BYTE:return new Uint8Array(n);case Ue.UNSIGNED_SHORT:return new Uint16Array(n);case Ue.UNSIGNED_INT:return new Uint32Array(n)}throw new fe(`The indexDatatype must be UNSIGNED_BYTE (${Ue.UNSIGNED_BYTE}, UNSIGNED_SHORT (${Ue.UNSIGNED_SHORT}, or UNSIGNED_INT (${Ue.UNSIGNED_INT}, but is ${t}`)}},el=Zj;var kme={name:"EdgeVisibilityPipelineStage"};kme.process=function(e,t,n){if(!l(t.edgeVisibility))return;n.edgeVisibilityRequested=!0;let i=e.shaderBuilder;i.addDefine("HAS_EDGE_VISIBILITY",void 0,pe.BOTH),i.addDefine("HAS_EDGE_VISIBILITY_MRT",void 0,pe.FRAGMENT),i.addFragmentLines(I2),i.addVertexLines(Z2),i.addUniform("bool","u_isEdgePass",pe.BOTH);let o=t.material,r=l(o)?o.lineStyle:void 0;(!l(r)||!l(r.width))&&i.addUniform("float","u_lineWidth",pe.VERTEX);let s=i.addAttribute("float","a_edgeType");i.addVarying("float","v_edgeType","flat");let a=i.addAttribute("float","a_edgeFeatureId"),c=i.addAttribute("vec3","a_silhouetteNormal");i.addVarying("vec3","v_silhouetteNormalView","flat");let d=i.addAttribute("vec3","a_faceNormalA"),u=i.addAttribute("vec3","a_faceNormalB");i.addVarying("vec3","v_faceNormalAView","flat"),i.addVarying("vec3","v_faceNormalBView","flat"),i.addVarying("float","v_shouldDiscard","flat");let h=i.addAttribute("vec3","a_edgeOtherPos"),p=i.addAttribute("float","a_edgeOffset");i.addVarying("float","v_edgeOffset");let A=HKe(t),f=KKe(t);if(!l(f)||!l(f.edgeIndices)||f.edgeIndices.length===0)return;let b=e.runtimePrimitive.primitive,C=jKe(b),E=f.edgeData.some(function(P){return l(P.color)})||l(C),S;E&&(S=i.addAttribute("vec4","a_edgeColor"),i.addVarying("vec4","v_edgeColor","flat"),i.addDefine("HAS_EDGE_COLOR_ATTRIBUTE",void 0,pe.BOTH));let I,R,V=It.getAttributeBySemantic(t,"BENTLEY_materials_line_style:CUMULATIVE_DISTANCE");l(V)&&(I=V,R=i.addAttribute("float","a_edgeCumulativeDistance"),i.addDefine("HAS_EDGE_CUMULATIVE_DISTANCE",void 0,pe.VERTEX));let W=JKe(A,f.edgeIndices,f.edgeData,t.edgeVisibility),B=qKe(f.edgeIndices,f.edgeData,e,n.context,s,c,d,u,a,S,h,p,C,t.edgeVisibility,W,I,R);if(!l(B))return;B.hasEdgeFeatureIds&&i.addDefine("HAS_EDGE_FEATURE_ID",void 0,pe.BOTH),e.uniformMap.u_isEdgePass=function(){return!1},l(e.uniformMap.u_lineWidth)||(e.uniformMap.u_lineWidth=function(){return 1}),l(I)&&(l(e.uniformMap.u_pixelsPerWorld)||(e.uniformMap.u_pixelsPerWorld=function(){return 1}));let N=l(r)&&l(r.width)?r.width*n.pixelRatio:void 0;e.edgeGeometry={vertexArray:B.vertexArray,indexCount:B.indexCount,primitiveType:We.TRIANGLES,pass:Ge.CESIUM_3D_TILE_EDGES,lineWidth:N}};function HKe(e){let t=e.indices;if(!l(t))return{edgeMap:new Map,faceNormals:new Float32Array(0),triangleCount:0};let n=t.typedArray,i=Math.floor(n.length/3),o=It.getAttributeBySemantic(e,ct.POSITION),r=l(o.typedArray)?o.typedArray:el.readAttributeAsTypedArray(o),s=o.quantization;if(l(s)&&!s.octEncoded){let C=r.length,T=new Float32Array(C),E=s.quantizedVolumeOffset,S=s.quantizedVolumeStepSize;for(let I=0;I<C;I+=3)T[I]=E.x+r[I]*S.x,T[I+1]=E.y+r[I+1]*S.y,T[I+2]=E.z+r[I+2]*S.z;r=T}let a=new Map,c=new Float32Array(i*3),d=new m,u=new m,h=new m,p=new m,A=new m,f=new m;function b(C,T,E){let S=`${C<T?C:T},${C<T?T:C}`,I=a.get(S);l(I)||(I=[],a.set(S,I)),I.length<2&&I.push(E)}for(let C=0;C<i;C++){let T=C*3,E=n[T],S=n[T+1],I=n[T+2],R=E*3,V=S*3,W=I*3;d.x=r[R],d.y=r[R+1],d.z=r[R+2],u.x=r[V],u.y=r[V+1],u.z=r[V+2],h.x=r[W],h.y=r[W+1],h.z=r[W+2],m.subtract(u,d,p),m.subtract(h,d,A),m.cross(p,A,f),m.normalize(f,f),c[T]=f.x,c[T+1]=f.y,c[T+2]=f.z,b(E,S,C),b(S,I,C),b(I,E,C)}return{edgeMap:a,faceNormals:c,triangleCount:i}}function JKe(e,t,n,i){let{edgeMap:o,faceNormals:r}=e,s=t.length/2,a=new Float32Array(s*6),c=l(i)&&l(i.silhouetteNormals),d=null,u=new m,h=new m;if(c){let p=T=>2*((T+128)/255)-1,A=new Uint16Array(i.silhouetteNormals.length),f=new m,b=new M;for(let T=0;T<i.silhouetteNormals.length;T++){let E=i.silhouetteNormals[T];f.x=p(E.x),f.y=p(E.y),f.z=p(E.z),m.magnitude(f)>0?m.normalize(f,f):(f.x=0,f.y=0,f.z=1),on.octEncodeInRange(f,255,b);let I=b.x&255,R=b.y&255;A[T]=R<<8|I}let C=Math.floor(A.length/2);d=new Uint32Array(C);for(let T=0;T<C;T++){let E=A[T*2],S=A[T*2+1];d[T]=E|S<<16}}for(let p=0;p<s;p++){let A=t[p*2],f=t[p*2+1],b=`${A<f?A:f},${A<f?f:A}`,C=o.get(b),{edgeType:T,mateVertexIndex:E}=n[p],S,I,R,V,W,B,N=!1;if(c&&d&&T===1&&E>=0&&E<d.length){let g=d[E];on.octDecode(g&255,g>>8&255,u),on.octDecode(g>>16&255,g>>24&255,h),S=u.x,I=u.y,R=u.z,V=h.x,W=h.y,B=h.z,N=!0}if(!N){if(!l(C)||C.length===0)continue;let _=C[0]*3;if(S=r[_],I=r[_+1],R=r[_+2],C.length>1){let w=C[1]*3;V=r[w],W=r[w+1],B=r[w+2]}else V=-S,W=-I,B=-R}let P=p*6;a[P]=S,a[P+1]=I,a[P+2]=R,a[P+3]=V,a[P+4]=W,a[P+5]=B}return a}function KKe(e){let t=e.edgeVisibility;if(!l(t))return[];let n=t.visibility,i=e.indices,o=t.lineStrings,r=e.attributes,s=l(r)&&r.length>0?r[0].count:0,a=l(n)&&l(i)&&l(i.typedArray)&&i.typedArray.length>0,c=l(o)&&o.length>0;if(!a&&!c)return[];let d=a?i.typedArray:void 0,u=[],h=[],p=new Set,A=0,f=t.materialColor;if(a){let b=0,C=d.length,T=n;for(let E=0;E+2<C;E+=3){let S=d[E],I=d[E+1],R=d[E+2];for(let V=0;V<3;V++){let W,B;V===0?(W=S,B=I):V===1?(W=I,B=R):(W=R,B=S);let N=Math.floor(b/4),P=b%4*2;if(b++,N>=T.length)break;let _=T[N]>>P&3;if(_===0)continue;let Z=Math.min(W,B),G=Math.max(W,B),w=`${Z},${G}`;if(p.has(w))continue;p.add(w),u.push(W,B);let X=-1;_===1&&(X=A,A++),h.push({edgeType:_,triangleIndex:Math.floor(E/3),edgeIndex:V,mateVertexIndex:X,currentTriangleVertices:[S,I,R],color:f})}}}if(c)for(let b=0;b<o.length;b++){let C=o[b];if(!l(C)||!l(C.indices))continue;let T=C.indices;if(!l(T)||T.length<2)continue;let E=C.restartIndex,S=l(C.materialColor)?C.materialColor:f,I;for(let R=0;R<T.length;R++){let V=T[R];if(l(E)&&V===E){I=void 0;continue}if(!l(I)){I=V;continue}let W=I,B=V;if(I=V,W===B||s>0&&(W<0||W>=s||B<0||B>=s))continue;let N=Math.min(W,B),P=Math.max(W,B),g=`${N},${P}`;p.has(g)||(p.add(g),u.push(W,B),h.push({edgeType:2,triangleIndex:-1,edgeIndex:-1,mateVertexIndex:-1,currentTriangleVertices:void 0,color:l(S)?S:void 0}))}}return{edgeIndices:u,edgeData:h,silhouetteEdgeCount:A}}function jKe(e){if(!l(e))return;let t=It.getAttributeBySemantic(e,ct.COLOR);if(!l(t))return;let n=Ut.getNumberOfComponents(t.type);if(n!==3&&n!==4)return;let i=t.typedArray;if(l(i)||(i=el.readAttributeAsTypedArray(t)),!l(i))return;let o=t.count;if(!l(o)||o===0||i.length<o*n)return;let r=i instanceof Float32Array||i instanceof Float64Array,s=i instanceof Uint8Array,a=i instanceof Uint16Array;if(!r&&!s&&!a)return;let c=new Float32Array(o*4),d=function(u){let h;return r?h=u:s?h=u/255:a&&(h=u/65535),Math.min(Math.max(h,0),1)};for(let u=0;u<o;u++){let h=u*n,p=u*4;c[p]=d(i[h]),c[p+1]=d(i[h+1]),c[p+2]=d(i[h+2]),n===4?c[p+3]=d(i[h+3]):c[p+3]=1}return{colors:c,count:o}}function qKe(e,t,n,i,o,r,s,a,c,d,u,h,p,A,f,b,C){if(!l(e)||e.length===0)return;let T=t.length,S=T*4,I=0,R=It.getAttributeBySemantic(n.runtimePrimitive.primitive,ct.POSITION),V=l(R.typedArray)?R.typedArray:el.readAttributeAsTypedArray(R),W=new Float32Array(S*3),B=new Float32Array(S),N=new Float32Array(S*3),P=new Float32Array(S*3),g=new Float32Array(S*3),_=new Float32Array(S*3),Z=new Float32Array(S),G=l(b),w=G?new Float32Array(S):void 0,X;G&&(X=l(b.typedArray)?b.typedArray:el.readAttributeAsTypedArray(b));let k=l(d),v=k?new Float32Array(S*4):void 0,D=l(p)?p.colors:void 0,Y=l(p)?p.count:0;function O(lt){if(!k)return;let ht=lt*4;v[ht]=0,v[ht+1]=0,v[ht+2]=0,v[ht+3]=-1}function J(lt,ht){if(!k)return;let Rt=lt*4,_e=l(ht.x)?ht.x:ht[0],Re=l(ht.y)?ht.y:ht[1],jt=l(ht.z)?ht.z:ht[2],At=l(ht.w)?ht.w:l(ht[3])?ht[3]:1;v[Rt]=_e,v[Rt+1]=Re,v[Rt+2]=jt,v[Rt+3]=At}function te(lt,ht){if(!k)return;if(ht>=Y){O(lt);return}let Rt=ht*4,_e=lt*4;v[_e]=D[Rt],v[_e+1]=D[Rt+1],v[_e+2]=D[Rt+2],v[_e+3]=D[Rt+3]}for(let lt=0;lt<T;lt++){let ht=e[lt*2],Rt=e[lt*2+1],_e=t[lt].edgeType,Re=_e/255,jt=V[ht*3],At=V[ht*3+1],kt=V[ht*3+2],On=V[Rt*3],$e=V[Rt*3+1],uo=V[Rt*3+2],Qt=lt*4;W[Qt*3]=jt,W[Qt*3+1]=At,W[Qt*3+2]=kt,_[Qt*3]=On,_[Qt*3+1]=$e,_[Qt*3+2]=uo,Z[Qt]=-1,B[Qt]=Re,W[(Qt+1)*3]=jt,W[(Qt+1)*3+1]=At,W[(Qt+1)*3+2]=kt,_[(Qt+1)*3]=On,_[(Qt+1)*3+1]=$e,_[(Qt+1)*3+2]=uo,Z[Qt+1]=1,B[Qt+1]=Re,W[(Qt+2)*3]=On,W[(Qt+2)*3+1]=$e,W[(Qt+2)*3+2]=uo,_[(Qt+2)*3]=jt,_[(Qt+2)*3+1]=At,_[(Qt+2)*3+2]=kt,Z[Qt+2]=1,B[Qt+2]=Re,W[(Qt+3)*3]=On,W[(Qt+3)*3+1]=$e,W[(Qt+3)*3+2]=uo,_[(Qt+3)*3]=jt,_[(Qt+3)*3+1]=At,_[(Qt+3)*3+2]=kt,Z[Qt+3]=-1,B[Qt+3]=Re;let Bo=t[lt].color;if(l(Bo))for(let Sn=0;Sn<4;Sn++)J(Qt+Sn,Bo);else if(l(D))for(let Sn=0;Sn<4;Sn++)te(Qt+Sn,ht);else for(let Sn=0;Sn<4;Sn++)O(Qt+Sn);if(G){let Sn=X[ht],Ri=X[Rt];w[Qt]=Sn,w[Qt+1]=Sn,w[Qt+2]=Ri,w[Qt+3]=Ri}let no=0,Yi=0,Oo=1;if(_e===1&&l(A.silhouetteNormals)){let Sn=t[lt].mateVertexIndex;if(Sn>=0&&Sn<A.silhouetteNormals.length){let Ri=A.silhouetteNormals[Sn];l(Ri)&&(no=Ri.x,Yi=Ri.y,Oo=Ri.z)}}for(let Sn=0;Sn<4;Sn++)N[(Qt+Sn)*3]=no,N[(Qt+Sn)*3+1]=Yi,N[(Qt+Sn)*3+2]=Oo;let ai=lt*6,jn=f[ai],io=f[ai+1],wo=f[ai+2],bo=f[ai+3],nr=f[ai+4],zo=f[ai+5];for(let Sn=0;Sn<4;Sn++)P[(Qt+Sn)*3]=jn,P[(Qt+Sn)*3+1]=io,P[(Qt+Sn)*3+2]=wo,g[(Qt+Sn)*3]=bo,g[(Qt+Sn)*3+1]=nr,g[(Qt+Sn)*3+2]=zo}let z=it.createVertexBuffer({context:i,typedArray:W,usage:Be.STATIC_DRAW}),j=it.createVertexBuffer({context:i,typedArray:B,usage:Be.STATIC_DRAW}),ee=it.createVertexBuffer({context:i,typedArray:N,usage:Be.STATIC_DRAW}),ge=it.createVertexBuffer({context:i,typedArray:P,usage:Be.STATIC_DRAW}),ye=it.createVertexBuffer({context:i,typedArray:g,usage:Be.STATIC_DRAW}),ae=it.createVertexBuffer({context:i,typedArray:_,usage:Be.STATIC_DRAW}),Ce=it.createVertexBuffer({context:i,typedArray:Z,usage:Be.STATIC_DRAW}),Te=k?it.createVertexBuffer({context:i,typedArray:v,usage:Be.STATIC_DRAW}):void 0,Fe=G?it.createVertexBuffer({context:i,typedArray:w,usage:Be.STATIC_DRAW}):void 0,Pe=T*2*3,Xe=S>65534,st=Xe?new Uint32Array(Pe):new Uint16Array(Pe);for(let lt=0;lt<T;lt++){let ht=lt*4,Rt=lt*6;st[Rt]=ht,st[Rt+1]=ht+1,st[Rt+2]=ht+2,st[Rt+3]=ht,st[Rt+4]=ht+2,st[Rt+5]=ht+3}let Ye=it.createIndexBuffer({context:i,typedArray:st,usage:Be.STATIC_DRAW,indexDatatype:Xe?Ue.UNSIGNED_INT:Ue.UNSIGNED_SHORT}),xt=[{index:I,vertexBuffer:z,componentsPerAttribute:3,componentDatatype:H.FLOAT,normalize:!1},{index:o,vertexBuffer:j,componentsPerAttribute:1,componentDatatype:H.FLOAT,normalize:!1},{index:r,vertexBuffer:ee,componentsPerAttribute:3,componentDatatype:H.FLOAT,normalize:!1},{index:s,vertexBuffer:ge,componentsPerAttribute:3,componentDatatype:H.FLOAT,normalize:!1},{index:a,vertexBuffer:ye,componentsPerAttribute:3,componentDatatype:H.FLOAT,normalize:!1},{index:u,vertexBuffer:ae,componentsPerAttribute:3,componentDatatype:H.FLOAT,normalize:!1},{index:h,vertexBuffer:Ce,componentsPerAttribute:1,componentDatatype:H.FLOAT,normalize:!1}];k&&xt.push({index:d,vertexBuffer:Te,componentsPerAttribute:4,componentDatatype:H.FLOAT,normalize:!1}),G&&xt.push({index:C,vertexBuffer:Fe,componentsPerAttribute:1,componentDatatype:H.FLOAT,normalize:!1});let at=n.runtimePrimitive.primitive;if(l(at.featureIds)&&at.featureIds.length>0){let lt=at.featureIds[0];if(l(lt.setIndex)){let ht=at.attributes.find(Rt=>Rt.semantic===ct.FEATURE_ID&&Rt.setIndex===lt.setIndex);if(l(ht)){let Rt=l(ht.typedArray)?ht.typedArray:el.readAttributeAsTypedArray(ht),_e=new Float32Array(S);for(let jt=0;jt<T;jt++){let At=e[jt*2],kt=At<Rt.length?Rt[At]:0;for(let On=0;On<4;On++)_e[jt*4+On]=kt}let Re=it.createVertexBuffer({context:i,typedArray:_e,usage:Be.STATIC_DRAW});xt.push({index:c,vertexBuffer:Re,componentsPerAttribute:1,componentDatatype:H.FLOAT,normalize:!1})}}}return{vertexArray:new kn({context:i,attributes:xt,indexBuffer:Ye}),indexCount:Pe,hasEdgeFeatureIds:l(at.featureIds)&&at.featureIds.length>0}}var R2=kme;var TYn=y(x(),1);var jXn=y(x(),1),V2=`void geometryStage(out ProcessedAttributes attributes)
{
attributes.positionMC = v_positionMC;
attributes.positionEC = v_positionEC;
#if defined(COMPUTE_POSITION_WC_CUSTOM_SHADER) || defined(COMPUTE_POSITION_WC_STYLE) || defined(COMPUTE_POSITION_WC_ATMOSPHERE)
attributes.positionWC = v_positionWC;
#endif
#ifdef HAS_NORMALS
// renormalize after interpolation
attributes.normalEC = normalize(v_normalEC);
#endif
#ifdef HAS_TANGENTS
attributes.tangentEC = normalize(v_tangentEC);
#endif
#ifdef HAS_BITANGENTS
attributes.bitangentEC = normalize(v_bitangentEC);
#endif
// Everything else is dynamically generated in GeometryPipelineStage
setDynamicVaryings(attributes);
}
`;var $Xn=y(x(),1),G2=`vec4 geometryStage(inout ProcessedAttributes attributes, mat4 modelView, mat3 normal)
{
vec4 computedPosition;
// Compute positions in different coordinate systems
vec3 positionMC = attributes.positionMC;
v_positionMC = positionMC;
v_positionEC = (modelView * vec4(positionMC, 1.0)).xyz;
#if defined(USE_2D_POSITIONS) || defined(USE_2D_INSTANCING)
vec3 position2D = attributes.position2D;
vec3 positionEC = (u_modelView2D * vec4(position2D, 1.0)).xyz;
computedPosition = czm_projection * vec4(positionEC, 1.0);
#else
computedPosition = czm_projection * vec4(v_positionEC, 1.0);
#endif
// Sometimes the custom shader and/or style needs this
#if defined(COMPUTE_POSITION_WC_CUSTOM_SHADER) || defined(COMPUTE_POSITION_WC_STYLE) || defined(COMPUTE_POSITION_WC_ATMOSPHERE) || defined(ENABLE_CLIPPING_POLYGONS)
// Note that this is a 32-bit position which may result in jitter on small
// scales.
v_positionWC = (czm_model * vec4(positionMC, 1.0)).xyz;
#endif
#ifdef HAS_NORMALS
v_normalEC = normalize(normal * attributes.normalMC);
#endif
#ifdef HAS_TANGENTS
v_tangentEC = normalize(normal * attributes.tangentMC);
#endif
#ifdef HAS_BITANGENTS
v_bitangentEC = normalize(normal * attributes.bitangentMC);
#endif
// All other varyings need to be dynamically generated in
// GeometryPipelineStage
setDynamicVaryings(attributes);
return computedPosition;
}
`;var cYn=y(x(),1);var tYn=y(x(),1),S_=`vec2 computeSt(float featureId)
{
float stepX = model_textureStep.x;
float centerX = model_textureStep.y;
#ifdef MULTILINE_BATCH_TEXTURE
float stepY = model_textureStep.z;
float centerY = model_textureStep.w;
float xId = mod(featureId, model_textureDimensions.x);
float yId = floor(featureId / model_textureDimensions.x);
return vec2(centerX + (xId * stepX), centerY + (yId * stepY));
#else
return vec2(centerX + (featureId * stepX), 0.5);
#endif
}
void selectedFeatureIdStage(out SelectedFeature feature, FeatureIds featureIds)
{
int featureId = featureIds.SELECTED_FEATURE_ID;
if (featureId < model_featuresLength)
{
vec2 featureSt = computeSt(float(featureId));
feature.id = featureId;
feature.st = featureSt;
feature.color = texture(model_batchTexture, featureSt);
}
// Floating point comparisons can be unreliable in GLSL, so we
// increment the feature ID to make sure it's always greater
// then the model_featuresLength - a condition we check for in the
// pick ID, to avoid sampling the pick texture if the feature ID is
// greater than the number of features.
else
{
feature.id = model_featuresLength + 1;
feature.st = vec2(0.0);
feature.color = vec4(1.0);
}
#ifdef HAS_NULL_FEATURE_ID
if (featureId == model_nullFeatureId) {
feature.id = featureId;
feature.st = vec2(0.0);
feature.color = vec4(1.0);
}
#endif
}
`;var L2={name:"SelectedFeatureIdPipelineStage",STRUCT_ID_SELECTED_FEATURE:"SelectedFeature",STRUCT_NAME_SELECTED_FEATURE:"SelectedFeature"};L2.process=function(e,t,n){let i=e.shaderBuilder;e.hasPropertyTable=!0;let o=e.model,r=e.runtimeNode.node,s=$Ke(o,r,t),a=s.shaderDestination;i.addDefine("HAS_SELECTED_FEATURE_ID",void 0,a),i.addDefine("SELECTED_FEATURE_ID",s.variableName,a),i.addDefine(s.featureIdDefine,void 0,a),eje(i);let c=s.featureIds.nullFeatureId,d=e.uniformMap;l(c)&&(i.addDefine("HAS_NULL_FEATURE_ID",void 0,a),i.addUniform("int","model_nullFeatureId",a),d.model_nullFeatureId=function(){return c}),s.shaderDestination===pe.BOTH&&i.addVertexLines(S_),i.addFragmentLines(S_)};function Qme(e){return e instanceof Tn.FeatureIdTexture?"HAS_SELECTED_FEATURE_ID_TEXTURE":"HAS_SELECTED_FEATURE_ID_ATTRIBUTE"}function Ome(e){return e instanceof Tn.FeatureIdTexture?pe.FRAGMENT:pe.BOTH}function $Ke(e,t,n){let i,o;return l(t.instances)&&(o=It.getFeatureIdsByLabel(t.instances.featureIds,e.instanceFeatureIdLabel),l(o))?(i=o.label??o.positionalLabel,{featureIds:o,variableName:i,shaderDestination:Ome(o),featureIdDefine:Qme(o)}):(o=It.getFeatureIdsByLabel(n.featureIds,e.featureIdLabel),i=o.label??o.positionalLabel,{featureIds:o,variableName:i,shaderDestination:Ome(o),featureIdDefine:Qme(o)})}function eje(e){e.addStructField(L2.STRUCT_ID_SELECTED_FEATURE,"int","id"),e.addStructField(L2.STRUCT_ID_SELECTED_FEATURE,"vec2","st"),e.addStructField(L2.STRUCT_ID_SELECTED_FEATURE,"vec4","color")}var N0=L2;var Fa={name:"GeometryPipelineStage",STRUCT_ID_PROCESSED_ATTRIBUTES_VS:"ProcessedAttributesVS",STRUCT_ID_PROCESSED_ATTRIBUTES_FS:"ProcessedAttributesFS",STRUCT_NAME_PROCESSED_ATTRIBUTES:"ProcessedAttributes",FUNCTION_ID_INITIALIZE_ATTRIBUTES:"initializeAttributes",FUNCTION_SIGNATURE_INITIALIZE_ATTRIBUTES:"void initializeAttributes(out ProcessedAttributes attributes)",FUNCTION_ID_SET_DYNAMIC_VARYINGS_VS:"setDynamicVaryingsVS",FUNCTION_ID_SET_DYNAMIC_VARYINGS_FS:"setDynamicVaryingsFS",FUNCTION_SIGNATURE_SET_DYNAMIC_VARYINGS:"void setDynamicVaryings(inout ProcessedAttributes attributes)"};Fa.process=function(e,t,n){let{shaderBuilder:i,model:o}=e;i.addStruct(Fa.STRUCT_ID_PROCESSED_ATTRIBUTES_VS,"ProcessedAttributes",pe.VERTEX),i.addStruct(Fa.STRUCT_ID_PROCESSED_ATTRIBUTES_FS,"ProcessedAttributes",pe.FRAGMENT),i.addStruct(N0.STRUCT_ID_SELECTED_FEATURE,N0.STRUCT_NAME_SELECTED_FEATURE,pe.BOTH),i.addFunction(Fa.FUNCTION_ID_INITIALIZE_ATTRIBUTES,Fa.FUNCTION_SIGNATURE_INITIALIZE_ATTRIBUTES,pe.VERTEX),i.addVarying("vec3","v_positionWC"),i.addVarying("vec3","v_positionEC"),i.addStructField(Fa.STRUCT_ID_PROCESSED_ATTRIBUTES_FS,"vec3","positionWC"),i.addStructField(Fa.STRUCT_ID_PROCESSED_ATTRIBUTES_FS,"vec3","positionEC"),i.addFunction(Fa.FUNCTION_ID_SET_DYNAMIC_VARYINGS_VS,Fa.FUNCTION_SIGNATURE_SET_DYNAMIC_VARYINGS,pe.VERTEX),i.addFunction(Fa.FUNCTION_ID_SET_DYNAMIC_VARYINGS_FS,Fa.FUNCTION_SIGNATURE_SET_DYNAMIC_VARYINGS,pe.FRAGMENT),o.type===Nr.TILE_PNTS&&i.addDefine("HAS_SRGB_COLOR",void 0,pe.FRAGMENT);let r=n.mode!==se.SCENE3D&&!n.scene3DOnly&&o._projectTo2D,s=l(e.runtimeNode.node.instances),a=r&&!s,c=t.attributes.length;for(let d=0;d<c;d++){let u=t.attributes[d],h=Ut.getAttributeLocationCount(u.type),p=u.semantic===ct.POSITION,A;h>1?(A=e.attributeIndex,e.attributeIndex+=h):p&&!a?A=0:A=e.attributeIndex++;let f=!p&&t.primitiveType===We.POINTS&&n.context.webgl2?"flat":void 0;tje(e,u,A,h,r,s,f)}dje(i,t.attributes),t.primitiveType===We.POINTS&&i.addDefine("PRIMITIVE_TYPE_POINTS"),i.addVertexLines(G2),i.addFragmentLines(V2)};function tje(e,t,n,i,o,r,s){let a=e.shaderBuilder,c=It.getAttributeInfo(t),d=o&&!r;i>1?oje(e,t,n,i):ije(e,t,n,d),sje(a,c,d),rje(a,c,s),l(t.semantic)&&nje(a,t),aje(a,c,o),cje(a,c,d),lje(a,c)}function nje(e,t){let{semantic:n,setIndex:i}=t;switch(n){case ct.NORMAL:e.addDefine("HAS_NORMALS");break;case ct.TANGENT:e.addDefine("HAS_TANGENTS");break;case ct.FEATURE_ID:e.addDefine(`HAS${n}_${i}`);break;case ct.TEXCOORD:case ct.COLOR:e.addDefine(`HAS_${n}_${i}`)}}function ije(e,t,n,i){let{quantization:o,semantic:r,setIndex:s}=t,{type:a,componentDatatype:c}=l(o)?o:t;r===ct.FEATURE_ID&&s>=e.featureIdVertexAttributeSetIndex&&(e.featureIdVertexAttributeSetIndex=s+1);let d=r===ct.POSITION,u=d?0:n,h=Ut.getNumberOfComponents(a),p={index:u,value:l(t.buffer)?void 0:t.constant,vertexBuffer:t.buffer,count:t.count,componentsPerAttribute:h,componentDatatype:c,offsetInBytes:t.byteOffset,strideInBytes:t.byteStride,normalize:t.normalized};if(e.attributes.push(p),!d||!i)return;let A=e.runtimePrimitive.positionBuffer2D,f={index:n,vertexBuffer:A,count:t.count,componentsPerAttribute:h,componentDatatype:H.FLOAT,offsetInBytes:0,strideInBytes:void 0,normalize:t.normalized};e.attributes.push(f)}function oje(e,t,n,i){let{quantization:o,normalized:r}=t,{type:s,componentDatatype:a}=l(o)?o:t,d=Ut.getNumberOfComponents(s)/i,u=H.getSizeInBytes(a),h=d*u,p=t.byteStride;for(let A=0;A<i;A++){let f=t.byteOffset+A*h,b={index:n+A,vertexBuffer:t.buffer,componentsPerAttribute:d,componentDatatype:a,offsetInBytes:f,strideInBytes:p,normalize:r};e.attributes.push(b)}}function rje(e,t,n){let i=t.variableName,o=`v_${i}`,r;i==="normalMC"?(o="v_normalEC",r=t.glslType):i==="tangentMC"?(r="vec3",o="v_tangentEC"):r=t.glslType,e.addVarying(r,o,n)}function sje(e,t,n){let i=t.attribute.semantic,o=t.variableName,r,s;t.isQuantized?(r=`a_quantized_${o}`,s=t.quantizedGlslType):(r=`a_${o}`,s=t.glslType);let a=i===ct.POSITION;a?e.setPositionAttribute(s,r):e.addAttribute(s,r),a&&n&&e.addAttribute("vec3","a_position2D")}function aje(e,t,n){let i=Fa.STRUCT_ID_PROCESSED_ATTRIBUTES_VS,o=Fa.STRUCT_ID_PROCESSED_ATTRIBUTES_FS,{variableName:r,glslType:s}=t;r==="tangentMC"?(e.addStructField(i,"vec3","tangentMC"),e.addStructField(i,"float","tangentSignMC"),e.addStructField(o,"vec3","tangentEC")):r==="normalMC"?(e.addStructField(i,"vec3","normalMC"),e.addStructField(o,"vec3","normalEC")):(e.addStructField(i,s,r),e.addStructField(o,s,r)),r==="positionMC"&&n&&e.addStructField(i,"vec3","position2D")}function cje(e,t,n){let i=Fa.FUNCTION_ID_INITIALIZE_ATTRIBUTES,o=t.variableName;if(o==="positionMC"&&n&&e.addFunctionLines(i,["attributes.position2D = a_position2D;"]),t.isQuantized)return;let s=[];o==="tangentMC"?(s.push("attributes.tangentMC = a_tangentMC.xyz;"),s.push("attributes.tangentSignMC = a_tangentMC.w;")):s.push(`attributes.${o} = a_${o};`),e.addFunctionLines(i,s)}function lje(e,t){let{semantic:n,setIndex:i}=t.attribute;if(l(n)&&!l(i))return;let o=Fa.FUNCTION_ID_SET_DYNAMIC_VARYINGS_VS,r=t.variableName,s=`v_${r} = attributes.${r};`;e.addFunctionLines(o,[s]),o=Fa.FUNCTION_ID_SET_DYNAMIC_VARYINGS_FS,s=`attributes.${r} = v_${r};`,e.addFunctionLines(o,[s])}function dje(e,t){let n=!1,i=!1;for(let o=0;o<t.length;o++){let r=t[o];r.semantic===ct.NORMAL?n=!0:r.semantic===ct.TANGENT&&(i=!0)}!n||!i||(e.addDefine("HAS_BITANGENTS"),e.addVarying("vec3","v_bitangentEC"),e.addStructField(Fa.STRUCT_ID_PROCESSED_ATTRIBUTES_VS,"vec3","bitangentMC"),e.addStructField(Fa.STRUCT_ID_PROCESSED_ATTRIBUTES_FS,"vec3","bitangentEC"))}var W2=Fa;var v9n=y(x(),1);var Dkn=y(x(),1);var NDn=y(x(),1);var VDn=y(x(),1);var xDn=y(x(),1);var xMn=y(x(),1);var GYn=y(x(),1);function P0(e){if(e=e??Q.EMPTY_OBJECT,this._ellipsoid=e.ellipsoid??ie.default,this._numberOfLevelZeroTilesX=e.numberOfLevelZeroTilesX??1,this._numberOfLevelZeroTilesY=e.numberOfLevelZeroTilesY??1,this._projection=new pi(this._ellipsoid),l(e.rectangleSouthwestInMeters)&&l(e.rectangleNortheastInMeters))this._rectangleSouthwestInMeters=e.rectangleSouthwestInMeters,this._rectangleNortheastInMeters=e.rectangleNortheastInMeters;else{let i=this._ellipsoid.maximumRadius*Math.PI;this._rectangleSouthwestInMeters=new M(-i,-i),this._rectangleNortheastInMeters=new M(i,i)}let t=this._projection.unproject(this._rectangleSouthwestInMeters),n=this._projection.unproject(this._rectangleNortheastInMeters);this._rectangle=new de(t.longitude,t.latitude,n.longitude,n.latitude)}Object.defineProperties(P0.prototype,{ellipsoid:{get:function(){return this._ellipsoid}},rectangle:{get:function(){return this._rectangle}},projection:{get:function(){return this._projection}}});P0.prototype.getNumberOfXTilesAtLevel=function(e){return this._numberOfLevelZeroTilesX<<e};P0.prototype.getNumberOfYTilesAtLevel=function(e){return this._numberOfLevelZeroTilesY<<e};P0.prototype.rectangleToNativeRectangle=function(e,t){let n=this._projection,i=n.project(de.southwest(e)),o=n.project(de.northeast(e));return l(t)?(t.west=i.x,t.south=i.y,t.east=o.x,t.north=o.y,t):new de(i.x,i.y,o.x,o.y)};P0.prototype.tileXYToNativeRectangle=function(e,t,n,i){let o=this.getNumberOfXTilesAtLevel(n),r=this.getNumberOfYTilesAtLevel(n),s=(this._rectangleNortheastInMeters.x-this._rectangleSouthwestInMeters.x)/o,a=this._rectangleSouthwestInMeters.x+e*s,c=this._rectangleSouthwestInMeters.x+(e+1)*s,d=(this._rectangleNortheastInMeters.y-this._rectangleSouthwestInMeters.y)/r,u=this._rectangleNortheastInMeters.y-t*d,h=this._rectangleNortheastInMeters.y-(t+1)*d;return l(i)?(i.west=a,i.south=h,i.east=c,i.north=u,i):new de(a,h,c,u)};P0.prototype.tileXYToRectangle=function(e,t,n,i){let o=this.tileXYToNativeRectangle(e,t,n,i),r=this._projection,s=r.unproject(new M(o.west,o.south)),a=r.unproject(new M(o.east,o.north));return o.west=s.longitude,o.south=s.latitude,o.east=a.longitude,o.north=a.latitude,o};P0.prototype.positionToTileXY=function(e,t,n){let i=this._rectangle;if(!de.contains(i,e))return;let o=this.getNumberOfXTilesAtLevel(t),r=this.getNumberOfYTilesAtLevel(t),a=(this._rectangleNortheastInMeters.x-this._rectangleSouthwestInMeters.x)/o,d=(this._rectangleNortheastInMeters.y-this._rectangleSouthwestInMeters.y)/r,h=this._projection.project(e),p=h.x-this._rectangleSouthwestInMeters.x,A=this._rectangleNortheastInMeters.y-h.y,f=p/a|0;f>=o&&(f=o-1);let b=A/d|0;return b>=r&&(b=r-1),l(n)?(n.x=f,n.y=b,n):new M(f,b)};var ws=P0;var wYn=y(x(),1);var Rj,zme="AAPTahokHpH_PEeQIduLwb1A8ZA..rA8bGH-48FscqzwJpCALUEqt2P_mHiflgl0WkBvCxPJzsFMRqAukz-mcG8oZ3eKnfk4MHGvCFMNsNrxXb2fGxfKH-3TQxCZVkCycztIPWRM5OIQ7pzTZIBOO9D7N8VXXpyPtp2bSsxWp5dUpv8qsgrfMHU4IXWGiiKWELBnANXn1QgzyLKngOHAgYWUq2OQ2XuULOpwJwOEWpyX5KvoLavJP0LFJdjB08Mmz-wCvnFqwr8CZjFpKaVSbAT1_aZs2dlMP",__={};__.defaultAccessToken=zme;__.defaultWorldImageryServer=new Le({url:"https://ibasemaps-api.arcgis.com/arcgis/rest/services/World_Imagery/MapServer"});__.defaultWorldHillshadeServer=new Le({url:"https://ibasemaps-api.arcgis.com/arcgis/rest/services/Elevation/World_Hillshade/MapServer"});__.defaultWorldOceanServer=new Le({url:"https://ibasemaps-api.arcgis.com/arcgis/rest/services/Ocean/World_Ocean_Base/MapServer"});__.getDefaultTokenCredit=function(e){if(e===zme){if(!l(Rj)){let t='<b> This application is using a default ArcGIS access token. Please assign <i>Cesium.ArcGisMapService.defaultAccessToken</i> with an API key from your ArcGIS Developer account before using the ArcGIS tile services. You can sign up for a free ArcGIS Developer account at <a href="https://developers.arcgis.com/">https://developers.arcgis.com/</a>.</b>';Rj=new Et(t,!0)}return Rj}};var mu=__;var vYn=y(x(),1);function Vj(e){e=e??Q.EMPTY_OBJECT,this._pixelsToCheck=e.pixelsToCheck,this._missingImagePixels=void 0,this._missingImageByteLength=void 0,this._isReady=!1;let t=Le.createIfNeeded(e.missingImageUrl),n=this;function i(r){l(r.blob)&&(n._missingImageByteLength=r.blob.size);let s=gh(r);if(e.disableCheckIfAllPixelsAreTransparent){let a=!0,c=r.width,d=e.pixelsToCheck;for(let u=0,h=d.length;a&&u<h;++u){let p=d[u],A=p.x*4+p.y*c;s[A+3]>0&&(a=!1)}a&&(s=void 0)}n._missingImagePixels=s,n._isReady=!0}function o(){n._missingImagePixels=void 0,n._isReady=!0}t.fetchImage({preferBlob:!0,preferImageBitmap:!0,flipY:!0}).then(i).catch(o)}Vj.prototype.isReady=function(){return this._isReady};Vj.prototype.shouldDiscardImage=function(e){let t=this._pixelsToCheck,n=this._missingImagePixels;if(!l(n)||l(e.blob)&&e.blob.size!==this._missingImageByteLength)return!1;let i=gh(e),o=e.width;for(let r=0,s=t.length;r<s;++r){let a=t[r],c=a.x*4+a.y*o;for(let d=0;d<4;++d){let u=c+d;if(i[u]!==n[u])return!1}}return!0};var F2=Vj;var kYn=y(x(),1);function Gj(){this.name=void 0,this.description=void 0,this.position=void 0,this.data=void 0,this.imageryLayer=void 0}Gj.prototype.configureNameFromProperties=function(e){let t=10,n;for(let i in e)if(e.hasOwnProperty(i)&&e[i]){let o=i.toLowerCase();t>1&&o==="name"?(t=1,n=i):t>2&&o==="title"?(t=2,n=i):t>3&&/name/i.test(i)?(t=3,n=i):t>4&&/title/i.test(i)&&(t=4,n=i)}l(n)&&(this.name=e[n])};Gj.prototype.configureDescriptionFromProperties=function(e){function t(n){let i='<table class="cesium-infoBox-defaultTable">';for(let o in n)if(n.hasOwnProperty(o)){let r=n[o];l(r)&&(typeof r=="object"?i+=`<tr><td>${o}</td><td>${t(r)}</td></tr>`:i+=`<tr><td>${o}</td><td>${r}</td></tr>`)}return i+="</table>",i}this.description=t(e)};var Hh=Gj;var KYn=y(x(),1);function I_(){fe.throwInstantiationError()}Object.defineProperties(I_.prototype,{rectangle:{get:fe.throwInstantiationError},tileWidth:{get:fe.throwInstantiationError},tileHeight:{get:fe.throwInstantiationError},maximumLevel:{get:fe.throwInstantiationError},minimumLevel:{get:fe.throwInstantiationError},tilingScheme:{get:fe.throwInstantiationError},tileDiscardPolicy:{get:fe.throwInstantiationError},errorEvent:{get:fe.throwInstantiationError},credit:{get:fe.throwInstantiationError},proxy:{get:fe.throwInstantiationError},hasAlphaChannel:{get:fe.throwInstantiationError}});I_.prototype.getTileCredits=function(e,t,n){fe.throwInstantiationError()};I_.prototype.requestImage=function(e,t,n,i){fe.throwInstantiationError()};I_.prototype.pickFeatures=function(e,t,n,i,o){fe.throwInstantiationError()};var uje=/\.ktx2$/i;I_.loadImage=function(e,t){let n=Le.createIfNeeded(t);return uje.test(n.url)?md(n):l(e)&&l(e.tileDiscardPolicy)?n.fetchImage({preferBlob:!0,preferImageBitmap:!0,flipY:!0}):n.fetchImage({preferImageBitmap:!0,flipY:!0})};var hu=I_;var qYn=y(x(),1),mje={SATELLITE:1,OCEANS:2,HILLSHADE:3},Jh=Object.freeze(mje);function Hme(e){this.useTiles=e.usePreCachedTilesIfAvailable??!0;let t=e.ellipsoid;this.tilingScheme=e.tilingScheme??new zi({ellipsoid:t}),this.rectangle=e.rectangle??this.tilingScheme.rectangle,this.ellipsoid=t;let n=e.credit;typeof n=="string"&&(n=new Et(n)),this.credit=n,this.tileCredits=void 0,this.tileDiscardPolicy=e.tileDiscardPolicy,this.tileWidth=e.tileWidth??256,this.tileHeight=e.tileHeight??256,this.maximumLevel=e.maximumLevel}Hme.prototype.build=function(e){e._useTiles=this.useTiles,e._tilingScheme=this.tilingScheme,e._rectangle=this.rectangle,e._credit=this.credit,e._tileCredits=this.tileCredits,e._tileDiscardPolicy=this.tileDiscardPolicy,e._tileWidth=this.tileWidth,e._tileHeight=this.tileHeight,e._maximumLevel=this.maximumLevel,this.useTiles&&!l(this.tileDiscardPolicy)&&(e._tileDiscardPolicy=new F2({missingImageUrl:Jme(e,0,0,this.maximumLevel).url,pixelsToCheck:[new M(0,0),new M(200,20),new M(20,200),new M(80,110),new M(160,130)],disableCheckIfAllPixelsAreTransparent:!0}))};function hje(e,t){let n=e.tileInfo;if(!l(n))t.useTiles=!1;else{if(t.tileWidth=n.rows,t.tileHeight=n.cols,n.spatialReference.wkid===102100||n.spatialReference.wkid===102113)t.tilingScheme=new ws({ellipsoid:t.ellipsoid});else if(e.tileInfo.spatialReference.wkid===4326)t.tilingScheme=new zi({ellipsoid:t.ellipsoid});else{let i=`Tile spatial reference WKID ${e.tileInfo.spatialReference.wkid} is not supported.`;throw new me(i)}if(t.maximumLevel=e.tileInfo.lods.length-1,l(e.fullExtent)){if(l(e.fullExtent.spatialReference)&&l(e.fullExtent.spatialReference.wkid))if(e.fullExtent.spatialReference.wkid===102100||e.fullExtent.spatialReference.wkid===102113){let i=new pi,o=e.fullExtent,r=i.unproject(new m(Math.max(o.xmin,-t.tilingScheme.ellipsoid.maximumRadius*Math.PI),Math.max(o.ymin,-t.tilingScheme.ellipsoid.maximumRadius*Math.PI),0)),s=i.unproject(new m(Math.min(o.xmax,t.tilingScheme.ellipsoid.maximumRadius*Math.PI),Math.min(o.ymax,t.tilingScheme.ellipsoid.maximumRadius*Math.PI),0));t.rectangle=new de(r.longitude,r.latitude,s.longitude,s.latitude)}else if(e.fullExtent.spatialReference.wkid===4326)t.rectangle=de.fromDegrees(e.fullExtent.xmin,e.fullExtent.ymin,e.fullExtent.xmax,e.fullExtent.ymax);else{let i=`fullExtent.spatialReference WKID ${e.fullExtent.spatialReference.wkid} is not supported.`;throw new me(i)}}else t.rectangle=t.tilingScheme.rectangle;t.useTiles=!0}l(e.copyrightText)&&e.copyrightText.length>0&&(l(t.credit)?t.tileCredits=[new Et(e.copyrightText)]:t.credit=new Et(e.copyrightText))}function fje(e,t){let n=`An error occurred while accessing ${e.url}`;throw l(t)&&l(t.message)&&(n+=`: ${t.message}`),new me(n)}async function pje(e,t){let n=e.getDerivedResource({queryParameters:{f:"json"}});try{let i=await n.fetchJson();hje(i,t)}catch(i){fje(e,i)}}function bp(e){e=e??Q.EMPTY_OBJECT,this._defaultAlpha=void 0,this._defaultNightAlpha=void 0,this._defaultDayAlpha=void 0,this._defaultBrightness=void 0,this._defaultContrast=void 0,this._defaultHue=void 0,this._defaultSaturation=void 0,this._defaultGamma=void 0,this._defaultMinificationFilter=void 0,this._defaultMagnificationFilter=void 0,this._tileDiscardPolicy=e.tileDiscardPolicy,this._tileWidth=e.tileWidth??256,this._tileHeight=e.tileHeight??256,this._maximumLevel=e.maximumLevel,this._tilingScheme=e.tilingScheme??new zi({ellipsoid:e.ellipsoid}),this._useTiles=e.usePreCachedTilesIfAvailable??!0,this._rectangle=e.rectangle??this._tilingScheme.rectangle,this._layers=e.layers,this._credit=e.credit,this._tileCredits=void 0;let t=e.credit;typeof t=="string"&&(t=new Et(t)),this.enablePickFeatures=e.enablePickFeatures??!0,this._errorEvent=new xe}bp.fromBasemapType=async function(e,t){t=t??Q.EMPTY_OBJECT;let n,i,o;switch(e){case Jh.SATELLITE:{n=t.token??mu.defaultAccessToken,i=Le.createIfNeeded(mu.defaultWorldImageryServer),i.appendForwardSlash();let r=mu.getDefaultTokenCredit(n);l(r)&&(o=Et.clone(r))}break;case Jh.OCEANS:{n=t.token??mu.defaultAccessToken,i=Le.createIfNeeded(mu.defaultWorldOceanServer),i.appendForwardSlash();let r=mu.getDefaultTokenCredit(n);l(r)&&(o=Et.clone(r))}break;case Jh.HILLSHADE:{n=t.token??mu.defaultAccessToken,i=Le.createIfNeeded(mu.defaultWorldHillshadeServer),i.appendForwardSlash();let r=mu.getDefaultTokenCredit(n);l(r)&&(o=Et.clone(r))}break;default:}return bp.fromUrl(i,{...t,token:n,credit:o,usePreCachedTilesIfAvailable:!0})};function Jme(e,t,n,i,o){let r;if(e._useTiles)r=e._resource.getDerivedResource({url:`tile/${i}/${n}/${t}`,request:o});else{let s=e._tilingScheme.tileXYToNativeRectangle(t,n,i),c={bbox:`${s.west},${s.south},${s.east},${s.north}`,size:`${e._tileWidth},${e._tileHeight}`,format:"png32",transparent:!0,f:"image"};e._tilingScheme.projection instanceof ki?(c.bboxSR=4326,c.imageSR=4326):(c.bboxSR=3857,c.imageSR=3857),e.layers&&(c.layers=`show:${e.layers}`),r=e._resource.getDerivedResource({url:"export",request:o,queryParameters:c})}return r}Object.defineProperties(bp.prototype,{url:{get:function(){return this._resource._url}},token:{get:function(){return this._resource.queryParameters.token}},proxy:{get:function(){return this._resource.proxy}},tileWidth:{get:function(){return this._tileWidth}},tileHeight:{get:function(){return this._tileHeight}},maximumLevel:{get:function(){return this._maximumLevel}},minimumLevel:{get:function(){return 0}},tilingScheme:{get:function(){return this._tilingScheme}},rectangle:{get:function(){return this._rectangle}},tileDiscardPolicy:{get:function(){return this._tileDiscardPolicy}},errorEvent:{get:function(){return this._errorEvent}},credit:{get:function(){return this._credit}},usingPrecachedTiles:{get:function(){return this._useTiles}},hasAlphaChannel:{get:function(){return!0}},layers:{get:function(){return this._layers}}});bp.fromUrl=async function(e,t){t=t??Q.EMPTY_OBJECT;let n=Le.createIfNeeded(e);n.appendForwardSlash(),l(t.token)&&n.setQueryParameters({token:t.token});let i=new bp(t);i._resource=n;let o=new Hme(t);return(t.usePreCachedTilesIfAvailable??!0)&&await pje(n,o),o.build(i),i};bp.prototype.getTileCredits=function(e,t,n){return this._tileCredits};bp.prototype.requestImage=function(e,t,n,i){return hu.loadImage(this,Jme(this,e,t,n,i))};bp.prototype.pickFeatures=function(e,t,n,i,o){if(!this.enablePickFeatures)return;let r=this._tilingScheme.tileXYToNativeRectangle(e,t,n),s,a,c;if(this._tilingScheme.projection instanceof ki)s=L.toDegrees(i),a=L.toDegrees(o),c="4326";else{let p=this._tilingScheme.projection.project(new Ae(i,o,0));s=p.x,a=p.y,c="3857"}let d="visible";l(this._layers)&&(d+=`:${this._layers}`);let u={f:"json",tolerance:2,geometryType:"esriGeometryPoint",geometry:`${s},${a}`,mapExtent:`${r.west},${r.south},${r.east},${r.north}`,imageDisplay:`${this._tileWidth},${this._tileHeight},96`,sr:c,layers:d};return this._resource.getDerivedResource({url:"identify",queryParameters:u}).fetchJson().then(function(p){let A=[],f=p.results;if(!l(f))return A;for(let b=0;b<f.length;++b){let C=f[b],T=new Hh;if(T.data=C,T.name=C.value,T.properties=C.attributes,T.configureDescriptionFromProperties(C.attributes),C.geometryType==="esriGeometryPoint"&&C.geometry){let E=C.geometry.spatialReference&&C.geometry.spatialReference.wkid?C.geometry.spatialReference.wkid:4326;if(E===4326||E===4283)T.position=Ae.fromDegrees(C.geometry.x,C.geometry.y,C.geometry.z);else if(E===102100||E===900913||E===3857){let S=new pi;T.position=S.unproject(new m(C.geometry.x,C.geometry.y,C.geometry.z))}}A.push(T)}return A})};bp._metadataCache={};var pg=bp;var HMn=y(x(),1);var ZMn=y(x(),1);var EMn=y(x(),1);function Aje(e){let t,n=e.name,i=e.message;l(n)&&l(i)?t=`${n}: ${i}`:t=e.toString();let o=e.stack;return l(o)&&(t+=`
${o}`),t}var yp=Aje;function jk(e,t,n,i,o,r,s){this.provider=e,this.message=t,this.x=n,this.y=i,this.level=o,this.timesRetried=r??0,this.retry=!1,this.error=s}jk.reportError=function(e,t,n,i,o,r,s,a){let c=e;return l(e)?(c.provider=t,c.message=i,c.x=o,c.y=r,c.level=s,c.retry=!1,c.error=a,++c.timesRetried):c=new jk(t,i,o,r,s,0,a),l(n)&&n.numberOfListeners>0?n.raiseEvent(c):l(t)&&console.log(`An error occurred in "${t.constructor.name}": ${yp(i)}`),c};jk.reportSuccess=function(e){l(e)&&(e.timesRetried=-1)};var qo=jk;var VMn=y(x(),1),gje={AERIAL:"Aerial",AERIAL_WITH_LABELS:"AerialWithLabels",AERIAL_WITH_LABELS_ON_DEMAND:"AerialWithLabelsOnDemand",ROAD:"Road",ROAD_ON_DEMAND:"RoadOnDemand",CANVAS_DARK:"CanvasDark",CANVAS_LIGHT:"CanvasLight",CANVAS_GRAY:"CanvasGray",ORDNANCE_SURVEY:"OrdnanceSurvey",COLLINS_BART:"CollinsBart"},Z_=Object.freeze(gje);var WMn=y(x(),1);function B2(e){}B2.prototype.isReady=function(){return!0};B2.prototype.shouldDiscardImage=function(e){return B2.EMPTY_IMAGE===e};var qk;Object.defineProperties(B2,{EMPTY_IMAGE:{get:function(){return l(qk)||(qk=new Image,qk.src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNkYAAAAAYAAjCB0C8AAAAASUVORK5CYII="),qk}}});var R_=B2;function Kme(e){this.tileWidth=void 0,this.tileHeight=void 0,this.maximumLevel=void 0,this.imageUrlSubdomains=void 0,this.imageUrlTemplate=void 0,this.attributionList=void 0}Kme.prototype.build=function(e){e._tileWidth=this.tileWidth,e._tileHeight=this.tileHeight,e._maximumLevel=this.maximumLevel,e._imageUrlSubdomains=this.imageUrlSubdomains,e._imageUrlTemplate=this.imageUrlTemplate;let t=e._attributionList=this.attributionList;t||(t=[]),e._attributionList=t;for(let n=0,i=t.length;n<i;++n){let o=t[n];if(o.credit instanceof Et)break;o.credit=new Et(o.attribution);let r=o.coverageAreas;for(let s=0,a=o.coverageAreas.length;s<a;++s){let c=r[s],d=c.bbox;c.bbox=new de(L.toRadians(d[1]),L.toRadians(d[0]),L.toRadians(d[3]),L.toRadians(d[2]))}}};function bje(e,t){if(e.resourceSets.length!==1)throw new me("metadata does not specify one resource in resourceSets");let n=e.resourceSets[0].resources[0];t.tileWidth=n.imageWidth,t.tileHeight=n.imageHeight,t.maximumLevel=n.zoomMax-1,t.imageUrlSubdomains=n.imageUrlSubdomains,t.imageUrlTemplate=n.imageUrl;let i=n.imageryProviders;l(n.imageryProviders)&&(i=n.imageryProviders.filter(o=>o.coverageAreas?.some(r=>l(r.bbox)))),t.attributionList=i}function yje(e,t,n){let i=`An error occurred while accessing ${e.url}`;throw l(t)&&l(t.message)&&(i+=`: ${t.message}`),qo.reportError(void 0,n,l(n)?n._errorEvent:void 0,i,void 0,void 0,void 0,t),new me(i)}async function xje(e,t,n){let i=e.url,o=da._metadataCache[i];l(o)||(o=e.fetchJson(),da._metadataCache[i]=o);try{let r=await o;return bje(r,t)}catch(r){yje(e,r,n)}}function da(e){e=e??Q.EMPTY_OBJECT,this._defaultAlpha=void 0,this._defaultNightAlpha=void 0,this._defaultDayAlpha=void 0,this._defaultBrightness=void 0,this._defaultContrast=void 0,this._defaultHue=void 0,this._defaultSaturation=void 0,this._defaultGamma=1,this._defaultMinificationFilter=void 0,this._defaultMagnificationFilter=void 0,this._mapStyle=e.mapStyle??Z_.AERIAL,this._mapLayer=e.mapLayer,this._culture=e.culture??"",this._key=e.key,this._tileDiscardPolicy=e.tileDiscardPolicy,l(this._tileDiscardPolicy)||(this._tileDiscardPolicy=new R_),this._proxy=e.proxy,this._credit=new Et(`<a href="https://www.microsoft.com/en-us/maps/bing-maps/product"><img src="${da.logoUrl}" title="Bing Imagery"/></a>`),this._tilingScheme=new ws({numberOfLevelZeroTilesX:2,numberOfLevelZeroTilesY:2,ellipsoid:e.ellipsoid}),this._tileWidth=void 0,this._tileHeight=void 0,this._maximumLevel=void 0,this._imageUrlTemplate=void 0,this._imageUrlSubdomains=void 0,this._attributionList=void 0,this._errorEvent=new xe}Object.defineProperties(da.prototype,{url:{get:function(){return this._resource.url}},proxy:{get:function(){return this._resource.proxy}},key:{get:function(){return this._key}},mapStyle:{get:function(){return this._mapStyle}},mapLayer:{get:function(){return this._mapLayer}},culture:{get:function(){return this._culture}},tileWidth:{get:function(){return this._tileWidth}},tileHeight:{get:function(){return this._tileHeight}},maximumLevel:{get:function(){return this._maximumLevel}},minimumLevel:{get:function(){return 0}},tilingScheme:{get:function(){return this._tilingScheme}},rectangle:{get:function(){return this._tilingScheme.rectangle}},tileDiscardPolicy:{get:function(){return this._tileDiscardPolicy}},errorEvent:{get:function(){return this._errorEvent}},credit:{get:function(){return this._credit}},hasAlphaChannel:{get:function(){return l(this.mapLayer)}}});da.fromUrl=async function(e,t){t=t??Q.EMPTY_OBJECT;let n=t.tileProtocol;l(n)?n.length>0&&n[n.length-1]===":"&&(n=n.substr(0,n.length-1)):n=document.location.protocol==="http:"?"http":"https";let i=t.mapStyle??Z_.AERIAL,o=Le.createIfNeeded(e);o.appendForwardSlash();let r={incl:"ImageryProviders",key:t.key,uriScheme:n};l(t.mapLayer)&&(r.mapLayer=t.mapLayer),l(t.culture)&&(r.culture=t.culture);let s=o.getDerivedResource({url:`REST/v1/Imagery/Metadata/${i}`,queryParameters:r}),a=new da(t);a._resource=o;let c=new Kme(t);return await xje(s,c),c.build(a),a};var Cje=new de;da.prototype.getTileCredits=function(e,t,n){let i=this._tilingScheme.tileXYToRectangle(e,t,n,Cje);return Sje(this._attributionList,n,i)};da.prototype.requestImage=function(e,t,n,i){let o=hu.loadImage(this,Tje(this,e,t,n,i));if(l(o))return o.catch(function(r){return l(r.blob)&&r.blob.size===0?R_.EMPTY_IMAGE:Promise.reject(r)})};da.prototype.pickFeatures=function(e,t,n,i,o){};da.tileXYToQuadKey=function(e,t,n){let i="";for(let o=n;o>=0;--o){let r=1<<o,s=0;(e&r)!==0&&(s|=1),(t&r)!==0&&(s|=2),i+=s}return i};da.quadKeyToTileXY=function(e){let t=0,n=0,i=e.length-1;for(let o=i;o>=0;--o){let r=1<<o,s=+e[i-o];(s&1)!==0&&(t|=r),(s&2)!==0&&(n|=r)}return{x:t,y:n,level:i}};da._logoUrl=void 0;Object.defineProperties(da,{logoUrl:{get:function(){return l(da._logoUrl)||(da._logoUrl=en("Assets/Images/bing_maps_credit.png")),da._logoUrl},set:function(e){da._logoUrl=e}}});function Tje(e,t,n,i,o){let r=e._imageUrlTemplate,s=e._imageUrlSubdomains,a=(t+n+i)%s.length;return e._resource.getDerivedResource({url:r,request:o,templateValues:{quadkey:da.tileXYToQuadKey(t,n,i),subdomain:s[a],culture:e._culture},queryParameters:{n:"z"}})}var Eje=new de;function Sje(e,t,n){++t;let i=[];for(let o=0,r=e.length;o<r;++o){let s=e[o],a=s.coverageAreas,c=!1;for(let d=0,u=s.coverageAreas.length;!c&&d<u;++d){let h=a[d];if(t>=h.zoomMin&&t<=h.zoomMax){let p=de.intersection(n,h.bbox,Eje);l(p)&&(c=!0)}}c&&i.push(s.credit)}return i}da._metadataCache={};var w2=da;var _vn=y(x(),1);var dvn=y(x(),1);var jme=/{[^}]+}/g,qme={x:Rje,y:Gje,z:Fje,s:Bje,reverseX:Vje,reverseY:Lje,reverseZ:Wje,westDegrees:wje,southDegrees:Nje,eastDegrees:Pje,northDegrees:Xje,westProjected:Yje,southProjected:Mje,eastProjected:vje,northProjected:Uje,width:Dje,height:kje},_je=Ft(qme,{i:Qje,j:Oje,reverseI:zje,reverseJ:Hje,longitudeDegrees:Kje,latitudeDegrees:jje,longitudeProjected:qje,latitudeProjected:$je,format:t4e});function N2(e){e=e??Q.EMPTY_OBJECT,this._errorEvent=new xe;let t=Le.createIfNeeded(e.url),n=Le.createIfNeeded(e.pickFeaturesUrl);this._resource=t,this._urlSchemeZeroPadding=e.urlSchemeZeroPadding,this._getFeatureInfoFormats=e.getFeatureInfoFormats,this._pickFeaturesResource=n;let i=e.subdomains;Array.isArray(i)?i=i.slice():l(i)&&i.length>0?i=i.split(""):i=["a","b","c"],this._subdomains=i,this._tileWidth=e.tileWidth??256,this._tileHeight=e.tileHeight??256,this._minimumLevel=e.minimumLevel??0,this._maximumLevel=e.maximumLevel,this._tilingScheme=e.tilingScheme??new ws({ellipsoid:e.ellipsoid}),this._rectangle=e.rectangle??this._tilingScheme.rectangle,this._rectangle=de.intersection(this._rectangle,this._tilingScheme.rectangle),this._tileDiscardPolicy=e.tileDiscardPolicy;let o=e.credit;typeof o=="string"&&(o=new Et(o)),this._credit=o,this._hasAlphaChannel=e.hasAlphaChannel??!0;let r=e.customTags,s=Ft(qme,r),a=Ft(_je,r);this._tags=s,this._pickFeaturesTags=a,this._defaultAlpha=void 0,this._defaultNightAlpha=void 0,this._defaultDayAlpha=void 0,this._defaultBrightness=void 0,this._defaultContrast=void 0,this._defaultHue=void 0,this._defaultSaturation=void 0,this._defaultGamma=void 0,this._defaultMinificationFilter=void 0,this._defaultMagnificationFilter=void 0,this.enablePickFeatures=e.enablePickFeatures??!0}Object.defineProperties(N2.prototype,{url:{get:function(){return this._resource.url}},urlSchemeZeroPadding:{get:function(){return this._urlSchemeZeroPadding}},pickFeaturesUrl:{get:function(){return this._pickFeaturesResource.url}},proxy:{get:function(){return this._resource.proxy}},tileWidth:{get:function(){return this._tileWidth}},tileHeight:{get:function(){return this._tileHeight}},maximumLevel:{get:function(){return this._maximumLevel}},minimumLevel:{get:function(){return this._minimumLevel}},tilingScheme:{get:function(){return this._tilingScheme}},rectangle:{get:function(){return this._rectangle}},tileDiscardPolicy:{get:function(){return this._tileDiscardPolicy}},errorEvent:{get:function(){return this._errorEvent}},credit:{get:function(){return this._credit}},hasAlphaChannel:{get:function(){return this._hasAlphaChannel}}});N2.prototype.getTileCredits=function(e,t,n){};N2.prototype.requestImage=function(e,t,n,i){return hu.loadImage(this,Ije(this,e,t,n,i))};N2.prototype.pickFeatures=function(e,t,n,i,o){if(!this.enablePickFeatures||!l(this._pickFeaturesResource)||this._getFeatureInfoFormats.length===0)return;let r=0,s=this;function a(d,u){return d.callback(u)}function c(){if(r>=s._getFeatureInfoFormats.length)return Promise.resolve([]);let d=s._getFeatureInfoFormats[r],u=Zje(s,e,t,n,i,o,d.format);return++r,d.type==="json"?u.fetchJson().then(d.callback).catch(c):d.type==="xml"?u.fetchXML().then(d.callback).catch(c):d.type==="text"||d.type==="html"?u.fetchText().then(d.callback).catch(c):u.fetch({responseType:d.format}).then(a.bind(void 0,d)).catch(c)}return c()};var $k=!1,fu=new de,e9=!1,P2=new de;function Ije(e,t,n,i,o){$k=!1,e9=!1;let r=e._resource,s=r.getUrlComponent(!0),a=e._tags,c={},d=s.match(jme);return l(d)&&d.forEach(function(u){let h=u.substring(1,u.length-1);l(a[h])&&(c[h]=a[h](e,t,n,i))}),r.getDerivedResource({request:o,templateValues:c})}var Lj=!1,G_=new M,Wj=!1;function Zje(e,t,n,i,o,r,s){$k=!1,e9=!1,Lj=!1,Wj=!1;let a=e._pickFeaturesResource,c=a.getUrlComponent(!0),d=e._pickFeaturesTags,u={},h=c.match(jme);return l(h)&&h.forEach(function(p){let A=p.substring(1,p.length-1);l(d[A])&&(u[A]=d[A](e,t,n,i,o,r,s))}),a.getDerivedResource({templateValues:u})}function L_(e,t,n){if(e&&e.urlSchemeZeroPadding&&e.urlSchemeZeroPadding.hasOwnProperty(t)){let i=e.urlSchemeZeroPadding[t];if(typeof i=="string"){let o=i.length;o>1&&(n=n.length>=o?n:new Array(o-n.toString().length+1).join("0")+n)}}return n}function Rje(e,t,n,i){return L_(e,"{x}",t)}function Vje(e,t,n,i){let o=e.tilingScheme.getNumberOfXTilesAtLevel(i)-t-1;return L_(e,"{reverseX}",o)}function Gje(e,t,n,i){return L_(e,"{y}",n)}function Lje(e,t,n,i){let o=e.tilingScheme.getNumberOfYTilesAtLevel(i)-n-1;return L_(e,"{reverseY}",o)}function Wje(e,t,n,i){let o=e.maximumLevel,r=l(o)&&i<o?o-i-1:i;return L_(e,"{reverseZ}",r)}function Fje(e,t,n,i){return L_(e,"{z}",i)}function Bje(e,t,n,i){let o=(t+n+i)%e._subdomains.length;return e._subdomains[o]}function t9(e,t,n,i){$k||(e.tilingScheme.tileXYToRectangle(t,n,i,fu),fu.west=L.toDegrees(fu.west),fu.south=L.toDegrees(fu.south),fu.east=L.toDegrees(fu.east),fu.north=L.toDegrees(fu.north),$k=!0)}function wje(e,t,n,i){return t9(e,t,n,i),fu.west}function Nje(e,t,n,i){return t9(e,t,n,i),fu.south}function Pje(e,t,n,i){return t9(e,t,n,i),fu.east}function Xje(e,t,n,i){return t9(e,t,n,i),fu.north}function n9(e,t,n,i){e9||(e.tilingScheme.tileXYToNativeRectangle(t,n,i,P2),e9=!0)}function Yje(e,t,n,i){return n9(e,t,n,i),P2.west}function Mje(e,t,n,i){return n9(e,t,n,i),P2.south}function vje(e,t,n,i){return n9(e,t,n,i),P2.east}function Uje(e,t,n,i){return n9(e,t,n,i),P2.north}function Dje(e,t,n,i){return e.tileWidth}function kje(e,t,n,i){return e.tileHeight}function Qje(e,t,n,i,o,r,s){return i9(e,t,n,i,o,r),G_.x}function Oje(e,t,n,i,o,r,s){return i9(e,t,n,i,o,r),G_.y}function zje(e,t,n,i,o,r,s){return i9(e,t,n,i,o,r),e.tileWidth-G_.x-1}function Hje(e,t,n,i,o,r,s){return i9(e,t,n,i,o,r),e.tileHeight-G_.y-1}var Jje=new de,V_=new m;function i9(e,t,n,i,o,r,s){if(Lj)return;Fj(e,t,n,i,o,r);let a=V_,c=e.tilingScheme.tileXYToNativeRectangle(t,n,i,Jje);G_.x=e.tileWidth*(a.x-c.west)/c.width|0,G_.y=e.tileHeight*(c.north-a.y)/c.height|0,Lj=!0}function Kje(e,t,n,i,o,r,s){return L.toDegrees(o)}function jje(e,t,n,i,o,r,s){return L.toDegrees(r)}function qje(e,t,n,i,o,r,s){return Fj(e,t,n,i,o,r),V_.x}function $je(e,t,n,i,o,r,s){return Fj(e,t,n,i,o,r),V_.y}var e4e=new Ae;function Fj(e,t,n,i,o,r,s){if(!Wj){if(e.tilingScheme.projection instanceof ki)V_.x=L.toDegrees(o),V_.y=L.toDegrees(r);else{let a=e4e;a.longitude=o,a.latitude=r,e.tilingScheme.projection.project(a,V_)}Wj=!0}}function t4e(e,t,n,i,o,r,s){return s}var hs=N2;function Zm(e){hs.call(this,e)}Zm._requestMetadata=async function(e,t,n,i){try{let o=await n.fetchXML();return Zm._metadataSuccess(o,e,t,n,i)}catch(o){if(o instanceof Kf)return Zm._metadataFailure(e,t);throw o}};Zm.fromUrl=async function(e,t){let n=Le.createIfNeeded(e);n.appendForwardSlash();let i=n,o=n.getDerivedResource({url:"tilemapresource.xml"});t=t??Q.EMPTY_OBJECT;let r=await Zm._requestMetadata(t,i,o);return new Zm(r)};l(Object.create)&&(Zm.prototype=Object.create(hs.prototype),Zm.prototype.constructor=Zm);function $me(e,t){return e.west<t.rectangle.west&&(e.west=t.rectangle.west),e.east>t.rectangle.east&&(e.east=t.rectangle.east),e.south<t.rectangle.south&&(e.south=t.rectangle.south),e.north>t.rectangle.north&&(e.north=t.rectangle.north),e}function ehe(e,t,n){let i=e.positionToTileXY(de.southwest(t),n),o=e.positionToTileXY(de.northeast(t),n);return(Math.abs(o.x-i.x)+1)*(Math.abs(o.y-i.y)+1)>4?0:n}Zm._metadataSuccess=function(e,t,n,i,o){let r=/tileformat/i,s=/tileset/i,a=/tilesets/i,c=/boundingbox/i,d,u,h,p=[],A=e.childNodes[0].childNodes;for(let B=0;B<A.length;B++)if(r.test(A.item(B).nodeName))d=A.item(B);else if(a.test(A.item(B).nodeName)){h=A.item(B);let N=A.item(B).childNodes;for(let P=0;P<N.length;P++)s.test(N.item(P).nodeName)&&p.push(N.item(P))}else c.test(A.item(B).nodeName)&&(u=A.item(B));let f;if(!l(h)||!l(u))throw f=`Unable to find expected tilesets or bbox attributes in ${i.url}.`,l(o)&&qo.reportError(void 0,o,o.errorEvent,f),new me(f);let b=t.fileExtension??d.getAttribute("extension"),C=t.tileWidth??parseInt(d.getAttribute("width"),10),T=t.tileHeight??parseInt(d.getAttribute("height"),10),E=t.minimumLevel??parseInt(p[0].getAttribute("order"),10),S=t.maximumLevel??parseInt(p[p.length-1].getAttribute("order"),10),I=h.getAttribute("profile"),R=t.tilingScheme;if(!l(R))if(I==="geodetic"||I==="global-geodetic")R=new zi({ellipsoid:t.ellipsoid});else if(I==="mercator"||I==="global-mercator")R=new ws({ellipsoid:t.ellipsoid});else throw f=`${i.url} specifies an unsupported profile attribute, ${I}.`,l(o)&&qo.reportError(void 0,o,o.errorEvent,f),new me(f);let V=de.clone(t.rectangle);if(!l(V)){let B,N,P,g;t.flipXY??!1?(P=new M(parseFloat(u.getAttribute("miny")),parseFloat(u.getAttribute("minx"))),g=new M(parseFloat(u.getAttribute("maxy")),parseFloat(u.getAttribute("maxx")))):(P=new M(parseFloat(u.getAttribute("minx")),parseFloat(u.getAttribute("miny"))),g=new M(parseFloat(u.getAttribute("maxx")),parseFloat(u.getAttribute("maxy"))));let Z=I==="geodetic"||I==="mercator";if(R.projection instanceof ki||Z)B=Ae.fromDegrees(P.x,P.y),N=Ae.fromDegrees(g.x,g.y);else{let G=R.projection;B=G.unproject(P),N=G.unproject(g)}V=new de(B.longitude,B.latitude,N.longitude,N.latitude)}return V=$me(V,R),E=ehe(R,V,E),{url:n.getDerivedResource({url:`{z}/{x}/{reverseY}.${b}`}),tilingScheme:R,rectangle:V,tileWidth:C,tileHeight:T,minimumLevel:E,maximumLevel:S,tileDiscardPolicy:t.tileDiscardPolicy,credit:t.credit}};Zm._metadataFailure=function(e,t){let n=e.fileExtension??"png",i=e.tileWidth??256,o=e.tileHeight??256,r=e.maximumLevel,s=l(e.tilingScheme)?e.tilingScheme:new ws({ellipsoid:e.ellipsoid}),a=e.rectangle??s.rectangle;a=$me(a,s);let c=ehe(s,a,e.minimumLevel);return{url:t.getDerivedResource({url:`{z}/{x}/{reverseY}.${n}`}),tilingScheme:s,rectangle:a,tileWidth:i,tileHeight:o,minimumLevel:c,maximumLevel:r,tileDiscardPolicy:e.tileDiscardPolicy,credit:e.credit}};var X0=Zm;var Xvn=y(x(),1);function the(e){this.channel=e.channel,this.ellipsoid=e.ellipsoid,this.tilingScheme=void 0,this.version=void 0}the.prototype.build=function(e){e._channel=this.channel,e._version=this.version,e._tilingScheme=this.tilingScheme};function n4e(e,t){let n;try{n=JSON.parse(e)}catch{n=JSON.parse(e.replace(/([\[\{,])[\n\r ]*([A-Za-z0-9]+)[\n\r ]*:/g,'$1"$2":'))}let i;for(let o=0;o<n.layers.length;o++)if(n.layers[o].id===t.channel){i=n.layers[o];break}if(!l(i)){let o=`Could not find layer with channel (id) of ${t.channel}.`;throw new me(o)}if(!l(i.version)){let o=`Could not find a version in channel (id) ${t.channel}.`;throw new me(o)}if(t.version=i.version,l(n.projection)&&n.projection==="flat")t.tilingScheme=new zi({numberOfLevelZeroTilesX:2,numberOfLevelZeroTilesY:2,rectangle:new de(-Math.PI,-Math.PI,Math.PI,Math.PI),ellipsoid:t.ellipsoid});else if(!l(n.projection)||n.projection==="mercator")t.tilingScheme=new ws({numberOfLevelZeroTilesX:2,numberOfLevelZeroTilesY:2,ellipsoid:t.ellipsoid});else{let o=`Unsupported projection ${n.projection}.`;throw new me(o)}return!0}function i4e(e,t,n){let i=`An error occurred while accessing ${t.url}.`;throw l(e)&&l(e.message)&&(i+=`: ${e.message}`),qo.reportError(void 0,n,l(n)?n._errorEvent:void 0,i),new me(i)}async function o4e(e,t,n){try{let i=await e.fetchText();n4e(i,t)}catch(i){i4e(i,e,n)}}function Id(e){e=e??{},this._defaultAlpha=void 0,this._defaultNightAlpha=void 0,this._defaultDayAlpha=void 0,this._defaultBrightness=void 0,this._defaultContrast=void 0,this._defaultHue=void 0,this._defaultSaturation=void 0,this._defaultGamma=1.9,this._defaultMinificationFilter=void 0,this._defaultMagnificationFilter=void 0,this._tileDiscardPolicy=e.tileDiscardPolicy,this._channel=e.channel,this._requestType="ImageryMaps",this._credit=new Et(`<a href="http://www.google.com/enterprise/mapsearth/products/earthenterprise.html"><img src="${Id.logoUrl}" title="Google Imagery"/></a>`),this._tilingScheme=void 0,this._version=void 0,this._tileWidth=256,this._tileHeight=256,this._maximumLevel=e.maximumLevel,this._errorEvent=new xe}Object.defineProperties(Id.prototype,{url:{get:function(){return this._url}},path:{get:function(){return this._path}},proxy:{get:function(){return this._resource.proxy}},channel:{get:function(){return this._channel}},tileWidth:{get:function(){return this._tileWidth}},tileHeight:{get:function(){return this._tileHeight}},maximumLevel:{get:function(){return this._maximumLevel}},minimumLevel:{get:function(){return 0}},tilingScheme:{get:function(){return this._tilingScheme}},version:{get:function(){return this._version}},requestType:{get:function(){return this._requestType}},rectangle:{get:function(){return this._tilingScheme.rectangle}},tileDiscardPolicy:{get:function(){return this._tileDiscardPolicy}},errorEvent:{get:function(){return this._errorEvent}},credit:{get:function(){return this._credit}},hasAlphaChannel:{get:function(){return!0}}});Id.fromUrl=async function(e,t,n){n=n??{};let i=n.path??"/default_map",o=Le.createIfNeeded(e).getDerivedResource({url:i[0]==="/"?i.substring(1):i});o.appendForwardSlash();let r=o.getDerivedResource({url:"query",queryParameters:{request:"Json",vars:"geeServerDefs",is2d:"t"}}),s=new the(n);s.channel=t,await o4e(r,s);let a=new Id(n);return s.build(a),a._resource=o,a._url=e,a._path=i,a};Id.prototype.getTileCredits=function(e,t,n){};Id.prototype.requestImage=function(e,t,n,i){let o=this._resource.getDerivedResource({url:"query",request:i,queryParameters:{request:this._requestType,channel:this._channel,version:this._version,x:e,y:t,z:n+1}});return hu.loadImage(this,o)};Id.prototype.pickFeatures=function(e,t,n,i,o){};Id._logoUrl=void 0;Object.defineProperties(Id,{logoUrl:{get:function(){return l(Id._logoUrl)||(Id._logoUrl=en("Assets/Images/google_earth_credit.png")),Id._logoUrl},set:function(e){Id._logoUrl=e}}});var X2=Id;var Qvn=y(x(),1);var r4e=/\/$/,nhe=new Et('&copy; <a href="https://www.mapbox.com/about/maps/">Mapbox</a> &copy; <a href="http://www.openstreetmap.org/copyright">OpenStreetMap</a> <strong><a href="https://www.mapbox.com/map-feedback/">Improve this map</a></strong>');function W_(e){e=e??Q.EMPTY_OBJECT;let t=e.mapId,n=e.accessToken;this._defaultAlpha=void 0,this._defaultNightAlpha=void 0,this._defaultDayAlpha=void 0,this._defaultBrightness=void 0,this._defaultContrast=void 0,this._defaultHue=void 0,this._defaultSaturation=void 0,this._defaultGamma=void 0,this._defaultMinificationFilter=void 0,this._defaultMagnificationFilter=void 0;let i=Le.createIfNeeded(e.url??"https://{s}.tiles.mapbox.com/v4/");this._mapId=t,this._accessToken=n;let o=e.format??"png";/\./.test(o)||(o=`.${o}`),this._format=o;let r=i.getUrlComponent();r4e.test(r)||(r+="/"),r+=`${t}/{z}/{x}/{y}${this._format}`,i.url=r,i.setQueryParameters({access_token:n});let s;l(e.credit)?(s=e.credit,typeof s=="string"&&(s=new Et(s))):s=nhe,this._resource=i,this._imageryProvider=new hs({url:i,credit:s,ellipsoid:e.ellipsoid,minimumLevel:e.minimumLevel,maximumLevel:e.maximumLevel,rectangle:e.rectangle})}Object.defineProperties(W_.prototype,{url:{get:function(){return this._imageryProvider.url}},rectangle:{get:function(){return this._imageryProvider.rectangle}},tileWidth:{get:function(){return this._imageryProvider.tileWidth}},tileHeight:{get:function(){return this._imageryProvider.tileHeight}},maximumLevel:{get:function(){return this._imageryProvider.maximumLevel}},minimumLevel:{get:function(){return this._imageryProvider.minimumLevel}},tilingScheme:{get:function(){return this._imageryProvider.tilingScheme}},tileDiscardPolicy:{get:function(){return this._imageryProvider.tileDiscardPolicy}},errorEvent:{get:function(){return this._imageryProvider.errorEvent}},credit:{get:function(){return this._imageryProvider.credit}},proxy:{get:function(){return this._imageryProvider.proxy}},hasAlphaChannel:{get:function(){return this._imageryProvider.hasAlphaChannel}}});W_.prototype.getTileCredits=function(e,t,n){};W_.prototype.requestImage=function(e,t,n,i){return this._imageryProvider.requestImage(e,t,n,i)};W_.prototype.pickFeatures=function(e,t,n,i,o){return this._imageryProvider.pickFeatures(e,t,n,i,o)};W_._defaultCredit=nhe;var Y2=W_;var iUn=y(x(),1);function ZC(e){e=e??Q.EMPTY_OBJECT,this._defaultAlpha=void 0,this._defaultNightAlpha=void 0,this._defaultDayAlpha=void 0,this._defaultBrightness=void 0,this._defaultContrast=void 0,this._defaultHue=void 0,this._defaultSaturation=void 0,this._defaultGamma=void 0,this._defaultMinificationFilter=void 0,this._defaultMagnificationFilter=void 0;let t=e.rectangle??de.MAX_VALUE,n=new zi({rectangle:t,numberOfLevelZeroTilesX:1,numberOfLevelZeroTilesY:1,ellipsoid:e.ellipsoid});this._tilingScheme=n,this._image=void 0,this._texture=void 0,this._hasError=!1,this._errorEvent=new xe;let i=e.credit;typeof i=="string"&&(i=new Et(i)),this._credit=i;let o=Le.createIfNeeded(e.url);this._resource=o,this._tileWidth=e.tileWidth,this._tileHeight=e.tileHeight}Object.defineProperties(ZC.prototype,{url:{get:function(){return this._resource.url}},proxy:{get:function(){return this._resource.proxy}},tileWidth:{get:function(){return this._tileWidth}},tileHeight:{get:function(){return this._tileHeight}},maximumLevel:{get:function(){return 0}},minimumLevel:{get:function(){return 0}},tilingScheme:{get:function(){return this._tilingScheme}},rectangle:{get:function(){return this._tilingScheme.rectangle}},tileDiscardPolicy:{get:function(){}},errorEvent:{get:function(){return this._errorEvent}},credit:{get:function(){return this._credit}},hasAlphaChannel:{get:function(){return!0}}});function s4e(e,t,n,i){let o=`Failed to load image ${e.url}`;l(t)&&l(t.message)&&(o+=`: ${t.message}`);let r=qo.reportError(i,n,l(n)?n._errorEvent:void 0,o,0,0,0,t);if(r.retry)return Bj(e,n,r);throw l(n)&&(n._hasError=!0),new me(o)}async function Bj(e,t,n){try{return await hu.loadImage(null,e)}catch(i){return s4e(e,i,t,n)}}ZC.fromUrl=async function(e,t){let n=Le.createIfNeeded(e),i=await Bj(n);t=t??Q.EMPTY_OBJECT;let o=new ZC({...t,url:e,tileWidth:i.width,tileHeight:i.height});return o._image=i,o};ZC.prototype.getTileCredits=function(e,t,n){};ZC.prototype.requestImage=async function(e,t,n,i){if(!this._hasError&&!l(this._image)){let o=await Bj(this._resource,this);return this._image=o,qo.reportSuccess(this._errorEvent),o}return this._image};ZC.prototype.pickFeatures=function(e,t,n,i,o){};var M2=ZC;var ZUn=y(x(),1);var lUn=y(x(),1);function a4e(e,t,n){this.type=e,l(t)||(e==="json"?t="application/json":e==="xml"?t="text/xml":e==="html"?t="text/html":e==="text"&&(t="text/plain")),this.format=t,l(n)||(e==="json"?n=c4e:e==="xml"?n=m4e:(e==="html"||e==="text")&&(n=ihe)),this.callback=n}function c4e(e){let t=[],n=e.features;for(let i=0;i<n.length;++i){let o=n[i],r=new Hh;if(r.data=o,r.properties=o.properties,r.configureNameFromProperties(o.properties),r.configureDescriptionFromProperties(o.properties),l(o.geometry)&&o.geometry.type==="Point"){let s=o.geometry.coordinates[0],a=o.geometry.coordinates[1];r.position=Ae.fromDegrees(s,a)}t.push(r)}return t}var wj="http://www.mapinfo.com/mxp",l4e="http://www.esri.com/wms",d4e="http://www.opengis.net/wfs",u4e="http://www.opengis.net/gml";function m4e(e){let t=e.documentElement;if(t.localName==="MultiFeatureCollection"&&t.namespaceURI===wj)return h4e(e);if(t.localName==="FeatureInfoResponse"&&t.namespaceURI===l4e)return f4e(e);if(t.localName==="FeatureCollection"&&t.namespaceURI===d4e)return p4e(e);if(t.localName==="ServiceExceptionReport")throw new me(new XMLSerializer().serializeToString(t));return t.localName==="msGMLOutput"?A4e(e):g4e(e)}function h4e(e){let t=[],i=e.documentElement.getElementsByTagNameNS(wj,"Feature");for(let o=0;o<i.length;++o){let r=i[o],s={},a=r.getElementsByTagNameNS(wj,"Val");for(let d=0;d<a.length;++d){let u=a[d];if(u.hasAttribute("ref")){let h=u.getAttribute("ref"),p=u.textContent.trim();s[h]=p}}let c=new Hh;c.data=r,c.properties=s,c.configureNameFromProperties(s),c.configureDescriptionFromProperties(s),t.push(c)}return t}function f4e(e){let t=e.documentElement,n=[],i,o=t.getElementsByTagNameNS("*","FIELDS");if(o.length>0)for(let r=0;r<o.length;++r){let s=o[r];i={};let a=s.attributes;for(let c=0;c<a.length;++c){let d=a[c];i[d.name]=d.value}n.push(o9(s,i))}else{let r=t.getElementsByTagNameNS("*","FeatureInfo");for(let s=0;s<r.length;++s){let a=r[s];i={};let c=a.childNodes;for(let d=0;d<c.length;++d){let u=c[d];u.nodeType===Node.ELEMENT_NODE&&(i[u.localName]=u.textContent)}n.push(o9(a,i))}}return n}function p4e(e){let t=[],i=e.documentElement.getElementsByTagNameNS(u4e,"featureMember");for(let o=0;o<i.length;++o){let r=i[o],s={};Nj(r,s),t.push(o9(r,s))}return t}function A4e(e){let t=[],n,i=e.documentElement.childNodes;for(let r=0;r<i.length;r++)if(i[r].nodeType===Node.ELEMENT_NODE){n=i[r];break}if(!l(n))throw new me("Unable to find first child of the feature info xml document");let o=n.childNodes;for(let r=0;r<o.length;++r){let s=o[r];if(s.nodeType===Node.ELEMENT_NODE){let a={};Nj(s,a),t.push(o9(s,a))}}return t}function Nj(e,t){let n=!0;for(let i=0;i<e.childNodes.length;++i){let o=e.childNodes[i];o.nodeType===Node.ELEMENT_NODE&&(n=!1),!(o.localName==="Point"||o.localName==="LineString"||o.localName==="Polygon"||o.localName==="boundedBy")&&o.hasChildNodes()&&Nj(o,t)&&(t[o.localName]=o.textContent)}return n}function o9(e,t){let n=new Hh;return n.data=e,n.properties=t,n.configureNameFromProperties(t),n.configureDescriptionFromProperties(t),n}function g4e(e){let t=new XMLSerializer().serializeToString(e),n=document.createElement("div"),i=document.createElement("pre");i.textContent=t,n.appendChild(i);let o=new Hh;return o.data=e,o.description=n.innerHTML,[o]}var b4e=/<body>\s*<\/body>/im,y4e=/<ServiceExceptionReport([\s\S]*)<\/ServiceExceptionReport>/im,x4e=/<title>([\s\S]*)<\/title>/im;function ihe(e){if(b4e.test(e)||y4e.test(e))return;let t,n=x4e.exec(e);n&&n.length>1&&(t=n[1]);let i=new Hh;return i.name=t,i.description=e,i.data=e,[i]}var Kh=a4e;var AUn=y(x(),1);function v2(e){e=e??Q.EMPTY_OBJECT,this._tileCache={},this._tilesRequestedForInterval=[];let t=this._clock=e.clock;this._times=e.times,this._requestImageFunction=e.requestImageFunction,this._reloadFunction=e.reloadFunction,this._currentIntervalIndex=-1,t.onTick.addEventListener(this._clockOnTick,this),this._clockOnTick(t)}Object.defineProperties(v2.prototype,{clock:{get:function(){return this._clock},set:function(e){this._clock!==e&&(this._clock=e,this._clockOnTick(e),this._reloadFunction())}},times:{get:function(){return this._times},set:function(e){this._times!==e&&(this._times=e,this._clockOnTick(this._clock),this._reloadFunction())}},currentInterval:{get:function(){return this._times.get(this._currentIntervalIndex)}}});v2.prototype.getFromCache=function(e,t,n,i){let o=ohe(e,t,n),r,s=this._tileCache[this._currentIntervalIndex];if(l(s)&&l(s[o])){let a=s[o];r=a.promise.catch(function(c){throw i.state=a.request.state,c}),delete s[o]}return r};v2.prototype.checkApproachingInterval=function(e,t,n,i){let o=ohe(e,t,n),r=this._tilesRequestedForInterval,s=rhe(this),a={key:o,priorityFunction:i.priorityFunction};(!l(s)||!she(this,a,s))&&r.push(a),r.length>=512&&r.splice(0,256)};v2.prototype._clockOnTick=function(e){let t=e.currentTime,i=this._times.indexOf(t),o=this._currentIntervalIndex;if(i!==o){let s=this._tileCache[o];for(let a in s)s.hasOwnProperty(a)&&s[a].request.cancel();delete this._tileCache[o],this._tilesRequestedForInterval=[],this._currentIntervalIndex=i,this._reloadFunction();return}let r=rhe(this);if(l(r)){let s=this._tilesRequestedForInterval,a=!0;for(;a&&s.length!==0;){let c=s.pop();a=she(this,c,r),a||s.push(c)}}};function ohe(e,t,n){return`${e}-${t}-${n}`}function C4e(e){let t=e.split("-");if(t.length===3)return{x:Number(t[0]),y:Number(t[1]),level:Number(t[2])}}function rhe(e){let t=e._times;if(!l(t))return;let n=e._clock,i=n.currentTime,o=n.canAnimate&&n.shouldAnimate,r=n.multiplier;if(!o&&r!==0)return;let s,a=t.indexOf(i);if(a<0)return;let c=t.get(a);return r>0?(s=q.secondsDifference(c.stop,i),++a):(s=q.secondsDifference(c.start,i),--a),s/=r,a>=0&&s<=5?t.get(a):void 0}function she(e,t,n){let i=e._times.indexOf(n.start),o=e._tileCache,r=o[i];l(r)||(r=o[i]={});let s=t.key;if(l(r[s]))return!0;let a=C4e(s),c=new Tr({throttle:!1,throttleByServer:!0,type:Ds.IMAGERY,priorityFunction:t.priorityFunction}),d=e._requestImageFunction(a.x,a.y,a.level,c,n);return l(d)?(r[s]={promise:d,request:c},!0):!1}var RC=v2;var T4e=[3034,3035,3042,3043,3044],E4e=[4471,4559];function jh(e){if(e=e??Q.EMPTY_OBJECT,l(e.times)&&!l(e.clock))throw new fe("options.times was specified, so options.clock is required.");this._defaultAlpha=void 0,this._defaultNightAlpha=void 0,this._defaultDayAlpha=void 0,this._defaultBrightness=void 0,this._defaultContrast=void 0,this._defaultHue=void 0,this._defaultSaturation=void 0,this._defaultGamma=void 0,this._defaultMinificationFilter=void 0,this._defaultMagnificationFilter=void 0,this._getFeatureInfoUrl=e.getFeatureInfoUrl??e.url;let t=Le.createIfNeeded(e.url),n=Le.createIfNeeded(this._getFeatureInfoUrl);t.setQueryParameters(jh.DefaultParameters,!0),n.setQueryParameters(jh.GetFeatureInfoDefaultParameters,!0),l(e.parameters)&&t.setQueryParameters(ahe(e.parameters,e.toLowerCase)),l(e.getFeatureInfoParameters)&&n.setQueryParameters(ahe(e.getFeatureInfoParameters,e.toLowerCase));let i=this;this._reload=void 0,l(e.times)&&(this._timeDynamicImagery=new RC({clock:e.clock,times:e.times,requestImageFunction:function(s,a,c,d,u){return che(i,s,a,c,d,u)},reloadFunction:function(){l(i._reload)&&i._reload()}}));let o={};if(o.layers=e.layers,o.bbox="{westProjected},{southProjected},{eastProjected},{northProjected}",o.width="{width}",o.height="{height}",parseFloat(t.queryParameters.version)>=1.3){o.crs=e.crs??(e.tilingScheme&&e.tilingScheme.projection instanceof pi?"EPSG:3857":"CRS:84");let s=o.crs.split(":");if(s[0]==="EPSG"&&s.length===2){let a=Number(s[1]);(a>=4e3&&a<5e3&&!E4e.includes(a)||T4e.includes(a))&&(o.bbox="{southProjected},{westProjected},{northProjected},{eastProjected}")}}else o.srs=e.srs??(e.tilingScheme&&e.tilingScheme.projection instanceof pi?"EPSG:3857":"EPSG:4326");t.setQueryParameters(o,!0),n.setQueryParameters(o,!0);let r={query_layers:e.layers,info_format:"{format}"};parseFloat(n.queryParameters.version)>=1.3?(r.i="{i}",r.j="{j}"):(r.x="{i}",r.y="{j}"),n.setQueryParameters(r,!0),this._resource=t,this._pickFeaturesResource=n,this._layers=e.layers,this._tileProvider=new hs({url:t,pickFeaturesUrl:n,tilingScheme:e.tilingScheme??new zi({ellipsoid:e.ellipsoid}),rectangle:e.rectangle,tileWidth:e.tileWidth,tileHeight:e.tileHeight,minimumLevel:e.minimumLevel,maximumLevel:e.maximumLevel,subdomains:e.subdomains,tileDiscardPolicy:e.tileDiscardPolicy,credit:e.credit,getFeatureInfoFormats:e.getFeatureInfoFormats??jh.DefaultGetFeatureInfoFormats,enablePickFeatures:e.enablePickFeatures})}function che(e,t,n,i,o,r){let s=l(r)?r.data:void 0,a=e._tileProvider;return l(s)&&a._resource.setQueryParameters(s),a.requestImage(t,n,i,o)}function S4e(e,t,n,i,o,r,s){let a=l(s)?s.data:void 0,c=e._tileProvider;return l(a)&&c._pickFeaturesResource.setQueryParameters(a),c.pickFeatures(t,n,i,o,r)}Object.defineProperties(jh.prototype,{url:{get:function(){return this._resource._url}},proxy:{get:function(){return this._resource.proxy}},layers:{get:function(){return this._layers}},tileWidth:{get:function(){return this._tileProvider.tileWidth}},tileHeight:{get:function(){return this._tileProvider.tileHeight}},maximumLevel:{get:function(){return this._tileProvider.maximumLevel}},minimumLevel:{get:function(){return this._tileProvider.minimumLevel}},tilingScheme:{get:function(){return this._tileProvider.tilingScheme}},rectangle:{get:function(){return this._tileProvider.rectangle}},tileDiscardPolicy:{get:function(){return this._tileProvider.tileDiscardPolicy}},errorEvent:{get:function(){return this._tileProvider.errorEvent}},credit:{get:function(){return this._tileProvider.credit}},hasAlphaChannel:{get:function(){return this._tileProvider.hasAlphaChannel}},enablePickFeatures:{get:function(){return this._tileProvider.enablePickFeatures},set:function(e){this._tileProvider.enablePickFeatures=e}},clock:{get:function(){return this._timeDynamicImagery.clock},set:function(e){this._timeDynamicImagery.clock=e}},times:{get:function(){return this._timeDynamicImagery.times},set:function(e){this._timeDynamicImagery.times=e}},getFeatureInfoUrl:{get:function(){return this._getFeatureInfoUrl}}});jh.prototype.getTileCredits=function(e,t,n){return this._tileProvider.getTileCredits(e,t,n)};jh.prototype.requestImage=function(e,t,n,i){let o,r=this._timeDynamicImagery,s;return l(r)&&(s=r.currentInterval,o=r.getFromCache(e,t,n,i)),l(o)||(o=che(this,e,t,n,i,s)),l(o)&&l(r)&&r.checkApproachingInterval(e,t,n,i),o};jh.prototype.pickFeatures=function(e,t,n,i,o){let r=this._timeDynamicImagery,s=l(r)?r.currentInterval:void 0;return S4e(this,e,t,n,i,o,s)};jh.DefaultParameters=Object.freeze({service:"WMS",version:"1.1.1",request:"GetMap",styles:"",format:"image/jpeg"});jh.GetFeatureInfoDefaultParameters=Object.freeze({service:"WMS",version:"1.1.1",request:"GetFeatureInfo"});jh.DefaultGetFeatureInfoFormats=Object.freeze([Object.freeze(new Kh("json","application/json")),Object.freeze(new Kh("xml","text/xml")),Object.freeze(new Kh("text","text/html"))]);function ahe(e,t=!0){if(t){let n={};for(let i in e)e.hasOwnProperty(i)&&(n[i.toLowerCase()]=e[i]);return n}return e}var U2=jh;var XUn=y(x(),1);function pu(e){e=e??Q.EMPTY_OBJECT,this._defaultAlpha=void 0,this._defaultNightAlpha=void 0,this._defaultDayAlpha=void 0,this._defaultBrightness=void 0,this._defaultContrast=void 0,this._defaultHue=void 0,this._defaultSaturation=void 0,this._defaultGamma=void 0,this._defaultMinificationFilter=void 0,this._defaultMagnificationFilter=void 0,this._getFeatureInfoUrl=e.getFeatureInfoUrl??e.url;let t=Le.createIfNeeded(e.url),n=Le.createIfNeeded(this._getFeatureInfoUrl),i=e.style,o=e.tileMatrixSetID,r=t.url,s=e.format??"image/jpeg",a=r.match(/{/g);if(!l(a)||a.length===1&&/{s}/.test(r)?(t.setQueryParameters(pu.DefaultParameters,!0),this._useKvp=!0):(t.setTemplateValues(pu.DefaultParameters,!0),this._useKvp=!1),this._useKvp){n.setQueryParameters(pu.GetFeatureInfoDefaultParameters,!0),l(e.getFeatureInfoParameters)&&n.setQueryParameters(lhe(e.getFeatureInfoParameters));let u={infoformat:"{format}",i:"{i}",j:"{j}"};n.setQueryParameters(u,!0)}else n.setTemplateValues(pu.GetFeatureInfoDefaultParameters,!0),l(e.getFeatureInfoParameters)&&n.setTemplateValues(lhe(e.getFeatureInfoParameters));this._resource=t,this._tileMatrixLabels=e.tileMatrixLabels,this._format=s,this._dimensions=e.dimensions,this._tilematrixset=o;let c={};c.tilematrix="{TileMatrix}",c.layer=e.layer,c.style=i,c.tilerow="{TileRow}",c.tilecol="{TileCol}",c.tilematrixset=o,this._useKvp?(t.setQueryParameters(c,!0),t.setQueryParameters({format:s},!0),n.setQueryParameters({format:s},!0),n.setQueryParameters(c,!0)):(c.Style=i,t.setTemplateValues(c),t.setTemplateValues({format:s}),n.setTemplateValues(c));let d=this;this._reload=void 0,l(e.times)&&(this._timeDynamicImagery=new RC({clock:e.clock,times:e.times,requestImageFunction:function(u,h,p,A,f){return dhe(d,u,h,p,A,f)},reloadFunction:function(){l(d._reload)&&d._reload()}})),this._errorEvent=new xe,this._tileProvider=new hs({url:t,pickFeaturesUrl:n,tilingScheme:e.tilingScheme??new ws({ellipsoid:e.ellipsoid}),rectangle:e.rectangle,tileWidth:e.tileWidth,tileHeight:e.tileHeight,minimumLevel:e.minimumLevel,maximumLevel:e.maximumLevel,subdomains:e.subdomains,tileDiscardPolicy:e.tileDiscardPolicy,credit:e.credit,getFeatureInfoFormats:e.getFeatureInfoFormats??pu.DefaultGetFeatureInfoFormats,enablePickFeatures:e.enablePickFeatures??(this._useKvp||l(e.getFeatureInfoUrl)),customTags:I4e(this)})}function dhe(e,t,n,i,o,r){let s=e._tileProvider;return uhe(e,s._resource,r),s.requestImage(t,n,i,o)}function _4e(e,t,n,i,o,r,s){let a=e._tileProvider;return uhe(e,a._pickFeaturesResource,s),a.pickFeatures(t,n,i,o,r)}Object.defineProperties(pu.prototype,{url:{get:function(){return this._resource.url}},proxy:{get:function(){return this._resource.proxy}},tileWidth:{get:function(){return this._tileProvider.tileWidth}},tileHeight:{get:function(){return this._tileProvider.tileHeight}},maximumLevel:{get:function(){return this._tileProvider.maximumLevel}},minimumLevel:{get:function(){return this._tileProvider.minimumLevel}},tilingScheme:{get:function(){return this._tileProvider.tilingScheme}},rectangle:{get:function(){return this._tileProvider.rectangle}},tileDiscardPolicy:{get:function(){return this._tileProvider.tileDiscardPolicy}},errorEvent:{get:function(){return this._tileProvider.errorEvent}},format:{get:function(){return this._format}},credit:{get:function(){return this._tileProvider.credit}},hasAlphaChannel:{get:function(){return!0}},enablePickFeatures:{get:function(){return this._tileProvider.enablePickFeatures},set:function(e){this._tileProvider.enablePickFeatures=e}},clock:{get:function(){return this._timeDynamicImagery.clock},set:function(e){this._timeDynamicImagery.clock=e}},times:{get:function(){return this._timeDynamicImagery.times},set:function(e){this._timeDynamicImagery.times=e}},dimensions:{get:function(){return this._dimensions},set:function(e){this._dimensions!==e&&(this._dimensions=e,l(this._reload)&&this._reload())}},getFeatureInfoUrl:{get:function(){return this._getFeatureInfoUrl}}});pu.prototype.getTileCredits=function(e,t,n){return this._tileProvider.getTileCredits(e,t,n)};pu.prototype.requestImage=function(e,t,n,i){let o,r=this._timeDynamicImagery,s;return l(r)&&(s=r.currentInterval,o=r.getFromCache(e,t,n,i)),l(o)||(o=dhe(this,e,t,n,i,s)),l(o)&&l(r)&&r.checkApproachingInterval(e,t,n,i),o};pu.prototype.pickFeatures=function(e,t,n,i,o){let r=this._timeDynamicImagery,s=l(r)?r.currentInterval:void 0;return _4e(this,e,t,n,i,o,s)};pu.DefaultParameters=Object.freeze({service:"WMTS",version:"1.0.0",request:"GetTile"});pu.GetFeatureInfoDefaultParameters=Object.freeze({service:"WMTS",version:"1.0.0",request:"GetFeatureInfo"});pu.DefaultGetFeatureInfoFormats=Object.freeze([Object.freeze(new Kh("json","application/json")),Object.freeze(new Kh("xml","text/xml")),Object.freeze(new Kh("text","text/html"))]);function uhe(e,t,n){let i=e._dimensions,o=l(n)?n.data:void 0;if(!e._useKvp)l(i)&&t.setTemplateValues(i),l(o)&&t.setTemplateValues(o);else{let r={};l(i)&&(r=Ft(r,i)),l(o)&&(r=Ft(r,o)),t.setQueryParameters(r)}}function I4e(e){function t(n){let i=e._tileMatrixLabels;return l(i)?i[n]:n.toString()}return{TileMatrix:function(n,i,o,r){return t(r)},tilematrix:function(n,i,o,r){return t(r)},TileRow:function(n,i,o){return o.toString()},tilerow:function(n,i,o){return o.toString()},TileCol:function(n,i,o){return i.toString()},tilecol:function(n,i,o){return i.toString()},TileMatrixSet:function(n){return e._tilematrixset},tilematrixset:function(n){return e._tilematrixset}}}function lhe(e){let t={};for(let n in e)e.hasOwnProperty(n)&&(t[n.toLowerCase()]=e[n]);return t}var D2=pu;var qUn=y(x(),1);var UUn=y(x(),1);var F_={};F_.defaultApiKey=void 0;F_.mapTilesApiEndpoint=new Le({url:"https://tile.googleapis.com/"});F_.defaultStreetViewStaticApiKey=void 0;F_.streetViewStaticApiEndpoint=new Le({url:"https://maps.googleapis.com/maps/api/streetview"});F_.getDefaultCredit=function(){return new Et('<img alt="Google" src="https://assets.ion.cesium.com/google-credit.png" style="vertical-align:-6px">',!0)};var ua=F_;var mhe=/\/$/;function Ag(e){e=e??Q.EMPTY_OBJECT,this._maximumLevel=e.maximumLevel??22,this._minimumLevel=e.minimumLevel??0,this._session=e.session,this._key=e.key,this._tileWidth=e.tileWidth,this._tileHeight=e.tileHeight;let t=e.url instanceof cs?e.url:Le.createIfNeeded(e.url??ua.mapTilesApiEndpoint),n=t.getUrlComponent();mhe.test(n)||(n+="/");let i=`${n}v1/2dtiles/{z}/{x}/{y}`;this._viewportUrl=`${n}tile/v1/viewport`,t.url=i,t.setQueryParameters({session:encodeURIComponent(e.session),key:encodeURIComponent(e.key)}),this._resource=t.clone();let o;l(e.credit)&&(o=e.credit,typeof o=="string"&&(o=new Et(o)));let r=new hs({url:t,credit:o,tileWidth:e.tileWidth,tileHeight:e.tileHeight,ellipsoid:e.ellipsoid,rectangle:e.rectangle,maximumLevel:this._maximumLevel,minimumLevel:this._minimumLevel});r._resource=t,this._imageryProvider=r,this._tileCredits=t.credits,this._attributionsByLevel=void 0}Object.defineProperties(Ag.prototype,{url:{get:function(){return this._imageryProvider.url}},rectangle:{get:function(){return this._imageryProvider.rectangle}},tileWidth:{get:function(){return this._imageryProvider.tileWidth}},tileHeight:{get:function(){return this._imageryProvider.tileHeight}},maximumLevel:{get:function(){return this._imageryProvider.maximumLevel}},minimumLevel:{get:function(){return this._imageryProvider.minimumLevel}},tilingScheme:{get:function(){return this._imageryProvider.tilingScheme}},tileDiscardPolicy:{get:function(){return this._imageryProvider.tileDiscardPolicy}},errorEvent:{get:function(){return this._imageryProvider.errorEvent}},credit:{get:function(){return this._imageryProvider.credit}},proxy:{get:function(){return this._imageryProvider.proxy}},hasAlphaChannel:{get:function(){return this._imageryProvider.hasAlphaChannel}}});Ag.fromIonAssetId=async function(e){e=e??{},e.mapType=e.mapType??"satellite",e.language=e.language??"en_US",e.region=e.region??"US";let t=e.overlayLayerType,n=hhe(e),i=cs._createEndpointResource(e.assetId,{queryParameters:{options:JSON.stringify(n)}}),o={language:e.language,region:e.region,ellipsoid:e.ellipsoid,minimumLevel:e.minimumLevel,maximumLevel:e.maximumLevel,rectangle:e.rectangle,credit:e.credit},r=await i.fetchJson(),s=r.options.url;return delete r.options.url,r.options={...r.options,...o},Pj(s,r,i)};Ag.fromUrl=async function(e){e=e??{},e.mapType=e.mapType??"satellite",e.language=e.language??"en_US",e.region=e.region??"US",e.url=e.url??ua.mapTilesApiEndpoint,e.key=e.key??ua.defaultApiKey;let t=e.overlayLayerType,n=await R4e(e);return new Ag({...n,...e,credit:e.credit??ua.getDefaultCredit()})};Ag.prototype.getTileCredits=function(e,t,n){if(!l(this._attributionsByLevel)||!l(this._tileCredits))return;let o=this._attributionsByLevel.get(n);return l(this._tileCredits)?this._tileCredits.concat(o):o};Ag.prototype.requestImage=function(e,t,n,i){let o=this._imageryProvider.requestImage(e,t,n,i);if(l(o))return l(this._attributionsByLevel)?o:Promise.all([o,this.getViewportCredits()]).then(r=>r[0])};Ag.prototype.pickFeatures=function(e,t,n,i,o){};Ag.prototype.getViewportCredits=async function(){let e=this._maximumLevel,t=[];for(let o=0;o<e+1;o++)t.push(Z4e(this._resource,this._viewportUrl,o));let n=await Promise.all(t),i=new Map;for(let o=0;o<e+1;o++){let r=[],s=n[o];if(s){let a=new Et(s);r.push(a)}i.set(o,r)}return this._attributionsByLevel=i,i};async function Z4e(e,t,n){return(await e.getDerivedResource({url:t,queryParameters:{zoom:n,north:90,south:-90,east:180,west:-180},data:JSON.stringify(Q.EMPTY_OBJECT)}).fetchJson()).copyright}function hhe(e){let{mapType:t,overlayLayerType:n,styles:i}=e,o={mapType:t,overlay:!1};return t==="terrain"&&!l(n)&&(o.layerTypes=["layerRoadmap"]),l(n)&&(o.mapType="satellite",o.overlay=!0,o.layerTypes=[n]),l(i)&&(o.styles=i),o}async function R4e(e){let{language:t,region:n,key:i,url:o}=e,r=hhe(e),s=o.url??o;mhe.test(s)||(s+="/");let a=await Le.post({url:`${s}v1/createSession`,queryParameters:{key:i},data:JSON.stringify({...r,language:t,region:n})});return JSON.parse(a)}var k2=Ag;var sDn=y(x(),1);var V4e=/\/$/;function B_(e){e=e??{};let t=e.tilesetId??"microsoft.imagery";this._maximumLevel=e.maximumLevel??22,this._minimumLevel=e.minimumLevel??0,this._subscriptionKey=e.subscriptionKey??e["subscription-key"],this._tilesetId=e.tilesetId;let n=e.url instanceof cs?e.url:Le.createIfNeeded(e.url??"https://atlas.microsoft.com/"),i=n.getUrlComponent();V4e.test(i)||(i+="/");let o=`${i}map/tile`;this._viewportUrl=`${i}map/attribution`,n.url=o,n.setQueryParameters({"api-version":"2024-04-01",tilesetId:t,"subscription-key":this._subscriptionKey,zoom:"{z}",x:"{x}",y:"{y}"}),this._resource=n;let r;l(e.credit)&&(r=e.credit,typeof r=="string"&&(r=new Et(r)));let s=new hs({...e,maximumLevel:this._maximumLevel,minimumLevel:this._minimumLevel,url:n,credit:r});s._resource=n,this._imageryProvider=s,this._tileCredits=n.credits,this._attributionsByLevel=void 0}Object.defineProperties(B_.prototype,{url:{get:function(){return this._imageryProvider.url}},rectangle:{get:function(){return this._imageryProvider.rectangle}},tileWidth:{get:function(){return this._imageryProvider.tileWidth}},tileHeight:{get:function(){return this._imageryProvider.tileHeight}},maximumLevel:{get:function(){return this._imageryProvider.maximumLevel}},minimumLevel:{get:function(){return this._imageryProvider.minimumLevel}},tilingScheme:{get:function(){return this._imageryProvider.tilingScheme}},tileDiscardPolicy:{get:function(){return this._imageryProvider.tileDiscardPolicy}},errorEvent:{get:function(){return this._imageryProvider.errorEvent}},credit:{get:function(){return this._imageryProvider.credit}},proxy:{get:function(){return this._imageryProvider.proxy}},hasAlphaChannel:{get:function(){return this._imageryProvider.hasAlphaChannel}}});B_.prototype.getTileCredits=function(e,t,n){if(!l(this._attributionsByLevel)||!l(this._tileCredits))return;let o=this._attributionsByLevel.get(n);return l(this._tileCredits)?this._tileCredits.concat(o):o};B_.prototype.requestImage=function(e,t,n,i){let o=this._imageryProvider.requestImage(e,t,n,i);if(l(o))return l(this._attributionsByLevel)?o:Promise.all([o,this.getViewportCredits()]).then(r=>r[0])};B_.prototype.pickFeatures=function(e,t,n,i,o){};B_.prototype.getViewportCredits=async function(){let e=this._maximumLevel,t=[];for(let o=0;o<e+1;o++)t.push(G4e(this._resource,this._viewportUrl,this._subscriptionKey,this._tilesetId,o));let n=await Promise.all(t),i=new Map;for(let o=0;o<e+1;o++){let r=[],s=n[o].join(",");if(s){let a=new Et(s);r.push(a)}i.set(o,r)}return this._attributionsByLevel=i,i};async function G4e(e,t,n,i,o){return(await e.getDerivedResource({url:t,queryParameters:{zoom:o,bounds:"-180,-90,180,90"},data:JSON.stringify(Q.EMPTY_OBJECT)}).fetchJson()).copyrights}var Q2=B_;var L4e=async(e,t,n)=>X0.fromUrl(new cs(t,n)),W4e=async(e,{options:t})=>pg.fromUrl(e,t),F4e=async(e,{options:t})=>w2.fromUrl(e,t),B4e=async(e,{options:t})=>{let n=t.channel;return delete t.channel,X2.fromUrl(e,n,t)},w4e=async(e,{options:t})=>new Y2({url:e,...t}),N4e=async(e,{options:t})=>M2.fromUrl(e,t),P4e=async(e,{options:t})=>X0.fromUrl(e,t),X4e=async(e,{options:t})=>new hs({url:e,...t}),Y4e=async(e,{options:t})=>new U2({url:e,...t}),M4e=async(e,{options:t})=>new D2({url:e,...t}),Pj=async(e,t,n)=>{delete t.externalType,t.url=e;let i=new cs(t,n),o=(r,s)=>{delete s.externalType,s.url=e;let{options:a}=s;r.setQueryParameters({session:a.session,key:a.key})};return i.refreshCallback=o,new k2({...t.options,url:i})},v4e=async(e,t,n)=>{delete t.externalType,t.url=e;let i=new cs(t,n),o=(r,s)=>{delete s.externalType,s.url=e;let{options:a}=s;r.setQueryParameters({"subscription-key":a["subscription-key"]})};return i.refreshCallback=o,new Q2({...t.options,url:i})},U4e={ARCGIS_MAPSERVER:W4e,BING:F4e,GOOGLE_EARTH:B4e,MAPBOX:w4e,SINGLE_TILE:N4e,TMS:P4e,URL_TEMPLATE:X4e,WMS:Y4e,WMTS:M4e,GOOGLE_2D_MAPS:Pj,AZURE_MAPS:v4e,defaultFactoryCallback:L4e},w_=Object.freeze(U4e);function xp(e){e=e??Q.EMPTY_OBJECT,this._defaultAlpha=void 0,this._defaultNightAlpha=void 0,this._defaultDayAlpha=void 0,this._defaultBrightness=void 0,this._defaultContrast=void 0,this._defaultHue=void 0,this._defaultSaturation=void 0,this._defaultGamma=void 0,this._defaultMinificationFilter=void 0,this._defaultMagnificationFilter=void 0,this._tileCredits=void 0,this._errorEvent=new xe}Object.defineProperties(xp.prototype,{rectangle:{get:function(){return this._imageryProvider.rectangle}},tileWidth:{get:function(){return this._imageryProvider.tileWidth}},tileHeight:{get:function(){return this._imageryProvider.tileHeight}},maximumLevel:{get:function(){return this._imageryProvider.maximumLevel}},minimumLevel:{get:function(){return this._imageryProvider.minimumLevel}},tilingScheme:{get:function(){return this._imageryProvider.tilingScheme}},tileDiscardPolicy:{get:function(){return this._imageryProvider.tileDiscardPolicy}},errorEvent:{get:function(){return this._errorEvent}},credit:{get:function(){return this._imageryProvider.credit}},hasAlphaChannel:{get:function(){return this._imageryProvider.hasAlphaChannel}},proxy:{get:function(){}}});xp.fromAssetId=async function(e,t){t=t??Q.EMPTY_OBJECT;let n=cs._createEndpointResource(e,t),i=e.toString()+t.accessToken+t.server,o=xp._endpointCache[i];l(o)||(o=n.fetchJson(),xp._endpointCache[i]=o);let r=await o;if(r.type!=="IMAGERY")throw new me(`Cesium ion asset ${e} is not an imagery asset.`);let s=r.externalType,a=w_.defaultFactoryCallback;r=He(r,!0),r.options=r.options??{};let c=r.options?.url;if(delete t.url,l(s)&&(a=w_[s],!l(a)))throw new me(`Unrecognized Cesium ion imagery type: ${s}`);let d=await a(c,r,n),u=new xp(t);return d.errorEvent.addEventListener(function(h){h.provider=u,u._errorEvent.raiseEvent(h)}),u._tileCredits=cs.getCreditsFromEndpoint(r,n),u._imageryProvider=d,u};xp.prototype.getTileCredits=function(e,t,n){let i=this._imageryProvider.getTileCredits(e,t,n);return l(i)?this._tileCredits.concat(i):this._tileCredits};xp.prototype.requestImage=function(e,t,n,i){return this._imageryProvider.requestImage(e,t,n,i)};xp.prototype.pickFeatures=function(e,t,n,i,o){return this._imageryProvider.pickFeatures(e,t,n,i,o)};xp._endpointCache={};var Dl=xp;var LDn=y(x(),1),D4e={AERIAL:2,AERIAL_WITH_LABELS:3,ROAD:4},gg=Object.freeze(D4e);function k4e(e){e=e??Q.EMPTY_OBJECT;let t=e.style??gg.AERIAL;return Dl.fromAssetId(t)}var bg=k4e;var UDn=y(x(),1);function Ns(){fe.throwInstantiationError()}Object.defineProperties(Ns.prototype,{errorEvent:{get:fe.throwInstantiationError},credit:{get:fe.throwInstantiationError},tilingScheme:{get:fe.throwInstantiationError},hasWaterMask:{get:fe.throwInstantiationError},hasVertexNormals:{get:fe.throwInstantiationError},availability:{get:fe.throwInstantiationError}});var fhe=[];Ns.getRegularGridIndices=function(e,t){let n=fhe[e];l(n)||(fhe[e]=n=[]);let i=n[t];return l(i)||(e*t<L.SIXTY_FOUR_KILOBYTES?i=n[t]=new Uint16Array((e-1)*(t-1)*6):i=n[t]=new Uint32Array((e-1)*(t-1)*6),bhe(e,t,i,0)),i};var phe=[];Ns.getRegularGridIndicesAndEdgeIndices=function(e,t){let n=phe[e];l(n)||(phe[e]=n=[]);let i=n[t];if(!l(i)){let o=Ns.getRegularGridIndices(e,t),r=ghe(e,t),s=r.westIndicesSouthToNorth,a=r.southIndicesEastToWest,c=r.eastIndicesNorthToSouth,d=r.northIndicesWestToEast;i=n[t]={indices:o,westIndicesSouthToNorth:s,southIndicesEastToWest:a,eastIndicesNorthToSouth:c,northIndicesWestToEast:d}}return i};var Ahe=[];Ns.getRegularGridAndSkirtIndicesAndEdgeIndices=function(e,t){let n=Ahe[e];l(n)||(Ahe[e]=n=[]);let i=n[t];if(!l(i)){let o=e*t,r=(e-1)*(t-1)*6,s=e*2+t*2,a=Math.max(0,s-4)*6,c=o+s,d=r+a,u=ghe(e,t),h=u.westIndicesSouthToNorth,p=u.southIndicesEastToWest,A=u.eastIndicesNorthToSouth,f=u.northIndicesWestToEast,b=Ue.createTypedArray(c,d);bhe(e,t,b,0),Ns.addSkirtIndices(h,p,A,f,o,b,r),i=n[t]={indices:b,westIndicesSouthToNorth:h,southIndicesEastToWest:p,eastIndicesNorthToSouth:A,northIndicesWestToEast:f,indexCountWithoutSkirts:r}}return i};Ns.getSkirtVertexCount=function(e,t,n,i){return e.length+t.length+n.length+i.length};Ns.getSkirtIndexCount=function(e){return(e-4)*2*3};Ns.getSkirtIndexCountWithFilledCorners=function(e){return((e-4)*2+4)*3};Ns.addSkirtIndices=function(e,t,n,i,o,r,s){let a=o;s=r9(e,a,r,s),a+=e.length,s=r9(t,a,r,s),a+=t.length,s=r9(n,a,r,s),a+=n.length,r9(i,a,r,s)};Ns.addSkirtIndicesWithFilledCorners=function(e,t,n,i,o,r,s){Ns.addSkirtIndices(e,t,n,i,o,r,s);let a=Ns.getSkirtVertexCount(e,t,n,i),c=Ns.getSkirtIndexCount(a),d=s+c,u=e[0],h=i[0],p=n[0],A=t[0],f=o,b=f+e.length-1,C=b+1,T=C+t.length-1,E=T+1,S=E+n.length-1,I=S+1,R=I+i.length-1;r[d+0]=u,r[d+1]=f,r[d+2]=T,r[d+3]=A,r[d+4]=C,r[d+5]=S,r[d+6]=p,r[d+7]=E,r[d+8]=R,r[d+9]=h,r[d+10]=I,r[d+11]=b};function ghe(e,t){let n=new Array(t),i=new Array(e),o=new Array(t),r=new Array(e),s;for(s=0;s<e;++s)r[s]=s,i[s]=e*t-1-s;for(s=0;s<t;++s)o[s]=(s+1)*e-1,n[s]=(t-s-1)*e;return{westIndicesSouthToNorth:n,southIndicesEastToWest:i,eastIndicesNorthToSouth:o,northIndicesWestToEast:r}}function bhe(e,t,n,i){let o=0;for(let r=0;r<t-1;++r){for(let s=0;s<e-1;++s){let a=o,c=a+e,d=c+1,u=a+1;n[i++]=a,n[i++]=c,n[i++]=u,n[i++]=u,n[i++]=c,n[i++]=d,++o}++o}}function r9(e,t,n,i){let o=e[0],r=e.length;for(let s=1;s<r;++s){let a=e[s];n[i++]=o,n[i++]=a,n[i++]=t,n[i++]=t,n[i++]=a,n[i++]=t+1,o=a,++t}return i}Ns.heightmapTerrainQuality=.25;Ns.getEstimatedLevelZeroGeometricErrorForAHeightmap=function(e,t,n){return e.maximumRadius*2*Math.PI*Ns.heightmapTerrainQuality/(t*n)};Ns.prototype.requestTileGeometry=fe.throwInstantiationError;Ns.prototype.getLevelMaximumGeometricError=fe.throwInstantiationError;Ns.prototype.getTileDataAvailable=fe.throwInstantiationError;Ns.prototype.loadTileDataAvailability=fe.throwInstantiationError;var Qo=Ns;var kDn=y(x(),1),O2=`uniform sampler2D u_texture;
in vec2 v_textureCoordinates;
void main()
{
out_FragColor = texture(u_texture, v_textureCoordinates);
}
`;var ODn=y(x(),1),z2=`in vec4 position;
in float webMercatorT;
uniform vec2 u_textureDimensions;
out vec2 v_textureCoordinates;
void main()
{
v_textureCoordinates = vec2(position.x, webMercatorT);
gl_Position = czm_viewportOrthographic * (position * vec4(u_textureDimensions, 1.0, 1.0));
}
`;var $Dn=y(x(),1);var HDn=y(x(),1),Q4e={UNLOADED:0,TRANSITIONING:1,RECEIVED:2,TEXTURE_LOADED:3,READY:4,FAILED:5,INVALID:6,PLACEHOLDER:7},Qn=Object.freeze(Q4e);function N_(e,t,n,i,o){if(this.imageryLayer=e,this.x=t,this.y=n,this.level=i,this.request=void 0,i!==0){let r=t/2|0,s=n/2|0,a=i-1;this.parent=e.getImageryFromCache(r,s,a)}this.state=Qn.UNLOADED,this.imageUrl=void 0,this.image=void 0,this.texture=void 0,this.textureWebMercator=void 0,this.credits=void 0,this.referenceCount=0,!l(o)&&e.ready&&(o=e.imageryProvider.tilingScheme.tileXYToRectangle(t,n,i)),this.rectangle=o}N_.createPlaceholder=function(e){let t=new N_(e,0,0,0);return t.addReference(),t.state=Qn.PLACEHOLDER,t};N_.prototype.addReference=function(){++this.referenceCount};N_.prototype.releaseReference=function(){return--this.referenceCount,this.referenceCount===0?(this.imageryLayer.removeImageryFromCache(this),l(this.parent)&&this.parent.releaseReference(),l(this.image)&&l(this.image.destroy)&&this.image.destroy(),l(this.texture)&&this.texture.destroy(),l(this.textureWebMercator)&&this.texture!==this.textureWebMercator&&this.textureWebMercator.destroy(),he(this),0):this.referenceCount};N_.prototype.processStateMachine=function(e,t,n){this.state===Qn.UNLOADED&&!n&&(this.state=Qn.TRANSITIONING,this.imageryLayer._requestImagery(this)),this.state===Qn.RECEIVED&&(this.state=Qn.TRANSITIONING,this.imageryLayer._createTexture(e.context,this));let i=this.state===Qn.READY&&t&&!this.texture;(this.state===Qn.TEXTURE_LOADED||i)&&(this.state=Qn.TRANSITIONING,this.imageryLayer._reprojectTexture(e,this,t))};var P_=N_;var ikn=y(x(),1);function Xj(e,t,n){this.readyImagery=void 0,this.loadingImagery=e,this.textureCoordinateRectangle=t,this.textureTranslationAndScale=void 0,this.useWebMercatorT=n}Xj.prototype.freeResources=function(){l(this.readyImagery)&&this.readyImagery.releaseReference(),l(this.loadingImagery)&&this.loadingImagery.releaseReference()};Xj.prototype.processStateMachine=function(e,t,n){let i=this.loadingImagery,o=i.imageryLayer;if(i.processStateMachine(t,!this.useWebMercatorT,n),i.state===Qn.READY)return l(this.readyImagery)&&this.readyImagery.releaseReference(),this.readyImagery=this.loadingImagery,this.loadingImagery=void 0,this.textureTranslationAndScale=o._calculateTextureTranslationAndScale(e,this),!0;let r=i.parent,s;for(;l(r)&&(r.state!==Qn.READY||!this.useWebMercatorT&&!l(r.texture));)r.state!==Qn.FAILED&&r.state!==Qn.INVALID&&(s=s||r),r=r.parent;return this.readyImagery!==r&&(l(this.readyImagery)&&this.readyImagery.releaseReference(),this.readyImagery=r,l(r)&&(r.addReference(),this.textureTranslationAndScale=o._calculateTextureTranslationAndScale(e,this))),i.state===Qn.FAILED||i.state===Qn.INVALID?l(s)?(s.processStateMachine(t,!this.useWebMercatorT,n),!1):!0:!1};var X_=Xj;function Pi(e,t){this._imageryProvider=e,this._readyEvent=new xe,this._errorEvent=new xe,t=t??Q.EMPTY_OBJECT,e=e??Q.EMPTY_OBJECT,this.alpha=t.alpha??e._defaultAlpha??1,this.nightAlpha=t.nightAlpha??e._defaultNightAlpha??1,this.dayAlpha=t.dayAlpha??e._defaultDayAlpha??1,this.brightness=t.brightness??e._defaultBrightness??Pi.DEFAULT_BRIGHTNESS,this.contrast=t.contrast??e._defaultContrast??Pi.DEFAULT_CONTRAST,this.hue=t.hue??e._defaultHue??Pi.DEFAULT_HUE,this.saturation=t.saturation??e._defaultSaturation??Pi.DEFAULT_SATURATION,this.gamma=t.gamma??e._defaultGamma??Pi.DEFAULT_GAMMA,this.splitDirection=t.splitDirection??Pi.DEFAULT_SPLIT,this.minificationFilter=t.minificationFilter??e._defaultMinificationFilter??Pi.DEFAULT_MINIFICATION_FILTER,this.magnificationFilter=t.magnificationFilter??e._defaultMagnificationFilter??Pi.DEFAULT_MAGNIFICATION_FILTER,this.show=t.show??!0,this._minimumTerrainLevel=t.minimumTerrainLevel,this._maximumTerrainLevel=t.maximumTerrainLevel,this._rectangle=t.rectangle??de.MAX_VALUE,this._maximumAnisotropy=t.maximumAnisotropy,this._imageryCache={},this._skeletonPlaceholder=new X_(P_.createPlaceholder(this)),this._show=!0,this._layerIndex=-1,this._isBaseLayer=!1,this._requestImageError=void 0,this._reprojectComputeCommands=[],this.cutoutRectangle=t.cutoutRectangle,this.colorToAlpha=t.colorToAlpha,this.colorToAlphaThreshold=t.colorToAlphaThreshold??Pi.DEFAULT_APPLY_COLOR_TO_ALPHA_THRESHOLD,this._marsOptions=t.marsOptions??{},this._initByMars3D&&this._initByMars3D(e,t)}Object.defineProperties(Pi.prototype,{imageryProvider:{get:function(){return this._imageryProvider}},ready:{get:function(){return l(this._imageryProvider)}},errorEvent:{get:function(){return this._errorEvent}},readyEvent:{get:function(){return this._readyEvent}},rectangle:{get:function(){return this._rectangle}}});Pi.DEFAULT_BRIGHTNESS=1;Pi.DEFAULT_CONTRAST=1;Pi.DEFAULT_HUE=0;Pi.DEFAULT_SATURATION=1;Pi.DEFAULT_GAMMA=1;Pi.DEFAULT_SPLIT=Br.NONE;Pi.DEFAULT_MINIFICATION_FILTER=zt.LINEAR;Pi.DEFAULT_MAGNIFICATION_FILTER=li.LINEAR;Pi.DEFAULT_APPLY_COLOR_TO_ALPHA_THRESHOLD=.004;Pi.fromProviderAsync=function(e,t){let n=new Pi(void 0,t);return K4e(n,Promise.resolve(e)),n};Pi.fromWorldImagery=function(e){return e=e??Q.EMPTY_OBJECT,Pi.fromProviderAsync(bg({style:e.style}),e)};Pi.prototype.isBaseLayer=function(){return this._isBaseLayer};Pi.prototype.isDestroyed=function(){return!1};Pi.prototype.destroy=function(){return he(this)};var Che=new de,yhe=new de,Yj=new de,The=new de;Pi.prototype.getImageryRectangle=function(){let e=this._imageryProvider,t=this._rectangle;return de.intersection(e.rectangle,t)};Pi.prototype._createTileImagerySkeletons=function(e,t,n){let i=e.data;if(!l(t)||l(this._minimumTerrainLevel)&&e.level<this._minimumTerrainLevel||l(this._maximumTerrainLevel)&&e.level>this._maximumTerrainLevel)return!1;l(n)||(n=i.imagery.length);let o=this._imageryProvider;if(!this.ready)return this._skeletonPlaceholder.loadingImagery.addReference(),i.imagery.splice(n,0,this._skeletonPlaceholder),!0;let r=o.tilingScheme.projection instanceof pi&&e.rectangle.north<pi.MaximumLatitude&&e.rectangle.south>-pi.MaximumLatitude,s=de.intersection(o.rectangle,this._rectangle,Che),a=de.intersection(e.rectangle,s,yhe);if(!l(a)){if(!this.isBaseLayer())return!1;let Z=s,G=e.rectangle;a=yhe,G.south>=Z.north?a.north=a.south=Z.north:G.north<=Z.south?a.north=a.south=Z.south:(a.south=Math.max(G.south,Z.south),a.north=Math.min(G.north,Z.north)),G.west>=Z.east?a.west=a.east=Z.east:G.east<=Z.west?a.west=a.east=Z.west:(a.west=Math.max(G.west,Z.west),a.east=Math.min(G.east,Z.east))}let c=0;a.south>0?c=a.south:a.north<0&&(c=a.north);let u=1*t.getLevelMaximumGeometricError(e.level),h=H4e(this,u,c);h=Math.max(0,h);let p=o.maximumLevel;if(h>p&&(h=p),l(o.minimumLevel)){let Z=o.minimumLevel;h<Z&&(h=Z)}let A=o.tilingScheme,f=A.positionToTileXY(de.northwest(a),h),b=A.positionToTileXY(de.southeast(a),h),C=e.rectangle.width/512,T=e.rectangle.height/512,E=A.tileXYToRectangle(f.x,f.y,h);Math.abs(E.south-e.rectangle.north)<T&&f.y<b.y&&++f.y,Math.abs(E.east-e.rectangle.west)<C&&f.x<b.x&&++f.x;let S=A.tileXYToRectangle(b.x,b.y,h);Math.abs(S.north-e.rectangle.south)<T&&b.y>f.y&&--b.y,Math.abs(S.west-e.rectangle.east)<C&&b.x>f.x&&--b.x;let I=de.clone(e.rectangle,The),R=A.tileXYToRectangle(f.x,f.y,h),V=de.intersection(R,s,Yj),W;r?(A.rectangleToNativeRectangle(I,I),A.rectangleToNativeRectangle(R,R),A.rectangleToNativeRectangle(V,V),A.rectangleToNativeRectangle(s,s),W=A.tileXYToNativeRectangle.bind(A),C=I.width/512,T=I.height/512):W=A.tileXYToRectangle.bind(A);let B,N=0,P=1,g;!this.isBaseLayer()&&Math.abs(V.west-I.west)>=C&&(N=Math.min(1,(V.west-I.west)/I.width)),!this.isBaseLayer()&&Math.abs(V.north-I.north)>=T&&(P=Math.max(0,(V.north-I.south)/I.height));let _=P;for(let Z=f.x;Z<=b.x;Z++)if(B=N,R=W(Z,f.y,h),V=de.simpleIntersection(R,s,Yj),!!l(V)){N=Math.min(1,(V.east-I.west)/I.width),Z===b.x&&(this.isBaseLayer()||Math.abs(V.east-I.east)<C)&&(N=1),P=_;for(let G=f.y;G<=b.y;G++){if(g=P,R=W(Z,G,h),V=de.simpleIntersection(R,s,Yj),!l(V))continue;P=Math.max(0,(V.south-I.south)/I.height),G===b.y&&(this.isBaseLayer()||Math.abs(V.south-I.south)<T)&&(P=0);let w=new re(B,P,N,g),X=this.getImageryFromCache(Z,G,h);i.imagery.splice(n,0,new X_(X,w,r)),++n}}return!0};Pi.prototype._calculateTextureTranslationAndScale=function(e,t){let n=t.readyImagery.rectangle,i=e.rectangle;if(t.useWebMercatorT){let c=t.readyImagery.imageryLayer.imageryProvider.tilingScheme;n=c.rectangleToNativeRectangle(n,Che),i=c.rectangleToNativeRectangle(i,The)}let o=i.width,r=i.height,s=o/n.width,a=r/n.height;return new re(s*(i.west-n.west)/o,a*(i.south-n.south)/r,s,a)};Pi.prototype._requestImagery=function(e){if(l(this._minimumTerrainLevel)&&e.level<this._minimumTerrainLevel)return e.state=Qn.FAILED,e.request=void 0,!1;if(l(this._maximumTerrainLevel)&&e.level>this._maximumTerrainLevel)return e.state=Qn.FAILED,e.request=void 0,!1;let t=this._imageryProvider,n=this;function i(s){if(!l(s))return o();e.image=s,e.state=Qn.RECEIVED,e.request=void 0,qo.reportSuccess(n._requestImageError),n._marsOptions.onAddTileSuccess&&n._marsOptions.onAddTileSuccess(e)}function o(s){if(e.request.state===Ai.CANCELLED){e.state=Qn.UNLOADED,e.request=void 0;return}e.state=Qn.FAILED,e.request=void 0;let a=`\u65E0\u6CD5\u83B7\u5F97\u56FE\u5757 x:${e.x},y: ${e.y},z:${e.level}. `;t._resource&&t._resource._last_url&&(a+=t._resource._last_url),n._requestImageError=qo.reportError(n._requestImageError,t,t.errorEvent,a,e.x,e.y,e.level,s),n._requestImageError.retry&&r(),n._marsOptions.onAddTileError&&n._marsOptions.onAddTileError(e)}function r(){let s=new Tr({throttle:!1,throttleByServer:!0,type:Ds.IMAGERY});e.request=s,e.state=Qn.TRANSITIONING;let a=t.requestImage(e.x,e.y,e.level,s);if(!l(a)){e.state=Qn.UNLOADED,e.request=void 0;return}l(t.getTileCredits)&&(e.credits=t.getTileCredits(e.x,e.y,e.level)),n._marsOptions.onAddTile&&n._marsOptions.onAddTile(e),a.then?a.then(function(c){i(c)}).catch(function(c){o(c)}):i(a)}r()};Pi.prototype._createTextureWebGL=function(e,t){let n=new Ht({minificationFilter:this.minificationFilter,magnificationFilter:this.magnificationFilter}),i=t.image;return l(i.internalFormat)?new Lt({context:e,pixelFormat:i.internalFormat,width:i.width,height:i.height,source:{arrayBufferView:i.bufferView},sampler:n}):new Lt({context:e,source:i,pixelFormat:this._imageryProvider.hasAlphaChannel?Ke.RGBA:Ke.RGB,sampler:n})};Pi.prototype._createTexture=function(e,t){let n=this._imageryProvider,i=t.image;if(l(n.tileDiscardPolicy)){let r=n.tileDiscardPolicy;if(l(r)){if(!r.isReady()){t.state=Qn.RECEIVED;return}if(r.shouldDiscardImage(i)){t.state=Qn.INVALID;return}}}let o=this._createTextureWebGL(e,t);n.tilingScheme.projection instanceof pi?t.textureWebMercator=o:t.texture=o,t.image=void 0,t.state=Qn.TEXTURE_LOADED};function xhe(e,t,n){return`${e}:${t}:${n}`}Pi.prototype._finalizeReprojectTexture=function(e,t){let n=this.minificationFilter,i=this.magnificationFilter;if(n===zt.LINEAR&&i===li.LINEAR&&!Ke.isCompressedFormat(t.pixelFormat)&&L.isPowerOfTwo(t.width)&&L.isPowerOfTwo(t.height)){n=zt.LINEAR_MIPMAP_LINEAR;let r=Bt.maximumTextureFilterAnisotropy,s=Math.min(r,this._maximumAnisotropy??r),a=xhe(n,i,s),c=e.cache.imageryLayerMipmapSamplers;l(c)||(c={},e.cache.imageryLayerMipmapSamplers=c);let d=c[a];l(d)||(d=c[a]=new Ht({wrapS:gn.CLAMP_TO_EDGE,wrapT:gn.CLAMP_TO_EDGE,minificationFilter:n,magnificationFilter:i,maximumAnisotropy:s})),t.generateMipmap(lm.NICEST),t.sampler=d}else{let r=xhe(n,i,0),s=e.cache.imageryLayerNonMipmapSamplers;l(s)||(s={},e.cache.imageryLayerNonMipmapSamplers=s);let a=s[r];l(a)||(a=s[r]=new Ht({wrapS:gn.CLAMP_TO_EDGE,wrapT:gn.CLAMP_TO_EDGE,minificationFilter:n,magnificationFilter:i})),t.sampler=a}};Pi.prototype._reprojectTexture=function(e,t,n){let i=t.textureWebMercator||t.texture,o=t.rectangle,r=e.context;if(n=n??!0,n&&!(this._imageryProvider.tilingScheme.projection instanceof ki)&&o.width/i.width>1e-5){let s=this;t.addReference();let a=new yl({persists:!0,owner:this,preExecute:function(c){z4e(c,r,i,t.rectangle)},postExecute:function(c){t.texture=c,s._finalizeReprojectTexture(r,c),t.state=Qn.READY,t.releaseReference()},canceled:function(){t.state=Qn.TEXTURE_LOADED,t.releaseReference()}});this._reprojectComputeCommands.push(a)}else n&&(t.texture=i),this._finalizeReprojectTexture(r,i),t.state=Qn.READY};Pi.prototype.queueReprojectionCommands=function(e){let t=this._reprojectComputeCommands,n=t.length;for(let i=0;i<n;++i)e.commandList.push(t[i]);t.length=0};Pi.prototype.cancelReprojections=function(){this._reprojectComputeCommands.forEach(function(e){l(e.canceled)&&e.canceled()}),this._reprojectComputeCommands.length=0};Pi.prototype.getImageryFromCache=function(e,t,n,i){let o=Ehe(e,t,n),r=this._imageryCache[o];return l(r)||(r=new P_(this,e,t,n,i),this._imageryCache[o]=r),r.addReference(),r};Pi.prototype.removeImageryFromCache=function(e){this._marsOptions.onRemoveTile&&this._marsOptions.onRemoveTile(e);let t=Ehe(e.x,e.y,e.level);delete this._imageryCache[t]};function Ehe(e,t,n){return JSON.stringify([e,t,n])}var s9={u_textureDimensions:function(){return this.textureDimensions},u_texture:function(){return this.texture},textureDimensions:new M,texture:void 0},O4e=hn.supportsTypedArrays()?new Float32Array(128):void 0;function z4e(e,t,n,i){let o=t.cache.imageryLayer_reproject;if(!l(o)){o=t.cache.imageryLayer_reproject={vertexArray:void 0,shaderProgram:void 0,sampler:void 0,destroy:function(){l(this.framebuffer)&&this.framebuffer.destroy(),l(this.vertexArray)&&this.vertexArray.destroy(),l(this.shaderProgram)&&this.shaderProgram.destroy()}};let C=new Float32Array(256),T=0;for(let V=0;V<64;++V){let W=V/63;C[T++]=0,C[T++]=W,C[T++]=1,C[T++]=W}let E={position:0,webMercatorT:1},S=Qo.getRegularGridIndices(2,64),I=it.createIndexBuffer({context:t,typedArray:S,usage:Be.STATIC_DRAW,indexDatatype:Ue.UNSIGNED_SHORT});o.vertexArray=new kn({context:t,attributes:[{index:E.position,vertexBuffer:it.createVertexBuffer({context:t,typedArray:C,usage:Be.STATIC_DRAW}),componentsPerAttribute:2},{index:E.webMercatorT,vertexBuffer:it.createVertexBuffer({context:t,sizeInBytes:512,usage:Be.STREAM_DRAW}),componentsPerAttribute:1}],indexBuffer:I});let R=new ze({sources:[z2]});o.shaderProgram=tn.fromCache({context:t,vertexShaderSource:R,fragmentShaderSource:O2,attributeLocations:E}),o.sampler=new Ht({wrapS:gn.CLAMP_TO_EDGE,wrapT:gn.CLAMP_TO_EDGE,minificationFilter:zt.LINEAR,magnificationFilter:li.LINEAR})}n.sampler=o.sampler;let r=n.width,s=n.height;s9.textureDimensions.x=r,s9.textureDimensions.y=s,s9.texture=n;let a=Math.sin(i.south),c=.5*Math.log((1+a)/(1-a));a=Math.sin(i.north);let u=1/(.5*Math.log((1+a)/(1-a))-c),h=new Lt({context:t,width:r,height:s,pixelFormat:n.pixelFormat,pixelDatatype:n.pixelDatatype,preMultiplyAlpha:n.preMultiplyAlpha});L.isPowerOfTwo(r)&&L.isPowerOfTwo(s)&&h.generateMipmap(lm.NICEST);let p=i.south,A=i.north,f=O4e,b=0;for(let C=0;C<64;++C){let T=C/63,E=L.lerp(p,A,T);a=Math.sin(E);let I=(.5*Math.log((1+a)/(1-a))-c)*u;f[b++]=I,f[b++]=I}o.vertexArray.getAttribute(1).vertexBuffer.copyFromArrayView(f),e.shaderProgram=o.shaderProgram,e.outputTexture=h,e.uniformMap=s9,e.vertexArray=o.vertexArray}function H4e(e,t,n){let i=e._imageryProvider,o=i.tilingScheme,r=o.ellipsoid,s=e._imageryProvider.tilingScheme.projection instanceof ki?1:Math.cos(n),a=o.rectangle,d=r.maximumRadius*a.width*s/(i.tileWidth*o.getNumberOfXTilesAtLevel(0))/t,u=Math.log(d)/Math.log(2);return Math.round(u)|0}function J4e(e,t){e.numberOfListeners>0?e.raiseEvent(t):console.error(t)}async function K4e(e,t){let n;try{if(n=await Promise.resolve(t),e.isDestroyed())return;e._imageryProvider=n,e._readyEvent.raiseEvent(n)}catch(i){J4e(e._errorEvent,i)}}var fs=Pi;var Qkn=y(x(),1),Mj=class{constructor(){this.alpha=!1,this.brightness=!1,this.contrast=!1,this.hue=!1,this.saturation=!1,this.gamma=!1,this.colorToAlpha=!1}},H2=Mj;var I9n=y(x(),1);var qkn=y(x(),1);var zkn=y(x(),1),vj=class{constructor(t,n,i,o){this._minX=t??0,this._minY=n??0,this._maxX=i??0,this._maxY=o??0}get minX(){return this._minX}set minX(t){this._minX=t}get minY(){return this._minY}set minY(t){this._minY=t}get maxX(){return this._maxX}set maxX(t){this._maxX=t}get maxY(){return this._maxY}set maxY(t){this._maxY=t}contains(t,n){return t>=this.minX&&t<this.maxX&&n>=this.minY&&n<this.maxY}containsExclusive(t,n){return t>this.minX&&t<this.maxX&&n>this.minY&&n<this.maxY}containsInclusive(t,n){return t>=this.minX&&t<=this.maxX&&n>=this.minY&&n<=this.maxY}},Y_=vj;var j4e=new de,She=new de,q4e=new de,$4e=new de,e8e=new de,t8e=new de,Uj=class e{constructor(t,n,i,o,r){this._x=t,this._y=n,this._level=i,this._textureCoordinateRectangle=o,this._imagery=r}get x(){return this._x}get y(){return this._y}get level(){return this._level}get textureCoordinateRectangle(){return this._textureCoordinateRectangle}get imagery(){return this._imagery}static createImageryCoverages(t,n,i){if(!n.show)return[];let o=n.imageryProvider,r=e._clampImageryLevel(o,i),s=de.intersection(o.rectangle,n.rectangle,j4e),a=o.tilingScheme,c=e._computeImageryRange(t,s,a,r),d=$4e;a.rectangleToNativeRectangle(t,d);let u=e8e;a.rectangleToNativeRectangle(s,u);let h=(A,f,b)=>{let C=a.tileXYToRectangle(A,f,b),T=de.intersection(C,s,q4e);if(!l(T))return;let E=t8e;return a.rectangleToNativeRectangle(T,E),E};return e._computeImageryCoverages(n,c,r,d,h)}static _clampImageryLevel(t,n){let i=t.minimumLevel??0,o=t.maximumLevel??Number.POSITIVE_INFINITY,r=Math.min(o-1,Math.max(i,n));return Math.floor(r)}static _computeImageryRange(t,n,i,o){let r=e._computeOverlappedRectangle(t,n),s=i.positionToTileXY(de.northwest(r),o),a=i.positionToTileXY(de.southeast(r),o),c=new Y_;c.minX=s.x,c.minY=s.y,c.maxX=a.x,c.maxY=a.y;let d=t.width/512,u=t.height/512,h=i.tileXYToRectangle(c.minX,c.minY,o);Math.abs(h.south-t.north)<u&&c.minY<c.maxY&&++c.minY,Math.abs(h.east-t.west)<d&&c.minX<c.maxX&&++c.minX;let f=i.tileXYToRectangle(c.maxX,c.maxY,o);return Math.abs(f.north-t.south)<u&&c.maxY>c.minY&&--c.maxY,Math.abs(f.west-t.east)<d&&c.maxX>c.minX&&--c.maxX,c}static _clampRectangle(t,n,i){return l(i)||(i=new de),t.south>=n.north?i.north=i.south=n.north:t.north<=n.south?i.north=i.south=n.south:(i.south=Math.max(t.south,n.south),i.north=Math.min(t.north,n.north)),t.west>=n.east?i.west=i.east=n.east:t.east<=n.west?i.west=i.east=n.west:(i.west=Math.max(t.west,n.west),i.east=Math.min(t.east,n.east)),i}static _computeOverlappedRectangle(t,n){let i=de.intersection(t,n,She);return l(i)?i:e._clampRectangle(t,n,She)}static _computeImageryCoverages(t,n,i,o,r){let s=[];for(let a=n.minX;a<=n.maxX;a++){let c=r(a,n.maxY,i);if(l(c))for(let d=n.minY;d<=n.maxY;d++){let u=r(a,d,i);if(!l(u))continue;let h=e._localizeToCartesianRectangle(u,o,void 0),p=t.getImageryFromCache(a,d,i),A=new e(a,d,i,h,p);s.push(A)}}return s}static _localizeToCartesianRectangle(t,n,i){l(i)||(i=new Y_);let o=1/n.width,r=1/n.height;return i.minX=(t.west-n.west)*o,i.minY=(t.south-n.south)*r,i.maxX=(t.east-n.west)*o,i.maxY=(t.north-n.south)*r,i}},M_=Uj;var u9n=y(x(),1);var Dj=class e{static createTextureCoordinatesForMappedPositions(t,n){let i=t.cartographicPositions,o=t.cartographicBoundingRectangle,r=t.numPositions;return e._createTextureCoordinates(i,r,o,n)}static _createTextureCoordinates(t,n,i,o){let r=new nt;nt.fromRectangle(i,o,r);let s=e.createProjectedPositions(t,o),a=e.computeTexCoords(s,r);return e.createTypedArrayFromCartesians2(n,a)}static createTextureCoordinatesAttributeForMappedPositions(t,n){let i=e.createTextureCoordinatesForMappedPositions(t,n);return e.createTexCoordAttribute(i)}static createCartographicPositions(t,n,i){let o=el.readAttributeAsTypedArray(t),r=t.type,s=Ut.getNumberOfComponents(r),a=e.createIterableCartesian3FromTypedArray(o,s),c=e.transformCartesians3(a,n);return e.transformToCartographic(c,i)}static createIterableCartesian3FromTypedArray(t,n){let i=new m,o=t.length/n;return{[Symbol.iterator]:function*(){for(let s=0;s<o;s++)i.x=t[s*n+0],i.y=t[s*n+1],i.z=t[s*n+2],yield i}}}static map(t,n){return{[Symbol.iterator]:function*(){for(let o of t)yield n(o)}}}static computeCartographicBoundingRectangle(t,n){l(n)||(n=new de);let i=Number.NEGATIVE_INFINITY,o=Number.POSITIVE_INFINITY,r=Number.NEGATIVE_INFINITY,s=Number.POSITIVE_INFINITY;for(let a of t)i=Math.max(i,a.latitude),o=Math.min(o,a.latitude),r=Math.max(r,a.longitude),s=Math.min(s,a.longitude);return n.north=i,n.south=o,n.east=r,n.west=s,n}static transformCartesians3(t,n){let i=new m;return e.map(t,r=>(F.multiplyByPoint(n,r,i),i))}static transformToCartographic(t,n){let i=new Ae;return e.map(t,r=>(n.cartesianToCartographic(r,i),i))}static createProjectedPositions(t,n){let i=new m;return e.map(t,r=>(n.project(r,i),i))}static computeTexCoords(t,n){let i=new M,o=1/n.width,r=1/n.height;return e.map(t,a=>{let c=(a.x-n.x)*o,d=(a.y-n.y)*r,u=Math.min(Math.max(c,0),1),h=Math.min(Math.max(d,0),1);return i.x=u,i.y=h,i})}static createTypedArrayFromCartesians2(t,n){let i=new Float32Array(t*2),o=0;for(let r of n)i[o*2+0]=r.x,i[o*2+1]=r.y,o++;return i}static createTexCoordAttribute(t){return{name:"Imagery Texture Coordinates",semantic:ct.TEXCOORD,setIndex:0,componentDatatype:H.FLOAT,type:Ut.VEC2,normalized:!1,count:t.length/2,min:void 0,max:void 0,constant:new M(0,0),quantization:void 0,typedArray:t,byteOffset:0,byteStride:void 0}}},VC=Dj;var h9n=y(x(),1);var kj=class{constructor(t,n,i,o){this._cartographicPositions=t,this._numPositions=n,this._cartographicBoundingRectangle=i,this._ellipsoid=o}get cartographicPositions(){return this._cartographicPositions}get numPositions(){return this._numPositions}get cartographicBoundingRectangle(){return this._cartographicBoundingRectangle}get ellipsoid(){return this._ellipsoid}},J2=kj;var Qj=class e{constructor(t,n,i){this._model=t,this._runtimeNode=n,this._runtimePrimitive=i,this._mappedPositionsPerEllipsoid=void 0,this._mappedPositionsModelMatrix=new F,this._lastImageryLayersModificationCounter=0,this._imageryTexCoordAttributesPerProjection=void 0,this._currentImageryLayers=void 0,this._coveragesPerLayer=void 0,this._allImageriesReady=!1}coveragesForImageryLayer(t){let o=this._model.imageryLayers.indexOf(t);if(o===-1)throw new fe("Imagery layer is not part of the model");let r=this._coveragesPerLayer;if(!l(r))throw new fe("The coveragesPerLayer have not been computed yet");return r[o]}update(t){let n=this._model,r=n.content.tileset.imageryLayersModificationCounter;this._lastImageryLayersModificationCounter!==r&&(delete this._mappedPositionsPerEllipsoid,this._lastImageryLayersModificationCounter=r),this._mappedPositionsNeedUpdate&&(n.resetDrawCommands(),this._mappedPositionsPerEllipsoid=this._computeMappedPositionsPerEllipsoid(),this._deleteCoveragesPerLayer(),this._destroyImageryTexCoordAttributes()),l(this._imageryTexCoordAttributesPerProjection)||(this._imageryTexCoordAttributesPerProjection=this._computeImageryTexCoordsAttributesPerProjection(),this._uploadImageryTexCoordAttributes(t.context)),l(this._coveragesPerLayer)||(this._computeCoveragesPerLayer(),this._allImageriesReady=!1),this._allImageriesReady||this._updateImageries(t)}_deleteCoveragesPerLayer(){let t=this._coveragesPerLayer;if(!l(t))return;let n=this._currentImageryLayers,i=t.length;for(let o=0;o<i;o++){let r=n[o],s=t[o];this._deleteCoverages(r,s)}delete this._currentImageryLayers,delete this._coveragesPerLayer}_deleteCoverages(t,n){if(t.isDestroyed())return;let i=n.length;for(let o=0;o<i;o++)n[o].imagery.releaseReference()}_uploadImageryTexCoordAttributes(t){let n=this._imageryTexCoordAttributesPerProjection;if(!l(n))return;let i=n.length;for(let o=0;o<i;o++){let r=n[o],s=it.createVertexBuffer({context:t,typedArray:r.typedArray,usage:Be.STATIC_DRAW});s.vertexArrayDestroyable=!1,r.buffer=s}}_destroyImageryTexCoordAttributes(){let t=this._imageryTexCoordAttributesPerProjection;if(!l(t))return;let n=t.length;for(let i=0;i<n;i++){let o=t[i];l(o)&&(l(o.buffer)&&(o.buffer.isDestroyed()||o.buffer.destroy()),t[i]=void 0)}delete this._imageryTexCoordAttributesPerProjection}get _mappedPositionsNeedUpdate(){if(!l(this._mappedPositionsPerEllipsoid))return!0;let t=this._model,n=this._mappedPositionsModelMatrix;return!F.equals(t.modelMatrix,n)}_computeMappedPositionsPerEllipsoid(){let t=this._model,n=this._runtimeNode,i=this._runtimePrimitive,o=e._obtainPrimitivePositionAttribute(i.primitive),r=o.count,s=e._computePrimitivePositionTransform(t,n,void 0),a=[],c=e._computeUniqueEllipsoids(t.imageryLayers),d=c.length;for(let u=0;u<d;u++){let h=c[u],p=VC.createCartographicPositions(o,s,h),A=VC.computeCartographicBoundingRectangle(p),f=new J2(p,r,A,h);a.push(f)}return F.clone(t.modelMatrix,this._mappedPositionsModelMatrix),a}static _computeUniqueEllipsoids(t){let n=new Set,i=t.length;for(let o=0;o<i;o++){let r=t.get(o),s=e._getEllipsoid(r);n.add(s)}return[...n]}_computeImageryTexCoordsAttributesPerProjection(){let n=this._model.imageryLayers,i=e._extractProjections(n),o=[...new Set(i)];return this._createImageryTexCoordAttributes(o)}static _extractProjections(t){let n=[],i=t.length;for(let o=0;o<i;o++){let r=t.get(o),s=e._getProjection(r);n.push(s)}return n}static _getProjection(t){return t.imageryProvider.tilingScheme.projection}_createImageryTexCoordAttributes(t){let n=[],i=t.length;for(let o=0;o<i;o++){let r=t[o],s=r.ellipsoid,a=this.mappedPositionsForEllipsoid(s),c=VC.createTextureCoordinatesAttributeForMappedPositions(a,r);n.push(c)}return n}_computeCoveragesPerLayer(){let t=[],n=[],o=this._model.imageryLayers,r=o.length;for(let s=0;s<r;s++){let a=o.get(s),c=this._computeCoverage(a);t.push(c),n.push(a)}this._coveragesPerLayer=t,this._currentImageryLayers=n}_computeCoverage(t){let i=this.mappedPositionsForImageryLayer(t).cartographicBoundingRectangle,o=this._computeImageryLevel(t,i);return M_.createImageryCoverages(i,t,o)}_computeImageryLevel(t,n){let i=t.imageryProvider,r=i.tilingScheme.rectangle,s=1,a=n.width,c=r.width;n.height>n.width&&(a=n.height,c=r.height);let d=Math.log2(s*c/a);return M_._clampImageryLevel(i,d)}_updateImageries(t){let n=this._model,i=this._coveragesPerLayer,o=i.length,r=!0;for(let s=0;s<o;s++){let a=i[s],c=a.length;for(let d=0;d<c;d++){let h=a[d].imagery;h.state===Qn.READY||h.state===Qn.FAILED||h.state===Qn.INVALID||(r=!1,h.processStateMachine(t,!1,!1))}}r&&n.resetDrawCommands(),this._allImageriesReady=r}mappedPositionsForImageryLayer(t){let n=e._getEllipsoid(t);return this.mappedPositionsForEllipsoid(n)}mappedPositionsForEllipsoid(t){let n=this._mappedPositionsPerEllipsoid;if(!l(n))throw new fe("The mappedPositions have not been computed yet");let i=n.length;for(let o=0;o<i;o++){let r=n[o];if(r.ellipsoid===t)return r}throw new fe(`Could not find mapped positions for ellipsoid ${t}`)}imageryTexCoordAttributesPerProjection(){let t=this._imageryTexCoordAttributesPerProjection;if(!l(t))throw new fe("The imagery texture coordinate attributes have not been computed yet");return this._imageryTexCoordAttributesPerProjection}get ready(){let t=this._coveragesPerLayer;return l(t)?this._allImageriesReady:!1}isDestroyed(){return!1}destroy(){if(!this.isDestroyed())return this._deleteCoveragesPerLayer(),this._destroyImageryTexCoordAttributes(),he(this)}static _computePrimitivePositionTransform(t,n,i){l(i)||(i=new F);let o=t.sceneGraph;return F.clone(F.IDENTITY,i),F.multiply(i,t.modelMatrix,i),F.multiply(i,o.components.transform,i),F.multiply(i,o.axisCorrectionMatrix,i),F.multiply(i,n.computedTransform,i),i}static _obtainPrimitivePositionAttribute(t){let n=It.getAttributeBySemantic(t,"POSITION");if(!l(n))throw new fe("The primitive does not have a POSITION attribute");return n}static _getEllipsoid(t){return t.imageryProvider.tilingScheme.projection.ellipsoid}},GC=Qj;var R9n=y(x(),1),Oj=class{constructor(t,n,i,o,r){this.imageryLayer=t,this.texture=n,this.textureTranslationAndScale=i,this.textureCoordinateRectangle=o,this.imageryTexCoordAttributeSetIndex=r}},K2=Oj;var n8e=!1,i8e=new de,o8e=new de,zj=class e{static process(t,n,i){let o=t.model,r=n.modelPrimitiveImagery;if(!l(r)||!r.ready)return;let s=o.imageryLayers,a=GC._extractProjections(s),c=[...new Set(a)],d=e._computeIndexMapping(a,c),u=e._createImageryInputs(s,r,d);if(u.length===0)return;u.length>10&&(_t("imagery-texture-units",`Warning: Draped imagery requires ${u.length} texture units, truncating`),u.length=10),e._addImageryTexCoordAttributesToRenderResources(r,t);let h=[];for(let p=0;p<s.length;p++)h.push(s.get(p));e._processImageryInputs(h,t,u,c.length)}static _addImageryTexCoordAttributesToRenderResources(t,n){let i=t.imageryTexCoordAttributesPerProjection();for(let o of i)e._addImageryTexCoordAttributeToRenderResources(o,n)}static _addImageryTexCoordAttributeToRenderResources(t,n){let i=Ut.getNumberOfComponents(t.type),o={index:n.attributeIndex++,value:l(t.buffer)?void 0:t.constant,vertexBuffer:t.buffer,count:t.count,componentsPerAttribute:i,componentDatatype:t.componentDatatype,offsetInBytes:t.byteOffset,strideInBytes:t.byteStride,normalize:t.normalized};n.attributes.push(o)}static _processImageryInputs(t,n,i,o){let r=n.shaderBuilder,s=e._computeImageryFlags(t),a=i.length;r.addDefine("HAS_IMAGERY"),r.addDefine(`IMAGERY_TEXTURE_UNITS ${a}`),e._addAttributes(r,o),e._defineUniforms(r,s),e._buildSampleAndBlendFunction(r,s),e._createMainImageryShader(r,i,s);let c=n.uniformMap,d=e._createImageryUniforms(i);e._setImageryUniforms(c,d)}static _addAttributes(t,n){for(let r=0;r<n;r++)t.addAttribute("vec2",`a_imagery_texCoord_${r}`),t.addVarying("vec2",`v_imagery_texCoord_${r}`);let i="initializeImageryAttributes",o=`void ${i}()`;t.addFunction(i,o,pe.VERTEX);for(let r=0;r<n;r++)t.addFunctionLines(i,[`v_imagery_texCoord_${r} = a_imagery_texCoord_${r};`])}static _computeImageryFlags(t){let n=new H2;for(let i=0;i<t.length;i++){let o=t[i];n.alpha|=o.alpha!==1,n.brightness|=o.brightness!==fs.DEFAULT_BRIGHTNESS,n.contrast|=o.contrast!==fs.DEFAULT_CONTRAST,n.hue|=o.hue!==fs.DEFAULT_HUE,n.saturation|=o.saturation!==fs.DEFAULT_SATURATION,n.gamma|=o.gamma!==fs.DEFAULT_GAMMA;let r=l(o.colorToAlpha)&&o.colorToAlphaThreshold>0;n.colorToAlpha|=r}return n}static _defineUniforms(t,n){t.addUniform("sampler2D","u_imageryTextures[IMAGERY_TEXTURE_UNITS]",pe.FRAGMENT),t.addUniform("vec4","u_imageryTextureCoordinateRectangle[IMAGERY_TEXTURE_UNITS]",pe.FRAGMENT),t.addUniform("vec4","u_imageryTextureTranslationAndScale[IMAGERY_TEXTURE_UNITS]",pe.FRAGMENT),n.alpha&&t.addUniform("float","u_imageryTextureAlpha[IMAGERY_TEXTURE_UNITS]",pe.FRAGMENT),n.brightness&&t.addUniform("float","u_imageryTextureBrightness[IMAGERY_TEXTURE_UNITS]",pe.FRAGMENT),n.contrast&&t.addUniform("float","u_imageryTextureContrast[IMAGERY_TEXTURE_UNITS]",pe.FRAGMENT),n.hue&&t.addUniform("float","u_imageryTextureHue[IMAGERY_TEXTURE_UNITS]",pe.FRAGMENT),n.saturation&&t.addUniform("float","u_imageryTextureSaturation[IMAGERY_TEXTURE_UNITS]",pe.FRAGMENT),n.gamma&&t.addUniform("float","u_imageryTextureOneOverGamma[IMAGERY_TEXTURE_UNITS]",pe.FRAGMENT),n.colorToAlpha&&t.addUniform("vec4","u_imageryTextureColorToAlpha[IMAGERY_TEXTURE_UNITS]",pe.FRAGMENT)}static _createSampleAndBlendFunctionSignature(t){let n="sampleAndBlend",i=[];i.push("vec4 previousColor"),i.push("sampler2D textureToSample"),i.push("vec2 textureCoordinates"),i.push("vec4 textureCoordinateRectangle"),i.push("vec4 textureCoordinateTranslationAndScale"),t.alpha&&i.push("float textureAlpha"),t.brightness&&i.push("float textureBrightness"),t.contrast&&i.push("float textureContrast"),t.hue&&i.push("float textureHue"),t.saturation&&i.push("float textureSaturation"),t.gamma&&i.push("float textureOneOverGamma"),t.colorToAlpha&&i.push("vec4 colorToAlpha");let o=i.join(", ");return`vec4 ${n}(${o})`}static _buildSampleAndBlendFunction(t,n){let i="sampleAndBlend",o=e._createSampleAndBlendFunctionSignature(n);t.addFunction(i,o,pe.FRAGMENT),t.addFunctionLines(i,["float effectiveAlpha = 1.0;"]),n.alpha&&t.addFunctionLines(i,["effectiveAlpha = textureAlpha;"]),t.addFunctionLines(i,["if (textureCoordinates.x < textureCoordinateRectangle.x) effectiveAlpha = 0.0;","if (textureCoordinates.x > textureCoordinateRectangle.z) effectiveAlpha = 0.0;","if (textureCoordinates.y < textureCoordinateRectangle.y) effectiveAlpha = 0.0;","if (textureCoordinates.y > textureCoordinateRectangle.w) effectiveAlpha = 0.0;","vec2 translation = textureCoordinateTranslationAndScale.xy;","vec2 scale = textureCoordinateTranslationAndScale.zw;","vec2 effectiveTextureCoordinates = textureCoordinates * scale + translation;","vec4 value = texture(textureToSample, effectiveTextureCoordinates);","value = czm_srgbToLinear(value);","vec3 color = value.rgb;","float alpha = value.a;"]),n.colorToAlpha&&t.addFunctionLines(i,["vec3 colorDiff = abs(color.rgb - colorToAlpha.rgb);","colorDiff.r = czm_maximumComponent(colorDiff);","alpha = czm_branchFreeTernary(colorDiff.r < colorToAlpha.a, 0.0, alpha);"]),n.gamma?t.addFunctionLines(i,["color = pow(color, vec3(textureOneOverGamma));"]):t.addFunctionLines(i,["vec4 tempColor = czm_gammaCorrect(vec4(color, alpha));","color = tempColor.rgb;","alpha = tempColor.a;"]),n.brightness&&t.addFunctionLines(i,["color = mix(vec3(0.0), color, textureBrightness);"]),n.contrast&&t.addFunctionLines(i,["color = mix(vec3(0.5), color, textureContrast);"]),n.hue&&t.addFunctionLines(i,["color = czm_hue(color, textureHue);"]),n.saturation&&t.addFunctionLines(i,["color = czm_saturation(color, textureSaturation);"]),t.addFunctionLines(i,["float sourceAlpha = alpha * effectiveAlpha;","float outAlpha = mix(previousColor.a, 1.0, sourceAlpha);","outAlpha += sign(outAlpha) - 1.0;","vec3 outColor = mix(previousColor.rgb * previousColor.a, color, sourceAlpha) / outAlpha;","vec4 result = vec4(outColor, max(outAlpha, 0.0));"]),n8e&&t.addFunctionLines(i,["if (abs(textureCoordinates.x - textureCoordinateRectangle.x) < (1.0/256.0) || "," abs(textureCoordinates.x - textureCoordinateRectangle.z) < (1.0/256.0) || "," abs(textureCoordinates.y - textureCoordinateRectangle.y) < (1.0/256.0) || "," abs(textureCoordinates.y - textureCoordinateRectangle.w) < (1.0/256.0))","{"," result = vec4(1.0, 0.0, 0.0, effectiveAlpha);","}"]),t.addFunctionLines(i,["return result;"])}static _createSampleAndBlendCallArguments(t,n,i){let o=`v_imagery_texCoord_${n}`,r=[];return r.push("blendedBaseColor"),r.push(`u_imageryTextures[${i}]`),r.push(`${o}`),r.push(`u_imageryTextureCoordinateRectangle[${i}]`),r.push(`u_imageryTextureTranslationAndScale[${i}]`),t.alpha&&r.push(`u_imageryTextureAlpha[${i}]`),t.brightness&&r.push(`u_imageryTextureBrightness[${i}]`),t.contrast&&r.push(`u_imageryTextureContrast[${i}]`),t.hue&&r.push(`u_imageryTextureHue[${i}]`),t.saturation&&r.push(`u_imageryTextureSaturation[${i}]`),t.gamma&&r.push(`u_imageryTextureOneOverGamma[${i}]`),t.colorToAlpha&&r.push(`u_imageryTextureColorToAlpha[${i}]`),r.join(", ")}static _createMainImageryShader(t,n,i){let o="blendBaseColorWithImagery";t.addFunction(o,"vec4 blendBaseColorWithImagery(vec4 baseColorWithAlpha)",pe.FRAGMENT),t.addFunctionLines(o,["vec4 blendedBaseColor = baseColorWithAlpha;"]);for(let r=0;r<n.length;r++){let a=n[r].imageryTexCoordAttributeSetIndex,c=e._createSampleAndBlendCallArguments(i,a,r);t.addFunctionLines(o,[`blendedBaseColor = sampleAndBlend(${c});`])}t.addFunctionLines(o,["return blendedBaseColor;"])}static _createImageryUniforms(t){let n=t.length,i={};i.imageryTextures=Array(n),i.imageryTextureCoordinateRectangle=Array(n),i.imageryTextureTranslationAndScale=Array(n),i.imageryTextureAlpha=Array(n),i.imageryTextureBrightness=Array(n),i.imageryTextureContrast=Array(n),i.imageryTextureHue=Array(n),i.imageryTextureSaturation=Array(n),i.imageryTextureOneOverGamma=Array(n),i.imageryTextureColorToAlpha=Array(n);for(let o=0;o<n;o++){let r=t[o],s=r.imageryLayer,a=r.texture,c=r.textureCoordinateRectangle,d=r.textureTranslationAndScale;i.imageryTextures[o]=a,i.imageryTextureTranslationAndScale[o]=d,i.imageryTextureCoordinateRectangle[o]=c,i.imageryTextureAlpha[o]=s.alpha,i.imageryTextureBrightness[o]=s.brightness,i.imageryTextureContrast[o]=s.contrast,i.imageryTextureHue[o]=s.hue,i.imageryTextureSaturation[o]=s.saturation,i.imageryTextureOneOverGamma[o]=1/s.gamma;let u=i.imageryTextureColorToAlpha[o];if(l(u)||(u=new re,i.imageryTextureColorToAlpha[o]=u),l(s.colorToAlpha)&&s.colorToAlphaThreshold>0){let p=s.colorToAlpha;u.x=p.red,u.y=p.green,u.z=p.blue,u.w=s.colorToAlphaThreshold}else u.w=-1}return i}static _setImageryUniforms(t,n){for(let i in n)if(n.hasOwnProperty(i)){let o=`u_${i}`;t[o]=function(){return n[i]}}}static _createImageryInputs(t,n,i){let o=[];for(let r=0;r<t.length;r++){let s=t.get(r);if(!s.show)continue;let a=i[r],d=n.mappedPositionsForImageryLayer(s).cartographicBoundingRectangle,u=n.coveragesForImageryLayer(s);for(let h=0;h<u.length;h++){let p=u[h],A=e._createImageryInput(s,p,d,a);l(A)&&o.push(A)}}return o}static _createImageryInput(t,n,i,o){let r=n.imagery;if(r.state===Qn.FAILED||r.state===Qn.INVALID)return;let s=r.textureWebMercator;if(!l(s)&&(s=r.texture,!l(s))){r.state===Qn.READY&&console.log(`Imagery at ${n.x}, ${n.y} (level ${n.level}) does not have any texture - state ${r.state}`);return}let a=e._computeTextureTranslationAndScale(t,i,r.rectangle),c=n.textureCoordinateRectangle,d=new re(c.minX,c.minY,c.maxX,c.maxY);return new K2(t,s,a,d,o)}static _computeTextureTranslationAndScale(t,n,i){let o=t.imageryProvider.tilingScheme,r=o.rectangleToNativeRectangle(n,i8e),s=o.rectangleToNativeRectangle(i,o8e);return e._computeTextureTranslationAndScaleFromNative(r,s)}static _computeTextureTranslationAndScaleFromNative(t,n){let i=1/n.width,o=1/n.height,r=t.west-n.west,s=t.south-n.south,a=r*i,c=s*o,d=t.width*i,u=t.height*o;return new re(a,c,d,u)}static _computeIndexMapping(t,n){let i=[],o=t.length;for(let r=0;r<o;r++){let s=t[r],a=n.indexOf(s);i.push(a)}return i}},j2=zj;var j9n=y(x(),1);var D9n=y(x(),1),q2=`#ifdef USE_IBL_LIGHTING
vec3 computeIBL(vec3 position, vec3 normal, vec3 lightDirection, vec3 lightColorHdr, czm_modelMaterial material)
{
#if defined(DIFFUSE_IBL) || defined(SPECULAR_IBL)
// Environment maps were provided, use them for IBL
vec3 viewDirection = -normalize(position);
vec3 iblColor = textureIBL(viewDirection, normal, material);
return iblColor;
#endif
return vec3(0.0);
}
#endif
#ifdef USE_CLEARCOAT
vec3 addClearcoatReflection(vec3 baseLayerColor, vec3 position, vec3 lightDirection, vec3 lightColorHdr, czm_modelMaterial material)
{
vec3 viewDirection = -normalize(position);
vec3 halfwayDirection = normalize(viewDirection + lightDirection);
vec3 normal = material.clearcoatNormal;
float NdotL = clamp(dot(normal, lightDirection), 0.001, 1.0);
// clearcoatF0 = vec3(pow((ior - 1.0) / (ior + 1.0), 2.0)), but without KHR_materials_ior, ior is a constant 1.5.
vec3 f0 = vec3(0.04);
vec3 f90 = vec3(1.0);
// Note: clearcoat Fresnel computed with dot(n, v) instead of dot(v, h).
// This is to make it energy conserving with a simple layering function.
float NdotV = clamp(dot(normal, viewDirection), 0.0, 1.0);
vec3 F = fresnelSchlick2(f0, f90, NdotV);
// compute specular reflection from direct lighting
float roughness = material.clearcoatRoughness;
float alphaRoughness = roughness * roughness;
float directStrength = computeDirectSpecularStrength(normal, lightDirection, viewDirection, halfwayDirection, alphaRoughness);
vec3 directReflection = F * directStrength * NdotL;
vec3 color = lightColorHdr * directReflection;
#ifdef SPECULAR_IBL
// Find the direction in which to sample the environment map
vec3 reflectMC = normalize(model_iblReferenceFrameMatrix * reflect(-viewDirection, normal));
vec3 iblColor = computeSpecularIBL(reflectMC, NdotV, f0, roughness);
color += iblColor * material.occlusion;
#endif
float clearcoatFactor = material.clearcoatFactor;
vec3 clearcoatColor = color * clearcoatFactor;
// Dim base layer based on transmission loss through clearcoat
return baseLayerColor * (1.0 - clearcoatFactor * F) + clearcoatColor;
}
#endif
#if defined(LIGHTING_PBR) && defined(HAS_NORMALS)
vec3 computePbrLighting(in czm_modelMaterial material, in vec3 position)
{
#ifdef USE_CUSTOM_LIGHT_COLOR
vec3 lightColorHdr = model_lightColorHdr;
#else
vec3 lightColorHdr = czm_lightColorHdr;
#endif
vec3 viewDirection = -normalize(position);
vec3 normal = material.normalEC;
vec3 lightDirection = normalize(czm_lightDirectionEC);
vec3 directLighting = czm_pbrLighting(viewDirection, normal, lightDirection, material);
vec3 directColor = lightColorHdr * directLighting;
// Accumulate colors from base layer
vec3 color = directColor + material.emissive;
#ifdef USE_IBL_LIGHTING
color += computeIBL(position, normal, lightDirection, lightColorHdr, material);
#endif
#ifdef USE_CLEARCOAT
color = addClearcoatReflection(color, position, lightDirection, lightColorHdr, material);
#endif
return color;
}
#endif
/**
* Compute the material color under the current lighting conditions.
* All other material properties are passed through so further stages
* have access to them.
*
* @param {czm_modelMaterial} material The material properties from {@MaterialStageFS}
* @param {ProcessedAttributes} attributes
*/
void lightingStage(inout czm_modelMaterial material, ProcessedAttributes attributes)
{
#ifdef LIGHTING_PBR
#ifdef HAS_NORMALS
vec3 color = computePbrLighting(material, attributes.positionEC);
#else
vec3 color = material.diffuse * material.occlusion + material.emissive;
#endif
// In HDR mode, the frame buffer is in linear color space. The
// post-processing stages (see PostProcessStageCollection) will handle
// tonemapping. However, if HDR is not enabled, we must tonemap else large
// values may be clamped to 1.0
#ifndef HDR
color = czm_pbrNeutralTonemapping(color);
#endif
#else // unlit
vec3 color = material.diffuse;
#endif
#ifdef HAS_POINT_CLOUD_COLOR_STYLE
// The colors resulting from point cloud styles are adjusted differently.
color = czm_gammaCorrect(color);
#elif !defined(HDR)
// If HDR is not enabled, the frame buffer stores sRGB colors rather than
// linear colors so the linear value must be converted.
color = czm_linearToSrgb(color);
#endif
material.diffuse = color;
}
`;var Q9n=y(x(),1),r8e={UNLIT:0,PBR:1},Cp=Object.freeze(r8e);var _he={name:"LightingPipelineStage"};_he.process=function(e,t){let{model:n,lightingOptions:i,shaderBuilder:o}=e;if(l(n.lightColor)){o.addDefine("USE_CUSTOM_LIGHT_COLOR",void 0,pe.FRAGMENT),o.addUniform("vec3","model_lightColorHdr",pe.FRAGMENT);let s=e.uniformMap;s.model_lightColorHdr=function(){return n.lightColor}}let{lightingModel:r}=i;r===Cp.PBR?o.addDefine("LIGHTING_PBR",void 0,pe.FRAGMENT):o.addDefine("LIGHTING_UNLIT",void 0,pe.FRAGMENT),o.addFragmentLines(q2)};var $2=_he;var T5n=y(x(),1);var $9n=y(x(),1),eB=`// If the style color is white, it implies the feature has not been styled.
bool isDefaultStyleColor(vec3 color)
{
return all(greaterThan(color, vec3(1.0 - czm_epsilon3)));
}
vec3 blend(vec3 sourceColor, vec3 styleColor, float styleColorBlend)
{
vec3 blendColor = mix(sourceColor, styleColor, styleColorBlend);
vec3 color = isDefaultStyleColor(styleColor.rgb) ? sourceColor : blendColor;
return color;
}
#ifdef HAS_NORMAL_TEXTURE
vec2 getNormalTexCoords()
{
vec2 texCoord = TEXCOORD_NORMAL;
#ifdef HAS_NORMAL_TEXTURE_TRANSFORM
texCoord = czm_computeTextureTransform(texCoord, u_normalTextureTransform);
#endif
return texCoord;
}
#endif
#if defined(HAS_NORMAL_TEXTURE) || defined(HAS_CLEARCOAT_NORMAL_TEXTURE)
vec3 computeTangent(in vec3 position, in vec2 normalTexCoords)
{
vec2 tex_dx = dFdx(normalTexCoords);
vec2 tex_dy = dFdy(normalTexCoords);
float determinant = tex_dx.x * tex_dy.y - tex_dy.x * tex_dx.y;
vec3 tangent = tex_dy.t * dFdx(position) - tex_dx.t * dFdy(position);
return tangent / determinant;
}
#endif
#ifdef USE_ANISOTROPY
struct NormalInfo {
vec3 tangent;
vec3 bitangent;
vec3 normal;
vec3 geometryNormal;
};
NormalInfo getNormalInfo(ProcessedAttributes attributes)
{
vec3 geometryNormal = attributes.normalEC;
#ifdef HAS_NORMAL_TEXTURE
vec2 normalTexCoords = getNormalTexCoords();
#endif
#ifdef HAS_BITANGENTS
vec3 tangent = attributes.tangentEC;
vec3 bitangent = attributes.bitangentEC;
#else // Assume HAS_NORMAL_TEXTURE
vec3 tangent = computeTangent(attributes.positionEC, normalTexCoords);
tangent = normalize(tangent - geometryNormal * dot(geometryNormal, tangent));
vec3 bitangent = normalize(cross(geometryNormal, tangent));
#endif
#ifdef HAS_NORMAL_TEXTURE
mat3 tbn = mat3(tangent, bitangent, geometryNormal);
vec3 normalSample;
#if defined(HAS_NORMAL_CONSTANT_LOD) && defined(HAS_CONSTANT_LOD)
#ifdef HAS_NORMAL_TEXTURE_TRANSFORM
normalSample = constantLodTextureLookup(u_normalTexture, u_normalTextureConstantLodParams, u_normalTextureTransform).rgb;
#else
normalSample = constantLodTextureLookup(u_normalTexture, u_normalTextureConstantLodParams).rgb;
#endif
#else
normalSample = texture(u_normalTexture, normalTexCoords).rgb;
#endif
normalSample = 2.0 * normalSample - 1.0;
#ifdef HAS_NORMAL_TEXTURE_SCALE
normalSample.xy *= u_normalTextureScale;
#endif
vec3 normal = normalize(tbn * normalSample);
#else
vec3 normal = geometryNormal;
#endif
#ifdef HAS_DOUBLE_SIDED_MATERIAL
if (czm_backFacing()) {
tangent *= -1.0;
bitangent *= -1.0;
normal *= -1.0;
geometryNormal *= -1.0;
}
#endif
NormalInfo normalInfo;
normalInfo.tangent = tangent;
normalInfo.bitangent = bitangent;
normalInfo.normal = normal;
normalInfo.geometryNormal = geometryNormal;
return normalInfo;
}
#endif
#if defined(HAS_NORMAL_TEXTURE) && !defined(HAS_WIREFRAME)
vec3 getNormalFromTexture(ProcessedAttributes attributes, vec3 geometryNormal)
{
vec2 normalTexCoords = getNormalTexCoords();
// If HAS_BITANGENTS is set, then HAS_TANGENTS is also set
#ifdef HAS_BITANGENTS
vec3 t = attributes.tangentEC;
vec3 b = attributes.bitangentEC;
#else
vec3 t = computeTangent(attributes.positionEC, normalTexCoords);
t = normalize(t - geometryNormal * dot(geometryNormal, t));
vec3 b = normalize(cross(geometryNormal, t));
#endif
mat3 tbn = mat3(t, b, geometryNormal);
vec3 normalSample;
#if defined(HAS_NORMAL_CONSTANT_LOD) && defined(HAS_CONSTANT_LOD)
#ifdef HAS_NORMAL_TEXTURE_TRANSFORM
normalSample = constantLodTextureLookup(u_normalTexture, u_normalTextureConstantLodParams, u_normalTextureTransform).rgb;
#else
normalSample = constantLodTextureLookup(u_normalTexture, u_normalTextureConstantLodParams).rgb;
#endif
#else
normalSample = texture(u_normalTexture, normalTexCoords).rgb;
#endif
normalSample = 2.0 * normalSample - 1.0;
#ifdef HAS_NORMAL_TEXTURE_SCALE
normalSample.xy *= u_normalTextureScale;
#endif
return normalize(tbn * normalSample);
}
#endif
#ifdef HAS_CLEARCOAT_NORMAL_TEXTURE
vec3 getClearcoatNormalFromTexture(ProcessedAttributes attributes, vec3 geometryNormal)
{
vec2 normalTexCoords = TEXCOORD_CLEARCOAT_NORMAL;
#ifdef HAS_CLEARCOAT_NORMAL_TEXTURE_TRANSFORM
normalTexCoords = vec2(u_clearcoatNormalTextureTransform * vec3(normalTexCoords, 1.0));
#endif
// If HAS_BITANGENTS is set, then HAS_TANGENTS is also set
#ifdef HAS_BITANGENTS
vec3 t = attributes.tangentEC;
vec3 b = attributes.bitangentEC;
#else
vec3 t = computeTangent(attributes.positionEC, normalTexCoords);
t = normalize(t - geometryNormal * dot(geometryNormal, t));
vec3 b = normalize(cross(geometryNormal, t));
#endif
mat3 tbn = mat3(t, b, geometryNormal);
vec3 normalSample = texture(u_clearcoatNormalTexture, normalTexCoords).rgb;
normalSample = 2.0 * normalSample - 1.0;
#ifdef HAS_CLEARCOAT_NORMAL_TEXTURE_SCALE
normalSample.xy *= u_clearcoatNormalTextureScale;
#endif
return normalize(tbn * normalSample);
}
#endif
#ifdef HAS_NORMALS
vec3 computeNormal(ProcessedAttributes attributes)
{
// Geometry normal. This is already normalized
vec3 normal = attributes.normalEC;
#if defined(HAS_NORMAL_TEXTURE) && !defined(HAS_WIREFRAME)
normal = getNormalFromTexture(attributes, normal);
#endif
#ifdef HAS_DOUBLE_SIDED_MATERIAL
if (czm_backFacing()) {
normal = -normal;
}
#endif
return normal;
}
#endif
#ifdef HAS_BASE_COLOR_TEXTURE
vec4 getBaseColorFromTexture()
{
vec2 baseColorTexCoords = TEXCOORD_BASE_COLOR;
#ifdef HAS_BASE_COLOR_TEXTURE_TRANSFORM
baseColorTexCoords = czm_computeTextureTransform(baseColorTexCoords, u_baseColorTextureTransform);
#endif
vec4 baseColorWithAlpha;
#if defined(HAS_BASE_COLOR_CONSTANT_LOD) && defined(HAS_CONSTANT_LOD)
#ifdef HAS_BASE_COLOR_TEXTURE_TRANSFORM
baseColorWithAlpha = czm_srgbToLinear(constantLodTextureLookup(u_baseColorTexture, u_baseColorTextureConstantLodParams, u_baseColorTextureTransform));
#else
baseColorWithAlpha = czm_srgbToLinear(constantLodTextureLookup(u_baseColorTexture, u_baseColorTextureConstantLodParams));
#endif
#else
baseColorWithAlpha = czm_srgbToLinear(texture(u_baseColorTexture, baseColorTexCoords));
#endif
#ifdef HAS_BASE_COLOR_FACTOR
baseColorWithAlpha *= u_baseColorFactor;
#endif
return baseColorWithAlpha;
}
#endif
#ifdef HAS_EMISSIVE_TEXTURE
vec3 getEmissiveFromTexture()
{
vec2 emissiveTexCoords = TEXCOORD_EMISSIVE;
#ifdef HAS_EMISSIVE_TEXTURE_TRANSFORM
emissiveTexCoords = czm_computeTextureTransform(emissiveTexCoords, u_emissiveTextureTransform);
#endif
vec3 emissive = czm_srgbToLinear(texture(u_emissiveTexture, emissiveTexCoords).rgb);
#ifdef HAS_EMISSIVE_FACTOR
emissive *= u_emissiveFactor;
#endif
return emissive;
}
#endif
#if defined(LIGHTING_PBR) && defined(USE_SPECULAR_GLOSSINESS)
void setSpecularGlossiness(inout czm_modelMaterial material)
{
#ifdef HAS_SPECULAR_GLOSSINESS_TEXTURE
vec2 specularGlossinessTexCoords = TEXCOORD_SPECULAR_GLOSSINESS;
#ifdef HAS_SPECULAR_GLOSSINESS_TEXTURE_TRANSFORM
specularGlossinessTexCoords = czm_computeTextureTransform(specularGlossinessTexCoords, u_specularGlossinessTextureTransform);
#endif
vec4 specularGlossiness = czm_srgbToLinear(texture(u_specularGlossinessTexture, specularGlossinessTexCoords));
vec3 specular = specularGlossiness.rgb;
float glossiness = specularGlossiness.a;
#ifdef HAS_LEGACY_SPECULAR_FACTOR
specular *= u_legacySpecularFactor;
#endif
#ifdef HAS_GLOSSINESS_FACTOR
glossiness *= u_glossinessFactor;
#endif
#else
#ifdef HAS_LEGACY_SPECULAR_FACTOR
vec3 specular = clamp(u_legacySpecularFactor, vec3(0.0), vec3(1.0));
#else
vec3 specular = vec3(1.0);
#endif
#ifdef HAS_GLOSSINESS_FACTOR
float glossiness = clamp(u_glossinessFactor, 0.0, 1.0);
#else
float glossiness = 1.0;
#endif
#endif
#ifdef HAS_DIFFUSE_TEXTURE
vec2 diffuseTexCoords = TEXCOORD_DIFFUSE;
#ifdef HAS_DIFFUSE_TEXTURE_TRANSFORM
diffuseTexCoords = czm_computeTextureTransform(diffuseTexCoords, u_diffuseTextureTransform);
#endif
vec4 diffuse = czm_srgbToLinear(texture(u_diffuseTexture, diffuseTexCoords));
#ifdef HAS_DIFFUSE_FACTOR
diffuse *= u_diffuseFactor;
#endif
#elif defined(HAS_DIFFUSE_FACTOR)
vec4 diffuse = clamp(u_diffuseFactor, vec4(0.0), vec4(1.0));
#else
vec4 diffuse = vec4(1.0);
#endif
material.diffuse = diffuse.rgb * (1.0 - czm_maximumComponent(specular));
// the specular glossiness extension's alpha overrides anything set
// by the base material.
material.alpha = diffuse.a;
material.specular = specular;
// glossiness is the opposite of roughness, but easier for artists to use.
material.roughness = 1.0 - glossiness;
}
#elif defined(LIGHTING_PBR)
float setMetallicRoughness(inout czm_modelMaterial material)
{
#ifdef HAS_METALLIC_ROUGHNESS_TEXTURE
vec2 metallicRoughnessTexCoords = TEXCOORD_METALLIC_ROUGHNESS;
#ifdef HAS_METALLIC_ROUGHNESS_TEXTURE_TRANSFORM
metallicRoughnessTexCoords = czm_computeTextureTransform(metallicRoughnessTexCoords, u_metallicRoughnessTextureTransform);
#endif
vec3 metallicRoughness = texture(u_metallicRoughnessTexture, metallicRoughnessTexCoords).rgb;
float metalness = clamp(metallicRoughness.b, 0.0, 1.0);
float roughness = clamp(metallicRoughness.g, 0.0, 1.0);
#ifdef HAS_METALLIC_FACTOR
metalness = clamp(metalness * u_metallicFactor, 0.0, 1.0);
#endif
#ifdef HAS_ROUGHNESS_FACTOR
roughness = clamp(roughness * u_roughnessFactor, 0.0, 1.0);
#endif
#else
#ifdef HAS_METALLIC_FACTOR
float metalness = clamp(u_metallicFactor, 0.0, 1.0);
#else
float metalness = 1.0;
#endif
#ifdef HAS_ROUGHNESS_FACTOR
float roughness = clamp(u_roughnessFactor, 0.0, 1.0);
#else
float roughness = 1.0;
#endif
#endif
// dielectrics use f0 = 0.04, metals use albedo as f0
const vec3 REFLECTANCE_DIELECTRIC = vec3(0.04);
vec3 f0 = mix(REFLECTANCE_DIELECTRIC, material.baseColor.rgb, metalness);
material.specular = f0;
// diffuse only applies to dielectrics.
material.diffuse = mix(material.baseColor.rgb, vec3(0.0), metalness);
// This is perceptual roughness. The square of this value is used for direct lighting
material.roughness = roughness;
return metalness;
}
#ifdef USE_SPECULAR
void setSpecular(inout czm_modelMaterial material, in float metalness)
{
#ifdef HAS_SPECULAR_TEXTURE
vec2 specularTexCoords = TEXCOORD_SPECULAR;
#ifdef HAS_SPECULAR_TEXTURE_TRANSFORM
specularTexCoords = czm_computeTextureTransform(specularTexCoords, u_specularTextureTransform);
#endif
float specularWeight = texture(u_specularTexture, specularTexCoords).a;
#ifdef HAS_SPECULAR_FACTOR
specularWeight *= u_specularFactor;
#endif
#else
#ifdef HAS_SPECULAR_FACTOR
float specularWeight = u_specularFactor;
#else
float specularWeight = 1.0;
#endif
#endif
#ifdef HAS_SPECULAR_COLOR_TEXTURE
vec2 specularColorTexCoords = TEXCOORD_SPECULAR_COLOR;
#ifdef HAS_SPECULAR_COLOR_TEXTURE_TRANSFORM
specularColorTexCoords = czm_computeTextureTransform(specularColorTexCoords, u_specularColorTextureTransform);
#endif
vec3 specularColorSample = texture(u_specularColorTexture, specularColorTexCoords).rgb;
vec3 specularColorFactor = czm_srgbToLinear(specularColorSample);
#ifdef HAS_SPECULAR_COLOR_FACTOR
specularColorFactor *= u_specularColorFactor;
#endif
#else
#ifdef HAS_SPECULAR_COLOR_FACTOR
vec3 specularColorFactor = u_specularColorFactor;
#else
vec3 specularColorFactor = vec3(1.0);
#endif
#endif
material.specularWeight = specularWeight;
vec3 f0 = material.specular;
vec3 dielectricSpecularF0 = min(f0 * specularColorFactor, vec3(1.0));
material.specular = mix(dielectricSpecularF0, material.baseColor.rgb, metalness);
}
#endif
#ifdef USE_ANISOTROPY
void setAnisotropy(inout czm_modelMaterial material, in NormalInfo normalInfo)
{
mat2 rotation = mat2(u_anisotropy.xy, -u_anisotropy.y, u_anisotropy.x);
float anisotropyStrength = u_anisotropy.z;
vec2 direction = vec2(1.0, 0.0);
#ifdef HAS_ANISOTROPY_TEXTURE
vec2 anisotropyTexCoords = TEXCOORD_ANISOTROPY;
#ifdef HAS_ANISOTROPY_TEXTURE_TRANSFORM
anisotropyTexCoords = czm_computeTextureTransform(anisotropyTexCoords, u_anisotropyTextureTransform);
#endif
vec3 anisotropySample = texture(u_anisotropyTexture, anisotropyTexCoords).rgb;
direction = anisotropySample.rg * 2.0 - vec2(1.0);
anisotropyStrength *= anisotropySample.b;
#endif
direction = rotation * direction;
mat3 tbn = mat3(normalInfo.tangent, normalInfo.bitangent, normalInfo.normal);
vec3 anisotropicT = tbn * normalize(vec3(direction, 0.0));
vec3 anisotropicB = cross(normalInfo.geometryNormal, anisotropicT);
material.anisotropicT = anisotropicT;
material.anisotropicB = anisotropicB;
material.anisotropyStrength = anisotropyStrength;
}
#endif
#ifdef USE_CLEARCOAT
void setClearcoat(inout czm_modelMaterial material, in ProcessedAttributes attributes)
{
#ifdef HAS_CLEARCOAT_TEXTURE
vec2 clearcoatTexCoords = TEXCOORD_CLEARCOAT;
#ifdef HAS_CLEARCOAT_TEXTURE_TRANSFORM
clearcoatTexCoords = czm_computeTextureTransform(clearcoatTexCoords, u_clearcoatTextureTransform);
#endif
float clearcoatFactor = texture(u_clearcoatTexture, clearcoatTexCoords).r;
#ifdef HAS_CLEARCOAT_FACTOR
clearcoatFactor *= u_clearcoatFactor;
#endif
#else
#ifdef HAS_CLEARCOAT_FACTOR
float clearcoatFactor = u_clearcoatFactor;
#else
// PERFORMANCE_IDEA: this case should turn the whole extension off
float clearcoatFactor = 0.0;
#endif
#endif
#ifdef HAS_CLEARCOAT_ROUGHNESS_TEXTURE
vec2 clearcoatRoughnessTexCoords = TEXCOORD_CLEARCOAT_ROUGHNESS;
#ifdef HAS_CLEARCOAT_ROUGHNESS_TEXTURE_TRANSFORM
clearcoatRoughnessTexCoords = czm_computeTextureTransform(clearcoatRoughnessTexCoords, u_clearcoatRoughnessTextureTransform);
#endif
float clearcoatRoughness = texture(u_clearcoatRoughnessTexture, clearcoatRoughnessTexCoords).g;
#ifdef HAS_CLEARCOAT_ROUGHNESS_FACTOR
clearcoatRoughness *= u_clearcoatRoughnessFactor;
#endif
#else
#ifdef HAS_CLEARCOAT_ROUGHNESS_FACTOR
float clearcoatRoughness = u_clearcoatRoughnessFactor;
#else
float clearcoatRoughness = 0.0;
#endif
#endif
material.clearcoatFactor = clearcoatFactor;
// This is perceptual roughness. The square of this value is used for direct lighting
material.clearcoatRoughness = clearcoatRoughness;
#ifdef HAS_CLEARCOAT_NORMAL_TEXTURE
material.clearcoatNormal = getClearcoatNormalFromTexture(attributes, attributes.normalEC);
#else
material.clearcoatNormal = attributes.normalEC;
#endif
}
#endif
#endif
void materialStage(inout czm_modelMaterial material, ProcessedAttributes attributes, SelectedFeature feature)
{
#ifdef USE_ANISOTROPY
NormalInfo normalInfo = getNormalInfo(attributes);
material.normalEC = normalInfo.normal;
#elif defined(HAS_NORMALS)
material.normalEC = computeNormal(attributes);
#endif
vec4 baseColorWithAlpha = vec4(1.0);
// Regardless of whether we use PBR, set a base color
#ifdef HAS_BASE_COLOR_TEXTURE
baseColorWithAlpha = getBaseColorFromTexture();
#elif defined(HAS_BASE_COLOR_FACTOR)
baseColorWithAlpha = u_baseColorFactor;
#endif
#ifdef HAS_IMAGERY
baseColorWithAlpha = blendBaseColorWithImagery(baseColorWithAlpha);
#endif // HAS_IMAGERY
#ifdef HAS_POINT_CLOUD_COLOR_STYLE
baseColorWithAlpha = v_pointCloudColor;
#elif defined(HAS_COLOR_0)
vec4 color = attributes.color_0;
// .pnts files store colors in the sRGB color space
#ifdef HAS_SRGB_COLOR
color = czm_srgbToLinear(color);
#endif
baseColorWithAlpha *= color;
#endif
#ifdef USE_CPU_STYLING
baseColorWithAlpha.rgb = blend(baseColorWithAlpha.rgb, feature.color.rgb, model_colorBlend);
#endif
material.baseColor = baseColorWithAlpha;
material.diffuse = baseColorWithAlpha.rgb;
material.alpha = baseColorWithAlpha.a;
#ifdef HAS_OCCLUSION_TEXTURE
vec2 occlusionTexCoords = TEXCOORD_OCCLUSION;
#ifdef HAS_OCCLUSION_TEXTURE_TRANSFORM
occlusionTexCoords = czm_computeTextureTransform(occlusionTexCoords, u_occlusionTextureTransform);
#endif
material.occlusion = texture(u_occlusionTexture, occlusionTexCoords).r;
#endif
#ifdef HAS_EMISSIVE_TEXTURE
material.emissive = getEmissiveFromTexture();
#elif defined(HAS_EMISSIVE_FACTOR)
material.emissive = u_emissiveFactor;
#endif
#if defined(LIGHTING_PBR) && defined(USE_SPECULAR_GLOSSINESS)
setSpecularGlossiness(material);
#elif defined(LIGHTING_PBR)
float metalness = setMetallicRoughness(material);
#ifdef USE_SPECULAR
setSpecular(material, metalness);
#endif
#ifdef USE_ANISOTROPY
setAnisotropy(material, normalInfo);
#endif
#ifdef USE_CLEARCOAT
setClearcoat(material, attributes);
#endif
#endif
}
`;var t5n=y(x(),1),tB=`#ifdef HAS_CONSTANT_LOD
// Extract model scale to compensate for minimumPixelSize scaling
float modelScaleX = length(czm_model[0].xyz);
float modelScaleY = length(czm_model[1].xyz);
float modelScaleZ = length(czm_model[2].xyz);
float modelScale = (modelScaleX + modelScaleY + modelScaleZ) / 3.0;
// Transform model position through ENU but as direction only (w=0) to avoid position-dependent rotation
vec3 enuDir = (u_constantLodWorldToEnu * czm_model * vec4(v_positionMC, 0.0)).xyz;
v_constantLodUvCustom.xy = (enuDir.yx + u_constantLodOffset) / modelScale;
v_constantLodUvCustom.z = u_constantLodDistance / modelScale;
#endif`;var i5n=y(x(),1),nB=`#ifdef HAS_CONSTANT_LOD
vec4 constantLodTextureLookup(sampler2D textureSampler, vec3 constantLodParams) {
bool atMaxClamp = v_constantLodUvCustom.z >= constantLodParams.y;
bool atMinClamp = v_constantLodUvCustom.z <= constantLodParams.x;
bool atClampBoundary = atMaxClamp || atMinClamp;
float effectiveDistance = atMaxClamp ? constantLodParams.y :
(atMinClamp ? constantLodParams.x : v_constantLodUvCustom.z);
float logDepth = log2(effectiveDistance);
logDepth = clamp(logDepth, -10.0, 20.0);
float f = fract(logDepth);
float p = floor(logDepth);
if (atClampBoundary) {
float clampedP = ceil(logDepth);
vec2 tc = v_constantLodUvCustom.xy / pow(2.0, clampedP) * constantLodParams.z;
return texture(textureSampler, tc);
}
vec2 tc1 = v_constantLodUvCustom.xy / pow(2.0, p) * constantLodParams.z;
vec2 tc2 = v_constantLodUvCustom.xy / pow(2.0, p + 1.0) * constantLodParams.z;
return mix(texture(textureSampler, tc1), texture(textureSampler, tc2), f);
}
vec4 constantLodTextureLookup(sampler2D textureSampler, vec3 constantLodParams, mat3 textureTransform) {
bool atMaxClamp = v_constantLodUvCustom.z >= constantLodParams.y;
bool atMinClamp = v_constantLodUvCustom.z <= constantLodParams.x;
bool atClampBoundary = atMaxClamp || atMinClamp;
float effectiveDistance = atMaxClamp ? constantLodParams.y :
(atMinClamp ? constantLodParams.x : v_constantLodUvCustom.z);
float logDepth = log2(effectiveDistance);
logDepth = clamp(logDepth, -10.0, 20.0);
float f = fract(logDepth);
float p = floor(logDepth);
if (atClampBoundary) {
float clampedP = ceil(logDepth);
vec2 tc = v_constantLodUvCustom.xy / pow(2.0, clampedP) * constantLodParams.z;
// Apply texture transform to the final texture coordinates
tc = czm_computeTextureTransform(tc, textureTransform);
return texture(textureSampler, tc);
}
vec2 tc1 = v_constantLodUvCustom.xy / pow(2.0, p) * constantLodParams.z;
vec2 tc2 = v_constantLodUvCustom.xy / pow(2.0, p + 1.0) * constantLodParams.z;
// Apply texture transform to both LOD texture coordinates before mixing
tc1 = czm_computeTextureTransform(tc1, textureTransform);
tc2 = czm_computeTextureTransform(tc2, textureTransform);
return mix(texture(textureSampler, tc1), texture(textureSampler, tc2), f);
}
#endif
`;var{Material:s8e,MetallicRoughness:Hj,SpecularGlossiness:Jj,Specular:Ihe,Clearcoat:Zhe}=Tn,Rhe={name:"MaterialPipelineStage",_processTexture:Zd,_processTextureTransform:Vhe};Rhe.process=function(e,t,n){let i=t.material,{model:o,uniformMap:r,shaderBuilder:s}=e;l(r.u_constantLodDistance)||(r.u_constantLodDistance=function(){let T=o.boundingSphere,E=n.camera;if(l(T)&&l(E)){let S=m.distance(E.positionWC,T.center);return Math.max(S,.1)}return 1});let a=l(o.classificationType),c=a,{defaultTexture:d,defaultNormalTexture:u,defaultEmissiveTexture:h}=n.context;d8e(i,r,s,d,u,h,c,e),l(i.specularGlossiness)?u8e(i.specularGlossiness,r,s,d,c,e):(l(i.specular)&&It.supportedExtensions.KHR_materials_specular&&m8e(i.specular,r,s,d,c),l(i.anisotropy)&&It.supportedExtensions.KHR_materials_anisotropy&&f8e(i.anisotropy,r,s,d,c),l(i.clearcoat)&&It.supportedExtensions.KHR_materials_clearcoat&&p8e(i.clearcoat,r,s,d,c),A8e(i.metallicRoughness,r,s,d,c,e));let p=It.getAttributeBySemantic(t,ct.NORMAL),A=l(o.pointCloudShading)&&!o.pointCloudShading.normalShading,f=e.lightingOptions;i.unlit||!p||a||A?f.lightingModel=Cp.UNLIT:f.lightingModel=Cp.PBR;let b=o.backFaceCulling&&!i.doubleSided;e.renderStateOptions.cull.enabled=b;let C=e.alphaOptions;i.alphaMode===pp.BLEND?C.pass=Ge.TRANSLUCENT:i.alphaMode===pp.MASK&&(C.alphaCutoff=i.alphaCutoff),l(i.pointDiameter)&&(s.addDefine("HAS_POINT_DIAMETER",void 0,pe.BOTH),s.addUniform("float","u_pointDiameter",pe.VERTEX),r.u_pointDiameter=function(){return i.pointDiameter*n.pixelRatio}),l(i.lineStyle)&&c8e(i.lineStyle,t,n,r,s),s.addFragmentLines(eB),i.doubleSided&&s.addDefine("HAS_DOUBLE_SIDED_MATERIAL",void 0,pe.BOTH)};function a8e(e,t,n,i,o,r){let s=n.constantLod;if(!l(s)||!l(r))return;let a=`HAS_${o}_CONSTANT_LOD`;if(e.addDefine(a,void 0,pe.BOTH),!l(t.u_constantLodOffset)){e.addDefine("HAS_CONSTANT_LOD",void 0,pe.BOTH),e.addVarying("vec3","v_constantLodUvCustom"),e.addUniform("vec2","u_constantLodOffset",pe.VERTEX),e.addUniform("float","u_constantLodDistance",pe.VERTEX),e.addUniform("mat4","u_constantLodWorldToEnu",pe.VERTEX),e.addFragmentLines(nB);let d=tB.split(`
`).filter(u=>!u.trim().startsWith("//")||u.includes("#"));e.addFunctionLines("setDynamicVaryingsVS",d)}let c=`${i}ConstantLodParams`;if(e.addUniform("vec3",c,pe.FRAGMENT),t[c]=function(){return new m(s.minClampDistance,s.maxClampDistance,s.repetitions)},!l(t.u_constantLodOffset)){t.u_constantLodOffset=function(){return s.offset};let d=F.clone(F.IDENTITY),u=!1;t.u_constantLodWorldToEnu=function(){if(!u){let h=r.model.boundingSphere;if(l(h)){let p=h.center,A=bt.eastNorthUpToFixedFrame(p);F.inverse(A,d),u=!0}}return u?d:F.IDENTITY}}}function c8e(e,t,n,i,o){let{width:r,pattern:s}=e;l(r)&&(o.addUniform("float","u_lineWidth",pe.VERTEX),i.u_lineWidth=function(){return r*n.pixelRatio}),l(s)&&(o.addDefine("HAS_LINE_PATTERN",void 0,pe.BOTH),o.addUniform("float","u_linePattern",pe.FRAGMENT),o.addVarying("float","v_lineCoord"),i.u_linePattern=function(){return s});let a=It.getAttributeBySemantic(t,ct.CUMULATIVE_DISTANCE);if(l(s)&&l(a)&&(t.primitiveType===We.LINES||t.primitiveType===We.TRIANGLE_STRIP)){o.addDefine("HAS_LINE_CUMULATIVE_DISTANCE",void 0,pe.VERTEX),a.normalized&&o.addDefine("LINE_CUM_DIST_NORMALIZED",void 0,pe.VERTEX),o.addUniform("float","u_cumulativeDistanceMax",pe.VERTEX),o.addUniform("float","u_pixelsPerWorld",pe.VERTEX);let c=l(a.max)?a.max:1;i.u_cumulativeDistanceMax=function(){return c},i.u_pixelsPerWorld=function(){let u=n.camera.frustum,h=1,p;return l(u.right)&&l(u.left)?p=u.right-u.left:l(u.width)&&(p=u.width),l(p)&&p>0&&(h=n.context.drawingBufferWidth/p),h};let d=It.getAttributeInfo(a).variableName;o.addVertexLines(`
#ifdef HAS_LINE_CUMULATIVE_DISTANCE
void lineStyleStageVS(in ProcessedAttributes attributes)
{
float cumDist = attributes.${d};
#ifdef LINE_CUM_DIST_NORMALIZED
cumDist *= u_cumulativeDistanceMax;
#endif
const float textureCoordinateBase = 8192.0;
v_lineCoord = textureCoordinateBase + cumDist * u_pixelsPerWorld;
}
#endif
`)}else l(s)&&o.addVertexLines(`
#ifdef HAS_LINE_PATTERN
void lineStyleStageVS(in ProcessedAttributes attributes)
{
vec4 posClip = gl_Position;
vec2 screenPos = ((posClip.xy / posClip.w) * 0.5 + 0.5) * czm_viewport.zw;
const float textureCoordinateBase = 8192.0;
if (czm_viewport.z > czm_viewport.w) {
v_lineCoord = textureCoordinateBase + screenPos.x;
} else {
v_lineCoord = textureCoordinateBase + screenPos.y;
}
}
#endif
`)}function Vhe(e,t,n,i,o){let r=`HAS_${o}_TEXTURE_TRANSFORM`;e.addDefine(r,void 0,pe.FRAGMENT);let s=`${i}Transform`;e.addUniform("mat3",s,pe.FRAGMENT),t[s]=function(){return n.transform}}function l8e(e,t,n,i,o){let r=`HAS_${o}_TEXTURE_SCALE`;e.addDefine(r,void 0,pe.FRAGMENT);let s=`${i}Scale`;e.addUniform("float",s,pe.FRAGMENT),t[s]=function(){return n.scale}}function Zd(e,t,n,i,o,r,s){e.addUniform("sampler2D",i,pe.FRAGMENT),t[i]=function(){return n.texture??r};let a=`HAS_${o}_TEXTURE`;e.addDefine(a,void 0,pe.FRAGMENT);let d=`v_texCoord_${n.texCoord}`,u=`TEXCOORD_${o}`;e.addDefine(u,d,pe.FRAGMENT);let h=n.transform;l(h)&&!$.equals(h,$.IDENTITY)&&Vhe(e,t,n,i,o);let{scale:p}=n;l(p)&&p!==1&&l8e(e,t,n,i,o),a8e(e,t,n,i,o,s)}function d8e(e,t,n,i,o,r,s,a){let{emissiveFactor:c,emissiveTexture:d,normalTexture:u,occlusionTexture:h}=e;l(c)&&!m.equals(c,s8e.DEFAULT_EMISSIVE_FACTOR)&&(n.addUniform("vec3","u_emissiveFactor",pe.FRAGMENT),t.u_emissiveFactor=function(){return e.emissiveFactor},n.addDefine("HAS_EMISSIVE_FACTOR",void 0,pe.FRAGMENT),l(d)&&!s&&Zd(n,t,d,"u_emissiveTexture","EMISSIVE",r));let p;if(l(e.metallicRoughness)&&l(e.metallicRoughness.baseColorTexture)&&l(e.metallicRoughness.baseColorTexture.constantLod)?p=e.metallicRoughness.baseColorTexture.constantLod:l(e.specularGlossiness)&&l(e.specularGlossiness.diffuseTexture)&&l(e.specularGlossiness.diffuseTexture.constantLod)&&(p=e.specularGlossiness.diffuseTexture.constantLod),l(u)&&!s){let A=u;l(u.constantLod)&&l(p)&&(A=Object.create(Object.getPrototypeOf(u)),Object.assign(A,u),A.constantLod=p),Zd(n,t,A,"u_normalTexture","NORMAL",o,a)}l(h)&&!s&&Zd(n,t,h,"u_occlusionTexture","OCCLUSION",i)}function u8e(e,t,n,i,o,r){let{diffuseTexture:s,diffuseFactor:a,specularGlossinessTexture:c,specularFactor:d,glossinessFactor:u}=e;n.addDefine("USE_SPECULAR_GLOSSINESS",void 0,pe.FRAGMENT),l(s)&&!o&&Zd(n,t,s,"u_diffuseTexture","DIFFUSE",i,r),l(a)&&!re.equals(a,Jj.DEFAULT_DIFFUSE_FACTOR)&&(n.addUniform("vec4","u_diffuseFactor",pe.FRAGMENT),t.u_diffuseFactor=function(){return e.diffuseFactor},n.addDefine("HAS_DIFFUSE_FACTOR",void 0,pe.FRAGMENT)),l(c)&&!o&&Zd(n,t,c,"u_specularGlossinessTexture","SPECULAR_GLOSSINESS",i),l(d)&&!m.equals(d,Jj.DEFAULT_SPECULAR_FACTOR)&&(n.addUniform("vec3","u_legacySpecularFactor",pe.FRAGMENT),t.u_legacySpecularFactor=function(){return e.specularFactor},n.addDefine("HAS_LEGACY_SPECULAR_FACTOR",void 0,pe.FRAGMENT)),l(u)&&u!==Jj.DEFAULT_GLOSSINESS_FACTOR&&(n.addUniform("float","u_glossinessFactor",pe.FRAGMENT),t.u_glossinessFactor=function(){return e.glossinessFactor},n.addDefine("HAS_GLOSSINESS_FACTOR",void 0,pe.FRAGMENT))}function m8e(e,t,n,i,o){let{specularTexture:r,specularFactor:s,specularColorTexture:a,specularColorFactor:c}=e;n.addDefine("USE_SPECULAR",void 0,pe.FRAGMENT),l(r)&&!o&&Zd(n,t,r,"u_specularTexture","SPECULAR",i),l(s)&&s!==Ihe.DEFAULT_SPECULAR_FACTOR&&(n.addUniform("float","u_specularFactor",pe.FRAGMENT),t.u_specularFactor=function(){return e.specularFactor},n.addDefine("HAS_SPECULAR_FACTOR",void 0,pe.FRAGMENT)),l(a)&&!o&&Zd(n,t,a,"u_specularColorTexture","SPECULAR_COLOR",i),l(c)&&!m.equals(c,Ihe.DEFAULT_SPECULAR_COLOR_FACTOR)&&(n.addUniform("vec3","u_specularColorFactor",pe.FRAGMENT),t.u_specularColorFactor=function(){return e.specularColorFactor},n.addDefine("HAS_SPECULAR_COLOR_FACTOR",void 0,pe.FRAGMENT))}var h8e=new m;function f8e(e,t,n,i,o){let{anisotropyStrength:r,anisotropyRotation:s,anisotropyTexture:a}=e;n.addDefine("USE_ANISOTROPY",void 0,pe.FRAGMENT),l(a)&&!o&&Zd(n,t,a,"u_anisotropyTexture","ANISOTROPY",i);let c=Math.cos(s),d=Math.sin(s);n.addUniform("vec3","u_anisotropy",pe.FRAGMENT),t.u_anisotropy=function(){return m.fromElements(c,d,r,h8e)}}function p8e(e,t,n,i,o){let{clearcoatFactor:r,clearcoatTexture:s,clearcoatRoughnessFactor:a,clearcoatRoughnessTexture:c,clearcoatNormalTexture:d}=e;n.addDefine("USE_CLEARCOAT",void 0,pe.FRAGMENT),l(r)&&r!==Zhe.DEFAULT_CLEARCOAT_FACTOR&&(n.addUniform("float","u_clearcoatFactor",pe.FRAGMENT),t.u_clearcoatFactor=function(){return e.clearcoatFactor},n.addDefine("HAS_CLEARCOAT_FACTOR",void 0,pe.FRAGMENT)),l(s)&&!o&&Zd(n,t,s,"u_clearcoatTexture","CLEARCOAT",i),l(a)&&r!==Zhe.DEFAULT_CLEARCOAT_ROUGHNESS_FACTOR&&(n.addUniform("float","u_clearcoatRoughnessFactor",pe.FRAGMENT),t.u_clearcoatRoughnessFactor=function(){return e.clearcoatRoughnessFactor},n.addDefine("HAS_CLEARCOAT_ROUGHNESS_FACTOR",void 0,pe.FRAGMENT)),l(c)&&!o&&Zd(n,t,c,"u_clearcoatRoughnessTexture","CLEARCOAT_ROUGHNESS",i),l(d)&&!o&&Zd(n,t,d,"u_clearcoatNormalTexture","CLEARCOAT_NORMAL",i)}function A8e(e,t,n,i,o,r){n.addDefine("USE_METALLIC_ROUGHNESS",void 0,pe.FRAGMENT);let s=e.baseColorTexture;l(s)&&!o&&Zd(n,t,s,"u_baseColorTexture","BASE_COLOR",i,r);let a=e.baseColorFactor;l(a)&&!re.equals(a,Hj.DEFAULT_BASE_COLOR_FACTOR)&&(n.addUniform("vec4","u_baseColorFactor",pe.FRAGMENT),t.u_baseColorFactor=function(){return e.baseColorFactor},n.addDefine("HAS_BASE_COLOR_FACTOR",void 0,pe.FRAGMENT));let c=e.metallicRoughnessTexture;l(c)&&!o&&Zd(n,t,c,"u_metallicRoughnessTexture","METALLIC_ROUGHNESS",i);let d=e.metallicFactor;l(d)&&d!==Hj.DEFAULT_METALLIC_FACTOR&&(n.addUniform("float","u_metallicFactor",pe.FRAGMENT),t.u_metallicFactor=function(){return e.metallicFactor},n.addDefine("HAS_METALLIC_FACTOR",void 0,pe.FRAGMENT));let u=e.roughnessFactor;l(u)&&u!==Hj.DEFAULT_ROUGHNESS_FACTOR&&(n.addUniform("float","u_roughnessFactor",pe.FRAGMENT),t.u_roughnessFactor=function(){return e.roughnessFactor},n.addDefine("HAS_ROUGHNESS_FACTOR",void 0,pe.FRAGMENT))}var iB=Rhe;var _5n=y(x(),1);var kl={name:"MetadataPickingPipelineStage",METADATA_PICKING_ENABLED:"METADATA_PICKING_ENABLED",METADATA_PICKING_VALUE_TYPE:"METADATA_PICKING_VALUE_TYPE",METADATA_PICKING_VALUE_STRING:"METADATA_PICKING_VALUE_STRING",METADATA_PICKING_VALUE_COMPONENT_X:"METADATA_PICKING_VALUE_COMPONENT_X",METADATA_PICKING_VALUE_COMPONENT_Y:"METADATA_PICKING_VALUE_COMPONENT_Y",METADATA_PICKING_VALUE_COMPONENT_Z:"METADATA_PICKING_VALUE_COMPONENT_Z",METADATA_PICKING_VALUE_COMPONENT_W:"METADATA_PICKING_VALUE_COMPONENT_W"};kl.process=function(e,t,n){let i=e.shaderBuilder;i.addDefine(kl.METADATA_PICKING_VALUE_TYPE,"float",pe.FRAGMENT),i.addDefine(kl.METADATA_PICKING_VALUE_STRING,"0.0",pe.FRAGMENT),i.addDefine(kl.METADATA_PICKING_VALUE_COMPONENT_X,"0.0",pe.FRAGMENT),i.addDefine(kl.METADATA_PICKING_VALUE_COMPONENT_Y,"0.0",pe.FRAGMENT),i.addDefine(kl.METADATA_PICKING_VALUE_COMPONENT_Z,"0.0",pe.FRAGMENT),i.addDefine(kl.METADATA_PICKING_VALUE_COMPONENT_W,"0.0",pe.FRAGMENT),i.addFunction("metadataPickingStage","void metadataPickingStage(Metadata metadata, MetadataClass metadataClass, inout vec4 metadataValues)",pe.FRAGMENT),i.addFunctionLines("metadataPickingStage",[`${kl.METADATA_PICKING_VALUE_TYPE} value = ${kl.METADATA_PICKING_VALUE_TYPE}(${kl.METADATA_PICKING_VALUE_STRING});`,`metadataValues.x = ${kl.METADATA_PICKING_VALUE_COMPONENT_X};`,`metadataValues.y = ${kl.METADATA_PICKING_VALUE_COMPONENT_Y};`,`metadataValues.z = ${kl.METADATA_PICKING_VALUE_COMPONENT_Z};`,`metadataValues.w = ${kl.METADATA_PICKING_VALUE_COMPONENT_W};`],pe.FRAGMENT)};var Au=kl;var w5n=y(x(),1);var Z5n=y(x(),1),oB=`void morphTargetsStage(inout ProcessedAttributes attributes)
{
vec3 positionMC = attributes.positionMC;
attributes.positionMC = getMorphedPosition(positionMC);
#ifdef HAS_NORMALS
vec3 normalMC = attributes.normalMC;
attributes.normalMC = getMorphedNormal(normalMC);
#endif
#ifdef HAS_TANGENTS
vec3 tangentMC = attributes.tangentMC;
attributes.tangentMC = getMorphedTangent(tangentMC);
#endif
}`;var Vc={name:"MorphTargetsPipelineStage",FUNCTION_ID_GET_MORPHED_POSITION:"getMorphedPosition",FUNCTION_SIGNATURE_GET_MORPHED_POSITION:"vec3 getMorphedPosition(in vec3 position)",FUNCTION_ID_GET_MORPHED_NORMAL:"getMorphedNormal",FUNCTION_SIGNATURE_GET_MORPHED_NORMAL:"vec3 getMorphedNormal(in vec3 normal)",FUNCTION_ID_GET_MORPHED_TANGENT:"getMorphedTangent",FUNCTION_SIGNATURE_GET_MORPHED_TANGENT:"vec3 getMorphedTangent(in vec3 tangent)"};Vc.process=function(e,t){let n=e.shaderBuilder;n.addDefine("HAS_MORPH_TARGETS",void 0,pe.VERTEX),T8e(n);let i=t.morphTargets.length;for(let a=0;a<i;a++){let c=t.morphTargets[a].attributes,d=c.length;for(let u=0;u<d;u++){let h=c[u],p=h.semantic;p!==ct.POSITION&&p!==ct.NORMAL&&p!==ct.TANGENT||(b8e(e,h,e.attributeIndex,a),e.attributeIndex++)}}E8e(n);let r=e.runtimeNode.morphWeights.length;n.addUniform("float",`u_morphWeights[${r}]`,pe.VERTEX),n.addVertexLines(oB);let s={u_morphWeights:function(){return e.runtimeNode.morphWeights}};e.uniformMap=Ft(s,e.uniformMap)};var g8e={attributeString:void 0,functionId:void 0};function b8e(e,t,n,i){let o=e.shaderBuilder;y8e(e,t,n);let r=x8e(t,g8e);C8e(o,r,i)}function y8e(e,t,n){let i={index:n,value:l(t.buffer)?void 0:t.constant,vertexBuffer:t.buffer,componentsPerAttribute:Ut.getNumberOfComponents(t.type),componentDatatype:t.componentDatatype,offsetInBytes:t.byteOffset,strideInBytes:t.byteStride,normalize:t.normalized};e.attributes.push(i)}function x8e(e,t){switch(e.semantic){case ct.POSITION:t.attributeString="Position",t.functionId=Vc.FUNCTION_ID_GET_MORPHED_POSITION;break;case ct.NORMAL:t.attributeString="Normal",t.functionId=Vc.FUNCTION_ID_GET_MORPHED_NORMAL;break;case ct.TANGENT:t.attributeString="Tangent",t.functionId=Vc.FUNCTION_ID_GET_MORPHED_TANGENT;break;default:break}return t}function C8e(e,t,n){let i=t.attributeString,o=`a_target${i}_${n}`,r=`morphed${i} += u_morphWeights[${n}] * a_target${i}_${n};`;e.addAttribute("vec3",o),e.addFunctionLines(t.functionId,[r])}function T8e(e){e.addFunction(Vc.FUNCTION_ID_GET_MORPHED_POSITION,Vc.FUNCTION_SIGNATURE_GET_MORPHED_POSITION,pe.VERTEX),e.addFunctionLines(Vc.FUNCTION_ID_GET_MORPHED_POSITION,["vec3 morphedPosition = position;"]),e.addFunction(Vc.FUNCTION_ID_GET_MORPHED_NORMAL,Vc.FUNCTION_SIGNATURE_GET_MORPHED_NORMAL,pe.VERTEX),e.addFunctionLines(Vc.FUNCTION_ID_GET_MORPHED_NORMAL,["vec3 morphedNormal = normal;"]),e.addFunction(Vc.FUNCTION_ID_GET_MORPHED_TANGENT,Vc.FUNCTION_SIGNATURE_GET_MORPHED_TANGENT,pe.VERTEX),e.addFunctionLines(Vc.FUNCTION_ID_GET_MORPHED_TANGENT,["vec3 morphedTangent = tangent;"])}function E8e(e){e.addFunctionLines(Vc.FUNCTION_ID_GET_MORPHED_POSITION,["return morphedPosition;"]),e.addFunctionLines(Vc.FUNCTION_ID_GET_MORPHED_NORMAL,["return morphedNormal;"]),e.addFunctionLines(Vc.FUNCTION_ID_GET_MORPHED_TANGENT,["return morphedTangent;"])}var rB=Vc;var Q5n=y(x(),1);var Ghe={name:"PickingPipelineStage"};Ghe.process=function(e,t,n){let i=n.context,o=e.runtimeNode,r=e.shaderBuilder,s=e.model,a=o.node.instances;if(e.hasPropertyTable)S8e(e,t,a,i);else if(l(a))_8e(e,i);else{let c=Lhe(e),d=i.createPickId(c);s._pipelineResources.push(d),s._pickIds.push(d),r.addUniform("vec4","czm_pickColor",pe.FRAGMENT);let u=e.uniformMap;u.czm_pickColor=function(){return d.color},e.pickId="czm_pickColor"}};function Lhe(e,t){let n=e.model;if(l(n.pickObject))return n.pickObject;let i={model:n,node:e.runtimeNode,primitive:e.runtimePrimitive},o;if(Nr.is3DTiles(n.type)){let r=n.content;o={content:r,primitive:r.tileset,detail:i}}else o={primitive:n,detail:i};return o.id=n.id,l(t)&&(o.instanceId=t),o}function S8e(e,t,n){let i=e.model,o,r,s=i.featureIdLabel,a=i.instanceFeatureIdLabel;l(i.featureTableId)?o=i.featureTableId:l(n)?(r=It.getFeatureIdsByLabel(n.featureIds,a),o=r.propertyTableId):(r=It.getFeatureIdsByLabel(t.featureIds,s),o=r.propertyTableId);let c=i.featureTables[o];e.shaderBuilder.addUniform("sampler2D","model_pickTexture",pe.FRAGMENT);let u=c.batchTexture;e.uniformMap.model_pickTexture=function(){return u.pickTexture??u.defaultTexture},e.pickId="((selectedFeature.id < int(model_featuresLength)) ? texture(model_pickTexture, selectedFeature.st) : vec4(0.0))"}function _8e(e,t){let n=e.instanceCount,i=new Array(n),o=new Uint8Array(n*4),r=e.model,s=r._pipelineResources;for(let h=0;h<n;h++){let p=Lhe(e,h),A=t.createPickId(p);s.push(A),i[h]=A;let f=A.color;o[h*4+0]=U.floatToByte(f.red),o[h*4+1]=U.floatToByte(f.green),o[h*4+2]=U.floatToByte(f.blue),o[h*4+3]=U.floatToByte(f.alpha)}r._pickIds=i;let a=it.createVertexBuffer({context:t,typedArray:o,usage:Be.STATIC_DRAW});a.vertexArrayDestroyable=!1,r.statistics.addBuffer(a,!1),s.push(a);let d={index:e.attributeIndex++,vertexBuffer:a,componentsPerAttribute:4,componentDatatype:H.UNSIGNED_BYTE,normalize:!0,offsetInBytes:0,strideInBytes:0,instanceDivisor:1};e.attributes.push(d);let u=e.shaderBuilder;u.addDefine("USE_PICKING",void 0,pe.BOTH),u.addAttribute("vec4","a_pickColor"),u.addVarying("vec4","v_pickColor"),e.pickId="v_pickColor"}var sB=Ghe;var hQn=y(x(),1);var z5n=y(x(),1),I8e={ADD:0,REPLACE:1},mr=Object.freeze(I8e);var J5n=y(x(),1),aB=`float getPointSizeFromAttenuation(vec3 positionEC) {
// Variables are packed into a single vector to minimize gl.uniformXXX() calls
float pointSize = model_pointCloudParameters.x;
float geometricError = model_pointCloudParameters.y;
float depthMultiplier = model_pointCloudParameters.z;
float depth = -positionEC.z;
return min((geometricError / depth) * depthMultiplier, pointSize);
}
#ifdef HAS_POINT_CLOUD_SHOW_STYLE
float pointCloudShowStylingStage(in ProcessedAttributes attributes, in Metadata metadata) {
float tiles3d_tileset_time = model_pointCloudParameters.w;
return float(getShowFromStyle(attributes, metadata, tiles3d_tileset_time));
}
#endif
#ifdef HAS_POINT_CLOUD_COLOR_STYLE
vec4 pointCloudColorStylingStage(in ProcessedAttributes attributes, in Metadata metadata) {
float tiles3d_tileset_time = model_pointCloudParameters.w;
return getColorFromStyle(attributes, metadata, tiles3d_tileset_time);
}
#endif
#ifdef HAS_POINT_CLOUD_POINT_SIZE_STYLE
float pointCloudPointSizeStylingStage(in ProcessedAttributes attributes, in Metadata metadata) {
float tiles3d_tileset_time = model_pointCloudParameters.w;
return float(getPointSizeFromStyle(attributes, metadata, tiles3d_tileset_time));
}
#elif defined(HAS_POINT_CLOUD_ATTENUATION)
float pointCloudPointSizeStylingStage(in ProcessedAttributes attributes, in Metadata metadata) {
return getPointSizeFromAttenuation(v_positionEC);
}
#endif
#ifdef HAS_POINT_CLOUD_BACK_FACE_CULLING
float pointCloudBackFaceCullingStage() {
#if defined(HAS_NORMALS) && !defined(HAS_DOUBLE_SIDED_MATERIAL)
// This needs to be computed in eye coordinates so we can't use attributes.normalMC
return step(-v_normalEC.z, 0.0);
#else
return 1.0;
#endif
}
#endif
`;var Z8e=new re,Fhe={name:"PointCloudStylingPipelineStage"};Fhe.process=function(e,t,n){let i=e.shaderBuilder,o=e.model,r=o.style,s=o.structuralMetadata,a=l(s)?s.propertyAttributes:void 0,c=l(o.featureTableId)&&o.featureTables[o.featureTableId].featuresLength>0,d=!l(a)&&c;if(l(r)&&!d){let b=L8e(a),C=W8e(r,b);F8e(i,C);let E=B8e(C).indexOf("normalMC")>=0,S=It.getAttributeBySemantic(t,ct.NORMAL);if(E&&!S)throw new me("Style references the NORMAL semantic but the point cloud does not have normals");i.addDefine("COMPUTE_POSITION_WC_STYLE",void 0,pe.VERTEX),C.styleTranslucent&&(e.alphaOptions.pass=Ge.TRANSLUCENT)}let u=o.pointCloudShading;u.attenuation&&i.addDefine("HAS_POINT_CLOUD_ATTENUATION",void 0,pe.VERTEX),u.backFaceCulling&&i.addDefine("HAS_POINT_CLOUD_BACK_FACE_CULLING",void 0,pe.VERTEX);let h,p,A;Nr.is3DTiles(o.type)&&(p=!0,h=o.content,A=h.tile.refine===mr.ADD),i.addUniform("vec4","model_pointCloudParameters",pe.VERTEX),i.addVertexLines(aB);let f=e.uniformMap;f.model_pointCloudParameters=function(){let b=Z8e,C=1;p&&(C=A?5:h.tileset.memoryAdjustedScreenSpaceError),b.x=u.maximumAttenuation??C,b.x*=n.pixelRatio;let T=R8e(e,t,u,h);b.y=T*u.geometricErrorScale;let E=n.context,S=n.camera.frustum,I;return n.mode===se.SCENE2D||S instanceof bn?I=Number.POSITIVE_INFINITY:I=E.drawingBufferHeight/n.camera.frustum.sseDenominator,b.z=I,p&&(b.w=h.tileset.timeSinceLoad),b}};var Whe=new m;function R8e(e,t,n,i){if(l(i)){let u=i.tile.geometricError;if(u>0)return u}if(l(n.baseResolution))return n.baseResolution;let o=It.getAttributeBySemantic(t,ct.POSITION),r=o.count,s=e.runtimeNode.transform,a=m.subtract(o.max,o.min,Whe);a=F.multiplyByPointAsVector(s,a,Whe);let c=a.x*a.y*a.z;return L.cbrt(c/r)}var V8e={colorStyleFunction:void 0,showStyleFunction:void 0,pointSizeStyleFunction:void 0,styleTranslucent:!1},G8e={POSITION:"attributes.positionMC",POSITION_ABSOLUTE:"v_positionWC",COLOR:"attributes.color_0",NORMAL:"attributes.normalMC"};function L8e(e){let t=He(G8e);if(!l(e))return t;for(let n=0;n<e.length;n++){let o=e[n].properties;for(let r in o)o.hasOwnProperty(r)&&(t[r]=`metadata.${r}`)}return t}var Kj="ProcessedAttributes attributes, Metadata metadata, float tiles3d_tileset_time";function W8e(e,t){let n=V8e,i={translucent:!1};return n.colorStyleFunction=e.getColorShaderFunction(`getColorFromStyle(${Kj})`,t,i),n.showStyleFunction=e.getShowShaderFunction(`getShowFromStyle(${Kj})`,t,i),n.pointSizeStyleFunction=e.getPointSizeShaderFunction(`getPointSizeFromStyle(${Kj})`,t,i),n.styleTranslucent=l(n.colorStyleFunction)&&i.translucent,n}function F8e(e,t){let n=t.colorStyleFunction;l(n)&&(e.addDefine("HAS_POINT_CLOUD_COLOR_STYLE",void 0,pe.BOTH),e.addVertexLines(n),e.addVarying("vec4","v_pointCloudColor"));let i=t.showStyleFunction;l(i)&&(e.addDefine("HAS_POINT_CLOUD_SHOW_STYLE",void 0,pe.BOTH),e.addVertexLines(i),e.addVarying("float","v_pointCloudShow"));let o=t.pointSizeStyleFunction;l(o)&&(e.addDefine("HAS_POINT_CLOUD_POINT_SIZE_STYLE",void 0,pe.VERTEX),e.addVertexLines(o))}function jj(e,t){let n=/attributes\.(\w+)/g,i=n.exec(e);for(;i!==null;){let o=i[1];t.indexOf(o)===-1&&t.push(o),i=n.exec(e)}}function B8e(e){let t=e.colorStyleFunction,n=e.showStyleFunction,i=e.pointSizeStyleFunction,o=[];return l(t)&&jj(t,o),l(n)&&jj(n,o),l(i)&&jj(i,o),o}var cB=Fhe;var SQn=y(x(),1);var pQn=y(x(),1),lB=`void primitiveOutlineStage() {
v_outlineCoordinates = a_outlineCoordinates;
}
`;var gQn=y(x(),1),dB=`void primitiveOutlineStage(inout czm_modelMaterial material) {
if (!model_showOutline) {
return;
}
float outlineX =
texture(model_outlineTexture, vec2(v_outlineCoordinates.x, 0.5)).r;
float outlineY =
texture(model_outlineTexture, vec2(v_outlineCoordinates.y, 0.5)).r;
float outlineZ =
texture(model_outlineTexture, vec2(v_outlineCoordinates.z, 0.5)).r;
float outlineness = max(outlineX, max(outlineY, outlineZ));
material.diffuse = mix(material.diffuse, model_outlineColor.rgb, model_outlineColor.a * outlineness);
}
`;var Bhe={name:"PrimitiveOutlinePipelineStage"};Bhe.process=function(e,t,n){let i=e.shaderBuilder,o=e.uniformMap;i.addDefine("HAS_PRIMITIVE_OUTLINE",void 0,pe.BOTH),i.addAttribute("vec3","a_outlineCoordinates"),i.addVarying("vec3","v_outlineCoordinates");let r=t.outlineCoordinates,s={index:e.attributeIndex++,vertexBuffer:r.buffer,componentsPerAttribute:Ut.getNumberOfComponents(r.type),componentDatatype:r.componentDatatype,offsetInBytes:r.byteOffset,strideInBytes:r.byteStride,normalize:r.normalized};e.attributes.push(s),i.addUniform("sampler2D","model_outlineTexture",pe.FRAGMENT);let a=EC.createTexture(n.context);o.model_outlineTexture=function(){return a};let c=e.model;i.addUniform("vec4","model_outlineColor",pe.FRAGMENT),o.model_outlineColor=function(){return c.outlineColor},i.addUniform("bool","model_showOutline",pe.FRAGMENT),o.model_showOutline=function(){return c.showOutline},i.addVertexLines(lB),i.addFragmentLines(dB)};var uB=Bhe;var GQn=y(x(),1);var whe={name:"PrimitiveStatisticsPipelineStage",_countGeometry:Nhe,_count2DPositions:Phe,_countMorphTargetAttributes:Xhe,_countMaterialTextures:Yhe,_countFeatureIdTextures:Mhe,_countBinaryMetadata:vhe};whe.process=function(e,t,n){let i=e.model,o=i.statistics;Nhe(o,t),Phe(o,e.runtimePrimitive),Xhe(o,t),Yhe(o,t.material),Mhe(o,t.featureIds),vhe(o,i)};function Nhe(e,t){let n=l(t.indices)?t.indices.count:It.getAttributeBySemantic(t,"POSITION").count,i=t.primitiveType;i===We.POINTS?e.pointsLength+=n:We.isTriangles(i)&&(e.trianglesLength+=w8e(i,n));let o=t.attributes,r=o.length;for(let c=0;c<r;c++){let d=o[c];if(l(d.buffer)){let u=l(d.typedArray);e.addBuffer(d.buffer,u)}}let s=t.outlineCoordinates;l(s)&&l(s.buffer)&&e.addBuffer(s.buffer,!1);let a=t.indices;if(l(a)&&l(a.buffer)){let c=l(a.typedArray);e.addBuffer(a.buffer,c)}}function w8e(e,t){switch(e){case We.TRIANGLES:return t/3;case We.TRIANGLE_STRIP:case We.TRIANGLE_FAN:return Math.max(t-2,0);default:return 0}}function Phe(e,t){let n=t.positionBuffer2D;l(n)&&e.addBuffer(n,!0)}function Xhe(e,t){let n=t.morphTargets;if(!l(n))return;let i=!1,o=n.length;for(let r=0;r<o;r++){let s=n[r].attributes,a=s.length;for(let c=0;c<a;c++){let d=s[c];l(d.buffer)&&e.addBuffer(d.buffer,i)}}}function Yhe(e,t){let n=N8e(t),i=n.length;for(let o=0;o<i;o++){let r=n[o];l(r)&&l(r.texture)&&e.addTexture(r.texture)}}function N8e(e){let t=e.metallicRoughness,n=[e.emissiveTexture,e.normalTexture,e.occlusionTexture,t.baseColorTexture,t.metallicRoughnessTexture],i=e.specularGlossiness;return l(i)&&(n.push(i.diffuseTexture),n.push(i.specularGlossinessTexture)),n}function Mhe(e,t){let n=t.length;for(let i=0;i<n;i++){let o=t[i];if(o instanceof Tn.FeatureIdTexture){let r=o.textureReader;l(r.texture)&&e.addTexture(r.texture)}}}function vhe(e,t){let n=t.structuralMetadata;l(n)&&(P8e(e,n),e.propertyTablesByteLength+=n.propertyTablesByteLength);let i=t.featureTables;if(!l(i))return;let o=i.length;for(let r=0;r<o;r++){let s=i[r];e.addBatchTexture(s.batchTexture)}}function P8e(e,t){let n=t.propertyTextures;if(!l(n))return;let i=n.length;for(let o=0;o<i;o++){let s=n[o].properties;for(let a in s)if(s.hasOwnProperty(a)){let d=s[a].textureReader;l(d.texture)&&e.addTexture(d.texture)}}}var mB=whe;var QQn=y(x(),1);var X8e=new F,Y8e=new F,Uhe={name:"SceneMode2DPipelineStage"};Uhe.process=function(e,t,n){let i=It.getAttributeBySemantic(t,ct.POSITION),o=e.shaderBuilder,r=e.model,s=r.sceneGraph.computedModelMatrix,a=e.runtimeNode.computedTransform,c=F.multiplyTransformation(s,a,X8e),d=U8e(e,c,n),u=e.runtimePrimitive;u.boundingSphere2D=d;let h=e.runtimeNode.node.instances;if(l(h))return;if(l(i.typedArray)){let b=Q8e(i,c,d,n);u.positionBuffer2D=b,r._modelResources.push(b),i.typedArray=void 0}o.addDefine("USE_2D_POSITIONS",void 0,pe.VERTEX),o.addUniform("mat4","u_modelView2D",pe.VERTEX);let p=F.fromTranslation(d.center,new F),A=n.context,f={u_modelView2D:function(){return F.multiplyTransformation(A.uniformState.view,p,Y8e)}};e.uniformMap=Ft(f,e.uniformMap)};var M8e=new m,v8e=new m;function U8e(e,t,n){let i=F.multiplyByPoint(t,e.positionMin,M8e),o=so.computeActualEllipsoidPosition(n,i,i),r=F.multiplyByPoint(t,e.positionMax,v8e),s=so.computeActualEllipsoidPosition(n,r,r);return ue.fromCornerPoints(o,s,new ue)}var Dhe=new m;function D8e(e,t){let n=e.length,i=new Float32Array(n),o=t.quantizedVolumeOffset,r=t.quantizedVolumeStepSize;for(let s=0;s<n;s+=3){let a=m.fromArray(e,s,Dhe),c=m.multiplyComponents(a,r,a),d=m.add(c,o,c);i[s]=d.x,i[s+1]=d.y,i[s+2]=d.z}return i}function k8e(e,t,n,i){let o;l(e.quantization)?o=D8e(e.typedArray,e.quantization):o=e.typedArray.slice();let r=e.byteOffset/Float32Array.BYTES_PER_ELEMENT,s=o.length,a=l(e.byteStride)?e.byteStride/Float32Array.BYTES_PER_ELEMENT:3;for(let c=r;c<s;c+=a){let d=m.fromArray(o,c,Dhe);if(isNaN(d.x)||isNaN(d.y)||isNaN(d.z))continue;let u=F.multiplyByPoint(t,d,d),h=so.computeActualEllipsoidPosition(i,u,u),p=m.subtract(h,n,h);o[c]=p.x,o[c+1]=p.y,o[c+2]=p.z}return o}function Q8e(e,t,n,i){let o=He(i);o.mode=se.COLUMBUS_VIEW;let r=n.center,s=k8e(e,t,r,o),a=it.createVertexBuffer({context:i.context,typedArray:s,usage:Be.STATIC_DRAW});return a.vertexArrayDestroyable=!1,a}var hB=Uhe;var $Qn=y(x(),1);var zQn=y(x(),1),fB=`void skinningStage(inout ProcessedAttributes attributes)
{
mat4 skinningMatrix = getSkinningMatrix();
mat3 skinningMatrixMat3 = mat3(skinningMatrix);
vec4 positionMC = vec4(attributes.positionMC, 1.0);
attributes.positionMC = vec3(skinningMatrix * positionMC);
#ifdef HAS_NORMALS
vec3 normalMC = attributes.normalMC;
attributes.normalMC = skinningMatrixMat3 * normalMC;
#endif
#ifdef HAS_TANGENTS
vec3 tangentMC = attributes.tangentMC;
attributes.tangentMC = skinningMatrixMat3 * tangentMC;
#endif
}`;var LC={name:"SkinningPipelineStage",FUNCTION_ID_GET_SKINNING_MATRIX:"getSkinningMatrix",FUNCTION_SIGNATURE_GET_SKINNING_MATRIX:"mat4 getSkinningMatrix()"};LC.process=function(e,t){let n=e.shaderBuilder;n.addDefine("HAS_SKINNING",void 0,pe.VERTEX),z8e(n,t);let i=e.runtimeNode,o=i.computedJointMatrices;n.addUniform("mat4",`u_jointMatrices[${o.length}]`,pe.VERTEX),n.addVertexLines(fB);let r={u_jointMatrices:function(){return i.computedJointMatrices}};e.uniformMap=Ft(r,e.uniformMap)};function O8e(e){let t=-1,n=e.attributes,i=n.length;for(let o=0;o<i;o++){let r=n[o];(r.semantic===ct.JOINTS||r.semantic===ct.WEIGHTS)&&(t=Math.max(t,r.setIndex))}return t}function z8e(e,t){e.addFunction(LC.FUNCTION_ID_GET_SKINNING_MATRIX,LC.FUNCTION_SIGNATURE_GET_SKINNING_MATRIX,pe.VERTEX),e.addFunctionLines(LC.FUNCTION_ID_GET_SKINNING_MATRIX,["mat4 skinnedMatrix = mat4(0);"]);let i,o,r=["x","y","z","w"],s=O8e(t);for(i=0;i<=s;i++)for(o=0;o<=3;o++){let c=r[o],d=`skinnedMatrix += a_weights_${i}.${c} * u_jointMatrices[int(a_joints_${i}.${c})];`;e.addFunctionLines(LC.FUNCTION_ID_GET_SKINNING_MATRIX,[d])}e.addFunctionLines(LC.FUNCTION_ID_GET_SKINNING_MATRIX,["return skinnedMatrix;"])}var pB=LC;var sOn=y(x(),1);var tOn=y(x(),1),AB=`void verticalExaggerationStage(
inout ProcessedAttributes attributes
) {
// Compute the distance from the camera to the local center of curvature.
vec4 vertexPositionENU = czm_modelToEnu * vec4(attributes.positionMC, 1.0);
vec2 vertexAzimuth = normalize(vertexPositionENU.xy);
// Curvature = 1 / radius of curvature.
float azimuthalCurvature = dot(vertexAzimuth * vertexAzimuth, czm_eyeEllipsoidCurvature);
float eyeToCenter = 1.0 / azimuthalCurvature + czm_eyeHeight;
// Compute the approximate ellipsoid normal at the vertex position.
// Uses a circular approximation for the Earth curvature along the geodesic.
vec3 vertexPositionEC = (czm_modelView * vec4(attributes.positionMC, 1.0)).xyz;
vec3 centerToVertex = eyeToCenter * czm_eyeEllipsoidNormalEC + vertexPositionEC;
vec3 vertexNormal = normalize(centerToVertex);
// Estimate the (sine of the) angle between the camera direction and the vertex normal
float verticalDistance = dot(vertexPositionEC, czm_eyeEllipsoidNormalEC);
float horizontalDistance = length(vertexPositionEC - verticalDistance * czm_eyeEllipsoidNormalEC);
float sinTheta = horizontalDistance / (eyeToCenter + verticalDistance);
bool isSmallAngle = clamp(sinTheta, 0.0, 0.05) == sinTheta;
// Approximate the change in height above the ellipsoid, from camera to vertex position.
float exactVersine = 1.0 - dot(czm_eyeEllipsoidNormalEC, vertexNormal);
float smallAngleVersine = 0.5 * sinTheta * sinTheta;
float versine = isSmallAngle ? smallAngleVersine : exactVersine;
float dHeight = dot(vertexPositionEC, vertexNormal) - eyeToCenter * versine;
float vertexHeight = czm_eyeHeight + dHeight;
// Transform the approximate vertex normal to model coordinates.
vec3 vertexNormalMC = (czm_inverseModelView * vec4(vertexNormal, 0.0)).xyz;
vertexNormalMC = normalize(vertexNormalMC);
// Compute the exaggeration and apply it along the approximate vertex normal.
float stretch = u_verticalExaggerationAndRelativeHeight.x;
float shift = u_verticalExaggerationAndRelativeHeight.y;
float exaggeration = (vertexHeight - shift) * (stretch - 1.0);
attributes.positionMC += exaggeration * vertexNormalMC;
}
`;var khe={name:"VerticalExaggerationPipelineStage"},H8e=new M;khe.process=function(e,t,n){let{shaderBuilder:i,uniformMap:o}=e;i.addVertexLines(AB),i.addDefine("HAS_VERTICAL_EXAGGERATION",void 0,pe.VERTEX),i.addUniform("vec2","u_verticalExaggerationAndRelativeHeight",pe.VERTEX),o.u_verticalExaggerationAndRelativeHeight=function(){return M.fromElements(n.verticalExaggeration,n.verticalExaggerationRelativeHeight,H8e)}};var gB=khe;var TOn=y(x(),1);var uOn=y(x(),1);var qj={};function J8e(e){let t=Ue.createTypedArray(e,e*2),n=e,i=0;for(let o=0;o<n;o+=3)t[i++]=o,t[i++]=o+1,t[i++]=o+1,t[i++]=o+2,t[i++]=o+2,t[i++]=o;return t}function K8e(e,t){let n=t.length,i=Ue.createTypedArray(e,n*2),o=0;for(let r=0;r<n;r+=3){let s=t[r],a=t[r+1],c=t[r+2];i[o++]=s,i[o++]=a,i[o++]=a,i[o++]=c,i[o++]=c,i[o++]=s}return i}function j8e(e){let t=e-2,n=2+t*4,i=Ue.createTypedArray(e,n),o=0;i[o++]=0,i[o++]=1;for(let r=0;r<t;r++)i[o++]=r+1,i[o++]=r+2,i[o++]=r+2,i[o++]=r;return i}function q8e(e,t){let i=t.length-2,o=2+i*4,r=Ue.createTypedArray(e,o),s=0;r[s++]=t[0],r[s++]=t[1];for(let a=0;a<i;a++){let c=t[a],d=t[a+1],u=t[a+2];r[s++]=d,r[s++]=u,r[s++]=u,r[s++]=c}return r}function $8e(e){let t=e-2,n=2+t*4,i=Ue.createTypedArray(e,n),o=0;i[o++]=0,i[o++]=1;for(let r=0;r<t;r++)i[o++]=r+1,i[o++]=r+2,i[o++]=r+2,i[o++]=0;return i}function e7e(e,t){let i=t.length-2,o=2+i*4,r=Ue.createTypedArray(e,o),s=0,a=t[0];r[s++]=a,r[s++]=t[1];for(let c=0;c<i;c++){let d=t[c+1],u=t[c+2];r[s++]=d,r[s++]=u,r[s++]=u,r[s++]=a}return r}qj.createWireframeIndices=function(e,t,n){let i=l(n);if(e===We.TRIANGLES)return i?K8e(t,n):J8e(t);if(e===We.TRIANGLE_STRIP)return i?q8e(t,n):j8e(t);if(e===We.TRIANGLE_FAN)return i?e7e(t,n):$8e(t)};qj.getWireframeIndicesCount=function(e,t){return e===We.TRIANGLES?t*2:e===We.TRIANGLE_STRIP||e===We.TRIANGLE_FAN?2+(t-2)*4:t};var v_=qj;var Qhe={name:"WireframePipelineStage"};Qhe.process=function(e,t,n){e.shaderBuilder.addDefine("HAS_WIREFRAME",void 0,pe.FRAGMENT);let o=e.model,r=t7e(t,e.indices,n);o._pipelineResources.push(r),e.wireframeIndexBuffer=r,o.statistics.addBuffer(r,!1);let a=e.primitiveType,c=e.count;e.primitiveType=We.LINES,e.count=v_.getWireframeIndicesCount(a,c)};function t7e(e,t,n){let o=It.getAttributeBySemantic(e,ct.POSITION).count,r=n.context.webgl2,s;if(l(t)){let u=t.buffer,h=t.count;l(u)&&r?(s=u.sizeInBytes===h?new Uint8Array(h):Ue.createTypedArray(o,h),u.getBufferData(s)):s=t.typedArray}let a=e.primitiveType,c=v_.createWireframeIndices(a,o,s),d=Ue.fromSizeInBytes(c.BYTES_PER_ELEMENT);return it.createIndexBuffer({context:n.context,typedArray:c,usage:Be.STATIC_DRAW,indexDatatype:d})}var bB=Qhe;function Ohe(e){e=e??Q.EMPTY_OBJECT;let t=e.primitive,n=e.node,i=e.model;this.primitive=t,this.node=n,this.model=i,this.pipelineStages=[],this.drawCommand=void 0,this.boundingSphere=void 0,this.boundingSphere2D=void 0,this.positionBuffer2D=void 0,this.batchLengths=void 0,this.batchOffsets=void 0,this.updateStages=[]}Ohe.prototype.configurePipeline=function(e){let t=this.pipelineStages;t.length=0;let n=this.primitive,i=this.node,o=this.model,r=o.customShader;if(l(o._marsOptions)&&l(o._marsOptions.customShaders)){let g=gA.getCache(o._marsOptions.customShaders);for(let _ in g)if(Object.prototype.hasOwnProperty.call(g,_)){r=g[_];break}}let s=o.style,a=e.context.webgl2,d=e.mode!==se.SCENE3D&&!e.scene3DOnly&&o._projectTo2D,u=e.verticalExaggeration!==1&&o.hasVerticalExaggeration,h=l(n.morphTargets)&&n.morphTargets.length>0,p=l(i.skin),A=l(o.imageryLayers),f=l(r),C=!(f&&l(r.fragmentShaderText))||r.mode!==fg.REPLACE_MATERIAL,T=It.hasQuantizedAttributes(n.attributes),E=o.debugWireframe&&We.isTriangles(n.primitiveType)&&(o._enableDebugWireframe||a),S=o.pointCloudShading,I=l(S)&&S.attenuation,R=l(S)&&S.backFaceCulling,V=n.primitiveType===We.POINTS&&(l(s)||I||R),W=o._enableShowOutline&&l(n.outlineCoordinates),B=l(n.edgeVisibility),N=n7e(o,i,n),P=l(o.classificationType);d&&t.push(hB),t.push(W2),E&&t.push(bB),P&&t.push(u2),h&&t.push(rB),p&&t.push(pB),V&&t.push(cB),T&&t.push(E2),A&&(W?_t("outlines-and-draping","Primitive outlines disable imagery draping"):t.push(j2)),C&&t.push(iB),t.push(B0),t.push(Im),t.push(Au),N.hasPropertyTable&&(t.push(N0),t.push(d2),t.push(f2)),u&&t.push(gB),f&&t.push(C2),t.push($2),o.allowPicking&&t.push(sB),W&&t.push(uB),B&&(e.edgeVisibilityRequested=!0,t.push(R2),t.push(_2)),t.push(l2),t.push(mB)};function n7e(e,t,n){let i;return l(t.instances)&&(i=It.getFeatureIdsByLabel(t.instances.featureIds,e.instanceFeatureIdLabel),l(i))?{hasFeatureIds:!0,hasPropertyTable:l(i.propertyTableId)}:(i=It.getFeatureIdsByLabel(n.featureIds,e.featureIdLabel),l(i)?{hasFeatureIds:!0,hasPropertyTable:l(i.propertyTableId)}:{hasFeatureIds:!1,hasPropertyTable:!1})}var yB=Ohe;var azn=y(x(),1);function $j(e){e=e??Q.EMPTY_OBJECT,this._sceneGraph=e.sceneGraph;let t=e.skin;this._skin=t,this._inverseBindMatrices=void 0,this._joints=[],this._jointMatrices=[],i7e(this)}Object.defineProperties($j.prototype,{skin:{get:function(){return this._skin}},sceneGraph:{get:function(){return this._sceneGraph}},inverseBindMatrices:{get:function(){return this._inverseBindMatrices}},joints:{get:function(){return this._joints}},jointMatrices:{get:function(){return this._jointMatrices}}});function i7e(e){let t=e.skin,n=t.inverseBindMatrices;e._inverseBindMatrices=n;let i=t.joints,o=i.length,r=e.sceneGraph._runtimeNodes,s=e.joints,a=e._jointMatrices;for(let c=0;c<o;c++){let d=i[c].index,u=r[d];s.push(u);let h=n[c],p=zhe(u,h,new F);a.push(p)}}function zhe(e,t,n){let i=F.multiplyTransformation(e.transformToRoot,e.transform,n);return n=F.multiplyTransformation(i,t,n),n}$j.prototype.updateJointMatrices=function(){let e=this._jointMatrices,t=e.length;for(let n=0;n<t;n++){let i=this.joints[n],o=this.inverseBindMatrices[n];e[n]=zhe(i,o,e[n])}};var xB=$j;var pzn=y(x(),1);var lzn=y(x(),1);function o7e(){this.pass=void 0,this.alphaCutoff=void 0}var WC=o7e;function r7e(e){this.shaderBuilder=new GA,this.model=e,this.uniformMap={},this.alphaOptions=new WC,this.renderStateOptions=Qe.getState(Qe.fromCache({depthTest:{enabled:!0,func:ec.LESS_OR_EQUAL}})),this.hasSilhouette=!1,this.hasSkipLevelOfDetail=!1,this.nodeRenderResources=[]}var CB=r7e;var Izn=y(x(),1);var gzn=y(x(),1),TB=`void silhouetteStage(inout vec4 color) {
if(model_silhouettePass) {
color = czm_gammaCorrect(model_silhouetteColor);
}
}`;var yzn=y(x(),1),EB=`void silhouetteStage(in ProcessedAttributes attributes, inout vec4 positionClip) {
#ifdef HAS_NORMALS
if(model_silhouettePass) {
vec3 normal = normalize(czm_normal3D * attributes.normalMC);
normal.x *= czm_projection[0][0];
normal.y *= czm_projection[1][1];
positionClip.xy += normal.xy * positionClip.w * model_silhouetteSize * czm_pixelRatio / czm_viewport.z;
}
#endif
}
`;var a9={name:"ModelSilhouettePipelineStage"};a9.silhouettesLength=0;a9.process=function(e,t,n){l(t._silhouetteId)||(t._silhouetteId=++a9.silhouettesLength);let i=e.shaderBuilder;i.addDefine("HAS_SILHOUETTE",void 0,pe.BOTH),i.addVertexLines(EB),i.addFragmentLines(TB),i.addUniform("vec4","model_silhouetteColor",pe.FRAGMENT),i.addUniform("float","model_silhouetteSize",pe.VERTEX),i.addUniform("bool","model_silhouettePass",pe.BOTH);let o={model_silhouetteColor:function(){return t.silhouetteColor},model_silhouetteSize:function(){return t.silhouetteSize},model_silhouettePass:function(){return!1}};e.uniformMap=Ft(o,e.uniformMap),e.hasSilhouette=!0};var SB=a9;var Fzn=y(x(),1);var Rzn=y(x(),1),_B=`void modelSplitterStage()
{
// Don't split when rendering the shadow map, because it is rendered from
// the perspective of a totally different camera.
#ifndef SHADOW_MAP
if (model_splitDirection < 0.0 && gl_FragCoord.x > czm_splitPosition) discard;
if (model_splitDirection > 0.0 && gl_FragCoord.x < czm_splitPosition) discard;
#endif
}
`;var c9={name:"ModelSplitterPipelineStage",SPLIT_DIRECTION_UNIFORM_NAME:"model_splitDirection"};c9.process=function(e,t,n){let i=e.shaderBuilder;i.addDefine("HAS_MODEL_SPLITTER",void 0,pe.FRAGMENT),i.addFragmentLines(_B);let o={};i.addUniform("float",c9.SPLIT_DIRECTION_UNIFORM_NAME,pe.FRAGMENT),o[c9.SPLIT_DIRECTION_UNIFORM_NAME]=function(){return t.splitDirection},e.uniformMap=Ft(o,e.uniformMap)};var IB=c9;var Nzn=y(x(),1);function s7e(e,t){this.model=e.model,this.shaderBuilder=e.shaderBuilder.clone(),this.uniformMap=He(e.uniformMap),this.alphaOptions=He(e.alphaOptions),this.renderStateOptions=He(e.renderStateOptions,!0),this.hasSilhouette=e.hasSilhouette,this.hasSkipLevelOfDetail=e.hasSkipLevelOfDetail,this.runtimeNode=t,this.attributes=[],this.attributeIndex=1,this.featureIdVertexAttributeSetIndex=0,this.instanceCount=0,this.primitiveRenderResources=[]}var ZB=s7e;var Hzn=y(x(),1);var Mzn=y(x(),1);function a7e(e){e=e??Q.EMPTY_OBJECT,this.lightingModel=e.lightingModel??Cp.UNLIT}var RB=a7e;function c7e(e,t){this.model=e.model,this.runtimeNode=e.runtimeNode,this.attributes=e.attributes.slice(),this.attributeIndex=e.attributeIndex,this.featureIdVertexAttributeSetIndex=e.featureIdVertexAttributeSetIndex,this.uniformMap=He(e.uniformMap),this.alphaOptions=He(e.alphaOptions),this.renderStateOptions=He(e.renderStateOptions,!0),this.hasSilhouette=e.hasSilhouette,this.hasSkipLevelOfDetail=e.hasSkipLevelOfDetail,this.shaderBuilder=e.shaderBuilder.clone(),this.instanceCount=e.instanceCount,this.runtimePrimitive=t;let n=t.primitive;this.count=l(n.indices)?n.indices.count:It.getAttributeBySemantic(n,"POSITION").count,this.hasPropertyTable=!1,this.indices=n.indices,this.wireframeIndexBuffer=void 0,this.primitiveType=n.primitiveType;let i=It.getPositionMinMax(n,this.runtimeNode.instancingTranslationMin,this.runtimeNode.instancingTranslationMax);this.positionMin=m.clone(i.min,new m),this.positionMax=m.clone(i.max,new m),this.boundingSphere=ue.fromCornerPoints(this.positionMin,this.positionMax,new ue),this.lightingOptions=new RB,this.pickId=void 0}var VB=c7e;var K3n=y(x(),1);var l3n=y(x(),1);function t4(e){e=e??Q.EMPTY_OBJECT;let t=e.command,n=e.primitiveRenderResources,i=n.model;this._command=t,this._model=i,this._runtimePrimitive=n.runtimePrimitive,this._modelMatrix=t.modelMatrix,this._boundingVolume=t.boundingVolume,this._cullFace=t.renderState.cull.face;let o=i.classificationType;this._classificationType=o,this._classifiesTerrain=o!==ti.CESIUM_3D_TILE,this._classifies3DTiles=o!==ti.TERRAIN,this._useDebugWireframe=i._enableDebugWireframe&&i.debugWireframe,this._pickId=n.pickId,this._commandListTerrain=[],this._commandList3DTiles=[],this._commandListIgnoreShow=[],this._commandListDebugWireframe=[],this._commandListTerrainPicking=[],this._commandList3DTilesPicking=[],m7e(this)}function l7e(e){return{colorMask:{red:!1,green:!1,blue:!1,alpha:!1},stencilTest:{enabled:!0,frontFunction:e,frontOperation:{fail:Vt.KEEP,zFail:Vt.DECREMENT_WRAP,zPass:Vt.KEEP},backFunction:e,backOperation:{fail:Vt.KEEP,zFail:Vt.INCREMENT_WRAP,zPass:Vt.KEEP},reference:Jt.CESIUM_3D_TILE_MASK,mask:Jt.CESIUM_3D_TILE_MASK},stencilMask:Jt.CLASSIFICATION_MASK,depthTest:{enabled:!0,func:ec.LESS_OR_EQUAL},depthMask:!1}}var d7e={stencilTest:{enabled:!0,frontFunction:ni.NOT_EQUAL,frontOperation:{fail:Vt.ZERO,zFail:Vt.ZERO,zPass:Vt.ZERO},backFunction:ni.NOT_EQUAL,backOperation:{fail:Vt.ZERO,zFail:Vt.ZERO,zPass:Vt.ZERO},reference:0,mask:Jt.CLASSIFICATION_MASK},stencilMask:Jt.CLASSIFICATION_MASK,depthTest:{enabled:!1},depthMask:!1,blending:ln.PRE_MULTIPLIED_ALPHA_BLEND},u7e={stencilTest:{enabled:!0,frontFunction:ni.NOT_EQUAL,frontOperation:{fail:Vt.ZERO,zFail:Vt.ZERO,zPass:Vt.ZERO},backFunction:ni.NOT_EQUAL,backOperation:{fail:Vt.ZERO,zFail:Vt.ZERO,zPass:Vt.ZERO},reference:0,mask:Jt.CLASSIFICATION_MASK},stencilMask:Jt.CLASSIFICATION_MASK,depthTest:{enabled:!1},depthMask:!1},Khe=[];function m7e(e){let t=e._command,n=Khe;if(e._useDebugWireframe){t.pass=Ge.OPAQUE,n.length=0,n.push(t),e._commandListDebugWireframe=GB(e,n,e._commandListDebugWireframe);let r=e._commandListDebugWireframe,s=r.length;for(let a=0;a<s;a++){let c=r[a];c.count*=2,c.offset*=2}return}let o=e.model.allowPicking;if(e._classifiesTerrain){let r=Ge.TERRAIN_CLASSIFICATION,s=e4(t,r),a=Hhe(t,r);n.length=0,n.push(s,a),e._commandListTerrain=GB(e,n,e._commandListTerrain),o&&(e._commandListTerrainPicking=Jhe(e,n,e._commandListTerrainPicking))}if(e._classifies3DTiles){let r=Ge.CESIUM_3D_TILE_CLASSIFICATION,s=e4(t,r),a=Hhe(t,r);n.length=0,n.push(s,a),e._commandList3DTiles=GB(e,n,e._commandList3DTiles),o&&(e._commandList3DTilesPicking=Jhe(e,n,e._commandList3DTilesPicking))}}function GB(e,t,n){let i=e._runtimePrimitive,o=i.batchLengths,r=i.batchOffsets,s=o.length,a=t.length;for(let c=0;c<s;c++){let d=o[c],u=r[c];for(let h=0;h<a;h++){let p=t[h],A=ot.shallowClone(p);A.count=d,A.offset=u,n.push(A)}}return n}function e4(e,t){let n=ot.shallowClone(e);n.cull=!1,n.pass=t;let i=t===Ge.TERRAIN_CLASSIFICATION?ni.ALWAYS:ni.EQUAL,o=l7e(i);return n.renderState=Qe.fromCache(o),n}function Hhe(e,t){let n=ot.shallowClone(e);return n.cull=!1,n.pass=t,n.renderState=Qe.fromCache(d7e),n}var h7e=[];function Jhe(e,t,n){let i=Qe.fromCache(u7e),o=t[0],r=t[1],s=ot.shallowClone(o);s.cull=!0,s.pickOnly=!0;let a=ot.shallowClone(r);a.cull=!0,a.pickOnly=!0,a.renderState=i,a.pickId=e._pickId;let c=h7e;return c.length=0,c.push(s,a),GB(e,c,n)}Object.defineProperties(t4.prototype,{command:{get:function(){return this._command}},runtimePrimitive:{get:function(){return this._runtimePrimitive}},batchLengths:{get:function(){return this._runtimePrimitive.batchLengths}},batchOffsets:{get:function(){return this._runtimePrimitive.batchOffsets}},model:{get:function(){return this._model}},classificationType:{get:function(){return this._classificationType}},modelMatrix:{get:function(){return this._modelMatrix},set:function(e){this._modelMatrix=F.clone(e,this._modelMatrix);let t=this._runtimePrimitive.boundingSphere;this._boundingVolume=ue.transform(t,this._modelMatrix,this._boundingVolume)}},boundingVolume:{get:function(){return this._boundingVolume}},cullFace:{get:function(){return this._cullFace},set:function(e){this._cullFace=e}}});t4.prototype.pushCommands=function(e,t){let n=e.passes;if(n.render){if(this._useDebugWireframe){ri(t,this._commandListDebugWireframe);return}if(this._classifiesTerrain&&ri(t,this._commandListTerrain),this._classifies3DTiles&&ri(t,this._commandList3DTiles),e.invertClassification&&this._classifies3DTiles){if(this._commandListIgnoreShow.length===0){let o=Ge.CESIUM_3D_TILE_CLASSIFICATION_IGNORE_SHOW,r=e4(this._command,o),s=Khe;s.length=0,s.push(r),this._commandListIgnoreShow=GB(this,s,this._commandListIgnoreShow)}ri(t,this._commandListIgnoreShow)}}return n.pick&&(this._classifiesTerrain&&ri(t,this._commandListTerrainPicking),this._classifies3DTiles&&ri(t,this._commandList3DTilesPicking)),t};var LB=t4;var G3n=y(x(),1);function WB(e){e=e??Q.EMPTY_OBJECT;let t=e.command,n=e.primitiveRenderResources,i=n.model;this._model=i;let o=n.runtimePrimitive;this._runtimePrimitive=o,this._primitiveRenderResources=n;let r=t.pass===Ge.TRANSLUCENT,a=!o.primitive.material.doubleSided&&!r,c=n.hasSilhouette,d=!r&&!c,u=n.hasSkipLevelOfDetail&&!r,h=c,p=l(n.edgeGeometry);this._command=t,this._modelMatrix=F.clone(t.modelMatrix),this._boundingVolume=ue.clone(t.boundingVolume),this._modelMatrix2D=new F,this._boundingVolume2D=new ue,this._modelMatrix2DDirty=!1,this._backFaceCulling=t.renderState.cull.enabled,this._cullFace=t.renderState.cull.face,this._shadows=i.shadows,this._debugShowBoundingVolume=t.debugShowBoundingVolume,this._usesBackFaceCulling=a,this._needsTranslucentCommand=d,this._needsSkipLevelOfDetailCommands=u,this._needsSilhouetteCommands=h,this._needsEdgeCommands=p,this._originalCommand=void 0,this._translucentCommand=void 0,this._skipLodBackfaceCommand=void 0,this._skipLodStencilCommand=void 0,this._silhouetteModelCommand=void 0,this._silhouetteColorCommand=void 0,this._edgeCommand=void 0,this._derivedCommands=[],this._has2DCommands=!1,f7e(this)}function Tp(e){this.command=e.command,this.updateShadows=e.updateShadows,this.updateBackFaceCulling=e.updateBackFaceCulling,this.updateCullFace=e.updateCullFace,this.updateDebugShowBoundingVolume=e.updateDebugShowBoundingVolume,this.is2D=e.is2D??!1,this.derivedCommand2D=void 0}Tp.clone=function(e){return new Tp({command:e.command,updateShadows:e.updateShadows,updateBackFaceCulling:e.updateBackFaceCulling,updateCullFace:e.updateCullFace,updateDebugShowBoundingVolume:e.updateDebugShowBoundingVolume,is2D:e.is2D,derivedCommand2D:e.derivedCommand2D})};function f7e(e){let t=e._command;t.modelMatrix=e._modelMatrix,t.boundingVolume=e._boundingVolume;let n=e._model,i=e._usesBackFaceCulling,o=e._derivedCommands;if(e._originalCommand=new Tp({command:t,updateShadows:!0,updateBackFaceCulling:i,updateCullFace:i,updateDebugShowBoundingVolume:!0,is2D:!1}),o.push(e._originalCommand),e._needsTranslucentCommand&&(e._translucentCommand=new Tp({command:C7e(t),updateShadows:!0,updateBackFaceCulling:!1,updateCullFace:!1,updateDebugShowBoundingVolume:!0}),o.push(e._translucentCommand)),e._needsSkipLevelOfDetailCommands&&(e._skipLodBackfaceCommand=new Tp({command:R7e(t),updateShadows:!1,updateBackFaceCulling:!1,updateCullFace:i,updateDebugShowBoundingVolume:!1}),e._skipLodStencilCommand=new Tp({command:V7e(t,n),updateShadows:!0,updateBackFaceCulling:i,updateCullFace:i,updateDebugShowBoundingVolume:!0}),o.push(e._skipLodBackfaceCommand),o.push(e._skipLodStencilCommand)),e._needsSilhouetteCommands&&(e._silhouetteModelCommand=new Tp({command:T7e(t,n),updateShadows:!0,updateBackFaceCulling:i,updateCullFace:i,updateDebugShowBoundingVolume:!0}),e._silhouetteColorCommand=new Tp({command:E7e(t,n),updateShadows:!1,updateBackFaceCulling:!1,updateCullFace:!1,updateDebugShowBoundingVolume:!1}),o.push(e._silhouetteModelCommand),o.push(e._silhouetteColorCommand)),e._needsEdgeCommands){let r=e._primitiveRenderResources;e._edgeCommand=new Tp({command:S7e(t,r,n),updateShadows:!1,updateBackFaceCulling:!1,updateCullFace:!1,updateDebugShowBoundingVolume:!1}),o.push(e._edgeCommand)}}Object.defineProperties(WB.prototype,{command:{get:function(){return this._command}},runtimePrimitive:{get:function(){return this._runtimePrimitive}},model:{get:function(){return this._model}},primitiveType:{get:function(){return this._command.primitiveType}},modelMatrix:{get:function(){return this._modelMatrix},set:function(e){this._modelMatrix=F.clone(e,this._modelMatrix),this._modelMatrix2DDirty=!0,this._boundingVolume=ue.transform(this.runtimePrimitive.boundingSphere,this._modelMatrix,this._boundingVolume)}},boundingVolume:{get:function(){return this._boundingVolume}},shadows:{get:function(){return this._shadows},set:function(e){this._shadows=e,A7e(this)}},backFaceCulling:{get:function(){return this._backFaceCulling},set:function(e){this._backFaceCulling!==e&&(this._backFaceCulling=e,g7e(this))}},cullFace:{get:function(){return this._cullFace},set:function(e){this._cullFace!==e&&(this._cullFace=e,b7e(this))}},debugShowBoundingVolume:{get:function(){return this._debugShowBoundingVolume},set:function(e){this._debugShowBoundingVolume!==e&&(this._debugShowBoundingVolume=e,y7e(this))}}});function p7e(e,t){let n=e._modelMatrix;e._modelMatrix2D=F.clone(n,e._modelMatrix2D),e._modelMatrix2D[13]-=L.sign(n[13])*2*L.PI*t.mapProjection.ellipsoid.maximumRadius,e._boundingVolume2D=ue.transform(e.runtimePrimitive.boundingSphere,e._modelMatrix2D,e._boundingVolume2D)}function A7e(e){let t=e.shadows,n=Vn.castShadows(t),i=Vn.receiveShadows(t),o=e._derivedCommands;for(let r=0;r<o.length;++r){let s=o[r];if(s.updateShadows){let a=s.command;a.castShadows=n,a.receiveShadows=i}}}function g7e(e){let t=e.backFaceCulling,n=e._derivedCommands;for(let i=0;i<n.length;++i){let o=n[i];if(o.updateBackFaceCulling){let r=o.command,s=He(r.renderState,!0);s.cull.enabled=t,r.renderState=Qe.fromCache(s)}}}function b7e(e){let t=e.cullFace,n=e._derivedCommands;for(let i=0;i<n.length;++i){let o=n[i];if(o.updateCullFace){let r=o.command,s=He(r.renderState,!0);s.cull.face=t,r.renderState=Qe.fromCache(s)}}}function y7e(e){let t=e.debugShowBoundingVolume,n=e._derivedCommands;for(let i=0;i<n.length;++i){let o=n[i];if(o.updateDebugShowBoundingVolume){let r=o.command;r.debugShowBoundingVolume=t}}}WB.prototype.pushCommands=function(e,t){let n=n4(this,e);n&&!this._has2DCommands&&(x7e(this),this._has2DCommands=!0,this._modelMatrix2DDirty=!0),this._modelMatrix2DDirty&&(p7e(this,e),this._modelMatrix2DDirty=!1);let i=this.model.styleCommandsNeeded;if(!(this._needsTranslucentCommand&&l(i)&&(i!==zh.ALL_OPAQUE&&Y0(t,this._translucentCommand,n),i===zh.ALL_TRANSLUCENT))){if(this._needsSkipLevelOfDetailCommands){let{tileset:o,tile:r}=this._model.content;if(o.hasMixedContent){r._finalResolution||Y0(o._backfaceCommands,this._skipLodBackfaceCommand,n),_7e(this,r,n),Y0(t,this._skipLodStencilCommand,n);return}}if(this._needsSilhouetteCommands){Y0(t,this._silhouetteModelCommand,n);return}return Y0(t,this._originalCommand,n),this._needsEdgeCommands&&Y0(t,this._edgeCommand,n),t}};WB.prototype.pushSilhouetteCommands=function(e,t){let n=n4(this,e);return Y0(t,this._silhouetteColorCommand,n),t};WB.prototype.pushEdgeCommands=function(e,t){if(!l(this._edgeCommand))return t;let n=n4(this,e);return Y0(t,this._edgeCommand,n),t};function Y0(e,t,n){e.push(t.command),n&&e.push(t.derivedCommand2D.command)}function n4(e,t){if(t.mode!==se.SCENE2D||e.model._projectTo2D)return!1;let i=e.model.sceneGraph._boundingSphere2D,o=i.center.y-i.radius,r=i.center.y+i.radius,s=t.mapProjection.ellipsoid.maximumRadius*L.PI;return o<s&&r>s||o<-s&&r>-s}function FC(e,t){if(!l(t))return;let n=Tp.clone(t),i=ot.shallowClone(t.command);return i.modelMatrix=e._modelMatrix2D,i.boundingVolume=e._boundingVolume2D,n.command=i,n.updateShadows=!1,n.is2D=!0,t.derivedCommand2D=n,e._derivedCommands.push(n),n}function x7e(e){FC(e,e._originalCommand),FC(e,e._translucentCommand),FC(e,e._skipLodBackfaceCommand),FC(e,e._skipLodStencilCommand),FC(e,e._silhouetteModelCommand),FC(e,e._silhouetteColorCommand),FC(e,e._edgeCommand)}function C7e(e){let t=ot.shallowClone(e);t.pass=Ge.TRANSLUCENT;let n=He(e.renderState,!0);return n.cull.enabled=!1,n.depthMask=!1,n.blending=ln.ALPHA_BLEND,t.renderState=Qe.fromCache(n),t}function T7e(e,t){let n=t._silhouetteId%255,i=ot.shallowClone(e),o=He(e.renderState,!0);return o.stencilTest={enabled:!0,frontFunction:ne.ALWAYS,backFunction:ne.ALWAYS,reference:n,mask:-1,frontOperation:{fail:ne.KEEP,zFail:ne.KEEP,zPass:ne.REPLACE},backOperation:{fail:ne.KEEP,zFail:ne.KEEP,zPass:ne.REPLACE}},t.isInvisible()&&(o.colorMask={red:!1,green:!1,blue:!1,alpha:!1}),i.renderState=Qe.fromCache(o),i}function E7e(e,t){let n=t._silhouetteId%255,i=ot.shallowClone(e),o=He(e.renderState,!0);o.cull.enabled=!1,(e.pass===Ge.TRANSLUCENT||t.silhouetteColor.alpha<1)&&(i.pass=Ge.TRANSLUCENT,o.depthMask=!1,o.blending=ln.ALPHA_BLEND),o.stencilTest={enabled:!0,frontFunction:ne.NOTEQUAL,backFunction:ne.NOTEQUAL,reference:n,mask:-1,frontOperation:{fail:ne.KEEP,zFail:ne.KEEP,zPass:ne.KEEP},backOperation:{fail:ne.KEEP,zFail:ne.KEEP,zPass:ne.KEEP}};let s=He(e.uniformMap);return s.model_silhouettePass=function(){return!0},i.renderState=Qe.fromCache(o),i.uniformMap=s,i.castShadows=!1,i.receiveShadows=!1,i}function S7e(e,t){let n=t.edgeGeometry,i=ot.shallowClone(e);i.vertexArray=n.vertexArray,i.primitiveType=n.primitiveType,i.count=n.indexCount,l(n.shaderProgram)&&(i.shaderProgram=n.shaderProgram),i.pass=n.pass;let o=He(e.uniformMap);return o.u_isEdgePass=function(){return!0},i.uniformMap=o,i.uniformMap=o,i.castShadows=!1,i.receiveShadows=!1,i}function _7e(e,t,n){let i=e._skipLodStencilCommand,o=i.command,r=t._selectionDepth,s=I7e(o);if(r!==s){let a=Z7e(r),c=He(o.renderState,!0);c.stencilTest.reference=a,o.renderState=Qe.fromCache(c),n&&(i.derivedCommand2D.renderState=c)}}function I7e(e){return(e.renderState.stencilTest.reference&Jt.SKIP_LOD_MASK)>>>Jt.SKIP_LOD_BIT_SHIFT}function Z7e(e){return Jt.CESIUM_3D_TILE_MASK|e<<Jt.SKIP_LOD_BIT_SHIFT}function R7e(e){let t=ot.shallowClone(e),n=He(e.renderState,!0);n.cull.enabled=!0,n.cull.face=wi.FRONT,n.colorMask={red:!1,green:!1,blue:!1,alpha:!1},n.polygonOffset={enabled:!0,factor:5,units:5};let i=He(t.uniformMap),o=new M(5,5);return i.u_polygonOffset=function(){return o},t.renderState=Qe.fromCache(n),t.uniformMap=i,t.castShadows=!1,t.receiveShadows=!1,t}function V7e(e){let t=ot.shallowClone(e),n=He(e.renderState,!0),{stencilTest:i}=n;return i.enabled=!0,i.mask=Jt.SKIP_LOD_MASK,i.reference=Jt.CESIUM_3D_TILE_MASK,i.frontFunction=ni.GREATER_OR_EQUAL,i.frontOperation.zPass=Vt.REPLACE,i.backFunction=ni.GREATER_OR_EQUAL,i.backOperation.zPass=Vt.REPLACE,n.stencilMask=Jt.CESIUM_3D_TILE_MASK|Jt.SKIP_LOD_MASK,t.renderState=Qe.fromCache(n),t}var FB=WB;var W3n=y(x(),1),BB=`precision highp float;
czm_modelVertexOutput defaultVertexOutput(vec3 positionMC) {
czm_modelVertexOutput vsOutput;
vsOutput.positionMC = positionMC;
vsOutput.pointSize = 1.0;
return vsOutput;
}
void main()
{
// Initialize the attributes struct with all
// attributes except quantized ones.
ProcessedAttributes attributes;
initializeAttributes(attributes);
#ifdef HAS_IMAGERY
initializeImageryAttributes();
#endif
// Dequantize the quantized ones and add them to the
// attributes struct.
#ifdef USE_DEQUANTIZATION
dequantizationStage(attributes);
#endif
#ifdef HAS_MORPH_TARGETS
morphTargetsStage(attributes);
#endif
#ifdef HAS_SKINNING
skinningStage(attributes);
#endif
#ifdef HAS_PRIMITIVE_OUTLINE
primitiveOutlineStage();
#endif
// Compute the bitangent according to the formula in the glTF spec.
// Normal and tangents can be affected by morphing and skinning, so
// the bitangent should not be computed until their values are finalized.
#ifdef HAS_BITANGENTS
attributes.bitangentMC = normalize(cross(attributes.normalMC, attributes.tangentMC) * attributes.tangentSignMC);
#endif
FeatureIds featureIds;
featureIdStage(featureIds, attributes);
#ifdef HAS_SELECTED_FEATURE_ID
SelectedFeature feature;
selectedFeatureIdStage(feature, featureIds);
// Handle any show properties that come from the style.
cpuStylingStage(attributes.positionMC, feature);
#endif
#if defined(USE_2D_POSITIONS) || defined(USE_2D_INSTANCING)
// The scene mode 2D pipeline stage and instancing stage add a different
// model view matrix to accurately project the model to 2D. However, the
// output positions and normals should be transformed by the 3D matrices
// to keep the data the same for the fragment shader.
mat4 modelView = czm_modelView3D;
mat3 normal = czm_normal3D;
#else
// These are used for individual model projection because they will
// automatically change based on the scene mode.
mat4 modelView = czm_modelView;
mat3 normal = czm_normal;
#endif
// Update the position for this instance in place
#ifdef HAS_INSTANCING
// The legacy instance stage is used when rendering i3dm models that
// encode instances transforms in world space, as opposed to glTF models
// that use EXT_mesh_gpu_instancing, where instance transforms are encoded
// in object space.
#ifdef USE_LEGACY_INSTANCING
mat4 instanceModelView;
mat3 instanceModelViewInverseTranspose;
legacyInstancingStage(attributes, instanceModelView, instanceModelViewInverseTranspose);
modelView = instanceModelView;
normal = instanceModelViewInverseTranspose;
#else
instancingStage(attributes);
#endif
#ifdef USE_PICKING
v_pickColor = a_pickColor;
#endif
#endif
Metadata metadata;
MetadataClass metadataClass;
MetadataStatistics metadataStatistics;
metadataStage(featureIds, metadata, metadataClass, metadataStatistics, attributes);
#ifdef HAS_VERTICAL_EXAGGERATION
verticalExaggerationStage(attributes);
#endif
#ifdef HAS_CUSTOM_VERTEX_SHADER
czm_modelVertexOutput vsOutput = defaultVertexOutput(attributes.positionMC);
customShaderStage(vsOutput, attributes, featureIds, metadata, metadataClass, metadataStatistics);
#endif
// Compute the final position in each coordinate system needed.
// This returns the value that will be assigned to gl_Position.
vec4 positionClip = geometryStage(attributes, modelView, normal);
#if defined(HAS_LINE_CUMULATIVE_DISTANCE) || defined(HAS_LINE_PATTERN)
lineStyleStageVS(attributes);
#endif
// This must go after the geometry stage as it needs v_positionWC
#ifdef HAS_ATMOSPHERE
atmosphereStage(attributes);
#endif
#ifdef ENABLE_CLIPPING_POLYGONS
modelClippingPolygonsStage(attributes);
#endif
#ifdef HAS_SILHOUETTE
silhouetteStage(attributes, positionClip);
#endif
#ifdef HAS_POINT_CLOUD_SHOW_STYLE
float show = pointCloudShowStylingStage(attributes, metadata);
#else
float show = 1.0;
#endif
#ifdef HAS_POINT_CLOUD_BACK_FACE_CULLING
show *= pointCloudBackFaceCullingStage();
#endif
#ifdef HAS_POINT_CLOUD_COLOR_STYLE
v_pointCloudColor = pointCloudColorStylingStage(attributes, metadata);
#endif
#ifdef PRIMITIVE_TYPE_POINTS
#ifdef HAS_CUSTOM_VERTEX_SHADER
gl_PointSize = vsOutput.pointSize;
#elif defined(HAS_POINT_CLOUD_POINT_SIZE_STYLE) || defined(HAS_POINT_CLOUD_ATTENUATION)
gl_PointSize = pointCloudPointSizeStylingStage(attributes, metadata);
#elif defined(HAS_POINT_DIAMETER)
gl_PointSize = u_pointDiameter;
#else
gl_PointSize = 1.0;
#endif
gl_PointSize *= show;
#endif
// Important NOT to compute gl_Position = show * positionClip or we hit:
// https://github.com/CesiumGS/cesium/issues/11270
//
// We will discard points with v_pointCloudShow == 0 in the fragment shader.
gl_Position = positionClip;
#ifdef HAS_EDGE_VISIBILITY
edgeVisibilityStageVS();
#endif
#ifdef HAS_POINT_CLOUD_SHOW_STYLE
v_pointCloudShow = show;
#endif
}
`;var B3n=y(x(),1),wB=`
precision highp float;
czm_modelMaterial defaultModelMaterial()
{
czm_modelMaterial material;
material.diffuse = vec3(0.0);
material.specular = vec3(1.0);
material.roughness = 1.0;
material.occlusion = 1.0;
material.normalEC = vec3(0.0, 0.0, 1.0);
material.emissive = vec3(0.0);
material.alpha = 1.0;
return material;
}
vec4 handleAlpha(vec3 color, float alpha)
{
#ifdef ALPHA_MODE_MASK
if (alpha < u_alphaCutoff) {
discard;
}
#endif
return vec4(color, alpha);
}
void lineStyleStage()
{
#if defined(HAS_LINE_PATTERN) && !defined(HAS_EDGE_VISIBILITY)
const float maskLength = 16.0;
float dashPosition = fract(v_lineCoord / maskLength);
float maskIndex = floor(dashPosition * maskLength);
float maskTest = floor(u_linePattern / pow(2.0, maskIndex));
if (mod(maskTest, 2.0) < 1.0) {
discard;
}
#endif
}
SelectedFeature selectedFeature;
void main()
{
#if defined(PRIMITIVE_TYPE_POINTS) && defined(HAS_POINT_DIAMETER)
// Render points as circles
float distanceToCenter = length(gl_PointCoord - vec2(0.5));
if (distanceToCenter > 0.5) {
discard;
}
#endif
#ifdef HAS_POINT_CLOUD_SHOW_STYLE
if (v_pointCloudShow == 0.0)
{
discard;
}
#endif
#ifdef HAS_MODEL_SPLITTER
modelSplitterStage();
#endif
czm_modelMaterial material = defaultModelMaterial();
ProcessedAttributes attributes;
geometryStage(attributes);
FeatureIds featureIds;
featureIdStage(featureIds, attributes);
Metadata metadata;
MetadataClass metadataClass;
MetadataStatistics metadataStatistics;
metadataStage(featureIds, metadata, metadataClass, metadataStatistics, attributes);
//========================================================================
// When not picking metadata START
#ifndef METADATA_PICKING_ENABLED
#ifdef HAS_SELECTED_FEATURE_ID
selectedFeatureIdStage(selectedFeature, featureIds);
#endif
#ifndef CUSTOM_SHADER_REPLACE_MATERIAL
materialStage(material, attributes, selectedFeature);
#endif
#ifdef HAS_CUSTOM_FRAGMENT_SHADER
customShaderStage(material, attributes, featureIds, metadata, metadataClass, metadataStatistics);
#endif
lightingStage(material, attributes);
#ifdef HAS_SELECTED_FEATURE_ID
cpuStylingStage(material, selectedFeature);
#endif
#ifdef HAS_MODEL_COLOR
modelColorStage(material);
#endif
#ifdef HAS_PRIMITIVE_OUTLINE
primitiveOutlineStage(material);
#endif
vec4 color = handleAlpha(material.diffuse, material.alpha);
// When not picking metadata END
//========================================================================
#else
//========================================================================
// When picking metadata START
vec4 metadataValues = vec4(0.0, 0.0, 0.0, 0.0);
metadataPickingStage(metadata, metadataClass, metadataValues);
vec4 color = metadataValues;
#endif
// When picking metadata END
//========================================================================
lineStyleStage();
#ifdef HAS_CLIPPING_PLANES
modelClippingPlanesStage(color);
#endif
#ifdef ENABLE_CLIPPING_POLYGONS
modelClippingPolygonsStage();
#endif
//========================================================================
// When not picking metadata START
#ifndef METADATA_PICKING_ENABLED
#if defined(HAS_SILHOUETTE) && defined(HAS_NORMALS)
silhouetteStage(color);
#endif
#ifdef HAS_ATMOSPHERE
atmosphereStage(color, attributes);
#endif
#ifdef HAS_EDGE_VISIBILITY
edgeVisibilityStage(color, featureIds);
edgeDetectionStage(color, featureIds);
#endif
#endif
// When not picking metadata END
//========================================================================
out_FragColor = color;
}
`;function jhe(){}jhe.buildModelDrawCommand=function(e,t){let n=e.shaderBuilder,i=G7e(e,n,t),o=L7e(e,i,t),r=e.model;return l(r.classificationType)?new LB({primitiveRenderResources:e,command:o}):new FB({primitiveRenderResources:e,command:o})};function G7e(e,t,n){t.addVertexLines(BB),t.addFragmentLines(wB);let i=e.model,o=t.buildShaderProgram(n.context);return i._pipelineResources.push(o),o}function L7e(e,t,n){let i=W7e(e),o=new kn({context:n.context,indexBuffer:i,attributes:e.attributes}),r=e.model;r._pipelineResources.push(o);let s=e.alphaOptions.pass,a=r.sceneGraph,c=n.mode===se.SCENE3D,d,u;if(!c&&!n.scene3DOnly&&r._projectTo2D)d=F.multiplyTransformation(a._computedModelMatrix,e.runtimeNode.computedTransform,new F),u=e.runtimePrimitive.boundingSphere2D;else{let T=c?a._computedModelMatrix:a._computedModelMatrix2D;d=F.multiplyTransformation(T,e.runtimeNode.computedTransform,new F),u=ue.transform(e.boundingSphere,d)}let h=He(Qe.fromCache(e.renderStateOptions),!0);h.cull.face=It.getCullFace(d,e.primitiveType),h=Qe.fromCache(h);let p=l(r.classificationType),A=p?!1:Vn.castShadows(r.shadows),f=p?!1:Vn.receiveShadows(r.shadows),b=p?void 0:e.pickId,C=new ot({boundingVolume:u,modelMatrix:d,uniformMap:e.uniformMap,renderState:h,vertexArray:o,shaderProgram:t,cull:r.cull,pass:s,count:e.count,owner:r,pickId:b,pickMetadataAllowed:!0,instanceCount:e.instanceCount,primitiveType:e.primitiveType,debugShowBoundingVolume:r.debugShowBoundingVolume,castShadows:A,receiveShadows:f});return r._marsOptions?.updateDrawCommand&&r._marsOptions.updateDrawCommand(C),C}function W7e(e){let t=e.wireframeIndexBuffer;if(l(t))return t;let n=e.indices;if(l(n))return n.buffer}var NB=jhe;function tl(e){e=e??Q.EMPTY_OBJECT;let t=e.modelComponents;this._model=e.model,this._components=t,this._pipelineStages=[],this._updateStages=[],this._runtimeNodes=[],this._rootNodes=[],this._skinnedNodes=[],this._runtimeSkins=[],this.modelPipelineStages=[],this._boundingSphere=void 0,this._boundingSphere2D=void 0,this._computedModelMatrix=F.clone(F.IDENTITY),this._computedModelMatrix2D=F.clone(F.IDENTITY),this._axisCorrectionMatrix=It.getAxisCorrectionMatrix(t.upAxis,t.forwardAxis,new F),this._runtimeArticulations={},F7e(this)}Object.defineProperties(tl.prototype,{components:{get:function(){return this._components}},computedModelMatrix:{get:function(){return this._computedModelMatrix}},axisCorrectionMatrix:{get:function(){return this._axisCorrectionMatrix}},boundingSphere:{get:function(){return this._boundingSphere}}});function F7e(e){let t=e._components,n=t.scene,o=e._model.modelMatrix;qhe(e,o);let r=t.articulations,s=r.length,a=e._runtimeArticulations;for(let E=0;E<s;E++){let S=r[E],I=new zF({articulation:S,sceneGraph:e}),R=I.name;a[R]=I}let c=t.nodes,d=c.length;e._runtimeNodes=new Array(d);let h=n.nodes.length,p=F.IDENTITY;for(let E=0;E<h;E++){let S=n.nodes[E],I=$he(e,S,p);e._rootNodes.push(I)}let A=t.skins,f=e._runtimeSkins,b=A.length;for(let E=0;E<b;E++){let S=A[E];f.push(new xB({skin:S,sceneGraph:e}))}let C=e._skinnedNodes,T=C.length;for(let E=0;E<T;E++){let S=C[E],I=e._runtimeNodes[S],V=c[S].skin.index;I._runtimeSkin=f[V],I.updateJointMatrices()}e.applyArticulations()}function qhe(e,t){let n=e._components,i=e._model;e._computedModelMatrix=F.multiplyTransformation(t,n.transform,e._computedModelMatrix),e._computedModelMatrix=F.multiplyTransformation(e._computedModelMatrix,e._axisCorrectionMatrix,e._computedModelMatrix),e._computedModelMatrix=F.multiplyByUniformScale(e._computedModelMatrix,i.computedScale,e._computedModelMatrix)}var B7e=new m;function w7e(e,t){let n=e._computedModelMatrix,i=F.getTranslation(n,B7e);if(!m.equals(i,m.ZERO))e._computedModelMatrix2D=bt.basisTo2D(t.mapProjection,n,e._computedModelMatrix2D);else{let o=e.boundingSphere.center,r=bt.ellipsoidTo2DModelMatrix(t.mapProjection,o,e._computedModelMatrix2D);e._computedModelMatrix2D=F.multiply(r,n,e._computedModelMatrix2D)}e._boundingSphere2D=ue.transform(e._boundingSphere,e._computedModelMatrix2D,e._boundingSphere2D)}function $he(e,t,n){let i=[],o=It.getNodeTransform(t),r=t.children.length;for(let u=0;u<r;u++){let h=t.children[u],p=F.multiplyTransformation(n,o,new F),A=$he(e,h,p);i.push(A)}let s=new c2({node:t,transform:o,transformToRoot:n,children:i,sceneGraph:e}),a=t.primitives.length;for(let u=0;u<a;u++)s.runtimePrimitives.push(new yB({primitive:t.primitives[u],node:t,model:e._model}));let c=t.index;e._runtimeNodes[c]=s,l(t.skin)&&e._skinnedNodes.push(c);let d=t.name;if(l(d)){let u=e._model,h=new e2(u,s);u._nodesByName[d]=h}return c}var N7e=new m,P7e=new m,X7e=new m,Y7e=new m;tl.prototype.buildDrawCommands=function(e){let t=this.buildRenderResources(e);this.computeBoundingVolumes(t),this.createDrawCommands(t,e)};tl.prototype.buildRenderResources=function(e){let t=this._model,n=new CB(t);t.statistics.clear(),this.configurePipeline(e);let i=this.modelPipelineStages;for(let o=0;o<i.length;o++)i[o].process(n,t,e);for(let o=0;o<this._runtimeNodes.length;o++){let r=this._runtimeNodes[o];if(!l(r))continue;r.configurePipeline();let s=r.pipelineStages,a=new ZB(n,r);n.nodeRenderResources[o]=a;for(let c=0;c<s.length;c++)s[c].process(a,r.node,e);for(let c=0;c<r.runtimePrimitives.length;c++){let d=r.runtimePrimitives[c];d.configurePipeline(e);let u=d.pipelineStages,h=new VB(a,d);a.primitiveRenderResources[c]=h;for(let p=0;p<u.length;p++)u[p].process(h,d.primitive,e)}}return n};tl.prototype.computeBoundingVolumes=function(e){let t=this._model,n=m.fromElements(Number.MAX_VALUE,Number.MAX_VALUE,Number.MAX_VALUE,N7e),i=m.fromElements(-Number.MAX_VALUE,-Number.MAX_VALUE,-Number.MAX_VALUE,P7e);for(let o=0;o<this._runtimeNodes.length;o++){let r=this._runtimeNodes[o];if(!l(r))continue;let s=e.nodeRenderResources[o],a=r.computedTransform;for(let c=0;c<r.runtimePrimitives.length;c++){let d=r.runtimePrimitives[c],u=s.primitiveRenderResources[c];d.boundingSphere=ue.clone(u.boundingSphere,new ue);let h=F.multiplyByPoint(a,u.positionMin,X7e),p=F.multiplyByPoint(a,u.positionMax,Y7e);m.minimumByComponent(n,h,n),m.maximumByComponent(i,p,i)}}this._boundingSphere=ue.fromCornerPoints(n,i,new ue),this._boundingSphere=ue.transformWithoutScale(this._boundingSphere,this._axisCorrectionMatrix,this._boundingSphere),this._boundingSphere=ue.transform(this._boundingSphere,this._components.transform,this._boundingSphere),t._boundingSphere=ue.transform(this._boundingSphere,t.modelMatrix,t._boundingSphere),t._initialRadius=t._boundingSphere.radius,t._boundingSphere.radius*=t._clampedScale};tl.prototype.createDrawCommands=function(e,t){for(let n=0;n<this._runtimeNodes.length;n++){let i=this._runtimeNodes[n];if(!l(i))continue;let o=e.nodeRenderResources[n];for(let r=0;r<i.runtimePrimitives.length;r++){let s=i.runtimePrimitives[r],a=o.primitiveRenderResources[r],c=NB.buildModelDrawCommand(a,t);s.drawCommand=c}}};tl.prototype.configurePipeline=function(e){let t=this.modelPipelineStages;t.length=0;let n=this._model,i=e.fog.enabled&&e.fog.renderable;l(n.color)&&t.push(F0),!l(n.classificationType)&&(n.imageBasedLighting.enabled&&t.push(QF),n.isClippingEnabled()&&t.push(KF),n.isClippingPolygonsEnabled()&&t.push($F),n.hasSilhouette(e)&&t.push(SB),l(n.splitDirection)&&n.splitDirection!==Br.NONE&&t.push(IB),Nr.is3DTiles(n.type)&&t.push(MF),i&&t.push(DF))};tl.prototype.update=function(e,t){let n,i,o;for(n=0;n<this._runtimeNodes.length;n++){let r=this._runtimeNodes[n];if(!l(r))continue;for(i=0;i<r.updateStages.length;i++)r.updateStages[i].update(r,this,e);let s=e.mode!==se.SCENE3D&&this._model._projectTo2D;for(t&&!s&&this.updateJointMatrices(),i=0;i<r.runtimePrimitives.length;i++){let a=r.runtimePrimitives[i];for(o=0;o<a.updateStages.length;o++)a.updateStages[o].update(a,this)}}};tl.prototype.updateModelMatrix=function(e,t){qhe(this,e),t.mode!==se.SCENE3D&&w7e(this,t);let n=this._rootNodes;for(let i=0;i<n.length;i++){let o=this._runtimeNodes[n[i]];o._transformDirty=!0}};tl.prototype.updateJointMatrices=function(){let e=this._skinnedNodes,t=e.length;for(let n=0;n<t;n++){let i=e[n];this._runtimeNodes[i].updateJointMatrices()}};function efe(e,t,n,i,o){if(n&&!t.show)return;let r=t.children.length;for(let c=0;c<r;c++){let d=t.getChild(c);efe(e,d,n,i,o)}let s=t.runtimePrimitives,a=s.length;for(let c=0;c<a;c++){let d=s[c];i(d,o)}}function l9(e,t,n,i){let o=e._rootNodes,r=o.length;for(let s=0;s<r;s++){let a=o[s],c=e._runtimeNodes[a];efe(e,c,t,n,i)}}var M7e={backFaceCulling:void 0};tl.prototype.updateBackFaceCulling=function(e){let t=M7e;t.backFaceCulling=e,l9(this,!1,v7e,t)};function v7e(e,t){let n=e.drawCommand;n.backFaceCulling=t.backFaceCulling}var U7e={shadowMode:void 0};tl.prototype.updateShadows=function(e){let t=U7e;t.shadowMode=e,l9(this,!1,D7e,t)};function D7e(e,t){let n=e.drawCommand;n.shadows=t.shadowMode}var k7e={debugShowBoundingVolume:void 0};tl.prototype.updateShowBoundingVolume=function(e){let t=k7e;t.debugShowBoundingVolume=e,l9(this,!1,Q7e,t)};function Q7e(e,t){let n=e.drawCommand;n.debugShowBoundingVolume=t.debugShowBoundingVolume}var tfe=[],nfe=[],O7e={frameState:void 0,hasSilhouette:void 0};tl.prototype.pushDrawCommands=function(e){let t=tfe;t.length=0;let n=nfe;n.length=0;let i=O7e;i.hasSilhouette=this._model.hasSilhouette(e),i.frameState=e,l9(this,!0,z7e,i),ri(e.commandList,t),ri(e.commandList,n)};function z7e(e,t){let n=t.frameState,i=t.hasSilhouette,o=n.passes,r=tfe,s=nfe,a=e.drawCommand;a.pushCommands(n,n.commandList),i&&!o.pick&&a.pushSilhouetteCommands(n,r),l(a.pushEdgeCommands)&&a.pushEdgeCommands(n,s)}tl.prototype.setArticulationStage=function(e,t){let n=e.split(" ");if(n.length!==2)return;let i=n[0],o=n[1],r=this._runtimeArticulations[i];l(r)&&r.setArticulationStage(o,t)};tl.prototype.applyArticulations=function(){let e=this._runtimeArticulations;for(let t in e)e.hasOwnProperty(t)&&e[t].apply()};var PB=tl;var VHn=y(x(),1);function M0(){this.pointsLength=0,this.trianglesLength=0,this.geometryByteLength=0,this.texturesByteLength=0,this.propertyTablesByteLength=0,this._bufferIdSet={},this._textureIdByteLengths={},this._batchTextureIdMap=new Xt}Object.defineProperties(M0.prototype,{batchTexturesByteLength:{get:function(){let e=this._batchTextureIdMap.length,t=this._batchTextureIdMap.values,n=0;for(let i=0;i<e;i++)n+=t[i].byteLength;return n}}});M0.prototype.clear=function(){this.pointsLength=0,this.trianglesLength=0,this.geometryByteLength=0,this.texturesByteLength=0,this.propertyTablesByteLength=0,this._bufferIdSet={},this._textureIdByteLengths={},this._batchTextureIdMap.removeAll()};M0.prototype.addBuffer=function(e,t){if(!this._bufferIdSet.hasOwnProperty(e._id)){let n=t?2:1;this.geometryByteLength+=e.sizeInBytes*n}this._bufferIdSet[e._id]=!0};M0.prototype.addTexture=function(e){this._textureIdByteLengths.hasOwnProperty(e._id)||(this.texturesByteLength+=e.sizeInBytes,this._textureIdByteLengths[e._id]=e.sizeInBytes)};M0.prototype.getTextureIds=function(){return Object.keys(this._textureIdByteLengths)};M0.prototype.getTextureByteLengthById=function(e){return this._textureIdByteLengths[e]};M0.prototype.addBatchTexture=function(e){this._batchTextureIdMap.contains(e._id)||this._batchTextureIdMap.set(e._id,e)};var XB=M0;var mJn=y(x(),1);var sfe=y(DU(),1);var UHn=y(x(),1);var ife={},BC=Uint32Array.BYTES_PER_ELEMENT;ife.parse=function(e,t){t=t??0;let n=new Uint8Array(e),i=new DataView(e);t+=BC;let o=i.getUint32(t,!0);if(o!==1)throw new me(`Only Point Cloud tile version 1 is supported. Version ${o} is not.`);t+=BC,t+=BC;let r=i.getUint32(t,!0);if(r===0)throw new me("Feature table must have a byte length greater than zero");t+=BC;let s=i.getUint32(t,!0);t+=BC;let a=i.getUint32(t,!0);t+=BC;let c=i.getUint32(t,!0);t+=BC;let d=Zr(n,t,r);t+=r;let u=new Uint8Array(e,t,s);t+=s;let h,p;a>0&&(h=Zr(n,t,a),Object.keys(h).length===0&&(h=void 0),t+=a,c>0&&(p=new Uint8Array(e,t,c),p=new Uint8Array(p),t+=c));let A=new Qh(d,u),f=A.getGlobalProperty("POINTS_LENGTH");if(A.featuresLength=f,!l(f))throw new me("Feature table global property: POINTS_LENGTH must be defined");let b=A.getGlobalProperty("RTC_CENTER",H.FLOAT,3);l(b)&&(b=m.unpack(b));let C=J7e(A,h);if(C.rtcCenter=b,C.pointsLength=f,!C.hasPositions){let T=K7e(A);C.positions=T,C.hasPositions=C.hasPositions||l(T)}if(!C.hasPositions)throw new me("Either POSITION or POSITION_QUANTIZED must be defined.");if(!C.hasNormals){let T=q7e(A);C.normals=T,C.hasNormals=C.hasNormals||l(T)}if(!C.hasColors){let T=j7e(A);C.colors=T,C.hasColors=C.hasColors||l(T),C.hasConstantColor=l(C.constantColor),C.isTranslucent=l(T)&&T.isTranslucent}if(!C.hasBatchIds){let T=$7e(A);C.batchIds=T,C.hasBatchIds=C.hasBatchIds||l(T)}if(C.hasBatchIds){let T=A.getGlobalProperty("BATCH_LENGTH");if(!l(T))throw new me("Global property: BATCH_LENGTH must be defined when BATCH_ID is defined.");C.batchLength=T}return(l(h)||l(p))&&(C.batchTableJson=h,C.batchTableBinary=p),H7e(C),C};function H7e(e){let t=e.batchTableJson;if(!l(t))return;let n=e.batchTableBinary;if(l(n))return;let i=Object.keys(e.draco?.batchTableProperties??{}),o=[];for(let r of Object.keys(t)){let a=t[r].byteOffset;l(a)&&(i.includes(r)||o.push(r))}for(let r of o)_t("PntsParser-invalidBinaryBodyReference",`The point cloud data contained a binary property ${r} that could not be resolved - skipping`),delete t[r]}function J7e(e,t){let n=e.json,i,o,r,s=l(n.extensions)?n.extensions["3DTILES_draco_point_compression"]:void 0,a=l(t)&&l(t.extensions)?t.extensions["3DTILES_draco_point_compression"]:void 0;l(a)&&(r=a.properties);let c,d,u,h,p;if(l(s)){o=s.properties;let f=s.byteOffset,b=s.byteLength;if(!l(o)||!l(f)||!l(b))throw new me("Draco properties, byteOffset, and byteLength must be defined");i=e.buffer.slice(f,f+b),c=l(o.POSITION),d=l(o.RGB)||l(o.RGBA),u=l(o.NORMAL),h=l(o.BATCH_ID),p=l(o.RGBA)}let A;return l(i)&&(A={buffer:i,featureTableProperties:o,batchTableProperties:r,properties:Ft(o,r),dequantizeInShader:!0}),{draco:A,hasPositions:c,hasColors:d,isTranslucent:p,hasNormals:u,hasBatchIds:h}}function K7e(e){let t=e.json,n;if(l(t.POSITION))return n=e.getPropertyArray("POSITION",H.FLOAT,3),{name:ct.POSITION,semantic:ct.POSITION,typedArray:n,isQuantized:!1,componentDatatype:H.FLOAT,type:Ut.VEC3};if(l(t.POSITION_QUANTIZED)){n=e.getPropertyArray("POSITION_QUANTIZED",H.UNSIGNED_SHORT,3);let i=e.getGlobalProperty("QUANTIZED_VOLUME_SCALE",H.FLOAT,3);if(!l(i))throw new me("Global property: QUANTIZED_VOLUME_SCALE must be defined for quantized positions.");let o=65535,r=e.getGlobalProperty("QUANTIZED_VOLUME_OFFSET",H.FLOAT,3);if(!l(r))throw new me("Global property: QUANTIZED_VOLUME_OFFSET must be defined for quantized positions.");return{name:ct.POSITION,semantic:ct.POSITION,typedArray:n,isQuantized:!0,componentDatatype:H.FLOAT,type:Ut.VEC3,quantizedRange:o,quantizedVolumeOffset:m.unpack(r),quantizedVolumeScale:m.unpack(i),quantizedComponentDatatype:H.UNSIGNED_SHORT,quantizedType:Ut.VEC3}}}function j7e(e){let t=e.json,n;if(l(t.RGBA))return n=e.getPropertyArray("RGBA",H.UNSIGNED_BYTE,4),{name:ct.COLOR,semantic:ct.COLOR,setIndex:0,typedArray:n,componentDatatype:H.UNSIGNED_BYTE,type:Ut.VEC4,normalized:!0,isRGB565:!1,isTranslucent:!0};if(l(t.RGB))return n=e.getPropertyArray("RGB",H.UNSIGNED_BYTE,3),{name:"COLOR",semantic:ct.COLOR,setIndex:0,typedArray:n,componentDatatype:H.UNSIGNED_BYTE,type:Ut.VEC3,normalized:!0,isRGB565:!1,isTranslucent:!1};if(l(t.RGB565))return n=e.getPropertyArray("RGB565",H.UNSIGNED_SHORT,1),{name:"COLOR",semantic:ct.COLOR,setIndex:0,typedArray:n,componentDatatype:H.FLOAT,type:Ut.VEC3,normalized:!1,isRGB565:!0,isTranslucent:!1};if(l(t.CONSTANT_RGBA)){let i=e.getGlobalProperty("CONSTANT_RGBA",H.UNSIGNED_BYTE,4),o=i[3],r=U.fromBytes(i[0],i[1],i[2],o),s=o<255;return{name:ct.COLOR,semantic:ct.COLOR,setIndex:0,constantColor:r,componentDatatype:H.FLOAT,type:Ut.VEC4,isQuantized:!1,isTranslucent:s}}}function q7e(e){let t=e.json,n;if(l(t.NORMAL))return n=e.getPropertyArray("NORMAL",H.FLOAT,3),{name:ct.NORMAL,semantic:ct.NORMAL,typedArray:n,octEncoded:!1,octEncodedZXY:!1,componentDatatype:H.FLOAT,type:Ut.VEC3};if(l(t.NORMAL_OCT16P))return n=e.getPropertyArray("NORMAL_OCT16P",H.UNSIGNED_BYTE,2),{name:ct.NORMAL,semantic:ct.NORMAL,typedArray:n,octEncoded:!0,octEncodedZXY:!1,quantizedRange:(1<<8)-1,quantizedType:Ut.VEC2,quantizedComponentDatatype:H.UNSIGNED_BYTE,componentDatatype:H.FLOAT,type:Ut.VEC3}}function $7e(e){let t=e.json;if(l(t.BATCH_ID)){let n=e.getPropertyArray("BATCH_ID",H.UNSIGNED_SHORT,1);return{name:ct.FEATURE_ID,semantic:ct.FEATURE_ID,setIndex:0,typedArray:n,componentDatatype:H.fromTypedArray(n),type:Ut.SCALAR}}}var wC=ife;var e6e=Tn.Components,t6e=Tn.Scene,n6e=Tn.Node,i6e=Tn.Primitive,o6e=Tn.Attribute,ofe=Tn.Quantization,r6e=Tn.FeatureIdAttribute,s6e=Tn.Material,a6e=Tn.MetallicRoughness,i4=class extends Hi{constructor(t){super(),t=t??Q.EMPTY_OBJECT;let n=t.arrayBuffer,i=t.byteOffset??0;this._arrayBuffer=n,this._byteOffset=i,this._loadAttributesFor2D=t.loadAttributesFor2D??!1,this._parsedContent=void 0,this._decodePromise=void 0,this._decodedAttributes=void 0,this._promise=void 0,this._error=void 0,this._state=yt.UNLOADED,this._buffers=[],this._components=void 0,this._transform=F.IDENTITY}get cacheKey(){}get components(){return this._components}get transform(){return this._transform}load(){if(l(this._promise))return this._promise;this._parsedContent=wC.parse(this._arrayBuffer,this._byteOffset),this._state=yt.PROCESSING,this._promise=Promise.resolve(this)}process(t){if(l(this._error)){let n=this._error;throw this._error=void 0,n}if(this._state===yt.READY)return!0;if(this._state===yt.PROCESSING){if(l(this._decodePromise))return!1;this._decodePromise=c6e(this,t.context)}return!1}unload(){let t=this._buffers;for(let n=0;n<t.length;n++)t[n].destroy();t.length=0,this._components=void 0,this._parsedContent=void 0,this._arrayBuffer=void 0}};function c6e(e,t){let i=e._parsedContent.draco,o;if(l(i)?o=qA.decodePointCloud(i,t):o=Promise.resolve(),!!l(o))return e._decodePromise=o,o.then(function(r){if(!e.isDestroyed())return l(r)&&l6e(e,i,r),x6e(e,t),e._state=yt.READY,e}).catch(function(r){e.unload(),e._state=yt.FAILED;let s="Failed to load Draco pnts";e._error=e.getError(s,r)})}function l6e(e,t,n){e._state=yt.READY;let i=e._parsedContent,o;if(l(n.POSITION)){if(o={name:"POSITION",semantic:ct.POSITION,typedArray:n.POSITION.array,componentDatatype:H.FLOAT,type:Ut.VEC3,isQuantized:!1},l(n.POSITION.data.quantization)){let a=n.POSITION.data.quantization,c=a.range,d=m.fromElements(c,c,c),u=m.unpack(a.minValues),h=(1<<a.quantizationBits)-1;o.isQuantized=!0,o.quantizedRange=h,o.quantizedVolumeOffset=u,o.quantizedVolumeScale=d,o.quantizedComponentDatatype=h<=255?H.UNSIGNED_BYTE:H.UNSIGNED_SHORT,o.quantizedType=Ut.VEC3}i.positions=o}if(l(n.NORMAL)){if(o={name:"NORMAL",semantic:ct.NORMAL,typedArray:n.NORMAL.array,componentDatatype:H.FLOAT,type:Ut.VEC3,isQuantized:!1,octEncoded:!1,octEncodedZXY:!1},l(n.NORMAL.data.quantization)){let a=(1<<n.NORMAL.data.quantization.quantizationBits)-1;o.quantizedRange=a,o.octEncoded=!0,o.octEncodedZXY=!0,o.quantizedComponentDatatype=H.UNSIGNED_BYTE,o.quantizedType=Ut.VEC2}i.normals=o}if(l(n.RGBA)?i.colors={name:"COLOR",semantic:ct.COLOR,setIndex:0,typedArray:n.RGBA.array,componentDatatype:H.UNSIGNED_BYTE,type:Ut.VEC4,normalized:!0,isTranslucent:!0}:l(n.RGB)&&(i.colors={name:"COLOR",semantic:ct.COLOR,setIndex:0,typedArray:n.RGB.array,componentDatatype:H.UNSIGNED_BYTE,type:Ut.VEC3,normalized:!0,isTranslucent:!1}),l(n.BATCH_ID)){let a=n.BATCH_ID.array;i.batchIds={name:"_FEATURE_ID",semantic:ct.FEATURE_ID,setIndex:0,typedArray:a,componentDatatype:H.fromTypedArray(a),type:Ut.SCALAR}}let r=i.batchTableJson,s=t.batchTableProperties;for(let a in s)if(s.hasOwnProperty(a)){let c=n[a];l(r)||(r={}),i.hasDracoBatchTable=!0;let d=c.data;r[a]={byteOffset:d.byteOffset,type:d6e(d.componentsPerAttribute),componentType:u6e(d.componentDatatype),typedArray:c.array}}i.batchTableJson=r}function d6e(e){switch(e){case 1:return"SCALAR";case 2:return"VEC2";case 3:return"VEC3";case 4:return"VEC4"}}function u6e(e){switch(e){case ne.BYTE:return"BYTE";case ne.UNSIGNED_BYTE:return"UNSIGNED_BYTE";case ne.SHORT:return"SHORT";case ne.UNSIGNED_SHORT:return"UNSIGNED_SHORT";case ne.INT:return"INT";case ne.UNSIGNED_INT:return"UNSIGNED_INT";case ne.DOUBLE:return"DOUBLE";case ne.FLOAT:return"FLOAT"}}function YB(e,t,n){let i=t.typedArray,o;if(t.octEncoded&&(o=new ofe,o.octEncoded=t.octEncoded,o.octEncodedZXY=t.octEncodedZXY,o.normalizationRange=t.quantizedRange,o.type=t.quantizedType,o.componentDatatype=t.quantizedComponentDatatype),t.isQuantized){o=new ofe;let a=t.quantizedRange;o.normalizationRange=a,o.quantizedVolumeOffset=m.ZERO;let c=t.quantizedVolumeScale;o.quantizedVolumeDimensions=c,o.quantizedVolumeStepSize=m.divideByScalar(c,a,new m),o.componentDatatype=t.quantizedComponentDatatype,o.type=t.quantizedType}let r=new o6e;if(r.name=t.name,r.semantic=t.semantic,r.setIndex=t.setIndex,r.componentDatatype=t.componentDatatype,r.type=t.type,r.normalized=t.normalized??!1,r.min=t.min,r.max=t.max,r.quantization=o,t.isRGB565&&(i=on.decodeRGB565(i)),l(t.constantColor)){let a=new Array(4);r.constant=U.pack(t.constantColor,a)}else{let a=it.createVertexBuffer({typedArray:i,context:n,usage:Be.STATIC_DRAW});a.vertexArrayDestroyable=!1,e._buffers.push(a),r.buffer=a}let s=e._loadAttributesFor2D;return r.semantic===ct.POSITION&&s&&(r.typedArray=i),r}var rfe,d9;function m6e(e){if(!l(d9)){rfe=new sfe.default(0),d9=new Array(e);for(let t=0;t<e;++t)d9[t]=rfe.random()}return d9}var h6e=new m,f6e=new m,p6e=new m;function A6e(e){let t=e.typedArray,n=20,i=t.length/3,o=Math.min(i,n),r=m6e(n),s=Number.MAX_VALUE,a=-Number.MAX_VALUE,c=m.fromElements(s,s,s,h6e),d=m.fromElements(a,a,a,f6e),u,h,p;if(e.isQuantized)c=m.ZERO,d=e.quantizedVolumeScale;else for(u=0;u<o;++u)h=Math.floor(r[u]*i),p=m.unpack(t,h*3,p6e),m.minimumByComponent(c,p,c),m.maximumByComponent(d,p,d);e.min=m.clone(c),e.max=m.clone(d)}var g6e={name:ct.COLOR,semantic:ct.COLOR,setIndex:0,constantColor:U.DARKGRAY,componentDatatype:H.FLOAT,type:Ut.VEC4,isQuantized:!1,isTranslucent:!1};function b6e(e,t,n){let i=[],o,r=t.positions;return l(r)&&(A6e(r),o=YB(e,r,n),o.count=t.pointsLength,i.push(o)),l(t.normals)&&(o=YB(e,t.normals,n),i.push(o)),l(t.colors)?(o=YB(e,t.colors,n),i.push(o)):(o=YB(e,g6e,n),i.push(o)),l(t.batchIds)&&(o=YB(e,t.batchIds,n),i.push(o)),i}function y6e(e,t){let n=e.batchLength,i=e.pointsLength,o=e.batchTableJson,r=e.batchTableBinary,s=!l(e.batchIds);return l(r)||l(o)||e.hasDracoBatchTable?ug({count:n??i,batchTable:o,binaryBody:r,parseAsPropertyAttributes:s,customAttributeOutput:t}):new Wa({schema:{},propertyTables:[]})}function x6e(e,t){let n=e._parsedContent,i=new a6e;i.metallicFactor=0,i.roughnessFactor=.9;let o=new s6e;o.metallicRoughness=i;let r=n.colors;l(r)&&r.isTranslucent&&(o.alphaMode=pp.BLEND);let s=!l(n.normals);o.unlit=s;let a=new i6e;if(a.attributes=b6e(e,n,t),a.primitiveType=We.POINTS,a.material=o,l(n.batchIds)){let A=new r6e;A.propertyTableId=0,A.setIndex=0,A.positionalLabel="featureId_0",a.featureIds.push(A)}let c=new n6e;c.index=0,c.primitives=[a];let d=new t6e;d.nodes=[c],d.upAxis=ro.Z,d.forwardAxis=ro.X;let u=new e6e;u.scene=d,u.nodes=[c];let h=[];u.structuralMetadata=y6e(n,h),h.length>0&&C6e(e,a,h,t),l(n.rtcCenter)&&(u.transform=F.multiplyByTranslation(u.transform,n.rtcCenter,u.transform));let p=n.positions;l(p)&&p.isQuantized&&(u.transform=F.multiplyByTranslation(u.transform,p.quantizedVolumeOffset,u.transform)),e._components=u,e._parsedContent=void 0,e._arrayBuffer=void 0}function C6e(e,t,n,i){let o=t.attributes,r=n.length;for(let s=0;s<r;s++){let a=n[s],c=it.createVertexBuffer({typedArray:a.typedArray,context:i,usage:Be.STATIC_DRAW});c.vertexArrayDestroyable=!1,e._buffers.push(c),a.buffer=c,a.typedArray=void 0,o.push(a)}t.propertyAttributeIds=[0]}var MB=i4;var LJn=y(x(),1);var T6e=new m,E6e=new m,S6e=new m,_6e=new F,I6e=new F,Z6e=new F,R6e=new Ae,V6e=new ue;function U_(e,t,n,i,o,r,s){if(!e._ready||n.mode===se.MORPHING)return;let a=Number.MAX_VALUE,c=e.sceneGraph,d=c._runtimeNodes;for(let u=0;u<d.length;u++){let h=d[u],p=h.node,A=F.clone(h.computedTransform,_6e),f=F.clone(c.computedModelMatrix,I6e),b=p.instances;l(b)&&b.transformInWorldSpace&&(f=F.multiplyTransformation(e.modelMatrix,c.components.transform,f),A=F.multiplyTransformation(c.axisCorrectionMatrix,h.computedTransform,A));let C=F.multiplyTransformation(f,A,Z6e);n.mode!==se.SCENE3D&&(C=bt.basisTo2D(n.mapProjection,C,C));let T=[];if(l(b)){let S=b.attributes[0].count,I=b.attributes[0].componentDatatype,R=12,V=h.transformsTypedArray;if(!l(V)){let W=h.instancingTransformsBuffer;l(W)&&n.context.webgl2&&(V=H.createTypedArray(I,S*R),W.getBufferData(V))}if(l(V))for(let W=0;W<S;W++){let B=W*R,N=new F(V[B],V[B+1],V[B+2],V[B+3],V[B+4],V[B+5],V[B+6],V[B+7],V[B+8],V[B+9],V[B+10],V[B+11],0,0,0,1);b.transformInWorldSpace?(F.multiplyTransformation(N,A,N),F.multiplyTransformation(f,N,N)):F.multiplyTransformation(N,C,N),T.push(N)}}T.length===0&&T.push(C);let E=h.runtimePrimitives.length;for(let S=0;S<E;S++){let I=h.runtimePrimitives[S],R=I.primitive;if(l(I.boundingSphere)&&!l(b)){let J=ue.transform(I.boundingSphere,C,V6e),te=hi.raySphere(t,J);if(!l(te))continue}let V=It.getAttributeBySemantic(R,ct.POSITION),W=V.byteOffset,B=V.byteStride,N=V.count;if(!l(R.indices))continue;let P=R.indices.typedArray;if(!l(P)){let J=R.indices.buffer,te=R.indices.count,z=R.indices.indexDatatype;l(J)&&n.context.webgl2&&(z===Ue.UNSIGNED_BYTE?P=new Uint8Array(te):z===Ue.UNSIGNED_SHORT?P=new Uint16Array(te):z===Ue.UNSIGNED_INT&&(P=new Uint32Array(te)),J.getBufferData(P))}let g=V.typedArray,_=V.componentDatatype,Z=V.type,G=V.quantization;l(G)&&(_=V.quantization.componentDatatype,Z=V.quantization.type);let w=Ut.getNumberOfComponents(Z),X=H.getSizeInBytes(_),k=!l(g)&&l(B)&&B!==w*X,v=w,D=0;k&&(v=B/X,D=W/X);let Y=N*v;if(!l(g)){let J=V.buffer;l(J)&&n.context.webgl2&&(g=H.createTypedArray(_,Y),J.getBufferData(g,k?0:W,0,Y)),G&&V.normalized&&(g=on.dequantize(g,_,Z,N))}if(!l(P)||!l(g))return;r=r??ie.default,i=i??1,o=o??0;let O=P.length;for(let J=0;J<O;J+=3){let te=P[J],z=P[J+1],j=P[J+2];for(let ee of T){let ge=o4(g,te,D,v,G,ee,i,o,r,T6e),ye=o4(g,z,D,v,G,ee,i,o,r,E6e),ae=o4(g,j,D,v,G,ee,i,o,r,S6e),Ce=hi.rayTriangleParametric(t,ge,ye,ae,e.backFaceCulling??!0);l(Ce)&&Ce<a&&Ce>=0&&(a=Ce)}}}}if(a!==Number.MAX_VALUE){if(s=Cn.getPoint(t,a,s),n.mode!==se.SCENE3D){m.fromElements(s.y,s.z,s.x,s);let u=n.mapProjection,h=u.ellipsoid,p=u.unproject(s,R6e);h.cartographicToCartesian(p,s)}return s}}function o4(e,t,n,i,o,r,s,a,c,d){let u=n+t*i;if(d.x=e[u],d.y=e[u+1],d.z=e[u+2],l(o))if(o.octEncoded){if(d=on.octDecodeInRange(d,o.normalizationRange,d),o.octEncodedZXY){let h=d.x;d.x=d.z,d.z=d.y,d.y=h}}else d=m.multiplyComponents(d,o.quantizedVolumeStepSize,d),d=m.add(d,o.quantizedVolumeOffset,d);return d=F.multiplyByPoint(r,d,d),s!==1&&Eo.getPosition(d,c,s,a,d),d}var MJn=y(x(),1);var FJn=y(x(),1),r4=class{constructor(t){this.show=t.show,this.alpha=t.alpha,this.brightness=t.brightness,this.contrast=t.contrast,this.hue=t.hue,this.saturation=t.saturation,this.gamma=t.gamma,this.colorToAlpha=t.colorToAlpha}},vB=r4;var s4=class{constructor(t){this._model=t,this._modelPrimitiveImageries=void 0,this._imageryConfigurations=[]}update(t){if(!this._hasImagery){this._deleteModelPrimitiveImageries();return}this._allImageryLayersReady&&(l(this._modelPrimitiveImageries)||(this._modelPrimitiveImageries=this._createModelPrimitiveImageries()),this._updateModelPrimitiveImageries(t),this._checkForModifiedImageryConfigurations())}_createModelPrimitiveImageries(){let t=this._model,n=this._collectRuntimeNodesAndPrimitives(),i=[],o=n.length;for(let r=0;r<o;r++){let s=n[r],a=s.runtimeNode,c=s.runtimePrimitive,d=new GC(t,a,c);c.primitive.modelPrimitiveImagery=d,i.push(d)}return i}_collectRuntimeNodesAndPrimitives(){let i=this._model.sceneGraph._runtimeNodes,o=[];for(let r=0;r<i.length;r++){let s=i[r];if(l(s))for(let a=0;a<s.runtimePrimitives.length;a++){let c=s.runtimePrimitives[a];o.push({runtimeNode:s,runtimePrimitive:c})}}return o}_updateModelPrimitiveImageries(t){if(!l(this._modelPrimitiveImageries))throw new fe("The modelPrimitiveImageries have not been created");let n=this._modelPrimitiveImageries,i=n.length;for(let o=0;o<i;o++)n[o].update(t)}_deleteModelPrimitiveImageries(){let t=this._modelPrimitiveImageries;if(!l(t))return;let n=t.length;for(let i=0;i<n;i++)t[i].destroy();delete this._modelPrimitiveImageries,this._model.resetDrawCommands()}get ready(){return this._hasImagery?!(!this._allImageryLayersReady||!this._allModelPrimitiveImageriesReady):!0}get _hasImagery(){let n=this._model.imageryLayers;return l(n)&&n.length>0}get _allImageryLayersReady(){if(!this._hasImagery)return!0;let t=this._model.imageryLayers,n=t.length;for(let i=0;i<n;i++)if(!t.get(i).ready)return!1;return!0}get _allModelPrimitiveImageriesReady(){let t=this._modelPrimitiveImageries;if(!l(t))return!1;let n=t.length;for(let i=0;i<n;i++)if(!t[i].ready)return!1;return!0}_checkForModifiedImageryConfigurations(){this._imageryConfigurationsModified()&&(this._updateImageryConfigurations(),this._model.resetDrawCommands())}_imageryConfigurationsModified(){let n=this._model.imageryLayers,i=this._imageryConfigurations;if(n.length!==i.length)return!0;for(let o=0;o<n.length;o++){let r=n.get(o),s=i[o];if(r.show!==s.show||r.alpha!==s.alpha||r.brightness!==s.brightness||r.contrast!==s.contrast||r.hue!==s.hue||r.saturation!==s.saturation||r.gamma!==s.gamma||r.colorToAlpha!==s.colorToAlpha)return!0}return!1}_updateImageryConfigurations(){let n=this._model.imageryLayers,i=this._imageryConfigurations;i.length=n.length;for(let o=0;o<n.length;o++){let r=n.get(o);i[o]=new vB(r)}}isDestroyed(){return!1}destroy(){if(!this.isDestroyed())return this._deleteModelPrimitiveImageries(),he(this)}},UB=s4;function Go(e){e=e??Q.EMPTY_OBJECT,this._loader=e.loader,this._resource=e.resource,this.type=e.type??Nr.GLTF,this.modelMatrix=F.clone(e.modelMatrix??F.IDENTITY),this._modelMatrix=F.clone(this.modelMatrix),this._scale=e.scale??1,this._minimumPixelSize=e.minimumPixelSize??0,this._maximumScale=e.maximumScale,this._clampedScale=l(this._maximumScale)?Math.min(this._scale,this._maximumScale):this._scale,this._computedScale=this._clampedScale,this._updateModelMatrix=!1,this.referenceMatrix=void 0,this._iblReferenceFrameMatrix=$.clone($.IDENTITY),this._resourcesLoaded=!1,this._drawCommandsBuilt=!1,this._ready=!1,this._customShader=e.customShader,this._content=e.content,this._texturesLoaded=!1,this._defaultTexture=void 0,this._activeAnimations=new NF(this),this._clampAnimations=e.clampAnimations??!0,this._userAnimationDirty=!1,this._id=e.id,this._idDirty=!1,this._color=U.clone(e.color),this._colorBlendMode=e.colorBlendMode??jc.HIGHLIGHT,this._colorBlendAmount=e.colorBlendAmount??.5;let t=e.silhouetteColor??U.RED;this._silhouetteColor=U.clone(t),this._silhouetteSize=e.silhouetteSize??0,this._silhouetteDirty=!1,this._silhouetteId=void 0,this._cull=e.cull??!0,this._opaquePass=e.opaquePass??Ge.OPAQUE,this._allowPicking=e.allowPicking??!0,this._show=e.show??!0,this._style=void 0,this._styleDirty=!1,this._styleCommandsNeeded=void 0;let n=e.featureIdLabel??"featureId_0";typeof n=="number"&&(n=`featureId_${n}`),this._featureIdLabel=n;let i=e.instanceFeatureIdLabel??"instanceFeatureId_0";typeof i=="number"&&(i=`instanceFeatureId_${i}`),this._instanceFeatureIdLabel=i,this._featureTables=[],this._featureTableId=void 0,this._featureTableIdDirty=!0,this._pipelineResources=[],this._modelResources=[],this._pickIds=[],this._boundingSphere=new ue,this._initialRadius=void 0,this._heightReference=e.heightReference??rt.NONE,this._heightDirty=this._heightReference!==rt.NONE,this._removeUpdateHeightCallback=void 0,this._enableVerticalExaggeration=e.enableVerticalExaggeration??!0,this._hasVerticalExaggeration=!1,this._clampedModelMatrix=void 0;let o=e.scene;l(o)&&l(o.terrainProviderChanged)&&(this._terrainProviderChangedCallback=o.terrainProviderChanged.addEventListener(()=>{this._heightDirty=!0})),this._scene=o,this._distanceDisplayCondition=e.distanceDisplayCondition;let r=new gp(e.pointCloudShading);this._pointCloudShading=r,this._attenuation=r.attenuation,this._pointCloudBackFaceCulling=r.backFaceCulling;let s=e.clippingPlanes;l(s)&&s.owner===void 0?ls.setOwner(s,this,"_clippingPlanes"):this._clippingPlanes=s,this._clippingPlanesState=0,this._clippingPlanesMatrix=F.clone(F.IDENTITY);let a=e.clippingPolygons;l(a)&&a.owner===void 0?Uh.setOwner(a,this,"_clippingPolygons"):this._clippingPolygons=a,this._clippingPolygonsState=0,this._modelImagery=new UB(this),this._lightColor=m.clone(e.lightColor),this._imageBasedLighting=l(e.imageBasedLighting)?e.imageBasedLighting:new nC,this._shouldDestroyImageBasedLighting=!l(e.imageBasedLighting),this._environmentMapManager=void 0;let c=new rg(e.environmentMapOptions);rg.setOwner(c,this,"_environmentMapManager"),this._backFaceCulling=e.backFaceCulling??!0,this._backFaceCullingDirty=!1,this._shadows=e.shadows??Vn.ENABLED,this._shadowsDirty=!1,this._debugShowBoundingVolumeDirty=!1,this._debugShowBoundingVolume=e.debugShowBoundingVolume??!1,this._enableDebugWireframe=e.enableDebugWireframe??!1,this._enableShowOutline=e.enableShowOutline??!0,this._debugWireframe=e.debugWireframe??!1,this._debugWireframe===!0&&this._enableDebugWireframe===!1&&this.type===Nr.GLTF&&_t("model-debug-wireframe-ignored","enableDebugWireframe must be set to true in Model.fromGltf, otherwise debugWireframe will be ignored.");let d=e.credit;typeof d=="string"&&(d=new Et(d)),this._credits=[],this._credit=d,this._resourceCredits=[],this._gltfCredits=[],this._showCreditsOnScreen=e.showCreditsOnScreen??!1,this._showCreditsOnScreenDirty=!0,this._splitDirection=e.splitDirection??Br.NONE,this._enableShowOutline=e.enableShowOutline??!0,this.showOutline=e.showOutline??!0,this.outlineColor=e.outlineColor??U.BLACK,this._classificationType=e.classificationType,this._statistics=new XB,this._sceneMode=void 0,this._projectTo2D=e.projectTo2D??!1,this._enablePick=e.enablePick??!1,this._fogRenderable=void 0,this._skipLevelOfDetail=!1,this._ignoreCommands=e.ignoreCommands??!1,this._errorEvent=new xe,this._readyEvent=new xe,this._texturesReadyEvent=new xe,this._sceneGraph=void 0,this._nodesByName={},this.pickObject=e.pickObject,this._marsOptions=e.marsOptions??{}}function a4(e,t){if(e._errorEvent.numberOfListeners>0){e._errorEvent.raiseEvent(t);return}console.log(t)}function G6e(e,t){let n=e._featureTables,i=t.propertyTables,o=i.length;for(let r=0;r<o;r++){let s=i[r],a=new YF({model:e,propertyTable:s});n.push(a)}return n}function L6e(e,t){let n=t._featureIdLabel,i=t._instanceFeatureIdLabel,o,r,s,a;for(o=0;o<e.nodes.length;o++)if(a=e.nodes[o],l(a.instances)&&(s=It.getFeatureIdsByLabel(a.instances.featureIds,i),l(s)&&l(s.propertyTableId)))return s.propertyTableId;for(o=0;o<e.nodes.length;o++)for(a=e.nodes[o],r=0;r<a.primitives.length;r++){let c=a.primitives[r],d=It.getFeatureIdsByLabel(c.featureIds,n);if(l(d))return d.propertyTableId}if(t._featureTables.length===1)return 0}function d4(e,t){if(!l(e)&&!l(t))return!1;if(l(e)!==l(t))return!0;let n=e.alpha,i=t.alpha;return Math.floor(n)!==Math.floor(i)||Math.ceil(n)!==Math.ceil(i)}Object.defineProperties(Go.prototype,{ready:{get:function(){return this._ready}},errorEvent:{get:function(){return this._errorEvent}},readyEvent:{get:function(){return this._readyEvent}},incrementallyLoadTextures:{get:function(){return this._loader.incrementallyLoadTextures??!1}},texturesReadyEvent:{get:function(){return this._texturesReadyEvent}},loader:{get:function(){return this._loader}},statistics:{get:function(){return this._statistics}},activeAnimations:{get:function(){return this._activeAnimations}},clampAnimations:{get:function(){return this._clampAnimations},set:function(e){this._clampAnimations=e}},cull:{get:function(){return this._cull}},opaquePass:{get:function(){return this._opaquePass}},pointCloudShading:{get:function(){return this._pointCloudShading},set:function(e){e!==this._pointCloudShading&&this.resetDrawCommands(),this._pointCloudShading=e}},customShader:{get:function(){return this._customShader},set:function(e){e!==this._customShader&&this.resetDrawCommands(),this._customShader=e}},sceneGraph:{get:function(){return this._sceneGraph}},content:{get:function(){return this._content}},heightReference:{get:function(){return this._heightReference},set:function(e){e!==this._heightReference&&(this._heightDirty=!0),this._heightReference=e}},distanceDisplayCondition:{get:function(){return this._distanceDisplayCondition},set:function(e){this._distanceDisplayCondition=Dt.clone(e,this._distanceDisplayCondition)}},structuralMetadata:{get:function(){return this._sceneGraph.components.structuralMetadata}},featureTableId:{get:function(){return this._featureTableId},set:function(e){this._featureTableId=e}},featureTables:{get:function(){return this._featureTables},set:function(e){this._featureTables=e}},id:{get:function(){return this._id},set:function(e){e!==this._id&&(this._idDirty=!0),this._id=e}},allowPicking:{get:function(){return this._allowPicking}},style:{get:function(){return this._style},set:function(e){this._style=e,this._styleDirty=!0}},color:{get:function(){return this._color},set:function(e){d4(e,this._color)&&this.resetDrawCommands(),this._color=U.clone(e,this._color)}},colorBlendMode:{get:function(){return this._colorBlendMode},set:function(e){this._colorBlendMode=e}},colorBlendAmount:{get:function(){return this._colorBlendAmount},set:function(e){this._colorBlendAmount=e}},silhouetteColor:{get:function(){return this._silhouetteColor},set:function(e){if(!U.equals(e,this._silhouetteColor)){let t=d4(e,this._silhouetteColor);this._silhouetteDirty=this._silhouetteDirty||t}this._silhouetteColor=U.clone(e,this._silhouetteColor)}},silhouetteSize:{get:function(){return this._silhouetteSize},set:function(e){if(e!==this._silhouetteSize){let t=this._silhouetteSize,n=e>0&&t===0||e===0&&t>0;this._silhouetteDirty=this._silhouetteDirty||n,this._backFaceCullingDirty=this._backFaceCullingDirty||n}this._silhouetteSize=e}},boundingSphere:{get:function(){let e=l(this._clampedModelMatrix)?this._clampedModelMatrix:this.modelMatrix;return lfe(this,e),this._boundingSphere}},debugShowBoundingVolume:{get:function(){return this._debugShowBoundingVolume},set:function(e){this._debugShowBoundingVolume!==e&&(this._debugShowBoundingVolumeDirty=!0),this._debugShowBoundingVolume=e}},debugWireframe:{get:function(){return this._debugWireframe},set:function(e){this._debugWireframe!==e&&this.resetDrawCommands(),this._debugWireframe=e,this._debugWireframe===!0&&this._enableDebugWireframe===!1&&this.type===Nr.GLTF&&_t("model-debug-wireframe-ignored","enableDebugWireframe must be set to true in Model.fromGltfAsync, otherwise debugWireframe will be ignored.")}},show:{get:function(){return this._show},set:function(e){this._show=e}},featureIdLabel:{get:function(){return this._featureIdLabel},set:function(e){typeof e=="number"&&(e=`featureId_${e}`),e!==this._featureIdLabel&&(this._featureTableIdDirty=!0),this._featureIdLabel=e}},instanceFeatureIdLabel:{get:function(){return this._instanceFeatureIdLabel},set:function(e){typeof e=="number"&&(e=`instanceFeatureId_${e}`),e!==this._instanceFeatureIdLabel&&(this._featureTableIdDirty=!0),this._instanceFeatureIdLabel=e}},clippingPlanes:{get:function(){return this._clippingPlanes},set:function(e){e!==this._clippingPlanes&&(ls.setOwner(e,this,"_clippingPlanes"),this.resetDrawCommands())}},clippingPolygons:{get:function(){return this._clippingPolygons},set:function(e){e!==this._clippingPolygons&&(Uh.setOwner(e,this,"_clippingPolygons"),this.resetDrawCommands())}},enableVerticalExaggeration:{get:function(){return this._enableVerticalExaggeration},set:function(e){e!==this._enableVerticalExaggeration&&this.resetDrawCommands(),this._enableVerticalExaggeration=e}},hasVerticalExaggeration:{get:function(){return this._hasVerticalExaggeration}},imageryLayers:{get:function(){if(l(this._content)){let e=this._content.tileset;if(l(e))return e.imageryLayers}}},lightColor:{get:function(){return this._lightColor},set:function(e){l(e)!==l(this._lightColor)&&this.resetDrawCommands(),this._lightColor=m.clone(e,this._lightColor)}},imageBasedLighting:{get:function(){return this._imageBasedLighting},set:function(e){e!==this._imageBasedLighting&&(this._shouldDestroyImageBasedLighting&&!this._imageBasedLighting.isDestroyed()&&this._imageBasedLighting.destroy(),this._imageBasedLighting=e,this._shouldDestroyImageBasedLighting=!1,this.resetDrawCommands())}},environmentMapManager:{get:function(){return this._environmentMapManager},set:function(e){e!==this.environmentMapManager&&(rg.setOwner(e,this,"_environmentMapManager"),this.resetDrawCommands())}},backFaceCulling:{get:function(){return this._backFaceCulling},set:function(e){e!==this._backFaceCulling&&(this._backFaceCullingDirty=!0),this._backFaceCulling=e}},scale:{get:function(){return this._scale},set:function(e){e!==this._scale&&(this._updateModelMatrix=!0),this._scale=e}},computedScale:{get:function(){return this._computedScale}},minimumPixelSize:{get:function(){return this._minimumPixelSize},set:function(e){e!==this._minimumPixelSize&&(this._updateModelMatrix=!0),this._minimumPixelSize=e}},maximumScale:{get:function(){return this._maximumScale},set:function(e){e!==this._maximumScale&&(this._updateModelMatrix=!0),this._maximumScale=e}},shadows:{get:function(){return this._shadows},set:function(e){e!==this._shadows&&(this._shadowsDirty=!0),this._shadows=e}},credit:{get:function(){return this._credit}},showCreditsOnScreen:{get:function(){return this._showCreditsOnScreen},set:function(e){this._showCreditsOnScreen!==e&&(this._showCreditsOnScreenDirty=!0),this._showCreditsOnScreen=e}},splitDirection:{get:function(){return this._splitDirection},set:function(e){this._splitDirection!==e&&this.resetDrawCommands(),this._splitDirection=e}},classificationType:{get:function(){return this._classificationType}},pickIds:{get:function(){return this._pickIds}},styleCommandsNeeded:{get:function(){return this._styleCommandsNeeded}}});Go.prototype.getNode=function(e){return this._nodesByName[e]};Go.prototype.setArticulationStage=function(e,t){this._sceneGraph.setArticulationStage(e,t)};Go.prototype.applyArticulations=function(){this._sceneGraph.applyArticulations()};Go.prototype.getExtension=function(e){return this._loader.components.extensions[e]};Go.prototype.makeStyleDirty=function(){this._styleDirty=!0};Go.prototype.resetDrawCommands=function(){this._drawCommandsBuilt=!1};var W6e=new F,F6e=new $,B6e=new F;Go.prototype.update=function(e){let t=!1;try{t=w6e(this,e)}catch(i){if(!this._loader.incrementallyLoadTextures&&i.name==="TextureError")a4(this,i);else{let o=It.getError("model",this._resource,i);a4(this,o)}}if(X6e(this,e),N6e(this,e),P6e(this,e),Y6e(this,e),!this._resourcesLoaded&&t){this._resourcesLoaded=!0;let i=this._loader.components;if(!l(i)){if(this._loader.isUnloaded())return;let s=It.getError("model",this._resource,new me("Failed to load model."));a4(s),this._rejectLoad=this._rejectLoad&&this._rejectLoad(s)}let o=i.structuralMetadata;l(o)&&o.propertyTableCount>0&&G6e(this,o);let r=new PB({model:this,modelComponents:i});this._sceneGraph=r,this._gltfCredits=r.components.asset.credits}if(!this._resourcesLoaded||e.mode===se.MORPHING)return;let n=this._modelImagery;if(n.update(e),!(!n.ready&&!(this._content?.tileset?._asynchronouslyLoadImagery??!1))){if(M6e(this),v6e(this),U6e(this,e),D6e(this),k6e(this,e),Q6e(this,e),O6e(this,e),z6e(this,e),H6e(this,e),J6e(this,e),K6e(this,e),this._defaultTexture=e.context.defaultTexture,j6e(this,e),q6e(this,e),$6e(this),eqe(this,e),oqe(this,e),!this._ready){e.afterRender.push(()=>{this._ready=!0,this._readyEvent.raiseEvent(this)});return}this._loader.incrementallyLoadTextures&&!this._texturesLoaded&&this._loader.texturesLoaded&&(this.resetDrawCommands(),this._texturesLoaded=!0,this._texturesReadyEvent.raiseEvent(this)),nqe(this),rqe(this,e),sqe(this),aqe(this,e)}};function w6e(e,t){return!e._resourcesLoaded||e._loader.incrementallyLoadTextures&&!e._texturesLoaded?(t.afterRender.push(()=>!0),e._loader.process(t)):!0}function N6e(e,t){l(e._customShader)&&e._customShader.update(t)}function P6e(e,t){let n=e._environmentMapManager,i=t.passes.pick||t.passes.pickVoxel;e._ready&&n.owner===e&&!i&&(n.position=e._boundingSphere.center,n.shouldUpdate=!l(e._imageBasedLighting.sphericalHarmonicCoefficients)||!l(e._imageBasedLighting.specularEnvironmentMaps),n.update(t),n.shouldRegenerateShaders&&e.resetDrawCommands())}function X6e(e,t){if(l(e._marsOptions)&&l(e._marsOptions.customShaders)){let n=gA.getCache(e._marsOptions.customShaders);for(let i in n)Object.prototype.hasOwnProperty.call(n,i)&&n[i].update(t)}}function Y6e(e,t){e._imageBasedLighting.update(t),e._imageBasedLighting.shouldRegenerateShaders&&e.resetDrawCommands()}function M6e(e){if(!e._featureTableIdDirty)return;e._featureTableIdDirty=!1;let t=e._sceneGraph.components,n=t.structuralMetadata;l(n)&&n.propertyTableCount>0&&(e.featureTableId=L6e(t,e),e._styleDirty=!0,e.resetDrawCommands())}function v6e(e){e._styleDirty&&(e.applyStyle(e._style),e._styleDirty=!1)}function U6e(e,t){let n=e._featureTables,i=n.length,o=!1;for(let r=0;r<i;r++)n[r].update(t),n[r].styleCommandsNeededDirty&&(o=!0);o&&cfe(e)}function cfe(e){let t=e.featureTables[e.featureTableId];e._styleCommandsNeeded=zh.getStyleCommandsNeeded(t.featuresLength,t.batchTexture.translucentFeaturesLength)}function D6e(e){let t=e.pointCloudShading;t.attenuation!==e._attenuation&&(e.resetDrawCommands(),e._attenuation=t.attenuation),t.backFaceCulling!==e._pointCloudBackFaceCulling&&(e.resetDrawCommands(),e._pointCloudBackFaceCulling=t.backFaceCulling)}function k6e(e,t){e._silhouetteDirty&&(dfe(t)&&e.resetDrawCommands(),e._silhouetteDirty=!1)}function Q6e(e,t){let n=e.hasSkipLevelOfDetail(t);n!==e._skipLevelOfDetail&&(e.resetDrawCommands(),e._skipLevelOfDetail=n)}function O6e(e,t){let n=0;e.isClippingEnabled()&&(e._clippingPlanes.owner===e&&e._clippingPlanes.update(t),n=e._clippingPlanes.clippingPlanesState),n!==e._clippingPlanesState&&(e.resetDrawCommands(),e._clippingPlanesState=n)}function z6e(e,t){let n=0;e.isClippingPolygonsEnabled()&&(e._clippingPolygons.owner===e&&(e._clippingPolygons.update(t),e._clippingPolygons.queueCommands(t)),n=e._clippingPolygons.clippingPolygonsState),n!==e._clippingPolygonsState&&(e.resetDrawCommands(),e._clippingPolygonsState=n)}function H6e(e,t){t.mode!==e._sceneMode&&(e._projectTo2D?e.resetDrawCommands():e._updateModelMatrix=!0,e._sceneMode=t.mode)}function J6e(e,t){let n=t.fog.enabled&&t.fog.renderable;n!==e._fogRenderable&&(e.resetDrawCommands(),e._fogRenderable=n)}function K6e(e,t){if(e.enableVerticalExaggeration){let n=t.verticalExaggeration!==1;e.hasVerticalExaggeration!==n&&(e.resetDrawCommands(),e._hasVerticalExaggeration=n)}else e.hasVerticalExaggeration&&(e.resetDrawCommands(),e._hasVerticalExaggeration=!1)}function j6e(e,t){e._drawCommandsBuilt||(e.destroyPipelineResources(),e._sceneGraph.buildDrawCommands(t),e._drawCommandsBuilt=!0)}function q6e(e,t){F.equals(e.modelMatrix,e._modelMatrix)||(e._updateModelMatrix=!0,e._modelMatrix=F.clone(e.modelMatrix,e._modelMatrix))}var v0=new m,c4=new Ae;function $6e(e){if(!e._updateModelMatrix&&!e._heightDirty&&e._minimumPixelSize===0)return;l(e._removeUpdateHeightCallback)&&(e._removeUpdateHeightCallback(),e._removeUpdateHeightCallback=void 0);let t=e._scene;if(!l(t)||e.heightReference===rt.NONE){e._clampedModelMatrix=void 0;return}let n=t.ellipsoid??ie.default,i=e.modelMatrix;v0.x=i[12],v0.y=i[13],v0.z=i[14];let o=n.cartesianToCartographic(v0);if(!l(o)){e._clampedModelMatrix=void 0;return}l(e._clampedModelMatrix)||(e._clampedModelMatrix=F.clone(i,new F)),e._removeUpdateHeightCallback=t.updateHeight(o,afe(e,n,o),e.heightReference);let r=t.getHeight(o,e.heightReference);if(l(r)){let s=afe(e,n,o);Ae.clone(o,c4),c4.height=r,s(c4)}e._heightDirty=!1,e._updateModelMatrix=!0}function eqe(e,t){if(!e._updateModelMatrix&&e._minimumPixelSize===0)return;let n=l(e._clampedModelMatrix)?e._clampedModelMatrix:e.modelMatrix;lfe(e,n),tqe(e,n,t)}function lfe(e,t){e._clampedScale=l(e._maximumScale)?Math.min(e._scale,e._maximumScale):e._scale,e._boundingSphere.center=m.multiplyByScalar(e._sceneGraph.boundingSphere.center,e._clampedScale,e._boundingSphere.center),e._boundingSphere.radius=e._initialRadius*e._clampedScale,e._boundingSphere=ue.transform(e._boundingSphere,t,e._boundingSphere)}function tqe(e,t,n){let i=e.scale;if(e.minimumPixelSize!==0&&!e._projectTo2D){let o=n.context,r=Math.max(o.drawingBufferWidth,o.drawingBufferHeight);F.getTranslation(t,v0),e._sceneMode!==se.SCENE3D&&so.computeActualEllipsoidPosition(n,v0,v0);let s=e._boundingSphere.radius,a=cqe(v0,s,n),c=1/a;Math.min(c*(2*s),r)<e.minimumPixelSize&&(i=e.minimumPixelSize*a/(2*e._initialRadius))}e._computedScale=l(e.maximumScale)?Math.min(e.maximumScale,i):i}function nqe(e){if(!e._idDirty)return;e._idDirty=!1;let t=e._id,n=e._pickIds,i=n.length;for(let o=0;o<i;++o)n[o].object.id=t}var iqe=new $(1,0,0,0,0,1,0,-1,0);function oqe(e,t){let n=l(e._clampedModelMatrix)?e._clampedModelMatrix:e.modelMatrix,i=e.referenceMatrix??n,o=t.context,r=F6e,s=W6e;if(s=F.multiply(o.uniformState.view3D,i,s),r=F.getRotation(s,r),r=$.transpose(r,r),e._iblReferenceFrameMatrix=$.multiply(iqe,r,e._iblReferenceFrameMatrix),e.isClippingEnabled()){let a=B6e;a=F.multiply(o.uniformState.view3D,i,a),a=F.multiply(a,e._clippingPlanes.modelMatrix,a),e._clippingPlanesMatrix=F.inverseTranspose(a,e._clippingPlanesMatrix)}}function rqe(e,t){let n=e._sceneGraph;if(e._updateModelMatrix||e._minimumPixelSize!==0){let o=l(e._clampedModelMatrix)?e._clampedModelMatrix:e.modelMatrix;n.updateModelMatrix(o,t),e._updateModelMatrix=!1}e._backFaceCullingDirty&&(n.updateBackFaceCulling(e._backFaceCulling),e._backFaceCullingDirty=!1),e._shadowsDirty&&(n.updateShadows(e._shadows),e._shadowsDirty=!1),e._debugShowBoundingVolumeDirty&&(n.updateShowBoundingVolume(e._debugShowBoundingVolume),e._debugShowBoundingVolumeDirty=!1);let i=!1;l(e.classificationType)||(i=e._userAnimationDirty||e._activeAnimations.update(t)),n.update(t,i),e._userAnimationDirty=!1}function sqe(e){if(!e._showCreditsOnScreenDirty)return;e._showCreditsOnScreenDirty=!1,e._credits.length=0;let t=e._showCreditsOnScreen;if(l(e._credit)){let s=Et.clone(e._credit);s.showOnScreen=s.showOnScreen||t,e._credits.push(s)}let n=e._resourceCredits,i=n.length;for(let s=0;s<i;s++){let a=Et.clone(n[s]);a.showOnScreen=a.showOnScreen||t,e._credits.push(a)}let o=e._gltfCredits,r=o.length;for(let s=0;s<r;s++){let a=Et.clone(o[s]);a.showOnScreen=a.showOnScreen||t,e._credits.push(a)}}function aqe(e,t){let n=dqe(e,t),i=e.isInvisible(),o=e.hasSilhouette(t),r=e._show&&e._computedScale!==0&&n&&(!i||o),s=t.passes,a=s.render||s.pick&&e.allowPicking;r&&!e._ignoreCommands&&a&&(uqe(e,t),e._sceneGraph.pushDrawCommands(t))}var l4=new ue;function cqe(e,t,n){return l4.center=e,l4.radius=t,n.camera.getPixelSize(l4,n.context.drawingBufferWidth,n.context.drawingBufferHeight)}var u9=new m;function afe(e,t,n){return function(i){CS(e.heightReference)&&(i.height+=n.height),t.cartographicToCartesian(i,u9);let o=e._clampedModelMatrix;F.clone(e.modelMatrix,o),o[12]=u9.x,o[13]=u9.y,o[14]=u9.z,e._heightDirty=!0}}var lqe=new m;function dqe(e,t){let n=e.distanceDisplayCondition;if(!l(n))return!0;let i=n.near*n.near,o=n.far*n.far,r;if(t.mode===se.SCENE2D){let a=(t.camera.frustum.right-t.camera.frustum.left)*.5;r=a*a}else{let s=F.getTranslation(e.modelMatrix,lqe);so.computeActualEllipsoidPosition(t,s,s),r=m.distanceSquared(s,t.camera.positionWC)}return r>=i&&r<=o}function uqe(e,t){let n=t.creditDisplay,i=e._credits,o=i.length;for(let r=0;r<o;r++)n.addCreditToNextFrame(i[r])}Go.prototype.isTranslucent=function(){let e=this.color;return l(e)&&e.alpha>0&&e.alpha<1};Go.prototype.isInvisible=function(){let e=this.color;return l(e)&&e.alpha===0};function dfe(e){return e.context.stencilBuffer}Go.prototype.hasSilhouette=function(e){return dfe(e)&&this._silhouetteSize>0&&this._silhouetteColor.alpha>0&&!l(this._classificationType)};Go.prototype.hasSkipLevelOfDetail=function(e){if(!Nr.is3DTiles(this.type))return!1;let t=e.context.stencilBuffer,n=this._content.tileset;return t&&n.isSkippingLevelOfDetail};Go.prototype.isClippingEnabled=function(){let e=this._clippingPlanes;return l(e)&&e.enabled&&e.length!==0};Go.prototype.pick=function(e,t,n,i,o){return U_(this,e,t,n,i,o)};Go.prototype.isClippingPolygonsEnabled=function(){let e=this._clippingPolygons;return l(e)&&e.enabled&&e.length!==0};Go.prototype.isDestroyed=function(){return!1};Go.prototype.destroy=function(){let e=this._loader;l(e)&&e.destroy();let t=this._featureTables;if(l(t)){let r=t.length;for(let s=0;s<r;s++)t[s].destroy()}this.destroyPipelineResources(),this.destroyModelResources(),l(this._removeUpdateHeightCallback)&&(this._removeUpdateHeightCallback(),this._removeUpdateHeightCallback=void 0),l(this._terrainProviderChangedCallback)&&(this._terrainProviderChangedCallback(),this._terrainProviderChangedCallback=void 0);let n=this._clippingPlanes;l(n)&&!n.isDestroyed()&&n.owner===this&&n.destroy(),this._clippingPlanes=void 0;let i=this._clippingPolygons;l(i)&&!i.isDestroyed()&&i.owner===this&&i.destroy(),this._clippingPolygons=void 0,this._shouldDestroyImageBasedLighting&&!this._imageBasedLighting.isDestroyed()&&this._imageBasedLighting.destroy(),this._imageBasedLighting=void 0;let o=this._environmentMapManager;!o.isDestroyed()&&o.owner===this&&o.destroy(),this._environmentMapManager=void 0,he(this)};Go.prototype.destroyPipelineResources=function(){let e=this._pipelineResources;for(let t=0;t<e.length;t++)e[t].destroy();this._pipelineResources.length=0,this._pickIds.length=0};Go.prototype.destroyModelResources=function(){let e=this._modelResources;for(let t=0;t<e.length;t++)e[t].destroy();this._modelResources.length=0};Go.fromGltfAsync=async function(e){e=e??Q.EMPTY_OBJECT;let t=e.url??e.gltf,n={releaseGltfJson:e.releaseGltfJson,asynchronous:e.asynchronous,incrementallyLoadTextures:e.incrementallyLoadTextures,upAxis:e.upAxis,forwardAxis:e.forwardAxis,loadAttributesFor2D:e.projectTo2D,enablePick:e.enablePick,loadIndicesForWireframe:e.enableDebugWireframe,loadPrimitiveOutline:e.enableShowOutline,loadForClassification:l(e.classificationType)},i=e.basePath??"",o=Le.createIfNeeded(i);l(t.asset)?(n.gltfJson=t,n.baseResource=o,n.gltfResource=o):t instanceof Uint8Array?(n.typedArray=t,n.baseResource=o,n.gltfResource=o):n.gltfResource=Le.createIfNeeded(t);let r=new uu(n),a=l(e.content)?Nr.TILE_GLTF:Nr.GLTF,c=n.gltfResource,d=DB(r,a,e);d.resource=c,d.environmentMapOptions=e.environmentMapOptions;try{await r.load()}catch(A){throw r.destroy(),It.getError("model",c,A)}let u=e.gltfCallback;l(u)&&u(r.gltfJson);let h=new Go(d),p=h._resource.credits;if(l(p)){let A=p.length;for(let f=0;f<A;f++)h._resourceCredits.push(Et.clone(p[f]))}return h};Go.fromB3dm=async function(e){let t={b3dmResource:e.resource,arrayBuffer:e.arrayBuffer,byteOffset:e.byteOffset,releaseGltfJson:e.releaseGltfJson,asynchronous:e.asynchronous,incrementallyLoadTextures:e.incrementallyLoadTextures,upAxis:e.upAxis,forwardAxis:e.forwardAxis,loadAttributesFor2D:e.projectTo2D,enablePick:e.enablePick,loadIndicesForWireframe:e.enableDebugWireframe,loadPrimitiveOutline:e.enableShowOutline,loadForClassification:l(e.classificationType)},n=new ZF(t);try{await n.load();let i=DB(n,Nr.TILE_B3DM,e);return new Go(i)}catch(i){throw n.destroy(),i}};Go.fromPnts=async function(e){let t={arrayBuffer:e.arrayBuffer,byteOffset:e.byteOffset,loadAttributesFor2D:e.projectTo2D},n=new MB(t);try{await n.load();let i=DB(n,Nr.TILE_PNTS,e);return new Go(i)}catch(i){throw n.destroy(),i}};Go.fromI3dm=async function(e){let t={i3dmResource:e.resource,arrayBuffer:e.arrayBuffer,byteOffset:e.byteOffset,releaseGltfJson:e.releaseGltfJson,asynchronous:e.asynchronous,incrementallyLoadTextures:e.incrementallyLoadTextures,upAxis:e.upAxis,forwardAxis:e.forwardAxis,loadAttributesFor2D:e.projectTo2D,enablePick:e.enablePick,loadIndicesForWireframe:e.enableDebugWireframe,loadPrimitiveOutline:e.enableShowOutline},n=new GF(t);try{await n.load();let i=DB(n,Nr.TILE_I3DM,e);return new Go(i)}catch(i){throw n.destroy(),i}};Go.fromGeoJson=async function(e){let t={geoJson:e.geoJson},n=new RF(t),i=DB(n,Nr.TILE_GEOJSON,e);return new Go(i)};var mqe=new U;Go.prototype.applyColorAndShow=function(e){let t=U.clone(this._color,mqe),n=l(e)&&l(e.color),i=l(e)&&l(e.show);this._color=n?e.color.evaluateColor(void 0,this._color):U.clone(U.WHITE,this._color),this._show=i?e.show.evaluate(void 0):!0,d4(t,this._color)&&this.resetDrawCommands()};Go.prototype.applyStyle=function(e){let t=this.type===Nr.TILE_PNTS,n=l(this.featureTableId)&&this.featureTables[this.featureTableId].featuresLength>0,i=l(this.structuralMetadata)?this.structuralMetadata.propertyAttributes:void 0,o=l(i)&&l(i[0]);if(t&&(!n||o)){this.resetDrawCommands();return}n?(this.featureTables[this.featureTableId].applyStyle(e),cfe(this,e)):(this.applyColorAndShow(e),this._styleCommandsNeeded=void 0)};function DB(e,t,n){return{loader:e,type:t,resource:n.resource,show:n.show,modelMatrix:n.modelMatrix,scale:n.scale,enableVerticalExaggeration:n.enableVerticalExaggeration,minimumPixelSize:n.minimumPixelSize,maximumScale:n.maximumScale,id:n.id,allowPicking:n.allowPicking,clampAnimations:n.clampAnimations,shadows:n.shadows,debugShowBoundingVolume:n.debugShowBoundingVolume,enableDebugWireframe:n.enableDebugWireframe,debugWireframe:n.debugWireframe,cull:n.cull,opaquePass:n.opaquePass,customShader:n.customShader,content:n.content,heightReference:n.heightReference,scene:n.scene,distanceDisplayCondition:n.distanceDisplayCondition,color:n.color,colorBlendAmount:n.colorBlendAmount,colorBlendMode:n.colorBlendMode,silhouetteColor:n.silhouetteColor,silhouetteSize:n.silhouetteSize,enableShowOutline:n.enableShowOutline,showOutline:n.showOutline,outlineColor:n.outlineColor,clippingPlanes:n.clippingPlanes,clippingPolygons:n.clippingPolygons,lightColor:n.lightColor,imageBasedLighting:n.imageBasedLighting,backFaceCulling:n.backFaceCulling,credit:n.credit,showCreditsOnScreen:n.showCreditsOnScreen,splitDirection:n.splitDirection,projectTo2D:n.projectTo2D,enablePick:n.enablePick,featureIdLabel:n.featureIdLabel,instanceFeatureIdLabel:n.instanceFeatureIdLabel,pointCloudShading:n.pointCloudShading,classificationType:n.classificationType,pickObject:n.pickObject,...n.marsOptions,marsOptions:n.marsOptions}}var gu=Go;function ps(e,t,n){this._tileset=e,this._tile=t,this._resource=n,this._model=void 0,this._metadata=void 0,this._group=void 0,this._ready=!1}Object.defineProperties(ps.prototype,{featuresLength:{get:function(){let e=this._model,t=e.featureTables,n=e.featureTableId;return l(t)&&l(t[n])?t[n].featuresLength:0}},pointsLength:{get:function(){return this._model.statistics.pointsLength}},trianglesLength:{get:function(){return this._model.statistics.trianglesLength}},geometryByteLength:{get:function(){return this._model.statistics.geometryByteLength}},texturesByteLength:{get:function(){return this._model.statistics.texturesByteLength}},batchTableByteLength:{get:function(){let e=this._model.statistics;return e.propertyTablesByteLength+e.batchTexturesByteLength}},innerContents:{get:function(){}},ready:{get:function(){return this._ready}},tileset:{get:function(){return this._tileset}},tile:{get:function(){return this._tile}},url:{get:function(){return this._resource.getUrlComponent(!0)}},batchTable:{get:function(){let e=this._model,t=e.featureTables,n=e.featureTableId;if(l(t)&&l(t[n]))return t[n]}},metadata:{get:function(){return this._metadata},set:function(e){this._metadata=e}},group:{get:function(){return this._group},set:function(e){this._group=e}}});ps.prototype.getTextureIds=function(){return this._model.statistics.getTextureIds()};ps.prototype.getTextureByteLengthById=function(e){return this._model.statistics.getTextureByteLengthById(e)};ps.prototype.getExtension=function(e){return this._model.getExtension(e)};ps.prototype.getFeature=function(e){let t=this._model,n=t.featureTableId;return t.featureTables[n].getFeature(e)};ps.prototype.hasProperty=function(e,t){let n=this._model,i=n.featureTableId;return l(i)?n.featureTables[i].hasProperty(e,t):!1};ps.prototype.applyDebugSettings=function(e,t){t=e?t:U.WHITE,this.featuresLength===0?this._model.color=t:l(this.batchTable)&&this.batchTable.setAllColor(t)};ps.prototype.applyStyle=function(e){this._model.style=e};ps.prototype.update=function(e,t){let n=this._model,i=this._tile;n.colorBlendAmount=e.colorBlendAmount,n.colorBlendMode=e.colorBlendMode,n.modelMatrix=i.computedTransform,n.customShader=e.customShader,n.featureIdLabel=e.featureIdLabel,n.instanceFeatureIdLabel=e.instanceFeatureIdLabel,n.lightColor=e.lightColor,n.imageBasedLighting=e.imageBasedLighting,n.backFaceCulling=e.backFaceCulling,n.shadows=e.shadows,n.showCreditsOnScreen=e.showCreditsOnScreen,n.splitDirection=e.splitDirection,n.debugWireframe=e.debugWireframe,n.showOutline=e.showOutline,n.outlineColor=e.outlineColor,n.pointCloudShading=e.pointCloudShading;let o=e.clippingPlanes;n.referenceMatrix=e.clippingPlanesOriginMatrix,l(o)&&i.clippingPlanesDirty&&(n._clippingPlanes=o.enabled&&i._isClipped?o:void 0);let r=e.environmentMapManager;n.environmentMapManager!==o&&(n._environmentMapManager=r),l(o)&&l(n._clippingPlanes)&&n._clippingPlanes!==o&&(n._clippingPlanes=o,n._clippingPlanesState=0);let s=e.clippingPolygons;l(s)&&i.clippingPolygonsDirty&&(n._clippingPolygons=s.enabled&&i._isClippedByPolygon?s:void 0),l(s)&&l(n._clippingPolygons)&&n._clippingPolygons!==s&&(n._clippingPolygons=s,n._clippingPolygonsState=0),n.update(t),!this._ready&&n.ready&&(n.activeAnimations.addAll({loop:Ed.REPEAT}),this._ready=!0)};ps.prototype.isDestroyed=function(){return!1};ps.prototype.destroy=function(){return this._model=this._model&&this._model.destroy(),he(this)};ps.fromGltf=async function(e,t,n,i){let o=new ps(e,t,n),s=kB(e,t,o,{gltf:i,basePath:n}),a=e.vectorClassificationOnly?void 0:e.classificationType;s.classificationType=a;let c=await gu.fromGltfAsync(s);return o._model=c,o};ps.fromB3dm=async function(e,t,n,i,o){let r=new ps(e,t,n),a=kB(e,t,r,{arrayBuffer:i,byteOffset:o,resource:n}),c=e.vectorClassificationOnly?void 0:e.classificationType;a.classificationType=c;let d=await gu.fromB3dm(a);return r._model=d,r};ps.fromI3dm=async function(e,t,n,i,o){let r=new ps(e,t,n),a=kB(e,t,r,{arrayBuffer:i,byteOffset:o,resource:n}),c=await gu.fromI3dm(a);return r._model=c,r};ps.fromPnts=async function(e,t,n,i,o){let r=new ps(e,t,n),a=kB(e,t,r,{arrayBuffer:i,byteOffset:o,resource:n}),c=await gu.fromPnts(a);return r._model=c,r};ps.fromGeoJson=async function(e,t,n,i){let o=new ps(e,t,n),s=kB(e,t,o,{geoJson:i,resource:n}),a=await gu.fromGeoJson(s);return o._model=a,o};ps.prototype.pick=function(e,t,n){if(!l(this._model)||!this._ready)return;let i=t.verticalExaggeration,o=t.verticalExaggerationRelativeHeight;return this._model.pick(e,t,i,o,ie.WGS84,n)};function kB(e,t,n,i){let o={cull:!1,releaseGltfJson:!0,opaquePass:Ge.CESIUM_3D_TILE,modelMatrix:t.computedTransform,upAxis:e._modelUpAxis,forwardAxis:e._modelForwardAxis,incrementallyLoadTextures:!1,customShader:e.customShader,content:n,colorBlendMode:e.colorBlendMode,colorBlendAmount:e.colorBlendAmount,lightColor:e.lightColor,imageBasedLighting:e.imageBasedLighting,featureIdLabel:e.featureIdLabel,instanceFeatureIdLabel:e.instanceFeatureIdLabel,pointCloudShading:e.pointCloudShading,clippingPlanes:e.clippingPlanes,backFaceCulling:e.backFaceCulling,shadows:e.shadows,showCreditsOnScreen:e.showCreditsOnScreen,splitDirection:e.splitDirection,enableDebugWireframe:e._enableDebugWireframe,debugWireframe:e.debugWireframe,projectTo2D:e._projectTo2D,enablePick:e._enablePick,enableShowOutline:e._enableShowOutline,showOutline:e.showOutline,outlineColor:e.outlineColor,marsOptions:e._marsOptions};return Ft(i,o)}var bu=ps;var kKn=y(x(),1);function Rm(e,t,n){this._tileset=e,this._tile=t,this._resource=n,this.featurePropertiesDirty=!1,this._metadata=void 0,this._group=void 0,this._ready=!1}Object.defineProperties(Rm.prototype,{featuresLength:{get:function(){return 0}},pointsLength:{get:function(){return 0}},trianglesLength:{get:function(){return 0}},geometryByteLength:{get:function(){return 0}},texturesByteLength:{get:function(){return 0}},batchTableByteLength:{get:function(){return 0}},innerContents:{get:function(){}},ready:{get:function(){return this._ready}},tileset:{get:function(){return this._tileset}},tile:{get:function(){return this._tile}},url:{get:function(){return this._resource.getUrlComponent(!0)}},batchTable:{get:function(){}},metadata:{get:function(){return this._metadata},set:function(e){this._metadata=e}},group:{get:function(){return this._group},set:function(e){this._group=e}}});Rm.fromJson=function(e,t,n,i){let o=new Rm(e,t,n);return o._tileset.loadTileset(o._resource,i,o._tile),o._ready=!0,o};Rm.prototype.hasProperty=function(e,t){return!1};Rm.prototype.getFeature=function(e){};Rm.prototype.applyDebugSettings=function(e,t){};Rm.prototype.applyStyle=function(e){};Rm.prototype.update=function(e,t){};Rm.prototype.pick=function(e,t,n){};Rm.prototype.isDestroyed=function(){return!1};Rm.prototype.destroy=function(){return he(this)};var QB=Rm;var Uqn=y(x(),1);var z7n=y(x(),1);var f4n=y(x(),1);var OKn=y(x(),1),OB=`uniform sampler2D u_atlas;
uniform float u_coarseDepthTestDistance;
uniform float u_threePointDepthTestDistance;
#ifdef VECTOR_TILE
uniform vec4 u_highlightColor;
#endif
in vec2 v_textureCoordinates;
in vec4 v_pickColor;
in vec4 v_color;
flat in vec2 v_splitDirectionAndEllipsoidDepthEC;
#ifdef SDF
in vec4 v_outlineColor;
in float v_outlineWidth;
#endif
in vec4 v_compressed; // x: eyeDepth, y: applyTranslate & enableDepthCheck, z: dimensions, w: imageSize
const float SHIFT_LEFT1 = 2.0;
const float SHIFT_RIGHT1 = 1.0 / 2.0;
float getGlobeDepthAtCoords(vec2 st)
{
float logDepthOrDepth = czm_unpackDepth(texture(czm_globeDepthTexture, st));
if (logDepthOrDepth == 0.0)
{
return 0.0; // not on the globe
}
vec4 eyeCoordinate = czm_windowToEyeCoordinates(gl_FragCoord.xy, logDepthOrDepth);
return eyeCoordinate.z / eyeCoordinate.w;
}
#ifdef SDF
// Get the distance from the edge of a glyph at a given position sampling an SDF texture.
float getDistance(vec2 position)
{
return texture(u_atlas, position).r;
}
// Samples the sdf texture at the given position and produces a color based on the fill color and the outline.
vec4 getSDFColor(vec2 position, float outlineWidth, vec4 outlineColor, float smoothing)
{
float distance = getDistance(position);
if (outlineWidth > 0.0)
{
// Don't get the outline edge exceed the SDF_EDGE
float outlineEdge = clamp(SDF_EDGE - outlineWidth, 0.0, SDF_EDGE);
float outlineFactor = smoothstep(SDF_EDGE - smoothing, SDF_EDGE + smoothing, distance);
vec4 sdfColor = mix(outlineColor, v_color, outlineFactor);
float alpha = smoothstep(outlineEdge - smoothing, outlineEdge + smoothing, distance);
return vec4(sdfColor.rgb, sdfColor.a * alpha);
}
else
{
float alpha = smoothstep(SDF_EDGE - smoothing, SDF_EDGE + smoothing, distance);
return vec4(v_color.rgb, v_color.a * alpha);
}
}
#endif
bool getDepthTestEnabled() {
float temp = v_compressed.y;
temp = temp * SHIFT_RIGHT1;
float temp2 = (temp - floor(temp)) * SHIFT_LEFT1;
return temp2 != 0.0;
}
float getRelativeEyeDepth(float eyeDepth, float distanceToEllipsoid, float epsilon) {
float depthDifferential = eyeDepth - distanceToEllipsoid;
float depthRatio = abs(depthDifferential / distanceToEllipsoid);
if (depthRatio < epsilon) {
// The approximations are imprecise, so use an epsilon check for small value differences and assume a value of 0.0
return 0.0;
}
return depthDifferential;
}
// Extra manual depth testing is done to allow more control over how a billboard is occluded
// by the globe when near and far from the camera.
void doDepthTest(float eyeDepth, float globeDepth) {
#ifdef VS_THREE_POINT_DEPTH_CHECK
// Since discarding vertices is not possible, the vertex shader sets eyeDepth to 0 to indicate the depth test failed. Apply the discard here.
if (eyeDepth > -u_threePointDepthTestDistance) {
if (eyeDepth == 0.0) {
discard;
}
return;
}
#endif
bool useGlobeDepth = eyeDepth > -u_coarseDepthTestDistance;
if (useGlobeDepth && globeDepth == 0.0) {
// Pixel is not on the globe, so there is no distance to compare against. Pass.
return;
}
// If the camera is close, compare against the globe depth texture that includes depth from the 3D tile pass.
if (useGlobeDepth && getRelativeEyeDepth(eyeDepth, globeDepth, czm_epsilon1) < 0.0) {
discard;
}
}
#ifdef LOG_DEPTH
void writeDepth(float eyeDepth, float globeDepth, float distanceToEllipsoid) {
// If we've made it here, the manual depth test above determined that this fragment should be visible.
// But the automatic depth test must still run in order to write the result to the depth buffer, and its results may
// disagree with our manual depth test's results. To prefer our manual results when in front of the globe, apply an offset towards the camera.
float depthArg = v_depthFromNearPlusOne;
if (globeDepth != 0.0 && getRelativeEyeDepth(eyeDepth, distanceToEllipsoid, czm_epsilon3) > 0.0) {
float globeDepthFromNearPlusOne = (-globeDepth - czm_currentFrustum.x) + 1.0;
float nudge = max(globeDepthFromNearPlusOne * 5e-6, czm_epsilon7);
float globeOnTop = max(1.0, globeDepthFromNearPlusOne - nudge);
depthArg = min(depthArg, globeOnTop);
}
czm_writeLogDepth(depthArg);
}
#endif
void main()
{
if (v_splitDirectionAndEllipsoidDepthEC.x < 0.0 && gl_FragCoord.x > czm_splitPosition) {
discard;
}
if (v_splitDirectionAndEllipsoidDepthEC.x > 0.0 && gl_FragCoord.x < czm_splitPosition) {
discard;
}
if (getDepthTestEnabled()) {
vec2 fragSt = gl_FragCoord.xy / czm_viewport.zw;
float eyeDepth = v_compressed.x;
float globeDepth = getGlobeDepthAtCoords(fragSt);
float distanceToEllipsoid = -v_splitDirectionAndEllipsoidDepthEC.y;
doDepthTest(eyeDepth, globeDepth);
#ifdef LOG_DEPTH
writeDepth(eyeDepth, globeDepth, distanceToEllipsoid);
#endif
}
vec4 color = texture(u_atlas, v_textureCoordinates);
#ifdef SDF
float outlineWidth = v_outlineWidth;
vec4 outlineColor = v_outlineColor;
// Get the current distance
float distance = getDistance(v_textureCoordinates);
#if (__VERSION__ == 300 || defined(GL_OES_standard_derivatives))
float smoothing = fwidth(distance);
// Get an offset that is approximately half the distance to the neighbor pixels
// 0.354 is approximately half of 1/sqrt(2)
vec2 sampleOffset = 0.354 * vec2(dFdx(v_textureCoordinates) + dFdy(v_textureCoordinates));
// Sample the center point
vec4 center = getSDFColor(v_textureCoordinates, outlineWidth, outlineColor, smoothing);
// Sample the 4 neighbors
vec4 color1 = getSDFColor(v_textureCoordinates + vec2(sampleOffset.x, sampleOffset.y), outlineWidth, outlineColor, smoothing);
vec4 color2 = getSDFColor(v_textureCoordinates + vec2(-sampleOffset.x, sampleOffset.y), outlineWidth, outlineColor, smoothing);
vec4 color3 = getSDFColor(v_textureCoordinates + vec2(-sampleOffset.x, -sampleOffset.y), outlineWidth, outlineColor, smoothing);
vec4 color4 = getSDFColor(v_textureCoordinates + vec2(sampleOffset.x, -sampleOffset.y), outlineWidth, outlineColor, smoothing);
// Equally weight the center sample and the 4 neighboring samples
color = (center + color1 + color2 + color3 + color4)/5.0;
#else
// If no derivatives available (IE 10?), just do a single sample
float smoothing = 1.0/32.0;
color = getSDFColor(v_textureCoordinates, outlineWidth, outlineColor, smoothing);
#endif
color = czm_gammaCorrect(color);
#else
color = czm_gammaCorrect(color);
color *= czm_gammaCorrect(v_color);
#endif
// Fully transparent parts of the billboard are not pickable.
#if !defined(OPAQUE) && !defined(TRANSLUCENT)
if (color.a < 0.005) // matches 0/255 and 1/255
{
discard;
}
#else
// The billboard is rendered twice. The opaque pass discards translucent fragments
// and the translucent pass discards opaque fragments.
#ifdef OPAQUE
if (color.a < 0.995) // matches < 254/255
{
discard;
}
#else
if (color.a >= 0.995) // matches 254/255 and 255/255
{
discard;
}
#endif
#endif
#ifdef VECTOR_TILE
color *= u_highlightColor;
#endif
out_FragColor = color;
}
`;var HKn=y(x(),1),zB=`uniform float u_threePointDepthTestDistance;
in vec2 direction;
in vec4 positionHighAndScale;
in vec4 positionLowAndRotation;
in vec4 compressedAttribute0; // pixel offset, translate, horizontal origin, vertical origin, show, direction, texture coordinates (texture offset)
in vec4 compressedAttribute1; // aligned axis, translucency by distance, image width
in vec4 compressedAttribute2; // label horizontal origin, image height, color, pick color, size in meters, valid aligned axis, 13 bits free
in vec4 eyeOffset; // eye offset in meters, 4 bytes free (texture range)
in vec4 scaleByDistance; // near, nearScale, far, farScale
in vec4 pixelOffsetScaleByDistance; // near, nearScale, far, farScale
in vec4 compressedAttribute3; // distance display condition near, far, disableDepthTestDistanceSq, dimensions
in vec2 sdf; // sdf outline color (rgb) and width (w)
in float splitDirection; // splitDirection
#ifdef VS_THREE_POINT_DEPTH_CHECK
in vec4 textureCoordinateBoundsOrLabelTranslate; // the min and max x and y values for the texture coordinates
#endif
#ifdef VECTOR_TILE
in float a_batchId;
#endif
out vec2 v_textureCoordinates;
out vec4 v_compressed; // x: eyeDepth, y: applyTranslate & enableDepthCheck, z: dimensions, w: imageSize
out vec4 v_pickColor;
out vec4 v_color;
flat out vec2 v_splitDirectionAndEllipsoidDepthEC; // x: splitDirection, y: ellipsoid depth in eye coordinates
#ifdef SDF
out vec4 v_outlineColor;
out float v_outlineWidth;
#endif
const float UPPER_BOUND = 32768.0;
const float SHIFT_LEFT16 = 65536.0;
const float SHIFT_LEFT12 = 4096.0;
const float SHIFT_LEFT8 = 256.0;
const float SHIFT_LEFT7 = 128.0;
const float SHIFT_LEFT5 = 32.0;
const float SHIFT_LEFT3 = 8.0;
const float SHIFT_LEFT2 = 4.0;
const float SHIFT_LEFT1 = 2.0;
const float SHIFT_RIGHT12 = 1.0 / 4096.0;
const float SHIFT_RIGHT8 = 1.0 / 256.0;
const float SHIFT_RIGHT7 = 1.0 / 128.0;
const float SHIFT_RIGHT5 = 1.0 / 32.0;
const float SHIFT_RIGHT3 = 1.0 / 8.0;
const float SHIFT_RIGHT2 = 1.0 / 4.0;
const float SHIFT_RIGHT1 = 1.0 / 2.0;
vec4 addScreenSpaceOffset(vec4 positionEC, vec2 imageSize, float scale, vec2 direction, vec2 origin, vec2 translate, vec2 pixelOffset, vec3 alignedAxis, bool validAlignedAxis, float rotation, bool sizeInMeters, out mat2 rotationMatrix, out float mpp)
{
// Note the halfSize cannot be computed in JavaScript because it is sent via
// compressed vertex attributes that coerce it to an integer.
vec2 halfSize = imageSize * scale * 0.5;
halfSize *= ((direction * 2.0) - 1.0);
vec2 originTranslate = origin * abs(halfSize);
#if defined(ROTATION) || defined(ALIGNED_AXIS)
if (validAlignedAxis || rotation != 0.0)
{
float angle = rotation;
if (validAlignedAxis)
{
vec4 projectedAlignedAxis = czm_modelView3D * vec4(alignedAxis, 0.0);
angle += sign(-projectedAlignedAxis.x) * acos(sign(projectedAlignedAxis.y) * (projectedAlignedAxis.y * projectedAlignedAxis.y) /
(projectedAlignedAxis.x * projectedAlignedAxis.x + projectedAlignedAxis.y * projectedAlignedAxis.y));
}
float cosTheta = cos(angle);
float sinTheta = sin(angle);
rotationMatrix = mat2(cosTheta, sinTheta, -sinTheta, cosTheta);
halfSize = rotationMatrix * halfSize;
}
else
{
rotationMatrix = mat2(1.0, 0.0, 0.0, 1.0);
}
#endif
mpp = czm_metersPerPixel(positionEC);
positionEC.xy += (originTranslate + halfSize) * czm_branchFreeTernary(sizeInMeters, 1.0, mpp);
positionEC.xy += (translate + pixelOffset) * mpp;
return positionEC;
}
#ifdef VS_THREE_POINT_DEPTH_CHECK
float getGlobeDepth(vec4 positionEC)
{
vec4 posWC = czm_eyeToWindowCoordinates(positionEC);
float globeDepth = czm_unpackDepth(texture(czm_globeDepthTexture, posWC.xy / czm_viewport.zw));
if (globeDepth == 0.0)
{
return 0.0; // not on the globe
}
vec4 eyeCoordinate = czm_windowToEyeCoordinates(posWC.xy, globeDepth);
return eyeCoordinate.z / eyeCoordinate.w;
}
#endif
void main()
{
// Modifying this shader may also require modifications to Billboard._computeScreenSpacePosition
// unpack attributes
vec3 positionHigh = positionHighAndScale.xyz;
vec3 positionLow = positionLowAndRotation.xyz;
float scale = positionHighAndScale.w;
#if defined(ROTATION) || defined(ALIGNED_AXIS)
float rotation = positionLowAndRotation.w;
#else
float rotation = 0.0;
#endif
float compressed = compressedAttribute0.x;
vec2 pixelOffset;
pixelOffset.x = floor(compressed * SHIFT_RIGHT7);
compressed -= pixelOffset.x * SHIFT_LEFT7;
pixelOffset.x -= UPPER_BOUND;
vec2 origin;
origin.x = floor(compressed * SHIFT_RIGHT5);
compressed -= origin.x * SHIFT_LEFT5;
origin.y = floor(compressed * SHIFT_RIGHT3);
compressed -= origin.y * SHIFT_LEFT3;
origin -= vec2(1.0);
float show = floor(compressed * SHIFT_RIGHT2);
compressed -= show * SHIFT_LEFT2;
vec2 textureCoordinatesBottomLeft = czm_decompressTextureCoordinates(compressedAttribute0.w);
vec2 textureCoordinatesRange = czm_decompressTextureCoordinates(eyeOffset.w);
vec2 textureCoordinates = textureCoordinatesBottomLeft + direction * textureCoordinatesRange;
float temp = compressedAttribute0.y * SHIFT_RIGHT8;
pixelOffset.y = -(floor(temp) - UPPER_BOUND);
vec2 translate;
translate.y = (temp - floor(temp)) * SHIFT_LEFT16;
temp = compressedAttribute0.z * SHIFT_RIGHT8;
translate.x = floor(temp) - UPPER_BOUND;
translate.x *= SHIFT_RIGHT2; // undo translateX scaling (helps preserve subpixel precision, see BillboardCollection.js attribute writer for more info)
translate.y += (temp - floor(temp)) * SHIFT_LEFT8;
translate.y -= UPPER_BOUND;
translate.y *= SHIFT_RIGHT2;
temp = compressedAttribute1.x * SHIFT_RIGHT8;
float temp2 = floor(compressedAttribute2.w * SHIFT_RIGHT2);
vec2 imageSize = vec2(floor(temp), temp2);
#ifdef EYE_DISTANCE_TRANSLUCENCY
vec4 translucencyByDistance;
translucencyByDistance.x = compressedAttribute1.z;
translucencyByDistance.z = compressedAttribute1.w;
translucencyByDistance.y = ((temp - floor(temp)) * SHIFT_LEFT8) / 255.0;
temp = compressedAttribute1.y * SHIFT_RIGHT8;
translucencyByDistance.w = ((temp - floor(temp)) * SHIFT_LEFT8) / 255.0;
#endif
#ifdef VS_THREE_POINT_DEPTH_CHECK
temp = compressedAttribute3.w;
temp = temp * SHIFT_RIGHT12;
vec2 dimensions;
dimensions.y = (temp - floor(temp)) * SHIFT_LEFT12;
dimensions.x = floor(temp);
#endif
#ifdef ALIGNED_AXIS
vec3 alignedAxis = czm_octDecode(floor(compressedAttribute1.y * SHIFT_RIGHT8));
temp = compressedAttribute2.z * SHIFT_RIGHT5;
bool validAlignedAxis = (temp - floor(temp)) * SHIFT_LEFT1 > 0.0;
#else
vec3 alignedAxis = vec3(0.0);
bool validAlignedAxis = false;
#endif
vec4 color = czm_decodeRGB8(compressedAttribute2.x);
vec4 pickColor = czm_decodeRGB8(compressedAttribute2.y);
temp = compressedAttribute2.z * SHIFT_RIGHT8;
bool sizeInMeters = floor((temp - floor(temp)) * SHIFT_LEFT7) > 0.0;
temp = floor(temp) * SHIFT_RIGHT8;
pickColor.a = (temp - floor(temp)) * SHIFT_LEFT8;
pickColor.a /= 255.0;
color.a = floor(temp);
color.a /= 255.0;
///////////////////////////////////////////////////////////////////////////
vec4 p = czm_translateRelativeToEye(positionHigh, positionLow);
vec4 positionEC = czm_modelViewRelativeToEye * p;
positionEC = czm_eyeOffset(positionEC, eyeOffset.xyz);
positionEC.xyz *= show;
///////////////////////////////////////////////////////////////////////////
#if defined(EYE_DISTANCE_SCALING) || defined(EYE_DISTANCE_TRANSLUCENCY) || defined(EYE_DISTANCE_PIXEL_OFFSET) || defined(DISTANCE_DISPLAY_CONDITION) || defined(DISABLE_DEPTH_DISTANCE)
float lengthSq;
if (czm_sceneMode == czm_sceneMode2D)
{
// 2D camera distance is a special case
// treat all billboards as flattened to the z=0.0 plane
lengthSq = czm_eyeHeight2D.y;
}
else
{
lengthSq = dot(positionEC.xyz, positionEC.xyz);
}
#endif
#ifdef EYE_DISTANCE_SCALING
float distanceScale = czm_nearFarScalar(scaleByDistance, lengthSq);
scale *= distanceScale;
translate *= distanceScale;
// push vertex behind near plane for clipping
if (scale == 0.0)
{
positionEC.xyz = vec3(0.0);
}
#endif
float translucency = 1.0;
#ifdef EYE_DISTANCE_TRANSLUCENCY
translucency = czm_nearFarScalar(translucencyByDistance, lengthSq);
// push vertex behind near plane for clipping
if (translucency == 0.0)
{
positionEC.xyz = vec3(0.0);
}
#endif
#ifdef EYE_DISTANCE_PIXEL_OFFSET
float pixelOffsetScale = czm_nearFarScalar(pixelOffsetScaleByDistance, lengthSq);
pixelOffset *= pixelOffsetScale;
#endif
#ifdef DISTANCE_DISPLAY_CONDITION
float nearSq = compressedAttribute3.x;
float farSq = compressedAttribute3.y;
if (lengthSq < nearSq || lengthSq > farSq)
{
positionEC.xyz = vec3(0.0);
}
#endif
mat2 rotationMatrix;
float mpp;
float enableDepthCheck = 1.0;
#ifdef DISABLE_DEPTH_DISTANCE
float disableDepthTestDistanceSq = compressedAttribute3.z;
if (disableDepthTestDistanceSq == 0.0 && czm_minimumDisableDepthTestDistance != 0.0)
{
disableDepthTestDistanceSq = czm_minimumDisableDepthTestDistance;
}
if (lengthSq < disableDepthTestDistanceSq || disableDepthTestDistanceSq < 0.0)
{
enableDepthCheck = 0.0;
}
#endif
v_splitDirectionAndEllipsoidDepthEC.y = czm_infinity;
vec3 ellipsoidCenter = czm_view[3].xyz;
vec3 rayDirection = normalize(positionEC.xyz);
czm_ray ray = czm_ray(vec3(0.0), rayDirection);
vec3 ellipsoid_inverseRadii = czm_ellipsoidInverseRadii;
czm_raySegment intersection = czm_rayEllipsoidIntersectionInterval(ray, ellipsoidCenter, ellipsoid_inverseRadii);
if (!czm_isEmpty(intersection))
{
v_splitDirectionAndEllipsoidDepthEC.y = intersection.start;
}
v_compressed.y = enableDepthCheck;
#ifdef VS_THREE_POINT_DEPTH_CHECK
if (lengthSq < (u_threePointDepthTestDistance * u_threePointDepthTestDistance) && (enableDepthCheck == 1.0)) {
float depthsilon = 10.0;
vec2 depthOrigin;
// Horizontal origin for labels comes from a special attribute. If that value is 0, this is a billboard - use the regular origin.
// Otherwise, transform the label origin to -1, 0, 1 (right, center, left).
depthOrigin.x = floor(compressedAttribute2.w - (temp2 * SHIFT_LEFT2));
depthOrigin.x = czm_branchFreeTernary(depthOrigin.x == 0.0, origin.x, depthOrigin.x - 2.0);
depthOrigin.y = origin.y;
vec4 pEC1 = addScreenSpaceOffset(positionEC, dimensions, scale, vec2(0.0), depthOrigin, vec2(0.0), pixelOffset, alignedAxis, validAlignedAxis, rotation, sizeInMeters, rotationMatrix, mpp);
float globeDepth1 = getGlobeDepth(pEC1);
if (globeDepth1 != 0.0 && pEC1.z + depthsilon < globeDepth1)
{
vec4 pEC2 = addScreenSpaceOffset(positionEC, dimensions, scale, vec2(0.0, 1.0), depthOrigin, vec2(0.0), pixelOffset, alignedAxis, validAlignedAxis, rotation, sizeInMeters, rotationMatrix, mpp);
float globeDepth2 = getGlobeDepth(pEC2);
if (globeDepth2 != 0.0 && pEC2.z + depthsilon < globeDepth2)
{
vec4 pEC3 = addScreenSpaceOffset(positionEC, dimensions, scale, vec2(1.0), depthOrigin, vec2(0.0), pixelOffset, alignedAxis, validAlignedAxis, rotation, sizeInMeters, rotationMatrix, mpp);
float globeDepth3 = getGlobeDepth(pEC3);
if (globeDepth3 != 0.0 && pEC3.z + depthsilon < globeDepth3)
{
// "Discard" this vertex, as three key points fail depth test.
positionEC.xyz = vec3(0.0);
}
}
}
}
#endif
// Write out the eyespace depth before applying the screen space offset, but after potentially "discarding" the vertex
// by setting its eyespace position to zero, via the three-point depth test above.
v_compressed.x = positionEC.z;
positionEC = addScreenSpaceOffset(positionEC, imageSize, scale, direction, origin, translate, pixelOffset, alignedAxis, validAlignedAxis, rotation, sizeInMeters, rotationMatrix, mpp);
gl_Position = czm_projection * positionEC;
v_textureCoordinates = textureCoordinates;
#ifdef LOG_DEPTH
czm_vertexLogDepth();
#endif
#ifdef DISABLE_DEPTH_DISTANCE
if (disableDepthTestDistanceSq != 0.0)
{
// Don't try to "multiply both sides" by w. Greater/less-than comparisons won't work for negative values of w.
float zclip = gl_Position.z / gl_Position.w;
bool clipped = (zclip < -1.0 || zclip > 1.0);
// disableDepthTestDistanceSq can be less than zero if it's explicitly set to -1 in JS (as a sentinel value equivalent to infinity)
if (!clipped && (disableDepthTestDistanceSq < 0.0 || (lengthSq > 0.0 && lengthSq < disableDepthTestDistanceSq)))
{
// Position z on the near plane.
gl_Position.z = -gl_Position.w;
#ifdef LOG_DEPTH
v_depthFromNearPlusOne = 1.0;
#endif
}
}
#endif
#ifdef SDF
vec4 outlineColor = czm_decodeRGB8(sdf.x);
float outlineWidth;
temp = sdf.y;
temp = temp * SHIFT_RIGHT8;
float temp3 = (temp - floor(temp)) * SHIFT_LEFT8;
temp = floor(temp) * SHIFT_RIGHT8;
outlineWidth = (temp - floor(temp)) * SHIFT_LEFT8;
outlineColor.a = floor(temp);
outlineColor.a /= 255.0;
v_outlineWidth = outlineWidth / 255.0;
v_outlineColor = outlineColor;
v_outlineColor.a *= translucency;
#endif
v_pickColor = pickColor;
v_color = color;
v_color.a *= translucency;
v_splitDirectionAndEllipsoidDepthEC.x = splitDirection;
}
`;var _jn=y(x(),1);var ejn=y(x(),1);var KKn=y(x(),1),hqe=Object.freeze({NONE:0,LOADING:2,LOADED:3,ERROR:4,FAILED:5}),Ps=hqe;function qh(e){this._billboardCollection=e,this._id=void 0,this._loadState=Ps.NONE,this._loadError=void 0,this._index=-1,this._width=void 0,this._height=void 0,this._hasSubregion=!1,this.dirty=!1}Object.defineProperties(qh.prototype,{loadError:{get:function(){return this._loadError}},loadState:{get:function(){return this._loadState}},ready:{get:function(){return this._loadState===Ps.LOADED}},hasImage:{get:function(){return this._loadState!==Ps.NONE}},id:{get:function(){return this._id}},width:{get:function(){return this._width}},height:{get:function(){return this._height}}});qh.prototype.unload=async function(){this._loadState!==Ps.NONE&&(this._id=void 0,this._loadError=void 0,this._loadState=Ps.NONE,this._index=-1,this._width=void 0,this._height=void 0,this.dirty=!0)};qh.prototype.loadImage=async function(e,t,n,i){if(this._id===e)return;let o=this._billboardCollection,r=o.billboardTextureCache,s=r.get(e);if(l(s)&&t.loadState===Ps.LOADING||t.loadState===Ps.LOADED){qh.clone(s,this);return}l(s)||(s=new qh(o),r.set(e,s)),s._id=this._id=e,s._loadState=this._loadState=Ps.LOADING,s._loadError=this._loadError=void 0;let a,c=this._billboardCollection.textureAtlas;try{a=c.addImage(e,t,n,i),a instanceof Promise&&(a=await a)}catch(u){if(s._loadState=Ps.ERROR,s._loadError=u,this._id!==e)return;this._loadState=Ps.ERROR,this._loadError=u;return}if(!l(a)||a===-1){if(s._loadState=Ps.FAILED,s._index=-1,this._id!==e)return;this._loadState=Ps.FAILED,this._index=-1;return}s._index=a,s._loadState=Ps.LOADED;let d=c.rectangles[a];s._width=d.width,s._height=d.height,this._id===e&&(this._index=a,this._loadState=Ps.LOADED,this._width=d.width,this._height=d.height,this.dirty=!0)};qh.prototype.addImageSubRegion=function(e,t){this._id=e,this._loadError=void 0,this._hasSubregion=!0;let i=this._billboardCollection.textureAtlas.addImageSubRegion(e,t);if(typeof i=="number"){this.setImageSubRegion(i,t);return}this.loadImageSubRegion(e,t,i)};qh.prototype.loadImageSubRegion=async function(e,t,n){let i;try{this._loadState=Ps.LOADING,i=await n}catch(o){this._loadState=Ps.ERROR,this._loadError=o;return}this._id===e&&(this._loadState=Ps.LOADED,this.setImageSubRegion(i,t))};qh.prototype.setImageSubRegion=function(e,t){if(this._index!==e){if(!l(e)||e===-1){this._loadState=Ps.FAILED,this._index=-1,this._width=void 0,this._height=void 0;return}this._width=t.width,this._height=t.height,this._index=e,this.dirty=!0}};qh.prototype.computeTextureCoordinates=function(e){return this._billboardCollection.textureAtlas.computeTextureCoordinates(this._index,e)};qh.clone=function(e,t){if(t._id=e._id,t._loadState=e._loadState,t._loadError=void 0,t._index=e._index,t._width=e._width,t._height=e._height,t._hasSubregion=e._hasSubregion,e.ready){t.dirty=!0;return}return(async()=>{let i=e._id;await e._billboardCollection.textureAtlas._indexPromiseById.get(i),t._id===i&&(e._hasSubregion&&await Promise.resolve(),t._id=i,t._loadState=e._loadState,t._loadError=e._loadError,t._index=e._index,t._width=e._width,t._height=e._height,t.dirty=!0)})(),t};var yg=qh;function Li(e,t){e=e??Q.EMPTY_OBJECT;let n=e.translucencyByDistance,i=e.pixelOffsetScaleByDistance,o=e.scaleByDistance,r=e.distanceDisplayCondition;l(n)&&(n=Ot.clone(n)),l(i)&&(i=Ot.clone(i)),l(o)&&(o=Ot.clone(o)),l(r)&&(r=Dt.clone(r)),this._show=e.show??!0,this._position=m.clone(e.position??m.ZERO),this._actualPosition=m.clone(this._position),this._pixelOffset=M.clone(e.pixelOffset??M.ZERO),this._translate=new M(0,0),this._eyeOffset=m.clone(e.eyeOffset??m.ZERO),this._heightReference=e.heightReference??rt.NONE,this._verticalOrigin=e.verticalOrigin??Hn.CENTER,this._horizontalOrigin=e.horizontalOrigin??Bi.CENTER,this._scale=e.scale??1,this._color=U.clone(e.color??U.WHITE),this._rotation=e.rotation??0,this._alignedAxis=m.clone(e.alignedAxis??m.ZERO),this._width=e.width,this._height=e.height,this._scaleByDistance=o,this._translucencyByDistance=n,this._pixelOffsetScaleByDistance=i,this._sizeInMeters=e.sizeInMeters??!1,this._distanceDisplayCondition=r,this._disableDepthTestDistance=e.disableDepthTestDistance,this._id=e.id,this._collection=e.collection??t,this._pickId=void 0,this._pickPrimitive=e._pickPrimitive??this,this._billboardCollection=t,this._dirty=!1,this._index=-1,this._batchIndex=void 0,this._imageTexture=new yg(t),this._imageId=e.imageId,this._imageWidth=void 0,this._imageHeight=void 0,this._labelDimensions=void 0,this._labelHorizontalOrigin=void 0,this._labelTranslate=void 0;let s=e.image;l(s)&&(this._computeImageTextureProperties(e.imageId,s),this._imageTexture.loadImage(this._imageId,s,this._imageWidth,this._imageHeight)),l(e.imageSubRegion)&&this._imageTexture.addImageSubRegion(this._imageId,e.imageSubRegion),this._actualClampedPosition=void 0,this._removeCallbackFunc=void 0,this._mode=se.SCENE3D,this._clusterShow=!0,this._outlineColor=U.clone(e.outlineColor??U.BLACK),this._outlineWidth=e.outlineWidth??0,this._updateClamping(),this._splitDirection=e.splitDirection??Br.NONE,this._positionFromParent=!1}var ufe=Li.SHOW_INDEX=0,h9=Li.POSITION_INDEX=1,gfe=Li.PIXEL_OFFSET_INDEX=2,fqe=Li.EYE_OFFSET_INDEX=3,pqe=Li.HORIZONTAL_ORIGIN_INDEX=4,Aqe=Li.VERTICAL_ORIGIN_INDEX=5,gqe=Li.SCALE_INDEX=6,mfe=Li.IMAGE_INDEX_INDEX=7,hfe=Li.COLOR_INDEX=8,bqe=Li.ROTATION_INDEX=9,yqe=Li.ALIGNED_AXIS_INDEX=10,xqe=Li.SCALE_BY_DISTANCE_INDEX=11,Cqe=Li.TRANSLUCENCY_BY_DISTANCE_INDEX=12,Tqe=Li.PIXEL_OFFSET_SCALE_BY_DISTANCE_INDEX=13,Eqe=Li.DISTANCE_DISPLAY_CONDITION=14,Sqe=Li.DISABLE_DEPTH_DISTANCE=15;Li.TEXTURE_COORDINATE_BOUNDS=16;var ffe=Li.SDF_INDEX=17,_qe=Li.SPLIT_DIRECTION_INDEX=18;Li.NUMBER_OF_PROPERTIES=19;function Vr(e,t){let n=e._billboardCollection;l(n)&&(n._updateBillboard(e,t),e._dirty=!0)}Object.defineProperties(Li.prototype,{show:{get:function(){return this._show},set:function(e){this._show!==e&&(this._show=e,Vr(this,ufe))}},position:{get:function(){return this._position},set:function(e){let t=this._position;m.equals(t,e)||(m.clone(e,t),m.clone(e,this._actualPosition),this._updateClamping(),Vr(this,h9))}},heightReference:{get:function(){return this._heightReference},set:function(e){let t=this._heightReference;e!==t&&(this._heightReference=e,this._updateClamping(),Vr(this,h9))}},pixelOffset:{get:function(){return this._pixelOffset},set:function(e){let t=this._pixelOffset;M.equals(t,e)||(M.clone(e,t),Vr(this,gfe))}},scaleByDistance:{get:function(){return this._scaleByDistance},set:function(e){let t=this._scaleByDistance;Ot.equals(t,e)||(this._scaleByDistance=Ot.clone(e,t),Vr(this,xqe))}},translucencyByDistance:{get:function(){return this._translucencyByDistance},set:function(e){let t=this._translucencyByDistance;Ot.equals(t,e)||(this._translucencyByDistance=Ot.clone(e,t),Vr(this,Cqe))}},pixelOffsetScaleByDistance:{get:function(){return this._pixelOffsetScaleByDistance},set:function(e){let t=this._pixelOffsetScaleByDistance;Ot.equals(t,e)||(this._pixelOffsetScaleByDistance=Ot.clone(e,t),Vr(this,Tqe))}},eyeOffset:{get:function(){return this._eyeOffset},set:function(e){let t=this._eyeOffset;m.equals(t,e)||(m.clone(e,t),Vr(this,fqe))}},horizontalOrigin:{get:function(){return this._horizontalOrigin},set:function(e){this._horizontalOrigin!==e&&(this._horizontalOrigin=e,Vr(this,pqe))}},verticalOrigin:{get:function(){return this._verticalOrigin},set:function(e){this._verticalOrigin!==e&&(this._verticalOrigin=e,Vr(this,Aqe))}},scale:{get:function(){return this._scale},set:function(e){this._scale!==e&&(this._scale=e,Vr(this,gqe))}},color:{get:function(){return this._color},set:function(e){let t=this._color;U.equals(t,e)||(U.clone(e,t),Vr(this,hfe))}},rotation:{get:function(){return this._rotation},set:function(e){this._rotation!==e&&(this._rotation=e,Vr(this,bqe))}},alignedAxis:{get:function(){return this._alignedAxis},set:function(e){let t=this._alignedAxis;m.equals(t,e)||(m.clone(e,t),Vr(this,yqe))}},width:{get:function(){return this._width??this._imageTexture.width},set:function(e){this._width!==e&&(this._width=e,Vr(this,mfe))}},height:{get:function(){return this._height??this._imageTexture.height},set:function(e){this._height!==e&&(this._height=e,Vr(this,mfe))}},sizeInMeters:{get:function(){return this._sizeInMeters},set:function(e){this._sizeInMeters!==e&&(this._sizeInMeters=e,Vr(this,hfe))}},distanceDisplayCondition:{get:function(){return this._distanceDisplayCondition},set:function(e){Dt.equals(e,this._distanceDisplayCondition)||(this._distanceDisplayCondition=Dt.clone(e,this._distanceDisplayCondition),Vr(this,Eqe))}},disableDepthTestDistance:{get:function(){return this._disableDepthTestDistance},set:function(e){this._disableDepthTestDistance!==e&&(this._disableDepthTestDistance=e,Vr(this,Sqe))}},id:{get:function(){return this._id},set:function(e){this._id=e,l(this._pickId)&&(this._pickId.object.id=e)}},pickPrimitive:{get:function(){return this._pickPrimitive},set:function(e){this._pickPrimitive=e,l(this._pickId)&&(this._pickId.object.primitive=e)}},pickId:{get:function(){return this._pickId}},image:{get:function(){return this._imageTexture.id},set:function(e){if(!l(e)){this._imageTexture.unload();return}this._computeImageTextureProperties(void 0,e),this._imageTexture.loadImage(this._imageId,e,this._imageWidth,this._imageHeight)}},ready:{get:function(){return this._imageTexture.ready}},loadError:{get:function(){return this._imageTexture.loadError}},textureDirty:{get:function(){return this._imageTexture.dirty},set:function(e){this._imageTexture.dirty=e}},_clampedPosition:{get:function(){return this._actualClampedPosition},set:function(e){this._actualClampedPosition=m.clone(e,this._actualClampedPosition),Vr(this,h9)}},clusterShow:{get:function(){return this._clusterShow},set:function(e){this._clusterShow!==e&&(this._clusterShow=e,Vr(this,ufe))}},outlineColor:{get:function(){return this._outlineColor},set:function(e){let t=this._outlineColor;U.equals(t,e)||(U.clone(e,t),Vr(this,ffe))}},outlineWidth:{get:function(){return this._outlineWidth},set:function(e){this._outlineWidth!==e&&(this._outlineWidth=e,Vr(this,ffe))}},splitDirection:{get:function(){return this._splitDirection},set:function(e){this._splitDirection!==e&&(this._splitDirection=e,Vr(this,_qe))}}});Li.prototype.getPickId=function(e){return l(this._pickId)||(this._pickId=e.createPickId({primitive:this._pickPrimitive,collection:this._collection,id:this._id})),this._pickId};Li.prototype._updateClamping=function(){Li._updateClamping(this._billboardCollection,this)};var f9=new Ae;Li._updateClamping=function(e,t){if(!l(e)||!l(e._scene))return;let n=e._scene,i=n.ellipsoid??ie.default,o=n.frameState.mode,r=o!==t._mode;if(t._mode=o,(t._heightReference===rt.NONE||r)&&l(t._removeCallbackFunc)&&(t._removeCallbackFunc(),t._removeCallbackFunc=void 0,t._clampedPosition=void 0),t._heightReference===rt.NONE||t._positionFromParent||!l(t._position))return;l(t._removeCallbackFunc)&&t._removeCallbackFunc();let s=i.cartesianToCartographic(t._position);if(!l(s)){t._actualClampedPosition=void 0;return}function a(d){let u=i.cartographicToCartesian(d,t._clampedPosition);CS(t._heightReference)&&(t._mode===se.SCENE3D?(d.height+=s.height,i.cartographicToCartesian(d,u)):u.x+=s.height),t._clampedPosition=u}t._removeCallbackFunc=n.updateHeight(s,a,t._heightReference),Ae.clone(s,f9);let c=n.getHeight(s,t._heightReference);l(c)&&(f9.height=c),a(f9)};Li.prototype.computeTextureCoordinates=function(e){return this._imageTexture.computeTextureCoordinates(e)};Li.prototype.setImage=function(e,t){this._computeImageTextureProperties(e,t),this._imageTexture.loadImage(this._imageId,t,this._imageWidth,this._imageHeight)};Li.prototype.setImageTexture=function(e){yg.clone(e,this._imageTexture)};var pfe=512;Li.prototype._computeImageTextureProperties=function(e,t){if(this._imageWidth=void 0,this._imageHeight=void 0,!l(t)){this._imageId=qn();return}let n;typeof t=="string"?n=t:t instanceof Le?n=t._url:l(t.src)&&(n=t.src),this._imageId=e??n??qn(),l(this._width)&&l(this._height)&&!this._sizeInMeters&&Iqe(n)&&(this._imageWidth=Math.min(this._width,pfe),this._imageHeight=Math.min(this._height,pfe))};function Iqe(e){return l(e)?bh(e)?e.startsWith("data:image/svg+xml"):TA(e)==="svg":!1}Li.prototype.setImageSubRegion=function(e,t){this._imageTexture.addImageSubRegion(e,t)};Li.prototype._setTranslate=function(e){let t=this._translate;M.equals(t,e)||(M.clone(e,t),Vr(this,gfe))};Li.prototype._getActualPosition=function(){return l(this._clampedPosition)?this._clampedPosition:this._actualPosition};Li.prototype._setActualPosition=function(e){l(this._clampedPosition)||m.clone(e,this._actualPosition),Vr(this,h9)};var Afe=new re;Li._computeActualPosition=function(e,t,n,i){return l(e._clampedPosition)?(n.mode!==e._mode&&e._updateClamping(),e._clampedPosition):n.mode===se.SCENE3D?t:(F.multiplyByPoint(i,t,Afe),so.computeActualEllipsoidPosition(n,Afe))};var bfe=new m;Li._computeScreenSpacePosition=function(e,t,n,i,o,r){let s=F.multiplyByPoint(e,t,bfe),a=so.worldWithEyeOffsetToWindowCoordinates(o,s,n,r);if(l(a))return M.add(a,i,a),a};var m9=new M(0,0);Li.prototype.computeScreenSpacePosition=function(e,t){let n=this._billboardCollection;l(t)||(t=new M),M.clone(this._pixelOffset,m9),M.add(m9,this._translate,m9);let i=n.modelMatrix,o=this._position;if(l(this._clampedPosition)&&(o=this._clampedPosition,e.mode!==se.SCENE3D)){let s=e.mapProjection,a=s.ellipsoid,c=s.unproject(o,f9);o=a.cartographicToCartesian(c,bfe),i=F.IDENTITY}return Li._computeScreenSpacePosition(i,o,this._eyeOffset,m9,e,t)};Li.getScreenSpaceBoundingBox=function(e,t,n){let i=e.width,o=e.height,r=e.scale;i*=r,o*=r;let s=t.x;e.horizontalOrigin===Bi.RIGHT?s-=i:e.horizontalOrigin===Bi.CENTER&&(s-=i*.5);let a=t.y;return e.verticalOrigin===Hn.BOTTOM||e.verticalOrigin===Hn.BASELINE?a-=o:e.verticalOrigin===Hn.CENTER&&(a-=o*.5),l(n)||(n=new nt),n.x=s,n.y=a,n.width=i,n.height=o,n};Li.prototype.equals=function(e){return this===e||l(e)&&this._id===e._id&&m.equals(this._position,e._position)&&this.image===e.image&&this._show===e._show&&this._scale===e._scale&&this._verticalOrigin===e._verticalOrigin&&this._horizontalOrigin===e._horizontalOrigin&&this._heightReference===e._heightReference&&U.equals(this._color,e._color)&&M.equals(this._pixelOffset,e._pixelOffset)&&M.equals(this._translate,e._translate)&&m.equals(this._eyeOffset,e._eyeOffset)&&Ot.equals(this._scaleByDistance,e._scaleByDistance)&&Ot.equals(this._translucencyByDistance,e._translucencyByDistance)&&Ot.equals(this._pixelOffsetScaleByDistance,e._pixelOffsetScaleByDistance)&&Dt.equals(this._distanceDisplayCondition,e._distanceDisplayCondition)&&this._disableDepthTestDistance===e._disableDepthTestDistance&&this._splitDirection===e._splitDirection};Li.prototype._destroy=function(){l(this._customData)&&(this._billboardCollection._scene.globe._surface.removeTileCustomData(this._customData),this._customData=void 0),l(this._removeCallbackFunc)&&(this._removeCallbackFunc(),this._removeCallbackFunc=void 0),this.image=void 0,this._pickId=this._pickId&&this._pickId.destroy(),this._billboardCollection=void 0};var Lo=Li;var Zjn=y(x(),1),Zqe={OPAQUE:0,TRANSLUCENT:1,OPAQUE_AND_TRANSLUCENT:2},$o=Object.freeze(Zqe);var Vjn=y(x(),1),Rqe={FONT_SIZE:48,PADDING:10,RADIUS:8,CUTOFF:.25},Ba=Object.freeze(Rqe);var Vqe=Lo.SHOW_INDEX,HB=Lo.POSITION_INDEX,xfe=Lo.PIXEL_OFFSET_INDEX,Cfe=Lo.EYE_OFFSET_INDEX,Gqe=Lo.HORIZONTAL_ORIGIN_INDEX,Lqe=Lo.VERTICAL_ORIGIN_INDEX,Wqe=Lo.SCALE_INDEX,NC=Lo.IMAGE_INDEX_INDEX,Tfe=Lo.COLOR_INDEX,Fqe=Lo.ROTATION_INDEX,Bqe=Lo.ALIGNED_AXIS_INDEX,Efe=Lo.SCALE_BY_DISTANCE_INDEX,Sfe=Lo.TRANSLUCENCY_BY_DISTANCE_INDEX,_fe=Lo.PIXEL_OFFSET_SCALE_BY_DISTANCE_INDEX,Ife=Lo.DISTANCE_DISPLAY_CONDITION,wqe=Lo.DISABLE_DEPTH_DISTANCE,Nqe=Lo.TEXTURE_COORDINATE_BOUNDS,Zfe=Lo.SDF_INDEX,Rfe=Lo.SPLIT_DIRECTION_INDEX,A4=Lo.NUMBER_OF_PROPERTIES,Po={direction:0,positionHighAndScale:1,positionLowAndRotation:2,compressedAttribute0:3,compressedAttribute1:4,compressedAttribute2:5,eyeOffset:6,scaleByDistance:7,pixelOffsetScaleByDistance:8,compressedAttribute3:9,textureCoordinateBoundsOrLabelTranslate:10,a_batchId:11,sdf:12,splitDirection:13};function Gm(e){e=e??Q.EMPTY_OBJECT,this._scene=e.scene,this._batchTable=e.batchTable;let t=e.textureAtlas;l(t)||(t=new Gx),this._textureAtlas=t,this._textureAtlasGUID=t.guid,this._destroyTextureAtlas=!0,this._billboardTextureCache=new Map,this._sp=void 0,this._spTranslucent=void 0,this._rsOpaque=void 0,this._rsTranslucent=void 0,this._vaf=void 0,this._billboards=[],this._billboardsToUpdate=[],this._billboardsToUpdateIndex=0,this._billboardsRemoved=!1,this._createVertexArray=!1,this._shaderRotation=!1,this._compiledShaderRotation=!1,this._shaderAlignedAxis=!1,this._compiledShaderAlignedAxis=!1,this._shaderScaleByDistance=!1,this._compiledShaderScaleByDistance=!1,this._shaderTranslucencyByDistance=!1,this._compiledShaderTranslucencyByDistance=!1,this._shaderPixelOffsetScaleByDistance=!1,this._compiledShaderPixelOffsetScaleByDistance=!1,this._shaderDistanceDisplayCondition=!1,this._compiledShaderDistanceDisplayCondition=!1,this._shaderDisableDepthDistance=!1,this._compiledShaderDisableDepthDistance=!1,this._shaderClampToGround=!1,this._compiledShaderClampToGround=!1,this._propertiesChanged=new Uint32Array(A4),this._maxSize=0,this._maxEyeOffset=0,this._maxScale=1,this._maxPixelOffset=0,this._allHorizontalCenter=!0,this._allVerticalCenter=!0,this._allSizedInMeters=!0,this._baseVolume=new ue,this._baseVolumeWC=new ue,this._baseVolume2D=new ue,this._boundingVolume=new ue,this._boundingVolumeDirty=!1,this._colorCommands=[],this._allBillboardsReady=!1,this.show=e.show??!0,this.modelMatrix=F.clone(e.modelMatrix??F.IDENTITY),this._modelMatrix=F.clone(F.IDENTITY),this.debugShowBoundingVolume=e.debugShowBoundingVolume??!1,this.debugShowTextureAtlas=e.debugShowTextureAtlas??!1,this.blendOption=e.blendOption??$o.OPAQUE_AND_TRANSLUCENT,this._blendOption=void 0,this._mode=se.SCENE3D,this._buffersUsage=[Be.STATIC_DRAW,Be.STATIC_DRAW,Be.STATIC_DRAW,Be.STATIC_DRAW,Be.STATIC_DRAW,Be.STATIC_DRAW,Be.STATIC_DRAW,Be.STATIC_DRAW,Be.STATIC_DRAW,Be.STATIC_DRAW,Be.STATIC_DRAW,Be.STATIC_DRAW,Be.STATIC_DRAW,Be.STATIC_DRAW,Be.STATIC_DRAW,Be.STATIC_DRAW,Be.STATIC_DRAW],this._highlightColor=U.clone(U.WHITE),this._coarseDepthTestDistance=e.coarseDepthTestDistance??ie.default.minimumRadius/10,this._threePointDepthTestDistance=e.threePointDepthTestDistance??ie.default.minimumRadius/1e3,this._uniforms={u_atlas:()=>this.textureAtlas.texture,u_highlightColor:()=>this._highlightColor,u_coarseDepthTestDistance:()=>this._coarseDepthTestDistance,u_threePointDepthTestDistance:()=>this._threePointDepthTestDistance};let n=this._scene;l(n)&&l(n.terrainProviderChanged)&&(this._removeCallbackFunc=n.terrainProviderChanged.addEventListener(function(){let i=this._billboards,o=i.length;for(let r=0;r<o;++r)l(i[r])&&i[r]._updateClamping()},this))}Object.defineProperties(Gm.prototype,{length:{get:function(){return g4(this),this._billboards.length}},textureAtlas:{get:function(){return this._textureAtlas},set:function(e){this._textureAtlas!==e&&(this._textureAtlas=this._destroyTextureAtlas&&this._textureAtlas&&this._textureAtlas.destroy(),this._textureAtlas=e)}},destroyTextureAtlas:{get:function(){return this._destroyTextureAtlas},set:function(e){this._destroyTextureAtlas=e}},sizeInBytes:{get:function(){return this._textureAtlas.sizeInBytes}},ready:{get:function(){return this._allBillboardsReady}},billboardTextureCache:{get:function(){return this._billboardTextureCache}},coarseDepthTestDistance:{get:function(){return this._coarseDepthTestDistance},set:function(e){this._coarseDepthTestDistance=e}},threePointDepthTestDistance:{get:function(){return this._threePointDepthTestDistance},set:function(e){this._threePointDepthTestDistance=e}}});function Vfe(e){let t=e.length;for(let n=0;n<t;++n)e[n]&&e[n]._destroy()}Gm.prototype.add=function(e){let t=new Lo(e,this);return t._index=this._billboards.length,this._billboards.push(t),this._createVertexArray=!0,t};Gm.prototype.remove=function(e){return this.contains(e)?(this._billboards[e._index]=void 0,this._billboardsRemoved=!0,this._createVertexArray=!0,e._destroy(),!0):!1};Gm.prototype.removeAll=function(){Vfe(this._billboards),this._billboards=[],this._billboardsToUpdate=[],this._billboardsToUpdateIndex=0,this._billboardsRemoved=!1,this._createVertexArray=!0};function g4(e){if(e._billboardsRemoved){e._billboardsRemoved=!1;let t=[],n=e._billboards,i=n.length;for(let o=0,r=0;o<i;++o){let s=n[o];l(s)&&(s._index=r++,t.push(s))}e._billboards=t}}Gm.prototype._updateBillboard=function(e,t){e._dirty||(this._billboardsToUpdate[this._billboardsToUpdateIndex++]=e),++this._propertiesChanged[t]};Gm.prototype.contains=function(e){return l(e)&&e._billboardCollection===this};Gm.prototype.get=function(e){return g4(this),this._billboards[e]};function yfe(e){let t=e.cache.billboardCollection_indexBufferInstanced;return l(t)||(t=it.createIndexBuffer({context:e,typedArray:new Uint16Array([0,1,2,0,2,3]),usage:Be.STATIC_DRAW,indexDatatype:Ue.UNSIGNED_SHORT}),t.vertexArrayDestroyable=!1,e.cache.billboardCollection_indexBufferInstanced=t),t}function Pqe(e){let t=e.cache.billboardCollection_vertexBufferInstanced;return l(t)||(t=it.createVertexBuffer({context:e,typedArray:new Float32Array([0,0,1,0,1,1,0,1]),usage:Be.STATIC_DRAW}),t.vertexArrayDestroyable=!1,e.cache.billboardCollection_vertexBufferInstanced=t),t}Gm.prototype.computeNewBuffersUsage=function(){let e=this._buffersUsage,t=!1,n=this._propertiesChanged;for(let i=0;i<A4;++i){let o=n[i]===0?Be.STATIC_DRAW:Be.STREAM_DRAW;t=t||e[i]!==o,e[i]=o}return t};function Xqe(e,t,n,i,o){let r=[{index:Po.positionHighAndScale,componentsPerAttribute:4,componentDatatype:H.FLOAT,usage:n[HB]},{index:Po.positionLowAndRotation,componentsPerAttribute:4,componentDatatype:H.FLOAT,usage:n[HB]},{index:Po.compressedAttribute0,componentsPerAttribute:4,componentDatatype:H.FLOAT,usage:n[xfe]},{index:Po.compressedAttribute1,componentsPerAttribute:4,componentDatatype:H.FLOAT,usage:n[Sfe]},{index:Po.compressedAttribute2,componentsPerAttribute:4,componentDatatype:H.FLOAT,usage:n[Tfe]},{index:Po.eyeOffset,componentsPerAttribute:4,componentDatatype:H.FLOAT,usage:n[Cfe]},{index:Po.scaleByDistance,componentsPerAttribute:4,componentDatatype:H.FLOAT,usage:n[Efe]},{index:Po.pixelOffsetScaleByDistance,componentsPerAttribute:4,componentDatatype:H.FLOAT,usage:n[_fe]},{index:Po.compressedAttribute3,componentsPerAttribute:4,componentDatatype:H.FLOAT,usage:n[Ife]},{index:Po.textureCoordinateBoundsOrLabelTranslate,componentsPerAttribute:4,componentDatatype:H.FLOAT,usage:n[Nqe]},{index:Po.splitDirection,componentsPerAttribute:1,componentDatatype:H.FLOAT,usage:n[Rfe]},{index:Po.direction,componentsPerAttribute:2,componentDatatype:H.FLOAT,vertexBuffer:Pqe(e)}];return l(i)&&r.push({index:Po.a_batchId,componentsPerAttribute:1,componentDatatype:H.FLOAT,bufferUsage:Be.STATIC_DRAW}),o&&r.push({index:Po.sdf,componentsPerAttribute:2,componentDatatype:H.FLOAT,usage:n[Zfe]}),new LA(e,r,t,!0)}var u4=new In;function Gfe(e,t,n,i){let o=n[Po.positionHighAndScale],r=n[Po.positionLowAndRotation],s=i._getActualPosition();e._mode===se.SCENE3D&&(ue.expand(e._baseVolume,s,e._baseVolume),e._boundingVolumeDirty=!0),In.fromCartesian(s,u4);let a=i.scale,c=i.rotation;c!==0&&(e._shaderRotation=!0),e._maxScale=Math.max(e._maxScale,a);let d=u4.high,u=u4.low;o(i._index,d.x,d.y,d.z,a),r(i._index,u.x,u.y,u.z,c)}var U0=new M,Vm=32768,b4=65536,m4=4096,PC=256,Yqe=128,Mqe=32,vqe=8,p9=4,Uqe=1/256,Lfe=new nt;function Wfe(e,t,n,i){let o=n[Po.compressedAttribute0],r=i.pixelOffset,s=r.x,a=r.y,c=i._translate,d=c.x,u=c.y;e._maxPixelOffset=Math.max(e._maxPixelOffset,Math.abs(s+d),Math.abs(-a+u));let h=i.horizontalOrigin,p=i._verticalOrigin,A=i.show&&i.clusterShow;i.color.alpha===0&&(A=!1),p===Hn.BASELINE&&(p=Hn.BOTTOM),e._allHorizontalCenter=e._allHorizontalCenter&&h===Bi.CENTER,e._allVerticalCenter=e._allVerticalCenter&&p===Hn.CENTER;let f=0,b=0;if(i.ready){let W=i.computeTextureCoordinates(Lfe);f=W.x,b=W.y}let C=Math.floor(L.clamp(s,-Vm,Vm)+Vm)*Yqe;C+=(h+1)*Mqe,C+=(p+1)*vqe,C+=(A?1:0)*p9;let T=Math.floor(L.clamp(a,-Vm,Vm)+Vm)*PC,E=Math.floor(L.clamp(d*p9,-Vm,Vm)+Vm)*PC,S=(L.clamp(u*p9,-Vm,Vm)+Vm)*Uqe,I=Math.floor(S),R=Math.floor((S-I)*PC);T+=I,E+=R,U0.x=f,U0.y=b;let V=on.compressTextureCoordinates(U0);o(i._index,C,T,E,V)}function Ffe(e,t,n,i){let o=n[Po.compressedAttribute1],r=i.alignedAxis;m.equals(r,m.ZERO)||(e._shaderAlignedAxis=!0);let s=0,a=1,c=1,d=1,u=i.translucencyByDistance;l(u)&&(s=u.near,a=u.nearValue,c=u.far,d=u.farValue,(a!==1||d!==1)&&(e._shaderTranslucencyByDistance=!0));let h=Math.round(i.width??0);e._maxSize=Math.max(e._maxSize,h);let p=L.clamp(h,0,b4),A=0;Math.abs(m.magnitudeSquared(r)-1)<L.EPSILON6&&(A=on.octEncodeFloat(r)),a=L.clamp(a,0,1),a=a===1?255:a*255|0,p=p*PC+a,d=L.clamp(d,0,1),d=d===1?255:d*255|0,A=A*PC+d,o(i._index,p,A,s,c)}function f4(e,t,n,i){let o=n[Po.compressedAttribute2],r=i.color,s=l(e._batchTable)?U.WHITE:i.getPickId(t.context).color,a=i.sizeInMeters?1:0,c=Math.abs(m.magnitudeSquared(i.alignedAxis)-1)<L.EPSILON6?1:0;e._allSizedInMeters=e._allSizedInMeters&&a===1;let d=i.height??0;e._maxSize=Math.max(e._maxSize,d);let u=i._labelHorizontalOrigin??-2;u+=2;let h=on.encodeRGB8(r),p=on.encodeRGB8(s),A=U.floatToByte(r.alpha)*b4+U.floatToByte(s.alpha)*PC+(a*2+c),f=d*p9+u;o(i._index,h,p,A,f)}function p4(e,t,n,i){let o=n[Po.eyeOffset],r=i.eyeOffset,s=r.z;if(i._heightReference!==rt.NONE&&(s*=1.005),e._maxEyeOffset=Math.max(e._maxEyeOffset,Math.abs(r.x),Math.abs(r.y),Math.abs(s)),U0.x=0,U0.y=0,i.ready){let c=i.computeTextureCoordinates(Lfe);U0.x=c.width,U0.y=c.height}let a=on.compressTextureCoordinates(U0);o(i._index,r.x,r.y,s,a)}function Bfe(e,t,n,i){let o=n[Po.scaleByDistance],r=0,s=1,a=1,c=1,d=i.scaleByDistance;l(d)&&(r=d.near,s=d.nearValue,a=d.far,c=d.farValue,(s!==1||c!==1)&&(e._shaderScaleByDistance=!0)),o(i._index,r,s,a,c)}function wfe(e,t,n,i){let o=n[Po.pixelOffsetScaleByDistance],r=0,s=1,a=1,c=1,d=i.pixelOffsetScaleByDistance;l(d)&&(r=d.near,s=d.nearValue,a=d.far,c=d.farValue,(s!==1||c!==1)&&(e._shaderPixelOffsetScaleByDistance=!0)),o(i._index,r,s,a,c)}function Nfe(e,t,n,i){let o=n[Po.compressedAttribute3],r=0,s=Number.MAX_VALUE,a=i.distanceDisplayCondition;l(a)&&(r=a.near,s=a.far,r*=r,s*=s,e._shaderDistanceDisplayCondition=!0);let c=i.disableDepthTestDistance,d=hm(i.heightReference)&&t.context.depthTexture;c*=c,(d||c>0)&&(e._shaderDisableDepthDistance=!0,c===Number.POSITIVE_INFINITY&&(c=-1));let u,h;l(i._labelDimensions)?(h=i._labelDimensions.x,u=i._labelDimensions.y):(h=i.width??0,u=i.height??0);let p=Math.floor(L.clamp(h,0,m4)),A=Math.floor(L.clamp(u,0,m4)),f=p*m4+A;o(i._index,r,s,c,f)}function Pfe(e,t,n,i){if(hm(i.heightReference)){let a=e._scene,c=t.context,d=t.globeTranslucencyState.translucent,u=l(a.globe)&&a.globe.depthTestAgainstTerrain;e._shaderClampToGround=c.depthTexture&&!d&&u}let o=n[Po.textureCoordinateBoundsOrLabelTranslate],r=0,s=0;l(i._labelTranslate)&&(r=i._labelTranslate.x,s=i._labelTranslate.y),o(i._index,r,s,0,0)}function Dqe(e,t,n,i){if(!l(e._batchTable))return;let o=n[Po.a_batchId],r=i._batchIndex;o(i._index,r)}function Xfe(e,t,n,i){if(!e._sdf)return;let o=n[Po.sdf],r=i.outlineColor,s=i.outlineWidth,a=on.encodeRGB8(r),c=s/Ba.RADIUS,d=U.floatToByte(r.alpha)*b4+U.floatToByte(c)*PC;o(i._index,a,d)}function Yfe(e,t,n,i){let o=n[Po.splitDirection],r=0,s=i.splitDirection;l(s)&&(r=s),o(i._index,r)}function kqe(e,t,n,i){Gfe(e,t,n,i),Wfe(e,t,n,i),Ffe(e,t,n,i),f4(e,t,n,i),p4(e,t,n,i),Bfe(e,t,n,i),wfe(e,t,n,i),Nfe(e,t,n,i),Pfe(e,t,n,i),Dqe(e,t,n,i),Xfe(e,t,n,i),Yfe(e,t,n,i)}function h4(e,t,n,i,o,r){let s;i.mode===se.SCENE3D?(s=e._baseVolume,e._boundingVolumeDirty=!0):s=e._baseVolume2D;let a=[];for(let c=0;c<n;++c){let d=t[c],u=d.position,h=Lo._computeActualPosition(d,u,i,o);l(h)&&(d._setActualPosition(h),r?a.push(h):ue.expand(s,h,s))}r&&ue.fromPoints(a,s)}function Qqe(e,t){let n=t.mode,i=e._billboards,o=e._billboardsToUpdate,r=e._modelMatrix;e._createVertexArray||e._mode!==n||n!==se.SCENE3D&&!F.equals(r,e.modelMatrix)?(e._mode=n,F.clone(e.modelMatrix,r),e._createVertexArray=!0,(n===se.SCENE3D||n===se.SCENE2D||n===se.COLUMBUS_VIEW)&&h4(e,i,i.length,t,r,!0)):n===se.MORPHING?h4(e,i,i.length,t,r,!0):(n===se.SCENE2D||n===se.COLUMBUS_VIEW)&&h4(e,o,e._billboardsToUpdateIndex,t,r,!1)}function Oqe(e,t,n){let i=1;(!e._allSizedInMeters||e._maxPixelOffset!==0)&&(i=t.camera.getPixelSize(n,t.context.drawingBufferWidth,t.context.drawingBufferHeight));let o=i*e._maxScale*e._maxSize*2;e._allHorizontalCenter&&e._allVerticalCenter&&(o*=.5);let r=i*e._maxPixelOffset+e._maxEyeOffset;n.radius+=o+r}function zqe(e,t){let i=t.createViewportQuadCommand(`uniform sampler2D billboard_texture;
in vec2 v_textureCoordinates;
void main()
{
out_FragColor = texture(billboard_texture, v_textureCoordinates);
}
`,{uniformMap:{billboard_texture:function(){return e.textureAtlas.texture}}});return i.pass=Ge.OVERLAY,i}var Hqe=[];Gm.prototype.update=function(e){if(g4(this),!this.show)return;let t=e.context;if(!t.instancedArrays||!(Bt.maximumVertexTextureImageUnits>0))throw new fe("Beginning in CesiumJS 1.140, billboards and labels require device support for WebGL 2, or WebGL 1 with ANGLE_instanced_arrays and MAX_VERTEX_TEXTURE_IMAGE_UNITS > 0. For more information or to share feedback, see: https://github.com/CesiumGS/cesium/issues/13053");let n=this._billboards,i=n.length,o=!0;for(let W=0;W<i;++W){let B=n[W];l(B.loadError)&&(console.error(`Error loading image for billboard: ${B.loadError}`),B.image=void 0),B.textureDirty&&this._updateBillboard(B,NC),B.show&&(o=o&&B.ready)}let r=this._textureAtlas;if(e.afterRender.push(()=>{if(!this.isDestroyed())return r.update(e.context)}),!l(r.texture))return;Qqe(this,e),n=this._billboards,i=n.length;let s=this._billboardsToUpdate,a=this._billboardsToUpdateIndex,c=this._propertiesChanged,d=r.guid,u=this._createVertexArray||this._textureAtlasGUID!==d;this._textureAtlasGUID=d;let h,p=e.passes,A=p.pick;if(u||!A&&this.computeNewBuffersUsage()){this._createVertexArray=!1;for(let W=0;W<A4;++W)c[W]=0;if(this._vaf=this._vaf&&this._vaf.destroy(),i>0){this._vaf=Xqe(t,i,this._buffersUsage,this._batchTable,this._sdf),h=this._vaf.writers;for(let W=0;W<i;++W){let B=this._billboards[W];B._dirty=!1,B.textureDirty=!1,kqe(this,e,h,B)}this._vaf.commit(yfe(t))}this._billboardsToUpdateIndex=0}else if(a>0){let W=Hqe;W.length=0,(c[HB]||c[Fqe]||c[Wqe])&&W.push(Gfe),(c[NC]||c[xfe]||c[Gqe]||c[Lqe]||c[Vqe])&&(W.push(Wfe),W.push(p4)),(c[NC]||c[Bqe]||c[Sfe])&&(W.push(Ffe),W.push(f4)),(c[NC]||c[Tfe])&&W.push(f4),(c[NC]||c[Cfe])&&W.push(p4),c[Efe]&&W.push(Bfe),c[_fe]&&W.push(wfe),(c[Ife]||c[wqe]||c[NC]||c[HB])&&W.push(Nfe),(c[NC]||c[HB])&&W.push(Pfe),c[Zfe]&&W.push(Xfe),c[Rfe]&&W.push(Yfe);let B=W.length;if(h=this._vaf.writers,a/i>.1){for(let N=0;N<a;++N){let P=s[N];P._dirty=!1,P.textureDirty=!1;for(let g=0;g<B;++g)W[g](this,e,h,P)}this._vaf.commit(yfe(t))}else{for(let N=0;N<a;++N){let P=s[N];P._dirty=!1,P.textureDirty=!1;for(let g=0;g<B;++g)W[g](this,e,h,P);this._vaf.subCommit(P._index,1)}this._vaf.endSubCommits()}this._billboardsToUpdateIndex=0}if(a>i*1.5&&(s.length=i),!l(this._vaf)||!l(this._vaf.va))return;this._boundingVolumeDirty&&(this._boundingVolumeDirty=!1,ue.transform(this._baseVolume,this.modelMatrix,this._baseVolumeWC));let f,b=F.IDENTITY;e.mode===se.SCENE3D?(b=this.modelMatrix,f=ue.clone(this._baseVolumeWC,this._boundingVolume)):f=ue.clone(this._baseVolume2D,this._boundingVolume),Oqe(this,e,f);let C=this._blendOption!==this.blendOption;if(this._blendOption=this.blendOption,C){this._blendOption===$o.OPAQUE||this._blendOption===$o.OPAQUE_AND_TRANSLUCENT?this._rsOpaque=Qe.fromCache({depthTest:{enabled:!0,func:ne.LESS},depthMask:!0}):this._rsOpaque=void 0;let W=this._blendOption===$o.TRANSLUCENT;this._blendOption===$o.TRANSLUCENT||this._blendOption===$o.OPAQUE_AND_TRANSLUCENT?this._rsTranslucent=Qe.fromCache({depthTest:{enabled:!0,func:W?ne.LEQUAL:ne.LESS},depthMask:W,blending:ln.ALPHA_BLEND}):this._rsTranslucent=void 0}this._shaderDisableDepthDistance=this._shaderDisableDepthDistance||e.minimumDisableDepthTestDistance!==0;let T,E,S,I,R;if(C||this._shaderRotation!==this._compiledShaderRotation||this._shaderAlignedAxis!==this._compiledShaderAlignedAxis||this._shaderScaleByDistance!==this._compiledShaderScaleByDistance||this._shaderTranslucencyByDistance!==this._compiledShaderTranslucencyByDistance||this._shaderPixelOffsetScaleByDistance!==this._compiledShaderPixelOffsetScaleByDistance||this._shaderDistanceDisplayCondition!==this._compiledShaderDistanceDisplayCondition||this._shaderDisableDepthDistance!==this._compiledShaderDisableDepthDistance||this._shaderClampToGround!==this._compiledShaderClampToGround||this._sdf!==this._compiledSDF){T=zB,E=OB,R=["INSTANCED"],l(this._batchTable)&&(R.push("VECTOR_TILE"),T=this._batchTable.getVertexShaderCallback(!1,"a_batchId",void 0)(T),E=this._batchTable.getFragmentShaderCallback(!1,void 0)(E)),S=new ze({defines:R,sources:[T]}),this._shaderRotation&&S.defines.push("ROTATION"),this._shaderAlignedAxis&&S.defines.push("ALIGNED_AXIS"),this._shaderScaleByDistance&&S.defines.push("EYE_DISTANCE_SCALING"),this._shaderTranslucencyByDistance&&S.defines.push("EYE_DISTANCE_TRANSLUCENCY"),this._shaderPixelOffsetScaleByDistance&&S.defines.push("EYE_DISTANCE_PIXEL_OFFSET"),this._shaderDistanceDisplayCondition&&S.defines.push("DISTANCE_DISPLAY_CONDITION"),this._shaderDisableDepthDistance&&S.defines.push("DISABLE_DEPTH_DISTANCE"),this._shaderClampToGround&&S.defines.push("VS_THREE_POINT_DEPTH_CHECK");let W=1-Ba.CUTOFF;this._sdf&&S.defines.push("SDF");let B=l(this._batchTable)?"VECTOR_TILE":"";this._blendOption===$o.OPAQUE_AND_TRANSLUCENT&&(I=new ze({defines:["OPAQUE",B],sources:[E]}),this._shaderClampToGround&&I.defines.push("VS_THREE_POINT_DEPTH_CHECK"),this._sdf&&(I.defines.push("SDF"),I.defines.push(`SDF_EDGE ${W}`)),this._sp=tn.replaceCache({context:t,shaderProgram:this._sp,vertexShaderSource:S,fragmentShaderSource:I,attributeLocations:Po}),I=new ze({defines:["TRANSLUCENT",B],sources:[E]}),this._shaderClampToGround&&I.defines.push("VS_THREE_POINT_DEPTH_CHECK"),this._sdf&&(I.defines.push("SDF"),I.defines.push(`SDF_EDGE ${W}`)),this._spTranslucent=tn.replaceCache({context:t,shaderProgram:this._spTranslucent,vertexShaderSource:S,fragmentShaderSource:I,attributeLocations:Po})),this._blendOption===$o.OPAQUE&&(I=new ze({defines:[B],sources:[E]}),this._shaderClampToGround&&I.defines.push("VS_THREE_POINT_DEPTH_CHECK"),this._sdf&&(I.defines.push("SDF"),I.defines.push(`SDF_EDGE ${W}`)),this._sp=tn.replaceCache({context:t,shaderProgram:this._sp,vertexShaderSource:S,fragmentShaderSource:I,attributeLocations:Po})),this._blendOption===$o.TRANSLUCENT&&(I=new ze({defines:[B],sources:[E]}),this._shaderClampToGround&&I.defines.push("VS_THREE_POINT_DEPTH_CHECK"),this._sdf&&(I.defines.push("SDF"),I.defines.push(`SDF_EDGE ${W}`)),this._spTranslucent=tn.replaceCache({context:t,shaderProgram:this._spTranslucent,vertexShaderSource:S,fragmentShaderSource:I,attributeLocations:Po})),this._compiledShaderRotation=this._shaderRotation,this._compiledShaderAlignedAxis=this._shaderAlignedAxis,this._compiledShaderScaleByDistance=this._shaderScaleByDistance,this._compiledShaderTranslucencyByDistance=this._shaderTranslucencyByDistance,this._compiledShaderPixelOffsetScaleByDistance=this._shaderPixelOffsetScaleByDistance,this._compiledShaderDistanceDisplayCondition=this._shaderDistanceDisplayCondition,this._compiledShaderDisableDepthDistance=this._shaderDisableDepthDistance,this._compiledShaderClampToGround=this._shaderClampToGround,this._compiledSDF=this._sdf}let V=e.commandList;if(p.render||p.pick){let W=this._colorCommands,B=this._blendOption===$o.OPAQUE,N=this._blendOption===$o.OPAQUE_AND_TRANSLUCENT,P=this._vaf.va,g=P.length,_=this._uniforms,Z;l(this._batchTable)?(_=this._batchTable.getUniformMapCallback()(_),Z=this._batchTable.getPickId()):Z="v_pickColor",W.length=g;let G=N?g*2:g;for(let w=0;w<G;++w){let X=W[w];l(X)||(X=W[w]=new ot);let k=B||N&&w%2===0;X.pass=k||!N?Ge.OPAQUE:Ge.TRANSLUCENT,X.owner=this;let v=N?Math.floor(w/2):w;X.boundingVolume=f,X.modelMatrix=b,X.count=P[v].indicesCount,X.shaderProgram=k?this._sp:this._spTranslucent,X.uniformMap=_,X.vertexArray=P[v].va,X.renderState=k?this._rsOpaque:this._rsTranslucent,X.debugShowBoundingVolume=this.debugShowBoundingVolume,X.pickId=Z,X.count=6,X.instanceCount=i,V.push(X)}this.debugShowTextureAtlas&&(l(this.debugCommand)||(this.debugCommand=zqe(this,e.context)),V.push(this.debugCommand))}this._allBillboardsReady=o};Gm.prototype.isDestroyed=function(){return!1};Gm.prototype.destroy=function(){return l(this._removeCallbackFunc)&&(this._removeCallbackFunc(),this._removeCallbackFunc=void 0),this._textureAtlas=this._destroyTextureAtlas&&this._textureAtlas&&this._textureAtlas.destroy(),this._sp=this._sp&&this._sp.destroy(),this._spTranslucent=this._spTranslucent&&this._spTranslucent.destroy(),this._vaf=this._vaf&&this._vaf.destroy(),Vfe(this._billboards),he(this)};var yu=Gm;var E4n=y(x(),1);var A4n=y(x(),1);function Jqe(e,t,n,i,o){return function(){let r=document.createElement("canvas"),s=o+2*i;r.height=r.width=s;let a=r.getContext("2d");return a.clearRect(0,0,s,s),i!==0&&(a.beginPath(),a.arc(s/2,s/2,s/2,0,2*Math.PI,!0),a.closePath(),a.fillStyle=n,a.fill(),e<1&&(a.save(),a.globalCompositeOperation="destination-out",a.beginPath(),a.arc(s/2,s/2,o/2,0,2*Math.PI,!0),a.closePath(),a.fillStyle="black",a.fill(),a.restore())),a.beginPath(),a.arc(s/2,s/2,o/2,0,2*Math.PI,!0),a.closePath(),a.fillStyle=t,a.fill(),r}}var XC=Jqe;var Kqe=new Ae,$h=class{constructor(t,n,i,o,r){this._content=t,this._billboard=i,this._label=o,this._polyline=r,this._batchId=n,this._billboardImage=void 0,this._billboardColor=void 0,this._billboardOutlineColor=void 0,this._billboardOutlineWidth=void 0,this._billboardSize=void 0,this._pointSize=void 0,this._color=void 0,this._pointSize=void 0,this._pointOutlineColor=void 0,this._pointOutlineWidth=void 0,this._heightOffset=void 0,this._pickIds=new Array(3),D_(this)}get show(){return this._label.show}set show(t){this._label.show=t,this._billboard.show=t,this._polyline.show=t}get color(){return this._color}set color(t){this._color=U.clone(t,this._color),D_(this)}get pointSize(){return this._pointSize}set pointSize(t){this._pointSize=t,D_(this)}get pointOutlineColor(){return this._pointOutlineColor}set pointOutlineColor(t){this._pointOutlineColor=U.clone(t,this._pointOutlineColor),D_(this)}get pointOutlineWidth(){return this._pointOutlineWidth}set pointOutlineWidth(t){this._pointOutlineWidth=t,D_(this)}get labelColor(){return this._label.fillColor}set labelColor(t){this._label.fillColor=t,this._polyline.show=this._label.show&&t.alpha>0}get labelOutlineColor(){return this._label.outlineColor}set labelOutlineColor(t){this._label.outlineColor=t}get labelOutlineWidth(){return this._label.outlineWidth}set labelOutlineWidth(t){this._label.outlineWidth=t}get font(){return this._label.font}set font(t){this._label.font=t}get labelStyle(){return this._label.style}set labelStyle(t){this._label.style=t}get labelText(){return this._label.text}set labelText(t){l(t)||(t=""),this._label.text=t}get backgroundColor(){return this._label.backgroundColor}set backgroundColor(t){this._label.backgroundColor=t}get backgroundPadding(){return this._label.backgroundPadding}set backgroundPadding(t){this._label.backgroundPadding=t}get backgroundEnabled(){return this._label.showBackground}set backgroundEnabled(t){this._label.showBackground=t}get scaleByDistance(){return this._label.scaleByDistance}set scaleByDistance(t){this._label.scaleByDistance=t,this._billboard.scaleByDistance=t}get translucencyByDistance(){return this._label.translucencyByDistance}set translucencyByDistance(t){this._label.translucencyByDistance=t,this._billboard.translucencyByDistance=t}get distanceDisplayCondition(){return this._label.distanceDisplayCondition}set distanceDisplayCondition(t){this._label.distanceDisplayCondition=t,this._polyline.distanceDisplayCondition=t,this._billboard.distanceDisplayCondition=t}get heightOffset(){return this._heightOffset}set heightOffset(t){let n=this._heightOffset??0,i=this._content.tileset.ellipsoid,o=i.cartesianToCartographic(this._billboard.position,Kqe);o.height=o.height-n+t;let r=i.cartographicToCartesian(o);this._billboard.position=r,this._label.position=this._billboard.position,this._polyline.positions=[this._polyline.positions[0],r],this._heightOffset=t}get anchorLineEnabled(){return this._polyline.show}set anchorLineEnabled(t){this._polyline.show=t}get anchorLineColor(){return this._polyline.material.uniforms.color}set anchorLineColor(t){this._polyline.material.uniforms.color=U.clone(t,this._polyline.material.uniforms.color)}get image(){return this._billboardImage}set image(t){let n=this._billboardImage!==t;this._billboardImage=t,n&&D_(this)}get disableDepthTestDistance(){return this._label.disableDepthTestDistance}set disableDepthTestDistance(t){this._label.disableDepthTestDistance=t,this._billboard.disableDepthTestDistance=t}get horizontalOrigin(){return this._billboard.horizontalOrigin}set horizontalOrigin(t){this._billboard.horizontalOrigin=t}get verticalOrigin(){return this._billboard.verticalOrigin}set verticalOrigin(t){this._billboard.verticalOrigin=t}get labelHorizontalOrigin(){return this._label.horizontalOrigin}set labelHorizontalOrigin(t){this._label.horizontalOrigin=t}get labelVerticalOrigin(){return this._label.verticalOrigin}set labelVerticalOrigin(t){this._label.verticalOrigin=t}get content(){return this._content}get tileset(){return this._content.tileset}get primitive(){return this._content.tileset}get pickIds(){let t=this._pickIds;return t[0]=this._billboard.pickId,t[1]=this._label.pickId,t[2]=this._polyline.pickId,t}hasProperty(t){return this._content.batchTable.hasProperty(this._batchId,t)}getPropertyIds(t){return this._content.batchTable.getPropertyIds(this._batchId,t)}getProperty(t){return this._content.batchTable.getProperty(this._batchId,t)}getPropertyInherited(t){return Ga.getPropertyInherited(this._content,this._batchId,t)}setProperty(t,n){this._content.batchTable.setProperty(this._batchId,t,n),this._content.featurePropertiesDirty=!0}isExactClass(t){return this._content.batchTable.isExactClass(this._batchId,t)}isClass(t){return this._content.batchTable.isClass(this._batchId,t)}getExactClassName(){return this._content.batchTable.getExactClassName(this._batchId)}};Bn($h,"defaultColor",U.WHITE),Bn($h,"defaultPointOutlineColor",U.BLACK),Bn($h,"defaultPointOutlineWidth",0),Bn($h,"defaultPointSize",8);function D_(e){let t=e._billboard;if(l(e._billboardImage)&&e._billboardImage!==t.image){t.image=e._billboardImage;return}if(l(e._billboardImage))return;let n=e._color??$h.defaultColor,i=e._pointOutlineColor??$h.defaultPointOutlineColor,o=e._pointOutlineWidth??$h.defaultPointOutlineWidth,r=e._pointSize??$h.defaultPointSize,s=e._billboardColor,a=e._billboardOutlineColor,c=e._billboardOutlineWidth,d=e._billboardSize;if(U.equals(n,s)&&U.equals(i,a)&&o===c&&r===d)return;e._billboardColor=U.clone(n,e._billboardColor),e._billboardOutlineColor=U.clone(i,e._billboardOutlineColor),e._billboardOutlineWidth=o,e._billboardSize=r;let u=n.alpha,h=n.toCssColorString(),p=i.toCssColorString(),A=JSON.stringify([h,r,p,o]);t.setImage(A,XC(u,h,p,o,r))}var xg=$h;var g8n=y(x(),1);var V4n=y(x(),1);function jqe(e,t){let n=e.measureText(t);if(!/\S/.test(t))return{width:n.width,height:0,ascent:0,descent:0,minx:0};let o=Math.round(n.actualBoundingBoxAscent),r=Math.round(n.actualBoundingBoxDescent),s=Math.max(o+r,1);return{width:n.width,height:s,ascent:o,descent:r,minx:-Math.round(n.actualBoundingBoxLeft)}}var YC;function qqe(e,t){if(e==="")return;t=t??Q.EMPTY_OBJECT;let n=t.font??"10px sans-serif",i=t.stroke??!1,o=t.fill??!0,r=t.strokeWidth??1,s=t.backgroundColor??U.TRANSPARENT,a=t.padding??0,c=a*2,d=document.createElement("canvas");d.width=1,d.height=1,d.style.font=n;let u=d.getContext("2d",{willReadFrequently:!0});l(YC)||(l(u.imageSmoothingEnabled)?YC="imageSmoothingEnabled":l(u.mozImageSmoothingEnabled)?YC="mozImageSmoothingEnabled":l(u.webkitImageSmoothingEnabled)?YC="webkitImageSmoothingEnabled":l(u.msImageSmoothingEnabled)&&(YC="msImageSmoothingEnabled")),u.font=n,u.lineJoin="round",u.lineWidth=r,u[YC]=!1,d.style.visibility="hidden",document.body.appendChild(d);let h=jqe(u,e);d.dimensions=h,document.body.removeChild(d),d.style.visibility="";let p=!/\S/.test(e),A=i&&!p?Math.ceil(r/2):0,f=A*2,b=-h.minx+A,C=Math.ceil(h.width)+b+c+A,T=h.height+c+f,E=h.ascent+a+A;if(d.width=C,d.height=T,u.font=n,u.lineJoin="round",u.lineWidth=r,u[YC]=!1,s!==U.TRANSPARENT&&(u.fillStyle=s.toCssColorString(),u.fillRect(0,0,d.width,d.height)),i){let S=t.strokeColor??U.BLACK;u.strokeStyle=S.toCssColorString(),u.strokeText(e,b+a,E)}if(o){let S=t.fillColor??U.WHITE;u.fillStyle=S.toCssColorString(),u.fillText(e,b+a,E)}return d}var MC=qqe;var jfe=y(Dfe(),1);var J4n=y(x(),1);var F4n=y(x(),1),e$e={FILL:0,OUTLINE:1,FILL_AND_OUTLINE:2},hr=Object.freeze(e$e);var kfe={},Qfe=0,t$e=256,n$e=new U(.165,.165,.165,.8),i$e=new M(7,5),Hs=Object.freeze({LTR:0,RTL:1,WEAK:2,BRACKETS:3});function vC(e){!e._rebindAllGlyphs&&!e._repositionAllGlyphs&&e._labelCollection._labelsToUpdate.push(e),e._rebindAllGlyphs=!0}function KB(e){!e._rebindAllGlyphs&&!e._repositionAllGlyphs&&e._labelCollection._labelsToUpdate.push(e),e._repositionAllGlyphs=!0}function jB(e,t){return document.defaultView.getComputedStyle(e,null).getPropertyValue(t)}function zfe(e){let t=kfe[e._font];if(!l(t)){let n=document.createElement("div");n.style.position="absolute",n.style.opacity=0,n.style.font=e._font,document.body.appendChild(n);let i=parseFloat(jB(n,"line-height"));isNaN(i)&&(i=void 0),t={family:jB(n,"font-family"),size:jB(n,"font-size").replace("px",""),style:jB(n,"font-style"),weight:jB(n,"font-weight"),lineHeight:i},document.body.removeChild(n),Qfe<t$e&&(kfe[e._font]=t,Qfe++)}e._fontFamily=t.family,e._fontSize=t.size,e._fontStyle=t.style,e._fontWeight=t.weight,e._lineHeight=t.lineHeight}function ef(e,t){e=e??Q.EMPTY_OBJECT;let n=e.translucencyByDistance,i=e.pixelOffsetScaleByDistance,o=e.scaleByDistance,r=e.distanceDisplayCondition;l(n)&&(n=Ot.clone(n)),l(i)&&(i=Ot.clone(i)),l(o)&&(o=Ot.clone(o)),l(r)&&(r=Dt.clone(r)),this._renderedText=void 0,this._text=void 0,this._show=e.show??!0,this._font=e.font??"30px sans-serif",this._fillColor=U.clone(e.fillColor??U.WHITE),this._outlineColor=U.clone(e.outlineColor??U.BLACK),this._outlineWidth=e.outlineWidth??1,this._showBackground=e.showBackground??!1,this._backgroundColor=U.clone(e.backgroundColor??n$e),this._backgroundPadding=M.clone(e.backgroundPadding??i$e),this._style=e.style??hr.FILL,this._verticalOrigin=e.verticalOrigin??Hn.BASELINE,this._horizontalOrigin=e.horizontalOrigin??Bi.LEFT,this._pixelOffset=M.clone(e.pixelOffset??M.ZERO),this._eyeOffset=m.clone(e.eyeOffset??m.ZERO),this._position=m.clone(e.position??m.ZERO),this._scale=e.scale??1,this._id=e.id,this._translucencyByDistance=n,this._pixelOffsetScaleByDistance=i,this._scaleByDistance=o,this._heightReference=e.heightReference??rt.NONE,this._distanceDisplayCondition=r,this._disableDepthTestDistance=e.disableDepthTestDistance,this._labelCollection=t,this._glyphs=[],this._backgroundBillboard=void 0,this._batchIndex=void 0,this._rebindAllGlyphs=!0,this._repositionAllGlyphs=!0,this._actualClampedPosition=void 0,this._removeCallbackFunc=void 0,this._mode=void 0,this._clusterShow=!0,this.text=e.text??"",this._relativeSize=1,zfe(this),this._updateClamping()}Object.defineProperties(ef.prototype,{show:{get:function(){return this._show},set:function(e){if(this._show!==e){this._show=e;let t=this._glyphs;for(let i=0,o=t.length;i<o;i++){let r=t[i].billboard;l(r)&&(r.show=e)}let n=this._backgroundBillboard;l(n)&&(n.show=e)}}},position:{get:function(){return this._position},set:function(e){let t=this._position;if(!m.equals(t,e)){m.clone(e,t);let n=this._glyphs;for(let o=0,r=n.length;o<r;o++){let s=n[o].billboard;l(s)&&(s.position=e)}let i=this._backgroundBillboard;l(i)&&(i.position=e),this._updateClamping()}}},heightReference:{get:function(){return this._heightReference},set:function(e){if(e!==this._heightReference){this._heightReference=e;let t=this._glyphs;for(let i=0,o=t.length;i<o;i++){let r=t[i].billboard;l(r)&&(r.heightReference=e)}let n=this._backgroundBillboard;l(n)&&(n.heightReference=e),KB(this),this._updateClamping()}}},text:{get:function(){return this._text},set:function(e){if(this._text!==e){this._text=e;let t=ef.filterUnsupportedCharacters(e);this._renderedText=ef.enableRightToLeftDetection?l$e(t):t,vC(this)}}},font:{get:function(){return this._font},set:function(e){this._font!==e&&(this._font=e,vC(this),zfe(this))}},fillColor:{get:function(){return this._fillColor},set:function(e){let t=this._fillColor;U.equals(t,e)||(U.clone(e,t),vC(this))}},outlineColor:{get:function(){return this._outlineColor},set:function(e){let t=this._outlineColor;U.equals(t,e)||(U.clone(e,t),vC(this))}},outlineWidth:{get:function(){return this._outlineWidth},set:function(e){this._outlineWidth!==e&&(this._outlineWidth=e,vC(this))}},showBackground:{get:function(){return this._showBackground},set:function(e){this._showBackground!==e&&(this._showBackground=e,vC(this))}},backgroundColor:{get:function(){return this._backgroundColor},set:function(e){let t=this._backgroundColor;if(!U.equals(t,e)){U.clone(e,t);let n=this._backgroundBillboard;l(n)&&(n.color=t)}}},backgroundPadding:{get:function(){return this._backgroundPadding},set:function(e){let t=this._backgroundPadding;M.equals(t,e)||(M.clone(e,t),KB(this))}},style:{get:function(){return this._style},set:function(e){this._style!==e&&(this._style=e,vC(this))}},pixelOffset:{get:function(){return this._pixelOffset},set:function(e){let t=this._pixelOffset;if(!M.equals(t,e)){M.clone(e,t);let n=this._glyphs;for(let o=0,r=n.length;o<r;o++){let s=n[o];l(s.billboard)&&(s.billboard.pixelOffset=e)}let i=this._backgroundBillboard;l(i)&&(i.pixelOffset=e)}}},translucencyByDistance:{get:function(){return this._translucencyByDistance},set:function(e){let t=this._translucencyByDistance;if(!Ot.equals(t,e)){this._translucencyByDistance=Ot.clone(e,t);let n=this._glyphs;for(let o=0,r=n.length;o<r;o++){let s=n[o];l(s.billboard)&&(s.billboard.translucencyByDistance=e)}let i=this._backgroundBillboard;l(i)&&(i.translucencyByDistance=e)}}},pixelOffsetScaleByDistance:{get:function(){return this._pixelOffsetScaleByDistance},set:function(e){let t=this._pixelOffsetScaleByDistance;if(!Ot.equals(t,e)){this._pixelOffsetScaleByDistance=Ot.clone(e,t);let n=this._glyphs;for(let o=0,r=n.length;o<r;o++){let s=n[o];l(s.billboard)&&(s.billboard.pixelOffsetScaleByDistance=e)}let i=this._backgroundBillboard;l(i)&&(i.pixelOffsetScaleByDistance=e)}}},scaleByDistance:{get:function(){return this._scaleByDistance},set:function(e){let t=this._scaleByDistance;if(!Ot.equals(t,e)){this._scaleByDistance=Ot.clone(e,t);let n=this._glyphs;for(let o=0,r=n.length;o<r;o++){let s=n[o];l(s.billboard)&&(s.billboard.scaleByDistance=e)}let i=this._backgroundBillboard;l(i)&&(i.scaleByDistance=e)}}},eyeOffset:{get:function(){return this._eyeOffset},set:function(e){let t=this._eyeOffset;if(!m.equals(t,e)){m.clone(e,t);let n=this._glyphs;for(let o=0,r=n.length;o<r;o++){let s=n[o];l(s.billboard)&&(s.billboard.eyeOffset=e)}let i=this._backgroundBillboard;l(i)&&(i.eyeOffset=e)}}},horizontalOrigin:{get:function(){return this._horizontalOrigin},set:function(e){this._horizontalOrigin!==e&&(this._horizontalOrigin=e,KB(this))}},verticalOrigin:{get:function(){return this._verticalOrigin},set:function(e){if(this._verticalOrigin!==e){this._verticalOrigin=e;let t=this._glyphs;for(let i=0,o=t.length;i<o;i++){let r=t[i];l(r.billboard)&&(r.billboard.verticalOrigin=e)}let n=this._backgroundBillboard;l(n)&&(n.verticalOrigin=e),KB(this)}}},scale:{get:function(){return this._scale},set:function(e){if(this._scale!==e){this._scale=e;let t=this._glyphs;for(let i=0,o=t.length;i<o;i++){let r=t[i];l(r.billboard)&&(r.billboard.scale=e*this._relativeSize)}let n=this._backgroundBillboard;l(n)&&(n.scale=e*this._relativeSize),KB(this)}}},totalScale:{get:function(){return this._scale*this._relativeSize}},distanceDisplayCondition:{get:function(){return this._distanceDisplayCondition},set:function(e){if(!Dt.equals(e,this._distanceDisplayCondition)){this._distanceDisplayCondition=Dt.clone(e,this._distanceDisplayCondition);let t=this._glyphs;for(let i=0,o=t.length;i<o;i++){let r=t[i];l(r.billboard)&&(r.billboard.distanceDisplayCondition=e)}let n=this._backgroundBillboard;l(n)&&(n.distanceDisplayCondition=e)}}},disableDepthTestDistance:{get:function(){return this._disableDepthTestDistance},set:function(e){if(this._disableDepthTestDistance!==e){this._disableDepthTestDistance=e;let t=this._glyphs;for(let i=0,o=t.length;i<o;i++){let r=t[i];l(r.billboard)&&(r.billboard.disableDepthTestDistance=e)}let n=this._backgroundBillboard;l(n)&&(n.disableDepthTestDistance=e)}}},id:{get:function(){return this._id},set:function(e){if(this._id!==e){this._id=e;let t=this._glyphs;for(let i=0,o=t.length;i<o;i++){let r=t[i];l(r.billboard)&&(r.billboard.id=e)}let n=this._backgroundBillboard;l(n)&&(n.id=e)}}},pickId:{get:function(){if(!(this._glyphs.length===0||!l(this._glyphs[0].billboard)))return this._glyphs[0].billboard.pickId}},_clampedPosition:{get:function(){return this._actualClampedPosition},set:function(e){this._actualClampedPosition=m.clone(e,this._actualClampedPosition);let t=this._glyphs;for(let i=0,o=t.length;i<o;i++){let r=t[i];l(r.billboard)&&(r.billboard._clampedPosition=e)}let n=this._backgroundBillboard;l(n)&&(n._clampedPosition=e)}},clusterShow:{get:function(){return this._clusterShow},set:function(e){if(this._clusterShow!==e){this._clusterShow=e;let t=this._glyphs;for(let i=0,o=t.length;i<o;i++){let r=t[i];l(r.billboard)&&(r.billboard.clusterShow=e)}let n=this._backgroundBillboard;l(n)&&(n.clusterShow=e)}}},ready:{get:function(){if(this._rebindAllGlyphs||this._repositionAllGlyphs||l(this._backgroundBillboard)&&!this._backgroundBillboard.ready)return!1;let e=this._glyphs;for(let t=0,n=e.length;t<n;t++){let i=e[t];if(l(i.billboard)&&!i.billboard.ready)return!1}return!0}}});ef.prototype._updateClamping=function(){Lo._updateClamping(this._labelCollection,this)};ef.prototype.computeScreenSpacePosition=function(e,t){l(t)||(t=new M);let i=this._labelCollection.modelMatrix,o=l(this._actualClampedPosition)?this._actualClampedPosition:this._position;return Lo._computeScreenSpacePosition(i,o,this._eyeOffset,this._pixelOffset,e,t)};ef.getScreenSpaceBoundingBox=function(e,t,n){let i=0,o=0,r=0,s=0,a=e.totalScale,c=e._backgroundBillboard;if(l(c))i=t.x+c._translate.x,o=t.y-c._translate.y,r=c.width*a,s=c.height*a,e.verticalOrigin===Hn.BOTTOM||e.verticalOrigin===Hn.BASELINE?o-=s:e.verticalOrigin===Hn.CENTER&&(o-=s*.5);else{i=Number.POSITIVE_INFINITY,o=Number.POSITIVE_INFINITY;let d=0,u=0,h=e._glyphs,p=h.length;for(let A=0;A<p;++A){let f=h[A],b=f.billboard;if(!l(b))continue;let C=t.x+b._translate.x,T=t.y-b._translate.y,E=f.dimensions.width*a,S=f.dimensions.height*a;e.verticalOrigin===Hn.BOTTOM||e.verticalOrigin===Hn.BASELINE?T-=S:e.verticalOrigin===Hn.CENTER&&(T-=S*.5),e._verticalOrigin===Hn.TOP?T+=Ba.PADDING*a:(e._verticalOrigin===Hn.BOTTOM||e._verticalOrigin===Hn.BASELINE)&&(T-=Ba.PADDING*a),i=Math.min(i,C),o=Math.min(o,T),d=Math.max(d,C+E),u=Math.max(u,T+S)}r=d-i,s=u-o}return l(n)||(n=new nt),n.x=i,n.y=o,n.width=r,n.height=s,n};ef.filterUnsupportedCharacters=function(e){let t=new RegExp(/[\u0000-\u0008\u000E-\u001F\u00ad\u202a-\u206f\u200b-\u200f]/,"g");return e.replace(t,"")};ef.prototype.equals=function(e){return this===e||l(e)&&this._show===e._show&&this._scale===e._scale&&this._outlineWidth===e._outlineWidth&&this._showBackground===e._showBackground&&this._style===e._style&&this._verticalOrigin===e._verticalOrigin&&this._horizontalOrigin===e._horizontalOrigin&&this._heightReference===e._heightReference&&this._renderedText===e._renderedText&&this._font===e._font&&m.equals(this._position,e._position)&&U.equals(this._fillColor,e._fillColor)&&U.equals(this._outlineColor,e._outlineColor)&&U.equals(this._backgroundColor,e._backgroundColor)&&M.equals(this._backgroundPadding,e._backgroundPadding)&&M.equals(this._pixelOffset,e._pixelOffset)&&m.equals(this._eyeOffset,e._eyeOffset)&&Ot.equals(this._translucencyByDistance,e._translucencyByDistance)&&Ot.equals(this._pixelOffsetScaleByDistance,e._pixelOffsetScaleByDistance)&&Ot.equals(this._scaleByDistance,e._scaleByDistance)&&Dt.equals(this._distanceDisplayCondition,e._distanceDisplayCondition)&&this._disableDepthTestDistance===e._disableDepthTestDistance&&this._id===e._id};ef.prototype.isDestroyed=function(){return!1};ef.enableRightToLeftDetection=!1;function o$e(e,t){let n=/[a-zA-Z0-9]/,i=/[()[\]{}<>]/,o=[],r="",s=Hs.LTR,a="",c=e.length;for(let d=0;d<c;++d){let u=e.charAt(d);t.test(u)?a=Hs.RTL:n.test(u)?a=Hs.LTR:i.test(u)?a=Hs.BRACKETS:a=Hs.WEAK,d===0&&(s=a),s===a&&a!==Hs.BRACKETS?r+=u:(r!==""&&o.push({Type:s,Word:r}),s=a,r=u)}return o.push({Type:a,Word:r}),o}function r$e(e){return e.split("").reverse().join("")}function qB(e,t,n){return e.slice(0,t)+n+e.slice(t)}function s$e(e){switch(e){case"(":return")";case")":return"(";case"[":return"]";case"]":return"[";case"{":return"}";case"}":return"{";case"<":return">";case">":return"<"}}var a$e="\u05D0-\u05EA",c$e="\u0600-\u06FF\u0750-\u077F\u08A0-\u08FF",Ofe=new RegExp(`[${a$e}${c$e}]`);function l$e(e){let t=e.split(`
`),n="";for(let i=0;i<t.length;i++){let o=t[i],r=Ofe.test(o.charAt(0)),s=o$e(o,Ofe),a=0,c="";for(let d=0;d<s.length;++d){let u=s[d],h=u.Type===Hs.BRACKETS?s$e(u.Word):r$e(u.Word);r?u.Type===Hs.RTL?(c=h+c,a=0):u.Type===Hs.LTR?(c=qB(c,a,u.Word),a+=u.Word.length):(u.Type===Hs.WEAK||u.Type===Hs.BRACKETS)&&(u.Type===Hs.WEAK&&s[d-1].Type===Hs.BRACKETS?c=h+c:s[d-1].Type===Hs.RTL?(c=h+c,a=0):s.length>d+1?s[d+1].Type===Hs.RTL?(c=h+c,a=0):(c=qB(c,a,u.Word),a+=u.Word.length):c=qB(c,0,h)):u.Type===Hs.RTL?c=qB(c,a,h):u.Type===Hs.LTR?(c+=u.Word,a=c.length):(u.Type===Hs.WEAK||u.Type===Hs.BRACKETS)&&(d>0&&s[d-1].Type===Hs.RTL?s.length>d+1?s[d+1].Type===Hs.RTL?c=qB(c,a,h):(c+=u.Word,a=c.length):c+=u.Word:(c+=u.Word,a=c.length))}n+=c,i<t.length-1&&(n+=`
`)}return n}var D0=ef;var qfe=y(Hfe(),1);function u$e(){this.dimensions=void 0,this.billboardTexture=void 0,this.billboard=void 0}var m$e=1.2,Jfe="ID_WHITE_PIXEL",y4=new M(4,4),h$e=new nt(1,1,1,1);function f$e(e,t){let n=t._backgroundBillboardTexture;if(!n.hasImage){let o=document.createElement("canvas");o.width=y4.x,o.height=y4.y;let r=o.getContext("2d");r.fillStyle="#fff",r.fillRect(0,0,o.width,o.height),n.loadImage(Jfe,o),n.addImageSubRegion(Jfe,h$e)}let i=e.add({collection:t});return i.setImageTexture(n),i._positionFromParent=!0,i._labelTranslate=new M,i}var Cg={};function p$e(e,t,n,i,o,r){return Cg.font=t,Cg.fillColor=n,Cg.strokeColor=i,Cg.strokeWidth=o,Cg.padding=Ba.PADDING,Cg.fill=r===hr.FILL||r===hr.FILL_AND_OUTLINE,Cg.stroke=r===hr.OUTLINE||r===hr.FILL_AND_OUTLINE,Cg.backgroundColor=U.BLACK,MC(e,Cg)}function x4(e,t){let n=t.billboard;l(n)&&(n.show=!1,n._clampedPosition=void 0,l(n._removeCallbackFunc)&&(n._removeCallbackFunc(),n._removeCallbackFunc=void 0),e._spareBillboards.push(n),t.billboard=void 0)}var A$e=new qfe.default,g$e=/\s/;function b$e(e,t){let n=t._renderedText,i=A$e.splitGraphemes(n),o=i.length,r=t._glyphs,s=r.length;if(t._relativeSize=t._fontSize/Ba.FONT_SIZE,o<s)for(let p=o;p<s;++p)x4(e,r[p]);r.length=o;let a=t._backgroundBillboard,c=e._backgroundBillboardCollection;t._showBackground&&!l(a)&&(a=f$e(c,e),t._backgroundBillboard=a),y$e(c,t,a);let d=e._glyphBillboardCollection,u=d.billboardTextureCache,h=e._textDimensionsCache;for(let p=0;p<o;++p){let A=i[p],f=t._verticalOrigin,b=JSON.stringify([A,t._fontFamily,t._fontStyle,t._fontWeight,+f]),C=h[b],T=u.get(b);if(!l(T)||!l(C)){T=new yg(d),u.set(b,T);let R=`${t._fontStyle} ${t._fontWeight} ${Ba.FONT_SIZE}px ${t._fontFamily}`,V=p$e(A,R,U.WHITE,U.WHITE,0,hr.FILL);if(C=V.dimensions,h[b]=C,V.width>0&&V.height>0&&!g$e.test(A)){let W=(0,jfe.default)(V,{cutoff:Ba.CUTOFF,radius:Ba.RADIUS}),B=V.getContext("2d"),N=V.width,P=V.height,g=B.getImageData(0,0,N,P);for(let _=0;_<N;_++)for(let Z=0;Z<P;Z++){let G=Z*N+_,w=W[G]*255,X=G*4;g.data[X+0]=w,g.data[X+1]=w,g.data[X+2]=w,g.data[X+3]=w}B.putImageData(g,0,0),T.loadImage(b,V)}}let E=r[p];if(l(E)||(E=new u$e,E.dimensions=C,E.billboardTexture=T,r[p]=E),E.billboardTexture.id!==b&&(E.billboardTexture=T,E.dimensions=C),!T.hasImage){x4(e,E);continue}let S=E.billboard,I=e._spareBillboards;l(S)||(I.length>0?S=I.pop():(S=d.add({collection:e}),S._labelDimensions=new M,S._labelTranslate=new M,S._positionFromParent=!0),E.billboard=S),S.setImageTexture(T),S.show=t._show,S.position=t._position,S.eyeOffset=t._eyeOffset,S.pixelOffset=t._pixelOffset,S.horizontalOrigin=Bi.LEFT,S.verticalOrigin=t._verticalOrigin,S.heightReference=t._heightReference,l(t._clampedPosition)&&(S._clampedPosition=t._clampedPosition),S.scale=t.totalScale,S.pickPrimitive=t,S.id=t._id,S.translucencyByDistance=t._translucencyByDistance,S.pixelOffsetScaleByDistance=t._pixelOffsetScaleByDistance,S.scaleByDistance=t._scaleByDistance,S.distanceDisplayCondition=t._distanceDisplayCondition,S.disableDepthTestDistance=t._disableDepthTestDistance,S._batchIndex=t._batchIndex,S.outlineColor=t.outlineColor,t.style===hr.FILL_AND_OUTLINE?(S.color=t._fillColor,S.outlineWidth=t.outlineWidth):t.style===hr.FILL?(S.color=t._fillColor,S.outlineWidth=0):t.style===hr.OUTLINE&&(S.color=U.TRANSPARENT,S.outlineWidth=t.outlineWidth)}t._repositionAllGlyphs=!0}function y$e(e,t,n){if(!l(n))return;let i=t.show&&t._showBackground&&t._renderedText.split(`
`).join("").length>0;if(t.show&&!i){e.remove(n),t._backgroundBillboard=n=void 0;return}n.color=t._backgroundColor,n.show=t._show,n.position=t._position,n.eyeOffset=t._eyeOffset,n.pixelOffset=t._pixelOffset,n.horizontalOrigin=Bi.LEFT,n.verticalOrigin=t._verticalOrigin,n.heightReference=t._heightReference,l(t._clampedPosition)&&(n._clampedPosition=t._clampedPosition),n.scale=t.totalScale,n.pickPrimitive=t,n.id=t._id,n.translucencyByDistance=t._translucencyByDistance,n.pixelOffsetScaleByDistance=t._pixelOffsetScaleByDistance,n.scaleByDistance=t._scaleByDistance,n.distanceDisplayCondition=t._distanceDisplayCondition,n.disableDepthTestDistance=t._disableDepthTestDistance,n.clusterShow=t.clusterShow}function Kfe(e,t,n){return t===Bi.CENTER?-e/2:t===Bi.RIGHT?-(e+n.x):n.x}var Pr=new M,x$e=new M;function C$e(e){let t=e._glyphs,n=e._renderedText,i=0,o=0,r=[],s=Number.NEGATIVE_INFINITY,a=0,c=1,d=t.length,u=e._backgroundBillboard,h=M.clone(l(u)?e._backgroundPadding:M.ZERO,x$e);h.x/=e._relativeSize,h.y/=e._relativeSize;for(let N=0;N<d;++N){if(n.charAt(N)===`
`){r.push(i),++c,i=0;continue}let g=t[N].dimensions;l(g)&&(a=Math.max(a,g.height-g.descent),s=Math.max(s,g.descent),i+=g.width-g.minx,N<d-1&&(i+=t[N+1].dimensions.minx),o=Math.max(o,i))}r.push(i);let p=a+s,A=e.totalScale,f=e._horizontalOrigin,b=e._verticalOrigin,C=0,T=r[C],E=Kfe(T,f,h),S=(l(e._lineHeight)?e._lineHeight:m$e*e._fontSize)/e._relativeSize,I=S*(c-1),R=o,V=p+I;l(u)&&(R+=h.x*2,V+=h.y*2,u._labelHorizontalOrigin=f),Pr.x=E*A,Pr.y=0;let W=!0,B=0;for(let N=0;N<d;++N){if(n.charAt(N)===`
`){++C,B+=S,T=r[C],E=Kfe(T,f,h),Pr.x=E*A,W=!0;continue}let P=t[N],g=P.dimensions;if(l(g)&&(b===Hn.TOP?(Pr.y=g.height-a-h.y,Pr.y+=Ba.PADDING):b===Hn.CENTER?Pr.y=(I+g.height-a)/2:b===Hn.BASELINE?(Pr.y=I,Pr.y-=Ba.PADDING):(Pr.y=I+s+h.y,Pr.y-=Ba.PADDING),Pr.y=(Pr.y-g.descent-B)*A,W&&(Pr.x-=Ba.PADDING*A,W=!1),l(P.billboard)&&(P.billboard._setTranslate(Pr),P.billboard._labelDimensions.x=R,P.billboard._labelDimensions.y=V,P.billboard._labelHorizontalOrigin=f,hm(e.heightReference)&&(P.billboard._labelTranslate=M.clone(Pr,P.billboard._labelTranslate))),N<d-1)){let _=t[N+1];Pr.x+=(g.width-g.minx+_.dimensions.minx)*A}}l(u)&&n.split(`
`).join("").length>0&&(f===Bi.CENTER?E=-o/2-h.x:f===Bi.RIGHT?E=-(o+h.x*2):E=0,Pr.x=E*A,b===Hn.TOP?Pr.y=p-a-s:b===Hn.CENTER?Pr.y=(p-a)/2-s:b===Hn.BASELINE?Pr.y=-h.y-s:Pr.y=0,Pr.y=Pr.y*A,u.width=R,u.height=V,u._setTranslate(Pr),u._labelTranslate=M.clone(Pr,u._labelTranslate))}function $fe(e,t){let n=t._glyphs;for(let i=0,o=n.length;i<o;++i)x4(e,n[i]);l(t._backgroundBillboard)&&(e._backgroundBillboardCollection.remove(t._backgroundBillboard),t._backgroundBillboard=void 0),t._labelCollection=void 0,l(t._removeCallbackFunc)&&t._removeCallbackFunc(),he(t)}function Ep(e){e=e??Q.EMPTY_OBJECT,this._scene=e.scene,this._batchTable=e.batchTable;let t=new yu({scene:this._scene,textureAtlas:new Gx({initialSize:y4}),coarseDepthTestDistance:e.coarseDepthTestDistance,threePointDepthTestDistance:e.threePointDepthTestDistance});this._backgroundBillboardCollection=t,this._backgroundBillboardTexture=new yg(t),this._glyphBillboardCollection=new yu({scene:this._scene,batchTable:this._batchTable,coarseDepthTestDistance:e.coarseDepthTestDistance,threePointDepthTestDistance:e.threePointDepthTestDistance}),this._glyphBillboardCollection._sdf=!0,this._spareBillboards=[],this._textDimensionsCache={},this._labels=[],this._labelsToUpdate=[],this._totalGlyphCount=0,this._highlightColor=U.clone(U.WHITE),this.show=e.show??!0,this.modelMatrix=F.clone(e.modelMatrix??F.IDENTITY),this.debugShowBoundingVolume=e.debugShowBoundingVolume??!1,this.blendOption=e.blendOption??$o.OPAQUE_AND_TRANSLUCENT}Object.defineProperties(Ep.prototype,{length:{get:function(){return this._labels.length}},sizeInBytes:{get:function(){return this._glyphBillboardCollection.sizeInBytes+this._backgroundBillboardCollection.sizeInBytes}},ready:{get:function(){let e=this._backgroundBillboardCollection.get(0);return l(e)&&!e.ready?!1:this._glyphBillboardCollection.ready}},coarseDepthTestDistance:{get:function(){return this._backgroundBillboardCollection.coarseDepthTestDistance},set:function(e){this._backgroundBillboardCollection.coarseDepthTestDistance=e,this._glyphBillboardCollection.coarseDepthTestDistance=e}},threePointDepthTestDistance:{get:function(){return this._backgroundBillboardCollection.threePointDepthTestDistance},set:function(e){this._backgroundBillboardCollection.threePointDepthTestDistance=e,this._glyphBillboardCollection.threePointDepthTestDistance=e}}});Ep.prototype.add=function(e){let t=new D0(e,this);return this._labels.push(t),this._labelsToUpdate.push(t),t};Ep.prototype.remove=function(e){if(l(e)&&e._labelCollection===this){let t=this._labels.indexOf(e);if(t!==-1)return this._labels.splice(t,1),$fe(this,e),!0}return!1};Ep.prototype.removeAll=function(){let e=this._labels;for(let t=0,n=e.length;t<n;++t)$fe(this,e[t]);e.length=0};Ep.prototype.contains=function(e){return l(e)&&e._labelCollection===this};Ep.prototype.get=function(e){return this._labels[e]};Ep.prototype.update=function(e){if(!this.show)return;let t=this._glyphBillboardCollection,n=this._backgroundBillboardCollection;t.modelMatrix=this.modelMatrix,t.debugShowBoundingVolume=this.debugShowBoundingVolume,n.modelMatrix=this.modelMatrix,n.debugShowBoundingVolume=this.debugShowBoundingVolume;let i=this._labelsToUpdate.length;for(let r=0;r<i;++r){let s=this._labelsToUpdate[r];if(s.isDestroyed())continue;let a=s._glyphs.length;s._rebindAllGlyphs&&(b$e(this,s),s._rebindAllGlyphs=!1),s._repositionAllGlyphs&&(C$e(s),s._repositionAllGlyphs=!1);let c=s._glyphs.length-a;this._totalGlyphCount+=c}let o=n.length>0?$o.TRANSLUCENT:this.blendOption;t.blendOption=o,n.blendOption=o,t._highlightColor=this._highlightColor,n._highlightColor=this._highlightColor,this._labelsToUpdate.length=0,n.update(e),t.update(e)};Ep.prototype.isDestroyed=function(){return!1};Ep.prototype.destroy=function(){return this.removeAll(),this._glyphBillboardCollection=this._glyphBillboardCollection.destroy(),this._backgroundBillboardCollection=this._backgroundBillboardCollection.destroy(),he(this)};var Sp=Ep;var Z7n=y(x(),1);var y8n=y(x(),1),$B=`in vec3 position3DHigh;
in vec3 position3DLow;
in vec3 position2DHigh;
in vec3 position2DLow;
in vec3 prevPosition3DHigh;
in vec3 prevPosition3DLow;
in vec3 prevPosition2DHigh;
in vec3 prevPosition2DLow;
in vec3 nextPosition3DHigh;
in vec3 nextPosition3DLow;
in vec3 nextPosition2DHigh;
in vec3 nextPosition2DLow;
in vec4 texCoordExpandAndBatchIndex;
out vec2 v_st;
out float v_width;
out vec4 v_pickColor;
out float v_polylineAngle;
void main()
{
float texCoord = texCoordExpandAndBatchIndex.x;
float expandDir = texCoordExpandAndBatchIndex.y;
bool usePrev = texCoordExpandAndBatchIndex.z < 0.0;
float batchTableIndex = texCoordExpandAndBatchIndex.w;
vec2 widthAndShow = batchTable_getWidthAndShow(batchTableIndex);
float width = widthAndShow.x + 0.5;
float show = widthAndShow.y;
if (width < 1.0)
{
show = 0.0;
}
vec4 pickColor = batchTable_getPickColor(batchTableIndex);
vec4 p, prev, next;
if (czm_morphTime == 1.0)
{
p = czm_translateRelativeToEye(position3DHigh.xyz, position3DLow.xyz);
prev = czm_translateRelativeToEye(prevPosition3DHigh.xyz, prevPosition3DLow.xyz);
next = czm_translateRelativeToEye(nextPosition3DHigh.xyz, nextPosition3DLow.xyz);
}
else if (czm_morphTime == 0.0)
{
p = czm_translateRelativeToEye(position2DHigh.zxy, position2DLow.zxy);
prev = czm_translateRelativeToEye(prevPosition2DHigh.zxy, prevPosition2DLow.zxy);
next = czm_translateRelativeToEye(nextPosition2DHigh.zxy, nextPosition2DLow.zxy);
}
else
{
p = czm_columbusViewMorph(
czm_translateRelativeToEye(position2DHigh.zxy, position2DLow.zxy),
czm_translateRelativeToEye(position3DHigh.xyz, position3DLow.xyz),
czm_morphTime);
prev = czm_columbusViewMorph(
czm_translateRelativeToEye(prevPosition2DHigh.zxy, prevPosition2DLow.zxy),
czm_translateRelativeToEye(prevPosition3DHigh.xyz, prevPosition3DLow.xyz),
czm_morphTime);
next = czm_columbusViewMorph(
czm_translateRelativeToEye(nextPosition2DHigh.zxy, nextPosition2DLow.zxy),
czm_translateRelativeToEye(nextPosition3DHigh.xyz, nextPosition3DLow.xyz),
czm_morphTime);
}
#ifdef DISTANCE_DISPLAY_CONDITION
vec3 centerHigh = batchTable_getCenterHigh(batchTableIndex);
vec4 centerLowAndRadius = batchTable_getCenterLowAndRadius(batchTableIndex);
vec3 centerLow = centerLowAndRadius.xyz;
float radius = centerLowAndRadius.w;
vec2 distanceDisplayCondition = batchTable_getDistanceDisplayCondition(batchTableIndex);
float lengthSq;
if (czm_sceneMode == czm_sceneMode2D)
{
lengthSq = czm_eyeHeight2D.y;
}
else
{
vec4 center = czm_translateRelativeToEye(centerHigh.xyz, centerLow.xyz);
lengthSq = max(0.0, dot(center.xyz, center.xyz) - radius * radius);
}
float nearSq = distanceDisplayCondition.x * distanceDisplayCondition.x;
float farSq = distanceDisplayCondition.y * distanceDisplayCondition.y;
if (lengthSq < nearSq || lengthSq > farSq)
{
show = 0.0;
}
#endif
float polylineAngle;
vec4 positionWC = getPolylineWindowCoordinates(p, prev, next, expandDir, width, usePrev, polylineAngle);
gl_Position = czm_viewportOrthographic * positionWC * show;
v_st.s = texCoord;
v_st.t = czm_writeNonPerspective(clamp(expandDir, 0.0, 1.0), gl_Position.w);
v_width = width;
v_pickColor = pickColor;
v_polylineAngle = polylineAngle;
}
`;var D8n=y(x(),1);var L8n=y(x(),1);var Ql={};Ql.numberOfPoints=function(e,t,n){let i=m.distance(e,t);return Math.ceil(i/n)};Ql.numberOfPointsRhumbLine=function(e,t,n){let i=Math.pow(e.longitude-t.longitude,2)+Math.pow(e.latitude-t.latitude,2);return Math.max(1,Math.ceil(Math.sqrt(i/(n*n))))};var T$e=new Ae;Ql.extractHeights=function(e,t){let n=e.length,i=new Array(n);for(let o=0;o<n;o++){let r=e[o];i[o]=t.cartesianToCartographic(r,T$e).height}return i};var E$e=new F,S$e=new m,epe=new m,_$e=new dn(m.UNIT_X,0),tpe=new m,I$e=new dn(m.UNIT_X,0),Z$e=new m,R$e=new m,T4=[];function ipe(e,t,n){let i=T4;i.length=e;let o;if(t===n){for(o=0;o<e;o++)i[o]=t;return i}let s=(n-t)/e;for(o=0;o<e;o++){let a=t+o*s;i[o]=a}return i}var b9=new Ae,g9=new Ae,k0=new m,E4=new m,V$e=new m,C4=new NA,ew=new Sc;function G$e(e,t,n,i,o,r,s,a){let c=i.scaleToGeodeticSurface(e,E4),d=i.scaleToGeodeticSurface(t,V$e),u=Ql.numberOfPoints(e,t,n),h=i.cartesianToCartographic(c,b9),p=i.cartesianToCartographic(d,g9),A=ipe(u,o,r);C4.setEndPoints(h,p);let f=C4.surfaceDistance/u,b=a;h.height=o;let C=i.cartographicToCartesian(h,k0);m.pack(C,s,b),b+=3;for(let T=1;T<u;T++){let E=C4.interpolateUsingSurfaceDistance(T*f,g9);E.height=A[T],C=i.cartographicToCartesian(E,k0),m.pack(C,s,b),b+=3}return b}function L$e(e,t,n,i,o,r,s,a){let c=i.cartesianToCartographic(e,b9),d=i.cartesianToCartographic(t,g9),u=Ql.numberOfPointsRhumbLine(c,d,n);c.height=0,d.height=0;let h=ipe(u,o,r);ew.ellipsoid.equals(i)||(ew=new Sc(void 0,void 0,i)),ew.setEndPoints(c,d);let p=ew.surfaceDistance/u,A=a;c.height=o;let f=i.cartographicToCartesian(c,k0);m.pack(f,s,A),A+=3;for(let b=1;b<u;b++){let C=ew.interpolateUsingSurfaceDistance(b*p,g9);C.height=h[b],f=i.cartographicToCartesian(C,k0),m.pack(f,s,A),A+=3}return A}Ql.wrapLongitude=function(e,t){let n=[],i=[];if(l(e)&&e.length>0){t=t??F.IDENTITY;let o=F.inverseTransformation(t,E$e),r=F.multiplyByPoint(o,m.ZERO,S$e),s=m.normalize(F.multiplyByPointAsVector(o,m.UNIT_Y,epe),epe),a=dn.fromPointNormal(r,s,_$e),c=m.normalize(F.multiplyByPointAsVector(o,m.UNIT_X,tpe),tpe),d=dn.fromPointNormal(r,c,I$e),u=1;n.push(m.clone(e[0]));let h=n[0],p=e.length;for(let A=1;A<p;++A){let f=e[A];if(dn.getPointDistance(d,h)<0||dn.getPointDistance(d,f)<0){let b=hi.lineSegmentPlane(h,f,a,Z$e);if(l(b)){let C=m.multiplyByScalar(s,5e-9,R$e);dn.getPointDistance(a,h)<0&&m.negate(C,C),n.push(m.add(b,C,new m)),i.push(u+1),m.negate(C,C),n.push(m.add(b,C,new m)),u=1}}n.push(m.clone(e[A])),u++,h=f}i.push(u)}return{positions:n,lengths:i}};Ql.generateArc=function(e){l(e)||(e={});let t=e.positions,n=t.length,i=e.ellipsoid??ie.default,o=e.height??0,r=Array.isArray(o);if(n<1)return[];if(n===1){let b=i.scaleToGeodeticSurface(t[0],E4);if(o=r?o[0]:o,o!==0){let C=i.geodeticSurfaceNormal(b,k0);m.multiplyByScalar(C,o,C),m.add(b,C,b)}return[b.x,b.y,b.z]}let s=e.minDistance;if(!l(s)){let b=e.granularity??L.RADIANS_PER_DEGREE;s=L.chordLength(b,i.maximumRadius)}let a=0,c;for(c=0;c<n-1;c++)a+=Ql.numberOfPoints(t[c],t[c+1],s);let d=(a+1)*3,u=new Array(d),h=0;for(c=0;c<n-1;c++){let b=t[c],C=t[c+1],T=r?o[c]:o,E=r?o[c+1]:o;h=G$e(b,C,s,i,T,E,u,h)}T4.length=0;let p=t[n-1],A=i.cartesianToCartographic(p,b9);A.height=r?o[n-1]:o;let f=i.cartographicToCartesian(A,k0);return m.pack(f,u,d-3),u};var npe=new Ae,W$e=new Ae;Ql.generateRhumbArc=function(e){l(e)||(e={});let t=e.positions,n=t.length,i=e.ellipsoid??ie.default,o=e.height??0,r=Array.isArray(o);if(n<1)return[];if(n===1){let T=i.scaleToGeodeticSurface(t[0],E4);if(o=r?o[0]:o,o!==0){let E=i.geodeticSurfaceNormal(T,k0);m.multiplyByScalar(E,o,E),m.add(T,E,T)}return[T.x,T.y,T.z]}let s=e.granularity??L.RADIANS_PER_DEGREE,a=0,c,d=i.cartesianToCartographic(t[0],npe),u;for(c=0;c<n-1;c++)u=i.cartesianToCartographic(t[c+1],W$e),a+=Ql.numberOfPointsRhumbLine(d,u,s),d=Ae.clone(u,npe);let h=(a+1)*3,p=new Array(h),A=0;for(c=0;c<n-1;c++){let T=t[c],E=t[c+1],S=r?o[c]:o,I=r?o[c+1]:o;A=L$e(T,E,s,i,S,I,p,A)}T4.length=0;let f=t[n-1],b=i.cartesianToCartographic(f,b9);b.height=r?o[n-1]:o;let C=i.cartographicToCartesian(b,k0);return m.pack(C,p,h-3),p};Ql.generateCartesianArc=function(e){let t=Ql.generateArc(e),n=t.length/3,i=new Array(n);for(let o=0;o<n;o++)i[o]=m.unpack(t,o*3);return i};Ql.generateCartesianRhumbArc=function(e){let t=Ql.generateRhumbArc(e),n=t.length/3,i=new Array(n);for(let o=0;o<n;o++)i[o]=m.unpack(t,o*3);return i};var Ji=Ql;function xu(e,t){e=e??Q.EMPTY_OBJECT,this._show=e.show??!0,this._width=e.width??1,this._loop=e.loop??!1,this._distanceDisplayCondition=e.distanceDisplayCondition,this._material=e.material,l(this._material)||(this._material=Oi.fromType(Oi.ColorType,{color:new U(1,1,1,1)}));let n=e.positions;l(n)||(n=[]),this._positions=n,this._actualPositions=Uo(n,m.equalsEpsilon),this._loop&&this._actualPositions.length>2&&(this._actualPositions===this._positions&&(this._actualPositions=n.slice()),this._actualPositions.push(m.clone(this._actualPositions[0]))),this._length=this._actualPositions.length,this._id=e.id;let i;l(t)&&(i=F.clone(t.modelMatrix)),this._modelMatrix=i,this._segments=Ji.wrapLongitude(this._actualPositions,i),this._actualLength=void 0,this._propertiesChanged=new Uint32Array(rpe),this._polylineCollection=t,this._dirty=!1,this._pickId=void 0,this._boundingVolume=ue.fromPoints(this._actualPositions),this._boundingVolumeWC=ue.transform(this._boundingVolume,this._modelMatrix),this._boundingVolume2D=new ue}var ope=xu.POSITION_INDEX=0,F$e=xu.SHOW_INDEX=1,B$e=xu.WIDTH_INDEX=2,w$e=xu.MATERIAL_INDEX=3,tw=xu.POSITION_SIZE_INDEX=4,N$e=xu.DISTANCE_DISPLAY_CONDITION=5,rpe=xu.NUMBER_OF_PROPERTIES=6;function Tg(e,t){++e._propertiesChanged[t];let n=e._polylineCollection;l(n)&&(n._updatePolyline(e,t),e._dirty=!0)}Object.defineProperties(xu.prototype,{show:{get:function(){return this._show},set:function(e){e!==this._show&&(this._show=e,Tg(this,F$e))}},positions:{get:function(){return this._positions},set:function(e){let t=Uo(e,m.equalsEpsilon);this._loop&&t.length>2&&(t===e&&(t=e.slice()),t.push(m.clone(t[0]))),(this._actualPositions.length!==t.length||this._actualPositions.length!==this._length)&&Tg(this,tw),this._positions=e,this._actualPositions=t,this._length=t.length,this._boundingVolume=ue.fromPoints(this._actualPositions,this._boundingVolume),this._boundingVolumeWC=ue.transform(this._boundingVolume,this._modelMatrix,this._boundingVolumeWC),Tg(this,ope),this.update()}},material:{get:function(){return this._material},set:function(e){this._material!==e&&(this._material=e,Tg(this,w$e))}},width:{get:function(){return this._width},set:function(e){let t=this._width;e!==t&&(this._width=e,Tg(this,B$e))}},loop:{get:function(){return this._loop},set:function(e){if(e!==this._loop){let t=this._actualPositions;e?t.length>2&&!m.equals(t[0],t[t.length-1])&&(t.length===this._positions.length&&(this._actualPositions=t=this._positions.slice()),t.push(m.clone(t[0]))):t.length>2&&m.equals(t[0],t[t.length-1])&&(t.length-1===this._positions.length?this._actualPositions=this._positions:t.pop()),this._loop=e,Tg(this,tw)}}},id:{get:function(){return this._id},set:function(e){this._id=e,l(this._pickId)&&(this._pickId.object.id=e)}},pickId:{get:function(){return this._pickId}},isDestroyed:{get:function(){return!l(this._polylineCollection)}},distanceDisplayCondition:{get:function(){return this._distanceDisplayCondition},set:function(e){Dt.equals(e,this._distanceDisplayCondition)||(this._distanceDisplayCondition=Dt.clone(e,this._distanceDisplayCondition),Tg(this,N$e))}}});xu.prototype.update=function(){let e=F.IDENTITY;l(this._polylineCollection)&&(e=this._polylineCollection.modelMatrix);let t=this._segments.positions.length,n=this._segments.lengths,i=this._propertiesChanged[ope]>0||this._propertiesChanged[tw]>0;if((!F.equals(e,this._modelMatrix)||i)&&(this._segments=Ji.wrapLongitude(this._actualPositions,e),this._boundingVolumeWC=ue.transform(this._boundingVolume,e,this._boundingVolumeWC)),this._modelMatrix=F.clone(e,this._modelMatrix),this._segments.positions.length!==t)Tg(this,tw);else{let o=n.length;for(let r=0;r<o;++r)if(n[r]!==this._segments.lengths[r]){Tg(this,tw);break}}};xu.prototype.getPickId=function(e){return l(this._pickId)||(this._pickId=e.createPickId({primitive:this,collection:this._polylineCollection,id:this._id})),this._pickId};xu.prototype._clean=function(){this._dirty=!1;let e=this._propertiesChanged;for(let t=0;t<rpe-1;++t)e[t]=0};xu.prototype._destroy=function(){this._pickId=this._pickId&&this._pickId.destroy(),this._material=this._material&&this._material.destroy(),this._polylineCollection=void 0};var Lm=xu;var P$e=Lm.SHOW_INDEX,X$e=Lm.WIDTH_INDEX,_4=Lm.POSITION_INDEX,Y$e=Lm.MATERIAL_INDEX,spe=Lm.POSITION_SIZE_INDEX,M$e=Lm.DISTANCE_DISPLAY_CONDITION,hpe=Lm.NUMBER_OF_PROPERTIES,Rd={texCoordExpandAndBatchIndex:0,position3DHigh:1,position3DLow:2,position2DHigh:3,position2DLow:4,prevPosition3DHigh:5,prevPosition3DLow:6,prevPosition2DHigh:7,prevPosition2DLow:8,nextPosition3DHigh:9,nextPosition3DLow:10,nextPosition2DHigh:11,nextPosition2DLow:12};function tf(e){e=e??Q.EMPTY_OBJECT,this.show=e.show??!0,this.modelMatrix=F.clone(e.modelMatrix??F.IDENTITY),this._modelMatrix=F.clone(F.IDENTITY),this.debugShowBoundingVolume=e.debugShowBoundingVolume??!1,this._opaqueRS=void 0,this._translucentRS=void 0,this._colorCommands=[],this._polylinesUpdated=!1,this._polylinesRemoved=!1,this._createVertexArray=!1,this._propertiesChanged=new Uint32Array(hpe),this._polylines=[],this._polylineBuckets={},this._positionBufferUsage={bufferUsage:Be.STATIC_DRAW,frameCount:0},this._mode=void 0,this._polylinesToUpdate=[],this._vertexArrays=[],this._positionBuffer=void 0,this._texCoordExpandAndBatchIndexBuffer=void 0,this._batchTable=void 0,this._createBatchTable=!1,this._useHighlightColor=!1,this._highlightColor=U.clone(U.WHITE);let t=this;this._uniformMap={u_highlightColor:function(){return t._highlightColor}}}Object.defineProperties(tf.prototype,{length:{get:function(){return I4(this),this._polylines.length}}});tf.prototype.add=function(e){let t=new Lm(e,this);return t._index=this._polylines.length,this._polylines.push(t),this._createVertexArray=!0,this._createBatchTable=!0,t};tf.prototype.remove=function(e){if(this.contains(e)){if(this._polylinesRemoved=!0,this._createVertexArray=!0,this._createBatchTable=!0,l(e._bucket)){let t=e._bucket;t.shaderProgram=t.shaderProgram&&t.shaderProgram.destroy()}return e._destroy(),!0}return!1};tf.prototype.removeAll=function(){Z4(this),bpe(this),this._polylineBuckets={},this._polylinesRemoved=!1,this._polylines.length=0,this._polylinesToUpdate.length=0,this._createVertexArray=!0};tf.prototype.contains=function(e){return l(e)&&e._polylineCollection===this};tf.prototype.get=function(e){return I4(this),this._polylines[e]};function v$e(e,t){l(e._batchTable)&&e._batchTable.destroy();let n=[{functionName:"batchTable_getWidthAndShow",componentDatatype:H.UNSIGNED_BYTE,componentsPerAttribute:2},{functionName:"batchTable_getPickColor",componentDatatype:H.UNSIGNED_BYTE,componentsPerAttribute:4,normalize:!0},{functionName:"batchTable_getCenterHigh",componentDatatype:H.FLOAT,componentsPerAttribute:3},{functionName:"batchTable_getCenterLowAndRadius",componentDatatype:H.FLOAT,componentsPerAttribute:4},{functionName:"batchTable_getDistanceDisplayCondition",componentDatatype:H.FLOAT,componentsPerAttribute:2}];e._batchTable=new wx(t,n,e._polylines.length)}var fpe=new In,ppe=new re,Ape=new M;tf.prototype.update=function(e){if(I4(this),this._polylines.length===0||!this.show)return;z$e(this,e);let t=e.context,n=e.mapProjection,i,o=this._propertiesChanged;if(this._createBatchTable){if(Bt.maximumVertexTextureImageUnits===0)throw new me("Vertex texture fetch support is required to render polylines. The maximum number of vertex texture image units must be greater than zero.");v$e(this,t),this._createBatchTable=!1}if(this._createVertexArray||D$e(this))lpe(this,t,n);else if(this._polylinesUpdated){let c=this._polylinesToUpdate;if(this._mode!==se.SCENE3D){let d=c.length;for(let u=0;u<d;++u)i=c[u],i.update()}if(o[spe]||o[Y$e])lpe(this,t,n);else{let d=c.length,u=this._polylineBuckets;for(let h=0;h<d;++h){i=c[h],o=i._propertiesChanged;let p=i._bucket,A=0;for(let f in u)if(u.hasOwnProperty(f)){if(u[f]===p){o[_4]&&p.writeUpdate(A,i,this._positionBuffer,n);break}A+=u[f].lengthOfPositions}if((o[P$e]||o[X$e])&&this._batchTable.setBatchedAttribute(i._index,0,new M(i._width,i._show)),this._batchTable.attributes.length>2){if(o[_4]||o[spe]){let f=e.mode===se.SCENE2D?i._boundingVolume2D:i._boundingVolumeWC,b=In.fromCartesian(f.center,fpe),C=re.fromElements(b.low.x,b.low.y,b.low.z,f.radius,ppe);this._batchTable.setBatchedAttribute(i._index,2,b.high),this._batchTable.setBatchedAttribute(i._index,3,C)}if(o[M$e]){let f=Ape;f.x=0,f.y=Number.MAX_VALUE;let b=i.distanceDisplayCondition;l(b)&&(f.x=b.near,f.y=b.far),this._batchTable.setBatchedAttribute(i._index,4,f)}}i._clean()}}c.length=0,this._polylinesUpdated=!1}o=this._propertiesChanged;for(let c=0;c<hpe;++c)o[c]=0;let r=F.IDENTITY;e.mode===se.SCENE3D&&(r=this.modelMatrix);let s=e.passes,a=e.morphTime!==0;if((!l(this._opaqueRS)||this._opaqueRS.depthTest.enabled!==a)&&(this._opaqueRS=Qe.fromCache({depthMask:a,depthTest:{enabled:a}})),(!l(this._translucentRS)||this._translucentRS.depthTest.enabled!==a)&&(this._translucentRS=Qe.fromCache({blending:ln.ALPHA_BLEND,depthMask:!a,depthTest:{enabled:a}})),this._batchTable.update(e),s.render||s.pick){let c=this._colorCommands;U$e(this,e,c,r)}};var nw=new ue,ape=new ue;function U$e(e,t,n,i){let o=t.context,r=t.commandList,s=n.length,a=0,c=!0,d=e._vertexArrays,u=e.debugShowBoundingVolume,p=e._batchTable.getUniformMapCallback(),A=d.length;for(let f=0;f<A;++f){let b=d[f],C=b.buckets,T=C.length;for(let E=0;E<T;++E){let S=C[E],I=S.offset,R=S.bucket.shaderProgram,V=S.bucket.polylines,W=V.length,B,N,P=0,g,_;for(let Z=0;Z<W;++Z){let G=V[Z],w=Q$e(G._material);if(w!==B){if(l(B)&&P>0){let D=N.isTranslucent();a>=s?(g=new ot({owner:e}),n.push(g)):g=n[a],++a,_=Ft(p(N._uniforms),e._uniformMap),g.boundingVolume=ue.clone(nw,g.boundingVolume),g.modelMatrix=i,g.shaderProgram=R,g.vertexArray=b.va,g.renderState=D?e._translucentRS:e._opaqueRS,g.pass=D?Ge.TRANSLUCENT:Ge.OPAQUE,g.debugShowBoundingVolume=u,g.pickId="v_pickColor",g.uniformMap=_,g.count=P,g.offset=I,I+=P,P=0,c=!0,r.push(g)}N=G._material,N.update(o),B=w}let X=G._locatorBuckets,k=X.length;for(let D=0;D<k;++D){let Y=X[D];Y.locator===S&&(P+=Y.count)}let v;t.mode===se.SCENE3D?v=G._boundingVolumeWC:t.mode===se.COLUMBUS_VIEW?v=G._boundingVolume2D:t.mode===se.SCENE2D?l(G._boundingVolume2D)&&(v=ue.clone(G._boundingVolume2D,ape),v.center.x=0):l(G._boundingVolumeWC)&&l(G._boundingVolume2D)&&(v=ue.union(G._boundingVolumeWC,G._boundingVolume2D,ape)),c?(c=!1,ue.clone(v,nw)):ue.union(v,nw,nw)}l(B)&&P>0&&(a>=s?(g=new ot({owner:e}),n.push(g)):g=n[a],++a,_=Ft(p(N._uniforms),e._uniformMap),g.boundingVolume=ue.clone(nw,g.boundingVolume),g.modelMatrix=i,g.shaderProgram=R,g.vertexArray=b.va,g.renderState=N.isTranslucent()?e._translucentRS:e._opaqueRS,g.pass=N.isTranslucent()?Ge.TRANSLUCENT:Ge.OPAQUE,g.debugShowBoundingVolume=u,g.pickId="v_pickColor",g.uniformMap=_,g.count=P,g.offset=I,c=!0,r.push(g)),B=void 0}}n.length=a}tf.prototype.isDestroyed=function(){return!1};tf.prototype.destroy=function(){return gpe(this),Z4(this),bpe(this),this._batchTable=this._batchTable&&this._batchTable.destroy(),he(this)};function D$e(e){let t=!1,n=e._propertiesChanged,i=e._positionBufferUsage;return n[_4]?(i.bufferUsage!==Be.STREAM_DRAW&&(t=!0,i.bufferUsage=Be.STREAM_DRAW),i.frameCount=100):i.bufferUsage!==Be.STATIC_DRAW&&(i.frameCount===0?(t=!0,i.bufferUsage=Be.STATIC_DRAW):i.frameCount--),t}var cpe=[0,0,0];function lpe(e,t,n){e._createVertexArray=!1,Z4(e),gpe(e),O$e(e);let i=[[]],o=i[0],r=e._batchTable,s=e._useHighlightColor,a=[0],c=0,d=[[]],u=0,h=e._polylineBuckets,p,A;for(p in h)h.hasOwnProperty(p)&&(A=h[p],A.updateShader(t,r,s),u+=A.lengthOfPositions);if(u>0){let f=e._mode,b=new Float32Array(6*u*3),C=new Float32Array(u*4),T,E=0,S=0,I=0;for(p in h)if(h.hasOwnProperty(p)){A=h[p],A.write(b,C,E,S,I,r,t,n),f===se.MORPHING&&(l(T)||(T=new Float32Array(6*u*3)),A.writeForMorph(T,E));let _=A.lengthOfPositions;E+=6*_*3,S+=_*4,I+=_*4,c=A.updateIndices(i,a,d,c)}let R=e._positionBufferUsage.bufferUsage,V=Be.STATIC_DRAW;e._positionBuffer=it.createVertexBuffer({context:t,typedArray:b,usage:R});let W;l(T)&&(W=it.createVertexBuffer({context:t,typedArray:T,usage:R})),e._texCoordExpandAndBatchIndexBuffer=it.createVertexBuffer({context:t,typedArray:C,usage:V});let B=3*Float32Array.BYTES_PER_ELEMENT,N=4*Float32Array.BYTES_PER_ELEMENT,P=0,g=i.length;for(let _=0;_<g;++_)if(o=i[_],o.length>0){let Z=new Uint16Array(o),G=it.createIndexBuffer({context:t,typedArray:Z,usage:Be.STATIC_DRAW,indexDatatype:Ue.UNSIGNED_SHORT});P+=a[_];let w=6*(_*(B*L.SIXTY_FOUR_KILOBYTES)-P*B),X=B+w,k=B+X,v=B+k,D=B+v,Y=B+D,O=_*(N*L.SIXTY_FOUR_KILOBYTES)-P*N,J=[{index:Rd.position3DHigh,componentsPerAttribute:3,componentDatatype:H.FLOAT,offsetInBytes:w,strideInBytes:6*B},{index:Rd.position3DLow,componentsPerAttribute:3,componentDatatype:H.FLOAT,offsetInBytes:X,strideInBytes:6*B},{index:Rd.position2DHigh,componentsPerAttribute:3,componentDatatype:H.FLOAT,offsetInBytes:w,strideInBytes:6*B},{index:Rd.position2DLow,componentsPerAttribute:3,componentDatatype:H.FLOAT,offsetInBytes:X,strideInBytes:6*B},{index:Rd.prevPosition3DHigh,componentsPerAttribute:3,componentDatatype:H.FLOAT,offsetInBytes:k,strideInBytes:6*B},{index:Rd.prevPosition3DLow,componentsPerAttribute:3,componentDatatype:H.FLOAT,offsetInBytes:v,strideInBytes:6*B},{index:Rd.prevPosition2DHigh,componentsPerAttribute:3,componentDatatype:H.FLOAT,offsetInBytes:k,strideInBytes:6*B},{index:Rd.prevPosition2DLow,componentsPerAttribute:3,componentDatatype:H.FLOAT,offsetInBytes:v,strideInBytes:6*B},{index:Rd.nextPosition3DHigh,componentsPerAttribute:3,componentDatatype:H.FLOAT,offsetInBytes:D,strideInBytes:6*B},{index:Rd.nextPosition3DLow,componentsPerAttribute:3,componentDatatype:H.FLOAT,offsetInBytes:Y,strideInBytes:6*B},{index:Rd.nextPosition2DHigh,componentsPerAttribute:3,componentDatatype:H.FLOAT,offsetInBytes:D,strideInBytes:6*B},{index:Rd.nextPosition2DLow,componentsPerAttribute:3,componentDatatype:H.FLOAT,offsetInBytes:Y,strideInBytes:6*B},{index:Rd.texCoordExpandAndBatchIndex,componentsPerAttribute:4,componentDatatype:H.FLOAT,vertexBuffer:e._texCoordExpandAndBatchIndexBuffer,offsetInBytes:O}],te,z,j,ee;f===se.SCENE3D?(z=e._positionBuffer,te="vertexBuffer",j=cpe,ee="value"):f===se.SCENE2D||f===se.COLUMBUS_VIEW?(z=cpe,te="value",j=e._positionBuffer,ee="vertexBuffer"):(z=W,te="vertexBuffer",j=e._positionBuffer,ee="vertexBuffer"),J[0][te]=z,J[1][te]=z,J[2][ee]=j,J[3][ee]=j,J[4][te]=z,J[5][te]=z,J[6][ee]=j,J[7][ee]=j,J[8][te]=z,J[9][te]=z,J[10][ee]=j,J[11][ee]=j;let ge=new kn({context:t,attributes:J,indexBuffer:G});e._vertexArrays.push({va:ge,buckets:d[_]})}}}function k$e(e,t){return t instanceof Lt?t.id:t}var y9=[];function Q$e(e){let t=Oi._uniformList[e.type],n=t.length;y9.length=2*n;let i=0;for(let o=0;o<n;++o){let r=t[o];y9[i]=r,y9[i+1]=e._uniforms[r](),i+=2}return`${e.type}:${JSON.stringify(y9,k$e)}`}function O$e(e){let t=e._mode,n=e._modelMatrix,i=e._polylineBuckets={},o=e._polylines,r=o.length;for(let s=0;s<r;++s){let a=o[s];if(a._actualPositions.length>1){a.update();let c=a.material,d=i[c.type];l(d)||(d=i[c.type]=new _p(c,t,n)),d.addPolyline(a)}}}function z$e(e,t){let n=t.mode;(e._mode!==n||!F.equals(e._modelMatrix,e.modelMatrix))&&(e._mode=n,e._modelMatrix=F.clone(e.modelMatrix),e._createVertexArray=!0)}function I4(e){if(e._polylinesRemoved){e._polylinesRemoved=!1;let t=[],n=[],i=0,o,r=e._polylines.length;for(let s=0;s<r;++s)o=e._polylines[s],o.isDestroyed||(o._index=i++,n.push(o),t.push(o));e._polylines=t,e._polylinesToUpdate=n}}function Z4(e){let t=e._polylines,n=t.length;for(let i=0;i<n;++i)if(!t[i].isDestroyed){let o=t[i]._bucket;l(o)&&(o.shaderProgram=o.shaderProgram&&o.shaderProgram.destroy())}}function gpe(e){let t=e._vertexArrays.length;for(let n=0;n<t;++n)e._vertexArrays[n].va.destroy();e._vertexArrays.length=0}tf.prototype._updatePolyline=function(e,t){this._polylinesUpdated=!0,e._dirty||this._polylinesToUpdate.push(e),++this._propertiesChanged[t]};function bpe(e){let t=e._polylines,n=t.length;for(let i=0;i<n;++i)t[i].isDestroyed||t[i]._destroy()}function S4(e,t,n){this.count=e,this.offset=t,this.bucket=n}function _p(e,t,n){this.polylines=[],this.lengthOfPositions=0,this.material=e,this.shaderProgram=void 0,this.mode=t,this.modelMatrix=n}_p.prototype.addPolyline=function(e){this.polylines.push(e),e._actualLength=this.getPolylinePositionsLength(e),this.lengthOfPositions+=e._actualLength,e._bucket=this};_p.prototype.updateShader=function(e,t,n){if(l(this.shaderProgram))return;let i=["DISTANCE_DISPLAY_CONDITION"];n&&i.push("VECTOR_TILE"),this.material.shaderSource.search(/in\s+float\s+v_polylineAngle;/g)!==-1&&i.push("POLYLINE_DASH"),i.push("CLIP_POLYLINE");let o=new ze({defines:i,sources:[`in vec4 v_pickColor;
`,this.material.shaderSource,vx]}),r=t.getVertexShaderCallback()($B),s=new ze({defines:i,sources:[Zl,r]});this.shaderProgram=tn.fromCache({context:e,vertexShaderSource:s,fragmentShaderSource:o,attributeLocations:Rd})};function ype(e){return m.dot(m.UNIT_X,e._boundingVolume.center)<0||e._boundingVolume.intersectPlane(dn.ORIGIN_ZX_PLANE)===qt.INTERSECTING}_p.prototype.getPolylinePositionsLength=function(e){let t;if(this.mode===se.SCENE3D||!ype(e))return t=e._actualPositions.length,t*4-4;let n=0,i=e._segments.lengths;t=i.length;for(let o=0;o<t;++o)n+=i[o]*4-4;return n};var ma=new m,Wm=new m,Fm=new m,x9=new m,H$e=new re,J$e=new M;_p.prototype.write=function(e,t,n,i,o,r,s,a){let c=this.mode,d=a.ellipsoid.maximumRadius*L.PI,u=this.polylines,h=u.length;for(let p=0;p<h;++p){let A=u[p],f=A.width,b=A.show&&f>0,C=A._index,T=this.getSegments(A,a),E=T.positions,S=T.lengths,I=E.length,R=A.getPickId(s).color,V=0,W=0,B;for(let k=0;k<I;++k){k===0?A._loop?B=E[I-2]:(B=x9,m.subtract(E[0],E[1],B),m.add(E[0],B,B)):B=E[k-1],m.clone(B,Wm),m.clone(E[k],ma),k===I-1?A._loop?B=E[1]:(B=x9,m.subtract(E[I-1],E[I-2],B),m.add(E[I-1],B,B)):B=E[k+1],m.clone(B,Fm);let v=S[V];k===W+v&&(W+=v,++V);let D=k-W===0,Y=k===W+S[V]-1;c===se.SCENE2D&&(Wm.z=0,ma.z=0,Fm.z=0),(c===se.SCENE2D||c===se.MORPHING)&&(D||Y)&&d-Math.abs(ma.x)<1&&((ma.x<0&&Wm.x>0||ma.x>0&&Wm.x<0)&&m.clone(ma,Wm),(ma.x<0&&Fm.x>0||ma.x>0&&Fm.x<0)&&m.clone(ma,Fm));let O=D?2:0,J=Y?2:4;for(let te=O;te<J;++te){In.writeElements(ma,e,n),In.writeElements(Wm,e,n+6),In.writeElements(Fm,e,n+12);let z=te-2<0?-1:1;t[o]=k/(I-1),t[o+1]=2*(te%2)-1,t[o+2]=z,t[o+3]=C,n+=18,o+=4}}let N=H$e;N.x=U.floatToByte(R.red),N.y=U.floatToByte(R.green),N.z=U.floatToByte(R.blue),N.w=U.floatToByte(R.alpha);let P=J$e;P.x=f,P.y=b?1:0;let g=c===se.SCENE2D?A._boundingVolume2D:A._boundingVolumeWC,_=In.fromCartesian(g.center,fpe),Z=_.high,G=re.fromElements(_.low.x,_.low.y,_.low.z,g.radius,ppe),w=Ape;w.x=0,w.y=Number.MAX_VALUE;let X=A.distanceDisplayCondition;l(X)&&(w.x=X.near,w.y=X.far),r.setBatchedAttribute(C,0,P),r.setBatchedAttribute(C,1,N),r.attributes.length>2&&(r.setBatchedAttribute(C,2,Z),r.setBatchedAttribute(C,3,G),r.setBatchedAttribute(C,4,w))}};var K$e=new m,j$e=new m,q$e=new m,dpe=new m;_p.prototype.writeForMorph=function(e,t){let n=this.modelMatrix,i=this.polylines,o=i.length;for(let r=0;r<o;++r){let s=i[r],a=s._segments.positions,c=s._segments.lengths,d=a.length,u=0,h=0;for(let p=0;p<d;++p){let A;p===0?s._loop?A=a[d-2]:(A=dpe,m.subtract(a[0],a[1],A),m.add(a[0],A,A)):A=a[p-1],A=F.multiplyByPoint(n,A,j$e);let f=F.multiplyByPoint(n,a[p],K$e),b;p===d-1?s._loop?b=a[1]:(b=dpe,m.subtract(a[d-1],a[d-2],b),m.add(a[d-1],b,b)):b=a[p+1],b=F.multiplyByPoint(n,b,q$e);let C=c[u];p===h+C&&(h+=C,++u);let T=p-h===0,E=p===h+c[u]-1,S=T?2:0,I=E?2:4;for(let R=S;R<I;++R)In.writeElements(f,e,t),In.writeElements(A,e,t+6),In.writeElements(b,e,t+12),t+=18}}};var $$e=new Array(1);_p.prototype.updateIndices=function(e,t,n,i){let o=n.length-1,r=new S4(0,i,this);n[o].push(r);let s=0,a=e[e.length-1],c=0;a.length>0&&(c=a[a.length-1]+1);let d=this.polylines,u=d.length;for(let h=0;h<u;++h){let p=d[h];p._locatorBuckets=[];let A;if(this.mode===se.SCENE3D){A=$$e;let b=p._actualPositions.length;if(b>0)A[0]=b;else continue}else A=p._segments.lengths;let f=A.length;if(f>0){let b=0;for(let C=0;C<f;++C){let T=A[C]-1;for(let E=0;E<T;++E)c+4>L.SIXTY_FOUR_KILOBYTES&&(p._locatorBuckets.push({locator:r,count:b}),b=0,t.push(4),a=[],e.push(a),c=0,r.count=s,s=0,i=0,r=new S4(0,0,this),n[++o]=[r]),a.push(c,c+2,c+1),a.push(c+1,c+2,c+3),b+=6,s+=6,i+=6,c+=4}p._locatorBuckets.push({locator:r,count:b}),c+4>L.SIXTY_FOUR_KILOBYTES&&(t.push(0),a=[],e.push(a),c=0,r.count=s,i=0,s=0,r=new S4(0,0,this),n[++o]=[r])}p._clean()}return r.count=s,i};_p.prototype.getPolylineStartIndex=function(e){let t=this.polylines,n=0,i=t.length;for(let o=0;o<i;++o){let r=t[o];if(r===e)break;n+=r._actualLength}return n};var k_={positions:void 0,lengths:void 0},upe=new Array(1),eet=new m,tet=new Ae;_p.prototype.getSegments=function(e,t){let n=e._actualPositions;if(this.mode===se.SCENE3D)return upe[0]=n.length,k_.positions=n,k_.lengths=upe,k_;ype(e)&&(n=e._segments.positions);let i=t.ellipsoid,o=[],r=this.modelMatrix,s=n.length,a,c=eet;for(let d=0;d<s;++d)a=n[d],c=F.multiplyByPoint(r,a,c),o.push(t.project(i.cartesianToCartographic(c,tet)));if(o.length>0){e._boundingVolume2D=ue.fromPoints(o,e._boundingVolume2D);let d=e._boundingVolume2D.center;e._boundingVolume2D.center=new m(d.z,d.x,d.y)}return k_.positions=o,k_.lengths=e._segments.lengths,k_};var mpe;_p.prototype.writeUpdate=function(e,t,n,i){let o=this.mode,r=i.ellipsoid.maximumRadius*L.PI,s=t._actualLength;if(s){e+=this.getPolylineStartIndex(t);let a=mpe,c=6*s*3;!l(a)||a.length<c?a=mpe=new Float32Array(c):a.length>c&&(a=new Float32Array(a.buffer,0,c));let d=this.getSegments(t,i),u=d.positions,h=d.lengths,p=0,A=0,f=0,b;s=u.length;for(let C=0;C<s;++C){C===0?t._loop?b=u[s-2]:(b=x9,m.subtract(u[0],u[1],b),m.add(u[0],b,b)):b=u[C-1],m.clone(b,Wm),m.clone(u[C],ma),C===s-1?t._loop?b=u[1]:(b=x9,m.subtract(u[s-1],u[s-2],b),m.add(u[s-1],b,b)):b=u[C+1],m.clone(b,Fm);let T=h[A];C===f+T&&(f+=T,++A);let E=C-f===0,S=C===f+h[A]-1;o===se.SCENE2D&&(Wm.z=0,ma.z=0,Fm.z=0),(o===se.SCENE2D||o===se.MORPHING)&&(E||S)&&r-Math.abs(ma.x)<1&&((ma.x<0&&Wm.x>0||ma.x>0&&Wm.x<0)&&m.clone(ma,Wm),(ma.x<0&&Fm.x>0||ma.x>0&&Fm.x<0)&&m.clone(ma,Fm));let I=E?2:0,R=S?2:4;for(let V=I;V<R;++V)In.writeElements(ma,a,p),In.writeElements(Wm,a,p+6),In.writeElements(Fm,a,p+12),p+=18}n.copyFromArrayView(a,18*Float32Array.BYTES_PER_ELEMENT*e)}};var nf=tf;function Q0(e){this._positions=e.positions,this._batchTable=e.batchTable,this._batchIds=e.batchIds,this._rectangle=e.rectangle,this._minHeight=e.minimumHeight,this._maxHeight=e.maximumHeight,this._heightReference=e.heightReference,this._billboardCollection=new yu({batchTable:e.batchTable,scene:e.scene}),this._labelCollection=new Sp({batchTable:e.batchTable,scene:e.scene}),this._polylineCollection=new nf,this._polylineCollection._useHighlightColor=!0,this._packedBuffer=void 0,this._ready=!1,this._promise=void 0,this._error=void 0}Object.defineProperties(Q0.prototype,{ready:{get:function(){return this._ready}},pointsLength:{get:function(){return this._billboardCollection.length}},texturesByteLength:{get:function(){let e=this._billboardCollection.sizeInBytes,t=this._labelCollection.sizeInBytes;return e+t}}});function net(e,t){let n=e._rectangle,i=e._minHeight,o=e._maxHeight,r=2+de.packedLength+ie.packedLength,s=new Float64Array(r),a=0;return s[a++]=i,s[a++]=o,de.pack(n,s,a),a+=de.packedLength,ie.pack(t,s,a),s}var iet=new $n("createVectorTilePoints",5),oet=new m;function ret(e,t){let n=e._positions,i=e._packedBuffer;l(i)||(n=e._positions=n.slice(),e._batchIds=e._batchIds.slice(),i=e._packedBuffer=net(e,t));let o=[n.buffer,i.buffer],r={positions:n.buffer,packedBuffer:i.buffer},s=iet.scheduleTask(r,o);if(l(s))return s.then(a=>{if(e.isDestroyed())return;e._positions=new Float64Array(a.positions);let c=e._billboardCollection,d=e._labelCollection,u=e._polylineCollection;n=e._positions;let h=e._batchIds,p=n.length/3,A=e._heightReference??rt.NONE;for(let f=0;f<p;++f){let b=h[f],C=m.unpack(n,f*3,oet),T=c.add();T.position=C,T._batchIndex=b,T.heightReference=A;let E=d.add();E.text=" ",E.position=C,E._batchIndex=b,E.heightReference=A;let S=u.add();S.positions=[m.clone(C),m.clone(C)]}e._positions=void 0,e._packedBuffer=void 0,e._ready=!0}).catch(a=>{e.isDestroyed()||(e._error=a)})}Q0.prototype.createFeatures=function(e,t){let n=this._billboardCollection,i=this._labelCollection,o=this._polylineCollection,r=this._batchIds,s=r.length;for(let a=0;a<s;++a){let c=r[a],d=n.get(a),u=i.get(a),h=o.get(a);t[c]=new xg(e,c,d,u,h)}};Q0.prototype.applyDebugSettings=function(e,t){e?(U.clone(t,this._billboardCollection._highlightColor),U.clone(t,this._labelCollection._highlightColor),U.clone(t,this._polylineCollection._highlightColor)):(U.clone(U.WHITE,this._billboardCollection._highlightColor),U.clone(U.WHITE,this._labelCollection._highlightColor),U.clone(U.WHITE,this._polylineCollection._highlightColor))};function set(e,t){let n=e._batchIds,i=n.length;for(let o=0;o<i;++o){let r=n[o],s=t[r];s.show=!0,s.pointSize=xg.defaultPointSize,s.color=xg.defaultColor,s.pointOutlineColor=xg.defaultPointOutlineColor,s.pointOutlineWidth=xg.defaultPointOutlineWidth,s.labelColor=U.WHITE,s.labelOutlineColor=U.WHITE,s.labelOutlineWidth=1,s.font="30px sans-serif",s.labelStyle=hr.FILL,s.labelText=void 0,s.backgroundColor=new U(.165,.165,.165,.8),s.backgroundPadding=new M(7,5),s.backgroundEnabled=!1,s.scaleByDistance=void 0,s.translucencyByDistance=void 0,s.distanceDisplayCondition=void 0,s.heightOffset=0,s.anchorLineEnabled=!1,s.anchorLineColor=U.WHITE,s.image=void 0,s.disableDepthTestDistance=0,s.horizontalOrigin=Bi.CENTER,s.verticalOrigin=Hn.CENTER,s.labelHorizontalOrigin=Bi.RIGHT,s.labelVerticalOrigin=Hn.BASELINE}}var aet=new U,cet=new U,det=new U,uet=new U,met=new U,het=new U,iw=new Ot,ow=new Ot,R4=new Dt;Q0.prototype.applyStyle=function(e,t){if(!l(e)){set(this,t);return}let n=this._batchIds,i=n.length;for(let o=0;o<i;++o){let r=n[o],s=t[r];if(l(e.show)&&(s.show=e.show.evaluate(s)),l(e.pointSize)&&(s.pointSize=e.pointSize.evaluate(s)),l(e.color)&&(s.color=e.color.evaluateColor(s,aet)),l(e.pointOutlineColor)&&(s.pointOutlineColor=e.pointOutlineColor.evaluateColor(s,cet)),l(e.pointOutlineWidth)&&(s.pointOutlineWidth=e.pointOutlineWidth.evaluate(s)),l(e.labelColor)&&(s.labelColor=e.labelColor.evaluateColor(s,det)),l(e.labelOutlineColor)&&(s.labelOutlineColor=e.labelOutlineColor.evaluateColor(s,uet)),l(e.labelOutlineWidth)&&(s.labelOutlineWidth=e.labelOutlineWidth.evaluate(s)),l(e.font)&&(s.font=e.font.evaluate(s)),l(e.labelStyle)&&(s.labelStyle=e.labelStyle.evaluate(s)),l(e.labelText)?s.labelText=e.labelText.evaluate(s):s.labelText=void 0,l(e.backgroundColor)&&(s.backgroundColor=e.backgroundColor.evaluateColor(s,met)),l(e.backgroundPadding)&&(s.backgroundPadding=e.backgroundPadding.evaluate(s)),l(e.backgroundEnabled)&&(s.backgroundEnabled=e.backgroundEnabled.evaluate(s)),l(e.scaleByDistance)){let a=e.scaleByDistance.evaluate(s);l(a)?(iw.near=a.x,iw.nearValue=a.y,iw.far=a.z,iw.farValue=a.w,s.scaleByDistance=iw):s.scaleByDistance=void 0}else s.scaleByDistance=void 0;if(l(e.translucencyByDistance)){let a=e.translucencyByDistance.evaluate(s);l(a)?(ow.near=a.x,ow.nearValue=a.y,ow.far=a.z,ow.farValue=a.w,s.translucencyByDistance=ow):s.translucencyByDistance=void 0}else s.translucencyByDistance=void 0;if(l(e.distanceDisplayCondition)){let a=e.distanceDisplayCondition.evaluate(s);l(a)?(R4.near=a.x,R4.far=a.y,s.distanceDisplayCondition=R4):s.distanceDisplayCondition=void 0}else s.distanceDisplayCondition=void 0;l(e.heightOffset)&&(s.heightOffset=e.heightOffset.evaluate(s)),l(e.anchorLineEnabled)&&(s.anchorLineEnabled=e.anchorLineEnabled.evaluate(s)),l(e.anchorLineColor)&&(s.anchorLineColor=e.anchorLineColor.evaluateColor(s,het)),l(e.image)?s.image=e.image.evaluate(s):s.image=void 0,l(e.disableDepthTestDistance)&&(s.disableDepthTestDistance=e.disableDepthTestDistance.evaluate(s)),l(e.horizontalOrigin)&&(s.horizontalOrigin=e.horizontalOrigin.evaluate(s)),l(e.verticalOrigin)&&(s.verticalOrigin=e.verticalOrigin.evaluate(s)),l(e.labelHorizontalOrigin)&&(s.labelHorizontalOrigin=e.labelHorizontalOrigin.evaluate(s)),l(e.labelVerticalOrigin)&&(s.labelVerticalOrigin=e.labelVerticalOrigin.evaluate(s))}};Q0.prototype.update=function(e){if(!this._ready&&(l(this._promise)||(this._promise=ret(this,e.mapProjection.ellipsoid)),l(this._error))){let t=this._error;throw this._error=void 0,t}this._polylineCollection.update(e),this._billboardCollection.update(e),this._labelCollection.update(e)};Q0.prototype.isDestroyed=function(){return!1};Q0.prototype.destroy=function(){return this._billboardCollection=this._billboardCollection&&this._billboardCollection.destroy(),this._labelCollection=this._labelCollection&&this._labelCollection.destroy(),this._polylineCollection=this._polylineCollection&&this._polylineCollection.destroy(),he(this)};var rw=Q0;var a6n=y(x(),1);function Eg(e){this._batchTable=e.batchTable,this._batchIds=e.batchIds,this._positions=e.positions,this._counts=e.counts,this._indices=e.indices,this._indexCounts=e.indexCounts,this._indexOffsets=void 0,this._batchTableColors=void 0,this._packedBuffer=void 0,this._batchedPositions=void 0,this._transferrableBatchIds=void 0,this._vertexBatchIds=void 0,this._ellipsoid=e.ellipsoid??ie.WGS84,this._minimumHeight=e.minimumHeight,this._maximumHeight=e.maximumHeight,this._polygonMinimumHeights=e.polygonMinimumHeights,this._polygonMaximumHeights=e.polygonMaximumHeights,this._center=e.center??m.ZERO,this._rectangle=e.rectangle,this._center=void 0,this._boundingVolume=e.boundingVolume,this._boundingVolumes=void 0,this._batchedIndices=void 0,this._ready=!1,this._promise=void 0,this._error=void 0,this._primitive=void 0,this.debugWireframe=!1,this.forceRebatch=!1,this.classificationType=ti.BOTH}Object.defineProperties(Eg.prototype,{trianglesLength:{get:function(){return l(this._primitive)?this._primitive.trianglesLength:0}},geometryByteLength:{get:function(){return l(this._primitive)?this._primitive.geometryByteLength:0}},ready:{get:function(){return this._ready}}});function fet(e){let t=new Float64Array(3+m.packedLength+ie.packedLength+de.packedLength),n=0;return t[n++]=e._indices.BYTES_PER_ELEMENT,t[n++]=e._minimumHeight,t[n++]=e._maximumHeight,m.pack(e._center,t,n),n+=m.packedLength,ie.pack(e._ellipsoid,t,n),n+=ie.packedLength,de.pack(e._rectangle,t,n),t}function pet(e,t){let n=1,i=t[n++],o=e._boundingVolumes=new Array(i);for(let a=0;a<i;++a)o[a]=nn.unpack(t,n),n+=nn.packedLength;let r=t[n++],s=e._batchedIndices=new Array(r);for(let a=0;a<r;++a){let c=U.unpack(t,n);n+=U.packedLength;let d=t[n++],u=t[n++],h=t[n++],p=new Array(h);for(let A=0;A<h;++A)p[A]=t[n++];s[a]=new dp({color:c,offset:d,count:u,batchIds:p})}}var Aet=new $n("createVectorTilePolygons",5),get=new U;function bet(e){if(l(e._primitive))return;let t=e._positions,n=e._counts,i=e._indexCounts,o=e._indices,r=e._transferrableBatchIds,s=e._batchTableColors,a=e._packedBuffer;if(!l(s)){t=e._positions=e._positions.slice(),n=e._counts=e._counts.slice(),i=e._indexCounts=e._indexCounts.slice(),o=e._indices=e._indices.slice(),e._center=e._ellipsoid.cartographicToCartesian(de.center(e._rectangle)),r=e._transferrableBatchIds=new Uint32Array(e._batchIds),s=e._batchTableColors=new Uint32Array(r.length);let A=e._batchTable,f=s.length;for(let b=0;b<f;++b){let C=A.getColor(b,get);s[b]=C.toRgba()}a=e._packedBuffer=fet(e)}let c=[t.buffer,n.buffer,i.buffer,o.buffer,r.buffer,s.buffer,a.buffer],d={packedBuffer:a.buffer,positions:t.buffer,counts:n.buffer,indexCounts:i.buffer,indices:o.buffer,batchIds:r.buffer,batchTableColors:s.buffer},u=e._polygonMinimumHeights,h=e._polygonMaximumHeights;l(u)&&l(h)&&(u=u.slice(),h=h.slice(),c.push(u.buffer,h.buffer),d.minimumHeights=u,d.maximumHeights=h);let p=Aet.scheduleTask(d,c);if(l(p))return p.then(A=>{if(e.isDestroyed())return;e._positions=void 0,e._counts=void 0,e._polygonMinimumHeights=void 0,e._polygonMaximumHeights=void 0;let f=new Float64Array(A.packedBuffer),b=f[0];pet(e,f),e._indices=Ue.getSizeInBytes(b)===2?new Uint16Array(A.indices):new Uint32Array(A.indices),e._indexOffsets=new Uint32Array(A.indexOffsets),e._indexCounts=new Uint32Array(A.indexCounts),e._batchedPositions=new Float32Array(A.positions),e._vertexBatchIds=new Uint16Array(A.batchIds),yet(e),e._ready=!0}).catch(A=>{e.isDestroyed()||(e._error=A)})}function yet(e){l(e._primitive)||(e._primitive=new aC({batchTable:e._batchTable,positions:e._batchedPositions,batchIds:e._batchIds,vertexBatchIds:e._vertexBatchIds,indices:e._indices,indexOffsets:e._indexOffsets,indexCounts:e._indexCounts,batchedIndices:e._batchedIndices,boundingVolume:e._boundingVolume,boundingVolumes:e._boundingVolumes,center:e._center}),e._batchTable=void 0,e._batchIds=void 0,e._positions=void 0,e._counts=void 0,e._indices=void 0,e._indexCounts=void 0,e._indexOffsets=void 0,e._batchTableColors=void 0,e._packedBuffer=void 0,e._batchedPositions=void 0,e._transferrableBatchIds=void 0,e._vertexBatchIds=void 0,e._ellipsoid=void 0,e._minimumHeight=void 0,e._maximumHeight=void 0,e._polygonMinimumHeights=void 0,e._polygonMaximumHeights=void 0,e._center=void 0,e._rectangle=void 0,e._boundingVolume=void 0,e._boundingVolumes=void 0,e._batchedIndices=void 0)}Eg.prototype.createFeatures=function(e,t){this._primitive.createFeatures(e,t)};Eg.prototype.applyDebugSettings=function(e,t){this._primitive.applyDebugSettings(e,t)};Eg.prototype.applyStyle=function(e,t){this._primitive.applyStyle(e,t)};Eg.prototype.updateCommands=function(e,t){this._primitive.updateCommands(e,t)};Eg.prototype.update=function(e){if(!this._ready){if(l(this._promise)||(this._promise=bet(this)),l(this._error)){let t=this._error;throw this._error=void 0,t}return}this._primitive.debugWireframe=this.debugWireframe,this._primitive.forceRebatch=this.forceRebatch,this._primitive.classificationType=this.classificationType,this._primitive.update(e)};Eg.prototype.isDestroyed=function(){return!1};Eg.prototype.destroy=function(){return this._primitive=this._primitive&&this._primitive.destroy(),he(this)};var sw=Eg;var F6n=y(x(),1);var l6n=y(x(),1),aw=`in vec4 currentPosition;
in vec4 previousPosition;
in vec4 nextPosition;
in vec2 expandAndWidth;
in float a_batchId;
uniform mat4 u_modifiedModelView;
void main()
{
float expandDir = expandAndWidth.x;
float width = abs(expandAndWidth.y) + 0.5;
bool usePrev = expandAndWidth.y < 0.0;
vec4 p = u_modifiedModelView * currentPosition;
vec4 prev = u_modifiedModelView * previousPosition;
vec4 next = u_modifiedModelView * nextPosition;
float angle;
vec4 positionWC = getPolylineWindowCoordinatesEC(p, prev, next, expandDir, width, usePrev, angle);
gl_Position = czm_viewportOrthographic * positionWC;
}
`;function of(e){this._positions=e.positions,this._widths=e.widths,this._counts=e.counts,this._batchIds=e.batchIds,this._ellipsoid=e.ellipsoid??ie.WGS84,this._minimumHeight=e.minimumHeight,this._maximumHeight=e.maximumHeight,this._center=e.center,this._rectangle=e.rectangle,this._boundingVolume=e.boundingVolume,this._batchTable=e.batchTable,this._va=void 0,this._sp=void 0,this._rs=void 0,this._uniformMap=void 0,this._command=void 0,this._transferrableBatchIds=void 0,this._packedBuffer=void 0,this._keepDecodedPositions=e.keepDecodedPositions,this._decodedPositions=void 0,this._decodedPositionOffsets=void 0,this._currentPositions=void 0,this._previousPositions=void 0,this._nextPositions=void 0,this._expandAndWidth=void 0,this._vertexBatchIds=void 0,this._indices=void 0,this._constantColor=U.clone(U.WHITE),this._highlightColor=this._constantColor,this._trianglesLength=0,this._geometryByteLength=0,this._ready=!1,this._promise=void 0,this._error=void 0}Object.defineProperties(of.prototype,{trianglesLength:{get:function(){return this._trianglesLength}},geometryByteLength:{get:function(){return this._geometryByteLength}},ready:{get:function(){return this._ready}}});function xet(e){let t=e._rectangle,n=e._minimumHeight,i=e._maximumHeight,o=e._ellipsoid,r=e._center,s=2+de.packedLength+ie.packedLength+m.packedLength,a=new Float64Array(s),c=0;return a[c++]=n,a[c++]=i,de.pack(t,a,c),c+=de.packedLength,ie.pack(o,a,c),c+=ie.packedLength,m.pack(r,a,c),a}var Cet=new $n("createVectorTilePolylines",5),Q_={previousPosition:0,currentPosition:1,nextPosition:2,expandAndWidth:3,a_batchId:4};function Tet(e,t){if(l(e._va))return;let n=e._positions,i=e._widths,o=e._counts,r=e._transferrableBatchIds,s=e._packedBuffer;l(s)||(n=e._positions=n.slice(),i=e._widths=i.slice(),o=e._counts=o.slice(),r=e._transferrableBatchIds=e._batchIds.slice(),s=e._packedBuffer=xet(e));let a=[n.buffer,i.buffer,o.buffer,r.buffer,s.buffer],c={positions:n.buffer,widths:i.buffer,counts:o.buffer,batchIds:r.buffer,packedBuffer:s.buffer,keepDecodedPositions:e._keepDecodedPositions},d=Cet.scheduleTask(c,a);if(l(d))return d.then(function(u){if(e.isDestroyed())return;e._keepDecodedPositions&&(e._decodedPositions=new Float64Array(u.decodedPositions),e._decodedPositionOffsets=new Uint32Array(u.decodedPositionOffsets)),e._currentPositions=new Float32Array(u.currentPositions),e._previousPositions=new Float32Array(u.previousPositions),e._nextPositions=new Float32Array(u.nextPositions),e._expandAndWidth=new Float32Array(u.expandAndWidth),e._vertexBatchIds=new Uint16Array(u.batchIds);let h=u.indexDatatype;e._indices=h===Ue.UNSIGNED_SHORT?new Uint16Array(u.indices):new Uint32Array(u.indices),Eet(e,t),e._ready=!0}).catch(u=>{e.isDestroyed()||(e._error=u)})}function Eet(e,t){if(!l(e._va)){let n=e._currentPositions,i=e._previousPositions,o=e._nextPositions,r=e._expandAndWidth,s=e._vertexBatchIds,a=e._indices,c=i.byteLength+n.byteLength+o.byteLength;c+=r.byteLength+s.byteLength+a.byteLength,e._trianglesLength=a.length/3,e._geometryByteLength=c;let d=it.createVertexBuffer({context:t,typedArray:i,usage:Be.STATIC_DRAW}),u=it.createVertexBuffer({context:t,typedArray:n,usage:Be.STATIC_DRAW}),h=it.createVertexBuffer({context:t,typedArray:o,usage:Be.STATIC_DRAW}),p=it.createVertexBuffer({context:t,typedArray:r,usage:Be.STATIC_DRAW}),A=it.createVertexBuffer({context:t,typedArray:s,usage:Be.STATIC_DRAW}),f=it.createIndexBuffer({context:t,typedArray:a,usage:Be.STATIC_DRAW,indexDatatype:a.BYTES_PER_ELEMENT===2?Ue.UNSIGNED_SHORT:Ue.UNSIGNED_INT}),b=[{index:Q_.previousPosition,vertexBuffer:d,componentDatatype:H.FLOAT,componentsPerAttribute:3},{index:Q_.currentPosition,vertexBuffer:u,componentDatatype:H.FLOAT,componentsPerAttribute:3},{index:Q_.nextPosition,vertexBuffer:h,componentDatatype:H.FLOAT,componentsPerAttribute:3},{index:Q_.expandAndWidth,vertexBuffer:p,componentDatatype:H.FLOAT,componentsPerAttribute:2},{index:Q_.a_batchId,vertexBuffer:A,componentDatatype:H.UNSIGNED_SHORT,componentsPerAttribute:1}];e._va=new kn({context:t,attributes:b,indexBuffer:f}),e._positions=void 0,e._widths=void 0,e._counts=void 0,e._ellipsoid=void 0,e._minimumHeight=void 0,e._maximumHeight=void 0,e._rectangle=void 0,e._transferrableBatchIds=void 0,e._packedBuffer=void 0,e._currentPositions=void 0,e._previousPositions=void 0,e._nextPositions=void 0,e._expandAndWidth=void 0,e._vertexBatchIds=void 0,e._indices=void 0}}var cw=new F,xpe=new m;function _et(e,t){l(e._uniformMap)||(e._uniformMap={u_modifiedModelView:function(){let n=t.uniformState.view;return F.clone(n,cw),F.multiplyByPoint(cw,e._center,xpe),F.setTranslation(cw,xpe,cw),cw},u_highlightColor:function(){return e._highlightColor}})}function Iet(e){if(l(e._rs))return;let t={enabled:!0,factor:-5,units:-5};e._rs=Qe.fromCache({blending:ln.ALPHA_BLEND,depthMask:!1,depthTest:{enabled:!0},polygonOffset:t})}var Zet=`uniform vec4 u_highlightColor;
void main()
{
out_FragColor = u_highlightColor;
}
`;function Ret(e,t){if(l(e._sp))return;let n=e._batchTable,i=n.getVertexShaderCallback(!1,"a_batchId",void 0)(aw),o=n.getFragmentShaderCallback(!1,void 0,!1)(Zet),r=new ze({defines:["VECTOR_TILE","CLIP_POLYLINE"],sources:[Zl,i]}),s=new ze({defines:["VECTOR_TILE"],sources:[o]});e._sp=tn.fromCache({context:t,vertexShaderSource:r,fragmentShaderSource:s,attributeLocations:Q_})}function Vet(e,t){if(!l(e._command)){let n=e._batchTable.getUniformMapCallback()(e._uniformMap);e._command=new ot({owner:e,vertexArray:e._va,renderState:e._rs,shaderProgram:e._sp,uniformMap:n,boundingVolume:e._boundingVolume,pass:Ge.TRANSLUCENT,pickId:e._batchTable.getPickId()})}t.commandList.push(e._command)}of.getPolylinePositions=function(e,t){let n=e._batchIds,i=e._decodedPositions,o=e._decodedPositionOffsets;if(!l(n)||!l(i))return;let r,s,a=n.length,c=0,d=0;for(r=0;r<a;++r)n[r]===t&&(c+=o[r+1]-o[r]);if(c===0)return;let u=new Float64Array(c*3);for(r=0;r<a;++r)if(n[r]===t){let h=o[r],p=o[r+1]-h;for(s=0;s<p;++s){let A=(h+s)*3;u[d++]=i[A],u[d++]=i[A+1],u[d++]=i[A+2]}}return u};of.prototype.getPositions=function(e){return of.getPolylinePositions(this,e)};of.prototype.createFeatures=function(e,t){let n=this._batchIds,i=n.length;for(let o=0;o<i;++o){let r=n[o];t[r]=new Ga(e,r)}};of.prototype.applyDebugSettings=function(e,t){this._highlightColor=e?t:this._constantColor};function Get(e,t){let n=e._batchIds,i=n.length;for(let o=0;o<i;++o){let r=n[o],s=t[r];s.show=!0,s.color=U.WHITE}}var Let=new U,Wet=U.WHITE,Fet=!0;of.prototype.applyStyle=function(e,t){if(!l(e)){Get(this,t);return}let n=this._batchIds,i=n.length;for(let o=0;o<i;++o){let r=n[o],s=t[r];s.color=l(e.color)?e.color.evaluateColor(s,Let):Wet,s.show=l(e.show)?e.show.evaluate(s):Fet}};of.prototype.update=function(e){let t=e.context;if(!this._ready){if(l(this._promise)||(this._promise=Tet(this,t)),l(this._error)){let i=this._error;throw this._error=void 0,i}return}_et(this,t),Ret(this,t),Iet(this);let n=e.passes;(n.render||n.pick)&&Vet(this,e)};of.prototype.isDestroyed=function(){return!1};of.prototype.destroy=function(){return this._va=this._va&&this._va.destroy(),this._sp=this._sp&&this._sp.destroy(),he(this)};var UC=of;var gqn=y(x(),1);var w6n=y(x(),1),lw=`in vec3 startEllipsoidNormal;
in vec3 endEllipsoidNormal;
in vec4 startPositionAndHeight;
in vec4 endPositionAndHeight;
in vec4 startFaceNormalAndVertexCorner;
in vec4 endFaceNormalAndHalfWidth;
in float a_batchId;
uniform mat4 u_modifiedModelView;
uniform vec2 u_minimumMaximumVectorHeights;
out vec4 v_startPlaneEC;
out vec4 v_endPlaneEC;
out vec4 v_rightPlaneEC;
out float v_halfWidth;
out vec3 v_volumeUpEC;
void main()
{
// vertex corner IDs
// 3-----------7
// /| left /|
// / | 1 / |
// 2-----------6 5 end
// | / | /
// start |/ right |/
// 0-----------4
//
float isEnd = floor(startFaceNormalAndVertexCorner.w * 0.251); // 0 for front, 1 for end
float isTop = floor(startFaceNormalAndVertexCorner.w * mix(0.51, 0.19, isEnd)); // 0 for bottom, 1 for top
vec3 forward = endPositionAndHeight.xyz - startPositionAndHeight.xyz;
vec3 right = normalize(cross(forward, startEllipsoidNormal));
vec4 position = vec4(startPositionAndHeight.xyz, 1.0);
position.xyz += forward * isEnd;
v_volumeUpEC = czm_normal * normalize(cross(right, forward));
// Push for volume height
float offset;
vec3 ellipsoidNormal = mix(startEllipsoidNormal, endEllipsoidNormal, isEnd);
// offset height to create volume
offset = mix(startPositionAndHeight.w, endPositionAndHeight.w, isEnd);
offset = mix(u_minimumMaximumVectorHeights.y, u_minimumMaximumVectorHeights.x, isTop) - offset;
position.xyz += offset * ellipsoidNormal;
// move from RTC to EC
position = u_modifiedModelView * position;
right = czm_normal * right;
// Push for width in a direction that is in the start or end plane and in a plane with right
// N = normalEC ("right-facing" direction for push)
// R = right
// p = angle between N and R
// w = distance to push along R if R == N
// d = distance to push along N
//
// N R
// { p| } * cos(p) = dot(N, R) = w / d
// d | |w * d = w / dot(N, R)
// { | }
// o---------- polyline segment ---->
//
vec3 scratchNormal = mix(-startFaceNormalAndVertexCorner.xyz, endFaceNormalAndHalfWidth.xyz, isEnd);
scratchNormal = cross(scratchNormal, mix(startEllipsoidNormal, endEllipsoidNormal, isEnd));
vec3 miterPushNormal = czm_normal * normalize(scratchNormal);
offset = 2.0 * endFaceNormalAndHalfWidth.w * max(0.0, czm_metersPerPixel(position)); // offset = widthEC
offset = offset / dot(miterPushNormal, right);
position.xyz += miterPushNormal * (offset * sign(0.5 - mod(startFaceNormalAndVertexCorner.w, 2.0)));
gl_Position = czm_depthClamp(czm_projection * position);
position = u_modifiedModelView * vec4(startPositionAndHeight.xyz, 1.0);
vec3 startNormalEC = czm_normal * startFaceNormalAndVertexCorner.xyz;
v_startPlaneEC = vec4(startNormalEC, -dot(startNormalEC, position.xyz));
v_rightPlaneEC = vec4(right, -dot(right, position.xyz));
position = u_modifiedModelView * vec4(endPositionAndHeight.xyz, 1.0);
vec3 endNormalEC = czm_normal * endFaceNormalAndHalfWidth.xyz;
v_endPlaneEC = vec4(endNormalEC, -dot(endNormalEC, position.xyz));
v_halfWidth = endFaceNormalAndHalfWidth.w;
}
`;var P6n=y(x(),1),dw=`in vec4 v_startPlaneEC;
in vec4 v_endPlaneEC;
in vec4 v_rightPlaneEC;
in float v_halfWidth;
in vec3 v_volumeUpEC;
uniform vec4 u_highlightColor;
void main()
{
float logDepthOrDepth = czm_branchFreeTernary(czm_sceneMode == czm_sceneMode2D, gl_FragCoord.z, czm_unpackDepth(texture(czm_globeDepthTexture, gl_FragCoord.xy / czm_viewport.zw)));
// Discard for sky
if (logDepthOrDepth == 0.0) {
#ifdef DEBUG_SHOW_VOLUME
out_FragColor = vec4(0.0, 0.0, 1.0, 0.5);
return;
#else // DEBUG_SHOW_VOLUME
discard;
#endif // DEBUG_SHOW_VOLUME
}
vec4 eyeCoordinate = czm_windowToEyeCoordinates(gl_FragCoord.xy, logDepthOrDepth);
eyeCoordinate /= eyeCoordinate.w;
float halfMaxWidth = v_halfWidth * czm_metersPerPixel(eyeCoordinate);
// Expand halfMaxWidth if direction to camera is almost perpendicular with the volume's up direction
halfMaxWidth += halfMaxWidth * (1.0 - dot(-normalize(eyeCoordinate.xyz), v_volumeUpEC));
// Check distance of the eye coordinate against the right-facing plane
float widthwiseDistance = czm_planeDistance(v_rightPlaneEC, eyeCoordinate.xyz);
// Check eye coordinate against the mitering planes
float distanceFromStart = czm_planeDistance(v_startPlaneEC, eyeCoordinate.xyz);
float distanceFromEnd = czm_planeDistance(v_endPlaneEC, eyeCoordinate.xyz);
if (abs(widthwiseDistance) > halfMaxWidth || distanceFromStart < 0.0 || distanceFromEnd < 0.0) {
#ifdef DEBUG_SHOW_VOLUME
out_FragColor = vec4(logDepthOrDepth, 0.0, 0.0, 0.5);
return;
#else // DEBUG_SHOW_VOLUME
discard;
#endif // DEBUG_SHOW_VOLUME
}
out_FragColor = u_highlightColor;
czm_writeDepthClamp();
}
`;function Sg(e){this._positions=e.positions,this._widths=e.widths,this._counts=e.counts,this._batchIds=e.batchIds,this._ellipsoid=e.ellipsoid??ie.WGS84,this._minimumHeight=e.minimumHeight,this._maximumHeight=e.maximumHeight,this._center=e.center,this._rectangle=e.rectangle,this._batchTable=e.batchTable,this._va=void 0,this._sp=void 0,this._rs=void 0,this._uniformMap=void 0,this._command=void 0,this._transferrableBatchIds=void 0,this._packedBuffer=void 0,this._minimumMaximumVectorHeights=new M(Gi._defaultMinTerrainHeight,Gi._defaultMaxTerrainHeight),this._boundingVolume=nn.fromRectangle(e.rectangle,Gi._defaultMinTerrainHeight,Gi._defaultMaxTerrainHeight,this._ellipsoid),this._classificationType=e.classificationType,this._keepDecodedPositions=e.keepDecodedPositions,this._decodedPositions=void 0,this._decodedPositionOffsets=void 0,this._startEllipsoidNormals=void 0,this._endEllipsoidNormals=void 0,this._startPositionAndHeights=void 0,this._startFaceNormalAndVertexCornerIds=void 0,this._endPositionAndHeights=void 0,this._endFaceNormalAndHalfWidths=void 0,this._vertexBatchIds=void 0,this._indices=void 0,this._constantColor=U.clone(U.WHITE),this._highlightColor=this._constantColor,this._trianglesLength=0,this._geometryByteLength=0,this._ready=!1,this._promise=void 0,this._error=void 0}Object.defineProperties(Sg.prototype,{trianglesLength:{get:function(){return this._trianglesLength}},geometryByteLength:{get:function(){return this._geometryByteLength}},ready:{get:function(){return this._ready}}});function Bet(e,t,n){let i=Gi.getMinimumMaximumHeights(t,n),o=i.minimumTerrainHeight,r=i.maximumTerrainHeight,s=e._minimumMaximumVectorHeights;s.x=o,s.y=r;let a=e._boundingVolume,c=e._rectangle;nn.fromRectangle(c,o,r,n,a)}function wet(e){let t=e._rectangle,n=e._minimumHeight,i=e._maximumHeight,o=e._ellipsoid,r=e._center,s=2+de.packedLength+ie.packedLength+m.packedLength,a=new Float64Array(s),c=0;return a[c++]=n,a[c++]=i,de.pack(t,a,c),c+=de.packedLength,ie.pack(o,a,c),c+=ie.packedLength,m.pack(r,a,c),a}var Net=new $n("createVectorTileClampedPolylines"),O0={startEllipsoidNormal:0,endEllipsoidNormal:1,startPositionAndHeight:2,endPositionAndHeight:3,startFaceNormalAndVertexCorner:4,endFaceNormalAndHalfWidth:5,a_batchId:6};function Pet(e,t){if(l(e._va))return;let n=e._positions,i=e._widths,o=e._counts,r=e._transferrableBatchIds,s=e._packedBuffer;l(s)||(n=e._positions=n.slice(),i=e._widths=i.slice(),o=e._counts=o.slice(),r=e._transferrableBatchIds=e._batchIds.slice(),s=e._packedBuffer=wet(e));let a=[n.buffer,i.buffer,o.buffer,r.buffer,s.buffer],c={positions:n.buffer,widths:i.buffer,counts:o.buffer,batchIds:r.buffer,packedBuffer:s.buffer,keepDecodedPositions:e._keepDecodedPositions},d=Net.scheduleTask(c,a);if(l(d))return d.then(function(u){if(e.isDestroyed())return;e._keepDecodedPositions&&(e._decodedPositions=new Float64Array(u.decodedPositions),e._decodedPositionOffsets=new Uint32Array(u.decodedPositionOffsets)),e._startEllipsoidNormals=new Float32Array(u.startEllipsoidNormals),e._endEllipsoidNormals=new Float32Array(u.endEllipsoidNormals),e._startPositionAndHeights=new Float32Array(u.startPositionAndHeights),e._startFaceNormalAndVertexCornerIds=new Float32Array(u.startFaceNormalAndVertexCornerIds),e._endPositionAndHeights=new Float32Array(u.endPositionAndHeights),e._endFaceNormalAndHalfWidths=new Float32Array(u.endFaceNormalAndHalfWidths),e._vertexBatchIds=new Uint16Array(u.vertexBatchIds);let h=u.indexDatatype;e._indices=h===Ue.UNSIGNED_SHORT?new Uint16Array(u.indices):new Uint32Array(u.indices),Xet(e,t),e._ready=!0}).catch(u=>{e.isDestroyed()||(e._error=u)})}function Xet(e,t){if(!l(e._va)){let n=e._startEllipsoidNormals,i=e._endEllipsoidNormals,o=e._startPositionAndHeights,r=e._endPositionAndHeights,s=e._startFaceNormalAndVertexCornerIds,a=e._endFaceNormalAndHalfWidths,c=e._vertexBatchIds,d=e._indices,u=n.byteLength+i.byteLength;u+=o.byteLength+r.byteLength,u+=s.byteLength+a.byteLength,u+=c.byteLength+d.byteLength,e._trianglesLength=d.length/3,e._geometryByteLength=u;let h=it.createVertexBuffer({context:t,typedArray:n,usage:Be.STATIC_DRAW}),p=it.createVertexBuffer({context:t,typedArray:i,usage:Be.STATIC_DRAW}),A=it.createVertexBuffer({context:t,typedArray:o,usage:Be.STATIC_DRAW}),f=it.createVertexBuffer({context:t,typedArray:r,usage:Be.STATIC_DRAW}),b=it.createVertexBuffer({context:t,typedArray:s,usage:Be.STATIC_DRAW}),C=it.createVertexBuffer({context:t,typedArray:a,usage:Be.STATIC_DRAW}),T=it.createVertexBuffer({context:t,typedArray:c,usage:Be.STATIC_DRAW}),E=it.createIndexBuffer({context:t,typedArray:d,usage:Be.STATIC_DRAW,indexDatatype:d.BYTES_PER_ELEMENT===2?Ue.UNSIGNED_SHORT:Ue.UNSIGNED_INT}),S=[{index:O0.startEllipsoidNormal,vertexBuffer:h,componentDatatype:H.FLOAT,componentsPerAttribute:3},{index:O0.endEllipsoidNormal,vertexBuffer:p,componentDatatype:H.FLOAT,componentsPerAttribute:3},{index:O0.startPositionAndHeight,vertexBuffer:A,componentDatatype:H.FLOAT,componentsPerAttribute:4},{index:O0.endPositionAndHeight,vertexBuffer:f,componentDatatype:H.FLOAT,componentsPerAttribute:4},{index:O0.startFaceNormalAndVertexCorner,vertexBuffer:b,componentDatatype:H.FLOAT,componentsPerAttribute:4},{index:O0.endFaceNormalAndHalfWidth,vertexBuffer:C,componentDatatype:H.FLOAT,componentsPerAttribute:4},{index:O0.a_batchId,vertexBuffer:T,componentDatatype:H.UNSIGNED_SHORT,componentsPerAttribute:1}];e._va=new kn({context:t,attributes:S,indexBuffer:E}),e._positions=void 0,e._widths=void 0,e._counts=void 0,e._ellipsoid=void 0,e._minimumHeight=void 0,e._maximumHeight=void 0,e._rectangle=void 0,e._transferrableBatchIds=void 0,e._packedBuffer=void 0,e._startEllipsoidNormals=void 0,e._endEllipsoidNormals=void 0,e._startPositionAndHeights=void 0,e._startFaceNormalAndVertexCornerIds=void 0,e._endPositionAndHeights=void 0,e._endFaceNormalAndHalfWidths=void 0,e._vertexBatchIds=void 0,e._indices=void 0}}var uw=new F,Cpe=new m;function Yet(e,t){l(e._uniformMap)||(e._uniformMap={u_modifiedModelView:function(){let n=t.uniformState.view;return F.clone(n,uw),F.multiplyByPoint(uw,e._center,Cpe),F.setTranslation(uw,Cpe,uw),uw},u_highlightColor:function(){return e._highlightColor},u_minimumMaximumVectorHeights:function(){return e._minimumMaximumVectorHeights}})}function Tpe(e){return Qe.fromCache({cull:{enabled:!0,face:wi.FRONT},blending:ln.PRE_MULTIPLIED_ALPHA_BLEND,depthMask:!1,stencilTest:{enabled:e,frontFunction:ni.EQUAL,frontOperation:{fail:Vt.KEEP,zFail:Vt.KEEP,zPass:Vt.KEEP},backFunction:ni.EQUAL,backOperation:{fail:Vt.KEEP,zFail:Vt.KEEP,zPass:Vt.KEEP},reference:Jt.CESIUM_3D_TILE_MASK,mask:Jt.CESIUM_3D_TILE_MASK}})}function Met(e){l(e._rs)||(e._rs=Tpe(!1),e._rs3DTiles=Tpe(!0))}function vet(e,t){if(l(e._sp))return;let n=e._batchTable,i=n.getVertexShaderCallback(!1,"a_batchId",void 0)(lw),o=n.getFragmentShaderCallback(!1,void 0,!0)(dw),r=new ze({defines:["VECTOR_TILE","CLIP_POLYLINE"],sources:[Zl,i]}),s=new ze({defines:["VECTOR_TILE"],sources:[o]});e._sp=tn.fromCache({context:t,vertexShaderSource:r,fragmentShaderSource:s,attributeLocations:O0})}function Uet(e,t){let n=e._command;if(!l(e._command)){let o=e._batchTable.getUniformMapCallback()(e._uniformMap);n=e._command=new ot({owner:e,vertexArray:e._va,renderState:e._rs,shaderProgram:e._sp,uniformMap:o,boundingVolume:e._boundingVolume,pass:Ge.TERRAIN_CLASSIFICATION,pickId:e._batchTable.getPickId()});let r=ot.shallowClone(n,n.derivedCommands.tileset);r.renderState=e._rs3DTiles,r.pass=Ge.CESIUM_3D_TILE_CLASSIFICATION,n.derivedCommands.tileset=r}let i=e._classificationType;(i===ti.TERRAIN||i===ti.BOTH)&&t.commandList.push(n),(i===ti.CESIUM_3D_TILE||i===ti.BOTH)&&t.commandList.push(n.derivedCommands.tileset)}Sg.prototype.getPositions=function(e){return UC.getPolylinePositions(this,e)};Sg.prototype.createFeatures=function(e,t){let n=this._batchIds,i=n.length;for(let o=0;o<i;++o){let r=n[o];t[r]=new Ga(e,r)}};Sg.prototype.applyDebugSettings=function(e,t){this._highlightColor=e?t:this._constantColor};function Det(e,t){let n=e._batchIds,i=n.length;for(let o=0;o<i;++o){let r=n[o],s=t[r];s.show=!0,s.color=U.WHITE}}var ket=new U,Qet=U.WHITE,Oet=!0;Sg.prototype.applyStyle=function(e,t){if(!l(e)){Det(this,t);return}let n=this._batchIds,i=n.length;for(let o=0;o<i;++o){let r=n[o],s=t[r];s.color=l(e.color)?e.color.evaluateColor(s,ket):Qet,s.show=l(e.show)?e.show.evaluate(s):Oet}};function zet(e){return Gi.initialize().then(function(){Bet(e,e._rectangle,e._ellipsoid)}).catch(t=>{e.isDestroyed()||(e._error=t)})}Sg.prototype.update=function(e){let t=e.context;if(!this._ready){if(l(this._promise)||(this._promise=zet(this).then(Pet(this,t))),l(this._error)){let i=this._error;throw this._error=void 0,i}return}Yet(this,t),vet(this,t),Met(this);let n=e.passes;(n.render||n.pick)&&Uet(this,e)};Sg.prototype.isDestroyed=function(){return!1};Sg.prototype.destroy=function(){return this._va=this._va&&this._va.destroy(),this._sp=this._sp&&this._sp.destroy(),he(this)};var mw=Sg;var Eqn=y(x(),1);var V4=32767,Het=new Ae,Jet=new m;function Ket(e,t,n,i,o){let r=e.length/3,s=e.subarray(0,r),a=e.subarray(r,2*r),c=e.subarray(2*r,3*r);on.zigZagDeltaDecode(s,a,c);let d=new Float64Array(e.length);for(let u=0;u<r;++u){let h=s[u],p=a[u],A=c[u],f=L.lerp(t.west,t.east,h/V4),b=L.lerp(t.south,t.north,p/V4),C=L.lerp(n,i,A/V4),T=Ae.fromRadians(f,b,C,Het),E=o.cartographicToCartesian(T,Jet);m.pack(E,d,u*3)}return d}var hw=Ket;function sf(e,t,n,i,o){this._tileset=e,this._tile=t,this._resource=n,this._polygons=void 0,this._polylines=void 0,this._points=void 0,this._metadata=void 0,this._batchTable=void 0,this._features=void 0,this.featurePropertiesDirty=!1,this._group=void 0,this._ready=!1,ttt(this,i,o)}Object.defineProperties(sf.prototype,{featuresLength:{get:function(){return l(this._batchTable)?this._batchTable.featuresLength:0}},pointsLength:{get:function(){return l(this._points)?this._points.pointsLength:0}},trianglesLength:{get:function(){let e=0;return l(this._polygons)&&(e+=this._polygons.trianglesLength),l(this._polylines)&&(e+=this._polylines.trianglesLength),e}},geometryByteLength:{get:function(){let e=0;return l(this._polygons)&&(e+=this._polygons.geometryByteLength),l(this._polylines)&&(e+=this._polylines.geometryByteLength),e}},texturesByteLength:{get:function(){return l(this._points)?this._points.texturesByteLength:0}},batchTableByteLength:{get:function(){return l(this._batchTable)?this._batchTable.batchTableByteLength:0}},innerContents:{get:function(){}},ready:{get:function(){return this._ready}},tileset:{get:function(){return this._tileset}},tile:{get:function(){return this._tile}},url:{get:function(){return this._resource.getUrlComponent(!0)}},metadata:{get:function(){return this._metadata},set:function(e){this._metadata=e}},batchTable:{get:function(){return this._batchTable}},group:{get:function(){return this._group},set:function(e){this._group=e}}});function jet(e){return function(t,n){l(e._polygons)&&e._polygons.updateCommands(t,n)}}function qet(e,t){let n,i,o,r,s=e.POLYGONS_LENGTH??0,a=e.POLYLINES_LENGTH??0,c=e.POINTS_LENGTH??0;if(s>0&&l(e.POLYGON_BATCH_IDS)){let p=t.byteOffset+e.POLYGON_BATCH_IDS.byteOffset;n=new Uint16Array(t.buffer,p,s)}if(a>0&&l(e.POLYLINE_BATCH_IDS)){let p=t.byteOffset+e.POLYLINE_BATCH_IDS.byteOffset;i=new Uint16Array(t.buffer,p,a)}if(c>0&&l(e.POINT_BATCH_IDS)){let p=t.byteOffset+e.POINT_BATCH_IDS.byteOffset;o=new Uint16Array(t.buffer,p,c)}let d=l(n)||l(i)||l(o),u=s>0&&!l(n)||a>0&&!l(i)||c>0&&!l(o);if(d&&u)throw new me("If one group of batch ids is defined, then all batch ids must be defined");if(!l(n)&&!l(i)&&!l(o)){let p=0;if(!l(n)&&s>0)for(n=new Uint16Array(s),r=0;r<s;++r)n[r]=p++;if(!l(i)&&a>0)for(i=new Uint16Array(a),r=0;r<a;++r)i[r]=p++;if(!l(o)&&c>0)for(o=new Uint16Array(c),r=0;r<c;++r)o[r]=p++}return{polygons:n,polylines:i,points:o}}var rf=Uint32Array.BYTES_PER_ELEMENT;function $et(e){return new UC(e)}function ett(e){return new mw(e)}function ttt(e,t,n){n=n??0;let i=new Uint8Array(t),o=new DataView(t);n+=rf;let r=o.getUint32(n,!0);if(r!==1)throw new me(`Only Vector tile version 1 is supported. Version ${r} is not.`);n+=rf;let s=o.getUint32(n,!0);if(n+=rf,s===0){e._ready=!0;return}let a=o.getUint32(n,!0);if(n+=rf,a===0)throw new me("Feature table must have a byte length greater than zero");let c=o.getUint32(n,!0);n+=rf;let d=o.getUint32(n,!0);n+=rf;let u=o.getUint32(n,!0);n+=rf;let h=o.getUint32(n,!0);n+=rf;let p=o.getUint32(n,!0);n+=rf;let A=o.getUint32(n,!0);n+=rf;let f=o.getUint32(n,!0);n+=rf;let b=Zr(i,n,a);n+=a;let C=new Uint8Array(t,n,c);n+=c;let T,E;d>0&&(T=Zr(i,n,d),n+=d,u>0&&(E=new Uint8Array(t,n,u),E=new Uint8Array(E),n+=u));let S=b.POLYGONS_LENGTH??0,I=b.POLYLINES_LENGTH??0,R=b.POINTS_LENGTH??0,V=S+I+R,W=new Xh(e,V,T,E,jet(e));if(e._batchTable=W,V===0)return;let B=new Qh(b,C),N=B.getGlobalProperty("REGION");if(!l(N))throw new me("Feature table global property: REGION must be defined");let P=de.unpack(N),g=N[4],_=N[5],Z=e._tile.computedTransform,G=B.getGlobalProperty("RTC_CENTER",H.FLOAT,3);l(G)?(G=m.unpack(G),F.multiplyByPoint(Z,G,G)):(G=de.center(P),G.height=L.lerp(g,_,.5),G=ie.WGS84.cartographicToCartesian(G));let w=qet(b,C);if(n+=(4-n%4)%4,S>0){B.featuresLength=S;let k=B.getPropertyArray("POLYGON_COUNTS",H.UNSIGNED_INT,1)??B.getPropertyArray("POLYGON_COUNT",H.UNSIGNED_INT,1);if(!l(k))throw new me("Feature table property: POLYGON_COUNTS must be defined when POLYGONS_LENGTH is greater than 0");let v=B.getPropertyArray("POLYGON_INDEX_COUNTS",H.UNSIGNED_INT,1)??B.getPropertyArray("POLYGON_INDEX_COUNT",H.UNSIGNED_INT,1);if(!l(v))throw new me("Feature table property: POLYGON_INDEX_COUNTS must be defined when POLYGONS_LENGTH is greater than 0");let D=k.reduce(function(j,ee){return j+ee*2},0),Y=v.reduce(function(j,ee){return j+ee},0),O=new Uint32Array(t,n,Y);n+=h;let J=new Uint16Array(t,n,D);n+=p;let te,z;l(b.POLYGON_MINIMUM_HEIGHTS)&&l(b.POLYGON_MAXIMUM_HEIGHTS)&&(te=B.getPropertyArray("POLYGON_MINIMUM_HEIGHTS",H.FLOAT,1),z=B.getPropertyArray("POLYGON_MAXIMUM_HEIGHTS",H.FLOAT,1)),e._polygons=new sw({positions:J,counts:k,indexCounts:v,indices:O,minimumHeight:g,maximumHeight:_,polygonMinimumHeights:te,polygonMaximumHeights:z,center:G,rectangle:P,boundingVolume:e.tile.boundingVolume.boundingVolume,batchTable:W,batchIds:w.polygons,modelMatrix:Z})}let X=e._tileset;if(I>0){B.featuresLength=I;let k=B.getPropertyArray("POLYLINE_COUNTS",H.UNSIGNED_INT,1)??B.getPropertyArray("POLYLINE_COUNT",H.UNSIGNED_INT,1);if(!l(k))throw new me("Feature table property: POLYLINE_COUNTS must be defined when POLYLINES_LENGTH is greater than 0");let v=B.getPropertyArray("POLYLINE_WIDTHS",H.UNSIGNED_SHORT,1);if(!l(v)){v=new Uint16Array(I);for(let te=0;te<I;++te)v[te]=2}let D=k.reduce(function(te,z){return te+z*3},0),Y=new Uint16Array(t,n,D);n+=A;let O=X.examineVectorLinesFunction;if(l(O)){let te=hw(new Uint16Array(Y),P,g,_,ie.WGS84);ntt(te,k,w.polylines,W,e.url,O)}let J=$et;l(X.classificationType)&&(J=ett),e._polylines=J({positions:Y,widths:v,counts:k,batchIds:w.polylines,minimumHeight:g,maximumHeight:_,center:G,rectangle:P,boundingVolume:e.tile.boundingVolume.boundingVolume,batchTable:W,classificationType:X.classificationType,keepDecodedPositions:X.vectorKeepDecodedPositions})}if(R>0){let k=new Uint16Array(t,n,R*3);n+=f,e._points=new rw({positions:k,batchIds:w.points,minimumHeight:g,maximumHeight:_,rectangle:P,batchTable:W,heightReference:X.heightReference,scene:X.scene})}}function G4(e){let t=e.featuresLength;if(!l(e._features)&&t>0){let n=new Array(t);l(e._polygons)&&e._polygons.createFeatures(e,n),l(e._polylines)&&e._polylines.createFeatures(e,n),l(e._points)&&e._points.createFeatures(e,n),e._features=n}}sf.prototype.hasProperty=function(e,t){return this._batchTable.hasProperty(e,t)};sf.prototype.getFeature=function(e){return l(this._features)||G4(this),this._features[e]};sf.prototype.applyDebugSettings=function(e,t){l(this._polygons)&&this._polygons.applyDebugSettings(e,t),l(this._polylines)&&this._polylines.applyDebugSettings(e,t),l(this._points)&&this._points.applyDebugSettings(e,t)};sf.prototype.applyStyle=function(e){l(this._features)||G4(this),l(this._polygons)&&this._polygons.applyStyle(e,this._features),l(this._polylines)&&this._polylines.applyStyle(e,this._features),l(this._points)&&this._points.applyStyle(e,this._features)};sf.prototype.update=function(e,t){let n=!0;l(this._polygons)&&(this._polygons.classificationType=this._tileset.classificationType,this._polygons.debugWireframe=this._tileset.debugWireframe,this._polygons.update(t),n=n&&this._polygons.ready),l(this._polylines)&&(this._polylines.update(t),n=n&&this._polylines.ready),l(this._points)&&(this._points.update(t),n=n&&this._points.ready),l(this._batchTable)&&n&&(l(this._features)||G4(this),this._batchTable.update(e,t),this._ready=!0)};sf.prototype.pick=function(e,t,n){};sf.prototype.getPolylinePositions=function(e){let t=this._polylines;if(l(t))return t.getPositions(e)};sf.prototype.isDestroyed=function(){return!1};sf.prototype.destroy=function(){return this._polygons=this._polygons&&this._polygons.destroy(),this._polylines=this._polylines&&this._polylines.destroy(),this._points=this._points&&this._points.destroy(),this._batchTable=this._batchTable&&this._batchTable.destroy(),he(this)};function ntt(e,t,n,i,o,r){let s=t.length,a=0;for(let c=0;c<s;c++){let d=t[c]*3,u=e.slice(a,a+d);a+=d,r(u,n[c],o,i)}}var fw=sf;var Jni=y(x(),1);var l$n=y(x(),1);var kqn=y(x(),1);var af=class af{constructor(){Bn(this,"_collection",null);Bn(this,"_index",-1);Bn(this,"_byteOffset",-1)}static clone(t,n){let i=t._collection._getMaterialClass();return n.featureId=t.featureId,n.show=t.show,n.setMaterial(t.getMaterial(new i)),n}_isResizable(){return this._index===this._collection.primitiveCount-1}get featureId(){return this._getUint32(af.Layout.FEATURE_ID_U32)}set featureId(t){this._setUint32(af.Layout.FEATURE_ID_U32,t)}get show(){return this._getUint8(af.Layout.SHOW_U8)===1}set show(t){this._setUint8(af.Layout.SHOW_U8,t?1:0)}getMaterial(t){let n=this._collection,i=n._getMaterialClass();return i.unpack(n._materialView,this._index*i.packedLength,t)}setMaterial(t){let n=this._collection,i=n._getMaterialClass();return i.pack(t,n._materialView,this._index*i.packedLength),this._dirty=!0,t}get _dirty(){return this._getUint8(af.Layout.DIRTY_U8)===1}set _dirty(t){this._collection._primitiveView.setUint8(this._byteOffset+af.Layout.DIRTY_U8,t?1:0),t&&this._collection._makeDirty(this._index)}get _pickId(){return this._getUint32(af.Layout.PICK_ID_U32)}set _pickId(t){this._setUint32(af.Layout.PICK_ID_U32,t)}_getUint8(t){return this._collection._primitiveView.getUint8(this._byteOffset+t)}_setUint8(t,n){this._collection._primitiveView.setUint8(this._byteOffset+t,n),this._dirty=!0}_getUint32(t){return this._collection._primitiveView.getUint32(this._byteOffset+t,!0)}_setUint32(t,n){this._collection._primitiveView.setUint32(this._byteOffset+t,n,!0),this._dirty=!0}_getFloat32(t){return this._collection._primitiveView.getFloat32(this._byteOffset+t,!0)}_setFloat32(t,n){this._collection._primitiveView.setFloat32(this._byteOffset+t,n,!0),this._dirty=!0}toJSON(){let n=this._collection._getMaterialClass();return{featureId:this.featureId,show:this.show,dirty:this._dirty,material:this.getMaterial(new n).toJSON()}}};Bn(af,"Layout",{FEATURE_ID_U32:0,SHOW_U8:4,DIRTY_U8:5,PICK_ID_U32:8,__BYTE_LENGTH:12});var L4=af,qr=L4;var n$n=y(x(),1);var O_=class O_{constructor(t=Q.EMPTY_OBJECT){Bn(this,"_renderContext",null);this.show=t.show??!0,this.modelMatrix=F.clone(t.modelMatrix??F.IDENTITY),this.boundingVolume=new ue,this.boundingVolumeWC=new ue,this._allowPicking=t.allowPicking??!1,this.debugShowBoundingVolume=t.debugShowBoundingVolume??!1,this._primitiveCount=0,this._primitiveCountMax=t.primitiveCountMax??O_.DEFAULT_CAPACITY,this._primitiveView=null,this._positionCount=0,this._positionCountMax=t.vertexCountMax??O_.DEFAULT_CAPACITY,this._positionView=null,this._materialView=null,this._dirtyOffset=0,this._dirtyCount=0,this._dirtyBoundingVolume=!1,this._allocatePrimitiveBuffer(),this._allocatePositionBuffer(t.positionDatatype??H.DOUBLE),this._allocateMaterialBuffer()}_getCollectionClass(){fe.throwInstantiationError()}_getPrimitiveClass(){fe.throwInstantiationError()}_getMaterialClass(){fe.throwInstantiationError()}_allocatePrimitiveBuffer(){let t=this._getPrimitiveClass().Layout;this._primitiveView=new DataView(new ArrayBuffer(this._primitiveCountMax*t.__BYTE_LENGTH))}_allocatePositionBuffer(t){this._positionView=H.createTypedArray(t,this._positionCountMax*3)}_allocateMaterialBuffer(){let t=this._getMaterialClass();this._materialView=new DataView(new ArrayBuffer(this._primitiveCountMax*t.packedLength))}isDestroyed(){return!1}destroy(){l(this._renderContext)&&(this._renderContext.destroy(),this._renderContext=void 0,this._dirtyOffset=0,this._dirtyCount=this.primitiveCount)}sort(t,n=new Uint32Array(this.primitiveCount)){let i=this._getPrimitiveClass(),o=this._getCollectionClass(),{primitiveCount:r}=this,s=new i,a=new i,c=new Uint32Array(r);for(let u=0;u<r;u++)c[u]=u;c.sort((u,h)=>t(this.get(u,s),this.get(h,a)));for(let u=0;u<r;u++)n[c[u]]=u;let d=o._cloneEmpty(this);for(let u=0;u<r;u++){let h=this.get(c[u],s),p=d.add({},a);i.clone(h,p)}return o._replaceBuffers(d,this),this._dirtyOffset=0,this._dirtyCount=r,n}static clone(t,n){let i=t._getPrimitiveClass().Layout,o=t._getMaterialClass(),r=t._getPrimitiveClass();this._copySubDataView(t._primitiveView,n._primitiveView,t.primitiveCount*i.__BYTE_LENGTH),this._copySubArray(t._positionView,n._positionView,t.vertexCount*3),this._copySubDataView(t._materialView,n._materialView,t.primitiveCount*o.packedLength),n.show=t.show,n.debugShowBoundingVolume=t.debugShowBoundingVolume,n._primitiveCount=t._primitiveCount,n._positionCount=t._positionCount;let s=new r;for(let a=0,c=n.primitiveCount;a<c;a++)n.get(a,s)._pickId=0;return n._dirtyOffset=0,n._dirtyCount=n.primitiveCount,t.boundingVolume.clone(n.boundingVolume),n}static _cloneEmpty(t){fe.throwInstantiationError()}static _replaceBuffers(t,n){n._primitiveView=t._primitiveView,n._positionView=t._positionView,n._materialView=t._materialView}_updateBoundingVolume(){let t=this._positionView.constructor,n=new t(this._positionView.buffer,this._positionView.byteOffset,this._positionCount*3);ue.fromVertices(n,m.ZERO,3,this.boundingVolume),ue.transform(this.boundingVolume,this.modelMatrix,this.boundingVolumeWC),this._dirtyBoundingVolume=!1}get(t,n){return n._collection=this,n._index=t,n._byteOffset=t*this._getPrimitiveClass().Layout.__BYTE_LENGTH,n}add(t=Q.EMPTY_OBJECT,n){let i=this._getMaterialClass();return n=this.get(this._primitiveCount++,n),n.featureId=this._primitiveCount-1,n.show=t.show??!0,n.setMaterial(t.material??i.DEFAULT_MATERIAL),n._pickId=0,n._dirty=!0,n}_makeDirty(t){this._dirtyCount===0?(this._dirtyCount=1,this._dirtyOffset=t):t<this._dirtyOffset?(this._dirtyCount+=this._dirtyOffset-t,this._dirtyOffset=t):t+1>this._dirtyOffset+this._dirtyCount&&(this._dirtyCount=t+1-this._dirtyOffset)}_makeDirtyBoundingVolume(){this._dirtyBoundingVolume=!0}update(t){t.mode!==se.SCENE3D&&_t("bufferprim-scenemode","BufferPrimitiveCollection requires SceneMode.SCENE3D."),this._dirtyBoundingVolume&&this._updateBoundingVolume()}get primitiveCount(){return this._primitiveCount}get primitiveCountMax(){return this._primitiveCountMax}get byteLength(){return this._primitiveView.byteLength+this._positionView.byteLength+this._materialView.byteLength}get vertexCount(){return this._positionCount}get vertexCountMax(){return this._positionCountMax}static _copySubArray(t,n,i){for(let o=0;o<i;o++)n[o]=t[o]}static _copySubDataView(t,n,i){this._copySubArray(new Uint32Array(t.buffer,t.byteOffset,t.byteLength/4),new Uint32Array(n.buffer,n.byteOffset,n.byteLength/4),i/4)}toJSON(){let t=this._getPrimitiveClass(),n=new t,i=[];for(let o=0,r=this.primitiveCount;o<r;o++)i.push(this.get(o,n).toJSON());return i}};Bn(O_,"DEFAULT_CAPACITY",1024),Bn(O_,"Error",{ERR_RESIZE:"BufferPrimitive range cannot be resized after initialization.",ERR_CAPACITY:"BufferPrimitiveCollection capacity exceeded.",ERR_MULTIPLE_OF_FOUR:"BufferPrimitive byte length must be a multiple of 4.",ERR_OUT_OF_RANGE:"BufferPrimitive buffer access out of range."});var W4=O_,Js=W4;var{ERR_CAPACITY:a$n}=Js.Error,itt=new m,C9=class C9 extends qr{constructor(){super(...arguments);Bn(this,"_collection",null)}static clone(n,i){return super.clone(n,i),i.setPosition(n.getPosition(itt)),i}get vertexOffset(){return this._getUint32(C9.Layout.POSITION_OFFSET_U32)}get vertexCount(){return 1}getPosition(n){let i=this._collection._positionView;return m.fromArray(i,this.vertexOffset*3,n)}setPosition(n){let i=this._collection,o=this.vertexOffset;i._positionView[o*3]=n.x,i._positionView[o*3+1]=n.y,i._positionView[o*3+2]=n.z,i._makeDirtyBoundingVolume()}toJSON(){return{...super.toJSON(),position:m.pack(this.getPosition(),[])}}};Bn(C9,"Layout",{...qr.Layout,POSITION_OFFSET_U32:qr.Layout.__BYTE_LENGTH,__BYTE_LENGTH:qr.Layout.__BYTE_LENGTH+4});var F4=C9,Vd=F4;var nei=y(x(),1);var H$n=y(x(),1);var m$n=y(x(),1),pw=`in vec3 positionHigh;
in vec3 positionLow;
in vec4 pickColor;
in vec3 showPixelSizeAndColor;
in vec2 outlineWidthAndOutlineColor;
out vec4 v_pickColor;
out vec4 v_color;
out vec4 v_outlineColor;
out float v_innerRadiusFrac;
void main()
{
// Unpack attributes.
float show = showPixelSizeAndColor.x;
float pixelSize = showPixelSizeAndColor.y;
vec4 color = czm_decodeRGB8(showPixelSizeAndColor.z);
float outlineWidth = outlineWidthAndOutlineColor.x;
vec4 outlineColor = czm_decodeRGB8(outlineWidthAndOutlineColor.y);
///////////////////////////////////////////////////////////////////////////
float innerRadius = 0.5 * pixelSize * czm_pixelRatio;
float outerRadius = (0.5 * pixelSize + outlineWidth) * czm_pixelRatio;
///////////////////////////////////////////////////////////////////////////
vec4 p = czm_translateRelativeToEye(positionHigh, positionLow);
vec4 positionEC = czm_modelViewRelativeToEye * p;
///////////////////////////////////////////////////////////////////////////
gl_Position = czm_projection * positionEC;
czm_vertexLogDepth();
v_pickColor = pickColor / 255.0;
v_color = color;
v_color.a *= show;
v_outlineColor = outlineColor;
v_outlineColor.a *= show;
v_innerRadiusFrac = innerRadius / outerRadius;
gl_PointSize = 2.0 * outerRadius * show;
gl_Position *= show;
}
`;var f$n=y(x(),1),Aw=`in vec4 v_pickColor;
in vec4 v_color;
in vec4 v_outlineColor;
in float v_innerRadiusFrac;
void main()
{
// Distance between fragment and point center, 0 to 0.5.
float distanceToCenter = length(gl_PointCoord - vec2(0.5));
float delta = fwidth(distanceToCenter);
float outerLimit = 0.5;
float innerLimit = 0.5 * v_innerRadiusFrac;
float outerAlpha = 1.0 - smoothstep(max(0.0, outerLimit - delta), outerLimit, distanceToCenter);
float innerAlpha = 1.0 - smoothstep(innerLimit - delta, innerLimit, distanceToCenter);
vec4 color = vec4(mix(v_outlineColor.rgb, v_color.rgb, innerAlpha), outerAlpha);
if (color.a < 0.005) // matches 0/255 and 1/255
{
discard;
}
out_FragColor = czm_gammaCorrect(color);
czm_writeLogDepth();
}
`;var E$n=y(x(),1);var b$n=y(x(),1);var gw=class{constructor(t=Q.EMPTY_OBJECT){this.color=U.clone(t.color??U.WHITE),this.outlineColor=U.clone(t.outlineColor??U.WHITE),this.outlineWidth=t.outlineWidth??0}static get packedLength(){return this.Layout.__BYTE_LENGTH}static pack(t,n,i){n.setUint32(this.Layout.COLOR_U32+i,t.color.toRgba(),!0),n.setUint32(this.Layout.OUTLINE_COLOR_U32+i,t.outlineColor.toRgba(),!0),n.setUint8(this.Layout.OUTLINE_WIDTH_U8+i,t.outlineWidth)}static unpack(t,n,i){return U.fromRgba(t.getUint32(this.Layout.COLOR_U32+n,!0),i.color),U.fromRgba(t.getUint32(this.Layout.OUTLINE_COLOR_U32+n,!0),i.outlineColor),i.outlineWidth=t.getUint8(this.Layout.OUTLINE_WIDTH_U8+n),i}toJSON(){return{color:this.color.toCssHexString(),outlineColor:this.outlineColor.toCssHexString(),outlineWidth:this.outlineWidth}}};Bn(gw,"Layout",{COLOR_U32:0,OUTLINE_COLOR_U32:4,OUTLINE_WIDTH_U8:8,__BYTE_LENGTH:12}),Bn(gw,"DEFAULT_MATERIAL");var Ol=gw;var bw=class bw extends Ol{constructor(t=Q.EMPTY_OBJECT){super(t),this.size=t.size??1}static pack(t,n,i){super.pack(t,n,i),n.setUint8(this.Layout.SIZE_U8+i,t.size)}static unpack(t,n,i){return super.unpack(t,n,i),i.size=t.getUint8(this.Layout.SIZE_U8+n),i}toJSON(){return{...super.toJSON(),size:this.size}}};Bn(bw,"Layout",{...Ol.Layout,SIZE_U8:Ol.Layout.__BYTE_LENGTH,__BYTE_LENGTH:Ol.Layout.__BYTE_LENGTH+4}),Bn(bw,"DEFAULT_MATERIAL",Object.freeze(new bw));var B4=bw,_g=B4;var Ig={positionHigh:0,positionLow:1,pickColor:2,showSizeAndColor:3,outlineWidthAndOutlineColor:4},Zg=new Vd,yw=new _g,xw=new U,Epe=new m,DC=new In;function ott(e,t,n){let i=t.context;if(n=n||{destroy:stt},!l(n.attributeArrays)){let o=e.primitiveCountMax;n.attributeArrays={positionHigh:new Float32Array(o*3),positionLow:new Float32Array(o*3),pickColor:new Uint8Array(o*4),showSizeAndColor:new Float32Array(o*3),outlineWidthAndOutlineColor:new Float32Array(o*2)}}if(l(n.pickIds)||(n.pickIds=[]),e._dirtyCount>0){let{attributeArrays:o,pickIds:r}=n,s=o.positionHigh,a=o.positionLow,c=o.pickColor,d=o.showSizeAndColor,u=o.outlineWidthAndOutlineColor,{_dirtyOffset:h,_dirtyCount:p}=e;for(let A=h,f=h+p;A<f;A++)if(e.get(A,Zg),!!Zg._dirty){if(e._allowPicking&&Zg._pickId===0){let b=i.createPickId({collection:e,index:A,get primitive(){return e.get(this.index,new Vd)}});Zg._pickId=b.key,r.push(b)}Zg.getPosition(Epe),In.fromCartesian(Epe,DC),Zg.getMaterial(yw),U.fromRgba(Zg._pickId,xw),s[A*3]=DC.high.x,s[A*3+1]=DC.high.y,s[A*3+2]=DC.high.z,a[A*3]=DC.low.x,a[A*3+1]=DC.low.y,a[A*3+2]=DC.low.z,c[A*4]=U.floatToByte(xw.red),c[A*4+1]=U.floatToByte(xw.green),c[A*4+2]=U.floatToByte(xw.blue),c[A*4+3]=U.floatToByte(xw.alpha),d[A*3]=Zg.show?1:0,d[A*3+1]=yw.size,d[A*3+2]=on.encodeRGB8(yw.color),u[A*2]=yw.outlineWidth,u[A*2+1]=on.encodeRGB8(yw.outlineColor),Zg._dirty=!1}}if(l(n.vertexArray)){if(e._dirtyCount>0){for(let o in Ig)if(Object.hasOwn(Ig,o)){let r=o;n.vertexArray.copyAttributeFromRange(Ig[r],n.attributeArrays[r],e._dirtyOffset,e._dirtyCount)}}}else{let{attributeArrays:o}=n;n.vertexArray=new kn({context:i,attributes:[{index:Ig.positionHigh,componentDatatype:H.FLOAT,componentsPerAttribute:3,vertexBuffer:it.createVertexBuffer({typedArray:o.positionHigh,context:i,usage:Be.STATIC_DRAW})},{index:Ig.positionLow,componentDatatype:H.FLOAT,componentsPerAttribute:3,vertexBuffer:it.createVertexBuffer({typedArray:o.positionLow,context:i,usage:Be.STATIC_DRAW})},{index:Ig.pickColor,componentDatatype:H.UNSIGNED_BYTE,componentsPerAttribute:4,vertexBuffer:it.createVertexBuffer({typedArray:o.pickColor,context:i,usage:Be.STATIC_DRAW})},{index:Ig.showSizeAndColor,componentDatatype:H.FLOAT,componentsPerAttribute:3,vertexBuffer:it.createVertexBuffer({typedArray:o.showSizeAndColor,context:i,usage:Be.STATIC_DRAW})},{index:Ig.outlineWidthAndOutlineColor,componentDatatype:H.FLOAT,componentsPerAttribute:2,vertexBuffer:it.createVertexBuffer({typedArray:o.outlineWidthAndOutlineColor,context:i,usage:Be.STATIC_DRAW})}]})}return l(n.renderState)||(n.renderState=Qe.fromCache({blending:ln.ALPHA_BLEND,depthTest:{enabled:!0}})),l(n.shaderProgram)||(n.shaderProgram=tn.fromCache({context:i,vertexShaderSource:new ze({sources:[pw]}),fragmentShaderSource:new ze({sources:[Aw]}),attributeLocations:Ig})),(!l(n.command)||rtt(e,n.command))&&(n.command=new ot({vertexArray:n.vertexArray,renderState:n.renderState,shaderProgram:n.shaderProgram,primitiveType:We.POINTS,pass:Ge.OPAQUE,pickId:"v_pickColor",owner:e,count:e.primitiveCount,modelMatrix:e.modelMatrix,boundingVolume:e.boundingVolumeWC,debugShowBoundingVolume:e.debugShowBoundingVolume})),t.commandList.push(n.command),e._dirtyCount=0,e._dirtyOffset=0,n}function rtt(e,t){let n=F.equals(e.modelMatrix,t._modelMatrix),i=ue.equals(e.boundingVolumeWC,t._boundingVolume);return e.primitiveCount!==t._count||e.debugShowBoundingVolume!==t.debugShowBoundingVolume||!n||!i}function stt(){let e=this;if(l(e.vertexArray)&&e.vertexArray.destroy(),l(e.shaderProgram)&&e.shaderProgram.destroy(),l(e.renderState)&&Qe.removeFromCache(e.renderState),l(e.pickIds))for(let t of e.pickIds)t.destroy()}var Cw=ott;var w4=class e extends Js{constructor(t=Q.EMPTY_OBJECT){super({...t,vertexCountMax:t.primitiveCountMax})}_getCollectionClass(){return e}_getPrimitiveClass(){return Vd}_getMaterialClass(){return _g}static _cloneEmpty(t){return new e({primitiveCountMax:t.primitiveCountMax})}add(t,n=new Vd){return super.add(t,n),n._setUint32(Vd.Layout.POSITION_OFFSET_U32,this._positionCount++),n.setPosition(t.position??m.ZERO),n}update(t){super.update(t);let n=t.passes;this.show&&(n.render||n.pick)&&(this._renderContext=Cw(this,t,this._renderContext))}},Rg=w4;var dei=y(x(),1);var{ERR_CAPACITY:sei,ERR_RESIZE:aei,ERR_OUT_OF_RANGE:cei}=Js.Error,Bm=class Bm extends qr{constructor(){super(...arguments);Bn(this,"_collection",null)}static clone(n,i){return super.clone(n,i),i.setPositions(n.getPositions()),i.setHoles(n.getHoles()),i.setTriangles(n.getTriangles()),i}get vertexOffset(){return this._getUint32(Bm.Layout.POSITION_OFFSET_U32)}get vertexCount(){return this._getUint32(Bm.Layout.POSITION_COUNT_U32)}getPositions(n){return this._getPositionsRange(0,this.vertexCount,n)}setPositions(n){let i=this._collection,o=this.vertexOffset,r=this.vertexCount,s=n.length/3,a=i.vertexCount+s-r;i._positionCount=a,this._setUint32(Bm.Layout.POSITION_COUNT_U32,s);let c=i._positionView;for(let d=0;d<s;d++)c[(o+d)*3]=n[d*3],c[(o+d)*3+1]=n[d*3+1],c[(o+d)*3+2]=n[d*3+2];i._makeDirtyBoundingVolume()}get outerVertexOffset(){return this.vertexOffset}get outerVertexCount(){return this.holeCount>0?this.getHoles()[0]:this.vertexCount}getOuterPositions(n){return this._getPositionsRange(0,this.outerVertexCount,n)}get holeOffset(){return this._getUint32(Bm.Layout.HOLE_OFFSET_U32)}get holeCount(){return this._getUint32(Bm.Layout.HOLE_COUNT_U32)}getHoles(n){let{holeOffset:i,holeCount:o}=this,r=this._collection._holeIndexView;if(!l(n)){let s=r.byteOffset+i*r.BYTES_PER_ELEMENT,a=r.constructor;return new a(r.buffer,s,o)}for(let s=0;s<o;s++)n[s]=r[i+s];return n}setHoles(n){let i=this._collection,o=this.holeOffset,r=this.holeCount,s=n.length,a=i.holeCount+s-r;i._holeCount=a,this._setUint32(Bm.Layout.HOLE_COUNT_U32,s);let c=i._holeIndexView;for(let d=0;d<s;d++)c[o+d]=n[d];i._makeDirtyBoundingVolume()}getHoleVertexCount(n){let i=this.getHoles(),o=i[n];return n===i.length-1?this.vertexCount-o:i[n+1]-o}getHolePositions(n,i){let r=this.getHoles()[n],s=this.getHoleVertexCount(n);return this._getPositionsRange(r,s,i)}_getPositionsRange(n,i,o){let r=this._collection,s=this._collection._positionView,a=this.vertexOffset+n;if(!l(o)){let c=s.byteOffset+a*3*s.BYTES_PER_ELEMENT,d=s.constructor;return new d(s.buffer,c,i*3)}for(let c=0;c<i;c++)o[c*3]=s[(a+c)*3],o[c*3+1]=s[(a+c)*3+1],o[c*3+2]=s[(a+c)*3+2];return o}get triangleOffset(){return this._getUint32(Bm.Layout.TRIANGLE_OFFSET_U32)}get triangleCount(){return this._getUint32(Bm.Layout.TRIANGLE_COUNT_U32)}getTriangles(n){let{triangleOffset:i,triangleCount:o}=this,r=this._collection._triangleIndexView;if(!l(n)){let s=r.byteOffset+i*3*r.BYTES_PER_ELEMENT,a=r.constructor;return new a(r.buffer,s,o*3)}for(let s=0;s<o;s++)n[s*3]=r[(i+s)*3],n[s*3+1]=r[(i+s)*3+1],n[s*3+2]=r[(i+s)*3+2];return n}setTriangles(n){let i=this._collection,o=this.triangleOffset,r=this.triangleCount,s=n.length/3,a=i.triangleCount+s-r;i._triangleCount+=s-r,this._setUint32(Bm.Layout.TRIANGLE_COUNT_U32,s);let c=i._triangleIndexView;for(let d=0;d<s;d++)c[(o+d)*3]=n[d*3],c[(o+d)*3+1]=n[d*3+1],c[(o+d)*3+2]=n[d*3+2];i._makeDirtyBoundingVolume()}toJSON(){return{...super.toJSON(),positions:Array.from(this.getPositions()),holes:Array.from(this.getHoles()),triangles:Array.from(this.getTriangles())}}};Bn(Bm,"Layout",{...qr.Layout,POSITION_OFFSET_U32:qr.Layout.__BYTE_LENGTH,POSITION_COUNT_U32:qr.Layout.__BYTE_LENGTH+4,HOLE_OFFSET_U32:qr.Layout.__BYTE_LENGTH+8,HOLE_COUNT_U32:qr.Layout.__BYTE_LENGTH+12,TRIANGLE_OFFSET_U32:qr.Layout.__BYTE_LENGTH+16,TRIANGLE_COUNT_U32:qr.Layout.__BYTE_LENGTH+20,__BYTE_LENGTH:qr.Layout.__BYTE_LENGTH+24});var N4=Bm,wa=N4;var tti=y(x(),1);var Qei=y(x(),1);var hei=y(x(),1),Tw=`in vec3 positionHigh;
in vec3 positionLow;
in vec4 pickColor;
in vec2 showAndColor;
out vec4 v_pickColor;
out vec4 v_color;
void main()
{
float show = showAndColor.x;
vec4 color = czm_decodeRGB8(showAndColor.y);
///////////////////////////////////////////////////////////////////////////
vec4 p = czm_translateRelativeToEye(positionHigh, positionLow);
vec4 positionEC = czm_modelViewRelativeToEye * p;
///////////////////////////////////////////////////////////////////////////
gl_Position = czm_projection * positionEC;
czm_vertexLogDepth();
v_pickColor = pickColor / 255.0;
v_color = color;
v_color.a *= show;
gl_Position *= show;
}
`;var pei=y(x(),1),Ew=`in vec4 v_pickColor;
in vec4 v_color;
void main()
{
if (v_color.a < 0.005) // matches 0/255 and 1/255
{
discard;
}
out_FragColor = czm_gammaCorrect(v_color);
czm_writeLogDepth();
}
`;var yei=y(x(),1);var T9=class T9 extends Ol{constructor(t=Q.EMPTY_OBJECT){super(t)}};Bn(T9,"DEFAULT_MATERIAL",Object.freeze(new T9));var P4=T9,Vg=P4;var z0={positionHigh:0,positionLow:1,pickColor:2,showAndColor:3},Xs=new wa,Spe=new Vg,Sw=new U,_pe=new m,kC=new In;function att(e,t,n){let i=t.context;if(n=n||{destroy:dtt},!l(n.attributeArrays)||!l(n.indexArray)){let{vertexCountMax:o,triangleCountMax:r}=e;n.indexArray=Ue.createTypedArray(o,r*3),n.attributeArrays={positionHigh:new Float32Array(o*3),positionLow:new Float32Array(o*3),pickColor:new Uint8Array(o*4),showAndColor:new Float32Array(o*2)}}if(l(n.pickIds)||(n.pickIds=[]),e._dirtyCount>0){let{attributeArrays:o,pickIds:r}=n,{_dirtyOffset:s,_dirtyCount:a}=e,c=n.indexArray,d=o.positionHigh,u=o.positionLow,h=o.pickColor,p=o.showAndColor;for(let A=s,f=s+a;A<f;A++){if(e.get(A,Xs),!Xs._dirty)continue;if(e._allowPicking&&Xs._pickId===0){let R=i.createPickId({collection:e,index:A,get primitive(){return e.get(A,new wa)}});Xs._pickId=R.key,r.push(R)}let b=Xs.triangleOffset,C=Xs.vertexOffset,T=Xs.getTriangles();for(let R=0,V=Xs.triangleCount;R<V;R++)c[b*3]=C+T[R*3],c[b*3+1]=C+T[R*3+1],c[b*3+2]=C+T[R*3+2],b++;let E=Xs.show,S=Xs.getPositions();Xs.getMaterial(Spe);let I=on.encodeRGB8(Spe.color);U.fromRgba(Xs._pickId,Sw);for(let R=0,V=Xs.vertexCount;R<V;R++)m.fromArray(S,R*3,_pe),In.fromCartesian(_pe,kC),d[C*3]=kC.high.x,d[C*3+1]=kC.high.y,d[C*3+2]=kC.high.z,u[C*3]=kC.low.x,u[C*3+1]=kC.low.y,u[C*3+2]=kC.low.z,h[C*4]=U.floatToByte(Sw.red),h[C*4+1]=U.floatToByte(Sw.green),h[C*4+2]=U.floatToByte(Sw.blue),h[C*4+3]=U.floatToByte(Sw.alpha),p[C*2]=E?1:0,p[C*2+1]=I,C++;Xs._dirty=!1}}if(l(n.vertexArray)){if(e._dirtyCount>0){let{indexOffset:o,indexCount:r,vertexOffset:s,vertexCount:a}=ltt(e);n.vertexArray.copyIndexFromRange(n.indexArray,o,r);for(let c in z0)if(Object.hasOwn(z0,c)){let d=c;n.vertexArray.copyAttributeFromRange(z0[d],n.attributeArrays[d],s,a)}}}else{let{attributeArrays:o}=n;n.vertexArray=new kn({context:i,indexBuffer:it.createIndexBuffer({context:i,typedArray:n.indexArray,usage:Be.STATIC_DRAW,indexDatatype:Ue.fromTypedArray(n.indexArray)}),attributes:[{index:z0.positionHigh,componentDatatype:H.FLOAT,componentsPerAttribute:3,vertexBuffer:it.createVertexBuffer({typedArray:o.positionHigh,context:i,usage:Be.STATIC_DRAW})},{index:z0.positionLow,componentDatatype:H.FLOAT,componentsPerAttribute:3,vertexBuffer:it.createVertexBuffer({typedArray:o.positionLow,context:i,usage:Be.STATIC_DRAW})},{index:z0.pickColor,componentDatatype:H.UNSIGNED_BYTE,componentsPerAttribute:4,vertexBuffer:it.createVertexBuffer({typedArray:o.pickColor,context:i,usage:Be.STATIC_DRAW})},{index:z0.showAndColor,componentDatatype:H.FLOAT,componentsPerAttribute:2,vertexBuffer:it.createVertexBuffer({typedArray:o.showAndColor,context:i,usage:Be.STATIC_DRAW})}]})}return l(n.renderState)||(n.renderState=Qe.fromCache({blending:ln.DISABLED,depthTest:{enabled:!0}})),l(n.shaderProgram)||(n.shaderProgram=tn.fromCache({context:i,vertexShaderSource:new ze({sources:[Tw]}),fragmentShaderSource:new ze({sources:[Ew]}),attributeLocations:z0})),(!l(n.command)||ctt(e,n.command))&&(n.command=new ot({vertexArray:n.vertexArray,renderState:n.renderState,shaderProgram:n.shaderProgram,primitiveType:We.TRIANGLES,pass:Ge.OPAQUE,pickId:"v_pickColor",owner:e,count:e.triangleCount*3,modelMatrix:e.modelMatrix,boundingVolume:e.boundingVolumeWC,debugShowBoundingVolume:e.debugShowBoundingVolume})),t.commandList.push(n.command),e._dirtyCount=0,e._dirtyOffset=0,n}function ctt(e,t){let n=F.equals(e.modelMatrix,t._modelMatrix),i=ue.equals(e.boundingVolumeWC,t._boundingVolume);return e.triangleCount*3!==t._count||e.debugShowBoundingVolume!==t.debugShowBoundingVolume||!n||!i}function ltt(e){let{_dirtyOffset:t,_dirtyCount:n}=e;e.get(t,Xs);let i=Xs.vertexOffset,o=Xs.triangleOffset*3;e.get(t+n-1,Xs);let r=Xs.vertexOffset+Xs.vertexCount-i,s=(Xs.triangleOffset+Xs.triangleCount)*3-o;return{indexOffset:o,indexCount:s,vertexOffset:i,vertexCount:r}}function dtt(){let e=this;if(l(e.vertexArray)&&e.vertexArray.destroy(),l(e.shaderProgram)&&e.shaderProgram.destroy(),l(e.renderState)&&Qe.removeFromCache(e.renderState),l(e.pickIds))for(let t of e.pickIds)t.destroy()}var _w=att;var{ERR_CAPACITY:$ei}=Js.Error,X4=class e extends Js{constructor(t=Q.EMPTY_OBJECT){super(t),this._holeCount=0,this._holeCountMax=t.holeCountMax??Js.DEFAULT_CAPACITY,this._holeIndexView=null,this._triangleCount=0,this._triangleCountMax=t.triangleCountMax??Js.DEFAULT_CAPACITY,this._triangleIndexView=null,this._allocateHoleIndexBuffer(),this._allocateTriangleIndexBuffer()}_getCollectionClass(){return e}_getPrimitiveClass(){return wa}_getMaterialClass(){return Vg}_allocateHoleIndexBuffer(){this._holeIndexView=Ue.createTypedArray(this._positionCountMax,this._holeCountMax)}_allocateTriangleIndexBuffer(){this._triangleIndexView=Ue.createTypedArray(this._positionCountMax,this._triangleCountMax*3)}static clone(t,n){return super.clone(t,n),this._copySubArray(t._holeIndexView,n._holeIndexView,t.holeCount),this._copySubArray(t._triangleIndexView,n._triangleIndexView,t._triangleCount*3),n._holeCount=t._holeCount,n._triangleCount=t._triangleCount,n}static _cloneEmpty(t){return new e({primitiveCountMax:t.primitiveCountMax,vertexCountMax:t.vertexCountMax,holeCountMax:t.holeCountMax,triangleCountMax:t.triangleCountMax})}static _replaceBuffers(t,n){super._replaceBuffers(t,n),n._holeIndexView=t._holeIndexView,n._triangleIndexView=t._triangleIndexView}add(t,n=new wa){super.add(t,n);let i=this._positionCount;n._setUint32(wa.Layout.POSITION_OFFSET_U32,i),n._setUint32(wa.Layout.POSITION_COUNT_U32,0);let o=this._holeCount;n._setUint32(wa.Layout.HOLE_OFFSET_U32,o),n._setUint32(wa.Layout.HOLE_COUNT_U32,0);let r=this._triangleCount;return n._setUint32(wa.Layout.TRIANGLE_OFFSET_U32,r),n._setUint32(wa.Layout.TRIANGLE_COUNT_U32,0),l(t.positions)&&n.setPositions(t.positions),l(t.holes)&&n.setHoles(t.holes),l(t.triangles)&&n.setTriangles(t.triangles),n}update(t){super.update(t);let n=t.passes;this.show&&(n.render||n.pick)&&(this._renderContext=_w(this,t,this._renderContext))}get byteLength(){return super.byteLength+this._holeIndexView.byteLength+this._triangleIndexView.byteLength}get holeCount(){return this._holeCount}get holeCountMax(){return this._holeCountMax}get triangleCount(){return this._triangleCount}get triangleCountMax(){return this._triangleCountMax}},Gg=X4;var cti=y(x(),1);var{ERR_RESIZE:rti,ERR_CAPACITY:sti}=Js.Error,z_=class z_ extends qr{constructor(){super(...arguments);Bn(this,"_collection",null)}static clone(n,i){return super.clone(n,i),i.setPositions(n.getPositions()),i}get vertexOffset(){return this._getUint32(z_.Layout.POSITION_OFFSET_U32)}get vertexCount(){return this._getUint32(z_.Layout.POSITION_COUNT_U32)}getPositions(n){let{vertexOffset:i,vertexCount:o}=this,r=this._collection._positionView;if(!l(n)){let s=r.byteOffset+i*3*r.BYTES_PER_ELEMENT,a=r.constructor;return new a(r.buffer,s,o*3)}for(let s=0;s<o;s++)n[s*3]=r[(i+s)*3],n[s*3+1]=r[(i+s)*3+1],n[s*3+2]=r[(i+s)*3+2];return n}setPositions(n){let i=this._collection,o=this.vertexOffset,r=this.vertexCount,s=n.length/3,a=i._positionCount+s-r;i._positionCount=a,this._setUint32(z_.Layout.POSITION_COUNT_U32,s);let c=i._positionView;for(let d=0;d<s;d++)c[(o+d)*3]=n[d*3],c[(o+d)*3+1]=n[d*3+1],c[(o+d)*3+2]=n[d*3+2];i._makeDirtyBoundingVolume()}toJSON(){return{...super.toJSON(),positions:Array.from(this.getPositions())}}};Bn(z_,"Layout",{...qr.Layout,POSITION_OFFSET_U32:qr.Layout.__BYTE_LENGTH,POSITION_COUNT_U32:qr.Layout.__BYTE_LENGTH+4,__BYTE_LENGTH:qr.Layout.__BYTE_LENGTH+8});var Y4=z_,zl=Y4;var jti=y(x(),1);var kti=y(x(),1);var uti=y(x(),1),Iw=`in vec3 positionHigh;
in vec3 positionLow;
in vec3 prevPositionHigh;
in vec3 prevPositionLow;
in vec3 nextPositionHigh;
in vec3 nextPositionLow;
in vec4 pickColor;
in vec4 showColorWidthAndTexCoord;
out vec4 v_pickColor;
out vec4 v_color;
out vec2 v_st;
out float v_width;
out float v_polylineAngle;
void main()
{
float show = showColorWidthAndTexCoord.x;
vec4 color = czm_decodeRGB8(showColorWidthAndTexCoord.y);
float width = showColorWidthAndTexCoord.z;
float texCoord = showColorWidthAndTexCoord.w;
///////////////////////////////////////////////////////////////////////////
bool usePrevious = texCoord == 1.0;
float expandDir = gl_VertexID % 2 == 1 ? 1.0 : -1.0;
float polylineAngle;
vec4 positionEC = czm_translateRelativeToEye(positionHigh, positionLow);
vec4 prevPositionEC = czm_translateRelativeToEye(prevPositionHigh, prevPositionLow);
vec4 nextPositionEC = czm_translateRelativeToEye(nextPositionHigh, nextPositionLow);
vec4 positionWC = getPolylineWindowCoordinates(positionEC, prevPositionEC, nextPositionEC, expandDir, width, usePrevious, polylineAngle);
///////////////////////////////////////////////////////////////////////////
gl_Position = czm_viewportOrthographic * positionWC * show;
v_pickColor = pickColor / 255.0;
v_color = color;
v_color.a *= show;
v_st.s = texCoord;
v_st.t = czm_writeNonPerspective(clamp(expandDir, 0.0, 1.0), gl_Position.w);
v_width = width;
v_polylineAngle = polylineAngle;
}
`;var hti=y(x(),1),Zw=`in vec4 v_pickColor;
in vec4 v_color;
void main()
{
if (v_color.a < 0.005) // matches 0/255 and 1/255
{
discard;
}
out_FragColor = czm_gammaCorrect(v_color);
czm_writeLogDepth();
}
`;var gti=y(x(),1);var Rw=class Rw extends Ol{constructor(t=Q.EMPTY_OBJECT){super(t),this.width=t.width??1}static pack(t,n,i){super.pack(t,n,i),n.setUint8(this.Layout.WIDTH_U8+i,t.width)}static unpack(t,n,i){return super.unpack(t,n,i),i.width=t.getUint8(this.Layout.WIDTH_U8+n),i}toJSON(){return{...super.toJSON(),width:this.width}}};Bn(Rw,"Layout",{...Ol.Layout,WIDTH_U8:Ol.Layout.__BYTE_LENGTH,__BYTE_LENGTH:Ol.Layout.__BYTE_LENGTH+4}),Bn(Rw,"DEFAULT_MATERIAL",Object.freeze(new Rw));var M4=Rw,Lg=M4;var wm={positionHigh:0,positionLow:1,prevPositionHigh:2,prevPositionLow:3,nextPositionHigh:4,nextPositionLow:5,pickColor:6,showColorWidthAndTexCoord:7},oc=new zl,v4=new Lg,Vw=new U,H_=new m,QC=new m,OC=new m,zC=new In,HC=new In,JC=new In;function utt(e,t,n){let i=t.context;if(n=n||{destroy:ftt},!l(n.attributeArrays)||!l(n.indexArray)){let o=e.vertexCountMax-e.primitiveCount,r=e.vertexCountMax*2;n.indexArray=Ue.createTypedArray(r,o*6),n.attributeArrays={positionHigh:new Float32Array(r*3),positionLow:new Float32Array(r*3),prevPositionHigh:new Float32Array(r*3),prevPositionLow:new Float32Array(r*3),nextPositionHigh:new Float32Array(r*3),nextPositionLow:new Float32Array(r*3),pickColor:new Uint8Array(r*4),showColorWidthAndTexCoord:new Float32Array(r*4)}}if(l(n.pickIds)||(n.pickIds=[]),e._dirtyCount>0){let{_dirtyOffset:o,_dirtyCount:r}=e,{attributeArrays:s,pickIds:a}=n,c=n.indexArray,d=s.positionHigh,u=s.positionLow,h=s.prevPositionHigh,p=s.prevPositionLow,A=s.nextPositionHigh,f=s.nextPositionLow,b=s.pickColor,C=s.showColorWidthAndTexCoord;for(let T=o,E=o+r;T<E;T++){if(e.get(T,oc),!oc._dirty)continue;if(e._allowPicking&&oc._pickId===0){let B=i.createPickId({collection:e,index:T,get primitive(){return e.get(T,new zl)}});oc._pickId=B.key,a.push(B)}let S=oc.getPositions();oc.getMaterial(v4);let I=on.encodeRGB8(v4.color);U.fromRgba(oc._pickId,Vw);let R=oc.show,V=oc.vertexOffset*2,W=(oc.vertexOffset-T)*6;for(let B=0,N=oc.vertexCount;B<N;B++){let P=B===0,g=B===N-1;m.fromArray(S,B*3,H_),P?(m.fromArray(S,(B+1)*3,OC),m.subtract(H_,OC,QC),m.add(H_,QC,QC)):g?(m.fromArray(S,(B-1)*3,QC),m.subtract(H_,QC,OC),m.add(H_,OC,OC)):(m.fromArray(S,(B-1)*3,QC),m.fromArray(S,(B+1)*3,OC)),g||(c[W]=V,c[W+1]=V+1,c[W+2]=V+2,c[W+3]=V+2,c[W+4]=V+1,c[W+5]=V+3,W+=6),In.fromCartesian(H_,zC),In.fromCartesian(QC,HC),In.fromCartesian(OC,JC);for(let _=0;_<2;_++)d[V*3]=zC.high.x,d[V*3+1]=zC.high.y,d[V*3+2]=zC.high.z,u[V*3]=zC.low.x,u[V*3+1]=zC.low.y,u[V*3+2]=zC.low.z,h[V*3]=HC.high.x,h[V*3+1]=HC.high.y,h[V*3+2]=HC.high.z,p[V*3]=HC.low.x,p[V*3+1]=HC.low.y,p[V*3+2]=HC.low.z,A[V*3]=JC.high.x,A[V*3+1]=JC.high.y,A[V*3+2]=JC.high.z,f[V*3]=JC.low.x,f[V*3+1]=JC.low.y,f[V*3+2]=JC.low.z,b[V*4]=U.floatToByte(Vw.red),b[V*4+1]=U.floatToByte(Vw.green),b[V*4+2]=U.floatToByte(Vw.blue),b[V*4+3]=U.floatToByte(Vw.alpha),C[V*4]=R?1:0,C[V*4+1]=I,C[V*4+2]=v4.width,C[V*4+3]=B/(N-1),V++}oc._dirty=!1}}if(l(n.vertexArray)){if(e._dirtyCount>0){let{indexOffset:o,indexCount:r,vertexOffset:s,vertexCount:a}=htt(e);n.vertexArray.copyIndexFromRange(n.indexArray,o,r);for(let c in wm)if(Object.hasOwn(wm,c)){let d=c;n.vertexArray.copyAttributeFromRange(wm[d],n.attributeArrays[d],s,a)}}}else{let o=n.attributeArrays;n.vertexArray=new kn({context:i,indexBuffer:it.createIndexBuffer({context:i,typedArray:n.indexArray,usage:Be.STATIC_DRAW,indexDatatype:Ue.fromTypedArray(n.indexArray)}),attributes:[{index:wm.positionHigh,componentDatatype:H.FLOAT,componentsPerAttribute:3,vertexBuffer:it.createVertexBuffer({typedArray:o.positionHigh,context:i,usage:Be.STATIC_DRAW})},{index:wm.positionLow,componentDatatype:H.FLOAT,componentsPerAttribute:3,vertexBuffer:it.createVertexBuffer({typedArray:o.positionLow,context:i,usage:Be.STATIC_DRAW})},{index:wm.prevPositionHigh,componentDatatype:H.FLOAT,componentsPerAttribute:3,vertexBuffer:it.createVertexBuffer({typedArray:o.prevPositionHigh,context:i,usage:Be.STATIC_DRAW})},{index:wm.prevPositionLow,componentDatatype:H.FLOAT,componentsPerAttribute:3,vertexBuffer:it.createVertexBuffer({typedArray:o.prevPositionLow,context:i,usage:Be.STATIC_DRAW})},{index:wm.nextPositionHigh,componentDatatype:H.FLOAT,componentsPerAttribute:3,vertexBuffer:it.createVertexBuffer({typedArray:o.nextPositionHigh,context:i,usage:Be.STATIC_DRAW})},{index:wm.nextPositionLow,componentDatatype:H.FLOAT,componentsPerAttribute:3,vertexBuffer:it.createVertexBuffer({typedArray:o.nextPositionLow,context:i,usage:Be.STATIC_DRAW})},{index:wm.pickColor,componentDatatype:H.UNSIGNED_BYTE,componentsPerAttribute:4,vertexBuffer:it.createVertexBuffer({typedArray:o.pickColor,context:i,usage:Be.STATIC_DRAW})},{index:wm.showColorWidthAndTexCoord,componentDatatype:H.FLOAT,componentsPerAttribute:4,vertexBuffer:it.createVertexBuffer({typedArray:o.showColorWidthAndTexCoord,context:i,usage:Be.STATIC_DRAW})}]})}return l(n.renderState)||(n.renderState=Qe.fromCache({blending:ln.DISABLED,depthTest:{enabled:!0}})),l(n.shaderProgram)||(n.shaderProgram=tn.fromCache({context:i,vertexShaderSource:new ze({sources:[Zl,Iw]}),fragmentShaderSource:new ze({sources:[Zw]}),attributeLocations:wm})),(!l(n.command)||mtt(e,n.command))&&(n.command=new ot({vertexArray:n.vertexArray,renderState:n.renderState,shaderProgram:n.shaderProgram,primitiveType:We.TRIANGLES,pass:Ge.OPAQUE,pickId:"v_pickColor",owner:e,count:Ipe(e),modelMatrix:e.modelMatrix,boundingVolume:e.boundingVolumeWC,debugShowBoundingVolume:e.debugShowBoundingVolume})),t.commandList.push(n.command),e._dirtyCount=0,e._dirtyOffset=0,n}function mtt(e,t){let n=F.equals(e.modelMatrix,t._modelMatrix),i=ue.equals(e.boundingVolumeWC,t._boundingVolume);return Ipe(e)!==t._count||e.debugShowBoundingVolume!==t.debugShowBoundingVolume||!n||!i}function Ipe(e){return(e.vertexCount-e.primitiveCount)*6}function htt(e){let{_dirtyOffset:t,_dirtyCount:n}=e;e.get(t,oc);let i=oc.vertexOffset*2,r=(oc.vertexOffset-t)*6;e.get(t+n-1,oc);let s=(oc.vertexOffset+oc.vertexCount)*2-i,c=(s/2-n)*6;return{indexOffset:r,indexCount:c,vertexOffset:i,vertexCount:s}}function ftt(){let e=this;if(l(e.vertexArray)&&e.vertexArray.destroy(),l(e.shaderProgram)&&e.shaderProgram.destroy(),l(e.renderState)&&Qe.removeFromCache(e.renderState),l(e.pickIds))for(let t of e.pickIds)t.destroy()}var Gw=utt;var U4=class e extends Js{_getCollectionClass(){return e}_getPrimitiveClass(){return zl}_getMaterialClass(){return Lg}static _cloneEmpty(t){return new e({primitiveCountMax:t.primitiveCountMax,vertexCountMax:t.vertexCountMax})}add(t,n=new zl){super.add(t,n);let i=this._positionCount;return n._setUint32(zl.Layout.POSITION_OFFSET_U32,i),n._setUint32(zl.Layout.POSITION_COUNT_U32,0),l(t.positions)&&n.setPositions(t.positions),n}update(t){super.update(t);let n=t.passes;this.show&&(n.render||n.pick)&&(this._renderContext=Gw(this,t,this._renderContext))}},H0=U4;var mni=y(x(),1);var ini=y(x(),1);function J_(e,t){this._conditionsExpression=He(e,!0),this._conditions=e.conditions,this._runtimeConditions=void 0,Att(this,t)}Object.defineProperties(J_.prototype,{conditionsExpression:{get:function(){return this._conditionsExpression}}});function ptt(e,t){this.condition=e,this.expression=t}function Att(e,t){let n=[],i=e._conditions;if(!l(i))return;let o=i.length;for(let r=0;r<o;++r){let s=i[r],a=String(s[0]),c=String(s[1]);n.push(new ptt(new ym(a,t),new ym(c,t)))}e._runtimeConditions=n}J_.prototype.evaluate=function(e,t){let n=this._runtimeConditions;if(!l(n))return;let i=n.length;for(let o=0;o<i;++o){let r=n[o];if(r.condition.evaluate(e))return r.expression.evaluate(e,t)}};J_.prototype.evaluateColor=function(e,t){let n=this._runtimeConditions;if(!l(n))return;let i=n.length;for(let o=0;o<i;++o){let r=n[o];if(r.condition.evaluate(e))return r.expression.evaluateColor(e,t)}};J_.prototype.getShaderFunction=function(e,t,n,i){let o=this._runtimeConditions;if(!l(o)||o.length===0)return;let r="",s=o.length;for(let a=0;a<s;++a){let c=o[a],d=c.condition.getShaderExpression(t,n),u=c.expression.getShaderExpression(t,n);r+=` ${a===0?"if":"else if"} (${d})
{
return ${u};
}
`}return r=`${i} ${e}
{
${r} return ${i}(1.0);
}
`,r};J_.prototype.getVariables=function(){let e=[],t=this._runtimeConditions;if(!l(t)||t.length===0)return e;let n=t.length;for(let i=0;i<n;++i){let o=t[i];ri(e,o.condition.getVariables()),ri(e,o.expression.getVariables())}return e=e.filter(function(i,o,r){return r.indexOf(i)===o}),e};var Lw=J_;function J0(e){this._style={},this._ready=!1,this._show=void 0,this._color=void 0,this._pointSize=void 0,this._pointOutlineColor=void 0,this._pointOutlineWidth=void 0,this._labelColor=void 0,this._labelOutlineColor=void 0,this._labelOutlineWidth=void 0,this._font=void 0,this._labelStyle=void 0,this._labelText=void 0,this._backgroundColor=void 0,this._backgroundPadding=void 0,this._backgroundEnabled=void 0,this._scaleByDistance=void 0,this._translucencyByDistance=void 0,this._distanceDisplayCondition=void 0,this._heightOffset=void 0,this._anchorLineEnabled=void 0,this._anchorLineColor=void 0,this._image=void 0,this._disableDepthTestDistance=void 0,this._horizontalOrigin=void 0,this._verticalOrigin=void 0,this._labelHorizontalOrigin=void 0,this._labelVerticalOrigin=void 0,this._meta=void 0,this._lineWidth=void 0,this._colorShaderFunction=void 0,this._showShaderFunction=void 0,this._pointSizeShaderFunction=void 0,this._colorShaderFunctionReady=!1,this._showShaderFunctionReady=!1,this._pointSizeShaderFunctionReady=!1,this._colorShaderTranslucent=!1,gtt(this,e)}function gtt(e,t){t=He(t,!0)??e._style,e._style=t,e.show=t.show,e.color=t.color,e.pointSize=t.pointSize,e.pointOutlineColor=t.pointOutlineColor,e.pointOutlineWidth=t.pointOutlineWidth,e.labelColor=t.labelColor,e.labelOutlineColor=t.labelOutlineColor,e.labelOutlineWidth=t.labelOutlineWidth,e.labelStyle=t.labelStyle,e.font=t.font,e.labelText=t.labelText,e.backgroundColor=t.backgroundColor,e.backgroundPadding=t.backgroundPadding,e.backgroundEnabled=t.backgroundEnabled,e.scaleByDistance=t.scaleByDistance,e.translucencyByDistance=t.translucencyByDistance,e.distanceDisplayCondition=t.distanceDisplayCondition,e.heightOffset=t.heightOffset,e.anchorLineEnabled=t.anchorLineEnabled,e.anchorLineColor=t.anchorLineColor,e.image=t.image,e.disableDepthTestDistance=t.disableDepthTestDistance,e.horizontalOrigin=t.horizontalOrigin,e.verticalOrigin=t.verticalOrigin,e.labelHorizontalOrigin=t.labelHorizontalOrigin,e.labelVerticalOrigin=t.labelVerticalOrigin,e.lineWidth=t.lineWidth;let n={};if(l(t.meta)){let i=t.defines,o=t.meta??Q.EMPTY_OBJECT;for(let r in o)o.hasOwnProperty(r)&&(n[r]=new ym(o[r],i))}e._meta=n,e._ready=!0}function fr(e,t){let n=(e._style??Q.EMPTY_OBJECT).defines;if(l(t)){if(typeof t=="boolean"||typeof t=="number")return new ym(String(t));if(typeof t=="string")return new ym(t,n);if(l(t.conditions))return new Lw(t,n)}else return;return t}function pr(e){if(l(e)){if(l(e.expression))return e.expression;if(l(e.conditionsExpression))return He(e.conditionsExpression,!0)}else return;return e}Object.defineProperties(J0.prototype,{style:{get:function(){return this._style}},show:{get:function(){return this._show},set:function(e){this._show=fr(this,e),this._style.show=pr(this._show),this._showShaderFunctionReady=!1}},color:{get:function(){return this._color},set:function(e){this._color=fr(this,e),this._style.color=pr(this._color),this._colorShaderFunctionReady=!1}},pointSize:{get:function(){return this._pointSize},set:function(e){this._pointSize=fr(this,e),this._style.pointSize=pr(this._pointSize),this._pointSizeShaderFunctionReady=!1}},pointOutlineColor:{get:function(){return this._pointOutlineColor},set:function(e){this._pointOutlineColor=fr(this,e),this._style.pointOutlineColor=pr(this._pointOutlineColor)}},pointOutlineWidth:{get:function(){return this._pointOutlineWidth},set:function(e){this._pointOutlineWidth=fr(this,e),this._style.pointOutlineWidth=pr(this._pointOutlineWidth)}},labelColor:{get:function(){return this._labelColor},set:function(e){this._labelColor=fr(this,e),this._style.labelColor=pr(this._labelColor)}},labelOutlineColor:{get:function(){return this._labelOutlineColor},set:function(e){this._labelOutlineColor=fr(this,e),this._style.labelOutlineColor=pr(this._labelOutlineColor)}},labelOutlineWidth:{get:function(){return this._labelOutlineWidth},set:function(e){this._labelOutlineWidth=fr(this,e),this._style.labelOutlineWidth=pr(this._labelOutlineWidth)}},font:{get:function(){return this._font},set:function(e){this._font=fr(this,e),this._style.font=pr(this._font)}},labelStyle:{get:function(){return this._labelStyle},set:function(e){this._labelStyle=fr(this,e),this._style.labelStyle=pr(this._labelStyle)}},labelText:{get:function(){return this._labelText},set:function(e){this._labelText=fr(this,e),this._style.labelText=pr(this._labelText)}},backgroundColor:{get:function(){return this._backgroundColor},set:function(e){this._backgroundColor=fr(this,e),this._style.backgroundColor=pr(this._backgroundColor)}},backgroundPadding:{get:function(){return this._backgroundPadding},set:function(e){this._backgroundPadding=fr(this,e),this._style.backgroundPadding=pr(this._backgroundPadding)}},backgroundEnabled:{get:function(){return this._backgroundEnabled},set:function(e){this._backgroundEnabled=fr(this,e),this._style.backgroundEnabled=pr(this._backgroundEnabled)}},scaleByDistance:{get:function(){return this._scaleByDistance},set:function(e){this._scaleByDistance=fr(this,e),this._style.scaleByDistance=pr(this._scaleByDistance)}},translucencyByDistance:{get:function(){return this._translucencyByDistance},set:function(e){this._translucencyByDistance=fr(this,e),this._style.translucencyByDistance=pr(this._translucencyByDistance)}},distanceDisplayCondition:{get:function(){return this._distanceDisplayCondition},set:function(e){this._distanceDisplayCondition=fr(this,e),this._style.distanceDisplayCondition=pr(this._distanceDisplayCondition)}},heightOffset:{get:function(){return this._heightOffset},set:function(e){this._heightOffset=fr(this,e),this._style.heightOffset=pr(this._heightOffset)}},anchorLineEnabled:{get:function(){return this._anchorLineEnabled},set:function(e){this._anchorLineEnabled=fr(this,e),this._style.anchorLineEnabled=pr(this._anchorLineEnabled)}},anchorLineColor:{get:function(){return this._anchorLineColor},set:function(e){this._anchorLineColor=fr(this,e),this._style.anchorLineColor=pr(this._anchorLineColor)}},image:{get:function(){return this._image},set:function(e){this._image=fr(this,e),this._style.image=pr(this._image)}},disableDepthTestDistance:{get:function(){return this._disableDepthTestDistance},set:function(e){this._disableDepthTestDistance=fr(this,e),this._style.disableDepthTestDistance=pr(this._disableDepthTestDistance)}},horizontalOrigin:{get:function(){return this._horizontalOrigin},set:function(e){this._horizontalOrigin=fr(this,e),this._style.horizontalOrigin=pr(this._horizontalOrigin)}},verticalOrigin:{get:function(){return this._verticalOrigin},set:function(e){this._verticalOrigin=fr(this,e),this._style.verticalOrigin=pr(this._verticalOrigin)}},labelHorizontalOrigin:{get:function(){return this._labelHorizontalOrigin},set:function(e){this._labelHorizontalOrigin=fr(this,e),this._style.labelHorizontalOrigin=pr(this._labelHorizontalOrigin)}},labelVerticalOrigin:{get:function(){return this._labelVerticalOrigin},set:function(e){this._labelVerticalOrigin=fr(this,e),this._style.labelVerticalOrigin=pr(this._labelVerticalOrigin)}},lineWidth:{get:function(){return this._lineWidth},set:function(e){this._lineWidth=fr(this,e),this._style.lineWidth=pr(this._lineWidth)}},meta:{get:function(){return this._meta},set:function(e){this._meta=e}}});J0.fromUrl=function(e){return Le.createIfNeeded(e).fetchJson(e).then(function(n){return new J0(n)})};J0.prototype.getColorShaderFunction=function(e,t,n){return this._colorShaderFunctionReady?(n.translucent=this._colorShaderTranslucent,this._colorShaderFunction):(this._colorShaderFunctionReady=!0,l(this.color)&&l(this.color.getShaderFunction)?this._colorShaderFunction=this.color.getShaderFunction(e,t,n,"vec4"):this._colorShaderFunction=void 0,this._colorShaderTranslucent=n.translucent,this._colorShaderFunction)};J0.prototype.getShowShaderFunction=function(e,t,n){return this._showShaderFunctionReady?this._showShaderFunction:(this._showShaderFunctionReady=!0,l(this.show)&&l(this.show.getShaderFunction)?this._showShaderFunction=this.show.getShaderFunction(e,t,n,"bool"):this._showShaderFunction=void 0,this._showShaderFunction)};J0.prototype.getPointSizeShaderFunction=function(e,t,n){return this._pointSizeShaderFunctionReady?this._pointSizeShaderFunction:(this._pointSizeShaderFunctionReady=!0,l(this.pointSize)&&l(this.pointSize.getShaderFunction)?this._pointSizeShaderFunction=this.pointSize.getShaderFunction(e,t,n,"float"):this._pointSizeShaderFunction=void 0,this._pointSizeShaderFunction)};J0.prototype.getVariables=function(){let e=[];return l(this.color)&&l(this.color.getVariables)&&ri(e,this.color.getVariables()),l(this.show)&&l(this.show.getVariables)&&ri(e,this.show.getVariables()),l(this.pointSize)&&l(this.pointSize.getVariables)&&ri(e,this.pointSize.getVariables()),e=e.filter(function(t,n,i){return i.indexOf(t)===n}),e};var Wg=J0;var Vni=y(x(),1);var Zpe=new m,Rpe=new Vd,Vpe=new zl,Gpe=new wa;function btt(e,t){let n=t.scene.nodes,i={collections:[],collectionLocalMatrices:[]};for(let o=0;o<n.length;o++)Lpe(e,n[o],F.IDENTITY,i);return i}function ytt(e){let t=e.BYTES_PER_ELEMENT*8;return Math.pow(2,t)-1}function xtt(e,t){let n=ytt(e),i=0;for(let o=0;o<=e.length;o++)if(o===e.length||e[o]===n){let r=o-i;r>0&&t(i,r),i=o+1}}function Ctt(e){let t={pointPrimitiveCount:0,pointVertexCount:0,polylinePrimitiveCount:0,polylineVertexCount:0,polygonPrimitiveCount:0,polygonVertexCount:0,polygonHoleCount:0,polygonTriangleCount:0},n=e.vector,i=e.primitiveType,r=It.getAttributeBySemantic(e,ct.POSITION).count,s=e.indices?el.readIndicesAsTypedArray(e.indices):void 0;if(i===We.POINTS)t.pointPrimitiveCount+=n.count,t.pointVertexCount+=n.count;else if(i===We.LINE_STRIP)t.polylinePrimitiveCount+=n.count,t.polylineVertexCount+=s.length-(n.count-1);else if(i===We.TRIANGLES){t.polygonPrimitiveCount+=n.count,t.polygonVertexCount+=r,t.polygonTriangleCount+=s.length/3;let a=n.polygonHoleCounts;if(a)for(let c=0;c<a.length;c++)t.polygonHoleCount+=a[c]}else throw new me(`Unexpected primitive type: ${i}`);return t}function Ttt(e,t,n){let i=t.vector,o=It.getAttributeBySemantic(t,ct.POSITION),r=o.typedArray??el.readAttributeAsTypedArray(o),s=r.length/3,a=t.indices?el.readIndicesAsTypedArray(t.indices):void 0,c=t.featureIds?.[0],d,u;if(c instanceof Tn.FeatureIdAttribute&&(d=It.getAttributeBySemantic(t,ct.FEATURE_ID,c.setIndex),u=d.typedArray??el.readAttributeAsTypedArray(d)),n instanceof Rg)for(let h=0,p=a?a.length:s;h<p;h++){let A=a?a[h]:h;m.fromArray(r,A*3,Zpe),n.add({position:Zpe},Rpe);let f=Math.trunc(u[A]);f!==c.nullFeatureId&&(Rpe.featureId=f)}else if(n instanceof H0)xtt(a,(h,p)=>{let A=a[h],f=r.subarray(A*3,(A+p)*3);n.add({positions:f},Vpe);let b=Math.trunc(u[A]);b!==c.nullFeatureId&&(Vpe.featureId=b)});else if(n instanceof Gg){let h=i.polygonAttributeOffsets,p=i.polygonIndicesOffsets,A=i.polygonHoleCounts,f=i.polygonHoleOffsets,b=h.length;for(let C=0;C<b;C++){let T=h[C],E=C+1<b?h[C+1]:s,S=r.subarray(T*3,E*3),I;if(l(A)&&A[C]>0){let N=A[C];I=f.slice(C,C+N);for(let P=0;P<N;P++)I[C]-=T}let R=p[C],V=C+1<b?p[C+1]:a.length,W=a.slice(R,V);for(let N=0;N<V;N++)W[N]-=T;n.add({positions:S,triangles:W,holes:I},Gpe);let B=Math.trunc(u[T]);B!==c.nullFeatureId&&(Gpe.featureId=B)}}}function Lpe(e,t,n,i){let o=It.getNodeTransform(t),r=F.multiplyTransformation(n,o,new F),s=t.primitives;for(let c=0;c<s.length;c++){let d=s[c],u=d.primitiveType;if(!d.vector)continue;let h,p=Ctt(d);u===We.POINTS?h=new Rg({primitiveCountMax:p.pointPrimitiveCount}):u===We.LINE_STRIP?h=new H0({primitiveCountMax:p.polylinePrimitiveCount,vertexCountMax:p.polylineVertexCount}):u===We.TRIANGLES&&(h=new Gg({primitiveCountMax:p.polygonPrimitiveCount,vertexCountMax:p.polygonVertexCount,holeCountMax:p.polygonHoleCount,triangleCountMax:p.polygonTriangleCount})),i.collections.push(h),i.collectionLocalMatrices.push(F.clone(r)),Ttt(e,d,h)}let a=t.children;for(let c=0;c<a.length;c++)Lpe(e,a[c],r,i)}var Ww=btt;var D4=new Vd,k4=new zl,Q4=new wa,Fw=new _g,O4=new Lg,Wpe=new Vg,Fpe=new F,z4=class e{constructor(t,n,i){this._tileset=t,this._tile=n,this._resource=i,this._decodeModel=void 0,this._collections=[],this._collectionLocalMatrices=[],this._metadata=void 0,this._group=void 0,this.featurePropertiesDirty=!1,this._ready=!1,this._modelMatrix=F.clone(F.IDENTITY)}get featuresLength(){return this._collections.reduce((t,n)=>t+n.primitiveCount,0)}get pointsLength(){return this._collections.filter(t=>t instanceof Rg).reduce((t,n)=>t+n.primitiveCount,0)}get trianglesLength(){return this._collections.filter(t=>t instanceof Gg).reduce((t,n)=>t+n.triangleCount,0)}get geometryByteLength(){return this._collections.reduce((t,n)=>t+n.byteLength,0)}get texturesByteLength(){return 0}get batchTableByteLength(){return 0}get innerContents(){}get ready(){return this._ready}get tileset(){return this._tileset}get tile(){return this._tile}get url(){return this._resource.getUrlComponent(!0)}get batchTable(){}get metadata(){return this._metadata}set metadata(t){this._metadata=t}get group(){return this._group}set group(t){this._group=t}getFeature(t){}hasProperty(t,n){return!1}applyDebugSettings(t,n){n=t?n:U.WHITE,this.applyStyle(new Wg({color:n}))}applyStyle(t){let n=t.show?.evaluate(null)??!0,i=t.color?.evaluate(null,new U),o=a=>a instanceof Rg,r=a=>a instanceof H0,s=a=>a instanceof Gg;U.clone(i,Fw.color),Fw.size=t.pointSize?.evaluate(null),Fw.outlineWidth=t.pointOutlineWidth?.evaluate(null),t.pointOutlineColor?.evaluate(null,Fw.outlineColor);for(let a of this._collections.filter(o))for(let c=0,d=a.primitiveCount;c<d;c++)a.get(c,D4),D4.show=n,D4.setMaterial(Fw);U.clone(i,O4.color),O4.width=t.lineWidth?.evaluate(null)??1;for(let a of this._collections.filter(r))for(let c=0,d=a.primitiveCount;c<d;c++)a.get(c,k4),k4.show=n,k4.setMaterial(O4);U.clone(i,Wpe.color);for(let a of this._collections.filter(s))for(let c=0,d=a.primitiveCount;c<d;c++)a.get(c,Q4),Q4.show=n,Q4.setMaterial(Wpe)}update(t,n){if(l(this._decodeModel)&&!this._ready){let i=this._decodeModel;i.modelMatrix=this._tile.computedTransform,i.update(n),i.ready&&(Stt(this),this._decodeModel&&(this._decodeModel.destroy(),this._decodeModel=void 0),this._ready=!0)}F.multiplyTransformation(this._tile.computedTransform,this._modelMatrix,Fpe);for(let i=0;i<this._collections.length;i++)F.multiplyTransformation(Fpe,this._collectionLocalMatrices[i],this._collections[i].modelMatrix),this._collections[i].update(n)}pick(t,n,i){}isDestroyed(){return!1}destroy(){return this._decodeModel?.destroy(),this._decodeModel=void 0,this._collections.forEach(t=>t.destroy()),this._collections.length=0,he(this)}static async fromGltf(t,n,i,o){let r=new e(t,n,i),s=Ett(t,n,r,o),a=await gu.fromGltfAsync(s);return a.show=!1,r._decodeModel=a,r}};function Ett(e,t,n,i){return{gltf:i,basePath:n._resource,cull:!1,releaseGltfJson:!0,opaquePass:Ge.CESIUM_3D_TILE,modelMatrix:t.computedTransform,upAxis:e._modelUpAxis,forwardAxis:e._modelForwardAxis,incrementallyLoadTextures:!1,content:n,featureIdLabel:e.featureIdLabel,instanceFeatureIdLabel:e.instanceFeatureIdLabel,projectTo2D:e._projectTo2D,enablePick:e._enablePick,enableDebugWireframe:e._enableDebugWireframe,enableShowOutline:!1}}function Stt(e){let t=e._decodeModel.sceneGraph.components,n=It.getAxisCorrectionMatrix(t.upAxis,t.forwardAxis,new F);F.multiplyTransformation(t.transform,n,e._modelMatrix);let i=Ww(this,t);e._collections=i.collections,e._collectionLocalMatrices=i.collectionLocalMatrices}var K_=z4;var poi=y(x(),1);var ioi=y(x(),1);var tii=y(x(),1);function rc(){}rc._maxSortingConcurrency=Math.max(hn.hardwareConcurrency-1,1);rc._sorterTaskProcessor=void 0;rc._taskProcessorReady=!1;rc._error=void 0;rc._getSorterTaskProcessor=function(){if(!l(rc._sorterTaskProcessor)){let e=new $n("gaussianSplatSorter",rc._maxSortingConcurrency);e.initWebAssemblyModule({wasmBinaryFile:"ThirdParty/wasm_splats_bg.wasm"}).then(function(t){t?rc._taskProcessorReady=!0:rc._error=new me("Gaussian splat sorter could not be initialized.")}).catch(t=>{rc._error=t}),rc._sorterTaskProcessor=e}return rc._sorterTaskProcessor};rc.radixSortIndexes=function(e){let t=rc._getSorterTaskProcessor();if(l(rc._error))throw rc._error;if(rc._taskProcessorReady)return t.scheduleTask(e,[e.primitive.positions.buffer])};var KC=rc;var aii=y(x(),1);function sc(){}sc._maxSortingConcurrency=Math.max(hn.hardwareConcurrency-1,1);sc._textureTaskProcessor=void 0;sc._taskProcessorReady=!1;sc._error=void 0;sc._getTextureTaskProcessor=function(){if(!l(sc._textureTaskProcessor)){let e=new $n("gaussianSplatTextureGenerator",sc._maxSortingConcurrency);e.initWebAssemblyModule({wasmBinaryFile:"ThirdParty/wasm_splats_bg.wasm"}).then(function(t){t?sc._taskProcessorReady=!0:sc._error=new me("Gaussian splat sorter could not be initialized.")}).catch(t=>{sc._error=t}),sc._textureTaskProcessor=e}return sc._textureTaskProcessor};sc.generateFromAttributes=function(e){let t=sc._getTextureTaskProcessor();if(l(sc._error))throw sc._error;if(!sc._taskProcessorReady)return;let{attributes:n}=e;return t.scheduleTask(e,[n.positions.buffer,n.scales.buffer,n.rotations.buffer,n.colors.buffer])};var Bw=sc;var fii=y(x(),1);function _tt(e){let t=new GA;this.shaderBuilder=t,this.uniformMap={},this.renderStateOptions=Qe.getState(Qe.fromCache({depthTest:{enabled:!0,func:ec.LESS_OR_EQUAL}})),this.alphaOptions=new WC,this.hasSkipLevelOfDetail=!1,e._useLogDepth&&t.addDefine("LOG_DEPTH_READ_ONLY",void 0,pe.FRAGMENT)}var ww=_tt;var Aii=y(x(),1),Nw=`//
// Vertex shader for Gaussian splats.
// The splats are rendered as quads in view space. Splat attributes are loaded from a texture with precomputed 3D covariance.
// Passes local quad coordinates and color to the fragment shader for Gaussian evaluation.
//
// Discards splats outside the view frustum or with negligible screen size.
//
#if defined(HAS_SPHERICAL_HARMONICS)
const uint coefficientCount[3] = uint[3](3u,8u,15u);
const float SH_C1 = 0.48860251;
const float SH_C2[5] = float[5](
1.092548430,
-1.09254843,
0.315391565,
-1.09254843,
0.546274215
);
const float SH_C3[7] = float[7](
-0.59004358,
2.890611442,
-0.45704579,
0.373176332,
-0.45704579,
1.445305721,
-0.59004358
);
//Retrieve SH coefficient. Currently RG32UI format
uvec2 loadSHCoeff(uint splatID, int index) {
ivec2 shTexSize = textureSize(u_sphericalHarmonicsTexture, 0);
uint dims = coefficientCount[uint(u_sphericalHarmonicsDegree)-1u];
uint splatsPerRow = uint(shTexSize.x) / dims;
uint shIndex = (splatID%splatsPerRow) * dims + uint(index);
ivec2 shPosCoord = ivec2(shIndex, splatID / splatsPerRow);
return texelFetch(u_sphericalHarmonicsTexture, shPosCoord, 0).rg;
}
//Unpack RG32UI half float coefficients to vec3
vec3 halfToVec3(uvec2 packed) {
return vec3(unpackHalf2x16(packed.x), unpackHalf2x16(packed.y).x);
}
vec3 loadAndExpandSHCoeff(uint splatID, int index) {
uvec2 coeff = loadSHCoeff(splatID, index);
return halfToVec3(coeff);
}
vec3 evaluateSH(uint splatID, vec3 viewDir) {
vec3 result = vec3(0.0);
int coeffIndex = 0;
float x = viewDir.x, y = viewDir.y, z = viewDir.z;
if (u_sphericalHarmonicsDegree >= 1.) {
vec3 sh1 = loadAndExpandSHCoeff(splatID, coeffIndex++);
vec3 sh2 = loadAndExpandSHCoeff(splatID, coeffIndex++);
vec3 sh3 = loadAndExpandSHCoeff(splatID, coeffIndex++);
result += -SH_C1 * y * sh1 + SH_C1 * z * sh2 - SH_C1 * x * sh3;
if (u_sphericalHarmonicsDegree >= 2.) {
float xx = x * x;
float yy = y * y;
float zz = z * z;
float xy = x * y;
float yz = y * z;
float xz = x * z;
vec3 sh4 = loadAndExpandSHCoeff(splatID, coeffIndex++);
vec3 sh5 = loadAndExpandSHCoeff(splatID, coeffIndex++);
vec3 sh6 = loadAndExpandSHCoeff(splatID, coeffIndex++);
vec3 sh7 = loadAndExpandSHCoeff(splatID, coeffIndex++);
vec3 sh8 = loadAndExpandSHCoeff(splatID, coeffIndex++);
result += SH_C2[0] * xy * sh4 +
SH_C2[1] * yz * sh5 +
SH_C2[2] * (2.0f * zz - xx - yy) * sh6 +
SH_C2[3] * xz * sh7 +
SH_C2[4] * (xx - yy) * sh8;
if (u_sphericalHarmonicsDegree >= 3.) {
vec3 sh9 = loadAndExpandSHCoeff(splatID, coeffIndex++);
vec3 sh10 = loadAndExpandSHCoeff(splatID, coeffIndex++);
vec3 sh11 = loadAndExpandSHCoeff(splatID, coeffIndex++);
vec3 sh12 = loadAndExpandSHCoeff(splatID, coeffIndex++);
vec3 sh13 = loadAndExpandSHCoeff(splatID, coeffIndex++);
vec3 sh14 = loadAndExpandSHCoeff(splatID, coeffIndex++);
vec3 sh15 = loadAndExpandSHCoeff(splatID, coeffIndex++);
result += SH_C3[0] * y * (3.0f * xx - yy) * sh9 +
SH_C3[1] * xy * z * sh10 +
SH_C3[2] * y * (4.0f * zz - xx - yy) * sh11 +
SH_C3[3] * z * (2.0f * zz - 3.0f * xx - 3.0f * yy) * sh12 +
SH_C3[4] * x * (4.0f * zz - xx - yy) * sh13 +
SH_C3[5] * z * (xx - yy) * sh14 +
SH_C3[6] * x * (xx - 3.0f * yy) * sh15;
}
}
}
return result;
}
#endif
// Transforms and projects splat covariance into screen space and extracts the major and minor axes of the Gaussian ellipsoid
// which is used to calculate the vertex position in clip space.
vec4 calcCovVectors(vec3 viewPos, mat3 Vrk) {
vec4 t = vec4(viewPos, 1.0);
vec2 focal = vec2(czm_projection[0][0] * czm_viewport.z, czm_projection[1][1] * czm_viewport.w);
vec2 J1 = focal / t.z;
vec2 J2 = -focal * vec2(t.x, t.y) / (t.z * t.z);
mat3 J = mat3(
J1.x, 0.0, J2.x,
0.0, J1.y, J2.y,
0.0, 0.0, 0.0
);
mat3 R = mat3(czm_modelView);
//transform our covariance into view space
//ensures orientation is correct
mat3 Vrk_view = R * Vrk * transpose(R);
mat3 cov = transpose(J) * Vrk_view * J;
float diagonal1 = cov[0][0] + .3;
float offDiagonal = cov[0][1];
float diagonal2 = cov[1][1] + .3;
float mid = 0.5 * (diagonal1 + diagonal2);
float radius = length(vec2((diagonal1 - diagonal2) * 0.5, offDiagonal));
float lambda1 = mid + radius;
float lambda2 = max(mid - radius, 0.1);
vec2 diagonalVector = normalize(vec2(offDiagonal, lambda1 - diagonal1));
return vec4(
min(sqrt(2.0 * lambda1), 1024.0) * diagonalVector,
min(sqrt(2.0 * lambda2), 1024.0) * vec2(diagonalVector.y, -diagonalVector.x)
);
}
highp vec4 discardVec = vec4(0.0, 0.0, 2.0, 1.0);
void main() {
uint texIdx = uint(a_splatIndex);
// u_splatRowMask and u_splatRowShift encode the row width of the splat
// attribute texture. The texture width is always maximumTextureSize, which
// varies by GPU, so these are passed as uniforms rather than constants.
// rowMask = maximumTextureSize/2 - 1
// rowShift = log2(maximumTextureSize/2)
uint rowMask = uint(u_splatRowMask);
uint rowShift = uint(u_splatRowShift);
ivec2 posCoord = ivec2(int((texIdx & rowMask) << 1), int(texIdx >> rowShift));
vec4 splatPosition = vec4( uintBitsToFloat(uvec4(texelFetch(u_splatAttributeTexture, posCoord, 0))) );
vec4 splatViewPos = czm_modelView * vec4(splatPosition.xyz, 1.0);
vec4 clipPosition = czm_projection * splatViewPos;
float clip = 1.2 * clipPosition.w;
if (clipPosition.z < -clip || clipPosition.x < -clip || clipPosition.x > clip ||
clipPosition.y < -clip || clipPosition.y > clip) {
gl_Position = vec4(0.0, 0.0, 2.0, 1.0);
return;
}
ivec2 covCoord = ivec2(int(((texIdx & rowMask) << 1) | 1u), int(texIdx >> rowShift));
uvec4 covariance = uvec4(texelFetch(u_splatAttributeTexture, covCoord, 0));
gl_Position = clipPosition;
vec2 u1 = unpackHalf2x16(covariance.x) ;
vec2 u2 = unpackHalf2x16(covariance.y);
vec2 u3 = unpackHalf2x16(covariance.z);
mat3 Vrk = mat3(u1.x, u1.y, u2.x, u1.y, u2.y, u3.x, u2.x, u3.x, u3.y);
vec4 covVectors = calcCovVectors(splatViewPos.xyz, Vrk);
if (dot(covVectors.xy, covVectors.xy) < 4.0 && dot(covVectors.zw, covVectors.zw) < 4.0) {
gl_Position = discardVec;
return;
}
vec2 corner = vec2((gl_VertexID << 1) & 2, gl_VertexID & 2) - 1.;
gl_Position += vec4((corner.x * covVectors.xy + corner.y * covVectors.zw) / czm_viewport.zw * gl_Position.w, 0, 0);
gl_Position.z = clamp(gl_Position.z, -abs(gl_Position.w), abs(gl_Position.w));
v_vertPos = corner ;
v_splatColor = vec4(covariance.w & 0xffu, (covariance.w >> 8) & 0xffu, (covariance.w >> 16) & 0xffu, (covariance.w >> 24) & 0xffu) / 255.0;
#if defined(HAS_SPHERICAL_HARMONICS)
vec4 splatWC = czm_inverseView * splatViewPos;
vec3 viewDirModel = normalize(u_inverseModelRotation * (splatWC.xyz - u_cameraPositionWC.xyz));
v_splatColor.rgb += evaluateSH(texIdx, viewDirModel).rgb;
#endif
v_splitDirection = u_splitDirection;
}`;var bii=y(x(),1),Pw=`//
// Fragment shader for Gaussian splats.
// Renders a Gaussian splat within a quad, discarding fragments outside the unit circle.
// Applies an approximate Gaussian falloff based on distance from the center and outputs
// a color modulated by the alpha and Gaussian weight.
//
void main() {
if (v_splitDirection < 0.0 && gl_FragCoord.x > czm_splitPosition) discard;
if (v_splitDirection > 0.0 && gl_FragCoord.x < czm_splitPosition) discard;
float A = -dot(v_vertPos, v_vertPos);
if (A < -4.) {
discard;
}
float B = exp(A * 4.) * v_splatColor.a ;
out_FragColor = vec4(v_splatColor.rgb * B , B);
}
`;var jC=new F,Ype=new F,Xw=new F,yi=new $,Yw=new Me,Itt=new m,Ztt=new Me,Rtt=new m,Vtt=1e-12,E9=1e-5,H4=1e-7,Na={IDLE:0,WAITING:1,SORTING:2,SORTED:3,ERROR:4},Ys={BUILDING:"BUILDING",TEXTURE_PENDING:"TEXTURE_PENDING",TEXTURE_READY:"TEXTURE_READY",SORTING:"SORTING",READY:"READY"},Gtt=2,Ltt=30,Wtt=3,Ftt=.008726646259971648,Btt=1;function wtt(e,t){let n=e._lastSteadySortFrameNumber>=0?t.frameNumber-e._lastSteadySortFrameNumber:Number.POSITIVE_INFINITY;if(e._lastSteadySortFrameNumber>=0&&n<Wtt)return!1;let i=t.camera;return l(i)?!e._hasLastSteadySortCameraPosition||!e._hasLastSteadySortCameraDirection||m.distance(i.positionWC,e._lastSteadySortCameraPosition)>=Btt?!0:m.angleBetween(i.directionWC,e._lastSteadySortCameraDirection)>=Ftt:!1}function Bpe(e,t){e._lastSteadySortFrameNumber=t.frameNumber;let n=t.camera;l(n)&&(m.clone(n.positionWC,e._lastSteadySortCameraPosition),e._hasLastSteadySortCameraPosition=!0,m.clone(n.directionWC,e._lastSteadySortCameraDirection),e._hasLastSteadySortCameraDirection=!0)}function Ntt(e,t){let n=e._selectedTileSet;if(!l(n)||n.size!==t.length)return!0;for(let i=0;i<t.length;i++)if(!n.has(t[i]))return!0;return!1}function wpe(e,t){return l(t)&&t.requestId===e._sortRequestId&&t.dataGeneration===e._splatDataGeneration}function J4(e){l(e)&&(l(e.gaussianSplatTexture)&&(e.gaussianSplatTexture.destroy(),e.gaussianSplatTexture=void 0),l(e.sphericalHarmonicsTexture)&&(e.sphericalHarmonicsTexture.destroy(),e.sphericalHarmonicsTexture=void 0))}function Npe(e,t,n){if(!l(t))return;e._retiredTextures.push({texture:t,frameNumber:n})}function Ptt(e,t){let n=e._retiredTextures;if(!l(n)||n.length===0)return;let i=[];for(let o=0;o<n.length;o++){let r=n[o];t-r.frameNumber>0?r.texture.destroy():i.push(r)}e._retiredTextures=i}function Xtt(e,t){let n=e?.[t];return l(n)?n.buffer:void 0}function Ytt(e,t,n,i){let o=e._aggregateScratchBuffers[t];l(o)||(o=[],e._aggregateScratchBuffers[t]=o);let r=Xtt(e._snapshot,t);for(let a=0;a<o.length;a++){let c=o[a];if(c.length>=i&&c.buffer!==r)return c}let s=H.createTypedArray(n,i);return o.push(s),s}function Mtt(e,t){return e.length===t?e:e.subarray(0,t)}function vtt(e,t,n){if(!l(t.indexes)||t.state!==Ys.READY)throw new fe("Committing snapshot before it is READY.");let i=n.frameNumber,o=e._snapshot,r=l(o)?o.gaussianSplatTexture:e.gaussianSplatTexture;l(r)&&r!==t.gaussianSplatTexture&&Npe(e,r,i);let s=l(o)?o.sphericalHarmonicsTexture:e.sphericalHarmonicsTexture;l(s)&&s!==t.sphericalHarmonicsTexture&&Npe(e,s,i),e._snapshot=t,e._positions=t.positions,e._rotations=t.rotations,e._scales=t.scales,e._colors=t.colors,e._shData=t.shData,e._sphericalHarmonicsDegree=t.sphericalHarmonicsDegree,e._numSplats=t.numSplats,e._indexes=t.indexes,e.gaussianSplatTexture=t.gaussianSplatTexture,e.sphericalHarmonicsTexture=t.sphericalHarmonicsTexture,e._lastTextureWidth=t.lastTextureWidth,e._lastTextureHeight=t.lastTextureHeight,e._splatRowMask=t.splatRowMask,e._splatRowShift=t.splatRowShift,e._splatBudgetSSEScale=t.splatBudgetSSEScale??1,e._hasGaussianSplatTexture=l(t.gaussianSplatTexture),e._needsGaussianSplatTexture=!1,e._gaussianSplatTexturePending=!1,e._vertexArray=void 0,e._vertexArrayLen=-1,e._drawCommand=void 0,e._sorterPromise=void 0,e._activeSort=void 0,e._sorterState=Na.IDLE,e._dirty=!1}async function Utt(e,t,n,i){try{let o=await i,r=Bt.maximumTextureSize,s=r,a=Math.ceil(n.numSplats/(r/2)),c=Math.log2(r/2),d=r/2-1;if(a>r){let A=n.numSplats;a=r;let f=s/2;if(n.numSplats=r*f,n.positions=n.positions.subarray(0,n.numSplats*3),n.rotations=n.rotations.subarray(0,n.numSplats*4),n.scales=n.scales.subarray(0,n.numSplats*3),n.colors=n.colors.subarray(0,n.numSplats*4),l(n.shData)){let b=n.shData.length/A;n.shData=n.shData.subarray(0,Math.floor(n.numSplats*b))}n.splatBudgetSSEScale=A/n.numSplats,console.warn(`[GaussianSplat][HARD CAP] ${A} splats exceed the maximum texture capacity (${r}\xD7${f} = ${n.numSplats} splats at width=${s}). Rendering only the first ${n.numSplats} splats to avoid a WebGL crash. Increasing maximumScreenSpaceError by ${n.splatBudgetSSEScale.toFixed(2)}x next frame.`)}else n.splatBudgetSSEScale=1;let u=s*a*4,h;u<=o.data.length?h=o.data.subarray(0,u):(h=new Uint32Array(u),h.set(o.data));let p={width:s,height:a,data:h};if(n.splatRowMask=d,n.splatRowShift=c,e._pendingSnapshot!==n){n.state=Ys.BUILDING;return}if(!l(n.gaussianSplatTexture))n.gaussianSplatTexture=Xpe(t.context,p);else if(n.lastTextureHeight!==p.height||n.lastTextureWidth!==p.width){let A=n.gaussianSplatTexture;n.gaussianSplatTexture=Xpe(t.context,p),A.destroy()}else n.gaussianSplatTexture.copyFrom({source:{width:p.width,height:p.height,arrayBufferView:p.data}});if(n.lastTextureHeight=p.height,n.lastTextureWidth=p.width,l(n.shData)&&n.sphericalHarmonicsDegree>0){let A=n.sphericalHarmonicsTexture,f=Bt.maximumTextureSize,b=n.shCoefficientCount/3,C=Math.floor(f/b),T=C*(b*2),E=Math.ceil(n.numSplats/C);if(E>f)console.warn(`[GaussianSplat][SHTexture] ${n.numSplats} splats require SH height ${E} > maxTex ${f}. Disabling spherical harmonics for this snapshot (color-only fallback).`),n.sphericalHarmonicsDegree=0,l(A)&&A.destroy(),n.sphericalHarmonicsTexture=void 0;else{let S=new Uint32Array(f*E*2),I=0;for(let R=0;I<n.shData.length;R+=f*2)S.set(n.shData.subarray(I,I+T),R),I+=T;n.sphericalHarmonicsTexture=ktt(t.context,{data:S,width:f,height:E}),l(A)&&A.destroy()}}n.state=Ys.TEXTURE_READY}catch(o){console.error("Error generating Gaussian splat texture:",o),n.state=Ys.BUILDING}}async function Dtt(e,t,n,i){try{let o=await i;if(!l(n)||n.snapshot!==e._pendingSnapshot)return;let r=n.expectedCount,s=r,a=o?.length;if(r!==s||a!==r){e._pendingSortPromise=void 0,e._pendingSort=void 0,n.snapshot.state===Ys.SORTING&&(n.snapshot.state=Ys.TEXTURE_READY);return}let c=n.snapshot;c.indexes=o,c.state=Ys.READY,e._pendingSortPromise=void 0,e._pendingSort=void 0,vtt(e,c,t),e._pendingSnapshot=void 0,Hl.buildGSplatDrawCommand(e,t)}catch(o){if(!l(n)||n.snapshot!==e._pendingSnapshot)return;e._pendingSortPromise=void 0,e._pendingSort=void 0,n.snapshot.state===Ys.SORTING&&(n.snapshot.state=Ys.TEXTURE_READY),e._sorterState=Na.ERROR,e._sorterError=o}}async function Ppe(e,t,n){try{let i=await n,o=wpe(e,t),r=t?.expectedCount,s=r,a=i?.length;if(!o||(r!==s||a!==r)){o&&(e._sorterPromise=void 0,e._sorterState=Na.IDLE);return}e._indexes=i,e._sorterState=Na.SORTED}catch(i){if(!wpe(e,t))return;e._sorterState=Na.ERROR,e._sorterError=i}}function ktt(e,t){return new Lt({context:e,source:{width:t.width,height:t.height,arrayBufferView:t.data},preMultiplyAlpha:!1,skipColorSpaceConversion:!0,pixelFormat:Ke.RG_INTEGER,pixelDatatype:Oe.UNSIGNED_INT,flipY:!1,sampler:Ht.NEAREST})}function Xpe(e,t){return new Lt({context:e,source:{width:t.width,height:t.height,arrayBufferView:t.data},preMultiplyAlpha:!1,skipColorSpaceConversion:!0,pixelFormat:Ke.RGBA_INTEGER,pixelDatatype:Oe.UNSIGNED_INT,flipY:!1,sampler:Ht.NEAREST})}function Hl(e){e=e??Q.EMPTY_OBJECT,this._positions=void 0,this._rotations=void 0,this._scales=void 0,this._colors=void 0,this._indexes=void 0,this._numSplats=0,this._needsGaussianSplatTexture=!0,this._snapshot=void 0,this._pendingSnapshot=void 0,this._retiredTextures=[],this._aggregateScratchBuffers={positions:[],scales:[],rotations:[],colors:[]},this._scratchAggregateShBuffer=void 0,this._selectedTilesStableFrames=0,this._needsSnapshotRebuild=!1,this._snapshotRebuildStallFrames=0,this._prevViewMatrix=new F,this._debugShowBoundingVolume=e.debugShowBoundingVolume??!1,this.gaussianSplatTexture=void 0,this.sphericalHarmonicsTexture=void 0,this._lastTextureWidth=0,this._lastTextureHeight=0,this._vertexArray=void 0,this._vertexArrayLen=-1,this._splitDirection=Br.NONE,this._dirty=!1,this._tileset=e.tileset,this._baseTilesetUpdate=this._tileset.update,this._tileset.update=this._wrappedUpdate.bind(this),this._tileset.tileLoad.addEventListener(this.onTileLoad,this),this._tileset.tileVisible.addEventListener(this.onTileVisible,this),this.selectedTileLength=0,this._selectedTileSet=new Set,this._ready=!1,this._hasGaussianSplatTexture=!1,this._gaussianSplatTexturePending=!1,this._drawCommand=void 0,this._drawCommandModelMatrix=new F,this._rootTransform=void 0,this._axisCorrectionMatrix=It.getAxisCorrectionMatrix(ro.Y,ro.X,new F),this._shInverseRotation=new $,this._isDestroyed=!1,this._sorterState=Na.IDLE,this._sorterPromise=void 0,this._splatDataGeneration=0,this._sortRequestId=0,this._activeSort=void 0,this._pendingSortPromise=void 0,this._pendingSort=void 0,this._lastSteadySortFrameNumber=-1,this._lastSteadySortCameraPosition=new m,this._hasLastSteadySortCameraPosition=!1,this._lastSteadySortCameraDirection=new m,this._hasLastSteadySortCameraDirection=!1,this._sorterError=void 0,this._splatRowMask=0,this._splatRowShift=0,this._splatBudgetSSEScale=1}Object.defineProperties(Hl.prototype,{ready:{get:function(){return this._ready}},isStable:{get:function(){return!this._dirty&&(!l(this._pendingSnapshot)||this._pendingSnapshot.state===Ys.READY)}},splitDirection:{get:function(){return this._splitDirection},set:function(e){this._splitDirection!==e&&(this._splitDirection=e,this._dirty=!0)}}});Hl.prototype._wrappedUpdate=function(e){let t=this._tileset;if(this._splatBudgetSSEScale!==1){let n=t.maximumScreenSpaceError;t.maximumScreenSpaceError*=this._splatBudgetSSEScale,this._baseTilesetUpdate.call(t,e),t.maximumScreenSpaceError=n}else this._baseTilesetUpdate.call(t,e);this.update(e)};Hl.prototype.destroy=function(){if(this._positions=void 0,this._rotations=void 0,this._scales=void 0,this._colors=void 0,this._indexes=void 0,J4(this._pendingSnapshot),J4(this._snapshot),l(this._retiredTextures))for(let t=0;t<this._retiredTextures.length;t++)this._retiredTextures[t].texture.destroy();this._retiredTextures=[],this._pendingSnapshot=void 0,this._snapshot=void 0,this._aggregateScratchBuffers=void 0,this.gaussianSplatTexture=void 0,this.sphericalHarmonicsTexture=void 0;let e=this._drawCommand;return l(e)&&(e.shaderProgram=e.shaderProgram&&e.shaderProgram.destroy()),l(this._vertexArray)&&(this._vertexArray.destroy(),this._vertexArray=void 0),this._tileset.update=this._baseTilesetUpdate.bind(this._tileset),he(this)};Hl.prototype.isDestroyed=function(){return this._isDestroyed};Hl.prototype.onTileLoad=function(e){this._dirty=!0};Hl.prototype.onTileVisible=function(e){};Hl.transformTile=function(e){let t=e.computedTransform,n=e.content.gltfPrimitive,i=e.tileset.gaussianSplatPrimitive;i._rootTransform===void 0&&(i._rootTransform=bt.eastNorthUpToFixedFrame(e.tileset.boundingSphere.center));let o=i._rootTransform,r=F.multiplyTransformation(t,i._axisCorrectionMatrix,jC);F.multiplyTransformation(r,e.content.worldTransform,r);let s=F.inverse(o,Ype),a=F.multiplyTransformation(s,r,jC),c=e.content._lastSplatTransform;if(e.content._transformed&&l(c)&&F.equalsEpsilon(a,c,Vtt))return;let d=e.content.positions,u=e.content.rotations,h=e.content.scales,p=Math.sqrt(a[0]*a[0]+a[1]*a[1]+a[2]*a[2]),A=Math.sqrt(a[4]*a[4]+a[5]*a[5]+a[6]*a[6]),f=Math.sqrt(a[8]*a[8]+a[9]*a[9]+a[10]*a[10]);yi[0]=a[0]/p,yi[1]=a[1]/p,yi[2]=a[2]/p,yi[3]=a[4]/A,yi[4]=a[5]/A,yi[5]=a[6]/A,yi[6]=a[8]/f,yi[7]=a[9]/f,yi[8]=a[10]/f;let b=yi[0]*yi[3]+yi[1]*yi[4]+yi[2]*yi[5],C=yi[0]*yi[6]+yi[1]*yi[7]+yi[2]*yi[8],T=yi[3]*yi[6]+yi[4]*yi[7]+yi[5]*yi[8],E=Math.abs(p-1)<=H4&&Math.abs(A-1)<=H4&&Math.abs(f-1)<=H4,S=Math.abs(b)<=E9&&Math.abs(C)<=E9&&Math.abs(T)<=E9,I=yi[0]*(yi[4]*yi[8]-yi[5]*yi[7])-yi[3]*(yi[1]*yi[8]-yi[2]*yi[7])+yi[6]*(yi[1]*yi[5]-yi[2]*yi[4]),R=E&&S&&Math.abs(I-1)<=E9;Me.fromRotationMatrix(yi,Yw),Me.normalize(Yw,Yw);let V=It.getAttributeBySemantic(n,ct.POSITION).typedArray,W=It.getAttributeBySemantic(n,ct.ROTATION).typedArray,B=It.getAttributeBySemantic(n,ct.SCALE).typedArray,N=Itt,P=Ztt,g=Rtt;for(let _=0;_<V.length/3;++_)N.x=V[_*3],N.y=V[_*3+1],N.z=V[_*3+2],P.x=W[_*4],P.y=W[_*4+1],P.z=W[_*4+2],P.w=W[_*4+3],g.x=B[_*3],g.y=B[_*3+1],g.z=B[_*3+2],R?(F.multiplyByPoint(a,N,N),Me.multiply(Yw,P,P),Me.normalize(P,P)):(F.fromTranslationQuaternionRotationScale(N,P,g,Xw),F.multiplyTransformation(a,Xw,Xw),F.getTranslation(Xw,N),F.getScale(Xw,g),Me.multiply(Yw,P,P),Me.normalize(P,P)),d[_*3]=N.x,d[_*3+1]=N.y,d[_*3+2]=N.z,u[_*4]=P.x,u[_*4+1]=P.y,u[_*4+2]=P.z,u[_*4+3]=P.w,h[_*3]=g.x,h[_*3+1]=g.y,h[_*3+2]=g.z;e.content._lastSplatTransform=F.clone(a,e.content._lastSplatTransform),e.content._transformed=!0};Hl.generateSplatTexture=function(e,t,n){if(!l(n)||n.state!==Ys.BUILDING)return;n.state=Ys.TEXTURE_PENDING;let i=Bw.generateFromAttributes({attributes:{positions:new Float32Array(n.positions),scales:new Float32Array(n.scales),rotations:new Float32Array(n.rotations),colors:new Uint8Array(n.colors)},count:n.numSplats});if(!l(i)){n.state=Ys.BUILDING;return}Utt(e,t,n,i)};Hl.buildGSplatDrawCommand=function(e,t){let n=e._tileset,i=new ww(e),{shaderBuilder:o}=i,r=i.renderStateOptions;r.cull.enabled=!1,r.depthMask=!1,r.depthTest.enabled=!0,r.blending=ln.PRE_MULTIPLIED_ALPHA_BLEND,i.alphaOptions.pass=Ge.GAUSSIAN_SPLATS,o.addAttribute("vec2","a_screenQuadPosition"),o.addAttribute("float","a_splatIndex"),o.addVarying("vec4","v_splatColor"),o.addVarying("vec2","v_vertPos"),o.addUniform("float","u_splitDirection",pe.VERTEX),o.addVarying("float","v_splitDirection"),o.addUniform("highp usampler2D","u_splatAttributeTexture",pe.VERTEX),o.addUniform("float","u_sphericalHarmonicsDegree",pe.VERTEX),o.addUniform("float","u_splatScale",pe.VERTEX),o.addUniform("vec3","u_cameraPositionWC",pe.VERTEX),o.addUniform("mat3","u_inverseModelRotation",pe.VERTEX);let s=i.uniformMap;o.addUniform("int","u_splatRowMask",pe.VERTEX),o.addUniform("int","u_splatRowShift",pe.VERTEX);let a=e.gaussianSplatTexture;s.u_splatAttributeTexture=function(){return a},s.u_splatRowMask=function(){return e._splatRowMask},s.u_splatRowShift=function(){return e._splatRowShift},e._sphericalHarmonicsDegree>0&&(o.addDefine("HAS_SPHERICAL_HARMONICS","1",pe.VERTEX),o.addUniform("highp usampler2D","u_sphericalHarmonicsTexture",pe.VERTEX),s.u_sphericalHarmonicsTexture=function(){return e.sphericalHarmonicsTexture}),s.u_sphericalHarmonicsDegree=function(){return e._sphericalHarmonicsDegree},s.u_cameraPositionWC=function(){return m.clone(t.camera.positionWC)},s.u_inverseModelRotation=function(){return e._shInverseRotation},s.u_splitDirection=function(){return e.splitDirection};let c=l(e._indexes)?e._indexes.length:e._numSplats;i.instanceCount=c,i.count=4,i.primitiveType=We.TRIANGLE_STRIP,o.addVertexLines(Nw),o.addFragmentLines(Pw);let d=o.buildShaderProgram(t.context),u=He(Qe.fromCache(i.renderStateOptions),!0);u.cull.face=It.getCullFace(n.modelMatrix,We.TRIANGLE_STRIP),u=Qe.fromCache(u);let h={screenQuadPosition:0,splatIndex:2},p=new Tn.Attribute;if(p.name="_SPLAT_INDEXES",p.typedArray=e._indexes,p.componentDatatype=H.UNSIGNED_INT,p.type=Ut.SCALAR,p.normalized=!1,p.count=i.instanceCount,p.constant=0,p.instanceDivisor=1,!l(e._vertexArray)||e._indexes.length>e._vertexArrayLen){let T=new Ct({attributes:{screenQuadPosition:new we({componentDatatype:H.FLOAT,componentsPerAttribute:2,values:[-1,-1,1,-1,1,1,-1,1],name:"_SCREEN_QUAD_POS",variableName:"screenQuadPosition"}),splatIndex:{...p,variableName:"splatIndex"}},primitiveType:We.TRIANGLE_STRIP});e._vertexArray=kn.fromGeometry({context:t.context,geometry:T,attributeLocations:h,bufferUsage:Be.DYNAMIC_DRAW,interleave:!1})}else e._vertexArray.getAttribute(1).vertexBuffer.copyFromArrayView(e._indexes);e._vertexArrayLen=e._indexes.length;let f=F.clone(e._rootTransform,e._drawCommandModelMatrix),b=e._vertexArray,C=new ot({boundingVolume:n.boundingSphere,modelMatrix:f,uniformMap:s,renderState:u,vertexArray:b,shaderProgram:d,cull:r.cull.enabled,pass:Ge.GAUSSIAN_SPLATS,count:i.count,owner:e,instanceCount:i.instanceCount,primitiveType:We.TRIANGLE_STRIP,debugShowBoundingVolume:n.debugShowBoundingVolume,castShadows:!1,receiveShadows:!1});e._drawCommand=C};Hl.prototype.update=function(e){let t=this._tileset;if(Ptt(this,e.frameNumber),!t.show)return;if(this._drawCommand&&e.commandList.push(this._drawCommand),t._modelMatrixChanged){this._dirty=!0;return}let n=l(this._rootTransform);if(e.passes.pick===!0)return;this.splitDirection!==t.splitDirection&&(this.splitDirection=t.splitDirection);let i=e.camera;if(l(i)){if(this._sorterState===Na.IDLE){let o=t._selectedTiles.length!==0&&Ntt(this,t._selectedTiles);t._selectedTiles.length===0?(this._selectedTilesStableFrames=0,this._needsSnapshotRebuild=!1,this._snapshotRebuildStallFrames=0):o?this._selectedTilesStableFrames=0:this._selectedTilesStableFrames++,(o||this._dirty)&&(this._needsSnapshotRebuild=!0);let r=this._selectedTilesStableFrames>=Gtt,s=!l(this._snapshot)&&!l(this._pendingSnapshot)&&!l(this._drawCommand);this._needsSnapshotRebuild&&t._selectedTiles.length!==0?this._snapshotRebuildStallFrames++:this._snapshotRebuildStallFrames=0;let a=r||s||this._snapshotRebuildStallFrames>=Ltt;if(!(this._dirty||this._needsSnapshotRebuild||o||l(this._pendingSnapshot)||l(this._pendingSortPromise)||!l(this._drawCommand))&&F.equals(i.viewMatrix,this._prevViewMatrix))return;if(t._selectedTiles.length!==0&&this._needsSnapshotRebuild&&a){this._splatDataGeneration++,this._activeSort=void 0,this._sorterPromise=void 0,this._sorterState=Na.IDLE,this._pendingSortPromise=void 0,this._pendingSort=void 0,l(this._pendingSnapshot)&&J4(this._pendingSnapshot);let d=t._selectedTiles;this._rootTransform=bt.eastNorthUpToFixedFrame(t.boundingSphere.center);{let I=d[0],R=F.multiplyTransformation(I.computedTransform,this._axisCorrectionMatrix,Ype);F.multiplyTransformation(R,I.content.worldTransform??F.IDENTITY,R),F.getRotation(F.inverse(R,R),this._shInverseRotation)}for(let I of d)Hl.transformTile(I);let u=d.reduce((I,R)=>I+R.content.pointsLength,0),h=(I,R,V,W)=>{let B,N=0,P=0;for(let g of d){let _=V(g.content),Z=l(W)?W:Ut.getNumberOfComponents(_.type),G=l(_.typedArray)?_.typedArray:_;P+=G.length,l(B)||(B=Ytt(this,I,R,u*Z))}if(!l(B))return H.createTypedArray(R,0);for(let g of d){let _=g.content,Z=V(_),G=l(Z.typedArray)?Z.typedArray:Z;B.set(G,N),N+=G.length}return Mtt(B,P)},p=()=>{let I=0;for(let B of d)if(B.content.sphericalHarmonicsDegree>0){switch(B.content.sphericalHarmonicsDegree){case 1:I=9;break;case 2:I=24;break;case 3:I=45;break}break}if(I===0)return;let R=u*(I*(2/3));(!l(this._scratchAggregateShBuffer)||this._scratchAggregateShBuffer.length<R)&&(this._scratchAggregateShBuffer=new Uint32Array(R));let V=this._scratchAggregateShBuffer,W=0;for(let B of d){let N=B.content.packedSphericalHarmonicsData;B.content.sphericalHarmonicsDegree>0&&(V.set(N,W),W+=N.length)}return W<V.length?V.subarray(0,W):V},A=h("positions",H.FLOAT,I=>I.positions,3),f=h("scales",H.FLOAT,I=>I.scales,3),b=h("rotations",H.FLOAT,I=>I.rotations,4),C=h("colors",H.UNSIGNED_BYTE,I=>It.getAttributeBySemantic(I.gltfPrimitive,ct.COLOR)),T=d[0].content.sphericalHarmonicsDegree,E=T>0?d[0].content.sphericalHarmonicsCoefficientCount:0,S=p();this._pendingSnapshot={generation:this._splatDataGeneration,positions:A,rotations:b,scales:f,colors:C,shData:S,sphericalHarmonicsDegree:T,shCoefficientCount:E,numSplats:u,indexes:void 0,gaussianSplatTexture:void 0,sphericalHarmonicsTexture:void 0,lastTextureWidth:0,lastTextureHeight:0,splatRowMask:0,splatRowShift:0,state:Ys.BUILDING},this.selectedTileLength=t._selectedTiles.length,this._selectedTileSet=new Set(t._selectedTiles),this._dirty=!1,this._needsSnapshotRebuild=!1,this._snapshotRebuildStallFrames=0}if(l(this._pendingSnapshot)){let d=this._pendingSnapshot;if(d.state===Ys.BUILDING){Hl.generateSplatTexture(this,e,d);return}if(d.state===Ys.TEXTURE_PENDING||d.state===Ys.TEXTURE_READY&&!l(d.gaussianSplatTexture)||!n)return;if(F.clone(i.viewMatrix,this._prevViewMatrix),F.multiply(i.viewMatrix,this._rootTransform,jC),d.state===Ys.TEXTURE_READY&&!l(this._pendingSortPromise)){let u=++this._sortRequestId,h=this._splatDataGeneration;this._pendingSort={requestId:u,dataGeneration:h,expectedCount:d.numSplats,snapshot:d};let p=KC.radixSortIndexes({primitive:{positions:new Float32Array(d.positions),modelView:Float32Array.from(jC),count:d.numSplats},sortType:"Index"});if(!l(p)){this._pendingSortPromise=void 0,this._pendingSort=void 0,d.state=Ys.TEXTURE_READY;return}this._pendingSortPromise=p,d.state=Ys.SORTING;let A=this._pendingSort;Dtt(this,e,A,p);return}if(!l(this._pendingSortPromise)){d.state===Ys.SORTING&&(d.state=Ys.TEXTURE_READY);return}return}if(this._numSplats===0||!n)return;if(F.clone(i.viewMatrix,this._prevViewMatrix),F.multiply(i.viewMatrix,this._rootTransform,jC),!l(this._sorterPromise)){if(!wtt(this,e))return;let d=++this._sortRequestId,u=this._splatDataGeneration,h=this._numSplats;this._activeSort={requestId:d,dataGeneration:u,expectedCount:h};let p=KC.radixSortIndexes({primitive:{positions:new Float32Array(this._positions),modelView:Float32Array.from(jC),count:this._numSplats},sortType:"Index"});if(this._sorterPromise=p,l(p)){Bpe(this,e);let A=this._activeSort;this._sorterState=Na.SORTING,Ppe(this,A,p);return}}if(!l(this._sorterPromise)){this._sorterState=Na.WAITING;return}this._sorterState=Na.SORTING;return}else if(this._sorterState===Na.WAITING){if(!l(this._sorterPromise)){let o=++this._sortRequestId,r=this._splatDataGeneration,s=this._numSplats;this._activeSort={requestId:o,dataGeneration:r,expectedCount:s};let a=KC.radixSortIndexes({primitive:{positions:new Float32Array(this._positions),modelView:Float32Array.from(jC),count:this._numSplats},sortType:"Index"});if(this._sorterPromise=a,l(a)){Bpe(this,e);let c=this._activeSort;this._sorterState=Na.SORTING,Ppe(this,c,a);return}}if(!l(this._sorterPromise)){this._sorterState=Na.WAITING;return}this._sorterState=Na.SORTING;return}else{if(this._sorterState===Na.SORTING)return;if(this._sorterState===Na.SORTED)Hl.buildGSplatDrawCommand(this,e),this._sorterState=Na.IDLE,this._dirty=!1,this._sorterPromise=void 0,this._activeSort=void 0;else if(this._sorterState===Na.ERROR)throw this._sorterError}this._dirty=!1}};var Mw=Hl;function Cu(e,t,n,i){this._tileset=t,this._tile=n,this._resource=i,this._loader=e,l(this._tileset.gaussianSplatPrimitive)||(this._tileset.gaussianSplatPrimitive=new Mw({tileset:this._tileset})),this._positions=void 0,this._rotations=void 0,this._scales=void 0,this.gltfPrimitive=void 0,this.worldTransform=void 0,this.featurePropertiesDirty=!1,this._metadata=void 0,this._group=void 0,this._ready=!1,this._transformed=!1,this._sphericalHarmonicsDegree=0,this._sphericalHarmonicsCoefficientCount=0,this._packedSphericalHarmonicsData=void 0,this._lastSplatTransform=void 0}Cu.tilesetRequiresGaussianSplattingExt=function(e){let t=!1;return e.isGltfExtensionRequired instanceof Function&&(t=e.isGltfExtensionRequired("KHR_gaussian_splatting")&&e.isGltfExtensionRequired("KHR_gaussian_splatting_compression_spz_2"),e.isGltfExtensionRequired("KHR_spz_gaussian_splats_compression")&&Va("KHR_spz_gaussian_splats_compression",`Support for the original KHR_spz_gaussian_splats_compression extension has been removed in favor of the up to date KHR_gaussian_splatting and KHR_gaussian_splatting_compression_spz_2 extensions
Please retile your tileset with the KHR_gaussian_splatting and KHR_gaussian_splatting_compression_spz_2 extensions.`)),t};Object.defineProperties(Cu.prototype,{featuresLength:{get:function(){return 0}},pointsLength:{get:function(){return this.gltfPrimitive.attributes[0].count}},trianglesLength:{get:function(){return 0}},geometryByteLength:{get:function(){return 0}},texturesByteLength:{get:function(){let e=this._tileset?.gaussianSplatPrimitive;if(!l(e))return 0;let t=e.gaussianSplatTexture,n=e.selectedTileLength;return!l(t)||n===0?0:t.sizeInBytes/n}},batchTableByteLength:{get:function(){return 0}},innerContents:{get:function(){}},ready:{get:function(){return this._ready}},transformed:{get:function(){return this._transformed}},tileset:{get:function(){return this._tileset}},tile:{get:function(){return this._tile}},url:{get:function(){return this._resource.getUrlComponent(!0)}},batchTable:{get:function(){}},metadata:{get:function(){return this._metadata},set:function(e){this._metadata=e}},group:{get:function(){return this._group},set:function(e){this._group=e}},positions:{get:function(){return this._positions}},rotations:{get:function(){return this._rotations}},scales:{get:function(){return this._scales}},sphericalHarmonicsCoefficientCount:{get:function(){return this._sphericalHarmonicsCoefficientCount}},sphericalHarmonicsDegree:{get:function(){return this._sphericalHarmonicsDegree}},packedSphericalHarmonicsData:{get:function(){return this._packedSphericalHarmonicsData}}});function Qtt(e){return`${e.startsWith("KHR_gaussian_splatting:")?"KHR_gaussian_splatting:":"_"}SH_DEGREE_`}function Ott(e){switch(e.filter(n=>n.name.includes("SH_DEGREE_")).length){default:case 0:return{l:0,n:0};case 3:return{l:1,n:9};case 8:return{l:2,n:24};case 15:return{l:3,n:45}}}var Mpe=new ArrayBuffer(4),ztt=new Float32Array(Mpe),Htt=new Uint32Array(Mpe);function K4(e){ztt[0]=e;let t=Htt[0],n=t>>31&1,i=t>>23&255,o=t&8388607,r;if(i===255)r=n<<15|31744|(o?512:0);else if(i===0)r=n<<15;else{let s=i-127+15;s>=31?r=n<<15|31744:s<=0?r=n<<15:r=n<<15|s<<10|o>>>13}return r}function Jtt(e){let t=Qtt(e),n="_COEF_",i=t.length,o=e.indexOf(n,i),r=parseInt(e.slice(i,o),10),s=parseInt(e.slice(o+n.length),10);return{l:r,n:s}}function Ktt(e){let t=e.sphericalHarmonicsDegree,n=e.sphericalHarmonicsCoefficientCount,i=e.pointsLength*(n*(2/3)),o=new Uint32Array(i),r=e.gltfPrimitive.attributes.filter(d=>d.name.includes("SH_DEGREE_")),s=0,a=[0,9,24];switch(t){case 1:s=9;break;case 2:s=24;break;case 3:s=45;break}r.sort((d,u)=>d.name<u.name?-1:d.name>u.name?1:0);let c=s*(2/3);for(let d=0;d<r.length;d++){let{l:u,n:h}=Jtt(r[d].name);for(let p=0;p<e.pointsLength;p++){let A=a[u-1]*2/3,f=p*c+A+h*2,b=p*3;o[f]=K4(r[d].typedArray[b])|K4(r[d].typedArray[b+1])<<16,o[f+1]=K4(r[d].typedArray[b+2])}}return o}Cu.fromGltf=async function(e,t,n,i){let o=n,r=Le.createIfNeeded(o),s={releaseGltfJson:!1,upAxis:ro.Y,forwardAxis:ro.Z};l(i.asset)?(s.gltfJson=i,s.baseResource=r,s.gltfResource=r):i instanceof Uint8Array?(s.typedArray=i,s.baseResource=r,s.gltfResource=r):s.gltfResource=Le.createIfNeeded(i);let a=new uu(s);try{await a.load()}catch(c){throw a.destroy(),new me(`Failed to load glTF: ${c.message}`)}return new Cu(a,e,t,n)};Cu.prototype.update=function(e,t){let n=this._loader;if(!this._ready){if(t.afterRender.push(()=>!0),!l(n)){this._ready=!0;return}if(this._resourcesLoaded){this.gltfPrimitive=n.components.scene.nodes[0].primitives[0],this.worldTransform=n.components.scene.nodes[0].matrix,this._ready=!0,this._positions=It.getAttributeBySemantic(this.gltfPrimitive,ct.POSITION).typedArray.slice(),this._rotations=It.getAttributeBySemantic(this.gltfPrimitive,ct.ROTATION).typedArray.slice(),this._scales=It.getAttributeBySemantic(this.gltfPrimitive,ct.SCALE).typedArray.slice();let{l:i,n:o}=Ott(this.gltfPrimitive.attributes);this._sphericalHarmonicsDegree=i,this._sphericalHarmonicsCoefficientCount=o,this._packedSphericalHarmonicsData=Ktt(this);return}this._resourcesLoaded=n.process(t)}};Cu.prototype.hasProperty=function(e,t){return!1};Cu.prototype.getFeature=function(e){};Cu.prototype.applyDebugSettings=function(e,t){};Cu.prototype.applyStyle=function(e){};Cu.prototype.pick=function(e,t,n){};Cu.prototype.isDestroyed=function(){return this.isDestroyed};Cu.prototype.destroy=function(){return this.splatPrimitive=void 0,this._tile=void 0,this._tileset=void 0,this._resource=void 0,this._ready=!1,this._group=void 0,this._metadata=void 0,this._resourcesLoaded=!1,this._lastSplatTransform=void 0,l(this._loader)&&(this._loader.destroy(),this._loader=void 0),he(this)};var K0=Cu;var vpe={b3dm:function(e,t,n,i,o){return bu.fromB3dm(e,t,n,i,o)},pnts:function(e,t,n,i,o){return bu.fromPnts(e,t,n,i,o)},i3dm:function(e,t,n,i,o){return bu.fromI3dm(e,t,n,i,o)},cmpt:function(e,t,n,i,o){return TW.fromTileType(e,t,n,i,o,vpe)},externalTileset:function(e,t,n,i){return QB.fromJson(e,t,n,i)},geom:function(e,t,n,i,o){return new _W(e,t,n,i,o)},vctr:function(e,t,n,i,o){return new fw(e,t,n,i,o)},subt:function(e,t,n,i,o){return t_.fromSubtreeJson(e,t,n,void 0,i,o)},subtreeJson:function(e,t,n,i){return t_.fromSubtreeJson(e,t,n,i)},glb:function(e,t,n,i,o){if(i.byteLength<12)throw new me("Invalid glb content");let a=new DataView(i,o).getUint32(8,!0),c=new Uint8Array(i,o,a);return K0.tilesetRequiresGaussianSplattingExt(e)?K0.fromGltf(e,t,n,c):e.isGltfExtensionUsed("CESIUM_mesh_vector")?K_.fromGltf(e,t,n,c):bu.fromGltf(e,t,n,c)},gltf:function(e,t,n,i){return K0.tilesetRequiresGaussianSplattingExt(e)?K0.fromGltf(e,t,n,i):e.isGltfExtensionUsed("CESIUM_mesh_vector")?K_.fromGltf(e,t,n,i):bu.fromGltf(e,t,n,i)},geoJson:function(e,t,n,i){return bu.fromGeoJson(e,t,n,i)}},qC=vpe;var Roi=y(x(),1),jtt={UNLOADED:0,LOADING:1,PROCESSING:2,READY:3,EXPIRED:4,FAILED:5},Ar=Object.freeze(jtt);var Goi=y(x(),1),cf={BATCHED_3D_MODEL:"b3dm",INSTANCED_3D_MODEL:"i3dm",COMPOSITE:"cmpt",POINT_CLOUD:"pnts",VECTOR:"vctr",GEOMETRY:"geom",GLTF:"gltf",GLTF_BINARY:"glb",IMPLICIT_SUBTREE:"subt",IMPLICIT_SUBTREE_JSON:"subtreeJson",EXTERNAL_TILESET:"externalTileset",MULTIPLE_CONTENT:"multipleContent",GEOJSON:"geoJson",VOXEL_BINARY:"voxl",VOXEL_JSON:"voxelJson"};cf.isBinaryFormat=function(e){switch(e){case cf.BATCHED_3D_MODEL:case cf.INSTANCED_3D_MODEL:case cf.COMPOSITE:case cf.POINT_CLOUD:case cf.VECTOR:case cf.GEOMETRY:case cf.IMPLICIT_SUBTREE:case cf.VOXEL_BINARY:case cf.GLTF_BINARY:return!0;default:return!1}};var ha=Object.freeze(cf);var Woi=y(x(),1),qtt={NOT_COMPUTED:-1,USE_OPTIMIZATION:1,SKIP_OPTIMIZATION:0},Nm=Object.freeze(qtt);var Boi=y(x(),1),Pa={RENDER:0,PICK:1,SHADOW:2,PRELOAD:3,PRELOAD_FLIGHT:4,REQUEST_RENDER_MODE_DEFER_CHECK:5,MOST_DETAILED_PRELOAD:6,MOST_DETAILED_PICK:7,NUMBER_OF_PASSES:8},Fg=new Array(Pa.NUMBER_OF_PASSES);Fg[Pa.RENDER]=Object.freeze({pass:Pa.RENDER,isRender:!0,requestTiles:!0,ignoreCommands:!1});Fg[Pa.PICK]=Object.freeze({pass:Pa.PICK,isRender:!1,requestTiles:!1,ignoreCommands:!1});Fg[Pa.SHADOW]=Object.freeze({pass:Pa.SHADOW,isRender:!1,requestTiles:!0,ignoreCommands:!1});Fg[Pa.PRELOAD]=Object.freeze({pass:Pa.PRELOAD,isRender:!1,requestTiles:!0,ignoreCommands:!0});Fg[Pa.PRELOAD_FLIGHT]=Object.freeze({pass:Pa.PRELOAD_FLIGHT,isRender:!1,requestTiles:!0,ignoreCommands:!0});Fg[Pa.REQUEST_RENDER_MODE_DEFER_CHECK]=Object.freeze({pass:Pa.REQUEST_RENDER_MODE_DEFER_CHECK,isRender:!1,requestTiles:!0,ignoreCommands:!0});Fg[Pa.MOST_DETAILED_PRELOAD]=Object.freeze({pass:Pa.MOST_DETAILED_PRELOAD,isRender:!1,requestTiles:!0,ignoreCommands:!0});Fg[Pa.MOST_DETAILED_PICK]=Object.freeze({pass:Pa.MOST_DETAILED_PICK,isRender:!1,requestTiles:!1,ignoreCommands:!1});Pa.getPassOptions=function(e){return Fg[e]};var sr=Object.freeze(Pa);var Poi=y(x(),1);function Ip(e,t){this._tileset=e,this._tile=t,this.featurePropertiesDirty=!1}Object.defineProperties(Ip.prototype,{featuresLength:{get:function(){return 0}},pointsLength:{get:function(){return 0}},trianglesLength:{get:function(){return 0}},geometryByteLength:{get:function(){return 0}},texturesByteLength:{get:function(){return 0}},batchTableByteLength:{get:function(){return 0}},innerContents:{get:function(){}},ready:{get:function(){return!0}},tileset:{get:function(){return this._tileset}},tile:{get:function(){return this._tile}},url:{get:function(){}},metadata:{get:function(){},set:function(e){}},batchTable:{get:function(){}},group:{get:function(){},set:function(e){}}});Ip.prototype.hasProperty=function(e,t){return!1};Ip.prototype.getFeature=function(e){};Ip.prototype.applyDebugSettings=function(e,t){};Ip.prototype.applyStyle=function(e){};Ip.prototype.update=function(e,t){};Ip.prototype.pick=function(e,t,n){};Ip.prototype.isDestroyed=function(){return!1};Ip.prototype.destroy=function(){return he(this)};var j_=Ip;var Hoi=y(x(),1);var voi=y(x(),1);function Bg(e){e=e??Q.EMPTY_OBJECT;let t=e.content,n=e.class;this._class=n,this._properties=t.properties,this._extensions=t.extensions,this._extras=t.extras}Object.defineProperties(Bg.prototype,{class:{get:function(){return this._class}},extras:{get:function(){return this._extras}},extensions:{get:function(){return this._extensions}}});Bg.prototype.hasProperty=function(e){return Kn.hasProperty(e,this._properties,this._class)};Bg.prototype.hasPropertyBySemantic=function(e){return Kn.hasPropertyBySemantic(e,this._properties,this._class)};Bg.prototype.getPropertyIds=function(e){return Kn.getPropertyIds(this._properties,this._class,e)};Bg.prototype.getProperty=function(e){return Kn.getProperty(e,this._properties,this._class)};Bg.prototype.setProperty=function(e,t){return Kn.setProperty(e,t,this._properties,this._class)};Bg.prototype.getPropertyBySemantic=function(e){return Kn.getPropertyBySemantic(e,this._properties,this._class)};Bg.prototype.setPropertyBySemantic=function(e,t){return Kn.setPropertyBySemantic(e,t,this._properties,this._class)};var vw=Bg;function j4(e,t){let n=_i(t,"3DTILES_metadata")?t.extensions["3DTILES_metadata"]:t.metadata;if(!l(n))return;if(!l(e.schema)){j4._oneTimeWarning("findContentMetadata-missing-root-schema","Could not find a metadata schema for content metadata. For tilesets that contain external tilesets, make sure the schema is added to the root tileset.json.");return}let i=e.schema.classes??Q.EMPTY_OBJECT;if(l(n.class)){let o=i[n.class];return new vw({content:n,class:o})}}j4._oneTimeWarning=_t;var $C=j4;var qoi=y(x(),1);function $tt(e,t){let n=e.metadataExtension;if(!l(n))return;let i=n.groups,o=_i(t,"3DTILES_metadata")?t.extensions["3DTILES_metadata"].group:t.group;if(typeof o=="number")return i[o];let r=n.groupIds.findIndex(function(s){return s===o});return r>=0?i[r]:void 0}var eT=$tt;var lri=y(x(),1);var nri=y(x(),1);function wg(e){e=e??Q.EMPTY_OBJECT;let t=e.tile,n=e.class;this._class=n,this._properties=t.properties,this._extensions=t.extensions,this._extras=t.extras}Object.defineProperties(wg.prototype,{class:{get:function(){return this._class}},extras:{get:function(){return this._extras}},extensions:{get:function(){return this._extensions}}});wg.prototype.hasProperty=function(e){return Kn.hasProperty(e,this._properties,this._class)};wg.prototype.hasPropertyBySemantic=function(e){return Kn.hasPropertyBySemantic(e,this._properties,this._class)};wg.prototype.getPropertyIds=function(e){return Kn.getPropertyIds(this._properties,this._class,e)};wg.prototype.getProperty=function(e){return Kn.getProperty(e,this._properties,this._class)};wg.prototype.setProperty=function(e,t){return Kn.setProperty(e,t,this._properties,this._class)};wg.prototype.getPropertyBySemantic=function(e){return Kn.getPropertyBySemantic(e,this._properties,this._class)};wg.prototype.setPropertyBySemantic=function(e,t){return Kn.setPropertyBySemantic(e,t,this._properties,this._class)};var Uw=wg;function q4(e,t){let n=_i(t,"3DTILES_metadata")?t.extensions["3DTILES_metadata"]:t.metadata;if(!l(n))return;if(!l(e.schema)){q4._oneTimeWarning("findTileMetadata-missing-root-schema","Could not find a metadata schema for tile metadata. For tilesets that contain external tilesets, make sure the schema is added to the root tileset.json.");return}let i=e.schema.classes??Q.EMPTY_OBJECT;if(l(n.class)){let o=i[n.class];return new Uw({tile:n,class:o})}}q4._oneTimeWarning=_t;var Dw=q4;var Lri=y(x(),1);var Ari=y(x(),1);function ent(e){let t=new Uint8Array(e),n=Ph(t);if(n==="glTF"&&(n="glb"),ha.isBinaryFormat(n))return{contentType:n,binaryPayload:t};let i=tnt(t);if(l(i.root))return{contentType:ha.EXTERNAL_TILESET,jsonPayload:i};if(l(i.asset))return{contentType:ha.GLTF,jsonPayload:i};if(l(i.tileAvailability))return{contentType:ha.IMPLICIT_SUBTREE_JSON,jsonPayload:i};if(l(i.type))return{contentType:ha.GEOJSON,jsonPayload:i};if(l(i.voxelTable))return{contentType:ha.VOXEL_JSON,jsonPayload:i};throw new me("Invalid tile content.")}function tnt(e){let t;try{t=Zr(e)}catch{throw new me("Invalid tile content.")}return t}var Ng=ent;function Pm(e,t,n,i){this._tileset=e,this._tile=t,this._tilesetResource=n,this._contents=[],this._contentsCreated=!1;let o=l(i.contents)?i.contents:i.content;this._innerContentHeaders=o,this._requestsInFlight=0,this._cancelCount=0,this._externalTilesetCount=0;let r=this._innerContentHeaders.length;this._arrayFetchPromises=new Array(r),this._requests=new Array(r),this._ready=!1,this._innerContentResources=new Array(r),this._serverKeys=new Array(r);for(let s=0;s<r;s++){let a=n.getDerivedResource({url:o[s].uri}),c=Yc.getServerKey(a.getUrlComponent());this._innerContentResources[s]=a,this._serverKeys[s]=c}}Object.defineProperties(Pm.prototype,{featurePropertiesDirty:{get:function(){let e=this._contents,t=e.length;for(let n=0;n<t;++n)if(e[n].featurePropertiesDirty)return!0;return!1},set:function(e){let t=this._contents,n=t.length;for(let i=0;i<n;++i)t[i].featurePropertiesDirty=e}},featuresLength:{get:function(){return 0}},pointsLength:{get:function(){return 0}},trianglesLength:{get:function(){return 0}},geometryByteLength:{get:function(){return 0}},texturesByteLength:{get:function(){return 0}},batchTableByteLength:{get:function(){return 0}},innerContents:{get:function(){return this._contents}},ready:{get:function(){return this._contentsCreated?this._ready:!1}},tileset:{get:function(){return this._tileset}},tile:{get:function(){return this._tile}},url:{get:function(){}},metadata:{get:function(){},set:function(){}},batchTable:{get:function(){}},group:{get:function(){},set:function(){}},innerContentUrls:{get:function(){return this._innerContentHeaders.map(function(e){return e.uri})}}});function $4(e,t){e._requestsInFlight+=t,e.tileset.statistics.numberOfPendingRequests+=t}function Upe(e,t){e._cancelCount++,e._tile._contentState=t;let n=e.tileset.statistics;n.numberOfPendingRequests-=e._requestsInFlight,n.numberOfAttemptedRequests+=e._requestsInFlight,e._requestsInFlight=0;let i=e._innerContentHeaders.length;e._arrayFetchPromises=new Array(i)}Pm.prototype.requestInnerContents=function(){if(!nnt(this._serverKeys)){this.tileset.statistics.numberOfAttemptedRequests+=this._serverKeys.length;return}let e=this._innerContentHeaders;$4(this,e.length);let t=this._cancelCount;for(let n=0;n<e.length;n++)this._arrayFetchPromises[n]=int(this,n,t,this._tile._contentState);return ont(this)};function nnt(e){let t={};for(let n=0;n<e.length;n++){let i=e[n];l(t[i])?t[i]++:t[i]=1}for(let n in t)if(t.hasOwnProperty(n)&&!Yc.serverHasOpenSlots(n,t[n]))return!1;return Yc.heapHasOpenSlots(e.length)}function int(e,t,n,i){let o=e._innerContentResources[t].clone(),r=e.tile,s=function(){return r._priority},a=e._serverKeys[t],c=new Tr({throttle:!0,throttleByServer:!0,type:Ds.TILES3D,priorityFunction:s,serverKey:a});o.request=c,e._requests[t]=c;let d=o.fetchArrayBuffer();if(l(d))return d.then(function(u){if(!(n<e._cancelCount)){if(o.request.cancelled||o.request.state===Ai.CANCELLED){Upe(e,i);return}return $4(e,-1),u}}).catch(function(u){if(!(n<e._cancelCount)){if(o.request.cancelled||o.request.state===Ai.CANCELLED){Upe(e,i);return}$4(e,-1),Dpe(e,t,u)}})}async function ont(e){let t=e._cancelCount,n=await Promise.all(e._arrayFetchPromises);if(t<e._cancelCount)return;let i=n.map((r,s)=>rnt(e,r,s)),o=await Promise.all(i);if(e._contentsCreated=!0,e._contents=o.filter(l),e._externalTilesetCount===e._contents.length){let r=e._tile;r.hasRenderableContent=!1}return o}async function rnt(e,t,n){if(l(t))try{let i=Ng(t),o=e._tileset,r=e._innerContentResources[n],s=e._tile;i.contentType===ha.EXTERNAL_TILESET&&(e._externalTilesetCount++,s.hasTilesetContent=!0),e._disableSkipLevelOfDetail=e._disableSkipLevelOfDetail||i.contentType===ha.GEOMETRY||i.contentType===ha.VECTOR;let a,c=qC[i.contentType];l(i.binaryPayload)?a=await Promise.resolve(c(o,s,r,i.binaryPayload.buffer,0)):a=await Promise.resolve(c(o,s,r,i.jsonPayload));let d=e._innerContentHeaders[n];if(s.hasImplicitContentMetadata){let h=s.implicitSubtree,p=s.implicitCoordinates;a.metadata=h.getContentMetadataView(p,n)}else s.hasImplicitContent||(a.metadata=$C(o,d));let u=eT(o,d);return l(u)&&(a.group=new iC({metadata:u})),a}catch(i){Dpe(e,n,i)}}function Dpe(e,t,n){let i=e._tileset,o=e._innerContentResources[t].url,r=l(n.message)?n.message:n.toString();i.tileFailed.numberOfListeners>0?i.tileFailed.raiseEvent({url:o,message:r}):(console.log(`A content failed to load: ${o}`),console.log(`Error: ${r}`))}Pm.prototype.cancelRequests=function(){for(let e=0;e<this._requests.length;e++){let t=this._requests[e];l(t)&&t.cancel()}};Pm.prototype.hasProperty=function(e,t){return!1};Pm.prototype.getFeature=function(e){};Pm.prototype.applyDebugSettings=function(e,t){let n=this._contents,i=n.length;for(let o=0;o<i;++o)n[o].applyDebugSettings(e,t)};Pm.prototype.applyStyle=function(e){let t=this._contents,n=t.length;for(let i=0;i<n;++i)t[i].applyStyle(e)};Pm.prototype.update=function(e,t){let n=this._contents,i=n.length,o=!0;for(let r=0;r<i;++r)n[r].update(e,t),o=o&&n[r].ready;!this._ready&&o&&(this._ready=!0)};Pm.prototype.pick=function(e,t,n){if(!this._ready)return;let i,o=Number.POSITIVE_INFINITY,r=this._contents,s=r.length;for(let a=0;a<s;++a){let c=r[a].pick(e,t,n);if(!l(c))continue;let d=m.distance(e.origin,c);d<o&&(i=c,o=d)}if(l(i))return n};Pm.prototype.isDestroyed=function(){return!1};Pm.prototype.destroy=function(){let e=this._contents,t=e.length;for(let n=0;n<t;++n)e[n].destroy();return he(this)};var kw=Pm;var _si=y(x(),1);var ssi=y(x(),1);var vri=y(x(),1);var kpe=Math.cos,Qpe=Math.sin,snt=Math.sqrt,e8={};e8.computePosition=function(e,t,n,i,o,r,s){let a=t.radiiSquared,c=e.nwCorner,d=e.boundingRectangle,u=c.latitude-e.granYCos*i+o*e.granXSin,h=kpe(u),p=Qpe(u),A=a.z*p,f=c.longitude+i*e.granYSin+o*e.granXCos,b=h*kpe(f),C=h*Qpe(f),T=a.x*b,E=a.y*C,S=snt(T*b+E*C+A*p);if(r.x=T/S,r.y=E/S,r.z=A/S,n){let I=e.stNwCorner;l(I)?(u=I.latitude-e.stGranYCos*i+o*e.stGranXSin,f=I.longitude+i*e.stGranYSin+o*e.stGranXCos,s.x=(f-e.stWest)*e.lonScalar,s.y=(u-e.stSouth)*e.latScalar):(s.x=(f-d.west)*e.lonScalar,s.y=(u-d.south)*e.latScalar)}};var ant=new Qi,Xm=new m,cnt=new Ae,S9=new m,Qw=new ki;function Ope(e,t,n,i,o,r,s){let a=Math.cos(t),c=i*a,d=n*a,u=Math.sin(t),h=i*u,p=n*u;Qw._ellipsoid=ie.default,Xm=Qw.project(e,Xm),Xm=m.subtract(Xm,S9,Xm);let A=Qi.fromRotation(t,ant);Xm=Qi.multiplyByVector(A,Xm,Xm),Xm=m.add(Xm,S9,Xm),e=Qw.unproject(Xm,e),r-=1,s-=1;let f=e.latitude,b=f+r*p,C=f-c*s,T=f-c*s+r*p,E=Math.max(f,b,C,T),S=Math.min(f,b,C,T),I=e.longitude,R=I+r*d,V=I+s*h,W=I+s*h+r*d,B=Math.max(I,R,V,W),N=Math.min(I,R,V,W);return{north:E,south:S,east:B,west:N,granYCos:c,granYSin:h,granXCos:d,granXSin:p,nwCorner:e}}e8.computeOptions=function(e,t,n,i,o,r,s){let a=e.east,c=e.west,d=e.north,u=e.south,h=!1,p=!1;d===L.PI_OVER_TWO&&(h=!0),u===-L.PI_OVER_TWO&&(p=!0);let A,f=d-u;c>a?A=L.TWO_PI-c+a:A=a-c;let b=Math.ceil(A/t)+1,C=Math.ceil(f/t)+1,T=A/(b-1),E=f/(C-1),S=de.northwest(e,r),I=de.center(e,cnt);(n!==0||i!==0)&&(I.longitude<S.longitude&&(I.longitude+=L.TWO_PI),Qw._ellipsoid=ie.default,S9=Qw.project(I,S9));let R=E,V=T,W=0,B=0,N=de.clone(e,o),P={granYCos:R,granYSin:W,granXCos:V,granXSin:B,nwCorner:S,boundingRectangle:N,width:b,height:C,northCap:h,southCap:p};if(n!==0){let g=Ope(S,n,T,E,I,b,C);d=g.north,u=g.south,a=g.east,c=g.west,P.granYCos=g.granYCos,P.granYSin=g.granYSin,P.granXCos=g.granXCos,P.granXSin=g.granXSin,N.north=d,N.south=u,N.east=a,N.west=c}if(i!==0){n=n-i;let g=de.northwest(N,s),_=Ope(g,n,T,E,I,b,C);P.stGranYCos=_.granYCos,P.stGranXCos=_.granXCos,P.stGranYSin=_.granYSin,P.stGranXSin=_.granXSin,P.stNwCorner=g,P.stWest=_.west,P.stSouth=_.south}return P};var fa=e8;var lnt=new ue,dnt=new ue,unt=new m,mnt=new de;function zpe(e,t){let n=e._ellipsoid,i=t.height,o=t.width,r=t.northCap,s=t.southCap,a=i,c=2,d=0,u=4;r&&(c-=1,a-=1,d+=1,u-=2),s&&(c-=1,a-=1,d+=1,u-=2),d+=c*o+2*a-u;let h=new Float64Array(d*3),p=0,A=0,f,b=unt;if(r)fa.computePosition(t,n,!1,A,0,b),h[p++]=b.x,h[p++]=b.y,h[p++]=b.z;else for(f=0;f<o;f++)fa.computePosition(t,n,!1,A,f,b),h[p++]=b.x,h[p++]=b.y,h[p++]=b.z;for(f=o-1,A=1;A<i;A++)fa.computePosition(t,n,!1,A,f,b),h[p++]=b.x,h[p++]=b.y,h[p++]=b.z;if(A=i-1,!s)for(f=o-2;f>=0;f--)fa.computePosition(t,n,!1,A,f,b),h[p++]=b.x,h[p++]=b.y,h[p++]=b.z;for(f=0,A=i-2;A>0;A--)fa.computePosition(t,n,!1,A,f,b),h[p++]=b.x,h[p++]=b.y,h[p++]=b.z;let C=h.length/3*2,T=Ue.createTypedArray(h.length/3,C),E=0;for(let I=0;I<h.length/3-1;I++)T[E++]=I,T[E++]=I+1;T[E++]=h.length/3-1,T[E++]=0;let S=new Ct({attributes:new xn,primitiveType:We.LINES});return S.attributes.position=new we({componentDatatype:H.DOUBLE,componentsPerAttribute:3,values:h}),S.indices=T,S}function hnt(e,t){let n=e._surfaceHeight,i=e._extrudedHeight,o=e._ellipsoid,r=zpe(e,t),s=t.height,a=t.width,c=Ii.scaleToGeodeticHeight(r.attributes.position.values,n,o,!1),d=c.length,u=new Float64Array(d*2);u.set(c);let h=Ii.scaleToGeodeticHeight(r.attributes.position.values,i,o);u.set(h,d),r.attributes.position.values=u;let p=t.northCap,A=t.southCap,f=4;p&&(f-=1),A&&(f-=1);let b=(u.length/3+f)*2,C=Ue.createTypedArray(u.length/3,b);d=u.length/6;let T=0;for(let S=0;S<d-1;S++)C[T++]=S,C[T++]=S+1,C[T++]=S+d,C[T++]=S+d+1;C[T++]=d-1,C[T++]=0,C[T++]=d+d-1,C[T++]=d,C[T++]=0,C[T++]=d;let E;if(p)E=s-1;else{let S=a-1;C[T++]=S,C[T++]=S+d,E=a+s-2}if(C[T++]=E,C[T++]=E+d,!A){let S=a+E-1;C[T++]=S,C[T]=S+d}return r.indices=C,r}function $_(e){e=e??Q.EMPTY_OBJECT;let t=e.rectangle,n=e.granularity??L.RADIANS_PER_DEGREE,i=e.ellipsoid??ie.default,o=e.rotation??0,r=e.height??0,s=e.extrudedHeight??r;this._rectangle=de.clone(t),this._granularity=n,this._ellipsoid=i,this._surfaceHeight=Math.max(r,s),this._rotation=o,this._extrudedHeight=Math.min(r,s),this._offsetAttribute=e.offsetAttribute,this._workerName="createRectangleOutlineGeometry"}$_.packedLength=de.packedLength+ie.packedLength+5;$_.pack=function(e,t,n){return n=n??0,de.pack(e._rectangle,t,n),n+=de.packedLength,ie.pack(e._ellipsoid,t,n),n+=ie.packedLength,t[n++]=e._granularity,t[n++]=e._surfaceHeight,t[n++]=e._rotation,t[n++]=e._extrudedHeight,t[n]=e._offsetAttribute??-1,t};var Hpe=new de,Jpe=ie.clone(ie.UNIT_SPHERE),q_={rectangle:Hpe,ellipsoid:Jpe,granularity:void 0,height:void 0,rotation:void 0,extrudedHeight:void 0,offsetAttribute:void 0};$_.unpack=function(e,t,n){t=t??0;let i=de.unpack(e,t,Hpe);t+=de.packedLength;let o=ie.unpack(e,t,Jpe);t+=ie.packedLength;let r=e[t++],s=e[t++],a=e[t++],c=e[t++],d=e[t];return l(n)?(n._rectangle=de.clone(i,n._rectangle),n._ellipsoid=ie.clone(o,n._ellipsoid),n._surfaceHeight=s,n._rotation=a,n._extrudedHeight=c,n._offsetAttribute=d===-1?void 0:d,n):(q_.granularity=r,q_.height=s,q_.rotation=a,q_.extrudedHeight=c,q_.offsetAttribute=d===-1?void 0:d,new $_(q_))};var fnt=new Ae;$_.createGeometry=function(e){let t=e._rectangle,n=e._ellipsoid,i=fa.computeOptions(t,e._granularity,e._rotation,0,mnt,fnt),o,r;if(L.equalsEpsilon(t.north,t.south,L.EPSILON10)||L.equalsEpsilon(t.east,t.west,L.EPSILON10))return;let s=e._surfaceHeight,a=e._extrudedHeight,c=!L.equalsEpsilon(s,a,0,L.EPSILON2),d;if(c){if(o=hnt(e,i),l(e._offsetAttribute)){let p=o.attributes.position.values.length/3,A=new Uint8Array(p);e._offsetAttribute===An.TOP?A=A.fill(1,0,p/2):(d=e._offsetAttribute===An.NONE?0:1,A=A.fill(d)),o.attributes.applyOffset=new we({componentDatatype:H.UNSIGNED_BYTE,componentsPerAttribute:1,values:A})}let u=ue.fromRectangle3D(t,n,s,dnt),h=ue.fromRectangle3D(t,n,a,lnt);r=ue.union(u,h)}else{if(o=zpe(e,i),o.attributes.position.values=Ii.scaleToGeodeticHeight(o.attributes.position.values,s,n,!1),l(e._offsetAttribute)){let u=o.attributes.position.values.length;d=e._offsetAttribute===An.NONE?0:1;let h=new Uint8Array(u/3).fill(d);o.attributes.applyOffset=new we({componentDatatype:H.UNSIGNED_BYTE,componentsPerAttribute:1,values:h})}r=ue.fromRectangle3D(t,n,s)}return new Ct({attributes:o.attributes,indices:o.indices,primitiveType:We.LINES,boundingSphere:r,offsetAttribute:e._offsetAttribute})};var tT=$_;function tI(e){this.rectangle=de.clone(e.rectangle),this.minimumHeight=e.minimumHeight??0,this.maximumHeight=e.maximumHeight??0,this.southwestCornerCartesian=new m,this.northeastCornerCartesian=new m,this.westNormal=new m,this.southNormal=new m,this.eastNormal=new m,this.northNormal=new m;let t=e.ellipsoid??ie.WGS84;ynt(this,e.rectangle,t),this._orientedBoundingBox=void 0,this._boundingSphere=void 0,(e.computeBoundingVolumes??!0)&&this.computeBoundingVolumes(t)}Object.defineProperties(tI.prototype,{boundingVolume:{get:function(){return this._orientedBoundingBox}},boundingSphere:{get:function(){return this._boundingSphere}}});tI.prototype.computeBoundingVolumes=function(e){this._orientedBoundingBox=nn.fromRectangle(this.rectangle,this.minimumHeight,this.maximumHeight,e),this._boundingSphere=ue.fromOrientedBoundingBox(this._orientedBoundingBox)};var Kpe=new m,_9=new m,jpe=new m,pnt=new m,Ant=new m,gnt=new m,bnt=new m,Ym=new Ae,qpe=new dn(m.UNIT_X,0),eI=new Cn;function ynt(e,t,n){n.cartographicToCartesian(de.southwest(t),e.southwestCornerCartesian),n.cartographicToCartesian(de.northeast(t),e.northeastCornerCartesian),Ym.longitude=t.west,Ym.latitude=(t.south+t.north)*.5,Ym.height=0;let i=n.cartographicToCartesian(Ym,gnt),o=m.cross(i,m.UNIT_Z,pnt);m.normalize(o,e.westNormal),Ym.longitude=t.east;let r=n.cartographicToCartesian(Ym,bnt),s=m.cross(m.UNIT_Z,r,Kpe);m.normalize(s,e.eastNormal);let a=m.subtract(i,r,Kpe);m.magnitude(a)===0&&(a=m.clone(o,a));let c=m.normalize(a,Ant),d=t.south,u;if(d>0){Ym.longitude=(t.west+t.east)*.5,Ym.latitude=d;let b=n.cartographicToCartesian(Ym,eI.origin);m.clone(c,eI.direction);let C=dn.fromPointNormal(e.southwestCornerCartesian,e.westNormal,qpe);hi.rayPlane(eI,C,e.southwestCornerCartesian),u=n.geodeticSurfaceNormal(b,_9)}else u=n.geodeticSurfaceNormalCartographic(de.southeast(t),_9);let h=m.cross(u,a,jpe);m.normalize(h,e.southNormal);let p=t.north,A;if(p<0){Ym.longitude=(t.west+t.east)*.5,Ym.latitude=p;let b=n.cartographicToCartesian(Ym,eI.origin);m.negate(c,eI.direction);let C=dn.fromPointNormal(e.northeastCornerCartesian,e.eastNormal,qpe);hi.rayPlane(eI,C,e.northeastCornerCartesian),A=n.geodeticSurfaceNormal(b,_9)}else A=n.geodeticSurfaceNormalCartographic(de.northwest(t),_9);let f=m.cross(a,A,jpe);m.normalize(f,e.northNormal)}var xnt=new m,Cnt=new m,Tnt=new m(0,-1,0),Ent=new m(0,0,-1),$pe=new m;function Snt(e,t){let n=t.camera,i=n.positionWC,o=n.positionCartographic,r=0;if(!de.contains(e.rectangle,o)){let d=e.southwestCornerCartesian,u=e.northeastCornerCartesian,h=e.westNormal,p=e.southNormal,A=e.eastNormal,f=e.northNormal;t.mode!==se.SCENE3D&&(d=t.mapProjection.project(de.southwest(e.rectangle),xnt),d.z=d.y,d.y=d.x,d.x=0,u=t.mapProjection.project(de.northeast(e.rectangle),Cnt),u.z=u.y,u.y=u.x,u.x=0,h=Tnt,A=m.UNIT_Y,p=Ent,f=m.UNIT_Z);let b=m.subtract(i,d,$pe),C=m.dot(b,h),T=m.dot(b,p),E=m.subtract(i,u,$pe),S=m.dot(E,A),I=m.dot(E,f);C>0?r+=C*C:S>0&&(r+=S*S),T>0?r+=T*T:I>0&&(r+=I*I)}let s,a,c;if(t.mode===se.SCENE3D?(s=o.height,a=e.minimumHeight,c=e.maximumHeight):(s=i.x,a=0,c=0),s>c){let d=s-c;r+=d*d}else if(s<a){let d=a-s;r+=d*d}return Math.sqrt(r)}tI.prototype.distanceToCamera=function(e){let t=Snt(this,e);if(e.mode===se.SCENE3D&&l(this._orientedBoundingBox)){let n=Math.sqrt(this._orientedBoundingBox.distanceSquaredTo(e.camera.positionWC));return Math.max(t,n)}return t};tI.prototype.intersectPlane=function(e){return this._orientedBoundingBox.intersectPlane(e)};tI.prototype.createDebugVolume=function(e){let t=F.clone(F.IDENTITY),n=new tT({rectangle:this.rectangle,height:this.minimumHeight,extrudedHeight:this.maximumHeight}),i=new wt({geometry:n,id:"outline",modelMatrix:t,attributes:{color:$t.fromColor(e)}});return new Nn({geometryInstances:i,appearance:new yn({translucent:!1,flat:!0}),asynchronous:!1})};var Tu=tI;var uai=y(x(),1);var Hsi=y(x(),1);var Lsi=y(x(),1);var Ow={},_nt=new m,eAe=new m,tAe=new m,nAe=new m,iAe=new nn;Ow.validOutline=function(e){let n=nn.fromPoints(e,iAe).halfAxes,i=$.getColumn(n,0,eAe),o=$.getColumn(n,1,tAe),r=$.getColumn(n,2,nAe),s=m.magnitude(i),a=m.magnitude(o),c=m.magnitude(r);return!(s===0&&(a===0||c===0)||a===0&&c===0)};Ow.computeProjectTo2DArguments=function(e,t,n,i){let o=nn.fromPoints(e,iAe),r=o.halfAxes,s=$.getColumn(r,0,eAe),a=$.getColumn(r,1,tAe),c=$.getColumn(r,2,nAe),d=m.magnitude(s),u=m.magnitude(a),h=m.magnitude(c),p=Math.min(d,u,h);if(d===0&&(u===0||h===0)||u===0&&h===0)return!1;let A,f;return(p===u||p===h)&&(A=s),p===d?A=a:p===h&&(f=a),(p===d||p===u)&&(f=c),m.normalize(A,n),m.normalize(f,i),m.clone(o.center,t),!0};function oAe(e,t,n,i,o){let r=m.subtract(e,t,_nt),s=m.dot(n,r),a=m.dot(i,r);return M.fromElements(s,a,o)}Ow.createProjectPointsTo2DFunction=function(e,t,n){return function(i){let o=new Array(i.length);for(let r=0;r<i.length;r++)o[r]=oAe(i[r],e,t,n);return o}};Ow.createProjectPointTo2DFunction=function(e,t,n){return function(i,o){return oAe(i,e,t,n,o)}};var Pg=Ow;function Int(e){let t=e.length,n=new Float64Array(t*3),i=Ue.createTypedArray(t,t*2),o=0,r=0;for(let a=0;a<t;a++){let c=e[a];n[o++]=c.x,n[o++]=c.y,n[o++]=c.z,i[r++]=a,i[r++]=(a+1)%t}let s=new xn({position:new we({componentDatatype:H.DOUBLE,componentsPerAttribute:3,values:n})});return new Ct({attributes:s,indices:i,primitiveType:We.LINES})}function nT(e){e=e??Q.EMPTY_OBJECT;let t=e.polygonHierarchy;this._polygonHierarchy=t,this._workerName="createCoplanarPolygonOutlineGeometry",this.packedLength=ii.computeHierarchyPackedLength(t,m)+1}nT.fromPositions=function(e){e=e??Q.EMPTY_OBJECT;let t={polygonHierarchy:{positions:e.positions}};return new nT(t)};nT.pack=function(e,t,n){return n=n??0,n=ii.packPolygonHierarchy(e._polygonHierarchy,t,n,m),t[n]=e.packedLength,t};var Znt={polygonHierarchy:{}};nT.unpack=function(e,t,n){t=t??0;let i=ii.unpackPolygonHierarchy(e,t,m);t=i.startingIndex,delete i.startingIndex;let o=e[t];return l(n)||(n=new nT(Znt)),n._polygonHierarchy=i,n.packedLength=o,n};nT.createGeometry=function(e){let t=e._polygonHierarchy,n=t.positions;if(n=Uo(n,m.equalsEpsilon,!0),n.length<3||!Pg.validOutline(n))return;let o=ii.polygonOutlinesFromHierarchy(t,!1);if(o.length===0)return;let r=[];for(let c=0;c<o.length;c++){let d=new wt({geometry:Int(o[c])});r.push(d)}let s=zn.combineInstances(r)[0],a=ue.fromPoints(t.positions);return new Ct({attributes:s.attributes,indices:s.indices,primitiveType:s.primitiveType,boundingSphere:a})};var Mm=nT;var I9=new Ae;function zw(e){let t=JA.fromToken(e.token),n=e.minimumHeight??0,i=e.maximumHeight??0,o=e.ellipsoid??ie.WGS84;this.s2Cell=t,this.minimumHeight=n,this.maximumHeight=i,this.ellipsoid=o;let r=Nnt(t,n,i,o);this._boundingPlanes=r;let s=Mnt(r);this._vertices=s,this._edgeNormals=new Array(6),this._edgeNormals[0]=c8(r[0],s.slice(0,4));let a;for(a=0;a<4;a++)this._edgeNormals[0][a]=m.negate(this._edgeNormals[0][a],this._edgeNormals[0][a]);for(this._edgeNormals[1]=c8(r[1],s.slice(4,8)),a=0;a<4;a++)this._edgeNormals[2+a]=c8(r[2+a],[s[a%4],s[(a+1)%4],s[4+(a+1)%4],s[4+a]]);for(this._planeVertices=[this._vertices.slice(0,4),this._vertices.slice(4,8)],a=0;a<4;a++)this._planeVertices.push([this._vertices[a%4],this._vertices[(a+1)%4],this._vertices[4+(a+1)%4],this._vertices[4+a]]);let c=t.getCenter();I9=o.cartesianToCartographic(c,I9),I9.height=(i+n)/2,this.center=o.cartographicToCartesian(I9,c),this._boundingSphere=ue.fromPoints(s)}var Rnt=new m,Vnt=new Ae,Gnt=new m,Lnt=new Ae,Wnt=new m,Fnt=new m,Bnt=new m,wnt=new m;function Nnt(e,t,n,i){let o=new Array(6),r=e.getCenter(),s=i.geodeticSurfaceNormal(r,Rnt),a=i.cartesianToCartographic(r,Vnt);a.height=n;let c=i.cartographicToCartesian(a,Gnt),d=dn.fromPointNormal(c,s);o[0]=d;let u=0,h,p=[],A,f;for(h=0;h<4;h++){A=e.getVertex(h),p[h]=A,f=i.cartesianToCartographic(A,Lnt),f.height=t;let C=dn.getPointDistance(d,i.cartographicToCartesian(f,Wnt));C<u&&(u=C)}let b=dn.clone(d);for(b.normal=m.negate(b.normal,b.normal),b.distance=b.distance*-1+u,o[1]=b,h=0;h<4;h++){A=p[h];let C=p[(h+1)%4],T=i.geodeticSurfaceNormal(A,Fnt),E=m.subtract(C,A,wnt),S=m.cross(E,T,Bnt);S=m.normalize(S,S),o[2+h]=dn.fromPointNormal(A,S)}return o}var iT=new m,oT=new m,rT=new m,t8=new m,n8=new m,i8=new m,Pnt=new m,Xnt=new m,Ynt=new m,o8=new m,r8=new m,s8=new m,j0=new m,Zp=new $;function rAe(e,t,n){iT=e.normal,oT=t.normal,rT=n.normal,t8=m.multiplyByScalar(e.normal,-e.distance,t8),n8=m.multiplyByScalar(t.normal,-t.distance,n8),i8=m.multiplyByScalar(n.normal,-n.distance,i8),o8=m.multiplyByScalar(m.cross(oT,rT,Pnt),m.dot(t8,iT),o8),r8=m.multiplyByScalar(m.cross(rT,iT,Xnt),m.dot(n8,oT),r8),s8=m.multiplyByScalar(m.cross(iT,oT,Ynt),m.dot(i8,rT),s8),Zp[0]=iT.x,Zp[1]=oT.x,Zp[2]=rT.x,Zp[3]=iT.y,Zp[4]=oT.y,Zp[5]=rT.y,Zp[6]=iT.z,Zp[7]=oT.z,Zp[8]=rT.z;let i=$.determinant(Zp);return j0=m.add(o8,r8,j0),j0=m.add(j0,s8,j0),new m(j0.x/i,j0.y/i,j0.z/i)}function Mnt(e){let t=new Array(8);for(let n=0;n<4;n++)t[n]=rAe(e[0],e[2+(n+3)%4],e[2+n%4]),t[n+4]=rAe(e[1],e[2+(n+3)%4],e[2+n%4]);return t}var a8=new m,nI=new m;function c8(e,t){let n=[];for(let i=0;i<4;i++)a8=m.subtract(t[(i+1)%4],t[i],a8),nI=m.cross(e.normal,a8,nI),nI=m.normalize(nI,nI),n[i]=m.clone(nI);return n}Object.defineProperties(zw.prototype,{boundingVolume:{get:function(){return this}},boundingSphere:{get:function(){return this._boundingSphere}}});var l8=new m;zw.prototype.distanceToCamera=function(e){let t=e.camera.positionWC,n=[],i=[],o;dn.getPointDistance(this._boundingPlanes[0],t)>0?(n.push(0),i.push(this._planeVertices[0]),o=this._edgeNormals[0]):dn.getPointDistance(this._boundingPlanes[1],t)>0&&(n.push(1),i.push(this._planeVertices[1]),o=this._edgeNormals[1]);let r,s;for(r=0;r<4;r++)s=2+r,dn.getPointDistance(this._boundingPlanes[s],t)>0&&(n.push(s),i.push(this._planeVertices[s]),o=this._edgeNormals[s]);if(n.length===0)return 0;let a,c;if(n.length===1)return c=this._boundingPlanes[n[0]],a=d8(dn.projectPointOntoPlane(c,t,l8),i[0],c,o),m.distance(a,t);if(n.length===2){if(n[0]===0){let p=[this._vertices[4*n[0]+(n[1]-2)],this._vertices[4*n[0]+(n[1]-2+1)%4]];return a=sAe(t,p[0],p[1]),m.distance(a,t)}let u=Number.MAX_VALUE,h;for(r=0;r<2;r++)c=this._boundingPlanes[n[r]],a=d8(dn.projectPointOntoPlane(c,t,l8),i[r],c,this._edgeNormals[n[r]]),h=m.distanceSquared(a,t),h<u&&(u=h);return Math.sqrt(u)}else if(n.length>3)return a=d8(dn.projectPointOntoPlane(this._boundingPlanes[1],t,l8),this._planeVertices[1],this._boundingPlanes[1],this._edgeNormals[1]),m.distance(a,t);let d=n[1]===2&&n[2]===5?0:1;return n[0]===0?m.distance(t,this._vertices[(n[1]-2+d)%4]):m.distance(t,this._vertices[4+(n[1]-2+d)%4])};var vnt=new m,Unt=new m;function sAe(e,t,n){let i=m.subtract(n,t,vnt),o=m.subtract(e,t,Unt),r=m.dot(i,o);if(r<=0)return t;let s=m.dot(i,i);return r>=s?n:(r=r/s,new m((1-r)*t.x+r*n.x,(1-r)*t.y+r*n.y,(1-r)*t.z+r*n.z))}var Dnt=new dn(m.UNIT_X,0);function d8(e,t,n,i){let o=Number.MAX_VALUE,r,s,a;for(let c=0;c<t.length;c++){let d=dn.fromPointNormal(t[c],i[c],Dnt);dn.getPointDistance(d,e)<0||(a=sAe(e,t[c],t[(c+1)%4]),r=m.distance(e,a),r<o&&(o=r,s=a))}return l(s)?s:e}zw.prototype.intersectPlane=function(e){let t=0,n=0;for(let i=0;i<this._vertices.length;i++)m.dot(e.normal,this._vertices[i])+e.distance<0?n++:t++;return t===this._vertices.length?qt.INSIDE:n===this._vertices.length?qt.OUTSIDE:qt.INTERSECTING};zw.prototype.createDebugVolume=function(e){let t=F.clone(F.IDENTITY),n=new Mm({polygonHierarchy:{positions:this._planeVertices[0]}}),i=Mm.createGeometry(n),o=new wt({geometry:i,id:"outline",modelMatrix:t,attributes:{color:$t.fromColor(e)}}),r=new Mm({polygonHierarchy:{positions:this._planeVertices[1]}}),s=Mm.createGeometry(r),a=new wt({geometry:s,id:"outline",modelMatrix:t,attributes:{color:$t.fromColor(e)}}),c=[];for(let d=0;d<4;d++){let u=new Mm({polygonHierarchy:{positions:this._planeVertices[2+d]}}),h=Mm.createGeometry(u);c[d]=new wt({geometry:h,id:"outline",modelMatrix:t,attributes:{color:$t.fromColor(e)}})}return new Nn({geometryInstances:[c[0],c[1],c[2],c[3],a,o],appearance:new yn({translucent:!1,flat:!0}),asynchronous:!1})};var Hw=zw;var Uai=y(x(),1);var Lai=y(x(),1);var Iai=y(x(),1);var knt=new m(1,1,1),Z9=Math.cos,R9=Math.sin;function iI(e){e=e??Q.EMPTY_OBJECT;let t=e.radii??knt,n=e.innerRadii??t,i=e.minimumClock??0,o=e.maximumClock??L.TWO_PI,r=e.minimumCone??0,s=e.maximumCone??L.PI,a=Math.round(e.stackPartitions??10),c=Math.round(e.slicePartitions??8),d=Math.round(e.subdivisions??128);this._radii=m.clone(t),this._innerRadii=m.clone(n),this._minimumClock=i,this._maximumClock=o,this._minimumCone=r,this._maximumCone=s,this._stackPartitions=a,this._slicePartitions=c,this._subdivisions=d,this._offsetAttribute=e.offsetAttribute,this._workerName="createEllipsoidOutlineGeometry"}iI.packedLength=2*m.packedLength+8;iI.pack=function(e,t,n){return n=n??0,m.pack(e._radii,t,n),n+=m.packedLength,m.pack(e._innerRadii,t,n),n+=m.packedLength,t[n++]=e._minimumClock,t[n++]=e._maximumClock,t[n++]=e._minimumCone,t[n++]=e._maximumCone,t[n++]=e._stackPartitions,t[n++]=e._slicePartitions,t[n++]=e._subdivisions,t[n]=e._offsetAttribute??-1,t};var aAe=new m,cAe=new m,Xg={radii:aAe,innerRadii:cAe,minimumClock:void 0,maximumClock:void 0,minimumCone:void 0,maximumCone:void 0,stackPartitions:void 0,slicePartitions:void 0,subdivisions:void 0,offsetAttribute:void 0};iI.unpack=function(e,t,n){t=t??0;let i=m.unpack(e,t,aAe);t+=m.packedLength;let o=m.unpack(e,t,cAe);t+=m.packedLength;let r=e[t++],s=e[t++],a=e[t++],c=e[t++],d=e[t++],u=e[t++],h=e[t++],p=e[t];return l(n)?(n._radii=m.clone(i,n._radii),n._innerRadii=m.clone(o,n._innerRadii),n._minimumClock=r,n._maximumClock=s,n._minimumCone=a,n._maximumCone=c,n._stackPartitions=d,n._slicePartitions=u,n._subdivisions=h,n._offsetAttribute=p===-1?void 0:p,n):(Xg.minimumClock=r,Xg.maximumClock=s,Xg.minimumCone=a,Xg.maximumCone=c,Xg.stackPartitions=d,Xg.slicePartitions=u,Xg.subdivisions=h,Xg.offsetAttribute=p===-1?void 0:p,new iI(Xg))};iI.createGeometry=function(e){let t=e._radii;if(t.x<=0||t.y<=0||t.z<=0)return;let n=e._innerRadii;if(n.x<=0||n.y<=0||n.z<=0)return;let i=e._minimumClock,o=e._maximumClock,r=e._minimumCone,s=e._maximumCone,a=e._subdivisions,c=ie.fromCartesian3(t),d=e._slicePartitions+1,u=e._stackPartitions+1;d=Math.round(d*Math.abs(o-i)/L.TWO_PI),u=Math.round(u*Math.abs(s-r)/L.PI),d<2&&(d=2),u<2&&(u=2);let h=0,p=1,A=n.x!==t.x||n.y!==t.y||n.z!==t.z,f=!1,b=!1;A&&(p=2,r>0&&(f=!0,h+=d),s<Math.PI&&(b=!0,h+=d));let C=a*p*(u+d),T=new Float64Array(C*3),E=2*(C+h-(d+u)*p),S=Ue.createTypedArray(C,E),I,R,V,W,B=0,N=new Array(u),P=new Array(u);for(I=0;I<u;I++)W=r+I*(s-r)/(u-1),N[I]=R9(W),P[I]=Z9(W);let g=new Array(a),_=new Array(a);for(I=0;I<a;I++)V=i+I*(o-i)/(a-1),g[I]=R9(V),_[I]=Z9(V);for(I=0;I<u;I++)for(R=0;R<a;R++)T[B++]=t.x*N[I]*_[R],T[B++]=t.y*N[I]*g[R],T[B++]=t.z*P[I];if(A)for(I=0;I<u;I++)for(R=0;R<a;R++)T[B++]=n.x*N[I]*_[R],T[B++]=n.y*N[I]*g[R],T[B++]=n.z*P[I];for(N.length=a,P.length=a,I=0;I<a;I++)W=r+I*(s-r)/(a-1),N[I]=R9(W),P[I]=Z9(W);for(g.length=d,_.length=d,I=0;I<d;I++)V=i+I*(o-i)/(d-1),g[I]=R9(V),_[I]=Z9(V);for(I=0;I<a;I++)for(R=0;R<d;R++)T[B++]=t.x*N[I]*_[R],T[B++]=t.y*N[I]*g[R],T[B++]=t.z*P[I];if(A)for(I=0;I<a;I++)for(R=0;R<d;R++)T[B++]=n.x*N[I]*_[R],T[B++]=n.y*N[I]*g[R],T[B++]=n.z*P[I];for(B=0,I=0;I<u*p;I++){let w=I*a;for(R=0;R<a-1;R++)S[B++]=w+R,S[B++]=w+R+1}let Z=u*a*p;for(I=0;I<d;I++)for(R=0;R<a-1;R++)S[B++]=Z+I+R*d,S[B++]=Z+I+(R+1)*d;if(A)for(Z=u*a*p+d*a,I=0;I<d;I++)for(R=0;R<a-1;R++)S[B++]=Z+I+R*d,S[B++]=Z+I+(R+1)*d;if(A){let w=u*a*p,X=w+a*d;if(f)for(I=0;I<d;I++)S[B++]=w+I,S[B++]=X+I;if(b)for(w+=a*d-d,X+=a*d-d,I=0;I<d;I++)S[B++]=w+I,S[B++]=X+I}let G=new xn({position:new we({componentDatatype:H.DOUBLE,componentsPerAttribute:3,values:T})});if(l(e._offsetAttribute)){let w=T.length,X=e._offsetAttribute===An.NONE?0:1,k=new Uint8Array(w/3).fill(X);G.applyOffset=new we({componentDatatype:H.UNSIGNED_BYTE,componentsPerAttribute:1,values:k})}return new Ct({attributes:G,indices:S,primitiveType:We.LINES,boundingSphere:ue.fromEllipsoid(c),offsetAttribute:e._offsetAttribute})};var Eu=iI;function oI(e){let t=e.radius??1,i={radii:new m(t,t,t),stackPartitions:e.stackPartitions,slicePartitions:e.slicePartitions,subdivisions:e.subdivisions};this._ellipsoidGeometry=new Eu(i),this._workerName="createSphereOutlineGeometry"}oI.packedLength=Eu.packedLength;oI.pack=function(e,t,n){return Eu.pack(e._ellipsoidGeometry,t,n)};var Qnt=new Eu,sT={radius:void 0,radii:new m,stackPartitions:void 0,slicePartitions:void 0,subdivisions:void 0};oI.unpack=function(e,t,n){let i=Eu.unpack(e,t,Qnt);return sT.stackPartitions=i._stackPartitions,sT.slicePartitions=i._slicePartitions,sT.subdivisions=i._subdivisions,l(n)?(m.clone(i._radii,sT.radii),n._ellipsoidGeometry=new Eu(sT),n):(sT.radius=i._radii.x,new oI(sT))};oI.createGeometry=function(e){return Eu.createGeometry(e._ellipsoidGeometry)};var Yg=oI;function rI(e,t){t===0&&(t=L.EPSILON7),this._boundingSphere=new ue(e,t)}Object.defineProperties(rI.prototype,{center:{get:function(){return this._boundingSphere.center}},radius:{get:function(){return this._boundingSphere.radius}},boundingVolume:{get:function(){return this._boundingSphere}},boundingSphere:{get:function(){return this._boundingSphere}}});rI.prototype.distanceToCamera=function(e){let t=this._boundingSphere;return Math.max(0,m.distance(t.center,e.camera.positionWC)-t.radius)};rI.prototype.intersectPlane=function(e){return ue.intersectPlane(this._boundingSphere,e)};rI.prototype.update=function(e,t){m.clone(e,this._boundingSphere.center),this._boundingSphere.radius=t};rI.prototype.createDebugVolume=function(e){let t=new Yg({radius:this.radius}),n=F.fromTranslation(this.center,F.clone(F.IDENTITY)),i=new wt({geometry:t,id:"outline",modelMatrix:n,attributes:{color:$t.fromColor(e)}});return new Nn({geometryInstances:i,appearance:new yn({translucent:!1,flat:!0}),asynchronous:!1})};var Mg=rI;var tci=y(x(),1);var Ont=new m,znt=new m,Hnt=new m,Jnt=new m;function aT(e,t,n){n=m.cross(e,t,n);let i=m.magnitude(n);return m.multiplyByScalar(n,L.EPSILON7/i,n)}function u8(e,t){let n=m.normalize(e,Jnt),i=m.equalsEpsilon(n,m.UNIT_X,L.EPSILON6)?m.UNIT_Y:m.UNIT_X;return aT(e,i,t)}function lAe(e){let t=$.getColumn(e,0,Ont),n=$.getColumn(e,1,znt),i=$.getColumn(e,2,Hnt),o=m.equals(t,m.ZERO),r=m.equals(n,m.ZERO),s=m.equals(i,m.ZERO);return!o&&!r&&!s?e:o&&r&&s?(e[0]=L.EPSILON7,e[4]=L.EPSILON7,e[8]=L.EPSILON7,e):(o&&!r&&!s?t=aT(n,i,t):!o&&r&&!s?n=aT(t,i,n):!o&&!r&&s?i=aT(n,t,i):o?r?s||(t=u8(i,t),n=aT(i,t,n)):(t=u8(n,t),i=aT(n,t,i)):(n=u8(t,n),i=aT(n,t,i)),$.setColumn(e,0,t,e),$.setColumn(e,1,n,e),$.setColumn(e,2,i,e),e)}function sI(e,t){t=lAe(t),this._orientedBoundingBox=new nn(e,t),this._boundingSphere=ue.fromOrientedBoundingBox(this._orientedBoundingBox)}Object.defineProperties(sI.prototype,{boundingVolume:{get:function(){return this._orientedBoundingBox}},boundingSphere:{get:function(){return this._boundingSphere}}});sI.prototype.distanceToCamera=function(e){return Math.sqrt(this._orientedBoundingBox.distanceSquaredTo(e.camera.positionWC))};sI.prototype.intersectPlane=function(e){return this._orientedBoundingBox.intersectPlane(e)};sI.prototype.update=function(e,t){m.clone(e,this._orientedBoundingBox.center),t=lAe(t),$.clone(t,this._orientedBoundingBox.halfAxes),ue.fromOrientedBoundingBox(this._orientedBoundingBox,this._boundingSphere)};sI.prototype.createDebugVolume=function(e){let t=new Rh({minimum:new m(-1,-1,-1),maximum:new m(1,1,1)}),n=F.fromRotationTranslation(this.boundingVolume.halfAxes,this.boundingVolume.center),i=new wt({geometry:t,id:"outline",modelMatrix:n,attributes:{color:$t.fromColor(e)}});return new Nn({geometryInstances:i,appearance:new yn({translucent:!1,flat:!0}),asynchronous:!1})};var Gd=sI;function Gr(e,t,n,i){this._tileset=e,this._header=n;let o=l(n.contents),r=o&&n.contents.length>1||_i(n,"3DTILES_multiple_contents"),s=o&&!r?n.contents[0]:n.content;this._contentHeader=s,this.transform=l(n.transform)?F.unpack(n.transform):F.clone(F.IDENTITY);let a=l(i)?i.computedTransform:e.modelMatrix,c=F.multiply(a,this.transform,new F),d=l(i)?i._initialTransform:F.IDENTITY;this._initialTransform=F.multiply(d,this.transform,new F),this.computedTransform=c,this.metadata=Dw(e,n),this._verticalExaggeration=1,this._verticalExaggerationRelativeHeight=0,this._boundingVolume=this.createBoundingVolume(n.boundingVolume,c),this._boundingVolume2D=void 0;let u;l(s)&&l(s.boundingVolume)&&(u=this.createBoundingVolume(s.boundingVolume,c)),this._contentBoundingVolume=u,this._contentBoundingVolume2D=void 0;let h;l(n.viewerRequestVolume)&&(h=this.createBoundingVolume(n.viewerRequestVolume,c)),this._viewerRequestVolume=h,this.geometricError=n.geometricError,this._geometricError=n.geometricError,l(this._geometricError)||(this._geometricError=l(i)?i._geometricError:e._geometricError,Gr._deprecationWarning("geometricErrorUndefined","Required property geometricError is undefined for this tile. Using parent's geometric error instead.")),this.updateGeometricErrorScale();let p;l(n.refine)?((n.refine==="replace"||n.refine==="add")&&Gr._deprecationWarning("lowercase-refine",`This tile uses a lowercase refine "${n.refine}". Instead use "${n.refine.toUpperCase()}".`),p=n.refine.toUpperCase()==="REPLACE"?mr.REPLACE:mr.ADD):l(i)?p=i.refine:p=mr.REPLACE,this.refine=p,this.children=[],this.parent=i;let A,f=!1,b,C,T;if(t=Le.createIfNeeded(t),r)b=Ar.UNLOADED,C=t.clone();else if(l(s)){let R=s.uri;l(s.url)&&(Gr._deprecationWarning("contentUrl",'This tileset JSON uses the "content.url" property which has been deprecated. Use "content.uri" instead.'),R=s.url),R===""?(Gr._deprecationWarning("contentUriEmpty","content.uri property is an empty string, which creates a circular dependency, making this tileset invalid. Omit the content property instead"),A=new j_(e,this),f=!0,b=Ar.READY):(b=Ar.UNLOADED,C=t.getDerivedResource({url:R}),T=Yc.getServerKey(C.getUrlComponent()))}else A=new j_(e,this),f=!0,b=Ar.READY;this._content=A,this._contentResource=C,this._contentState=b,this._expiredContent=void 0,this._serverKey=T,this.hasEmptyContent=f,this.hasTilesetContent=!1,this.hasImplicitContent=!1,this.hasRenderableContent=!f,this.hasImplicitContentMetadata=!1,this.hasMultipleContents=r,this.cacheNode=void 0;let E=n.expire,S,I;l(E)&&(S=E.duration,l(E.date)&&(I=q.fromIso8601(E.date))),this.expireDuration=S,this.expireDate=I,this.lastStyleTime=0,this._optimChildrenWithinParent=Nm.NOT_COMPUTED,this.clippingPlanesDirty=!1,this.clippingPolygonsDirty=!1,this.priorityDeferred=!1,this.implicitTileset=void 0,this.implicitCoordinates=void 0,this.implicitSubtree=void 0,this._distanceToCamera=0,this._centerZDepth=0,this._screenSpaceError=0,this._screenSpaceErrorProgressiveResolution=0,this._visibilityPlaneMask=0,this._visible=!1,this._inRequestVolume=!1,this._finalResolution=!0,this._depth=0,this._stackLength=0,this._selectionDepth=0,this._updatedVisibilityFrame=0,this._touchedFrame=0,this._visitedFrame=0,this._selectedFrame=0,this._wasSelectedLastFrame=!1,this._requestedFrame=0,this._ancestorWithContent=void 0,this._ancestorWithContentAvailable=void 0,this._refines=!1,this._shouldSelect=!1,this._isClipped=!0,this._isClippedByPolygon=!1,this._clippingPlanesState=0,this._clippingPolygonsState=0,this._debugBoundingVolume=void 0,this._debugContentBoundingVolume=void 0,this._debugViewerRequestVolume=void 0,this._debugColor=U.fromRandom({alpha:1}),this._debugColorizeTiles=!1,this._priority=0,this._priorityHolder=this,this._priorityProgressiveResolution=!1,this._priorityProgressiveResolutionScreenSpaceErrorLeaf=!1,this._priorityReverseScreenSpaceError=0,this._foveatedFactor=0,this._wasMinPriorityChild=!1,this._loadTimestamp=new q,this._commandsLength=0,this._color=void 0,this._colorDirty=!1,this._request=void 0}Gr._deprecationWarning=Va;Object.defineProperties(Gr.prototype,{tileset:{get:function(){return this._tileset}},content:{get:function(){return this._content}},boundingVolume:{get:function(){return this._boundingVolume}},contentBoundingVolume:{get:function(){return this._contentBoundingVolume??this._boundingVolume}},boundingSphere:{get:function(){return this._boundingVolume.boundingSphere}},isVisible:{get:function(){return this._visible&&this._inRequestVolume}},extras:{get:function(){return this._header.extras}},color:{get:function(){return l(this._color)||(this._color=new U),U.clone(this._color)},set:function(e){this._color=U.clone(e,this._color),this._colorDirty=!0}},contentAvailable:{get:function(){return this.contentReady&&this.hasRenderableContent||l(this._expiredContent)&&!this.contentFailed}},contentReady:{get:function(){return this._contentState===Ar.READY}},contentUnloaded:{get:function(){return this._contentState===Ar.UNLOADED}},hasUnloadedRenderableContent:{get:function(){return this.hasRenderableContent&&this.contentUnloaded}},contentExpired:{get:function(){return this._contentState===Ar.EXPIRED}},contentFailed:{get:function(){return this._contentState===Ar.FAILED}},commandsLength:{get:function(){return this._commandsLength}}});var q0=new m;function Knt(e,t){let{tileset:n,boundingSphere:i}=e,{radius:o,center:r}=i,{camera:s}=t,a=m.multiplyByScalar(s.directionWC,e._centerZDepth,q0),c=m.add(s.positionWC,a,q0),d=m.subtract(c,r,q0);if(m.magnitude(d)>o){let I=m.normalize(d,q0),R=m.multiplyByScalar(I,o,q0),V=m.add(r,R,q0),W=m.subtract(V,s.positionWC,q0),B=m.normalize(W,q0);e._foveatedFactor=1-Math.abs(m.dot(s.directionWC,B))}else e._foveatedFactor=0;let p=e.refine===mr.REPLACE,A=n.isSkippingLevelOfDetail;if(p&&!A||!n.foveatedScreenSpaceError||n.foveatedConeSize===1||e._priorityProgressiveResolution&&p&&A||n._pass===sr.PRELOAD_FLIGHT||n._pass===sr.PRELOAD)return!1;let f=1-Math.cos(s.frustum.fov*.5),b=n.foveatedConeSize*f;if(e._foveatedFactor<=b)return!1;let C=f-b,T=L.clamp((e._foveatedFactor-b)/C,0,1),E=n.foveatedInterpolationCallback(n.foveatedMinimumScreenSpaceErrorRelaxation,n.memoryAdjustedScreenSpaceError,T),S=e._screenSpaceError===0&&l(e.parent)?e.parent._screenSpaceError*.5:e._screenSpaceError;return n.memoryAdjustedScreenSpaceError-E<=S}var fAe=new q;Gr.prototype.getScreenSpaceError=function(e,t,n){let i=this._tileset,o=n??1,r=l(this.parent)?this.parent.geometricError:i._scaledGeometricError,s=t?r:this.geometricError;if(s===0)return 0;let{camera:a,context:c}=e,d=a.frustum,u=c.drawingBufferWidth,h=c.drawingBufferHeight*o,p;if(e.mode===se.SCENE2D||d instanceof bn){let A=d.offCenterFrustum;l(A)&&(d=A);let f=Math.max(d.top-d.bottom,d.right-d.left)/Math.max(u,h);p=s/f}else{let A=Math.max(this._distanceToCamera,L.EPSILON7),f=d.sseDenominator;if(p=s*h/(A*f),i.dynamicScreenSpaceError){let b=i._dynamicScreenSpaceErrorComputedDensity,C=i.dynamicScreenSpaceErrorFactor,T=L.fog(A,b)*C;p-=T}}return p/=e.pixelRatio,p};function jnt(e,t){if(e.progressiveResolutionHeightFraction<=0||e.progressiveResolutionHeightFraction>.5)return!1;let n=e.memoryAdjustedScreenSpaceError,i=t._screenSpaceErrorProgressiveResolution>n;t._priorityProgressiveResolutionScreenSpaceErrorLeaf=!1;let o=t.parent,r=t._screenSpaceErrorProgressiveResolution<=n,s=l(o)&&o._screenSpaceErrorProgressiveResolution>n;return r&&s&&(t._priorityProgressiveResolutionScreenSpaceErrorLeaf=!0,i=!0),i}function qnt(e,t){let n=t.parent,o=l(n)&&(!e.isSkippingLevelOfDetail||t._screenSpaceError===0||n.hasTilesetContent||n.hasImplicitContent)?n._screenSpaceError:t._screenSpaceError;return e.root._screenSpaceError-o}Gr.prototype.updateVisibility=function(e){let{parent:t,tileset:n}=this;if(this._updatedVisibilityFrame===n._updatedVisibilityFrame)return;let i=l(t)?t.computedTransform:n.modelMatrix,o=l(t)?t._visibilityPlaneMask:Os.MASK_INDETERMINATE;this.updateTransform(i,e),this._distanceToCamera=this.distanceToTile(e),this._centerZDepth=this.distanceToTileCenter(e),this._screenSpaceError=this.getScreenSpaceError(e,!1),this._screenSpaceErrorProgressiveResolution=this.getScreenSpaceError(e,!1,n.progressiveResolutionHeightFraction),this._visibilityPlaneMask=this.visibility(e,o),this._visible=this._visibilityPlaneMask!==Os.MASK_OUTSIDE,this._inRequestVolume=this.insideViewerRequestVolume(e),this._priorityReverseScreenSpaceError=qnt(n,this),this._priorityProgressiveResolution=jnt(n,this),this.priorityDeferred=Knt(this,e),this._updatedVisibilityFrame=n._updatedVisibilityFrame};Gr.prototype.updateExpiration=function(){if(l(this.expireDate)&&this.contentReady&&!this.hasEmptyContent&&!this.hasMultipleContents){let e=q.now(fAe);q.lessThan(this.expireDate,e)&&(this._contentState=Ar.EXPIRED,this._expiredContent=this._content)}};function $nt(e){if(!l(e.expireDuration))return;let t=q.now(fAe);q.addSeconds(t,e.expireDuration,t),l(e.expireDate)?q.lessThan(e.expireDate,t)&&q.clone(t,e.expireDate):e.expireDate=q.clone(t)}function eit(e){return function(){return e._priority}}Gr.prototype.requestContent=function(){if(!this.hasEmptyContent)return this.hasMultipleContents?tit(this):iit(this)};function tit(e){let t=e._content,n=e._tileset;if(!l(t)){let o=_i(e._header,"3DTILES_multiple_contents")?e._header.extensions["3DTILES_multiple_contents"]:e._header;t=new kw(n,e,e._contentResource.clone(),o),e._content=t}let i=t.requestInnerContents();if(l(i))return e._contentState=Ar.LOADING,i.then(o=>{if(!e.isDestroyed()&&l(o))return e._contentState=Ar.PROCESSING,t}).catch(o=>{if(!e.isDestroyed())throw e._contentState=Ar.FAILED,o})}async function nit(e,t,n,i,o){let r=e._contentState;e._contentState=Ar.LOADING,++t.statistics.numberOfPendingRequests;let s;try{s=await o}catch(a){if(--t.statistics.numberOfPendingRequests,e.isDestroyed())return;if(n.cancelled||n.state===Ai.CANCELLED){e._contentState=r,++t.statistics.numberOfAttemptedRequests;return}throw e._contentState=Ar.FAILED,a}if(e.isDestroyed()){--t.statistics.numberOfPendingRequests;return}if(n.cancelled||n.state===Ai.CANCELLED){e._contentState=r,--t.statistics.numberOfPendingRequests,++t.statistics.numberOfAttemptedRequests;return}try{let a=await oit(e,s);return--t.statistics.numberOfPendingRequests,e.isDestroyed()?void 0:(i&&(e.expireDate=void 0),e._content=a,e._contentState=Ar.PROCESSING,a)}catch(a){if(--t.statistics.numberOfPendingRequests,e.isDestroyed())return;throw e._contentState=Ar.FAILED,a}}function iit(e){let t=e._contentResource.clone(),n=e.contentExpired;n&&t.setQueryParameters({expired:e.expireDate.toString()});let i=new Tr({throttle:!0,throttleByServer:!0,type:Ds.TILES3D,priorityFunction:eit(e),serverKey:e._serverKey});e._request=i,t.request=i;let o=e._tileset,r=t.fetchArrayBuffer();if(!l(r)){++o.statistics.numberOfAttemptedRequests;return}return nit(e,o,i,n,r)}async function oit(e,t){let n=Ng(t),i=e._tileset;i._disableSkipLevelOfDetail=i._disableSkipLevelOfDetail||n.contentType===ha.GEOMETRY||n.contentType===ha.VECTOR,(n.contentType===ha.IMPLICIT_SUBTREE||n.contentType===ha.IMPLICIT_SUBTREE_JSON)&&(e.hasImplicitContent=!0,e.hasRenderableContent=!1),n.contentType===ha.EXTERNAL_TILESET&&(e.hasTilesetContent=!0,e.hasRenderableContent=!1);let o,r=qC[n.contentType];if(e.isDestroyed())return;l(n.binaryPayload)?o=await Promise.resolve(r(i,e,e._contentResource,n.binaryPayload.buffer,0)):o=await Promise.resolve(r(i,e,e._contentResource,n.jsonPayload));let s=e._contentHeader;if(e.hasImplicitContentMetadata){let c=e.implicitSubtree,d=e.implicitCoordinates;o.metadata=c.getContentMetadataView(d,0)}else e.hasImplicitContent||(o.metadata=$C(i,s));let a=eT(i,s);return l(a)&&(o.group=new iC({metadata:a})),o}Gr.prototype.cancelRequests=function(){this.hasMultipleContents?this._content.cancelRequests():this._request.cancel()};Gr.prototype.unloadContent=function(){this.hasRenderableContent&&(this._content=this._content&&this._content.destroy(),this._contentState=Ar.UNLOADED,this.lastStyleTime=0,this.clippingPlanesDirty=this._clippingPlanesState===0,this._clippingPlanesState=0,this.clippingPolygonsDirty=this._clippingPolygonsState===0,this._clippingPolygonsState=0,this._debugColorizeTiles=!1,this._debugBoundingVolume=this._debugBoundingVolume&&this._debugBoundingVolume.destroy(),this._debugContentBoundingVolume=this._debugContentBoundingVolume&&this._debugContentBoundingVolume.destroy(),this._debugViewerRequestVolume=this._debugViewerRequestVolume&&this._debugViewerRequestVolume.destroy())};var pAe=new ue;function h8(e,t){if(t.mode!==se.SCENE3D&&!l(e._boundingVolume2D)){let n=e._boundingVolume.boundingSphere,i=ue.projectTo2D(n,t.mapProjection,pAe);e._boundingVolume2D=new Mg(i.center,i.radius)}return t.mode!==se.SCENE3D?e._boundingVolume2D:e._boundingVolume}function rit(e,t){if(t.mode!==se.SCENE3D&&!l(e._contentBoundingVolume2D)){let n=e._contentBoundingVolume.boundingSphere,i=ue.projectTo2D(n,t.mapProjection,pAe);e._contentBoundingVolume2D=new Mg(i.center,i.radius)}return t.mode!==se.SCENE3D?e._contentBoundingVolume2D:e._contentBoundingVolume}Gr.prototype.visibility=function(e,t){let n=e.cullingVolume,i=h8(this,e),o=this._tileset,r=o.clippingPlanes;if(l(r)&&r.enabled){let a=r.computeIntersectionWithBoundingVolume(i,o.clippingPlanesOriginMatrix);if(this._isClipped=a!==qt.INSIDE,a===qt.OUTSIDE)return Os.MASK_OUTSIDE}let s=o.clippingPolygons;if(l(s)&&s.enabled){let a=s.computeIntersectionWithBoundingVolume(i);this._isClippedByPolygon=a!==qt.OUTSIDE}return n.computeVisibilityWithPlaneMask(i,t)};Gr.prototype.contentVisibility=function(e){if(!l(this._contentBoundingVolume))return qt.INSIDE;if(this._visibilityPlaneMask===Os.MASK_INSIDE)return qt.INSIDE;let t=e.cullingVolume,n=rit(this,e),i=this._tileset,o=i.clippingPlanes;if(l(o)&&o.enabled){let s=o.computeIntersectionWithBoundingVolume(n,i.clippingPlanesOriginMatrix);if(this._isClipped=s!==qt.INSIDE,s===qt.OUTSIDE)return qt.OUTSIDE}let r=i.clippingPolygons;if(l(r)&&r.enabled){let s=r.computeIntersectionWithBoundingVolume(n);if(this._isClippedByPolygon=s!==qt.OUTSIDE,s===qt.INSIDE)return qt.OUTSIDE}return t.computeVisibility(n)};Gr.prototype.distanceToTile=function(e){return h8(this,e).distanceToCamera(e)};var sit=new m;Gr.prototype.distanceToTileCenter=function(e){let n=h8(this,e).boundingVolume,i=m.subtract(n.center,e.camera.positionWC,sit);return m.dot(e.camera.directionWC,i)};Gr.prototype.insideViewerRequestVolume=function(e){let t=this._viewerRequestVolume;return!l(t)||t.distanceToCamera(e)===0};var AAe=new $,gAe=new m,ait=new $,f8=new m,bAe=new de,yAe=new nn,m8=new F;function cit(e,t,n){let i=m.fromElements(e[0],e[1],e[2],f8),o=$.fromArray(e,3,ait);i=F.multiplyByPoint(t,i,i);let r=F.getMatrix3(t,AAe);return o=$.multiply(r,o,o),l(n)?(n.update(i,o),n):new Gd(i,o)}function dAe(e,t,n,i){let o=de.unpack(e,0,bAe),r=e[4],s=e[5],a=nn.fromRectangle(o,r,s,ie.WGS84,yAe),c=a.center,d=a.halfAxes;t=F.multiplyTransformation(t,F.inverseTransformation(n,m8),m8),c=F.multiplyByPoint(t,c,c);let u=F.getMatrix3(t,AAe);return d=$.multiply(u,d,d),l(i)&&i instanceof Gd?(i.update(c,d),i):new Gd(c,d)}function lit(e,t,n,i){if(!F.equalsEpsilon(t,n,L.EPSILON8))return i instanceof Gd?dAe(e,t,n,i):dAe(e,t,n,void 0);let o=de.unpack(e,0,bAe);return i instanceof Tu?(i.rectangle=de.clone(o,i.rectangle),i.minimumHeight=e[4],i.maximumHeight=e[5],i.computeBoundingVolumes(ie.WGS84),i):new Tu({rectangle:o,minimumHeight:e[4],maximumHeight:e[5]})}function dit(e,t,n){let i=m.fromElements(e[0],e[1],e[2],f8),o=e[3];i=F.multiplyByPoint(t,i,i);let r=F.getScale(t,gAe),s=m.maximumComponent(r);return o*=s,l(n)?(n.update(i,o),n):new Mg(i,o)}Gr.prototype.createBoundingVolume=function(e,t,n){let i=this.metadata,o;if(l(i)&&(o=T0.parseBoundingVolumeSemantic("TILE",i)),l(o)&&(e=o),!l(e))throw new me("boundingVolume must be defined");if(_i(e,"3DTILES_bounding_volume_S2"))return new Hw(e.extensions["3DTILES_bounding_volume_S2"]);let{box:r,region:s,sphere:a}=e;if(l(r)){let c=cit(r,t,n);return this._verticalExaggeration!==1&&uAe(c,this._verticalExaggeration,this._verticalExaggerationRelativeHeight),c}if(l(s)){let c=lit(s,t,this._initialTransform,n);return this._verticalExaggeration===1||(c instanceof Gd?uAe(c,this._verticalExaggeration,this._verticalExaggerationRelativeHeight):(c.minimumHeight=Eo.getHeight(c.minimumHeight,this._verticalExaggeration,this._verticalExaggerationRelativeHeight),c.maximumHeight=Eo.getHeight(c.maximumHeight,this._verticalExaggeration,this._verticalExaggerationRelativeHeight),c.computeBoundingVolumes(ie.WGS84))),c}if(l(a)){let c=dit(a,t,n);if(this._verticalExaggeration!==1){let d=Eo.getPosition(c.center,ie.WGS84,this._verticalExaggeration,this._verticalExaggerationRelativeHeight,f8),u=c.radius*this._verticalExaggeration;c.update(d,u)}return c}throw new me("boundingVolume must contain a sphere, region, or box")};var uit=m.unpackArray(new Array(24).fill(0));function uAe(e,t,n){let i=e.boundingVolume.computeCorners(uit).map(r=>Eo.getPosition(r,ie.WGS84,t,n,r)),o=nn.fromPoints(i,yAe);e.update(o.center,o.halfAxes)}Gr.prototype.updateTransform=function(e,t){e=e??F.IDENTITY;let n=F.multiplyTransformation(e,this.transform,m8),i=!F.equals(n,this.computedTransform),o=l(t)&&(this._verticalExaggeration!==t.verticalExaggeration||this._verticalExaggerationRelativeHeight!==t.verticalExaggerationRelativeHeight);if(!i&&!o)return;i&&F.clone(n,this.computedTransform),o&&(this._verticalExaggeration=t.verticalExaggeration,this._verticalExaggerationRelativeHeight=t.verticalExaggerationRelativeHeight);let r=this._header,s=this._contentHeader;this._boundingVolume=this.createBoundingVolume(r.boundingVolume,this.computedTransform,this._boundingVolume),l(this._contentBoundingVolume)&&(this._contentBoundingVolume=this.createBoundingVolume(s.boundingVolume,this.computedTransform,this._contentBoundingVolume)),l(this._viewerRequestVolume)&&(this._viewerRequestVolume=this.createBoundingVolume(r.viewerRequestVolume,this.computedTransform,this._viewerRequestVolume)),this.updateGeometricErrorScale(),this._debugBoundingVolume=this._debugBoundingVolume&&this._debugBoundingVolume.destroy(),this._debugContentBoundingVolume=this._debugContentBoundingVolume&&this._debugContentBoundingVolume.destroy(),this._debugViewerRequestVolume=this._debugViewerRequestVolume&&this._debugViewerRequestVolume.destroy()};Gr.prototype.updateGeometricErrorScale=function(){let e=F.getScale(this.computedTransform,gAe),t=m.maximumComponent(e);if(this.geometricError=this._geometricError*t,!l(this.parent)){let n=this._tileset;n._scaledGeometricError=n._geometricError*t}};function mit(e,t,n,i){if(!i.isRender)return;let o=l(e._contentHeader)&&l(e._contentHeader.boundingVolume),r=t.debugShowBoundingVolume||t.debugShowContentBoundingVolume&&!o;if(r){let c;e._finalResolution?e.hasRenderableContent?c=U.WHITE:c=U.DARKGRAY:c=U.YELLOW,l(e._debugBoundingVolume)||(e._debugBoundingVolume=e._boundingVolume.createDebugVolume(c)),e._debugBoundingVolume.update(n);let d=e._debugBoundingVolume.getGeometryInstanceAttributes("outline");d.color=$t.toValue(c,d.color)}else!r&&l(e._debugBoundingVolume)&&(e._debugBoundingVolume=e._debugBoundingVolume.destroy());t.debugShowContentBoundingVolume&&o?(l(e._debugContentBoundingVolume)||(e._debugContentBoundingVolume=e._contentBoundingVolume.createDebugVolume(U.BLUE)),e._debugContentBoundingVolume.update(n)):!t.debugShowContentBoundingVolume&&l(e._debugContentBoundingVolume)&&(e._debugContentBoundingVolume=e._debugContentBoundingVolume.destroy()),t.debugShowViewerRequestVolume&&l(e._viewerRequestVolume)?(l(e._debugViewerRequestVolume)||(e._debugViewerRequestVolume=e._viewerRequestVolume.createDebugVolume(U.YELLOW)),e._debugViewerRequestVolume.update(n)):!t.debugShowViewerRequestVolume&&l(e._debugViewerRequestVolume)&&(e._debugViewerRequestVolume=e._debugViewerRequestVolume.destroy());let s=t.debugColorizeTiles&&!e._debugColorizeTiles||l(t._heatmap.tilePropertyName),a=!t.debugColorizeTiles&&e._debugColorizeTiles;s?(t._heatmap.colorize(e,n),e._debugColorizeTiles=!0,e.color=e._debugColor):a&&(e._debugColorizeTiles=!1,e.color=U.WHITE),e._colorDirty&&(e._colorDirty=!1,e._content.applyDebugSettings(!0,e._color)),a&&t.makeStyleDirty()}function hit(e,t,n){let i=e._expiredContent;if(!e.hasMultipleContents&&l(i)){if(!e.contentReady){try{i.update(t,n)}catch{}return}e._expiredContent.destroy(),e._expiredContent=void 0}if(l(e.content))try{e.content.update(t,n)}catch(o){throw e._contentState=Ar.FAILED,o}}function fit(e,t){let n=t.clippingPlanes,i=0;l(n)&&e._isClipped&&n.enabled&&(i=n.clippingPlanesState),i!==e._clippingPlanesState&&(e._clippingPlanesState=i,e.clippingPlanesDirty=!0)}function pit(e,t){let n=t.clippingPolygons,i=0;l(n)&&e._isClippedByPolygon&&n.enabled&&(i=n.clippingPolygonsState),i!==e._clippingPolygonsState&&(e._clippingPolygonsState=i,e.clippingPolygonsDirty=!0)}Gr.prototype.update=function(e,t,n){let{commandList:i}=t,o=i.length;fit(this,e),pit(this,e),mit(this,e,t,n),hit(this,e,t);let r=i.length;this._commandsLength=r-o;for(let s=o;s<r;++s){let a=i[s],c=a.pass===Ge.TRANSLUCENT;a.depthForTranslucentClassification=c}this.clippingPlanesDirty=!1,this.clippingPolygonsDirty=!1};var mAe=[];Gr.prototype.process=function(e,t){!this.contentExpired&&!this.contentReady&&this._content.ready&&($nt(this),this._selectedFrame=0,this.lastStyleTime=0,q.now(this._loadTimestamp),this._contentState=Ar.READY,!this.hasTilesetContent&&!this.hasImplicitContent&&(e._statistics.incrementLoadCounts(this.content),++e._statistics.numberOfTilesWithContentReady,++e._statistics.numberOfLoadedTilesTotal,e._cache.add(this)));let n=t.commandList;t.commandList=mAe;try{this._content.update(e,t)}catch(i){throw this._contentState=Ar.FAILED,i}mAe.length=0,t.commandList=n};function hAe(e,t,n){let i=e*Math.pow(10,t);return parseInt(i)*Math.pow(10,n)}function V9(e,t,n){return Math.max(L.normalize(e,t,n)-L.EPSILON7,0)}Gr.prototype.updatePriority=function(){let e=this.tileset,t=e.preferLeaves,n=e._minimumPriority,i=e._maximumPriority,o=4,r=1,s=0,a=o,c=s+a,d=o,u=c+d,h=r,p=Math.pow(10,u),A=u+h,f=r,b=Math.pow(10,A),C=A+f,T=Math.pow(10,C),E=V9(this._depth,n.depth,i.depth);E=t?1-E:E;let I=!e.isSkippingLevelOfDetail&&this.refine===mr.REPLACE?V9(this._priorityHolder._distanceToCamera,n.distance,i.distance):V9(this._priorityReverseScreenSpaceError,n.reverseScreenSpaceError,i.reverseScreenSpaceError),R=hAe(I,a,s),V=this._priorityProgressiveResolution?0:p,W=V9(this._priorityHolder._foveatedFactor,n.foveatedFactor,i.foveatedFactor),B=hAe(W,d,c),N=this.priorityDeferred?b:0,P=e._pass===sr.PRELOAD_FLIGHT?0:T;this._priority=E+R+V+B+N+P};Gr.prototype.isDestroyed=function(){return!1};Gr.prototype.destroy=function(){return this._content=this._content&&this._content.destroy(),this._expiredContent=this._expiredContent&&!this._expiredContent.isDestroyed()&&this._expiredContent.destroy(),this._debugBoundingVolume=this._debugBoundingVolume&&this._debugBoundingVolume.destroy(),this._debugContentBoundingVolume=this._debugContentBoundingVolume&&this._debugContentBoundingVolume.destroy(),this._debugViewerRequestVolume=this._debugViewerRequestVolume&&this._debugViewerRequestVolume.destroy(),he(this)};var vm=Gr;var dli=y(x(),1);var $ci=y(x(),1);function vg(e){e=e??Q.EMPTY_OBJECT;let t=e.id,n=e.group,i=e.class,o=l(n.properties)?n.properties:{};this._class=i,this._properties=o,this._id=t,this._extras=n.extras,this._extensions=n.extensions}Object.defineProperties(vg.prototype,{class:{get:function(){return this._class}},id:{get:function(){return this._id}},extras:{get:function(){return this._extras}},extensions:{get:function(){return this._extensions}}});vg.prototype.hasProperty=function(e){return Kn.hasProperty(e,this._properties,this._class)};vg.prototype.hasPropertyBySemantic=function(e){return Kn.hasPropertyBySemantic(e,this._properties,this._class)};vg.prototype.getPropertyIds=function(e){return Kn.getPropertyIds(this._properties,this._class,e)};vg.prototype.getProperty=function(e){return Kn.getProperty(e,this._properties,this._class)};vg.prototype.setProperty=function(e,t){return Kn.setProperty(e,t,this._properties,this._class)};vg.prototype.getPropertyBySemantic=function(e){return Kn.getPropertyBySemantic(e,this._properties,this._class)};vg.prototype.setPropertyBySemantic=function(e,t){return Kn.setPropertyBySemantic(e,t,this._properties,this._class)};var aI=vg;var oli=y(x(),1);function Ug(e){e=e??Q.EMPTY_OBJECT;let t=e.tileset,n=e.class,i=l(t.properties)?t.properties:{};this._class=n,this._properties=i,this._extras=t.extras,this._extensions=t.extensions}Object.defineProperties(Ug.prototype,{class:{get:function(){return this._class}},extras:{get:function(){return this._extras}},extensions:{get:function(){return this._extensions}}});Ug.prototype.hasProperty=function(e){return Kn.hasProperty(e,this._properties,this._class)};Ug.prototype.hasPropertyBySemantic=function(e){return Kn.hasPropertyBySemantic(e,this._properties,this._class)};Ug.prototype.getPropertyIds=function(e){return Kn.getPropertyIds(this._properties,this._class,e)};Ug.prototype.getProperty=function(e){return Kn.getProperty(e,this._properties,this._class)};Ug.prototype.setProperty=function(e,t){return Kn.setProperty(e,t,this._properties,this._class)};Ug.prototype.getPropertyBySemantic=function(e){return Kn.getPropertyBySemantic(e,this._properties,this._class)};Ug.prototype.setPropertyBySemantic=function(e,t){return Kn.setPropertyBySemantic(e,t,this._properties,this._class)};var Jw=Ug;function xAe(e){e=e??Q.EMPTY_OBJECT;let t=e.metadataJson,n=e.schema,i=t.metadata??t.tileset,o;l(i)&&(o=new Jw({tileset:i,class:n.classes[i.class]}));let r=[],s=[],a=t.groups;if(Array.isArray(a)){let c=a.length;for(let d=0;d<c;d++){let u=a[d];s.push(new aI({group:u,class:n.classes[u.class]}))}}else if(l(a)){r=Object.keys(a).sort();let c=r.length;for(let d=0;d<c;d++){let u=r[d];if(a.hasOwnProperty(u)){let h=a[u];s.push(new aI({id:u,group:a[u],class:n.classes[h.class]}))}}}this._schema=n,this._groups=s,this._groupIds=r,this._tileset=o,this._statistics=t.statistics,this._extras=t.extras,this._extensions=t.extensions}Object.defineProperties(xAe.prototype,{schema:{get:function(){return this._schema}},groups:{get:function(){return this._groups}},groupIds:{get:function(){return this._groupIds}},tileset:{get:function(){return this._tileset}},statistics:{get:function(){return this._statistics}},extras:{get:function(){return this._extras}},extensions:{get:function(){return this._extensions}}});var cT=xAe;var Ali=y(x(),1);var CAe={},Ait=new m;CAe.checkChildrenWithinParent=function(e){let t=e.children,n=t.length,i=e.boundingVolume;if(i instanceof Gd||i instanceof Tu){let o=i._orientedBoundingBox;e._optimChildrenWithinParent=Nm.USE_OPTIMIZATION;for(let r=0;r<n;++r){let a=t[r].boundingVolume;if(!(a instanceof Gd||a instanceof Tu)){e._optimChildrenWithinParent=Nm.SKIP_OPTIMIZATION;break}let c=a._orientedBoundingBox,d=m.subtract(c.center,o.center,Ait),u=m.magnitude(d);m.divideByScalar(d,u,d);let h=Math.abs(o.halfAxes[0]*d.x)+Math.abs(o.halfAxes[1]*d.y)+Math.abs(o.halfAxes[2]*d.z)+Math.abs(o.halfAxes[3]*d.x)+Math.abs(o.halfAxes[4]*d.y)+Math.abs(o.halfAxes[5]*d.z)+Math.abs(o.halfAxes[6]*d.x)+Math.abs(o.halfAxes[7]*d.y)+Math.abs(o.halfAxes[8]*d.z),p=Math.abs(c.halfAxes[0]*d.x)+Math.abs(c.halfAxes[1]*d.y)+Math.abs(c.halfAxes[2]*d.z)+Math.abs(c.halfAxes[3]*d.x)+Math.abs(c.halfAxes[4]*d.y)+Math.abs(c.halfAxes[5]*d.z)+Math.abs(c.halfAxes[6]*d.x)+Math.abs(c.halfAxes[7]*d.y)+Math.abs(c.halfAxes[8]*d.z);if(h<=p+u){e._optimChildrenWithinParent=Nm.SKIP_OPTIMIZATION;break}}}return e._optimChildrenWithinParent===Nm.USE_OPTIMIZATION};var Kw=CAe;var Eli=y(x(),1);var yli=y(x(),1);function jw(){this.head=void 0,this.tail=void 0,this._length=0}Object.defineProperties(jw.prototype,{length:{get:function(){return this._length}}});function git(e,t,n){this.item=e,this.previous=t,this.next=n}jw.prototype.add=function(e){let t=new git(e,this.tail,void 0);return l(this.tail)?(this.tail.next=t,this.tail=t):(this.head=t,this.tail=t),++this._length,t};function TAe(e,t){l(t.previous)&&l(t.next)?(t.previous.next=t.next,t.next.previous=t.previous):l(t.previous)?(t.previous.next=void 0,e.tail=t.previous):l(t.next)?(t.next.previous=void 0,e.head=t.next):(e.head=void 0,e.tail=void 0),t.next=void 0,t.previous=void 0}jw.prototype.remove=function(e){l(e)&&(TAe(this,e),--this._length)};jw.prototype.splice=function(e,t){if(e===t)return;TAe(this,t);let n=e.next;e.next=t,this.tail===e?this.tail=t:n.previous=t,t.next=n,t.previous=e};var qw=jw;function lT(){this._list=new qw,this._sentinel=this._list.add(),this._trimTiles=!1}lT.prototype.reset=function(){this._list.splice(this._list.tail,this._sentinel)};lT.prototype.touch=function(e){let t=e.cacheNode;l(t)&&this._list.splice(this._sentinel,t)};lT.prototype.add=function(e){l(e.cacheNode)||(e.cacheNode=this._list.add(e))};lT.prototype.unloadTile=function(e,t,n){let i=t.cacheNode;l(i)&&(this._list.remove(i),t.cacheNode=void 0,n(e,t))};lT.prototype.unloadTiles=function(e,t){let n=this._trimTiles;this._trimTiles=!1;let i=this._list,o=this._sentinel,r=i.head;for(;r!==o&&(e.totalMemoryUsageInBytes>e.cacheBytes||n);){let s=r.item;r=r.next,this.unloadTile(e,s,t)}};lT.prototype.trim=function(){this._trimTiles=!0};var $w=lT;var Vli=y(x(),1);function G9(e){this.tilePropertyName=e,this._minimum=Number.MAX_VALUE,this._maximum=-Number.MAX_VALUE,this._previousMinimum=Number.MAX_VALUE,this._previousMaximum=-Number.MAX_VALUE,this._referenceMinimum={},this._referenceMaximum={}}function A8(e,t){let n;return t==="_loadTimestamp"?n=q.toDate(e).getTime():n=e,n}G9.prototype.setReferenceMinimumMaximum=function(e,t,n){this._referenceMinimum[n]=A8(e,n),this._referenceMaximum[n]=A8(t,n)};function bit(e,t){let n=e.tilePropertyName;if(l(n)){let i=A8(t[n],n);return l(i)?(e._maximum=Math.max(i,e._maximum),e._minimum=Math.min(i,e._minimum),i):(e.tilePropertyName=void 0,i)}}var p8=[new U(.1,.1,.1,1),new U(.153,.278,.878,1),new U(.827,.231,.49,1),new U(.827,.188,.22,1),new U(1,.592,.259,1),new U(1,.843,0,1)];G9.prototype.colorize=function(e,t){let n=this.tilePropertyName;if(!l(n)||!e.contentAvailable||e._selectedFrame!==t.frameNumber)return;let i=bit(this,e),o=this._previousMinimum,r=this._previousMaximum;if(o===Number.MAX_VALUE||r===-Number.MAX_VALUE)return;let s=r-o+L.EPSILON7,c=L.clamp(i-o,0,s)/s,d=p8.length-1,u=c*d,h=Math.floor(u),p=Math.ceil(u),A=u-h,f=p8[h],b=p8[p],C=U.clone(U.WHITE);C.red=L.lerp(f.red,b.red,A),C.green=L.lerp(f.green,b.green,A),C.blue=L.lerp(f.blue,b.blue,A),e._debugColor=C};G9.prototype.resetMinimumMaximum=function(){let e=this.tilePropertyName;if(l(e)){let t=this._referenceMinimum[e],n=this._referenceMaximum[e],i=l(t)&&l(n);this._previousMinimum=i?t:this._minimum,this._previousMaximum=i?n:this._maximum,this._minimum=Number.MAX_VALUE,this._maximum=-Number.MAX_VALUE}};var eN=G9;var Fli=y(x(),1);function cI(){this.selected=0,this.visited=0,this.numberOfCommands=0,this.numberOfAttemptedRequests=0,this.numberOfPendingRequests=0,this.numberOfTilesProcessing=0,this.numberOfTilesWithContentReady=0,this.numberOfTilesTotal=0,this.numberOfLoadedTilesTotal=0,this.numberOfFeaturesSelected=0,this.numberOfFeaturesLoaded=0,this.numberOfPointsSelected=0,this.numberOfPointsLoaded=0,this.numberOfTrianglesSelected=0,this.numberOfTilesStyled=0,this.numberOfFeaturesStyled=0,this.numberOfTilesCulledWithChildrenUnion=0,this.geometryByteLength=0,this.texturesByteLength=0,this.texturesReferenceCounterById={},this.batchTableByteLength=0}cI.prototype.clear=function(){this.selected=0,this.visited=0,this.numberOfCommands=0,this.numberOfAttemptedRequests=0,this.numberOfFeaturesSelected=0,this.numberOfPointsSelected=0,this.numberOfTrianglesSelected=0,this.numberOfTilesStyled=0,this.numberOfFeaturesStyled=0,this.numberOfTilesCulledWithChildrenUnion=0};cI.prototype.incrementSelectionCounts=function(e){this.numberOfFeaturesSelected+=e.featuresLength,this.numberOfPointsSelected+=e.pointsLength,this.numberOfTrianglesSelected+=e.trianglesLength;let t=e.innerContents;if(l(t)){let n=t.length;for(let i=0;i<n;++i)this.incrementSelectionCounts(t[i])}};cI.prototype.incrementLoadCounts=function(e){if(this.numberOfFeaturesLoaded+=e.featuresLength,this.numberOfPointsLoaded+=e.pointsLength,this.geometryByteLength+=e.geometryByteLength,this.batchTableByteLength+=e.batchTableByteLength,!(e instanceof bu))this.texturesByteLength+=e.texturesByteLength;else{let n=e.getTextureIds();for(let i of n){let o=this.texturesReferenceCounterById[i]??0;if(o===0){let r=e.getTextureByteLengthById(i);this.texturesByteLength+=r}this.texturesReferenceCounterById[i]=o+1}}let t=e.innerContents;if(l(t)){let n=t.length;for(let i=0;i<n;++i)this.incrementLoadCounts(t[i])}};cI.prototype.decrementLoadCounts=function(e){if(this.numberOfFeaturesLoaded-=e.featuresLength,this.numberOfPointsLoaded-=e.pointsLength,this.geometryByteLength-=e.geometryByteLength,this.batchTableByteLength-=e.batchTableByteLength,!(e instanceof bu))this.texturesByteLength-=e.texturesByteLength;else{let n=e.getTextureIds();for(let i of n){let o=this.texturesReferenceCounterById[i];if(o===1){delete this.texturesReferenceCounterById[i];let r=e.getTextureByteLengthById(i);this.texturesByteLength-=r}else this.texturesReferenceCounterById[i]=o-1}}let t=e.innerContents;if(l(t)){let n=t.length;for(let i=0;i<n;++i)this.decrementLoadCounts(t[i])}};cI.clone=function(e,t){t.selected=e.selected,t.visited=e.visited,t.numberOfCommands=e.numberOfCommands,t.numberOfAttemptedRequests=e.numberOfAttemptedRequests,t.numberOfPendingRequests=e.numberOfPendingRequests,t.numberOfTilesProcessing=e.numberOfTilesProcessing,t.numberOfTilesWithContentReady=e.numberOfTilesWithContentReady,t.numberOfTilesTotal=e.numberOfTilesTotal,t.numberOfFeaturesSelected=e.numberOfFeaturesSelected,t.numberOfFeaturesLoaded=e.numberOfFeaturesLoaded,t.numberOfPointsSelected=e.numberOfPointsSelected,t.numberOfPointsLoaded=e.numberOfPointsLoaded,t.numberOfTrianglesSelected=e.numberOfTrianglesSelected,t.numberOfTilesStyled=e.numberOfTilesStyled,t.numberOfFeaturesStyled=e.numberOfFeaturesStyled,t.numberOfTilesCulledWithChildrenUnion=e.numberOfTilesCulledWithChildrenUnion,t.geometryByteLength=e.geometryByteLength,t.texturesByteLength=e.texturesByteLength,t.texturesReferenceCounterById={...e.texturesReferenceCounterById},t.batchTableByteLength=e.batchTableByteLength};var lf=cI;var Nli=y(x(),1);function tN(){this._style=void 0,this._styleDirty=!1,this._lastStyleTime=0}Object.defineProperties(tN.prototype,{style:{get:function(){return this._style},set:function(e){e!==this._style&&(this._style=e,this._styleDirty=!0)}}});tN.prototype.makeDirty=function(){this._styleDirty=!0};tN.prototype.resetDirty=function(){this._styleDirty=!1};tN.prototype.applyStyle=function(e){if(!l(e.root)||l(this._style)&&!this._style._ready)return;let t=this._styleDirty;t&&++this._lastStyleTime;let n=this._lastStyleTime,i=e._statistics,o=t?e._selectedTiles:e._selectedTilesToStyle,r=o.length;for(let s=0;s<r;++s){let a=o[s];if(a.lastStyleTime!==n){let c=a.content;a.lastStyleTime=n,c.applyStyle(this._style),i.numberOfFeaturesStyled+=c.featuresLength,++i.numberOfTilesStyled}}};var nN=tN;var kli=y(x(),1);function yit(e,t,n){let i=_i(t,"3DTILES_implicit_tiling")?t.extensions["3DTILES_implicit_tiling"]:t.implicitTiling;this.baseResource=e,this.geometricError=t.geometricError,this.metadataSchema=n;let o=t.boundingVolume;if(!l(o.box)&&!l(o.region)&&!_i(o,"3DTILES_bounding_volume_S2")&&!_i(o,"3DTILES_bounding_volume_cylinder"))throw new me("Only box, region, 3DTILES_bounding_volume_S2, and 3DTILES_bounding_volume_cylinder are supported for implicit tiling");this.boundingVolume=o,this.refine=t.refine,this.subtreeUriTemplate=new Le({url:i.subtrees.uri}),this.contentUriTemplates=[],this.contentHeaders=[];let r=xit(t);for(let s=0;s<r.length;s++){let a=r[s];this.contentHeaders.push(He(a,!0));let c=new Le({url:a.uri});this.contentUriTemplates.push(c)}this.contentCount=this.contentHeaders.length,this.tileHeader=Cit(t),this.subdivisionScheme=Ls[i.subdivisionScheme],this.branchingFactor=Ls.getBranchingFactor(this.subdivisionScheme),this.subtreeLevels=i.subtreeLevels,l(i.availableLevels)?this.availableLevels=i.availableLevels:this.availableLevels=i.maximumLevel+1}function xit(e){if(_i(e,"3DTILES_multiple_contents")){let t=e.extensions["3DTILES_multiple_contents"];return l(t.contents)?t.contents:t.content}return l(e.contents)?e.contents:l(e.content)?[e.content]:[]}function Cit(e){let t=He(e,!0);return l(t.extensions)&&(delete t.extensions["3DTILES_implicit_tiling"],delete t.extensions["3DTILES_multiple_contents"],Object.keys(t.extensions).length===0&&delete t.extensions),delete t.implicitTiling,delete t.contents,delete t.content,t}var Rp=yit;var qli=y(x(),1);var zli=y(x(),1);var iN={};function EAe(e){return e=(e^e<<8)&16711935,e=(e^e<<4)&252645135,e=(e^e<<2)&858993459,e=(e^e<<1)&1431655765,e}function g8(e){return e=(e^e<<16)&50331903,e=(e^e<<8)&50393103,e=(e^e<<4)&51130563,e=(e^e<<2)&153391689,e}function SAe(e){return e&=1431655765,e=(e^e>>1)&858993459,e=(e^e>>2)&252645135,e=(e^e>>4)&16711935,e=(e^e>>8)&65535,e}function b8(e){return e&=153391689,e=(e^e>>2)&51130563,e=(e^e>>4)&50393103,e=(e^e>>8)&4278190335,e=(e^e>>16)&1023,e}iN.encode2D=function(e,t){return(EAe(e)|EAe(t)<<1)>>>0};iN.decode2D=function(e,t){return l(t)||(t=new Array(2)),t[0]=SAe(e),t[1]=SAe(e>>1),t};iN.encode3D=function(e,t,n){return g8(e)|g8(t)<<1|g8(n)<<2};iN.decode3D=function(e,t){return l(t)||(t=new Array(3)),t[0]=b8(e),t[1]=b8(e>>1),t[2]=b8(e>>2),t};var $0=iN;function gr(e){this.subdivisionScheme=e.subdivisionScheme,this.subtreeLevels=e.subtreeLevels,this.level=e.level,this.x=e.x,this.y=e.y,this.z=void 0,e.subdivisionScheme===Ls.OCTREE&&(this.z=e.z)}Object.defineProperties(gr.prototype,{childIndex:{get:function(){let e=0;return e|=this.x&1,e|=(this.y&1)<<1,this.subdivisionScheme===Ls.OCTREE&&(e|=(this.z&1)<<2),e}},mortonIndex:{get:function(){return this.subdivisionScheme===Ls.OCTREE?$0.encode3D(this.x,this.y,this.z):$0.encode2D(this.x,this.y)}},tileIndex:{get:function(){let e=this.subdivisionScheme===Ls.OCTREE?((1<<3*this.level)-1)/7:((1<<2*this.level)-1)/3,t=this.mortonIndex;return e+t}}});gr.prototype.getDescendantCoordinates=function(e){let t=this.level+e.level,n=(this.x<<e.level)+e.x,i=(this.y<<e.level)+e.y;if(this.subdivisionScheme===Ls.OCTREE){let o=(this.z<<e.level)+e.z;return new gr({subdivisionScheme:this.subdivisionScheme,subtreeLevels:this.subtreeLevels,level:t,x:n,y:i,z:o})}return new gr({subdivisionScheme:this.subdivisionScheme,subtreeLevels:this.subtreeLevels,level:t,x:n,y:i})};gr.prototype.getAncestorCoordinates=function(e){let t=1<<e,n=this.level-e,i=Math.floor(this.x/t),o=Math.floor(this.y/t);if(this.subdivisionScheme===Ls.OCTREE){let r=Math.floor(this.z/t);return new gr({subdivisionScheme:this.subdivisionScheme,subtreeLevels:this.subtreeLevels,level:n,x:i,y:o,z:r})}return new gr({subdivisionScheme:this.subdivisionScheme,subtreeLevels:this.subtreeLevels,level:n,x:i,y:o})};gr.prototype.getOffsetCoordinates=function(e){let t=e.level-this.level,n=1<<t,i=e.x%n,o=e.y%n;if(this.subdivisionScheme===Ls.OCTREE){let r=e.z%n;return new gr({subdivisionScheme:this.subdivisionScheme,subtreeLevels:this.subtreeLevels,level:t,x:i,y:o,z:r})}return new gr({subdivisionScheme:this.subdivisionScheme,subtreeLevels:this.subtreeLevels,level:t,x:i,y:o})};gr.prototype.getChildCoordinates=function(e){let t=this.level+1,n=2*this.x+e%2,i=2*this.y+Math.floor(e/2)%2;if(this.subdivisionScheme===Ls.OCTREE){let o=2*this.z+Math.floor(e/4)%2;return new gr({subdivisionScheme:this.subdivisionScheme,subtreeLevels:this.subtreeLevels,level:t,x:n,y:i,z:o})}return new gr({subdivisionScheme:this.subdivisionScheme,subtreeLevels:this.subtreeLevels,level:t,x:n,y:i})};gr.prototype.getSubtreeCoordinates=function(){return this.getAncestorCoordinates(this.level%this.subtreeLevels)};gr.prototype.getParentSubtreeCoordinates=function(){return this.getAncestorCoordinates(this.level%this.subtreeLevels+this.subtreeLevels)};gr.prototype.isAncestor=function(e){let t=e.level-this.level;if(t<=0)return!1;let n=e.x>>t,i=e.y>>t,o=this.x===n,r=this.y===i;if(this.subdivisionScheme===Ls.OCTREE){let s=e.z>>t,a=this.z===s;return o&&r&&a}return o&&r};gr.prototype.isEqual=function(e){return this.subdivisionScheme===e.subdivisionScheme&&this.subtreeLevels===e.subtreeLevels&&this.level===e.level&&this.x===e.x&&this.y===e.y&&(this.subdivisionScheme===Ls.OCTREE?this.z===e.z:!0)};gr.prototype.isImplicitTilesetRoot=function(){return this.level===0};gr.prototype.isSubtreeRoot=function(){return this.level%this.subtreeLevels===0};gr.prototype.isBottomOfSubtree=function(){return this.level%this.subtreeLevels===this.subtreeLevels-1};gr.prototype.getTemplateValues=function(){let e={level:this.level,x:this.x,y:this.y};return this.subdivisionScheme===Ls.OCTREE&&(e.z=this.z),e};var _Ae=[0,0,0];gr.fromMortonIndex=function(e,t,n,i){let o;return e===Ls.OCTREE?(o=$0.decode3D(i,_Ae),new gr({subdivisionScheme:e,subtreeLevels:t,level:n,x:o[0],y:o[1],z:o[2]})):(o=$0.decode2D(i,_Ae),new gr({subdivisionScheme:e,subtreeLevels:t,level:n,x:o[0],y:o[1]}))};gr.fromTileIndex=function(e,t,n){let i,o,r;return e===Ls.OCTREE?(i=Math.floor(L.log2(7*n+1)/3),o=((1<<3*i)-1)/7,r=n-o):(i=Math.floor(L.log2(3*n+1)/2),o=((1<<2*i)-1)/3,r=n-o),gr.fromMortonIndex(e,t,i,r)};var Vp=gr;var udi=y(x(),1);var rdi=y(x(),1);function Dg(){}Dg.selectTiles=function(e,t){fe.throwInstantiationError()};Dg.sortChildrenByDistanceToCamera=function(e,t){return t._distanceToCamera===0&&e._distanceToCamera===0?t._centerZDepth-e._centerZDepth:t._distanceToCamera-e._distanceToCamera};Dg.canTraverse=function(e){return e.children.length===0?!1:e.hasTilesetContent||e.hasImplicitContent?!e.contentExpired:e._screenSpaceError>e.tileset.memoryAdjustedScreenSpaceError};Dg.selectTile=function(e,t){if(e.contentVisibility(t)===qt.OUTSIDE)return;e._wasSelectedLastFrame=!0;let{content:n,tileset:i}=e;n.featurePropertiesDirty?(n.featurePropertiesDirty=!1,e.lastStyleTime=0,i._selectedTilesToStyle.push(e)):e._selectedFrame<t.frameNumber-1&&(i._selectedTilesToStyle.push(e),e._wasSelectedLastFrame=!1),e._selectedFrame=t.frameNumber,i._selectedTiles.push(e)};Dg.visitTile=function(e,t){++e.tileset._statistics.visited,e._visitedFrame=t.frameNumber};Dg.touchTile=function(e,t){e._touchedFrame!==t.frameNumber&&(e.tileset._cache.touch(e),e._touchedFrame=t.frameNumber)};Dg.loadTile=function(e,t){let{tileset:n}=e;if(e._requestedFrame===t.frameNumber||!e.hasUnloadedRenderableContent&&!e.contentExpired||!Tit(e,t))return;let i=t.camera.timeSinceMoved<n.foveatedTimeDelay;e.priorityDeferred&&i||(e._requestedFrame=t.frameNumber,n._requestedTiles.push(e))};function Tit(e,t){let{tileset:n}=e;if(!n._cullRequestsWhileMoving)return!0;let{positionWCDeltaMagnitude:i,positionWCDeltaMagnitudeLastFrame:o}=t.camera,r=i!==0?i:o,s=Math.max(e.boundingSphere.radius*2,1);return n.cullRequestsWhileMovingMultiplier*r/s<1}Dg.updateTile=function(e,t){IAe(e,t),e.updateExpiration(),e._wasMinPriorityChild=!1,e._priorityHolder=e,_it(e),e._shouldSelect=!1,e._finalResolution=!0};function IAe(e,t){if(e.updateVisibility(t),!e.isVisible)return;let n=e.children.length>0;if((e.hasTilesetContent||e.hasImplicitContent)&&n){let r=e.children[0];IAe(r,t),e._visible=r._visible;return}if(Eit(e,t)){e._visible=!1;return}let i=e.refine===mr.REPLACE,o=e._optimChildrenWithinParent===Nm.USE_OPTIMIZATION;if(i&&o&&n&&!Sit(e,t)){++e.tileset._statistics.numberOfTilesCulledWithChildrenUnion,e._visible=!1;return}}function Eit(e,t){let{parent:n,tileset:i}=e;return!l(n)||n.hasTilesetContent||n.hasImplicitContent||n.refine!==mr.ADD?!1:e.getScreenSpaceError(t,!0)<=i.memoryAdjustedScreenSpaceError}function Sit(e,t){let n=!1,i=e.children;for(let o=0;o<i.length;++o){let r=i[o];r.updateVisibility(t),n=n||r.isVisible}return n}function _it(e){let t=e.tileset._minimumPriority,n=e.tileset._maximumPriority,i=e._priorityHolder;n.distance=Math.max(i._distanceToCamera,n.distance),t.distance=Math.min(i._distanceToCamera,t.distance),n.depth=Math.max(e._depth,n.depth),t.depth=Math.min(e._depth,t.depth),n.foveatedFactor=Math.max(i._foveatedFactor,n.foveatedFactor),t.foveatedFactor=Math.min(i._foveatedFactor,t.foveatedFactor),n.reverseScreenSpaceError=Math.max(e._priorityReverseScreenSpaceError,n.reverseScreenSpaceError),t.reverseScreenSpaceError=Math.min(e._priorityReverseScreenSpaceError,t.reverseScreenSpaceError)}var Xa=Dg;function ZAe(){}var oN={stack:new Nl,stackMaximumLength:0};ZAe.selectTiles=function(e,t){e._selectedTiles.length=0,e._requestedTiles.length=0,e.hasMixedContent=!1;let n=!0,i=e.root;if(i.updateVisibility(t),!i.isVisible)return n;let{touchTile:o,visitTile:r}=Xa,s=oN.stack;for(s.push(i);s.length>0;){oN.stackMaximumLength=Math.max(oN.stackMaximumLength,s.length);let a=s.pop(),c=a.refine===mr.ADD,d=a.refine===mr.REPLACE,u=Iit(a);u&&Zit(a,s,t),(c||d&&!u)&&(Rit(e,a),o(a,t),Vit(a,t),a.hasRenderableContent&&!a.contentAvailable&&(n=!1)),r(a,t)}return oN.stack.trim(oN.stackMaximumLength),n};function Iit(e){return e.children.length===0?!1:e.hasTilesetContent||e.hasImplicitContent?!e.contentExpired:(e.hasEmptyContent,!0)}function Zit(e,t,n){let{children:i}=e;for(let o=0;o<i.length;++o){let r=i[o];r.updateVisibility(n),r.isVisible&&t.push(r)}}function Rit(e,t){(t.hasUnloadedRenderableContent||t.contentExpired)&&(t._priority=0,e._requestedTiles.push(t))}function Vit(e,t){e.contentAvailable&&e.contentVisibility(t)!==qt.OUTSIDE&&e.tileset._selectedTiles.push(e)}var rN=ZAe;var gdi=y(x(),1);function RAe(){}var sN={stack:new Nl,stackMaximumLength:0},aN={stack:new Nl,stackMaximumLength:0};RAe.selectTiles=function(e,t){if(e._requestedTiles.length=0,e.debugFreezeFrame)return;e._selectedTiles.length=0,e._selectedTilesToStyle.length=0,e._emptyTiles.length=0,e.hasMixedContent=!1;let n=e.root;if(Xa.updateTile(n,t),!n.isVisible||n.getScreenSpaceError(t,!0)<=e.memoryAdjustedScreenSpaceError)return;Lit(n,t),sN.stack.trim(sN.stackMaximumLength),aN.stack.trim(aN.stackMaximumLength);let i=e._requestedTiles;for(let o=0;o<i.length;++o)i[o].updatePriority()};function y8(e,t){e.contentAvailable&&Xa.selectTile(e,t)}function Git(e,t,n){let i=e.refine===mr.REPLACE,{tileset:o,children:r}=e,{updateTile:s,loadTile:a,touchTile:c}=Xa;for(let f=0;f<r.length;++f)s(r[f],n);r.sort(Xa.sortChildrenByDistanceToCamera);let d=i&&e.hasRenderableContent,u=!0,h=!1,p=-1,A=Number.MAX_VALUE;for(let f=0;f<r.length;++f){let b=r[f];if(b.isVisible?(t.push(b),b._foveatedFactor<A&&(p=f,A=b._foveatedFactor),h=!0):(d||o.loadSiblings)&&(b._foveatedFactor<A&&(p=f,A=b._foveatedFactor),a(b,n),c(b,n)),d){let C;b._inRequestVolume?b.hasRenderableContent?C=b.contentAvailable:C=Wit(b,n):C=!1,u=u&&C}}if(h||(u=!1),p!==-1&&i){let f=r[p];f._wasMinPriorityChild=!0;let b=(e._wasMinPriorityChild||e===o.root)&&A<=e._priorityHolder._foveatedFactor?e._priorityHolder:e;b._foveatedFactor=Math.min(f._foveatedFactor,b._foveatedFactor),b._distanceToCamera=Math.min(f._distanceToCamera,b._distanceToCamera);for(let C=0;C<r.length;++C)r[C]._priorityHolder=b}return u}function Lit(e,t){let{tileset:n}=e,{canTraverse:i,loadTile:o,visitTile:r,touchTile:s}=Xa,a=sN.stack;for(a.push(e);a.length>0;){sN.stackMaximumLength=Math.max(sN.stackMaximumLength,a.length);let c=a.pop(),d=c.parent,u=!l(d)||d._refines;c._refines=i(c)?Git(c,a,t)&&u:!1;let h=!c._refines&&u;c.hasRenderableContent?c.refine===mr.ADD?(y8(c,t),o(c,t)):c.refine===mr.REPLACE&&(o(c,t),h&&y8(c,t)):(n._emptyTiles.push(c),o(c,t),h&&y8(c,t)),r(c,t),s(c,t)}}function Wit(e,t){let{canTraverse:n,updateTile:i,loadTile:o,touchTile:r}=Xa,s=!0,a=aN.stack;for(a.push(e);a.length>0;){aN.stackMaximumLength=Math.max(aN.stackMaximumLength,a.length);let c=a.pop(),d=c.children,u=d.length,h=!c.hasRenderableContent&&n(c);if(!h&&!c.contentAvailable&&(s=!1),i(c,t),c.isVisible||(o(c,t),r(c,t)),h)for(let p=0;p<u;++p){let A=d[p];a.push(A)}}return e.hasEmptyContent||s}var cN=RAe;var Edi=y(x(),1);function VAe(){}var lN={stack:new Nl,stackMaximumLength:0},dN={stack:new Nl,stackMaximumLength:0},kg={stack:new Nl,stackMaximumLength:0,ancestorStack:new Nl,ancestorStackMaximumLength:0},Fit=2;VAe.selectTiles=function(e,t){if(e._requestedTiles.length=0,e.debugFreezeFrame)return;e._selectedTiles.length=0,e._selectedTilesToStyle.length=0,e._emptyTiles.length=0,e.hasMixedContent=!1;let n=e.root;if(Xa.updateTile(n,t),!n.isVisible||n.getScreenSpaceError(t,!0)<=e.memoryAdjustedScreenSpaceError)return;Yit(n,t),Mit(n,t),lN.stack.trim(lN.stackMaximumLength),dN.stack.trim(dN.stackMaximumLength),kg.stack.trim(kg.stackMaximumLength),kg.ancestorStack.trim(kg.ancestorStackMaximumLength);let i=e._requestedTiles;for(let o=0;o<i.length;++o)i[o].updatePriority()};function Bit(e,t){let{updateTile:n,touchTile:i,selectTile:o}=Xa,r=dN.stack;for(r.push(e);r.length>0;){dN.stackMaximumLength=Math.max(dN.stackMaximumLength,r.length);let a=r.pop().children;for(let c=0;c<a.length;++c){let d=a[c];d.isVisible&&(d.contentAvailable?(n(d,t),i(d,t),o(d,t)):d._depth-e._depth<Fit&&r.push(d))}}}function L9(e,t){let n=e.contentAvailable?e:e._ancestorWithContentAvailable;l(n)?n._shouldSelect=!0:Bit(e,t)}function wit(e,t){e._ancestorWithContent=void 0,e._ancestorWithContentAvailable=void 0;let{parent:n}=e;if(!l(n))return;let i=!n.hasUnloadedRenderableContent||n._requestedFrame===t.frameNumber;e._ancestorWithContent=i?n:n._ancestorWithContent,e._ancestorWithContentAvailable=n.contentAvailable?n:n._ancestorWithContentAvailable}function Nit(e,t){let n=t._ancestorWithContent;return!e.immediatelyLoadDesiredLevelOfDetail&&(t._priorityProgressiveResolutionScreenSpaceErrorLeaf||l(n)&&t._screenSpaceError<n._screenSpaceError/e.skipScreenSpaceErrorFactor&&t._depth>n._depth+e.skipLevels)}function Pit(e,t,n){let{tileset:i,children:o}=e,{updateTile:r,loadTile:s,touchTile:a}=Xa;for(let d=0;d<o.length;++d)r(o[d],n);o.sort(Xa.sortChildrenByDistanceToCamera);let c=!1;for(let d=0;d<o.length;++d){let u=o[d];u.isVisible?(t.push(u),c=!0):i.loadSiblings&&(s(u,n),a(u,n))}return c}function Xit(e,t){let{tileset:n}=e;return n.immediatelyLoadDesiredLevelOfDetail?!1:l(e._ancestorWithContent)?e._screenSpaceError===0?e.parent._screenSpaceError>t:e._screenSpaceError>t:!0}function Yit(e,t){let{tileset:n}=e,i=n.immediatelyLoadDesiredLevelOfDetail?Number.MAX_VALUE:Math.max(n.baseScreenSpaceError,n.memoryAdjustedScreenSpaceError),{canTraverse:o,loadTile:r,visitTile:s,touchTile:a}=Xa,c=lN.stack;for(c.push(e);c.length>0;){lN.stackMaximumLength=Math.max(lN.stackMaximumLength,c.length);let d=c.pop();wit(d,t);let u=d.parent,h=!l(u)||u._refines;d._refines=o(d)?Pit(d,c,t)&&h:!1;let p=!d._refines&&h;d.hasRenderableContent?d.refine===mr.ADD?(L9(d,t),r(d,t)):d.refine===mr.REPLACE&&(Xit(d,i)?(r(d,t),p&&L9(d,t)):p?(L9(d,t),r(d,t)):Nit(n,d)&&r(d,t)):(n._emptyTiles.push(d),r(d,t),p&&L9(d,t)),s(d,t),a(d,t)}}function Mit(e,t){let{selectTile:n,canTraverse:i}=Xa,{stack:o,ancestorStack:r}=kg,s;for(o.push(e);o.length>0||r.length>0;){if(kg.stackMaximumLength=Math.max(kg.stackMaximumLength,o.length),kg.ancestorStackMaximumLength=Math.max(kg.ancestorStackMaximumLength,r.length),r.length>0){let d=r.peek();if(d._stackLength===o.length){r.pop(),d!==s&&(d._finalResolution=!1),n(d,t);continue}}let a=o.pop();if(!l(a))continue;let c=i(a);if(a._shouldSelect)if(a.refine===mr.ADD)n(a,t);else{if(a._selectionDepth=r.length,a._selectionDepth>0&&(a.tileset.hasMixedContent=!0),s=a,!c){n(a,t);continue}r.push(a),a._stackLength=o.length}if(c){let d=a.children;for(let u=0;u<d.length;++u){let h=d[u];h.isVisible&&o.push(h)}}}}var uN=VAe;var Ldi=y(x(),1);function Ks(){this._layers=[],this.layerAdded=new xe,this.layerRemoved=new xe,this.layerMoved=new xe,this.layerShownOrHidden=new xe}Object.defineProperties(Ks.prototype,{length:{get:function(){return this._layers.length}}});Ks.prototype.add=function(e,t){l(t)?this._layers.splice(t,0,e):(t=this._layers.length,this._layers.push(e)),this._update(),this.layerAdded.raiseEvent(e,t);let i=e.readyEvent.addEventListener(()=>{this.layerShownOrHidden.raiseEvent(e,e._layerIndex,e.show),i()})};Ks.prototype.addImageryProvider=function(e,t){let n=new fs(e);return this.add(n,t),n};Ks.prototype.remove=function(e,t){t=t??!0;let n=this._layers.indexOf(e);return n!==-1?(this._layers.splice(n,1),this._update(),this.layerRemoved.raiseEvent(e,n),t&&e.destroy(),!0):!1};Ks.prototype.removeAll=function(e){e=e??!0;let t=this._layers;for(let n=0,i=t.length;n<i;n++){let o=t[n];this.layerRemoved.raiseEvent(o,n),e&&o.destroy()}this._layers=[]};Ks.prototype.contains=function(e){return this.indexOf(e)!==-1};Ks.prototype.indexOf=function(e){return this._layers.indexOf(e)};Ks.prototype.get=function(e){return this._layers[e]};function W9(e,t){return e.indexOf(t)}function GAe(e,t,n){let i=e._layers;if(t=L.clamp(t,0,i.length-1),n=L.clamp(n,0,i.length-1),t===n)return;let o=i[t];i[t]=i[n],i[n]=o,e._update(),e.layerMoved.raiseEvent(o,n,t)}Ks.prototype.raise=function(e){let t=W9(this._layers,e);GAe(this,t,t+1)};Ks.prototype.lower=function(e){let t=W9(this._layers,e);GAe(this,t,t-1)};Ks.prototype.raiseToTop=function(e){let t=W9(this._layers,e);t!==this._layers.length-1&&(this._layers.splice(t,1),this._layers.push(e),this._update(),this.layerMoved.raiseEvent(e,this._layers.length-1,t))};Ks.prototype.lowerToBottom=function(e){let t=W9(this._layers,e);t!==0&&(this._layers.splice(t,1),this._layers.splice(0,0,e),this._update(),this.layerMoved.raiseEvent(e,0,t))};var vit=new de;function x8(e,t,n,i){let o=e.globe._surface._tilesToRender,r;for(let a=0;!l(r)&&a<o.length;++a){let c=o[a];de.contains(c.rectangle,t)&&(r=c)}if(!l(r))return;let s=r.data.imagery;for(let a=s.length-1;a>=0;--a){let c=s[a],d=c.readyImagery;if(!l(d)||!d.imageryLayer.ready)continue;let u=d.imageryLayer.imageryProvider;if(n&&!l(u.pickFeatures)||!de.contains(d.rectangle,t))continue;let h=vit,p=1/1024;h.west=L.lerp(r.rectangle.west,r.rectangle.east,c.textureCoordinateRectangle.x-p),h.east=L.lerp(r.rectangle.west,r.rectangle.east,c.textureCoordinateRectangle.z+p),h.south=L.lerp(r.rectangle.south,r.rectangle.north,c.textureCoordinateRectangle.y-p),h.north=L.lerp(r.rectangle.south,r.rectangle.north,c.textureCoordinateRectangle.w+p),de.contains(h,t)&&i(d)}}Ks.pickImageryHelper=x8;Ks.prototype.pickImageryLayers=function(e,t){let n=t.globe.pick(e,t);if(!l(n))return;let i=t.ellipsoid.cartesianToCartographic(n),o=[];if(x8(t,i,!1,function(r){o.push(r.imageryLayer)}),o.length!==0)return o};Ks.prototype.pickImageryLayerFeatures=function(e,t){let n=t.globe.pick(e,t);if(!l(n))return;let i=t.ellipsoid.cartesianToCartographic(n),o=[],r=[];if(x8(t,i,!0,function(s){if(!s.imageryLayer.ready)return;let a=s.imageryLayer.imageryProvider;for(let d=0;d<r.length;d++)if(r[d]===s.imageryLayer)return;let c=a.pickFeatures(s.x,s.y,s.level,i.longitude,i.latitude);l(c)&&(o.push(c),r.push(s.imageryLayer))}),o.length!==0)return Promise.all(o).then(function(s){let a=[];for(let c=0;c<s.length;++c){let d=s[c],u=r[c];if(l(d)&&d.length>0)for(let h=0;h<d.length;++h){let p=d[h];p.imageryLayer=u,l(p.position)||(p.position=i),a.push(p)}}return a})};Ks.prototype.queueReprojectionCommands=function(e){let t=this._layers;for(let n=0,i=t.length;n<i;++n)t[n].queueReprojectionCommands(e)};Ks.prototype.cancelReprojections=function(){let e=this._layers;for(let t=0,n=e.length;t<n;++t)e[t].cancelReprojections()};Ks.prototype.isDestroyed=function(){return!1};Ks.prototype.destroy=function(){return this.removeAll(!0),he(this)};Ks.prototype._update=function(){let e=!0,t=this._layers,n,i,o,r;for(o=0,r=t.length;o<r;++o)i=t[o],i._layerIndex=o,i.show?(i._isBaseLayer=e,e=!1):i._isBaseLayer=!1,i.show!==i._show&&(l(i._show)&&(l(n)||(n=[]),n.push(i)),i._show=i.show);if(l(n))for(o=0,r=n.length;o<r;++o)i=n[o],this.layerShownOrHidden.raiseEvent(i,i._layerIndex,i.show)};var dT=Ks;function ar(e){e=e??Q.EMPTY_OBJECT,this._marsOptions=e.marsOptions??{},this._url=void 0,this._basePath=void 0,this._root=void 0,this._resource=void 0,this._asset=void 0,this._properties=void 0,this._geometricError=void 0,this._scaledGeometricError=void 0,this._extensionsUsed=void 0,this._extensions=void 0,this._modelUpAxis=void 0,this._modelForwardAxis=void 0,this._cache=new $w,this._processingQueue=[],this._selectedTiles=[],this._emptyTiles=[],this._requestedTiles=[],this._selectedTilesToStyle=[],this._loadTimestamp=void 0,this._timeSinceLoad=0,this._updatedVisibilityFrame=0,this._updatedModelMatrixFrame=0,this._modelMatrixChanged=!1,this._previousModelMatrix=void 0,this._extras=void 0,this._credits=void 0,this._showCreditsOnScreen=e.showCreditsOnScreen??!1,this._cullWithChildrenBounds=e.cullWithChildrenBounds??!0,this._allTilesAdditive=!0,this._hasMixedContent=!1,this._stencilClearCommand=void 0,this._backfaceCommands=new Nl,this._maximumScreenSpaceError=e.maximumScreenSpaceError??16,this._memoryAdjustedScreenSpaceError=this._maximumScreenSpaceError,this._cacheBytes=e.cacheBytes??512*1024*1024;let t=e.maximumCacheOverflowBytes??512*1024*1024;this._maximumCacheOverflowBytes=t,this._styleEngine=new nN,this._styleApplied=!1,this._modelMatrix=l(e.modelMatrix)?F.clone(e.modelMatrix):F.clone(F.IDENTITY),this._addHeightCallbacks=[],this._statistics=new lf,this._statisticsLast=new lf,this._statisticsPerPass=new Array(sr.NUMBER_OF_PASSES);for(let o=0;o<sr.NUMBER_OF_PASSES;++o)this._statisticsPerPass[o]=new lf;this._requestedTilesInFlight=[],this._maximumPriority={foveatedFactor:-Number.MAX_VALUE,depth:-Number.MAX_VALUE,distance:-Number.MAX_VALUE,reverseScreenSpaceError:-Number.MAX_VALUE},this._minimumPriority={foveatedFactor:Number.MAX_VALUE,depth:Number.MAX_VALUE,distance:Number.MAX_VALUE,reverseScreenSpaceError:Number.MAX_VALUE},this._heatmap=new eN(e.debugHeatmapTilePropertyName),this.cullRequestsWhileMoving=e.cullRequestsWhileMoving??!0,this._cullRequestsWhileMoving=!1,this.cullRequestsWhileMovingMultiplier=e.cullRequestsWhileMovingMultiplier??60,this.progressiveResolutionHeightFraction=L.clamp(e.progressiveResolutionHeightFraction??.3,0,.5),this.preferLeaves=e.preferLeaves??!1,this._tilesLoaded=!1,this._initialTilesLoaded=!1,this._tileDebugLabels=void 0,this._classificationType=e.classificationType,this._heightReference=e.heightReference,this._scene=e.scene,this._ellipsoid=e.ellipsoid??ie.WGS84,this._initialClippingPlanesOriginMatrix=F.IDENTITY,this._clippingPlanesOriginMatrix=void 0,this._clippingPlanesOriginMatrixDirty=!0,this._vectorClassificationOnly=e.vectorClassificationOnly??!1,this._vectorKeepDecodedPositions=e.vectorKeepDecodedPositions??!1,this._imageryLayers=new dT(this),this._imageryLayersModificationCounter=0,this._imageryLayersListener=()=>{this._imageryLayersModificationCounter++},this.imageryLayers.layerAdded.addEventListener(this._imageryLayersListener),this.imageryLayers.layerRemoved.addEventListener(this._imageryLayersListener),this.imageryLayers.layerMoved.addEventListener(this._imageryLayersListener),this.imageryLayers.layerShownOrHidden.addEventListener(this._imageryLayersListener),this._asynchronouslyLoadImagery=e.asynchronouslyLoadImagery??!1,this.preloadWhenHidden=e.preloadWhenHidden??!1,this.preloadFlightDestinations=e.preloadFlightDestinations??!0,this._pass=void 0,this.dynamicScreenSpaceError=e.dynamicScreenSpaceError??!0,this.foveatedScreenSpaceError=e.foveatedScreenSpaceError??!0,this._foveatedConeSize=e.foveatedConeSize??.1,this._foveatedMinimumScreenSpaceErrorRelaxation=e.foveatedMinimumScreenSpaceErrorRelaxation??0,this.foveatedInterpolationCallback=e.foveatedInterpolationCallback??L.lerp,this.foveatedTimeDelay=e.foveatedTimeDelay??.2,this.dynamicScreenSpaceErrorDensity=e.dynamicScreenSpaceErrorDensity??2e-4,this.dynamicScreenSpaceErrorFactor=e.dynamicScreenSpaceErrorFactor??24,this.dynamicScreenSpaceErrorHeightFalloff=e.dynamicScreenSpaceErrorHeightFalloff??.25,this._dynamicScreenSpaceErrorComputedDensity=0,this.shadows=e.shadows??Vn.ENABLED,this.show=e.show??!0,this.colorBlendMode=yd.HIGHLIGHT,this.colorBlendAmount=.5,this._pointCloudShading=new gp(e.pointCloudShading),this._pointCloudEyeDomeLighting=new cg,this.loadProgress=new xe,this.allTilesLoaded=new xe,this.initialTilesLoaded=new xe,this.tileLoad=new xe,this.tileUnload=new xe,this.tileFailed=new xe,this.tileVisible=new xe,this.skipLevelOfDetail=e.skipLevelOfDetail??!1,this._disableSkipLevelOfDetail=!1,this.baseScreenSpaceError=e.baseScreenSpaceError??1024,this.skipScreenSpaceErrorFactor=e.skipScreenSpaceErrorFactor??16,this.skipLevels=e.skipLevels??1,this.immediatelyLoadDesiredLevelOfDetail=e.immediatelyLoadDesiredLevelOfDetail??!1,this.loadSiblings=e.loadSiblings??!1,this._clippingPlanes=void 0,l(e.clippingPlanes)&&ls.setOwner(e.clippingPlanes,this,"_clippingPlanes"),this._clippingPolygons=void 0,l(e.clippingPolygons)&&Uh.setOwner(e.clippingPolygons,this,"_clippingPolygons"),l(e.imageBasedLighting)?(this._imageBasedLighting=e.imageBasedLighting,this._shouldDestroyImageBasedLighting=!1):(this._imageBasedLighting=new nC,this._shouldDestroyImageBasedLighting=!0),this._environmentMapManager=new rg(e.environmentMapOptions),this.lightColor=e.lightColor,this.backFaceCulling=e.backFaceCulling??!0,this._enableShowOutline=e.enableShowOutline??!0,this.showOutline=e.showOutline??!0,this.outlineColor=e.outlineColor??U.BLACK,this.splitDirection=e.splitDirection??Br.NONE,this.enableCollision=e.enableCollision??!1,this._projectTo2D=e.projectTo2D??!1,this._enablePick=e.enablePick??!1,this.debugFreezeFrame=e.debugFreezeFrame??!1,this.debugColorizeTiles=e.debugColorizeTiles??!1,this._enableDebugWireframe=e.enableDebugWireframe??!1,this.debugWireframe=e.debugWireframe??!1,this.debugWireframe===!0&&this._enableDebugWireframe===!1&&_t("tileset-debug-wireframe-ignored","enableDebugWireframe must be set to true in the Cesium3DTileset constructor, otherwise debugWireframe will be ignored."),this.debugShowBoundingVolume=e.debugShowBoundingVolume??!1,this.debugShowContentBoundingVolume=e.debugShowContentBoundingVolume??!1,this.debugShowViewerRequestVolume=e.debugShowViewerRequestVolume??!1,this._tileDebugLabels=void 0,this.debugPickedTileLabelOnly=!1,this.debugPickedTile=void 0,this.debugPickPosition=void 0,this.debugShowGeometricError=e.debugShowGeometricError??!1,this.debugShowRenderingStatistics=e.debugShowRenderingStatistics??!1,this.debugShowMemoryUsage=e.debugShowMemoryUsage??!1,this.debugShowUrl=e.debugShowUrl??!1,this.examineVectorLinesFunction=void 0,this._metadataExtension=void 0,this._customShader=e.customShader;let n=e.featureIdLabel??"featureId_0";typeof n=="number"&&(n=`featureId_${n}`),this._featureIdLabel=n;let i=e.instanceFeatureIdLabel??"instanceFeatureId_0";typeof i=="number"&&(i=`instanceFeatureId_${i}`),this._instanceFeatureIdLabel=i,this._initForMars3D&&this._initForMars3D(e)}Object.defineProperties(ar.prototype,{isCesium3DTileset:{get:function(){return!0}},asset:{get:function(){return this._asset}},extensions:{get:function(){return this._extensions}},clippingPlanes:{get:function(){return this._clippingPlanes},set:function(e){ls.setOwner(e,this,"_clippingPlanes")}},clippingPolygons:{get:function(){return this._clippingPolygons},set:function(e){Uh.setOwner(e,this,"_clippingPolygons")}},imageryLayers:{get:function(){return this._imageryLayers}},imageryLayersModificationCounter:{get:function(){return this._imageryLayersModificationCounter}},asynchronouslyLoadImagery:{get:function(){return this._asynchronouslyLoadImagery}},properties:{get:function(){return this._properties}},tilesLoaded:{get:function(){return this._tilesLoaded}},resource:{get:function(){return this._resource}},basePath:{get:function(){return Va("Cesium3DTileset.basePath","Cesium3DTileset.basePath has been deprecated. All tiles are relative to the url of the tileset JSON file that contains them. Use the url property instead."),this._basePath}},style:{get:function(){return this._styleEngine.style},set:function(e){this._styleEngine.style=e}},customShader:{get:function(){return this._customShader},set:function(e){this._customShader=e}},hasMixedContent:{get:function(){return this._hasMixedContent},set:function(e){this._hasMixedContent=e}},isSkippingLevelOfDetail:{get:function(){return this.skipLevelOfDetail&&!l(this._classificationType)&&!this._disableSkipLevelOfDetail&&!this._allTilesAdditive}},metadataExtension:{get:function(){return this._metadataExtension}},metadata:{get:function(){if(l(this._metadataExtension))return this._metadataExtension.tileset}},schema:{get:function(){if(l(this._metadataExtension))return this._metadataExtension.schema}},maximumScreenSpaceError:{get:function(){return this._maximumScreenSpaceError},set:function(e){this._maximumScreenSpaceError=e,this._memoryAdjustedScreenSpaceError=e}},cacheBytes:{get:function(){return this._cacheBytes},set:function(e){this._cacheBytes=e}},maximumCacheOverflowBytes:{get:function(){return this._maximumCacheOverflowBytes},set:function(e){this._maximumCacheOverflowBytes=e}},memoryAdjustedScreenSpaceError:{get:function(){return this._memoryAdjustedScreenSpaceError}},pointCloudShading:{get:function(){return this._pointCloudShading},set:function(e){this._pointCloudShading=e}},root:{get:function(){return this._root}},boundingSphere:{get:function(){return this._root.updateTransform(this._modelMatrix),this._root.boundingSphere}},modelMatrix:{get:function(){return this._modelMatrix},set:function(e){this._modelMatrix=F.clone(e,this._modelMatrix)}},timeSinceLoad:{get:function(){return this._timeSinceLoad}},totalMemoryUsageInBytes:{get:function(){let e=this._statistics;return e.texturesByteLength+e.geometryByteLength+e.batchTableByteLength}},clippingPlanesOriginMatrix:{get:function(){return l(this._clippingPlanesOriginMatrix)?(this._clippingPlanesOriginMatrixDirty&&(F.multiply(this.root.computedTransform,this._initialClippingPlanesOriginMatrix,this._clippingPlanesOriginMatrix),this._clippingPlanesOriginMatrixDirty=!1),this._clippingPlanesOriginMatrix):F.IDENTITY}},styleEngine:{get:function(){return this._styleEngine}},statistics:{get:function(){return this._statistics}},classificationType:{get:function(){return this._classificationType}},heightReference:{get:function(){return this._heightReference}},scene:{get:function(){return this._scene}},ellipsoid:{get:function(){return this._ellipsoid}},foveatedConeSize:{get:function(){return this._foveatedConeSize},set:function(e){this._foveatedConeSize=e}},foveatedMinimumScreenSpaceErrorRelaxation:{get:function(){return this._foveatedMinimumScreenSpaceErrorRelaxation},set:function(e){this._foveatedMinimumScreenSpaceErrorRelaxation=e}},extras:{get:function(){return this._extras}},imageBasedLighting:{get:function(){return this._imageBasedLighting},set:function(e){e!==this._imageBasedLighting&&(this._shouldDestroyImageBasedLighting&&!this._imageBasedLighting.isDestroyed()&&this._imageBasedLighting.destroy(),this._imageBasedLighting=e,this._shouldDestroyImageBasedLighting=!1)}},environmentMapManager:{get:function(){return this._environmentMapManager}},vectorClassificationOnly:{get:function(){return this._vectorClassificationOnly}},vectorKeepDecodedPositions:{get:function(){return this._vectorKeepDecodedPositions}},showCreditsOnScreen:{get:function(){return this._showCreditsOnScreen},set:function(e){this._showCreditsOnScreen=e,XAe(this)}},featureIdLabel:{get:function(){return this._featureIdLabel},set:function(e){typeof e=="number"&&(e=`featureId_${e}`),this._featureIdLabel=e}},instanceFeatureIdLabel:{get:function(){return this._instanceFeatureIdLabel},set:function(e){typeof e=="number"&&(e=`instanceFeatureId_${e}`),this._instanceFeatureIdLabel=e}}});ar.fromIonAssetId=async function(e,t){let n=await cs.fromAssetId(e);return ar.fromUrl(n,t)};ar.fromUrl=async function(e,t){t=t??Q.EMPTY_OBJECT;let n=Le.createIfNeeded(e),i;n.extension==="json"?i=n.getBaseUri(!0):n.isDataUri&&(i="");let o=await ar.loadJson(n),r=await Uit(n,o),s=new ar(t);s._resource=n,s._url=n.url,s._basePath=i,s._metadataExtension=r,s._geometricError=o.geometricError,s._scaledGeometricError=o.geometricError;let a=o.asset;s._asset=a,s._extras=o.extras,XAe(s);let c=l(o.asset.gltfUpAxis)?ro.fromName(o.asset.gltfUpAxis):ro.Y,d=t.modelUpAxis??c,u=t.modelForwardAxis??ro.X;s._properties=o.properties,s._extensionsUsed=o.extensionsUsed,s._extensions=o.extensions,s._modelUpAxis=d,s._modelForwardAxis=u,s._root=s.loadTileset(n,o);let p=s._root.createBoundingVolume(o.root.boundingVolume,F.IDENTITY).boundingSphere.center,A=s._ellipsoid.cartesianToCartographic(p);return l(A)&&A.height>Gi._defaultMinTerrainHeight&&(s._initialClippingPlanesOriginMatrix=bt.eastNorthUpToFixedFrame(p)),s._clippingPlanesOriginMatrix=F.clone(s._initialClippingPlanesOriginMatrix),s};ar.loadJson=function(e){return Le.createIfNeeded(e).fetchJson()};ar.prototype.makeStyleDirty=function(){this._styleEngine.makeDirty()};ar.prototype.loadTileset=function(e,t,n){let i=t.asset;if(!l(i))throw new me("Tileset must have an asset property.");if(i.version!=="0.0"&&i.version!=="1.0"&&i.version!=="1.1")throw new me("The tileset must be 3D Tiles version 0.0, 1.0, or 1.1");l(t.extensionsRequired)&&ar.checkSupportedExtensions(t.extensionsRequired);let o=this._statistics,r=i.tilesetVersion;l(r)&&(this._basePath+=`?v=${r}`,e=e.clone(),e.setQueryParameters({v:r}));let s=LAe(this,e,t.root,n);l(n)&&(n.children.push(s),s._depth=n._depth+1);let a=[];for(a.push(s);a.length>0;){let c=a.pop();++o.numberOfTilesTotal,this._allTilesAdditive=this._allTilesAdditive&&c.refine===mr.ADD;let d=c._header.children;if(l(d))for(let u=0;u<d.length;++u){let h=d[u],p=LAe(this,e,h,c);c.children.push(p),p._depth=c._depth+1,a.push(p)}this._cullWithChildrenBounds&&Kw.checkChildrenWithinParent(c)}return s};function LAe(e,t,n,i){if(!(l(n.implicitTiling)||_i(n,"3DTILES_implicit_tiling")))return new vm(e,t,n,i);let r=e.schema,s=new Rp(t,n,r),a=new Vp({subdivisionScheme:s.subdivisionScheme,subtreeLevels:s.subtreeLevels,level:0,x:0,y:0,z:0}),c=s.subtreeUriTemplate.getDerivedResource({templateValues:a.getTemplateValues()}).url,u=He(n,!0);u.contents=[{uri:c}],delete u.content,delete u.extensions;let h=new vm(e,t,u,i);return h.implicitTileset=s,h.implicitCoordinates=a,h}async function Uit(e,t){let n=_i(t,"3DTILES_metadata")?t.extensions["3DTILES_metadata"]:t,i;if(l(n.schemaUri))e=e.getDerivedResource({url:n.schemaUri}),i=Fi.getSchemaLoader({resource:e});else if(l(n.schema))i=Fi.getSchemaLoader({schema:n.schema});else return;await i.load();let o=new cT({schema:i.schema,metadataJson:n});return Fi.unload(i),o}var WAe=new m,Dit=new Ae,kit=new F,Qit=new m,Oit=new m,zit=new m,Hit=new m;function Jit(e,t){let n,i,o,r,s,a=t.camera,c=e._root,d=c.contentBoundingVolume;if(d instanceof Tu)n=m.normalize(a.positionWC,WAe),i=a.directionWC,o=a.positionCartographic.height,r=d.minimumHeight,s=d.maximumHeight;else{let b=F.inverseTransformation(c.computedTransform,kit),C=t.mapProjection.ellipsoid,T=d.boundingVolume,E=F.multiplyByPoint(b,T.center,Qit);if(m.magnitude(E)>C.minimumRadius){let S=Ae.fromCartesian(E,C,Dit);n=m.normalize(a.positionWC,WAe),i=a.directionWC,o=a.positionCartographic.height,r=0,s=S.height*2}else{let S=F.multiplyByPoint(b,a.positionWC,Oit);if(n=m.UNIT_Z,i=F.multiplyByPointAsVector(b,a.directionWC,zit),i=m.normalize(i,i),o=S.z,d instanceof Gd){let I=$.getColumn(T.halfAxes,2,Hit),R=m.magnitude(I);r=E.z-R,s=E.z+R}else if(d instanceof Mg){let I=T.radius;r=E.z-I,s=E.z+I}}}let u=e.dynamicScreenSpaceErrorHeightFalloff,h=r+(s-r)*u,p=s,A=L.clamp((o-h)/(p-h),0,1),f=1-Math.abs(m.dot(i,n));f=f*(1-A),e._dynamicScreenSpaceErrorComputedDensity=e.dynamicScreenSpaceErrorDensity*f}function Kit(e,t){if(t.hasEmptyContent)return;let{statistics:n}=e,i=t.contentExpired,o=t.requestContent();l(o)&&(o.then(r=>{!l(r)||t.isDestroyed()||e.isDestroyed()||(e._processingQueue.push(t),++n.numberOfTilesProcessing)}).catch(r=>{wAe(r,e,t)}),i&&(t.hasTilesetContent||t.hasImplicitContent?dot(e,t):(n.decrementLoadCounts(t.content),--n.numberOfTilesWithContentReady)),e._requestedTilesInFlight.push(t))}function BAe(e,t){return e._priority-t._priority}ar.prototype.postPassesUpdate=function(e){l(this._root)&&(jit(this,e),mot(this,e),this._cache.unloadTiles(this,PAe),this._styleApplied&&this._styleEngine.resetDirty(),this._styleApplied=!1)};ar.prototype.prePassesUpdate=function(e){if(!l(this._root))return;oot(this,e);let t=this._clippingPlanes;this._clippingPlanesOriginMatrixDirty=!0,l(t)&&t.enabled&&t.update(e);let n=this._clippingPolygons;l(n)&&n.enabled&&n.update(e),l(this._loadTimestamp)||(this._loadTimestamp=q.clone(e.time)),this._timeSinceLoad=Math.max(q.secondsDifference(e.time,this._loadTimestamp)*1e3,0),this.dynamicScreenSpaceError&&Jit(this,e),e.newFrame&&this._cache.reset()};function jit(e,t){let n=e._requestedTilesInFlight,i=0;for(let o=0;o<n.length;++o){let r=n[o],s=t.frameNumber-r._touchedFrame>=1;if(r._contentState!==Ar.LOADING){++i;continue}else if(s){r.cancelRequests(),++i;continue}i>0&&(n[o-i]=r)}n.length-=i}function qit(e){let t=e._requestedTiles;t.sort(BAe);for(let n=0;n<t.length;++n)Kit(e,t[n])}function wAe(e,t,n){if(t.isDestroyed())return;let i;n.isDestroyed()||(i=n._contentResource.url);let o=l(e.message)?e.message:e.toString();t.tileFailed.numberOfListeners>0?t.tileFailed.raiseEvent({url:i,message:o}):(console.log(`A 3D tile failed to load: ${i}`),console.log(`Error: ${o}`),console.log(e.stack))}function $it(e){let t=e._processingQueue,n=0;for(let i=0;i<t.length;++i){let o=t[i];if(o.isDestroyed()||o._contentState!==Ar.PROCESSING){++n;continue}n>0&&(t[i-n]=o)}t.length-=n}var eot=new Ae,tot=new Ae,not=new m;function iot(e,t,n){if(!e.enableCollision||!e.show)return;let i=e._addHeightCallbacks,o=t.boundingSphere;for(let r of i){if(r.invoked||t._wasSelectedLastFrame)continue;let s=r.ellipsoid,a=Ae.clone(r.positionCartographic,eot),c=Ae.fromCartesian(o.center,s,tot);l(c)&&(a.height=c.height);let d=Ae.toCartesian(a,s,not);m.distance(d,o.center)<=o.radius&&(r.invoked=!0,n.afterRender.push(()=>{l(r.callback)&&r.callback(),r.invoked=!1}))}}function oot(e,t){$it(e);let n=e._processingQueue,{cacheBytes:i,maximumCacheOverflowBytes:o,statistics:r}=e,s=i+o,a=!1;for(let c=0;c<n.length;++c){if(e.totalMemoryUsageInBytes>s){a=!0;break}let d=n[c];try{d.process(e,t),d.contentReady&&(--r.numberOfTilesProcessing,e.tileLoad.raiseEvent(d))}catch(u){--r.numberOfTilesProcessing,wAe(u,e,d)}}e.totalMemoryUsageInBytes<i?sot(e):a&&n.length>0&&rot(e)}function rot(e){e._memoryAdjustedScreenSpaceError*=1.02;let t=e._processingQueue;for(let n=0;n<t.length;++n)t[n].updatePriority();t.sort(BAe)}function sot(e){e._memoryAdjustedScreenSpaceError=Math.max(e.memoryAdjustedScreenSpaceError/1.02,e.maximumScreenSpaceError)}var F9=new m,aot={maximumFractionDigits:3};function FAe(e){let t=e/1048576;return t<1?t.toLocaleString(void 0,aot):Math.round(t).toLocaleString()}function C8(e){let{halfAxes:t,radius:n,center:i}=e.boundingVolume.boundingVolume,o=m.clone(i,F9);if(l(t))o.x+=.75*(t[0]+t[3]+t[6]),o.y+=.75*(t[1]+t[4]+t[7]),o.z+=.75*(t[2]+t[5]+t[8]);else if(l(n)){let r=m.normalize(i,F9);r=m.multiplyByScalar(r,.75*n,F9),o=m.add(r,i,F9)}return o}function T8(e,t,n){let i="",o=0;if(t.debugShowGeometricError&&(i+=`
Geometric error: ${e.geometricError}`,o++),t.debugShowRenderingStatistics&&(i+=`
Commands: ${e.commandsLength}`,o++,e.content.pointsLength>0&&(i+=`
Points: ${e.content.pointsLength}`,o++),e.content.trianglesLength>0&&(i+=`
Triangles: ${e.content.trianglesLength}`,o++),i+=`
Features: ${e.content.featuresLength}`,o++),t.debugShowMemoryUsage&&(i+=`
Texture Memory: ${FAe(e.content.texturesByteLength)}`,i+=`
Geometry Memory: ${FAe(e.content.geometryByteLength)}`,o+=2),t.debugShowUrl)if(e.hasMultipleContents){i+=`
Urls:`;let s=e.content.innerContentUrls;for(let a=0;a<s.length;a++)i+=`
- ${s[a]}`;o+=s.length}else i+=`
Url: ${e._contentHeader.uri}`,o++;let r={text:i.substring(1),position:n,font:`${19-o}px sans-serif`,showBackground:!0,disableDepthTestDistance:Number.POSITIVE_INFINITY};return t._tileDebugLabels.add(r)}function cot(e,t){let n=e._selectedTiles,i=n.length,o=e._emptyTiles,r=o.length;if(e._tileDebugLabels.removeAll(),e.debugPickedTileLabelOnly){if(l(e.debugPickedTile)){let s=l(e.debugPickPosition)?e.debugPickPosition:C8(e.debugPickedTile),a=T8(e.debugPickedTile,e,s);a.pixelOffset=new M(15,-15)}}else{for(let s=0;s<i;++s){let a=n[s];T8(a,e,C8(a))}for(let s=0;s<r;++s){let a=o[s];(a.hasTilesetContent||a.hasImplicitContent)&&T8(a,e,C8(a))}}e._tileDebugLabels.update(t)}function lot(e,t,n){e._styleEngine.applyStyle(e),e._styleApplied=!0;let{commandList:i,context:o}=t,r=i.length,s=e._selectedTiles,a=e.isSkippingLevelOfDetail&&e._hasMixedContent&&o.stencilBuffer&&s.length>0;e._backfaceCommands.length=0,a&&(l(e._stencilClearCommand)||(e._stencilClearCommand=new mi({stencil:0,pass:Ge.CESIUM_3D_TILE,renderState:Qe.fromCache({stencilMask:Jt.SKIP_LOD_MASK})})),i.push(e._stencilClearCommand));let{statistics:c,tileVisible:d}=e,u=n.isRender,h=i.length;for(let f=0;f<s.length;++f){let b=s[f];u&&d.raiseEvent(b),iot(e,b,t),b.update(e,t,n),c.incrementSelectionCounts(b.content),++c.selected}let p=e._emptyTiles;for(let f=0;f<p.length;++f)p[f].update(e,t,n);let A=i.length-h;if(e._backfaceCommands.trim(),a){let f=e._backfaceCommands.values,b=f.length;i.length+=b;for(let C=A-1;C>=0;--C)i[h+b+C]=i[h+C];for(let C=0;C<b;++C)i[h+C]=f[C]}A=i.length-r,c.numberOfCommands=A,u&&(e.pointCloudShading.attenuation&&e.pointCloudShading.eyeDomeLighting&&A>0&&e._pointCloudEyeDomeLighting.update(t,r,e.pointCloudShading,e.boundingSphere),e.debugShowGeometricError||e.debugShowRenderingStatistics||e.debugShowMemoryUsage||e.debugShowUrl?(l(e._tileDebugLabels)||(e._tileDebugLabels=new Sp),cot(e,t)):e._tileDebugLabels=e._tileDebugLabels&&e._tileDebugLabels.destroy())}var NAe=[];function dot(e,t){let n=t,i=NAe;for(i.push(t);i.length>0;){t=i.pop();let o=t.children;for(let r=0;r<o.length;++r)i.push(o[r]);t!==n&&(uot(e,t),--e._statistics.numberOfTilesTotal)}n.children=[]}function PAe(e,t){e.tileUnload.raiseEvent(t),e._statistics.decrementLoadCounts(t.content),--e._statistics.numberOfTilesWithContentReady,t.unloadContent()}function uot(e,t){e._cache.unloadTile(e,t,PAe),t.destroy()}ar.prototype.trimLoadedTiles=function(){this._cache.trim()};function mot(e,t){let n=e._statistics,i=e._statisticsLast,o=n.numberOfPendingRequests,r=n.numberOfTilesProcessing,s=i.numberOfPendingRequests,a=i.numberOfTilesProcessing;lf.clone(n,i);let c=o!==s||r!==a;c&&t.afterRender.push(function(){return e.loadProgress.raiseEvent(o,r),!0}),e._tilesLoaded=n.numberOfPendingRequests===0&&n.numberOfTilesProcessing===0&&n.numberOfAttemptedRequests===0,c&&e._tilesLoaded&&(t.afterRender.push(function(){return e.allTilesLoaded.raiseEvent(),!0}),e._initialTilesLoaded||(e._initialTilesLoaded=!0,t.afterRender.push(function(){return e.initialTilesLoaded.raiseEvent(),!0})))}function hot(e){e._heatmap.resetMinimumMaximum(),e._minimumPriority.depth=Number.MAX_VALUE,e._maximumPriority.depth=-Number.MAX_VALUE,e._minimumPriority.foveatedFactor=Number.MAX_VALUE,e._maximumPriority.foveatedFactor=-Number.MAX_VALUE,e._minimumPriority.distance=Number.MAX_VALUE,e._maximumPriority.distance=-Number.MAX_VALUE,e._minimumPriority.reverseScreenSpaceError=Number.MAX_VALUE,e._maximumPriority.reverseScreenSpaceError=-Number.MAX_VALUE}function fot(e,t){t.frameNumber===e._updatedModelMatrixFrame&&l(e._previousModelMatrix)||(e._updatedModelMatrixFrame=t.frameNumber,e._modelMatrixChanged=!F.equals(e.modelMatrix,e._previousModelMatrix),e._modelMatrixChanged&&(e._previousModelMatrix=F.clone(e.modelMatrix,e._previousModelMatrix)))}function pot(e,t,n,i){if(t.mode===se.MORPHING||!l(e._root))return!1;let o=e._statistics;o.clear(),++e._updatedVisibilityFrame,hot(e),fot(e,t),e._cullRequestsWhileMoving=e.cullRequestsWhileMoving&&!e._modelMatrixChanged;let r=e.getTraversal(i).selectTiles(e,t);if(i.requestTiles&&qit(e),lot(e,t,i),lf.clone(o,n),i.isRender){let s=e._credits;if(l(s)&&o.selected!==0)for(let a=0;a<s.length;++a){let c=s[a];t.creditDisplay.addCreditToNextFrame(c)}}return r}function XAe(e){let t=e._credits;l(t)||(t=[]),t.length=0,l(e.resource.credits)&&e.resource.credits.forEach(i=>{t.push(Et.clone(i))});let n=e.asset.extras;if(l(n)&&l(n.cesium)&&l(n.cesium.credits)){let i=n.cesium.credits;for(let o=0;o<i.length;++o){let r=i[o];t.push(new Et(r.html))}}t.forEach(i=>i.showOnScreen=i.showOnScreen||e._showCreditsOnScreen),e._credits=t}ar.prototype.getTraversal=function(e){let{pass:t}=e;return t===sr.MOST_DETAILED_PRELOAD||t===sr.MOST_DETAILED_PICK?rN:this.isSkippingLevelOfDetail?uN:cN};ar.prototype.update=function(e){this.updateForPass(e,e.tilesetPassState)};ar.prototype.updateForPass=function(e,t){this.imageryLayers._update();let n=t.pass;if(n===sr.PRELOAD&&(!this.preloadWhenHidden||this.show)||n===sr.PRELOAD_FLIGHT&&(!this.preloadFlightDestinations||!this.show&&!this.preloadWhenHidden)||n===sr.REQUEST_RENDER_MODE_DEFER_CHECK&&(!this._cullRequestsWhileMoving&&this.foveatedTimeDelay<=0||!this.show))return;let i=e.commandList,o=e.camera,r=e.cullingVolume;t.ready=!1;let s=sr.getPassOptions(n),a=s.ignoreCommands,c=t.commandList??i,d=c.length;if(e.commandList=c,e.camera=t.camera??o,e.cullingVolume=t.cullingVolume??r,s.isRender){let p=this._environmentMapManager;l(this._root)&&(p.position=this.boundingSphere.center),p.update(e)}let u=this._clippingPolygons;l(u)&&u.enabled&&u.queueCommands(e);let h=this._statisticsPerPass[n];(this.show||a)&&(this._pass=n,t.ready=pot(this,e,h,s)),a&&(c.length=d),e.commandList=i,e.camera=o,e.cullingVolume=r};ar.prototype.hasExtension=function(e){return l(this._extensionsUsed)?this._extensionsUsed.indexOf(e)>-1:!1};ar.prototype.isDestroyed=function(){return!1};ar.prototype.destroy=function(){if(this._tileDebugLabels=this._tileDebugLabels&&this._tileDebugLabels.destroy(),this._clippingPlanes=this._clippingPlanes&&this._clippingPlanes.destroy(),this._clippingPolygons=this._clippingPolygons&&this._clippingPolygons.destroy(),l(this._root)){let e=NAe;for(e.push(this._root);e.length>0;){let t=e.pop();t.destroy();let n=t.children;for(let i=0;i<n.length;++i)e.push(n[i])}}return this._root=void 0,this._shouldDestroyImageBasedLighting&&!this._imageBasedLighting.isDestroyed()&&this._imageBasedLighting.destroy(),this._imageBasedLighting=void 0,this._environmentMapManager.isDestroyed()||this._environmentMapManager.destroy(),this._environmentMapManager=void 0,this._imageryLayers.isDestroyed()||(this.imageryLayers.layerAdded.removeEventListener(this._imageryLayersListener),this.imageryLayers.layerRemoved.removeEventListener(this._imageryLayersListener),this.imageryLayers.layerMoved.removeEventListener(this._imageryLayersListener),this.imageryLayers.layerShownOrHidden.removeEventListener(this._imageryLayersListener),this._imageryLayers.destroy()),this._imageryLayers=void 0,he(this)};ar.supportedExtensions={"3DTILES_metadata":!0,"3DTILES_implicit_tiling":!0,"3DTILES_content_gltf":!0,"3DTILES_multiple_contents":!0,"3DTILES_bounding_volume_S2":!0,"3DTILES_batch_table_hierarchy":!0,"3DTILES_draco_point_compression":!0,CESIUM_mesh_vector:!0,MAXAR_content_geojson:!0};ar.checkSupportedExtensions=function(e){for(let t=0;t<e.length;t++)if(!ar.supportedExtensions[e[t]])throw new me(`Unsupported 3D Tiles Extension: ${e[t]}`)};var Aot=new Cn,got=new m,bot=new Ae;ar.prototype.getHeight=function(e,t){let n=t.ellipsoid;l(n)||(n=ie.WGS84);let i=Aot,o=n.cartographicToCartesian(e,i.direction);m.normalize(i.direction,i.direction),i.direction=m.normalize(o,i.direction),i.direction=m.negate(o,i.direction),i.origin=m.multiplyByScalar(i.direction,-2*n.maximumRadius,i.origin);let r=this.pick(i,t.frameState,got);if(l(r))return n.cartesianToCartographic(r,bot)?.height};ar.prototype.updateHeight=function(e,t,n){n=n??ie.WGS84;let i={positionCartographic:e,ellipsoid:n,callback:t,invoked:!1},o=()=>{let r=this._addHeightCallbacks,s=r.length;for(let a=0;a<s;++a)if(r[a]===i){r.splice(a,1);break}i.callback&&(i.callback=void 0)};return this._addHeightCallbacks.push(i),o};var yot=new Qr,xot=new m;ar.prototype.pick=function(e,t,n){if(!t.context.webgl2&&!this._enablePick)return;let i=this._selectedTiles,o=i.length,r=[];for(let c=0;c<o;++c){let d=i[c],u=hi.raySphere(e,d.contentBoundingVolume.boundingSphere,yot);!l(u)||!l(d.content)||r.push(d)}let s=r.length;r.sort((c,d)=>{let u=ue.distanceSquaredTo(c.contentBoundingVolume.boundingSphere,e.origin),h=ue.distanceSquaredTo(d.contentBoundingVolume.boundingSphere,e.origin);return u-h});let a;for(let c=0;c<s;++c){let u=r[c].content.pick(e,t,xot);if(l(u))return a=m.clone(u,n),a}};ar.prototype.isGltfExtensionUsed=function(e){if(this.hasExtension("3DTILES_content_gltf")){if(!l(this.extensions))return!1;let t=this.extensions["3DTILES_content_gltf"]?.extensionsUsed;return l(t)?t.indexOf(e)>-1:!1}return!1};ar.prototype.isGltfExtensionRequired=function(e){if(this.isGltfExtensionUsed(e)){let t=this.extensions["3DTILES_content_gltf"].extensionsRequired;return l(t)?t.indexOf(e)>-1:!1}return!1};var js=ar;var Cot=new F;function ey(e,t){t.collectionChanged.addEventListener(ey.prototype._onCollectionChanged,this),this._scene=e,this._primitives=e.primitives,this._entityCollection=t,this._tilesetHash={},this._entitiesToVisualize=new Xt,this._onCollectionChanged(t,t.values,[],[])}ey.prototype.update=function(e){let t=this._entitiesToVisualize.values,n=this._tilesetHash,i=this._primitives;for(let o=0,r=t.length;o<r;o++){let s=t[o],a=s._tileset,c,d=n[s.id],u=s.isShowing&&s.isAvailable(e)&&K.getValueOrDefault(a._show,e,!0),h;u&&(h=s.computeModelMatrix(e,Cot),c=Le.createIfNeeded(K.getValueOrUndefined(a._uri,e)));let p=l(d)?d.tilesetPrimitive:void 0;if(!u){l(p)&&(p.show=!1);continue}(!l(d)||c.url!==d.url)&&(l(p)&&i.removeAndDestroy(p),delete n[s.id],Tot(c,n,s,i)),l(p)&&(p.show=!0,l(h)&&(p.modelMatrix=h),p.maximumScreenSpaceError=K.getValueOrDefault(a.maximumScreenSpaceError,e,p.maximumScreenSpaceError))}return!0};ey.prototype.isDestroyed=function(){return!1};ey.prototype.destroy=function(){this._entityCollection.collectionChanged.removeEventListener(ey.prototype._onCollectionChanged,this);let e=this._entitiesToVisualize.values,t=this._tilesetHash,n=this._primitives;for(let i=e.length-1;i>-1;i--)E8(this,e[i],t,n);return he(this)};ey.prototype.getBoundingSphere=function(e,t){let n=this._tilesetHash[e.id];if(!l(n)||n.loadFail)return Tt.FAILED;let i=n.tilesetPrimitive;return l(i)?i.show?(ue.clone(i.boundingSphere,t),Tt.DONE):Tt.FAILED:Tt.PENDING};ey.prototype._onCollectionChanged=function(e,t,n,i){let o,r,s=this._entitiesToVisualize,a=this._tilesetHash,c=this._primitives;for(o=t.length-1;o>-1;o--)r=t[o],l(r._tileset)&&s.set(r.id,r);for(o=i.length-1;o>-1;o--)r=i[o],l(r._tileset)?s.set(r.id,r):(E8(this,r,a,c),s.remove(r.id));for(o=n.length-1;o>-1;o--)r=n[o],E8(this,r,a,c),s.remove(r.id)};function E8(e,t,n,i){let o=n[t.id];l(o)&&(l(o.tilesetPrimitive)&&i.removeAndDestroy(o.tilesetPrimitive),delete n[t.id])}async function Tot(e,t,n,i){t[n.id]={url:e.url,loadFail:!1};try{let o=await js.fromUrl(e);if(o.id=n,i.add(o),!l(t[n.id]))return;t[n.id].tilesetPrimitive=o}catch(o){console.error(o),t[n.id].loadFail=!0}}var mN=ey;var dmi=y(x(),1);var Eot=U.WHITE,Sot=U.BLACK,_ot=new M(2,2);function lI(e){e=e??Q.EMPTY_OBJECT,this._definitionChanged=new xe,this._evenColor=void 0,this._evenColorSubscription=void 0,this._oddColor=void 0,this._oddColorSubscription=void 0,this._repeat=void 0,this._repeatSubscription=void 0,this.evenColor=e.evenColor,this.oddColor=e.oddColor,this.repeat=e.repeat}Object.defineProperties(lI.prototype,{isConstant:{get:function(){return K.isConstant(this._evenColor)&&K.isConstant(this._oddColor)&&K.isConstant(this._repeat)}},definitionChanged:{get:function(){return this._definitionChanged}},evenColor:be("evenColor"),oddColor:be("oddColor"),repeat:be("repeat")});lI.prototype.getType=function(e){return"Checkerboard"};var Iot=new q;lI.prototype.getValue=function(e,t){return l(e)||(e=q.now(Iot)),l(t)||(t={}),t.lightColor=K.getValueOrClonedDefault(this._evenColor,e,Eot,t.lightColor),t.darkColor=K.getValueOrClonedDefault(this._oddColor,e,Sot,t.darkColor),t.repeat=K.getValueOrDefault(this._repeat,e,_ot),t};lI.prototype.equals=function(e){return this===e||e instanceof lI&&K.equals(this._evenColor,e._evenColor)&&K.equals(this._oddColor,e._oddColor)&&K.equals(this._repeat,e._repeat)};var dI=lI;var Rmi=y(x(),1);var Cmi=y(x(),1);var YAe={id:void 0};function hN(e){if(e._firing){e._refire=!0;return}if(e._suspendCount===0){let t=e._addedEntities,n=e._removedEntities,i=e._changedEntities;if(i.length!==0||t.length!==0||n.length!==0){e._firing=!0;do{e._refire=!1;let o=t.values.slice(0),r=n.values.slice(0),s=i.values.slice(0);t.removeAll(),n.removeAll(),i.removeAll(),e._collectionChanged.raiseEvent(e,o,r,s)}while(e._refire);e._firing=!1}}}function nl(e){this._owner=e,this._entities=new Xt,this._addedEntities=new Xt,this._removedEntities=new Xt,this._changedEntities=new Xt,this._suspendCount=0,this._collectionChanged=new xe,this._id=qn(),this._show=!0,this._firing=!1,this._refire=!1}nl.prototype.suspendEvents=function(){this._suspendCount++};nl.prototype.resumeEvents=function(){this._suspendCount--,hN(this)};Object.defineProperties(nl.prototype,{collectionChanged:{get:function(){return this._collectionChanged}},id:{get:function(){return this._id}},values:{get:function(){return this._entities.values}},show:{get:function(){return this._show},set:function(e){if(e===this._show)return;this.suspendEvents();let t,n=[],i=this._entities.values,o=i.length;for(t=0;t<o;t++)n.push(i[t].isShowing);for(this._show=e,t=0;t<o;t++){let r=n[t],s=i[t];r!==s.isShowing&&s.definitionChanged.raiseEvent(s,"isShowing",s.isShowing,r)}this.resumeEvents()}},owner:{get:function(){return this._owner}}});nl.prototype.computeAvailability=function(){let e=qe.MAXIMUM_VALUE,t=qe.MINIMUM_VALUE,n=this._entities.values;for(let i=0,o=n.length;i<o;i++){let s=n[i].availability;if(l(s)){let a=s.start,c=s.stop;q.lessThan(a,e)&&!a.equals(qe.MINIMUM_VALUE)&&(e=a),q.greaterThan(c,t)&&!c.equals(qe.MAXIMUM_VALUE)&&(t=c)}}return qe.MAXIMUM_VALUE.equals(e)&&(e=qe.MINIMUM_VALUE),qe.MINIMUM_VALUE.equals(t)&&(t=qe.MAXIMUM_VALUE),new Wn({start:e,stop:t})};nl.prototype.add=function(e){e instanceof jo||(e=new jo(e));let t=e.id,n=this._entities;if(n.contains(t))throw new fe(`An entity with id ${t} already exists in this collection.`);return e.entityCollection=this,n.set(t,e),this._removedEntities.remove(t)||this._addedEntities.set(t,e),e.definitionChanged.addEventListener(nl.prototype._onEntityDefinitionChanged,this),hN(this),e};nl.prototype.remove=function(e){return l(e)?this.removeById(e.id):!1};nl.prototype.contains=function(e){return this._entities.get(e.id)===e};nl.prototype.removeById=function(e){if(!l(e))return!1;let n=this._entities.get(e);return this._entities.remove(e)?(this._addedEntities.remove(e)||(this._removedEntities.set(e,n),this._changedEntities.remove(e)),this._entities.remove(e),n.definitionChanged.removeEventListener(nl.prototype._onEntityDefinitionChanged,this),hN(this),!0):!1};nl.prototype.removeAll=function(){let e=this._entities,t=e.length,n=e.values,i=this._addedEntities,o=this._removedEntities;for(let r=0;r<t;r++){let s=n[r],a=s.id,c=i.get(a);l(c)||(s.definitionChanged.removeEventListener(nl.prototype._onEntityDefinitionChanged,this),o.set(a,s))}e.removeAll(),i.removeAll(),this._changedEntities.removeAll(),hN(this)};nl.prototype.getById=function(e){return this._entities.get(e)};nl.prototype.getOrCreateEntity=function(e){let t=this._entities.get(e);return l(t)||(YAe.id=e,t=new jo(YAe),this.add(t)),t};nl.prototype._onEntityDefinitionChanged=function(e){let t=e.id;this._addedEntities.contains(t)||this._changedEntities.set(t,e),hN(this)};var Ya=nl;var B9={id:void 0},uI=new Array(2);function S8(e){let t=e.propertyNames,n=t.length;for(let i=0;i<n;i++)e[t[i]]=void 0;e._name=void 0,e._availability=void 0}function MAe(e,t,n,i){uI[0]=n,uI[1]=i.id,t[JSON.stringify(uI)]=i.definitionChanged.addEventListener(As.prototype._onDefinitionChanged,e)}function vAe(e,t,n,i){uI[0]=n,uI[1]=i.id;let o=JSON.stringify(uI);t[o](),t[o]=void 0}function ty(e){if(e._shouldRecomposite=!0,e._suspendCount!==0)return;let t=e._collections,n=t.length,i=e._collectionsCopy,o=i.length,r,s,a,c,d,u=e._composite,h=new Ya(e),p=e._eventHash,A;for(r=0;r<o;r++)for(d=i[r],d.collectionChanged.removeEventListener(As.prototype._onCollectionChanged,e),a=d.values,A=d.id,c=a.length-1;c>-1;c--)s=a[c],vAe(e,p,A,s);for(r=n-1;r>=0;r--)for(d=t[r],d.collectionChanged.addEventListener(As.prototype._onCollectionChanged,e),a=d.values,A=d.id,c=a.length-1;c>-1;c--){s=a[c],MAe(e,p,A,s);let b=h.getById(s.id);l(b)||(b=u.getById(s.id),l(b)?S8(b):(B9.id=s.id,b=new jo(B9)),h.add(b)),b.merge(s)}e._collectionsCopy=t.slice(0),u.suspendEvents(),u.removeAll();let f=h.values;for(r=0;r<f.length;r++)u.add(f[r]);u.resumeEvents()}function As(e,t){this._owner=t,this._composite=new Ya(this),this._suspendCount=0,this._collections=l(e)?e.slice():[],this._collectionsCopy=[],this._id=qn(),this._eventHash={},ty(this),this._shouldRecomposite=!1}Object.defineProperties(As.prototype,{collectionChanged:{get:function(){return this._composite._collectionChanged}},id:{get:function(){return this._id}},values:{get:function(){return this._composite.values}},owner:{get:function(){return this._owner}}});As.prototype.addCollection=function(e,t){l(t)?this._collections.splice(t,0,e):(t=this._collections.length,this._collections.push(e)),ty(this)};As.prototype.removeCollection=function(e){let t=this._collections.indexOf(e);return t!==-1?(this._collections.splice(t,1),ty(this),!0):!1};As.prototype.removeAllCollections=function(){this._collections.length=0,ty(this)};As.prototype.containsCollection=function(e){return this._collections.indexOf(e)!==-1};As.prototype.contains=function(e){return this._composite.contains(e)};As.prototype.indexOfCollection=function(e){return this._collections.indexOf(e)};As.prototype.getCollection=function(e){return this._collections[e]};As.prototype.getCollectionsLength=function(){return this._collections.length};function w9(e,t){return e.indexOf(t)}function UAe(e,t,n){let i=e._collections;if(t=L.clamp(t,0,i.length-1),n=L.clamp(n,0,i.length-1),t===n)return;let o=i[t];i[t]=i[n],i[n]=o,ty(e)}As.prototype.raiseCollection=function(e){let t=w9(this._collections,e);UAe(this,t,t+1)};As.prototype.lowerCollection=function(e){let t=w9(this._collections,e);UAe(this,t,t-1)};As.prototype.raiseCollectionToTop=function(e){let t=w9(this._collections,e);t!==this._collections.length-1&&(this._collections.splice(t,1),this._collections.push(e),ty(this))};As.prototype.lowerCollectionToBottom=function(e){let t=w9(this._collections,e);t!==0&&(this._collections.splice(t,1),this._collections.splice(0,0,e),ty(this))};As.prototype.suspendEvents=function(){this._suspendCount++,this._composite.suspendEvents()};As.prototype.resumeEvents=function(){this._suspendCount--,this._shouldRecomposite&&this._suspendCount===0&&(ty(this),this._shouldRecomposite=!1),this._composite.resumeEvents()};As.prototype.computeAvailability=function(){return this._composite.computeAvailability()};As.prototype.getById=function(e){return this._composite.getById(e)};As.prototype._onCollectionChanged=function(e,t,n){let i=this._collectionsCopy,o=i.length,r=this._composite;r.suspendEvents();let s,a,c,d,u=n.length,h=this._eventHash,p=e.id;for(s=0;s<u;s++){let f=n[s];vAe(this,h,p,f);let b=f.id;for(a=o-1;a>=0;a--)c=i[a].getById(b),l(c)&&(l(d)||(d=r.getById(b),S8(d)),d.merge(c));l(d)||r.removeById(b),d=void 0}let A=t.length;for(s=0;s<A;s++){let f=t[s];MAe(this,h,p,f);let b=f.id;for(a=o-1;a>=0;a--)c=i[a].getById(b),l(c)&&(l(d)||(d=r.getById(b),l(d)?S8(d):(B9.id=b,d=new jo(B9),r.add(d))),d.merge(c));d=void 0}r.resumeEvents()};As.prototype._onDefinitionChanged=function(e,t,n,i){let o=this._collections,r=this._composite,s=o.length,a=e.id,c=r.getById(a),d=c[t],u=!l(d),h=!0;for(let p=s-1;p>=0;p--){let A=o[p].getById(e.id);if(l(A)){let f=A[t];if(l(f)){if(h)if(h=!1,l(f.merge)&&l(f.clone))d=f.clone(d);else{d=f;break}d.merge(f)}}}u&&c.propertyNames.indexOf(t)===-1&&c.addProperty(t),c[t]=d};var _8=As;var nhi=y(x(),1);var Jmi=y(x(),1);var Gmi=y(x(),1);function I8(){this._removalFunctions=[]}I8.prototype.add=function(e,t,n){let i=e.addEventListener(t,n);this._removalFunctions.push(i);let o=this;return function(){i();let r=o._removalFunctions;r.splice(r.indexOf(i),1)}};I8.prototype.removeAll=function(){let e=this._removalFunctions;for(let t=0,n=e.length;t<n;++t)e[t]();e.length=0};var Xr=I8;var vmi=y(x(),1);function V8(e,t){return q.compare(e.start,t.start)}function gs(e){if(this._intervals=[],this._changedEvent=new xe,l(e)){let t=e.length;for(let n=0;n<t;n++)this.addInterval(e[n])}}Object.defineProperties(gs.prototype,{changedEvent:{get:function(){return this._changedEvent}},start:{get:function(){let e=this._intervals;return e.length===0?void 0:e[0].start}},isStartIncluded:{get:function(){let e=this._intervals;return e.length===0?!1:e[0].isStartIncluded}},stop:{get:function(){let e=this._intervals,t=e.length;return t===0?void 0:e[t-1].stop}},isStopIncluded:{get:function(){let e=this._intervals,t=e.length;return t===0?!1:e[t-1].isStopIncluded}},length:{get:function(){return this._intervals.length}},isEmpty:{get:function(){return this._intervals.length===0}}});gs.prototype.equals=function(e,t){if(this===e)return!0;if(!(e instanceof gs))return!1;let n=this._intervals,i=e._intervals,o=n.length;if(o!==i.length)return!1;for(let r=0;r<o;r++)if(!Wn.equals(n[r],i[r],t))return!1;return!0};gs.prototype.get=function(e){return this._intervals[e]};gs.prototype.removeAll=function(){this._intervals.length>0&&(this._intervals.length=0,this._changedEvent.raiseEvent(this))};gs.prototype.findIntervalContainingDate=function(e){let t=this.indexOf(e);return t>=0?this._intervals[t]:void 0};gs.prototype.findDataForIntervalContainingDate=function(e){let t=this.indexOf(e);return t>=0?this._intervals[t].data:void 0};gs.prototype.contains=function(e){return this.indexOf(e)>=0};var Z8=new Wn;gs.prototype.indexOf=function(e){let t=this._intervals;Z8.start=e,Z8.stop=e;let n=yo(t,Z8,V8);return n>=0?t[n].isStartIncluded?n:n>0&&t[n-1].stop.equals(e)&&t[n-1].isStopIncluded?n-1:~n:(n=~n,n>0&&n-1<t.length&&Wn.contains(t[n-1],e)?n-1:~n)};gs.prototype.findInterval=function(e){e=e??Q.EMPTY_OBJECT;let t=e.start,n=e.stop,i=e.isStartIncluded,o=e.isStopIncluded,r=this._intervals;for(let s=0,a=r.length;s<a;s++){let c=r[s];if((!l(t)||c.start.equals(t))&&(!l(n)||c.stop.equals(n))&&(!l(i)||c.isStartIncluded===i)&&(!l(o)||c.isStopIncluded===o))return r[s]}};gs.prototype.addInterval=function(e,t){if(e.isEmpty)return;let n=this._intervals;if(n.length===0||q.greaterThan(e.start,n[n.length-1].stop)){n.push(e),this._changedEvent.raiseEvent(this);return}let i=yo(n,e,V8);i<0?i=~i:i>0&&e.isStartIncluded&&n[i-1].isStartIncluded&&n[i-1].start.equals(e.start)?--i:i<n.length&&!e.isStartIncluded&&n[i].isStartIncluded&&n[i].start.equals(e.start)&&++i;let o;for(i>0&&(o=q.compare(n[i-1].stop,e.start),(o>0||o===0&&(n[i-1].isStopIncluded||e.isStartIncluded))&&((l(t)?t(n[i-1].data,e.data):n[i-1].data===e.data)?(q.greaterThan(e.stop,n[i-1].stop)?e=new Wn({start:n[i-1].start,stop:e.stop,isStartIncluded:n[i-1].isStartIncluded,isStopIncluded:e.isStopIncluded,data:e.data}):e=new Wn({start:n[i-1].start,stop:n[i-1].stop,isStartIncluded:n[i-1].isStartIncluded,isStopIncluded:n[i-1].isStopIncluded||e.stop.equals(n[i-1].stop)&&e.isStopIncluded,data:e.data}),n.splice(i-1,1),--i):(o=q.compare(n[i-1].stop,e.stop),(o>0||o===0&&n[i-1].isStopIncluded&&!e.isStopIncluded)&&n.splice(i,0,new Wn({start:e.stop,stop:n[i-1].stop,isStartIncluded:!e.isStopIncluded,isStopIncluded:n[i-1].isStopIncluded,data:n[i-1].data})),n[i-1]=new Wn({start:n[i-1].start,stop:e.start,isStartIncluded:n[i-1].isStartIncluded,isStopIncluded:!e.isStartIncluded,data:n[i-1].data}))));i<n.length&&(o=q.compare(e.stop,n[i].start),o>0||o===0&&(e.isStopIncluded||n[i].isStartIncluded));)if(l(t)?t(n[i].data,e.data):n[i].data===e.data)e=new Wn({start:e.start,stop:q.greaterThan(n[i].stop,e.stop)?n[i].stop:e.stop,isStartIncluded:e.isStartIncluded,isStopIncluded:q.greaterThan(n[i].stop,e.stop)?n[i].isStopIncluded:e.isStopIncluded,data:e.data}),n.splice(i,1);else if(n[i]=new Wn({start:e.stop,stop:n[i].stop,isStartIncluded:!e.isStopIncluded,isStopIncluded:n[i].isStopIncluded,data:n[i].data}),n[i].isEmpty)n.splice(i,1);else break;n.splice(i,0,e),this._changedEvent.raiseEvent(this)};gs.prototype.removeInterval=function(e){if(e.isEmpty)return!1;let t=this._intervals,n=yo(t,e,V8);n<0&&(n=~n);let i=!1;for(n>0&&(q.greaterThan(t[n-1].stop,e.start)||t[n-1].stop.equals(e.start)&&t[n-1].isStopIncluded&&e.isStartIncluded)&&(i=!0,(q.greaterThan(t[n-1].stop,e.stop)||t[n-1].isStopIncluded&&!e.isStopIncluded&&t[n-1].stop.equals(e.stop))&&t.splice(n,0,new Wn({start:e.stop,stop:t[n-1].stop,isStartIncluded:!e.isStopIncluded,isStopIncluded:t[n-1].isStopIncluded,data:t[n-1].data})),t[n-1]=new Wn({start:t[n-1].start,stop:e.start,isStartIncluded:t[n-1].isStartIncluded,isStopIncluded:!e.isStartIncluded,data:t[n-1].data})),n<t.length&&!e.isStartIncluded&&t[n].isStartIncluded&&e.start.equals(t[n].start)&&(i=!0,t.splice(n,0,new Wn({start:t[n].start,stop:t[n].start,isStartIncluded:!0,isStopIncluded:!0,data:t[n].data})),++n);n<t.length&&q.greaterThan(e.stop,t[n].stop);)i=!0,t.splice(n,1);return n<t.length&&e.stop.equals(t[n].stop)&&(i=!0,!e.isStopIncluded&&t[n].isStopIncluded?n+1<t.length&&t[n+1].start.equals(e.stop)&&t[n].data===t[n+1].data?(t.splice(n,1),t[n]=new Wn({start:t[n].start,stop:t[n].stop,isStartIncluded:!0,isStopIncluded:t[n].isStopIncluded,data:t[n].data})):t[n]=new Wn({start:e.stop,stop:e.stop,isStartIncluded:!0,isStopIncluded:!0,data:t[n].data}):t.splice(n,1)),n<t.length&&(q.greaterThan(e.stop,t[n].start)||e.stop.equals(t[n].start)&&e.isStopIncluded&&t[n].isStartIncluded)&&(i=!0,t[n]=new Wn({start:e.stop,stop:t[n].stop,isStartIncluded:!e.isStopIncluded,isStopIncluded:t[n].isStopIncluded,data:t[n].data})),i&&this._changedEvent.raiseEvent(this),i};gs.prototype.intersect=function(e,t,n){let i=new gs,o=0,r=0,s=this._intervals,a=e._intervals;for(;o<s.length&&r<a.length;){let c=s[o],d=a[r];if(q.lessThan(c.stop,d.start))++o;else if(q.lessThan(d.stop,c.start))++r;else{if(l(n)||l(t)&&t(c.data,d.data)||!l(t)&&d.data===c.data){let u=Wn.intersect(c,d,new Wn,n);u.isEmpty||i.addInterval(u,t)}q.lessThan(c.stop,d.stop)||c.stop.equals(d.stop)&&!c.isStopIncluded&&d.isStopIncluded?++o:++r}}return i};gs.fromJulianDateArray=function(e,t){l(t)||(t=new gs);let n=e.julianDates,i=n.length,o=e.dataCallback,r=e.isStartIncluded??!0,s=e.isStopIncluded??!0,a=e.leadingInterval??!1,c=e.trailingInterval??!1,d,u=0;a&&(++u,d=new Wn({start:qe.MINIMUM_VALUE,stop:n[0],isStartIncluded:!0,isStopIncluded:!r}),d.data=l(o)?o(d,t.length):t.length,t.addInterval(d));for(let h=0;h<i-1;++h){let p=n[h],A=n[h+1];d=new Wn({start:p,stop:A,isStartIncluded:t.length===u?r:!0,isStopIncluded:h===i-2?s:!1}),d.data=l(o)?o(d,t.length):t.length,t.addInterval(d),p=A}return c&&(d=new Wn({start:n[i-1],stop:qe.MAXIMUM_VALUE,isStartIncluded:!s,isStopIncluded:!0}),d.data=l(o)?o(d,t.length):t.length,t.addInterval(d)),t};var il=new CA,fN=[0,31,28,31,30,31,30,31,31,30,31,30,31];function R8(e,t,n){l(n)||(n=new q),q.toGregorianDate(e,il);let i=il.millisecond+t.millisecond,o=il.second+t.second,r=il.minute+t.minute,s=il.hour+t.hour,a=il.day+t.day,c=il.month+t.month,d=il.year+t.year;for(i>=1e3&&(o+=Math.floor(i/1e3),i=i%1e3),o>=60&&(r+=Math.floor(o/60),o=o%60),r>=60&&(s+=Math.floor(r/60),r=r%60),s>=24&&(a+=Math.floor(s/24),s=s%24),fN[2]=Ah(d)?29:28;a>fN[c]||c>=13;)a>fN[c]&&(a-=fN[c],++c),c>=13&&(--c,d+=Math.floor(c/12),c=c%12,++c),fN[2]=Ah(d)?29:28;return il.millisecond=i,il.second=o,il.minute=r,il.hour=s,il.day=a,il.month=c,il.year=d,q.fromGregorianDate(il,n)}var Zot=new q,Rot=/P(?:([\d.,]+)Y)?(?:([\d.,]+)M)?(?:([\d.,]+)W)?(?:([\d.,]+)D)?(?:T(?:([\d.,]+)H)?(?:([\d.,]+)M)?(?:([\d.,]+)S)?)?/;function DAe(e,t){if(!l(e)||e.length===0)return!1;if(t.year=0,t.month=0,t.day=0,t.hour=0,t.minute=0,t.second=0,t.millisecond=0,e[0]==="P"){let n=e.match(Rot);if(!l(n))return!1;if(l(n[1])&&(t.year=Number(n[1].replace(",","."))),l(n[2])&&(t.month=Number(n[2].replace(",","."))),l(n[3])&&(t.day=Number(n[3].replace(",","."))*7),l(n[4])&&(t.day+=Number(n[4].replace(",","."))),l(n[5])&&(t.hour=Number(n[5].replace(",","."))),l(n[6])&&(t.minute=Number(n[6].replace(",","."))),l(n[7])){let i=Number(n[7].replace(",","."));t.second=Math.floor(i),t.millisecond=i%1*1e3}}else e[e.length-1]!=="Z"&&(e+="Z"),q.toGregorianDate(q.fromIso8601(e,Zot),t);return t.year||t.month||t.day||t.hour||t.minute||t.second||t.millisecond}var pN=new CA;gs.fromIso8601=function(e,t){let n=e.iso8601.split("/"),i=q.fromIso8601(n[0]),o=q.fromIso8601(n[1]),r=[];if(!DAe(n[2],pN))r.push(i,o);else{let s=q.clone(i);for(r.push(s);q.compare(s,o)<0;)s=R8(s,pN),q.compare(o,s)<=0&&q.clone(o,s),r.push(s)}return gs.fromJulianDateArray({julianDates:r,isStartIncluded:e.isStartIncluded,isStopIncluded:e.isStopIncluded,leadingInterval:e.leadingInterval,trailingInterval:e.trailingInterval,dataCallback:e.dataCallback},t)};gs.fromIso8601DateArray=function(e,t){return gs.fromJulianDateArray({julianDates:e.iso8601Dates.map(function(n){return q.fromIso8601(n)}),isStartIncluded:e.isStartIncluded,isStopIncluded:e.isStopIncluded,leadingInterval:e.leadingInterval,trailingInterval:e.trailingInterval,dataCallback:e.dataCallback},t)};gs.fromIso8601DurationArray=function(e,t){let n=e.epoch,i=e.iso8601Durations,o=e.relativeToPrevious??!1,r=[],s,a,c=i.length;for(let d=0;d<c;++d)(DAe(i[d],pN)||d===0)&&(o&&l(a)?s=R8(a,pN):s=R8(n,pN),r.push(s),a=s);return gs.fromJulianDateArray({julianDates:r,isStartIncluded:e.isStartIncluded,isStopIncluded:e.isStopIncluded,leadingInterval:e.leadingInterval,trailingInterval:e.trailingInterval,dataCallback:e.dataCallback},t)};var bs=gs;function Vot(e,t,n,i){function o(){n.raiseEvent(e)}let r=[];t.removeAll();let s=i.length;for(let a=0;a<s;a++){let c=i.get(a);l(c.data)&&r.indexOf(c.data)===-1&&t.add(c.data.definitionChanged,o)}}function uT(){this._eventHelper=new Xr,this._definitionChanged=new xe,this._intervals=new bs,this._intervals.changedEvent.addEventListener(uT.prototype._intervalsChanged,this)}Object.defineProperties(uT.prototype,{isConstant:{get:function(){return this._intervals.isEmpty}},definitionChanged:{get:function(){return this._definitionChanged}},intervals:{get:function(){return this._intervals}}});var Got=new q;uT.prototype.getValue=function(e,t){l(e)||(e=q.now(Got));let n=this._intervals.findDataForIntervalContainingDate(e);if(l(n))return n.getValue(e,t)};uT.prototype.equals=function(e){return this===e||e instanceof uT&&this._intervals.equals(e._intervals,K.equals)};uT.prototype._intervalsChanged=function(){Vot(this,this._eventHelper,this._definitionChanged,this._intervals),this._definitionChanged.raiseEvent(this)};var ol=uT;function ny(){this._definitionChanged=new xe,this._composite=new ol,this._composite.definitionChanged.addEventListener(ny.prototype._raiseDefinitionChanged,this)}Object.defineProperties(ny.prototype,{isConstant:{get:function(){return this._composite.isConstant}},definitionChanged:{get:function(){return this._definitionChanged}},intervals:{get:function(){return this._composite._intervals}}});ny.prototype.getType=function(e){let t=this._composite._intervals.findDataForIntervalContainingDate(e);if(l(t))return t.getType(e)};var Lot=new q;ny.prototype.getValue=function(e,t){l(e)||(e=q.now(Lot));let n=this._composite._intervals.findDataForIntervalContainingDate(e);if(l(n))return n.getValue(e,t)};ny.prototype.equals=function(e){return this===e||e instanceof ny&&this._composite.equals(e._composite,K.equals)};ny.prototype._raiseDefinitionChanged=function(){this._definitionChanged.raiseEvent(this)};var mI=ny;var dhi=y(x(),1);function iy(e){this._referenceFrame=e??Ni.FIXED,this._definitionChanged=new xe,this._composite=new ol,this._composite.definitionChanged.addEventListener(iy.prototype._raiseDefinitionChanged,this)}Object.defineProperties(iy.prototype,{isConstant:{get:function(){return this._composite.isConstant}},definitionChanged:{get:function(){return this._definitionChanged}},intervals:{get:function(){return this._composite.intervals}},referenceFrame:{get:function(){return this._referenceFrame},set:function(e){this._referenceFrame=e}}});var Wot=new q;iy.prototype.getValue=function(e,t){return l(e)||(e=q.now(Wot)),this.getValueInReferenceFrame(e,Ni.FIXED,t)};iy.prototype.getValueInReferenceFrame=function(e,t,n){let i=this._composite._intervals.findDataForIntervalContainingDate(e);if(l(i))return i.getValueInReferenceFrame(e,t,n)};iy.prototype.equals=function(e){return this===e||e instanceof iy&&this._referenceFrame===e._referenceFrame&&this._composite.equals(e._composite,K.equals)};iy.prototype._raiseDefinitionChanged=function(){this._definitionChanged.raiseEvent(this)};var ac=iy;var rpi=y(x(),1);var rfi=y(x(),1);var mhi=y(x(),1),Fot={ROUNDED:0,MITERED:1,BEVELED:2},Ki=Object.freeze(Fot);var Phi=y(x(),1);var Zhi=y(x(),1);var cc=[new m,new m],Bot=new m,wot=new m,Not=new m,Pot=new m,Xot=new m,Yot=new m,Mot=new m,vot=new m,Uot=new m,hI=new m,N9=new m,AN={},G8=new Ae;function Dot(e,t){let n=new Array(e.length);for(let i=0;i<e.length;i++){let o=e[i];G8=t.cartesianToCartographic(o,G8),n[i]=G8.height,e[i]=t.scaleToGeodeticSurface(o,o)}return n}function L8(e,t,n,i){let o=e[0],r=e[1],s=m.angleBetween(o,r),a=Math.ceil(s/i),c=new Array(a),d;if(t===n){for(d=0;d<a;d++)c[d]=t;return c.push(n),c}let h=(n-t)/a;for(d=1;d<a;d++){let p=t+d*h;c[d]=p}return c[0]=t,c.push(n),c}var P9=new m,X9=new m;function kot(e,t,n,i){let o=new Rs(n,i),r=o.projectPointOntoPlane(m.add(n,e,P9),P9),s=o.projectPointOntoPlane(m.add(n,t,X9),X9),a=M.angleBetween(r,s);return s.x*r.y-s.y*r.x>=0?-a:a}var Qot=new m(-1,0,0),mT=new F,Oot=new F,W8=new $,zot=$.IDENTITY.clone(),Hot=new m,Jot=new re,kAe=new m;function Qg(e,t,n,i,o,r,s,a){let c=Hot,d=Jot;mT=bt.eastNorthUpToFixedFrame(e,o,mT),c=F.multiplyByPointAsVector(mT,Qot,c),c=m.normalize(c,c);let u=kot(c,t,e,o);W8=$.fromRotationZ(u,W8),kAe.z=r,mT=F.multiplyTransformation(mT,F.fromRotationTranslation(W8,kAe,Oot),mT);let h=zot;h[0]=s;for(let p=0;p<a;p++)for(let A=0;A<n.length;A+=3)d=m.fromArray(n,A,d),d=$.multiplyByVector(h,d,d),d=F.multiplyByPoint(mT,d,d),i.push(d.x,d.y,d.z);return i}var Kot=new m;function F8(e,t,n,i,o,r,s){for(let a=0;a<e.length;a+=3){let c=m.fromArray(e,a,Kot);i=Qg(c,t,n,i,o,r[a/3],s,1)}return i}function jot(e,t){let n=e.length,i=new Array(n*6),o=0,r=t.x+t.width/2,s=t.y+t.height/2,a=e[0];i[o++]=a.x-r,i[o++]=0,i[o++]=a.y-s;for(let c=1;c<n;c++){a=e[c];let d=a.x-r,u=a.y-s;i[o++]=d,i[o++]=0,i[o++]=u,i[o++]=d,i[o++]=0,i[o++]=u}return a=e[0],i[o++]=a.x-r,i[o++]=0,i[o++]=a.y-s,i}function QAe(e,t){let n=e.length,i=new Array(n*3),o=0,r=t.x+t.width/2,s=t.y+t.height/2;for(let a=0;a<n;a++)i[o++]=e[a].x-r,i[o++]=0,i[o++]=e[a].y-s;return i}var OAe=new Me,zAe=new m,HAe=new $;function JAe(e,t,n,i,o,r,s,a,c,d){let u=m.angleBetween(m.subtract(t,e,hI),m.subtract(n,e,N9)),h=i===Ki.BEVELED?0:Math.ceil(u/L.toRadians(5)),p;o?p=$.fromQuaternion(Me.fromAxisAngle(m.negate(e,hI),u/(h+1),OAe),HAe):p=$.fromQuaternion(Me.fromAxisAngle(e,u/(h+1),OAe),HAe);let A,f;if(t=m.clone(t,zAe),h>0){let b=d?2:1;for(let C=0;C<h;C++)t=$.multiplyByVector(p,t,t),A=m.subtract(t,e,hI),A=m.normalize(A,A),o||(A=m.negate(A,A)),f=r.scaleToGeodeticSurface(t,N9),s=Qg(f,A,a,s,r,c,1,b)}else A=m.subtract(t,e,hI),A=m.normalize(A,A),o||(A=m.negate(A,A)),f=r.scaleToGeodeticSurface(t,N9),s=Qg(f,A,a,s,r,c,1,1),n=m.clone(n,zAe),A=m.subtract(n,e,hI),A=m.normalize(A,A),o||(A=m.negate(A,A)),f=r.scaleToGeodeticSurface(n,N9),s=Qg(f,A,a,s,r,c,1,1);return s}AN.removeDuplicatesFromShape=function(e){let t=e.length,n=[];for(let i=t-1,o=0;o<t;i=o++){let r=e[i],s=e[o];M.equals(r,s)||n.push(s)}return n};AN.angleIsGreaterThanPi=function(e,t,n,i){let o=new Rs(n,i),r=o.projectPointOntoPlane(m.add(n,e,P9),P9),s=o.projectPointOntoPlane(m.add(n,t,X9),X9);return s.x*r.y-s.y*r.x>=0};var qot=new m,$ot=new m;AN.computePositions=function(e,t,n,i,o){let r=i._ellipsoid,s=Dot(e,r),a=i._granularity,c=i._cornerType,d=o?jot(t,n):QAe(t,n),u=o?QAe(t,n):void 0,h=n.height/2,p=n.width/2,A=e.length,f=[],b=o?[]:void 0,C=Bot,T=wot,E=Not,S=Pot,I=Xot,R=Yot,V=Mot,W=vot,B=Uot,N=e[0],P=e[1];S=r.geodeticSurfaceNormal(N,S),C=m.subtract(P,N,C),C=m.normalize(C,C),W=m.cross(S,C,W),W=m.normalize(W,W);let g=s[0],_=s[1];o&&(b=Qg(N,W,u,b,r,g+h,1,1)),B=m.clone(N,B),N=P,T=m.negate(C,T);let Z,G;for(let k=1;k<A-1;k++){let v=o?2:1;if(P=e[k+1],N.equals(P)){_t("Positions are too close and are considered equivalent with rounding error.");continue}C=m.subtract(P,N,C),C=m.normalize(C,C),S=r.geodeticSurfaceNormal(N,S);let D=m.multiplyByScalar(S,m.dot(C,S),qot);m.subtract(C,D,D),m.normalize(D,D);let Y=m.multiplyByScalar(S,m.dot(T,S),$ot);if(m.subtract(T,Y,Y),m.normalize(Y,Y),!L.equalsEpsilon(Math.abs(m.dot(D,Y)),1,L.EPSILON7)){E=m.add(C,T,E),E=m.normalize(E,E),E=m.cross(E,S,E),E=m.cross(S,E,E),E=m.normalize(E,E);let J=1/Math.max(.25,m.magnitude(m.cross(E,T,hI))),te=AN.angleIsGreaterThanPi(C,T,N,r);te?(I=m.add(N,m.multiplyByScalar(E,J*p,E),I),R=m.add(I,m.multiplyByScalar(W,p,R),R),cc[0]=m.clone(B,cc[0]),cc[1]=m.clone(R,cc[1]),Z=L8(cc,g+h,_+h,a),G=Ji.generateArc({positions:cc,granularity:a,ellipsoid:r}),f=F8(G,W,d,f,r,Z,1),W=m.cross(S,C,W),W=m.normalize(W,W),V=m.add(I,m.multiplyByScalar(W,p,V),V),c===Ki.ROUNDED||c===Ki.BEVELED?JAe(I,R,V,c,te,r,f,d,_+h,o):(E=m.negate(E,E),f=Qg(N,E,d,f,r,_+h,J,v)),B=m.clone(V,B)):(I=m.add(N,m.multiplyByScalar(E,J*p,E),I),R=m.add(I,m.multiplyByScalar(W,-p,R),R),cc[0]=m.clone(B,cc[0]),cc[1]=m.clone(R,cc[1]),Z=L8(cc,g+h,_+h,a),G=Ji.generateArc({positions:cc,granularity:a,ellipsoid:r}),f=F8(G,W,d,f,r,Z,1),W=m.cross(S,C,W),W=m.normalize(W,W),V=m.add(I,m.multiplyByScalar(W,-p,V),V),c===Ki.ROUNDED||c===Ki.BEVELED?JAe(I,R,V,c,te,r,f,d,_+h,o):f=Qg(N,E,d,f,r,_+h,J,v),B=m.clone(V,B)),T=m.negate(C,T)}else f=Qg(B,W,d,f,r,g+h,1,1),B=N;g=_,_=s[k+1],N=P}cc[0]=m.clone(B,cc[0]),cc[1]=m.clone(N,cc[1]),Z=L8(cc,g+h,_+h,a),G=Ji.generateArc({positions:cc,granularity:a,ellipsoid:r}),f=F8(G,W,d,f,r,Z,1),o&&(b=Qg(N,W,u,b,r,_+h,1,1)),A=f.length;let w=o?A+b.length:A,X=new Float64Array(w);return X.set(f),o&&X.set(b,A),X};var df=AN;var w8={},fI=new m,ege=new m,ert=new m,KAe=new m,Jl=[new m,new m],tge=new m,nge=new m,ige=new m,trt=new m,nrt=new m,irt=new m,ort=new m,rrt=new m,srt=new m,art=new m,jAe=new Me,qAe=new $;function Y9(e,t,n,i,o){let r=m.angleBetween(m.subtract(t,e,fI),m.subtract(n,e,ege)),s=i===Ki.BEVELED?1:Math.ceil(r/L.toRadians(5))+1,a=s*3,c=new Array(a);c[a-3]=n.x,c[a-2]=n.y,c[a-1]=n.z;let d;o?d=$.fromQuaternion(Me.fromAxisAngle(m.negate(e,fI),r/s,jAe),qAe):d=$.fromQuaternion(Me.fromAxisAngle(e,r/s,jAe),qAe);let u=0;t=m.clone(t,fI);for(let h=0;h<s;h++)t=$.multiplyByVector(d,t,t),c[u++]=t.x,c[u++]=t.y,c[u++]=t.z;return c}function crt(e){let t=tge,n=nge,i=ige,o=e[1];n=m.fromArray(e[1],o.length-3,n),i=m.fromArray(e[0],0,i),t=m.midpoint(n,i,t);let r=Y9(t,n,i,Ki.ROUNDED,!1),s=e.length-1,a=e[s-1];o=e[s],n=m.fromArray(a,a.length-3,n),i=m.fromArray(o,0,i),t=m.midpoint(n,i,t);let c=Y9(t,n,i,Ki.ROUNDED,!1);return[r,c]}function $Ae(e,t,n,i){let o=fI;return i?o=m.add(e,t,o):(t=m.negate(t,t),o=m.add(e,t,o)),[o.x,o.y,o.z,n.x,n.y,n.z]}function B8(e,t,n,i){let o=new Array(e.length),r=new Array(e.length),s=m.multiplyByScalar(t,n,fI),a=m.negate(s,ege),c=0,d=e.length-1;for(let u=0;u<e.length;u+=3){let h=m.fromArray(e,u,ert),p=m.add(h,a,KAe);o[c++]=p.x,o[c++]=p.y,o[c++]=p.z;let A=m.add(h,s,KAe);r[d--]=A.z,r[d--]=A.y,r[d--]=A.x}return i.push(o,r),i}w8.addAttribute=function(e,t,n,i){let o=t.x,r=t.y,s=t.z;l(n)&&(e[n]=o,e[n+1]=r,e[n+2]=s),l(i)&&(e[i]=s,e[i-1]=r,e[i-2]=o)};var lrt=new m,drt=new m;w8.computePositions=function(e){let t=e.granularity,n=e.positions,i=e.ellipsoid,o=e.width/2,r=e.cornerType,s=e.saveAttributes,a=tge,c=nge,d=ige,u=trt,h=nrt,p=irt,A=ort,f=rrt,b=srt,C=art,T=[],E=s?[]:void 0,S=s?[]:void 0,I=n[0],R=n[1];c=m.normalize(m.subtract(R,I,c),c),a=i.geodeticSurfaceNormal(I,a),u=m.normalize(m.cross(a,c,u),u),s&&(E.push(u.x,u.y,u.z),S.push(a.x,a.y,a.z)),A=m.clone(I,A),I=R,d=m.negate(c,d);let V,W=[],B,N=n.length;for(B=1;B<N-1;B++){a=i.geodeticSurfaceNormal(I,a),R=n[B+1],c=m.normalize(m.subtract(R,I,c),c);let g=m.multiplyByScalar(a,m.dot(c,a),lrt);m.subtract(c,g,g),m.normalize(g,g);let _=m.multiplyByScalar(a,m.dot(d,a),drt);if(m.subtract(d,_,_),m.normalize(_,_),!L.equalsEpsilon(Math.abs(m.dot(g,_)),1,L.EPSILON7)){h=m.normalize(m.add(c,d,h),h),h=m.cross(h,a,h),h=m.cross(a,h,h),h=m.normalize(h,h);let G=o/Math.max(.25,m.magnitude(m.cross(h,d,fI))),w=df.angleIsGreaterThanPi(c,d,I,i);h=m.multiplyByScalar(h,G,h),w?(f=m.add(I,h,f),C=m.add(f,m.multiplyByScalar(u,o,C),C),b=m.add(f,m.multiplyByScalar(u,o*2,b),b),Jl[0]=m.clone(A,Jl[0]),Jl[1]=m.clone(C,Jl[1]),V=Ji.generateArc({positions:Jl,granularity:t,ellipsoid:i}),T=B8(V,u,o,T),s&&(E.push(u.x,u.y,u.z),S.push(a.x,a.y,a.z)),p=m.clone(b,p),u=m.normalize(m.cross(a,c,u),u),b=m.add(f,m.multiplyByScalar(u,o*2,b),b),A=m.add(f,m.multiplyByScalar(u,o,A),A),r===Ki.ROUNDED||r===Ki.BEVELED?W.push({leftPositions:Y9(f,p,b,r,w)}):W.push({leftPositions:$Ae(I,m.negate(h,h),b,w)})):(b=m.add(I,h,b),C=m.add(b,m.negate(m.multiplyByScalar(u,o,C),C),C),f=m.add(b,m.negate(m.multiplyByScalar(u,o*2,f),f),f),Jl[0]=m.clone(A,Jl[0]),Jl[1]=m.clone(C,Jl[1]),V=Ji.generateArc({positions:Jl,granularity:t,ellipsoid:i}),T=B8(V,u,o,T),s&&(E.push(u.x,u.y,u.z),S.push(a.x,a.y,a.z)),p=m.clone(f,p),u=m.normalize(m.cross(a,c,u),u),f=m.add(b,m.negate(m.multiplyByScalar(u,o*2,f),f),f),A=m.add(b,m.negate(m.multiplyByScalar(u,o,A),A),A),r===Ki.ROUNDED||r===Ki.BEVELED?W.push({rightPositions:Y9(b,p,f,r,w)}):W.push({rightPositions:$Ae(I,h,f,w)})),d=m.negate(c,d)}I=R}a=i.geodeticSurfaceNormal(I,a),Jl[0]=m.clone(A,Jl[0]),Jl[1]=m.clone(I,Jl[1]),V=Ji.generateArc({positions:Jl,granularity:t,ellipsoid:i}),T=B8(V,u,o,T),s&&(E.push(u.x,u.y,u.z),S.push(a.x,a.y,a.z));let P;return r===Ki.ROUNDED&&(P=crt(T)),{positions:T,corners:W,lefts:E,normals:S,endPositions:P}};var co=w8;var sge=new m,age=new m,M9=new m,v9=new m,urt=new m,cge=new m,oy=new m,pI=new m;function lge(e,t){for(let n=0;n<e.length;n++)e[n]=t.scaleToGeodeticSurface(e[n],e[n]);return e}function uf(e,t,n,i,o,r){let s=e.normals,a=e.tangents,c=e.bitangents,d=m.normalize(m.cross(n,t,oy),oy);r.normal&&co.addAttribute(s,t,i,o),r.tangent&&co.addAttribute(a,d,i,o),r.bitangent&&co.addAttribute(c,n,i,o)}function dge(e,t,n){let i=e.positions,o=e.corners,r=e.endPositions,s=e.lefts,a=e.normals,c=new xn,d,u=0,h=0,p,A=0,f;for(p=0;p<i.length;p+=2)f=i[p].length-3,u+=f,A+=f*2,h+=i[p+1].length-3;for(u+=3,h+=3,p=0;p<o.length;p++){d=o[p];let ee=o[p].leftPositions;l(ee)?(f=ee.length,u+=f,A+=f):(f=o[p].rightPositions.length,h+=f,A+=f)}let b=l(r),C;b&&(C=r[0].length-3,u+=C,h+=C,C/=3,A+=C*6);let T=u+h,E=new Float64Array(T),S=t.normal?new Float32Array(T):void 0,I=t.tangent?new Float32Array(T):void 0,R=t.bitangent?new Float32Array(T):void 0,V={normals:S,tangents:I,bitangents:R},W=0,B=T-1,N,P,g,_,Z=sge,G=age,w,X,k=C/2,v=Ue.createTypedArray(T/3,A),D=0;if(b){X=M9,w=v9;let ee=r[0];for(Z=m.fromArray(a,0,Z),G=m.fromArray(s,0,G),p=0;p<k;p++)X=m.fromArray(ee,(k-1-p)*3,X),w=m.fromArray(ee,(k+p)*3,w),co.addAttribute(E,w,W),co.addAttribute(E,X,void 0,B),uf(V,Z,G,W,B,t),P=W/3,_=P+1,N=(B-2)/3,g=N-1,v[D++]=N,v[D++]=P,v[D++]=g,v[D++]=g,v[D++]=P,v[D++]=_,W+=3,B-=3}let Y=0,O=0,J=i[Y++],te=i[Y++];E.set(J,W),E.set(te,B-te.length+1),G=m.fromArray(s,O,G);let z,j;for(f=te.length-3,p=0;p<f;p+=3)z=n.geodeticSurfaceNormal(m.fromArray(J,p,oy),oy),j=n.geodeticSurfaceNormal(m.fromArray(te,f-p,pI),pI),Z=m.normalize(m.add(z,j,Z),Z),uf(V,Z,G,W,B,t),P=W/3,_=P+1,N=(B-2)/3,g=N-1,v[D++]=N,v[D++]=P,v[D++]=g,v[D++]=g,v[D++]=P,v[D++]=_,W+=3,B-=3;for(z=n.geodeticSurfaceNormal(m.fromArray(J,f,oy),oy),j=n.geodeticSurfaceNormal(m.fromArray(te,f,pI),pI),Z=m.normalize(m.add(z,j,Z),Z),O+=3,p=0;p<o.length;p++){let ee;d=o[p];let ge=d.leftPositions,ye=d.rightPositions,ae,Ce,Te=cge,Fe=M9,Ne=v9;if(Z=m.fromArray(a,O,Z),l(ge)){for(uf(V,Z,G,void 0,B,t),B-=3,ae=_,Ce=g,ee=0;ee<ge.length/3;ee++)Te=m.fromArray(ge,ee*3,Te),v[D++]=ae,v[D++]=Ce-ee-1,v[D++]=Ce-ee,co.addAttribute(E,Te,void 0,B),Fe=m.fromArray(E,(Ce-ee-1)*3,Fe),Ne=m.fromArray(E,ae*3,Ne),G=m.normalize(m.subtract(Fe,Ne,G),G),uf(V,Z,G,void 0,B,t),B-=3;Te=m.fromArray(E,ae*3,Te),Fe=m.subtract(m.fromArray(E,Ce*3,Fe),Te,Fe),Ne=m.subtract(m.fromArray(E,(Ce-ee)*3,Ne),Te,Ne),G=m.normalize(m.add(Fe,Ne,G),G),uf(V,Z,G,W,void 0,t),W+=3}else{for(uf(V,Z,G,W,void 0,t),W+=3,ae=g,Ce=_,ee=0;ee<ye.length/3;ee++)Te=m.fromArray(ye,ee*3,Te),v[D++]=ae,v[D++]=Ce+ee,v[D++]=Ce+ee+1,co.addAttribute(E,Te,W),Fe=m.fromArray(E,ae*3,Fe),Ne=m.fromArray(E,(Ce+ee)*3,Ne),G=m.normalize(m.subtract(Fe,Ne,G),G),uf(V,Z,G,W,void 0,t),W+=3;Te=m.fromArray(E,ae*3,Te),Fe=m.subtract(m.fromArray(E,(Ce+ee)*3,Fe),Te,Fe),Ne=m.subtract(m.fromArray(E,Ce*3,Ne),Te,Ne),G=m.normalize(m.negate(m.add(Ne,Fe,G),G),G),uf(V,Z,G,void 0,B,t),B-=3}for(J=i[Y++],te=i[Y++],J.splice(0,3),te.splice(te.length-3,3),E.set(J,W),E.set(te,B-te.length+1),f=te.length-3,O+=3,G=m.fromArray(s,O,G),ee=0;ee<te.length;ee+=3)z=n.geodeticSurfaceNormal(m.fromArray(J,ee,oy),oy),j=n.geodeticSurfaceNormal(m.fromArray(te,f-ee,pI),pI),Z=m.normalize(m.add(z,j,Z),Z),uf(V,Z,G,W,B,t),_=W/3,P=_-1,g=(B-2)/3,N=g+1,v[D++]=N,v[D++]=P,v[D++]=g,v[D++]=g,v[D++]=P,v[D++]=_,W+=3,B-=3;W-=3,B+=3}if(Z=m.fromArray(a,a.length-3,Z),uf(V,Z,G,W,B,t),b){W+=3,B-=3,X=M9,w=v9;let ee=r[1];for(p=0;p<k;p++)X=m.fromArray(ee,(C-p-1)*3,X),w=m.fromArray(ee,p*3,w),co.addAttribute(E,X,void 0,B),co.addAttribute(E,w,W),uf(V,Z,G,W,B,t),_=W/3,P=_-1,g=(B-2)/3,N=g+1,v[D++]=N,v[D++]=P,v[D++]=g,v[D++]=g,v[D++]=P,v[D++]=_,W+=3,B-=3}if(c.position=new we({componentDatatype:H.DOUBLE,componentsPerAttribute:3,values:E}),t.st){let ee=new Float32Array(T/3*2),ge,ye,ae=0;if(b){u/=3,h/=3;let Ce=Math.PI/(C+1);ye=1/(u-C+1),ge=1/(h-C+1);let Te,Fe=C/2;for(p=Fe+1;p<C+1;p++)Te=L.PI_OVER_TWO+Ce*p,ee[ae++]=ge*(1+Math.cos(Te)),ee[ae++]=.5*(1+Math.sin(Te));for(p=1;p<h-C+1;p++)ee[ae++]=p*ge,ee[ae++]=0;for(p=C;p>Fe;p--)Te=L.PI_OVER_TWO-p*Ce,ee[ae++]=1-ge*(1+Math.cos(Te)),ee[ae++]=.5*(1+Math.sin(Te));for(p=Fe;p>0;p--)Te=L.PI_OVER_TWO-Ce*p,ee[ae++]=1-ye*(1+Math.cos(Te)),ee[ae++]=.5*(1+Math.sin(Te));for(p=u-C;p>0;p--)ee[ae++]=p*ye,ee[ae++]=1;for(p=1;p<Fe+1;p++)Te=L.PI_OVER_TWO+Ce*p,ee[ae++]=ye*(1+Math.cos(Te)),ee[ae++]=.5*(1+Math.sin(Te))}else{for(u/=3,h/=3,ye=1/(u-1),ge=1/(h-1),p=0;p<h;p++)ee[ae++]=p*ge,ee[ae++]=0;for(p=u;p>0;p--)ee[ae++]=(p-1)*ye,ee[ae++]=1}c.st=new we({componentDatatype:H.FLOAT,componentsPerAttribute:2,values:ee})}return t.normal&&(c.normal=new we({componentDatatype:H.FLOAT,componentsPerAttribute:3,values:V.normals})),t.tangent&&(c.tangent=new we({componentDatatype:H.FLOAT,componentsPerAttribute:3,values:V.tangents})),t.bitangent&&(c.bitangent=new we({componentDatatype:H.FLOAT,componentsPerAttribute:3,values:V.bitangents})),{attributes:c,indices:v}}function mrt(e,t){if(!t.normal&&!t.tangent&&!t.bitangent&&!t.st)return e;let n=e.position.values,i,o;(t.normal||t.bitangent)&&(i=e.normal.values,o=e.bitangent.values);let r=e.position.values.length/18,s=r*3,a=r*2,c=s*2,d;if(t.normal||t.bitangent||t.tangent){let u=t.normal?new Float32Array(s*6):void 0,h=t.tangent?new Float32Array(s*6):void 0,p=t.bitangent?new Float32Array(s*6):void 0,A=sge,f=age,b=M9,C=v9,T=urt,E=cge,S=c;for(d=0;d<s;d+=3){let I=S+c;A=m.fromArray(n,d,A),f=m.fromArray(n,d+s,f),b=m.fromArray(n,(d+3)%s,b),f=m.subtract(f,A,f),b=m.subtract(b,A,b),C=m.normalize(m.cross(f,b,C),C),t.normal&&(co.addAttribute(u,C,I),co.addAttribute(u,C,I+3),co.addAttribute(u,C,S),co.addAttribute(u,C,S+3)),(t.tangent||t.bitangent)&&(E=m.fromArray(i,d,E),t.bitangent&&(co.addAttribute(p,E,I),co.addAttribute(p,E,I+3),co.addAttribute(p,E,S),co.addAttribute(p,E,S+3)),t.tangent&&(T=m.normalize(m.cross(E,C,T),T),co.addAttribute(h,T,I),co.addAttribute(h,T,I+3),co.addAttribute(h,T,S),co.addAttribute(h,T,S+3))),S+=6}if(t.normal){for(u.set(i),d=0;d<s;d+=3)u[d+s]=-i[d],u[d+s+1]=-i[d+1],u[d+s+2]=-i[d+2];e.normal.values=u}else e.normal=void 0;if(t.bitangent?(p.set(o),p.set(o,s),e.bitangent.values=p):e.bitangent=void 0,t.tangent){let I=e.tangent.values;h.set(I),h.set(I,s),e.tangent.values=h}}if(t.st){let u=e.st.values,h=new Float32Array(a*6);h.set(u),h.set(u,a);let p=a*2;for(let A=0;A<2;A++){for(h[p++]=u[0],h[p++]=u[1],d=2;d<a;d+=2){let f=u[d],b=u[d+1];h[p++]=f,h[p++]=b,h[p++]=f,h[p++]=b}h[p++]=u[0],h[p++]=u[1]}e.st.values=h}return e}function N8(e,t,n){n[t++]=e[0],n[t++]=e[1],n[t++]=e[2];for(let i=3;i<e.length;i+=3){let o=e[i],r=e[i+1],s=e[i+2];n[t++]=o,n[t++]=r,n[t++]=s,n[t++]=o,n[t++]=r,n[t++]=s}return n[t++]=e[0],n[t++]=e[1],n[t++]=e[2],n}function hrt(e,t){let n=new ve({position:t.position,normal:t.normal||t.bitangent||e.shadowVolume,tangent:t.tangent,bitangent:t.normal||t.bitangent,st:t.st}),i=e.ellipsoid,o=co.computePositions(e),r=dge(o,n,i),s=e.height,a=e.extrudedHeight,c=r.attributes,d=r.indices,u=c.position.values,h=u.length,p=new Float64Array(h*6),A=new Float64Array(h);A.set(u);let f=new Float64Array(h*4);u=Ii.scaleToGeodeticHeight(u,s,i),f=N8(u,0,f),A=Ii.scaleToGeodeticHeight(A,a,i),f=N8(A,h*2,f),p.set(u),p.set(A,h),p.set(f,h*2),c.position.values=p,c=mrt(c,t);let b,C=h/3;if(e.shadowVolume){let N=c.normal.values;h=N.length;let P=new Float32Array(h*6);for(b=0;b<h;b++)N[b]=-N[b];P.set(N,h),P=N8(N,h*4,P),c.extrudeDirection=new we({componentDatatype:H.FLOAT,componentsPerAttribute:3,values:P}),t.normal||(c.normal=void 0)}if(l(e.offsetAttribute)){let N=new Uint8Array(C*6);if(e.offsetAttribute===An.TOP)N=N.fill(1,0,C).fill(1,C*2,C*4);else{let P=e.offsetAttribute===An.NONE?0:1;N=N.fill(P)}c.applyOffset=new we({componentDatatype:H.UNSIGNED_BYTE,componentsPerAttribute:1,values:N})}let T=d.length,E=C+C,S=Ue.createTypedArray(p.length/3,T*2+E*3);S.set(d);let I=T;for(b=0;b<T;b+=3){let N=d[b],P=d[b+1],g=d[b+2];S[I++]=g+C,S[I++]=P+C,S[I++]=N+C}let R,V,W,B;for(b=0;b<E;b+=2)R=b+E,V=R+E,W=R+1,B=V+1,S[I++]=R,S[I++]=V,S[I++]=W,S[I++]=W,S[I++]=V,S[I++]=B;return{attributes:c,indices:S}}var oge=new m,gN=new m,Dm=new Ae;function rge(e,t,n,i,o,r){let s=m.subtract(t,e,oge);m.normalize(s,s);let a=n.geodeticSurfaceNormal(e,gN),c=m.cross(s,a,oge);m.multiplyByScalar(c,i,c);let d=o.latitude,u=o.longitude,h=r.latitude,p=r.longitude;m.add(e,c,gN),n.cartesianToCartographic(gN,Dm);let A=Dm.latitude,f=Dm.longitude;d=Math.min(d,A),u=Math.min(u,f),h=Math.max(h,A),p=Math.max(p,f),m.subtract(e,c,gN),n.cartesianToCartographic(gN,Dm),A=Dm.latitude,f=Dm.longitude,d=Math.min(d,A),u=Math.min(u,f),h=Math.max(h,A),p=Math.max(p,f),o.latitude=d,o.longitude=u,r.latitude=h,r.longitude=p}var Um=new m,bN=new m,Ld=new Ae,Wd=new Ae;function uge(e,t,n,i,o){e=lge(e,t);let r=Uo(e,m.equalsEpsilon),s=r.length;if(s<2||n<=0)return new de;let a=n*.5;Ld.latitude=Number.POSITIVE_INFINITY,Ld.longitude=Number.POSITIVE_INFINITY,Wd.latitude=Number.NEGATIVE_INFINITY,Wd.longitude=Number.NEGATIVE_INFINITY;let c,d;if(i===Ki.ROUNDED){let p=r[0];m.subtract(p,r[1],Um),m.normalize(Um,Um),m.multiplyByScalar(Um,a,Um),m.add(p,Um,bN),t.cartesianToCartographic(bN,Dm),c=Dm.latitude,d=Dm.longitude,Ld.latitude=Math.min(Ld.latitude,c),Ld.longitude=Math.min(Ld.longitude,d),Wd.latitude=Math.max(Wd.latitude,c),Wd.longitude=Math.max(Wd.longitude,d)}for(let p=0;p<s-1;++p)rge(r[p],r[p+1],t,a,Ld,Wd);let u=r[s-1];m.subtract(u,r[s-2],Um),m.normalize(Um,Um),m.multiplyByScalar(Um,a,Um),m.add(u,Um,bN),rge(u,bN,t,a,Ld,Wd),i===Ki.ROUNDED&&(t.cartesianToCartographic(bN,Dm),c=Dm.latitude,d=Dm.longitude,Ld.latitude=Math.min(Ld.latitude,c),Ld.longitude=Math.min(Ld.longitude,d),Wd.latitude=Math.max(Wd.latitude,c),Wd.longitude=Math.max(Wd.longitude,d));let h=l(o)?o:new de;return h.north=Wd.latitude,h.south=Ld.latitude,h.east=Wd.longitude,h.west=Ld.longitude,h}function zg(e){e=e??Q.EMPTY_OBJECT;let t=e.positions,n=e.width,i=e.height??0,o=e.extrudedHeight??i;this._positions=t,this._ellipsoid=ie.clone(e.ellipsoid??ie.default),this._vertexFormat=ve.clone(e.vertexFormat??ve.DEFAULT),this._width=n,this._height=Math.max(i,o),this._extrudedHeight=Math.min(i,o),this._cornerType=e.cornerType??Ki.ROUNDED,this._granularity=e.granularity??L.RADIANS_PER_DEGREE,this._shadowVolume=e.shadowVolume??!1,this._workerName="createCorridorGeometry",this._offsetAttribute=e.offsetAttribute,this._rectangle=void 0,this.packedLength=1+t.length*m.packedLength+ie.packedLength+ve.packedLength+7}zg.pack=function(e,t,n){n=n??0;let i=e._positions,o=i.length;t[n++]=o;for(let r=0;r<o;++r,n+=m.packedLength)m.pack(i[r],t,n);return ie.pack(e._ellipsoid,t,n),n+=ie.packedLength,ve.pack(e._vertexFormat,t,n),n+=ve.packedLength,t[n++]=e._width,t[n++]=e._height,t[n++]=e._extrudedHeight,t[n++]=e._cornerType,t[n++]=e._granularity,t[n++]=e._shadowVolume?1:0,t[n]=e._offsetAttribute??-1,t};var mge=ie.clone(ie.UNIT_SPHERE),hge=new ve,Og={positions:void 0,ellipsoid:mge,vertexFormat:hge,width:void 0,height:void 0,extrudedHeight:void 0,cornerType:void 0,granularity:void 0,shadowVolume:void 0,offsetAttribute:void 0};zg.unpack=function(e,t,n){t=t??0;let i=e[t++],o=new Array(i);for(let f=0;f<i;++f,t+=m.packedLength)o[f]=m.unpack(e,t);let r=ie.unpack(e,t,mge);t+=ie.packedLength;let s=ve.unpack(e,t,hge);t+=ve.packedLength;let a=e[t++],c=e[t++],d=e[t++],u=e[t++],h=e[t++],p=e[t++]===1,A=e[t];return l(n)?(n._positions=o,n._ellipsoid=ie.clone(r,n._ellipsoid),n._vertexFormat=ve.clone(s,n._vertexFormat),n._width=a,n._height=c,n._extrudedHeight=d,n._cornerType=u,n._granularity=h,n._shadowVolume=p,n._offsetAttribute=A===-1?void 0:A,n):(Og.positions=o,Og.width=a,Og.height=c,Og.extrudedHeight=d,Og.cornerType=u,Og.granularity=h,Og.shadowVolume=p,Og.offsetAttribute=A===-1?void 0:A,new zg(Og))};zg.computeRectangle=function(e,t){e=e??Q.EMPTY_OBJECT;let n=e.positions,i=e.width,o=e.ellipsoid??ie.default,r=e.cornerType??Ki.ROUNDED;return uge(n,o,i,r,t)};zg.createGeometry=function(e){let t=e._positions,n=e._width,i=e._ellipsoid;t=lge(t,i);let o=Uo(t,m.equalsEpsilon);if(o.length<2||n<=0)return;let r=e._height,s=e._extrudedHeight,a=!L.equalsEpsilon(r,s,0,L.EPSILON2),c=e._vertexFormat,d={ellipsoid:i,positions:o,width:n,cornerType:e._cornerType,granularity:e._granularity,saveAttributes:!0},u;if(a)d.height=r,d.extrudedHeight=s,d.shadowVolume=e._shadowVolume,d.offsetAttribute=e._offsetAttribute,u=hrt(d,c);else{let A=co.computePositions(d);if(u=dge(A,c,i),u.attributes.position.values=Ii.scaleToGeodeticHeight(u.attributes.position.values,r,i),l(e._offsetAttribute)){let f=e._offsetAttribute===An.NONE?0:1,b=u.attributes.position.values.length,C=new Uint8Array(b/3).fill(f);u.attributes.applyOffset=new we({componentDatatype:H.UNSIGNED_BYTE,componentsPerAttribute:1,values:C})}}let h=u.attributes,p=ue.fromVertices(h.position.values,void 0,3);return c.position||(u.attributes.position.values=void 0),new Ct({attributes:h,indices:u.indices,primitiveType:We.TRIANGLES,boundingSphere:p,offsetAttribute:e._offsetAttribute})};zg.createShadowVolume=function(e,t,n){let i=e._granularity,o=e._ellipsoid,r=t(i,o),s=n(i,o);return new zg({positions:e._positions,width:e._width,cornerType:e._cornerType,ellipsoid:o,granularity:i,extrudedHeight:r,height:s,vertexFormat:ve.POSITION_ONLY,shadowVolume:!0})};Object.defineProperties(zg.prototype,{rectangle:{get:function(){return l(this._rectangle)||(this._rectangle=uge(this._positions,this._ellipsoid,this._width,this._cornerType)),this._rectangle}},textureCoordinateRotationPoints:{get:function(){return[0,0,0,1,1,0]}}});var hT=zg;var Sfi=y(x(),1);var fge=new m,pge=new m,frt=new m;function prt(e,t){for(let n=0;n<e.length;n++)e[n]=t.scaleToGeodeticSurface(e[n],e[n]);return e}function Age(e,t){let n=[],i=e.positions,o=e.corners,r=e.endPositions,s=new xn,a,c=0,d=0,u,h=0,p;for(u=0;u<i.length;u+=2)p=i[u].length-3,c+=p,h+=p/3*4,d+=i[u+1].length-3;for(c+=3,d+=3,u=0;u<o.length;u++){a=o[u];let w=o[u].leftPositions;l(w)?(p=w.length,c+=p,h+=p/3*2):(p=o[u].rightPositions.length,d+=p,h+=p/3*2)}let A=l(r),f;A&&(f=r[0].length-3,c+=f,d+=f,f/=3,h+=f*4);let b=c+d,C=new Float64Array(b),T=0,E=b-1,S,I,R,V,W,B,N=f/2,P=Ue.createTypedArray(b/3,h+4),g=0;if(P[g++]=T/3,P[g++]=(E-2)/3,A){n.push(T/3),B=fge,W=pge;let w=r[0];for(u=0;u<N;u++)B=m.fromArray(w,(N-1-u)*3,B),W=m.fromArray(w,(N+u)*3,W),co.addAttribute(C,W,T),co.addAttribute(C,B,void 0,E),I=T/3,V=I+1,S=(E-2)/3,R=S-1,P[g++]=S,P[g++]=R,P[g++]=I,P[g++]=V,T+=3,E-=3}let _=0,Z=i[_++],G=i[_++];for(C.set(Z,T),C.set(G,E-G.length+1),p=G.length-3,n.push(T/3,(E-2)/3),u=0;u<p;u+=3)I=T/3,V=I+1,S=(E-2)/3,R=S-1,P[g++]=S,P[g++]=R,P[g++]=I,P[g++]=V,T+=3,E-=3;for(u=0;u<o.length;u++){let w;a=o[u];let X=a.leftPositions,k=a.rightPositions,v,D=frt;if(l(X)){for(E-=3,v=R,n.push(V),w=0;w<X.length/3;w++)D=m.fromArray(X,w*3,D),P[g++]=v-w-1,P[g++]=v-w,co.addAttribute(C,D,void 0,E),E-=3;n.push(v-Math.floor(X.length/6)),t===Ki.BEVELED&&n.push((E-2)/3+1),T+=3}else{for(T+=3,v=V,n.push(R),w=0;w<k.length/3;w++)D=m.fromArray(k,w*3,D),P[g++]=v+w,P[g++]=v+w+1,co.addAttribute(C,D,T),T+=3;n.push(v+Math.floor(k.length/6)),t===Ki.BEVELED&&n.push(T/3-1),E-=3}for(Z=i[_++],G=i[_++],Z.splice(0,3),G.splice(G.length-3,3),C.set(Z,T),C.set(G,E-G.length+1),p=G.length-3,w=0;w<G.length;w+=3)V=T/3,I=V-1,R=(E-2)/3,S=R+1,P[g++]=S,P[g++]=R,P[g++]=I,P[g++]=V,T+=3,E-=3;T-=3,E+=3,n.push(T/3,(E-2)/3)}if(A){T+=3,E-=3,B=fge,W=pge;let w=r[1];for(u=0;u<N;u++)B=m.fromArray(w,(f-u-1)*3,B),W=m.fromArray(w,u*3,W),co.addAttribute(C,B,void 0,E),co.addAttribute(C,W,T),V=T/3,I=V-1,R=(E-2)/3,S=R+1,P[g++]=S,P[g++]=R,P[g++]=I,P[g++]=V,T+=3,E-=3;n.push(T/3)}else n.push(T/3,(E-2)/3);return P[g++]=T/3,P[g++]=(E-2)/3,s.position=new we({componentDatatype:H.DOUBLE,componentsPerAttribute:3,values:C}),{attributes:s,indices:P,wallIndices:n}}function Art(e){let t=e.ellipsoid,n=co.computePositions(e),i=Age(n,e.cornerType),o=i.wallIndices,r=e.height,s=e.extrudedHeight,a=i.attributes,c=i.indices,d=a.position.values,u=d.length,h=new Float64Array(u);h.set(d);let p=new Float64Array(u*2);if(d=Ii.scaleToGeodeticHeight(d,r,t),h=Ii.scaleToGeodeticHeight(h,s,t),p.set(d),p.set(h,u),a.position.values=p,u/=3,l(e.offsetAttribute)){let S=new Uint8Array(u*2);if(e.offsetAttribute===An.TOP)S=S.fill(1,0,u);else{let I=e.offsetAttribute===An.NONE?0:1;S=S.fill(I)}a.applyOffset=new we({componentDatatype:H.UNSIGNED_BYTE,componentsPerAttribute:1,values:S})}let A,f=c.length,b=Ue.createTypedArray(p.length/3,(f+o.length)*2);b.set(c);let C=f;for(A=0;A<f;A+=2){let S=c[A],I=c[A+1];b[C++]=S+u,b[C++]=I+u}let T,E;for(A=0;A<o.length;A++)T=o[A],E=T+u,b[C++]=T,b[C++]=E;return{attributes:a,indices:b}}function yN(e){e=e??Q.EMPTY_OBJECT;let t=e.positions,n=e.width,i=e.height??0,o=e.extrudedHeight??i;this._positions=t,this._ellipsoid=ie.clone(e.ellipsoid??ie.default),this._width=n,this._height=Math.max(i,o),this._extrudedHeight=Math.min(i,o),this._cornerType=e.cornerType??Ki.ROUNDED,this._granularity=e.granularity??L.RADIANS_PER_DEGREE,this._offsetAttribute=e.offsetAttribute,this._workerName="createCorridorOutlineGeometry",this.packedLength=1+t.length*m.packedLength+ie.packedLength+6}yN.pack=function(e,t,n){n=n??0;let i=e._positions,o=i.length;t[n++]=o;for(let r=0;r<o;++r,n+=m.packedLength)m.pack(i[r],t,n);return ie.pack(e._ellipsoid,t,n),n+=ie.packedLength,t[n++]=e._width,t[n++]=e._height,t[n++]=e._extrudedHeight,t[n++]=e._cornerType,t[n++]=e._granularity,t[n]=e._offsetAttribute??-1,t};var gge=ie.clone(ie.UNIT_SPHERE),ry={positions:void 0,ellipsoid:gge,width:void 0,height:void 0,extrudedHeight:void 0,cornerType:void 0,granularity:void 0,offsetAttribute:void 0};yN.unpack=function(e,t,n){t=t??0;let i=e[t++],o=new Array(i);for(let p=0;p<i;++p,t+=m.packedLength)o[p]=m.unpack(e,t);let r=ie.unpack(e,t,gge);t+=ie.packedLength;let s=e[t++],a=e[t++],c=e[t++],d=e[t++],u=e[t++],h=e[t];return l(n)?(n._positions=o,n._ellipsoid=ie.clone(r,n._ellipsoid),n._width=s,n._height=a,n._extrudedHeight=c,n._cornerType=d,n._granularity=u,n._offsetAttribute=h===-1?void 0:h,n):(ry.positions=o,ry.width=s,ry.height=a,ry.extrudedHeight=c,ry.cornerType=d,ry.granularity=u,ry.offsetAttribute=h===-1?void 0:h,new yN(ry))};yN.createGeometry=function(e){let t=e._positions,n=e._width,i=e._ellipsoid;t=prt(t,i);let o=Uo(t,m.equalsEpsilon);if(o.length<2||n<=0)return;let r=e._height,s=e._extrudedHeight,a=!L.equalsEpsilon(r,s,0,L.EPSILON2),c={ellipsoid:i,positions:o,width:n,cornerType:e._cornerType,granularity:e._granularity,saveAttributes:!1},d;if(a)c.height=r,c.extrudedHeight=s,c.offsetAttribute=e._offsetAttribute,d=Art(c);else{let p=co.computePositions(c);if(d=Age(p,c.cornerType),d.attributes.position.values=Ii.scaleToGeodeticHeight(d.attributes.position.values,r,i),l(e._offsetAttribute)){let A=d.attributes.position.values.length,f=e._offsetAttribute===An.NONE?0:1,b=new Uint8Array(A/3).fill(f);d.attributes.applyOffset=new we({componentDatatype:H.UNSIGNED_BYTE,componentsPerAttribute:1,values:b})}}let u=d.attributes,h=ue.fromVertices(u.position.values,void 0,3);return new Ct({attributes:u,indices:d.indices,primitiveType:We.LINES,boundingSphere:h,offsetAttribute:e._offsetAttribute})};var xN=yN;var Nfi=y(x(),1);var grt=new fi(0);function Kl(e){Si.call(this,e),this._zIndex=0,this._terrainOffsetProperty=void 0}l(Object.create)&&(Kl.prototype=Object.create(Si.prototype),Kl.prototype.constructor=Kl);Object.defineProperties(Kl.prototype,{zIndex:{get:function(){return this._zIndex}},terrainOffsetProperty:{get:function(){return this._terrainOffsetProperty}}});Kl.prototype._isOnTerrain=function(e,t){return this._fillEnabled&&!l(t.height)&&!l(t.extrudedHeight)&&_l.isSupported(this._scene)};Kl.prototype._getIsClosed=function(e){let t=e.height,n=e.extrudedHeight;return t===0||l(n)&&n!==t};Kl.prototype._computeCenter=fe.throwInstantiationError;Kl.prototype._onEntityPropertyChanged=function(e,t,n,i){if(Si.prototype._onEntityPropertyChanged.call(this,e,t,n,i),this._observedPropertyNames.indexOf(t)===-1)return;let o=this._entity[this._geometryPropertyName];if(!l(o))return;l(o.zIndex)&&(l(o.height)||l(o.extrudedHeight))&&_t(_t.geometryZIndex),this._zIndex=o.zIndex??grt,l(this._terrainOffsetProperty)&&(this._terrainOffsetProperty.destroy(),this._terrainOffsetProperty=void 0);let r=o.heightReference,s=o.extrudedHeightReference;if(l(r)||l(s)){let a=new Bh(this._computeCenter.bind(this),!this._dynamic);this._terrainOffsetProperty=new $x(this._scene,a,r,s)}};Kl.prototype.destroy=function(){l(this._terrainOffsetProperty)&&(this._terrainOffsetProperty.destroy(),this._terrainOffsetProperty=void 0),Si.prototype.destroy.call(this)};Kl.getGeometryHeight=function(e,t){if(!l(e)){t!==rt.NONE&&_t(_t.geometryHeightReference);return}return hm(t)?0:e};Kl.getGeometryExtrudedHeight=function(e,t){if(!l(e)){t!==rt.NONE&&_t(_t.geometryExtrudedHeightReference);return}return hm(t)?Kl.CLAMP_TO_GROUND:e};Kl.CLAMP_TO_GROUND="clamp";Kl.computeGeometryOffsetAttribute=function(e,t,n,i){(!l(e)||!l(t))&&(t=rt.NONE),(!l(n)||!l(i))&&(i=rt.NONE);let o=0;if(t!==rt.NONE&&o++,i===rt.RELATIVE_TO_GROUND&&o++,o===2)return An.ALL;if(o===1)return An.TOP};var si=Kl;var bge=new U,yge=m.ZERO,xge=new m,Cge=new de;function brt(e){this.id=e,this.vertexFormat=void 0,this.positions=void 0,this.width=void 0,this.cornerType=void 0,this.height=void 0,this.extrudedHeight=void 0,this.granularity=void 0,this.offsetAttribute=void 0}function mf(e,t){si.call(this,{entity:e,scene:t,geometryOptions:new brt(e),geometryPropertyName:"corridor",observedPropertyNames:["availability","corridor"]}),this._onEntityPropertyChanged(e,"corridor",e.corridor,void 0)}l(Object.create)&&(mf.prototype=Object.create(si.prototype),mf.prototype.constructor=mf);mf.prototype.createFillGeometryInstance=function(e){let t=this._entity,n=t.isAvailable(e),i={show:new Rn(n&&t.isShowing&&this._showProperty.getValue(e)&&this._fillProperty.getValue(e)),distanceDisplayCondition:ei.fromDistanceDisplayCondition(this._distanceDisplayConditionProperty.getValue(e)),offset:void 0,color:void 0};if(this._materialProperty instanceof Kt){let o;l(this._materialProperty.color)&&(this._materialProperty.color.isConstant||n)&&(o=this._materialProperty.color.getValue(e,bge)),l(o)||(o=U.WHITE),i.color=$t.fromColor(o)}return l(this._options.offsetAttribute)&&(i.offset=Ao.fromCartesian3(K.getValueOrDefault(this._terrainOffsetProperty,e,yge,xge))),new wt({id:t,geometry:new hT(this._options),attributes:i})};mf.prototype.createOutlineGeometryInstance=function(e){let t=this._entity,n=t.isAvailable(e),i=K.getValueOrDefault(this._outlineColorProperty,e,U.BLACK,bge),o={show:new Rn(n&&t.isShowing&&this._showProperty.getValue(e)&&this._showOutlineProperty.getValue(e)),color:$t.fromColor(i),distanceDisplayCondition:ei.fromDistanceDisplayCondition(this._distanceDisplayConditionProperty.getValue(e)),offset:void 0};return l(this._options.offsetAttribute)&&(o.offset=Ao.fromCartesian3(K.getValueOrDefault(this._terrainOffsetProperty,e,yge,xge))),new wt({id:t,geometry:new xN(this._options),attributes:o})};mf.prototype._computeCenter=function(e,t){let n=K.getValueOrUndefined(this._entity.corridor.positions,e);if(!(!l(n)||n.length===0))return m.clone(n[Math.floor(n.length/2)],t)};mf.prototype._isHidden=function(e,t){return!l(t.positions)||!l(t.width)||Si.prototype._isHidden.call(this,e,t)};mf.prototype._isDynamic=function(e,t){return!t.positions.isConstant||!K.isConstant(t.height)||!K.isConstant(t.extrudedHeight)||!K.isConstant(t.granularity)||!K.isConstant(t.width)||!K.isConstant(t.outlineWidth)||!K.isConstant(t.cornerType)||!K.isConstant(t.zIndex)||this._onTerrain&&!K.isConstant(this._materialProperty)&&!(this._materialProperty instanceof Kt)};mf.prototype._setStaticOptions=function(e,t){let n=K.getValueOrUndefined(t.height,qe.MINIMUM_VALUE),i=K.getValueOrDefault(t.heightReference,qe.MINIMUM_VALUE,rt.NONE),o=K.getValueOrUndefined(t.extrudedHeight,qe.MINIMUM_VALUE),r=K.getValueOrDefault(t.extrudedHeightReference,qe.MINIMUM_VALUE,rt.NONE);l(o)&&!l(n)&&(n=0);let s=this._options;s.vertexFormat=this._materialProperty instanceof Kt?yn.VERTEX_FORMAT:go.MaterialSupport.TEXTURED.vertexFormat,s.positions=t.positions.getValue(qe.MINIMUM_VALUE,s.positions),s.width=t.width.getValue(qe.MINIMUM_VALUE),s.granularity=K.getValueOrUndefined(t.granularity,qe.MINIMUM_VALUE),s.cornerType=K.getValueOrUndefined(t.cornerType,qe.MINIMUM_VALUE),s.offsetAttribute=si.computeGeometryOffsetAttribute(n,i,o,r),s.height=si.getGeometryHeight(n,i),o=si.getGeometryExtrudedHeight(o,r),o===si.CLAMP_TO_GROUND&&(o=Gi.getMinimumMaximumHeights(hT.computeRectangle(s,Cge)).minimumTerrainHeight),s.extrudedHeight=o};mf.DynamicGeometryUpdater=AI;function AI(e,t,n){Ei.call(this,e,t,n)}l(Object.create)&&(AI.prototype=Object.create(Ei.prototype),AI.prototype.constructor=AI);AI.prototype._isHidden=function(e,t,n){let i=this._options;return!l(i.positions)||!l(i.width)||Ei.prototype._isHidden.call(this,e,t,n)};AI.prototype._setOptions=function(e,t,n){let i=this._options,o=K.getValueOrUndefined(t.height,n),r=K.getValueOrDefault(t.heightReference,n,rt.NONE),s=K.getValueOrUndefined(t.extrudedHeight,n),a=K.getValueOrDefault(t.extrudedHeightReference,n,rt.NONE);l(s)&&!l(o)&&(o=0),i.positions=K.getValueOrUndefined(t.positions,n),i.width=K.getValueOrUndefined(t.width,n),i.granularity=K.getValueOrUndefined(t.granularity,n),i.cornerType=K.getValueOrUndefined(t.cornerType,n),i.offsetAttribute=si.computeGeometryOffsetAttribute(o,r,s,a),i.height=si.getGeometryHeight(o,r),s=si.getGeometryExtrudedHeight(s,a),s===si.CLAMP_TO_GROUND&&(s=Gi.getMinimumMaximumHeights(hT.computeRectangle(i,Cge)).minimumTerrainHeight),i.extrudedHeight=s};var CN=mf;var WAi=y(x(),1);var cpi=y(x(),1);function U9(){fe.throwInstantiationError()}Object.defineProperties(U9.prototype,{name:{get:fe.throwInstantiationError},clock:{get:fe.throwInstantiationError},entities:{get:fe.throwInstantiationError},isLoading:{get:fe.throwInstantiationError},changedEvent:{get:fe.throwInstantiationError},errorEvent:{get:fe.throwInstantiationError},loadingEvent:{get:fe.throwInstantiationError},show:{get:fe.throwInstantiationError},clustering:{get:fe.throwInstantiationError}});U9.prototype.update=function(e){fe.throwInstantiationError()};U9.setLoading=function(e,t){e._isLoading!==t&&(t?e._entityCollection.suspendEvents():e._entityCollection.resumeEvents(),e._isLoading=t,e._loading.raiseEvent(e,t))};var ys=U9;var IAi=y(x(),1);var ppi=y(x(),1);function Gp(e,t){this._ellipsoid=e,this._cameraPosition=new m,this._cameraPositionInScaledSpace=new m,this._distanceToLimbInScaledSpaceSquared=0,l(t)&&(this.cameraPosition=t)}Object.defineProperties(Gp.prototype,{ellipsoid:{get:function(){return this._ellipsoid}},cameraPosition:{get:function(){return this._cameraPosition},set:function(e){let n=this._ellipsoid.transformPositionToScaledSpace(e,this._cameraPositionInScaledSpace),i=m.magnitudeSquared(n)-1;m.clone(e,this._cameraPosition),this._cameraPositionInScaledSpace=n,this._distanceToLimbInScaledSpaceSquared=i}}});var Tge=new m;Gp.prototype.isPointVisible=function(e){let n=this._ellipsoid.transformPositionToScaledSpace(e,Tge);return X8(n,this._cameraPositionInScaledSpace,this._distanceToLimbInScaledSpaceSquared)};Gp.prototype.isScaledSpacePointVisible=function(e){return X8(e,this._cameraPositionInScaledSpace,this._distanceToLimbInScaledSpaceSquared)};var yrt=new m;Gp.prototype.isScaledSpacePointVisiblePossiblyUnderEllipsoid=function(e,t){let n=this._ellipsoid,i,o;return l(t)&&t<0&&n.minimumRadius>-t?(o=yrt,o.x=this._cameraPosition.x/(n.radii.x+t),o.y=this._cameraPosition.y/(n.radii.y+t),o.z=this._cameraPosition.z/(n.radii.z+t),i=o.x*o.x+o.y*o.y+o.z*o.z-1):(o=this._cameraPositionInScaledSpace,i=this._distanceToLimbInScaledSpaceSquared),X8(e,o,i)};Gp.prototype.computeHorizonCullingPoint=function(e,t,n){return _ge(this._ellipsoid,e,t,n)};var Ege=ie.clone(ie.UNIT_SPHERE);Gp.prototype.computeHorizonCullingPointPossiblyUnderEllipsoid=function(e,t,n,i){let o=Sge(this._ellipsoid,n,Ege);return _ge(o,e,t,i)};Gp.prototype.computeHorizonCullingPointFromVertices=function(e,t,n,i,o){return Ige(this._ellipsoid,e,t,n,i,o)};Gp.prototype.computeHorizonCullingPointFromVerticesPossiblyUnderEllipsoid=function(e,t,n,i,o,r){let s=Sge(this._ellipsoid,o,Ege);return Ige(s,e,t,n,i,r)};var xrt=[];Gp.prototype.computeHorizonCullingPointFromRectangle=function(e,t,n){let i=de.subsample(e,t,0,xrt),o=ue.fromPoints(i);if(!(m.magnitude(o.center)<.1*t.minimumRadius))return this.computeHorizonCullingPoint(o.center,i,n)};var Crt=new m;function Sge(e,t,n){if(l(t)&&t<0&&e.minimumRadius>-t){let i=m.fromElements(e.radii.x+t,e.radii.y+t,e.radii.z+t,Crt);e=ie.fromCartesian3(i,n)}return e}function _ge(e,t,n,i){l(i)||(i=new m);let o=Vge(e,t),r=0;for(let s=0,a=n.length;s<a;++s){let c=n[s],d=Zge(e,c,o);if(d<0)return;r=Math.max(r,d)}return Rge(o,r,i)}var D9=new m;function Ige(e,t,n,i,o,r){l(r)||(r=new m),i=i??3,o=o??m.ZERO;let s=Vge(e,t),a=0;for(let c=0,d=n.length;c<d;c+=i){D9.x=n[c]+o.x,D9.y=n[c+1]+o.y,D9.z=n[c+2]+o.z;let u=Zge(e,D9,s);if(u<0)return;a=Math.max(a,u)}return Rge(s,a,r)}function X8(e,t,n){let i=t,o=n,r=m.subtract(e,i,Tge),s=-m.dot(r,i);return!(o<0?s>0:s>o&&s*s/m.magnitudeSquared(r)>o)}var Trt=new m,Ert=new m;function Zge(e,t,n){let i=e.transformPositionToScaledSpace(t,Trt),o=m.magnitudeSquared(i),r=Math.sqrt(o),s=m.divideByScalar(i,r,Ert);o=Math.max(1,o),r=Math.max(1,r);let a=m.dot(s,n),c=m.magnitude(m.cross(s,n,s)),d=1/r,u=Math.sqrt(o-1)*d;return 1/(a*d-c*u)}function Rge(e,t,n){if(!(t<=0||t===1/0||t!==t))return m.multiplyByScalar(e,t,n)}var P8=new m;function Vge(e,t){return m.equals(t,m.ZERO)?t:(e.transformPositionToScaledSpace(t,P8),m.normalize(P8,P8))}var hf=Gp;var Gpi=y(x(),1);function $r(e,t){e=e??Q.EMPTY_OBJECT;let n=e.translucencyByDistance,i=e.scaleByDistance,o=e.distanceDisplayCondition;l(n)&&(n=Ot.clone(n)),l(i)&&(i=Ot.clone(i)),l(o)&&(o=Dt.clone(o)),this._show=e.show??!0,this._position=m.clone(e.position??m.ZERO),this._actualPosition=m.clone(this._position),this._color=U.clone(e.color??U.WHITE),this._outlineColor=U.clone(e.outlineColor??U.TRANSPARENT),this._outlineWidth=e.outlineWidth??0,this._pixelSize=e.pixelSize??10,this._scaleByDistance=i,this._translucencyByDistance=n,this._distanceDisplayCondition=o,this._disableDepthTestDistance=e.disableDepthTestDistance??0,this._id=e.id,this._collection=e.collection??t,this._clusterShow=!0,this._pickId=void 0,this._pointPrimitiveCollection=t,this._dirty=!1,this._index=-1,this._splitDirection=e.splitDirection??Br.NONE}var Gge=$r.SHOW_INDEX=0,Fge=$r.POSITION_INDEX=1,Srt=$r.COLOR_INDEX=2,_rt=$r.OUTLINE_COLOR_INDEX=3,Irt=$r.OUTLINE_WIDTH_INDEX=4,Zrt=$r.PIXEL_SIZE_INDEX=5,Rrt=$r.SCALE_BY_DISTANCE_INDEX=6,Vrt=$r.TRANSLUCENCY_BY_DISTANCE_INDEX=7,Grt=$r.DISTANCE_DISPLAY_CONDITION_INDEX=8,Lrt=$r.DISABLE_DEPTH_DISTANCE_INDEX=9,Wrt=$r.SPLIT_DIRECTION_INDEX=10;$r.NUMBER_OF_PROPERTIES=11;function Su(e,t){let n=e._pointPrimitiveCollection;l(n)&&(n._updatePointPrimitive(e,t),e._dirty=!0)}Object.defineProperties($r.prototype,{show:{get:function(){return this._show},set:function(e){this._show!==e&&(this._show=e,Su(this,Gge))}},position:{get:function(){return this._position},set:function(e){let t=this._position;m.equals(t,e)||(m.clone(e,t),m.clone(e,this._actualPosition),Su(this,Fge))}},scaleByDistance:{get:function(){return this._scaleByDistance},set:function(e){let t=this._scaleByDistance;Ot.equals(t,e)||(this._scaleByDistance=Ot.clone(e,t),Su(this,Rrt))}},translucencyByDistance:{get:function(){return this._translucencyByDistance},set:function(e){let t=this._translucencyByDistance;Ot.equals(t,e)||(this._translucencyByDistance=Ot.clone(e,t),Su(this,Vrt))}},pixelSize:{get:function(){return this._pixelSize},set:function(e){this._pixelSize!==e&&(this._pixelSize=e,Su(this,Zrt))}},color:{get:function(){return this._color},set:function(e){let t=this._color;U.equals(t,e)||(U.clone(e,t),Su(this,Srt))}},outlineColor:{get:function(){return this._outlineColor},set:function(e){let t=this._outlineColor;U.equals(t,e)||(U.clone(e,t),Su(this,_rt))}},outlineWidth:{get:function(){return this._outlineWidth},set:function(e){this._outlineWidth!==e&&(this._outlineWidth=e,Su(this,Irt))}},distanceDisplayCondition:{get:function(){return this._distanceDisplayCondition},set:function(e){Dt.equals(this._distanceDisplayCondition,e)||(this._distanceDisplayCondition=Dt.clone(e,this._distanceDisplayCondition),Su(this,Grt))}},disableDepthTestDistance:{get:function(){return this._disableDepthTestDistance},set:function(e){this._disableDepthTestDistance!==e&&(this._disableDepthTestDistance=e,Su(this,Lrt))}},id:{get:function(){return this._id},set:function(e){this._id=e,l(this._pickId)&&(this._pickId.object.id=e)}},pickId:{get:function(){return this._pickId}},clusterShow:{get:function(){return this._clusterShow},set:function(e){this._clusterShow!==e&&(this._clusterShow=e,Su(this,Gge))}},splitDirection:{get:function(){return this._splitDirection},set:function(e){this._splitDirection!==e&&(this._splitDirection=e,Su(this,Wrt))}}});$r.prototype.getPickId=function(e){return l(this._pickId)||(this._pickId=e.createPickId({primitive:this,collection:this._collection,id:this._id})),this._pickId};$r.prototype._getActualPosition=function(){return this._actualPosition};$r.prototype._setActualPosition=function(e){m.clone(e,this._actualPosition),Su(this,Fge)};var Lge=new re;$r._computeActualPosition=function(e,t,n){return t.mode===se.SCENE3D?e:(F.multiplyByPoint(n,e,Lge),so.computeActualEllipsoidPosition(t,Lge))};var Wge=new re;$r._computeScreenSpacePosition=function(e,t,n,i){let o=F.multiplyByVector(e,re.fromElements(t.x,t.y,t.z,1,Wge),Wge);return so.worldToWindowCoordinates(n,o,i)};$r.prototype.computeScreenSpacePosition=function(e,t){let n=this._pointPrimitiveCollection;l(t)||(t=new M);let i=n.modelMatrix,o=$r._computeScreenSpacePosition(i,this._actualPosition,e,t);if(l(o))return o.y=e.canvas.clientHeight-o.y,o};$r.getScreenSpaceBoundingBox=function(e,t,n){let i=e.pixelSize,o=i*.5,r=t.x-o,s=t.y-o,a=i,c=i;return l(n)||(n=new nt),n.x=r,n.y=s,n.width=a,n.height=c,n};$r.prototype.equals=function(e){return this===e||l(e)&&this._id===e._id&&m.equals(this._position,e._position)&&U.equals(this._color,e._color)&&this._pixelSize===e._pixelSize&&this._outlineWidth===e._outlineWidth&&this._show===e._show&&U.equals(this._outlineColor,e._outlineColor)&&Ot.equals(this._scaleByDistance,e._scaleByDistance)&&Ot.equals(this._translucencyByDistance,e._translucencyByDistance)&&Dt.equals(this._distanceDisplayCondition,e._distanceDisplayCondition)&&this._disableDepthTestDistance===e._disableDepthTestDistance&&this._splitDirection===e._splitDirection};$r.prototype._destroy=function(){this._pickId=this._pickId&&this._pickId.destroy(),this._pointPrimitiveCollection=void 0};var pa=$r;var cAi=y(x(),1);var Wpi=y(x(),1),sy=`in vec4 v_color;
in vec4 v_outlineColor;
in float v_innerPercent;
in float v_pixelDistance;
in vec4 v_pickColor;
in float v_splitDirection;
void main()
{
if (v_splitDirection < 0.0 && gl_FragCoord.x > czm_splitPosition) discard;
if (v_splitDirection > 0.0 && gl_FragCoord.x < czm_splitPosition) discard;
// The distance in UV space from this fragment to the center of the point, at most 0.5.
float distanceToCenter = length(gl_PointCoord - vec2(0.5));
// The max distance stops one pixel shy of the edge to leave space for anti-aliasing.
float maxDistance = max(0.0, 0.5 - v_pixelDistance);
float wholeAlpha = 1.0 - smoothstep(maxDistance, 0.5, distanceToCenter);
float innerAlpha = 1.0 - smoothstep(maxDistance * v_innerPercent, 0.5 * v_innerPercent, distanceToCenter);
vec4 color = mix(v_outlineColor, v_color, innerAlpha);
color.a *= wholeAlpha;
// Fully transparent parts of the billboard are not pickable.
#if !defined(OPAQUE) && !defined(TRANSLUCENT)
if (color.a < 0.005) // matches 0/255 and 1/255
{
discard;
}
#else
// The billboard is rendered twice. The opaque pass discards translucent fragments
// and the translucent pass discards opaque fragments.
#ifdef OPAQUE
if (color.a < 0.995) // matches < 254/255
{
discard;
}
#else
if (color.a >= 0.995) // matches 254/255 and 255/255
{
discard;
}
#endif
#endif
out_FragColor = czm_gammaCorrect(color);
czm_writeLogDepth();
}
`;var Bpi=y(x(),1),TN=`uniform float u_maxTotalPointSize;
in vec4 positionHighAndSize;
in vec4 positionLowAndOutline;
in vec4 compressedAttribute0; // color, outlineColor, pick color
in vec4 compressedAttribute1; // show, translucency by distance, some free space
in vec4 scaleByDistance; // near, nearScale, far, farScale
in vec4 distanceDisplayConditionAndDisableDepthAndSplitDirection; // near, far, disableDepthTestDistance, splitDirection
out vec4 v_color;
out vec4 v_outlineColor;
out float v_innerPercent;
out float v_pixelDistance;
out vec4 v_pickColor;
out float v_splitDirection;
const float SHIFT_LEFT8 = 256.0;
const float SHIFT_RIGHT8 = 1.0 / 256.0;
void main()
{
// Modifying this shader may also require modifications to PointPrimitive._computeScreenSpacePosition
// unpack attributes
vec3 positionHigh = positionHighAndSize.xyz;
vec3 positionLow = positionLowAndOutline.xyz;
float outlineWidthBothSides = 2.0 * positionLowAndOutline.w;
float totalSize = positionHighAndSize.w + outlineWidthBothSides;
float outlinePercent = outlineWidthBothSides / totalSize;
// Scale in response to browser-zoom.
totalSize *= czm_pixelRatio;
float temp = compressedAttribute1.x * SHIFT_RIGHT8;
float show = floor(temp);
#ifdef EYE_DISTANCE_TRANSLUCENCY
vec4 translucencyByDistance;
translucencyByDistance.x = compressedAttribute1.z;
translucencyByDistance.z = compressedAttribute1.w;
translucencyByDistance.y = ((temp - floor(temp)) * SHIFT_LEFT8) / 255.0;
temp = compressedAttribute1.y * SHIFT_RIGHT8;
translucencyByDistance.w = ((temp - floor(temp)) * SHIFT_LEFT8) / 255.0;
#endif
///////////////////////////////////////////////////////////////////////////
vec4 color = czm_decodeRGB8(compressedAttribute0.x);
vec4 outlineColor = czm_decodeRGB8(compressedAttribute0.y);
vec4 pickColor = czm_decodeRGB8(compressedAttribute0.z);
vec4 alphaPacked = czm_decodeRGB8(compressedAttribute0.w);
color.a = alphaPacked.x;
outlineColor.a = alphaPacked.y;
pickColor.a = alphaPacked.z;
///////////////////////////////////////////////////////////////////////////
vec4 p = czm_translateRelativeToEye(positionHigh, positionLow);
vec4 positionEC = czm_modelViewRelativeToEye * p;
///////////////////////////////////////////////////////////////////////////
#if defined(EYE_DISTANCE_SCALING) || defined(EYE_DISTANCE_TRANSLUCENCY) || defined(DISTANCE_DISPLAY_CONDITION) || defined(DISABLE_DEPTH_DISTANCE)
float lengthSq;
if (czm_sceneMode == czm_sceneMode2D)
{
// 2D camera distance is a special case
// treat all billboards as flattened to the z=0.0 plane
lengthSq = czm_eyeHeight2D.y;
}
else
{
lengthSq = dot(positionEC.xyz, positionEC.xyz);
}
#endif
#ifdef EYE_DISTANCE_SCALING
totalSize *= czm_nearFarScalar(scaleByDistance, lengthSq);
#endif
if (totalSize > 0.0) {
// Add padding for anti-aliasing on both sides.
totalSize += 3.0;
}
// Clamp to max point size.
totalSize = min(totalSize, u_maxTotalPointSize);
// If size is too small, push vertex behind near plane for clipping.
// Note that context.minimumAliasedPointSize "will be at most 1.0".
if (totalSize < 1.0)
{
positionEC.xyz = vec3(0.0);
totalSize = 1.0;
}
float translucency = 1.0;
#ifdef EYE_DISTANCE_TRANSLUCENCY
translucency = czm_nearFarScalar(translucencyByDistance, lengthSq);
// push vertex behind near plane for clipping
if (translucency < 0.004)
{
positionEC.xyz = vec3(0.0);
}
#endif
#ifdef DISTANCE_DISPLAY_CONDITION
float nearSq = distanceDisplayConditionAndDisableDepthAndSplitDirection.x;
float farSq = distanceDisplayConditionAndDisableDepthAndSplitDirection.y;
if (lengthSq < nearSq || lengthSq > farSq) {
// push vertex behind camera to force it to be clipped
positionEC.xyz = vec3(0.0, 0.0, 1.0);
}
#endif
gl_Position = czm_projection * positionEC;
czm_vertexLogDepth();
#ifdef DISABLE_DEPTH_DISTANCE
float disableDepthTestDistance = distanceDisplayConditionAndDisableDepthAndSplitDirection.z;
if (disableDepthTestDistance == 0.0 && czm_minimumDisableDepthTestDistance != 0.0)
{
disableDepthTestDistance = czm_minimumDisableDepthTestDistance;
}
if (disableDepthTestDistance != 0.0)
{
// Don't try to "multiply both sides" by w. Greater/less-than comparisons won't work for negative values of w.
float zclip = gl_Position.z / gl_Position.w;
bool clipped = (zclip < -1.0 || zclip > 1.0);
if (!clipped && (disableDepthTestDistance < 0.0 || (lengthSq > 0.0 && lengthSq < disableDepthTestDistance)))
{
// Position z on the near plane.
gl_Position.z = -gl_Position.w;
#ifdef LOG_DEPTH
czm_vertexLogDepth(vec4(czm_currentFrustum.x));
#endif
}
}
#endif
v_color = color;
v_color.a *= translucency * show;
v_outlineColor = outlineColor;
v_outlineColor.a *= translucency * show;
v_innerPercent = 1.0 - outlinePercent;
v_pixelDistance = 2.0 / totalSize;
gl_PointSize = totalSize * show;
gl_Position *= show;
v_pickColor = pickColor;
v_splitDirection = distanceDisplayConditionAndDisableDepthAndSplitDirection.w;
}
`;var Frt=pa.SHOW_INDEX,v8=pa.POSITION_INDEX,Bge=pa.COLOR_INDEX,Brt=pa.OUTLINE_COLOR_INDEX,wrt=pa.OUTLINE_WIDTH_INDEX,Nrt=pa.PIXEL_SIZE_INDEX,wge=pa.SCALE_BY_DISTANCE_INDEX,Nge=pa.TRANSLUCENCY_BY_DISTANCE_INDEX,Pge=pa.DISTANCE_DISPLAY_CONDITION_INDEX,Prt=pa.DISABLE_DEPTH_DISTANCE_INDEX,Xrt=pa.SPLIT_DIRECTION_INDEX,U8=pa.NUMBER_OF_PROPERTIES,rl={positionHighAndSize:0,positionLowAndOutline:1,compressedAttribute0:2,compressedAttribute1:3,scaleByDistance:4,distanceDisplayConditionAndDisableDepthAndSplitDirection:5};function km(e){e=e??Q.EMPTY_OBJECT,this._sp=void 0,this._spTranslucent=void 0,this._rsOpaque=void 0,this._rsTranslucent=void 0,this._vaf=void 0,this._pointPrimitives=[],this._pointPrimitivesToUpdate=[],this._pointPrimitivesToUpdateIndex=0,this._pointPrimitivesRemoved=!1,this._createVertexArray=!1,this._shaderScaleByDistance=!1,this._compiledShaderScaleByDistance=!1,this._shaderTranslucencyByDistance=!1,this._compiledShaderTranslucencyByDistance=!1,this._shaderDistanceDisplayCondition=!1,this._compiledShaderDistanceDisplayCondition=!1,this._shaderDisableDepthDistance=!1,this._compiledShaderDisableDepthDistance=!1,this._propertiesChanged=new Uint32Array(U8),this._maxPixelSize=1,this._baseVolume=new ue,this._baseVolumeWC=new ue,this._baseVolume2D=new ue,this._boundingVolume=new ue,this._boundingVolumeDirty=!1,this._colorCommands=[],this.show=e.show??!0,this.modelMatrix=F.clone(e.modelMatrix??F.IDENTITY),this._modelMatrix=F.clone(F.IDENTITY),this.debugShowBoundingVolume=e.debugShowBoundingVolume??!1,this.blendOption=e.blendOption??$o.OPAQUE_AND_TRANSLUCENT,this._blendOption=void 0,this._mode=se.SCENE3D,this._maxTotalPointSize=1,this._buffersUsage=[Be.STATIC_DRAW,Be.STATIC_DRAW,Be.STATIC_DRAW,Be.STATIC_DRAW,Be.STATIC_DRAW,Be.STATIC_DRAW,Be.STATIC_DRAW,Be.STATIC_DRAW,Be.STATIC_DRAW];let t=this;this._uniforms={u_maxTotalPointSize:function(){return t._maxTotalPointSize}}}Object.defineProperties(km.prototype,{length:{get:function(){return D8(this),this._pointPrimitives.length}}});function Xge(e){let t=e.length;for(let n=0;n<t;++n)e[n]&&e[n]._destroy()}km.prototype.add=function(e){let t=new pa(e,this);return t._index=this._pointPrimitives.length,this._pointPrimitives.push(t),this._createVertexArray=!0,t};km.prototype.remove=function(e){return this.contains(e)?(this._pointPrimitives[e._index]=null,this._pointPrimitivesRemoved=!0,this._createVertexArray=!0,e._destroy(),!0):!1};km.prototype.removeAll=function(){Xge(this._pointPrimitives),this._pointPrimitives=[],this._pointPrimitivesToUpdate=[],this._pointPrimitivesToUpdateIndex=0,this._pointPrimitivesRemoved=!1,this._createVertexArray=!0};function D8(e){if(e._pointPrimitivesRemoved){e._pointPrimitivesRemoved=!1;let t=[],n=e._pointPrimitives,i=n.length;for(let o=0,r=0;o<i;++o){let s=n[o];s&&(s._index=r++,t.push(s))}e._pointPrimitives=t}}km.prototype._updatePointPrimitive=function(e,t){e._dirty||(this._pointPrimitivesToUpdate[this._pointPrimitivesToUpdateIndex++]=e),++this._propertiesChanged[t]};km.prototype.contains=function(e){return l(e)&&e._pointPrimitiveCollection===this};km.prototype.get=function(e){return D8(this),this._pointPrimitives[e]};km.prototype.computeNewBuffersUsage=function(){let e=this._buffersUsage,t=!1,n=this._propertiesChanged;for(let i=0;i<U8;++i){let o=n[i]===0?Be.STATIC_DRAW:Be.STREAM_DRAW;t=t||e[i]!==o,e[i]=o}return t};function Yrt(e,t,n){return new LA(e,[{index:rl.positionHighAndSize,componentsPerAttribute:4,componentDatatype:H.FLOAT,usage:n[v8]},{index:rl.positionLowAndShow,componentsPerAttribute:4,componentDatatype:H.FLOAT,usage:n[v8]},{index:rl.compressedAttribute0,componentsPerAttribute:4,componentDatatype:H.FLOAT,usage:n[Bge]},{index:rl.compressedAttribute1,componentsPerAttribute:4,componentDatatype:H.FLOAT,usage:n[Nge]},{index:rl.scaleByDistance,componentsPerAttribute:4,componentDatatype:H.FLOAT,usage:n[wge]},{index:rl.distanceDisplayConditionAndDisableDepthAndSplitDirection,componentsPerAttribute:4,componentDatatype:H.FLOAT,usage:n[Pge]}],t)}var Y8=new In,k9=new U;function Yge(e,t,n,i){let o=i._index,r=i._getActualPosition();e._mode===se.SCENE3D&&(ue.expand(e._baseVolume,r,e._baseVolume),e._boundingVolumeDirty=!0),In.fromCartesian(r,Y8);let s=i.pixelSize,a=i.outlineWidth;e._maxPixelSize=Math.max(e._maxPixelSize,s+a);let c=n[rl.positionHighAndSize],d=Y8.high;c(o,d.x,d.y,d.z,s);let u=n[rl.positionLowAndOutline],h=Y8.low;u(o,h.x,h.y,h.z,a)}var Mrt=256;function Mge(e,t,n,i){let o=i._index,r=i.color,s=i.outlineColor,a=i.getPickId(t).color;k9.red=r.alpha,k9.green=s.alpha,k9.blue=a.alpha;let c=n[rl.compressedAttribute0];c(o,on.encodeRGB8(r),on.encodeRGB8(s),on.encodeRGB8(a),on.encodeRGB8(k9))}function vge(e,t,n,i){let o=i._index,r=0,s=1,a=1,c=1,d=i.translucencyByDistance;l(d)&&(r=d.near,s=d.nearValue,a=d.far,c=d.farValue,(s!==1||c!==1)&&(e._shaderTranslucencyByDistance=!0));let u=i.show&&i.clusterShow;i.color.alpha===0&&i.outlineColor.alpha===0&&(u=!1),s=L.clamp(s,0,1),s=s===1?255:s*255|0;let h=(u?1:0)*Mrt+s;c=L.clamp(c,0,1),c=c===1?255:c*255|0;let p=c,A=n[rl.compressedAttribute1];A(o,h,p,r,a)}function Uge(e,t,n,i){let o=i._index,r=n[rl.scaleByDistance],s=0,a=1,c=1,d=1,u=i.scaleByDistance;l(u)&&(s=u.near,a=u.nearValue,c=u.far,d=u.farValue,(a!==1||d!==1)&&(e._shaderScaleByDistance=!0)),r(o,s,a,c,d)}function Dge(e,t,n,i){let o=i._index,r=n[rl.distanceDisplayConditionAndDisableDepthAndSplitDirection],s=0,a=Number.MAX_VALUE,c=i.distanceDisplayCondition;l(c)&&(s=c.near,a=c.far,s*=s,a*=a,e._shaderDistanceDisplayCondition=!0);let d=i.disableDepthTestDistance;d*=d,d>0&&(e._shaderDisableDepthDistance=!0,d===Number.POSITIVE_INFINITY&&(d=-1));let u=0,h=i.splitDirection;l(h)&&(u=h),r(o,s,a,d,u)}function vrt(e,t,n,i){Yge(e,t,n,i),Mge(e,t,n,i),vge(e,t,n,i),Uge(e,t,n,i),Dge(e,t,n,i)}function M8(e,t,n,i,o,r){let s;i.mode===se.SCENE3D?(s=e._baseVolume,e._boundingVolumeDirty=!0):s=e._baseVolume2D;let a=[];for(let c=0;c<n;++c){let d=t[c],u=d.position,h=pa._computeActualPosition(u,i,o);l(h)&&(d._setActualPosition(h),r?a.push(h):ue.expand(s,h,s))}r&&ue.fromPoints(a,s)}function Urt(e,t){let n=t.mode,i=e._pointPrimitives,o=e._pointPrimitivesToUpdate,r=e._modelMatrix;e._createVertexArray||e._mode!==n||n!==se.SCENE3D&&!F.equals(r,e.modelMatrix)?(e._mode=n,F.clone(e.modelMatrix,r),e._createVertexArray=!0,(n===se.SCENE3D||n===se.SCENE2D||n===se.COLUMBUS_VIEW)&&M8(e,i,i.length,t,r,!0)):n===se.MORPHING?M8(e,i,i.length,t,r,!0):(n===se.SCENE2D||n===se.COLUMBUS_VIEW)&&M8(e,o,e._pointPrimitivesToUpdateIndex,t,r,!1)}function Drt(e,t,n){let o=t.camera.getPixelSize(n,t.context.drawingBufferWidth,t.context.drawingBufferHeight)*e._maxPixelSize;n.radius+=o}var krt=[];km.prototype.update=function(e){if(D8(this),!this.show)return;this._maxTotalPointSize=Bt.maximumAliasedPointSize,Urt(this,e);let n=this._pointPrimitives.length,i=this._pointPrimitivesToUpdate,o=this._pointPrimitivesToUpdateIndex,r=this._propertiesChanged,s=this._createVertexArray,a,c=e.context,d=e.passes,u=d.pick;if(s||!u&&this.computeNewBuffersUsage()){this._createVertexArray=!1;for(let R=0;R<U8;++R)r[R]=0;if(this._vaf=this._vaf&&this._vaf.destroy(),n>0){this._vaf=Yrt(c,n,this._buffersUsage),a=this._vaf.writers;for(let R=0;R<n;++R){let V=this._pointPrimitives[R];V._dirty=!1,vrt(this,c,a,V)}this._vaf.commit()}this._pointPrimitivesToUpdateIndex=0}else if(o>0){let R=krt;R.length=0,(r[v8]||r[wrt]||r[Nrt])&&R.push(Yge),(r[Bge]||r[Brt])&&R.push(Mge),(r[Frt]||r[Nge])&&R.push(vge),r[wge]&&R.push(Uge),(r[Pge]||r[Prt]||r[Xrt])&&R.push(Dge);let V=R.length;if(a=this._vaf.writers,o/n>.1){for(let W=0;W<o;++W){let B=i[W];B._dirty=!1;for(let N=0;N<V;++N)R[N](this,c,a,B)}this._vaf.commit()}else{for(let W=0;W<o;++W){let B=i[W];B._dirty=!1;for(let N=0;N<V;++N)R[N](this,c,a,B);this._vaf.subCommit(B._index,1)}this._vaf.endSubCommits()}this._pointPrimitivesToUpdateIndex=0}if(o>n*1.5&&(i.length=n),!l(this._vaf)||!l(this._vaf.va))return;this._boundingVolumeDirty&&(this._boundingVolumeDirty=!1,ue.transform(this._baseVolume,this.modelMatrix,this._baseVolumeWC));let h,p=F.IDENTITY;e.mode===se.SCENE3D?(p=this.modelMatrix,h=ue.clone(this._baseVolumeWC,this._boundingVolume)):h=ue.clone(this._baseVolume2D,this._boundingVolume),Drt(this,e,h);let A=this._blendOption!==this.blendOption;this._blendOption=this.blendOption,A&&(this._blendOption===$o.OPAQUE||this._blendOption===$o.OPAQUE_AND_TRANSLUCENT?this._rsOpaque=Qe.fromCache({depthTest:{enabled:!0,func:ne.LEQUAL},depthMask:!0}):this._rsOpaque=void 0,this._blendOption===$o.TRANSLUCENT||this._blendOption===$o.OPAQUE_AND_TRANSLUCENT?this._rsTranslucent=Qe.fromCache({depthTest:{enabled:!0,func:ne.LEQUAL},depthMask:!1,blending:ln.ALPHA_BLEND}):this._rsTranslucent=void 0),this._shaderDisableDepthDistance=this._shaderDisableDepthDistance||e.minimumDisableDepthTestDistance!==0;let f,b;(A||this._shaderScaleByDistance&&!this._compiledShaderScaleByDistance||this._shaderTranslucencyByDistance&&!this._compiledShaderTranslucencyByDistance||this._shaderDistanceDisplayCondition&&!this._compiledShaderDistanceDisplayCondition||this._shaderDisableDepthDistance!==this._compiledShaderDisableDepthDistance)&&(f=new ze({sources:[TN]}),this._shaderScaleByDistance&&f.defines.push("EYE_DISTANCE_SCALING"),this._shaderTranslucencyByDistance&&f.defines.push("EYE_DISTANCE_TRANSLUCENCY"),this._shaderDistanceDisplayCondition&&f.defines.push("DISTANCE_DISPLAY_CONDITION"),this._shaderDisableDepthDistance&&f.defines.push("DISABLE_DEPTH_DISTANCE"),this._blendOption===$o.OPAQUE_AND_TRANSLUCENT&&(b=new ze({defines:["OPAQUE"],sources:[sy]}),this._sp=tn.replaceCache({context:c,shaderProgram:this._sp,vertexShaderSource:f,fragmentShaderSource:b,attributeLocations:rl}),b=new ze({defines:["TRANSLUCENT"],sources:[sy]}),this._spTranslucent=tn.replaceCache({context:c,shaderProgram:this._spTranslucent,vertexShaderSource:f,fragmentShaderSource:b,attributeLocations:rl})),this._blendOption===$o.OPAQUE&&(b=new ze({sources:[sy]}),this._sp=tn.replaceCache({context:c,shaderProgram:this._sp,vertexShaderSource:f,fragmentShaderSource:b,attributeLocations:rl})),this._blendOption===$o.TRANSLUCENT&&(b=new ze({sources:[sy]}),this._spTranslucent=tn.replaceCache({context:c,shaderProgram:this._spTranslucent,vertexShaderSource:f,fragmentShaderSource:b,attributeLocations:rl})),this._compiledShaderScaleByDistance=this._shaderScaleByDistance,this._compiledShaderTranslucencyByDistance=this._shaderTranslucencyByDistance,this._compiledShaderDistanceDisplayCondition=this._shaderDistanceDisplayCondition,this._compiledShaderDisableDepthDistance=this._shaderDisableDepthDistance);let C,T,E,S,I=e.commandList;if(d.render||u){let R=this._colorCommands,V=this._blendOption===$o.OPAQUE,W=this._blendOption===$o.OPAQUE_AND_TRANSLUCENT;C=this._vaf.va,T=C.length,R.length=T;let B=W?T*2:T;for(S=0;S<B;++S){let N=V||W&&S%2===0;E=R[S],l(E)||(E=R[S]=new ot),E.primitiveType=We.POINTS,E.pass=N||!W?Ge.OPAQUE:Ge.TRANSLUCENT,E.owner=this;let P=W?Math.floor(S/2):S;E.boundingVolume=h,E.modelMatrix=p,E.shaderProgram=N?this._sp:this._spTranslucent,E.uniformMap=this._uniforms,E.vertexArray=C[P].va,E.renderState=N?this._rsOpaque:this._rsTranslucent,E.debugShowBoundingVolume=this.debugShowBoundingVolume,E.pickId="v_pickColor",I.push(E)}}};km.prototype.isDestroyed=function(){return!1};km.prototype.destroy=function(){return this._sp=this._sp&&this._sp.destroy(),this._spTranslucent=this._spTranslucent&&this._spTranslucent.destroy(),this._spPick=this._spPick&&this._spPick.destroy(),this._vaf=this._vaf&&this._vaf.destroy(),Xge(this._pointPrimitives),he(this)};var gI=km;function ff(e){e=e??Q.EMPTY_OBJECT,this._enabled=e.enabled??!1,this._pixelRange=e.pixelRange??80,this._minimumClusterSize=e.minimumClusterSize??2,this._clusterBillboards=e.clusterBillboards??!0,this._clusterLabels=e.clusterLabels??!0,this._clusterPoints=e.clusterPoints??!0,this._labelCollection=void 0,this._billboardCollection=void 0,this._pointCollection=void 0,this._clusterBillboardCollection=void 0,this._clusterLabelCollection=void 0,this._clusterPointCollection=void 0,this._collectionIndicesByEntity={},this._unusedLabelIndices=[],this._unusedBillboardIndices=[],this._unusedPointIndices=[],this._previousClusters=[],this._previousHeight=void 0,this._enabledDirty=!1,this._clusterDirty=!1,this._cluster=void 0,this._removeEventListener=void 0,this._clusterEvent=new xe,this.show=e.show??!0}function kge(e,t){e.x-=t,e.y-=t,e.width+=t*2,e.height+=t*2}var Qrt=new nt;function Qge(e,t,n,i,o){if(l(e._labelCollection)&&i._clusterLabels?o=D0.getScreenSpaceBoundingBox(e,t,o):l(e._billboardCollection)&&i._clusterBillboards?o=Lo.getScreenSpaceBoundingBox(e,t,o):l(e._pointPrimitiveCollection)&&i._clusterPoints&&(o=pa.getScreenSpaceBoundingBox(e,t,o)),kge(o,n),i._clusterLabels&&!l(e._labelCollection)&&l(e.id)&&zge(i,e.id.id)&&l(e.id._label)){let r=i._collectionIndicesByEntity[e.id.id].labelIndex,s=i._labelCollection.get(r),a=D0.getScreenSpaceBoundingBox(s,t,Qrt);kge(a,n),o=nt.union(o,a,o)}return o}function Ort(e,t){if(e.clusterShow=!0,!l(e._labelCollection)&&l(e.id)&&zge(t,e.id.id)&&l(e.id._label)){let n=t._collectionIndicesByEntity[e.id.id].labelIndex,i=t._labelCollection.get(n);i.clusterShow=!0}}function Oge(e,t,n,i){let o={billboard:i._clusterBillboardCollection.add(),label:i._clusterLabelCollection.add(),point:i._clusterPointCollection.add()};o.billboard.show=!1,o.point.show=!1,o.label.show=!0,o.label.text=t.toLocaleString(),o.label.id=n,o.billboard.position=o.label.position=o.point.position=e,i._clusterEvent.raiseEvent(n,o)}function zge(e,t){return l(e)&&l(e._collectionIndicesByEntity[t])&&l(e._collectionIndicesByEntity[t].labelIndex)}function k8(e,t,n,i,o){if(!l(e))return;let r=e.length;for(let s=0;s<r;++s){let a=e.get(s);if(a.clusterShow=!1,!a.show||o._scene.mode===se.SCENE3D&&!i.isPointVisible(a.position))continue;let c=o._clusterLabels&&l(a._labelCollection),d=o._clusterBillboards&&l(a.id._billboard),u=o._clusterPoints&&l(a.id._point);if(c&&(u||d))continue;let h=a.computeScreenSpacePosition(n);l(h)&&t.push({index:s,collection:e,clustered:!1,coord:h})}}var zrt=new nt,Hrt=new nt,Jrt=new nt;function Krt(e){return function(t){if(l(t)&&t<.05||!e.enabled)return;let n=e._scene,i=e._labelCollection,o=e._billboardCollection,r=e._pointCollection;if(!l(i)&&!l(o)&&!l(r)||!e._clusterBillboards&&!e._clusterLabels&&!e._clusterPoints)return;let s=e._clusterLabelCollection,a=e._clusterBillboardCollection,c=e._clusterPointCollection;l(s)?s.removeAll():s=e._clusterLabelCollection=new Sp({scene:n}),l(a)?a.removeAll():a=e._clusterBillboardCollection=new yu({scene:n}),l(c)?c.removeAll():c=e._clusterPointCollection=new gI;let d=e._pixelRange,u=e._minimumClusterSize,h=e._previousClusters,p=[],A=e._previousHeight,f=n.camera.positionCartographic.height,b=n.ellipsoid,C=n.camera.positionWC,T=new hf(b,C),E=[];e._clusterLabels&&k8(i,E,n,T,e),e._clusterBillboards&&k8(o,E,n,T,e),e._clusterPoints&&k8(r,E,n,T,e);let S,I,R,V,W,B,N,P,g,_,Z,G;if(E.length>0){let w=new rx(E.length,64,Float64Array);for(let X=0;X<E.length;++X)w.add(E[X].coord.x,E[X].coord.y);if(w.finish(),f<A)for(R=h.length,S=0;S<R;++S){let X=h[S];if(!T.isPointVisible(X.position))continue;let k=Lo._computeScreenSpacePosition(F.IDENTITY,X.position,m.ZERO,M.ZERO,n);if(!l(k))continue;let v=1-f/A,D=X.width=X.width*v,Y=X.height=X.height*v;D=Math.max(D,X.minimumWidth),Y=Math.max(Y,X.minimumHeight);let O=k.x-D*.5,J=k.y-Y*.5,te=k.x+D,z=k.y+Y;for(W=w.range(O,J,te,z),B=W.length,_=0,g=[],I=0;I<B;++I)N=W[I],P=E[N],P.clustered||(++_,Z=P.collection,G=P.index,g.push(Z.get(G).id));if(_>=u)for(Oge(X.position,_,g,e),p.push(X),I=0;I<B;++I)E[W[I]].clustered=!0}for(R=E.length,S=0;S<R;++S){let X=E[S];if(X.clustered)continue;X.clustered=!0,Z=X.collection,G=X.index;let k=Z.get(G);V=Qge(k,X.coord,d,e,zrt);let v=nt.clone(V,Hrt);W=w.range(V.x,V.y,V.x+V.width,V.y+V.height),B=W.length;let D=m.clone(k.position);for(_=1,g=[k.id],I=0;I<B;++I)if(N=W[I],P=E[N],!P.clustered){let Y=P.collection.get(P.index),O=Qge(Y,P.coord,d,e,Jrt);m.add(Y.position,D,D),nt.union(v,O,v),++_,g.push(Y.id)}if(_>=u){let Y=m.multiplyByScalar(D,1/_,D);for(Oge(Y,_,g,e),p.push({position:Y,width:v.width,height:v.height,minimumWidth:V.width,minimumHeight:V.height}),I=0;I<B;++I)E[W[I]].clustered=!0}else Ort(k,e)}}s.length===0&&(s.destroy(),e._clusterLabelCollection=void 0),a.length===0&&(a.destroy(),e._clusterBillboardCollection=void 0),c.length===0&&(c.destroy(),e._clusterPointCollection=void 0),e._previousClusters=p,e._previousHeight=f}}ff.prototype._initialize=function(e){this._scene=e;let t=Krt(this);this._cluster=t,this._removeEventListener=e.camera.changed.addEventListener(t)};Object.defineProperties(ff.prototype,{enabled:{get:function(){return this._enabled},set:function(e){this._enabledDirty=e!==this._enabled,this._enabled=e}},pixelRange:{get:function(){return this._pixelRange},set:function(e){this._clusterDirty=this._clusterDirty||e!==this._pixelRange,this._pixelRange=e}},minimumClusterSize:{get:function(){return this._minimumClusterSize},set:function(e){this._clusterDirty=this._clusterDirty||e!==this._minimumClusterSize,this._minimumClusterSize=e}},clusterEvent:{get:function(){return this._clusterEvent}},clusterBillboards:{get:function(){return this._clusterBillboards},set:function(e){this._clusterDirty=this._clusterDirty||e!==this._clusterBillboards,this._clusterBillboards=e}},clusterLabels:{get:function(){return this._clusterLabels},set:function(e){this._clusterDirty=this._clusterDirty||e!==this._clusterLabels,this._clusterLabels=e}},clusterPoints:{get:function(){return this._clusterPoints},set:function(e){this._clusterDirty=this._clusterDirty||e!==this._clusterPoints,this._clusterPoints=e}},ready:{get:function(){return!this._enabledDirty&&!this._clusterDirty&&(!l(this._billboardCollection)||this._billboardCollection.ready)&&(!l(this._labelCollection)||this._labelCollection.ready)}}});function O8(e,t,n,i){return function(o){let r=this[e];l(this._collectionIndicesByEntity)||(this._collectionIndicesByEntity={});let s=this._collectionIndicesByEntity[o.id];if(l(s)||(s=this._collectionIndicesByEntity[o.id]={billboardIndex:void 0,labelIndex:void 0,pointIndex:void 0}),l(r)&&l(s[i]))return r.get(s[i]);l(r)||(r=this[e]=new t({scene:this._scene}));let a,c,d=this[n];d.length>0?(a=d.shift(),c=r.get(a)):(c=r.add(),a=r.length-1),s[i]=a;let u=this;return Promise.resolve().then(function(){u._clusterDirty=!0}),c}}function z8(e,t){let n=e._collectionIndicesByEntity[t];!l(n.billboardIndex)&&!l(n.labelIndex)&&!l(n.pointIndex)&&delete e._collectionIndicesByEntity[t]}ff.prototype.getLabel=O8("_labelCollection",Sp,"_unusedLabelIndices","labelIndex");ff.prototype.removeLabel=function(e){let t=this._collectionIndicesByEntity&&this._collectionIndicesByEntity[e.id];if(!l(this._labelCollection)||!l(t)||!l(t.labelIndex))return;let n=t.labelIndex;t.labelIndex=void 0,z8(this,e.id);let i=this._labelCollection.get(n);i.show=!1,i.text="",i.id=void 0,this._unusedLabelIndices.push(n),this._clusterDirty=!0};ff.prototype.getBillboard=O8("_billboardCollection",yu,"_unusedBillboardIndices","billboardIndex");ff.prototype.removeBillboard=function(e){let t=this._collectionIndicesByEntity&&this._collectionIndicesByEntity[e.id];if(!l(this._billboardCollection)||!l(t)||!l(t.billboardIndex))return;let n=t.billboardIndex;t.billboardIndex=void 0,z8(this,e.id);let i=this._billboardCollection.get(n);i.id=void 0,i.show=!1,i.image=void 0,this._unusedBillboardIndices.push(n),this._clusterDirty=!0};ff.prototype.getPoint=O8("_pointCollection",gI,"_unusedPointIndices","pointIndex");ff.prototype.removePoint=function(e){let t=this._collectionIndicesByEntity&&this._collectionIndicesByEntity[e.id];if(!l(this._pointCollection)||!l(t)||!l(t.pointIndex))return;let n=t.pointIndex;t.pointIndex=void 0,z8(this,e.id);let i=this._pointCollection.get(n);i.show=!1,i.id=void 0,this._unusedPointIndices.push(n),this._clusterDirty=!0};function Q8(e){if(!l(e))return;let t=e.length;for(let n=0;n<t;++n)e.get(n).clusterShow=!0}function jrt(e){e.enabled||(l(e._clusterLabelCollection)&&e._clusterLabelCollection.destroy(),l(e._clusterBillboardCollection)&&e._clusterBillboardCollection.destroy(),l(e._clusterPointCollection)&&e._clusterPointCollection.destroy(),e._clusterLabelCollection=void 0,e._clusterBillboardCollection=void 0,e._clusterPointCollection=void 0,Q8(e._labelCollection),Q8(e._billboardCollection),Q8(e._pointCollection))}ff.prototype.update=function(e){if(!this.show)return;let t,n=this._labelCollection;l(n)&&n.length>0&&!n.ready&&(t=e.commandList,e.commandList=[],n.update(e),e.commandList=t);let i=this._billboardCollection;l(i)&&i.length>0&&!i.ready&&(t=e.commandList,e.commandList=[],i.update(e),e.commandList=t),this._enabledDirty&&(this._enabledDirty=!1,jrt(this),this._clusterDirty=!0),this._clusterDirty&&(this._cluster(),this._clusterDirty=l(n)&&!n.ready||l(i)&&!i.ready),l(this._clusterLabelCollection)&&this._clusterLabelCollection.update(e),l(this._clusterBillboardCollection)&&this._clusterBillboardCollection.update(e),l(this._clusterPointCollection)&&this._clusterPointCollection.update(e),l(n)&&n.update(e),l(i)&&i.update(e),l(this._pointCollection)&&this._pointCollection.update(e)};ff.prototype.destroy=function(){l(this._removeEventListener)&&(this._removeEventListener(),this._removeEventListener=void 0),this._labelCollection=this._labelCollection&&this._labelCollection.destroy(),this._billboardCollection=this._billboardCollection&&this._billboardCollection.destroy(),this._pointCollection=this._pointCollection&&this._pointCollection.destroy(),this._clusterLabelCollection=this._clusterLabelCollection&&this._clusterLabelCollection.destroy(),this._clusterBillboardCollection=this._clusterBillboardCollection&&this._clusterBillboardCollection.destroy(),this._clusterPointCollection=this._clusterPointCollection&&this._clusterPointCollection.destroy(),this._labelCollection=void 0,this._billboardCollection=void 0,this._pointCollection=void 0,this._clusterBillboardCollection=void 0,this._clusterLabelCollection=void 0,this._clusterPointCollection=void 0,this._collectionIndicesByEntity=void 0,this._unusedLabelIndices=[],this._unusedBillboardIndices=[],this._unusedPointIndices=[],this._previousClusters=[],this._previousHeight=void 0,this._enabledDirty=!1,this._pixelRangeDirty=!1,this._minimumClusterSizeDirty=!1};var _u=ff;function H8(e){this._name=e,this._clock=void 0,this._changed=new xe,this._error=new xe,this._isLoading=!1,this._loading=new xe,this._entityCollection=new Ya(this),this._entityCluster=new _u}Object.defineProperties(H8.prototype,{name:{get:function(){return this._name},set:function(e){this._name!==e&&(this._name=e,this._changed.raiseEvent(this))}},clock:{get:function(){return this._clock},set:function(e){this._clock!==e&&(this._clock=e,this._changed.raiseEvent(this))}},entities:{get:function(){return this._entityCollection}},isLoading:{get:function(){return this._isLoading},set:function(e){ys.setLoading(this,e)}},changedEvent:{get:function(){return this._changed}},errorEvent:{get:function(){return this._error}},loadingEvent:{get:function(){return this._loading}},show:{get:function(){return this._entityCollection.show},set:function(e){this._entityCollection.show=e}},clustering:{get:function(){return this._entityCluster},set:function(e){this._entityCluster=e}}});H8.prototype.update=function(e){return!0};var EN=H8;var wgi=y(x(),1);var qAi=y(x(),1);var wAi=y(x(),1);var Hge={};Hge.computePositions=function(e,t,n,i,o){let r=e*.5,s=-r,a=i+i,c=o?2*a:a,d=new Float64Array(c*3),u,h=0,p=0,A=o?a*3:0,f=o?(a+i)*3:i*3;for(u=0;u<i;u++){let b=u/i*L.TWO_PI,C=Math.cos(b),T=Math.sin(b),E=C*n,S=T*n,I=C*t,R=T*t;d[p+A]=E,d[p+A+1]=S,d[p+A+2]=s,d[p+f]=I,d[p+f+1]=R,d[p+f+2]=r,p+=3,o&&(d[h++]=E,d[h++]=S,d[h++]=s,d[h++]=I,d[h++]=R,d[h++]=r)}return d};var fT=Hge;var J8=new M,qrt=new m,$rt=new m,est=new m,tst=new m;function Hg(e){e=e??Q.EMPTY_OBJECT;let t=e.length,n=e.topRadius,i=e.bottomRadius,o=e.vertexFormat??ve.DEFAULT,r=e.slices??128;this._length=t,this._topRadius=n,this._bottomRadius=i,this._vertexFormat=ve.clone(o),this._slices=r,this._offsetAttribute=e.offsetAttribute,this._workerName="createCylinderGeometry"}Hg.packedLength=ve.packedLength+5;Hg.pack=function(e,t,n){return n=n??0,ve.pack(e._vertexFormat,t,n),n+=ve.packedLength,t[n++]=e._length,t[n++]=e._topRadius,t[n++]=e._bottomRadius,t[n++]=e._slices,t[n]=e._offsetAttribute??-1,t};var Jge=new ve,bI={vertexFormat:Jge,length:void 0,topRadius:void 0,bottomRadius:void 0,slices:void 0,offsetAttribute:void 0};Hg.unpack=function(e,t,n){t=t??0;let i=ve.unpack(e,t,Jge);t+=ve.packedLength;let o=e[t++],r=e[t++],s=e[t++],a=e[t++],c=e[t];return l(n)?(n._vertexFormat=ve.clone(i,n._vertexFormat),n._length=o,n._topRadius=r,n._bottomRadius=s,n._slices=a,n._offsetAttribute=c===-1?void 0:c,n):(bI.length=o,bI.topRadius=r,bI.bottomRadius=s,bI.slices=a,bI.offsetAttribute=c===-1?void 0:c,new Hg(bI))};Hg.createGeometry=function(e){let t=e._length,n=e._topRadius,i=e._bottomRadius,o=e._vertexFormat,r=e._slices;if(t<=0||n<0||i<0||n===0&&i===0)return;let s=r+r,a=r+s,c=s+s,d=fT.computePositions(t,n,i,r,!0),u=o.st?new Float32Array(c*2):void 0,h=o.normal?new Float32Array(c*3):void 0,p=o.tangent?new Float32Array(c*3):void 0,A=o.bitangent?new Float32Array(c*3):void 0,f,b=o.normal||o.tangent||o.bitangent;if(b){let W=o.tangent||o.bitangent,B=0,N=0,P=0,g=Math.atan2(i-n,t),_=qrt;_.z=Math.sin(g);let Z=Math.cos(g),G=est,w=$rt;for(f=0;f<r;f++){let X=f/r*L.TWO_PI,k=Z*Math.cos(X),v=Z*Math.sin(X);b&&(_.x=k,_.y=v,W&&(G=m.normalize(m.cross(m.UNIT_Z,_,G),G)),o.normal&&(h[B++]=_.x,h[B++]=_.y,h[B++]=_.z,h[B++]=_.x,h[B++]=_.y,h[B++]=_.z),o.tangent&&(p[N++]=G.x,p[N++]=G.y,p[N++]=G.z,p[N++]=G.x,p[N++]=G.y,p[N++]=G.z),o.bitangent&&(w=m.normalize(m.cross(_,G,w),w),A[P++]=w.x,A[P++]=w.y,A[P++]=w.z,A[P++]=w.x,A[P++]=w.y,A[P++]=w.z))}for(f=0;f<r;f++)o.normal&&(h[B++]=0,h[B++]=0,h[B++]=-1),o.tangent&&(p[N++]=1,p[N++]=0,p[N++]=0),o.bitangent&&(A[P++]=0,A[P++]=-1,A[P++]=0);for(f=0;f<r;f++)o.normal&&(h[B++]=0,h[B++]=0,h[B++]=1),o.tangent&&(p[N++]=1,p[N++]=0,p[N++]=0),o.bitangent&&(A[P++]=0,A[P++]=1,A[P++]=0)}let C=12*r-12,T=Ue.createTypedArray(c,C),E=0,S=0;for(f=0;f<r-1;f++)T[E++]=S,T[E++]=S+2,T[E++]=S+3,T[E++]=S,T[E++]=S+3,T[E++]=S+1,S+=2;for(T[E++]=s-2,T[E++]=0,T[E++]=1,T[E++]=s-2,T[E++]=1,T[E++]=s-1,f=1;f<r-1;f++)T[E++]=s+f+1,T[E++]=s+f,T[E++]=s;for(f=1;f<r-1;f++)T[E++]=a,T[E++]=a+f,T[E++]=a+f+1;let I=0;if(o.st){let W=Math.max(n,i);for(f=0;f<c;f++){let B=m.fromArray(d,f*3,tst);u[I++]=(B.x+W)/(2*W),u[I++]=(B.y+W)/(2*W)}}let R=new xn;o.position&&(R.position=new we({componentDatatype:H.DOUBLE,componentsPerAttribute:3,values:d})),o.normal&&(R.normal=new we({componentDatatype:H.FLOAT,componentsPerAttribute:3,values:h})),o.tangent&&(R.tangent=new we({componentDatatype:H.FLOAT,componentsPerAttribute:3,values:p})),o.bitangent&&(R.bitangent=new we({componentDatatype:H.FLOAT,componentsPerAttribute:3,values:A})),o.st&&(R.st=new we({componentDatatype:H.FLOAT,componentsPerAttribute:2,values:u})),J8.x=t*.5,J8.y=Math.max(i,n);let V=new ue(m.ZERO,M.magnitude(J8));if(l(e._offsetAttribute)){t=d.length;let W=e._offsetAttribute===An.NONE?0:1,B=new Uint8Array(t/3).fill(W);R.applyOffset=new we({componentDatatype:H.UNSIGNED_BYTE,componentsPerAttribute:1,values:B})}return new Ct({attributes:R,indices:T,primitiveType:We.TRIANGLES,boundingSphere:V,offsetAttribute:e._offsetAttribute})};var K8;Hg.getUnitCylinder=function(){return l(K8)||(K8=Hg.createGeometry(new Hg({topRadius:1,bottomRadius:1,length:1,vertexFormat:ve.POSITION_ONLY}))),K8};var SN=Hg;var hgi=y(x(),1);var j8=new M;function yI(e){e=e??Q.EMPTY_OBJECT;let t=e.length,n=e.topRadius,i=e.bottomRadius,o=e.slices??128,r=Math.max(e.numberOfVerticalLines??16,0);this._length=t,this._topRadius=n,this._bottomRadius=i,this._slices=o,this._numberOfVerticalLines=r,this._offsetAttribute=e.offsetAttribute,this._workerName="createCylinderOutlineGeometry"}yI.packedLength=6;yI.pack=function(e,t,n){return n=n??0,t[n++]=e._length,t[n++]=e._topRadius,t[n++]=e._bottomRadius,t[n++]=e._slices,t[n++]=e._numberOfVerticalLines,t[n]=e._offsetAttribute??-1,t};var pT={length:void 0,topRadius:void 0,bottomRadius:void 0,slices:void 0,numberOfVerticalLines:void 0,offsetAttribute:void 0};yI.unpack=function(e,t,n){t=t??0;let i=e[t++],o=e[t++],r=e[t++],s=e[t++],a=e[t++],c=e[t];return l(n)?(n._length=i,n._topRadius=o,n._bottomRadius=r,n._slices=s,n._numberOfVerticalLines=a,n._offsetAttribute=c===-1?void 0:c,n):(pT.length=i,pT.topRadius=o,pT.bottomRadius=r,pT.slices=s,pT.numberOfVerticalLines=a,pT.offsetAttribute=c===-1?void 0:c,new yI(pT))};yI.createGeometry=function(e){let t=e._length,n=e._topRadius,i=e._bottomRadius,o=e._slices,r=e._numberOfVerticalLines;if(t<=0||n<0||i<0||n===0&&i===0)return;let s=o*2,a=fT.computePositions(t,n,i,o,!1),c=o*2,d;if(r>0){let b=Math.min(r,o);d=Math.round(o/b),c+=b}let u=Ue.createTypedArray(s,c*2),h=0,p;for(p=0;p<o-1;p++)u[h++]=p,u[h++]=p+1,u[h++]=p+o,u[h++]=p+1+o;if(u[h++]=o-1,u[h++]=0,u[h++]=o+o-1,u[h++]=o,r>0)for(p=0;p<o;p+=d)u[h++]=p,u[h++]=p+o;let A=new xn;A.position=new we({componentDatatype:H.DOUBLE,componentsPerAttribute:3,values:a}),j8.x=t*.5,j8.y=Math.max(i,n);let f=new ue(m.ZERO,M.magnitude(j8));if(l(e._offsetAttribute)){t=a.length;let b=e._offsetAttribute===An.NONE?0:1,C=new Uint8Array(t/3).fill(b);A.applyOffset=new we({componentDatatype:H.UNSIGNED_BYTE,componentsPerAttribute:1,values:C})}return new Ct({attributes:A,indices:u,primitiveType:We.LINES,boundingSphere:f,offsetAttribute:e._offsetAttribute})};var _N=yI;var Kge=m.ZERO,jge=new m,nst=new m,qge=new U;function ist(e){this.id=e,this.vertexFormat=void 0,this.length=void 0,this.topRadius=void 0,this.bottomRadius=void 0,this.slices=void 0,this.numberOfVerticalLines=void 0,this.offsetAttribute=void 0}function Iu(e,t){Si.call(this,{entity:e,scene:t,geometryOptions:new ist(e),geometryPropertyName:"cylinder",observedPropertyNames:["availability","position","orientation","cylinder"]}),this._onEntityPropertyChanged(e,"cylinder",e.cylinder,void 0)}l(Object.create)&&(Iu.prototype=Object.create(Si.prototype),Iu.prototype.constructor=Iu);Object.defineProperties(Iu.prototype,{terrainOffsetProperty:{get:function(){return this._terrainOffsetProperty}}});Iu.prototype.createFillGeometryInstance=function(e){let t=this._entity,n=t.isAvailable(e),i=new Rn(n&&t.isShowing&&this._showProperty.getValue(e)&&this._fillProperty.getValue(e)),o=this._distanceDisplayConditionProperty.getValue(e),r=ei.fromDistanceDisplayCondition(o),s={show:i,distanceDisplayCondition:r,color:void 0,offset:void 0};if(this._materialProperty instanceof Kt){let a;l(this._materialProperty.color)&&(this._materialProperty.color.isConstant||n)&&(a=this._materialProperty.color.getValue(e,qge)),l(a)||(a=U.WHITE),s.color=$t.fromColor(a)}return l(this._options.offsetAttribute)&&(s.offset=Ao.fromCartesian3(K.getValueOrDefault(this._terrainOffsetProperty,e,Kge,jge))),new wt({id:t,geometry:new SN(this._options),modelMatrix:t.computeModelMatrixForHeightReference(e,t.cylinder.heightReference,this._options.length*.5,this._scene.ellipsoid),attributes:s})};Iu.prototype.createOutlineGeometryInstance=function(e){let t=this._entity,n=t.isAvailable(e),i=K.getValueOrDefault(this._outlineColorProperty,e,U.BLACK,qge),o=this._distanceDisplayConditionProperty.getValue(e),r={show:new Rn(n&&t.isShowing&&this._showProperty.getValue(e)&&this._showOutlineProperty.getValue(e)),color:$t.fromColor(i),distanceDisplayCondition:ei.fromDistanceDisplayCondition(o),offset:void 0};return l(this._options.offsetAttribute)&&(r.offset=Ao.fromCartesian3(K.getValueOrDefault(this._terrainOffsetProperty,e,Kge,jge))),new wt({id:t,geometry:new _N(this._options),modelMatrix:t.computeModelMatrixForHeightReference(e,t.cylinder.heightReference,this._options.length*.5,this._scene.ellipsoid),attributes:r})};Iu.prototype._computeCenter=function(e,t){return K.getValueOrUndefined(this._entity.position,e,t)};Iu.prototype._isHidden=function(e,t){return!l(e.position)||!l(t.length)||!l(t.topRadius)||!l(t.bottomRadius)||Si.prototype._isHidden.call(this,e,t)};Iu.prototype._isDynamic=function(e,t){return!e.position.isConstant||!K.isConstant(e.orientation)||!t.length.isConstant||!t.topRadius.isConstant||!t.bottomRadius.isConstant||!K.isConstant(t.slices)||!K.isConstant(t.outlineWidth)||!K.isConstant(t.numberOfVerticalLines)};Iu.prototype._setStaticOptions=function(e,t){let n=K.getValueOrDefault(t.heightReference,qe.MINIMUM_VALUE,rt.NONE),i=this._options;i.vertexFormat=this._materialProperty instanceof Kt?yn.VERTEX_FORMAT:go.MaterialSupport.TEXTURED.vertexFormat,i.length=t.length.getValue(qe.MINIMUM_VALUE),i.topRadius=t.topRadius.getValue(qe.MINIMUM_VALUE),i.bottomRadius=t.bottomRadius.getValue(qe.MINIMUM_VALUE),i.slices=K.getValueOrUndefined(t.slices,qe.MINIMUM_VALUE),i.numberOfVerticalLines=K.getValueOrUndefined(t.numberOfVerticalLines,qe.MINIMUM_VALUE),i.offsetAttribute=n!==rt.NONE?An.ALL:void 0};Iu.prototype._onEntityPropertyChanged=kA;Iu.DynamicGeometryUpdater=xI;function xI(e,t,n){Ei.call(this,e,t,n)}l(Object.create)&&(xI.prototype=Object.create(Ei.prototype),xI.prototype.constructor=xI);xI.prototype._isHidden=function(e,t,n){let i=this._options,o=K.getValueOrUndefined(e.position,n,nst);return!l(o)||!l(i.length)||!l(i.topRadius)||!l(i.bottomRadius)||Ei.prototype._isHidden.call(this,e,t,n)};xI.prototype._setOptions=function(e,t,n){let i=K.getValueOrDefault(t.heightReference,n,rt.NONE),o=this._options;o.length=K.getValueOrUndefined(t.length,n),o.topRadius=K.getValueOrUndefined(t.topRadius,n),o.bottomRadius=K.getValueOrUndefined(t.bottomRadius,n),o.slices=K.getValueOrUndefined(t.slices,n),o.numberOfVerticalLines=K.getValueOrUndefined(t.numberOfVerticalLines,n),o.offsetAttribute=i!==rt.NONE?An.ALL:void 0};var IN=Iu;var wCi=y(x(),1);var Pgi=y(x(),1),ost={UNBOUNDED:0,CLAMPED:1,LOOP_STOP:2},xs=Object.freeze(ost);var Ygi=y(x(),1),rst={TICK_DEPENDENT:0,SYSTEM_CLOCK_MULTIPLIER:1,SYSTEM_CLOCK:2},Xo=Object.freeze(rst);var vgi=y(x(),1),sst={NONE:0,HOLD:1,EXTRAPOLATE:2},Zu=Object.freeze(sst);var Dgi=y(x(),1),$ge=y(qd(),1);function ast(e){let t=new $ge.default(e);t.normalize();let n=t.path(),i=n.lastIndexOf("/");return i!==-1&&(n=n.substr(i+1)),n}var Jg=ast;var zgi=y(x(),1);var cst=L.factorial;function q8(e,t,n,i,o,r){let s=0,a,c,d;if(i>0){for(c=0;c<o;c++){for(a=!1,d=0;d<r.length&&!a;d++)c===r[d]&&(a=!0);a||(r.push(c),s+=q8(e,t,n,i-1,o,r),r.splice(r.length-1,1))}return s}for(s=1,c=0;c<o;c++){for(a=!1,d=0;d<r.length&&!a;d++)c===r[d]&&(a=!0);a||(s*=e-n[t[c]])}return s}var Q9={type:"Hermite"};Q9.getRequiredDataPoints=function(e,t){return t=t??0,Math.max(Math.floor((e+1)/(t+1)),2)};Q9.interpolateOrderZero=function(e,t,n,i,o){l(o)||(o=new Array(i));let r,s,a,c,d,u,h=t.length,p=new Array(i);for(r=0;r<i;r++){o[r]=0;let C=new Array(h);for(p[r]=C,s=0;s<h;s++)C[s]=[]}let A=h,f=new Array(A);for(r=0;r<A;r++)f[r]=r;let b=h-1;for(c=0;c<i;c++){for(s=0;s<A;s++)u=f[s]*i+c,p[c][0].push(n[u]);for(r=1;r<A;r++){let C=!1;for(s=0;s<A-r;s++){let T=t[f[s]],E=t[f[s+r]],S;E-T<=0?(u=f[s]*i+i*r+c,S=n[u],p[c][r].push(S/cst(r))):(S=p[c][r-1][s+1]-p[c][r-1][s],p[c][r].push(S/(E-T))),C=C||S!==0}C||(b=r-1)}}for(a=0,d=0;a<=d;a++)for(r=a;r<=b;r++){let C=q8(e,f,t,a,r,[]);for(c=0;c<i;c++){let T=p[c][r][0];o[c+a*i]+=T*C}}return o};var lst=[];Q9.interpolate=function(e,t,n,i,o,r,s){let a=i*(r+1);l(s)||(s=new Array(a));for(let T=0;T<a;T++)s[T]=0;let c=t.length,d=new Array(c*(o+1)),u;for(u=0;u<c;u++)for(let T=0;T<o+1;T++)d[u*(o+1)+T]=u;let h=d.length,p=lst,A=dst(p,d,t,n,i,o),f=[],b=h*(h+1)/2,C=Math.min(A,r);for(let T=0;T<=C;T++)for(u=T;u<=A;u++){f.length=0;let E=q8(e,d,t,T,u,f),S=Math.floor(u*(1-u)/2)+h*u;for(let I=0;I<i;I++){let R=Math.floor(I*b),V=p[R+S];s[I+T*i]+=V*E}}return s};function dst(e,t,n,i,o,r){let s,a,c=-1,d=t.length,u=d*(d+1)/2;for(let h=0;h<o;h++){let p=Math.floor(h*u);for(s=0;s<d;s++)a=t[s]*o*(r+1)+h,e[p+s]=i[a];for(let A=1;A<d;A++){let f=0,b=Math.floor(A*(1-A)/2)+d*A,C=!1;for(s=0;s<d-A;s++){let T=n[t[s]],E=n[t[s+A]],S,I;if(E-T<=0)a=t[s]*o*(r+1)+o*A+h,S=i[a],I=S/L.factorial(A),e[p+b+f]=I,f++;else{let R=Math.floor((A-1)*(2-A)/2)+d*(A-1);S=e[p+R+s+1]-e[p+R+s],I=S/(E-T),e[p+b+f]=I,f++}C=C||S!==0}C&&(c=Math.max(c,A))}}return c}var ZN=Q9;var Kgi=y(x(),1);var $8={type:"Lagrange"};$8.getRequiredDataPoints=function(e){return Math.max(e+1,2)};$8.interpolateOrderZero=function(e,t,n,i,o){l(o)||(o=new Array(i));let r,s,a=t.length;for(r=0;r<i;r++)o[r]=0;for(r=0;r<a;r++){let c=1;for(s=0;s<a;s++)if(s!==r){let d=t[r]-t[s];c*=(e-t[s])/d}for(s=0;s<i;s++)o[s]+=c*n[r*i+s]}return o};var RN=$8;var $gi=y(x(),1);var e7={type:"Linear"};e7.getRequiredDataPoints=function(e){return 2};e7.interpolateOrderZero=function(e,t,n,i,o){l(o)||(o=new Array(i));let r,s,a,c=t[0],d=t[1];for(r=0;r<i;r++)s=n[r],a=n[r+i],o[r]=((a-s)*e+d*s-c*a)/(d-c);return o};var AT=e7;var nbi=y(x(),1);function sl(e,t,n){this.clock=e??0,this.cone=t??0,this.magnitude=n??1}sl.fromCartesian3=function(e,t){let n=e.x,i=e.y,o=e.z,r=n*n+i*i;return l(t)||(t=new sl),t.clock=Math.atan2(i,n),t.cone=Math.atan2(Math.sqrt(r),o),t.magnitude=Math.sqrt(r+o*o),t};sl.clone=function(e,t){if(l(e))return l(t)?(t.clock=e.clock,t.cone=e.cone,t.magnitude=e.magnitude,t):new sl(e.clock,e.cone,e.magnitude)};sl.normalize=function(e,t){return l(t)?(t.clock=e.clock,t.cone=e.cone,t.magnitude=1,t):new sl(e.clock,e.cone,1)};sl.equals=function(e,t){return e===t||l(e)&&l(t)&&e.clock===t.clock&&e.cone===t.cone&&e.magnitude===t.magnitude};sl.equalsEpsilon=function(e,t,n){return n=n??0,e===t||l(e)&&l(t)&&Math.abs(e.clock-t.clock)<=n&&Math.abs(e.cone-t.cone)<=n&&Math.abs(e.magnitude-t.magnitude)<=n};sl.prototype.equals=function(e){return sl.equals(this,e)};sl.prototype.clone=function(e){return sl.clone(this,e)};sl.prototype.equalsEpsilon=function(e,t){return sl.equalsEpsilon(this,e,t)};sl.prototype.toString=function(){return`(${this.clock}, ${this.cone}, ${this.magnitude})`};var VN=sl;var BN=y(qd(),1);var xbi=y(x(),1);var hbi=y(x(),1);var obi=y(x(),1),t7;typeof performance<"u"&&typeof performance.now=="function"&&isFinite(performance.now())?t7=function(){return performance.now()}:t7=function(){return Date.now()};var Xi=t7;function n7(e){e=e??Q.EMPTY_OBJECT;let t=e.currentTime,n=e.startTime,i=e.stopTime;l(t)?t=q.clone(t):l(n)?t=q.clone(n):l(i)?t=q.addDays(i,-1,new q):t=q.now(),l(n)?n=q.clone(n):n=q.clone(t),l(i)?i=q.clone(i):i=q.addDays(n,1,new q),this.startTime=n,this.stopTime=i,this.clockRange=e.clockRange??xs.UNBOUNDED,this.canAnimate=e.canAnimate??!0,this.onTick=new xe,this.onStop=new xe,this._currentTime=void 0,this._multiplier=void 0,this._clockStep=void 0,this._shouldAnimate=void 0,this._lastSystemTime=Xi(),this.currentTime=t,this.multiplier=e.multiplier??1,this.shouldAnimate=e.shouldAnimate??!1,this.clockStep=e.clockStep??Xo.SYSTEM_CLOCK_MULTIPLIER}Object.defineProperties(n7.prototype,{currentTime:{get:function(){return this._currentTime},set:function(e){q.equals(this._currentTime,e)||(this._clockStep===Xo.SYSTEM_CLOCK&&(this._clockStep=Xo.SYSTEM_CLOCK_MULTIPLIER),this._currentTime=e)}},multiplier:{get:function(){return this._multiplier},set:function(e){this._multiplier!==e&&(this._clockStep===Xo.SYSTEM_CLOCK&&(this._clockStep=Xo.SYSTEM_CLOCK_MULTIPLIER),this._multiplier=e)}},clockStep:{get:function(){return this._clockStep},set:function(e){e===Xo.SYSTEM_CLOCK&&(this._multiplier=1,this._shouldAnimate=!0,this._currentTime=q.now()),this._clockStep=e}},shouldAnimate:{get:function(){return this._shouldAnimate},set:function(e){this._shouldAnimate!==e&&(this._clockStep===Xo.SYSTEM_CLOCK&&(this._clockStep=Xo.SYSTEM_CLOCK_MULTIPLIER),this._shouldAnimate=e)}}});n7.prototype.tick=function(){let e=Xi(),t=q.clone(this._currentTime);if(this.canAnimate&&this._shouldAnimate){let n=this._clockStep;if(n===Xo.SYSTEM_CLOCK)t=q.now(t);else{let i=this._multiplier;if(n===Xo.TICK_DEPENDENT)t=q.addSeconds(t,i,t);else{let a=e-this._lastSystemTime;t=q.addSeconds(t,i*(a/1e3),t)}let o=this.clockRange,r=this.startTime,s=this.stopTime;if(o===xs.CLAMPED)q.lessThan(t,r)?t=q.clone(r,t):q.greaterThan(t,s)&&(t=q.clone(s,t),this.onStop.raiseEvent(this));else if(o===xs.LOOP_STOP)for(q.lessThan(t,r)&&(t=q.clone(r,t));q.greaterThan(t,s);)t=q.addSeconds(r,q.secondsDifference(t,s),t),this.onStop.raiseEvent(this)}}return this._currentTime=t,this._lastSystemTime=e,this.onTick.raiseEvent(this),t};var pf=n7;function gT(){this._definitionChanged=new xe,this._startTime=void 0,this._stopTime=void 0,this._currentTime=void 0,this._clockRange=void 0,this._clockStep=void 0,this._multiplier=void 0}Object.defineProperties(gT.prototype,{definitionChanged:{get:function(){return this._definitionChanged}},startTime:Vl("startTime"),stopTime:Vl("stopTime"),currentTime:Vl("currentTime"),clockRange:Vl("clockRange"),clockStep:Vl("clockStep"),multiplier:Vl("multiplier")});gT.prototype.clone=function(e){return l(e)||(e=new gT),e.startTime=this.startTime,e.stopTime=this.stopTime,e.currentTime=this.currentTime,e.clockRange=this.clockRange,e.clockStep=this.clockStep,e.multiplier=this.multiplier,e};gT.prototype.equals=function(e){return this===e||l(e)&&q.equals(this.startTime,e.startTime)&&q.equals(this.stopTime,e.stopTime)&&q.equals(this.currentTime,e.currentTime)&&this.clockRange===e.clockRange&&this.clockStep===e.clockStep&&this.multiplier===e.multiplier};gT.prototype.merge=function(e){this.startTime=this.startTime??e.startTime,this.stopTime=this.stopTime??e.stopTime,this.currentTime=this.currentTime??e.currentTime,this.clockRange=this.clockRange??e.clockRange,this.clockStep=this.clockStep??e.clockStep,this.multiplier=this.multiplier??e.multiplier};gT.prototype.getValue=function(e){return l(e)||(e=new pf),e.startTime=this.startTime??e.startTime,e.stopTime=this.stopTime??e.stopTime,e.currentTime=this.currentTime??e.currentTime,e.clockRange=this.clockRange??e.clockRange,e.multiplier=this.multiplier??e.multiplier,e.clockStep=this.clockStep??e.clockStep,e};var Af=gT;var Gbi=y(x(),1);var ust=U.WHITE,mst=.1,hst=new M(8,8),fst=new M(0,0),pst=new M(1,1);function CI(e){e=e??Q.EMPTY_OBJECT,this._definitionChanged=new xe,this._color=void 0,this._colorSubscription=void 0,this._cellAlpha=void 0,this._cellAlphaSubscription=void 0,this._lineCount=void 0,this._lineCountSubscription=void 0,this._lineThickness=void 0,this._lineThicknessSubscription=void 0,this._lineOffset=void 0,this._lineOffsetSubscription=void 0,this.color=e.color,this.cellAlpha=e.cellAlpha,this.lineCount=e.lineCount,this.lineThickness=e.lineThickness,this.lineOffset=e.lineOffset}Object.defineProperties(CI.prototype,{isConstant:{get:function(){return K.isConstant(this._color)&&K.isConstant(this._cellAlpha)&&K.isConstant(this._lineCount)&&K.isConstant(this._lineThickness)&&K.isConstant(this._lineOffset)}},definitionChanged:{get:function(){return this._definitionChanged}},color:be("color"),cellAlpha:be("cellAlpha"),lineCount:be("lineCount"),lineThickness:be("lineThickness"),lineOffset:be("lineOffset")});CI.prototype.getType=function(e){return"Grid"};var Ast=new q;CI.prototype.getValue=function(e,t){return l(e)||(e=q.now(Ast)),l(t)||(t={}),t.color=K.getValueOrClonedDefault(this._color,e,ust,t.color),t.cellAlpha=K.getValueOrDefault(this._cellAlpha,e,mst),t.lineCount=K.getValueOrClonedDefault(this._lineCount,e,hst,t.lineCount),t.lineThickness=K.getValueOrClonedDefault(this._lineThickness,e,pst,t.lineThickness),t.lineOffset=K.getValueOrClonedDefault(this._lineOffset,e,fst,t.lineOffset),t};CI.prototype.equals=function(e){return this===e||e instanceof CI&&K.equals(this._color,e._color)&&K.equals(this._cellAlpha,e._cellAlpha)&&K.equals(this._lineCount,e._lineCount)&&K.equals(this._lineThickness,e._lineThickness)&&K.equals(this._lineOffset,e._lineOffset)};var TI=CI;var Xbi=y(x(),1);function EI(e){this._definitionChanged=new xe,this._color=void 0,this._colorSubscription=void 0,this.color=e}Object.defineProperties(EI.prototype,{isConstant:{get:function(){return K.isConstant(this._color)}},definitionChanged:{get:function(){return this._definitionChanged}},color:be("color")});EI.prototype.getType=function(e){return"PolylineArrow"};var gst=new q;EI.prototype.getValue=function(e,t){return l(e)||(e=q.now(gst)),l(t)||(t={}),t.color=K.getValueOrClonedDefault(this._color,e,U.WHITE,t.color),t};EI.prototype.equals=function(e){return this===e||e instanceof EI&&K.equals(this._color,e._color)};var SI=EI;var zbi=y(x(),1);var bst=U.WHITE,yst=U.TRANSPARENT,xst=16,Cst=255;function _I(e){e=e??Q.EMPTY_OBJECT,this._definitionChanged=new xe,this._color=void 0,this._colorSubscription=void 0,this._gapColor=void 0,this._gapColorSubscription=void 0,this._dashLength=void 0,this._dashLengthSubscription=void 0,this._dashPattern=void 0,this._dashPatternSubscription=void 0,this.color=e.color,this.gapColor=e.gapColor,this.dashLength=e.dashLength,this.dashPattern=e.dashPattern}Object.defineProperties(_I.prototype,{isConstant:{get:function(){return K.isConstant(this._color)&&K.isConstant(this._gapColor)&&K.isConstant(this._dashLength)&&K.isConstant(this._dashPattern)}},definitionChanged:{get:function(){return this._definitionChanged}},color:be("color"),gapColor:be("gapColor"),dashLength:be("dashLength"),dashPattern:be("dashPattern")});_I.prototype.getType=function(e){return"PolylineDash"};var Tst=new q;_I.prototype.getValue=function(e,t){return l(e)||(e=q.now(Tst)),l(t)||(t={}),t.color=K.getValueOrClonedDefault(this._color,e,bst,t.color),t.gapColor=K.getValueOrClonedDefault(this._gapColor,e,yst,t.gapColor),t.dashLength=K.getValueOrDefault(this._dashLength,e,xst,t.dashLength),t.dashPattern=K.getValueOrDefault(this._dashPattern,e,Cst,t.dashPattern),t};_I.prototype.equals=function(e){return this===e||e instanceof _I&&K.equals(this._color,e._color)&&K.equals(this._gapColor,e._gapColor)&&K.equals(this._dashLength,e._dashLength)&&K.equals(this._dashPattern,e._dashPattern)};var II=_I;var n0i=y(x(),1);var Est=U.WHITE,Sst=.25,_st=1;function ZI(e){e=e??Q.EMPTY_OBJECT,this._definitionChanged=new xe,this._color=void 0,this._colorSubscription=void 0,this._glowPower=void 0,this._glowPowerSubscription=void 0,this._taperPower=void 0,this._taperPowerSubscription=void 0,this.color=e.color,this.glowPower=e.glowPower,this.taperPower=e.taperPower}Object.defineProperties(ZI.prototype,{isConstant:{get:function(){return K.isConstant(this._color)&&K.isConstant(this._glow)}},definitionChanged:{get:function(){return this._definitionChanged}},color:be("color"),glowPower:be("glowPower"),taperPower:be("taperPower")});ZI.prototype.getType=function(e){return"PolylineGlow"};var Ist=new q;ZI.prototype.getValue=function(e,t){return l(e)||(e=q.now(Ist)),l(t)||(t={}),t.color=K.getValueOrClonedDefault(this._color,e,Est,t.color),t.glowPower=K.getValueOrDefault(this._glowPower,e,Sst,t.glowPower),t.taperPower=K.getValueOrDefault(this._taperPower,e,_st,t.taperPower),t};ZI.prototype.equals=function(e){return this===e||e instanceof ZI&&K.equals(this._color,e._color)&&K.equals(this._glowPower,e._glowPower)&&K.equals(this._taperPower,e._taperPower)};var RI=ZI;var u0i=y(x(),1);var Zst=U.WHITE,Rst=U.BLACK,Vst=1;function VI(e){e=e??Q.EMPTY_OBJECT,this._definitionChanged=new xe,this._color=void 0,this._colorSubscription=void 0,this._outlineColor=void 0,this._outlineColorSubscription=void 0,this._outlineWidth=void 0,this._outlineWidthSubscription=void 0,this.color=e.color,this.outlineColor=e.outlineColor,this.outlineWidth=e.outlineWidth}Object.defineProperties(VI.prototype,{isConstant:{get:function(){return K.isConstant(this._color)&&K.isConstant(this._outlineColor)&&K.isConstant(this._outlineWidth)}},definitionChanged:{get:function(){return this._definitionChanged}},color:be("color"),outlineColor:be("outlineColor"),outlineWidth:be("outlineWidth")});VI.prototype.getType=function(e){return"PolylineOutline"};var Gst=new q;VI.prototype.getValue=function(e,t){return l(e)||(e=q.now(Gst)),l(t)||(t={}),t.color=K.getValueOrClonedDefault(this._color,e,Zst,t.color),t.outlineColor=K.getValueOrClonedDefault(this._outlineColor,e,Rst,t.outlineColor),t.outlineWidth=K.getValueOrDefault(this._outlineWidth,e,Vst),t};VI.prototype.equals=function(e){return this===e||e instanceof VI&&K.equals(this._color,e._color)&&K.equals(this._outlineColor,e._outlineColor)&&K.equals(this._outlineWidth,e._outlineWidth)};var ay=VI;var y0i=y(x(),1);function Kg(e,t){this._value=void 0,this._definitionChanged=new xe,this._eventHelper=new Xr,this._referenceFrame=t??Ni.FIXED,this.setValue(e)}Object.defineProperties(Kg.prototype,{isConstant:{get:function(){let e=this._value;if(!l(e))return!0;let t=e.length;for(let n=0;n<t;n++)if(!K.isConstant(e[n]))return!1;return!0}},definitionChanged:{get:function(){return this._definitionChanged}},referenceFrame:{get:function(){return this._referenceFrame}}});var Lst=new q;Kg.prototype.getValue=function(e,t){return l(e)||(e=q.now(Lst)),this.getValueInReferenceFrame(e,Ni.FIXED,t)};Kg.prototype.getValueInReferenceFrame=function(e,t,n){let i=this._value;if(!l(i))return;let o=i.length;l(n)||(n=new Array(o));let r=0,s=0;for(;r<o;){let c=i[r].getValueInReferenceFrame(e,t,n[r]);l(c)&&(n[s]=c,s++),r++}return n.length=s,n};Kg.prototype.setValue=function(e){let t=this._eventHelper;if(t.removeAll(),l(e)){this._value=e.slice();let n=e.length;for(let i=0;i<n;i++){let o=e[i];l(o)&&t.add(o.definitionChanged,Kg.prototype._raiseDefinitionChanged,this)}}else this._value=void 0;this._definitionChanged.raiseEvent(this)};Kg.prototype.equals=function(e){return this===e||e instanceof Kg&&this._referenceFrame===e._referenceFrame&&K.arrayEquals(this._value,e._value)};Kg.prototype._raiseDefinitionChanged=function(){this._definitionChanged.raiseEvent(this)};var jg=Kg;var I0i=y(x(),1);function cy(e){this._value=void 0,this._definitionChanged=new xe,this._eventHelper=new Xr,this.setValue(e)}Object.defineProperties(cy.prototype,{isConstant:{get:function(){let e=this._value;if(!l(e))return!0;let t=e.length;for(let n=0;n<t;n++)if(!K.isConstant(e[n]))return!1;return!0}},definitionChanged:{get:function(){return this._definitionChanged}}});var Wst=new q;cy.prototype.getValue=function(e,t){l(e)||(e=q.now(Wst));let n=this._value;if(!l(n))return;let i=n.length;l(t)||(t=new Array(i));let o=0,r=0;for(;o<i;){let a=this._value[o].getValue(e,t[o]);l(a)&&(t[r]=a,r++),o++}return t.length=r,t};cy.prototype.setValue=function(e){let t=this._eventHelper;if(t.removeAll(),l(e)){this._value=e.slice();let n=e.length;for(let i=0;i<n;i++){let o=e[i];l(o)&&t.add(o.definitionChanged,cy.prototype._raiseDefinitionChanged,this)}}else this._value=void 0;this._definitionChanged.raiseEvent(this)};cy.prototype.equals=function(e){return this===e||e instanceof cy&&K.arrayEquals(this._value,e._value)};cy.prototype._raiseDefinitionChanged=function(){this._definitionChanged.raiseEvent(this)};var GI=cy;var W0i=y(x(),1);function bT(e){let t=e._targetProperty;if(!l(t)){let n=e._targetEntity;if(!l(n)){if(n=e._targetCollection.getById(e._targetId),!l(n)){e._targetEntity=e._targetProperty=void 0;return}n.definitionChanged.addEventListener(Ru.prototype._onTargetEntityDefinitionChanged,e),e._targetEntity=n}let i=e._targetPropertyNames;t=e._targetEntity;for(let o=0,r=i.length;o<r&&l(t);++o)t=t[i[o]];e._targetProperty=t}return t}function Ru(e,t,n){this._targetCollection=e,this._targetId=t,this._targetPropertyNames=n,this._targetProperty=void 0,this._targetEntity=void 0,this._definitionChanged=new xe,e.collectionChanged.addEventListener(Ru.prototype._onCollectionChanged,this)}Object.defineProperties(Ru.prototype,{isConstant:{get:function(){return K.isConstant(bT(this))}},definitionChanged:{get:function(){return this._definitionChanged}},referenceFrame:{get:function(){let e=bT(this);return l(e)?e.referenceFrame:void 0}},targetId:{get:function(){return this._targetId}},targetCollection:{get:function(){return this._targetCollection}},targetPropertyNames:{get:function(){return this._targetPropertyNames}},resolvedProperty:{get:function(){return bT(this)}}});Ru.fromString=function(e,t){let n,i=[],o=!0,r=!1,s="";for(let a=0;a<t.length;++a){let c=t.charAt(a);r?(s+=c,r=!1):c==="\\"?r=!0:o&&c==="#"?(n=s,o=!1,s=""):!o&&c==="."?(i.push(s),s=""):s+=c}return i.push(s),new Ru(e,n,i)};var Fst=new q;Ru.prototype.getValue=function(e,t){let n=bT(this);return l(e)||(e=q.now(Fst)),l(n)?n.getValue(e,t):void 0};Ru.prototype.getValueInReferenceFrame=function(e,t,n){let i=bT(this);return l(i)?i.getValueInReferenceFrame(e,t,n):void 0};Ru.prototype.getType=function(e){let t=bT(this);return l(t)?t.getType(e):void 0};Ru.prototype.equals=function(e){if(this===e)return!0;let t=this._targetPropertyNames,n=e._targetPropertyNames;if(this._targetCollection!==e._targetCollection||this._targetId!==e._targetId||t.length!==n.length)return!1;let i=this._targetPropertyNames.length;for(let o=0;o<i;o++)if(t[o]!==n[o])return!1;return!0};Ru.prototype._onTargetEntityDefinitionChanged=function(e,t,n,i){l(this._targetProperty)&&this._targetPropertyNames[0]===t&&(this._targetProperty=void 0,this._definitionChanged.raiseEvent(this))};Ru.prototype._onCollectionChanged=function(e,t,n){let i=this._targetEntity;l(i)&&n.indexOf(i)!==-1?(i.definitionChanged.removeEventListener(Ru.prototype._onTargetEntityDefinitionChanged,this),this._targetEntity=this._targetProperty=void 0):l(i)||(i=bT(this),l(i)&&this._definitionChanged.raiseEvent(this))};var qg=Ru;var N0i=y(x(),1);var Bst={packedLength:1,pack:function(e,t,n){return n=n??0,t[n]=e,t},unpack:function(e,t,n){return t=t??0,e[t]},convertPackedArrayForInterpolation:function(e,t,n,i){l(i)||(i=[]),t=t??0,n=n??e.length;let o;for(let r=0,s=n-t+1;r<s;r++){let a=e[t+r];r===0||Math.abs(o-a)<Math.PI?i[r]=a:i[r]=a-L.TWO_PI,o=a}},unpackInterpolationResult:function(e,t,n,i,o){return o=e[0],o<0?o+L.TWO_PI:o}},Qm=Bst;var eyi=y(x(),1);var k0i=y(x(),1);var ebe={packedLength:1,pack:function(e,t,n){n=n??0,t[n]=e},unpack:function(e,t,n){return t=t??0,e[t]}};function tbe(e,t,n){let i,o=e.length,r=n.length,s=o+r;if(e.length=s,o!==t){let a=o-1;for(i=s-1;i>=t;i--)e[i]=e[a--]}for(i=0;i<r;i++)e[t++]=n[i]}function nbe(e,t){return e instanceof q?e:typeof e=="string"?q.fromIso8601(e):q.addSeconds(t,e,new q)}var i7=[],o7=[];function O9(e,t,n,i,o){let r=0,s,a,c,d,u,h;for(;r<i.length;){u=nbe(i[r],e),c=yo(t,u,q.compare);let p=0,A=0;if(c<0){for(c=~c,d=c*o,a=void 0,h=t[c];r<i.length&&(u=nbe(i[r],e),!(l(a)&&q.compare(a,u)>=0||l(h)&&q.compare(u,h)>=0));){for(i7[p++]=u,r=r+1,s=0;s<o;s++)o7[A++]=i[r],r=r+1;a=u}p>0&&(o7.length=A,tbe(n,d,o7),i7.length=p,tbe(t,c,i7))}else{for(s=0;s<o;s++)r++,n[c*o+s]=i[r];r++}}}function Om(e,t){let n=e;n===Number&&(n=ebe);let i=n.packedLength,o=n.packedInterpolationLength??i,r=0,s;if(l(t)){let a=t.length;s=new Array(a);for(let c=0;c<a;c++){let d=t[c];d===Number&&(d=ebe);let u=d.packedLength;i+=u,o+=d.packedInterpolationLength??u,s[c]=d}r=a}this._type=e,this._innerType=n,this._interpolationDegree=1,this._interpolationAlgorithm=AT,this._numberOfPoints=0,this._times=[],this._values=[],this._xTable=[],this._yTable=[],this._packedLength=i,this._packedInterpolationLength=o,this._updateTableLength=!0,this._interpolationResult=new Array(o),this._definitionChanged=new xe,this._derivativeTypes=t,this._innerDerivativeTypes=s,this._inputOrder=r,this._forwardExtrapolationType=Zu.NONE,this._forwardExtrapolationDuration=0,this._backwardExtrapolationType=Zu.NONE,this._backwardExtrapolationDuration=0}Object.defineProperties(Om.prototype,{isConstant:{get:function(){return this._values.length===0}},definitionChanged:{get:function(){return this._definitionChanged}},type:{get:function(){return this._type}},derivativeTypes:{get:function(){return this._derivativeTypes}},interpolationDegree:{get:function(){return this._interpolationDegree}},interpolationAlgorithm:{get:function(){return this._interpolationAlgorithm}},forwardExtrapolationType:{get:function(){return this._forwardExtrapolationType},set:function(e){this._forwardExtrapolationType!==e&&(this._forwardExtrapolationType=e,this._definitionChanged.raiseEvent(this))}},forwardExtrapolationDuration:{get:function(){return this._forwardExtrapolationDuration},set:function(e){this._forwardExtrapolationDuration!==e&&(this._forwardExtrapolationDuration=e,this._definitionChanged.raiseEvent(this))}},backwardExtrapolationType:{get:function(){return this._backwardExtrapolationType},set:function(e){this._backwardExtrapolationType!==e&&(this._backwardExtrapolationType=e,this._definitionChanged.raiseEvent(this))}},backwardExtrapolationDuration:{get:function(){return this._backwardExtrapolationDuration},set:function(e){this._backwardExtrapolationDuration!==e&&(this._backwardExtrapolationDuration=e,this._definitionChanged.raiseEvent(this))}}});var wst=new q;Om.prototype.getValue=function(e,t){l(e)||(e=q.now(wst));let n=this._times,i=n.length;if(i===0)return;let o,r=this._innerType,s=this._values,a=yo(n,e,q.compare);if(a<0){if(a=~a,a===0){let I=n[a];if(o=this._backwardExtrapolationDuration,this._backwardExtrapolationType===Zu.NONE||o!==0&&q.secondsDifference(I,e)>o)return;if(this._backwardExtrapolationType===Zu.HOLD)return r.unpack(s,0,t)}if(a>=i){a=i-1;let I=n[a];if(o=this._forwardExtrapolationDuration,this._forwardExtrapolationType===Zu.NONE||o!==0&&q.secondsDifference(e,I)>o)return;if(this._forwardExtrapolationType===Zu.HOLD)return a=i-1,r.unpack(s,a*r.packedLength,t)}let c=this._xTable,d=this._yTable,u=this._interpolationAlgorithm,h=this._packedInterpolationLength,p=this._inputOrder;if(this._updateTableLength){this._updateTableLength=!1;let I=Math.min(u.getRequiredDataPoints(this._interpolationDegree,p),i);I!==this._numberOfPoints&&(this._numberOfPoints=I,c.length=I,d.length=I*h)}let A=this._numberOfPoints-1;if(A<1)return;let f=0,b=i-1;if(b-f+1>=A+1){let I=a-(A/2|0)-1;I<f&&(I=f);let R=I+A;R>b&&(R=b,I=R-A,I<f&&(I=f)),f=I,b=R}let T=b-f+1;for(let I=0;I<T;++I)c[I]=q.secondsDifference(n[f+I],n[b]);if(l(r.convertPackedArrayForInterpolation))r.convertPackedArrayForInterpolation(s,f,b,d);else{let I=0,R=this._packedLength,V=f*R,W=(b+1)*R;for(;V<W;)d[I]=s[V],V++,I++}let E=q.secondsDifference(e,n[b]),S;if(p===0||!l(u.interpolate))S=u.interpolateOrderZero(E,c,d,h,this._interpolationResult);else{let I=Math.floor(h/(p+1));S=u.interpolate(E,c,d,I,p,p,this._interpolationResult)}return l(r.unpackInterpolationResult)?r.unpackInterpolationResult(S,s,f,b,t):r.unpack(S,0,t)}return r.unpack(s,a*this._packedLength,t)};Om.prototype.setInterpolationOptions=function(e){if(!l(e))return;let t=!1,n=e.interpolationAlgorithm,i=e.interpolationDegree;l(n)&&this._interpolationAlgorithm!==n&&(this._interpolationAlgorithm=n,t=!0),l(i)&&this._interpolationDegree!==i&&(this._interpolationDegree=i,t=!0),t&&(this._updateTableLength=!0,this._definitionChanged.raiseEvent(this))};Om.prototype.addSample=function(e,t,n){let i=this._innerDerivativeTypes,o=l(i),r=this._innerType,s=[];if(s.push(e),r.pack(t,s,s.length),o){let a=i.length;for(let c=0;c<a;c++)i[c].pack(n[c],s,s.length)}O9(void 0,this._times,this._values,s,this._packedLength),this._updateTableLength=!0,this._definitionChanged.raiseEvent(this)};Om.prototype.addSamples=function(e,t,n){let i=this._innerDerivativeTypes,o=l(i),r=this._innerType,s=e.length,a=[];for(let c=0;c<s;c++)if(a.push(e[c]),r.pack(t[c],a,a.length),o){let d=n[c],u=i.length;for(let h=0;h<u;h++)i[h].pack(d[h],a,a.length)}O9(void 0,this._times,this._values,a,this._packedLength),this._updateTableLength=!0,this._definitionChanged.raiseEvent(this)};Om.prototype.getSample=function(e){let t=this._times,n=t.length;if(l(n))return e<0&&(e+=n),t[e]};Om.prototype.addSamplesPackedArray=function(e,t){O9(t,this._times,this._values,e,this._packedLength),this._updateTableLength=!0,this._definitionChanged.raiseEvent(this)};Om.prototype.removeSample=function(e){let t=yo(this._times,e,q.compare);return t<0?!1:(ibe(this,t,1),!0)};function ibe(e,t,n){let i=e._packedLength;e._times.splice(t,n),e._values.splice(t*i,n*i),e._updateTableLength=!0,e._definitionChanged.raiseEvent(e)}Om.prototype.removeSamples=function(e){let t=this._times,n=yo(t,e.start,q.compare);n<0?n=~n:e.isStartIncluded||++n;let i=yo(t,e.stop,q.compare);i<0?i=~i:e.isStopIncluded&&++i,ibe(this,n,i-n)};Om.prototype.equals=function(e){if(this===e)return!0;if(!l(e)||this._type!==e._type||this._interpolationDegree!==e._interpolationDegree||this._interpolationAlgorithm!==e._interpolationAlgorithm)return!1;let t=this._derivativeTypes,n=l(t),i=e._derivativeTypes,o=l(i);if(n!==o)return!1;let r,s;if(n){if(s=t.length,s!==i.length)return!1;for(r=0;r<s;r++)if(t[r]!==i[r])return!1}let a=this._times,c=e._times;if(s=a.length,s!==c.length)return!1;for(r=0;r<s;r++)if(!q.equals(a[r],c[r]))return!1;let d=this._values,u=e._values;for(s=d.length,r=0;r<s;r++)if(d[r]!==u[r])return!1;return!0};Om._mergeNewSamples=O9;var Vu=Om;function zm(e,t){t=t??0;let n;if(t>0){n=new Array(t);for(let i=0;i<t;i++)n[i]=m}this._numberOfDerivatives=t,this._property=new Vu(m,n),this._definitionChanged=new xe,this._referenceFrame=e??Ni.FIXED,this._property._definitionChanged.addEventListener(function(){this._definitionChanged.raiseEvent(this)},this)}Object.defineProperties(zm.prototype,{isConstant:{get:function(){return this._property.isConstant}},definitionChanged:{get:function(){return this._definitionChanged}},referenceFrame:{get:function(){return this._referenceFrame}},interpolationDegree:{get:function(){return this._property.interpolationDegree}},interpolationAlgorithm:{get:function(){return this._property.interpolationAlgorithm}},numberOfDerivatives:{get:function(){return this._numberOfDerivatives}},forwardExtrapolationType:{get:function(){return this._property.forwardExtrapolationType},set:function(e){this._property.forwardExtrapolationType=e}},forwardExtrapolationDuration:{get:function(){return this._property.forwardExtrapolationDuration},set:function(e){this._property.forwardExtrapolationDuration=e}},backwardExtrapolationType:{get:function(){return this._property.backwardExtrapolationType},set:function(e){this._property.backwardExtrapolationType=e}},backwardExtrapolationDuration:{get:function(){return this._property.backwardExtrapolationDuration},set:function(e){this._property.backwardExtrapolationDuration=e}}});var Nst=new q;zm.prototype.getValue=function(e,t){return l(e)||(e=q.now(Nst)),this.getValueInReferenceFrame(e,Ni.FIXED,t)};zm.prototype.getValueInReferenceFrame=function(e,t,n){if(n=this._property.getValue(e,n),l(n))return Gh.convertToReferenceFrame(e,n,this._referenceFrame,t,n)};zm.prototype.setInterpolationOptions=function(e){this._property.setInterpolationOptions(e)};zm.prototype.addSample=function(e,t,n){let i=this._numberOfDerivatives;this._property.addSample(e,t,n)};zm.prototype.addSamples=function(e,t,n){this._property.addSamples(e,t,n)};zm.prototype.addSamplesPackedArray=function(e,t){this._property.addSamplesPackedArray(e,t)};zm.prototype.removeSample=function(e){return this._property.removeSample(e)};zm.prototype.removeSamples=function(e){this._property.removeSamples(e)};zm.prototype.equals=function(e){return this===e||e instanceof zm&&K.equals(this._property,e._property)&&this._referenceFrame===e._referenceFrame};var lc=zm;var myi=y(x(),1);var nyi=y(x(),1),Pst={HORIZONTAL:0,VERTICAL:1},gf=Object.freeze(Pst);var Xst=gf.HORIZONTAL,Yst=U.WHITE,Mst=U.BLACK,vst=0,Ust=1;function LI(e){e=e??Q.EMPTY_OBJECT,this._definitionChanged=new xe,this._orientation=void 0,this._orientationSubscription=void 0,this._evenColor=void 0,this._evenColorSubscription=void 0,this._oddColor=void 0,this._oddColorSubscription=void 0,this._offset=void 0,this._offsetSubscription=void 0,this._repeat=void 0,this._repeatSubscription=void 0,this.orientation=e.orientation,this.evenColor=e.evenColor,this.oddColor=e.oddColor,this.offset=e.offset,this.repeat=e.repeat}Object.defineProperties(LI.prototype,{isConstant:{get:function(){return K.isConstant(this._orientation)&&K.isConstant(this._evenColor)&&K.isConstant(this._oddColor)&&K.isConstant(this._offset)&&K.isConstant(this._repeat)}},definitionChanged:{get:function(){return this._definitionChanged}},orientation:be("orientation"),evenColor:be("evenColor"),oddColor:be("oddColor"),offset:be("offset"),repeat:be("repeat")});LI.prototype.getType=function(e){return"Stripe"};var Dst=new q;LI.prototype.getValue=function(e,t){return l(e)||(e=q.now(Dst)),l(t)||(t={}),t.horizontal=K.getValueOrDefault(this._orientation,e,Xst)===gf.HORIZONTAL,t.evenColor=K.getValueOrClonedDefault(this._evenColor,e,Yst,t.evenColor),t.oddColor=K.getValueOrClonedDefault(this._oddColor,e,Mst,t.oddColor),t.offset=K.getValueOrDefault(this._offset,e,vst),t.repeat=K.getValueOrDefault(this._repeat,e,Ust),t};LI.prototype.equals=function(e){return this===e||e instanceof LI&&K.equals(this._orientation,e._orientation)&&K.equals(this._evenColor,e._evenColor)&&K.equals(this._oddColor,e._oddColor)&&K.equals(this._offset,e._offset)&&K.equals(this._repeat,e._repeat)};var WI=LI;var Cyi=y(x(),1);function ly(e){this._definitionChanged=new xe,this._intervals=new bs,this._intervals.changedEvent.addEventListener(ly.prototype._intervalsChanged,this),this._referenceFrame=e??Ni.FIXED}Object.defineProperties(ly.prototype,{isConstant:{get:function(){return this._intervals.isEmpty}},definitionChanged:{get:function(){return this._definitionChanged}},intervals:{get:function(){return this._intervals}},referenceFrame:{get:function(){return this._referenceFrame}}});var kst=new q;ly.prototype.getValue=function(e,t){return l(e)||(e=q.now(kst)),this.getValueInReferenceFrame(e,Ni.FIXED,t)};ly.prototype.getValueInReferenceFrame=function(e,t,n){let i=this._intervals.findDataForIntervalContainingDate(e);if(l(i))return Gh.convertToReferenceFrame(e,i,this._referenceFrame,t,n)};ly.prototype.equals=function(e){return this===e||e instanceof ly&&this._intervals.equals(e._intervals,K.equals)&&this._referenceFrame===e._referenceFrame};ly.prototype._intervalsChanged=function(){this._definitionChanged.raiseEvent(this)};var $g=ly;var Ryi=y(x(),1);function yT(){this._definitionChanged=new xe,this._intervals=new bs,this._intervals.changedEvent.addEventListener(yT.prototype._intervalsChanged,this)}Object.defineProperties(yT.prototype,{isConstant:{get:function(){return this._intervals.isEmpty}},definitionChanged:{get:function(){return this._definitionChanged}},intervals:{get:function(){return this._intervals}}});var Qst=new q;yT.prototype.getValue=function(e,t){l(e)||(e=q.now(Qst));let n=this._intervals.findDataForIntervalContainingDate(e);return l(n)&&typeof n.clone=="function"?n.clone(t):n};yT.prototype.equals=function(e){return this===e||e instanceof yT&&this._intervals.equals(e._intervals,K.equals)};yT.prototype._intervalsChanged=function(){this._definitionChanged.raiseEvent(this)};var eb=yT;var zyi=y(x(),1);var wyi=y(x(),1);function FI(e,t){this._position=void 0,this._subscription=void 0,this._definitionChanged=new xe,this._normalize=t??!0,this.position=e}Object.defineProperties(FI.prototype,{isConstant:{get:function(){return K.isConstant(this._position)}},definitionChanged:{get:function(){return this._definitionChanged}},position:{get:function(){return this._position},set:function(e){let t=this._position;t!==e&&(l(t)&&this._subscription(),this._position=e,l(e)&&(this._subscription=e._definitionChanged.addEventListener(function(){this._definitionChanged.raiseEvent(this)},this)),this._definitionChanged.raiseEvent(this))}},normalize:{get:function(){return this._normalize},set:function(e){this._normalize!==e&&(this._normalize=e,this._definitionChanged.raiseEvent(this))}}});var Ost=new m,obe=new m,rbe=new q,zst=new q,r7=1/60;FI.prototype.getValue=function(e,t){return this._getValue(e,t)};FI.prototype._getValue=function(e,t,n){l(e)||(e=q.now(zst)),l(t)||(t=new m);let i=this._position;if(K.isConstant(i))return this._normalize?void 0:m.clone(m.ZERO,t);let o=i.getValue(e,Ost),r=i.getValue(q.addSeconds(e,r7,rbe),obe);if(!l(o)||!l(r)&&(r=o,o=i.getValue(q.addSeconds(e,-r7,rbe),obe),!l(o)))return;if(m.equals(o,r))return this._normalize?void 0:m.clone(m.ZERO,t);l(n)&&o.clone(n);let s=m.subtract(r,o,t);return this._normalize?m.normalize(s,t):m.divideByScalar(s,r7,t)};FI.prototype.equals=function(e){return this===e||e instanceof FI&&K.equals(this._position,e._position)};var tb=FI;function GN(e,t){this._velocityVectorProperty=new tb(e,!0),this._subscription=void 0,this._ellipsoid=void 0,this._definitionChanged=new xe,this.ellipsoid=t??ie.default;let n=this;this._velocityVectorProperty.definitionChanged.addEventListener(function(){n._definitionChanged.raiseEvent(n)})}Object.defineProperties(GN.prototype,{isConstant:{get:function(){return K.isConstant(this._velocityVectorProperty)}},definitionChanged:{get:function(){return this._definitionChanged}},position:{get:function(){return this._velocityVectorProperty.position},set:function(e){this._velocityVectorProperty.position=e}},ellipsoid:{get:function(){return this._ellipsoid},set:function(e){this._ellipsoid!==e&&(this._ellipsoid=e,this._definitionChanged.raiseEvent(this))}}});var sbe=new m,Hst=new m,abe=new $,Jst=new q;GN.prototype.getValue=function(e,t){l(e)||(e=q.now(Jst));let n=this._velocityVectorProperty._getValue(e,Hst,sbe);if(l(n))return bt.rotationMatrixFromPositionVelocity(sbe,n,this._ellipsoid,abe),Me.fromRotationMatrix(abe,t)};GN.prototype.equals=function(e){return this===e||e instanceof GN&&K.equals(this._velocityVectorProperty,e._velocityVectorProperty)&&(this._ellipsoid===e._ellipsoid||this._ellipsoid.equals(e._ellipsoid))};var LN=GN;var Kyi=y(x(),1);var nb={COMPLETE:0,BELOW_ELLIPSOID_HORIZON:1,ABOVE_ELLIPSOID_HORIZON:2};nb.validate=function(e){return e===nb.COMPLETE||e===nb.BELOW_ELLIPSOID_HORIZON||e===nb.ABOVE_ELLIPSOID_HORIZON};nb.toString=function(e){switch(e){case nb.COMPLETE:return"COMPLETE";case nb.BELOW_ELLIPSOID_HORIZON:return"BELOW_ELLIPSOID_HORIZON";case nb.ABOVE_ELLIPSOID_HORIZON:return"ABOVE_ELLIPSOID_HORIZON";default:throw new fe("SensorVolumePortionToDisplay value is not valid and cannot be converted to a String.")}};var BI=nb;function dy(){}dy.packedLength=m.packedLength;dy.unpack=m.unpack;dy.pack=m.pack;var s7;function WN(e,t){return t[0]==="#"&&(t=s7+t),qg.fromString(e,t)}function cbe(e,t,n){if(l(n.reference))return WN(t,n.reference);if(l(n.velocityReference)){let i=WN(t,n.velocityReference);switch(e){case m:case dy:return new tb(i,e===dy);case Me:return new LN(i)}}throw new me(`${JSON.stringify(n)} is not valid CZML.`)}function Kst(e,t){return new Bh(function(n,i){return t(e.getValue(n,i))},e.isConstant)}var lo=new m,jl=new VN,al=new Ae,xT=new Wn,z9=new Me;function jst(e){let t=e.rgbaf;if(l(t))return t;let n=e.rgba;if(!l(n))return;let i=n.length;if(i===U.packedLength)return[U.byteToFloat(n[0]),U.byteToFloat(n[1]),U.byteToFloat(n[2]),U.byteToFloat(n[3])];t=new Array(i);for(let o=0;o<i;o+=5)t[o]=n[o],t[o+1]=U.byteToFloat(n[o+1]),t[o+2]=U.byteToFloat(n[o+2]),t[o+3]=U.byteToFloat(n[o+3]),t[o+4]=U.byteToFloat(n[o+4]);return t}function lbe(e,t){let n=e.uri??e;return l(t)?t.getDerivedResource({url:n}):Le.createIfNeeded(n)}function qst(e){let t=e.wsen;if(l(t))return t;let n=e.wsenDegrees;if(!l(n))return;let i=n.length;if(i===de.packedLength)return[L.toRadians(n[0]),L.toRadians(n[1]),L.toRadians(n[2]),L.toRadians(n[3])];t=new Array(i);for(let o=0;o<i;o+=5)t[o]=n[o],t[o+1]=L.toRadians(n[o+1]),t[o+2]=L.toRadians(n[o+2]),t[o+3]=L.toRadians(n[o+3]),t[o+4]=L.toRadians(n[o+4]);return t}function $st(e){let t=e.length;if(jl.magnitude=1,t===2)return jl.clock=e[0],jl.cone=e[1],m.fromSpherical(jl,lo),[lo.x,lo.y,lo.z];let n=new Array(t/3*4);for(let i=0,o=0;i<t;i+=3,o+=4)n[o]=e[i],jl.clock=e[i+1],jl.cone=e[i+2],m.fromSpherical(jl,lo),n[o+1]=lo.x,n[o+2]=lo.y,n[o+3]=lo.z;return n}function eat(e){let t=e.length;if(t===3)return jl.clock=e[0],jl.cone=e[1],jl.magnitude=e[2],m.fromSpherical(jl,lo),[lo.x,lo.y,lo.z];let n=new Array(t);for(let i=0;i<t;i+=4)n[i]=e[i],jl.clock=e[i+1],jl.cone=e[i+2],jl.magnitude=e[i+3],m.fromSpherical(jl,lo),n[i+1]=lo.x,n[i+2]=lo.y,n[i+3]=lo.z;return n}function tat(e){let t=e.length;if(t===3)return al.longitude=e[0],al.latitude=e[1],al.height=e[2],ie.default.cartographicToCartesian(al,lo),[lo.x,lo.y,lo.z];let n=new Array(t);for(let i=0;i<t;i+=4)n[i]=e[i],al.longitude=e[i+1],al.latitude=e[i+2],al.height=e[i+3],ie.default.cartographicToCartesian(al,lo),n[i+1]=lo.x,n[i+2]=lo.y,n[i+3]=lo.z;return n}function nat(e){let t=e.length;if(t===3)return al.longitude=L.toRadians(e[0]),al.latitude=L.toRadians(e[1]),al.height=e[2],ie.default.cartographicToCartesian(al,lo),[lo.x,lo.y,lo.z];let n=new Array(t);for(let i=0;i<t;i+=4)n[i]=e[i],al.longitude=L.toRadians(e[i+1]),al.latitude=L.toRadians(e[i+2]),al.height=e[i+3],ie.default.cartographicToCartesian(al,lo),n[i+1]=lo.x,n[i+2]=lo.y,n[i+3]=lo.z;return n}function a7(e){let t=e.cartesian;if(l(t))return t;let n=e.cartesianVelocity;if(l(n))return n;let i=e.unitCartesian;if(l(i))return i;let o=e.unitSpherical;if(l(o))return $st(o);let r=e.spherical;if(l(r))return eat(r);let s=e.cartographicRadians;if(l(s))return tat(s);let a=e.cartographicDegrees;if(l(a))return nat(a);throw new me(`${JSON.stringify(e)} is not a valid CZML interval.`)}function dbe(e,t){m.unpack(e,t,lo),m.normalize(lo,lo),m.pack(lo,e,t)}function iat(e){let t=a7(e);if(t.length===3)return dbe(t,0),t;for(let n=1;n<t.length;n+=4)dbe(t,n);return t}function ube(e,t){Me.unpack(e,t,z9),Me.normalize(z9,z9),Me.pack(z9,e,t)}function oat(e){let t=e.unitQuaternion;if(l(t)){if(t.length===4)return ube(t,0),t;for(let n=1;n<t.length;n+=5)ube(t,n)}return t}function mbe(e){return typeof e=="boolean"?Boolean:typeof e=="number"?Number:typeof e=="string"?String:e.hasOwnProperty("array")?Array:e.hasOwnProperty("boolean")?Boolean:e.hasOwnProperty("boundingRectangle")?nt:e.hasOwnProperty("cartesian2")?M:e.hasOwnProperty("cartesian")||e.hasOwnProperty("spherical")||e.hasOwnProperty("cartographicRadians")||e.hasOwnProperty("cartographicDegrees")?m:e.hasOwnProperty("unitCartesian")||e.hasOwnProperty("unitSpherical")?dy:e.hasOwnProperty("rgba")||e.hasOwnProperty("rgbaf")?U:e.hasOwnProperty("arcType")?un:e.hasOwnProperty("classificationType")?ti:e.hasOwnProperty("colorBlendMode")?jc:e.hasOwnProperty("cornerType")?Ki:e.hasOwnProperty("heightReference")?rt:e.hasOwnProperty("horizontalOrigin")?Bi:e.hasOwnProperty("date")?q:e.hasOwnProperty("labelStyle")?hr:e.hasOwnProperty("number")?Number:e.hasOwnProperty("nearFarScalar")?Ot:e.hasOwnProperty("distanceDisplayCondition")?Dt:e.hasOwnProperty("object")||e.hasOwnProperty("value")?Object:e.hasOwnProperty("unitQuaternion")?Me:e.hasOwnProperty("shadowMode")?Vn:e.hasOwnProperty("string")?String:e.hasOwnProperty("stripeOrientation")?gf:e.hasOwnProperty("wsen")||e.hasOwnProperty("wsenDegrees")?de:e.hasOwnProperty("uri")?BN.default:e.hasOwnProperty("verticalOrigin")?Hn:Object}function rat(e,t,n){switch(e){case un:return un[t.arcType??t];case Array:return t.array;case Boolean:return t.boolean??t;case nt:return t.boundingRectangle;case M:return t.cartesian2;case m:return a7(t);case dy:return iat(t);case U:return jst(t);case ti:return ti[t.classificationType??t];case jc:return jc[t.colorBlendMode??t];case Ki:return Ki[t.cornerType??t];case rt:return rt[t.heightReference??t];case Bi:return Bi[t.horizontalOrigin??t];case Image:return lbe(t,n);case q:return q.fromIso8601(t.date??t);case hr:return hr[t.labelStyle??t];case Number:return t.number??t;case Ot:return t.nearFarScalar;case Dt:return t.distanceDisplayCondition;case Object:return t.object??t.value??t;case Me:return oat(t);case Qm:return t.number??t;case BI:return BI[t.portionToDisplay??t];case Vn:return Vn[t.shadowMode??t.shadows??t];case String:return t.string??t;case gf:return gf[t.stripeOrientation??t];case de:return qst(t);case BN.default:return lbe(t,n);case Hn:return Hn[t.verticalOrigin??t];default:throw new me(`Unknown CzmlDataSource interval type: ${e}`)}}var sat={HERMITE:ZN,LAGRANGE:RN,LINEAR:AT};function H9(e,t){let n=e.interpolationAlgorithm,i=e.interpolationDegree;(l(n)||l(i))&&t.setInterpolationOptions({interpolationAlgorithm:sat[n],interpolationDegree:i});let o=e.forwardExtrapolationType;l(o)&&(t.forwardExtrapolationType=Zu[o]);let r=e.forwardExtrapolationDuration;l(r)&&(t.forwardExtrapolationDuration=r);let s=e.backwardExtrapolationType;l(s)&&(t.backwardExtrapolationType=Zu[s]);let a=e.backwardExtrapolationDuration;l(a)&&(t.backwardExtrapolationDuration=a)}var hbe={iso8601:void 0};function Yr(e){if(l(e))return hbe.iso8601=e,Wn.fromIso8601(hbe)}function c7(e){let t=qe.MAXIMUM_INTERVAL.clone();return t.data=e,t}function fbe(e){let t=new ol;return t.intervals.addInterval(c7(e)),t}function pbe(e){let t=new ac(e.referenceFrame);return t.intervals.addInterval(c7(e)),t}function J9(e,t,n,i,o,r,s){let a=Yr(i.interval);l(o)&&(l(a)?a=Wn.intersect(a,o,xT):a=o);let c,d,u,h=!l(i.reference)&&!l(i.velocityReference),p=l(a)&&!a.equals(qe.MAXIMUM_INTERVAL);if(i.delete===!0){if(!p){t[n]=void 0;return}return Ibe(t[n],a)}let A=!1;if(h){if(d=rat(e,i,r),!l(d))return;c=e.packedLength??1,u=d.length??1,A=!l(i.array)&&typeof d!="string"&&u>c&&e!==Object}let f=typeof e.unpack=="function"&&e!==Qm;if(!A&&!p){h?t[n]=new fi(f?e.unpack(d,0):d):t[n]=cbe(e,s,i);return}let b=t[n],C,T=i.epoch;if(l(T)&&(C=q.fromIso8601(T)),A&&!p){b instanceof Vu||(t[n]=b=new Vu(e)),b.addSamplesPackedArray(d,C),H9(i,b);return}let E;if(!A&&p){a=a.clone(),h?a.data=f?e.unpack(d,0):d:a.data=cbe(e,s,i),l(b)||(t[n]=b=h?new eb:new ol),h&&b instanceof eb?b.intervals.addInterval(a):b instanceof ol?(h&&(a.data=new fi(a.data)),b.intervals.addInterval(a)):(t[n]=b=fbe(b),h&&(a.data=new fi(a.data)),b.intervals.addInterval(a));return}l(b)||(t[n]=b=new ol),b instanceof ol||(t[n]=b=fbe(b));let S=b.intervals;E=S.findInterval(a),(!l(E)||!(E.data instanceof Vu))&&(E=a.clone(),E.data=new Vu(e),S.addInterval(E)),E.data.addSamplesPackedArray(d,C),H9(i,E.data)}function Ibe(e,t){if(e instanceof Vu){e.removeSamples(t);return}else if(e instanceof eb){e.intervals.removeInterval(t);return}else if(e instanceof ol){let n=e.intervals;for(let i=0;i<n.length;++i){let o=Wn.intersect(n.get(i),t,xT);o.isEmpty||Ibe(o.data,t)}n.removeInterval(t);return}}function Ee(e,t,n,i,o,r,s){if(l(i))if(Array.isArray(i))for(let a=0,c=i.length;a<c;++a)J9(e,t,n,i[a],o,r,s);else J9(e,t,n,i,o,r,s)}function Abe(e,t,n,i,o,r){let s=Yr(n.interval);l(i)&&(l(s)?s=Wn.intersect(s,i,xT):s=i);let a=l(n.cartesianVelocity)?1:0,c=m.packedLength*(a+1),d,u,h=!l(n.reference),p=l(s)&&!s.equals(qe.MAXIMUM_INTERVAL);if(n.delete===!0){if(!p){e[t]=void 0;return}return Zbe(e[t],s)}let A,f=!1;if(h&&(l(n.referenceFrame)&&(A=Ni[n.referenceFrame]),A=A??Ni.FIXED,d=a7(n),u=d.length??1,f=u>c),!f&&!p){h?e[t]=new Rl(m.unpack(d),A):e[t]=WN(r,n.reference);return}let b=e[t],C,T=n.epoch;if(l(T)&&(C=q.fromIso8601(T)),f&&!p){(!(b instanceof lc)||l(A)&&b.referenceFrame!==A)&&(e[t]=b=new lc(A,a)),b.addSamplesPackedArray(d,C),H9(n,b);return}let E;if(!f&&p){s=s.clone(),h?s.data=m.unpack(d):s.data=WN(r,n.reference),l(b)||(h?b=new $g(A):b=new ac(A),e[t]=b),h&&b instanceof $g&&l(A)&&b.referenceFrame===A?b.intervals.addInterval(s):b instanceof ac?(h&&(s.data=new Rl(s.data,A)),b.intervals.addInterval(s)):(e[t]=b=pbe(b),h&&(s.data=new Rl(s.data,A)),b.intervals.addInterval(s));return}l(b)?b instanceof ac||(e[t]=b=pbe(b)):e[t]=b=new ac(A);let S=b.intervals;E=S.findInterval(s),(!l(E)||!(E.data instanceof lc)||l(A)&&E.data.referenceFrame!==A)&&(E=s.clone(),E.data=new lc(A,a),S.addInterval(E)),E.data.addSamplesPackedArray(d,C),H9(n,E.data)}function Zbe(e,t){if(e instanceof lc){e.removeSamples(t);return}else if(e instanceof $g){e.intervals.removeInterval(t);return}else if(e instanceof ac){let n=e.intervals;for(let i=0;i<n.length;++i){let o=Wn.intersect(n.get(i),t,xT);o.isEmpty||Zbe(o.data,t)}n.removeInterval(t);return}}function Rbe(e,t,n,i,o,r){if(l(n))if(Array.isArray(n))for(let s=0,a=n.length;s<a;++s)Abe(e,t,n[s],i,o,r);else Abe(e,t,n,i,o,r)}function gbe(e,t,n,i){l(n.references)?K9(e,t,n.references,n.interval,i,GI,ol):(l(n.cartesian2)?n.array=M.unpackArray(n.cartesian2):l(n.cartesian)&&(n.array=M.unpackArray(n.cartesian)),l(n.array)&&Ee(Array,e,t,n,void 0,void 0,i))}function bbe(e,t,n,i,o,r){let s=Yr(n.interval);l(i)&&(l(s)?s=Wn.intersect(s,i,xT):s=i);let a=e[t],c,d;if(l(s)){a instanceof mI||(a=new mI,e[t]=a);let h=a.intervals;d=h.findInterval({start:s.start,stop:s.stop}),l(d)?c=d.data:(d=s.clone(),h.addInterval(d))}else c=a;let u;l(n.solidColor)?(c instanceof Kt||(c=new Kt),u=n.solidColor,Ee(U,c,"color",u.color,void 0,void 0,r)):l(n.grid)?(c instanceof TI||(c=new TI),u=n.grid,Ee(U,c,"color",u.color,void 0,o,r),Ee(Number,c,"cellAlpha",u.cellAlpha,void 0,o,r),Ee(M,c,"lineCount",u.lineCount,void 0,o,r),Ee(M,c,"lineThickness",u.lineThickness,void 0,o,r),Ee(M,c,"lineOffset",u.lineOffset,void 0,o,r)):l(n.image)?(c instanceof s0||(c=new s0),u=n.image,Ee(Image,c,"image",u.image,void 0,o,r),Ee(M,c,"repeat",u.repeat,void 0,o,r),Ee(U,c,"color",u.color,void 0,o,r),Ee(Boolean,c,"transparent",u.transparent,void 0,o,r)):l(n.stripe)?(c instanceof WI||(c=new WI),u=n.stripe,Ee(gf,c,"orientation",u.orientation,void 0,o,r),Ee(U,c,"evenColor",u.evenColor,void 0,o,r),Ee(U,c,"oddColor",u.oddColor,void 0,o,r),Ee(Number,c,"offset",u.offset,void 0,o,r),Ee(Number,c,"repeat",u.repeat,void 0,o,r)):l(n.polylineOutline)?(c instanceof ay||(c=new ay),u=n.polylineOutline,Ee(U,c,"color",u.color,void 0,o,r),Ee(U,c,"outlineColor",u.outlineColor,void 0,o,r),Ee(Number,c,"outlineWidth",u.outlineWidth,void 0,o,r)):l(n.polylineGlow)?(c instanceof RI||(c=new RI),u=n.polylineGlow,Ee(U,c,"color",u.color,void 0,o,r),Ee(Number,c,"glowPower",u.glowPower,void 0,o,r),Ee(Number,c,"taperPower",u.taperPower,void 0,o,r)):l(n.polylineArrow)?(c instanceof SI||(c=new SI),u=n.polylineArrow,Ee(U,c,"color",u.color,void 0,void 0,r)):l(n.polylineDash)?(c instanceof II||(c=new II),u=n.polylineDash,Ee(U,c,"color",u.color,void 0,void 0,r),Ee(U,c,"gapColor",u.gapColor,void 0,void 0,r),Ee(Number,c,"dashLength",u.dashLength,void 0,o,r),Ee(Number,c,"dashPattern",u.dashPattern,void 0,o,r)):l(n.checkerboard)&&(c instanceof dI||(c=new dI),u=n.checkerboard,Ee(U,c,"evenColor",u.evenColor,void 0,o,r),Ee(U,c,"oddColor",u.oddColor,void 0,o,r),Ee(M,c,"repeat",u.repeat,void 0,o,r)),l(d)?d.data=c:e[t]=c}function Gu(e,t,n,i,o,r){if(l(n))if(Array.isArray(n))for(let s=0,a=n.length;s<a;++s)bbe(e,t,n[s],i,o,r);else bbe(e,t,n,i,o,r)}function aat(e,t,n,i){let o=t.name;l(o)&&(e.name=t.name)}function cat(e,t,n,i){let o=t.description;l(o)&&Ee(String,e,"description",o,void 0,i,n)}function lat(e,t,n,i){let o=t.position;l(o)&&Rbe(e,"position",o,void 0,i,n)}function dat(e,t,n,i){let o=t.viewFrom;l(o)&&Ee(m,e,"viewFrom",o,void 0,i,n)}function uat(e,t,n,i){let o=t.orientation;l(o)&&Ee(Me,e,"orientation",o,void 0,i,n)}function mat(e,t,n,i){let o=t.properties;if(l(o)){l(e.properties)||(e.properties=new Gl);for(let r in o)if(o.hasOwnProperty(r)){e.properties.hasProperty(r)||e.properties.addProperty(r);let s=o[r];if(Array.isArray(s))for(let a=0,c=s.length;a<c;++a)J9(mbe(s[a]),e.properties,r,s[a],void 0,i,n);else J9(mbe(s),e.properties,r,s,void 0,i,n)}}}function K9(e,t,n,i,o,r,s){let a=n.map(function(c){return WN(o,c)});if(l(i)){i=Yr(i);let c=e[t];if(!(c instanceof s)){let d=new s;d.intervals.addInterval(c7(c)),e[t]=c=d}i.data=new r(a),c.intervals.addInterval(i)}else e[t]=new r(a)}function ybe(e,t,n,i){let o=n.references;l(o)?K9(e,t,o,n.interval,i,GI,ol):Ee(Array,e,t,n,void 0,void 0,i)}function xbe(e,t,n,i){if(l(n))if(Array.isArray(n))for(let o=0,r=n.length;o<r;++o)ybe(e,t,n[o],i);else ybe(e,t,n,i)}function Cbe(e,t,n,i){let o=n.references;l(o)?K9(e,t,o,n.interval,i,jg,ac):(l(n.cartesian)?n.array=m.unpackArray(n.cartesian):l(n.cartographicRadians)?n.array=m.fromRadiansArrayHeights(n.cartographicRadians,ie.default):l(n.cartographicDegrees)&&(n.array=m.fromDegreesArrayHeights(n.cartographicDegrees,ie.default)),l(n.array)&&Ee(Array,e,t,n,void 0,void 0,i))}function wN(e,t,n,i){if(l(n))if(Array.isArray(n))for(let o=0,r=n.length;o<r;++o)Cbe(e,t,n[o],i);else Cbe(e,t,n,i)}function hat(e){return m.unpackArray(e)}function fat(e){return m.fromRadiansArrayHeights(e,ie.default)}function pat(e){return m.fromDegreesArrayHeights(e,ie.default)}function Tbe(e,t,n,i){let o=n.references;if(l(o)){let r=o.map(function(s){let a={};return K9(a,"positions",s,n.interval,i,jg,ac),a.positions});e[t]=new jg(r)}else l(n.cartesian)?n.array=n.cartesian.map(hat):l(n.cartographicRadians)?n.array=n.cartographicRadians.map(fat):l(n.cartographicDegrees)&&(n.array=n.cartographicDegrees.map(pat)),l(n.array)&&Ee(Array,e,t,n,void 0,void 0,i)}function Aat(e,t,n,i){if(l(n))if(Array.isArray(n))for(let o=0,r=n.length;o<r;++o)Tbe(e,t,n[o],i);else Tbe(e,t,n,i)}function gat(e,t,n,i){if(l(n))if(Array.isArray(n))for(let o=0,r=n.length;o<r;o++)gbe(e,t,n[o],i);else gbe(e,t,n,i)}function bat(e,t,n,i){let o=t.availability;if(!l(o))return;let r;if(Array.isArray(o))for(let s=0,a=o.length;s<a;++s)l(r)||(r=new bs),r.addInterval(Yr(o[s]));else r=new bs,r.addInterval(Yr(o));e.availability=r}function yat(e,t,n,i,o){l(t)&&Ee(dy,e,"alignedAxis",t,n,i,o)}function xat(e,t,n,i){let o=t.billboard;if(!l(o))return;let r=Yr(o.interval),s=e.billboard;l(s)||(e.billboard=s=new Dc),Ee(Boolean,s,"show",o.show,r,i,n),Ee(Image,s,"image",o.image,r,i,n),Ee(Number,s,"scale",o.scale,r,i,n),Ee(M,s,"pixelOffset",o.pixelOffset,r,i,n),Ee(m,s,"eyeOffset",o.eyeOffset,r,i,n),Ee(Bi,s,"horizontalOrigin",o.horizontalOrigin,r,i,n),Ee(Hn,s,"verticalOrigin",o.verticalOrigin,r,i,n),Ee(rt,s,"heightReference",o.heightReference,r,i,n),Ee(U,s,"color",o.color,r,i,n),Ee(Qm,s,"rotation",o.rotation,r,i,n),yat(s,o.alignedAxis,r,i,n),Ee(Boolean,s,"sizeInMeters",o.sizeInMeters,r,i,n),Ee(Number,s,"width",o.width,r,i,n),Ee(Number,s,"height",o.height,r,i,n),Ee(Ot,s,"scaleByDistance",o.scaleByDistance,r,i,n),Ee(Ot,s,"translucencyByDistance",o.translucencyByDistance,r,i,n),Ee(Ot,s,"pixelOffsetScaleByDistance",o.pixelOffsetScaleByDistance,r,i,n),Ee(nt,s,"imageSubRegion",o.imageSubRegion,r,i,n),Ee(Dt,s,"distanceDisplayCondition",o.distanceDisplayCondition,r,i,n),Ee(Number,s,"disableDepthTestDistance",o.disableDepthTestDistance,r,i,n)}function Cat(e,t,n,i){let o=t.box;if(!l(o))return;let r=Yr(o.interval),s=e.box;l(s)||(e.box=s=new Dx),Ee(Boolean,s,"show",o.show,r,i,n),Ee(m,s,"dimensions",o.dimensions,r,i,n),Ee(rt,s,"heightReference",o.heightReference,r,i,n),Ee(Boolean,s,"fill",o.fill,r,i,n),Gu(s,"material",o.material,r,i,n),Ee(Boolean,s,"outline",o.outline,r,i,n),Ee(U,s,"outlineColor",o.outlineColor,r,i,n),Ee(Number,s,"outlineWidth",o.outlineWidth,r,i,n),Ee(Vn,s,"shadows",o.shadows,r,i,n),Ee(Dt,s,"distanceDisplayCondition",o.distanceDisplayCondition,r,i,n)}function Tat(e,t,n,i){let o=t.corridor;if(!l(o))return;let r=Yr(o.interval),s=e.corridor;l(s)||(e.corridor=s=new Qx),Ee(Boolean,s,"show",o.show,r,i,n),wN(s,"positions",o.positions,n),Ee(Number,s,"width",o.width,r,i,n),Ee(Number,s,"height",o.height,r,i,n),Ee(rt,s,"heightReference",o.heightReference,r,i,n),Ee(Number,s,"extrudedHeight",o.extrudedHeight,r,i,n),Ee(rt,s,"extrudedHeightReference",o.extrudedHeightReference,r,i,n),Ee(Ki,s,"cornerType",o.cornerType,r,i,n),Ee(Number,s,"granularity",o.granularity,r,i,n),Ee(Boolean,s,"fill",o.fill,r,i,n),Gu(s,"material",o.material,r,i,n),Ee(Boolean,s,"outline",o.outline,r,i,n),Ee(U,s,"outlineColor",o.outlineColor,r,i,n),Ee(Number,s,"outlineWidth",o.outlineWidth,r,i,n),Ee(Vn,s,"shadows",o.shadows,r,i,n),Ee(Dt,s,"distanceDisplayCondition",o.distanceDisplayCondition,r,i,n),Ee(ti,s,"classificationType",o.classificationType,r,i,n),Ee(Number,s,"zIndex",o.zIndex,r,i,n)}function Eat(e,t,n,i){let o=t.cylinder;if(!l(o))return;let r=Yr(o.interval),s=e.cylinder;l(s)||(e.cylinder=s=new Ox),Ee(Boolean,s,"show",o.show,r,i,n),Ee(Number,s,"length",o.length,r,i,n),Ee(Number,s,"topRadius",o.topRadius,r,i,n),Ee(Number,s,"bottomRadius",o.bottomRadius,r,i,n),Ee(rt,s,"heightReference",o.heightReference,r,i,n),Ee(Boolean,s,"fill",o.fill,r,i,n),Gu(s,"material",o.material,r,i,n),Ee(Boolean,s,"outline",o.outline,r,i,n),Ee(U,s,"outlineColor",o.outlineColor,r,i,n),Ee(Number,s,"outlineWidth",o.outlineWidth,r,i,n),Ee(Number,s,"numberOfVerticalLines",o.numberOfVerticalLines,r,i,n),Ee(Number,s,"slices",o.slices,r,i,n),Ee(Vn,s,"shadows",o.shadows,r,i,n),Ee(Dt,s,"distanceDisplayCondition",o.distanceDisplayCondition,r,i,n)}function Sat(e,t){let n=e.version;if(l(n)&&typeof n=="string"){let r=n.split(".");if(r.length===2){if(r[0]!=="1")throw new me("Cesium only supports CZML version 1.");t._version=n}}if(!l(t._version))throw new me("CZML version information invalid. It is expected to be a property on the document object in the <Major>.<Minor> version format.");let i=t._documentPacket;l(e.name)&&(i.name=e.name);let o=e.clock;if(l(o)){let r=i.clock;l(r)?(r.interval=o.interval??r.interval,r.currentTime=o.currentTime??r.currentTime,r.range=o.range??r.range,r.step=o.step??r.step,r.multiplier=o.multiplier??r.multiplier):i.clock={interval:o.interval,currentTime:o.currentTime,range:o.range,step:o.step,multiplier:o.multiplier}}}function _at(e,t,n,i){let o=t.ellipse;if(!l(o))return;let r=Yr(o.interval),s=e.ellipse;l(s)||(e.ellipse=s=new zx),Ee(Boolean,s,"show",o.show,r,i,n),Ee(Number,s,"semiMajorAxis",o.semiMajorAxis,r,i,n),Ee(Number,s,"semiMinorAxis",o.semiMinorAxis,r,i,n),Ee(Number,s,"height",o.height,r,i,n),Ee(rt,s,"heightReference",o.heightReference,r,i,n),Ee(Number,s,"extrudedHeight",o.extrudedHeight,r,i,n),Ee(rt,s,"extrudedHeightReference",o.extrudedHeightReference,r,i,n),Ee(Qm,s,"rotation",o.rotation,r,i,n),Ee(Qm,s,"stRotation",o.stRotation,r,i,n),Ee(Number,s,"granularity",o.granularity,r,i,n),Ee(Boolean,s,"fill",o.fill,r,i,n),Gu(s,"material",o.material,r,i,n),Ee(Boolean,s,"outline",o.outline,r,i,n),Ee(U,s,"outlineColor",o.outlineColor,r,i,n),Ee(Number,s,"outlineWidth",o.outlineWidth,r,i,n),Ee(Number,s,"numberOfVerticalLines",o.numberOfVerticalLines,r,i,n),Ee(Vn,s,"shadows",o.shadows,r,i,n),Ee(Dt,s,"distanceDisplayCondition",o.distanceDisplayCondition,r,i,n),Ee(ti,s,"classificationType",o.classificationType,r,i,n),Ee(Number,s,"zIndex",o.zIndex,r,i,n)}function Iat(e,t,n,i){let o=t.ellipsoid;if(!l(o))return;let r=Yr(o.interval),s=e.ellipsoid;l(s)||(e.ellipsoid=s=new Hx),Ee(Boolean,s,"show",o.show,r,i,n),Ee(m,s,"radii",o.radii,r,i,n),Ee(m,s,"innerRadii",o.innerRadii,r,i,n),Ee(Number,s,"minimumClock",o.minimumClock,r,i,n),Ee(Number,s,"maximumClock",o.maximumClock,r,i,n),Ee(Number,s,"minimumCone",o.minimumCone,r,i,n),Ee(Number,s,"maximumCone",o.maximumCone,r,i,n),Ee(rt,s,"heightReference",o.heightReference,r,i,n),Ee(Boolean,s,"fill",o.fill,r,i,n),Gu(s,"material",o.material,r,i,n),Ee(Boolean,s,"outline",o.outline,r,i,n),Ee(U,s,"outlineColor",o.outlineColor,r,i,n),Ee(Number,s,"outlineWidth",o.outlineWidth,r,i,n),Ee(Number,s,"stackPartitions",o.stackPartitions,r,i,n),Ee(Number,s,"slicePartitions",o.slicePartitions,r,i,n),Ee(Number,s,"subdivisions",o.subdivisions,r,i,n),Ee(Vn,s,"shadows",o.shadows,r,i,n),Ee(Dt,s,"distanceDisplayCondition",o.distanceDisplayCondition,r,i,n)}function Zat(e,t,n,i){let o=t.label;if(!l(o))return;let r=Yr(o.interval),s=e.label;l(s)||(e.label=s=new Lh),Ee(Boolean,s,"show",o.show,r,i,n),Ee(String,s,"text",o.text,r,i,n),Ee(String,s,"font",o.font,r,i,n),Ee(hr,s,"style",o.style,r,i,n),Ee(Number,s,"scale",o.scale,r,i,n),Ee(Boolean,s,"showBackground",o.showBackground,r,i,n),Ee(U,s,"backgroundColor",o.backgroundColor,r,i,n),Ee(M,s,"backgroundPadding",o.backgroundPadding,r,i,n),Ee(M,s,"pixelOffset",o.pixelOffset,r,i,n),Ee(m,s,"eyeOffset",o.eyeOffset,r,i,n),Ee(Bi,s,"horizontalOrigin",o.horizontalOrigin,r,i,n),Ee(Hn,s,"verticalOrigin",o.verticalOrigin,r,i,n),Ee(rt,s,"heightReference",o.heightReference,r,i,n),Ee(U,s,"fillColor",o.fillColor,r,i,n),Ee(U,s,"outlineColor",o.outlineColor,r,i,n),Ee(Number,s,"outlineWidth",o.outlineWidth,r,i,n),Ee(Ot,s,"translucencyByDistance",o.translucencyByDistance,r,i,n),Ee(Ot,s,"pixelOffsetScaleByDistance",o.pixelOffsetScaleByDistance,r,i,n),Ee(Ot,s,"scaleByDistance",o.scaleByDistance,r,i,n),Ee(Dt,s,"distanceDisplayCondition",o.distanceDisplayCondition,r,i,n),Ee(Number,s,"disableDepthTestDistance",o.disableDepthTestDistance,r,i,n)}function Rat(e,t,n,i){let o=t.model;if(!l(o))return;let r=Yr(o.interval),s=e.model;l(s)||(e.model=s=new vA),Ee(Boolean,s,"show",o.show,r,i,n),Ee(BN.default,s,"uri",o.gltf,r,i,n),Ee(Number,s,"scale",o.scale,r,i,n),Ee(Number,s,"minimumPixelSize",o.minimumPixelSize,r,i,n),Ee(Number,s,"maximumScale",o.maximumScale,r,i,n),Ee(Boolean,s,"incrementallyLoadTextures",o.incrementallyLoadTextures,r,i,n),Ee(Boolean,s,"runAnimations",o.runAnimations,r,i,n),Ee(Boolean,s,"clampAnimations",o.clampAnimations,r,i,n),Ee(Vn,s,"shadows",o.shadows,r,i,n),Ee(rt,s,"heightReference",o.heightReference,r,i,n),Ee(U,s,"silhouetteColor",o.silhouetteColor,r,i,n),Ee(Number,s,"silhouetteSize",o.silhouetteSize,r,i,n),Ee(U,s,"color",o.color,r,i,n),Ee(jc,s,"colorBlendMode",o.colorBlendMode,r,i,n),Ee(Number,s,"colorBlendAmount",o.colorBlendAmount,r,i,n),Ee(Dt,s,"distanceDisplayCondition",o.distanceDisplayCondition,r,i,n);let a,c,d=o.nodeTransformations;if(l(d))if(Array.isArray(d))for(a=0,c=d.length;a<c;++a)Ebe(s,d[a],r,i,n);else Ebe(s,d,r,i,n);let u=o.articulations;if(l(u))if(Array.isArray(u))for(a=0,c=u.length;a<c;++a)Sbe(s,u[a],r,i,n);else Sbe(s,u,r,i,n)}function Ebe(e,t,n,i,o){let r=Yr(t.interval);l(n)&&(l(r)?r=Wn.intersect(r,n,xT):r=n);let s=e.nodeTransformations,a=Object.keys(t);for(let c=0,d=a.length;c<d;++c){let u=a[c];if(u==="interval")continue;let h=t[u];if(!l(h))continue;l(s)||(e.nodeTransformations=s=new Gl),s.hasProperty(u)||s.addProperty(u);let p=s[u];l(p)||(s[u]=p=new Jx),Ee(m,p,"translation",h.translation,r,i,o),Ee(Me,p,"rotation",h.rotation,r,i,o),Ee(m,p,"scale",h.scale,r,i,o)}}function Sbe(e,t,n,i,o){let r=Yr(t.interval);l(n)&&(l(r)?r=Wn.intersect(r,n,xT):r=n);let s=e.articulations,a=Object.keys(t);for(let c=0,d=a.length;c<d;++c){let u=a[c];if(u==="interval")continue;let h=t[u];l(h)&&(l(s)||(e.articulations=s=new Gl),s.hasProperty(u)||s.addProperty(u),Ee(Number,s,u,h,r,i,o))}}function Vat(e,t,n,i){let o=t.path;if(!l(o))return;let r=Yr(o.interval),s=e.path;l(s)||(e.path=s=new UA),Ee(Boolean,s,"show",o.show,r,i,n),Ee(Number,s,"leadTime",o.leadTime,r,i,n),Ee(Number,s,"trailTime",o.trailTime,r,i,n),Ee(Number,s,"width",o.width,r,i,n),Ee(Number,s,"resolution",o.resolution,r,i,n),Gu(s,"material",o.material,r,i,n),Ee(Dt,s,"distanceDisplayCondition",o.distanceDisplayCondition,r,i,n),Ee(String,s,"relativeTo",o.relativeTo,r,i,n)}function Gat(e,t,n,i){let o=t.point;if(!l(o))return;let r=Yr(o.interval),s=e.point;l(s)||(e.point=s=new jx),Ee(Boolean,s,"show",o.show,r,i,n),Ee(Number,s,"pixelSize",o.pixelSize,r,i,n),Ee(rt,s,"heightReference",o.heightReference,r,i,n),Ee(U,s,"color",o.color,r,i,n),Ee(U,s,"outlineColor",o.outlineColor,r,i,n),Ee(Number,s,"outlineWidth",o.outlineWidth,r,i,n),Ee(Ot,s,"scaleByDistance",o.scaleByDistance,r,i,n),Ee(Ot,s,"translucencyByDistance",o.translucencyByDistance,r,i,n),Ee(Dt,s,"distanceDisplayCondition",o.distanceDisplayCondition,r,i,n),Ee(Number,s,"disableDepthTestDistance",o.disableDepthTestDistance,r,i,n)}function FN(e){this.polygon=e,this._definitionChanged=new xe}Object.defineProperties(FN.prototype,{isConstant:{get:function(){let e=this.polygon._positions,t=this.polygon._holes;return(!l(e)||e.isConstant)&&(!l(t)||t.isConstant)}},definitionChanged:{get:function(){return this._definitionChanged}}});FN.prototype.getValue=function(e,t){let n;l(this.polygon._positions)&&(n=this.polygon._positions.getValue(e));let i;return l(this.polygon._holes)&&(i=this.polygon._holes.getValue(e),l(i)&&(i=i.map(function(o){return new _c(o)}))),l(t)?(t.positions=n,t.holes=i,t):new _c(n,i)};FN.prototype.equals=function(e){return this===e||e instanceof FN&&K.equals(this.polygon._positions,e.polygon._positions)&&K.equals(this.polygon._holes,e.polygon._holes)};function Lat(e,t,n,i){let o=t.polygon;if(!l(o))return;let r=Yr(o.interval),s=e.polygon;l(s)||(e.polygon=s=new Wh),Ee(Boolean,s,"show",o.show,r,i,n),wN(s,"_positions",o.positions,n),Aat(s,"_holes",o.holes,n),(l(s._positions)||l(s._holes))&&(s.hierarchy=new FN(s)),Ee(Number,s,"height",o.height,r,i,n),Ee(rt,s,"heightReference",o.heightReference,r,i,n),Ee(Number,s,"extrudedHeight",o.extrudedHeight,r,i,n),Ee(rt,s,"extrudedHeightReference",o.extrudedHeightReference,r,i,n),Ee(Qm,s,"stRotation",o.stRotation,r,i,n),Ee(Number,s,"granularity",o.granularity,r,i,n),Ee(Boolean,s,"fill",o.fill,r,i,n),Gu(s,"material",o.material,r,i,n),Ee(Boolean,s,"outline",o.outline,r,i,n),Ee(U,s,"outlineColor",o.outlineColor,r,i,n),Ee(Number,s,"outlineWidth",o.outlineWidth,r,i,n),Ee(Boolean,s,"perPositionHeight",o.perPositionHeight,r,i,n),Ee(Boolean,s,"closeTop",o.closeTop,r,i,n),Ee(Boolean,s,"closeBottom",o.closeBottom,r,i,n),Ee(un,s,"arcType",o.arcType,r,i,n),Ee(Vn,s,"shadows",o.shadows,r,i,n),Ee(Dt,s,"distanceDisplayCondition",o.distanceDisplayCondition,r,i,n),Ee(ti,s,"classificationType",o.classificationType,r,i,n),Ee(Number,s,"zIndex",o.zIndex,r,i,n)}function Wat(e){return e?un.GEODESIC:un.NONE}function Fat(e,t,n,i){let o=t.polyline;if(!l(o))return;let r=Yr(o.interval),s=e.polyline;if(l(s)||(e.polyline=s=new Qc),Ee(Boolean,s,"show",o.show,r,i,n),wN(s,"positions",o.positions,n),Ee(Number,s,"width",o.width,r,i,n),Ee(Number,s,"granularity",o.granularity,r,i,n),Gu(s,"material",o.material,r,i,n),Gu(s,"depthFailMaterial",o.depthFailMaterial,r,i,n),Ee(un,s,"arcType",o.arcType,r,i,n),Ee(Boolean,s,"clampToGround",o.clampToGround,r,i,n),Ee(Vn,s,"shadows",o.shadows,r,i,n),Ee(Dt,s,"distanceDisplayCondition",o.distanceDisplayCondition,r,i,n),Ee(ti,s,"classificationType",o.classificationType,r,i,n),Ee(Number,s,"zIndex",o.zIndex,r,i,n),l(o.followSurface)&&!l(o.arcType)){let a={};Ee(Boolean,a,"followSurface",o.followSurface,r,i,n),s.arcType=Kst(a.followSurface,Wat)}}function Bat(e,t,n,i){let o=t.polylineVolume;if(!l(o))return;let r=Yr(o.interval),s=e.polylineVolume;l(s)||(e.polylineVolume=s=new qx),wN(s,"positions",o.positions,n),gat(s,"shape",o.shape,n),Ee(Boolean,s,"show",o.show,r,i,n),Ee(Ki,s,"cornerType",o.cornerType,r,i,n),Ee(Boolean,s,"fill",o.fill,r,i,n),Gu(s,"material",o.material,r,i,n),Ee(Boolean,s,"outline",o.outline,r,i,n),Ee(U,s,"outlineColor",o.outlineColor,r,i,n),Ee(Number,s,"outlineWidth",o.outlineWidth,r,i,n),Ee(Number,s,"granularity",o.granularity,r,i,n),Ee(Vn,s,"shadows",o.shadows,r,i,n),Ee(Dt,s,"distanceDisplayCondition",o.distanceDisplayCondition,r,i,n)}function wat(e,t,n,i){let o=t.rectangle;if(!l(o))return;let r=Yr(o.interval),s=e.rectangle;l(s)||(e.rectangle=s=new Fh),Ee(Boolean,s,"show",o.show,r,i,n),Ee(de,s,"coordinates",o.coordinates,r,i,n),Ee(Number,s,"height",o.height,r,i,n),Ee(rt,s,"heightReference",o.heightReference,r,i,n),Ee(Number,s,"extrudedHeight",o.extrudedHeight,r,i,n),Ee(rt,s,"extrudedHeightReference",o.extrudedHeightReference,r,i,n),Ee(Qm,s,"rotation",o.rotation,r,i,n),Ee(Qm,s,"stRotation",o.stRotation,r,i,n),Ee(Number,s,"granularity",o.granularity,r,i,n),Ee(Boolean,s,"fill",o.fill,r,i,n),Gu(s,"material",o.material,r,i,n),Ee(Boolean,s,"outline",o.outline,r,i,n),Ee(U,s,"outlineColor",o.outlineColor,r,i,n),Ee(Number,s,"outlineWidth",o.outlineWidth,r,i,n),Ee(Vn,s,"shadows",o.shadows,r,i,n),Ee(Dt,s,"distanceDisplayCondition",o.distanceDisplayCondition,r,i,n),Ee(ti,s,"classificationType",o.classificationType,r,i,n),Ee(Number,s,"zIndex",o.zIndex,r,i,n)}function Nat(e,t,n,i){let o=t.tileset;if(!l(o))return;let r=Yr(o.interval),s=e.tileset;l(s)||(e.tileset=s=new Kx),Ee(Boolean,s,"show",o.show,r,i,n),Ee(BN.default,s,"uri",o.uri,r,i,n),Ee(Number,s,"maximumScreenSpaceError",o.maximumScreenSpaceError,r,i,n)}function Pat(e,t,n,i){let o=t.wall;if(!l(o))return;let r=Yr(o.interval),s=e.wall;l(s)||(e.wall=s=new DA),Ee(Boolean,s,"show",o.show,r,i,n),wN(s,"positions",o.positions,n),xbe(s,"minimumHeights",o.minimumHeights,n),xbe(s,"maximumHeights",o.maximumHeights,n),Ee(Number,s,"granularity",o.granularity,r,i,n),Ee(Boolean,s,"fill",o.fill,r,i,n),Gu(s,"material",o.material,r,i,n),Ee(Boolean,s,"outline",o.outline,r,i,n),Ee(U,s,"outlineColor",o.outlineColor,r,i,n),Ee(Number,s,"outlineWidth",o.outlineWidth,r,i,n),Ee(Vn,s,"shadows",o.shadows,r,i,n),Ee(Dt,s,"distanceDisplayCondition",o.distanceDisplayCondition,r,i,n)}function _be(e,t,n,i,o){let r=e.id;if(l(r)||(r=qn()),s7=r,!l(o._version)&&r!=="document")throw new me("The first CZML packet is required to be the document object.");if(e.delete===!0)t.removeById(r);else if(r==="document")Sat(e,o);else{let s=t.getOrCreateEntity(r),a=e.parent;l(a)&&(s.parent=t.getOrCreateEntity(a));for(let c=n.length-1;c>-1;c--)n[c](s,e,t,i)}s7=void 0}function Xat(e){let t,n=e._documentPacket.clock;if(!l(n)){if(!l(e._clock)){let o=e._entityCollection.computeAvailability();if(!o.start.equals(qe.MINIMUM_VALUE)){let r=o.start,s=o.stop,a=q.secondsDifference(s,r),c=Math.round(a/120);return t=new Af,t.startTime=q.clone(r),t.stopTime=q.clone(s),t.clockRange=xs.LOOP_STOP,t.multiplier=c,t.currentTime=q.clone(r),t.clockStep=Xo.SYSTEM_CLOCK_MULTIPLIER,e._clock=t,!0}}return!1}l(e._clock)?t=e._clock.clone():(t=new Af,t.startTime=qe.MINIMUM_VALUE.clone(),t.stopTime=qe.MAXIMUM_VALUE.clone(),t.currentTime=qe.MINIMUM_VALUE.clone(),t.clockRange=xs.LOOP_STOP,t.clockStep=Xo.SYSTEM_CLOCK_MULTIPLIER,t.multiplier=1);let i=Yr(n.interval);return l(i)&&(t.startTime=i.start,t.stopTime=i.stop),l(n.currentTime)&&(t.currentTime=q.fromIso8601(n.currentTime)),l(n.range)&&(t.clockRange=xs[n.range]??xs.LOOP_STOP),l(n.step)&&(t.clockStep=Xo[n.step]??Xo.SYSTEM_CLOCK_MULTIPLIER),l(n.multiplier)&&(t.multiplier=n.multiplier),t.equals(e._clock)?!1:(e._clock=t.clone(e._clock),!0)}function Vbe(e,t,n,i){n=n??Q.EMPTY_OBJECT;let o=t,r=n.sourceUri,s=n.credit;if(typeof s=="string"&&(s=new Et(s)),e._credit=s,typeof t=="string"||t instanceof Le){t=Le.createIfNeeded(t),o=t.fetchJson(),r=r??t.clone();let a=e._resourceCredits,c=t.credits;if(l(c)){let d=c.length;for(let u=0;u<d;u++)a.push(c[u])}}return r=Le.createIfNeeded(r),ys.setLoading(e,!0),Promise.resolve(o).then(function(a){return Yat(e,a,r,i)}).catch(function(a){return ys.setLoading(e,!1),e._error.raiseEvent(e,a),console.log(a),Promise.reject(a)})}function Yat(e,t,n,i){ys.setLoading(e,!0);let o=e._entityCollection;i&&(e._version=void 0,e._documentPacket=new Gbe,o.removeAll()),qs._processCzml(t,o,n,void 0,e);let r=Xat(e),s=e._documentPacket;return l(s.name)&&e._name!==s.name?(e._name=s.name,r=!0):!l(e._name)&&l(n)&&(e._name=Jg(n.getUrlComponent()),r=!0),ys.setLoading(e,!1),r&&e._changed.raiseEvent(e),e}function Gbe(){this.name=void 0,this.clock=void 0}function qs(e){this._name=e,this._changed=new xe,this._error=new xe,this._isLoading=!1,this._loading=new xe,this._clock=void 0,this._documentPacket=new Gbe,this._version=void 0,this._entityCollection=new Ya(this),this._entityCluster=new _u,this._credit=void 0,this._resourceCredits=[]}qs.load=function(e,t){return new qs().load(e,t)};Object.defineProperties(qs.prototype,{name:{get:function(){return this._name}},clock:{get:function(){return this._clock}},entities:{get:function(){return this._entityCollection}},isLoading:{get:function(){return this._isLoading}},changedEvent:{get:function(){return this._changed}},errorEvent:{get:function(){return this._error}},loadingEvent:{get:function(){return this._loading}},show:{get:function(){return this._entityCollection.show},set:function(e){this._entityCollection.show=e}},clustering:{get:function(){return this._entityCluster},set:function(e){this._entityCluster=e}},credit:{get:function(){return this._credit}}});qs.updaters=[xat,Cat,Tat,Eat,_at,Iat,Zat,Rat,aat,cat,Vat,Gat,Lat,Fat,Bat,mat,wat,lat,Nat,dat,Pat,uat,bat];qs.registerUpdater=function(e){qs.updaters.includes(e)||qs.updaters.push(e)};qs.unregisterUpdater=function(e){if(qs.updaters.includes(e)){let t=qs.updaters.indexOf(e);qs.updaters.splice(t,1)}};qs.prototype.process=function(e,t){return Vbe(this,e,t,!1)};qs.prototype.load=function(e,t){return Vbe(this,e,t,!0)};qs.prototype.update=function(e){return!0};qs.processPacketData=Ee;qs.processPositionPacketData=Rbe;qs.processMaterialPacketData=Gu;qs._processCzml=function(e,t,n,i,o){if(i=i??qs.updaters,Array.isArray(e))for(let r=0,s=e.length;r<s;++r)_be(e[r],t,i,n,o);else _be(e,t,i,n,o)};var NN=qs;var MCi=y(x(),1);function ql(){this._dataSources=[],this._dataSourceAdded=new xe,this._dataSourceRemoved=new xe,this._dataSourceMoved=new xe}Object.defineProperties(ql.prototype,{length:{get:function(){return this._dataSources.length}},dataSourceAdded:{get:function(){return this._dataSourceAdded}},dataSourceRemoved:{get:function(){return this._dataSourceRemoved}},dataSourceMoved:{get:function(){return this._dataSourceMoved}}});ql.prototype.add=function(e){let t=this,n=this._dataSources;return Promise.resolve(e).then(function(i){return n===t._dataSources&&(t._dataSources.push(i),t._dataSourceAdded.raiseEvent(t,i)),i})};ql.prototype.remove=function(e,t){t=t??!1;let n=this._dataSources.indexOf(e);return n!==-1?(this._dataSources.splice(n,1),this._dataSourceRemoved.raiseEvent(this,e),t&&typeof e.destroy=="function"&&e.destroy(),!0):!1};ql.prototype.removeAll=function(e){e=e??!1;let t=this._dataSources;for(let n=0,i=t.length;n<i;++n){let o=t[n];this._dataSourceRemoved.raiseEvent(this,o),e&&typeof o.destroy=="function"&&o.destroy()}this._dataSources=[]};ql.prototype.contains=function(e){return this.indexOf(e)!==-1};ql.prototype.indexOf=function(e){return this._dataSources.indexOf(e)};ql.prototype.get=function(e){return this._dataSources[e]};ql.prototype.getByName=function(e){return this._dataSources.filter(function(t){return t.name===e})};function j9(e,t){return e.indexOf(t)}function Lbe(e,t,n){let i=e._dataSources,o=i.length-1;if(t=L.clamp(t,0,o),n=L.clamp(n,0,o),t===n)return;let r=i[t];i[t]=i[n],i[n]=r,e.dataSourceMoved.raiseEvent(r,n,t)}ql.prototype.raise=function(e){let t=j9(this._dataSources,e);Lbe(this,t,t+1)};ql.prototype.lower=function(e){let t=j9(this._dataSources,e);Lbe(this,t,t-1)};ql.prototype.raiseToTop=function(e){let t=j9(this._dataSources,e);t!==this._dataSources.length-1&&(this._dataSources.splice(t,1),this._dataSources.push(e),this.dataSourceMoved.raiseEvent(e,this._dataSources.length-1,t))};ql.prototype.lowerToBottom=function(e){let t=j9(this._dataSources,e);t!==0&&(this._dataSources.splice(t,1),this._dataSources.splice(0,0,e),this.dataSourceMoved.raiseEvent(e,0,t))};ql.prototype.isDestroyed=function(){return!1};ql.prototype.destroy=function(){return this.removeAll(!0),he(this)};var PN=ql;var c2i=y(x(),1);var qCi=y(x(),1);var zCi=y(x(),1);function dc(e){e=e??Q.EMPTY_OBJECT,this._primitives=[],this._guid=qn(),this._primitiveAdded=new xe,this._primitiveRemoved=new xe,this._zIndex=void 0,this.show=e.show??!0,this.destroyPrimitives=e.destroyPrimitives??!0,this._countReferences=e.countReferences??!1}Object.defineProperties(dc.prototype,{length:{get:function(){return this._primitives.length}},primitiveAdded:{get:function(){return this._primitiveAdded}},primitiveRemoved:{get:function(){return this._primitiveRemoved}}});dc.prototype.add=function(e,t){let n=l(t),i=e._external=e._external||{},o=i._composites=i._composites||{};return o[this._guid]={collection:this},n?this._primitives.splice(t,0,e):this._primitives.push(e),this._countReferences&&(l(i._referenceCount)?++i._referenceCount:i._referenceCount=1),this._primitiveAdded.raiseEvent(e),e};dc.prototype.remove=function(e){if(this.contains(e)){let t=this._primitives.indexOf(e);if(t!==-1)return this._primitives.splice(t,1),delete e._external._composites[this._guid],this._countReferences&&e._external._referenceCount--,this.destroyPrimitives&&(!this._countReferences||e._external._referenceCount<=0)&&e.destroy(),this._primitiveRemoved.raiseEvent(e),!0}return!1};dc.prototype.removeAndDestroy=function(e){let t=this.remove(e);return t&&!this.destroyPrimitives&&e.destroy(),t};dc.prototype.removeAll=function(){let e=this._primitives,t=e.length;for(let n=0;n<t;++n){let i=e[n];delete i._external._composites[this._guid],this._countReferences&&i._external._referenceCount--,this.destroyPrimitives&&(!this._countReferences||i._external._referenceCount<=0)&&i.destroy(),this._primitiveRemoved.raiseEvent(i)}this._primitives=[]};dc.prototype.contains=function(e){return!!(l(e)&&e._external&&e._external._composites&&e._external._composites[this._guid])};function q9(e,t){return e._primitives.indexOf(t)}dc.prototype.raise=function(e){if(l(e)){let t=q9(this,e),n=this._primitives;if(t!==n.length-1){let i=n[t];n[t]=n[t+1],n[t+1]=i}}};dc.prototype.raiseToTop=function(e){if(l(e)){let t=q9(this,e),n=this._primitives;t!==n.length-1&&(n.splice(t,1),n.push(e))}};dc.prototype.lower=function(e){if(l(e)){let t=q9(this,e),n=this._primitives;if(t!==0){let i=n[t];n[t]=n[t-1],n[t-1]=i}}};dc.prototype.lowerToBottom=function(e){if(l(e)){let t=q9(this,e),n=this._primitives;t!==0&&(n.splice(t,1),n.unshift(e))}};dc.prototype.get=function(e){return this._primitives[e]};dc.prototype.update=function(e){if(!this.show)return;let t=this._primitives;for(let n=0;n<t.length;++n)t[n].update(e)};dc.prototype.prePassesUpdate=function(e){let t=this._primitives;for(let n=0;n<t.length;++n){let i=t[n];l(i.prePassesUpdate)&&i.prePassesUpdate(e)}};dc.prototype.updateForPass=function(e,t){let n=this._primitives;for(let i=0;i<n.length;++i){let o=n[i];l(o.updateForPass)&&o.updateForPass(e,t)}};dc.prototype.postPassesUpdate=function(e){let t=this._primitives;for(let n=0;n<t.length;++n){let i=t[n];l(i.postPassesUpdate)&&i.postPassesUpdate(e)}};dc.prototype.isDestroyed=function(){return!1};dc.prototype.destroy=function(){return this.removeAll(),he(this)};var $l=dc;function Lp(){this._length=0,this._collections={},this._collectionsArray=[],this.show=!0}Object.defineProperties(Lp.prototype,{length:{get:function(){return this._length}}});Lp.prototype.add=function(e,t){t=t??0;let n=this._collections[t];if(!l(n)){n=new $l({destroyPrimitives:!1}),n._zIndex=t,this._collections[t]=n;let i=this._collectionsArray,o=0;for(;o<i.length&&i[o]._zIndex<t;)o++;i.splice(o,0,n)}return n.add(e),this._length++,e._zIndex=t,e};Lp.prototype.set=function(e,t){return t===e._zIndex||(this.remove(e,!0),this.add(e,t)),e};Lp.prototype.remove=function(e,t){if(this.contains(e)){let n=e._zIndex,i=this._collections[n],o;return t?o=i.remove(e):o=i.removeAndDestroy(e),o&&this._length--,i.length===0&&(this._collectionsArray.splice(this._collectionsArray.indexOf(i),1),this._collections[n]=void 0,i.destroy()),o}return!1};Lp.prototype.removeAll=function(){let e=this._collectionsArray;for(let t=0;t<e.length;t++){let n=e[t];n.destroyPrimitives=!0,n.destroy()}this._collections={},this._collectionsArray=[],this._length=0};Lp.prototype.contains=function(e){if(!l(e))return!1;let t=this._collections[e._zIndex];return l(t)&&t.contains(e)};Lp.prototype.update=function(e){if(!this.show)return;let t=this._collectionsArray;for(let n=0;n<t.length;n++)t[n].update(e)};Lp.prototype.isDestroyed=function(){return!1};Lp.prototype.destroy=function(){return this.removeAll(),he(this)};var XN=Lp;var NLi=y(x(),1);var iTi=y(x(),1);function wI(e,t){this._primitives=e,this._orderedGroundPrimitives=t,this._dynamicUpdaters=new Xt}wI.prototype.add=function(e,t){this._dynamicUpdaters.set(t.id,t.createDynamicUpdater(this._primitives,this._orderedGroundPrimitives))};wI.prototype.remove=function(e){let t=e.id,n=this._dynamicUpdaters.get(t);l(n)&&(this._dynamicUpdaters.remove(t),n.destroy())};wI.prototype.update=function(e){let t=this._dynamicUpdaters.values;for(let n=0,i=t.length;n<i;n++)t[n].update(e);return!0};wI.prototype.removeAllPrimitives=function(){let e=this._dynamicUpdaters.values;for(let t=0,n=e.length;t<n;t++)e[t].destroy();this._dynamicUpdaters.removeAll()};wI.prototype.getBoundingSphere=function(e,t){return e=this._dynamicUpdaters.get(e.id),l(e)&&l(e.getBoundingSphere)?e.getBoundingSphere(t):Tt.FAILED};var CT=wI;var UVi=y(x(),1);var yEi=y(x(),1);var BTi=y(x(),1);var lTi=y(x(),1);var d7={},$9=new m,Wbe=new m,Fbe=new Me,Bbe=new $;function NI(e,t,n,i,o,r,s,a,c,d){let u=e+t;m.multiplyByScalar(i,Math.cos(u),$9),m.multiplyByScalar(n,Math.sin(u),Wbe),m.add($9,Wbe,$9);let h=Math.cos(e);h=h*h;let p=Math.sin(e);p=p*p;let f=r/Math.sqrt(s*h+o*p)/a;return Me.fromAxisAngle($9,f,Fbe),$.fromQuaternion(Fbe,Bbe),$.multiplyByVector(Bbe,c,d),m.normalize(d,d),m.multiplyByScalar(d,a,d),d}var wbe=new m,Nbe=new m,l7=new m,Mat=new m;d7.raisePositionsToHeight=function(e,t,n){let i=t.ellipsoid,o=t.height,r=t.extrudedHeight,s=n?e.length/3*2:e.length/3,a=new Float64Array(s*3),c=e.length,d=n?c:0;for(let u=0;u<c;u+=3){let h=u+1,p=u+2,A=m.fromArray(e,u,wbe);i.scaleToGeodeticSurface(A,A);let f=m.clone(A,Nbe),b=i.geodeticSurfaceNormal(A,Mat),C=m.multiplyByScalar(b,o,l7);m.add(A,C,A),n&&(m.multiplyByScalar(b,r,C),m.add(f,C,f),a[u+d]=f.x,a[h+d]=f.y,a[p+d]=f.z),a[u]=A.x,a[h]=A.y,a[p]=A.z}return a};var vat=new m,Uat=new m,Dat=new m;d7.computeEllipsePositions=function(e,t,n){let i=e.semiMinorAxis,o=e.semiMajorAxis,r=e.rotation,s=e.center,a=e.granularity*8,c=i*i,d=o*o,u=o*i,h=m.magnitude(s),p=m.normalize(s,vat),A=m.cross(m.UNIT_Z,s,Uat);A=m.normalize(A,A);let f=m.cross(p,A,Dat),b=1+Math.ceil(L.PI_OVER_TWO/a),C=L.PI_OVER_TWO/(b-1),T=L.PI_OVER_TWO-b*C;T<0&&(b-=Math.ceil(Math.abs(T)/C));let E=2*(b*(b+2)),S=t?new Array(E*3):void 0,I=0,R=wbe,V=Nbe,W=b*4*3,B=W-1,N=0,P=n?new Array(W):void 0,g,_,Z,G,w;for(T=L.PI_OVER_TWO,R=NI(T,r,f,A,c,u,d,h,p,R),t&&(S[I++]=R.x,S[I++]=R.y,S[I++]=R.z),n&&(P[B--]=R.z,P[B--]=R.y,P[B--]=R.x),T=L.PI_OVER_TWO-C,g=1;g<b+1;++g){if(R=NI(T,r,f,A,c,u,d,h,p,R),V=NI(Math.PI-T,r,f,A,c,u,d,h,p,V),t){for(S[I++]=R.x,S[I++]=R.y,S[I++]=R.z,Z=2*g+2,_=1;_<Z-1;++_)G=_/(Z-1),w=m.lerp(R,V,G,l7),S[I++]=w.x,S[I++]=w.y,S[I++]=w.z;S[I++]=V.x,S[I++]=V.y,S[I++]=V.z}n&&(P[B--]=R.z,P[B--]=R.y,P[B--]=R.x,P[N++]=V.x,P[N++]=V.y,P[N++]=V.z),T=L.PI_OVER_TWO-(g+1)*C}for(g=b;g>1;--g){if(T=L.PI_OVER_TWO-(g-1)*C,R=NI(-T,r,f,A,c,u,d,h,p,R),V=NI(T+Math.PI,r,f,A,c,u,d,h,p,V),t){for(S[I++]=R.x,S[I++]=R.y,S[I++]=R.z,Z=2*(g-1)+2,_=1;_<Z-1;++_)G=_/(Z-1),w=m.lerp(R,V,G,l7),S[I++]=w.x,S[I++]=w.y,S[I++]=w.z;S[I++]=V.x,S[I++]=V.y,S[I++]=V.z}n&&(P[B--]=R.z,P[B--]=R.y,P[B--]=R.x,P[N++]=V.x,P[N++]=V.y,P[N++]=V.z)}T=L.PI_OVER_TWO,R=NI(-T,r,f,A,c,u,d,h,p,R);let X={};return t&&(S[I++]=R.x,S[I++]=R.y,S[I++]=R.z,X.positions=S,X.numPts=b),n&&(P[B--]=R.z,P[B--]=R.y,P[B--]=R.x,X.outerPositions=P),X};var Fd=d7;var PI=new m,u7=new m,m7=new m,Pbe=new m,Aa=new M,Xbe=new $,kat=new $,h7=new Me,Ybe=new m,Mbe=new m,vbe=new m,n5=new Ae,Ube=new m,Dbe=new M,kbe=new M;function Qbe(e,t,n){let i=t.vertexFormat,o=t.center,r=t.semiMajorAxis,s=t.semiMinorAxis,a=t.ellipsoid,c=t.stRotation,d=n?e.length/3*2:e.length/3,u=t.shadowVolume,h=i.st?new Float32Array(d*2):void 0,p=i.normal?new Float32Array(d*3):void 0,A=i.tangent?new Float32Array(d*3):void 0,f=i.bitangent?new Float32Array(d*3):void 0,b=u?new Float32Array(d*3):void 0,C=0,T=Ybe,E=Mbe,S=vbe,I=new ki(a),R=I.project(a.cartesianToCartographic(o,n5),Ube),V=a.scaleToGeodeticSurface(o,PI);a.geodeticSurfaceNormal(V,V);let W=Xbe,B=kat;if(c!==0){let w=Me.fromAxisAngle(V,c,h7);W=$.fromQuaternion(w,W),w=Me.fromAxisAngle(V,-c,h7),B=$.fromQuaternion(w,B)}else W=$.clone($.IDENTITY,W),B=$.clone($.IDENTITY,B);let N=M.fromElements(Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY,Dbe),P=M.fromElements(Number.NEGATIVE_INFINITY,Number.NEGATIVE_INFINITY,kbe),g=e.length,_=n?g:0,Z=_/3*2;for(let w=0;w<g;w+=3){let X=w+1,k=w+2,v=m.fromArray(e,w,PI);if(i.st){let D=$.multiplyByVector(W,v,u7),Y=I.project(a.cartesianToCartographic(D,n5),m7);m.subtract(Y,R,Y),Aa.x=(Y.x+r)/(2*r),Aa.y=(Y.y+s)/(2*s),N.x=Math.min(Aa.x,N.x),N.y=Math.min(Aa.y,N.y),P.x=Math.max(Aa.x,P.x),P.y=Math.max(Aa.y,P.y),n&&(h[C+Z]=Aa.x,h[C+1+Z]=Aa.y),h[C++]=Aa.x,h[C++]=Aa.y}(i.normal||i.tangent||i.bitangent||u)&&(T=a.geodeticSurfaceNormal(v,T),u&&(b[w+_]=-T.x,b[X+_]=-T.y,b[k+_]=-T.z),(i.normal||i.tangent||i.bitangent)&&((i.tangent||i.bitangent)&&(E=m.normalize(m.cross(m.UNIT_Z,T,E),E),$.multiplyByVector(B,E,E)),i.normal&&(p[w]=T.x,p[X]=T.y,p[k]=T.z,n&&(p[w+_]=-T.x,p[X+_]=-T.y,p[k+_]=-T.z)),i.tangent&&(A[w]=E.x,A[X]=E.y,A[k]=E.z,n&&(A[w+_]=-E.x,A[X+_]=-E.y,A[k+_]=-E.z)),i.bitangent&&(S=m.normalize(m.cross(T,E,S),S),f[w]=S.x,f[X]=S.y,f[k]=S.z,n&&(f[w+_]=S.x,f[X+_]=S.y,f[k+_]=S.z))))}if(i.st){g=h.length;for(let w=0;w<g;w+=2)h[w]=(h[w]-N.x)/(P.x-N.x),h[w+1]=(h[w+1]-N.y)/(P.y-N.y)}let G=new xn;if(i.position){let w=Fd.raisePositionsToHeight(e,t,n);G.position=new we({componentDatatype:H.DOUBLE,componentsPerAttribute:3,values:w})}if(i.st&&(G.st=new we({componentDatatype:H.FLOAT,componentsPerAttribute:2,values:h})),i.normal&&(G.normal=new we({componentDatatype:H.FLOAT,componentsPerAttribute:3,values:p})),i.tangent&&(G.tangent=new we({componentDatatype:H.FLOAT,componentsPerAttribute:3,values:A})),i.bitangent&&(G.bitangent=new we({componentDatatype:H.FLOAT,componentsPerAttribute:3,values:f})),u&&(G.extrudeDirection=new we({componentDatatype:H.FLOAT,componentsPerAttribute:3,values:b})),n&&l(t.offsetAttribute)){let w=new Uint8Array(d);if(t.offsetAttribute===An.TOP)w=w.fill(1,0,d/2);else{let X=t.offsetAttribute===An.NONE?0:1;w=w.fill(X)}G.applyOffset=new we({componentDatatype:H.UNSIGNED_BYTE,componentsPerAttribute:1,values:w})}return G}function Obe(e){let t=new Array(12*(e*(e+1))-6),n=0,i,o,r,s,a;for(i=0,r=1,s=0;s<3;s++)t[n++]=r++,t[n++]=i,t[n++]=r;for(s=2;s<e+1;++s){for(r=s*(s+1)-1,i=(s-1)*s-1,t[n++]=r++,t[n++]=i,t[n++]=r,o=2*s,a=0;a<o-1;++a)t[n++]=r,t[n++]=i++,t[n++]=i,t[n++]=r++,t[n++]=i,t[n++]=r;t[n++]=r++,t[n++]=i,t[n++]=r}for(o=e*2,++r,++i,s=0;s<o-1;++s)t[n++]=r,t[n++]=i++,t[n++]=i,t[n++]=r++,t[n++]=i,t[n++]=r;for(t[n++]=r,t[n++]=i++,t[n++]=i,t[n++]=r++,t[n++]=i++,t[n++]=i,++i,s=e-1;s>1;--s){for(t[n++]=i++,t[n++]=i,t[n++]=r,o=2*s,a=0;a<o-1;++a)t[n++]=r,t[n++]=i++,t[n++]=i,t[n++]=r++,t[n++]=i,t[n++]=r;t[n++]=i++,t[n++]=i++,t[n++]=r++}for(s=0;s<3;s++)t[n++]=i++,t[n++]=i,t[n++]=r;return t}var TT=new m;function Qat(e){let t=e.center;TT=m.multiplyByScalar(e.ellipsoid.geodeticSurfaceNormal(t,TT),e.height,TT),TT=m.add(t,TT,TT);let n=new ue(TT,e.semiMajorAxis),i=Fd.computeEllipsePositions(e,!0,!1),o=i.positions,r=i.numPts,s=Qbe(o,e,!1),a=Obe(r);return a=Ue.createTypedArray(o.length/3,a),{boundingSphere:n,attributes:s,indices:a}}function Oat(e,t){let n=t.vertexFormat,i=t.center,o=t.semiMajorAxis,r=t.semiMinorAxis,s=t.ellipsoid,a=t.height,c=t.extrudedHeight,d=t.stRotation,u=e.length/3*2,h=new Float64Array(u*3),p=n.st?new Float32Array(u*2):void 0,A=n.normal?new Float32Array(u*3):void 0,f=n.tangent?new Float32Array(u*3):void 0,b=n.bitangent?new Float32Array(u*3):void 0,C=t.shadowVolume,T=C?new Float32Array(u*3):void 0,E=0,S=Ybe,I=Mbe,R=vbe,V=new ki(s),W=V.project(s.cartesianToCartographic(i,n5),Ube),B=s.scaleToGeodeticSurface(i,PI);s.geodeticSurfaceNormal(B,B);let N=Me.fromAxisAngle(B,d,h7),P=$.fromQuaternion(N,Xbe),g=M.fromElements(Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY,Dbe),_=M.fromElements(Number.NEGATIVE_INFINITY,Number.NEGATIVE_INFINITY,kbe),Z=e.length,G=Z/3*2;for(let X=0;X<Z;X+=3){let k=X+1,v=X+2,D=m.fromArray(e,X,PI),Y;if(n.st){let J=$.multiplyByVector(P,D,u7),te=V.project(s.cartesianToCartographic(J,n5),m7);m.subtract(te,W,te),Aa.x=(te.x+o)/(2*o),Aa.y=(te.y+r)/(2*r),g.x=Math.min(Aa.x,g.x),g.y=Math.min(Aa.y,g.y),_.x=Math.max(Aa.x,_.x),_.y=Math.max(Aa.y,_.y),p[E+G]=Aa.x,p[E+1+G]=Aa.y,p[E++]=Aa.x,p[E++]=Aa.y}D=s.scaleToGeodeticSurface(D,D),Y=m.clone(D,u7),S=s.geodeticSurfaceNormal(D,S),C&&(T[X+Z]=-S.x,T[k+Z]=-S.y,T[v+Z]=-S.z);let O=m.multiplyByScalar(S,a,Pbe);if(D=m.add(D,O,D),O=m.multiplyByScalar(S,c,O),Y=m.add(Y,O,Y),n.position&&(h[X+Z]=Y.x,h[k+Z]=Y.y,h[v+Z]=Y.z,h[X]=D.x,h[k]=D.y,h[v]=D.z),n.normal||n.tangent||n.bitangent){R=m.clone(S,R);let J=m.fromArray(e,(X+3)%Z,Pbe);m.subtract(J,D,J);let te=m.subtract(Y,D,m7);S=m.normalize(m.cross(te,J,S),S),n.normal&&(A[X]=S.x,A[k]=S.y,A[v]=S.z,A[X+Z]=S.x,A[k+Z]=S.y,A[v+Z]=S.z),n.tangent&&(I=m.normalize(m.cross(R,S,I),I),f[X]=I.x,f[k]=I.y,f[v]=I.z,f[X+Z]=I.x,f[X+1+Z]=I.y,f[X+2+Z]=I.z),n.bitangent&&(b[X]=R.x,b[k]=R.y,b[v]=R.z,b[X+Z]=R.x,b[k+Z]=R.y,b[v+Z]=R.z)}}if(n.st){Z=p.length;for(let X=0;X<Z;X+=2)p[X]=(p[X]-g.x)/(_.x-g.x),p[X+1]=(p[X+1]-g.y)/(_.y-g.y)}let w=new xn;if(n.position&&(w.position=new we({componentDatatype:H.DOUBLE,componentsPerAttribute:3,values:h})),n.st&&(w.st=new we({componentDatatype:H.FLOAT,componentsPerAttribute:2,values:p})),n.normal&&(w.normal=new we({componentDatatype:H.FLOAT,componentsPerAttribute:3,values:A})),n.tangent&&(w.tangent=new we({componentDatatype:H.FLOAT,componentsPerAttribute:3,values:f})),n.bitangent&&(w.bitangent=new we({componentDatatype:H.FLOAT,componentsPerAttribute:3,values:b})),C&&(w.extrudeDirection=new we({componentDatatype:H.FLOAT,componentsPerAttribute:3,values:T})),l(t.offsetAttribute)){let X=new Uint8Array(u);if(t.offsetAttribute===An.TOP)X=X.fill(1,0,u/2);else{let k=t.offsetAttribute===An.NONE?0:1;X=X.fill(k)}w.applyOffset=new we({componentDatatype:H.UNSIGNED_BYTE,componentsPerAttribute:1,values:X})}return w}function zat(e){let t=e.length/3,n=Ue.createTypedArray(t,t*6),i=0;for(let o=0;o<t;o++){let r=o,s=o+t,a=(r+1)%t,c=a+t;n[i++]=r,n[i++]=s,n[i++]=a,n[i++]=a,n[i++]=s,n[i++]=c}return n}var e5=new ue,t5=new ue;function Hat(e){let t=e.center,n=e.ellipsoid,i=e.semiMajorAxis,o=m.multiplyByScalar(n.geodeticSurfaceNormal(t,PI),e.height,PI);e5.center=m.add(t,o,e5.center),e5.radius=i,o=m.multiplyByScalar(n.geodeticSurfaceNormal(t,o),e.extrudedHeight,o),t5.center=m.add(t,o,t5.center),t5.radius=i;let r=Fd.computeEllipsePositions(e,!0,!0),s=r.positions,a=r.numPts,c=r.outerPositions,d=ue.union(e5,t5),u=Qbe(s,e,!0),h=Obe(a),p=h.length;h.length=p*2;let A=s.length/3;for(let I=0;I<p;I+=3)h[I+p]=h[I+2]+A,h[I+1+p]=h[I+1]+A,h[I+2+p]=h[I]+A;let f=Ue.createTypedArray(A*2/3,h),b=new Ct({attributes:u,indices:f,primitiveType:We.TRIANGLES}),C=Oat(c,e);h=zat(c);let T=Ue.createTypedArray(c.length*2/3,h),E=new Ct({attributes:C,indices:T,primitiveType:We.TRIANGLES}),S=zn.combineInstances([new wt({geometry:b}),new wt({geometry:E})]);return{boundingSphere:d,attributes:S[0].attributes,indices:S[0].indices}}function zbe(e,t,n,i,o,r,s){let c=Fd.computeEllipsePositions({center:e,semiMajorAxis:t,semiMinorAxis:n,rotation:i,granularity:o},!1,!0).outerPositions,d=c.length/3,u=new Array(d);for(let p=0;p<d;++p)u[p]=m.fromArray(c,p*3);let h=de.fromCartesianArray(u,r,s);return h.width>L.PI&&(h.north=h.north>0?L.PI_OVER_TWO-L.EPSILON7:h.north,h.south=h.south<0?L.EPSILON7-L.PI_OVER_TWO:h.south,h.east=L.PI,h.west=-L.PI),h}function Fp(e){e=e??Q.EMPTY_OBJECT;let t=e.center,n=e.ellipsoid??ie.default,i=e.semiMajorAxis,o=e.semiMinorAxis,r=e.granularity??L.RADIANS_PER_DEGREE,s=e.vertexFormat??ve.DEFAULT,a=e.height??0,c=e.extrudedHeight??a;this._center=m.clone(t),this._semiMajorAxis=i,this._semiMinorAxis=o,this._ellipsoid=ie.clone(n),this._rotation=e.rotation??0,this._stRotation=e.stRotation??0,this._height=Math.max(c,a),this._granularity=r,this._vertexFormat=ve.clone(s),this._extrudedHeight=Math.min(c,a),this._shadowVolume=e.shadowVolume??!1,this._workerName="createEllipseGeometry",this._offsetAttribute=e.offsetAttribute,this._rectangle=void 0,this._textureCoordinateRotationPoints=void 0}Fp.packedLength=m.packedLength+ie.packedLength+ve.packedLength+9;Fp.pack=function(e,t,n){return n=n??0,m.pack(e._center,t,n),n+=m.packedLength,ie.pack(e._ellipsoid,t,n),n+=ie.packedLength,ve.pack(e._vertexFormat,t,n),n+=ve.packedLength,t[n++]=e._semiMajorAxis,t[n++]=e._semiMinorAxis,t[n++]=e._rotation,t[n++]=e._stRotation,t[n++]=e._height,t[n++]=e._granularity,t[n++]=e._extrudedHeight,t[n++]=e._shadowVolume?1:0,t[n]=e._offsetAttribute??-1,t};var Hbe=new m,Jbe=new ie,Kbe=new ve,Wp={center:Hbe,ellipsoid:Jbe,vertexFormat:Kbe,semiMajorAxis:void 0,semiMinorAxis:void 0,rotation:void 0,stRotation:void 0,height:void 0,granularity:void 0,extrudedHeight:void 0,shadowVolume:void 0,offsetAttribute:void 0};Fp.unpack=function(e,t,n){t=t??0;let i=m.unpack(e,t,Hbe);t+=m.packedLength;let o=ie.unpack(e,t,Jbe);t+=ie.packedLength;let r=ve.unpack(e,t,Kbe);t+=ve.packedLength;let s=e[t++],a=e[t++],c=e[t++],d=e[t++],u=e[t++],h=e[t++],p=e[t++],A=e[t++]===1,f=e[t];return l(n)?(n._center=m.clone(i,n._center),n._ellipsoid=ie.clone(o,n._ellipsoid),n._vertexFormat=ve.clone(r,n._vertexFormat),n._semiMajorAxis=s,n._semiMinorAxis=a,n._rotation=c,n._stRotation=d,n._height=u,n._granularity=h,n._extrudedHeight=p,n._shadowVolume=A,n._offsetAttribute=f===-1?void 0:f,n):(Wp.height=u,Wp.extrudedHeight=p,Wp.granularity=h,Wp.stRotation=d,Wp.rotation=c,Wp.semiMajorAxis=s,Wp.semiMinorAxis=a,Wp.shadowVolume=A,Wp.offsetAttribute=f===-1?void 0:f,new Fp(Wp))};Fp.computeRectangle=function(e,t){e=e??Q.EMPTY_OBJECT;let n=e.center,i=e.ellipsoid??ie.default,o=e.semiMajorAxis,r=e.semiMinorAxis,s=e.granularity??L.RADIANS_PER_DEGREE,a=e.rotation??0;return zbe(n,o,r,a,s,i,t)};Fp.createGeometry=function(e){if(e._semiMajorAxis<=0||e._semiMinorAxis<=0)return;let t=e._height,n=e._extrudedHeight,i=!L.equalsEpsilon(t,n,0,L.EPSILON2);e._center=e._ellipsoid.scaleToGeodeticSurface(e._center,e._center);let o={center:e._center,semiMajorAxis:e._semiMajorAxis,semiMinorAxis:e._semiMinorAxis,ellipsoid:e._ellipsoid,rotation:e._rotation,height:t,granularity:e._granularity,vertexFormat:e._vertexFormat,stRotation:e._stRotation},r;if(i)o.extrudedHeight=n,o.shadowVolume=e._shadowVolume,o.offsetAttribute=e._offsetAttribute,r=Hat(o);else if(r=Qat(o),l(e._offsetAttribute)){let s=r.attributes.position.values.length,a=e._offsetAttribute===An.NONE?0:1,c=new Uint8Array(s/3).fill(a);r.attributes.applyOffset=new we({componentDatatype:H.UNSIGNED_BYTE,componentsPerAttribute:1,values:c})}return new Ct({attributes:r.attributes,indices:r.indices,primitiveType:We.TRIANGLES,boundingSphere:r.boundingSphere,offsetAttribute:e._offsetAttribute})};Fp.createShadowVolume=function(e,t,n){let i=e._granularity,o=e._ellipsoid,r=t(i,o),s=n(i,o);return new Fp({center:e._center,semiMajorAxis:e._semiMajorAxis,semiMinorAxis:e._semiMinorAxis,ellipsoid:o,rotation:e._rotation,stRotation:e._stRotation,granularity:i,extrudedHeight:r,height:s,vertexFormat:ve.POSITION_ONLY,shadowVolume:!0})};function Jat(e){let t=-e._stRotation;if(t===0)return[0,0,0,1,1,0];let i=Fd.computeEllipsePositions({center:e._center,semiMajorAxis:e._semiMajorAxis,semiMinorAxis:e._semiMinorAxis,rotation:e._rotation,granularity:e._granularity},!1,!0).outerPositions,o=i.length/3,r=new Array(o);for(let c=0;c<o;++c)r[c]=m.fromArray(i,c*3);let s=e._ellipsoid,a=e.rectangle;return Ct._textureCoordinateRotationPoints(r,t,s,a)}Object.defineProperties(Fp.prototype,{rectangle:{get:function(){return l(this._rectangle)||(this._rectangle=zbe(this._center,this._semiMajorAxis,this._semiMinorAxis,this._rotation,this._granularity,this._ellipsoid)),this._rectangle}},textureCoordinateRotationPoints:{get:function(){return l(this._textureCoordinateRotationPoints)||(this._textureCoordinateRotationPoints=Jat(this)),this._textureCoordinateRotationPoints}}});var ed=Fp;var KTi=y(x(),1);var jbe=new m,ET=new m;function Kat(e){let t=e.center;ET=m.multiplyByScalar(e.ellipsoid.geodeticSurfaceNormal(t,ET),e.height,ET),ET=m.add(t,ET,ET);let n=new ue(ET,e.semiMajorAxis),i=Fd.computeEllipsePositions(e,!1,!0).outerPositions,o=new xn({position:new we({componentDatatype:H.DOUBLE,componentsPerAttribute:3,values:Fd.raisePositionsToHeight(i,e,!1)})}),r=i.length/3,s=Ue.createTypedArray(r,r*2),a=0;for(let c=0;c<r;++c)s[a++]=c,s[a++]=(c+1)%r;return{boundingSphere:n,attributes:o,indices:s}}var i5=new ue,o5=new ue;function jat(e){let t=e.center,n=e.ellipsoid,i=e.semiMajorAxis,o=m.multiplyByScalar(n.geodeticSurfaceNormal(t,jbe),e.height,jbe);i5.center=m.add(t,o,i5.center),i5.radius=i,o=m.multiplyByScalar(n.geodeticSurfaceNormal(t,o),e.extrudedHeight,o),o5.center=m.add(t,o,o5.center),o5.radius=i;let r=Fd.computeEllipsePositions(e,!1,!0).outerPositions,s=new xn({position:new we({componentDatatype:H.DOUBLE,componentsPerAttribute:3,values:Fd.raisePositionsToHeight(r,e,!0)})});r=s.position.values;let a=ue.union(i5,o5),c=r.length/3;if(l(e.offsetAttribute)){let f=new Uint8Array(c);if(e.offsetAttribute===An.TOP)f=f.fill(1,0,c/2);else{let b=e.offsetAttribute===An.NONE?0:1;f=f.fill(b)}s.applyOffset=new we({componentDatatype:H.UNSIGNED_BYTE,componentsPerAttribute:1,values:f})}let d=e.numberOfVerticalLines??16;d=L.clamp(d,0,c/2);let u=Ue.createTypedArray(c,c*2+d*2);c/=2;let h=0,p;for(p=0;p<c;++p)u[h++]=p,u[h++]=(p+1)%c,u[h++]=p+c,u[h++]=(p+1)%c+c;let A;if(d>0){let f=Math.min(d,c);A=Math.round(c/f);let b=Math.min(A*d,c);for(p=0;p<b;p+=A)u[h++]=p,u[h++]=p+c}return{boundingSphere:a,attributes:s,indices:u}}function XI(e){e=e??Q.EMPTY_OBJECT;let t=e.center,n=e.ellipsoid??ie.default,i=e.semiMajorAxis,o=e.semiMinorAxis,r=e.granularity??L.RADIANS_PER_DEGREE,s=e.height??0,a=e.extrudedHeight??s;this._center=m.clone(t),this._semiMajorAxis=i,this._semiMinorAxis=o,this._ellipsoid=ie.clone(n),this._rotation=e.rotation??0,this._height=Math.max(a,s),this._granularity=r,this._extrudedHeight=Math.min(a,s),this._numberOfVerticalLines=Math.max(e.numberOfVerticalLines??16,0),this._offsetAttribute=e.offsetAttribute,this._workerName="createEllipseOutlineGeometry"}XI.packedLength=m.packedLength+ie.packedLength+8;XI.pack=function(e,t,n){return n=n??0,m.pack(e._center,t,n),n+=m.packedLength,ie.pack(e._ellipsoid,t,n),n+=ie.packedLength,t[n++]=e._semiMajorAxis,t[n++]=e._semiMinorAxis,t[n++]=e._rotation,t[n++]=e._height,t[n++]=e._granularity,t[n++]=e._extrudedHeight,t[n++]=e._numberOfVerticalLines,t[n]=e._offsetAttribute??-1,t};var qbe=new m,$be=new ie,ib={center:qbe,ellipsoid:$be,semiMajorAxis:void 0,semiMinorAxis:void 0,rotation:void 0,height:void 0,granularity:void 0,extrudedHeight:void 0,numberOfVerticalLines:void 0,offsetAttribute:void 0};XI.unpack=function(e,t,n){t=t??0;let i=m.unpack(e,t,qbe);t+=m.packedLength;let o=ie.unpack(e,t,$be);t+=ie.packedLength;let r=e[t++],s=e[t++],a=e[t++],c=e[t++],d=e[t++],u=e[t++],h=e[t++],p=e[t];return l(n)?(n._center=m.clone(i,n._center),n._ellipsoid=ie.clone(o,n._ellipsoid),n._semiMajorAxis=r,n._semiMinorAxis=s,n._rotation=a,n._height=c,n._granularity=d,n._extrudedHeight=u,n._numberOfVerticalLines=h,n._offsetAttribute=p===-1?void 0:p,n):(ib.height=c,ib.extrudedHeight=u,ib.granularity=d,ib.rotation=a,ib.semiMajorAxis=r,ib.semiMinorAxis=s,ib.numberOfVerticalLines=h,ib.offsetAttribute=p===-1?void 0:p,new XI(ib))};XI.createGeometry=function(e){if(e._semiMajorAxis<=0||e._semiMinorAxis<=0)return;let t=e._height,n=e._extrudedHeight,i=!L.equalsEpsilon(t,n,0,L.EPSILON2);e._center=e._ellipsoid.scaleToGeodeticSurface(e._center,e._center);let o={center:e._center,semiMajorAxis:e._semiMajorAxis,semiMinorAxis:e._semiMinorAxis,ellipsoid:e._ellipsoid,rotation:e._rotation,height:t,granularity:e._granularity,numberOfVerticalLines:e._numberOfVerticalLines},r;if(i)o.extrudedHeight=n,o.offsetAttribute=e._offsetAttribute,r=jat(o);else if(r=Kat(o),l(e._offsetAttribute)){let s=r.attributes.position.values.length,a=e._offsetAttribute===An.NONE?0:1,c=new Uint8Array(s/3).fill(a);r.attributes.applyOffset=new we({componentDatatype:H.UNSIGNED_BYTE,componentsPerAttribute:1,values:c})}return new Ct({attributes:r.attributes,indices:r.indices,primitiveType:We.LINES,boundingSphere:r.boundingSphere,offsetAttribute:e._offsetAttribute})};var Lu=XI;var e0e=new U,t0e=m.ZERO,n0e=new m,i0e=new de;function qat(e){this.id=e,this.vertexFormat=void 0,this.center=void 0,this.semiMajorAxis=void 0,this.semiMinorAxis=void 0,this.rotation=void 0,this.height=void 0,this.extrudedHeight=void 0,this.granularity=void 0,this.stRotation=void 0,this.numberOfVerticalLines=void 0,this.offsetAttribute=void 0}function bf(e,t){si.call(this,{entity:e,scene:t,geometryOptions:new qat(e),geometryPropertyName:"ellipse",observedPropertyNames:["availability","position","ellipse"]}),this._onEntityPropertyChanged(e,"ellipse",e.ellipse,void 0)}l(Object.create)&&(bf.prototype=Object.create(si.prototype),bf.prototype.constructor=bf);bf.prototype.createFillGeometryInstance=function(e){let t=this._entity,n=t.isAvailable(e),i={show:new Rn(n&&t.isShowing&&this._showProperty.getValue(e)&&this._fillProperty.getValue(e)),distanceDisplayCondition:ei.fromDistanceDisplayCondition(this._distanceDisplayConditionProperty.getValue(e)),offset:void 0,color:void 0};if(this._materialProperty instanceof Kt){let o;l(this._materialProperty.color)&&(this._materialProperty.color.isConstant||n)&&(o=this._materialProperty.color.getValue(e,e0e)),l(o)||(o=U.WHITE),i.color=$t.fromColor(o)}return l(this._options.offsetAttribute)&&(i.offset=Ao.fromCartesian3(K.getValueOrDefault(this._terrainOffsetProperty,e,t0e,n0e))),new wt({id:t,geometry:new ed(this._options),attributes:i})};bf.prototype.createOutlineGeometryInstance=function(e){let t=this._entity,n=t.isAvailable(e),i=K.getValueOrDefault(this._outlineColorProperty,e,U.BLACK,e0e),o=this._distanceDisplayConditionProperty.getValue(e),r={show:new Rn(n&&t.isShowing&&this._showProperty.getValue(e)&&this._showOutlineProperty.getValue(e)),color:$t.fromColor(i),distanceDisplayCondition:ei.fromDistanceDisplayCondition(o),offset:void 0};return l(this._options.offsetAttribute)&&(r.offset=Ao.fromCartesian3(K.getValueOrDefault(this._terrainOffsetProperty,e,t0e,n0e))),new wt({id:t,geometry:new Lu(this._options),attributes:r})};bf.prototype._computeCenter=function(e,t){return K.getValueOrUndefined(this._entity.position,e,t)};bf.prototype._isHidden=function(e,t){let n=e.position;return!l(n)||!l(t.semiMajorAxis)||!l(t.semiMinorAxis)||Si.prototype._isHidden.call(this,e,t)};bf.prototype._isDynamic=function(e,t){return!e.position.isConstant||!t.semiMajorAxis.isConstant||!t.semiMinorAxis.isConstant||!K.isConstant(t.rotation)||!K.isConstant(t.height)||!K.isConstant(t.extrudedHeight)||!K.isConstant(t.granularity)||!K.isConstant(t.stRotation)||!K.isConstant(t.outlineWidth)||!K.isConstant(t.numberOfVerticalLines)||!K.isConstant(t.zIndex)||this._onTerrain&&!K.isConstant(this._materialProperty)&&!(this._materialProperty instanceof Kt)};bf.prototype._setStaticOptions=function(e,t){let n=K.getValueOrUndefined(t.height,qe.MINIMUM_VALUE),i=K.getValueOrDefault(t.heightReference,qe.MINIMUM_VALUE,rt.NONE),o=K.getValueOrUndefined(t.extrudedHeight,qe.MINIMUM_VALUE),r=K.getValueOrDefault(t.extrudedHeightReference,qe.MINIMUM_VALUE,rt.NONE);l(o)&&!l(n)&&(n=0);let s=this._options;s.vertexFormat=this._materialProperty instanceof Kt?yn.VERTEX_FORMAT:go.MaterialSupport.TEXTURED.vertexFormat,s.center=e.position.getValue(qe.MINIMUM_VALUE,s.center),s.semiMajorAxis=t.semiMajorAxis.getValue(qe.MINIMUM_VALUE,s.semiMajorAxis),s.semiMinorAxis=t.semiMinorAxis.getValue(qe.MINIMUM_VALUE,s.semiMinorAxis),s.rotation=K.getValueOrUndefined(t.rotation,qe.MINIMUM_VALUE),s.granularity=K.getValueOrUndefined(t.granularity,qe.MINIMUM_VALUE),s.stRotation=K.getValueOrUndefined(t.stRotation,qe.MINIMUM_VALUE),s.numberOfVerticalLines=K.getValueOrUndefined(t.numberOfVerticalLines,qe.MINIMUM_VALUE),s.offsetAttribute=si.computeGeometryOffsetAttribute(n,i,o,r),s.height=si.getGeometryHeight(n,i),o=si.getGeometryExtrudedHeight(o,r),o===si.CLAMP_TO_GROUND&&(o=Gi.getMinimumMaximumHeights(ed.computeRectangle(s,i0e)).minimumTerrainHeight),s.extrudedHeight=o};bf.DynamicGeometryUpdater=YI;function YI(e,t,n){Ei.call(this,e,t,n)}l(Object.create)&&(YI.prototype=Object.create(Ei.prototype),YI.prototype.constructor=YI);YI.prototype._isHidden=function(e,t,n){let i=this._options;return!l(i.center)||!l(i.semiMajorAxis)||!l(i.semiMinorAxis)||Ei.prototype._isHidden.call(this,e,t,n)};YI.prototype._setOptions=function(e,t,n){let i=this._options,o=K.getValueOrUndefined(t.height,n),r=K.getValueOrDefault(t.heightReference,n,rt.NONE),s=K.getValueOrUndefined(t.extrudedHeight,n),a=K.getValueOrDefault(t.extrudedHeightReference,n,rt.NONE);l(s)&&!l(o)&&(o=0),i.center=K.getValueOrUndefined(e.position,n,i.center),i.semiMajorAxis=K.getValueOrUndefined(t.semiMajorAxis,n),i.semiMinorAxis=K.getValueOrUndefined(t.semiMinorAxis,n),i.rotation=K.getValueOrUndefined(t.rotation,n),i.granularity=K.getValueOrUndefined(t.granularity,n),i.stRotation=K.getValueOrUndefined(t.stRotation,n),i.numberOfVerticalLines=K.getValueOrUndefined(t.numberOfVerticalLines,n),i.offsetAttribute=si.computeGeometryOffsetAttribute(o,r,s,a),i.height=si.getGeometryHeight(o,r),s=si.getGeometryExtrudedHeight(s,a),s===si.CLAMP_TO_GROUND&&(s=Gi.getMinimumMaximumHeights(ed.computeRectangle(i,i0e)).minimumTerrainHeight),i.extrudedHeight=s};var YN=bf;var lSi=y(x(),1);var NEi=y(x(),1);var $at=new m,ect=new m,tct=new m,nct=new m,ict=new m,oct=new m(1,1,1),o0e=Math.cos,r0e=Math.sin;function ob(e){e=e??Q.EMPTY_OBJECT;let t=e.radii??oct,n=e.innerRadii??t,i=e.minimumClock??0,o=e.maximumClock??L.TWO_PI,r=e.minimumCone??0,s=e.maximumCone??L.PI,a=Math.round(e.stackPartitions??64),c=Math.round(e.slicePartitions??64),d=e.vertexFormat??ve.DEFAULT;this._radii=m.clone(t),this._innerRadii=m.clone(n),this._minimumClock=i,this._maximumClock=o,this._minimumCone=r,this._maximumCone=s,this._stackPartitions=a,this._slicePartitions=c,this._vertexFormat=ve.clone(d),this._offsetAttribute=e.offsetAttribute,this._workerName="createEllipsoidGeometry"}ob.packedLength=2*m.packedLength+ve.packedLength+7;ob.pack=function(e,t,n){return n=n??0,m.pack(e._radii,t,n),n+=m.packedLength,m.pack(e._innerRadii,t,n),n+=m.packedLength,ve.pack(e._vertexFormat,t,n),n+=ve.packedLength,t[n++]=e._minimumClock,t[n++]=e._maximumClock,t[n++]=e._minimumCone,t[n++]=e._maximumCone,t[n++]=e._stackPartitions,t[n++]=e._slicePartitions,t[n]=e._offsetAttribute??-1,t};var s0e=new m,a0e=new m,c0e=new ve,uy={radii:s0e,innerRadii:a0e,vertexFormat:c0e,minimumClock:void 0,maximumClock:void 0,minimumCone:void 0,maximumCone:void 0,stackPartitions:void 0,slicePartitions:void 0,offsetAttribute:void 0};ob.unpack=function(e,t,n){t=t??0;let i=m.unpack(e,t,s0e);t+=m.packedLength;let o=m.unpack(e,t,a0e);t+=m.packedLength;let r=ve.unpack(e,t,c0e);t+=ve.packedLength;let s=e[t++],a=e[t++],c=e[t++],d=e[t++],u=e[t++],h=e[t++],p=e[t];return l(n)?(n._radii=m.clone(i,n._radii),n._innerRadii=m.clone(o,n._innerRadii),n._vertexFormat=ve.clone(r,n._vertexFormat),n._minimumClock=s,n._maximumClock=a,n._minimumCone=c,n._maximumCone=d,n._stackPartitions=u,n._slicePartitions=h,n._offsetAttribute=p===-1?void 0:p,n):(uy.minimumClock=s,uy.maximumClock=a,uy.minimumCone=c,uy.maximumCone=d,uy.stackPartitions=u,uy.slicePartitions=h,uy.offsetAttribute=p===-1?void 0:p,new ob(uy))};ob.createGeometry=function(e){let t=e._radii;if(t.x<=0||t.y<=0||t.z<=0)return;let n=e._innerRadii;if(n.x<=0||n.y<=0||n.z<=0)return;let i=e._minimumClock,o=e._maximumClock,r=e._minimumCone,s=e._maximumCone,a=e._vertexFormat,c=e._slicePartitions+1,d=e._stackPartitions+1;c=Math.round(c*Math.abs(o-i)/L.TWO_PI),d=Math.round(d*Math.abs(s-r)/L.PI),c<2&&(c=2),d<2&&(d=2);let u,h,p=0,A=[r],f=[i];for(u=0;u<d;u++)A.push(r+u*(s-r)/(d-1));for(A.push(s),h=0;h<c;h++)f.push(i+h*(o-i)/(c-1));f.push(o);let b=A.length,C=f.length,T=0,E=1,S=n.x!==t.x||n.y!==t.y||n.z!==t.z,I=!1,R=!1,V=!1;S&&(E=2,r>0&&(I=!0,T+=c-1),s<Math.PI&&(R=!0,T+=c-1),(o-i)%L.TWO_PI?(V=!0,T+=(d-1)*2+1):T+=1);let W=C*b*E,B=new Float64Array(W*3),N=new Array(W).fill(!1),P=new Array(W).fill(!1),g=c*d*E,_=6*(g+T+1-(c+d)*E),Z=Ue.createTypedArray(g,_),G=a.normal?new Float32Array(W*3):void 0,w=a.tangent?new Float32Array(W*3):void 0,X=a.bitangent?new Float32Array(W*3):void 0,k=a.st?new Float32Array(W*2):void 0,v=new Array(b),D=new Array(b);for(u=0;u<b;u++)v[u]=r0e(A[u]),D[u]=o0e(A[u]);let Y=new Array(C),O=new Array(C);for(h=0;h<C;h++)O[h]=o0e(f[h]),Y[h]=r0e(f[h]);for(u=0;u<b;u++)for(h=0;h<C;h++)B[p++]=t.x*v[u]*O[h],B[p++]=t.y*v[u]*Y[h],B[p++]=t.z*D[u];let J=W/2;if(S)for(u=0;u<b;u++)for(h=0;h<C;h++)B[p++]=n.x*v[u]*O[h],B[p++]=n.y*v[u]*Y[h],B[p++]=n.z*D[u],N[J]=!0,u>0&&u!==b-1&&h!==0&&h!==C-1&&(P[J]=!0),J++;p=0;let te,z;for(u=1;u<b-2;u++)for(te=u*C,z=(u+1)*C,h=1;h<C-2;h++)Z[p++]=z+h,Z[p++]=z+h+1,Z[p++]=te+h+1,Z[p++]=z+h,Z[p++]=te+h+1,Z[p++]=te+h;if(S){let st=b*C;for(u=1;u<b-2;u++)for(te=st+u*C,z=st+(u+1)*C,h=1;h<C-2;h++)Z[p++]=z+h,Z[p++]=te+h,Z[p++]=te+h+1,Z[p++]=z+h,Z[p++]=te+h+1,Z[p++]=z+h+1}let j,ee;if(S){if(I)for(ee=b*C,u=1;u<C-2;u++)Z[p++]=u,Z[p++]=u+1,Z[p++]=ee+u+1,Z[p++]=u,Z[p++]=ee+u+1,Z[p++]=ee+u;if(R)for(j=b*C-C,ee=b*C*E-C,u=1;u<C-2;u++)Z[p++]=j+u+1,Z[p++]=j+u,Z[p++]=ee+u,Z[p++]=j+u+1,Z[p++]=ee+u,Z[p++]=ee+u+1}if(V){for(u=1;u<b-2;u++)ee=C*b+C*u,j=C*u,Z[p++]=ee,Z[p++]=j+C,Z[p++]=j,Z[p++]=ee,Z[p++]=ee+C,Z[p++]=j+C;for(u=1;u<b-2;u++)ee=C*b+C*(u+1)-1,j=C*(u+1)-1,Z[p++]=j+C,Z[p++]=ee,Z[p++]=j,Z[p++]=j+C,Z[p++]=ee+C,Z[p++]=ee}let ge=new xn;a.position&&(ge.position=new we({componentDatatype:H.DOUBLE,componentsPerAttribute:3,values:B}));let ye=0,ae=0,Ce=0,Te=0,Fe=W/2,Ne,Pe=ie.fromCartesian3(t),Xe=ie.fromCartesian3(n);if(a.st||a.normal||a.tangent||a.bitangent){for(u=0;u<W;u++){Ne=N[u]?Xe:Pe;let st=m.fromArray(B,u*3,$at),Ye=Ne.geodeticSurfaceNormal(st,ect);if(P[u]&&m.negate(Ye,Ye),a.st){let xt=M.negate(Ye,ict);k[ye++]=Math.atan2(xt.y,xt.x)/L.TWO_PI+.5,k[ye++]=Math.asin(Ye.z)/Math.PI+.5}if(a.normal&&(G[ae++]=Ye.x,G[ae++]=Ye.y,G[ae++]=Ye.z),a.tangent||a.bitangent){let xt=tct,at=0,Je;if(N[u]&&(at=Fe),!I&&u>=at&&u<at+C*2?Je=m.UNIT_X:Je=m.UNIT_Z,m.cross(Je,Ye,xt),m.normalize(xt,xt),a.tangent&&(w[Ce++]=xt.x,w[Ce++]=xt.y,w[Ce++]=xt.z),a.bitangent){let lt=m.cross(Ye,xt,nct);m.normalize(lt,lt),X[Te++]=lt.x,X[Te++]=lt.y,X[Te++]=lt.z}}}a.st&&(ge.st=new we({componentDatatype:H.FLOAT,componentsPerAttribute:2,values:k})),a.normal&&(ge.normal=new we({componentDatatype:H.FLOAT,componentsPerAttribute:3,values:G})),a.tangent&&(ge.tangent=new we({componentDatatype:H.FLOAT,componentsPerAttribute:3,values:w})),a.bitangent&&(ge.bitangent=new we({componentDatatype:H.FLOAT,componentsPerAttribute:3,values:X}))}if(l(e._offsetAttribute)){let st=B.length,Ye=e._offsetAttribute===An.NONE?0:1,xt=new Uint8Array(st/3).fill(Ye);ge.applyOffset=new we({componentDatatype:H.UNSIGNED_BYTE,componentsPerAttribute:1,values:xt})}return new Ct({attributes:ge,indices:Z,primitiveType:We.TRIANGLES,boundingSphere:ue.fromEllipsoid(Pe),offsetAttribute:e._offsetAttribute})};var f7;ob.getUnitEllipsoid=function(){return l(f7)||(f7=ob.createGeometry(new ob({radii:new m(1,1,1),vertexFormat:ve.POSITION_ONLY}))),f7};var Ma=ob;var rct=new Kt(U.WHITE),p7=m.ZERO,A7=new m,sct=new m,act=new m,g7=new U,cct=new m(1,1,1);function lct(e){this.id=e,this.vertexFormat=void 0,this.radii=void 0,this.innerRadii=void 0,this.minimumClock=void 0,this.maximumClock=void 0,this.minimumCone=void 0,this.maximumCone=void 0,this.stackPartitions=void 0,this.slicePartitions=void 0,this.subdivisions=void 0,this.offsetAttribute=void 0}function Wu(e,t){Si.call(this,{entity:e,scene:t,geometryOptions:new lct(e),geometryPropertyName:"ellipsoid",observedPropertyNames:["availability","position","orientation","ellipsoid"]}),this._onEntityPropertyChanged(e,"ellipsoid",e.ellipsoid,void 0)}l(Object.create)&&(Wu.prototype=Object.create(Si.prototype),Wu.prototype.constructor=Wu);Object.defineProperties(Wu.prototype,{terrainOffsetProperty:{get:function(){return this._terrainOffsetProperty}}});Wu.prototype.createFillGeometryInstance=function(e,t,n){let i=this._entity,o=i.isAvailable(e),r,s=new Rn(o&&i.isShowing&&this._showProperty.getValue(e)&&this._fillProperty.getValue(e)),a=this._distanceDisplayConditionProperty.getValue(e),c=ei.fromDistanceDisplayCondition(a),d={show:s,distanceDisplayCondition:c,color:void 0,offset:void 0};if(this._materialProperty instanceof Kt){let u;l(this._materialProperty.color)&&(this._materialProperty.color.isConstant||o)&&(u=this._materialProperty.color.getValue(e,g7)),l(u)||(u=U.WHITE),r=$t.fromColor(u),d.color=r}return l(this._options.offsetAttribute)&&(d.offset=Ao.fromCartesian3(K.getValueOrDefault(this._terrainOffsetProperty,e,p7,A7))),new wt({id:i,geometry:new Ma(this._options),modelMatrix:t?void 0:i.computeModelMatrixForHeightReference(e,i.ellipsoid.heightReference,this._options.radii.z*.5,this._scene.ellipsoid,n),attributes:d})};Wu.prototype.createOutlineGeometryInstance=function(e,t,n){let i=this._entity,o=i.isAvailable(e),r=K.getValueOrDefault(this._outlineColorProperty,e,U.BLACK,g7),s=this._distanceDisplayConditionProperty.getValue(e),a={show:new Rn(o&&i.isShowing&&this._showProperty.getValue(e)&&this._showOutlineProperty.getValue(e)),color:$t.fromColor(r),distanceDisplayCondition:ei.fromDistanceDisplayCondition(s),offset:void 0};return l(this._options.offsetAttribute)&&(a.offset=Ao.fromCartesian3(K.getValueOrDefault(this._terrainOffsetProperty,e,p7,A7))),new wt({id:i,geometry:new Eu(this._options),modelMatrix:t?void 0:i.computeModelMatrixForHeightReference(e,i.ellipsoid.heightReference,this._options.radii.z*.5,this._scene.ellipsoid,n),attributes:a})};Wu.prototype._computeCenter=function(e,t){return K.getValueOrUndefined(this._entity.position,e,t)};Wu.prototype._isHidden=function(e,t){return!l(e.position)||!l(t.radii)||Si.prototype._isHidden.call(this,e,t)};Wu.prototype._isDynamic=function(e,t){return!e.position.isConstant||!K.isConstant(e.orientation)||!t.radii.isConstant||!K.isConstant(t.innerRadii)||!K.isConstant(t.stackPartitions)||!K.isConstant(t.slicePartitions)||!K.isConstant(t.outlineWidth)||!K.isConstant(t.minimumClock)||!K.isConstant(t.maximumClock)||!K.isConstant(t.minimumCone)||!K.isConstant(t.maximumCone)||!K.isConstant(t.subdivisions)};Wu.prototype._setStaticOptions=function(e,t){let n=K.getValueOrDefault(t.heightReference,qe.MINIMUM_VALUE,rt.NONE),i=this._options;i.vertexFormat=this._materialProperty instanceof Kt?yn.VERTEX_FORMAT:go.MaterialSupport.TEXTURED.vertexFormat,i.radii=t.radii.getValue(qe.MINIMUM_VALUE,i.radii),i.innerRadii=K.getValueOrUndefined(t.innerRadii,i.radii),i.minimumClock=K.getValueOrUndefined(t.minimumClock,qe.MINIMUM_VALUE),i.maximumClock=K.getValueOrUndefined(t.maximumClock,qe.MINIMUM_VALUE),i.minimumCone=K.getValueOrUndefined(t.minimumCone,qe.MINIMUM_VALUE),i.maximumCone=K.getValueOrUndefined(t.maximumCone,qe.MINIMUM_VALUE),i.stackPartitions=K.getValueOrUndefined(t.stackPartitions,qe.MINIMUM_VALUE),i.slicePartitions=K.getValueOrUndefined(t.slicePartitions,qe.MINIMUM_VALUE),i.subdivisions=K.getValueOrUndefined(t.subdivisions,qe.MINIMUM_VALUE),i.offsetAttribute=n!==rt.NONE?An.ALL:void 0};Wu.prototype._onEntityPropertyChanged=kA;Wu.DynamicGeometryUpdater=MN;function MN(e,t,n){Ei.call(this,e,t,n),this._scene=e._scene,this._modelMatrix=new F,this._attributes=void 0,this._outlineAttributes=void 0,this._lastSceneMode=void 0,this._lastShow=void 0,this._lastOutlineShow=void 0,this._lastOutlineWidth=void 0,this._lastOutlineColor=void 0,this._lastOffset=new m,this._material={}}l(Object.create)&&(MN.prototype=Object.create(Ei.prototype),MN.prototype.constructor=MN);MN.prototype.update=function(e){let t=this._entity,n=t.ellipsoid;if(!t.isShowing||!t.isAvailable(e)||!K.getValueOrDefault(n.show,e,!0)){l(this._primitive)&&(this._primitive.show=!1),l(this._outlinePrimitive)&&(this._outlinePrimitive.show=!1);return}let i=K.getValueOrUndefined(n.radii,e,sct),o=l(i)?t.computeModelMatrixForHeightReference(e,n.heightReference,i.z*.5,this._scene.ellipsoid,this._modelMatrix):void 0;if(!l(o)||!l(i)){l(this._primitive)&&(this._primitive.show=!1),l(this._outlinePrimitive)&&(this._outlinePrimitive.show=!1);return}let r=K.getValueOrDefault(n.fill,e,!0),s=K.getValueOrDefault(n.outline,e,!1),a=K.getValueOrClonedDefault(n.outlineColor,e,U.BLACK,g7),c=Ir.getValue(e,n.material??rct,this._material),d=K.getValueOrUndefined(n.innerRadii,e,act),u=K.getValueOrUndefined(n.minimumClock,e),h=K.getValueOrUndefined(n.maximumClock,e),p=K.getValueOrUndefined(n.minimumCone,e),A=K.getValueOrUndefined(n.maximumCone,e),f=K.getValueOrUndefined(n.stackPartitions,e),b=K.getValueOrUndefined(n.slicePartitions,e),C=K.getValueOrUndefined(n.subdivisions,e),T=K.getValueOrDefault(n.outlineWidth,e,1),E=K.getValueOrDefault(n.heightReference,e,rt.NONE),S=E!==rt.NONE?An.ALL:void 0,I=this._scene.mode,R=I===se.SCENE3D&&E===rt.NONE,V=this._options,W=this._geometryUpdater.shadowsProperty.getValue(e),N=this._geometryUpdater.distanceDisplayConditionProperty.getValue(e),P=K.getValueOrDefault(this._geometryUpdater.terrainOffsetProperty,e,p7,A7);if(!R||this._lastSceneMode!==I||!l(this._primitive)||V.stackPartitions!==f||V.slicePartitions!==b||l(d)&&!m.equals(V.innerRadii!==d)||V.minimumClock!==u||V.maximumClock!==h||V.minimumCone!==p||V.maximumCone!==A||V.subdivisions!==C||this._lastOutlineWidth!==T||V.offsetAttribute!==S){let _=this._primitives;_.removeAndDestroy(this._primitive),_.removeAndDestroy(this._outlinePrimitive),this._primitive=void 0,this._outlinePrimitive=void 0,this._lastSceneMode=I,this._lastOutlineWidth=T,V.stackPartitions=f,V.slicePartitions=b,V.subdivisions=C,V.offsetAttribute=S,V.radii=m.clone(R?cct:i,V.radii),l(d)?R?V.innerRadii=m.fromElements(d.x/i.x,d.y/i.y,d.z/i.z,V.innerRadii):V.innerRadii=m.clone(d,V.innerRadii):V.innerRadii=void 0,V.minimumClock=u,V.maximumClock=h,V.minimumCone=p,V.maximumCone=A;let Z=new go({material:c,translucent:c.isTranslucent(),closed:!0});V.vertexFormat=Z.vertexFormat;let G=this._geometryUpdater.createFillGeometryInstance(e,R,this._modelMatrix);this._primitive=_.add(new Nn({geometryInstances:G,appearance:Z,asynchronous:!1,shadows:W}));let w=this._geometryUpdater.createOutlineGeometryInstance(e,R,this._modelMatrix);this._outlinePrimitive=_.add(new Nn({geometryInstances:w,appearance:new yn({flat:!0,translucent:w.attributes.color.value[3]!==255,renderState:{lineWidth:this._geometryUpdater._scene.clampLineWidth(T)}}),asynchronous:!1,shadows:W})),this._lastShow=r,this._lastOutlineShow=s,this._lastOutlineColor=U.clone(a,this._lastOutlineColor),this._lastDistanceDisplayCondition=N,this._lastOffset=m.clone(P,this._lastOffset)}else if(this._primitive.ready){let _=this._primitive,Z=this._outlinePrimitive;_.show=!0,Z.show=!0,_.appearance.material=c;let G=this._attributes;l(G)||(G=_.getGeometryInstanceAttributes(t),this._attributes=G),r!==this._lastShow&&(G.show=Rn.toValue(r,G.show),this._lastShow=r);let w=this._outlineAttributes;l(w)||(w=Z.getGeometryInstanceAttributes(t),this._outlineAttributes=w),s!==this._lastOutlineShow&&(w.show=Rn.toValue(s,w.show),this._lastOutlineShow=s),U.equals(a,this._lastOutlineColor)||(w.color=$t.toValue(a,w.color),U.clone(a,this._lastOutlineColor)),Dt.equals(N,this._lastDistanceDisplayCondition)||(G.distanceDisplayCondition=ei.toValue(N,G.distanceDisplayCondition),w.distanceDisplayCondition=ei.toValue(N,w.distanceDisplayCondition),Dt.clone(N,this._lastDistanceDisplayCondition)),m.equals(P,this._lastOffset)||(G.offset=Ao.toValue(P,G.offset),w.offset=Ao.toValue(P,G.offset),m.clone(P,this._lastOffset))}R&&(i.x=Math.max(i.x,.001),i.y=Math.max(i.y,.001),i.z=Math.max(i.z,.001),o=F.multiplyByScale(o,i,o),this._primitive.modelMatrix=o,this._outlinePrimitive.modelMatrix=o)};var vN=Wu;var qSi=y(x(),1);var CSi=y(x(),1);function MI(e){e=e??Q.EMPTY_OBJECT;let t=e.vertexFormat??ve.DEFAULT;this._vertexFormat=t,this._workerName="createPlaneGeometry"}MI.packedLength=ve.packedLength;MI.pack=function(e,t,n){return n=n??0,ve.pack(e._vertexFormat,t,n),t};var l0e=new ve,dct={vertexFormat:l0e};MI.unpack=function(e,t,n){t=t??0;let i=ve.unpack(e,t,l0e);return l(n)?(n._vertexFormat=ve.clone(i,n._vertexFormat),n):new MI(dct)};var r5=new m(-.5,-.5,0),s5=new m(.5,.5,0);MI.createGeometry=function(e){let t=e._vertexFormat,n=new xn,i,o;if(t.position){if(o=new Float64Array(12),o[0]=r5.x,o[1]=r5.y,o[2]=0,o[3]=s5.x,o[4]=r5.y,o[5]=0,o[6]=s5.x,o[7]=s5.y,o[8]=0,o[9]=r5.x,o[10]=s5.y,o[11]=0,n.position=new we({componentDatatype:H.DOUBLE,componentsPerAttribute:3,values:o}),t.normal){let r=new Float32Array(12);r[0]=0,r[1]=0,r[2]=1,r[3]=0,r[4]=0,r[5]=1,r[6]=0,r[7]=0,r[8]=1,r[9]=0,r[10]=0,r[11]=1,n.normal=new we({componentDatatype:H.FLOAT,componentsPerAttribute:3,values:r})}if(t.st){let r=new Float32Array(8);r[0]=0,r[1]=0,r[2]=1,r[3]=0,r[4]=1,r[5]=1,r[6]=0,r[7]=1,n.st=new we({componentDatatype:H.FLOAT,componentsPerAttribute:2,values:r})}if(t.tangent){let r=new Float32Array(12);r[0]=1,r[1]=0,r[2]=0,r[3]=1,r[4]=0,r[5]=0,r[6]=1,r[7]=0,r[8]=0,r[9]=1,r[10]=0,r[11]=0,n.tangent=new we({componentDatatype:H.FLOAT,componentsPerAttribute:3,values:r})}if(t.bitangent){let r=new Float32Array(12);r[0]=0,r[1]=1,r[2]=0,r[3]=0,r[4]=1,r[5]=0,r[6]=0,r[7]=1,r[8]=0,r[9]=0,r[10]=1,r[11]=0,n.bitangent=new we({componentDatatype:H.FLOAT,componentsPerAttribute:3,values:r})}i=new Uint16Array(6),i[0]=0,i[1]=1,i[2]=2,i[3]=0,i[4]=2,i[5]=3}return new Ct({attributes:n,indices:i,primitiveType:We.TRIANGLES,boundingSphere:new ue(m.ZERO,Math.sqrt(2))})};var UN=MI;var LSi=y(x(),1);function vI(){this._workerName="createPlaneOutlineGeometry"}vI.packedLength=0;vI.pack=function(e,t){return t};vI.unpack=function(e,t,n){return l(n)?n:new vI};var my=new m(-.5,-.5,0),a5=new m(.5,.5,0);vI.createGeometry=function(){let e=new xn,t=new Uint16Array(8),n=new Float64Array(12);return n[0]=my.x,n[1]=my.y,n[2]=my.z,n[3]=a5.x,n[4]=my.y,n[5]=my.z,n[6]=a5.x,n[7]=a5.y,n[8]=my.z,n[9]=my.x,n[10]=a5.y,n[11]=my.z,e.position=new we({componentDatatype:H.DOUBLE,componentsPerAttribute:3,values:n}),t[0]=0,t[1]=1,t[2]=1,t[3]=2,t[4]=2,t[5]=3,t[6]=3,t[7]=0,new Ct({attributes:e,indices:t,primitiveType:We.LINES,boundingSphere:new ue(m.ZERO,Math.sqrt(2))})};var DN=vI;var uct=new m,d0e=new U;function mct(e){this.id=e,this.vertexFormat=void 0,this.plane=void 0,this.dimensions=void 0}function Hm(e,t){Si.call(this,{entity:e,scene:t,geometryOptions:new mct(e),geometryPropertyName:"plane",observedPropertyNames:["availability","position","orientation","plane"]}),this._onEntityPropertyChanged(e,"plane",e.plane,void 0)}l(Object.create)&&(Hm.prototype=Object.create(Si.prototype),Hm.prototype.constructor=Hm);Hm.prototype.createFillGeometryInstance=function(e){let t=this._entity,n=t.isAvailable(e),i,o,r=new Rn(n&&t.isShowing&&this._showProperty.getValue(e)&&this._fillProperty.getValue(e)),s=this._distanceDisplayConditionProperty.getValue(e),a=ei.fromDistanceDisplayCondition(s);if(this._materialProperty instanceof Kt){let A;l(this._materialProperty.color)&&(this._materialProperty.color.isConstant||n)&&(A=this._materialProperty.color.getValue(e,d0e)),l(A)||(A=U.WHITE),o=$t.fromColor(A),i={show:r,distanceDisplayCondition:a,color:o}}else i={show:r,distanceDisplayCondition:a};let c=t.plane,d=this._options,u=t.computeModelMatrix(e),h=K.getValueOrDefault(c.plane,e,d.plane),p=K.getValueOrUndefined(c.dimensions,e,d.dimensions);return d.plane=h,d.dimensions=p,u=b7(h,p,u,u),new wt({id:t,geometry:new UN(this._options),modelMatrix:u,attributes:i})};Hm.prototype.createOutlineGeometryInstance=function(e){let t=this._entity,n=t.isAvailable(e),i=K.getValueOrDefault(this._outlineColorProperty,e,U.BLACK,d0e),o=this._distanceDisplayConditionProperty.getValue(e),r=t.plane,s=this._options,a=t.computeModelMatrix(e),c=K.getValueOrDefault(r.plane,e,s.plane),d=K.getValueOrUndefined(r.dimensions,e,s.dimensions);return s.plane=c,s.dimensions=d,a=b7(c,d,a,a),new wt({id:t,geometry:new DN,modelMatrix:a,attributes:{show:new Rn(n&&t.isShowing&&this._showProperty.getValue(e)&&this._showOutlineProperty.getValue(e)),color:$t.fromColor(i),distanceDisplayCondition:ei.fromDistanceDisplayCondition(o)}})};Hm.prototype._isHidden=function(e,t){return!l(t.plane)||!l(t.dimensions)||!l(e.position)||Si.prototype._isHidden.call(this,e,t)};Hm.prototype._getIsClosed=function(e){return!1};Hm.prototype._isDynamic=function(e,t){return!e.position.isConstant||!K.isConstant(e.orientation)||!t.plane.isConstant||!t.dimensions.isConstant||!K.isConstant(t.outlineWidth)};Hm.prototype._setStaticOptions=function(e,t){let n=this._materialProperty instanceof Kt,i=this._options;i.vertexFormat=n?yn.VERTEX_FORMAT:go.MaterialSupport.TEXTURED.vertexFormat,i.plane=t.plane.getValue(qe.MINIMUM_VALUE,i.plane),i.dimensions=t.dimensions.getValue(qe.MINIMUM_VALUE,i.dimensions)};Hm.DynamicGeometryUpdater=UI;function UI(e,t,n){Ei.call(this,e,t,n)}l(Object.create)&&(UI.prototype=Object.create(Ei.prototype),UI.prototype.constructor=UI);UI.prototype._isHidden=function(e,t,n){let i=this._options,o=K.getValueOrUndefined(e.position,n,uct);return!l(o)||!l(i.plane)||!l(i.dimensions)||Ei.prototype._isHidden.call(this,e,t,n)};UI.prototype._setOptions=function(e,t,n){let i=this._options;i.plane=K.getValueOrDefault(t.plane,n,i.plane),i.dimensions=K.getValueOrUndefined(t.dimensions,n,i.dimensions)};var hct=new m,fct=new m,pct=new m,Act=new m,gct=new $,bct=new $,yct=new F;function b7(e,t,n,i){let o=e.normal,r=e.distance,s=m.multiplyByScalar(o,-r,pct),a=m.clone(m.UNIT_Z,fct);L.equalsEpsilon(Math.abs(m.dot(a,o)),1,L.EPSILON8)&&(a=m.clone(m.UNIT_Y,a));let c=m.cross(a,o,hct);a=m.cross(o,c,a),m.normalize(c,c),m.normalize(a,a);let d=gct;$.setColumn(d,0,c,d),$.setColumn(d,1,a,d),$.setColumn(d,2,o,d);let u=m.fromElements(t.x,t.y,1,Act),h=$.multiplyByScale(d,u,bct),p=F.fromRotationTranslation(h,s,yct);return F.multiplyTransformation(n,p,i)}Hm.createPrimitiveMatrix=b7;var kN=Hm;var xIi=y(x(),1);var E_i=y(x(),1);var xct=new m,Cct=new nt,Tct=new M,Ect=new M,Sct=new m,_ct=new m,Ict=new m,QN=new m,Zct=new m,Rct=new m,u0e=new Me,Vct=new $,Gct=new $,Lct=new m;function Wct(e,t,n,i,o,r,s,a,c){let d=e.positions,u=Ii.triangulate(e.positions2D,e.holes);u.length<3&&(u=[0,1,2]);let h=Ue.createTypedArray(d.length,u.length);h.set(u);let p=Vct;if(i!==0){let g=Me.fromAxisAngle(s,i,u0e);if(p=$.fromQuaternion(g,p),t.tangent||t.bitangent){g=Me.fromAxisAngle(s,-i,u0e);let _=$.fromQuaternion(g,Gct);a=m.normalize($.multiplyByVector(_,a,a),a),t.bitangent&&(c=m.normalize(m.cross(s,a,c),c))}}else p=$.clone($.IDENTITY,p);let A=Ect;t.st&&(A.x=n.x,A.y=n.y);let f=d.length,b=f*3,C=new Float64Array(b),T=t.normal?new Float32Array(b):void 0,E=t.tangent?new Float32Array(b):void 0,S=t.bitangent?new Float32Array(b):void 0,I=t.st?new Float32Array(f*2):void 0,R=0,V=0,W=0,B=0,N=0;for(let g=0;g<f;g++){let _=d[g];if(C[R++]=_.x,C[R++]=_.y,C[R++]=_.z,t.st)if(l(o)&&o.positions.length===f)I[N++]=o.positions[g].x,I[N++]=o.positions[g].y;else{let Z=$.multiplyByVector(p,_,xct),G=r(Z,Tct);M.subtract(G,A,G);let w=L.clamp(G.x/n.width,0,1),X=L.clamp(G.y/n.height,0,1);I[N++]=w,I[N++]=X}t.normal&&(T[V++]=s.x,T[V++]=s.y,T[V++]=s.z),t.tangent&&(E[B++]=a.x,E[B++]=a.y,E[B++]=a.z),t.bitangent&&(S[W++]=c.x,S[W++]=c.y,S[W++]=c.z)}let P=new xn;return t.position&&(P.position=new we({componentDatatype:H.DOUBLE,componentsPerAttribute:3,values:C})),t.normal&&(P.normal=new we({componentDatatype:H.FLOAT,componentsPerAttribute:3,values:T})),t.tangent&&(P.tangent=new we({componentDatatype:H.FLOAT,componentsPerAttribute:3,values:E})),t.bitangent&&(P.bitangent=new we({componentDatatype:H.FLOAT,componentsPerAttribute:3,values:S})),t.st&&(P.st=new we({componentDatatype:H.FLOAT,componentsPerAttribute:2,values:I})),new Ct({attributes:P,indices:h,primitiveType:We.TRIANGLES})}function ST(e){e=e??Q.EMPTY_OBJECT;let t=e.polygonHierarchy,n=e.textureCoordinates,i=e.vertexFormat??ve.DEFAULT;this._vertexFormat=ve.clone(i),this._polygonHierarchy=t,this._stRotation=e.stRotation??0,this._ellipsoid=ie.clone(e.ellipsoid??ie.default),this._workerName="createCoplanarPolygonGeometry",this._textureCoordinates=n,this.packedLength=ii.computeHierarchyPackedLength(t,m)+ve.packedLength+ie.packedLength+(l(n)?ii.computeHierarchyPackedLength(n,M):1)+2}ST.fromPositions=function(e){e=e??Q.EMPTY_OBJECT;let t={polygonHierarchy:{positions:e.positions},vertexFormat:e.vertexFormat,stRotation:e.stRotation,ellipsoid:e.ellipsoid,textureCoordinates:e.textureCoordinates};return new ST(t)};ST.pack=function(e,t,n){return n=n??0,n=ii.packPolygonHierarchy(e._polygonHierarchy,t,n,m),ie.pack(e._ellipsoid,t,n),n+=ie.packedLength,ve.pack(e._vertexFormat,t,n),n+=ve.packedLength,t[n++]=e._stRotation,l(e._textureCoordinates)?n=ii.packPolygonHierarchy(e._textureCoordinates,t,n,M):t[n++]=-1,t[n++]=e.packedLength,t};var Fct=ie.clone(ie.UNIT_SPHERE),Bct=new ve,wct={polygonHierarchy:{}};ST.unpack=function(e,t,n){t=t??0;let i=ii.unpackPolygonHierarchy(e,t,m);t=i.startingIndex,delete i.startingIndex;let o=ie.unpack(e,t,Fct);t+=ie.packedLength;let r=ve.unpack(e,t,Bct);t+=ve.packedLength;let s=e[t++],a=e[t]===-1?void 0:ii.unpackPolygonHierarchy(e,t,M);l(a)?(t=a.startingIndex,delete a.startingIndex):t++;let c=e[t++];return l(n)||(n=new ST(wct)),n._polygonHierarchy=i,n._ellipsoid=ie.clone(o,n._ellipsoid),n._vertexFormat=ve.clone(r,n._vertexFormat),n._stRotation=s,n._textureCoordinates=a,n.packedLength=c,n};ST.createGeometry=function(e){let t=e._vertexFormat,n=e._polygonHierarchy,i=e._stRotation,o=e._textureCoordinates,r=l(o),s=n.positions;if(s=Uo(s,m.equalsEpsilon,!0),s.length<3)return;let a=Sct,c=_ct,d=Ict,u=Zct,h=Rct;if(!Pg.computeProjectTo2DArguments(s,QN,u,h))return;if(a=m.cross(u,h,a),a=m.normalize(a,a),!m.equalsEpsilon(QN,m.ZERO,L.EPSILON6)){let N=e._ellipsoid.geodeticSurfaceNormal(QN,Lct);m.dot(a,N)<0&&(a=m.negate(a,a),u=m.negate(u,u))}let A=Pg.createProjectPointsTo2DFunction(QN,u,h),f=Pg.createProjectPointTo2DFunction(QN,u,h);t.tangent&&(c=m.clone(u,c)),t.bitangent&&(d=m.clone(h,d));let b=ii.polygonsFromHierarchy(n,r,A,!1),C=b.hierarchy,T=b.polygons,E=function(N){return N},S=r?ii.polygonsFromHierarchy(o,!0,E,!1).polygons:void 0;if(C.length===0)return;s=C[0].outerRing;let I=ue.fromPoints(s),R=ii.computeBoundingRectangle(a,f,s,i,Cct),V=[];for(let N=0;N<T.length;N++){let P=new wt({geometry:Wct(T[N],t,R,i,r?S[N]:void 0,f,a,c,d)});V.push(P)}let W=zn.combineInstances(V)[0];W.attributes.position.values=new Float64Array(W.attributes.position.values),W.indices=Ue.createTypedArray(W.attributes.position.values.length/3,W.indices);let B=W.attributes;return t.position||delete B.position,new Ct({attributes:B,indices:W.indices,primitiveType:W.primitiveType,boundingSphere:I})};var ON=ST;var Q_i=y(x(),1);var m0e=[],c5=[];function Nct(e,t,n,i,o){let s=Rs.fromPoints(t,e).projectPointsOntoPlane(t,m0e);Ii.computeWindingOrder2D(s)===ks.CLOCKWISE&&(s.reverse(),t=t.slice().reverse());let c,d,u=t.length,h=0;if(i)for(c=new Float64Array(u*2*3),d=0;d<u;d++){let f=t[d],b=t[(d+1)%u];c[h++]=f.x,c[h++]=f.y,c[h++]=f.z,c[h++]=b.x,c[h++]=b.y,c[h++]=b.z}else{let f=0;if(o===un.GEODESIC)for(d=0;d<u;d++)f+=ii.subdivideLineCount(t[d],t[(d+1)%u],n);else if(o===un.RHUMB)for(d=0;d<u;d++)f+=ii.subdivideRhumbLineCount(e,t[d],t[(d+1)%u],n);for(c=new Float64Array(f*3),d=0;d<u;d++){let b;o===un.GEODESIC?b=ii.subdivideLine(t[d],t[(d+1)%u],n,c5):o===un.RHUMB&&(b=ii.subdivideRhumbLine(e,t[d],t[(d+1)%u],n,c5));let C=b.length;for(let T=0;T<C;++T)c[h++]=b[T]}}u=c.length/3;let p=u*2,A=Ue.createTypedArray(u,p);for(h=0,d=0;d<u-1;d++)A[h++]=d,A[h++]=d+1;return A[h++]=u-1,A[h++]=0,new wt({geometry:new Ct({attributes:new xn({position:new we({componentDatatype:H.DOUBLE,componentsPerAttribute:3,values:c})}),indices:A,primitiveType:We.LINES})})}function Pct(e,t,n,i,o){let s=Rs.fromPoints(t,e).projectPointsOntoPlane(t,m0e);Ii.computeWindingOrder2D(s)===ks.CLOCKWISE&&(s.reverse(),t=t.slice().reverse());let c,d,u=t.length,h=new Array(u),p=0;if(i)for(c=new Float64Array(u*2*3*2),d=0;d<u;++d){h[d]=p/3;let C=t[d],T=t[(d+1)%u];c[p++]=C.x,c[p++]=C.y,c[p++]=C.z,c[p++]=T.x,c[p++]=T.y,c[p++]=T.z}else{let C=0;if(o===un.GEODESIC)for(d=0;d<u;d++)C+=ii.subdivideLineCount(t[d],t[(d+1)%u],n);else if(o===un.RHUMB)for(d=0;d<u;d++)C+=ii.subdivideRhumbLineCount(e,t[d],t[(d+1)%u],n);for(c=new Float64Array(C*3*2),d=0;d<u;++d){h[d]=p/3;let T;o===un.GEODESIC?T=ii.subdivideLine(t[d],t[(d+1)%u],n,c5):o===un.RHUMB&&(T=ii.subdivideRhumbLine(e,t[d],t[(d+1)%u],n,c5));let E=T.length;for(let S=0;S<E;++S)c[p++]=T[S]}}u=c.length/6;let A=h.length,f=(u*2+A)*2,b=Ue.createTypedArray(u+A,f);for(p=0,d=0;d<u;++d)b[p++]=d,b[p++]=(d+1)%u,b[p++]=d+u,b[p++]=(d+1)%u+u;for(d=0;d<A;d++){let C=h[d];b[p++]=C,b[p++]=C+u}return new wt({geometry:new Ct({attributes:new xn({position:new we({componentDatatype:H.DOUBLE,componentsPerAttribute:3,values:c})}),indices:b,primitiveType:We.LINES})})}function _T(e){let t=e.polygonHierarchy,n=e.ellipsoid??ie.default,i=e.granularity??L.RADIANS_PER_DEGREE,o=e.perPositionHeight??!1,r=o&&l(e.extrudedHeight),s=e.arcType??un.GEODESIC,a=e.height??0,c=e.extrudedHeight??a;if(!r){let d=Math.max(a,c);c=Math.min(a,c),a=d}this._ellipsoid=ie.clone(n),this._granularity=i,this._height=a,this._extrudedHeight=c,this._arcType=s,this._polygonHierarchy=t,this._perPositionHeight=o,this._perPositionHeightExtrude=r,this._offsetAttribute=e.offsetAttribute,this._workerName="createPolygonOutlineGeometry",this.packedLength=ii.computeHierarchyPackedLength(t,m)+ie.packedLength+8}_T.pack=function(e,t,n){return n=n??0,n=ii.packPolygonHierarchy(e._polygonHierarchy,t,n,m),ie.pack(e._ellipsoid,t,n),n+=ie.packedLength,t[n++]=e._height,t[n++]=e._extrudedHeight,t[n++]=e._granularity,t[n++]=e._perPositionHeightExtrude?1:0,t[n++]=e._perPositionHeight?1:0,t[n++]=e._arcType,t[n++]=e._offsetAttribute??-1,t[n]=e.packedLength,t};var Xct=ie.clone(ie.UNIT_SPHERE),Yct={polygonHierarchy:{}};_T.unpack=function(e,t,n){t=t??0;let i=ii.unpackPolygonHierarchy(e,t,m);t=i.startingIndex,delete i.startingIndex;let o=ie.unpack(e,t,Xct);t+=ie.packedLength;let r=e[t++],s=e[t++],a=e[t++],c=e[t++]===1,d=e[t++]===1,u=e[t++],h=e[t++],p=e[t];return l(n)||(n=new _T(Yct)),n._polygonHierarchy=i,n._ellipsoid=ie.clone(o,n._ellipsoid),n._height=r,n._extrudedHeight=s,n._granularity=a,n._perPositionHeight=d,n._perPositionHeightExtrude=c,n._arcType=u,n._offsetAttribute=h===-1?void 0:h,n.packedLength=p,n};_T.fromPositions=function(e){e=e??Q.EMPTY_OBJECT;let t={polygonHierarchy:{positions:e.positions},height:e.height,extrudedHeight:e.extrudedHeight,ellipsoid:e.ellipsoid,granularity:e.granularity,perPositionHeight:e.perPositionHeight,arcType:e.arcType,offsetAttribute:e.offsetAttribute};return new _T(t)};_T.createGeometry=function(e){let t=e._ellipsoid,n=e._granularity,i=e._polygonHierarchy,o=e._perPositionHeight,r=e._arcType,s=ii.polygonOutlinesFromHierarchy(i,!o,t);if(s.length===0)return;let a,c=[],d=L.chordLength(n,t.maximumRadius),u=e._height,h=e._extrudedHeight,p=e._perPositionHeightExtrude||!L.equalsEpsilon(u,h,0,L.EPSILON2),A,f;if(p)for(f=0;f<s.length;f++){if(a=Pct(t,s[f],d,o,r),a.geometry=ii.scaleToGeodeticHeightExtruded(a.geometry,u,h,t,o),l(e._offsetAttribute)){let T=a.geometry.attributes.position.values.length/3,E=new Uint8Array(T);e._offsetAttribute===An.TOP?E=E.fill(1,0,T/2):(A=e._offsetAttribute===An.NONE?0:1,E=E.fill(A)),a.geometry.attributes.applyOffset=new we({componentDatatype:H.UNSIGNED_BYTE,componentsPerAttribute:1,values:E})}c.push(a)}else for(f=0;f<s.length;f++){if(a=Nct(t,s[f],d,o,r),a.geometry.attributes.position.values=Ii.scaleToGeodeticHeight(a.geometry.attributes.position.values,u,t,!o),l(e._offsetAttribute)){let T=a.geometry.attributes.position.values.length;A=e._offsetAttribute===An.NONE?0:1;let E=new Uint8Array(T/3).fill(A);a.geometry.attributes.applyOffset=new we({componentDatatype:H.UNSIGNED_BYTE,componentsPerAttribute:1,values:E})}c.push(a)}let b=zn.combineInstances(c)[0],C=ue.fromVertices(b.attributes.position.values);return new Ct({attributes:b.attributes,indices:b.indices,primitiveType:b.primitiveType,boundingSphere:C,offsetAttribute:e._offsetAttribute})};var zN=_T;var h0e="Entity polygons cannot have both height and perPositionHeight. height will be ignored",f0e="heightReference is not supported for entity polygons with perPositionHeight. heightReference will be ignored",p0e=new U,A0e=m.ZERO,g0e=new m,b0e=new de,Mct=[],vct=new M;function Uct(e){this.id=e,this.vertexFormat=void 0,this.polygonHierarchy=void 0,this.perPositionHeight=void 0,this.closeTop=void 0,this.closeBottom=void 0,this.height=void 0,this.extrudedHeight=void 0,this.granularity=void 0,this.stRotation=void 0,this.offsetAttribute=void 0,this.arcType=void 0,this.textureCoordinates=void 0}function Fu(e,t){si.call(this,{entity:e,scene:t,geometryOptions:new Uct(e),geometryPropertyName:"polygon",observedPropertyNames:["availability","polygon"]}),this._onEntityPropertyChanged(e,"polygon",e.polygon,void 0)}l(Object.create)&&(Fu.prototype=Object.create(si.prototype),Fu.prototype.constructor=Fu);Fu.prototype.createFillGeometryInstance=function(e){let t=this._entity,n=t.isAvailable(e),i=this._options,o={show:new Rn(n&&t.isShowing&&this._showProperty.getValue(e)&&this._fillProperty.getValue(e)),distanceDisplayCondition:ei.fromDistanceDisplayCondition(this._distanceDisplayConditionProperty.getValue(e)),offset:void 0,color:void 0};if(this._materialProperty instanceof Kt){let s;l(this._materialProperty.color)&&(this._materialProperty.color.isConstant||n)&&(s=this._materialProperty.color.getValue(e,p0e)),l(s)||(s=U.WHITE),o.color=$t.fromColor(s)}l(i.offsetAttribute)&&(o.offset=Ao.fromCartesian3(K.getValueOrDefault(this._terrainOffsetProperty,e,A0e,g0e)));let r;return i.perPositionHeight&&!l(i.extrudedHeight)?r=new ON(i):r=new ig(i),new wt({id:t,geometry:r,attributes:o})};Fu.prototype.createOutlineGeometryInstance=function(e){let t=this._entity,n=t.isAvailable(e),i=this._options,o=K.getValueOrDefault(this._outlineColorProperty,e,U.BLACK,p0e),r=this._distanceDisplayConditionProperty.getValue(e),s={show:new Rn(n&&t.isShowing&&this._showProperty.getValue(e)&&this._showOutlineProperty.getValue(e)),color:$t.fromColor(o),distanceDisplayCondition:ei.fromDistanceDisplayCondition(r),offset:void 0};l(i.offsetAttribute)&&(s.offset=Ao.fromCartesian3(K.getValueOrDefault(this._terrainOffsetProperty,e,A0e,g0e)));let a;return i.perPositionHeight&&!l(i.extrudedHeight)?a=new Mm(i):a=new zN(i),new wt({id:t,geometry:a,attributes:s})};Fu.prototype._computeCenter=function(e,t){let n=K.getValueOrUndefined(this._entity.polygon.hierarchy,e);if(!l(n))return;let i=n.positions;if(i.length===0)return;let o=this._scene.ellipsoid,r=Rs.fromPoints(i,o),s=r.projectPointsOntoPlane(i,Mct),a=s.length,c=0,d=a-1,u=new M;for(let p=0;p<a;d=p++){let A=s[p],f=s[d],b=A.x*f.y-f.x*A.y,C=M.add(A,f,vct);C=M.multiplyByScalar(C,b,C),u=M.add(u,C,u),c+=b}let h=1/(c*3);return u=M.multiplyByScalar(u,h,u),r.projectPointOntoEllipsoid(u,t)};Fu.prototype._isHidden=function(e,t){return!l(t.hierarchy)||Si.prototype._isHidden.call(this,e,t)};Fu.prototype._isOnTerrain=function(e,t){let n=si.prototype._isOnTerrain.call(this,e,t),i=t.perPositionHeight,o=l(i)&&(i.isConstant?i.getValue(qe.MINIMUM_VALUE):!0);return n&&!o};Fu.prototype._isDynamic=function(e,t){return!t.hierarchy.isConstant||!K.isConstant(t.height)||!K.isConstant(t.extrudedHeight)||!K.isConstant(t.granularity)||!K.isConstant(t.stRotation)||!K.isConstant(t.textureCoordinates)||!K.isConstant(t.outlineWidth)||!K.isConstant(t.perPositionHeight)||!K.isConstant(t.closeTop)||!K.isConstant(t.closeBottom)||!K.isConstant(t.zIndex)||!K.isConstant(t.arcType)||this._onTerrain&&!K.isConstant(this._materialProperty)&&!(this._materialProperty instanceof Kt)};Fu.prototype._setStaticOptions=function(e,t){let n=this._materialProperty instanceof Kt,i=this._options;i.vertexFormat=n?yn.VERTEX_FORMAT:go.MaterialSupport.TEXTURED.vertexFormat;let o=t.hierarchy.getValue(qe.MINIMUM_VALUE),r=K.getValueOrUndefined(t.height,qe.MINIMUM_VALUE),s=K.getValueOrDefault(t.heightReference,qe.MINIMUM_VALUE,rt.NONE),a=K.getValueOrUndefined(t.extrudedHeight,qe.MINIMUM_VALUE),c=K.getValueOrDefault(t.extrudedHeightReference,qe.MINIMUM_VALUE,rt.NONE),d=K.getValueOrDefault(t.perPositionHeight,qe.MINIMUM_VALUE,!1);r=si.getGeometryHeight(r,s);let u;if(d?(l(r)&&(r=void 0,_t(h0e)),s!==rt.NONE&&d&&(r=void 0,_t(f0e))):(l(a)&&!l(r)&&(r=0),u=si.computeGeometryOffsetAttribute(r,s,a,c)),i.polygonHierarchy=o,i.granularity=K.getValueOrUndefined(t.granularity,qe.MINIMUM_VALUE),i.stRotation=K.getValueOrUndefined(t.stRotation,qe.MINIMUM_VALUE),i.perPositionHeight=d,i.closeTop=K.getValueOrDefault(t.closeTop,qe.MINIMUM_VALUE,!0),i.closeBottom=K.getValueOrDefault(t.closeBottom,qe.MINIMUM_VALUE,!0),i.offsetAttribute=u,i.height=r,i.arcType=K.getValueOrDefault(t.arcType,qe.MINIMUM_VALUE,un.GEODESIC),i.textureCoordinates=K.getValueOrUndefined(t.textureCoordinates,qe.MINIMUM_VALUE),a=si.getGeometryExtrudedHeight(a,c),a===si.CLAMP_TO_GROUND){let h=ig.computeRectangleFromPositions(i.polygonHierarchy.positions,i.ellipsoid,i.arcType,b0e);a=Gi.getMinimumMaximumHeights(h).minimumTerrainHeight}i.extrudedHeight=a};Fu.prototype._getIsClosed=function(e){let t=e.height,n=e.extrudedHeight,i=l(n)&&n!==t;return!e.perPositionHeight&&(!i&&t===0||i&&e.closeTop&&e.closeBottom)};Fu.DynamicGeometryUpdater=DI;function DI(e,t,n){Ei.call(this,e,t,n)}l(Object.create)&&(DI.prototype=Object.create(Ei.prototype),DI.prototype.constructor=DI);DI.prototype._isHidden=function(e,t,n){return!l(this._options.polygonHierarchy)||Ei.prototype._isHidden.call(this,e,t,n)};DI.prototype._setOptions=function(e,t,n){let i=this._options;i.polygonHierarchy=K.getValueOrUndefined(t.hierarchy,n);let o=K.getValueOrUndefined(t.height,n),r=K.getValueOrDefault(t.heightReference,n,rt.NONE),s=K.getValueOrDefault(t.extrudedHeightReference,n,rt.NONE),a=K.getValueOrUndefined(t.extrudedHeight,n),c=K.getValueOrUndefined(t.perPositionHeight,n);o=si.getGeometryHeight(o,s);let d;if(c?(l(o)&&(o=void 0,_t(h0e)),r!==rt.NONE&&c&&(o=void 0,_t(f0e))):(l(a)&&!l(o)&&(o=0),d=si.computeGeometryOffsetAttribute(o,r,a,s)),i.granularity=K.getValueOrUndefined(t.granularity,n),i.stRotation=K.getValueOrUndefined(t.stRotation,n),i.textureCoordinates=K.getValueOrUndefined(t.textureCoordinates,n),i.perPositionHeight=K.getValueOrUndefined(t.perPositionHeight,n),i.closeTop=K.getValueOrDefault(t.closeTop,n,!0),i.closeBottom=K.getValueOrDefault(t.closeBottom,n,!0),i.offsetAttribute=d,i.height=o,i.arcType=K.getValueOrDefault(t.arcType,n,un.GEODESIC),a=si.getGeometryExtrudedHeight(a,s),a===si.CLAMP_TO_GROUND){let u=ig.computeRectangleFromPositions(i.polygonHierarchy.positions,i.ellipsoid,i.arcType,b0e);a=Gi.getMinimumMaximumHeights(u).minimumTerrainHeight}i.extrudedHeight=a};var HN=Fu;var RZi=y(x(),1);var kIi=y(x(),1);function Dct(e,t,n,i){let o=new xn;i.position&&(o.position=new we({componentDatatype:H.DOUBLE,componentsPerAttribute:3,values:e}));let r=t.length,s=e.length/3,a=(s-r*2)/(r*2),c=Ii.triangulate(t),d=(a-1)*r*6+c.length*2,u=Ue.createTypedArray(s,d),h,p,A,f,b,C,T=r*2,E=0;for(h=0;h<a-1;h++){for(p=0;p<r-1;p++)A=p*2+h*r*2,C=A+T,f=A+1,b=f+T,u[E++]=f,u[E++]=A,u[E++]=b,u[E++]=b,u[E++]=A,u[E++]=C;A=r*2-2+h*r*2,f=A+1,b=f+T,C=A+T,u[E++]=f,u[E++]=A,u[E++]=b,u[E++]=b,u[E++]=A,u[E++]=C}if(i.st||i.tangent||i.bitangent){let R=new Float32Array(s*2),V=1/(a-1),W=1/n.height,B=n.height/2,N,P,g=0;for(h=0;h<a;h++){for(N=h*V,P=W*(t[0].y+B),R[g++]=N,R[g++]=P,p=1;p<r;p++)P=W*(t[p].y+B),R[g++]=N,R[g++]=P,R[g++]=N,R[g++]=P;P=W*(t[0].y+B),R[g++]=N,R[g++]=P}for(p=0;p<r;p++)N=0,P=W*(t[p].y+B),R[g++]=N,R[g++]=P;for(p=0;p<r;p++)N=(a-1)*V,P=W*(t[p].y+B),R[g++]=N,R[g++]=P;o.st=new we({componentDatatype:H.FLOAT,componentsPerAttribute:2,values:new Float32Array(R)})}let S=s-r*2;for(h=0;h<c.length;h+=3){let R=c[h]+S,V=c[h+1]+S,W=c[h+2]+S;u[E++]=R,u[E++]=V,u[E++]=W,u[E++]=W+r,u[E++]=V+r,u[E++]=R+r}let I=new Ct({attributes:o,indices:u,boundingSphere:ue.fromVertices(e),primitiveType:We.TRIANGLES});if(i.normal&&(I=zn.computeNormal(I)),i.tangent||i.bitangent){try{I=zn.computeTangentAndBitangent(I)}catch{_t("polyline-volume-tangent-bitangent","Unable to compute tangents and bitangents for polyline volume geometry")}i.tangent||(I.attributes.tangent=void 0),i.bitangent||(I.attributes.bitangent=void 0),i.st||(I.attributes.st=void 0)}return I}function KN(e){e=e??Q.EMPTY_OBJECT;let t=e.polylinePositions,n=e.shapePositions;this._positions=t,this._shape=n,this._ellipsoid=ie.clone(e.ellipsoid??ie.default),this._cornerType=e.cornerType??Ki.ROUNDED,this._vertexFormat=ve.clone(e.vertexFormat??ve.DEFAULT),this._granularity=e.granularity??L.RADIANS_PER_DEGREE,this._workerName="createPolylineVolumeGeometry";let i=1+t.length*m.packedLength;i+=1+n.length*M.packedLength,this.packedLength=i+ie.packedLength+ve.packedLength+2}KN.pack=function(e,t,n){n=n??0;let i,o=e._positions,r=o.length;for(t[n++]=r,i=0;i<r;++i,n+=m.packedLength)m.pack(o[i],t,n);let s=e._shape;for(r=s.length,t[n++]=r,i=0;i<r;++i,n+=M.packedLength)M.pack(s[i],t,n);return ie.pack(e._ellipsoid,t,n),n+=ie.packedLength,ve.pack(e._vertexFormat,t,n),n+=ve.packedLength,t[n++]=e._cornerType,t[n]=e._granularity,t};var y0e=ie.clone(ie.UNIT_SPHERE),x0e=new ve,JN={polylinePositions:void 0,shapePositions:void 0,ellipsoid:y0e,vertexFormat:x0e,cornerType:void 0,granularity:void 0};KN.unpack=function(e,t,n){t=t??0;let i,o=e[t++],r=new Array(o);for(i=0;i<o;++i,t+=m.packedLength)r[i]=m.unpack(e,t);o=e[t++];let s=new Array(o);for(i=0;i<o;++i,t+=M.packedLength)s[i]=M.unpack(e,t);let a=ie.unpack(e,t,y0e);t+=ie.packedLength;let c=ve.unpack(e,t,x0e);t+=ve.packedLength;let d=e[t++],u=e[t];return l(n)?(n._positions=r,n._shape=s,n._ellipsoid=ie.clone(a,n._ellipsoid),n._vertexFormat=ve.clone(c,n._vertexFormat),n._cornerType=d,n._granularity=u,n):(JN.polylinePositions=r,JN.shapePositions=s,JN.cornerType=d,JN.granularity=u,new KN(JN))};var kct=new nt;KN.createGeometry=function(e){let t=e._positions,n=Uo(t,m.equalsEpsilon),i=e._shape;if(i=df.removeDuplicatesFromShape(i),n.length<2||i.length<3)return;Ii.computeWindingOrder2D(i)===ks.CLOCKWISE&&i.reverse();let o=nt.fromPoints(i,kct),r=df.computePositions(n,i,o,e,!0);return Dct(r,i,o,e._vertexFormat)};var jN=KN;var uZi=y(x(),1);function Qct(e,t){let n=new xn;n.position=new we({componentDatatype:H.DOUBLE,componentsPerAttribute:3,values:e});let i=t.length,o=n.position.values.length/3,s=e.length/3/i,a=Ue.createTypedArray(o,2*i*(s+1)),c,d,u=0;c=0;let h=c*i;for(d=0;d<i-1;d++)a[u++]=d+h,a[u++]=d+h+1;for(a[u++]=i-1+h,a[u++]=h,c=s-1,h=c*i,d=0;d<i-1;d++)a[u++]=d+h,a[u++]=d+h+1;for(a[u++]=i-1+h,a[u++]=h,c=0;c<s-1;c++){let A=i*c,f=A+i;for(d=0;d<i;d++)a[u++]=d+A,a[u++]=d+f}return new Ct({attributes:n,indices:Ue.createTypedArray(o,a),boundingSphere:ue.fromVertices(e),primitiveType:We.LINES})}function $N(e){e=e??Q.EMPTY_OBJECT;let t=e.polylinePositions,n=e.shapePositions;this._positions=t,this._shape=n,this._ellipsoid=ie.clone(e.ellipsoid??ie.default),this._cornerType=e.cornerType??Ki.ROUNDED,this._granularity=e.granularity??L.RADIANS_PER_DEGREE,this._workerName="createPolylineVolumeOutlineGeometry";let i=1+t.length*m.packedLength;i+=1+n.length*M.packedLength,this.packedLength=i+ie.packedLength+2}$N.pack=function(e,t,n){n=n??0;let i,o=e._positions,r=o.length;for(t[n++]=r,i=0;i<r;++i,n+=m.packedLength)m.pack(o[i],t,n);let s=e._shape;for(r=s.length,t[n++]=r,i=0;i<r;++i,n+=M.packedLength)M.pack(s[i],t,n);return ie.pack(e._ellipsoid,t,n),n+=ie.packedLength,t[n++]=e._cornerType,t[n]=e._granularity,t};var C0e=ie.clone(ie.UNIT_SPHERE),qN={polylinePositions:void 0,shapePositions:void 0,ellipsoid:C0e,height:void 0,cornerType:void 0,granularity:void 0};$N.unpack=function(e,t,n){t=t??0;let i,o=e[t++],r=new Array(o);for(i=0;i<o;++i,t+=m.packedLength)r[i]=m.unpack(e,t);o=e[t++];let s=new Array(o);for(i=0;i<o;++i,t+=M.packedLength)s[i]=M.unpack(e,t);let a=ie.unpack(e,t,C0e);t+=ie.packedLength;let c=e[t++],d=e[t];return l(n)?(n._positions=r,n._shape=s,n._ellipsoid=ie.clone(a,n._ellipsoid),n._cornerType=c,n._granularity=d,n):(qN.polylinePositions=r,qN.shapePositions=s,qN.cornerType=c,qN.granularity=d,new $N(qN))};var Oct=new nt;$N.createGeometry=function(e){let t=e._positions,n=Uo(t,m.equalsEpsilon),i=e._shape;if(i=df.removeDuplicatesFromShape(i),n.length<2||i.length<3)return;Ii.computeWindingOrder2D(i)===ks.CLOCKWISE&&i.reverse();let o=nt.fromPoints(i,Oct),r=df.computePositions(n,i,o,e,!1);return Qct(r,i)};var eP=$N;var T0e=new U;function zct(e){this.id=e,this.vertexFormat=void 0,this.polylinePositions=void 0,this.shapePositions=void 0,this.cornerType=void 0,this.granularity=void 0}function Bp(e,t){Si.call(this,{entity:e,scene:t,geometryOptions:new zct(e),geometryPropertyName:"polylineVolume",observedPropertyNames:["availability","polylineVolume"]}),this._onEntityPropertyChanged(e,"polylineVolume",e.polylineVolume,void 0)}l(Object.create)&&(Bp.prototype=Object.create(Si.prototype),Bp.prototype.constructor=Bp);Bp.prototype.createFillGeometryInstance=function(e){let t=this._entity,n=t.isAvailable(e),i,o,r=new Rn(n&&t.isShowing&&this._showProperty.getValue(e)&&this._fillProperty.getValue(e)),s=this._distanceDisplayConditionProperty.getValue(e),a=ei.fromDistanceDisplayCondition(s);if(this._materialProperty instanceof Kt){let c;l(this._materialProperty.color)&&(this._materialProperty.color.isConstant||n)&&(c=this._materialProperty.color.getValue(e,T0e)),l(c)||(c=U.WHITE),o=$t.fromColor(c),i={show:r,distanceDisplayCondition:a,color:o}}else i={show:r,distanceDisplayCondition:a};return new wt({id:t,geometry:new jN(this._options),attributes:i})};Bp.prototype.createOutlineGeometryInstance=function(e){let t=this._entity,n=t.isAvailable(e),i=K.getValueOrDefault(this._outlineColorProperty,e,U.BLACK,T0e),o=this._distanceDisplayConditionProperty.getValue(e);return new wt({id:t,geometry:new eP(this._options),attributes:{show:new Rn(n&&t.isShowing&&this._showProperty.getValue(e)&&this._showOutlineProperty.getValue(e)),color:$t.fromColor(i),distanceDisplayCondition:ei.fromDistanceDisplayCondition(o)}})};Bp.prototype._isHidden=function(e,t){return!l(t.positions)||!l(t.shape)||Si.prototype._isHidden.call(this,e,t)};Bp.prototype._isDynamic=function(e,t){return!t.positions.isConstant||!t.shape.isConstant||!K.isConstant(t.granularity)||!K.isConstant(t.outlineWidth)||!K.isConstant(t.cornerType)};Bp.prototype._setStaticOptions=function(e,t){let n=t.granularity,i=t.cornerType,o=this._options,r=this._materialProperty instanceof Kt;o.vertexFormat=r?yn.VERTEX_FORMAT:go.MaterialSupport.TEXTURED.vertexFormat,o.polylinePositions=t.positions.getValue(qe.MINIMUM_VALUE,o.polylinePositions),o.shapePositions=t.shape.getValue(qe.MINIMUM_VALUE,o.shape),o.granularity=l(n)?n.getValue(qe.MINIMUM_VALUE):void 0,o.cornerType=l(i)?i.getValue(qe.MINIMUM_VALUE):void 0};Bp.DynamicGeometryUpdater=kI;function kI(e,t,n){Ei.call(this,e,t,n)}l(Object.create)&&(kI.prototype=Object.create(Ei.prototype),kI.prototype.constructor=kI);kI.prototype._isHidden=function(e,t,n){let i=this._options;return!l(i.polylinePositions)||!l(i.shapePositions)||Ei.prototype._isHidden.call(this,e,t,n)};kI.prototype._setOptions=function(e,t,n){let i=this._options;i.polylinePositions=K.getValueOrUndefined(t.positions,n,i.polylinePositions),i.shapePositions=K.getValueOrUndefined(t.shape,n),i.granularity=K.getValueOrUndefined(t.granularity,n),i.cornerType=K.getValueOrUndefined(t.cornerType,n)};var tP=Bp;var _Ri=y(x(),1);var eRi=y(x(),1);var y7=new m,_0e=new m,I0e=new m,Z0e=new m,R0e=new de,Hct=new M,Jct=new ue,Kct=new ue;function V0e(e,t){let n=new Ct({attributes:new xn,primitiveType:We.TRIANGLES});return n.attributes.position=new we({componentDatatype:H.DOUBLE,componentsPerAttribute:3,values:t.positions}),e.normal&&(n.attributes.normal=new we({componentDatatype:H.FLOAT,componentsPerAttribute:3,values:t.normals})),e.tangent&&(n.attributes.tangent=new we({componentDatatype:H.FLOAT,componentsPerAttribute:3,values:t.tangents})),e.bitangent&&(n.attributes.bitangent=new we({componentDatatype:H.FLOAT,componentsPerAttribute:3,values:t.bitangents})),n}function jct(e,t,n,i){let o=e.length,r=t.normal?new Float32Array(o):void 0,s=t.tangent?new Float32Array(o):void 0,a=t.bitangent?new Float32Array(o):void 0,c=0,d=Z0e,u=I0e,h=_0e;if(t.normal||t.tangent||t.bitangent)for(let p=0;p<o;p+=3){let A=m.fromArray(e,p,y7),f=c+1,b=c+2;h=n.geodeticSurfaceNormal(A,h),(t.tangent||t.bitangent)&&(m.cross(m.UNIT_Z,h,u),$.multiplyByVector(i,u,u),m.normalize(u,u),t.bitangent&&m.normalize(m.cross(h,u,d),d)),t.normal&&(r[c]=h.x,r[f]=h.y,r[b]=h.z),t.tangent&&(s[c]=u.x,s[f]=u.y,s[b]=u.z),t.bitangent&&(a[c]=d.x,a[f]=d.y,a[b]=d.z),c+=3}return V0e(t,{positions:e,normals:r,tangents:s,bitangents:a})}var x7=new m,G0e=new m;function qct(e,t,n){let i=e.length,o=t.normal?new Float32Array(i):void 0,r=t.tangent?new Float32Array(i):void 0,s=t.bitangent?new Float32Array(i):void 0,a=0,c=0,d=0,u=!0,h=Z0e,p=I0e,A=_0e;if(t.normal||t.tangent||t.bitangent)for(let f=0;f<i;f+=6){let b=m.fromArray(e,f,y7),C=m.fromArray(e,(f+6)%i,x7);if(u){let T=m.fromArray(e,(f+3)%i,G0e);m.subtract(C,b,C),m.subtract(T,b,T),A=m.normalize(m.cross(T,C,A),A),u=!1}m.equalsEpsilon(C,b,L.EPSILON10)&&(u=!0),(t.tangent||t.bitangent)&&(h=n.geodeticSurfaceNormal(b,h),t.tangent&&(p=m.normalize(m.cross(h,A,p),p))),t.normal&&(o[a++]=A.x,o[a++]=A.y,o[a++]=A.z,o[a++]=A.x,o[a++]=A.y,o[a++]=A.z),t.tangent&&(r[c++]=p.x,r[c++]=p.y,r[c++]=p.z,r[c++]=p.x,r[c++]=p.y,r[c++]=p.z),t.bitangent&&(s[d++]=h.x,s[d++]=h.y,s[d++]=h.z,s[d++]=h.x,s[d++]=h.y,s[d++]=h.z)}return V0e(t,{positions:e,normals:o,tangents:r,bitangents:s})}function L0e(e,t){let n=e._vertexFormat,i=e._ellipsoid,o=t.height,r=t.width,s=t.northCap,a=t.southCap,c=0,d=o,u=o,h=0;s&&(c=1,u-=1,h+=1),a&&(d-=1,u-=1,h+=1),h+=r*u;let p=n.position?new Float64Array(h*3):void 0,A=n.st?new Float32Array(h*2):void 0,f=0,b=0,C=y7,T=Hct,E=Number.MAX_VALUE,S=Number.MAX_VALUE,I=-Number.MAX_VALUE,R=-Number.MAX_VALUE;for(let _=c;_<d;++_)for(let Z=0;Z<r;++Z)fa.computePosition(t,i,n.st,_,Z,C,T),p[f++]=C.x,p[f++]=C.y,p[f++]=C.z,n.st&&(A[b++]=T.x,A[b++]=T.y,E=Math.min(E,T.x),S=Math.min(S,T.y),I=Math.max(I,T.x),R=Math.max(R,T.y));if(s&&(fa.computePosition(t,i,n.st,0,0,C,T),p[f++]=C.x,p[f++]=C.y,p[f++]=C.z,n.st&&(A[b++]=T.x,A[b++]=T.y,E=T.x,S=T.y,I=T.x,R=T.y)),a&&(fa.computePosition(t,i,n.st,o-1,0,C,T),p[f++]=C.x,p[f++]=C.y,p[f]=C.z,n.st&&(A[b++]=T.x,A[b]=T.y,E=Math.min(E,T.x),S=Math.min(S,T.y),I=Math.max(I,T.x),R=Math.max(R,T.y))),n.st&&(E<0||S<0||I>1||R>1))for(let _=0;_<A.length;_+=2)A[_]=(A[_]-E)/(I-E),A[_+1]=(A[_+1]-S)/(R-S);let V=jct(p,n,i,t.tangentRotationMatrix),W=6*(r-1)*(u-1);s&&(W+=3*(r-1)),a&&(W+=3*(r-1));let B=Ue.createTypedArray(h,W),N=0,P=0,g;for(g=0;g<u-1;++g){for(let _=0;_<r-1;++_){let Z=N,G=Z+r,w=G+1,X=Z+1;B[P++]=Z,B[P++]=G,B[P++]=X,B[P++]=X,B[P++]=G,B[P++]=w,++N}++N}if(s||a){let _=h-1,Z=h-1;s&&a&&(_=h-2);let G,w;if(N=0,s)for(g=0;g<r-1;g++)G=N,w=G+1,B[P++]=_,B[P++]=G,B[P++]=w,++N;if(a)for(N=(u-1)*r,g=0;g<r-1;g++)G=N,w=G+1,B[P++]=G,B[P++]=Z,B[P++]=w,++N}return V.indices=B,n.st&&(V.attributes.st=new we({componentDatatype:H.FLOAT,componentsPerAttribute:2,values:A})),V}function QI(e,t,n,i,o){return e[t++]=i[n],e[t++]=i[n+1],e[t++]=i[n+2],e[t++]=o[n],e[t++]=o[n+1],e[t]=o[n+2],e}function OI(e,t,n,i){return e[t++]=i[n],e[t++]=i[n+1],e[t++]=i[n],e[t]=i[n+1],e}var C7=new ve;function $ct(e,t){let n=e._shadowVolume,i=e._offsetAttribute,o=e._vertexFormat,r=e._extrudedHeight,s=e._surfaceHeight,a=e._ellipsoid,c=t.height,d=t.width,u;if(n){let at=ve.clone(o,C7);at.normal=!0,e._vertexFormat=at}let h=L0e(e,t);n&&(e._vertexFormat=o);let p=Ii.scaleToGeodeticHeight(h.attributes.position.values,s,a,!1);p=new Float64Array(p);let A=p.length,f=A*2,b=new Float64Array(f);b.set(p);let C=Ii.scaleToGeodeticHeight(h.attributes.position.values,r,a);b.set(C,A),h.attributes.position.values=b;let T=o.normal?new Float32Array(f):void 0,E=o.tangent?new Float32Array(f):void 0,S=o.bitangent?new Float32Array(f):void 0,I=o.st?new Float32Array(f/3*2):void 0,R,V;if(o.normal){for(V=h.attributes.normal.values,T.set(V),u=0;u<A;u++)V[u]=-V[u];T.set(V,A),h.attributes.normal.values=T}if(n){V=h.attributes.normal.values,o.normal||(h.attributes.normal=void 0);let at=new Float32Array(f);for(u=0;u<A;u++)V[u]=-V[u];at.set(V,A),h.attributes.extrudeDirection=new we({componentDatatype:H.FLOAT,componentsPerAttribute:3,values:at})}let W,B=l(i);if(B){let at=A/3*2,Je=new Uint8Array(at);i===An.TOP?Je=Je.fill(1,0,at/2):(W=i===An.NONE?0:1,Je=Je.fill(W)),h.attributes.applyOffset=new we({componentDatatype:H.UNSIGNED_BYTE,componentsPerAttribute:1,values:Je})}if(o.tangent){let at=h.attributes.tangent.values;for(E.set(at),u=0;u<A;u++)at[u]=-at[u];E.set(at,A),h.attributes.tangent.values=E}if(o.bitangent){let at=h.attributes.bitangent.values;S.set(at),S.set(at,A),h.attributes.bitangent.values=S}o.st&&(R=h.attributes.st.values,I.set(R),I.set(R,A/3*2),h.attributes.st.values=I);let N=h.indices,P=N.length,g=A/3,_=Ue.createTypedArray(f/3,P*2);for(_.set(N),u=0;u<P;u+=3)_[u+P]=N[u+2]+g,_[u+1+P]=N[u+1]+g,_[u+2+P]=N[u]+g;h.indices=_;let Z=t.northCap,G=t.southCap,w=c,X=2,k=0,v=4,D=4;Z&&(X-=1,w-=1,k+=1,v-=2,D-=1),G&&(X-=1,w-=1,k+=1,v-=2,D-=1),k+=X*d+2*w-v;let Y=(k+D)*2,O=new Float64Array(Y*3),J=n?new Float32Array(Y*3):void 0,te=B?new Uint8Array(Y):void 0,z=o.st?new Float32Array(Y*2):void 0,j=i===An.TOP;B&&!j&&(W=i===An.ALL?1:0,te=te.fill(W));let ee=0,ge=0,ye=0,ae=0,Ce=d*w,Te;for(u=0;u<Ce;u+=d)Te=u*3,O=QI(O,ee,Te,p,C),ee+=6,o.st&&(z=OI(z,ge,u*2,R),ge+=4),n&&(ye+=3,J[ye++]=V[Te],J[ye++]=V[Te+1],J[ye++]=V[Te+2]),j&&(te[ae++]=1,ae+=1);if(G){let at=Z?Ce+1:Ce;for(Te=at*3,u=0;u<2;u++)O=QI(O,ee,Te,p,C),ee+=6,o.st&&(z=OI(z,ge,at*2,R),ge+=4),n&&(ye+=3,J[ye++]=V[Te],J[ye++]=V[Te+1],J[ye++]=V[Te+2]),j&&(te[ae++]=1,ae+=1)}else for(u=Ce-d;u<Ce;u++)Te=u*3,O=QI(O,ee,Te,p,C),ee+=6,o.st&&(z=OI(z,ge,u*2,R),ge+=4),n&&(ye+=3,J[ye++]=V[Te],J[ye++]=V[Te+1],J[ye++]=V[Te+2]),j&&(te[ae++]=1,ae+=1);for(u=Ce-1;u>0;u-=d)Te=u*3,O=QI(O,ee,Te,p,C),ee+=6,o.st&&(z=OI(z,ge,u*2,R),ge+=4),n&&(ye+=3,J[ye++]=V[Te],J[ye++]=V[Te+1],J[ye++]=V[Te+2]),j&&(te[ae++]=1,ae+=1);if(Z){let at=Ce;for(Te=at*3,u=0;u<2;u++)O=QI(O,ee,Te,p,C),ee+=6,o.st&&(z=OI(z,ge,at*2,R),ge+=4),n&&(ye+=3,J[ye++]=V[Te],J[ye++]=V[Te+1],J[ye++]=V[Te+2]),j&&(te[ae++]=1,ae+=1)}else for(u=d-1;u>=0;u--)Te=u*3,O=QI(O,ee,Te,p,C),ee+=6,o.st&&(z=OI(z,ge,u*2,R),ge+=4),n&&(ye+=3,J[ye++]=V[Te],J[ye++]=V[Te+1],J[ye++]=V[Te+2]),j&&(te[ae++]=1,ae+=1);let Fe=qct(O,o,a);o.st&&(Fe.attributes.st=new we({componentDatatype:H.FLOAT,componentsPerAttribute:2,values:z})),n&&(Fe.attributes.extrudeDirection=new we({componentDatatype:H.FLOAT,componentsPerAttribute:3,values:J})),B&&(Fe.attributes.applyOffset=new we({componentDatatype:H.UNSIGNED_BYTE,componentsPerAttribute:1,values:te}));let Ne=Ue.createTypedArray(Y,k*6),Pe,Xe,st,Ye;A=O.length/3;let xt=0;for(u=0;u<A-1;u+=2){Pe=u,Ye=(Pe+2)%A;let at=m.fromArray(O,Pe*3,x7),Je=m.fromArray(O,Ye*3,G0e);m.equalsEpsilon(at,Je,L.EPSILON10)||(Xe=(Pe+1)%A,st=(Xe+2)%A,Ne[xt++]=Pe,Ne[xt++]=Xe,Ne[xt++]=Ye,Ne[xt++]=Ye,Ne[xt++]=Xe,Ne[xt++]=st)}return Fe.indices=Ne,Fe=zn.combineInstances([new wt({geometry:h}),new wt({geometry:Fe})]),Fe[0]}var elt=[new m,new m,new m,new m],W0e=new Ae,tlt=new Ae;function T7(e,t,n,i,o){if(n===0)return de.clone(e,o);let r=fa.computeOptions(e,t,n,0,R0e,W0e),s=r.height,a=r.width,c=elt;return fa.computePosition(r,i,!1,0,0,c[0]),fa.computePosition(r,i,!1,0,a-1,c[1]),fa.computePosition(r,i,!1,s-1,0,c[2]),fa.computePosition(r,i,!1,s-1,a-1,c[3]),de.fromCartesianArray(c,i,o)}function wp(e){e=e??Q.EMPTY_OBJECT;let t=e.rectangle,n=e.height??0,i=e.extrudedHeight??n;this._rectangle=de.clone(t),this._granularity=e.granularity??L.RADIANS_PER_DEGREE,this._ellipsoid=ie.clone(e.ellipsoid??ie.default),this._surfaceHeight=Math.max(n,i),this._rotation=e.rotation??0,this._stRotation=e.stRotation??0,this._vertexFormat=ve.clone(e.vertexFormat??ve.DEFAULT),this._extrudedHeight=Math.min(n,i),this._shadowVolume=e.shadowVolume??!1,this._workerName="createRectangleGeometry",this._offsetAttribute=e.offsetAttribute,this._rotatedRectangle=void 0,this._textureCoordinateRotationPoints=void 0}wp.packedLength=de.packedLength+ie.packedLength+ve.packedLength+7;wp.pack=function(e,t,n){return n=n??0,de.pack(e._rectangle,t,n),n+=de.packedLength,ie.pack(e._ellipsoid,t,n),n+=ie.packedLength,ve.pack(e._vertexFormat,t,n),n+=ve.packedLength,t[n++]=e._granularity,t[n++]=e._surfaceHeight,t[n++]=e._rotation,t[n++]=e._stRotation,t[n++]=e._extrudedHeight,t[n++]=e._shadowVolume?1:0,t[n]=e._offsetAttribute??-1,t};var F0e=new de,B0e=ie.clone(ie.UNIT_SPHERE),hy={rectangle:F0e,ellipsoid:B0e,vertexFormat:C7,granularity:void 0,height:void 0,rotation:void 0,stRotation:void 0,extrudedHeight:void 0,shadowVolume:void 0,offsetAttribute:void 0};wp.unpack=function(e,t,n){t=t??0;let i=de.unpack(e,t,F0e);t+=de.packedLength;let o=ie.unpack(e,t,B0e);t+=ie.packedLength;let r=ve.unpack(e,t,C7);t+=ve.packedLength;let s=e[t++],a=e[t++],c=e[t++],d=e[t++],u=e[t++],h=e[t++]===1,p=e[t];return l(n)?(n._rectangle=de.clone(i,n._rectangle),n._ellipsoid=ie.clone(o,n._ellipsoid),n._vertexFormat=ve.clone(r,n._vertexFormat),n._granularity=s,n._surfaceHeight=a,n._rotation=c,n._stRotation=d,n._extrudedHeight=u,n._shadowVolume=h,n._offsetAttribute=p===-1?void 0:p,n):(hy.granularity=s,hy.height=a,hy.rotation=c,hy.stRotation=d,hy.extrudedHeight=u,hy.shadowVolume=h,hy.offsetAttribute=p===-1?void 0:p,new wp(hy))};wp.computeRectangle=function(e,t){e=e??Q.EMPTY_OBJECT;let n=e.rectangle,i=e.granularity??L.RADIANS_PER_DEGREE,o=e.ellipsoid??ie.default,r=e.rotation??0;return T7(n,i,r,o,t)};var nlt=new $,E0e=new Me,ilt=new Ae;wp.createGeometry=function(e){if(L.equalsEpsilon(e._rectangle.north,e._rectangle.south,L.EPSILON10)||L.equalsEpsilon(e._rectangle.east,e._rectangle.west,L.EPSILON10))return;let t=e._rectangle,n=e._ellipsoid,i=e._rotation,o=e._stRotation,r=e._vertexFormat,s=fa.computeOptions(t,e._granularity,i,o,R0e,W0e,tlt),a=nlt;if(o!==0||i!==0){let A=de.center(t,ilt),f=n.geodeticSurfaceNormalCartographic(A,x7);Me.fromAxisAngle(f,-o,E0e),$.fromQuaternion(E0e,a)}else $.clone($.IDENTITY,a);let c=e._surfaceHeight,d=e._extrudedHeight,u=!L.equalsEpsilon(c,d,0,L.EPSILON2);s.lonScalar=1/e._rectangle.width,s.latScalar=1/e._rectangle.height,s.tangentRotationMatrix=a;let h,p;if(t=e._rectangle,u){h=$ct(e,s);let A=ue.fromRectangle3D(t,n,c,Kct),f=ue.fromRectangle3D(t,n,d,Jct);p=ue.union(A,f)}else{if(h=L0e(e,s),h.attributes.position.values=Ii.scaleToGeodeticHeight(h.attributes.position.values,c,n,!1),l(e._offsetAttribute)){let A=h.attributes.position.values.length,f=e._offsetAttribute===An.NONE?0:1,b=new Uint8Array(A/3).fill(f);h.attributes.applyOffset=new we({componentDatatype:H.UNSIGNED_BYTE,componentsPerAttribute:1,values:b})}p=ue.fromRectangle3D(t,n,c)}return r.position||delete h.attributes.position,new Ct({attributes:h.attributes,indices:h.indices,primitiveType:h.primitiveType,boundingSphere:p,offsetAttribute:e._offsetAttribute})};wp.createShadowVolume=function(e,t,n){let i=e._granularity,o=e._ellipsoid,r=t(i,o),s=n(i,o);return new wp({rectangle:e._rectangle,rotation:e._rotation,ellipsoid:o,stRotation:e._stRotation,granularity:i,extrudedHeight:s,height:r,vertexFormat:ve.POSITION_ONLY,shadowVolume:!0})};var S0e=new de,olt=[new M,new M,new M],rlt=new Qi,slt=new Ae;function alt(e){if(e._stRotation===0)return[0,0,0,1,1,0];let t=de.clone(e._rectangle,S0e),n=e._granularity,i=e._ellipsoid,o=e._rotation-e._stRotation,r=T7(t,n,o,i,S0e),s=olt;s[0].x=r.west,s[0].y=r.south,s[1].x=r.west,s[1].y=r.north,s[2].x=r.east,s[2].y=r.south;let a=e.rectangle,c=Qi.fromRotation(e._stRotation,rlt),d=de.center(a,slt);for(let f=0;f<3;++f){let b=s[f];b.x-=d.longitude,b.y-=d.latitude,Qi.multiplyByVector(c,b,b),b.x+=d.longitude,b.y+=d.latitude,b.x=(b.x-a.west)/a.width,b.y=(b.y-a.south)/a.height}let u=s[0],h=s[1],p=s[2],A=new Array(6);return M.pack(u,A),M.pack(h,A,2),M.pack(p,A,4),A}Object.defineProperties(wp.prototype,{rectangle:{get:function(){return l(this._rotatedRectangle)||(this._rotatedRectangle=T7(this._rectangle,this._granularity,this._rotation,this._ellipsoid)),this._rotatedRectangle}},textureCoordinateRotationPoints:{get:function(){return l(this._textureCoordinateRotationPoints)||(this._textureCoordinateRotationPoints=alt(this)),this._textureCoordinateRotationPoints}}});var IT=wp;var w0e=new U,N0e=m.ZERO,P0e=new m,X0e=new de,clt=new de,llt=new Ae;function dlt(e){this.id=e,this.vertexFormat=void 0,this.rectangle=void 0,this.height=void 0,this.extrudedHeight=void 0,this.granularity=void 0,this.stRotation=void 0,this.rotation=void 0,this.offsetAttribute=void 0}function yf(e,t){si.call(this,{entity:e,scene:t,geometryOptions:new dlt(e),geometryPropertyName:"rectangle",observedPropertyNames:["availability","rectangle"]}),this._onEntityPropertyChanged(e,"rectangle",e.rectangle,void 0)}l(Object.create)&&(yf.prototype=Object.create(si.prototype),yf.prototype.constructor=yf);yf.prototype.createFillGeometryInstance=function(e){let t=this._entity,n=t.isAvailable(e),i={show:new Rn(n&&t.isShowing&&this._showProperty.getValue(e)&&this._fillProperty.getValue(e)),distanceDisplayCondition:ei.fromDistanceDisplayCondition(this._distanceDisplayConditionProperty.getValue(e)),offset:void 0,color:void 0};if(this._materialProperty instanceof Kt){let o;l(this._materialProperty.color)&&(this._materialProperty.color.isConstant||n)&&(o=this._materialProperty.color.getValue(e,w0e)),l(o)||(o=U.WHITE),i.color=$t.fromColor(o)}return l(this._options.offsetAttribute)&&(i.offset=Ao.fromCartesian3(K.getValueOrDefault(this._terrainOffsetProperty,e,N0e,P0e))),new wt({id:t,geometry:new IT(this._options),attributes:i})};yf.prototype.createOutlineGeometryInstance=function(e){let t=this._entity,n=t.isAvailable(e),i=K.getValueOrDefault(this._outlineColorProperty,e,U.BLACK,w0e),o=this._distanceDisplayConditionProperty.getValue(e),r={show:new Rn(n&&t.isShowing&&this._showProperty.getValue(e)&&this._showOutlineProperty.getValue(e)),color:$t.fromColor(i),distanceDisplayCondition:ei.fromDistanceDisplayCondition(o),offset:void 0};return l(this._options.offsetAttribute)&&(r.offset=Ao.fromCartesian3(K.getValueOrDefault(this._terrainOffsetProperty,e,N0e,P0e))),new wt({id:t,geometry:new tT(this._options),attributes:r})};yf.prototype._computeCenter=function(e,t){let n=K.getValueOrUndefined(this._entity.rectangle.coordinates,e,clt);if(!l(n))return;let i=de.center(n,llt);return Ae.toCartesian(i,ie.default,t)};yf.prototype._isHidden=function(e,t){return!l(t.coordinates)||Si.prototype._isHidden.call(this,e,t)};yf.prototype._isDynamic=function(e,t){return!t.coordinates.isConstant||!K.isConstant(t.height)||!K.isConstant(t.extrudedHeight)||!K.isConstant(t.granularity)||!K.isConstant(t.stRotation)||!K.isConstant(t.rotation)||!K.isConstant(t.outlineWidth)||!K.isConstant(t.zIndex)||this._onTerrain&&!K.isConstant(this._materialProperty)&&!(this._materialProperty instanceof Kt)};yf.prototype._setStaticOptions=function(e,t){let n=this._materialProperty instanceof Kt,i=K.getValueOrUndefined(t.height,qe.MINIMUM_VALUE),o=K.getValueOrDefault(t.heightReference,qe.MINIMUM_VALUE,rt.NONE),r=K.getValueOrUndefined(t.extrudedHeight,qe.MINIMUM_VALUE),s=K.getValueOrDefault(t.extrudedHeightReference,qe.MINIMUM_VALUE,rt.NONE);l(r)&&!l(i)&&(i=0);let a=this._options;a.vertexFormat=n?yn.VERTEX_FORMAT:go.MaterialSupport.TEXTURED.vertexFormat,a.rectangle=t.coordinates.getValue(qe.MINIMUM_VALUE,a.rectangle),a.granularity=K.getValueOrUndefined(t.granularity,qe.MINIMUM_VALUE),a.stRotation=K.getValueOrUndefined(t.stRotation,qe.MINIMUM_VALUE),a.rotation=K.getValueOrUndefined(t.rotation,qe.MINIMUM_VALUE),a.offsetAttribute=si.computeGeometryOffsetAttribute(i,o,r,s),a.height=si.getGeometryHeight(i,o),r=si.getGeometryExtrudedHeight(r,s),r===si.CLAMP_TO_GROUND&&(r=Gi.getMinimumMaximumHeights(IT.computeRectangle(a,X0e)).minimumTerrainHeight),a.extrudedHeight=r};yf.DynamicGeometryUpdater=zI;function zI(e,t,n){Ei.call(this,e,t,n)}l(Object.create)&&(zI.prototype=Object.create(Ei.prototype),zI.prototype.constructor=zI);zI.prototype._isHidden=function(e,t,n){return!l(this._options.rectangle)||Ei.prototype._isHidden.call(this,e,t,n)};zI.prototype._setOptions=function(e,t,n){let i=this._options,o=K.getValueOrUndefined(t.height,n),r=K.getValueOrDefault(t.heightReference,n,rt.NONE),s=K.getValueOrUndefined(t.extrudedHeight,n),a=K.getValueOrDefault(t.extrudedHeightReference,n,rt.NONE);l(s)&&!l(o)&&(o=0),i.rectangle=K.getValueOrUndefined(t.coordinates,n,i.rectangle),i.granularity=K.getValueOrUndefined(t.granularity,n),i.stRotation=K.getValueOrUndefined(t.stRotation,n),i.rotation=K.getValueOrUndefined(t.rotation,n),i.offsetAttribute=si.computeGeometryOffsetAttribute(o,r,s,a),i.height=si.getGeometryHeight(o,r),s=si.getGeometryExtrudedHeight(s,a),s===si.CLAMP_TO_GROUND&&(s=Gi.getMinimumMaximumHeights(IT.computeRectangle(i,X0e)).minimumTerrainHeight),i.extrudedHeight=s};var nP=yf;var ZVi=y(x(),1);var JRi=y(x(),1);var FRi=y(x(),1);var Y0e={};function ult(e,t){return L.equalsEpsilon(e.latitude,t.latitude,L.EPSILON10)&&L.equalsEpsilon(e.longitude,t.longitude,L.EPSILON10)}var mlt=new Ae,hlt=new Ae;function flt(e,t,n,i){t=Uo(t,m.equalsEpsilon);let o=t.length;if(o<2)return;let r=l(i),s=l(n),a=new Array(o),c=new Array(o),d=new Array(o),u=t[0];a[0]=u;let h=e.cartesianToCartographic(u,mlt);s&&(h.height=n[0]),c[0]=h.height,r?d[0]=i[0]:d[0]=0;let p=c[0],A=d[0],f=p===A,b=1;for(let C=1;C<o;++C){let T=t[C],E=e.cartesianToCartographic(T,hlt);s&&(E.height=n[C]),f=f&&E.height===0,ult(h,E)?h.height<E.height&&(c[b-1]=E.height):(a[b]=T,c[b]=E.height,r?d[b]=i[C]:d[b]=0,f=f&&c[b]===d[b],Ae.clone(E,h),++b)}if(!(f||b<2))return a.length=b,c.length=b,d.length=b,{positions:a,topHeights:c,bottomHeights:d}}var plt=new Array(2),Alt=new Array(2),glt={positions:void 0,height:void 0,granularity:void 0,ellipsoid:void 0};Y0e.computePositions=function(e,t,n,i,o,r){let s=flt(e,t,n,i);if(!l(s))return;t=s.positions,n=s.topHeights,i=s.bottomHeights;let a=t.length,c=a-2,d,u,h=L.chordLength(o,e.maximumRadius),p=glt;if(p.minDistance=h,p.ellipsoid=e,r){let A=0,f;for(f=0;f<a-1;f++)A+=Ji.numberOfPoints(t[f],t[f+1],h)+1;d=new Float64Array(A*3),u=new Float64Array(A*3);let b=plt,C=Alt;p.positions=b,p.height=C;let T=0;for(f=0;f<a-1;f++){b[0]=t[f],b[1]=t[f+1],C[0]=n[f],C[1]=n[f+1];let E=Ji.generateArc(p);d.set(E,T),C[0]=i[f],C[1]=i[f+1],u.set(Ji.generateArc(p),T),T+=E.length}}else p.positions=t,p.height=n,d=new Float64Array(Ji.generateArc(p)),p.height=i,u=new Float64Array(Ji.generateArc(p));return{bottomPositions:u,topPositions:d,numCorners:c}};var ZT=Y0e;var E7=new m,l5=new m,blt=new m,M0e=new m,ylt=new m,xlt=new m,Clt=new m;function RT(e){e=e??Q.EMPTY_OBJECT;let t=e.positions,n=e.maximumHeights,i=e.minimumHeights,o=e.vertexFormat??ve.DEFAULT,r=e.granularity??L.RADIANS_PER_DEGREE,s=e.ellipsoid??ie.default;this._positions=t,this._minimumHeights=i,this._maximumHeights=n,this._vertexFormat=ve.clone(o),this._granularity=r,this._ellipsoid=ie.clone(s),this._workerName="createWallGeometry";let a=1+t.length*m.packedLength+2;l(i)&&(a+=i.length),l(n)&&(a+=n.length),this.packedLength=a+ie.packedLength+ve.packedLength+1}RT.pack=function(e,t,n){n=n??0;let i,o=e._positions,r=o.length;for(t[n++]=r,i=0;i<r;++i,n+=m.packedLength)m.pack(o[i],t,n);let s=e._minimumHeights;if(r=l(s)?s.length:0,t[n++]=r,l(s))for(i=0;i<r;++i)t[n++]=s[i];let a=e._maximumHeights;if(r=l(a)?a.length:0,t[n++]=r,l(a))for(i=0;i<r;++i)t[n++]=a[i];return ie.pack(e._ellipsoid,t,n),n+=ie.packedLength,ve.pack(e._vertexFormat,t,n),n+=ve.packedLength,t[n]=e._granularity,t};var v0e=ie.clone(ie.UNIT_SPHERE),U0e=new ve,iP={positions:void 0,minimumHeights:void 0,maximumHeights:void 0,ellipsoid:v0e,vertexFormat:U0e,granularity:void 0};RT.unpack=function(e,t,n){t=t??0;let i,o=e[t++],r=new Array(o);for(i=0;i<o;++i,t+=m.packedLength)r[i]=m.unpack(e,t);o=e[t++];let s;if(o>0)for(s=new Array(o),i=0;i<o;++i)s[i]=e[t++];o=e[t++];let a;if(o>0)for(a=new Array(o),i=0;i<o;++i)a[i]=e[t++];let c=ie.unpack(e,t,v0e);t+=ie.packedLength;let d=ve.unpack(e,t,U0e);t+=ve.packedLength;let u=e[t];return l(n)?(n._positions=r,n._minimumHeights=s,n._maximumHeights=a,n._ellipsoid=ie.clone(c,n._ellipsoid),n._vertexFormat=ve.clone(d,n._vertexFormat),n._granularity=u,n):(iP.positions=r,iP.minimumHeights=s,iP.maximumHeights=a,iP.granularity=u,new RT(iP))};RT.fromConstantHeights=function(e){e=e??Q.EMPTY_OBJECT;let t=e.positions,n,i,o=e.minimumHeight,r=e.maximumHeight,s=l(o),a=l(r);if(s||a){let d=t.length;n=s?new Array(d):void 0,i=a?new Array(d):void 0;for(let u=0;u<d;++u)s&&(n[u]=o),a&&(i[u]=r)}let c={positions:t,maximumHeights:i,minimumHeights:n,ellipsoid:e.ellipsoid,vertexFormat:e.vertexFormat};return new RT(c)};RT.createGeometry=function(e){let t=e._positions,n=e._minimumHeights,i=e._maximumHeights,o=e._vertexFormat,r=e._granularity,s=e._ellipsoid,a=ZT.computePositions(s,t,i,n,r,!0);if(!l(a))return;let c=a.bottomPositions,d=a.topPositions,u=a.numCorners,h=d.length,p=h*2,A=o.position?new Float64Array(p):void 0,f=o.normal?new Float32Array(p):void 0,b=o.tangent?new Float32Array(p):void 0,C=o.bitangent?new Float32Array(p):void 0,T=o.st?new Float32Array(p/3*2):void 0,E=0,S=0,I=0,R=0,V=0,W=Clt,B=xlt,N=ylt,P=!0;h/=3;let g,_=0,Z=1/(h-u-1);for(g=0;g<h;++g){let v=g*3,D=m.fromArray(d,v,E7),Y=m.fromArray(c,v,l5);if(o.position&&(A[E++]=Y.x,A[E++]=Y.y,A[E++]=Y.z,A[E++]=D.x,A[E++]=D.y,A[E++]=D.z),o.st&&(T[V++]=_,T[V++]=0,T[V++]=_,T[V++]=1),o.normal||o.tangent||o.bitangent){let O=m.clone(m.ZERO,M0e),J=m.subtract(D,s.geodeticSurfaceNormal(D,l5),l5);if(g+1<h&&(O=m.fromArray(d,v+3,M0e)),P){let te=m.subtract(O,D,blt),z=m.subtract(J,D,E7);W=m.normalize(m.cross(z,te,W),W),P=!1}m.equalsEpsilon(D,O,L.EPSILON10)?P=!0:(_+=Z,o.tangent&&(B=m.normalize(m.subtract(O,D,B),B)),o.bitangent&&(N=m.normalize(m.cross(W,B,N),N))),o.normal&&(f[S++]=W.x,f[S++]=W.y,f[S++]=W.z,f[S++]=W.x,f[S++]=W.y,f[S++]=W.z),o.tangent&&(b[R++]=B.x,b[R++]=B.y,b[R++]=B.z,b[R++]=B.x,b[R++]=B.y,b[R++]=B.z),o.bitangent&&(C[I++]=N.x,C[I++]=N.y,C[I++]=N.z,C[I++]=N.x,C[I++]=N.y,C[I++]=N.z)}}let G=new xn;o.position&&(G.position=new we({componentDatatype:H.DOUBLE,componentsPerAttribute:3,values:A})),o.normal&&(G.normal=new we({componentDatatype:H.FLOAT,componentsPerAttribute:3,values:f})),o.tangent&&(G.tangent=new we({componentDatatype:H.FLOAT,componentsPerAttribute:3,values:b})),o.bitangent&&(G.bitangent=new we({componentDatatype:H.FLOAT,componentsPerAttribute:3,values:C})),o.st&&(G.st=new we({componentDatatype:H.FLOAT,componentsPerAttribute:2,values:T}));let w=p/3;p-=6*(u+1);let X=Ue.createTypedArray(w,p),k=0;for(g=0;g<w-2;g+=2){let v=g,D=g+2,Y=m.fromArray(A,v*3,E7),O=m.fromArray(A,D*3,l5);if(m.equalsEpsilon(Y,O,L.EPSILON10))continue;let J=g+1,te=g+3;X[k++]=J,X[k++]=v,X[k++]=te,X[k++]=te,X[k++]=v,X[k++]=D}return new Ct({attributes:G,indices:X,primitiveType:We.TRIANGLES,boundingSphere:ue.fromVertices(A)})};var oP=RT;var dVi=y(x(),1);var D0e=new m,k0e=new m;function VT(e){e=e??Q.EMPTY_OBJECT;let t=e.positions,n=e.maximumHeights,i=e.minimumHeights,o=e.granularity??L.RADIANS_PER_DEGREE,r=e.ellipsoid??ie.default;this._positions=t,this._minimumHeights=i,this._maximumHeights=n,this._granularity=o,this._ellipsoid=ie.clone(r),this._workerName="createWallOutlineGeometry";let s=1+t.length*m.packedLength+2;l(i)&&(s+=i.length),l(n)&&(s+=n.length),this.packedLength=s+ie.packedLength+1}VT.pack=function(e,t,n){n=n??0;let i,o=e._positions,r=o.length;for(t[n++]=r,i=0;i<r;++i,n+=m.packedLength)m.pack(o[i],t,n);let s=e._minimumHeights;if(r=l(s)?s.length:0,t[n++]=r,l(s))for(i=0;i<r;++i)t[n++]=s[i];let a=e._maximumHeights;if(r=l(a)?a.length:0,t[n++]=r,l(a))for(i=0;i<r;++i)t[n++]=a[i];return ie.pack(e._ellipsoid,t,n),n+=ie.packedLength,t[n]=e._granularity,t};var Q0e=ie.clone(ie.UNIT_SPHERE),rP={positions:void 0,minimumHeights:void 0,maximumHeights:void 0,ellipsoid:Q0e,granularity:void 0};VT.unpack=function(e,t,n){t=t??0;let i,o=e[t++],r=new Array(o);for(i=0;i<o;++i,t+=m.packedLength)r[i]=m.unpack(e,t);o=e[t++];let s;if(o>0)for(s=new Array(o),i=0;i<o;++i)s[i]=e[t++];o=e[t++];let a;if(o>0)for(a=new Array(o),i=0;i<o;++i)a[i]=e[t++];let c=ie.unpack(e,t,Q0e);t+=ie.packedLength;let d=e[t];return l(n)?(n._positions=r,n._minimumHeights=s,n._maximumHeights=a,n._ellipsoid=ie.clone(c,n._ellipsoid),n._granularity=d,n):(rP.positions=r,rP.minimumHeights=s,rP.maximumHeights=a,rP.granularity=d,new VT(rP))};VT.fromConstantHeights=function(e){e=e??Q.EMPTY_OBJECT;let t=e.positions,n,i,o=e.minimumHeight,r=e.maximumHeight,s=l(o),a=l(r);if(s||a){let d=t.length;n=s?new Array(d):void 0,i=a?new Array(d):void 0;for(let u=0;u<d;++u)s&&(n[u]=o),a&&(i[u]=r)}let c={positions:t,maximumHeights:i,minimumHeights:n,ellipsoid:e.ellipsoid};return new VT(c)};VT.createGeometry=function(e){let t=e._positions,n=e._minimumHeights,i=e._maximumHeights,o=e._granularity,r=e._ellipsoid,s=ZT.computePositions(r,t,i,n,o,!1);if(!l(s))return;let a=s.bottomPositions,c=s.topPositions,d=c.length,u=d*2,h=new Float64Array(u),p=0;d/=3;let A;for(A=0;A<d;++A){let E=A*3,S=m.fromArray(c,E,D0e),I=m.fromArray(a,E,k0e);h[p++]=I.x,h[p++]=I.y,h[p++]=I.z,h[p++]=S.x,h[p++]=S.y,h[p++]=S.z}let f=new xn({position:new we({componentDatatype:H.DOUBLE,componentsPerAttribute:3,values:h})}),b=u/3;u=2*b-4+b;let C=Ue.createTypedArray(b,u),T=0;for(A=0;A<b-2;A+=2){let E=A,S=A+2,I=m.fromArray(h,E*3,D0e),R=m.fromArray(h,S*3,k0e);if(m.equalsEpsilon(I,R,L.EPSILON10))continue;let V=A+1,W=A+3;C[T++]=V,C[T++]=E,C[T++]=V,C[T++]=W,C[T++]=E,C[T++]=S}return C[T++]=b-2,C[T++]=b-1,new Ct({attributes:f,indices:C,primitiveType:We.LINES,boundingSphere:ue.fromVertices(h)})};var sP=VT;var O0e=new U;function Tlt(e){this.id=e,this.vertexFormat=void 0,this.positions=void 0,this.minimumHeights=void 0,this.maximumHeights=void 0,this.granularity=void 0}function xf(e,t){Si.call(this,{entity:e,scene:t,geometryOptions:new Tlt(e),geometryPropertyName:"wall",observedPropertyNames:["availability","wall"]}),this._onEntityPropertyChanged(e,"wall",e.wall,void 0)}l(Object.create)&&(xf.prototype=Object.create(Si.prototype),xf.prototype.constructor=xf);xf.prototype.createFillGeometryInstance=function(e){let t=this._entity,n=t.isAvailable(e),i,o,r=new Rn(n&&t.isShowing&&this._showProperty.getValue(e)&&this._fillProperty.getValue(e)),s=this._distanceDisplayConditionProperty.getValue(e),a=ei.fromDistanceDisplayCondition(s);if(this._materialProperty instanceof Kt){let c;l(this._materialProperty.color)&&(this._materialProperty.color.isConstant||n)&&(c=this._materialProperty.color.getValue(e,O0e)),l(c)||(c=U.WHITE),o=$t.fromColor(c),i={show:r,distanceDisplayCondition:a,color:o}}else i={show:r,distanceDisplayCondition:a};return new wt({id:t,geometry:new oP(this._options),attributes:i})};xf.prototype.createOutlineGeometryInstance=function(e){let t=this._entity,n=t.isAvailable(e),i=K.getValueOrDefault(this._outlineColorProperty,e,U.BLACK,O0e),o=this._distanceDisplayConditionProperty.getValue(e);return new wt({id:t,geometry:new sP(this._options),attributes:{show:new Rn(n&&t.isShowing&&this._showProperty.getValue(e)&&this._showOutlineProperty.getValue(e)),color:$t.fromColor(i),distanceDisplayCondition:ei.fromDistanceDisplayCondition(o)}})};xf.prototype._isHidden=function(e,t){return!l(t.positions)||Si.prototype._isHidden.call(this,e,t)};xf.prototype._getIsClosed=function(e){return!1};xf.prototype._isDynamic=function(e,t){return!t.positions.isConstant||!K.isConstant(t.minimumHeights)||!K.isConstant(t.maximumHeights)||!K.isConstant(t.outlineWidth)||!K.isConstant(t.granularity)};xf.prototype._setStaticOptions=function(e,t){let n=t.minimumHeights,i=t.maximumHeights,o=t.granularity,r=this._materialProperty instanceof Kt,s=this._options;s.vertexFormat=r?yn.VERTEX_FORMAT:go.MaterialSupport.TEXTURED.vertexFormat,s.positions=t.positions.getValue(qe.MINIMUM_VALUE,s.positions),s.minimumHeights=l(n)?n.getValue(qe.MINIMUM_VALUE,s.minimumHeights):void 0,s.maximumHeights=l(i)?i.getValue(qe.MINIMUM_VALUE,s.maximumHeights):void 0,s.granularity=l(o)?o.getValue(qe.MINIMUM_VALUE):void 0};xf.DynamicGeometryUpdater=HI;function HI(e,t,n){Ei.call(this,e,t,n)}l(Object.create)&&(HI.prototype=Object.create(Ei.prototype),HI.prototype.constructor=HI);HI.prototype._isHidden=function(e,t,n){return!l(this._options.positions)||Ei.prototype._isHidden.call(this,e,t,n)};HI.prototype._setOptions=function(e,t,n){let i=this._options;i.positions=K.getValueOrUndefined(t.positions,n,i.positions),i.minimumHeights=K.getValueOrUndefined(t.minimumHeights,n,i.minimumHeights),i.maximumHeights=K.getValueOrUndefined(t.maximumHeights,n,i.maximumHeights),i.granularity=K.getValueOrUndefined(t.granularity,n)};var aP=xf;var GT=[mW,IN,CN,YN,vN,kN,HN,tP,nP,aP];function LT(e,t){this.entity=e,this.scene=t;let n=new Array(GT.length),i=new xe,o=new Xr;for(let r=0;r<n.length;r++){let s=new GT[r](e,t);o.add(s.geometryChanged,a=>{i.raiseEvent(a)}),n[r]=s}this.updaters=n,this.geometryChanged=i,this.eventHelper=o,this._removeEntitySubscription=e.definitionChanged.addEventListener(LT.prototype._onEntityPropertyChanged,this)}LT.prototype._onEntityPropertyChanged=function(e,t,n,i){let o=this.updaters;for(let r=0;r<o.length;r++)o[r]._onEntityPropertyChanged(e,t,n,i)};LT.prototype.forEach=function(e){let t=this.updaters;for(let n=0;n<t.length;n++)e(t[n])};LT.prototype.destroy=function(){this.eventHelper.removeAll();let e=this.updaters;for(let t=0;t<e.length;t++)e[t].destroy();this._removeEntitySubscription(),he(this)};LT.registerUpdater=function(e){GT.includes(e)||GT.push(e)};LT.unregisterUpdater=function(e){if(GT.includes(e)){let t=GT.indexOf(e);GT.splice(t,1)}};var WT=LT;var oGi=y(x(),1);var z0e=new U,Elt=new Dt,Slt=new Dt,_lt=m.ZERO,Ilt=new m;function Cf(e,t,n,i,o,r,s){this.translucent=t,this.appearanceType=n,this.depthFailAppearanceType=i,this.depthFailMaterialProperty=o,this.depthFailMaterial=void 0,this.closed=r,this.shadows=s,this.primitives=e,this.createPrimitive=!1,this.waitingOnCreate=!1,this.primitive=void 0,this.oldPrimitive=void 0,this.geometry=new Xt,this.updaters=new Xt,this.updatersWithAttributes=new Xt,this.attributes=new Xt,this.subscriptions=new Xt,this.showsUpdated=new Xt,this.itemsToRemove=[],this.invalidated=!1;let a;l(o)&&(a=o.definitionChanged.addEventListener(Cf.prototype.onMaterialChanged,this)),this.removeMaterialSubscription=a}Cf.prototype.onMaterialChanged=function(){this.invalidated=!0};Cf.prototype.isMaterial=function(e){let t=this.depthFailMaterialProperty,n=e.depthFailMaterialProperty;return n===t?!0:l(t)?t.equals(n):!1};Cf.prototype.add=function(e,t){let n=e.id;if(this.createPrimitive=!0,this.geometry.set(n,t),this.updaters.set(n,e),!e.hasConstantFill||!e.fillMaterialProperty.isConstant||!K.isConstant(e.distanceDisplayConditionProperty)||!K.isConstant(e.terrainOffsetProperty))this.updatersWithAttributes.set(n,e);else{let i=this;this.subscriptions.set(n,e.entity.definitionChanged.addEventListener(function(o,r,s,a){r==="isShowing"&&i.showsUpdated.set(e.id,e)}))}};Cf.prototype.remove=function(e){let t=e.id;if(this.createPrimitive=this.geometry.remove(t)||this.createPrimitive,this.updaters.remove(t)){this.updatersWithAttributes.remove(t);let n=this.subscriptions.get(t);return l(n)&&(n(),this.subscriptions.remove(t),this.showsUpdated.remove(t)),!0}return!1};Cf.prototype.update=function(e){let t=!0,n=0,i=this.primitive,o=this.primitives,r;if(this.createPrimitive){let s=this.geometry.values;if(s.length>0){l(i)&&(l(this.oldPrimitive)?o.remove(i):this.oldPrimitive=i);let c;if(l(this.depthFailAppearanceType)){l(this.depthFailMaterialProperty)&&(this.depthFailMaterial=Ir.getValue(e,this.depthFailMaterialProperty,this.depthFailMaterial));let u=this.depthFailAppearanceType;c=new u({material:this.depthFailMaterial,translucent:this.translucent,closed:this.closed})}let d=this.appearanceType;i=new Nn({show:!1,asynchronous:!0,geometryInstances:s.slice(),appearance:new d({translucent:this.translucent,closed:this.closed}),depthFailAppearance:c,shadows:this.shadows}),o.add(i),t=!1}else{l(i)&&(o.remove(i),i=void 0);let c=this.oldPrimitive;l(c)&&(o.remove(c),this.oldPrimitive=void 0)}this.attributes.removeAll(),this.primitive=i,this.createPrimitive=!1,this.waitingOnCreate=!0}else if(l(i)&&i.ready){i.show=!0,l(this.oldPrimitive)&&(o.remove(this.oldPrimitive),this.oldPrimitive=void 0),l(this.depthFailAppearanceType)&&!(this.depthFailMaterialProperty instanceof Kt)&&(this.depthFailMaterial=Ir.getValue(e,this.depthFailMaterialProperty,this.depthFailMaterial),this.primitive.depthFailAppearance.material=this.depthFailMaterial);let s=this.updatersWithAttributes.values,a=s.length,c=this.waitingOnCreate;for(r=0;r<a;r++){let d=s[r],u=this.geometry.get(d.id),h=this.attributes.get(u.id.id);if(l(h)||(h=i.getGeometryInstanceAttributes(u.id),this.attributes.set(u.id.id,h)),!d.fillMaterialProperty.isConstant||c){let C=d.fillMaterialProperty.color,T=K.getValueOrDefault(C,e,U.WHITE,z0e);U.equals(h._lastColor,T)||(h._lastColor=U.clone(T,h._lastColor),h.color=$t.toValue(T,h.color),(this.translucent&&h.color[3]===255||!this.translucent&&h.color[3]!==255)&&(this.itemsToRemove[n++]=d))}if(l(this.depthFailAppearanceType)&&d.depthFailMaterialProperty instanceof Kt&&(!d.depthFailMaterialProperty.isConstant||c)){let C=d.depthFailMaterialProperty.color,T=K.getValueOrDefault(C,e,U.WHITE,z0e);U.equals(h._lastDepthFailColor,T)||(h._lastDepthFailColor=U.clone(T,h._lastDepthFailColor),h.depthFailColor=$t.toValue(T,h.depthFailColor))}let p=d.entity.isShowing&&(d.hasConstantFill||d.isFilled(e)),A=h.show[0]===1;p!==A&&(h.show=Rn.toValue(p,h.show));let f=d.distanceDisplayConditionProperty;if(!K.isConstant(f)){let C=K.getValueOrDefault(f,e,Slt,Elt);Dt.equals(C,h._lastDistanceDisplayCondition)||(h._lastDistanceDisplayCondition=Dt.clone(C,h._lastDistanceDisplayCondition),h.distanceDisplayCondition=ei.toValue(C,h.distanceDisplayCondition))}let b=d.terrainOffsetProperty;if(!K.isConstant(b)){let C=K.getValueOrDefault(b,e,_lt,Ilt);m.equals(C,h._lastOffset)||(h._lastOffset=m.clone(C,h._lastOffset),h.offset=Ao.toValue(C,h.offset))}}this.updateShows(i),this.waitingOnCreate=!1}else l(i)&&!i.ready&&(t=!1);return this.itemsToRemove.length=n,t};Cf.prototype.updateShows=function(e){let t=this.showsUpdated.values,n=t.length;for(let i=0;i<n;i++){let o=t[i],r=this.geometry.get(o.id),s=this.attributes.get(r.id.id);l(s)||(s=e.getGeometryInstanceAttributes(r.id),this.attributes.set(r.id.id,s));let a=o.entity.isShowing,c=s.show[0]===1;a!==c&&(s.show=Rn.toValue(a,s.show),r.attributes.show.value[0]=s.show[0])}this.showsUpdated.removeAll()};Cf.prototype.contains=function(e){return this.updaters.contains(e.id)};Cf.prototype.getBoundingSphere=function(e,t){let n=this.primitive;if(!n.ready)return Tt.PENDING;let i=n.getGeometryInstanceAttributes(e.entity);return!l(i)||!l(i.boundingSphere)||l(i.show)&&i.show[0]===0?Tt.FAILED:(i.boundingSphere.clone(t),Tt.DONE)};Cf.prototype.destroy=function(){let e=this.primitive,t=this.primitives;l(e)&&t.remove(e);let n=this.oldPrimitive;l(n)&&t.remove(n),l(this.removeMaterialSubscription)&&this.removeMaterialSubscription()};function JI(e,t,n,i,o){this._solidItems=[],this._translucentItems=[],this._primitives=e,this._appearanceType=t,this._depthFailAppearanceType=n,this._closed=i,this._shadows=o}JI.prototype.add=function(e,t){let n,i,o=t.createFillGeometryInstance(e);o.attributes.color.value[3]===255?(n=this._solidItems,i=!1):(n=this._translucentItems,i=!0);let r=n.length;for(let a=0;a<r;a++){let c=n[a];if(c.isMaterial(t)){c.add(t,o);return}}let s=new Cf(this._primitives,i,this._appearanceType,this._depthFailAppearanceType,t.depthFailMaterialProperty,this._closed,this._shadows);s.add(t,o),n.push(s)};function H0e(e,t){let n=e.length;for(let i=n-1;i>=0;i--){let o=e[i];if(o.remove(t))return o.updaters.length===0&&(e.splice(i,1),o.destroy()),!0}return!1}JI.prototype.remove=function(e){H0e(this._solidItems,e)||H0e(this._translucentItems,e)};function J0e(e,t,n){let i=!1,o=t.length;for(let r=0;r<o;++r){let s=t[r],a=s.itemsToRemove,c=a.length;if(c>0)for(r=0;r<c;r++){let d=a[r];s.remove(d),e.add(n,d),i=!0}}return i}function d5(e,t,n,i){let o=t.length,r;for(r=o-1;r>=0;r--){let s=t[r];if(s.invalidated){t.splice(r,1);let a=s.updaters.values,c=a.length;for(let d=0;d<c;d++)e.add(n,a[d]);s.destroy()}}for(o=t.length,r=0;r<o;++r)i=t[r].update(n)&&i;return i}JI.prototype.update=function(e){let t=d5(this,this._solidItems,e,!0);t=d5(this,this._translucentItems,e,t)&&t;let n=J0e(this,this._solidItems,e),i=J0e(this,this._translucentItems,e);return(n||i)&&(t=d5(this,this._solidItems,e,t)&&t,t=d5(this,this._translucentItems,e,t)&&t),t};function K0e(e,t,n){let i=e.length;for(let o=0;o<i;o++){let r=e[o];if(r.contains(t))return r.getBoundingSphere(t,n)}return Tt.FAILED}JI.prototype.getBoundingSphere=function(e,t){let n=K0e(this._solidItems,e,t);return n===Tt.FAILED?K0e(this._translucentItems,e,t):n};function j0e(e){let t=e.length;for(let n=0;n<t;n++)e[n].destroy();e.length=0}JI.prototype.removeAllPrimitives=function(){j0e(this._solidItems),j0e(this._translucentItems)};var Jm=JI;var xGi=y(x(),1);var Zlt=new Dt,Rlt=new Dt,Vlt=m.ZERO,Glt=new m;function Tf(e,t,n,i,o,r,s){this.primitives=e,this.appearanceType=t,this.materialProperty=n,this.depthFailAppearanceType=i,this.depthFailMaterialProperty=o,this.closed=r,this.shadows=s,this.updaters=new Xt,this.createPrimitive=!0,this.primitive=void 0,this.oldPrimitive=void 0,this.geometry=new Xt,this.material=void 0,this.depthFailMaterial=void 0,this.updatersWithAttributes=new Xt,this.attributes=new Xt,this.invalidated=!1,this.removeMaterialSubscription=n.definitionChanged.addEventListener(Tf.prototype.onMaterialChanged,this),this.subscriptions=new Xt,this.showsUpdated=new Xt}Tf.prototype.onMaterialChanged=function(){this.invalidated=!0};Tf.prototype.isMaterial=function(e){let t=this.materialProperty,n=e.fillMaterialProperty,i=this.depthFailMaterialProperty,o=e.depthFailMaterialProperty;if(n===t&&o===i)return!0;let r=l(t)&&t.equals(n);return r=(!l(i)&&!l(o)||l(i)&&i.equals(o))&&r,r};Tf.prototype.add=function(e,t){let n=t.id;if(this.updaters.set(n,t),this.geometry.set(n,t.createFillGeometryInstance(e)),!t.hasConstantFill||!t.fillMaterialProperty.isConstant||!K.isConstant(t.distanceDisplayConditionProperty)||!K.isConstant(t.terrainOffsetProperty))this.updatersWithAttributes.set(n,t);else{let i=this;this.subscriptions.set(n,t.entity.definitionChanged.addEventListener(function(o,r,s,a){r==="isShowing"&&i.showsUpdated.set(t.id,t)}))}this.createPrimitive=!0};Tf.prototype.remove=function(e){let t=e.id;if(this.createPrimitive=this.geometry.remove(t)||this.createPrimitive,this.updaters.remove(t)){this.updatersWithAttributes.remove(t);let n=this.subscriptions.get(t);return l(n)&&(n(),this.subscriptions.remove(t),this.showsUpdated.remove(t)),!0}return!1};var Llt=new U;Tf.prototype.update=function(e){let t=!0,n=this.primitive,i=this.primitives,o=this.geometry.values,r;if(this.createPrimitive){if(o.length>0){l(n)&&(l(this.oldPrimitive)?i.remove(n):this.oldPrimitive=n),this.material=Ir.getValue(e,this.materialProperty,this.material);let a;if(l(this.depthFailMaterialProperty)){this.depthFailMaterial=Ir.getValue(e,this.depthFailMaterialProperty,this.depthFailMaterial);let d=this.depthFailAppearanceType;a=new d({material:this.depthFailMaterial,translucent:this.depthFailMaterial.isTranslucent(),closed:this.closed})}let c=this.appearanceType;n=new Nn({show:!1,asynchronous:!0,geometryInstances:o.slice(),appearance:new c({material:this.material,translucent:this.material.isTranslucent(),closed:this.closed}),depthFailAppearance:a,shadows:this.shadows}),i.add(n),t=!1}else{l(n)&&(i.remove(n),n=void 0);let a=this.oldPrimitive;l(a)&&(i.remove(a),this.oldPrimitive=void 0)}this.attributes.removeAll(),this.primitive=n,this.createPrimitive=!1}else if(l(n)&&n.ready){n.show=!0,l(this.oldPrimitive)&&(i.remove(this.oldPrimitive),this.oldPrimitive=void 0),this.material=Ir.getValue(e,this.materialProperty,this.material),this.primitive.appearance.material=this.material,l(this.depthFailAppearanceType)&&!(this.depthFailMaterialProperty instanceof Kt)&&(this.depthFailMaterial=Ir.getValue(e,this.depthFailMaterialProperty,this.depthFailMaterial),this.primitive.depthFailAppearance.material=this.depthFailMaterial);let s=this.updatersWithAttributes.values,a=s.length;for(r=0;r<a;r++){let c=s[r],d=c.entity,u=this.geometry.get(c.id),h=this.attributes.get(u.id.id);if(l(h)||(h=n.getGeometryInstanceAttributes(u.id),this.attributes.set(u.id.id,h)),l(this.depthFailAppearanceType)&&this.depthFailMaterialProperty instanceof Kt&&!c.depthFailMaterialProperty.isConstant){let C=c.depthFailMaterialProperty.color,T=K.getValueOrDefault(C,e,U.WHITE,Llt);U.equals(h._lastDepthFailColor,T)||(h._lastDepthFailColor=U.clone(T,h._lastDepthFailColor),h.depthFailColor=$t.toValue(T,h.depthFailColor))}let p=d.isShowing&&(c.hasConstantFill||c.isFilled(e)),A=h.show[0]===1;p!==A&&(h.show=Rn.toValue(p,h.show));let f=c.distanceDisplayConditionProperty;if(!K.isConstant(f)){let C=K.getValueOrDefault(f,e,Rlt,Zlt);Dt.equals(C,h._lastDistanceDisplayCondition)||(h._lastDistanceDisplayCondition=Dt.clone(C,h._lastDistanceDisplayCondition),h.distanceDisplayCondition=ei.toValue(C,h.distanceDisplayCondition))}let b=c.terrainOffsetProperty;if(!K.isConstant(b)){let C=K.getValueOrDefault(b,e,Vlt,Glt);m.equals(C,h._lastOffset)||(h._lastOffset=m.clone(C,h._lastOffset),h.offset=Ao.toValue(C,h.offset))}}this.updateShows(n)}else l(n)&&!n.ready&&(t=!1);return t};Tf.prototype.updateShows=function(e){let t=this.showsUpdated.values,n=t.length;for(let i=0;i<n;i++){let o=t[i],r=o.entity,s=this.geometry.get(o.id),a=this.attributes.get(s.id.id);l(a)||(a=e.getGeometryInstanceAttributes(s.id),this.attributes.set(s.id.id,a));let c=r.isShowing,d=a.show[0]===1;c!==d&&(a.show=Rn.toValue(c,a.show),s.attributes.show.value[0]=a.show[0])}this.showsUpdated.removeAll()};Tf.prototype.contains=function(e){return this.updaters.contains(e.id)};Tf.prototype.getBoundingSphere=function(e,t){let n=this.primitive;if(!n.ready)return Tt.PENDING;let i=n.getGeometryInstanceAttributes(e.entity);return!l(i)||!l(i.boundingSphere)||l(i.show)&&i.show[0]===0?Tt.FAILED:(i.boundingSphere.clone(t),Tt.DONE)};Tf.prototype.destroy=function(){let e=this.primitive,t=this.primitives;l(e)&&t.remove(e);let n=this.oldPrimitive;l(n)&&t.remove(n),this.removeMaterialSubscription()};function KI(e,t,n,i,o){this._items=[],this._primitives=e,this._appearanceType=t,this._depthFailAppearanceType=n,this._closed=i,this._shadows=o}KI.prototype.add=function(e,t){let n=this._items,i=n.length;for(let r=0;r<i;r++){let s=n[r];if(s.isMaterial(t)){s.add(e,t);return}}let o=new Tf(this._primitives,this._appearanceType,t.fillMaterialProperty,this._depthFailAppearanceType,t.depthFailMaterialProperty,this._closed,this._shadows);o.add(e,t),n.push(o)};KI.prototype.remove=function(e){let t=this._items,n=t.length;for(let i=n-1;i>=0;i--){let o=t[i];if(o.remove(e)){o.updaters.length===0&&(t.splice(i,1),o.destroy());break}}};KI.prototype.update=function(e){let t,n=this._items,i=n.length;for(t=i-1;t>=0;t--){let r=n[t];if(r.invalidated){n.splice(t,1);let s=r.updaters.values,a=s.length;for(let c=0;c<a;c++)this.add(e,s[c]);r.destroy()}}let o=!0;for(t=0;t<n.length;t++)o=n[t].update(e)&&o;return o};KI.prototype.getBoundingSphere=function(e,t){let n=this._items,i=n.length;for(let o=0;o<i;o++){let r=n[o];if(r.contains(e))return r.getBoundingSphere(e,t)}return Tt.FAILED};KI.prototype.removeAllPrimitives=function(){let e=this._items,t=e.length;for(let n=0;n<t;n++)e[n].destroy();this._items.length=0};var Km=KI;var vGi=y(x(),1);var RGi=y(x(),1);var _Gi=y(x(),1);var TGi=y(x(),1);function u5(e,t,n=0,i=e.length-1,o=Wlt){for(;i>n;){if(i-n>600){let c=i-n+1,d=t-n+1,u=Math.log(c),h=.5*Math.exp(2*u/3),p=.5*Math.sqrt(u*h*(c-h)/c)*(d-c/2<0?-1:1),A=Math.max(n,Math.floor(t-d*h/c+p)),f=Math.min(i,Math.floor(t+(c-d)*h/c+p));u5(e,t,A,f,o)}let r=e[t],s=n,a=i;for(cP(e,n,t),o(e[i],r)>0&&cP(e,n,i);s<a;){for(cP(e,s,a),s++,a--;o(e[s],r)<0;)s++;for(;o(e[a],r)>0;)a--}o(e[n],r)===0?cP(e,n,a):(a++,cP(e,a,i)),a<=t&&(n=a+1),t<=a&&(i=a-1)}}function cP(e,t,n){let i=e[t];e[t]=e[n],e[n]=i}function Wlt(e,t){return e<t?-1:e>t?1:0}var uP=class{constructor(t=9){this._maxEntries=Math.max(4,t),this._minEntries=Math.max(2,Math.ceil(this._maxEntries*.4)),this.clear()}all(){return this._all(this.data,[])}search(t){let n=this.data,i=[];if(!h5(t,n))return i;let o=this.toBBox,r=[];for(;n;){for(let s=0;s<n.children.length;s++){let a=n.children[s],c=n.leaf?o(a):a;h5(t,c)&&(n.leaf?i.push(a):_7(t,c)?this._all(a,i):r.push(a))}n=r.pop()}return i}collides(t){let n=this.data;if(!h5(t,n))return!1;let i=[];for(;n;){for(let o=0;o<n.children.length;o++){let r=n.children[o],s=n.leaf?this.toBBox(r):r;if(h5(t,s)){if(n.leaf||_7(t,s))return!0;i.push(r)}}n=i.pop()}return!1}load(t){if(!(t&&t.length))return this;if(t.length<this._minEntries){for(let i=0;i<t.length;i++)this.insert(t[i]);return this}let n=this._build(t.slice(),0,t.length-1,0);if(!this.data.children.length)this.data=n;else if(this.data.height===n.height)this._splitRoot(this.data,n);else{if(this.data.height<n.height){let i=this.data;this.data=n,n=i}this._insert(n,this.data.height-n.height-1,!0)}return this}insert(t){return t&&this._insert(t,this.data.height-1),this}clear(){return this.data=qI([]),this}remove(t,n){if(!t)return this;let i=this.data,o=this.toBBox(t),r=[],s=[],a,c,d;for(;i||r.length;){if(i||(i=r.pop(),c=r[r.length-1],a=s.pop(),d=!0),i.leaf){let u=Flt(t,i.children,n);if(u!==-1)return i.children.splice(u,1),r.push(i),this._condense(r),this}!d&&!i.leaf&&_7(i,o)?(r.push(i),s.push(a),a=0,c=i,i=i.children[0]):c?(a++,i=c.children[a],d=!1):i=null}return this}toBBox(t){return t}compareMinX(t,n){return t.minX-n.minX}compareMinY(t,n){return t.minY-n.minY}toJSON(){return this.data}fromJSON(t){return this.data=t,this}_all(t,n){let i=[];for(;t;)t.leaf?n.push(...t.children):i.push(...t.children),t=i.pop();return n}_build(t,n,i,o){let r=i-n+1,s=this._maxEntries,a;if(r<=s)return a=qI(t.slice(n,i+1)),jI(a,this.toBBox),a;o||(o=Math.ceil(Math.log(r)/Math.log(s)),s=Math.ceil(r/Math.pow(s,o-1))),a=qI([]),a.leaf=!1,a.height=o;let c=Math.ceil(r/s),d=c*Math.ceil(Math.sqrt(s));q0e(t,n,i,d,this.compareMinX);for(let u=n;u<=i;u+=d){let h=Math.min(u+d-1,i);q0e(t,u,h,c,this.compareMinY);for(let p=u;p<=h;p+=c){let A=Math.min(p+c-1,h);a.children.push(this._build(t,p,A,o-1))}}return jI(a,this.toBBox),a}_chooseSubtree(t,n,i,o){for(;o.push(n),!(n.leaf||o.length-1===i);){let r=1/0,s=1/0,a;for(let c=0;c<n.children.length;c++){let d=n.children[c],u=S7(d),h=Nlt(t,d)-u;h<s?(s=h,r=u<r?u:r,a=d):h===s&&u<r&&(r=u,a=d)}n=a||n.children[0]}return n}_insert(t,n,i){let o=i?t:this.toBBox(t),r=[],s=this._chooseSubtree(o,this.data,n,r);for(s.children.push(t),dP(s,o);n>=0&&r[n].children.length>this._maxEntries;)this._split(r,n),n--;this._adjustParentBBoxes(o,r,n)}_split(t,n){let i=t[n],o=i.children.length,r=this._minEntries;this._chooseSplitAxis(i,r,o);let s=this._chooseSplitIndex(i,r,o),a=qI(i.children.splice(s,i.children.length-s));a.height=i.height,a.leaf=i.leaf,jI(i,this.toBBox),jI(a,this.toBBox),n?t[n-1].children.push(a):this._splitRoot(i,a)}_splitRoot(t,n){this.data=qI([t,n]),this.data.height=t.height+1,this.data.leaf=!1,jI(this.data,this.toBBox)}_chooseSplitIndex(t,n,i){let o,r=1/0,s=1/0;for(let a=n;a<=i-n;a++){let c=lP(t,0,a,this.toBBox),d=lP(t,a,i,this.toBBox),u=Plt(c,d),h=S7(c)+S7(d);u<r?(r=u,o=a,s=h<s?h:s):u===r&&h<s&&(s=h,o=a)}return o||i-n}_chooseSplitAxis(t,n,i){let o=t.leaf?this.compareMinX:Blt,r=t.leaf?this.compareMinY:wlt,s=this._allDistMargin(t,n,i,o),a=this._allDistMargin(t,n,i,r);s<a&&t.children.sort(o)}_allDistMargin(t,n,i,o){t.children.sort(o);let r=this.toBBox,s=lP(t,0,n,r),a=lP(t,i-n,i,r),c=m5(s)+m5(a);for(let d=n;d<i-n;d++){let u=t.children[d];dP(s,t.leaf?r(u):u),c+=m5(s)}for(let d=i-n-1;d>=n;d--){let u=t.children[d];dP(a,t.leaf?r(u):u),c+=m5(a)}return c}_adjustParentBBoxes(t,n,i){for(let o=i;o>=0;o--)dP(n[o],t)}_condense(t){for(let n=t.length-1,i;n>=0;n--)t[n].children.length===0?n>0?(i=t[n-1].children,i.splice(i.indexOf(t[n]),1)):this.clear():jI(t[n],this.toBBox)}};function Flt(e,t,n){if(!n)return t.indexOf(e);for(let i=0;i<t.length;i++)if(n(e,t[i]))return i;return-1}function jI(e,t){lP(e,0,e.children.length,t,e)}function lP(e,t,n,i,o){o||(o=qI(null)),o.minX=1/0,o.minY=1/0,o.maxX=-1/0,o.maxY=-1/0;for(let r=t;r<n;r++){let s=e.children[r];dP(o,e.leaf?i(s):s)}return o}function dP(e,t){return e.minX=Math.min(e.minX,t.minX),e.minY=Math.min(e.minY,t.minY),e.maxX=Math.max(e.maxX,t.maxX),e.maxY=Math.max(e.maxY,t.maxY),e}function Blt(e,t){return e.minX-t.minX}function wlt(e,t){return e.minY-t.minY}function S7(e){return(e.maxX-e.minX)*(e.maxY-e.minY)}function m5(e){return e.maxX-e.minX+(e.maxY-e.minY)}function Nlt(e,t){return(Math.max(t.maxX,e.maxX)-Math.min(t.minX,e.minX))*(Math.max(t.maxY,e.maxY)-Math.min(t.minY,e.minY))}function Plt(e,t){let n=Math.max(e.minX,t.minX),i=Math.max(e.minY,t.minY),o=Math.min(e.maxX,t.maxX),r=Math.min(e.maxY,t.maxY);return Math.max(0,o-n)*Math.max(0,r-i)}function _7(e,t){return e.minX<=t.minX&&e.minY<=t.minY&&t.maxX<=e.maxX&&t.maxY<=e.maxY}function h5(e,t){return t.minX<=e.maxX&&t.minY<=e.maxY&&t.maxX>=e.minX&&t.maxY>=e.minY}function qI(e){return{children:e,height:1,leaf:!0,minX:1/0,minY:1/0,maxX:-1/0,maxY:-1/0}}function q0e(e,t,n,i,o){let r=[t,n];for(;r.length;){if(n=r.pop(),t=r.pop(),n-t<=i)continue;let s=t+Math.ceil((n-t)/i/2)*i;u5(e,s,t,n,o),r.push(t,s,s,n)}}function f5(){this._tree=new uP}function FT(){this.minX=0,this.minY=0,this.maxX=0,this.maxY=0,this.id=""}FT.fromRectangleAndId=function(e,t,n){return n.minX=t.west,n.minY=t.south,n.maxX=t.east,n.maxY=t.north,n.id=e,n};f5.prototype.insert=function(e,t){let n=FT.fromRectangleAndId(e,t,new FT);this._tree.insert(n)};function Xlt(e,t){return e.id===t.id}var Ylt=new FT;f5.prototype.remove=function(e,t){let n=FT.fromRectangleAndId(e,t,Ylt);this._tree.remove(n,Xlt)};var Mlt=new FT;f5.prototype.collides=function(e){let t=FT.fromRectangleAndId("",e,Mlt);return this._tree.collides(t)};var BT=f5;var vlt=new U,Ult=new Dt,Dlt=new Dt;function rb(e,t,n,i){this.primitives=e,this.zIndex=i,this.classificationType=t,this.color=n,this.createPrimitive=!1,this.waitingOnCreate=!1,this.primitive=void 0,this.oldPrimitive=void 0,this.geometry=new Xt,this.updaters=new Xt,this.updatersWithAttributes=new Xt,this.attributes=new Xt,this.subscriptions=new Xt,this.showsUpdated=new Xt,this.itemsToRemove=[],this.isDirty=!1,this.rectangleCollisionCheck=new BT}rb.prototype.overlapping=function(e){return this.rectangleCollisionCheck.collides(e)};rb.prototype.add=function(e,t){let n=e.id;if(this.createPrimitive=!0,this.geometry.set(n,t),this.updaters.set(n,e),this.rectangleCollisionCheck.insert(n,t.geometry.rectangle),!e.hasConstantFill||!e.fillMaterialProperty.isConstant||!K.isConstant(e.distanceDisplayConditionProperty))this.updatersWithAttributes.set(n,e);else{let i=this;this.subscriptions.set(n,e.entity.definitionChanged.addEventListener(function(o,r,s,a){r==="isShowing"&&i.showsUpdated.set(e.id,e)}))}};rb.prototype.remove=function(e){let t=e.id,n=this.geometry.get(t);if(this.createPrimitive=this.geometry.remove(t)||this.createPrimitive,this.updaters.remove(t)){this.rectangleCollisionCheck.remove(t,n.geometry.rectangle),this.updatersWithAttributes.remove(t);let i=this.subscriptions.get(t);return l(i)&&(i(),this.subscriptions.remove(t),this.showsUpdated.remove(t)),!0}return!1};rb.prototype.update=function(e){let t=!0,n=0,i=this.primitive,o=this.primitives,r;if(this.createPrimitive){let s=this.geometry.values;if(s.length>0)l(i)&&(l(this.oldPrimitive)?o.remove(i):this.oldPrimitive=i),i=new _l({show:!1,asynchronous:!0,geometryInstances:s.slice(),classificationType:this.classificationType}),o.add(i,this.zIndex),t=!1;else{l(i)&&(o.remove(i),i=void 0);let c=this.oldPrimitive;l(c)&&(o.remove(c),this.oldPrimitive=void 0)}this.attributes.removeAll(),this.primitive=i,this.createPrimitive=!1,this.waitingOnCreate=!0}else if(l(i)&&i.ready){i.show=!0,l(this.oldPrimitive)&&(o.remove(this.oldPrimitive),this.oldPrimitive=void 0);let s=this.updatersWithAttributes.values,a=s.length,c=this.waitingOnCreate;for(r=0;r<a;r++){let d=s[r],u=this.geometry.get(d.id),h=this.attributes.get(u.id.id);if(l(h)||(h=i.getGeometryInstanceAttributes(u.id),this.attributes.set(u.id.id,h)),!d.fillMaterialProperty.isConstant||c){let b=d.fillMaterialProperty.color,C=K.getValueOrDefault(b,e,U.WHITE,vlt);U.equals(h._lastColor,C)||(h._lastColor=U.clone(C,h._lastColor),h.color=$t.toValue(C,h.color))}let p=d.entity.isShowing&&(d.hasConstantFill||d.isFilled(e)),A=h.show[0]===1;p!==A&&(h.show=Rn.toValue(p,h.show));let f=d.distanceDisplayConditionProperty;if(!K.isConstant(f)){let b=K.getValueOrDefault(f,e,Dlt,Ult);Dt.equals(b,h._lastDistanceDisplayCondition)||(h._lastDistanceDisplayCondition=Dt.clone(b,h._lastDistanceDisplayCondition),h.distanceDisplayCondition=ei.toValue(b,h.distanceDisplayCondition))}}this.updateShows(i),this.waitingOnCreate=!1}else l(i)&&!i.ready&&(t=!1);return this.itemsToRemove.length=n,t};rb.prototype.updateShows=function(e){let t=this.showsUpdated.values,n=t.length;for(let i=0;i<n;i++){let o=t[i],r=this.geometry.get(o.id),s=this.attributes.get(r.id.id);l(s)||(s=e.getGeometryInstanceAttributes(r.id),this.attributes.set(r.id.id,s));let a=o.entity.isShowing,c=s.show[0]===1;a!==c&&(s.show=Rn.toValue(a,s.show),r.attributes.show.value[0]=s.show[0])}this.showsUpdated.removeAll()};rb.prototype.contains=function(e){return this.updaters.contains(e.id)};rb.prototype.getBoundingSphere=function(e,t){let n=this.primitive;if(!n.ready)return Tt.PENDING;let i=n.getBoundingSphere(e.entity);return l(i)?(i.clone(t),Tt.DONE):Tt.FAILED};rb.prototype.removeAllPrimitives=function(){let e=this.primitives,t=this.primitive;l(t)&&(e.remove(t),this.primitive=void 0,this.geometry.removeAll(),this.updaters.removeAll());let n=this.oldPrimitive;l(n)&&(e.remove(n),this.oldPrimitive=void 0)};function $I(e,t){this._batches=[],this._primitives=e,this._classificationType=t}$I.prototype.add=function(e,t){let n=t.createFillGeometryInstance(e),i=this._batches,o=K.getValueOrDefault(t.zIndex,0),r,s=i.length;for(let a=0;a<s;++a){let c=i[a];if(c.zIndex===o&&!c.overlapping(n.geometry.rectangle)){r=c;break}}return l(r)||(r=new rb(this._primitives,this._classificationType,n.attributes.color.value,o),i.push(r)),r.add(t,n),r};$I.prototype.remove=function(e){let t=this._batches,n=t.length;for(let i=0;i<n;++i)if(t[i].remove(e))return};$I.prototype.update=function(e){let t,n,i=!0,o=this._batches,r=o.length;for(t=0;t<r;++t)i=o[t].update(e)&&i;for(t=0;t<r;++t){let s=o[t],a=s.itemsToRemove,c=a.length;for(let d=0;d<c;d++){n=a[d],s.remove(n);let u=this.add(e,n);s.isDirty=!0,u.isDirty=!0}}for(t=r-1;t>=0;--t){let s=o[t];s.isDirty&&(i=o[t].update(e)&&i,s.isDirty=!1),s.geometry.length===0&&o.splice(t,1)}return i};$I.prototype.getBoundingSphere=function(e,t){let n=this._batches,i=n.length;for(let o=0;o<i;++o){let r=n[o];if(r.contains(e))return r.getBoundingSphere(e,t)}return Tt.FAILED};$I.prototype.removeAllPrimitives=function(){let e=this._batches,t=e.length;for(let n=0;n<t;++n)e[n].removeAllPrimitives()};var eZ=$I;var tLi=y(x(),1);var klt=new Dt,Qlt=new Dt;function Np(e,t,n,i,o,r){this.primitives=e,this.classificationType=t,this.appearanceType=n,this.materialProperty=i,this.updaters=new Xt,this.createPrimitive=!0,this.primitive=void 0,this.oldPrimitive=void 0,this.geometry=new Xt,this.material=void 0,this.updatersWithAttributes=new Xt,this.attributes=new Xt,this.subscriptions=new Xt,this.showsUpdated=new Xt,this.usingSphericalTextureCoordinates=o,this.zIndex=r,this.rectangleCollisionCheck=new BT}Np.prototype.overlapping=function(e){return this.rectangleCollisionCheck.collides(e)};Np.prototype.isMaterial=function(e){let t=this.materialProperty,n=e.fillMaterialProperty;return n===t||n instanceof Kt&&t instanceof Kt?!0:l(t)&&t.equals(n)};Np.prototype.add=function(e,t,n){let i=t.id;if(this.updaters.set(i,t),this.geometry.set(i,n),this.rectangleCollisionCheck.insert(i,n.geometry.rectangle),!t.hasConstantFill||!t.fillMaterialProperty.isConstant||!K.isConstant(t.distanceDisplayConditionProperty))this.updatersWithAttributes.set(i,t);else{let o=this;this.subscriptions.set(i,t.entity.definitionChanged.addEventListener(function(r,s,a,c){s==="isShowing"&&o.showsUpdated.set(t.id,t)}))}this.createPrimitive=!0};Np.prototype.remove=function(e){let t=e.id,n=this.geometry.get(t);if(this.createPrimitive=this.geometry.remove(t)||this.createPrimitive,this.updaters.remove(t)){this.rectangleCollisionCheck.remove(t,n.geometry.rectangle),this.updatersWithAttributes.remove(t);let i=this.subscriptions.get(t);return l(i)&&(i(),this.subscriptions.remove(t)),!0}return!1};Np.prototype.update=function(e){let t=!0,n=this.primitive,i=this.primitives,o=this.geometry.values,r;if(this.createPrimitive){if(o.length>0){l(n)&&(l(this.oldPrimitive)?i.remove(n):this.oldPrimitive=n),this.material=Ir.getValue(e,this.materialProperty,this.material);let a=this.appearanceType;n=new _l({show:!1,asynchronous:!0,geometryInstances:o.slice(),appearance:new a({material:this.material}),classificationType:this.classificationType}),i.add(n,this.zIndex),t=!1}else{l(n)&&(i.remove(n),n=void 0);let a=this.oldPrimitive;l(a)&&(i.remove(a),this.oldPrimitive=void 0)}this.attributes.removeAll(),this.primitive=n,this.createPrimitive=!1}else if(l(n)&&n.ready){n.show=!0,l(this.oldPrimitive)&&(i.remove(this.oldPrimitive),this.oldPrimitive=void 0),this.material=Ir.getValue(e,this.materialProperty,this.material),this.primitive.appearance.material=this.material;let s=this.updatersWithAttributes.values,a=s.length;for(r=0;r<a;r++){let c=s[r],d=c.entity,u=this.geometry.get(c.id),h=this.attributes.get(u.id.id);l(h)||(h=n.getGeometryInstanceAttributes(u.id),this.attributes.set(u.id.id,h));let p=d.isShowing&&(c.hasConstantFill||c.isFilled(e)),A=h.show[0]===1;p!==A&&(h.show=Rn.toValue(p,h.show));let f=c.distanceDisplayConditionProperty;if(!K.isConstant(f)){let b=K.getValueOrDefault(f,e,Qlt,klt);Dt.equals(b,h._lastDistanceDisplayCondition)||(h._lastDistanceDisplayCondition=Dt.clone(b,h._lastDistanceDisplayCondition),h.distanceDisplayCondition=ei.toValue(b,h.distanceDisplayCondition))}}this.updateShows(n)}else l(n)&&!n.ready&&(t=!1);return t};Np.prototype.updateShows=function(e){let t=this.showsUpdated.values,n=t.length;for(let i=0;i<n;i++){let o=t[i],r=o.entity,s=this.geometry.get(o.id),a=this.attributes.get(s.id.id);l(a)||(a=e.getGeometryInstanceAttributes(s.id),this.attributes.set(s.id.id,a));let c=r.isShowing,d=a.show[0]===1;c!==d&&(a.show=Rn.toValue(c,a.show),s.attributes.show.value[0]=a.show[0])}this.showsUpdated.removeAll()};Np.prototype.contains=function(e){return this.updaters.contains(e.id)};Np.prototype.getBoundingSphere=function(e,t){let n=this.primitive;if(!n.ready)return Tt.PENDING;let i=n.getGeometryInstanceAttributes(e.entity);return!l(i)||!l(i.boundingSphere)||l(i.show)&&i.show[0]===0?Tt.FAILED:(i.boundingSphere.clone(t),Tt.DONE)};Np.prototype.destroy=function(){let e=this.primitive,t=this.primitives;l(e)&&t.remove(e);let n=this.oldPrimitive;l(n)&&t.remove(n)};function tZ(e,t,n){this._items=[],this._primitives=e,this._classificationType=t,this._appearanceType=n}tZ.prototype.add=function(e,t){let n=this._items,i=n.length,o=t.createFillGeometryInstance(e),r=su.shouldUseSphericalCoordinates(o.geometry.rectangle),s=K.getValueOrDefault(t.zIndex,0);for(let c=0;c<i;++c){let d=n[c];if(d.isMaterial(t)&&d.usingSphericalTextureCoordinates===r&&d.zIndex===s&&!d.overlapping(o.geometry.rectangle)){d.add(e,t,o);return}}let a=new Np(this._primitives,this._classificationType,this._appearanceType,t.fillMaterialProperty,r,s);a.add(e,t,o),n.push(a)};tZ.prototype.remove=function(e){let t=this._items,n=t.length;for(let i=n-1;i>=0&&!t[i].remove(e);i--);};tZ.prototype.update=function(e){let t,n=this._items,i=n.length;for(t=i-1;t>=0;t--){let r=n[t];r.updaters.length===0&&(n.splice(t,1),r.destroy())}let o=!0;for(t=0;t<n.length;t++)o=n[t].update(e)&&o;return o};tZ.prototype.getBoundingSphere=function(e,t){let n=this._items,i=n.length;for(let o=0;o<i;o++){let r=n[o];if(r.contains(e))return r.getBoundingSphere(e,t)}return Tt.FAILED};tZ.prototype.removeAllPrimitives=function(){let e=this._items,t=e.length;for(let n=0;n<t;n++)e[n].destroy();this._items.length=0};var mP=tZ;var ALi=y(x(),1);var Olt=new U,zlt=new Dt,Hlt=new Dt,Jlt=m.ZERO,Klt=new m;function sb(e,t,n,i){this.translucent=t,this.width=n,this.shadows=i,this.primitives=e,this.createPrimitive=!1,this.waitingOnCreate=!1,this.primitive=void 0,this.oldPrimitive=void 0,this.geometry=new Xt,this.updaters=new Xt,this.updatersWithAttributes=new Xt,this.attributes=new Xt,this.itemsToRemove=[],this.subscriptions=new Xt,this.showsUpdated=new Xt}sb.prototype.add=function(e,t){let n=e.id;if(this.createPrimitive=!0,this.geometry.set(n,t),this.updaters.set(n,e),!e.hasConstantOutline||!e.outlineColorProperty.isConstant||!K.isConstant(e.distanceDisplayConditionProperty)||!K.isConstant(e.terrainOffsetProperty))this.updatersWithAttributes.set(n,e);else{let i=this;this.subscriptions.set(n,e.entity.definitionChanged.addEventListener(function(o,r,s,a){r==="isShowing"&&i.showsUpdated.set(e.id,e)}))}};sb.prototype.remove=function(e){let t=e.id;if(this.createPrimitive=this.geometry.remove(t)||this.createPrimitive,this.updaters.remove(t)){this.updatersWithAttributes.remove(t);let n=this.subscriptions.get(t);return l(n)&&(n(),this.subscriptions.remove(t),this.showsUpdated.remove(t)),!0}return!1};sb.prototype.update=function(e){let t=!0,n=0,i=this.primitive,o=this.primitives,r;if(this.createPrimitive){let s=this.geometry.values;if(s.length>0)l(i)&&(l(this.oldPrimitive)?o.remove(i):this.oldPrimitive=i),i=new Nn({show:!1,asynchronous:!0,geometryInstances:s.slice(),appearance:new yn({flat:!0,translucent:this.translucent,renderState:{lineWidth:this.width}}),shadows:this.shadows}),o.add(i),t=!1;else{l(i)&&(o.remove(i),i=void 0);let c=this.oldPrimitive;l(c)&&(o.remove(c),this.oldPrimitive=void 0)}this.attributes.removeAll(),this.primitive=i,this.createPrimitive=!1,this.waitingOnCreate=!0}else if(l(i)&&i.ready){i.show=!0,l(this.oldPrimitive)&&(o.remove(this.oldPrimitive),this.oldPrimitive=void 0);let s=this.updatersWithAttributes.values,a=s.length,c=this.waitingOnCreate;for(r=0;r<a;r++){let d=s[r],u=this.geometry.get(d.id),h=this.attributes.get(u.id.id);if(l(h)||(h=i.getGeometryInstanceAttributes(u.id),this.attributes.set(u.id.id,h)),!d.outlineColorProperty.isConstant||c){let C=d.outlineColorProperty,T=K.getValueOrDefault(C,e,U.WHITE,Olt);U.equals(h._lastColor,T)||(h._lastColor=U.clone(T,h._lastColor),h.color=$t.toValue(T,h.color),(this.translucent&&h.color[3]===255||!this.translucent&&h.color[3]!==255)&&(this.itemsToRemove[n++]=d))}let p=d.entity.isShowing&&(d.hasConstantOutline||d.isOutlineVisible(e)),A=h.show[0]===1;p!==A&&(h.show=Rn.toValue(p,h.show));let f=d.distanceDisplayConditionProperty;if(!K.isConstant(f)){let C=K.getValueOrDefault(f,e,Hlt,zlt);Dt.equals(C,h._lastDistanceDisplayCondition)||(h._lastDistanceDisplayCondition=Dt.clone(C,h._lastDistanceDisplayCondition),h.distanceDisplayCondition=ei.toValue(C,h.distanceDisplayCondition))}let b=d.terrainOffsetProperty;if(!K.isConstant(b)){let C=K.getValueOrDefault(b,e,Jlt,Klt);m.equals(C,h._lastOffset)||(h._lastOffset=m.clone(C,h._lastOffset),h.offset=Ao.toValue(C,h.offset))}}this.updateShows(i),this.waitingOnCreate=!1}else l(i)&&!i.ready&&(t=!1);return this.itemsToRemove.length=n,t};sb.prototype.updateShows=function(e){let t=this.showsUpdated.values,n=t.length;for(let i=0;i<n;i++){let o=t[i],r=this.geometry.get(o.id),s=this.attributes.get(r.id.id);l(s)||(s=e.getGeometryInstanceAttributes(r.id),this.attributes.set(r.id.id,s));let a=o.entity.isShowing,c=s.show[0]===1;a!==c&&(s.show=Rn.toValue(a,s.show),r.attributes.show.value[0]=s.show[0])}this.showsUpdated.removeAll()};sb.prototype.contains=function(e){return this.updaters.contains(e.id)};sb.prototype.getBoundingSphere=function(e,t){let n=this.primitive;if(!n.ready)return Tt.PENDING;let i=n.getGeometryInstanceAttributes(e.entity);return!l(i)||!l(i.boundingSphere)||l(i.show)&&i.show[0]===0?Tt.FAILED:(i.boundingSphere.clone(t),Tt.DONE)};sb.prototype.removeAllPrimitives=function(){let e=this.primitives,t=this.primitive;l(t)&&(e.remove(t),this.primitive=void 0,this.geometry.removeAll(),this.updaters.removeAll());let n=this.oldPrimitive;l(n)&&(e.remove(n),this.oldPrimitive=void 0)};function nZ(e,t,n){this._primitives=e,this._scene=t,this._shadows=n,this._solidBatches=new Xt,this._translucentBatches=new Xt}nZ.prototype.add=function(e,t){let n=t.createOutlineGeometryInstance(e),i=this._scene.clampLineWidth(t.outlineWidth),o,r;n.attributes.color.value[3]===255?(o=this._solidBatches,r=o.get(i),l(r)||(r=new sb(this._primitives,!1,i,this._shadows),o.set(i,r)),r.add(t,n)):(o=this._translucentBatches,r=o.get(i),l(r)||(r=new sb(this._primitives,!0,i,this._shadows),o.set(i,r)),r.add(t,n))};nZ.prototype.remove=function(e){let t,n=this._solidBatches.values,i=n.length;for(t=0;t<i;t++)if(n[t].remove(e))return;let o=this._translucentBatches.values,r=o.length;for(t=0;t<r;t++)if(o[t].remove(e))return};nZ.prototype.update=function(e){let t,n,i,o,r=this._solidBatches.values,s=r.length,a=this._translucentBatches.values,c=a.length,d,u=!0,h=!1;do{for(h=!1,n=0;n<s;n++){o=r[n],u=o.update(e),d=o.itemsToRemove;let p=d.length;if(p>0)for(h=!0,t=0;t<p;t++)i=d[t],o.remove(i),this.add(e,i)}for(n=0;n<c;n++){o=a[n],u=o.update(e),d=o.itemsToRemove;let p=d.length;if(p>0)for(h=!0,t=0;t<p;t++)i=d[t],o.remove(i),this.add(e,i)}}while(h);return u};nZ.prototype.getBoundingSphere=function(e,t){let n,i=this._solidBatches.values,o=i.length;for(n=0;n<o;n++){let a=i[n];if(a.contains(e))return a.getBoundingSphere(e,t)}let r=this._translucentBatches.values,s=r.length;for(n=0;n<s;n++){let a=r[n];if(a.contains(e))return a.getBoundingSphere(e,t)}return Tt.FAILED};nZ.prototype.removeAllPrimitives=function(){let e,t=this._solidBatches.values,n=t.length;for(e=0;e<n;e++)t[e].removeAllPrimitives();let i=this._translucentBatches.values,o=i.length;for(e=0;e<o;e++)i[e].removeAllPrimitives()};var iZ=nZ;var jlt=[];function Bd(e,t,n,i){n=n??e.primitives,i=i??e.groundPrimitives,this._scene=e,this._primitives=n,this._groundPrimitives=i,this._entityCollection=void 0,this._addedObjects=new Xt,this._removedObjects=new Xt,this._changedObjects=new Xt;let o=Vn.NUMBER_OF_SHADOW_MODES;this._outlineBatches=new Array(o*2),this._closedColorBatches=new Array(o*2),this._closedMaterialBatches=new Array(o*2),this._openColorBatches=new Array(o*2),this._openMaterialBatches=new Array(o*2);let r=jo.supportsMaterialsforEntitiesOnTerrain(e);this._supportsMaterialsforEntitiesOnTerrain=r;let s;for(s=0;s<o;++s)this._outlineBatches[s]=new iZ(n,e,s,!1),this._outlineBatches[o+s]=new iZ(n,e,s,!0),this._closedColorBatches[s]=new Jm(n,yn,void 0,!0,s,!0),this._closedColorBatches[o+s]=new Jm(n,yn,void 0,!0,s,!1),this._closedMaterialBatches[s]=new Km(n,go,void 0,!0,s,!0),this._closedMaterialBatches[o+s]=new Km(n,go,void 0,!0,s,!1),this._openColorBatches[s]=new Jm(n,yn,void 0,!1,s,!0),this._openColorBatches[o+s]=new Jm(n,yn,void 0,!1,s,!1),this._openMaterialBatches[s]=new Km(n,go,void 0,!1,s,!0),this._openMaterialBatches[o+s]=new Km(n,go,void 0,!1,s,!1);let a=ti.NUMBER_OF_CLASSIFICATION_TYPES,c=new Array(a),d=[];if(r)for(s=0;s<a;++s)d.push(new mP(i,s,go)),c[s]=new eZ(i,s);else for(s=0;s<a;++s)c[s]=new eZ(i,s);this._groundColorBatches=c,this._groundMaterialBatches=d,this._dynamicBatch=new CT(n,i),this._batches=this._outlineBatches.concat(this._closedColorBatches,this._closedMaterialBatches,this._openColorBatches,this._openMaterialBatches,this._groundColorBatches,this._groundMaterialBatches,this._dynamicBatch),this._subscriptions=new Xt,this._updaterSets=new Xt,this._entityCollection=t,t.collectionChanged.addEventListener(Bd.prototype._onCollectionChanged,this),this._onCollectionChanged(t,t.values,jlt)}Bd.registerUpdater=function(e){WT.registerUpdater(e)};Bd.unregisterUpdater=function(e){WT.unregisterUpdater(e)};Bd.prototype.update=function(e){let t=this._addedObjects,n=t.values,i=this._removedObjects,o=i.values,r=this._changedObjects,s=r.values,a,c,d,u,h=this;for(a=s.length-1;a>-1;a--)c=s[a],d=c.id,u=this._updaterSets.get(d),u.entity===c?u.forEach(function(b){h._removeUpdater(b),h._insertUpdaterIntoBatch(e,b)}):(o.push(c),n.push(c));for(a=o.length-1;a>-1;a--)c=o[a],d=c.id,u=this._updaterSets.get(d),u.forEach(this._removeUpdater.bind(this)),u.destroy(),this._updaterSets.remove(d),this._subscriptions.get(d)(),this._subscriptions.remove(d);for(a=n.length-1;a>-1;a--)c=n[a],d=c.id,u=new WT(c,this._scene),this._updaterSets.set(d,u),u.forEach(function(b){h._insertUpdaterIntoBatch(e,b)}),this._subscriptions.set(d,u.geometryChanged.addEventListener(Bd._onGeometryChanged,this));t.removeAll(),i.removeAll(),r.removeAll();let p=!0,A=this._batches,f=A.length;for(a=0;a<f;a++)p=A[a].update(e)&&p;return p};var qlt=[],$lt=new ue;Bd.prototype.getBoundingSphere=function(e,t){let n=qlt,i=$lt,o=0,r=Tt.DONE,s=this._batches,a=s.length,c=e.id;if(!this._updaterSets.get(c))return Tt.FAILED;let d=this._updaterSets.get(c).updaters;for(let u=0;u<d.length;u++){let h=d[u];for(let p=0;p<a;p++){if(r=s[p].getBoundingSphere(h,i),r===Tt.PENDING)return Tt.PENDING;r===Tt.DONE&&(n[o]=ue.clone(i,n[o]),o++)}}return o===0?Tt.FAILED:(n.length=o,ue.fromBoundingSpheres(n,t),Tt.DONE)};Bd.prototype.isDestroyed=function(){return!1};Bd.prototype.destroy=function(){this._entityCollection.collectionChanged.removeEventListener(Bd.prototype._onCollectionChanged,this),this._addedObjects.removeAll(),this._removedObjects.removeAll();let e,t=this._batches,n=t.length;for(e=0;e<n;e++)t[e].removeAllPrimitives();let i=this._subscriptions.values;for(n=i.length,e=0;e<n;e++)i[e]();this._subscriptions.removeAll();let o=this._updaterSets.values;for(n=o.length,e=0;e<n;e++)o[e].destroy();return this._updaterSets.removeAll(),he(this)};Bd.prototype._removeUpdater=function(e){let t=this._batches,n=t.length;for(let i=0;i<n;i++)t[i].remove(e)};Bd.prototype._insertUpdaterIntoBatch=function(e,t){if(t.isDynamic){this._dynamicBatch.add(e,t);return}let n;(t.outlineEnabled||t.fillEnabled)&&(n=t.shadowsProperty.getValue(e));let i=Vn.NUMBER_OF_SHADOW_MODES;if(t.outlineEnabled&&(l(t.terrainOffsetProperty)?this._outlineBatches[i+n].add(e,t):this._outlineBatches[n].add(e,t)),t.fillEnabled)if(t.onTerrain){let o=t.classificationTypeProperty.getValue(e);t.fillMaterialProperty instanceof Kt?this._groundColorBatches[o].add(e,t):this._groundMaterialBatches[o].add(e,t)}else t.isClosed?t.fillMaterialProperty instanceof Kt?l(t.terrainOffsetProperty)?this._closedColorBatches[i+n].add(e,t):this._closedColorBatches[n].add(e,t):l(t.terrainOffsetProperty)?this._closedMaterialBatches[i+n].add(e,t):this._closedMaterialBatches[n].add(e,t):t.fillMaterialProperty instanceof Kt?l(t.terrainOffsetProperty)?this._openColorBatches[i+n].add(e,t):this._openColorBatches[n].add(e,t):l(t.terrainOffsetProperty)?this._openMaterialBatches[i+n].add(e,t):this._openMaterialBatches[n].add(e,t)};Bd._onGeometryChanged=function(e){let t=this._removedObjects,n=this._changedObjects,i=e.entity,o=i.id;!l(t.get(o))&&!l(n.get(o))&&n.set(o,i)};Bd.prototype._onCollectionChanged=function(e,t,n){let i=this._addedObjects,o=this._removedObjects,r=this._changedObjects,s,a,c;for(s=n.length-1;s>-1;s--)c=n[s],a=c.id,i.remove(a)||(o.set(a,c),r.remove(a));for(s=t.length-1;s>-1;s--)c=t[s],a=c.id,o.remove(a)?r.set(a,c):i.set(a,c)};var hP=Bd;var qLi=y(x(),1);var edt=1,tdt="30px sans-serif",ndt=hr.FILL,idt=U.WHITE,odt=U.BLACK,rdt=1,sdt=!1,adt=new U(.165,.165,.165,.8),cdt=new M(7,5),ldt=M.ZERO,ddt=m.ZERO,udt=rt.NONE,mdt=Bi.CENTER,hdt=Hn.CENTER,fdt=new m,pdt=new U,Adt=new U,gdt=new U,bdt=new M,ydt=new m,xdt=new M,Cdt=new Ot,Tdt=new Ot,Edt=new Ot,Sdt=new Dt;function $0e(e){this.entity=e,this.label=void 0,this.index=void 0}function fy(e,t){t.collectionChanged.addEventListener(fy.prototype._onCollectionChanged,this),this._cluster=e,this._entityCollection=t,this._items=new Xt,this._onCollectionChanged(t,t.values,[],[])}fy.prototype.update=function(e){let t=this._items.values,n=this._cluster;for(let i=0,o=t.length;i<o;i++){let r=t[i],s=r.entity,a=s._label,c,d=r.label,u=s.isShowing&&s.isAvailable(e)&&K.getValueOrDefault(a._show,e,!0),h;if(u&&(h=K.getValueOrUndefined(s._position,e,fdt),c=K.getValueOrUndefined(a._text,e),u=l(h)&&l(c)),!u){I7(r,s,n);continue}K.isConstant(s._position)||(n._clusterDirty=!0);let p=!1,A=K.getValueOrDefault(a._heightReference,e,udt);l(d)||(d=n.getLabel(s),d.id=s,r.label=d,p=m.equals(d.position,h)&&d.heightReference===A),d.show=!0,d.position=h,d.text=c,d.scale=K.getValueOrDefault(a._scale,e,edt),d.font=K.getValueOrDefault(a._font,e,tdt),d.style=K.getValueOrDefault(a._style,e,ndt),d.fillColor=K.getValueOrDefault(a._fillColor,e,idt,pdt),d.outlineColor=K.getValueOrDefault(a._outlineColor,e,odt,Adt),d.outlineWidth=K.getValueOrDefault(a._outlineWidth,e,rdt),d.showBackground=K.getValueOrDefault(a._showBackground,e,sdt),d.backgroundColor=K.getValueOrDefault(a._backgroundColor,e,adt,gdt),d.backgroundPadding=K.getValueOrDefault(a._backgroundPadding,e,cdt,bdt),d.pixelOffset=K.getValueOrDefault(a._pixelOffset,e,ldt,xdt),d.eyeOffset=K.getValueOrDefault(a._eyeOffset,e,ddt,ydt),d.heightReference=A,d.horizontalOrigin=K.getValueOrDefault(a._horizontalOrigin,e,mdt),d.verticalOrigin=K.getValueOrDefault(a._verticalOrigin,e,hdt),d.translucencyByDistance=K.getValueOrUndefined(a._translucencyByDistance,e,Cdt),d.pixelOffsetScaleByDistance=K.getValueOrUndefined(a._pixelOffsetScaleByDistance,e,Tdt),d.scaleByDistance=K.getValueOrUndefined(a._scaleByDistance,e,Edt),d.distanceDisplayCondition=K.getValueOrUndefined(a._distanceDisplayCondition,e,Sdt),d.disableDepthTestDistance=K.getValueOrUndefined(a._disableDepthTestDistance,e),p&&d._updateClamping()}return!0};fy.prototype.getBoundingSphere=function(e,t){let n=this._items.get(e.id);if(!l(n)||!l(n.label))return Tt.FAILED;let i=n.label;return t.center=m.clone(i._clampedPosition??i.position,t.center),t.radius=0,Tt.DONE};fy.prototype.isDestroyed=function(){return!1};fy.prototype.destroy=function(){this._entityCollection.collectionChanged.removeEventListener(fy.prototype._onCollectionChanged,this);let e=this._entityCollection.values;for(let t=0;t<e.length;t++)this._cluster.removeLabel(e[t]);return he(this)};fy.prototype._onCollectionChanged=function(e,t,n,i){let o,r,s=this._items,a=this._cluster;for(o=t.length-1;o>-1;o--)r=t[o],l(r._label)&&l(r._position)&&s.set(r.id,new $0e(r));for(o=i.length-1;o>-1;o--)r=i[o],l(r._label)&&l(r._position)?s.contains(r.id)||s.set(r.id,new $0e(r)):(I7(s.get(r.id),r,a),s.remove(r.id));for(o=n.length-1;o>-1;o--)r=n[o],I7(s.get(r.id),r,a),s.remove(r.id)};function I7(e,t,n){l(e)&&(e.label=void 0,n.removeLabel(t))}var fP=fy;var b1i=y(x(),1);var _dt=1,Idt=!0,Zdt=0,Rdt=!0,Vdt=!0,Gdt=Vn.ENABLED,Ldt=rt.NONE,Wdt=U.RED,Fdt=0,Bdt=U.WHITE,wdt=jc.HIGHLIGHT,Ndt=.5,Pdt=new M(1,1),eye={maximumPositionEpsilon:Number.POSITIVE_INFINITY},Xdt=new F,Ydt=new F,tye=new U,nye=new Array(4),Mdt=new m;function py(e,t){t.collectionChanged.addEventListener(py.prototype._onCollectionChanged,this),this._scene=e,this._primitives=e.primitives,this._entityCollection=t,this._modelHash={},this._entitiesToVisualize=new Xt,this._onCollectionChanged(t,t.values,[],[])}async function vdt(e,t,n,i,o){let r=e._primitives,s=e._modelHash;try{let a=await gu.fromGltfAsync({url:n,incrementallyLoadTextures:i,scene:e._scene,environmentMapOptions:o});if(e.isDestroyed()||!l(s[t.id]))return;a._marsOptions=t._model?._marsOptions,a.id=t,r.add(a),s[t.id].modelPrimitive=a,a.errorEvent.addEventListener(c=>{l(s[t.id])&&(console.log(c),c.name!=="TextureError"&&a.incrementallyLoadTextures&&(s[t.id].loadFailed=!0))})}catch(a){if(e.isDestroyed()||!l(s[t.id]))return;console.log(a),s[t.id].loadFailed=!0}}py.prototype.update=function(e){let t=this._entitiesToVisualize.values,n=this._modelHash,i=this._primitives;for(let o=0,r=t.length;o<r;o++){let s=t[o],a=s._model,c,d=n[s.id],u=s.isShowing&&s.isAvailable(e)&&K.getValueOrDefault(a._show,e,!0),h;if(u&&(h=s.computeModelMatrix(e,Xdt),c=Le.createIfNeeded(K.getValueOrUndefined(a._uri,e)),u=l(h)&&l(c)),!u){l(d)&&d.modelPrimitive&&(d.modelPrimitive.show=!1);continue}if(!l(d)||c.url!==d.url){l(d?.modelPrimitive)&&(i.removeAndDestroy(d.modelPrimitive),delete n[s.id]),d={modelPrimitive:void 0,url:c.url,animationsRunning:!1,nodeTransformationsScratch:{},articulationsScratch:{},loadFailed:!1,modelUpdated:!1,environmentMapOptionsScratch:{...eye}},n[s.id]=d;let f=K.getValueOrDefault(a._incrementallyLoadTextures,e,Rdt),b=K.getValueOrDefault(a._environmentMapOptions,e,eye,d.environmentMapOptionsScratch);vdt(this,s,c,f,b)}let p=d.modelPrimitive;if(!l(p))continue;p.show=!0,p.scale=K.getValueOrDefault(a._scale,e,_dt),p.enableVerticalExaggeration=K.getValueOrDefault(a._enableVerticalExaggeration,e,Idt),p.minimumPixelSize=K.getValueOrDefault(a._minimumPixelSize,e,Zdt),p.maximumScale=K.getValueOrUndefined(a._maximumScale,e),p.modelMatrix=F.clone(h,p.modelMatrix),p.shadows=K.getValueOrDefault(a._shadows,e,Gdt),p.heightReference=K.getValueOrDefault(a._heightReference,e,Ldt),p.distanceDisplayCondition=K.getValueOrUndefined(a._distanceDisplayCondition,e),p.silhouetteColor=K.getValueOrDefault(a._silhouetteColor,e,Wdt,tye),p.silhouetteSize=K.getValueOrDefault(a._silhouetteSize,e,Fdt),p.color=K.getValueOrDefault(a._color,e,Bdt,tye),p.colorBlendMode=K.getValueOrDefault(a._colorBlendMode,e,wdt),p.colorBlendAmount=K.getValueOrDefault(a._colorBlendAmount,e,Ndt),p.clippingPlanes=K.getValueOrUndefined(a._clippingPlanes,e),p.clampAnimations=K.getValueOrDefault(a._clampAnimations,e,Vdt),p.imageBasedLighting.imageBasedLightingFactor=K.getValueOrDefault(a._imageBasedLightingFactor,e,Pdt);let A=K.getValueOrUndefined(a._lightColor,e);if(l(A)&&(U.pack(A,nye,0),A=m.unpack(nye,0,Mdt)),p.lightColor=A,p.customShader=K.getValueOrUndefined(a._customShader,e),n[s.id].modelUpdated=!0,p.ready){!a._readyOk&&a._marsOptions&&a._marsOptions.callback&&(a._marsOptions.callback(s,p),a._readyOk=!0);let f=K.getValueOrDefault(a._runAnimations,e,!0);d.animationsRunning!==f&&(f?p.activeAnimations.addAll({loop:Ed.REPEAT}):p.activeAnimations.removeAll(),d.animationsRunning=f);let b=K.getValueOrUndefined(a._nodeTransformations,e,d.nodeTransformationsScratch);if(l(b)){let E=Object.keys(b);for(let S=0,I=E.length;S<I;++S){let R=E[S],V=b[R];if(!l(V))continue;let W=p.getNode(R);if(!l(W))continue;let B=F.fromTranslationRotationScale(V,Ydt);W.matrix=F.multiply(W.originalMatrix,B,B)}}let C=!1,T=K.getValueOrUndefined(a._articulations,e,d.articulationsScratch);if(l(T)){let E=Object.keys(T);for(let S=0,I=E.length;S<I;++S){let R=E[S],V=T[R];l(V)&&(C=!0,p.setArticulationStage(R,V))}}C&&p.applyArticulations()}}return!0};py.prototype.isDestroyed=function(){return!1};py.prototype.destroy=function(){this._entityCollection.collectionChanged.removeEventListener(py.prototype._onCollectionChanged,this);let e=this._entitiesToVisualize.values,t=this._modelHash,n=this._primitives;for(let i=e.length-1;i>-1;i--)Z7(this,e[i],t,n);return he(this)};var p5=new m,Udt=new Ae;py.prototype.getBoundingSphere=function(e,t){let n=this._modelHash[e.id];if(!l(n))return Tt.FAILED;if(n.loadFailed)return Tt.FAILED;let i=n.modelPrimitive;if(!l(i)||!i.show)return Tt.PENDING;if(!i.ready||!n.modelUpdated)return Tt.PENDING;let o=this._scene,r=o.ellipsoid??ie.default;if(i.heightReference!==rt.NONE){let a=i.modelMatrix;p5.x=a[12],p5.y=a[13],p5.z=a[14];let c=r.cartesianToCartographic(p5,Udt),d=o.getHeight(c,i.heightReference);return l(d)&&(hm(i.heightReference)?c.height=d:c.height+=d),ue.clone(i.boundingSphere,t),t.center=r.cartographicToCartesian(c),Tt.DONE}return ue.clone(i.boundingSphere,t),Tt.DONE};py.prototype._onCollectionChanged=function(e,t,n,i){let o,r,s=this._entitiesToVisualize,a=this._modelHash,c=this._primitives;for(o=t.length-1;o>-1;o--)r=t[o],l(r._model)&&l(r._position)&&s.set(r.id,r);for(o=i.length-1;o>-1;o--)r=i[o],l(r._model)&&l(r._position)?(Ddt(r,a),s.set(r.id,r)):(Z7(this,r,a,c),s.remove(r.id));for(o=n.length-1;o>-1;o--)r=n[o],Z7(this,r,a,c),s.remove(r.id)};function Z7(e,t,n,i){let o=n[t.id];l(o)&&(i.removeAndDestroy(o.modelPrimitive),delete n[t.id])}function Ddt(e,t){let n=t[e.id];l(n)&&(n.nodeTransformationsScratch={},n.articulationsScratch={})}var pP=py;var q1i=y(x(),1);var I1i=y(x(),1);function Ay(e){this._definitionChanged=new xe,this._value=void 0,this._removeSubscription=void 0,this.setValue(e)}Object.defineProperties(Ay.prototype,{isConstant:{get:function(){return K.isConstant(this._value)}},definitionChanged:{get:function(){return this._definitionChanged}},referenceFrame:{get:function(){return l(this._value)?this._value.referenceFrame:Ni.FIXED}}});var kdt=new q;Ay.prototype.getValue=function(e,t){return l(e)||(e=q.now(kdt)),this.getValueInReferenceFrame(e,Ni.FIXED,t)};Ay.prototype.setValue=function(e){this._value!==e&&(this._value=e,l(this._removeSubscription)&&(this._removeSubscription(),this._removeSubscription=void 0),l(e)&&(this._removeSubscription=e.definitionChanged.addEventListener(this._raiseDefinitionChanged,this)),this._definitionChanged.raiseEvent(this))};Ay.prototype.getValueInReferenceFrame=function(e,t,n){if(l(this._value))return n=this._value.getValueInReferenceFrame(e,t,n),l(n)?ie.default.scaleToGeodeticSurface(n,n):void 0};Ay.prototype.equals=function(e){return this===e||e instanceof Ay&&this._value===e._value};Ay.prototype._raiseDefinitionChanged=function(){this._definitionChanged.raiseEvent(this)};var Pp=Ay;var iye=new $,oye=new $,rye=new $,Qdt=new m,sye=new m,Odt=new m,zdt=new m,A5=new Me,g5=new F,b5=new $;function AP(e,t,n,i,o){if(!(!l(t)||!l(n))){if(m.subtract(t,n,o),l(i.orientation))i.orientation.getValue(e,A5)&&(Me.conjugate(A5,A5),$.fromQuaternion(A5,b5),$.multiplyByVector(b5,o,o));else if(l(G7(e,i.position,g5)))F.inverse(g5,g5),F.getRotation(g5,b5),$.multiplyByVector(b5,o,o);else return;return o}}function G7(e,t,n){let i=t.getValue(e,Qdt);if(l(i)){let o=q.addSeconds(e,.01,new q),r=t.getValue(o,sye);if(l(r)&&!m.equalsEpsilon(i,r,L.EPSILON16)){let s=bt.computeFixedToIcrfMatrix(e,iye),a=bt.computeFixedToIcrfMatrix(o,oye),c;!l(s)||!l(a)?(c=bt.computeTemeToPseudoFixedMatrix(e,rye),s=$.transpose(c,iye),a=bt.computeTemeToPseudoFixedMatrix(o,oye),$.transpose(a,a)):c=$.transpose(s,rye);let d=Odt;m.normalize(i,d),m.normalize(r,r),$.multiplyByVector(s,d,d),$.multiplyByVector(a,r,r);let u=m.cross(d,r,zdt);if(!m.equalsEpsilon(u,m.ZERO,L.EPSILON16)){let h=m.cross(u,d,sye);return $.multiplyByVector(c,h,h),$.multiplyByVector(c,u,u),$.multiplyByVector(c,d,d),m.normalize(h,h),m.normalize(u,u),m.normalize(d,d),l(n)||(n=new F),n[0]=h.x,n[1]=h.y,n[2]=h.z,n[3]=0,n[4]=u.x,n[5]=u.y,n[6]=u.z,n[7]=0,n[8]=d.x,n[9]=d.y,n[10]=d.z,n[11]=0,n[12]=i.x,n[13]=i.y,n[14]=i.z,n[15]=1,n}}}}var Hdt=60,Jdt=1,uye=new Wn,R7=new Wn,V7=new Wn;function aye(e){this.entity=e,this.polyline=void 0,this.index=void 0,this.updater=void 0}var y5=new m;function Kdt(e,t,n,i,o,r,s,a,c){let d,u,h=!1;r instanceof jo&&(d=r,u=d.position,r=Ni.FIXED,h=!0);let p=a,A,f;A=e.getValueInReferenceFrame(t,r,c[p]),h?(f=u.getValueInReferenceFrame(t,r,y5),A=AP(t,A,f,d,A),l(A)&&(c[p++]=A)):l(A)&&(c[p++]=A);let b=!l(o)||q.lessThanOrEquals(o,t)||q.greaterThanOrEquals(o,n),C=0,T=i.length,E=i[C],S=n,I=!1,R,V,W;for(;C<T;){if(!b&&q.greaterThanOrEquals(E,o)&&(A=e.getValueInReferenceFrame(o,r,c[p]),h?(f=u.getValueInReferenceFrame(o,r,y5),l(A)&&l(f)&&(A=AP(o,A,f,d,A),l(A)&&(c[p++]=A))):l(A)&&(c[p++]=A),b=!0),q.greaterThan(E,t)&&q.lessThan(E,S)&&!E.equals(o)&&(A=e.getValueInReferenceFrame(E,r,c[p]),h?(f=u.getValueInReferenceFrame(E,r,y5),l(A)&&l(f)&&(A=AP(E,A,f,d,A),l(A)&&(c[p++]=A))):l(A)&&(c[p++]=A)),C<T-1){if(s>0&&!I){let B=i[C+1],N=q.secondsDifference(B,E);I=N>s,I&&(R=Math.ceil(N/s),V=0,W=N/Math.max(R,2),R=Math.max(R-1,1))}if(I&&V<R){E=q.addSeconds(E,W,new q),V++;continue}}I=!1,C++,E=i[C]}return A=e.getValueInReferenceFrame(n,r,c[p]),h?(f=u.getValueInReferenceFrame(n,r,y5),l(A)&&l(f)&&(A=AP(n,A,f,d,A),l(A)&&(c[p++]=A))):l(A)&&(c[p++]=A),p}function jdt(e,t,n,i,o,r,s,a){let c,d=0,u=s,h=t,p=!l(i)||q.lessThanOrEquals(i,t)||q.greaterThanOrEquals(i,n);for(;q.lessThan(h,n);)!p&&q.greaterThanOrEquals(h,i)&&(p=!0,c=e.getValueInReferenceFrame(i,o,a[u]),l(c)&&(a[u]=c,u++)),c=e.getValueInReferenceFrame(h,o,a[u]),l(c)&&(a[u]=c,u++),d++,h=q.addSeconds(t,r*d,new q);return c=e.getValueInReferenceFrame(n,o,a[u]),l(c)&&(a[u]=c,u++),u}function qdt(e,t,n,i,o,r,s,a){let c,d=0,u=s,h=t,p=Math.max(r,60),A=!l(i)||q.lessThanOrEquals(i,t)||q.greaterThanOrEquals(i,n);for(;q.lessThan(h,n);)!A&&q.greaterThanOrEquals(h,i)&&(A=!0,c=e.getValueInReferenceFrame(i,o,a[u]),l(c)&&(a[u]=c,u++)),c=e.getValueInReferenceFrame(h,o,a[u]),l(c)&&(a[u]=c,u++),d++,h=q.addSeconds(t,p*d,new q);return c=e.getValueInReferenceFrame(n,o,a[u]),l(c)&&(a[u]=c,u++),u}function $dt(e,t,n,i,o,r,s,a){V7.start=t,V7.stop=n;let c=s,d=e.intervals;for(let u=0;u<d.length;u++){let h=d.get(u);if(!Wn.intersect(h,V7,uye).isEmpty){let p=h.start;h.isStartIncluded||(h.isStopIncluded?p=h.stop:p=q.addSeconds(h.start,q.secondsDifference(h.stop,h.start)/2,new q));let A=e.getValueInReferenceFrame(p,o,a[c]);l(A)&&(a[c]=A,c++)}}return c}function eut(e,t,n,i,o,r,s,a){let c=e.getValueInReferenceFrame(t,o,a[s]);return l(c)&&(a[s++]=c),s}function tut(e,t,n,i,o,r,s,a){R7.start=t,R7.stop=n;let c=s,d=e.intervals;for(let u=0;u<d.length;u++){let h=d.get(u);if(!Wn.intersect(h,R7,uye).isEmpty){let p=h.start,A=h.stop,f=t;q.greaterThan(p,f)&&(f=p);let b=n;q.lessThan(A,b)&&(b=A),c=mye(h.data,f,b,i,o,r,c,a)}}return c}function mye(e,t,n,i,o,r,s,a){for(;e instanceof qg;)e=e.resolvedProperty;if(e instanceof lc){let c=e._property._times;s=Kdt(e,t,n,c,i,o,r,s,a)}else e instanceof hW?s=jdt(e,t,n,i,o,r,s,a):e instanceof ac?s=tut(e,t,n,i,o,r,s,a):e instanceof $g?s=$dt(e,t,n,i,o,r,s,a):e instanceof Rl||e instanceof Pp&&K.isConstant(e)?s=eut(e,t,n,i,o,r,s,a):s=qdt(e,t,n,i,o,r,s,a);return s}function hye(e,t,n,i,o,r,s){l(s)||(s=[]);let a=mye(e,t,n,i,o,r,0,s);return s.length=a,s}var cye=new $,lye=new Me,dye=new $;function gP(e,t){this._unusedIndexes=[],this._polylineCollection=new nf,this._scene=e,this._referenceFrame=t,e.primitives.add(this._polylineCollection)}gP.prototype.update=function(e){let t=this._referenceFrame;if(t===Ni.INERTIAL){let n=bt.computeIcrfToFixedMatrix(e,cye);l(n)||(n=bt.computeTemeToPseudoFixedMatrix(e,cye)),F.fromRotationTranslation(n,m.ZERO,this._polylineCollection.modelMatrix)}else if(t instanceof jo){let n=t.position.getValue(e);l(t.orientation)?l(t.orientation.getValue(e,lye))&&($.fromQuaternion(lye,dye),F.fromRotationTranslation(dye,n,this._polylineCollection.modelMatrix)):G7(e,t.position,this._polylineCollection.modelMatrix)}};gP.prototype.updateObject=function(e,t){let n=t.entity,i=n._path,o=n._position,r,s,a=i._show,c=t.polyline,d=n.isShowing&&n.isAvailable(e)&&(!l(a)||a.getValue(e));if(d){let p=K.getValueOrUndefined(i._leadTime,e),A=K.getValueOrUndefined(i._trailTime,e),f=n._availability,b=l(f),C=l(p),T=l(A);if(d=b||C&&T,d){if(T&&(r=q.addSeconds(e,-A,new q)),C&&(s=q.addSeconds(e,p,new q)),b){let E=f.start,S=f.stop;(!T||q.greaterThan(E,r))&&(r=E),(!C||q.lessThan(S,s))&&(s=S)}d=q.lessThan(r,s)}}if(!d){l(c)&&(this._unusedIndexes.push(t.index),t.polyline=void 0,c.show=!1,t.index=void 0);return}if(!l(c)){let p=this._unusedIndexes;if(p.length>0){let f=p.pop();c=this._polylineCollection.get(f),t.index=f}else t.index=this._polylineCollection.length,c=this._polylineCollection.add();c.id=n,t.polyline=c}let u=K.getValueOrDefault(i._resolution,e,Hdt),h=hye(o,r,s,e,this._referenceFrame,u,c.positions.slice());if(h.length<2){c.show=!1;return}c.show=!0,c.positions=h,c.material=Ir.getValue(e,i._material,c.material),c.width=K.getValueOrDefault(i._width,e,Jdt),c.distanceDisplayCondition=K.getValueOrUndefined(i._distanceDisplayCondition,e,c.distanceDisplayCondition)};gP.prototype.removeObject=function(e){let t=e.polyline;l(t)&&(this._unusedIndexes.push(e.index),e.polyline=void 0,t.show=!1,t.id=void 0,e.index=void 0)};gP.prototype.destroy=function(){return this._scene.primitives.remove(this._polylineCollection),he(this)};function Xp(e,t){t.collectionChanged.addEventListener(Xp.prototype._onCollectionChanged,this),this._scene=e,this._updaters={},this._entityCollection=t,this._items=new Xt,this._onCollectionChanged(t,t.values,[],[])}Xp.prototype.update=function(e){let t=this._updaters;for(let i in t)t.hasOwnProperty(i)&&t[i].update(e);let n=this._items.values;if(n.length===0&&l(this._updaters)&&Object.keys(this._updaters).length>0){for(let i in t)t.hasOwnProperty(i)&&t[i].destroy();this._updaters={}}for(let i=0,o=n.length;i<o;i++){let r=n[i],s=r.entity,a=s._position,c=s._path,d=r.updater,u=!1,h=Ni.FIXED,p=h.toString();if(this._scene.mode===se.SCENE3D){let f=K.getValueOrUndefined(c.relativeTo,e);l(f)?f==="FIXED"?(h=Ni.FIXED,p=h.toString()):f==="INERTIAL"?(h=Ni.INERTIAL,p=h.toString()):(u=!0,h=this._entityCollection.getById(f),p=f):(h=a.referenceFrame,p=h.toString())}let A=this._updaters[p];if(d===A&&l(A)){A.updateObject(e,r);continue}l(d)&&d.removeObject(r),!(u&&!l(h))&&(l(A)||(A=new gP(this._scene,h),A.update(e),this._updaters[p]=A),r.updater=A,l(A)&&A.updateObject(e,r))}return!0};Xp.prototype.isDestroyed=function(){return!1};Xp.prototype.destroy=function(){this._entityCollection.collectionChanged.removeEventListener(Xp.prototype._onCollectionChanged,this);let e=this._updaters;for(let t in e)e.hasOwnProperty(t)&&e[t].destroy();return he(this)};Xp.prototype._onCollectionChanged=function(e,t,n,i){let o,r,s,a=this._items;for(o=t.length-1;o>-1;o--)r=t[o],l(r._path)&&l(r._position)&&a.set(r.id,new aye(r));for(o=i.length-1;o>-1;o--)r=i[o],l(r._path)&&l(r._position)?a.contains(r.id)||a.set(r.id,new aye(r)):(s=a.get(r.id),l(s)&&(l(s.updater)&&s.updater.removeObject(s),a.remove(r.id)));for(o=n.length-1;o>-1;o--)r=n[o],s=a.get(r.id),l(s)&&(l(s.updater)&&s.updater.removeObject(s),a.remove(r.id))};Xp._subSample=hye;Xp._computeVvlhTransform=G7;Xp._transformToEntityFrame=AP;var bP=Xp;var mWi=y(x(),1);var fye=U.WHITE,pye=U.BLACK,Aye=0,gye=1,bye=0,yye=Br.NONE,xye=new U,nut=new m,Cye=new U,Tye=new Ot,Eye=new Ot,Sye=new Dt;function _ye(e){this.entity=e,this.pointPrimitive=void 0,this.billboard=void 0,this.color=void 0,this.outlineColor=void 0,this.pixelSize=void 0,this.outlineWidth=void 0}function gy(e,t){t.collectionChanged.addEventListener(gy.prototype._onCollectionChanged,this),this._cluster=e,this._entityCollection=t,this._items=new Xt,this._onCollectionChanged(t,t.values,[],[])}gy.prototype.update=function(e){let t=this._items.values,n=this._cluster;for(let i=0,o=t.length;i<o;i++){let r=t[i],s=r.entity,a=s._point,c=r.pointPrimitive,d=r.billboard,u=K.getValueOrDefault(a._heightReference,e,rt.NONE),h=s.isShowing&&s.isAvailable(e)&&K.getValueOrDefault(a._show,e,!0),p;if(h&&(p=K.getValueOrUndefined(s._position,e,nut),h=l(p)),!h){yP(r,s,n);continue}K.isConstant(s._position)||(n._clusterDirty=!0);let A=!1,f=!1;if(u!==rt.NONE&&!l(d)?(l(c)&&(yP(r,s,n),c=void 0),d=n.getBillboard(s),d.id=s,d.image=void 0,r.billboard=d,A=!0,f=m.equals(d.position,p)&&d.heightReference===u):u===rt.NONE&&!l(c)&&(l(d)&&(yP(r,s,n),d=void 0),c=n.getPoint(s),c.id=s,r.pointPrimitive=c),l(c))c.show=!0,c.position=p,c.scaleByDistance=K.getValueOrUndefined(a._scaleByDistance,e,Tye),c.translucencyByDistance=K.getValueOrUndefined(a._translucencyByDistance,e,Eye),c.color=K.getValueOrDefault(a._color,e,fye,xye),c.outlineColor=K.getValueOrDefault(a._outlineColor,e,pye,Cye),c.outlineWidth=K.getValueOrDefault(a._outlineWidth,e,Aye),c.pixelSize=K.getValueOrDefault(a._pixelSize,e,gye),c.distanceDisplayCondition=K.getValueOrUndefined(a._distanceDisplayCondition,e,Sye),c.disableDepthTestDistance=K.getValueOrDefault(a._disableDepthTestDistance,e,bye),c.splitDirection=K.getValueOrDefault(a._splitDirection,e,yye);else if(l(d)){d.show=!0,d.position=p,d.scaleByDistance=K.getValueOrUndefined(a._scaleByDistance,e,Tye),d.translucencyByDistance=K.getValueOrUndefined(a._translucencyByDistance,e,Eye),d.distanceDisplayCondition=K.getValueOrUndefined(a._distanceDisplayCondition,e,Sye),d.disableDepthTestDistance=K.getValueOrDefault(a._disableDepthTestDistance,e,bye),d.splitDirection=K.getValueOrDefault(a._splitDirection,e,yye),d.heightReference=u;let b=K.getValueOrDefault(a._color,e,fye,xye),C=K.getValueOrDefault(a._outlineColor,e,pye,Cye),T=Math.round(K.getValueOrDefault(a._outlineWidth,e,Aye)),E=Math.max(1,Math.round(K.getValueOrDefault(a._pixelSize,e,gye)));if(T>0?(d.scale=1,A=A||T!==r.outlineWidth||E!==r.pixelSize||!U.equals(b,r.color)||!U.equals(C,r.outlineColor)):(d.scale=E/50,E=50,A=A||T!==r.outlineWidth||!U.equals(b,r.color)||!U.equals(C,r.outlineColor)),A){r.color=U.clone(b,r.color),r.outlineColor=U.clone(C,r.outlineColor),r.pixelSize=E,r.outlineWidth=T;let S=b.alpha,I=b.toCssColorString(),R=C.toCssColorString(),V=JSON.stringify([I,E,R,T]);d.setImage(V,XC(S,I,R,T,E))}f&&d._updateClamping()}}return!0};gy.prototype.getBoundingSphere=function(e,t){let n=this._items.get(e.id);if(!l(n)||!(l(n.pointPrimitive)||l(n.billboard)))return Tt.FAILED;if(l(n.pointPrimitive))t.center=m.clone(n.pointPrimitive.position,t.center);else{let i=n.billboard;if(!l(i._clampedPosition))return Tt.PENDING;t.center=m.clone(i._clampedPosition,t.center)}return t.radius=0,Tt.DONE};gy.prototype.isDestroyed=function(){return!1};gy.prototype.destroy=function(){this._entityCollection.collectionChanged.removeEventListener(gy.prototype._onCollectionChanged,this);let e=this._entityCollection.values;for(let t=0;t<e.length;t++)this._cluster.removePoint(e[t]);return he(this)};gy.prototype._onCollectionChanged=function(e,t,n,i){let o,r,s=this._items,a=this._cluster;for(o=t.length-1;o>-1;o--)r=t[o],l(r._point)&&l(r._position)&&s.set(r.id,new _ye(r));for(o=i.length-1;o>-1;o--)r=i[o],l(r._point)&&l(r._position)?s.contains(r.id)||s.set(r.id,new _ye(r)):(yP(s.get(r.id),r,a),s.remove(r.id));for(o=n.length-1;o>-1;o--)r=n[o],yP(s.get(r.id),r,a),s.remove(r.id)};function yP(e,t,n){if(l(e)){let i=e.pointPrimitive;if(l(i)){e.pointPrimitive=void 0,n.removePoint(t);return}let o=e.billboard;l(o)&&(e.billboard=void 0,n.removeBillboard(t))}}var xP=gy;var vFi=y(x(),1);var cFi=y(x(),1);var WWi=y(x(),1);var Gye=[];function iut(e,t,n,i,o){let r=Gye;r.length=o;let s,a=n.red,c=n.green,d=n.blue,u=n.alpha,h=i.red,p=i.green,A=i.blue,f=i.alpha;if(U.equals(n,i)){for(s=0;s<o;s++)r[s]=U.clone(n);return r}let b=(h-a)/o,C=(p-c)/o,T=(A-d)/o,E=(f-u)/o;for(s=0;s<o;s++)r[s]=new U(a+s*b,c+s*C,d+s*T,u+s*E);return r}function CP(e){e=e??Q.EMPTY_OBJECT;let t=e.positions,n=e.colors,i=e.width??1,o=e.colorsPerVertex??!1;this._positions=t,this._colors=n,this._width=i,this._colorsPerVertex=o,this._vertexFormat=ve.clone(e.vertexFormat??ve.DEFAULT),this._arcType=e.arcType??un.GEODESIC,this._granularity=e.granularity??L.RADIANS_PER_DEGREE,this._ellipsoid=ie.clone(e.ellipsoid??ie.default),this._workerName="createPolylineGeometry";let r=1+t.length*m.packedLength;r+=l(n)?1+n.length*U.packedLength:1,this.packedLength=r+ie.packedLength+ve.packedLength+4}CP.pack=function(e,t,n){n=n??0;let i,o=e._positions,r=o.length;for(t[n++]=r,i=0;i<r;++i,n+=m.packedLength)m.pack(o[i],t,n);let s=e._colors;for(r=l(s)?s.length:0,t[n++]=r,i=0;i<r;++i,n+=U.packedLength)U.pack(s[i],t,n);return ie.pack(e._ellipsoid,t,n),n+=ie.packedLength,ve.pack(e._vertexFormat,t,n),n+=ve.packedLength,t[n++]=e._width,t[n++]=e._colorsPerVertex?1:0,t[n++]=e._arcType,t[n]=e._granularity,t};var Lye=ie.clone(ie.UNIT_SPHERE),Wye=new ve,wT={positions:void 0,colors:void 0,ellipsoid:Lye,vertexFormat:Wye,width:void 0,colorsPerVertex:void 0,arcType:void 0,granularity:void 0};CP.unpack=function(e,t,n){t=t??0;let i,o=e[t++],r=new Array(o);for(i=0;i<o;++i,t+=m.packedLength)r[i]=m.unpack(e,t);o=e[t++];let s=o>0?new Array(o):void 0;for(i=0;i<o;++i,t+=U.packedLength)s[i]=U.unpack(e,t);let a=ie.unpack(e,t,Lye);t+=ie.packedLength;let c=ve.unpack(e,t,Wye);t+=ve.packedLength;let d=e[t++],u=e[t++]===1,h=e[t++],p=e[t];return l(n)?(n._positions=r,n._colors=s,n._ellipsoid=ie.clone(a,n._ellipsoid),n._vertexFormat=ve.clone(c,n._vertexFormat),n._width=d,n._colorsPerVertex=u,n._arcType=h,n._granularity=p,n):(wT.positions=r,wT.colors=s,wT.width=d,wT.colorsPerVertex=u,wT.arcType=h,wT.granularity=p,new CP(wT))};var Iye=new m,Zye=new m,Rye=new m,Vye=new m;CP.createGeometry=function(e){let t=e._width,n=e._vertexFormat,i=e._colors,o=e._colorsPerVertex,r=e._arcType,s=e._granularity,a=e._ellipsoid,c,d,u,h=[],p=Uo(e._positions,m.equalsEpsilon,!1,h);if(l(i)&&h.length>0){let w=0,X=h[0];i=i.filter(function(k,v){let D=!1;return o?D=v===X||v===0&&X===1:D=v+1===X,D?(w++,X=h[w],!1):!0})}let A=p.length;if(A<2||t<=0)return;if(r===un.GEODESIC||r===un.RHUMB){let w,X;r===un.GEODESIC?(w=L.chordLength(s,a.maximumRadius),X=Ji.numberOfPoints):(w=s,X=Ji.numberOfPointsRhumbLine);let k=Ji.extractHeights(p,a);if(l(i)){let v=1;for(c=0;c<A-1;++c)v+=X(p[c],p[c+1],w);let D=new Array(v),Y=0;for(c=0;c<A-1;++c){let O=p[c],J=p[c+1],te=i[c],z=X(O,J,w);if(o&&c<v){let j=i[c+1],ee=iut(O,J,te,j,z),ge=ee.length;for(d=0;d<ge;++d)D[Y++]=ee[d]}else for(d=0;d<z;++d)D[Y++]=U.clone(te)}D[Y]=U.clone(i[i.length-1]),i=D,Gye.length=0}r===un.GEODESIC?p=Ji.generateCartesianArc({positions:p,minDistance:w,ellipsoid:a,height:k}):p=Ji.generateCartesianRhumbArc({positions:p,granularity:w,ellipsoid:a,height:k})}A=p.length;let f=A*4-4,b=new Float64Array(f*3),C=new Float64Array(f*3),T=new Float64Array(f*3),E=new Float32Array(f*2),S=n.st?new Float32Array(f*2):void 0,I=l(i)?new Uint8Array(f*4):void 0,R=0,V=0,W=0,B=0,N;for(d=0;d<A;++d){d===0?(N=Iye,m.subtract(p[0],p[1],N),m.add(p[0],N,N)):N=p[d-1],m.clone(N,Rye),m.clone(p[d],Zye),d===A-1?(N=Iye,m.subtract(p[A-1],p[A-2],N),m.add(p[A-1],N,N)):N=p[d+1],m.clone(N,Vye);let w,X;l(I)&&(d!==0&&!o?w=i[d-1]:w=i[d],d!==A-1&&(X=i[d]));let k=d===0?2:0,v=d===A-1?2:4;for(u=k;u<v;++u){m.pack(Zye,b,R),m.pack(Rye,C,R),m.pack(Vye,T,R),R+=3;let D=u-2<0?-1:1;if(E[V++]=2*(u%2)-1,E[V++]=D*t,n.st&&(S[W++]=d/(A-1),S[W++]=Math.max(E[V-2],0)),l(I)){let Y=u<2?w:X;I[B++]=U.floatToByte(Y.red),I[B++]=U.floatToByte(Y.green),I[B++]=U.floatToByte(Y.blue),I[B++]=U.floatToByte(Y.alpha)}}}let P=new xn;P.position=new we({componentDatatype:H.DOUBLE,componentsPerAttribute:3,values:b}),P.prevPosition=new we({componentDatatype:H.DOUBLE,componentsPerAttribute:3,values:C}),P.nextPosition=new we({componentDatatype:H.DOUBLE,componentsPerAttribute:3,values:T}),P.expandAndWidth=new we({componentDatatype:H.FLOAT,componentsPerAttribute:2,values:E}),n.st&&(P.st=new we({componentDatatype:H.FLOAT,componentsPerAttribute:2,values:S})),l(I)&&(P.color=new we({componentDatatype:H.UNSIGNED_BYTE,componentsPerAttribute:4,values:I,normalize:!0}));let g=Ue.createTypedArray(f,A*6-6),_=0,Z=0,G=A-1;for(d=0;d<G;++d)g[Z++]=_,g[Z++]=_+2,g[Z++]=_+1,g[Z++]=_+1,g[Z++]=_+2,g[Z++]=_+3,_+=4;return new Ct({attributes:P,indices:g,primitiveType:We.TRIANGLES,boundingSphere:ue.fromPoints(p),geometryType:sm.POLYLINES})};var ab=CP;var out=new fi(0),x5={},Fye=new U,rut=new Kt(U.WHITE),sut=new fi(!0),aut=new fi(Vn.DISABLED),cut=new fi(new Dt),lut=new fi(ti.BOTH);function dut(){this.vertexFormat=void 0,this.positions=void 0,this.width=void 0,this.arcType=void 0,this.granularity=void 0}function uut(){this.positions=void 0,this.width=void 0,this.arcType=void 0,this.granularity=void 0}function Ef(e,t){this._entity=e,this._scene=t,this._entitySubscription=e.definitionChanged.addEventListener(Ef.prototype._onEntityPropertyChanged,this),this._fillEnabled=!1,this._dynamic=!1,this._geometryChanged=new xe,this._showProperty=void 0,this._materialProperty=void 0,this._shadowsProperty=void 0,this._distanceDisplayConditionProperty=void 0,this._classificationTypeProperty=void 0,this._depthFailMaterialProperty=void 0,this._geometryOptions=new dut,this._groundGeometryOptions=new uut,this._id=`polyline-${e.id}`,this._clampToGround=!1,this._supportsPolylinesOnTerrain=jo.supportsPolylinesOnTerrain(t),this._zIndex=0,this._onEntityPropertyChanged(e,"polyline",e.polyline,void 0)}Object.defineProperties(Ef.prototype,{id:{get:function(){return this._id}},entity:{get:function(){return this._entity}},fillEnabled:{get:function(){return this._fillEnabled}},hasConstantFill:{get:function(){return!this._fillEnabled||!l(this._entity.availability)&&K.isConstant(this._showProperty)}},fillMaterialProperty:{get:function(){return this._materialProperty}},depthFailMaterialProperty:{get:function(){return this._depthFailMaterialProperty}},outlineEnabled:{value:!1},hasConstantOutline:{value:!0},outlineColorProperty:{value:void 0},shadowsProperty:{get:function(){return this._shadowsProperty}},distanceDisplayConditionProperty:{get:function(){return this._distanceDisplayConditionProperty}},classificationTypeProperty:{get:function(){return this._classificationTypeProperty}},isDynamic:{get:function(){return this._dynamic}},isClosed:{value:!1},geometryChanged:{get:function(){return this._geometryChanged}},arcType:{get:function(){return this._arcType}},clampToGround:{get:function(){return this._clampToGround&&this._supportsPolylinesOnTerrain}},zIndex:{get:function(){return this._zIndex}}});Ef.prototype.isOutlineVisible=function(e){return!1};Ef.prototype.isFilled=function(e){let t=this._entity;return(this._fillEnabled&&t.isAvailable(e)&&this._showProperty.getValue(e))??!1};Ef.prototype.createFillGeometryInstance=function(e){let t=this._entity,n=t.isAvailable(e),i=new Rn(n&&t.isShowing&&this._showProperty.getValue(e)),o=this._distanceDisplayConditionProperty.getValue(e),r=ei.fromDistanceDisplayCondition(o),s={show:i,distanceDisplayCondition:r},a;return this._materialProperty instanceof Kt&&(l(this._materialProperty.color)&&(this._materialProperty.color.isConstant||n)&&(a=this._materialProperty.color.getValue(e,Fye)),l(a)||(a=U.WHITE),s.color=$t.fromColor(a)),this.clampToGround?new wt({id:t,geometry:new Yx(this._groundGeometryOptions),attributes:s}):(l(this._depthFailMaterialProperty)&&this._depthFailMaterialProperty instanceof Kt&&(l(this._depthFailMaterialProperty.color)&&(this._depthFailMaterialProperty.color.isConstant||n)&&(a=this._depthFailMaterialProperty.color.getValue(e,Fye)),l(a)||(a=U.WHITE),s.depthFailColor=$t.fromColor(a)),new wt({id:t,geometry:new ab(this._geometryOptions),attributes:s}))};Ef.prototype.createOutlineGeometryInstance=function(e){};Ef.prototype.isDestroyed=function(){return!1};Ef.prototype.destroy=function(){this._entitySubscription(),he(this)};Ef.prototype._onEntityPropertyChanged=function(e,t,n,i){if(!(t==="availability"||t==="polyline"))return;let o=this._entity.polyline;if(!l(o)){this._fillEnabled&&(this._fillEnabled=!1,this._geometryChanged.raiseEvent(this));return}let r=o.positions,s=o.show;if(l(s)&&s.isConstant&&!s.getValue(qe.MINIMUM_VALUE)||!l(r)){this._fillEnabled&&(this._fillEnabled=!1,this._geometryChanged.raiseEvent(this));return}let a=o.zIndex,c=o.material??rut,d=c instanceof Kt;this._materialProperty=c,this._depthFailMaterialProperty=o.depthFailMaterial,this._showProperty=s??sut,this._shadowsProperty=o.shadows??aut,this._distanceDisplayConditionProperty=o.distanceDisplayCondition??cut,this._classificationTypeProperty=o.classificationType??lut,this._fillEnabled=!0,this._zIndex=a??out;let u=o.width,h=o.arcType,p=o.clampToGround,A=o.granularity;if(!r.isConstant||!K.isConstant(u)||!K.isConstant(h)||!K.isConstant(A)||!K.isConstant(p)||!K.isConstant(a))this._dynamic||(this._dynamic=!0,this._geometryChanged.raiseEvent(this));else{let f=this._geometryOptions,b=r.getValue(qe.MINIMUM_VALUE,f.positions);if(!l(b)||b.length<2){this._fillEnabled&&(this._fillEnabled=!1,this._geometryChanged.raiseEvent(this));return}let C;d&&(!l(this._depthFailMaterialProperty)||this._depthFailMaterialProperty instanceof Kt)?C=Vs.VERTEX_FORMAT:C=tc.VERTEX_FORMAT,f.vertexFormat=C,f.positions=b,f.width=l(u)?u.getValue(qe.MINIMUM_VALUE):void 0,f.arcType=l(h)?h.getValue(qe.MINIMUM_VALUE):void 0,f.granularity=l(A)?A.getValue(qe.MINIMUM_VALUE):void 0;let T=this._groundGeometryOptions;T.positions=b,T.width=f.width,T.arcType=f.arcType,T.granularity=f.granularity,this._clampToGround=l(p)?p.getValue(qe.MINIMUM_VALUE):!1,!this._clampToGround&&l(a)&&_t("Entity polylines must have clampToGround: true when using zIndex. zIndex will be ignored."),this._dynamic=!1,this._geometryChanged.raiseEvent(this)}};Ef.prototype.createDynamicUpdater=function(e,t){return new TP(e,t,this)};var oZ={positions:void 0,granularity:void 0,height:void 0,ellipsoid:void 0};function TP(e,t,n){this._line=void 0,this._primitives=e,this._groundPrimitives=t,this._groundPolylinePrimitive=void 0,this._material=void 0,this._geometryUpdater=n,this._positions=[]}function Bye(e){if(l(e._line))return e._line;let t=e._primitives,n=e._geometryUpdater._scene.id+t._guid,i=x5[n];!l(i)||i.isDestroyed()?(i=new nf,x5[n]=i,t.add(i)):t.contains(i)||t.add(i);let o=i.add();return o.id=e._geometryUpdater._entity,e._line=o,o}TP.prototype.update=function(e){let t=this._geometryUpdater,n=t._entity,i=n.polyline,o=i.positions,r=K.getValueOrUndefined(o,e,this._positions);t._clampToGround=K.getValueOrDefault(i._clampToGround,e,!1),t._groundGeometryOptions.positions=r,t._groundGeometryOptions.width=K.getValueOrDefault(i._width,e,1),t._groundGeometryOptions.arcType=K.getValueOrDefault(i._arcType,e,un.GEODESIC),t._groundGeometryOptions.granularity=K.getValueOrDefault(i._granularity,e,9999);let s=this._groundPrimitives;if(l(this._groundPolylinePrimitive)&&(s.remove(this._groundPolylinePrimitive),this._groundPolylinePrimitive=void 0),t.clampToGround){if(!n.isShowing||!n.isAvailable(e)||!K.getValueOrDefault(i._show,e,!0)||!l(r)||r.length<2)return;let h=t.fillMaterialProperty,p;if(h instanceof Kt)p=new Vs;else{let A=Ir.getValue(e,h,this._material);p=new tc({material:A,translucent:A.isTranslucent()}),this._material=A}this._groundPolylinePrimitive=s.add(new Vh({geometryInstances:t.createFillGeometryInstance(e),appearance:p,classificationType:t.classificationTypeProperty.getValue(e),asynchronous:!1}),K.getValueOrUndefined(t.zIndex,e)),l(this._line)&&(this._line.show=!1);return}let a=Bye(this);if(!n.isShowing||!n.isAvailable(e)||!K.getValueOrDefault(i._show,e,!0)){a.show=!1;return}if(!l(r)||r.length<2){a.show=!1;return}let c=un.GEODESIC;c=K.getValueOrDefault(i._arcType,e,c);let d=t._scene.globe,u=t._scene.ellipsoid;c!==un.NONE&&l(d)&&(oZ.ellipsoid=u,oZ.positions=r,oZ.granularity=K.getValueOrUndefined(i._granularity,e),oZ.height=Ji.extractHeights(r,u),c===un.GEODESIC?r=Ji.generateCartesianArc(oZ):r=Ji.generateCartesianRhumbArc(oZ)),a.show=!0,a.positions=r.slice(),a.material=Ir.getValue(e,t.fillMaterialProperty,a.material),a.width=K.getValueOrDefault(i._width,e,1),a.distanceDisplayCondition=K.getValueOrUndefined(i._distanceDisplayCondition,e,a.distanceDisplayCondition)};TP.prototype.getBoundingSphere=function(e){if(this._geometryUpdater.clampToGround){let t=this._groundPolylinePrimitive;if(l(t)&&t.show&&t.ready){let n=t.getGeometryInstanceAttributes(this._geometryUpdater._entity);if(l(n)&&l(n.boundingSphere))return ue.clone(n.boundingSphere,e),Tt.DONE}return l(t)&&!t.ready?Tt.PENDING:Tt.DONE}else{let t=Bye(this);if(t.show&&t.positions.length>0)return ue.fromPoints(t.positions,e),Tt.DONE}return Tt.FAILED};TP.prototype.isDestroyed=function(){return!1};TP.prototype.destroy=function(){let t=this._geometryUpdater._scene.id+this._primitives._guid,n=x5[t];l(n)&&(n.remove(this._line),n.length===0&&(this._primitives.removeAndDestroy(n),delete x5[t])),l(this._groundPolylinePrimitive)&&this._groundPrimitives.remove(this._groundPolylinePrimitive),he(this)};var EP=Ef;var SFi=y(x(),1);var mut=new U,hut=new Dt,fut=new Dt;function Sf(e,t,n,i,o){let r;n instanceof Kt?r=Vs:r=tc,this.orderedGroundPrimitives=e,this.classificationType=t,this.appearanceType=r,this.materialProperty=n,this.updaters=new Xt,this.createPrimitive=!0,this.primitive=void 0,this.oldPrimitive=void 0,this.geometry=new Xt,this.material=void 0,this.updatersWithAttributes=new Xt,this.attributes=new Xt,this.invalidated=!1,this.removeMaterialSubscription=n.definitionChanged.addEventListener(Sf.prototype.onMaterialChanged,this),this.subscriptions=new Xt,this.showsUpdated=new Xt,this.zIndex=i,this._asynchronous=o}Sf.prototype.onMaterialChanged=function(){this.invalidated=!0};Sf.prototype.isMaterial=function(e){let t=this.materialProperty,n=e.fillMaterialProperty;return n===t||n instanceof Kt&&t instanceof Kt?!0:l(t)&&t.equals(n)};Sf.prototype.add=function(e,t,n){let i=t.id;if(this.updaters.set(i,t),this.geometry.set(i,n),!t.hasConstantFill||!t.fillMaterialProperty.isConstant||!K.isConstant(t.distanceDisplayConditionProperty))this.updatersWithAttributes.set(i,t);else{let o=this;this.subscriptions.set(i,t.entity.definitionChanged.addEventListener(function(r,s,a,c){s==="isShowing"&&o.showsUpdated.set(t.id,t)}))}this.createPrimitive=!0};Sf.prototype.remove=function(e){let t=e.id;if(this.createPrimitive=this.geometry.remove(t)||this.createPrimitive,this.updaters.remove(t)){this.updatersWithAttributes.remove(t);let n=this.subscriptions.get(t);return l(n)&&(n(),this.subscriptions.remove(t)),!0}return!1};Sf.prototype.update=function(e){let t=!0,n=this.primitive,i=this.orderedGroundPrimitives,o=this.geometry.values,r;if(this.createPrimitive){if(o.length>0){l(n)&&(l(this.oldPrimitive)?i.remove(n):this.oldPrimitive=n);let a=this.appearanceType;n=new Vh({show:!1,asynchronous:this._asynchronous,geometryInstances:o.slice(),appearance:new a,classificationType:this.classificationType}),this.appearanceType===tc&&(this.material=Ir.getValue(e,this.materialProperty,this.material),n.appearance.material=this.material),i.add(n,this.zIndex),t=!1}else{l(n)&&(i.remove(n),n=void 0);let a=this.oldPrimitive;l(a)&&(i.remove(a),this.oldPrimitive=void 0)}this.attributes.removeAll(),this.primitive=n,this.createPrimitive=!1}else if(l(n)&&n.ready){n.show=!0,l(this.oldPrimitive)&&(i.remove(this.oldPrimitive),this.oldPrimitive=void 0),this.appearanceType===tc&&(this.material=Ir.getValue(e,this.materialProperty,this.material),this.primitive.appearance.material=this.material);let s=this.updatersWithAttributes.values,a=s.length;for(r=0;r<a;r++){let c=s[r],d=c.entity,u=this.geometry.get(c.id),h=this.attributes.get(u.id.id);if(l(h)||(h=n.getGeometryInstanceAttributes(u.id),this.attributes.set(u.id.id,h)),!c.fillMaterialProperty.isConstant){let b=c.fillMaterialProperty.color,C=K.getValueOrDefault(b,e,U.WHITE,mut);U.equals(h._lastColor,C)||(h._lastColor=U.clone(C,h._lastColor),h.color=$t.toValue(C,h.color))}let p=d.isShowing&&(c.hasConstantFill||c.isFilled(e)),A=h.show[0]===1;p!==A&&(h.show=Rn.toValue(p,h.show));let f=c.distanceDisplayConditionProperty;if(!K.isConstant(f)){let b=K.getValueOrDefault(f,e,fut,hut);Dt.equals(b,h._lastDistanceDisplayCondition)||(h._lastDistanceDisplayCondition=Dt.clone(b,h._lastDistanceDisplayCondition),h.distanceDisplayCondition=ei.toValue(b,h.distanceDisplayCondition))}}this.updateShows(n)}else l(n)&&!n.ready&&(t=!1);return t};Sf.prototype.updateShows=function(e){let t=this.showsUpdated.values,n=t.length;for(let i=0;i<n;i++){let o=t[i],r=o.entity,s=this.geometry.get(o.id);if(!s)continue;let a=this.attributes.get(s.id.id);l(a)||(a=e.getGeometryInstanceAttributes(s.id),this.attributes.set(s.id.id,a));let c=r.isShowing,d=a.show[0]===1;c!==d&&(a.show=Rn.toValue(c,a.show),s.attributes.show.value[0]=a.show[0])}this.showsUpdated.removeAll()};Sf.prototype.contains=function(e){return this.updaters.contains(e.id)};Sf.prototype.getBoundingSphere=function(e,t){let n=this.primitive;if(!n.ready)return Tt.PENDING;let i=n.getGeometryInstanceAttributes(e.entity);return!l(i)||!l(i.boundingSphere)||l(i.show)&&i.show[0]===0?Tt.FAILED:(i.boundingSphere.clone(t),Tt.DONE)};Sf.prototype.destroy=function(){let e=this.primitive,t=this.orderedGroundPrimitives;l(e)&&t.remove(e);let n=this.oldPrimitive;l(n)&&t.remove(n),this.removeMaterialSubscription()};function rZ(e,t,n){this._items=[],this._orderedGroundPrimitives=e,this._classificationType=t,this._asynchronous=n??!0}rZ.prototype.add=function(e,t){let n=this._items,i=n.length,o=t.createFillGeometryInstance(e),r=K.getValueOrDefault(t.zIndex,0);for(let a=0;a<i;++a){let c=n[a];if(c.isMaterial(t)&&c.zIndex===r){c.add(e,t,o);return}}let s=new Sf(this._orderedGroundPrimitives,this._classificationType,t.fillMaterialProperty,r,this._asynchronous);s.add(e,t,o),n.push(s)};rZ.prototype.remove=function(e){let t=this._items,n=t.length;for(let i=n-1;i>=0;i--){let o=t[i];if(o.remove(e)){o.updaters.length===0&&(t.splice(i,1),o.destroy());break}}};rZ.prototype.update=function(e){let t,n=this._items,i=n.length;for(t=i-1;t>=0;t--){let r=n[t];if(r.invalidated){n.splice(t,1);let s=r.updaters.values,a=s.length;for(let c=0;c<a;c++)this.add(e,s[c]);r.destroy()}}let o=!0;for(t=0;t<n.length;t++)o=n[t].update(e)&&o;return o};rZ.prototype.getBoundingSphere=function(e,t){let n=this._items,i=n.length;for(let o=0;o<i;o++){let r=n[o];if(r.contains(e))return r.getBoundingSphere(e,t)}return Tt.FAILED};rZ.prototype.removeAllPrimitives=function(){let e=this._items,t=e.length;for(let n=0;n<t;n++)e[n].destroy();this._items.length=0};var SP=rZ;var put=[];function wye(e,t){let n=e._batches,i=n.length;for(let o=0;o<i;o++)n[o].remove(t)}function Nye(e,t,n){if(n.isDynamic){e._dynamicBatch.add(t,n);return}if(n.clampToGround&&n.fillEnabled){let s=n.classificationTypeProperty.getValue(t);e._groundBatches[s].add(t,n);return}let i;n.fillEnabled&&(i=n.shadowsProperty.getValue(t));let o=0;l(n.depthFailMaterialProperty)&&(o=n.depthFailMaterialProperty instanceof Kt?1:2);let r;l(i)&&(r=i+o*Vn.NUMBER_OF_SHADOW_MODES),n.fillEnabled&&(n.fillMaterialProperty instanceof Kt?e._colorBatches[r].add(t,n):e._materialBatches[r].add(t,n))}function Yp(e,t,n,i){i=i??e.groundPrimitives,n=n??e.primitives,this._scene=e,this._primitives=n,this._entityCollection=void 0,this._addedObjects=new Xt,this._removedObjects=new Xt,this._changedObjects=new Xt;let o,r=Vn.NUMBER_OF_SHADOW_MODES;for(this._colorBatches=new Array(r*3),this._materialBatches=new Array(r*3),o=0;o<r;++o)this._colorBatches[o]=new Jm(n,Vs,void 0,!1,o),this._materialBatches[o]=new Km(n,tc,void 0,!1,o),this._colorBatches[o+r]=new Jm(n,Vs,Vs,!1,o),this._materialBatches[o+r]=new Km(n,tc,Vs,!1,o),this._colorBatches[o+r*2]=new Jm(n,Vs,tc,!1,o),this._materialBatches[o+r*2]=new Km(n,tc,tc,!1,o);this._dynamicBatch=new CT(n,i);let s=ti.NUMBER_OF_CLASSIFICATION_TYPES;for(this._groundBatches=new Array(s),o=0;o<s;++o)this._groundBatches[o]=new SP(i,o);this._batches=this._colorBatches.concat(this._materialBatches,this._dynamicBatch,this._groundBatches),this._subscriptions=new Xt,this._updaters=new Xt,this._entityCollection=t,t.collectionChanged.addEventListener(Yp.prototype._onCollectionChanged,this),this._onCollectionChanged(t,t.values,put)}Yp.prototype.update=function(e){let t=this._addedObjects,n=t.values,i=this._removedObjects,o=i.values,r=this._changedObjects,s=r.values,a,c,d,u;for(a=s.length-1;a>-1;a--)c=s[a],d=c.id,u=this._updaters.get(d),u.entity===c?(wye(this,u),Nye(this,e,u)):(o.push(c),n.push(c));for(a=o.length-1;a>-1;a--)c=o[a],d=c.id,u=this._updaters.get(d),wye(this,u),u.destroy(),this._updaters.remove(d),this._subscriptions.get(d)(),this._subscriptions.remove(d);for(a=n.length-1;a>-1;a--)c=n[a],d=c.id,u=new EP(c,this._scene),this._updaters.set(d,u),Nye(this,e,u),this._subscriptions.set(d,u.geometryChanged.addEventListener(Yp._onGeometryChanged,this));t.removeAll(),i.removeAll(),r.removeAll();let h=!0,p=this._batches,A=p.length;for(a=0;a<A;a++)h=p[a].update(e)&&h;return h};var Aut=[],gut=new ue;Yp.prototype.getBoundingSphere=function(e,t){let n=Aut,i=gut,o=0,r=Tt.DONE,s=this._batches,a=s.length,c=this._updaters.get(e.id);if(!c)return Tt.FAILED;for(let d=0;d<a;d++){if(r=s[d].getBoundingSphere(c,i),r===Tt.PENDING)return Tt.PENDING;r===Tt.DONE&&(n[o]=ue.clone(i,n[o]),o++)}return o===0?Tt.FAILED:(n.length=o,ue.fromBoundingSpheres(n,t),Tt.DONE)};Yp.prototype.isDestroyed=function(){return!1};Yp.prototype.destroy=function(){this._entityCollection.collectionChanged.removeEventListener(Yp.prototype._onCollectionChanged,this),this._addedObjects.removeAll(),this._removedObjects.removeAll();let e,t=this._batches,n=t.length;for(e=0;e<n;e++)t[e].removeAllPrimitives();let i=this._subscriptions.values;for(n=i.length,e=0;e<n;e++)i[e]();return this._subscriptions.removeAll(),he(this)};Yp._onGeometryChanged=function(e){let t=this._removedObjects,n=this._changedObjects,i=e.entity,o=i.id;!l(t.get(o))&&!l(n.get(o))&&n.set(o,i)};Yp.prototype._onCollectionChanged=function(e,t,n){let i=this._addedObjects,o=this._removedObjects,r=this._changedObjects,s,a,c;for(s=n.length-1;s>-1;s--)c=n[s],a=c.id,i.remove(a)||(o.set(a,c),r.remove(a));for(s=t.length-1;s>-1;s--)c=t[s],a=c.id,o.remove(a)?r.set(a,c):i.set(a,c)};var _P=Yp;function wd(e){_l.initializeTerrainHeights(),Vh.initializeTerrainHeights();let t=e.scene,n=e.dataSourceCollection;this._eventHelper=new Xr,this._eventHelper.add(n.dataSourceAdded,this._onDataSourceAdded,this),this._eventHelper.add(n.dataSourceRemoved,this._onDataSourceRemoved,this),this._eventHelper.add(n.dataSourceMoved,this._onDataSourceMoved,this),this._eventHelper.add(t.postRender,this._postRender,this),this._dataSourceCollection=n,this._scene=t,this._visualizersCallback=e.visualizersCallback??wd.defaultVisualizersCallback;let i=!1,o=new $l,r=new $l;n.length>0&&(t.primitives.add(o),t.groundPrimitives.add(r),i=!0),this._primitives=o,this._groundPrimitives=r;for(let d=0,u=n.length;d<u;d++)this._onDataSourceAdded(n,n.get(d));let s=new EN;this._onDataSourceAdded(void 0,s),this._defaultDataSource=s;let a,c;if(!i){let d=this,u=function(){t.primitives.add(o),t.groundPrimitives.add(r),a(),c(),d._removeDefaultDataSourceListener=void 0,d._removeDataSourceCollectionListener=void 0};a=s.entities.collectionChanged.addEventListener(u),c=n.dataSourceAdded.addEventListener(u)}this._removeDefaultDataSourceListener=a,this._removeDataSourceCollectionListener=c,this._ready=!1}var sZ=[];wd.registerVisualizer=function(e){sZ.includes(e)||sZ.push(e)};wd.unregisterVisualizer=function(e){if(sZ.includes(e)){let t=sZ.indexOf(e);sZ.splice(t,1)}};wd.defaultVisualizersCallback=function(e,t,n){let i=n.entities;return[new e1(t,i),new hP(e,i,n._primitives,n._groundPrimitives),new fP(t,i),new pP(e,i),new mN(e,i),new xP(t,i),new bP(e,i),new _P(e,i,n._primitives,n._groundPrimitives),...sZ.map(o=>new o(e,i))]};Object.defineProperties(wd.prototype,{scene:{get:function(){return this._scene}},dataSources:{get:function(){return this._dataSourceCollection}},defaultDataSource:{get:function(){return this._defaultDataSource}},ready:{get:function(){return this._ready}}});wd.prototype.isDestroyed=function(){return!1};wd.prototype.destroy=function(){this._eventHelper.removeAll();let e=this._dataSourceCollection;for(let t=0,n=e.length;t<n;++t)this._onDataSourceRemoved(this._dataSourceCollection,e.get(t));return this._onDataSourceRemoved(void 0,this._defaultDataSource),l(this._removeDefaultDataSourceListener)?(this._removeDefaultDataSourceListener(),this._removeDataSourceCollectionListener()):(this._scene.primitives.remove(this._primitives),this._scene.groundPrimitives.remove(this._groundPrimitives)),he(this)};wd.prototype.update=function(e){if(!Gi.initialized)return this._ready=!1,!1;let t=!0,n,i,o,r,s=this._dataSourceCollection,a=s.length;for(n=0;n<a;n++){let c=s.get(n);for(l(c.update)&&(t=c.update(e)&&t),o=c._visualizers,r=o.length,i=0;i<r;i++)t=o[i].update(e)&&t}for(o=this._defaultDataSource._visualizers,r=o.length,i=0;i<r;i++)t=o[i].update(e)&&t;return!this._ready&&t&&this._scene.requestRender(),this._ready=this._ready||t,t};wd.prototype._postRender=function(){let e=this._scene.frameState,t=this._dataSourceCollection,n=t.length;for(let i=0;i<n;i++){let o=t.get(i),r=o.credit;l(r)&&e.creditDisplay.addCreditToNextFrame(r);let s=o._resourceCredits;if(l(s)){let a=s.length;for(let c=0;c<a;c++)e.creditDisplay.addCreditToNextFrame(s[c])}}};var but=[],yut=new ue;wd.prototype.getBoundingSphere=function(e,t,n){if(!this._ready)return Tt.PENDING;let i,o,r=this._defaultDataSource;if(!r.entities.contains(e)){r=void 0;let p=this._dataSourceCollection;for(o=p.length,i=0;i<o;i++){let A=p.get(i);if(A.entities.contains(e)){r=A;break}}}if(!l(r))return Tt.FAILED;let s=but,a=yut,c=0,d=Tt.DONE,u=r._visualizers,h=u.length;for(i=0;i<h;i++){let p=u[i];if(l(p.getBoundingSphere)){if(d=u[i].getBoundingSphere(e,a),!t&&d===Tt.PENDING)return Tt.PENDING;d===Tt.DONE&&(s[c]=ue.clone(a,s[c]),c++)}}return c===0?Tt.FAILED:(s.length=c,ue.fromBoundingSpheres(s,n),Tt.DONE)};wd.prototype._onDataSourceAdded=function(e,t){let n=this._scene,i=this._primitives,o=this._groundPrimitives,r=i.add(new $l),s=o.add(new XN);t._primitives=r,t._groundPrimitives=s;let a=t.clustering;a._initialize(n),r.add(a),t._visualizers=this._visualizersCallback(n,a,t)};wd.prototype._onDataSourceRemoved=function(e,t){let n=this._primitives,i=this._groundPrimitives,o=t._primitives,r=t._groundPrimitives,s=t.clustering;o.remove(s);let a=t._visualizers,c=a.length;for(let d=0;d<c;d++)a[d].destroy();n.remove(o),i.remove(r),t._visualizers=void 0};wd.prototype._onDataSourceMoved=function(e,t,n){let i=this._primitives,o=this._groundPrimitives,r=e._primitives,s=e._groundPrimitives;t===n+1?(i.raise(r),o.raise(s)):t===n-1?(i.lower(r),o.lower(s)):t===0?(i.lowerToBottom(r),o.lowerToBottom(s),i.raise(r),o.raise(s)):(i.raiseToTop(r),o.raiseToTop(s))};var IP=wd;var I2i=y(x(),1);var u2i=y(x(),1);function L7(e,t,n){this.heading=e??0,this.pitch=t??0,this.range=n??0}L7.clone=function(e,t){if(l(e))return l(t)||(t=new L7),t.heading=e.heading,t.pitch=e.pitch,t.range=e.range,t};var jm=L7;var Pye=new $,Xye=new $,Yye=new $,xut=new F,C5=new m,Mye=new m,W7=new m,F7=new m,vye=new m,Uye=new m,Cut=new Me,Tut=new m,Eut=new $,aZ=new q,Sut=1.25;function _ut(e,t,n,i,o,r,s,a,c,d){let u=e.scene.mode,h=o.getValue(c,e._lastCartesian);if(l(h)){let p=!1,A=!1,f,b,C;if(u===se.SCENE3D){q.addSeconds(c,.001,aZ);let W=o.getValue(aZ,C5);if(l(W)||(q.addSeconds(c,-.001,aZ),W=o.getValue(aZ,C5),A=!0),l(W)){let B=bt.computeFixedToIcrfMatrix(c,Pye),N=bt.computeFixedToIcrfMatrix(aZ,Xye),P;!l(B)||!l(N)?(P=bt.computeTemeToPseudoFixedMatrix(c,Yye),B=$.transpose(P,Pye),N=bt.computeTemeToPseudoFixedMatrix(aZ,Xye),$.transpose(N,N)):P=$.transpose(B,Yye);let g=$.multiplyByVector(B,h,vye),_=$.multiplyByVector(N,W,Uye);m.subtract(g,_,F7);let Z=m.magnitude(F7)*1e3,G=L.GRAVITATIONALPARAMETER,w=-G/(Z*Z-2*G/m.magnitude(g));w<0||w>Sut*d.maximumRadius?(f=Mye,m.normalize(h,f),m.negate(f,f),C=m.clone(m.UNIT_Z,W7),b=m.cross(C,f,C5),m.magnitude(b)>L.EPSILON7&&(m.normalize(f,f),m.normalize(b,b),C=m.cross(f,b,W7),m.normalize(C,C),p=!0)):m.equalsEpsilon(h,W,L.EPSILON7)||(C=Mye,m.normalize(g,C),m.normalize(_,_),b=m.cross(C,_,W7),A&&(b=m.multiplyByScalar(b,-1,b)),m.equalsEpsilon(b,m.ZERO,L.EPSILON7)||(f=m.cross(b,C,C5),$.multiplyByVector(P,f,f),$.multiplyByVector(P,b,b),$.multiplyByVector(P,C,C),m.normalize(f,f),m.normalize(b,b),m.normalize(C,C),p=!0))}}l(e.boundingSphere)&&(h=e.boundingSphere.center);let T,E,S;i&&(T=m.clone(t.position,F7),E=m.clone(t.direction,vye),S=m.clone(t.up,Uye));let I=xut,R;l(s)&&(R=s.getValue(c,Cut));let V=r.getValue(c,Tut);if(a===wA.INERTIAL&&l(R))F.fromTranslationQuaternionRotationScale(h,R,m.ONE,I);else if(a===wA.VELOCITY&&l(V)){let W=bt.rotationMatrixFromPositionVelocity(h,V,d,Eut);F.fromRotationTranslation(W,h,I)}else a===wA.ENU||!p?bt.eastNorthUpToFixedFrame(h,d,I):(I[0]=f.x,I[1]=f.y,I[2]=f.z,I[3]=0,I[4]=b.x,I[5]=b.y,I[6]=b.z,I[7]=0,I[8]=C.x,I[9]=C.y,I[10]=C.z,I[11]=0,I[12]=h.x,I[13]=h.y,I[14]=h.z,I[15]=0);t._setTransform(I),i&&(m.clone(T,t.position),m.clone(E,t.direction),m.clone(S,t.up),m.cross(E,S,t.right))}if(n){let p=u===se.SCENE2D||m.equals(e._offset3D,m.ZERO)?void 0:e._offset3D;t.lookAtTransform(t.transform,p)}}function ZP(e,t,n){this.entity=e,this.scene=t,this.ellipsoid=n??ie.default,this.boundingSphere=void 0,this._lastEntity=void 0,this._mode=void 0,this._lastCartesian=new m,this._defaultOffset3D=void 0,this._velocityProperty=new tb(e.position,!0),this._offset3D=new m}Object.defineProperties(ZP,{defaultOffset3D:{get:function(){return this._defaultOffset3D},set:function(e){this._defaultOffset3D=m.clone(e,new m)}}});ZP.defaultOffset3D=new m(-14e3,3500,3500);var NT=new jm,Iut=new m;ZP.prototype.update=function(e,t){let n=this.scene,i=this.ellipsoid,o=n.mode;if(o===se.MORPHING)return;let r=this.entity,s=r.trackingReferenceFrame,a=r.position;if(!l(a))return;let c=this._velocityProperty,d=r.orientation,u=r!==this._lastEntity,h=o!==this._mode,p=n.camera,A=u||h,f=!0;if(u){let b=r.viewFrom,C=l(b);if(!C&&l(t)){NT.pitch=-L.PI_OVER_FOUR,NT.range=0;let T=a.getValue(e,Iut);if(l(T))if(p.getCameraDistance)NT.range=p.getCameraDistance(),NT.heading=p.heading,NT.pitch=p.pitch;else{let E=2-1/Math.max(1,m.magnitude(T)/i.maximumRadius);NT.pitch*=E}p.viewBoundingSphere(t,NT),this.boundingSphere=t,A=!1,f=!1}else(!C||!l(b.getValue(e,this._offset3D)))&&m.clone(ZP._defaultOffset3D,this._offset3D)}else!h&&this._mode!==se.SCENE2D&&m.clone(p.position,this._offset3D);this._lastEntity=r,this._mode=o,_ut(this,p,A,f,a,c,d,s,e,i)};var RP=ZP;var dNi=y(x(),1);var Zwi=y(x(),1);var L2i=y(x(),1);var R2i=y(x(),1);var B7=new Date(2107,11,31),w7=new Date(1980,0,1),oi=void 0,Bu="undefined",_f="function";var Zut=64,Dye=2;try{typeof navigator!=Bu&&navigator.hardwareConcurrency&&(Dye=navigator.hardwareConcurrency)}catch{}var Rut={workerURI:"./core/web-worker.js",wasmURI:"./core/streams/zlib/zlib-streams.wasm",chunkSize:64*1024,maxWorkers:Dye,terminateWorkerTimeout:5e3,useWebWorkers:!0,useCompressionStream:!0,CompressionStream:typeof CompressionStream!=Bu&&CompressionStream,DecompressionStream:typeof DecompressionStream!=Bu&&DecompressionStream},kye=Object.assign({},Rut);function VP(){return kye}function T5(e){return Math.max(e.chunkSize,Zut)}function cZ(e){let{baseURI:t,chunkSize:n,maxWorkers:i,terminateWorkerTimeout:o,useCompressionStream:r,useWebWorkers:s,CompressionStream:a,DecompressionStream:c,CompressionStreamZlib:d,DecompressionStreamZlib:u,workerURI:h,wasmURI:p}=e;qm("baseURI",t),qm("wasmURI",p),qm("workerURI",h),qm("chunkSize",n),qm("maxWorkers",i),qm("terminateWorkerTimeout",o),qm("useCompressionStream",r),qm("useWebWorkers",s),qm("CompressionStream",a),qm("DecompressionStream",c),qm("CompressionStreamZlib",d),qm("DecompressionStreamZlib",u)}function qm(e,t){t!==oi&&(kye[e]=t)}var N2i=y(x(),1);var F2i=y(x(),1),$s,E5,If,N7;function P7(e){$s=e,{malloc:E5,free:If,memory:N7}=$s}function Qye(e,t,n={}){let i=typeof n.level=="number"?n.level:-1,o=typeof n.outBuffer=="number"?n.outBuffer:64*1024,r=typeof n.inBufferSize=="number"?n.inBufferSize:64*1024;return new TransformStream({start(){let s;if(this.out=E5(o),this.in=E5(r),this.inBufferSize=r,this._scratch=new Uint8Array(o),e?(this._process=$s.deflate_process,this._last_consumed=$s.deflate_last_consumed,this._end=$s.deflate_end,this.streamHandle=$s.deflate_new(),t==="gzip"?s=$s.deflate_init_gzip(this.streamHandle,i):t==="deflate-raw"?s=$s.deflate_init_raw(this.streamHandle,i):s=$s.deflate_init(this.streamHandle,i)):t==="deflate64-raw"?(this._process=$s.inflate9_process,this._last_consumed=$s.inflate9_last_consumed,this._end=$s.inflate9_end,this.streamHandle=$s.inflate9_new(),s=$s.inflate9_init_raw(this.streamHandle)):(this._process=$s.inflate_process,this._last_consumed=$s.inflate_last_consumed,this._end=$s.inflate_end,this.streamHandle=$s.inflate_new(),t==="deflate-raw"?s=$s.inflate_init_raw(this.streamHandle):t==="gzip"?s=$s.inflate_init_gzip(this.streamHandle):s=$s.inflate_init(this.streamHandle)),s!==0)throw new Error("init failed:"+s)},transform(s,a){try{let c=s,d=new Uint8Array(N7.buffer),u=this._process,h=this._last_consumed,p=this.out,A=this._scratch,f=0;for(;f<c.length;){let b=Math.min(c.length-f,32768);(!this.in||this.inBufferSize<b)&&(this.in&&If&&If(this.in),this.in=E5(b),this.inBufferSize=b),d.set(c.subarray(f,f+b),this.in);let C=u(this.streamHandle,this.in,b,p,o,0);if(!e&&C<0)throw new Error("process error:"+C);let T=C&16777215;T&&(A.set(d.subarray(p,p+T),0),a.enqueue(A.slice(0,T)));let E=h(this.streamHandle);if(E===0)break;f+=E}}catch(c){this._end&&this.streamHandle&&this._end(this.streamHandle),this.in&&If&&If(this.in),this.out&&If&&If(this.out),a.error(c)}},flush(s){try{let a=new Uint8Array(N7.buffer),c=this._process,d=this.out,u=this._scratch;for(;;){let h=c(this.streamHandle,0,0,d,o,4);if(!e&&h<0)throw new Error("process error:"+h);let p=h&16777215,A=h>>24&255;if(p&&(u.set(a.subarray(d,d+p),0),s.enqueue(u.slice(0,p))),A===1||p===0)break}}catch(a){s.error(a)}finally{if(this._end&&this.streamHandle){let a=this._end(this.streamHandle);a!==0&&s.error(new Error("end error:"+a))}this.in&&If&&If(this.in),this.out&&If&&If(this.out)}}})}var GP=class{constructor(t="deflate",n){return Qye(!0,t,n)}},LP=class{constructor(t="deflate",n){return Qye(!1,t,n)}};var S5=!1;async function Oye(e,{baseURI:t}){if(!S5){let n,i;try{try{i=new URL(e,t)}catch{}n=await(await fetch(i)).arrayBuffer()}catch(r){if(e.startsWith("data:application/wasm;base64,"))n=Vut(e);else throw r}let o=await WebAssembly.instantiate(n);P7(o.instance.exports),S5=!0}}function Vut(e){let t=e.split(",")[1],n=atob(t),i=n.length,o=new Uint8Array(i);for(let r=0;r<i;++r)o[r]=n.charCodeAt(r);return o.buffer}var v2i=y(x(),1);var Gut="Writer iterator completed too soon",Lut="Writer not initialized",Wut="text/plain";var Fut="Content-Type";var But=64*1024,X7="writable",lZ=class{constructor(){this.size=0}init(){this.initialized=!0}},WP=class extends lZ{get readable(){let t=this,{chunkSize:n=But}=t,i=new ReadableStream({start(){this.chunkOffset=0},async pull(o){let{offset:r=0,size:s,diskNumberStart:a}=i,{chunkOffset:c}=this,d=s===oi?n:Math.min(n,s-c),u=await uc(t,r+c,d,a);o.enqueue(u),c+n>s||s===oi&&!u.length&&d?o.close():this.chunkOffset+=n}});return i}},_5=class extends lZ{constructor(){super();let t=this,n=new WritableStream({write(i){if(!t.initialized)throw new Error(Lut);return t.writeUint8Array(i)}});Object.defineProperty(t,X7,{get(){return n}})}writeUint8Array(){}};var FP=class extends _5{constructor(t){super(),Object.assign(this,{data:"data:"+(t||"")+";base64,",pending:[]})}writeUint8Array(t){let n=this,i=0,o=n.pending,r=n.pending.length;for(n.pending="",i=0;i<Math.floor((r+t.length)/3)*3-r;i++)o+=String.fromCharCode(t[i]);for(;i<t.length;i++)n.pending+=String.fromCharCode(t[i]);o.length&&(o.length>2?n.data+=btoa(o):n.pending+=o)}getData(){return this.data+btoa(this.pending)}},Mp=class extends WP{constructor(t){super(),Object.assign(this,{blob:t,size:t.size})}async readUint8Array(t,n){let i=this,o=t+n,s=await(t||o<i.size?i.blob.slice(t,o):i.blob).arrayBuffer();return s.byteLength>n&&(s=s.slice(t,o)),new Uint8Array(s)}},dZ=class extends lZ{constructor(t){super();let n=this,i=new TransformStream,o=[];t&&o.push([Fut,t]),Object.defineProperty(n,X7,{get(){return i.writable}}),n.blob=new Response(i.readable,{headers:o}).blob()}getData(){return this.blob}},BP=class extends Mp{constructor(t){super(new Blob([t],{type:Wut}))}},wP=class extends dZ{constructor(t){super(t),Object.assign(this,{encoding:t,utf8:!t||t.toLowerCase()=="utf-8"})}async getData(){let{encoding:t,utf8:n}=this,i=await super.getData();if(i.text&&n)return i.text();{let o=new FileReader;return new Promise((r,s)=>{Object.assign(o,{onload:({target:a})=>r(a.result),onerror:()=>s(o.error)}),o.readAsText(i,t)})}}};var I5=class extends WP{constructor(t){super(),this.readers=t}async init(){let t=this,{readers:n}=t;t.lastDiskNumber=0,t.lastDiskOffset=0,await Promise.all(n.map(async(i,o)=>{await i.init(),o!=n.length-1&&(t.lastDiskOffset+=i.size),t.size+=i.size})),super.init()}async readUint8Array(t,n,i=0){let o=this,{readers:r}=this,s,a=i;a==-1&&(a=r.length-1);let c=t;for(;r[a]&&c>=r[a].size;)c-=r[a].size,a++;let d=r[a];if(d){let u=d.size;if(c+n<=u)s=await uc(d,c,n);else{let h=u-c;s=new Uint8Array(n);let p=await uc(d,c,h);s.set(p,0);let A=await o.readUint8Array(t+h,n-h,i);s.set(A,h),p.length+A.length<n&&(s=s.subarray(0,p.length+A.length))}}else s=new Uint8Array;return o.lastDiskNumber=Math.max(a,o.lastDiskNumber),s}},NP=class extends lZ{constructor(t,n=4294967295){super();let i=this;Object.assign(i,{diskNumber:0,diskOffset:0,size:0,maxSize:n,availableSize:n});let o,r,s,a=new WritableStream({async write(u){let{availableSize:h}=i;if(s)u.length>=h?(await c(u.subarray(0,h)),await d(),i.diskOffset+=o.size,i.diskNumber++,s=null,await this.write(u.subarray(h))):await c(u);else{let{value:p,done:A}=await t.next();if(A&&!p)throw new Error(Gut);o=p,o.size=0,o.maxSize&&(i.maxSize=o.maxSize),i.availableSize=i.maxSize,await Up(o),r=p.writable,s=r.getWriter(),await this.write(u)}},async close(){await s.ready,await d()}});Object.defineProperty(i,X7,{get(){return a}});async function c(u){let h=u.length;h&&(await s.ready,await s.write(u),o.size+=h,i.size+=h,i.availableSize-=h)}async function d(){await s.close()}}},PT=class{constructor(t){return Array.isArray(t)&&(t=new I5(t)),t instanceof ReadableStream&&(t={readable:t}),t}},uZ=class{constructor(t){return t.writable===oi&&typeof t.next==_f&&(t=new NP(t)),t instanceof WritableStream&&(t={writable:t}),t.size===oi&&(t.size=0),t instanceof NP||Object.assign(t,{diskNumber:0,diskOffset:0,availableSize:1/0,maxSize:1/0}),t}};async function Up(e,t){if(e.init&&!e.initialized)await e.init(t);else return Promise.resolve()}function uc(e,t,n,i){return e.readUint8Array(t,n,i)}var twi=y(x(),1);var NBi=y(x(),1);var _Bi=y(x(),1);var CBi=y(x(),1);var O2i=y(x(),1);var D2i=y(x(),1),zye=[];for(let e=0;e<256;e++){let t=e;for(let n=0;n<8;n++)t&1?t=t>>>1^3988292384:t=t>>>1;zye[e]=t}var cb=class{constructor(t){this.crc=t||-1}append(t){let n=this.crc|0;for(let i=0,o=t.length|0;i<o;i++)n=n>>>8^zye[(n^t[i])&255];this.crc=n}get(){return~this.crc}};var PP=class extends TransformStream{constructor(){let t,n=new cb;super({transform(i,o){n.append(i),o.enqueue(i)},flush(){let i=new Uint8Array(4);new DataView(i.buffer).setUint32(0,n.get()),t.value=i}}),t=this}};var uBi=y(x(),1);var J2i=y(x(),1);function mZ(e){if(typeof TextEncoder==Bu){e=unescape(encodeURIComponent(e));let t=new Uint8Array(e.length);for(let n=0;n<t.length;n++)t[n]=e.charCodeAt(n);return t}else return new TextEncoder().encode(e)}var j2i=y(x(),1),td={concat(e,t){if(e.length===0||t.length===0)return e.concat(t);let n=e[e.length-1],i=td.getPartial(n);return i===32?e.concat(t):td._shiftRight(t,i,n|0,e.slice(0,e.length-1))},bitLength(e){let t=e.length;if(t===0)return 0;let n=e[t-1];return(t-1)*32+td.getPartial(n)},clamp(e,t){if(e.length*32<t)return e;e=e.slice(0,Math.ceil(t/32));let n=e.length;return t=t&31,n>0&&t&&(e[n-1]=td.partial(t,e[n-1]&2147483648>>t-1,1)),e},partial(e,t,n){return e===32?t:(n?t|0:t<<32-e)+e*1099511627776},getPartial(e){return Math.round(e/1099511627776)||32},_shiftRight(e,t,n,i){for(i===void 0&&(i=[]);t>=32;t-=32)i.push(n),n=0;if(t===0)return i.concat(e);for(let s=0;s<e.length;s++)i.push(n|e[s]>>>t),n=e[s]<<32-t;let o=e.length?e[e.length-1]:0,r=td.getPartial(o);return i.push(td.partial(t+r&31,t+r>32?n:i.pop(),1)),i}},XP={bytes:{fromBits(e){let n=td.bitLength(e)/8,i=new Uint8Array(n),o;for(let r=0;r<n;r++)(r&3)===0&&(o=e[r/4]),i[r]=o>>>24,o<<=8;return i},toBits(e){let t=[],n,i=0;for(n=0;n<e.length;n++)i=i<<8|e[n],(n&3)===3&&(t.push(i),i=0);return n&3&&t.push(td.partial(8*(n&3),i)),t}}},Hye={};Hye.sha1=class{constructor(e){let t=this;t.blockSize=512,t._init=[1732584193,4023233417,2562383102,271733878,3285377520],t._key=[1518500249,1859775393,2400959708,3395469782],e?(t._h=e._h.slice(0),t._buffer=e._buffer.slice(0),t._length=e._length):t.reset()}reset(){let e=this;return e._h=e._init.slice(0),e._buffer=[],e._length=0,e}update(e){let t=this;typeof e=="string"&&(e=XP.utf8String.toBits(e));let n=t._buffer=td.concat(t._buffer,e),i=t._length,o=t._length=i+td.bitLength(e);if(o>9007199254740991)throw new Error("Cannot hash more than 2^53 - 1 bits");let r=new Uint32Array(n),s=0;for(let a=t.blockSize+i-(t.blockSize+i&t.blockSize-1);a<=o;a+=t.blockSize)t._block(r.subarray(16*s,16*(s+1))),s+=1;return n.splice(0,16*s),t}finalize(){let e=this,t=e._buffer,n=e._h;t=td.concat(t,[td.partial(1,1)]);for(let i=t.length+2;i&15;i++)t.push(0);for(t.push(Math.floor(e._length/4294967296)),t.push(e._length|0);t.length;)e._block(t.splice(0,16));return e.reset(),n}_f(e,t,n,i){if(e<=19)return t&n|~t&i;if(e<=39)return t^n^i;if(e<=59)return t&n|t&i|n&i;if(e<=79)return t^n^i}_S(e,t){return t<<e|t>>>32-e}_block(e){let t=this,n=t._h,i=Array(80);for(let d=0;d<16;d++)i[d]=e[d];let o=n[0],r=n[1],s=n[2],a=n[3],c=n[4];for(let d=0;d<=79;d++){d>=16&&(i[d]=t._S(1,i[d-3]^i[d-8]^i[d-14]^i[d-16]));let u=t._S(5,o)+t._f(d,r,s,a)+c+i[d]+t._key[Math.floor(d/20)]|0;c=a,a=s,s=t._S(30,r),r=o,o=u}n[0]=n[0]+o|0,n[1]=n[1]+r|0,n[2]=n[2]+s|0,n[3]=n[3]+a|0,n[4]=n[4]+c|0}};var Y7={};Y7.aes=class{constructor(e){let t=this;t._tables=[[[],[],[],[],[]],[[],[],[],[],[]]],t._tables[0][0][0]||t._precompute();let n=t._tables[0][4],i=t._tables[1],o=e.length,r,s,a,c=1;if(o!==4&&o!==6&&o!==8)throw new Error("invalid aes key size");for(t._key=[s=e.slice(0),a=[]],r=o;r<4*o+28;r++){let d=s[r-1];(r%o===0||o===8&&r%o===4)&&(d=n[d>>>24]<<24^n[d>>16&255]<<16^n[d>>8&255]<<8^n[d&255],r%o===0&&(d=d<<8^d>>>24^c<<24,c=c<<1^(c>>7)*283)),s[r]=s[r-o]^d}for(let d=0;r;d++,r--){let u=s[d&3?r:r-4];r<=4||d<4?a[d]=u:a[d]=i[0][n[u>>>24]]^i[1][n[u>>16&255]]^i[2][n[u>>8&255]]^i[3][n[u&255]]}}encrypt(e){return this._crypt(e,0)}decrypt(e){return this._crypt(e,1)}_precompute(){let e=this._tables[0],t=this._tables[1],n=e[4],i=t[4],o=[],r=[],s,a,c,d;for(let u=0;u<256;u++)r[(o[u]=u<<1^(u>>7)*283)^u]=u;for(let u=s=0;!n[u];u^=a||1,s=r[s]||1){let h=s^s<<1^s<<2^s<<3^s<<4;h=h>>8^h&255^99,n[u]=h,i[h]=u,d=o[c=o[a=o[u]]];let p=d*16843009^c*65537^a*257^u*16843008,A=o[h]*257^h*16843008;for(let f=0;f<4;f++)e[f][u]=A=A<<24^A>>>8,t[f][h]=p=p<<24^p>>>8}for(let u=0;u<5;u++)e[u]=e[u].slice(0),t[u]=t[u].slice(0)}_crypt(e,t){if(e.length!==4)throw new Error("invalid aes block size");let n=this._key[t],i=n.length/4-2,o=[0,0,0,0],r=this._tables[t],s=r[0],a=r[1],c=r[2],d=r[3],u=r[4],h=e[0]^n[0],p=e[t?3:1]^n[1],A=e[2]^n[2],f=e[t?1:3]^n[3],b=4,C,T,E;for(let S=0;S<i;S++)C=s[h>>>24]^a[p>>16&255]^c[A>>8&255]^d[f&255]^n[b],T=s[p>>>24]^a[A>>16&255]^c[f>>8&255]^d[h&255]^n[b+1],E=s[A>>>24]^a[f>>16&255]^c[h>>8&255]^d[p&255]^n[b+2],f=s[f>>>24]^a[h>>16&255]^c[p>>8&255]^d[A&255]^n[b+3],b+=4,h=C,p=T,A=E;for(let S=0;S<4;S++)o[t?3&-S:S]=u[h>>>24]<<24^u[p>>16&255]<<16^u[A>>8&255]<<8^u[f&255]^n[b++],C=h,h=p,p=A,A=f,f=C;return o}};var Jye={getRandomValues(e){let t=new Uint32Array(e.buffer),n=i=>{let o=987654321,r=4294967295;return function(){return o=36969*(o&65535)+(o>>16)&r,i=18e3*(i&65535)+(i>>16)&r,(((o<<16)+i&r)/4294967296+.5)*(Math.random()>.5?1:-1)}};for(let i=0,o;i<e.length;i+=4){let r=n((o||Math.random())*4294967296);o=r()*987654071,t[i/4]=r()*4294967296|0}return e}},M7={};M7.ctrGladman=class{constructor(e,t){this._prf=e,this._initIv=t,this._iv=t}reset(){this._iv=this._initIv}update(e){return this.calculate(this._prf,e,this._iv)}incWord(e){if((e>>24&255)===255){let t=e>>16&255,n=e>>8&255,i=e&255;t===255?(t=0,n===255?(n=0,i===255?i=0:++i):++n):++t,e=0,e+=t<<16,e+=n<<8,e+=i}else e+=1<<24;return e}incCounter(e){(e[0]=this.incWord(e[0]))===0&&(e[1]=this.incWord(e[1]))}calculate(e,t,n){let i;if(!(i=t.length))return[];let o=td.bitLength(t);for(let r=0;r<i;r+=4){this.incCounter(n);let s=e.encrypt(n);t[r]^=s[0],t[r+1]^=s[1],t[r+2]^=s[2],t[r+3]^=s[3]}return td.clamp(t,o)}};var by={importKey(e){return new by.hmacSha1(XP.bytes.toBits(e))},pbkdf2(e,t,n,i){if(n=n||1e4,i<0||n<0)throw new Error("invalid params to pbkdf2");let o=(i>>5)+1<<2,r,s,a,c,d,u=new ArrayBuffer(o),h=new DataView(u),p=0,A=td;for(t=XP.bytes.toBits(t),d=1;p<(o||1);d++){for(r=s=e.encrypt(A.concat(t,[d])),a=1;a<n;a++)for(s=e.encrypt(s),c=0;c<s.length;c++)r[c]^=s[c];for(a=0;p<(o||1)&&a<r.length;a++)h.setInt32(p,r[a]),p+=4}return u.slice(0,i/8)}};by.hmacSha1=class{constructor(e){let t=this,n=t._hash=Hye.sha1,i=[[],[]];t._baseHash=[new n,new n];let o=t._baseHash[0].blockSize/32;e.length>o&&(e=new n().update(e).finalize());for(let r=0;r<o;r++)i[0][r]=e[r]^909522486,i[1][r]=e[r]^1549556828;t._baseHash[0].update(i[0]),t._baseHash[1].update(i[1]),t._resultHash=new n(t._baseHash[0])}reset(){let e=this;e._resultHash=new e._hash(e._baseHash[0]),e._updated=!1}update(e){let t=this;t._updated=!0,t._resultHash.update(e)}digest(){let e=this,t=e._resultHash.finalize(),n=new e._hash(e._baseHash[1]).update(t).finalize();return e.reset(),n}encrypt(e){if(this._updated)throw new Error("encrypt on already updated hmac called!");return this.update(e),this.digest(e)}};var rBi=y(x(),1);var wut=typeof crypto!=Bu&&typeof crypto.getRandomValues==_f,lb="Invalid password",yy="Invalid signature",db="zipjs-abort-check-password";function Z5(e){return wut?crypto.getRandomValues(e):Jye.getRandomValues(e)}var hZ=16,Nut="raw",qye={name:"PBKDF2"},Put={name:"HMAC"},Xut="SHA-1",Yut=Object.assign({hash:Put},qye),v7=Object.assign({iterations:1e3,hash:{name:Xut}},qye),Mut=["deriveBits"],MP=[8,12,16],YP=[16,24,32],xy=10,vut=[0,0,0,0],G5=typeof crypto!=Bu,DP=G5&&crypto.subtle,$ye=G5&&typeof DP!=Bu,Dp=XP.bytes,Uut=Y7.aes,Dut=M7.ctrGladman,kut=by.hmacSha1,Kye=G5&&$ye&&typeof DP.importKey==_f,jye=G5&&$ye&&typeof DP.deriveBits==_f,R5=class extends TransformStream{constructor({password:t,rawPassword:n,signed:i,encryptionStrength:o,checkPasswordOnly:r}){super({start(){Object.assign(this,{ready:new Promise(s=>this.resolveReady=s),password:nxe(t,n),signed:i,strength:o-1,pending:new Uint8Array})},async transform(s,a){let c=this,{password:d,strength:u,resolveReady:h,ready:p}=c;d?(await Qut(c,u,d,$m(s,0,MP[u]+2)),s=$m(s,MP[u]+2),r?a.error(new Error(db)):h()):await p;let A=new Uint8Array(s.length-xy-(s.length-xy)%hZ);a.enqueue(exe(c,s,A,0,xy,!0))},async flush(s){let{signed:a,ctr:c,hmac:d,pending:u,ready:h}=this;if(d&&c){await h;let p=$m(u,0,u.length-xy),A=$m(u,u.length-xy),f=new Uint8Array;if(p.length){let b=UP(Dp,p);d.update(b);let C=c.update(b);f=vP(Dp,C)}if(a){let b=$m(vP(Dp,d.digest()),0,xy);for(let C=0;C<xy;C++)if(b[C]!=A[C])throw new Error(yy)}s.enqueue(f)}}})}},V5=class extends TransformStream{constructor({password:t,rawPassword:n,encryptionStrength:i}){let o;super({start(){Object.assign(this,{ready:new Promise(r=>this.resolveReady=r),password:nxe(t,n),strength:i-1,pending:new Uint8Array})},async transform(r,s){let a=this,{password:c,strength:d,resolveReady:u,ready:h}=a,p=new Uint8Array;c?(p=await Out(a,d,c),u()):await h;let A=new Uint8Array(p.length+r.length-r.length%hZ);A.set(p,0),s.enqueue(exe(a,r,A,p.length,0))},async flush(r){let{ctr:s,hmac:a,pending:c,ready:d}=this;if(a&&s){await d;let u=new Uint8Array;if(c.length){let h=s.update(UP(Dp,c));a.update(h),u=vP(Dp,h)}o.signature=vP(Dp,a.digest()).slice(0,xy),r.enqueue(U7(u,o.signature))}}}),o=this}};function exe(e,t,n,i,o,r){let{ctr:s,hmac:a,pending:c}=e,d=t.length-o;c.length&&(t=U7(c,t),n=Jut(n,d-d%hZ));let u;for(u=0;u<=d-hZ;u+=hZ){let h=UP(Dp,$m(t,u,u+hZ));r&&a.update(h);let p=s.update(h);r||a.update(p),n.set(vP(Dp,p),u+i)}return e.pending=$m(t,u),n}async function Qut(e,t,n,i){let o=await txe(e,t,n,$m(i,0,MP[t])),r=$m(i,MP[t]);if(o[0]!=r[0]||o[1]!=r[1])throw new Error(lb)}async function Out(e,t,n){let i=Z5(new Uint8Array(MP[t])),o=await txe(e,t,n,i);return U7(i,o)}async function txe(e,t,n,i){e.password=null;let o=await zut(Nut,n,Yut,!1,Mut),r=await Hut(Object.assign({salt:i},v7),o,8*(YP[t]*2+2)),s=new Uint8Array(r),a=UP(Dp,$m(s,0,YP[t])),c=UP(Dp,$m(s,YP[t],YP[t]*2)),d=$m(s,YP[t]*2);return Object.assign(e,{keys:{key:a,authentication:c,passwordVerification:d},ctr:new Dut(new Uut(a),Array.from(vut)),hmac:new kut(c)}),d}async function zut(e,t,n,i,o){if(Kye)try{return await DP.importKey(e,t,n,i,o)}catch{return Kye=!1,by.importKey(t)}else return by.importKey(t)}async function Hut(e,t,n){if(jye)try{return await DP.deriveBits(e,t,n)}catch{return jye=!1,by.pbkdf2(t,e.salt,v7.iterations,n)}else return by.pbkdf2(t,e.salt,v7.iterations,n)}function nxe(e,t){return t===oi?mZ(e):t}function U7(e,t){let n=e;return e.length+t.length&&(n=new Uint8Array(e.length+t.length),n.set(e,0),n.set(t,e.length)),n}function Jut(e,t){if(t&&t>e.length){let n=e;e=new Uint8Array(t),e.set(n,0)}return e}function $m(e,t,n){return e.subarray(t,n)}function vP(e,t){return e.fromBits(t)}function UP(e,t){return e.toBits(t)}var pBi=y(x(),1);var kP=12,L5=class extends TransformStream{constructor({password:t,passwordVerification:n,checkPasswordOnly:i}){super({start(){Object.assign(this,{password:t,passwordVerification:n}),sxe(this,t)},transform(o,r){let s=this;if(s.password){let a=ixe(s,o.subarray(0,kP));if(s.password=null,a.at(-1)!=s.passwordVerification)throw new Error(lb);o=o.subarray(kP)}i?r.error(new Error(db)):r.enqueue(ixe(s,o))}})}},W5=class extends TransformStream{constructor({password:t,passwordVerification:n}){super({start(){Object.assign(this,{password:t,passwordVerification:n}),sxe(this,t)},transform(i,o){let r=this,s,a;if(r.password){r.password=null;let c=Z5(new Uint8Array(kP));c[kP-1]=r.passwordVerification,s=new Uint8Array(i.length+c.length),s.set(oxe(r,c),0),a=kP}else s=new Uint8Array(i.length),a=0;s.set(oxe(r,i),a),o.enqueue(s)}})}};function ixe(e,t){let n=new Uint8Array(t.length);for(let i=0;i<t.length;i++)n[i]=axe(e)^t[i],D7(e,n[i]);return n}function oxe(e,t){let n=new Uint8Array(t.length);for(let i=0;i<t.length;i++)n[i]=axe(e)^t[i],D7(e,t[i]);return n}function sxe(e,t){let n=[305419896,591751049,878082192];Object.assign(e,{keys:n,crcKey0:new cb(n[0]),crcKey2:new cb(n[2])});for(let i=0;i<t.length;i++)D7(e,t.charCodeAt(i))}function D7(e,t){let[n,i,o]=e.keys;e.crcKey0.append([t]),n=~e.crcKey0.get(),i=rxe(Math.imul(rxe(i+cxe(n)),134775813)+1),e.crcKey2.append([i>>>24]),o=~e.crcKey2.get(),e.keys=[n,i,o]}function axe(e){let t=e.keys[2]|2;return cxe(Math.imul(t,t^1)>>>8)}function cxe(e){return e&255}function rxe(e){return e&4294967295}var fZ="Invalid uncompressed size",Kut="deflate-raw",jut="deflate64-raw",F5=class extends TransformStream{constructor(t,{chunkSize:n,CompressionStreamZlib:i,CompressionStream:o}){super({});let{compressed:r,encrypted:s,useCompressionStream:a,zipCrypto:c,signed:d,level:u}=t,h=this,p,A,f=super.readable;(!s||c)&&d&&(p=new PP,f=kp(f,p)),r&&(f=dxe(f,a,{level:u,chunkSize:n},o,i,o)),s&&(c?f=kp(f,new W5(t)):(A=new V5(t),f=kp(f,A))),lxe(h,f,()=>{let b;s&&!c&&(b=A.signature),(!s||c)&&d&&(b=new DataView(p.value.buffer).getUint32(0)),h.signature=b})}},B5=class extends TransformStream{constructor(t,{chunkSize:n,DecompressionStreamZlib:i,DecompressionStream:o}){super({});let{zipCrypto:r,encrypted:s,signed:a,signature:c,compressed:d,useCompressionStream:u,deflate64:h}=t,p,A,f=super.readable;s&&(r?f=kp(f,new L5(t)):(A=new R5(t),f=kp(f,A))),d&&(f=dxe(f,u,{chunkSize:n,deflate64:h},o,i,o)),(!s||r)&&a&&(p=new PP,f=kp(f,p)),lxe(this,f,()=>{if((!s||r)&&a){let b=new DataView(p.value.buffer);if(c!=b.getUint32(0,!1))throw new Error(yy)}})}};function lxe(e,t,n){t=kp(t,new TransformStream({flush:n})),Object.defineProperty(e,"readable",{get(){return t}})}function dxe(e,t,n,i,o,r){let s=t&&i?i:o||r,a=n.deflate64?jut:Kut;try{e=kp(e,new s(a,n))}catch(c){if(t)if(o)e=kp(e,new o(a,n));else if(r)e=kp(e,new r(a,n));else throw c;else throw c}return e}function kp(e,t){return e.pipeThrough(t)}var uxe="message",mxe="start",hxe="pull",k7="data",fxe="ack",Q7="close",P5="deflate",X5="inflate";var w5=class extends TransformStream{constructor(t,n){super({});let i=this,{codecType:o}=t,r;o.startsWith(P5)?r=F5:o.startsWith(X5)&&(r=B5),i.outputSize=0;let s=0,a=new r(t,n),c=super.readable,d=new TransformStream({transform(h,p){h&&h.length&&(s+=h.length,p.enqueue(h))},flush(){Object.assign(i,{inputSize:s})}}),u=new TransformStream({transform(h,p){if(h&&h.length&&(p.enqueue(h),i.outputSize+=h.length,t.outputSize!==oi&&i.outputSize>t.outputSize))throw new Error(fZ)},flush(){let{signature:h}=a;Object.assign(i,{signature:h,inputSize:s})}});Object.defineProperty(i,"readable",{get(){return c.pipeThrough(d).pipeThrough(a).pipeThrough(u)}})}},N5=class extends TransformStream{constructor(t){let n;super({transform:i,flush(o){n&&n.length&&o.enqueue(n)}});function i(o,r){if(n){let s=new Uint8Array(n.length+o.length);s.set(n),s.set(o,n.length),o=s,n=null}o.length>t?(r.enqueue(o.slice(0,t)),i(o.slice(t),r)):n=o}}};var GBi=y(x(),1);var Axe=typeof Worker!=Bu;var pZ=class{constructor(t,{readable:n,writable:i},{options:o,config:r,streamOptions:s,useWebWorkers:a,transferStreams:c,workerURI:d},u){let{signal:h}=s;return Object.assign(t,{busy:!0,readable:n.pipeThrough(new N5(r.chunkSize)).pipeThrough(new z7(s),{signal:h}),writable:i,options:Object.assign({},o),workerURI:d,transferStreams:c,terminate(){return new Promise(p=>{let{worker:A,busy:f}=t;A?(f?t.resolveTerminated=p:(A.terminate(),p()),t.interface=null):p()})},onTaskFinished(){let{resolveTerminated:p}=t;p&&(t.resolveTerminated=null,t.terminated=!0,t.worker.terminate(),p()),t.busy=!1,u(t)}}),(a&&Axe?qut:gxe)(t,r)}},z7=class extends TransformStream{constructor({onstart:t,onprogress:n,size:i,onend:o}){let r=0;super({async start(){t&&await O7(t,i)},async transform(s,a){r+=s.length,n&&await O7(n,r,i),a.enqueue(s)},async flush(){o&&await O7(o,r)}})}};async function O7(e,...t){try{await e(...t)}catch{}}function gxe(e,t){return{run:()=>$ut(e,t)}}function qut(e,t){let{baseURI:n,chunkSize:i}=t,{wasmURI:o}=t;if(!e.interface){typeof o==_f&&(o=o());let r;try{r=nmt(e.workerURI,n,e)}catch{return Axe=!1,gxe(e,t)}Object.assign(e,{worker:r,interface:{run:()=>emt(e,{chunkSize:i,wasmURI:o,baseURI:n})}})}return e.interface}async function $ut({options:e,readable:t,writable:n,onTaskFinished:i},o){let r;try{if(!e.useCompressionStream&&!S5){let{wasmURI:d}=o;typeof d==_f&&(d=d()),await Oye(d,o)}r=new w5(e,o),await t.pipeThrough(r).pipeTo(n,{preventClose:!0,preventAbort:!0});let{signature:s,inputSize:a,outputSize:c}=r;return{signature:s,inputSize:a,outputSize:c}}catch(s){throw r&&(s.outputSize=r.outputSize),s}finally{i()}}async function emt(e,t){let n,i,o=new Promise((h,p)=>{n=h,i=p});Object.assign(e,{reader:null,writer:null,resolveResult:n,rejectResult:i,result:o});let{readable:r,options:s}=e,{writable:a,closed:c}=tmt(e.writable),d=Y5({type:mxe,options:s,config:t,readable:r,writable:a},e);d||Object.assign(e,{reader:r.getReader(),writer:a.getWriter()});let u=await o;return d||await a.getWriter().close(),await c,u}function tmt(e){let t,n=new Promise(o=>t=o);return{writable:new WritableStream({async write(o){let r=e.getWriter();await r.ready,await r.write(o),r.releaseLock()},close(){t()},abort(o){return e.getWriter().abort(o)}}),closed:n}}var pxe=!0;function nmt(e,t,n){let i={type:"module"},o,r;if(typeof e==_f&&(e=e()),e.startsWith("data:")||e.startsWith("blob:"))try{r=new Worker(e)}catch{r=new Worker(e,i)}else{try{o=new URL(e,t)}catch{o=e}r=new Worker(o,i)}return r.addEventListener(uxe,s=>imt(s,n)),r}function Y5(e,{worker:t,writer:n,onTaskFinished:i,transferStreams:o}){try{let{value:r,readable:s,writable:a}=e,c=[];if(r&&(r.byteLength<r.buffer.byteLength?e.value=r.buffer.slice(0,r.byteLength):e.value=r.buffer,c.push(e.value)),o&&pxe?(s&&c.push(s),a&&c.push(a)):e.readable=e.writable=null,c.length)try{return t.postMessage(e,c),!0}catch{pxe=!1,e.readable=e.writable=null,t.postMessage(e)}else t.postMessage(e)}catch(r){throw n&&n.releaseLock(),i(),r}}async function imt({data:e},t){let{type:n,value:i,messageId:o,result:r,error:s}=e,{reader:a,writer:c,resolveResult:d,rejectResult:u,onTaskFinished:h}=t;try{if(s){let{message:A,stack:f,code:b,name:C,outputSize:T}=s,E=new Error(A);Object.assign(E,{stack:f,code:b,name:C,outputSize:T}),p(E)}else{if(n==hxe){let{value:A,done:f}=await a.read();Y5({type:k7,value:A,done:f,messageId:o},t)}n==k7&&(await c.ready,await c.write(new Uint8Array(i)),Y5({type:fxe,messageId:o},t)),n==Q7&&p(null,r)}}catch(A){Y5({type:Q7,messageId:o},t),p(A)}function p(A,f){A?u(A):d(f),c&&c.releaseLock(),h()}}var XT=[],H7=[];var bxe=0;async function M5(e,t){let{options:n,config:i}=t,{transferStreams:o,useWebWorkers:r,useCompressionStream:s,compressed:a,signed:c,encrypted:d}=n,{workerURI:u,maxWorkers:h}=i;t.transferStreams=o||o===oi;let p=!a&&!c&&!d&&!t.transferStreams;return t.useWebWorkers=!p&&(r||r===oi&&i.useWebWorkers),t.workerURI=t.useWebWorkers&&u?u:oi,n.useCompressionStream=s||s===oi&&i.useCompressionStream,(await A()).run();async function A(){let b=XT.find(C=>!C.busy);if(b)return yxe(b),new pZ(b,e,t,f);if(XT.length<h){let C={indexWorker:bxe};return bxe++,XT.push(C),new pZ(C,e,t,f)}else return new Promise(C=>H7.push({resolve:C,stream:e,workerOptions:t}))}function f(b){if(H7.length){let[{resolve:C,stream:T,workerOptions:E}]=H7.splice(0,1);C(new pZ(b,T,E,f))}else b.worker?(yxe(b),rmt(b,t)):XT=XT.filter(C=>C!=b)}}function rmt(e,t){let{config:n}=t,{terminateWorkerTimeout:i}=n;Number.isFinite(i)&&i>=0&&(e.terminated?e.terminated=!1:e.terminateTimeout=setTimeout(async()=>{XT=XT.filter(o=>o!=e);try{await e.terminate()}catch{}},i))}function yxe(e){let{terminateTimeout:t}=e;t&&(clearTimeout(t),e.terminateTimeout=null)}var vBi=y(x(),1);var XBi=y(x(),1),xxe="\0\u263A\u263B\u2665\u2666\u2663\u2660\u2022\u25D8\u25CB\u25D9\u2642\u2640\u266A\u266B\u263C\u25BA\u25C4\u2195\u203C\xB6\xA7\u25AC\u21A8\u2191\u2193\u2192\u2190\u221F\u2194\u25B2\u25BC !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\u2302\xC7\xFC\xE9\xE2\xE4\xE0\xE5\xE7\xEA\xEB\xE8\xEF\xEE\xEC\xC4\xC5\xC9\xE6\xC6\xF4\xF6\xF2\xFB\xF9\xFF\xD6\xDC\xA2\xA3\xA5\u20A7\u0192\xE1\xED\xF3\xFA\xF1\xD1\xAA\xBA\xBF\u2310\xAC\xBD\xBC\xA1\xAB\xBB\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u03B1\xDF\u0393\u03C0\u03A3\u03C3\xB5\u03C4\u03A6\u0398\u03A9\u03B4\u221E\u03C6\u03B5\u2229\u2261\xB1\u2265\u2264\u2320\u2321\xF7\u2248\xB0\u2219\xB7\u221A\u207F\xB2\u25A0 ".split(""),smt=xxe.length==256;function Cxe(e){if(smt){let t="";for(let n=0;n<e.length;n++)t+=xxe[e[n]];return t}else return new TextDecoder().decode(e)}function QP(e,t){return t&&t.trim().toLowerCase()=="cp437"?Cxe(e):new TextDecoder(t).decode(e)}var DBi=y(x(),1),J7="filename",K7="rawFilename",OP="comment",j7="rawComment",zP="uncompressedSize",q7="compressedSize",$7="offset",v5="diskNumberStart",AZ="lastModDate",U5="rawLastModDate",HP="lastAccessDate",Txe="rawLastAccessDate",JP="creationDate",Exe="rawCreationDate",e6="internalFileAttributes",t6="externalFileAttributes",n6="msDosCompatible",D5="zip64",i6="encrypted",o6="version",r6="versionMadeBy",s6="zipCrypto",KP="directory",a6="executable",c6="compressionMethod",l6="signature",d6="extraField",amt=[J7,K7,q7,zP,AZ,U5,OP,j7,HP,JP,$7,v5,v5,e6,t6,n6,D5,i6,o6,r6,s6,KP,a6,c6,l6,d6,"bitFlag","filenameUTF8","commentUTF8","rawExtraField","extraFieldZip64","extraFieldUnicodePath","extraFieldUnicodeComment","extraFieldAES","extraFieldNTFS","extraFieldExtendedTimestamp"],Cy=class{constructor(t){amt.forEach(n=>this[n]=t[n])}};var QBi=y(x(),1),Sxe="filenameEncoding",_xe="commentEncoding",Ixe="decodeText",Zxe="extractPrependedData",Rxe="extractAppendedData",k5="password",Q5="rawPassword",O5="passThrough",z5="signal",Vxe="checkPasswordOnly",Gxe="checkOverlappingEntryOnly",Lxe="checkOverlappingEntry",Wxe="checkSignature",H5="useWebWorkers",J5="useCompressionStream",Fxe="transferStreams",K5="preventClose",Bxe="encryptionStrength",wxe="extendedTimestamp",Nxe="keepOrder",Pxe="level",Xxe="bufferedWrite",Yxe="dataDescriptorSignature",Mxe="useUnicodeFileNames",vxe="dataDescriptor",u6="supportZip64SplitFile",Uxe="encodeText",m6="offset",h6="usdz";var j5="File format is not recognized",Oxe="End of central directory not found",zxe="End of Zip64 central directory locator not found",Hxe="Central directory header not found",Jxe="Local file header not found",Kxe="Zip64 extra field not found",jxe="File contains encrypted entry",qxe="Encryption method not supported",p6="Compression method not supported",A6="Split zip file",$xe="Overlapping entry found",Dxe="utf-8",kxe="cp437",mmt=[[zP,4294967295],[q7,4294967295],[$7,4294967295],[v5,65535]],hmt={65535:{getValue:Mr,bytes:4},4294967295:{getValue:bZ,bytes:8}},YT=class{constructor(t,n={}){Object.assign(this,{reader:new PT(t),options:n,config:VP(),readRanges:[]})}async*getEntriesGenerator(t={}){let n=this,{reader:i}=n,{config:o}=n;if(await Up(i),(i.size===oi||!i.readUint8Array)&&(i=new Mp(await new Response(i.readable).blob()),await Up(i)),i.size<22)throw new Error(j5);i.chunkSize=T5(o);let r=await ymt(i,101010256,i.size,22,65535*16);if(!r){let P=await uc(i,0,4),g=es(P);throw Mr(g)==134695760?new Error(A6):new Error(Oxe)}let s=es(r),a=Mr(s,12),c=Mr(s,16),d=r.offset,u=mc(s,20),h=d+22+u,p=mc(s,4),A=i.lastDiskNumber||0,f=mc(s,6),b=mc(s,8),C=0,T=0;if(c==4294967295||a==4294967295||b==65535||f==65535){let P=await uc(i,r.offset-20,20),g=es(P);if(Mr(g,0)==117853008){c=bZ(g,8);let _=await uc(i,c,56,-1),Z=es(_),G=r.offset-20-56;if(Mr(Z,0)!=101075792&&c!=G){let w=c;c=G,c>w&&(C=c-w),_=await uc(i,c,56,-1),Z=es(_)}if(Mr(Z,0)!=101075792)throw new Error(zxe);p==65535&&(p=Mr(Z,16)),f==65535&&(f=Mr(Z,20)),b==65535&&(b=bZ(Z,32)),a==4294967295&&(a=bZ(Z,40)),c-=a}}if(c>=i.size&&(C=i.size-c-a-22,c=i.size-a-22),A!=p)throw new Error(A6);if(c<0)throw new Error(j5);let E=0,S=await uc(i,c,a,f),I=es(S);if(a){let P=r.offset-a;if(Mr(I,E)!=33639248&&c!=P){let g=c;c=P,c>g&&(C+=c-g),S=await uc(i,c,a,f),I=es(S)}}let R=r.offset-c-(i.lastDiskOffset||0);if(a!=R&&R>=0&&(a=R,S=await uc(i,c,a,f),I=es(S)),c<0||c>=i.size)throw new Error(j5);let V=Gc(n,t,Sxe),W=Gc(n,t,_xe);for(let P=0;P<b;P++){let g=new g6(i,o,n.options);if(Mr(I,E)!=33639248)throw new Error(Hxe);eCe(g,I,E+6);let _=!!g.bitFlag.languageEncodingFlag,Z=E+46,G=Z+g.filenameLength,w=G+g.extraFieldLength,X=mc(I,E+4),k=X>>8==0,v=X>>8==3,D=S.subarray(Z,G),Y=mc(I,E+32),O=w+Y,J=S.subarray(w,O),te=_,z=_,j=Mr(I,E+38),ee=k&&(gZ(I,E+38)&16)==16||v&&(j>>16&61440)==16384||D.length&&D.at(-1)=="/".charCodeAt(0),ge=v&&(j>>16&73)!=0,ye=Mr(I,E+42)+C;Object.assign(g,{versionMadeBy:X,msDosCompatible:k,compressedSize:0,uncompressedSize:0,commentLength:Y,directory:ee,offset:ye,diskNumberStart:mc(I,E+34),internalFileAttributes:mc(I,E+36),externalFileAttributes:j,rawFilename:D,filenameUTF8:te,commentUTF8:z,rawExtraField:S.subarray(G,w),executable:ge}),g.internalFileAttribute=g.internalFileAttributes,g.externalFileAttribute=g.externalFileAttributes;let ae=Gc(n,t,Ixe)||QP,Ce=te?Dxe:V||kxe,Te=z?Dxe:W||kxe,Fe=ae(D,Ce);Fe===oi&&(Fe=QP(D,Ce));let Ne=ae(J,Te);Ne===oi&&(Ne=QP(J,Te)),Object.assign(g,{rawComment:J,filename:Fe,comment:Ne,directory:ee||Fe.endsWith("/")}),T=Math.max(ye,T),tCe(g,g,I,E+6),g.zipCrypto=g.encrypted&&!g.extraFieldAES;let Pe=new Cy(g);Pe.getData=(st,Ye)=>g.getData(st,Pe,n.readRanges,Ye),Pe.arrayBuffer=async st=>{let Ye=new TransformStream,[xt]=await Promise.all([new Response(Ye.readable).arrayBuffer(),g.getData(Ye,Pe,n.readRanges,st)]);return xt},E=O;let{onprogress:Xe}=t;if(Xe)try{await Xe(P+1,b,new Cy(g))}catch{}yield Pe}let B=Gc(n,t,Zxe),N=Gc(n,t,Rxe);return B&&(n.prependedData=T>0?await uc(i,0,T):new Uint8Array),n.comment=u?await uc(i,d+22,u):new Uint8Array,N&&(n.appendedData=h<i.size?await uc(i,h,i.size-h):new Uint8Array),!0}async getEntries(t={}){let n=[];for await(let i of this.getEntriesGenerator(t))n.push(i);return n}async close(){}};var g6=class{constructor(t,n,i){Object.assign(this,{reader:t,config:n,options:i})}async getData(t,n,i,o={}){let r=this,{reader:s,offset:a,diskNumberStart:c,extraFieldAES:d,extraFieldZip64:u,compressionMethod:h,config:p,bitFlag:A,signature:f,rawLastModDate:b,uncompressedSize:C,compressedSize:T}=r,{dataDescriptor:E}=A,S=n.localDirectory={},I=await uc(s,a,30,c),R=es(I),V=Gc(r,o,k5),W=Gc(r,o,Q5),B=Gc(r,o,O5);if(V=V&&V.length&&V,W=W&&W.length&&W,d&&d.originalCompressionMethod!=99)throw new Error(p6);if(h!=0&&h!=8&&h!=9&&!B)throw new Error(p6);if(Mr(R,0)!=67324752)throw new Error(Jxe);eCe(S,R,4);let{extraFieldLength:N,filenameLength:P,lastAccessDate:g,creationDate:_}=S;S.rawExtraField=N?await uc(s,a+30+P,N,c):new Uint8Array,tCe(r,S,R,4,!0),Object.assign(n,{lastAccessDate:g,creationDate:_});let Z=r.encrypted&&S.encrypted&&!B,G=Z&&!d;if(B||(n.zipCrypto=G),Z){if(!G&&d.strength===oi)throw new Error(qxe);if(!V&&!W)throw new Error(jxe)}let w=a+30+P+N,X=T,k=s.readable;Object.assign(k,{diskNumberStart:c,offset:w,size:X});let v=Gc(r,o,z5),D=Gc(r,o,Vxe),Y=Gc(r,o,Lxe),O=Gc(r,o,Gxe);O&&(Y=!0);let{onstart:J,onprogress:te,onend:z}=o,j=h==9,ee=Gc(r,o,J5);j&&(ee=!1);let ge={options:{codecType:X5,password:V,rawPassword:W,zipCrypto:G,encryptionStrength:d&&d.strength,signed:Gc(r,o,Wxe)&&!B,passwordVerification:G&&(E?b>>>8&255:f>>>24&255),outputSize:B?T:C,signature:f,compressed:h!=0&&!B,encrypted:r.encrypted&&!B,useWebWorkers:Gc(r,o,H5),useCompressionStream:ee,transferStreams:Gc(r,o,Fxe),deflate64:j,checkPasswordOnly:D},config:p,streamOptions:{signal:v,size:X,onstart:J,onprogress:te,onend:z}};Y&&await bmt({reader:s,fileEntry:n,offset:a,diskNumberStart:c,signature:f,compressedSize:T,uncompressedSize:C,dataOffset:w,dataDescriptor:E||S.bitFlag.dataDescriptor,extraFieldZip64:u||S.extraFieldZip64,readRanges:i});let ye;try{if(!O){D&&(t=new WritableStream),t=new uZ(t),await Up(t,B?T:C),{writable:ye}=t;let{outputSize:ae}=await M5({readable:k,writable:ye},ge);if(t.size+=ae,ae!=(B?T:C))throw new Error(fZ)}}catch(ae){if(ae.outputSize!==oi&&(t.size+=ae.outputSize),!D||ae.message!=db)throw ae}finally{!Gc(r,o,K5)&&ye&&!ye.locked&&await ye.getWriter().close()}return D||O?oi:t.getData?t.getData():ye}};function eCe(e,t,n){let i=e.rawBitFlag=mc(t,n+2),o=(i&1)==1,r=Mr(t,n+6);Object.assign(e,{encrypted:o,version:mc(t,n),bitFlag:{level:(i&6)>>1,dataDescriptor:(i&8)==8,languageEncodingFlag:(i&2048)==2048},rawLastModDate:r,lastModDate:xmt(r),filenameLength:mc(t,n+22),extraFieldLength:mc(t,n+24)})}function tCe(e,t,n,i,o){let{rawExtraField:r}=t,s=t.extraField=new Map,a=es(new Uint8Array(r)),c=0;try{for(;c<r.length;){let T=mc(a,c),E=mc(a,c+2);s.set(T,{type:T,data:r.slice(c+4,c+4+E)}),c+=4+E}}catch{}let d=mc(n,i+4);Object.assign(t,{signature:Mr(n,i+10),compressedSize:Mr(n,i+14),uncompressedSize:Mr(n,i+18)});let u=s.get(1);u&&(fmt(u,t),t.extraFieldZip64=u);let h=s.get(28789);h&&(Qxe(h,J7,K7,t,e),t.extraFieldUnicodePath=h);let p=s.get(25461);p&&(Qxe(p,OP,j7,t,e),t.extraFieldUnicodeComment=p);let A=s.get(39169);A?(pmt(A,t,d),t.extraFieldAES=A):t.compressionMethod=d;let f=s.get(10);f&&(Amt(f,t),t.extraFieldNTFS=f);let b=s.get(21589);b&&(gmt(b,t,o),t.extraFieldExtendedTimestamp=b);let C=s.get(6534);C&&(t.extraFieldUSDZ=C)}function fmt(e,t){t.zip64=!0;let n=es(e.data),i=mmt.filter(([o,r])=>t[o]==r);for(let o=0,r=0;o<i.length;o++){let[s,a]=i[o];if(t[s]==a){let c=hmt[a];t[s]=e[s]=c.getValue(n,r),r+=c.bytes}else if(e[s])throw new Error(Kxe)}}function Qxe(e,t,n,i,o){let r=es(e.data),s=new cb;s.append(o[n]);let a=es(new Uint8Array(4));a.setUint32(0,s.get(),!0);let c=Mr(r,1);Object.assign(e,{version:gZ(r,0),[t]:QP(e.data.subarray(5)),valid:!o.bitFlag.languageEncodingFlag&&c==Mr(a,0)}),e.valid&&(i[t]=e[t],i[t+"UTF8"]=!0)}function pmt(e,t,n){let i=es(e.data),o=gZ(i,4);Object.assign(e,{vendorVersion:gZ(i,0),vendorId:gZ(i,2),strength:o,originalCompressionMethod:n,compressionMethod:mc(i,5)}),t.compressionMethod=e.compressionMethod}function Amt(e,t){let n=es(e.data),i=4,o;try{for(;i<e.data.length&&!o;){let r=mc(n,i),s=mc(n,i+2);r==1&&(o=e.data.slice(i+4,i+4+s)),i+=4+s}}catch{}try{if(o&&o.length==24){let r=es(o),s=r.getBigUint64(0,!0),a=r.getBigUint64(8,!0),c=r.getBigUint64(16,!0);Object.assign(e,{rawLastModDate:s,rawLastAccessDate:a,rawCreationDate:c});let d=f6(s),u=f6(a),h=f6(c),p={lastModDate:d,lastAccessDate:u,creationDate:h};Object.assign(e,p),Object.assign(t,p)}}catch{}}function gmt(e,t,n){let i=es(e.data),o=gZ(i,0),r=[],s=[];n?((o&1)==1&&(r.push(AZ),s.push(U5)),(o&2)==2&&(r.push(HP),s.push(Txe)),(o&4)==4&&(r.push(JP),s.push(Exe))):e.data.length>=5&&(r.push(AZ),s.push(U5));let a=1;r.forEach((c,d)=>{if(e.data.length>=a+4){let u=Mr(i,a);t[c]=e[c]=new Date(u*1e3);let h=s[d];e[h]=u}a+=4})}async function bmt({reader:e,fileEntry:t,offset:n,diskNumberStart:i,signature:o,compressedSize:r,uncompressedSize:s,dataOffset:a,dataDescriptor:c,extraFieldZip64:d,readRanges:u}){let h=0;if(i)for(let f=0;f<i;f++){let b=e.readers[f];h+=b.size}let p=0;if(c&&(d?p=20:p=12),p){let f=await uc(e,a+r,p+4,i);if(Mr(es(f),0)==134695760){let C=Mr(es(f),4),T,E;d?(T=bZ(es(f),8),E=bZ(es(f),16)):(T=Mr(es(f),8),E=Mr(es(f),12)),(t.encrypted&&!t.zipCrypto||C==o)&&T==r&&E==s&&(p+=4)}}let A={start:h+n,end:h+a+r+p,fileEntry:t};for(let f of u)if(f.fileEntry!=t&&A.start>=f.start&&A.start<f.end){let b=new Error($xe);throw b.overlappingEntry=f.fileEntry,b}u.push(A)}async function ymt(e,t,n,i,o){let r=new Uint8Array(4),s=es(r);Cmt(s,0,t);let a=i+o;return await c(i)||await c(Math.min(a,n));async function c(d){let u=n-d,h=await uc(e,u,d);for(let p=h.length-i;p>=0;p--)if(h[p]==r[0]&&h[p+1]==r[1]&&h[p+2]==r[2]&&h[p+3]==r[3])return{offset:u+p,buffer:h.slice(p,p+i).buffer}}}function Gc(e,t,n){return t[n]===oi?e.options[n]:t[n]}function xmt(e){let t=(e&4294901760)>>16,n=e&65535;try{return new Date(1980+((t&65024)>>9),((t&480)>>5)-1,t&31,(n&63488)>>11,(n&2016)>>5,(n&31)*2,0)}catch{}}function f6(e){return new Date(Number(e/BigInt(1e4)-BigInt(116444736e5)))}function gZ(e,t){return e.getUint8(t)}function mc(e,t){return e.getUint16(t,!0)}function Mr(e,t){return e.getUint32(t,!0)}function bZ(e,t){return Number(e.getBigUint64(t,!0))}function Cmt(e,t,n){e.setUint32(t,n,!0)}function es(e){return new DataView(e.buffer)}var uwi=y(x(),1);var cCe="File already exists",lCe="Zip file comment exceeds 64KB",dCe="File entry comment exceeds 64KB",uCe="File entry name exceeds 64KB",N6="Version exceeds 65535",mCe="The strength must equal 1, 2, or 3",hCe="Extra field type exceeds 65535",fCe="Extra field data exceeds 64KB",lQ="Zip64 is not supported (make sure 'keepOrder' is set to 'true')",pCe="Undefined uncompressed size",ACe="Zip file not empty",oCe=new Uint8Array([7,0,2,0,65,69,3,0,0]),B6=0,rCe=[],eX=class{constructor(t,n={}){t=new uZ(t);let i=t.availableSize!==oi&&t.availableSize>0&&t.availableSize!==1/0&&t.maxSize!==oi&&t.maxSize>0&&t.maxSize!==1/0;Object.assign(this,{writer:t,addSplitZipSignature:i,options:n,config:VP(),files:new Map,filenames:new Set,offset:n[m6]===oi?t.size||t.writable.size||0:n[m6],pendingEntriesSize:0,pendingAddFileCalls:new Set,bufferedWrites:0})}async prependZip(t){if(this.filenames.size)throw new Error(ACe);t=new PT(t);let n=new YT(t.readable),i=await n.getEntries();await n.close(),await t.readable.pipeTo(this.writer.writable,{preventClose:!0,preventAbort:!0}),this.writer.size=this.offset=t.size,this.filenames=new Set(i.map(o=>o.filename)),this.files=new Map(i.map(o=>{let{version:r,compressionMethod:s,lastModDate:a,lastAccessDate:c,creationDate:d,rawFilename:u,bitFlag:h,encrypted:p,uncompressedSize:A,compressedSize:f,diskOffset:b,diskNumber:C,zip64:T}=o,{rawExtraFieldZip64:E,rawExtraFieldAES:S,rawExtraFieldExtendedTimestamp:I,rawExtraFieldNTFS:R,rawExtraField:V}=o,{level:W,languageEncodingFlag:B,dataDescriptor:N}=h;E=E||new Uint8Array,S=S||new Uint8Array,I=I||new Uint8Array,R=R||new Uint8Array,V=V||new Uint8Array;let P=qi(E,S,I,R,V),g=T&&A>4294967295,_=T&&f>4294967295,{headerArray:Z,headerView:G}=gCe({version:r,bitFlag:bCe(W,B,N,p,s),compressionMethod:s,uncompressedSize:A,compressedSize:f,lastModDate:a,rawFilename:u,zip64CompressedSize:_,zip64UncompressedSize:g,extraFieldLength:P});return Object.assign(o,{zip64UncompressedSize:g,zip64CompressedSize:_,zip64Offset:T&&this.offset-b>4294967295,zip64DiskNumberStart:T&&C>65535,rawExtraFieldZip64:E,rawExtraFieldAES:S,rawExtraFieldExtendedTimestamp:I,rawExtraFieldNTFS:R,rawExtraField:V,extendedTimestamp:I.length>0||R.length>0,extraFieldExtendedTimestampFlag:1+(c?2:0)+(d?4:0),headerArray:Z,headerView:G}),[o.filename,o]}))}async add(t="",n,i={}){let o=this,{pendingAddFileCalls:r,config:s}=o;B6<s.maxWorkers?B6++:await new Promise(c=>rCe.push(c));let a;try{if(t=t.trim(),o.filenames.has(t))throw new Error(cCe);return o.filenames.add(t),a=Zmt(o,t,n,i),r.add(a),await a}catch(c){throw o.filenames.delete(t),c}finally{r.delete(a);let c=rCe.shift();c?c():B6--}}remove(t){let{filenames:n,files:i}=this;if(typeof t=="string"&&(t=i.get(t)),t&&t.filename!==oi){let{filename:o}=t;if(n.has(o)&&i.has(o))return n.delete(o),i.delete(o),!0}return!1}async close(t=new Uint8Array,n={}){let i=this,{pendingAddFileCalls:o,writer:r}=this,{writable:s}=r;for(;o.size;)await Promise.allSettled(Array.from(o));return await wmt(this,t,n),_o(i,n,K5)||await s.getWriter().close(),r.getData?r.getData():s}};async function Zmt(e,t,n,i){t=t.trim();let o=_o(e,i,n6),r=_o(e,i,r6,o?20:768),s=_o(e,i,a6);if(r>65535)throw new Error(N6);let a=_o(e,i,t6,0);!i[KP]&&t.endsWith("/")&&(i[KP]=!0),_o(e,i,KP)?(t.endsWith("/")||(t+="/"),a===0&&(a=16,o||(a|=16877<<16))):!o&&a===0&&(s?a=493<<16:a=420<<16);let d=_o(e,i,Uxe,mZ),u=d(t);if(u===oi&&(u=mZ(t)),qi(u)>65535)throw new Error(uCe);let h=i[OP]||"",p=d(h);if(p===oi&&(p=mZ(h)),qi(p)>65535)throw new Error(dCe);let A=_o(e,i,o6,20);if(A>65535)throw new Error(N6);let f=_o(e,i,AZ,new Date),b=_o(e,i,HP),C=_o(e,i,JP),T=_o(e,i,e6,0),E=_o(e,i,O5),S,I;E||(S=_o(e,i,k5),I=_o(e,i,Q5));let R=_o(e,i,Bxe,3),V=_o(e,i,s6),W=_o(e,i,wxe,!0),B=_o(e,i,Nxe,!0),N=_o(e,i,H5),P=_o(e,i,Xxe),g=_o(e,i,Yxe,!1),_=_o(e,i,z5),Z=_o(e,i,Mxe,!0),G=_o(e,i,c6),w=_o(e,i,Pxe),X=_o(e,i,J5),k=_o(e,i,vxe);P&&k===oi&&(k=!1),(k===oi||V)&&(k=!0),w!==oi&&w!=6&&(X=!1),!X&&e.config.CompressionStream===oi&&e.config.CompressionStreamZlib===oi&&(w=0);let v=_o(e,i,D5);if(!V&&(S!==oi||I!==oi)&&!(R>=1&&R<=3))throw new Error(mCe);let D=new Uint8Array,Y=i[d6];if(Y){let xt=0,at=0;Y.forEach(Je=>xt+=4+qi(Je)),D=new Uint8Array(xt),Y.forEach((Je,lt)=>{if(lt>65535)throw new Error(hCe);if(qi(Je)>65535)throw new Error(fCe);ea(D,new Uint16Array([lt]),at),ea(D,new Uint16Array([qi(Je)]),at+2),ea(D,Je,at+4),at+=4+qi(Je)})}let O=0,J=0,te=0;if(E&&(te=i[zP],te===oi))throw new Error(pCe);let z=v===!0;n&&(n=new PT(n),await Up(n),E?(i.uncompressedSize=te,O=aCe(te)):n.size===oi?(k=!0,(v||v===oi)&&(v=!0,te=O=4294967296)):(i.uncompressedSize=te=n.size,O=aCe(te)));let{diskOffset:j,diskNumber:ee,maxSize:ge}=e.writer,ye=z||te>4294967295,ae=z||O>4294967295,Ce=z||e.offset+e.pendingEntriesSize-j>4294967295,Fe=_o(e,i,u6,!0)&&z||ee+Math.ceil(e.pendingEntriesSize/ge)>65535;if(Ce||ye||ae||Fe){if(v===!1||!B)throw new Error(lQ);v=!0}v=v||!1;let Ne=_o(e,i,i6);i=Object.assign({},i,{rawFilename:u,rawComment:p,version:A,versionMadeBy:r,lastModDate:f,lastAccessDate:b,creationDate:C,rawExtraField:D,zip64:v,zip64UncompressedSize:ye,zip64CompressedSize:ae,zip64Offset:Ce,zip64DiskNumberStart:Fe,password:S,rawPassword:I,level:w,useWebWorkers:N,encryptionStrength:R,extendedTimestamp:W,zipCrypto:V,bufferedWrite:P,keepOrder:B,useUnicodeFileNames:Z,dataDescriptor:k,dataDescriptorSignature:g,signal:_,msDosCompatible:o,internalFileAttribute:T,internalFileAttributes:T,externalFileAttribute:a,externalFileAttributes:a,useCompressionStream:X,passThrough:E,encrypted:!!(S&&qi(S)||I&&qi(I))||E&&Ne,signature:i[l6],compressionMethod:G,uncompressedSize:te,offset:e.offset-j,diskNumberStart:ee});let Pe=Gmt(i),Xe=Wmt(i),st=qi(Pe.localHeaderArray,Xe.dataDescriptorArray);J=st+O,e.options[h6]&&(J+=J+64),e.pendingEntriesSize+=J;let Ye;try{Ye=await Rmt(e,t,n,{headerInfo:Pe,dataDescriptorInfo:Xe,metadataSize:st},i)}finally{e.pendingEntriesSize-=J}return Object.assign(Ye,{name:t,comment:h,extraField:Y}),new Cy(Ye)}async function Rmt(e,t,n,i,o){let{files:r,writer:s}=e,{keepOrder:a,dataDescriptor:c,signal:d}=o,{headerInfo:u}=i,h=e.options[h6],p=Array.from(r.values()).pop(),A={},f,b,C,T,E,S,I;r.set(t,A);try{let B;a&&(B=p&&p.lock,R()),(o.bufferedWrite||e.writerLocked||e.bufferedWrites&&a||!c)&&!h?(S=new TransformStream,S.size=0,f=!0,e.bufferedWrites++,await Up(s)):(S=s,await V()),await Up(S);let{writable:N,diskOffset:P}=s;if(e.addSplitZipSignature){delete e.addSplitZipSignature;let w=new Uint8Array(4),X=Lc(w);ji(X,0,134695760),await ub(s,w),e.offset+=4}h&&Lmt(i,e.offset-P);let{localHeaderView:g,localHeaderArray:_}=u;f||(await B,await W(N));let{diskNumber:Z}=s;E=!0,A.diskNumberStart=Z,f?I=new Response(S.readable).blob():await ub(S,_),A=await Vmt(n,S,A,i,e.config,o);let{zip64:G}=A;if(E=!1,r.set(t,A),A.filename=t,f){let[w]=await Promise.all([I,S.writable.getWriter().close(),B]);await V(),T=!0,A.diskNumberStart=s.diskNumber,A.offset=e.offset-s.diskOffset,G&&sCe(A),Bmt(A,g,o),await W(N),await ub(s,_),await w.stream().pipeTo(N,{preventClose:!0,preventAbort:!0,signal:d}),s.size+=S.size,T=!1}else A.offset=e.offset-P,G&&sCe(A);if(A.offset>4294967295&&!G)throw new Error(lQ);return e.offset+=A.size,A}catch(B){if(f&&T||!f&&E){if(e.hasCorruptedEntries=!0,B)try{B.corruptedEntry=!0}catch{}f?e.offset+=S.size:e.offset=S.size}throw r.delete(t),B}finally{f&&e.bufferedWrites--,C&&C(),b&&b()}function R(){A.lock=new Promise(B=>C=B)}async function V(){e.writerLocked=!0;let{lockWriter:B}=e;e.lockWriter=new Promise(N=>b=()=>{e.writerLocked=!1,N()}),await B}async function W(B){qi(u.localHeaderArray)>s.availableSize&&(s.availableSize=0,await ub(B,new Uint8Array))}}async function Vmt(e,t,{diskNumberStart:n,lock:i},o,r,s){let{headerInfo:a,dataDescriptorInfo:c,metadataSize:d}=o,{headerArray:u,headerView:h,lastModDate:p,rawLastModDate:A,encrypted:f,compressed:b,version:C,compressionMethod:T,rawExtraFieldZip64:E,localExtraFieldZip64Length:S,rawExtraFieldExtendedTimestamp:I,extraFieldExtendedTimestampFlag:R,rawExtraFieldNTFS:V,rawExtraFieldAES:W}=a,{dataDescriptorArray:B}=c,{rawFilename:N,lastAccessDate:P,creationDate:g,password:_,rawPassword:Z,level:G,zip64:w,zip64UncompressedSize:X,zip64CompressedSize:k,zip64Offset:v,zip64DiskNumberStart:D,zipCrypto:Y,dataDescriptor:O,directory:J,executable:te,versionMadeBy:z,rawComment:j,rawExtraField:ee,useWebWorkers:ge,onstart:ye,onprogress:ae,onend:Ce,signal:Te,encryptionStrength:Fe,extendedTimestamp:Ne,msDosCompatible:Pe,internalFileAttributes:Xe,externalFileAttributes:st,useCompressionStream:Ye,passThrough:xt}=s,at={lock:i,versionMadeBy:z,zip64:w,directory:!!J,executable:!!te,filenameUTF8:!0,rawFilename:N,commentUTF8:!0,rawComment:j,rawExtraFieldZip64:E,localExtraFieldZip64Length:S,rawExtraFieldExtendedTimestamp:I,rawExtraFieldNTFS:V,rawExtraFieldAES:W,rawExtraField:ee,extendedTimestamp:Ne,msDosCompatible:Pe,internalFileAttributes:Xe,externalFileAttributes:st,diskNumberStart:n},{signature:Je,uncompressedSize:lt}=s,ht=0;xt||(lt=0);let{writable:Rt}=t;if(e){e.chunkSize=T5(r);let _e=e.readable,Re=e.size,jt={options:{codecType:P5,level:G,rawPassword:Z,password:_,encryptionStrength:Fe,zipCrypto:f&&Y,passwordVerification:f&&Y&&A>>8&255,signed:!xt,compressed:b&&!xt,encrypted:f&&!xt,useWebWorkers:ge,useCompressionStream:Ye,transferStreams:!1},config:r,streamOptions:{signal:Te,size:Re,onstart:ye,onprogress:ae,onend:Ce}};try{let At=await M5({readable:_e,writable:Rt},jt);ht=At.outputSize,t.size+=ht,xt||(lt=At.inputSize,Je=At.signature)}catch(At){throw At.outputSize!==oi&&(t.size+=At.outputSize),At}}return Fmt({signature:Je,compressedSize:ht,uncompressedSize:lt,headerInfo:a,dataDescriptorInfo:c},s),O&&await ub(t,B),Object.assign(at,{uncompressedSize:lt,compressedSize:ht,lastModDate:p,rawLastModDate:A,creationDate:g,lastAccessDate:P,encrypted:f,zipCrypto:Y,size:d+ht,compressionMethod:T,version:C,headerArray:u,headerView:h,signature:Je,extraFieldExtendedTimestampFlag:R,zip64UncompressedSize:X,zip64CompressedSize:k,zip64Offset:v,zip64DiskNumberStart:D}),at}function Gmt(e){let{rawFilename:t,lastModDate:n,lastAccessDate:i,creationDate:o,level:r,zip64:s,zipCrypto:a,useUnicodeFileNames:c,dataDescriptor:d,directory:u,rawExtraField:h,encryptionStrength:p,extendedTimestamp:A,passThrough:f,encrypted:b,zip64UncompressedSize:C,zip64CompressedSize:T,zip64Offset:E,zip64DiskNumberStart:S,uncompressedSize:I,offset:R,diskNumberStart:V}=e,{version:W,compressionMethod:B}=e,N=!u&&(r>0||r===oi&&B!==0),P,g=f||!N,_=s&&(e.bufferedWrite||!C&&!T||g);if(s){let j=4;C&&(j+=8),T&&(j+=8),E&&(j+=8),S&&(j+=4),P=new Uint8Array(j);let ee=Lc(P);if(Io(ee,0,1),Io(ee,2,qi(P)-4),_){let ge=Lc(P),ye=4;C&&(ga(ge,ye,BigInt(I)),ye+=8),T&&g&&(ga(ge,ye,BigInt(I)),ye+=8),E&&(ga(ge,ye,BigInt(R)),ye+=8),S&&(ji(ge,ye,V),ye+=4)}}else P=new Uint8Array;let Z;if(b&&!a){Z=new Uint8Array(qi(oCe)+2);let j=Lc(Z);Io(j,0,39169),ea(Z,oCe,2),P6(j,8,p)}else Z=new Uint8Array;let G,w,X;if(A){w=new Uint8Array(9+(i?4:0)+(o?4:0));let j=Lc(w);Io(j,0,21589),Io(j,2,qi(w)-4),X=1+(i?2:0)+(o?4:0),P6(j,4,X);let ee=5;ji(j,ee,Math.floor(n.getTime()/1e3)),ee+=4,i&&(ji(j,ee,Math.floor(i.getTime()/1e3)),ee+=4),o&&ji(j,ee,Math.floor(o.getTime()/1e3));try{G=new Uint8Array(36);let ge=Lc(G),ye=w6(n);Io(ge,0,10),Io(ge,2,32),Io(ge,8,1),Io(ge,10,24),ga(ge,12,ye),ga(ge,20,w6(i)||ye),ga(ge,28,w6(o)||ye)}catch{G=new Uint8Array}}else G=w=new Uint8Array;B===oi&&(B=N?8:0),s&&(W=W>45?W:45),b&&!a&&(W=W>51?W:51,Z[9]=B,B=99);let k=_?qi(P):0,v=k+qi(Z,w,G,h),{headerArray:D,headerView:Y,rawLastModDate:O}=gCe({version:W,bitFlag:bCe(r,c,d,b,B),compressionMethod:B,uncompressedSize:I,lastModDate:n<w7?w7:n>B7?B7:n,rawFilename:t,zip64CompressedSize:T,zip64UncompressedSize:C,extraFieldLength:v}),J=30,te=new Uint8Array(J+qi(t)+v),z=Lc(te);return ji(z,0,67324752),ea(te,D,4),ea(te,t,J),J+=qi(t),_&&ea(te,P,J),J+=k,ea(te,Z,J),J+=qi(Z),ea(te,w,J),J+=qi(w),ea(te,G,J),J+=qi(G),ea(te,h,J),d&&(ji(z,18,0),ji(z,22,0)),{localHeaderArray:te,localHeaderView:z,headerArray:D,headerView:Y,lastModDate:n,rawLastModDate:O,encrypted:b,compressed:N,version:W,compressionMethod:B,extraFieldExtendedTimestampFlag:X,rawExtraFieldZip64:P,localExtraFieldZip64Length:k,rawExtraFieldExtendedTimestamp:w,rawExtraFieldNTFS:G,rawExtraFieldAES:Z,extraFieldLength:v}}function Lmt(e,t){let{headerInfo:n}=e,{localHeaderArray:i,extraFieldLength:o}=n,r=Lc(i),s=64-(t+qi(i))%64;s<4&&(s+=64);let a=new Uint8Array(s),c=Lc(a);Io(c,0,6534),Io(c,2,s-2);let d=i;n.localHeaderArray=i=new Uint8Array(qi(d)+s),ea(i,d),ea(i,a,qi(d)),r=Lc(i),Io(r,28,o+s),e.metadataSize+=s}function Wmt({zip64:e,dataDescriptor:t,dataDescriptorSignature:n}){let i=new Uint8Array,o,r=0,s=e?20:12;return n&&(s+=4),t&&(i=new Uint8Array(s),o=Lc(i),n&&(r=4,ji(o,0,134695760))),{dataDescriptorArray:i,dataDescriptorView:o,dataDescriptorOffset:r}}function Fmt({signature:e,compressedSize:t,uncompressedSize:n,headerInfo:i,dataDescriptorInfo:o},{zip64:r,zipCrypto:s,dataDescriptor:a}){let{headerView:c,encrypted:d}=i,{dataDescriptorView:u,dataDescriptorOffset:h}=o;(!d||s)&&e!==oi&&(ji(c,10,e),a&&ji(u,h,e)),r?a&&(ga(u,h+4,BigInt(t)),ga(u,h+12,BigInt(n))):(ji(c,14,t),ji(c,18,n),a&&(ji(u,h+4,t),ji(u,h+8,n)))}function Bmt({rawFilename:e,encrypted:t,zip64:n,localExtraFieldZip64Length:i,signature:o,compressedSize:r,uncompressedSize:s,offset:a,diskNumberStart:c,zip64UncompressedSize:d,zip64CompressedSize:u,zip64Offset:h,zip64DiskNumberStart:p},A,{dataDescriptor:f}){if(f||(t||ji(A,14,o),n||(ji(A,18,r),ji(A,22,s))),n&&i){let b=30+qi(e)+4;d&&(ga(A,b,BigInt(s)),b+=8),u&&(ga(A,b,BigInt(r)),b+=8),h&&(ga(A,b,BigInt(a)),b+=8),p&&ji(A,b,c)}}function sCe({compressedSize:e,uncompressedSize:t,offset:n,diskNumberStart:i,zip64UncompressedSize:o,zip64CompressedSize:r,zip64Offset:s,zip64DiskNumberStart:a,rawExtraFieldZip64:c}){let d=Lc(c),u=4;o&&(ga(d,u,BigInt(t)),u+=8),r&&(ga(d,u,BigInt(e)),u+=8),s&&(ga(d,u,BigInt(n)),u+=8),a&&ji(d,u,i)}async function wmt(e,t,n){let{files:i,writer:o}=e,{diskOffset:r}=o,{diskNumber:s}=o,a=0,c=0,d=e.offset-r,u=i.size;for(let[,I]of i){let{rawFilename:R,rawExtraFieldZip64:V,rawExtraFieldAES:W,rawComment:B,rawExtraFieldNTFS:N,rawExtraField:P,extendedTimestamp:g,extraFieldExtendedTimestampFlag:_,lastModDate:Z}=I,G;if(g){G=new Uint8Array(9);let w=Lc(G);Io(w,0,21589),Io(w,2,5),P6(w,4,_),ji(w,5,Math.floor(Z.getTime()/1e3))}else G=new Uint8Array;I.rawExtraFieldExtendedTimestamp=G,c+=46+qi(R,B,V,W,N,G,P)}let h=new Uint8Array(c),p=Lc(h);await Up(o);let A=0;for(let[I,R]of Array.from(i.values()).entries()){let{offset:V,rawFilename:W,rawExtraFieldZip64:B,rawExtraFieldAES:N,rawExtraFieldExtendedTimestamp:P,rawExtraFieldNTFS:g,rawExtraField:_,rawComment:Z,versionMadeBy:G,headerArray:w,headerView:X,zip64:k,zip64UncompressedSize:v,zip64CompressedSize:D,zip64DiskNumberStart:Y,zip64Offset:O,internalFileAttributes:J,externalFileAttributes:te,diskNumberStart:z,uncompressedSize:j,compressedSize:ee}=R,ge=qi(B,N,P,g,_);ji(p,a,33639248),Io(p,a+4,G),v||ji(X,18,j),D||ji(X,14,ee),ea(h,w,a+6);let ye=a+30;if(Io(p,ye,ge),ye+=2,Io(p,ye,qi(Z)),ye+=2,Io(p,ye,k&&Y?65535:z),ye+=2,Io(p,ye,J),ye+=2,te&&ji(p,ye,te),ye+=4,ji(p,ye,k&&O?4294967295:V),ye+=4,ea(h,W,ye),ye+=qi(W),ea(h,B,ye),ye+=qi(B),ea(h,N,ye),ye+=qi(N),ea(h,P,ye),ye+=qi(P),ea(h,g,ye),ye+=qi(g),ea(h,_,ye),ye+=qi(_),ea(h,Z,ye),a-A>o.availableSize&&(o.availableSize=0,await ub(o,h.slice(A,a)),A=a),a=ye,n.onprogress)try{await n.onprogress(I+1,i.size,new Cy(R))}catch{}}await ub(o,A?h.slice(A):h);let f=o.diskNumber,{availableSize:b}=o;b<22&&f++;let C=_o(e,n,D5);if(d>4294967295||c>4294967295||u>65535||f>65535){if(C===!1)throw new Error(lQ);C=!0}let T=new Uint8Array(C?98:22),E=Lc(T);a=0,C&&(ji(E,0,101075792),ga(E,4,BigInt(44)),Io(E,12,45),Io(E,14,45),ji(E,16,f),ji(E,20,s),ga(E,24,BigInt(u)),ga(E,32,BigInt(u)),ga(E,40,BigInt(c)),ga(E,48,BigInt(d)),ji(E,56,117853008),ga(E,64,BigInt(d)+BigInt(c)),ji(E,72,f+1),_o(e,n,u6,!0)&&(f=65535,s=65535),u=65535,d=4294967295,c=4294967295,a+=76),ji(E,a,101010256),Io(E,a+4,f),Io(E,a+6,s),Io(E,a+8,u),Io(E,a+10,u),ji(E,a+12,c),ji(E,a+16,d);let S=qi(t);if(S)if(S<=65535)Io(E,a+20,S);else throw new Error(lCe);await ub(o,T),S&&await ub(o,t)}async function ub(e,t){let{writable:n}=e,i=n.getWriter();try{await i.ready,e.size+=qi(t),await i.write(t)}finally{i.releaseLock()}}function w6(e){if(e)return(BigInt(e.getTime())+BigInt(116444736e5))*BigInt(1e4)}function _o(e,t,n,i){let o=t[n]===oi?e.options[n]:t[n];return o===oi?i:o}function aCe(e){return e+5*(Math.floor(e/16383)+1)}function P6(e,t,n){e.setUint8(t,n)}function Io(e,t,n){e.setUint16(t,n,!0)}function ji(e,t,n){e.setUint32(t,n,!0)}function ga(e,t,n){e.setBigUint64(t,n,!0)}function ea(e,t,n){e.set(t,n)}function Lc(e){return new DataView(e.buffer)}function qi(...e){let t=0;return e.forEach(n=>n&&(t+=n.length)),t}function gCe({version:e,bitFlag:t,compressionMethod:n,uncompressedSize:i,compressedSize:o,lastModDate:r,rawFilename:s,zip64CompressedSize:a,zip64UncompressedSize:c,extraFieldLength:d}){let u=new Uint8Array(26),h=Lc(u);Io(h,0,e),Io(h,2,t),Io(h,4,n);let p=new Uint32Array(1),A=Lc(p);Io(A,0,(r.getHours()<<6|r.getMinutes())<<5|r.getSeconds()/2),Io(A,2,(r.getFullYear()-1980<<4|r.getMonth()+1)<<5|r.getDate());let f=p[0];return ji(h,6,f),(a||o!==oi)&&ji(h,14,a?4294967295:o),(c||i!==oi)&&ji(h,18,c?4294967295:i),Io(h,22,qi(s)),Io(h,24,d),{headerArray:u,headerView:h,rawLastModDate:f}}function bCe(e,t,n,i,o){let r=0;return t&&(r=r|2048),n&&(r=r|8),(o==8||o==9)&&(e>=0&&e<=3&&(r=r|6),e>3&&e<=5&&(r=r|4),e==9&&(r=r|2)),i&&(r=r|1),r}var hwi=y(x(),1);var Nmt={},yCe;try{yCe=Nmt.url}catch{}cZ({baseURI:yCe,CompressionStreamZlib:GP,DecompressionStreamZlib:LP});var X6=32,Pmt="http://www.opengis.net/kml/2.2",Rf="http://www.google.com/kml/ext/2.2",Xmt="http://www.w3.org/2000/xmlns/";function dQ(e){this._files={},this._promises=[],this._count=0,this._modelCallback=e}var Ymt=/^data:image\/([^,;]+)/;dQ.prototype.texture=function(e){let t=this,n;if(typeof e=="string"||e instanceof Le){if(e=Le.createIfNeeded(e),!e.isDataUri)return e.url;let i=e.url.match(Ymt);n=`texture_${++this._count}`,l(i)&&(n+=`.${i[1]}`);let o=e.fetchBlob().then(function(r){t._files[n]=r});return this._promises.push(o),n}if(e instanceof HTMLCanvasElement){n=`texture_${++this._count}.png`;let i=new Promise(o=>{e.toBlob(function(r){t._files[n]=r,o()})});return this._promises.push(i),n}return""};function Mmt(e,t){return function(n){e._files[t]=n}}dQ.prototype.model=function(e,t){let n=this._modelCallback;if(!l(n))throw new me("Encountered a model entity while exporting to KML, but no model callback was supplied.");let i={},o=n(e,t,i);for(let r in i)if(i.hasOwnProperty(r)){let s=Promise.resolve(i[r]);this._promises.push(s),s.then(Mmt(this,r))}return o};Object.defineProperties(dQ.prototype,{promise:{get:function(){return Promise.all(this._promises)}},files:{get:function(){return this._files}}});function uQ(e){this._time=e}uQ.prototype.get=function(e,t,n){let i;return l(e)&&(i=l(e.getValue)?e.getValue(this._time,n):e),i??t};uQ.prototype.getColor=function(e,t){let n=this.get(e,t);if(l(n))return DT(n)};uQ.prototype.getMaterialType=function(e){if(l(e))return e.getType(this._time)};function Y6(){this._ids={},this._styles={},this._count=0}Y6.prototype.get=function(e){let t=this._ids,n=e.innerHTML;if(l(t[n]))return t[n];let i=`style-${++this._count}`;return e.setAttribute("id",i),i=`#${i}`,t[n]=i,this._styles[n]=e,i};Y6.prototype.save=function(e){let t=this._styles,n=e.childNodes[0];for(let i in t)t.hasOwnProperty(i)&&e.insertBefore(t[i],n)};function TCe(){this._ids={}}TCe.prototype.get=function(e){if(!l(e))return this.get(qn());let t=this._ids;return l(t[e])?`${e.toString()}-${++t[e]}`:(t[e]=0,e)};function M6(e){e=e??Q.EMPTY_OBJECT;let t=e.entities,n=e.kmz??!1,i=M6._createState(e),o=t.values.filter(function(d){return!l(d.parent)}),r=i.kmlDoc,s=r.documentElement;s.setAttributeNS(Xmt,"xmlns:gx",Rf);let a=r.createElement("Document");s.appendChild(a),SCe(i,a,o),i.styleCache.save(a);let c=i.externalFileHandler;return c.promise.then(function(){let u=new XMLSerializer().serializeToString(i.kmlDoc);return n?vmt(u,c.files):{kml:u,externalFiles:c.files}})}async function vmt(e,t){let n=en("ThirdParty/Workers/zip-web-worker.js"),i=en("ThirdParty/zip-module.wasm");cZ({workerURI:n,wasmURI:i});let o=new dZ("application/vnd.google-earth.kmz"),r=new eX(o);await r.add("doc.kml",new BP(e));let s=Object.keys(t);return await ECe(r,s,t,0),await r.close(),{kmz:await o.getData()}}async function ECe(e,t,n,i){if(t.length===i)return;let o=t[i];return await e.add(o,new Mp(n[o])),ECe(e,t,n,i+1)}M6._createState=function(e){let t=e.entities,n=new Y6,i=t.computeAvailability(),o=l(e.time)?e.time:i.start,r=e.defaultAvailability??i,s=e.sampleDuration??60;r.start===qe.MINIMUM_VALUE?r.stop===qe.MAXIMUM_VALUE?r=new Wn:q.addSeconds(r.stop,-10*s,r.start):r.stop===qe.MAXIMUM_VALUE&&q.addSeconds(r.start,10*s,r.stop);let a=new dQ(e.modelCallback);return{kmlDoc:document.implementation.createDocument(Pmt,"kml"),ellipsoid:e.ellipsoid??ie.default,idManager:new TCe,styleCache:n,externalFileHandler:a,time:o,valueGetter:new uQ(o),sampleDuration:s,defaultAvailability:new bs([r])}};function SCe(e,t,n){let i=e.kmlDoc,o=e.styleCache,r=e.valueGetter,s=e.idManager,a=n.length,c,d,u;for(let h=0;h<a;++h){let p=n[h];c=[],d=[],u=[],Umt(e,p,d,u),Dmt(e,p.polyline,d,u),CCe(e,p.rectangle,d,u,c),CCe(e,p.polygon,d,u,c),zmt(e,p,p.model,d,u);let A,f=p.availability;l(f)&&(A=i.createElement("TimeSpan"),q.equals(f.start,qe.MINIMUM_VALUE)||A.appendChild(En(i,"begin",q.toIso8601(f.start))),q.equals(f.stop,qe.MAXIMUM_VALUE)||A.appendChild(En(i,"end",q.toIso8601(f.stop))));for(let T=0;T<c.length;++T){let E=c[T];E.setAttribute("id",s.get(p.id)),E.appendChild(En(i,"name",p.name)),E.appendChild(En(i,"visibility",p.show)),E.appendChild(En(i,"description",p.description)),l(A)&&E.appendChild(A),t.appendChild(E)}let b=d.length;if(b>0){let T=i.createElement("Placemark");T.setAttribute("id",s.get(p.id));let E=p.name,S=p.label;if(l(S)){let R=i.createElement("LabelStyle"),V=r.get(S.text);E=l(V)&&V.length>0?V:E;let W=r.getColor(S.fillColor);l(W)&&(R.appendChild(En(i,"color",W)),R.appendChild(En(i,"colorMode","normal")));let B=r.get(S.scale);l(B)&&R.appendChild(En(i,"scale",B)),u.push(R)}T.appendChild(En(i,"name",E)),T.appendChild(En(i,"visibility",p.show)),T.appendChild(En(i,"description",p.description)),l(A)&&T.appendChild(A),t.appendChild(T);let I=u.length;if(I>0){let R=i.createElement("Style");for(let V=0;V<I;++V)R.appendChild(u[V]);T.appendChild(En(i,"styleUrl",o.get(R)))}if(d.length===1)T.appendChild(d[0]);else if(d.length>1){let R=i.createElement("MultiGeometry");for(let V=0;V<b;++V)R.appendChild(d[V]);T.appendChild(R)}}let C=p._children;if(C.length>0){let T=i.createElement("Folder");T.setAttribute("id",s.get(p.id)),T.appendChild(En(i,"name",p.name)),T.appendChild(En(i,"visibility",p.show)),T.appendChild(En(i,"description",p.description)),t.appendChild(T),SCe(e,T,C)}}}var Nd=new m,nd=new Ae,Zf=new q;function Umt(e,t,n,i){let o=e.kmlDoc,r=e.ellipsoid,s=e.valueGetter,a=t.billboard??t.point;if(!l(a)&&!l(t.path))return;let c=t.position;if(!c.isConstant){_Ce(e,t,a,n,i);return}s.get(c,void 0,Nd);let d=En(o,"coordinates",UT(Nd,r)),u=o.createElement("Point"),h=o.createElement("altitudeMode");h.appendChild(kT(e,a.heightReference)),u.appendChild(h),u.appendChild(d),n.push(u);let p=a instanceof Dc?ZCe(e,a):ICe(e,a);i.push(p)}function _Ce(e,t,n,i,o){let r=e.kmlDoc,s=e.ellipsoid,a=e.valueGetter,c,d=t.position,u=!0;d instanceof ac?(c=d.intervals,u=!1):c=t.availability??e.defaultAvailability;let h=n instanceof vA,p,A,f,b=[];for(p=0;p<c.length;++p){let T=c.get(p),E=u?d:T.data,S=r.createElement("altitudeMode");E instanceof Pp?(E=E._value,S.appendChild(kT(e,rt.CLAMP_TO_GROUND))):l(n)?S.appendChild(kT(e,n.heightReference)):S.appendChild(kT(e,rt.NONE));let I=[],R=[];if(E.isConstant){a.get(E,void 0,Nd);let W=En(r,"coordinates",UT(Nd,s));I.push(q.toIso8601(T.start)),R.push(W),I.push(q.toIso8601(T.stop)),R.push(W)}else if(E instanceof lc)for(f=E._property._times,A=0;A<f.length;++A)I.push(q.toIso8601(f[A])),E.getValueInReferenceFrame(f[A],Ni.FIXED,Nd),R.push(UT(Nd,s));else if(E instanceof Vu){f=E._times;let W=E._values;for(A=0;A<f.length;++A)I.push(q.toIso8601(f[A])),m.fromArray(W,A*3,Nd),R.push(UT(Nd,s))}else{let W=e.sampleDuration;T.start.clone(Zf),T.isStartIncluded||q.addSeconds(Zf,W,Zf);let B=T.stop;for(;q.lessThan(Zf,B);)E.getValue(Zf,Nd),I.push(q.toIso8601(Zf)),R.push(UT(Nd,s)),q.addSeconds(Zf,W,Zf);T.isStopIncluded&&q.equals(Zf,B)&&(E.getValue(Zf,Nd),I.push(q.toIso8601(Zf)),R.push(UT(Nd,s)))}let V=r.createElementNS(Rf,"Track");V.appendChild(S);for(let W=0;W<I.length;++W){let B=En(r,"when",I[W]),N=En(r,"coord",R[W],Rf);V.appendChild(B),V.appendChild(N)}h&&V.appendChild(RCe(e,n)),b.push(V)}if(b.length===1)i.push(b[0]);else if(b.length>1){let T=r.createElementNS(Rf,"MultiTrack");for(p=0;p<b.length;++p)T.appendChild(b[p]);i.push(T)}if(l(n)&&!h){let T=n instanceof Dc?ZCe(e,n):ICe(e,n);o.push(T)}let C=t.path;if(l(C)){let T=a.get(C.width),E=C.material;if(l(E)||l(T)){let S=r.createElement("LineStyle");l(T)&&S.appendChild(En(r,"width",T)),v6(e,E,S),o.push(S)}}}function ICe(e,t){let n=e.kmlDoc,i=e.valueGetter,o=n.createElement("IconStyle"),r=i.getColor(t.color);l(r)&&(o.appendChild(En(n,"color",r)),o.appendChild(En(n,"colorMode","normal")));let s=i.get(t.pixelSize);return l(s)&&o.appendChild(En(n,"scale",s/X6)),o}function ZCe(e,t){let n=e.kmlDoc,i=e.valueGetter,o=e.externalFileHandler,r=n.createElement("IconStyle"),s=i.get(t.image);if(l(s)){s=o.texture(s);let p=n.createElement("Icon");p.appendChild(En(n,"href",s));let A=i.get(t.imageSubRegion);l(A)&&(p.appendChild(En(n,"x",A.x,Rf)),p.appendChild(En(n,"y",A.y,Rf)),p.appendChild(En(n,"w",A.width,Rf)),p.appendChild(En(n,"h",A.height,Rf))),r.appendChild(p)}let a=i.getColor(t.color);l(a)&&(r.appendChild(En(n,"color",a)),r.appendChild(En(n,"colorMode","normal")));let c=i.get(t.scale);l(c)&&r.appendChild(En(n,"scale",c));let d=i.get(t.pixelOffset);if(l(d)){c=c??1,M.divideByScalar(d,c,d);let p=i.get(t.width,X6),A=i.get(t.height,X6),f=i.get(t.horizontalOrigin,Bi.CENTER);f===Bi.CENTER?d.x-=p*.5:f===Bi.RIGHT&&(d.x-=p);let b=i.get(t.verticalOrigin,Hn.CENTER);b===Hn.TOP?d.y+=A:b===Hn.CENTER&&(d.y+=A*.5);let C=n.createElement("hotSpot");C.setAttribute("x",-d.x),C.setAttribute("y",d.y),C.setAttribute("xunits","pixels"),C.setAttribute("yunits","pixels"),r.appendChild(C)}let u=i.get(t.rotation),h=i.get(t.alignedAxis);return l(u)&&m.equals(m.UNIT_Z,h)&&(u=L.toDegrees(-u),u===0&&(u=360),r.appendChild(En(n,"heading",u))),r}function Dmt(e,t,n,i){let o=e.kmlDoc,r=e.ellipsoid,s=e.valueGetter;if(!l(t))return;let a=o.createElement("LineString"),c=o.createElement("altitudeMode"),d=s.get(t.clampToGround,!1),u;d?(a.appendChild(En(o,"tessellate",!0)),u=o.createTextNode("clampToGround")):u=o.createTextNode("absolute"),c.appendChild(u),a.appendChild(c);let h=t.positions,p=s.get(h),A=En(o,"coordinates",UT(p,r));a.appendChild(A);let f=s.get(t.zIndex);d&&l(f)&&a.appendChild(En(o,"drawOrder",f,Rf)),n.push(a);let b=o.createElement("LineStyle"),C=s.get(t.width);l(C)&&b.appendChild(En(o,"width",C)),v6(e,t.material,b),i.push(b)}function kmt(e,t,n){let i=e.kmlDoc,o=e.valueGetter,r=o.get(t.height,0);n>0&&(r=n);let s=t.coordinates,a=o.get(s),c=[],d=[de.northeast,de.southeast,de.southwest,de.northwest];for(let A=0;A<4;++A)d[A](a,nd),c.push(`${L.toDegrees(nd.longitude)},${L.toDegrees(nd.latitude)},${r}`);let u=En(i,"coordinates",c.join(" ")),h=i.createElement("outerBoundaryIs"),p=i.createElement("LinearRing");return p.appendChild(u),h.appendChild(p),[h]}function xCe(e,t,n,i){let o=e.kmlDoc,r=e.ellipsoid,s=[],a=t.length;for(let u=0;u<a;++u)Ae.fromCartesian(t[u],r,nd),s.push(`${L.toDegrees(nd.longitude)},${L.toDegrees(nd.latitude)},${i?nd.height:n}`);let c=En(o,"coordinates",s.join(" ")),d=o.createElement("LinearRing");return d.appendChild(c),d}function Qmt(e,t,n){let i=e.kmlDoc,o=e.valueGetter,r=o.get(t.height,0),s=o.get(t.perPositionHeight,!1);!s&&n>0&&(r=n);let a=[],c=t.hierarchy,d=o.get(c),u=Array.isArray(d)?d:d.positions,h=i.createElement("outerBoundaryIs");h.appendChild(xCe(e,u,r,s)),a.push(h);let p=d.holes;if(l(p)){let A=p.length;for(let f=0;f<A;++f){let b=i.createElement("innerBoundaryIs");b.appendChild(xCe(e,p[f].positions,r,s)),a.push(b)}}return a}function CCe(e,t,n,i,o){let r=e.kmlDoc,s=e.valueGetter;if(!l(t))return;let a=t instanceof Fh;if(a&&s.getMaterialType(t.material)==="Image"){Omt(e,t,o);return}let c=r.createElement("Polygon"),d=s.get(t.extrudedHeight,0);d>0&&c.appendChild(En(r,"extrude",!0));let u=a?kmt(e,t,d):Qmt(e,t,d),h=u.length;for(let C=0;C<h;++C)c.appendChild(u[C]);let p=r.createElement("altitudeMode");p.appendChild(kT(e,t.heightReference)),c.appendChild(p),n.push(c);let A=r.createElement("PolyStyle"),f=s.get(t.fill,!1);f&&A.appendChild(En(r,"fill",f)),v6(e,t.material,A);let b=s.get(t.outline,!1);if(b){A.appendChild(En(r,"outline",b));let C=r.createElement("LineStyle"),T=s.get(t.outlineWidth,1);C.appendChild(En(r,"width",T));let E=s.getColor(t.outlineColor,U.BLACK);C.appendChild(En(r,"color",E)),C.appendChild(En(r,"colorMode","normal")),i.push(C)}i.push(A)}function Omt(e,t,n){let i=e.kmlDoc,o=e.valueGetter,r=e.externalFileHandler,s=i.createElement("GroundOverlay"),a=i.createElement("altitudeMode");a.appendChild(kT(e,t.heightReference)),s.appendChild(a);let c=o.get(t.height);l(c)&&s.appendChild(En(i,"altitude",c));let d=o.get(t.coordinates),u=i.createElement("LatLonBox");u.appendChild(En(i,"north",L.toDegrees(d.north))),u.appendChild(En(i,"south",L.toDegrees(d.south))),u.appendChild(En(i,"east",L.toDegrees(d.east))),u.appendChild(En(i,"west",L.toDegrees(d.west))),s.appendChild(u);let h=o.get(t.material),p=r.texture(h.image),A=i.createElement("Icon");A.appendChild(En(i,"href",p)),s.appendChild(A);let f=h.color;l(f)&&s.appendChild(En(i,"color",DT(h.color))),n.push(s)}function RCe(e,t){let n=e.kmlDoc,i=e.valueGetter,o=e.externalFileHandler,r=n.createElement("Model"),s=i.get(t.scale);if(l(s)){let d=n.createElement("scale");d.appendChild(En(n,"x",s)),d.appendChild(En(n,"y",s)),d.appendChild(En(n,"z",s)),r.appendChild(d)}let a=n.createElement("Link"),c=o.model(t,e.time);return a.appendChild(En(n,"href",c)),r.appendChild(a),r}function zmt(e,t,n,i,o){let r=e.kmlDoc,s=e.ellipsoid,a=e.valueGetter;if(!l(n))return;let c=t.position;if(!c.isConstant){_Ce(e,t,n,i,o);return}let d=RCe(e,n),u=r.createElement("altitudeMode");u.appendChild(kT(e,n.heightReference)),d.appendChild(u),a.get(c,void 0,Nd),Ae.fromCartesian(Nd,s,nd);let h=r.createElement("Location");h.appendChild(En(r,"longitude",L.toDegrees(nd.longitude))),h.appendChild(En(r,"latitude",L.toDegrees(nd.latitude))),h.appendChild(En(r,"altitude",nd.height)),d.appendChild(h),i.push(d)}function v6(e,t,n){let i=e.kmlDoc,o=e.valueGetter;if(!l(t))return;let r=o.get(t);if(!l(r))return;let s,a=o.getMaterialType(t),c,d;switch(a){case"Image":s=DT(U.WHITE);break;case"Color":case"Grid":case"PolylineGlow":case"PolylineArrow":case"PolylineDash":s=DT(r.color);break;case"PolylineOutline":s=DT(r.color),c=DT(r.outlineColor),d=r.outlineWidth,n.appendChild(En(i,"outerColor",c,Rf)),n.appendChild(En(i,"outerWidth",d,Rf));break;case"Stripe":s=DT(r.oddColor);break}l(s)&&(n.appendChild(En(i,"color",s)),n.appendChild(En(i,"colorMode","normal")))}function kT(e,t){let n=e.kmlDoc,o=e.valueGetter.get(t,rt.NONE),r;switch(o){case rt.NONE:r=n.createTextNode("absolute");break;case rt.CLAMP_TO_GROUND:r=n.createTextNode("clampToGround");break;case rt.RELATIVE_TO_GROUND:r=n.createTextNode("relativeToGround");break}return r}function UT(e,t){Array.isArray(e)||(e=[e]);let n=e.length,i=[];for(let o=0;o<n;++o)Ae.fromCartesian(e[o],t,nd),i.push(`${L.toDegrees(nd.longitude)},${L.toDegrees(nd.latitude)},${nd.height}`);return i.join(" ")}function En(e,t,n,i){n=n??"",typeof n=="boolean"&&(n=n?"1":"0");let o=l(i)?e.createElementNS(i,t):e.createElement(t),r=n==="string"&&n.indexOf("<")!==-1?e.createCDATASection(n):e.createTextNode(n);return o.appendChild(r),o}function DT(e){let t="",n=e.toBytes();for(let i=3;i>=0;--i)t+=n[i]<16?`0${n[i].toString(16)}`:n[i].toString(16);return t}var U6=M6;var UPi=y(x(),1);var gNi=y(x(),1);function nX(){this._cache={}}nX.prototype.fromColor=function(e,t){return mQ(void 0,void 0,e,t,this._cache)};nX.prototype.fromUrl=function(e,t,n){return mQ(e,void 0,t,n,this._cache)};nX.prototype.fromMakiIconId=function(e,t,n){return mQ(en(`Assets/Textures/maki/${encodeURIComponent(e)}.png`),void 0,t,n,this._cache)};nX.prototype.fromText=function(e,t,n){return mQ(void 0,e,t,n,this._cache)};var Hmt=new U;function Jmt(e,t,n){e.save(),e.scale(n/24,n/24),e.fillStyle=t.toCssColorString(),e.strokeStyle=t.brighten(.6,Hmt).toCssColorString(),e.lineWidth=.846,e.beginPath(),e.moveTo(6.72,.422),e.lineTo(17.28,.422),e.bezierCurveTo(18.553,.422,19.577,1.758,19.577,3.415),e.lineTo(19.577,10.973),e.bezierCurveTo(19.577,12.63,18.553,13.966,17.282,13.966),e.lineTo(14.386,14.008),e.lineTo(11.826,23.578),e.lineTo(9.614,14.008),e.lineTo(6.719,13.965),e.bezierCurveTo(5.446,13.983,4.422,12.629,4.422,10.972),e.lineTo(4.422,3.416),e.bezierCurveTo(4.423,1.76,5.447,.423,6.718,.423),e.closePath(),e.fill(),e.stroke(),e.restore()}function VCe(e,t,n){let i=n/2.5,o=i,r=i;t.width>t.height?r=i*(t.height/t.width):t.width<t.height&&(o=i*(t.width/t.height));let s=Math.round((n-o)/2),a=Math.round(7/24*n-r/2);e.globalCompositeOperation="destination-out",e.drawImage(t,s-1,a,o,r),e.drawImage(t,s,a-1,o,r),e.drawImage(t,s+1,a,o,r),e.drawImage(t,s,a+1,o,r),e.globalCompositeOperation="destination-over",e.fillStyle=U.BLACK.toCssColorString(),e.fillRect(s-1,a-1,o+2,r+2),e.globalCompositeOperation="destination-out",e.drawImage(t,s,a,o,r),e.globalCompositeOperation="destination-over",e.fillStyle=U.WHITE.toCssColorString(),e.fillRect(s-1,a-2,o+2,r+2)}var tX=new Array(4);function mQ(e,t,n,i,o){tX[0]=e,tX[1]=t,tX[2]=n,tX[3]=i;let r=JSON.stringify(tX),s=o[r];if(l(s))return s;let a=document.createElement("canvas");a.width=i,a.height=i;let c=a.getContext("2d");if(Jmt(c,n,i),l(e)){let u=Le.createIfNeeded(e).fetchImage().then(function(h){return VCe(c,h,i),o[r]=a,a});return o[r]=u,u}else if(l(t)){let d=MC(t,{font:`bold ${i}px sans-serif`});VCe(c,d,i)}return o[r]=a,a}var mb=nX;var aPi=y(x());var _Ni=y(x());var TNi=y(x());var yNi=y(x());function D6(e){return e}function hQ(e){if(e==null)return D6;var t,n,i=e.scale[0],o=e.scale[1],r=e.translate[0],s=e.translate[1];return function(a,c){c||(t=n=0);var d=2,u=a.length,h=new Array(u);for(h[0]=(t+=a[0])*i+r,h[1]=(n+=a[1])*o+s;d<u;)h[d]=a[d],++d;return h}}var LNi=y(x());var ZNi=y(x());function GCe(e,t){for(var n,i=e.length,o=i-t;o<--i;)n=e[o],e[o++]=e[i],e[i]=n}function k6(e,t){return typeof t=="string"&&(t=e.objects[t]),t.type==="GeometryCollection"?{type:"FeatureCollection",features:t.geometries.map(function(n){return LCe(e,n)})}:LCe(e,t)}function LCe(e,t){var n=t.id,i=t.bbox,o=t.properties==null?{}:t.properties,r=Q6(e,t);return n==null&&i==null?{type:"Feature",properties:o,geometry:r}:i==null?{type:"Feature",id:n,properties:o,geometry:r}:{type:"Feature",id:n,bbox:i,properties:o,geometry:r}}function Q6(e,t){var n=hQ(e.transform),i=e.arcs;function o(u,h){h.length&&h.pop();for(var p=i[u<0?~u:u],A=0,f=p.length;A<f;++A)h.push(n(p[A],A));u<0&&GCe(h,f)}function r(u){return n(u)}function s(u){for(var h=[],p=0,A=u.length;p<A;++p)o(u[p],h);return h.length<2&&h.push(h[0]),h}function a(u){for(var h=s(u);h.length<4;)h.push(h[0]);return h}function c(u){return u.map(a)}function d(u){var h=u.type,p;switch(h){case"GeometryCollection":return{type:h,geometries:u.geometries.map(d)};case"Point":p=r(u.coordinates);break;case"MultiPoint":p=u.coordinates.map(r);break;case"LineString":p=s(u.arcs);break;case"MultiLineString":p=u.arcs.map(s);break;case"Polygon":p=c(u.arcs);break;case"MultiPolygon":p=u.arcs.map(c);break;default:return null}return{type:h,coordinates:p}}return d(t)}var PNi=y(x());var FNi=y(x());var vNi=y(x());var zNi=y(x());var DNi=y(x());var ePi=y(x());var KNi=y(x());function fQ(e){return m.fromDegrees(e[0],e[1],e[2])}var O6={"urn:ogc:def:crs:OGC:1.3:CRS84":fQ,"EPSG:4326":fQ,"urn:ogc:def:crs:EPSG::4326":fQ},WCe={},FCe={},z6=48,H6,J6=U.ROYALBLUE,K6=U.YELLOW,j6=2,q6=U.fromBytes(255,255,0,100),$6=!1,eht={small:24,medium:48,large:64},tht=["title","description","marker-size","marker-symbol","marker-color","stroke","stroke-opacity","stroke-width","fill","fill-opacity"];function BCe(e,t){let n="";for(let i in e)if(e.hasOwnProperty(i)){if(i===t||tht.indexOf(i)!==-1)continue;let o=e[i];l(o)&&(typeof o=="object"?n+=`<tr><th>${i}</th><td>${BCe(o)}</td></tr>`:n+=`<tr><th>${i}</th><td>${o}</td></tr>`)}return n.length>0&&(n=`<table class="cesium-infoBox-defaultTable"><tbody>${n}</tbody></table>`),n}function nht(e,t,n){let i;return function(o,r){return l(i)||(i=e(t,n)),i}}function iht(e,t){return new Bh(nht(BCe,e,t),!0)}function pQ(e,t,n){let i=e.id;if(!l(i)||e.type!=="Feature")i=qn();else{let s=2,a=i;for(;l(t.getById(a));)a=`${i}_${s}`,s++;i=a}let o=t.getOrCreateEntity(i),r=e.properties;if(l(r)){o.properties=r;let s,a=r.title;if(l(a))o.name=a,s="title";else{let d=Number.MAX_VALUE;for(let u in r)if(r.hasOwnProperty(u)&&r[u]){let h=u.toLowerCase();if(d>1&&h==="title"){d=1,s=u;break}else d>2&&h==="name"?(d=2,s=u):d>3&&/title/i.test(u)?(d=3,s=u):d>4&&/name/i.test(u)&&(d=4,s=u)}l(s)&&(o.name=r[s])}let c=r.description;c!==null&&(o.description=l(c)?new fi(c):n(r,s))}return o}function eq(e,t){let n=new Array(e.length);for(let i=0;i<e.length;i++)n[i]=t(e[i]);return n}var wCe={Feature:PCe,FeatureCollection:oht,GeometryCollection:XCe,LineString:DCe,MultiLineString:kCe,MultiPoint:vCe,MultiPolygon:zCe,Point:MCe,Polygon:OCe,Topology:HCe},NCe={GeometryCollection:XCe,LineString:DCe,MultiLineString:kCe,MultiPoint:vCe,MultiPolygon:zCe,Point:MCe,Polygon:OCe,Topology:HCe};function PCe(e,t,n,i,o){if(t.geometry===null){pQ(t,e._entityCollection,o.describe);return}if(!l(t.geometry))throw new me("feature.geometry is required.");let r=t.geometry.type,s=NCe[r];if(!l(s))throw new me(`Unknown geometry type: ${r}`);s(e,t,t.geometry,i,o)}function oht(e,t,n,i,o){let r=t.features;for(let s=0,a=r.length;s<a;s++)PCe(e,r[s],void 0,i,o)}function XCe(e,t,n,i,o){let r=n.geometries;for(let s=0,a=r.length;s<a;s++){let c=r[s],d=c.type,u=NCe[d];if(!l(u))throw new me(`Unknown geometry type: ${d}`);u(e,t,c,i,o)}}function YCe(e,t,n,i,o){let r=o.markerSymbol,s=o.markerColor,a=o.markerSize,c=t.properties;if(l(c)){let A=c["marker-color"];l(A)&&(s=U.fromCssColorString(A)),a=eht[c["marker-size"]]??a;let f=c["marker-symbol"];l(f)&&(r=f)}let d;l(r)?r.length===1?d=e._pinBuilder.fromText(r.toUpperCase(),s,a):d=e._pinBuilder.fromMakiIconId(r,s,a):d=e._pinBuilder.fromColor(s,a);let u=new Dc;u.verticalOrigin=new fi(Hn.BOTTOM),i.length===2&&o.clampToGround&&(u.heightReference=rt.CLAMP_TO_GROUND);let h=pQ(t,e._entityCollection,o.describe);h.billboard=u,h.position=new Rl(n(i));let p=Promise.resolve(d).then(function(A){u.image=new fi(A)}).catch(function(){u.image=new fi(e._pinBuilder.fromColor(s,a))});e._promises.push(p)}function MCe(e,t,n,i,o){YCe(e,t,i,n.coordinates,o)}function vCe(e,t,n,i,o){let r=n.coordinates;for(let s=0;s<r.length;s++)YCe(e,t,i,r[s],o)}function UCe(e,t,n,i,o){let r=o.strokeMaterialProperty,s=o.strokeWidthProperty,a=t.properties;if(l(a)){let u=a["stroke-width"];l(u)&&(s=new fi(u));let h,p=a.stroke;l(p)&&(h=U.fromCssColorString(p));let A=a["stroke-opacity"];l(A)&&A!==1&&(l(h)||(h=r.color.getValue().clone()),h.alpha=A),l(h)&&(r=new Kt(h))}let c=pQ(t,e._entityCollection,o.describe),d=new Qc;c.polyline=d,d.clampToGround=o.clampToGround,d.material=r,d.width=s,d.positions=new fi(eq(i,n)),d.arcType=un.RHUMB}function DCe(e,t,n,i,o){UCe(e,t,i,n.coordinates,o)}function kCe(e,t,n,i,o){let r=n.coordinates;for(let s=0;s<r.length;s++)UCe(e,t,i,r[s],o)}function QCe(e,t,n,i,o){if(i.length===0||i[0].length===0)return;let r=o.strokeMaterialProperty.color,s=o.fillMaterialProperty,a=o.strokeWidthProperty,c=t.properties;if(l(c)){let A=c["stroke-width"];l(A)&&(a=new fi(A));let f,b=c.stroke;l(b)&&(f=U.fromCssColorString(b));let C=c["stroke-opacity"];l(C)&&C!==1&&(l(f)||(f=r.getValue().clone()),f.alpha=C),l(f)&&(r=new fi(f));let T,E=c.fill,S=s.color.getValue();l(E)&&(T=U.fromCssColorString(E),T.alpha=S.alpha),C=c["fill-opacity"],l(C)&&C!==S.alpha&&(l(T)||(T=S.clone()),T.alpha=C),l(T)&&(s=new Kt(T))}let d=new Wh;d.outline=new fi(!0),d.outlineColor=r,d.outlineWidth=a,d.material=s,d.arcType=un.RHUMB;let u=[];for(let A=1,f=i.length;A<f;A++)u.push(new _c(eq(i[A],n)));let h=i[0];d.hierarchy=new fi(new _c(eq(h,n),u)),h[0].length>2?d.perPositionHeight=new fi(!0):o.clampToGround||(d.height=0);let p=pQ(t,e._entityCollection,o.describe);p.polygon=d}function OCe(e,t,n,i,o){QCe(e,t,i,n.coordinates,o)}function zCe(e,t,n,i,o){let r=n.coordinates;for(let s=0;s<r.length;s++)QCe(e,t,i,r[s],o)}function HCe(e,t,n,i,o){for(let r in n.objects)if(n.objects.hasOwnProperty(r)){let s=k6(n,n.objects[r]),a=wCe[s.type];a(e,s,s,i,o)}}function Ey(e){this._name=e,this._changed=new xe,this._error=new xe,this._isLoading=!1,this._loading=new xe,this._entityCollection=new Ya(this),this._promises=[],this._pinBuilder=new mb,this._entityCluster=new _u,this._credit=void 0,this._resourceCredits=[]}Ey.load=function(e,t){return new Ey().load(e,t)};Object.defineProperties(Ey,{markerSize:{get:function(){return z6},set:function(e){z6=e}},markerSymbol:{get:function(){return H6},set:function(e){H6=e}},markerColor:{get:function(){return J6},set:function(e){J6=e}},stroke:{get:function(){return K6},set:function(e){K6=e}},strokeWidth:{get:function(){return j6},set:function(e){j6=e}},fill:{get:function(){return q6},set:function(e){q6=e}},clampToGround:{get:function(){return $6},set:function(e){$6=e}},crsNames:{get:function(){return O6}},crsLinkHrefs:{get:function(){return WCe}},crsLinkTypes:{get:function(){return FCe}}});Object.defineProperties(Ey.prototype,{name:{get:function(){return this._name},set:function(e){this._name!==e&&(this._name=e,this._changed.raiseEvent(this))}},clock:{value:void 0,writable:!1},entities:{get:function(){return this._entityCollection}},isLoading:{get:function(){return this._isLoading}},changedEvent:{get:function(){return this._changed}},errorEvent:{get:function(){return this._error}},loadingEvent:{get:function(){return this._loading}},show:{get:function(){return this._entityCollection.show},set:function(e){this._entityCollection.show=e}},clustering:{get:function(){return this._entityCluster},set:function(e){this._entityCluster=e}},credit:{get:function(){return this._credit}}});Ey.prototype.load=function(e,t){return JCe(this,e,t,!0)};Ey.prototype.process=function(e,t){return JCe(this,e,t,!1)};function JCe(e,t,n,i){ys.setLoading(e,!0),n=n??Q.EMPTY_OBJECT;let o=n.credit;typeof o=="string"&&(o=new Et(o)),e._credit=o;let r=t,s=n.sourceUri;if(typeof t=="string"||t instanceof Le){t=Le.createIfNeeded(t),r=t.fetchJson(),s=s??t.getUrlComponent();let a=e._resourceCredits,c=t.credits;if(l(c)){let d=c.length;for(let u=0;u<d;u++)a.push(c[u])}}return n={describe:n.describe??iht,markerSize:n.markerSize??z6,markerSymbol:n.markerSymbol??H6,markerColor:n.markerColor??J6,strokeWidthProperty:new fi(n.strokeWidth??j6),strokeMaterialProperty:new Kt(n.stroke??K6),fillMaterialProperty:new Kt(n.fill??q6),clampToGround:n.clampToGround??$6},Promise.resolve(r).then(function(a){return rht(e,a,n,s,i)}).catch(function(a){throw ys.setLoading(e,!1),e._error.raiseEvent(e,a),a})}Ey.prototype.update=function(e){return!0};function rht(e,t,n,i,o){let r;l(i)&&(r=Jg(i)),l(r)&&e._name!==r&&(e._name=r,e._changed.raiseEvent(e));let s=wCe[t.type];if(!l(s))throw new me(`Unsupported GeoJSON object type: ${t.type}`);let a=t.crs,c=a!==null?fQ:null;if(l(a)){if(!l(a.properties))throw new me("crs.properties is undefined.");let d=a.properties;if(a.type==="name"){if(c=O6[d.name],!l(c))throw new me(`Unknown crs name: ${d.name}`)}else if(a.type==="link"){let u=WCe[d.href];if(l(u)||(u=FCe[d.type]),!l(u))throw new me(`Unable to resolve crs link: ${JSON.stringify(d)}`);c=u(d)}else if(a.type==="EPSG"){if(c=O6[`EPSG:${d.code}`],!l(c))throw new me(`Unknown crs EPSG code: ${d.code}`)}else throw new me(`Unknown crs type: ${a.type}`)}return Promise.resolve(c).then(function(d){return o&&e._entityCollection.removeAll(),d!==null&&s(e,t,t,d,n),Promise.all(e._promises).then(function(){return e._promises.length=0,ys.setLoading(e,!1),e})})}var Sy=Ey;var kPi=y(x(),1);function sht(e){return typeof e=="string"&&(e=document.getElementById(e)),e}var vn=sht;var FMi=y(x(),1);var zYi=y(x());var LYi=y(x());var OPi=y(x()),KCe="4.0.0";var HPi=y(x());function aht(e){return e===void 0}function wu(e){return typeof e=="boolean"}function jCe(e,t){for(var n in t)t.hasOwnProperty(n)&&aht(e[n])&&(e[n]=t[n]);return e}function qCe(e,t,n){var i;return e.length>t&&(n==null?(n="&hellip;",i=3):i=n.length,e=e.substring(0,t-i)+n),e}function br(e,t){for(var n=e.length-1;n>=0;n--)e[n]===t&&e.splice(n,1)}function _y(e,t){for(var n=e.length-1;n>=0;n--)t(e[n])===!0&&e.splice(n,1)}function Iy(e){throw new Error("Unhandled case for value: '".concat(e,"'"))}var hXi=y(x());var eXi=y(x());var jPi=y(x()),Zy=/[A-Za-z]/,va=/[\d]/;var Nu=/\s/,AQ=/['"]/,$Ce=/[\x00-\x1F\x7F]/,eTe=/A-Za-z\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0-\u08B4\u08B6-\u08BD\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C60\u0C61\u0C80\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D54-\u0D56\u0D5F-\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16F1-\u16F8\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1877\u1880-\u1884\u1887-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1C80-\u1C88\u1CE9-\u1CEC\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FD5\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788\uA78B-\uA7AE\uA7B0-\uA7B7\uA7F7-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA8FD\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uA9E0-\uA9E4\uA9E6-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB65\uAB70-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC/.source,cht=/\u2700-\u27bf\udde6-\uddff\ud800-\udbff\udc00-\udfff\ufe0e\ufe0f\u0300-\u036f\ufe20-\ufe23\u20d0-\u20f0\ud83c\udffb-\udfff\u200d\u3299\u3297\u303d\u3030\u24c2\ud83c\udd70-\udd71\udd7e-\udd7f\udd8e\udd91-\udd9a\udde6-\uddff\ude01-\ude02\ude1a\ude2f\ude32-\ude3a\ude50-\ude51\u203c\u2049\u25aa-\u25ab\u25b6\u25c0\u25fb-\u25fe\u00a9\u00ae\u2122\u2139\udc04\u2600-\u26FF\u2b05\u2b06\u2b07\u2b1b\u2b1c\u2b50\u2b55\u231a\u231b\u2328\u23cf\u23e9-\u23f3\u23f8-\u23fa\udccf\u2935\u2934\u2190-\u21ff/.source,lht=/\u0300-\u036F\u0483-\u0489\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u0610-\u061A\u064B-\u065F\u0670\u06D6-\u06DC\u06DF-\u06E4\u06E7\u06E8\u06EA-\u06ED\u0711\u0730-\u074A\u07A6-\u07B0\u07EB-\u07F3\u0816-\u0819\u081B-\u0823\u0825-\u0827\u0829-\u082D\u0859-\u085B\u08D4-\u08E1\u08E3-\u0903\u093A-\u093C\u093E-\u094F\u0951-\u0957\u0962\u0963\u0981-\u0983\u09BC\u09BE-\u09C4\u09C7\u09C8\u09CB-\u09CD\u09D7\u09E2\u09E3\u0A01-\u0A03\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A70\u0A71\u0A75\u0A81-\u0A83\u0ABC\u0ABE-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AE2\u0AE3\u0B01-\u0B03\u0B3C\u0B3E-\u0B44\u0B47\u0B48\u0B4B-\u0B4D\u0B56\u0B57\u0B62\u0B63\u0B82\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD7\u0C00-\u0C03\u0C3E-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C62\u0C63\u0C81-\u0C83\u0CBC\u0CBE-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0CE2\u0CE3\u0D01-\u0D03\u0D3E-\u0D44\u0D46-\u0D48\u0D4A-\u0D4D\u0D57\u0D62\u0D63\u0D82\u0D83\u0DCA\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DF2\u0DF3\u0E31\u0E34-\u0E3A\u0E47-\u0E4E\u0EB1\u0EB4-\u0EB9\u0EBB\u0EBC\u0EC8-\u0ECD\u0F18\u0F19\u0F35\u0F37\u0F39\u0F3E\u0F3F\u0F71-\u0F84\u0F86\u0F87\u0F8D-\u0F97\u0F99-\u0FBC\u0FC6\u102B-\u103E\u1056-\u1059\u105E-\u1060\u1062-\u1064\u1067-\u106D\u1071-\u1074\u1082-\u108D\u108F\u109A-\u109D\u135D-\u135F\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17B4-\u17D3\u17DD\u180B-\u180D\u1885\u1886\u18A9\u1920-\u192B\u1930-\u193B\u1A17-\u1A1B\u1A55-\u1A5E\u1A60-\u1A7C\u1A7F\u1AB0-\u1ABE\u1B00-\u1B04\u1B34-\u1B44\u1B6B-\u1B73\u1B80-\u1B82\u1BA1-\u1BAD\u1BE6-\u1BF3\u1C24-\u1C37\u1CD0-\u1CD2\u1CD4-\u1CE8\u1CED\u1CF2-\u1CF4\u1CF8\u1CF9\u1DC0-\u1DF5\u1DFB-\u1DFF\u20D0-\u20F0\u2CEF-\u2CF1\u2D7F\u2DE0-\u2DFF\u302A-\u302F\u3099\u309A\uA66F-\uA672\uA674-\uA67D\uA69E\uA69F\uA6F0\uA6F1\uA802\uA806\uA80B\uA823-\uA827\uA880\uA881\uA8B4-\uA8C5\uA8E0-\uA8F1\uA926-\uA92D\uA947-\uA953\uA980-\uA983\uA9B3-\uA9C0\uA9E5\uAA29-\uAA36\uAA43\uAA4C\uAA4D\uAA7B-\uAA7D\uAAB0\uAAB2-\uAAB4\uAAB7\uAAB8\uAABE\uAABF\uAAC1\uAAEB-\uAAEF\uAAF5\uAAF6\uABE3-\uABEA\uABEC\uABED\uFB1E\uFE00-\uFE0F\uFE20-\uFE2F/.source,dht=eTe+cht+lht,tTe=/0-9\u0660-\u0669\u06F0-\u06F9\u07C0-\u07C9\u0966-\u096F\u09E6-\u09EF\u0A66-\u0A6F\u0AE6-\u0AEF\u0B66-\u0B6F\u0BE6-\u0BEF\u0C66-\u0C6F\u0CE6-\u0CEF\u0D66-\u0D6F\u0DE6-\u0DEF\u0E50-\u0E59\u0ED0-\u0ED9\u0F20-\u0F29\u1040-\u1049\u1090-\u1099\u17E0-\u17E9\u1810-\u1819\u1946-\u194F\u19D0-\u19D9\u1A80-\u1A89\u1A90-\u1A99\u1B50-\u1B59\u1BB0-\u1BB9\u1C40-\u1C49\u1C50-\u1C59\uA620-\uA629\uA8D0-\uA8D9\uA900-\uA909\uA9D0-\uA9D9\uA9F0-\uA9F9\uAA50-\uAA59\uABF0-\uABF9\uFF10-\uFF19/.source,JPi=new RegExp("[".concat(eTe+tTe,"]")),tq=dht+tTe,Vf=new RegExp("[".concat(tq,"]"));var gQ=(function(){function e(t){t===void 0&&(t={}),this.tagName="",this.attrs={},this.innerHTML="",this.tagName=t.tagName||"",this.attrs=t.attrs||{},this.innerHTML=t.innerHtml||t.innerHTML||""}return e.prototype.setTagName=function(t){return this.tagName=t,this},e.prototype.getTagName=function(){return this.tagName||""},e.prototype.setAttr=function(t,n){var i=this.getAttrs();return i[t]=n,this},e.prototype.getAttr=function(t){return this.getAttrs()[t]},e.prototype.setAttrs=function(t){return Object.assign(this.getAttrs(),t),this},e.prototype.getAttrs=function(){return this.attrs||(this.attrs={})},e.prototype.setClass=function(t){return this.setAttr("class",t)},e.prototype.addClass=function(t){for(var n=this.getClass(),i=n?n.split(Nu):[],o=t.split(Nu),r;r=o.shift();)i.indexOf(r)===-1&&i.push(r);return this.getAttrs().class=i.join(" "),this},e.prototype.removeClass=function(t){for(var n=this.getClass(),i=n?n.split(Nu):[],o=t.split(Nu),r;i.length&&(r=o.shift());){var s=i.indexOf(r);s!==-1&&i.splice(s,1)}return this.getAttrs().class=i.join(" "),this},e.prototype.getClass=function(){return this.getAttrs().class||""},e.prototype.hasClass=function(t){return(" "+this.getClass()+" ").indexOf(" "+t+" ")!==-1},e.prototype.setInnerHTML=function(t){return this.innerHTML=t,this},e.prototype.setInnerHtml=function(t){return this.setInnerHTML(t)},e.prototype.getInnerHTML=function(){return this.innerHTML||""},e.prototype.getInnerHtml=function(){return this.getInnerHTML()},e.prototype.toAnchorString=function(){var t=this.getTagName(),n=this.buildAttrsStr();return n=n?" "+n:"",["<",t,n,">",this.getInnerHtml(),"</",t,">"].join("")},e.prototype.buildAttrsStr=function(){if(!this.attrs)return"";var t=this.getAttrs(),n=[];for(var i in t)t.hasOwnProperty(i)&&n.push(i+'="'+t[i]+'"');return n.join(" ")},e})();var nXi=y(x());function nTe(e,t,n){var i,o;n==null?(n="&hellip;",o=3,i=8):(o=n.length,i=n.length);var r=function(E){var S={},I=E,R=I.match(/^([a-z]+):\/\//i);return R&&(S.scheme=R[1],I=I.substr(R[0].length)),R=I.match(/^(.*?)(?=(\?|#|\/|$))/i),R&&(S.host=R[1],I=I.substr(R[0].length)),R=I.match(/^\/(.*?)(?=(\?|#|$))/i),R&&(S.path=R[1],I=I.substr(R[0].length)),R=I.match(/^\?(.*?)(?=(#|$))/i),R&&(S.query=R[1],I=I.substr(R[0].length)),R=I.match(/^#(.*?)$/i),R&&(S.fragment=R[1]),S},s=function(E){var S="";return E.scheme&&E.host&&(S+=E.scheme+"://"),E.host&&(S+=E.host),E.path&&(S+="/"+E.path),E.query&&(S+="?"+E.query),E.fragment&&(S+="#"+E.fragment),S},a=function(E,S){var I=S/2,R=Math.ceil(I),V=-1*Math.floor(I),W="";return V<0&&(W=E.substr(V)),E.substr(0,R)+n+W};if(e.length<=t)return e;var c=t-o,d=r(e);if(d.query){var u=d.query.match(/^(.*?)(?=(\?|\#))(.*?)$/i);u&&(d.query=d.query.substr(0,u[1].length),e=s(d))}if(e.length<=t||(d.host&&(d.host=d.host.replace(/^www\./,""),e=s(d)),e.length<=t))return e;var h="";if(d.host&&(h+=d.host),h.length>=c)return d.host.length==t?(d.host.substr(0,t-o)+n).substr(0,c+i):a(h,c).substr(0,c+i);var p="";if(d.path&&(p+="/"+d.path),d.query&&(p+="?"+d.query),p)if((h+p).length>=c){if((h+p).length==t)return(h+p).substr(0,t);var A=c-h.length;return(h+a(p,A)).substr(0,c+i)}else h+=p;if(d.fragment){var f="#"+d.fragment;if((h+f).length>=c){if((h+f).length==t)return(h+f).substr(0,t);var b=c-h.length;return(h+a(f,b)).substr(0,c+i)}else h+=f}if(d.scheme&&d.host){var C=d.scheme+"://";if((h+C).length<c)return(C+h).substr(0,t)}if(h.length<=t)return h;var T="";return c>0&&(T=h.substr(-1*Math.floor(c/2))),(h.substr(0,Math.ceil(c/2))+n+T).substr(0,c+i)}var oXi=y(x());function iTe(e,t,n){if(e.length<=t)return e;var i,o;n==null?(n="&hellip;",i=8,o=3):(i=n.length,o=n.length);var r=t-o,s="";return r>0&&(s=e.substr(-1*Math.floor(r/2))),(e.substr(0,Math.ceil(r/2))+n+s).substr(0,r+i)}var aXi=y(x());function oTe(e,t,n){return qCe(e,t,n)}var rTe=(function(){function e(t){t===void 0&&(t={}),this.newWindow=!1,this.truncate={},this.className="",this.newWindow=t.newWindow||!1,this.truncate=t.truncate||{},this.className=t.className||""}return e.prototype.build=function(t){return new gQ({tagName:"a",attrs:this.createAttrs(t),innerHtml:this.processAnchorText(t.getAnchorText())})},e.prototype.createAttrs=function(t){var n={href:t.getAnchorHref()},i=this.createCssClass(t);return i&&(n.class=i),this.newWindow&&(n.target="_blank",n.rel="noopener noreferrer"),this.truncate&&this.truncate.length&&this.truncate.length<t.getAnchorText().length&&(n.title=t.getAnchorHref()),n},e.prototype.createCssClass=function(t){var n=this.className;if(n){for(var i=[n],o=t.getCssClassSuffixes(),r=0,s=o.length;r<s;r++)i.push(n+"-"+o[r]);return i.join(" ")}else return""},e.prototype.processAnchorText=function(t){return t=this.doTruncate(t),t},e.prototype.doTruncate=function(t){var n=this.truncate;if(!n||!n.length)return t;var i=n.length,o=n.location;return o==="smart"?nTe(t,i):o==="middle"?iTe(t,i):oTe(t,i)},e})();var AYi=y(x());var RXi=y(x());var pXi=y(x(),1),nq=function(e,t){return nq=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,i){n.__proto__=i}||function(n,i){for(var o in i)Object.prototype.hasOwnProperty.call(i,o)&&(n[o]=i[o])},nq(e,t)};function Qp(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");nq(e,t);function n(){this.constructor=e}e.prototype=t===null?Object.create(t):(n.prototype=t.prototype,new n)}var Ua=function(){return Ua=Object.assign||function(t){for(var n,i=1,o=arguments.length;i<o;i++){n=arguments[i];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(t[r]=n[r])}return t},Ua.apply(this,arguments)};var gXi=y(x()),Op=(function(){function e(t){this._=null,this.matchedText="",this.offset=0,this.tagBuilder=t.tagBuilder,this.matchedText=t.matchedText,this.offset=t.offset}return e.prototype.getMatchedText=function(){return this.matchedText},e.prototype.setOffset=function(t){this.offset=t},e.prototype.getOffset=function(){return this.offset},e.prototype.getCssClassSuffixes=function(){return[this.type]},e.prototype.buildTag=function(){return this.tagBuilder.build(this)},e})();var EXi=y(x());var yXi=y(x()),uht="(?:xn--vermgensberatung-pwb|xn--vermgensberater-ctb|xn--clchc0ea0b2g2a9gcd|xn--w4r85el8fhu5dnra|northwesternmutual|travelersinsurance|verm\xF6gensberatung|xn--5su34j936bgsg|xn--bck1b9a5dre4c|xn--mgbah1a3hjkrd|xn--mgbai9azgqp6j|xn--mgberp4a5d4ar|xn--xkc2dl3a5ee0h|verm\xF6gensberater|xn--fzys8d69uvgm|xn--mgba7c0bbn0a|xn--mgbcpq6gpa1a|xn--xkc2al3hye2a|americanexpress|kerryproperties|sandvikcoromant|xn--i1b6b1a6a2e|xn--kcrx77d1x4a|xn--lgbbat1ad8j|xn--mgba3a4f16a|xn--mgbaakc7dvf|xn--mgbc0a9azcg|xn--nqv7fs00ema|americanfamily|bananarepublic|cancerresearch|cookingchannel|kerrylogistics|weatherchannel|xn--54b7fta0cc|xn--6qq986b3xl|xn--80aqecdr1a|xn--b4w605ferd|xn--fiq228c5hs|xn--h2breg3eve|xn--jlq480n2rg|xn--jlq61u9w7b|xn--mgba3a3ejt|xn--mgbaam7a8h|xn--mgbayh7gpa|xn--mgbbh1a71e|xn--mgbca7dzdo|xn--mgbi4ecexp|xn--mgbx4cd0ab|xn--rvc1e0am3e|international|lifeinsurance|travelchannel|wolterskluwer|xn--cckwcxetd|xn--eckvdtc9d|xn--fpcrj9c3d|xn--fzc2c9e2c|xn--h2brj9c8c|xn--tiq49xqyj|xn--yfro4i67o|xn--ygbi2ammx|construction|lplfinancial|scholarships|versicherung|xn--3e0b707e|xn--45br5cyl|xn--4dbrk0ce|xn--80adxhks|xn--80asehdb|xn--8y0a063a|xn--gckr3f0f|xn--mgb9awbf|xn--mgbab2bd|xn--mgbgu82a|xn--mgbpl2fh|xn--mgbt3dhd|xn--mk1bu44c|xn--ngbc5azd|xn--ngbe9e0a|xn--ogbpf8fl|xn--qcka1pmc|accountants|barclaycard|blackfriday|blockbuster|bridgestone|calvinklein|contractors|creditunion|engineering|enterprises|foodnetwork|investments|kerryhotels|lamborghini|motorcycles|olayangroup|photography|playstation|productions|progressive|redumbrella|williamhill|xn--11b4c3d|xn--1ck2e1b|xn--1qqw23a|xn--2scrj9c|xn--3bst00m|xn--3ds443g|xn--3hcrj9c|xn--42c2d9a|xn--45brj9c|xn--55qw42g|xn--6frz82g|xn--80ao21a|xn--9krt00a|xn--cck2b3b|xn--czr694b|xn--d1acj3b|xn--efvy88h|xn--fct429k|xn--fjq720a|xn--flw351e|xn--g2xx48c|xn--gecrj9c|xn--gk3at1e|xn--h2brj9c|xn--hxt814e|xn--imr513n|xn--j6w193g|xn--jvr189m|xn--kprw13d|xn--kpry57d|xn--mgbbh1a|xn--mgbtx2b|xn--mix891f|xn--nyqy26a|xn--otu796d|xn--pgbs0dh|xn--q9jyb4c|xn--rhqv96g|xn--rovu88b|xn--s9brj9c|xn--ses554g|xn--t60b56a|xn--vuq861b|xn--w4rs40l|xn--xhq521b|xn--zfr164b|\u0B9A\u0BBF\u0B99\u0BCD\u0B95\u0BAA\u0BCD\u0BAA\u0BC2\u0BB0\u0BCD|accountant|apartments|associates|basketball|bnpparibas|boehringer|capitalone|consulting|creditcard|cuisinella|eurovision|extraspace|foundation|healthcare|immobilien|industries|management|mitsubishi|nextdirect|properties|protection|prudential|realestate|republican|restaurant|schaeffler|tatamotors|technology|university|vlaanderen|volkswagen|xn--30rr7y|xn--3pxu8k|xn--45q11c|xn--4gbrim|xn--55qx5d|xn--5tzm5g|xn--80aswg|xn--90a3ac|xn--9dbq2a|xn--9et52u|xn--c2br7g|xn--cg4bki|xn--czrs0t|xn--czru2d|xn--fiq64b|xn--fiqs8s|xn--fiqz9s|xn--io0a7i|xn--kput3i|xn--mxtq1m|xn--o3cw4h|xn--pssy2u|xn--q7ce6a|xn--unup4y|xn--wgbh1c|xn--wgbl6a|xn--y9a3aq|accenture|alfaromeo|allfinanz|amsterdam|analytics|aquarelle|barcelona|bloomberg|christmas|community|directory|education|equipment|fairwinds|financial|firestone|fresenius|frontdoor|furniture|goldpoint|hisamitsu|homedepot|homegoods|homesense|institute|insurance|kuokgroup|lancaster|landrover|lifestyle|marketing|marshalls|melbourne|microsoft|panasonic|passagens|pramerica|richardli|shangrila|solutions|statebank|statefarm|stockholm|travelers|vacations|xn--90ais|xn--c1avg|xn--d1alf|xn--e1a4c|xn--fhbei|xn--j1aef|xn--j1amh|xn--l1acc|xn--ngbrx|xn--nqv7f|xn--p1acf|xn--qxa6a|xn--tckwe|xn--vhquv|yodobashi|\u0645\u0648\u0631\u064A\u062A\u0627\u0646\u064A\u0627|abudhabi|airforce|allstate|attorney|barclays|barefoot|bargains|baseball|boutique|bradesco|broadway|brussels|builders|business|capetown|catering|catholic|cipriani|cityeats|cleaning|clinique|clothing|commbank|computer|delivery|deloitte|democrat|diamonds|discount|discover|download|engineer|ericsson|etisalat|exchange|feedback|fidelity|firmdale|football|frontier|goodyear|grainger|graphics|guardian|hdfcbank|helsinki|holdings|hospital|infiniti|ipiranga|istanbul|jpmorgan|lighting|lundbeck|marriott|maserati|mckinsey|memorial|merckmsd|mortgage|observer|partners|pharmacy|pictures|plumbing|property|redstone|reliance|saarland|samsclub|security|services|shopping|showtime|softbank|software|stcgroup|supplies|training|vanguard|ventures|verisign|woodside|xn--90ae|xn--node|xn--p1ai|xn--qxam|yokohama|\u0627\u0644\u0633\u0639\u0648\u062F\u064A\u0629|abogado|academy|agakhan|alibaba|android|athleta|auction|audible|auspost|avianca|banamex|bauhaus|bentley|bestbuy|booking|brother|bugatti|capital|caravan|careers|channel|charity|chintai|citadel|clubmed|college|cologne|comcast|company|compare|contact|cooking|corsica|country|coupons|courses|cricket|cruises|dentist|digital|domains|exposed|express|farmers|fashion|ferrari|ferrero|finance|fishing|fitness|flights|florist|flowers|forsale|frogans|fujitsu|gallery|genting|godaddy|grocery|guitars|hamburg|hangout|hitachi|holiday|hosting|hoteles|hotmail|hyundai|ismaili|jewelry|juniper|kitchen|komatsu|lacaixa|lanxess|lasalle|latrobe|leclerc|limited|lincoln|markets|monster|netbank|netflix|network|neustar|okinawa|oldnavy|organic|origins|philips|pioneer|politie|realtor|recipes|rentals|reviews|rexroth|samsung|sandvik|schmidt|schwarz|science|shiksha|singles|staples|storage|support|surgery|systems|temasek|theater|theatre|tickets|tiffany|toshiba|trading|walmart|wanggou|watches|weather|website|wedding|whoswho|windows|winners|xfinity|yamaxun|youtube|zuerich|\u043A\u0430\u0442\u043E\u043B\u0438\u043A|\u0627\u062A\u0635\u0627\u0644\u0627\u062A|\u0627\u0644\u0628\u062D\u0631\u064A\u0646|\u0627\u0644\u062C\u0632\u0627\u0626\u0631|\u0627\u0644\u0639\u0644\u064A\u0627\u0646|\u067E\u0627\u06A9\u0633\u062A\u0627\u0646|\u0643\u0627\u062B\u0648\u0644\u064A\u0643|\u0B87\u0BA8\u0BCD\u0BA4\u0BBF\u0BAF\u0BBE|abarth|abbott|abbvie|africa|agency|airbus|airtel|alipay|alsace|alstom|amazon|anquan|aramco|author|bayern|beauty|berlin|bharti|bostik|boston|broker|camera|career|casino|center|chanel|chrome|church|circle|claims|clinic|coffee|comsec|condos|coupon|credit|cruise|dating|datsun|dealer|degree|dental|design|direct|doctor|dunlop|dupont|durban|emerck|energy|estate|events|expert|family|flickr|futbol|gallup|garden|george|giving|global|google|gratis|health|hermes|hiphop|hockey|hotels|hughes|imamat|insure|intuit|jaguar|joburg|juegos|kaufen|kinder|kindle|kosher|lancia|latino|lawyer|lefrak|living|locker|london|luxury|madrid|maison|makeup|market|mattel|mobile|monash|mormon|moscow|museum|mutual|nagoya|natura|nissan|nissay|norton|nowruz|office|olayan|online|oracle|orange|otsuka|pfizer|photos|physio|pictet|quebec|racing|realty|reisen|repair|report|review|rocher|rogers|ryukyu|safety|sakura|sanofi|school|schule|search|secure|select|shouji|soccer|social|stream|studio|supply|suzuki|swatch|sydney|taipei|taobao|target|tattoo|tennis|tienda|tjmaxx|tkmaxx|toyota|travel|unicom|viajes|viking|villas|virgin|vision|voting|voyage|vuelos|walter|webcam|xihuan|yachts|yandex|zappos|\u043C\u043E\u0441\u043A\u0432\u0430|\u043E\u043D\u043B\u0430\u0439\u043D|\u0627\u0628\u0648\u0638\u0628\u064A|\u0627\u0631\u0627\u0645\u0643\u0648|\u0627\u0644\u0627\u0631\u062F\u0646|\u0627\u0644\u0645\u063A\u0631\u0628|\u0627\u0645\u0627\u0631\u0627\u062A|\u0641\u0644\u0633\u0637\u064A\u0646|\u0645\u0644\u064A\u0633\u064A\u0627|\u092D\u093E\u0930\u0924\u092E\u094D|\u0B87\u0BB2\u0B99\u0BCD\u0B95\u0BC8|\u30D5\u30A1\u30C3\u30B7\u30E7\u30F3|actor|adult|aetna|amfam|amica|apple|archi|audio|autos|azure|baidu|beats|bible|bingo|black|boats|bosch|build|canon|cards|chase|cheap|cisco|citic|click|cloud|coach|codes|crown|cymru|dabur|dance|deals|delta|drive|dubai|earth|edeka|email|epson|faith|fedex|final|forex|forum|gallo|games|gifts|gives|glass|globo|gmail|green|gripe|group|gucci|guide|homes|honda|horse|house|hyatt|ikano|irish|jetzt|koeln|kyoto|lamer|lease|legal|lexus|lilly|linde|lipsy|loans|locus|lotte|lotto|macys|mango|media|miami|money|movie|music|nexus|nikon|ninja|nokia|nowtv|omega|osaka|paris|parts|party|phone|photo|pizza|place|poker|praxi|press|prime|promo|quest|radio|rehab|reise|ricoh|rocks|rodeo|rugby|salon|sener|seven|sharp|shell|shoes|skype|sling|smart|smile|solar|space|sport|stada|store|study|style|sucks|swiss|tatar|tires|tirol|tmall|today|tokyo|tools|toray|total|tours|trade|trust|tunes|tushu|ubank|vegas|video|vodka|volvo|wales|watch|weber|weibo|works|world|xerox|yahoo|\u05D9\u05E9\u05E8\u05D0\u05DC|\u0627\u06CC\u0631\u0627\u0646|\u0628\u0627\u0632\u0627\u0631|\u0628\u06BE\u0627\u0631\u062A|\u0633\u0648\u062F\u0627\u0646|\u0633\u0648\u0631\u064A\u0629|\u0647\u0645\u0631\u0627\u0647|\u092D\u093E\u0930\u094B\u0924|\u0938\u0902\u0917\u0920\u0928|\u09AC\u09BE\u0982\u09B2\u09BE|\u0C2D\u0C3E\u0C30\u0C24\u0C4D|\u0D2D\u0D3E\u0D30\u0D24\u0D02|\u5609\u91CC\u5927\u9152\u5E97|aarp|able|adac|aero|akdn|ally|amex|arab|army|arpa|arte|asda|asia|audi|auto|baby|band|bank|bbva|beer|best|bike|bing|blog|blue|bofa|bond|book|buzz|cafe|call|camp|care|cars|casa|case|cash|cbre|cern|chat|citi|city|club|cool|coop|cyou|data|date|dclk|deal|dell|desi|diet|dish|docs|dvag|erni|fage|fail|fans|farm|fast|fiat|fido|film|fire|fish|flir|food|ford|free|fund|game|gbiz|gent|ggee|gift|gmbh|gold|golf|goog|guge|guru|hair|haus|hdfc|help|here|hgtv|host|hsbc|icbc|ieee|imdb|immo|info|itau|java|jeep|jobs|jprs|kddi|kids|kiwi|kpmg|kred|land|lego|lgbt|lidl|life|like|limo|link|live|loan|loft|love|ltda|luxe|maif|meet|meme|menu|mini|mint|mobi|moda|moto|name|navy|news|next|nico|nike|ollo|open|page|pars|pccw|pics|ping|pink|play|plus|pohl|porn|post|prod|prof|qpon|read|reit|rent|rest|rich|room|rsvp|ruhr|safe|sale|sarl|save|saxo|scot|seat|seek|sexy|shaw|shia|shop|show|silk|sina|site|skin|sncf|sohu|song|sony|spot|star|surf|talk|taxi|team|tech|teva|tiaa|tips|town|toys|tube|vana|visa|viva|vivo|vote|voto|wang|weir|wien|wiki|wine|work|xbox|yoga|zara|zero|zone|\u0434\u0435\u0442\u0438|\u0441\u0430\u0439\u0442|\u0628\u0627\u0631\u062A|\u0628\u064A\u062A\u0643|\u0680\u0627\u0631\u062A|\u062A\u0648\u0646\u0633|\u0634\u0628\u0643\u0629|\u0639\u0631\u0627\u0642|\u0639\u0645\u0627\u0646|\u0645\u0648\u0642\u0639|\u092D\u093E\u0930\u0924|\u09AD\u09BE\u09B0\u09A4|\u09AD\u09BE\u09F0\u09A4|\u0A2D\u0A3E\u0A30\u0A24|\u0AAD\u0ABE\u0AB0\u0AA4|\u0B2D\u0B3E\u0B30\u0B24|\u0CAD\u0CBE\u0CB0\u0CA4|\u0DBD\u0D82\u0D9A\u0DCF|\u30A2\u30DE\u30BE\u30F3|\u30B0\u30FC\u30B0\u30EB|\u30AF\u30E9\u30A6\u30C9|\u30DD\u30A4\u30F3\u30C8|\u7EC4\u7EC7\u673A\u6784|\u96FB\u8A0A\u76C8\u79D1|\u9999\u683C\u91CC\u62C9|aaa|abb|abc|aco|ads|aeg|afl|aig|anz|aol|app|art|aws|axa|bar|bbc|bbt|bcg|bcn|bet|bid|bio|biz|bms|bmw|bom|boo|bot|box|buy|bzh|cab|cal|cam|car|cat|cba|cbn|cbs|ceo|cfa|cfd|com|cpa|crs|dad|day|dds|dev|dhl|diy|dnp|dog|dot|dtv|dvr|eat|eco|edu|esq|eus|fan|fit|fly|foo|fox|frl|ftr|fun|fyi|gal|gap|gay|gdn|gea|gle|gmo|gmx|goo|gop|got|gov|hbo|hiv|hkt|hot|how|ibm|ice|icu|ifm|inc|ing|ink|int|ist|itv|jcb|jio|jll|jmp|jnj|jot|joy|kfh|kia|kim|kpn|krd|lat|law|lds|llc|llp|lol|lpl|ltd|man|map|mba|med|men|mil|mit|mlb|mls|mma|moe|moi|mom|mov|msd|mtn|mtr|nab|nba|nec|net|new|nfl|ngo|nhk|now|nra|nrw|ntt|nyc|obi|one|ong|onl|ooo|org|ott|ovh|pay|pet|phd|pid|pin|pnc|pro|pru|pub|pwc|red|ren|ril|rio|rip|run|rwe|sap|sas|sbi|sbs|sca|scb|ses|sew|sex|sfr|ski|sky|soy|spa|srl|stc|tab|tax|tci|tdk|tel|thd|tjx|top|trv|tui|tvs|ubs|uno|uol|ups|vet|vig|vin|vip|wed|win|wme|wow|wtc|wtf|xin|xxx|xyz|you|yun|zip|\u0431\u0435\u043B|\u043A\u043E\u043C|\u049B\u0430\u0437|\u043C\u043A\u0434|\u043C\u043E\u043D|\u043E\u0440\u0433|\u0440\u0443\u0441|\u0441\u0440\u0431|\u0443\u043A\u0440|\u0570\u0561\u0575|\u05E7\u05D5\u05DD|\u0639\u0631\u0628|\u0642\u0637\u0631|\u0643\u0648\u0645|\u0645\u0635\u0631|\u0915\u0949\u092E|\u0928\u0947\u091F|\u0E04\u0E2D\u0E21|\u0E44\u0E17\u0E22|\u0EA5\u0EB2\u0EA7|\u30B9\u30C8\u30A2|\u30BB\u30FC\u30EB|\u307F\u3093\u306A|\u4E2D\u6587\u7F51|\u4E9A\u9A6C\u900A|\u5929\u4E3B\u6559|\u6211\u7231\u4F60|\u65B0\u52A0\u5761|\u6DE1\u9A6C\u9521|\u8BFA\u57FA\u4E9A|\u98DE\u5229\u6D66|ac|ad|ae|af|ag|ai|al|am|ao|aq|ar|as|at|au|aw|ax|az|ba|bb|bd|be|bf|bg|bh|bi|bj|bm|bn|bo|br|bs|bt|bv|bw|by|bz|ca|cc|cd|cf|cg|ch|ci|ck|cl|cm|cn|co|cr|cu|cv|cw|cx|cy|cz|de|dj|dk|dm|do|dz|ec|ee|eg|er|es|et|eu|fi|fj|fk|fm|fo|fr|ga|gb|gd|ge|gf|gg|gh|gi|gl|gm|gn|gp|gq|gr|gs|gt|gu|gw|gy|hk|hm|hn|hr|ht|hu|id|ie|il|im|in|io|iq|ir|is|it|je|jm|jo|jp|ke|kg|kh|ki|km|kn|kp|kr|kw|ky|kz|la|lb|lc|li|lk|lr|ls|lt|lu|lv|ly|ma|mc|md|me|mg|mh|mk|ml|mm|mn|mo|mp|mq|mr|ms|mt|mu|mv|mw|mx|my|mz|na|nc|ne|nf|ng|ni|nl|no|np|nr|nu|nz|om|pa|pe|pf|pg|ph|pk|pl|pm|pn|pr|ps|pt|pw|py|qa|re|ro|rs|ru|rw|sa|sb|sc|sd|se|sg|sh|si|sj|sk|sl|sm|sn|so|sr|ss|st|su|sv|sx|sy|sz|tc|td|tf|tg|th|tj|tk|tl|tm|tn|to|tr|tt|tv|tw|tz|ua|ug|uk|us|uy|uz|va|vc|ve|vg|vi|vn|vu|wf|ws|ye|yt|za|zm|zw|\u03B5\u03BB|\u03B5\u03C5|\u0431\u0433|\u0435\u044E|\u0440\u0444|\u10D2\u10D4|\uB2F7\uB137|\uB2F7\uCEF4|\uC0BC\uC131|\uD55C\uAD6D|\u30B3\u30E0|\u4E16\u754C|\u4E2D\u4FE1|\u4E2D\u56FD|\u4E2D\u570B|\u4F01\u4E1A|\u4F5B\u5C71|\u4FE1\u606F|\u5065\u5EB7|\u516B\u5366|\u516C\u53F8|\u516C\u76CA|\u53F0\u6E7E|\u53F0\u7063|\u5546\u57CE|\u5546\u5E97|\u5546\u6807|\u5609\u91CC|\u5728\u7EBF|\u5927\u62FF|\u5A31\u4E50|\u5BB6\u96FB|\u5E7F\u4E1C|\u5FAE\u535A|\u6148\u5584|\u624B\u673A|\u62DB\u8058|\u653F\u52A1|\u653F\u5E9C|\u65B0\u95FB|\u65F6\u5C1A|\u66F8\u7C4D|\u673A\u6784|\u6E38\u620F|\u6FB3\u9580|\u70B9\u770B|\u79FB\u52A8|\u7F51\u5740|\u7F51\u5E97|\u7F51\u7AD9|\u7F51\u7EDC|\u8054\u901A|\u8C37\u6B4C|\u8D2D\u7269|\u901A\u8CA9|\u96C6\u56E2|\u98DF\u54C1|\u9910\u5385|\u9999\u6E2F)",sTe=new RegExp("^"+uht+"$");var mht=/[\/?#]/,hht=/[-+&@#/%=~_()|'$*\[\]{}\u2713]/,aTe=/[?!:,.;^]/,iq=/https?:\/\//i,cTe=new RegExp("^"+iq.source,"i"),lTe=new RegExp(aTe.source+"$"),fht=/^(javascript|vbscript):/i,pht=/^[A-Za-z][-.+A-Za-z0-9]*:(\/\/)?([^:/]*)/,Aht=/^(?:\/\/)?([^/#?:]+)/;function bQ(e){return Zy.test(e)}function oq(e){return Zy.test(e)||va.test(e)||e==="+"||e==="-"||e==="."}function hb(e){return Vf.test(e)}function yQ(e){return e==="_"||hb(e)}function rq(e){return Vf.test(e)||hht.test(e)||aTe.test(e)}function xQ(e){return mht.test(e)}function sq(e){return sTe.test(e.toLowerCase())}function dTe(e){if(fht.test(e))return!1;var t=e.match(pht);if(!t)return!1;var n=!!t[1],i=t[2];return n?!0:!(i.indexOf(".")===-1||!Zy.test(i))}function uTe(e){var t=e.match(Aht);if(!t)return!1;var n=t[0],i=n.split(".");if(i.length<2)return!1;var o=i[i.length-1];return!!sq(o)}var ght=/^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/,bht=/[:/?#]/;function mTe(e){var t=e.split(bht,1)[0];return ght.test(t)}var yht=/^(https?:\/\/)?(www\.)?/i,xht=/^\/\//,hTe=(function(e){Qp(t,e);function t(n){var i=e.call(this,n)||this;return i.type="url",i.url="",i.urlMatchType="scheme",i.protocolRelativeMatch=!1,i.stripPrefix={scheme:!0,www:!0},i.stripTrailingSlash=!0,i.decodePercentEncoding=!0,i.protocolPrepended=!1,i.urlMatchType=n.urlMatchType,i.url=n.url,i.protocolRelativeMatch=n.protocolRelativeMatch,i.stripPrefix=n.stripPrefix,i.stripTrailingSlash=n.stripTrailingSlash,i.decodePercentEncoding=n.decodePercentEncoding,i}return t.prototype.getType=function(){return"url"},t.prototype.getUrlMatchType=function(){return this.urlMatchType},t.prototype.getUrl=function(){var n=this.url;return!this.protocolRelativeMatch&&this.urlMatchType!=="scheme"&&!this.protocolPrepended&&(n=this.url="http://"+n,this.protocolPrepended=!0),n},t.prototype.getAnchorHref=function(){var n=this.getUrl();return n.replace(/&amp;/g,"&")},t.prototype.getAnchorText=function(){var n=this.getMatchedText();return this.protocolRelativeMatch&&(n=Eht(n)),this.stripPrefix.scheme&&(n=Cht(n)),this.stripPrefix.www&&(n=Tht(n)),this.stripTrailingSlash&&(n=Sht(n)),this.decodePercentEncoding&&(n=_ht(n)),n},t})(Op);function Cht(e){return e.replace(cTe,"")}function Tht(e){return e.replace(yht,"$1")}function Eht(e){return e.replace(xht,"")}function Sht(e){return e.charAt(e.length-1)==="/"&&(e=e.slice(0,-1)),e}function _ht(e){var t=e.replace(/%22/gi,"&quot;").replace(/%26/gi,"&amp;").replace(/%27/gi,"&#39;").replace(/%3C/gi,"&lt;").replace(/%3E/gi,"&gt;");try{return decodeURIComponent(t)}catch{return t}}var WXi=y(x());var fTe=/^mailto:/i,Iht=new RegExp("[".concat(tq,"!#$%&'*+/=?^_`{|}~-]"));function pTe(e){return Vf.test(e)}function CQ(e){return Iht.test(e)}function ATe(e){var t=e.split(".").pop()||"";return sq(t)}var NXi=y(x());var gTe=(function(e){Qp(t,e);function t(n){var i=e.call(this,n)||this;return i.type="email",i.email="",i.email=n.email,i}return t.prototype.getType=function(){return"email"},t.prototype.getEmail=function(){return this.email},t.prototype.getAnchorHref=function(){return"mailto:"+this.email},t.prototype.getAnchorText=function(){return this.email},t})(Op);var YXi=y(x());function aq(e){return e==="_"||Vf.test(e)}function bTe(e){return e.length<=140}var yTe=["twitter","facebook","instagram","tiktok"];var kXi=y(x());var xTe=(function(e){Qp(t,e);function t(n){var i=e.call(this,n)||this;return i.type="hashtag",i.serviceName="twitter",i.hashtag="",i.serviceName=n.serviceName,i.hashtag=n.hashtag,i}return t.prototype.getType=function(){return"hashtag"},t.prototype.getServiceName=function(){return this.serviceName},t.prototype.getHashtag=function(){return this.hashtag},t.prototype.getAnchorHref=function(){var n=this.serviceName,i=this.hashtag;switch(n){case"twitter":return"https://twitter.com/hashtag/"+i;case"facebook":return"https://www.facebook.com/hashtag/"+i;case"instagram":return"https://instagram.com/explore/tags/"+i;case"tiktok":return"https://www.tiktok.com/tag/"+i;default:throw Iy(n),new Error("Invalid hashtag service: ".concat(n))}},t.prototype.getAnchorText=function(){return"#"+this.hashtag},t.prototype.getCssClassSuffixes=function(){var n=e.prototype.getCssClassSuffixes.call(this),i=this.getServiceName();return i&&n.push(i),n},t})(Op);var OXi=y(x()),Zht={twitter:/^@\w{1,15}$/,instagram:/^@[_\w]{1,30}$/,soundcloud:/^@[-a-z0-9_]{3,25}$/,tiktok:/^@[.\w]{1,23}[\w]$/},Rht=/[-\w.]/;function cq(e){return Rht.test(e)}function CTe(e,t){var n=Zht[t];return n.test(e)}var TTe=["twitter","instagram","soundcloud","tiktok"];var KXi=y(x());var ETe=(function(e){Qp(t,e);function t(n){var i=e.call(this,n)||this;return i.type="mention",i.serviceName="twitter",i.mention="",i.mention=n.mention,i.serviceName=n.serviceName,i}return t.prototype.getType=function(){return"mention"},t.prototype.getMention=function(){return this.mention},t.prototype.getServiceName=function(){return this.serviceName},t.prototype.getAnchorHref=function(){switch(this.serviceName){case"twitter":return"https://twitter.com/"+this.mention;case"instagram":return"https://instagram.com/"+this.mention;case"soundcloud":return"https://soundcloud.com/"+this.mention;case"tiktok":return"https://www.tiktok.com/@"+this.mention;default:throw new Error("Unknown service name to point mention to: "+this.serviceName)}},t.prototype.getAnchorText=function(){return"@"+this.mention},t.prototype.getCssClassSuffixes=function(){var n=e.prototype.getCssClassSuffixes.call(this),i=this.getServiceName();return i&&n.push(i),n},t})(Op);var qXi=y(x()),Vht=/[-. ]/,Ght=/[-. ()]/,Lht=/[,;]/,Wht=/(?:(?:(?:(\+)?\d{1,3}[-. ]?)?\(?\d{3}\)?[-. ]?\d{3}[-. ]?\d{4})|(?:(\+)(?:9[976]\d|8[987530]\d|6[987]\d|5[90]\d|42\d|3[875]\d|2[98654321]\d|9[8543210]|8[6421]|6[6543210]|5[87654321]|4[987654310]|3[9643210]|2[70]|7|1)[-. ]?(?:\d[-. ]?){6,12}\d+))([,;]+[0-9]+#?)*/,Fht=/(0([1-9]-?[1-9]\d{3}|[1-9]{2}-?\d{3}|[1-9]{2}\d{1}-?\d{2}|[1-9]{2}\d{2}-?\d{1})-?\d{4}|0[789]0-?\d{4}-?\d{4}|050-?\d{4}-?\d{4})/,Bht=new RegExp("^".concat(Wht.source,"|").concat(Fht.source,"$"));function lq(e){return Vht.test(e)}function TQ(e){return Lht.test(e)}function STe(e){var t=e.charAt(0)==="+"||Ght.test(e);return t&&Bht.test(e)}var nYi=y(x());var _Te=(function(e){Qp(t,e);function t(n){var i=e.call(this,n)||this;return i.type="phone",i.number="",i.plusSign=!1,i.number=n.number,i.plusSign=n.plusSign,i}return t.prototype.getType=function(){return"phone"},t.prototype.getPhoneNumber=function(){return this.number},t.prototype.getNumber=function(){return this.getPhoneNumber()},t.prototype.getAnchorHref=function(){return"tel:"+(this.plusSign?"+":"")+this.number},t.prototype.getAnchorText=function(){return this.matchedText},t})(Op);function RTe(e,t){for(var n=t.tagBuilder,i=t.stripPrefix,o=t.stripTrailingSlash,r=t.decodePercentEncoding,s=t.hashtagServiceName,a=t.mentionServiceName,c=[],d=e.length,u=[],h=0;h<d;h++){var p=e.charAt(h);if(u.length===0)C(p);else for(var A=u.length-1;A>=0;A--){var f=u[A];switch(f.state){case 11:V(f,p);break;case 12:W(f,p);break;case 0:T(f,p);break;case 1:E(f,p);break;case 2:S(f,p);break;case 3:I(f,p);break;case 4:R(f,p);break;case 5:B(f,p);break;case 6:N(f,p);break;case 7:P(f,p);break;case 13:g(f,p);break;case 14:_(f,p);break;case 8:Z(f,p);break;case 9:G(f,p);break;case 10:w(f,p);break;case 15:X(f,p);break;case 16:k(f,p);break;case 17:v(f,p);break;case 18:D(f,p);break;case 19:Y(f,p);break;case 20:O(f,p);break;case 21:J(f,p);break;case 22:te(f,p);break;case 23:z(f,p);break;case 24:j(f,p);break;case 25:ee(f,p);break;case 26:ge(f,p);break;case 27:ye(f,p);break;case 28:ae(f,p);break;case 29:Ce(f,p);break;case 30:Te(f,p);break;case 31:Fe(f,p);break;case 32:Pe(f,p);break;case 33:Xe(f,p);break;case 34:st(f,p);break;case 35:Ye(f,p);break;case 36:xt(f,p);break;case 37:Ne(f,p);break;case 38:at(f,p);break;case 39:Je(f,p);break;case 40:lt(f,p);break;case 41:ht(f,p);break;default:Iy(f.state)}}}for(var b=u.length-1;b>=0;b--)u.forEach(function(_e){return Rt(_e)});return c;function C(_e){if(_e==="#")u.push(Yht(h,28));else if(_e==="@")u.push(Mht(h,30));else if(_e==="/")u.push(uq(h,11));else if(_e==="+")u.push(mq(h,37));else if(_e==="(")u.push(mq(h,32));else{if(va.test(_e)&&(u.push(mq(h,38)),u.push(Pht(h,13))),pTe(_e)){var Re=_e.toLowerCase()==="m"?15:22;u.push(Xht(h,Re))}bQ(_e)&&u.push(dq(h,0)),Vf.test(_e)&&u.push(uq(h,5))}}function T(_e,Re){Re===":"?_e.state=2:Re==="-"?_e.state=1:oq(Re)||br(u,_e)}function E(_e,Re){Re==="-"||(Re==="/"?(br(u,_e),u.push(uq(h,11))):oq(Re)?_e.state=0:br(u,_e))}function S(_e,Re){Re==="/"?_e.state=3:Re==="."?br(u,_e):hb(Re)?(_e.state=5,bQ(Re)&&u.push(dq(h,0))):br(u,_e)}function I(_e,Re){Re==="/"?_e.state=4:rq(Re)?(_e.state=10,_e.acceptStateReached=!0):Rt(_e)}function R(_e,Re){Re==="/"?_e.state=10:hb(Re)?(_e.state=5,_e.acceptStateReached=!0):br(u,_e)}function V(_e,Re){Re==="/"?_e.state=12:br(u,_e)}function W(_e,Re){hb(Re)?_e.state=5:br(u,_e)}function B(_e,Re){Re==="."?_e.state=7:Re==="-"?_e.state=6:Re===":"?_e.state=8:xQ(Re)?_e.state=10:yQ(Re)||Rt(_e)}function N(_e,Re){Re==="-"||(Re==="."?Rt(_e):hb(Re)?_e.state=5:Rt(_e))}function P(_e,Re){Re==="."?Rt(_e):hb(Re)?(_e.state=5,_e.acceptStateReached=!0):Rt(_e)}function g(_e,Re){Re==="."?_e.state=14:Re===":"?_e.state=8:va.test(Re)||(xQ(Re)?_e.state=10:Vf.test(Re)?br(u,_e):Rt(_e))}function _(_e,Re){va.test(Re)?(_e.octetsEncountered++,_e.octetsEncountered===4&&(_e.acceptStateReached=!0),_e.state=13):Rt(_e)}function Z(_e,Re){va.test(Re)?_e.state=9:Rt(_e)}function G(_e,Re){va.test(Re)||(xQ(Re)?_e.state=10:Rt(_e))}function w(_e,Re){rq(Re)||Rt(_e)}function X(_e,Re){Re.toLowerCase()==="a"?_e.state=16:te(_e,Re)}function k(_e,Re){Re.toLowerCase()==="i"?_e.state=17:te(_e,Re)}function v(_e,Re){Re.toLowerCase()==="l"?_e.state=18:te(_e,Re)}function D(_e,Re){Re.toLowerCase()==="t"?_e.state=19:te(_e,Re)}function Y(_e,Re){Re.toLowerCase()==="o"?_e.state=20:te(_e,Re)}function O(_e,Re){Re.toLowerCase()===":"?_e.state=21:te(_e,Re)}function J(_e,Re){CQ(Re)?_e.state=22:br(u,_e)}function te(_e,Re){Re==="."?_e.state=23:Re==="@"?_e.state=24:CQ(Re)?_e.state=22:br(u,_e)}function z(_e,Re){Re==="."?br(u,_e):Re==="@"?br(u,_e):CQ(Re)?_e.state=22:br(u,_e)}function j(_e,Re){hb(Re)?_e.state=25:br(u,_e)}function ee(_e,Re){Re==="."?_e.state=27:Re==="-"?_e.state=26:yQ(Re)||Rt(_e)}function ge(_e,Re){Re==="-"||Re==="."?Rt(_e):yQ(Re)?_e.state=25:Rt(_e)}function ye(_e,Re){Re==="."||Re==="-"?Rt(_e):hb(Re)?(_e.state=25,_e.acceptStateReached=!0):Rt(_e)}function ae(_e,Re){aq(Re)?(_e.state=29,_e.acceptStateReached=!0):br(u,_e)}function Ce(_e,Re){aq(Re)||Rt(_e)}function Te(_e,Re){cq(Re)?(_e.state=31,_e.acceptStateReached=!0):br(u,_e)}function Fe(_e,Re){cq(Re)||(Vf.test(Re)?br(u,_e):Rt(_e))}function Ne(_e,Re){va.test(Re)?_e.state=38:(br(u,_e),C(Re))}function Pe(_e,Re){va.test(Re)?_e.state=33:br(u,_e),C(Re)}function Xe(_e,Re){va.test(Re)?_e.state=34:br(u,_e)}function st(_e,Re){va.test(Re)?_e.state=35:br(u,_e)}function Ye(_e,Re){Re===")"?_e.state=36:br(u,_e)}function xt(_e,Re){va.test(Re)?_e.state=38:lq(Re)?_e.state=39:br(u,_e)}function at(_e,Re){_e.acceptStateReached=!0,TQ(Re)?_e.state=40:Re==="#"?_e.state=41:va.test(Re)||(Re==="("?_e.state=32:lq(Re)?_e.state=39:(Rt(_e),bQ(Re)&&u.push(dq(h,0))))}function Je(_e,Re){va.test(Re)?_e.state=38:Re==="("?_e.state=32:(Rt(_e),C(Re))}function lt(_e,Re){TQ(Re)||(Re==="#"?_e.state=41:va.test(Re)?_e.state=38:Rt(_e))}function ht(_e,Re){TQ(Re)?_e.state=40:va.test(Re)?br(u,_e):Rt(_e)}function Rt(_e){if(br(u,_e),!!_e.acceptStateReached){var Re=_e.startIdx,jt=e.slice(_e.startIdx,h);if(jt=Nht(jt),_e.type==="url"){var At=e.charAt(_e.startIdx-1);if(At==="@")return;var kt=_e.matchType;if(kt==="scheme"){var On=iq.exec(jt);if(On&&(Re=Re+On.index,jt=jt.slice(On.index)),!dTe(jt))return}else if(kt==="tld"){if(!uTe(jt))return}else if(kt==="ipV4"){if(!mTe(jt))return}else Iy(kt);c.push(new hTe({tagBuilder:n,matchedText:jt,offset:Re,urlMatchType:kt,url:jt,protocolRelativeMatch:jt.slice(0,2)==="//",stripPrefix:i,stripTrailingSlash:o,decodePercentEncoding:r}))}else if(_e.type==="email")ATe(jt)&&c.push(new gTe({tagBuilder:n,matchedText:jt,offset:Re,email:jt.replace(fTe,"")}));else if(_e.type==="hashtag")bTe(jt)&&c.push(new xTe({tagBuilder:n,matchedText:jt,offset:Re,serviceName:s,hashtag:jt.slice(1)}));else if(_e.type==="mention")CTe(jt,a)&&c.push(new ETe({tagBuilder:n,matchedText:jt,offset:Re,serviceName:a,mention:jt.slice(1)}));else if(_e.type==="phone"){if(jt=jt.replace(/ +$/g,""),STe(jt)){var $e=jt.replace(/[^0-9,;#]/g,"");c.push(new _Te({tagBuilder:n,matchedText:jt,offset:Re,number:$e,plusSign:jt.charAt(0)==="+"}))}}else Iy(_e)}}}var wht=/[\(\{\[]/,ITe=/[\)\}\]]/,ZTe={")":"(","}":"{","]":"["};function Nht(e){for(var t={"(":0,"{":0,"[":0},n=0;n<e.length;n++){var i=e.charAt(n);wht.test(i)?t[i]++:ITe.test(i)&&t[ZTe[i]]--}for(var o=e.length-1,r;o>=0;)if(r=e.charAt(o),ITe.test(r)){var s=ZTe[r];if(t[s]<0)t[s]++,o--;else break}else if(lTe.test(r))o--;else break;return e.slice(0,o+1)}function dq(e,t){return{type:"url",startIdx:e,state:t,acceptStateReached:!1,matchType:"scheme"}}function uq(e,t){return{type:"url",startIdx:e,state:t,acceptStateReached:!1,matchType:"tld"}}function Pht(e,t){return{type:"url",startIdx:e,state:t,acceptStateReached:!1,matchType:"ipV4",octetsEncountered:1}}function Xht(e,t){return{type:"email",startIdx:e,state:t,acceptStateReached:!1}}function Yht(e,t){return{type:"hashtag",startIdx:e,state:t,acceptStateReached:!1}}function Mht(e,t){return{type:"mention",startIdx:e,state:t,acceptStateReached:!1}}function mq(e,t){return{type:"phone",startIdx:e,state:t,acceptStateReached:!1}}var CYi=y(x());function VTe(e,t){for(var n=t.onOpenTag,i=t.onCloseTag,o=t.onText,r=t.onComment,s=t.onDoctype,a=new zp,c=0,d=e.length,u=0,h=0,p=a;c<d;){var A=e.charAt(c);switch(u){case 0:f(A);break;case 1:b(A);break;case 2:T(A);break;case 3:C(A);break;case 4:E(A);break;case 5:S(A);break;case 6:I(A);break;case 7:R(A);break;case 8:V(A);break;case 9:W(A);break;case 10:B(A);break;case 11:N(A);break;case 12:P(A);break;case 13:g(A);break;case 14:_(A);break;case 15:Z(A);break;case 16:G(A);break;case 17:w(A);break;case 18:X(A);break;case 19:k(A);break;case 20:v(A);break;default:Iy(u)}c++}h<c&&J();function f(j){j==="<"&&Y()}function b(j){j==="!"?u=13:j==="/"?(u=2,p=new zp(Ua(Ua({},p),{isClosing:!0}))):j==="<"?Y():Zy.test(j)?(u=3,p=new zp(Ua(Ua({},p),{isOpening:!0}))):(u=0,p=a)}function C(j){Nu.test(j)?(p=new zp(Ua(Ua({},p),{name:te()})),u=4):j==="<"?Y():j==="/"?(p=new zp(Ua(Ua({},p),{name:te()})),u=12):j===">"?(p=new zp(Ua(Ua({},p),{name:te()})),O()):!Zy.test(j)&&!va.test(j)&&j!==":"&&D()}function T(j){j===">"?D():Zy.test(j)?u=3:D()}function E(j){Nu.test(j)||(j==="/"?u=12:j===">"?O():j==="<"?Y():j==="="||AQ.test(j)||$Ce.test(j)?D():u=5)}function S(j){Nu.test(j)?u=6:j==="/"?u=12:j==="="?u=7:j===">"?O():j==="<"?Y():AQ.test(j)&&D()}function I(j){Nu.test(j)||(j==="/"?u=12:j==="="?u=7:j===">"?O():j==="<"?Y():AQ.test(j)?D():u=5)}function R(j){Nu.test(j)||(j==='"'?u=8:j==="'"?u=9:/[>=`]/.test(j)?D():j==="<"?Y():u=10)}function V(j){j==='"'&&(u=11)}function W(j){j==="'"&&(u=11)}function B(j){Nu.test(j)?u=4:j===">"?O():j==="<"&&Y()}function N(j){Nu.test(j)?u=4:j==="/"?u=12:j===">"?O():j==="<"?Y():(u=4,z())}function P(j){j===">"?(p=new zp(Ua(Ua({},p),{isClosing:!0})),O()):u=4}function g(j){e.substr(c,2)==="--"?(c+=2,p=new zp(Ua(Ua({},p),{type:"comment"})),u=14):e.substr(c,7).toUpperCase()==="DOCTYPE"?(c+=7,p=new zp(Ua(Ua({},p),{type:"doctype"})),u=20):D()}function _(j){j==="-"?u=15:j===">"?D():u=16}function Z(j){j==="-"?u=18:j===">"?D():u=16}function G(j){j==="-"&&(u=17)}function w(j){j==="-"?u=18:u=16}function X(j){j===">"?O():j==="!"?u=19:j==="-"||(u=16)}function k(j){j==="-"?u=17:j===">"?O():u=16}function v(j){j===">"?O():j==="<"&&Y()}function D(){u=0,p=a}function Y(){u=1,p=new zp({idx:c})}function O(){var j=e.slice(h,p.idx);j&&o(j,h),p.type==="comment"?r(p.idx):p.type==="doctype"?s(p.idx):(p.isOpening&&n(p.name,p.idx),p.isClosing&&i(p.name,p.idx)),D(),h=c+1}function J(){var j=e.slice(h,c);o(j,h),h=c+1}function te(){var j=p.idx+(p.isClosing?2:1);return e.slice(j,c).toLowerCase()}function z(){c--}}var zp=(function(){function e(t){t===void 0&&(t={}),this.idx=t.idx!==void 0?t.idx:-1,this.type=t.type||"tag",this.name=t.name||"",this.isOpening=!!t.isOpening,this.isClosing=!!t.isClosing}return e})();var vht=(function(){function e(t){t===void 0&&(t={}),this.version=e.version,this.urls={},this.email=!0,this.phone=!0,this.hashtag=!1,this.mention=!1,this.newWindow=!0,this.stripPrefix={scheme:!0,www:!0},this.stripTrailingSlash=!0,this.decodePercentEncoding=!0,this.truncate={length:0,location:"end"},this.className="",this.replaceFn=null,this.context=void 0,this.sanitizeHtml=!1,this.tagBuilder=null,this.urls=Uht(t.urls),this.email=wu(t.email)?t.email:this.email,this.phone=wu(t.phone)?t.phone:this.phone,this.hashtag=t.hashtag||this.hashtag,this.mention=t.mention||this.mention,this.newWindow=wu(t.newWindow)?t.newWindow:this.newWindow,this.stripPrefix=Dht(t.stripPrefix),this.stripTrailingSlash=wu(t.stripTrailingSlash)?t.stripTrailingSlash:this.stripTrailingSlash,this.decodePercentEncoding=wu(t.decodePercentEncoding)?t.decodePercentEncoding:this.decodePercentEncoding,this.sanitizeHtml=t.sanitizeHtml||!1;var n=this.mention;if(n!==!1&&TTe.indexOf(n)===-1)throw new Error("invalid `mention` cfg '".concat(n,"' - see docs"));var i=this.hashtag;if(i!==!1&&yTe.indexOf(i)===-1)throw new Error("invalid `hashtag` cfg '".concat(i,"' - see docs"));this.truncate=kht(t.truncate),this.className=t.className||this.className,this.replaceFn=t.replaceFn||this.replaceFn,this.context=t.context||this}return e.link=function(t,n){var i=new e(n);return i.link(t)},e.parse=function(t,n){var i=new e(n);return i.parse(t)},e.prototype.parse=function(t){var n=this,i=["a","style","script"],o=0,r=[];return VTe(t,{onOpenTag:function(s){i.indexOf(s)>=0&&o++},onText:function(s,a){if(o===0){var c=/(&nbsp;|&#160;|&lt;|&#60;|&gt;|&#62;|&quot;|&#34;|&#39;)/gi,d=s.split(c),u=a;d.forEach(function(h,p){if(p%2===0){var A=n.parseText(h,u);r.push.apply(r,A)}u+=h.length})}},onCloseTag:function(s){i.indexOf(s)>=0&&(o=Math.max(o-1,0))},onComment:function(s){},onDoctype:function(s){}}),r=this.compactMatches(r),r=this.removeUnwantedMatches(r),r},e.prototype.compactMatches=function(t){t.sort(function(c,d){return c.getOffset()-d.getOffset()});for(var n=0;n<t.length-1;){var i=t[n],o=i.getOffset(),r=i.getMatchedText().length,s=o+r;if(n+1<t.length){if(t[n+1].getOffset()===o){var a=t[n+1].getMatchedText().length>r?n:n+1;t.splice(a,1);continue}if(t[n+1].getOffset()<s){t.splice(n+1,1);continue}}n++}return t},e.prototype.removeUnwantedMatches=function(t){return this.hashtag||_y(t,function(n){return n.getType()==="hashtag"}),this.email||_y(t,function(n){return n.getType()==="email"}),this.phone||_y(t,function(n){return n.getType()==="phone"}),this.mention||_y(t,function(n){return n.getType()==="mention"}),this.urls.schemeMatches||_y(t,function(n){return n.getType()==="url"&&n.getUrlMatchType()==="scheme"}),this.urls.tldMatches||_y(t,function(n){return n.getType()==="url"&&n.getUrlMatchType()==="tld"}),this.urls.ipV4Matches||_y(t,function(n){return n.getType()==="url"&&n.getUrlMatchType()==="ipV4"}),t},e.prototype.parseText=function(t,n){n===void 0&&(n=0),n=n||0;for(var i=RTe(t,{tagBuilder:this.getTagBuilder(),stripPrefix:this.stripPrefix,stripTrailingSlash:this.stripTrailingSlash,decodePercentEncoding:this.decodePercentEncoding,hashtagServiceName:this.hashtag,mentionServiceName:this.mention||"twitter"}),o=0,r=i.length;o<r;o++)i[o].setOffset(n+i[o].getOffset());return i},e.prototype.link=function(t){if(!t)return"";this.sanitizeHtml&&(t=t.replace(/</g,"&lt;").replace(/>/g,"&gt;"));for(var n=this.parse(t),i=[],o=0,r=0,s=n.length;r<s;r++){var a=n[r];i.push(t.substring(o,a.getOffset())),i.push(this.createMatchReturnVal(a)),o=a.getOffset()+a.getMatchedText().length}return i.push(t.substring(o)),i.join("")},e.prototype.createMatchReturnVal=function(t){var n;if(this.replaceFn&&(n=this.replaceFn.call(this.context,t)),typeof n=="string")return n;if(n===!1)return t.getMatchedText();if(n instanceof gQ)return n.toAnchorString();var i=t.buildTag();return i.toAnchorString()},e.prototype.getTagBuilder=function(){var t=this.tagBuilder;return t||(t=this.tagBuilder=new rTe({newWindow:this.newWindow,truncate:this.truncate,className:this.className})),t},e.version=KCe,e})(),GTe=vht;function Uht(e){return e==null&&(e=!0),wu(e)?{schemeMatches:e,tldMatches:e,ipV4Matches:e}:{schemeMatches:wu(e.schemeMatches)?e.schemeMatches:!0,tldMatches:wu(e.tldMatches)?e.tldMatches:!0,ipV4Matches:wu(e.ipV4Matches)?e.ipV4Matches:!0}}function Dht(e){return e==null&&(e=!0),wu(e)?{scheme:e,www:e}:{scheme:wu(e.scheme)?e.scheme:!0,www:wu(e.www)?e.www:!0}}function kht(e){return typeof e=="number"?{length:e,location:"end"}:jCe(e||{},{length:Number.POSITIVE_INFINITY,location:"end"})}var BYi=y(x());var WYi=y(x());var DYi=y(x());var EQ=GTe;var YTe;typeof DOMParser<"u"&&(YTe=new DOMParser);var Qht=new EQ({stripPrefix:!1,email:!1,replaceFn:function(e,t){return t.urlMatchType==="scheme"||t.urlMatchType==="www"}}),SQ=32,LTe=2414016,WTe=1,FTe=16093e3,BTe=.1,Oht=[null,void 0,"http://www.topografix.com/GPX/1/1"],er={gpx:Oht};function zht(e){return new Promise((t,n)=>{let i=new FileReader;i.addEventListener("load",function(){t(i.result)}),i.addEventListener("error",function(){n(i.error)}),i.readAsText(e)})}function hq(e,t){let n=rX(e,"id");return n=l(n)?n:qn(),t.getOrCreateEntity(n)}function fq(e){let t=wTe(e,"lon"),n=wTe(e,"lat"),i=iX(e,"ele",er.gpx);return m.fromDegrees(t,n,i)}function wTe(e,t){if(!l(e))return;let n=e.getAttribute(t);if(n!==null){let i=parseFloat(n);return isNaN(i)?void 0:i}}function rX(e,t){if(!l(e))return;let n=e.getAttribute(t);return n!==null?n:void 0}function Ry(e,t,n){if(!l(e))return;let i=e.childNodes,o=i.length;for(let r=0;r<o;r++){let s=i[r];if(s.localName===t&&n.indexOf(s.namespaceURI)!==-1)return s}}function pq(e,t,n){if(!l(e))return;let i=[],o=e.getElementsByTagName(t),r=o.length;for(let s=0;s<r;s++){let a=o[s];a.localName===t&&n.indexOf(a.namespaceURI)!==-1&&i.push(a)}return i}function iX(e,t,n){let i=Ry(e,t,n);if(l(i)){let o=parseFloat(i.textContent);return isNaN(o)?void 0:o}}function Pd(e,t,n){let i=Ry(e,t,n);if(l(i))return i.textContent.trim()}function MTe(e){let t=new Dc;return t.width=SQ,t.height=SQ,t.scaleByDistance=new Ot(LTe,WTe,FTe,BTe),t.pixelOffsetScaleByDistance=new Ot(LTe,WTe,FTe,BTe),t.verticalOrigin=new fi(Hn.BOTTOM),t.image=e,t}function Hht(){let e=new Lh;return e.translucencyByDistance=new Ot(3e6,1,5e6,0),e.pixelOffset=new M(17,0),e.horizontalOrigin=Bi.LEFT,e.font="16px sans-serif",e.style=hr.FILL_AND_OUTLINE,e}function vTe(e){let t=new Qc;return t.width=4,t.material=new ay,t.material.color=l(e)?e:U.RED,t.material.outlineWidth=2,t.material.outlineColor=U.BLACK,t}var NTe={time:{text:"Time",tag:"time"},comment:{text:"Comment",tag:"cmt"},description:{text:"Description",tag:"desc"},source:{text:"Source",tag:"src"},number:{text:"GPS track/route number",tag:"number"},type:{text:"Type",tag:"type"}},oX;typeof document<"u"&&(oX=document.createElement("div"));function Aq(e,t){let n,i="",o=Object.keys(NTe),r=o.length;for(n=0;n<r;n++){let u=o[n],h=NTe[u];h.value=Pd(e,h.tag,er.gpx)??"",l(h.value)&&h.value!==""&&(i=`${i}<p>${h.text}: ${h.value}</p>`)}if(!l(i)||i==="")return;i=Qht.link(i),oX.innerHTML=i;let s=oX.querySelectorAll("a");for(n=0;n<s.length;n++)s[n].setAttribute("target","_blank");let a=U.WHITE,c=U.BLACK,d='<div class="cesium-infoBox-description-lighter" style="';return d+="overflow:auto;",d+="word-wrap:break-word;",d+=`background-color:${a.toCssColorString()};`,d+=`color:${c.toCssColorString()};`,d+='">',d+=`${oX.innerHTML}</div>`,oX.innerHTML="",d}function UTe(e,t,n,i){let o=fq(t),r=hq(t,n);r.position=o;let s=l(i.waypointImage)?i.waypointImage:e._pinBuilder.fromMakiIconId("marker",U.RED,SQ);r.billboard=MTe(s);let a=Pd(t,"name",er.gpx);r.name=a,r.label=Hht(),r.label.text=a,r.description=Aq(t,r),i.clampToGround&&(r.billboard.heightReference=rt.CLAMP_TO_GROUND,r.label.heightReference=rt.CLAMP_TO_GROUND)}function Jht(e,t,n,i){let o=hq(t,n);o.description=Aq(t,o);let r=pq(t,"rtept",er.gpx),s=new Array(r.length);for(let a=0;a<r.length;a++)UTe(e,r[a],n,i),s[a]=fq(r[a]);o.polyline=vTe(i.routeColor),i.clampToGround&&(o.polyline.clampToGround=!0),o.polyline.positions=s}function Kht(e,t,n,i){let o=hq(t,n);o.description=Aq(t,o);let r=pq(t,"trkseg",er.gpx),s=[],a=[],c,d=!0,u=new lc;for(let h=0;h<r.length;h++)c=jht(r[h]),s=s.concat(c.positions),c.times.length>0?(a=a.concat(c.times),u.addSamples(a,s),d=d&&!0):d=!1;if(d){let h=l(i.waypointImage)?i.waypointImage:e._pinBuilder.fromMakiIconId("marker",U.RED,SQ);o.billboard=MTe(h),o.position=u,i.clampToGround&&(o.billboard.heightReference=rt.CLAMP_TO_GROUND),o.availability=new bs,o.availability.addInterval(new Wn({start:a[0],stop:a[a.length-1]}))}o.polyline=vTe(i.trackColor),o.polyline.positions=s,i.clampToGround&&(o.polyline.clampToGround=!0)}function jht(e){let t={positions:[],times:[]},n=pq(e,"trkpt",er.gpx),i;for(let o=0;o<n.length;o++){let r=fq(n[o]);t.positions.push(r),i=Pd(n[o],"time",er.gpx),l(i)&&t.times.push(q.fromIso8601(i))}return t}function qht(e){let t=Ry(e,"metadata",er.gpx);if(l(t)){let n={name:Pd(t,"name",er.gpx),desc:Pd(t,"desc",er.gpx),author:$ht(t),copyright:tft(t),link:DTe(t),time:Pd(t,"time",er.gpx),keywords:Pd(t,"keywords",er.gpx),bounds:nft(t)};if(l(n.name)||l(n.desc)||l(n.author)||l(n.copyright)||l(n.link)||l(n.time)||l(n.keywords)||l(n.bounds))return n}}function $ht(e){let t=Ry(e,"author",er.gpx);if(l(t)){let n={name:Pd(t,"name",er.gpx),email:eft(t),link:DTe(t)};if(l(n.name)||l(n.email)||l(n.link))return n}}function eft(e){let t=Ry(e,"email",er.gpx);if(l(t)){let n=Pd(t,"id",er.gpx),i=Pd(t,"domain",er.gpx);return`${n}@${i}`}}function DTe(e){let t=Ry(e,"link",er.gpx);if(l(t)){let n={href:rX(t,"href"),text:Pd(t,"text",er.gpx),mimeType:Pd(t,"type",er.gpx)};if(l(n.href)||l(n.text)||l(n.mimeType))return n}}function tft(e){let t=Ry(e,"copyright",er.gpx);if(l(t)){let n={author:rX(t,"author"),year:Pd(t,"year",er.gpx),license:Pd(t,"license",er.gpx)};if(l(n.author)||l(n.year)||l(n.license))return n}}function nft(e){let t=Ry(e,"bounds",er.gpx);if(l(t)){let n={minLat:iX(t,"minlat",er.gpx),maxLat:iX(t,"maxlat",er.gpx),minLon:iX(t,"minlon",er.gpx),maxLon:iX(t,"maxlon",er.gpx)};if(l(n.minLat)||l(n.maxLat)||l(n.minLon)||l(n.maxLon))return n}}var PTe={wpt:UTe,rte:Jht,trk:Kht};function ift(e,t,n,i){let o=Object.keys(PTe),r=o.length;for(let s=0;s<r;s++){let a=o[s],c=PTe[a],d=t.childNodes,u=d.length;for(let h=0;h<u;h++){let p=d[h];p.localName===a&&er.gpx.indexOf(p.namespaceURI)!==-1&&c(e,p,n,i)}}}function XTe(e,t,n){let i=e._entityCollection;i.removeAll();let o=t.documentElement,r=rX(o,"version"),s=rX(o,"creator"),a,c=qht(o);l(c)&&(a=c.name),o.localName==="gpx"?ift(e,o,i,n):console.log(`GPX - Unsupported node: ${o.localName}`);let d,u=i.computeAvailability(),h=u.start,p=u.stop,A=q.equals(h,qe.MINIMUM_VALUE),f=q.equals(p,qe.MAXIMUM_VALUE);if(!A||!f){let C;A&&(C=new Date,C.setHours(0,0,0,0),h=q.fromDate(C)),f&&(C=new Date,C.setHours(24,0,0,0),p=q.fromDate(C)),d=new Af,d.startTime=h,d.stopTime=p,d.currentTime=q.clone(h),d.clockRange=xs.LOOP_STOP,d.clockStep=Xo.SYSTEM_CLOCK_MULTIPLIER,d.multiplier=Math.round(Math.min(Math.max(q.secondsDifference(p,h)/60,1),31556900))}let b=!1;return e._name!==a&&(e._name=a,b=!0),e._creator!==s&&(e._creator=s,b=!0),oft(e._metadata,c)&&(e._metadata=c,b=!0),e._version!==r&&(e._version=r,b=!0),d!==e._clock&&(b=!0,e._clock=d),b&&e._changed.raiseEvent(e),ys.setLoading(e,!1),e}function oft(e,t){return!l(e)&&!l(t)?!1:l(e)&&l(t)?e.name!==t.name||e.dec!==t.desc||e.src!==t.src||e.author!==t.author||e.copyright!==t.copyright||e.link!==t.link||e.time!==t.time||e.bounds!==t.bounds:!0}function rft(e,t,n,i){i=i??Q.EMPTY_OBJECT;let o=n;if(typeof n=="string"||n instanceof Le){n=Le.createIfNeeded(n),o=n.fetchBlob();let r=e._resourceCredits,s=n.credits;if(l(s)){let a=s.length;for(let c=0;c<a;c++)r.push(s[c])}}return Promise.resolve(o).then(function(r){return r instanceof Blob?zht(r).then(function(s){let a,c;try{a=YTe.parseFromString(s,"application/xml")}catch(d){c=d.toString()}if(l(c)||a.body||a.documentElement.tagName==="parsererror"){let d=l(c)?c:a.documentElement.firstChild.nodeValue;throw d||(d=a.body.innerText),new me(d)}return XTe(e,a,i)}):XTe(e,r,i)}).catch(function(r){return e._error.raiseEvent(e,r),console.log(r),Promise.reject(r)})}function xZ(){this._changed=new xe,this._error=new xe,this._loading=new xe,this._clock=void 0,this._entityCollection=new Ya(this),this._entityCluster=new _u,this._name=void 0,this._version=void 0,this._creator=void 0,this._metadata=void 0,this._isLoading=!1,this._pinBuilder=new mb}xZ.load=function(e,t){return new xZ().load(e,t)};Object.defineProperties(xZ.prototype,{name:{get:function(){return this._name}},version:{get:function(){return this._version}},creator:{get:function(){return this._creator}},metadata:{get:function(){return this._metadata}},clock:{get:function(){return this._clock}},entities:{get:function(){return this._entityCollection}},isLoading:{get:function(){return this._isLoading}},changedEvent:{get:function(){return this._changed}},errorEvent:{get:function(){return this._error}},loadingEvent:{get:function(){return this._loading}},show:{get:function(){return this._entityCollection.show},set:function(e){this._entityCollection.show=e}},clustering:{get:function(){return this._entityCluster},set:function(e){this._entityCluster=e}}});xZ.prototype.update=function(e){return!0};xZ.prototype.load=function(e,t){if(!l(e))throw new fe("data is required.");t=t??Q.EMPTY_OBJECT,ys.setLoading(this,!0);let n=this._name,i=this;return rft(this,this._entityCollection,e,t).then(function(){let o,r=i._entityCollection.computeAvailability(),s=r.start,a=r.stop,c=q.equals(s,qe.MINIMUM_VALUE),d=q.equals(a,qe.MAXIMUM_VALUE);if(!c||!d){let h;c&&(h=new Date,h.setHours(0,0,0,0),s=q.fromDate(h)),d&&(h=new Date,h.setHours(24,0,0,0),a=q.fromDate(h)),o=new Af,o.startTime=s,o.stopTime=a,o.currentTime=q.clone(s),o.clockRange=xs.LOOP_STOP,o.clockStep=Xo.SYSTEM_CLOCK_MULTIPLIER,o.multiplier=Math.round(Math.min(Math.max(q.secondsDifference(a,s)/60,1),31556900))}let u=!1;return o!==i._clock&&(i._clock=o,u=!0),n!==i._name&&(u=!0),u&&i._changed.raiseEvent(i),ys.setLoading(i,!1),i}).catch(function(o){return ys.setLoading(i,!1),i._error.raiseEvent(i,o),console.log(o),Promise.reject(o)})};var sX=xZ;var wMi=y(x(),1);function sft(e,t){this.position=e,this.headingPitchRoll=t}var aX=sft;var TUi=y(x(),1);var hX=y(qd(),1);var PMi=y(x(),1);function aft(e,t){this.position=e,this.headingPitchRange=t}var cX=aft;var vMi=y(x(),1);function _Q(e,t){this.id=t,this.name=e,this.playlistIndex=0,this.playlist=[],this.tourStart=new xe,this.tourEnd=new xe,this.entryStart=new xe,this.entryEnd=new xe,this._activeEntries=[]}_Q.prototype.addPlaylistEntry=function(e){this.playlist.push(e)};_Q.prototype.play=function(e,t){this.tourStart.raiseEvent();let n=this;QTe.call(this,e,t,function(i){n.playlistIndex=0,i||kTe(n._activeEntries),n.tourEnd.raiseEvent(i)})};_Q.prototype.stop=function(){kTe(this._activeEntries)};function kTe(e){for(let t=e.pop();t!==void 0;t=e.pop())t.stop()}function QTe(e,t,n){let i=this.playlist[this.playlistIndex];if(i){let o=cft.bind(this,e,t,n);if(this._activeEntries.push(i),this.entryStart.raiseEvent(i),i.blocking)i.play(o,e.scene.camera,t);else{let r=this;i.play(function(){r.entryEnd.raiseEvent(i);let s=r._activeEntries.indexOf(i);s>=0&&r._activeEntries.splice(s,1)}),o(e,t,n)}}else l(n)&&n(!1)}function cft(e,t,n,i){let o=this.playlist[this.playlistIndex];if(this.entryEnd.raiseEvent(o,i),i)n(i);else{let r=this._activeEntries.indexOf(o);r>=0&&this._activeEntries.splice(r,1),this.playlistIndex++,QTe.call(this,e,t,n)}}var lX=_Q;var ovi=y(x(),1);var qMi=y(x(),1);var JMi=y(x(),1),$i=Object.freeze({Linear:Object.freeze({None:function(e){return e},In:function(e){return e},Out:function(e){return e},InOut:function(e){return e}}),Quadratic:Object.freeze({In:function(e){return e*e},Out:function(e){return e*(2-e)},InOut:function(e){return(e*=2)<1?.5*e*e:-.5*(--e*(e-2)-1)}}),Cubic:Object.freeze({In:function(e){return e*e*e},Out:function(e){return--e*e*e+1},InOut:function(e){return(e*=2)<1?.5*e*e*e:.5*((e-=2)*e*e+2)}}),Quartic:Object.freeze({In:function(e){return e*e*e*e},Out:function(e){return 1- --e*e*e*e},InOut:function(e){return(e*=2)<1?.5*e*e*e*e:-.5*((e-=2)*e*e*e-2)}}),Quintic:Object.freeze({In:function(e){return e*e*e*e*e},Out:function(e){return--e*e*e*e*e+1},InOut:function(e){return(e*=2)<1?.5*e*e*e*e*e:.5*((e-=2)*e*e*e*e+2)}}),Sinusoidal:Object.freeze({In:function(e){return 1-Math.sin((1-e)*Math.PI/2)},Out:function(e){return Math.sin(e*Math.PI/2)},InOut:function(e){return .5*(1-Math.sin(Math.PI*(.5-e)))}}),Exponential:Object.freeze({In:function(e){return e===0?0:Math.pow(1024,e-1)},Out:function(e){return e===1?1:1-Math.pow(2,-10*e)},InOut:function(e){return e===0?0:e===1?1:(e*=2)<1?.5*Math.pow(1024,e-1):.5*(-Math.pow(2,-10*(e-1))+2)}}),Circular:Object.freeze({In:function(e){return 1-Math.sqrt(1-e*e)},Out:function(e){return Math.sqrt(1- --e*e)},InOut:function(e){return(e*=2)<1?-.5*(Math.sqrt(1-e*e)-1):.5*(Math.sqrt(1-(e-=2)*e)+1)}}),Elastic:Object.freeze({In:function(e){return e===0?0:e===1?1:-Math.pow(2,10*(e-1))*Math.sin((e-1.1)*5*Math.PI)},Out:function(e){return e===0?0:e===1?1:Math.pow(2,-10*e)*Math.sin((e-.1)*5*Math.PI)+1},InOut:function(e){return e===0?0:e===1?1:(e*=2,e<1?-.5*Math.pow(2,10*(e-1))*Math.sin((e-1.1)*5*Math.PI):.5*Math.pow(2,-10*(e-1))*Math.sin((e-1.1)*5*Math.PI)+1)}}),Back:Object.freeze({In:function(e){var t=1.70158;return e===1?1:e*e*((t+1)*e-t)},Out:function(e){var t=1.70158;return e===0?0:--e*e*((t+1)*e+t)+1},InOut:function(e){var t=2.5949095;return(e*=2)<1?.5*(e*e*((t+1)*e-t)):.5*((e-=2)*e*((t+1)*e+t)+2)}}),Bounce:Object.freeze({In:function(e){return 1-$i.Bounce.Out(1-e)},Out:function(e){return e<.36363636363636365?7.5625*e*e:e<.7272727272727273?7.5625*(e-=.5454545454545454)*e+.75:e<.9090909090909091?7.5625*(e-=.8181818181818182)*e+.9375:7.5625*(e-=.9545454545454546)*e+.984375},InOut:function(e){return e<.5?$i.Bounce.In(e*2)*.5:$i.Bounce.Out(e*2-1)*.5+.5}}),generatePow:function(e){return e===void 0&&(e=4),e=e<Number.EPSILON?Number.EPSILON:e,e=e>1e4?1e4:e,{In:function(t){return Math.pow(t,e)},Out:function(t){return 1-Math.pow(1-t,e)},InOut:function(t){return t<.5?Math.pow(t*2,e)/2:(1-Math.pow(2-t*2,e))/2+.5}}}}),dX=function(){return performance.now()},lft=(function(){function e(){for(var t=[],n=0;n<arguments.length;n++)t[n]=arguments[n];this._tweens={},this._tweensAddedDuringUpdate={},this.add.apply(this,t)}return e.prototype.getAll=function(){var t=this;return Object.keys(this._tweens).map(function(n){return t._tweens[n]})},e.prototype.removeAll=function(){this._tweens={}},e.prototype.add=function(){for(var t,n=[],i=0;i<arguments.length;i++)n[i]=arguments[i];for(var o=0,r=n;o<r.length;o++){var s=r[o];(t=s._group)===null||t===void 0||t.remove(s),s._group=this,this._tweens[s.getId()]=s,this._tweensAddedDuringUpdate[s.getId()]=s}},e.prototype.remove=function(){for(var t=[],n=0;n<arguments.length;n++)t[n]=arguments[n];for(var i=0,o=t;i<o.length;i++){var r=o[i];r._group=void 0,delete this._tweens[r.getId()],delete this._tweensAddedDuringUpdate[r.getId()]}},e.prototype.allStopped=function(){return this.getAll().every(function(t){return!t.isPlaying()})},e.prototype.update=function(t,n){t===void 0&&(t=dX()),n===void 0&&(n=!0);var i=Object.keys(this._tweens);if(i.length!==0)for(;i.length>0;){this._tweensAddedDuringUpdate={};for(var o=0;o<i.length;o++){var r=this._tweens[i[o]],s=!n;r&&r.update(t,s)===!1&&!n&&this.remove(r)}i=Object.keys(this._tweensAddedDuringUpdate)}},e})(),CZ={Linear:function(e,t){var n=e.length-1,i=n*t,o=Math.floor(i),r=CZ.Utils.Linear;return t<0?r(e[0],e[1],i):t>1?r(e[n],e[n-1],n-i):r(e[o],e[o+1>n?n:o+1],i-o)},Bezier:function(e,t){for(var n=0,i=e.length-1,o=Math.pow,r=CZ.Utils.Bernstein,s=0;s<=i;s++)n+=o(1-t,i-s)*o(t,s)*e[s]*r(i,s);return n},CatmullRom:function(e,t){var n=e.length-1,i=n*t,o=Math.floor(i),r=CZ.Utils.CatmullRom;return e[0]===e[n]?(t<0&&(o=Math.floor(i=n*(1+t))),r(e[(o-1+n)%n],e[o],e[(o+1)%n],e[(o+2)%n],i-o)):t<0?e[0]-(r(e[0],e[0],e[1],e[1],-i)-e[0]):t>1?e[n]-(r(e[n],e[n],e[n-1],e[n-1],i-n)-e[n]):r(e[o?o-1:0],e[o],e[n<o+1?n:o+1],e[n<o+2?n:o+2],i-o)},Utils:{Linear:function(e,t,n){return(t-e)*n+e},Bernstein:function(e,t){var n=CZ.Utils.Factorial;return n(e)/n(t)/n(e-t)},Factorial:(function(){var e=[1];return function(t){var n=1;if(e[t])return e[t];for(var i=t;i>1;i--)n*=i;return e[t]=n,n}})(),CatmullRom:function(e,t,n,i,o){var r=(n-e)*.5,s=(i-t)*.5,a=o*o,c=o*a;return(2*t-2*n+r+s)*c+(-3*t+3*n-2*r-s)*a+r*o+t}}},OTe=(function(){function e(){}return e.nextId=function(){return e._nextId++},e._nextId=0,e})(),gq=new lft,zTe=(function(){function e(t,n){this._isPaused=!1,this._pauseStart=0,this._valuesStart={},this._valuesEnd={},this._valuesStartRepeat={},this._duration=1e3,this._isDynamic=!1,this._initialRepeat=0,this._repeat=0,this._yoyo=!1,this._isPlaying=!1,this._reversed=!1,this._delayTime=0,this._startTime=0,this._easingFunction=$i.Linear.None,this._interpolationFunction=CZ.Linear,this._chainedTweens=[],this._onStartCallbackFired=!1,this._onEveryStartCallbackFired=!1,this._id=OTe.nextId(),this._isChainStopped=!1,this._propertiesAreSetUp=!1,this._goToEnd=!1,this._object=t,typeof n=="object"?(this._group=n,n.add(this)):n===!0&&(this._group=gq,gq.add(this))}return e.prototype.getId=function(){return this._id},e.prototype.isPlaying=function(){return this._isPlaying},e.prototype.isPaused=function(){return this._isPaused},e.prototype.getDuration=function(){return this._duration},e.prototype.to=function(t,n){if(n===void 0&&(n=1e3),this._isPlaying)throw new Error("Can not call Tween.to() while Tween is already started or paused. Stop the Tween first.");return this._valuesEnd=t,this._propertiesAreSetUp=!1,this._duration=n<0?0:n,this},e.prototype.duration=function(t){return t===void 0&&(t=1e3),this._duration=t<0?0:t,this},e.prototype.dynamic=function(t){return t===void 0&&(t=!1),this._isDynamic=t,this},e.prototype.start=function(t,n){if(t===void 0&&(t=dX()),n===void 0&&(n=!1),this._isPlaying)return this;if(this._repeat=this._initialRepeat,this._reversed){this._reversed=!1;for(var i in this._valuesStartRepeat)this._swapEndStartRepeatValues(i),this._valuesStart[i]=this._valuesStartRepeat[i]}if(this._isPlaying=!0,this._isPaused=!1,this._onStartCallbackFired=!1,this._onEveryStartCallbackFired=!1,this._isChainStopped=!1,this._startTime=t,this._startTime+=this._delayTime,!this._propertiesAreSetUp||n){if(this._propertiesAreSetUp=!0,!this._isDynamic){var o={};for(var r in this._valuesEnd)o[r]=this._valuesEnd[r];this._valuesEnd=o}this._setupProperties(this._object,this._valuesStart,this._valuesEnd,this._valuesStartRepeat,n)}return this},e.prototype.startFromCurrentValues=function(t){return this.start(t,!0)},e.prototype._setupProperties=function(t,n,i,o,r){for(var s in i){var a=t[s],c=Array.isArray(a),d=c?"array":typeof a,u=!c&&Array.isArray(i[s]);if(!(d==="undefined"||d==="function")){if(u){var h=i[s];if(h.length===0)continue;for(var p=[a],A=0,f=h.length;A<f;A+=1){var b=this._handleRelativeValue(a,h[A]);if(isNaN(b)){u=!1,console.warn("Found invalid interpolation list. Skipping.");break}p.push(b)}u&&(i[s]=p)}if((d==="object"||c)&&a&&!u){n[s]=c?[]:{};var C=a;for(var T in C)n[s][T]=C[T];o[s]=c?[]:{};var h=i[s];if(!this._isDynamic){var E={};for(var T in h)E[T]=h[T];i[s]=h=E}this._setupProperties(C,n[s],h,o[s],r)}else(typeof n[s]>"u"||r)&&(n[s]=a),c||(n[s]*=1),u?o[s]=i[s].slice().reverse():o[s]=n[s]||0}}},e.prototype.stop=function(){return this._isChainStopped||(this._isChainStopped=!0,this.stopChainedTweens()),this._isPlaying?(this._isPlaying=!1,this._isPaused=!1,this._onStopCallback&&this._onStopCallback(this._object),this):this},e.prototype.end=function(){return this._goToEnd=!0,this.update(this._startTime+this._duration),this},e.prototype.pause=function(t){return t===void 0&&(t=dX()),this._isPaused||!this._isPlaying?this:(this._isPaused=!0,this._pauseStart=t,this)},e.prototype.resume=function(t){return t===void 0&&(t=dX()),!this._isPaused||!this._isPlaying?this:(this._isPaused=!1,this._startTime+=t-this._pauseStart,this._pauseStart=0,this)},e.prototype.stopChainedTweens=function(){for(var t=0,n=this._chainedTweens.length;t<n;t++)this._chainedTweens[t].stop();return this},e.prototype.group=function(t){return t?(t.add(this),this):(console.warn("tween.group() without args has been removed, use group.add(tween) instead."),this)},e.prototype.remove=function(){var t;return(t=this._group)===null||t===void 0||t.remove(this),this},e.prototype.delay=function(t){return t===void 0&&(t=0),this._delayTime=t,this},e.prototype.repeat=function(t){return t===void 0&&(t=0),this._initialRepeat=t,this._repeat=t,this},e.prototype.repeatDelay=function(t){return this._repeatDelayTime=t,this},e.prototype.yoyo=function(t){return t===void 0&&(t=!1),this._yoyo=t,this},e.prototype.easing=function(t){return t===void 0&&(t=$i.Linear.None),this._easingFunction=t,this},e.prototype.interpolation=function(t){return t===void 0&&(t=CZ.Linear),this._interpolationFunction=t,this},e.prototype.chain=function(){for(var t=[],n=0;n<arguments.length;n++)t[n]=arguments[n];return this._chainedTweens=t,this},e.prototype.onStart=function(t){return this._onStartCallback=t,this},e.prototype.onEveryStart=function(t){return this._onEveryStartCallback=t,this},e.prototype.onUpdate=function(t){return this._onUpdateCallback=t,this},e.prototype.onRepeat=function(t){return this._onRepeatCallback=t,this},e.prototype.onComplete=function(t){return this._onCompleteCallback=t,this},e.prototype.onStop=function(t){return this._onStopCallback=t,this},e.prototype.update=function(t,n){var i=this,o;if(t===void 0&&(t=dX()),n===void 0&&(n=e.autoStartOnUpdate),this._isPaused)return!0;var r;if(!this._goToEnd&&!this._isPlaying)if(n)this.start(t,!0);else return!1;if(this._goToEnd=!1,t<this._startTime)return!0;this._onStartCallbackFired===!1&&(this._onStartCallback&&this._onStartCallback(this._object),this._onStartCallbackFired=!0),this._onEveryStartCallbackFired===!1&&(this._onEveryStartCallback&&this._onEveryStartCallback(this._object),this._onEveryStartCallbackFired=!0);var s=t-this._startTime,a=this._duration+((o=this._repeatDelayTime)!==null&&o!==void 0?o:this._delayTime),c=this._duration+this._repeat*a,d=function(){if(i._duration===0||s>c)return 1;var b=Math.trunc(s/a),C=s-b*a,T=Math.min(C/i._duration,1);return T===0&&s===i._duration?1:T},u=d(),h=this._easingFunction(u);if(this._updateProperties(this._object,this._valuesStart,this._valuesEnd,h),this._onUpdateCallback&&this._onUpdateCallback(this._object,u),this._duration===0||s>=this._duration)if(this._repeat>0){var p=Math.min(Math.trunc((s-this._duration)/a)+1,this._repeat);isFinite(this._repeat)&&(this._repeat-=p);for(r in this._valuesStartRepeat)!this._yoyo&&typeof this._valuesEnd[r]=="string"&&(this._valuesStartRepeat[r]=this._valuesStartRepeat[r]+parseFloat(this._valuesEnd[r])),this._yoyo&&this._swapEndStartRepeatValues(r),this._valuesStart[r]=this._valuesStartRepeat[r];return this._yoyo&&(this._reversed=!this._reversed),this._startTime+=a*p,this._onRepeatCallback&&this._onRepeatCallback(this._object),this._onEveryStartCallbackFired=!1,!0}else{this._onCompleteCallback&&this._onCompleteCallback(this._object);for(var A=0,f=this._chainedTweens.length;A<f;A++)this._chainedTweens[A].start(this._startTime+this._duration,!1);return this._isPlaying=!1,!1}return!0},e.prototype._updateProperties=function(t,n,i,o){for(var r in i)if(n[r]!==void 0){var s=n[r]||0,a=i[r],c=Array.isArray(t[r]),d=Array.isArray(a),u=!c&&d;u?t[r]=this._interpolationFunction(a,o):typeof a=="object"&&a?this._updateProperties(t[r],s,a,o):(a=this._handleRelativeValue(s,a),typeof a=="number"&&(t[r]=s+(a-s)*o))}},e.prototype._handleRelativeValue=function(t,n){return typeof n!="string"?n:n.charAt(0)==="+"||n.charAt(0)==="-"?t+parseFloat(n):parseFloat(n)},e.prototype._swapEndStartRepeatValues=function(t){var n=this._valuesStartRepeat[t],i=this._valuesEnd[t];typeof i=="string"?this._valuesStartRepeat[t]=this._valuesStartRepeat[t]+parseFloat(i):this._valuesStartRepeat[t]=this._valuesEnd[t],this._valuesEnd[t]=n},e.autoStartOnUpdate=!1,e})();var UMi=OTe.nextId,Hp=gq,DMi=Hp.getAll.bind(Hp),kMi=Hp.removeAll.bind(Hp),QMi=Hp.add.bind(Hp),OMi=Hp.remove.bind(Hp),zMi=Hp.update.bind(Hp);var dft={LINEAR_NONE:$i.Linear.None,QUADRATIC_IN:$i.Quadratic.In,QUADRATIC_OUT:$i.Quadratic.Out,QUADRATIC_IN_OUT:$i.Quadratic.InOut,CUBIC_IN:$i.Cubic.In,CUBIC_OUT:$i.Cubic.Out,CUBIC_IN_OUT:$i.Cubic.InOut,QUARTIC_IN:$i.Quartic.In,QUARTIC_OUT:$i.Quartic.Out,QUARTIC_IN_OUT:$i.Quartic.InOut,QUINTIC_IN:$i.Quintic.In,QUINTIC_OUT:$i.Quintic.Out,QUINTIC_IN_OUT:$i.Quintic.InOut,SINUSOIDAL_IN:$i.Sinusoidal.In,SINUSOIDAL_OUT:$i.Sinusoidal.Out,SINUSOIDAL_IN_OUT:$i.Sinusoidal.InOut,EXPONENTIAL_IN:$i.Exponential.In,EXPONENTIAL_OUT:$i.Exponential.Out,EXPONENTIAL_IN_OUT:$i.Exponential.InOut,CIRCULAR_IN:$i.Circular.In,CIRCULAR_OUT:$i.Circular.Out,CIRCULAR_IN_OUT:$i.Circular.InOut,ELASTIC_IN:$i.Elastic.In,ELASTIC_OUT:$i.Elastic.Out,ELASTIC_IN_OUT:$i.Elastic.InOut,BACK_IN:$i.Back.In,BACK_OUT:$i.Back.Out,BACK_IN_OUT:$i.Back.InOut,BOUNCE_IN:$i.Bounce.In,BOUNCE_OUT:$i.Bounce.Out,BOUNCE_IN_OUT:$i.Bounce.InOut},Ts=Object.freeze(dft);function IQ(e,t,n){this.type="KmlTourFlyTo",this.blocking=!0,this.activeCamera=null,this.activeCallback=null,this.duration=e,this.view=n,this.flyToMode=t}IQ.prototype.play=function(e,t,n){if(this.activeCamera=t,l(e)&&e!==null){let o=this;this.activeCallback=function(r){delete o.activeCallback,delete o.activeCamera,e(l(r)?!1:r)}}let i=this.getCameraOptions(n);if(this.view.headingPitchRoll)t.flyTo(i);else if(this.view.headingPitchRange){let o=new ue(this.view.position);t.flyToBoundingSphere(o,i)}};IQ.prototype.stop=function(){l(this.activeCamera)&&this.activeCamera.cancelFlight(),l(this.activeCallback)&&this.activeCallback(!0)};IQ.prototype.getCameraOptions=function(e){let t={duration:this.duration};return l(this.activeCallback)&&(t.complete=this.activeCallback),this.flyToMode==="smooth"&&(t.easingFunction=Ts.LINEAR_NONE),this.view.headingPitchRoll?(t.destination=this.view.position,t.orientation=this.view.headingPitchRoll):this.view.headingPitchRange&&(t.offset=this.view.headingPitchRange),l(e)&&(t=Ft(t,e)),t};var uX=IQ;var avi=y(x(),1);function bq(e){this.type="KmlTourWait",this.blocking=!0,this.duration=e,this.timeout=null}bq.prototype.play=function(e){let t=this;this.activeCallback=e,this.timeout=setTimeout(function(){delete t.activeCallback,e(!1)},this.duration*1e3)};bq.prototype.stop=function(){clearTimeout(this.timeout),l(this.activeCallback)&&this.activeCallback(!0)};var mX=bq;var iEe={avi:"video/x-msvideo",bmp:"image/bmp",bz2:"application/x-bzip2",chm:"application/vnd.ms-htmlhelp",css:"text/css",csv:"text/csv",doc:"application/msword",dvi:"application/x-dvi",eps:"application/postscript",flv:"video/x-flv",gif:"image/gif",gz:"application/x-gzip",htm:"text/html",html:"text/html",ico:"image/vnd.microsoft.icon",jnlp:"application/x-java-jnlp-file",jpeg:"image/jpeg",jpg:"image/jpeg",m3u:"audio/x-mpegurl",m4v:"video/mp4",mathml:"application/mathml+xml",mid:"audio/midi",midi:"audio/midi",mov:"video/quicktime",mp3:"audio/mpeg",mp4:"video/mp4",mp4v:"video/mp4",mpeg:"video/mpeg",mpg:"video/mpeg",odp:"application/vnd.oasis.opendocument.presentation",ods:"application/vnd.oasis.opendocument.spreadsheet",odt:"application/vnd.oasis.opendocument.text",ogg:"application/ogg",pdf:"application/pdf",png:"image/png",pps:"application/vnd.ms-powerpoint",ppt:"application/vnd.ms-powerpoint",ps:"application/postscript",qt:"video/quicktime",rdf:"application/rdf+xml",rss:"application/rss+xml",rtf:"application/rtf",svg:"image/svg+xml",swf:"application/x-shockwave-flash",text:"text/plain",tif:"image/tiff",tiff:"image/tiff",txt:"text/plain",wav:"audio/x-wav",wma:"audio/x-ms-wma",wmv:"video/x-ms-wmv",xml:"application/xml",zip:"application/zip",detectFromFilename:function(e){let t=e.toLowerCase();return t=TA(t),iEe[t]}},_q;typeof DOMParser<"u"&&(_q=new DOMParser);var uft=new EQ({stripPrefix:!1,email:!1,replaceFn:function(e){return e.urlMatchType==="scheme"||e.urlMatchType==="www"}}),Vy=32,HTe=2414016,JTe=1,KTe=16093e3,jTe=.1,qTe=[null,void 0,"http://www.opengis.net/kml/2.2","http://earth.google.com/kml/2.2","http://earth.google.com/kml/2.1","http://earth.google.com/kml/2.0"],$Te=["http://www.google.com/kml/ext/2.2"],mft=["http://www.w3.org/2005/Atom"],ke={kml:qTe,gx:$Te,atom:mft,kmlgx:qTe.concat($Te)},Iq={Document:hEe,Folder:Lft,Placemark:Wft,NetworkLink:vft,GroundOverlay:Xft,PhotoOverlay:AEe,ScreenOverlay:Pft,Tour:Bft};function Jp(e){this._dataSource=e,this._deferred=dd(),this._stack=[],this._promises=[],this._timeoutSet=!1,this._used=!1,this._started=0,this._timeThreshold=1e3}Object.defineProperties(Jp.prototype,{dataSource:{get:function(){return this._dataSource}}});Jp.prototype.addNodes=function(e,t){this._stack.push({nodes:e,index:0,processingData:t}),this._used=!0};Jp.prototype.addPromise=function(e){this._promises.push(e)};Jp.prototype.wait=function(){let e=this._deferred;return this._used||e.resolve(),Promise.all([e.promise,Promise.all(this._promises)])};Jp.prototype.process=function(){let e=this._stack.length===1;return e&&(this._started=Yu._getTimestamp()),this._process(e)};Jp.prototype._giveUpTime=function(){if(this._timeoutSet)return;this._timeoutSet=!0,this._timeThreshold=50;let e=this;setTimeout(function(){e._timeoutSet=!1,e._started=Yu._getTimestamp(),e._process(!0)},0)};Jp.prototype._nextNode=function(){let e=this._stack,t=e[e.length-1],n=t.index,i=t.nodes;if(n!==i.length)return++t.index,i[n]};Jp.prototype._pop=function(){let e=this._stack;return e.pop(),e.length===0?(this._deferred.resolve(),!1):!0};Jp.prototype._process=function(e){let t=this.dataSource,n=this._stack[this._stack.length-1].processingData,i=this._nextNode();for(;l(i);){let o=Iq[i.localName];if(l(o)&&(ke.kml.indexOf(i.namespaceURI)!==-1||ke.gx.indexOf(i.namespaceURI)!==-1)&&(o(t,i,n,this),this._timeoutSet||Yu._getTimestamp()>this._started+this._timeThreshold)){this._giveUpTime();return}i=this._nextNode()}this._pop()&&e&&this._process(!0)};function hft(e){let t=e.slice(0,Math.min(4,e.size)),n=dd(),i=new FileReader;return i.addEventListener("load",function(){n.resolve(new DataView(i.result).getUint32(0,!1)===1347093252)}),i.addEventListener("error",function(){n.reject(i.error)}),i.readAsArrayBuffer(t),n.promise}function fft(e){let t=dd(),n=new FileReader;return n.addEventListener("load",function(){t.resolve(n.result)}),n.addEventListener("error",function(){t.reject(n.error)}),n.readAsText(e),t.promise}function oEe(e){let t={xsi:"http://www.w3.org/2001/XMLSchema-instance"},n,i,o,r;for(let s in t)t.hasOwnProperty(s)&&(o=RegExp(`[< ]${s}:`),r=`xmlns:${s}=`,o.test(e)&&e.indexOf(r)===-1&&(l(n)||(n=e.substr(0,e.indexOf("<kml")+4),i=e.substr(n.length)),n+=` ${r}"${t[s]}"`));return l(n)&&(e=n+i),e}function rEe(e){let t=e.indexOf("xmlns:"),n=e.indexOf(">",t),i,o,r;for(;t!==-1&&t<n;)i=e.slice(t,e.indexOf('"',t)),o=t,t=e.indexOf(i,t+1),t!==-1?(r=e.indexOf('"',e.indexOf('"',t)+1),e=e.slice(0,t-1)+e.slice(r+1,e.length),t=e.indexOf("xmlns:",o-1)):t=e.indexOf("xmlns:",o+1);return e}async function pft(e,t){let n=await e.getData(new wP);n=oEe(n),n=rEe(n),t.kml=_q.parseFromString(n,"application/xml")}async function yq(e,t){let n=iEe.detectFromFilename(e.filename)??"application/octet-stream",i=await e.getData(new FP(n));t[e.filename]=i}function Pu(e,t,n,i){let o=i.keys,r=new hX.default("."),s=e.querySelectorAll(t);for(let a=0;a<s.length;a++){let c=s[a],d=c.getAttribute(n);if(l(d)){let h=new hX.default(d).absoluteTo(r).toString(),p=o.indexOf(h);if(p!==-1){let A=o[p];c.setAttribute(n,i[A]),t==="a"&&c.getAttribute("download")===null&&c.setAttribute("download",A)}}}}function Xu(e,t,n,i){let o=e.querySelectorAll(t);for(let r=0;r<o.length;r++){let s=o[r],a=s.getAttribute(n),c=Zq(a,i);l(c)&&s.setAttribute(n,c.url)}}function sEe(e,t,n){let i=ba(e,"id");i=l(i)&&i.length!==0?i:qn(),l(n)&&(i=n+i);let o=t.getById(i);return l(o)&&(i=qn(),l(n)&&(i=n+i)),o=t.add(new jo({id:i})),l(o.kml)||(o.addProperty("kml"),o.kml=new Qft),o}function fX(e,t){return e==="absolute"||e==="relativeToGround"||t==="relativeToSeaFloor"}function GQ(e,t){if(!l(e))return m.fromDegrees(0,0,0,t);let n=e.match(/[^\s,\n]+/g);if(!l(n))return m.fromDegrees(0,0,0,t);let i=parseFloat(n[0]),o=parseFloat(n[1]),r=parseFloat(n[2]);return i=isNaN(i)?0:i,o=isNaN(o)?0:o,r=isNaN(r)?0:r,m.fromDegrees(i,o,r,t)}function ZQ(e,t){if(!l(e))return;let n=e.textContent.match(/[^\s\n]+/g);if(!l(n))return;let i=n.length,o=new Array(i),r=0;for(let s=0;s<i;s++)o[r++]=GQ(n[s],t);return o}function Gy(e,t){if(!l(e))return;let n=e.getAttribute(t);if(n!==null){let i=parseFloat(n);return isNaN(i)?void 0:i}}function ba(e,t){if(!l(e))return;let n=e.getAttribute(t);return n!==null?n:void 0}function eo(e,t,n){if(!l(e))return;let i=e.childNodes,o=i.length;for(let r=0;r<o;r++){let s=i[r];if(s.localName===t&&n.indexOf(s.namespaceURI)!==-1)return s}}function eEe(e,t,n){if(!l(e))return;let i=[],o=e.getElementsByTagNameNS("*",t),r=o.length;for(let s=0;s<r;s++){let a=o[s];a.localName===t&&n.indexOf(a.namespaceURI)!==-1&&i.push(a)}return i}function Gf(e,t,n){if(!l(e))return[];let i=[],o=e.childNodes,r=o.length;for(let s=0;s<r;s++){let a=o[s];a.localName===t&&n.indexOf(a.namespaceURI)!==-1&&i.push(a)}return i}function xi(e,t,n){let i=eo(e,t,n);if(l(i)){let o=parseFloat(i.textContent);return isNaN(o)?void 0:o}}function Un(e,t,n){let i=eo(e,t,n);if(l(i))return i.textContent.trim()}function Lf(e,t,n){let i=eo(e,t,n);if(l(i)){let o=i.textContent.trim();return o==="1"||/^true$/i.test(o)}}function Zq(e,t,n){if(!l(e))return;let i;if(l(n)){e=e.replace(/\\/g,"/");let o=n[e];if(l(o))i=new Le({url:o});else{let r=new hX.default(t.getUrlComponent()),s=new hX.default(e);o=n[s.absoluteTo(r)],l(o)&&(i=new Le({url:o}))}}return l(i)||(i=t.getDerivedResource({url:e})),i}var Xd={maximumRed:void 0,red:void 0,maximumGreen:void 0,green:void 0,maximumBlue:void 0,blue:void 0};function Eq(e,t){if(!l(e)||/^\s*$/gm.test(e))return;e[0]==="#"&&(e=e.substring(1));let n=parseInt(e.substring(0,2),16)/255,i=parseInt(e.substring(2,4),16)/255,o=parseInt(e.substring(4,6),16)/255,r=parseInt(e.substring(6,8),16)/255;return t?(r>0?(Xd.maximumRed=r,Xd.red=void 0):(Xd.maximumRed=void 0,Xd.red=0),o>0?(Xd.maximumGreen=o,Xd.green=void 0):(Xd.maximumGreen=void 0,Xd.green=0),i>0?(Xd.maximumBlue=i,Xd.blue=void 0):(Xd.maximumBlue=void 0,Xd.blue=0),Xd.alpha=n,U.fromRandom(Xd)):new U(r,o,i,n)}function QT(e,t,n){let i=Un(e,t,n);if(l(i))return Eq(i,Un(e,"colorMode",n)==="random")}function Aft(e){let t=eo(e,"TimeStamp",ke.kmlgx),n=Un(t,"when",ke.kmlgx);if(!l(t)||!l(n)||n.length===0)return;let i=q.fromIso8601(n),o=new bs;return o.addInterval(new Wn({start:i,stop:qe.MAXIMUM_VALUE})),o}function gft(e){let t=eo(e,"TimeSpan",ke.kmlgx);if(!l(t))return;let n,i=eo(t,"begin",ke.kmlgx),o=l(i)?q.fromIso8601(i.textContent):void 0,r=eo(t,"end",ke.kmlgx),s=l(r)?q.fromIso8601(r.textContent):void 0;if(l(o)&&l(s)){if(q.lessThan(s,o)){let a=o;o=s,s=a}n=new bs,n.addInterval(new Wn({start:o,stop:s}))}else l(o)?(n=new bs,n.addInterval(new Wn({start:o,stop:qe.MAXIMUM_VALUE}))):l(s)&&(n=new bs,n.addInterval(new Wn({start:qe.MINIMUM_VALUE,stop:s})));return n}function aEe(){let e=new Dc;return e.width=Vy,e.height=Vy,e.scaleByDistance=new Ot(HTe,JTe,KTe,jTe),e.pixelOffsetScaleByDistance=new Ot(HTe,JTe,KTe,jTe),e}function Rq(){let e=new Wh;return e.outline=!0,e.outlineColor=U.WHITE,e}function cEe(){let e=new Lh;return e.translucencyByDistance=new Ot(3e6,1,5e6,0),e.pixelOffset=new M(17,0),e.horizontalOrigin=Bi.LEFT,e.font="16px sans-serif",e.style=hr.FILL_AND_OUTLINE,e}function Vq(e,t,n,i,o){let r=Un(e,"href",ke.kml);if(!l(r)||r.length===0)return;if(r.indexOf("root://icons/palette-")===0){let a=r.charAt(21),c=xi(e,"x",ke.gx)??0,d=xi(e,"y",ke.gx)??0;c=Math.min(c/32,7),d=7-Math.min(d/32,7);let u=8*d+c;r=`https://maps.google.com/mapfiles/kml/pal${a}/icon${u}.png`}let s=Zq(r,n,i);if(o){let a=Un(e,"refreshMode",ke.kml),c=Un(e,"viewRefreshMode",ke.kml);a==="onInterval"||a==="onExpire"?_t(`kml-refreshMode-${a}`,`KML - Unsupported Icon refreshMode: ${a}`):(c==="onStop"||c==="onRegion")&&_t(`kml-refreshMode-${c}`,`KML - Unsupported Icon viewRefreshMode: ${c}`);let d=Un(e,"viewBoundScale",ke.kml)??1,u=c==="onStop"?"BBOX=[bboxWest],[bboxSouth],[bboxEast],[bboxNorth]":"",h=Un(e,"viewFormat",ke.kml)??u,p=Un(e,"httpQuery",ke.kml);l(h)&&s.setQueryParameters($d(VQ(h))),l(p)&&s.setQueryParameters($d(VQ(p)));let A=t._ellipsoid;return Lq(s,t.camera,t.canvas,d,t._lastCameraView.bbox,A),s}return s}function bft(e,t,n,i,o){let r=xi(t,"scale",ke.kml),s=xi(t,"heading",ke.kml),a=QT(t,"color",ke.kml),c=eo(t,"Icon",ke.kml),d=Vq(c,e,i,o,!1);l(c)&&!l(d)&&(d=!1);let u=xi(c,"x",ke.gx),h=xi(c,"y",ke.gx),p=xi(c,"w",ke.gx),A=xi(c,"h",ke.gx),f=eo(t,"hotSpot",ke.kml),b=Gy(f,"x"),C=Gy(f,"y"),T=ba(f,"xunits"),E=ba(f,"yunits"),S=n.billboard;l(S)||(S=aEe(),n.billboard=S),S.image=d,S.scale=r,S.color=a,(l(u)||l(h)||l(p)||l(A))&&(S.imageSubRegion=new nt(u,h,p,A)),l(s)&&s!==0&&(S.rotation=L.toRadians(-s),S.alignedAxis=m.UNIT_Z),r=r??1;let I,R;l(b)&&(T==="pixels"?I=-b*r:T==="insetPixels"?I=(b-Vy)*r:T==="fraction"&&(I=-b*Vy*r),I+=Vy*.5*r),l(C)&&(E==="pixels"?R=C*r:E==="insetPixels"?R=(-C+Vy)*r:E==="fraction"&&(R=C*Vy*r),R-=Vy*.5*r),(l(I)||l(R))&&(S.pixelOffset=new M(I,R))}function RQ(e,t,n,i,o){for(let r=0,s=t.childNodes.length;r<s;r++){let a=t.childNodes.item(r);if(a.localName==="IconStyle")bft(e,a,n,i,o);else if(a.localName==="LabelStyle"){let c=n.label;l(c)||(c=cEe(),n.label=c),c.scale=xi(a,"scale",ke.kml)??c.scale,c.fillColor=QT(a,"color",ke.kml)??c.fillColor,c.text=n.name}else if(a.localName==="LineStyle"){let c=n.polyline;l(c)||(c=new Qc,n.polyline=c),c.width=xi(a,"width",ke.kml),c.material=QT(a,"color",ke.kml),l(QT(a,"outerColor",ke.gx))&&_t("kml-gx:outerColor","KML - gx:outerColor is not supported in a LineStyle"),l(xi(a,"outerWidth",ke.gx))&&_t("kml-gx:outerWidth","KML - gx:outerWidth is not supported in a LineStyle"),l(xi(a,"physicalWidth",ke.gx))&&_t("kml-gx:physicalWidth","KML - gx:physicalWidth is not supported in a LineStyle"),l(Lf(a,"labelVisibility",ke.gx))&&_t("kml-gx:labelVisibility","KML - gx:labelVisibility is not supported in a LineStyle")}else if(a.localName==="PolyStyle"){let c=n.polygon;l(c)||(c=Rq(),n.polygon=c),c.material=QT(a,"color",ke.kml)??c.material,c.fill=Lf(a,"fill",ke.kml)??c.fill,c.outline=Lf(a,"outline",ke.kml)??c.outline}else if(a.localName==="BalloonStyle"){let c=Eq(Un(a,"bgColor",ke.kml))??U.WHITE,d=Eq(Un(a,"textColor",ke.kml))??U.BLACK,u=Un(a,"text",ke.kml);n.addProperty("balloonStyle"),n.balloonStyle={bgColor:c,textColor:d,text:u}}else if(a.localName==="ListStyle"){let c=Un(a,"listItemType",ke.kml);(c==="radioFolder"||c==="checkOffOnly")&&_t(`kml-listStyle-${c}`,`KML - Unsupported ListStyle with listItemType: ${c}`)}}}function yft(e,t,n,i,o){let r=new jo,s,a=-1,c=t.childNodes,d=c.length;for(let h=0;h<d;h++){let p=c[h];(p.localName==="Style"||p.localName==="StyleMap")&&(a=h)}if(a!==-1){let h=c[a];if(h.localName==="Style")RQ(e,h,r,i,o);else{let p=Gf(h,"Pair",ke.kml);for(let A=0;A<p.length;A++){let f=p[A],b=Un(f,"key",ke.kml);if(b==="normal"){let C=Un(f,"styleUrl",ke.kml);if(l(C))s=n.getById(C),l(s)||(s=n.getById(`#${C}`)),l(s)&&r.merge(s);else{let T=eo(f,"Style",ke.kml);RQ(e,T,r,i,o)}}else _t(`kml-styleMap-${b}`,`KML - Unsupported StyleMap key: ${b}`)}}}let u=Un(t,"styleUrl",ke.kml);if(l(u)){let h=u;if(u[0]!=="#"&&u.indexOf("#")!==-1){let p=u.split("#"),A=p[0];h=`${i.getDerivedResource({url:A}).getUrlComponent()}#${p[1]}`}s=n.getById(h),l(s)||(s=n.getById(`#${h}`)),l(s)&&r.merge(s)}return r}function xft(e,t,n){return t.fetchXML().then(function(i){return lEe(e,i,n,t,!0)})}function lEe(e,t,n,i,o,r){let s,a,c,d,u=eEe(t,"Style",ke.kml);if(l(u)){let b=u.length;for(s=0;s<b;s++)d=u[s],a=ba(d,"id"),l(a)&&(a=`#${a}`,o&&l(i)&&(a=i.getUrlComponent()+a),l(n.getById(a))||(c=new jo({id:a}),n.add(c),RQ(e,d,c,i,r)))}let h=eEe(t,"StyleMap",ke.kml);if(l(h)){let b=h.length;for(s=0;s<b;s++){let C=h[s];if(a=ba(C,"id"),l(a)){let T=Gf(C,"Pair",ke.kml);for(let E=0;E<T.length;E++){let S=T[E],I=Un(S,"key",ke.kml);if(I==="normal"){if(a=`#${a}`,o&&l(i)&&(a=i.getUrlComponent()+a),!l(n.getById(a))){c=n.getOrCreateEntity(a);let R=Un(S,"styleUrl",ke.kml);if(l(R)){R[0]!=="#"&&(R=`#${R}`),o&&l(i)&&(R=i.getUrlComponent()+R);let V=n.getById(R);l(V)&&c.merge(V)}else d=eo(S,"Style",ke.kml),RQ(e,d,c,i,r)}}else _t(`kml-styleMap-${I}`,`KML - Unsupported StyleMap key: ${I}`)}}}}let p=[],A=t.getElementsByTagName("styleUrl"),f=A.length;for(s=0;s<f;s++){let b=A[s].textContent;if(b[0]!=="#"){let C=b.split("#");if(C.length===2){let T=C[0],E=i.getDerivedResource({url:T});p.push(xft(e,E,n))}}}return p}function Gq(e,t,n){let i=new qg(e,t.id,["position"]),o=new Pp(t.position);t.polyline=l(n.polyline)?n.polyline.clone():new Qc,t.polyline.positions=new jg([i,o])}function dEe(e,t){return!l(e)&&!l(t)||e==="clampToGround"?rt.CLAMP_TO_GROUND:e==="relativeToGround"?rt.RELATIVE_TO_GROUND:e==="absolute"?rt.NONE:t==="clampToSeaFloor"?(_t("kml-gx:altitudeMode-clampToSeaFloor","KML - <gx:altitudeMode>:clampToSeaFloor is currently not supported, using <kml:altitudeMode>:clampToGround."),rt.CLAMP_TO_GROUND):t==="relativeToSeaFloor"?(_t("kml-gx:altitudeMode-relativeToSeaFloor","KML - <gx:altitudeMode>:relativeToSeaFloor is currently not supported, using <kml:altitudeMode>:relativeToGround."),rt.RELATIVE_TO_GROUND):(l(e)?_t("kml-altitudeMode-unknown",`KML - Unknown <kml:altitudeMode>:${e}, using <kml:altitudeMode>:CLAMP_TO_GROUND.`):_t("kml-gx:altitudeMode-unknown",`KML - Unknown <gx:altitudeMode>:${t}, using <kml:altitudeMode>:CLAMP_TO_GROUND.`),rt.CLAMP_TO_GROUND)}function Cft(e,t,n){return n==="relativeToSeaFloor"||t==="absolute"||t==="relativeToGround"?e:((l(t)&&t!=="clampToGround"||l(n)&&n!=="clampToSeaFloor")&&_t("kml-altitudeMode-unknown",`KML - Unknown altitudeMode: ${t??n}`),new Pp(e))}function Tft(e,t,n,i){if(!l(e))return;if(n==="relativeToSeaFloor"||t==="absolute"||t==="relativeToGround")return e;(l(t)&&t!=="clampToGround"||l(n)&&n!=="clampToSeaFloor")&&_t("kml-altitudeMode-unknown",`KML - Unknown altitudeMode: ${t??n}`);let o=e.length;for(let r=0;r<o;r++){let s=e[r];i.scaleToGeodeticSurface(s,s)}return e}function LQ(e,t,n,i){let o=t.label;l(o)||(o=l(n.label)?n.label.clone():cEe(),t.label=o),o.text=t.name;let r=t.billboard;l(r)||(r=l(n.billboard)?n.billboard.clone():aEe(),t.billboard=r),l(r.image)?r.image.getValue()||(r.image=void 0):r.image=e._pinBuilder.fromColor(U.YELLOW,64);let s=1;l(r.scale)&&(s=r.scale.getValue(),s!==0?o.pixelOffset=new M(s*16+1,0):(o.pixelOffset=void 0,o.horizontalOrigin=void 0)),l(i)&&e._clampToGround&&(r.heightReference=i,o.heightReference=i)}function uEe(e,t){let n=e.path;l(n)||(n=new UA,n.leadTime=0,e.path=n);let i=t.polyline;l(i)&&(n.material=i.material,n.width=i.width)}function Eft(e,t,n,i,o){let r=Un(n,"coordinates",ke.kml),s=Un(n,"altitudeMode",ke.kml),a=Un(n,"altitudeMode",ke.gx),c=Lf(n,"extrude",ke.kml),d=e._ellipsoid,u=GQ(r,d);return i.position=u,LQ(e,i,o,dEe(s,a)),c&&fX(s,a)&&Gq(t,i,o),!0}function tEe(e,t,n,i,o){let r=eo(n,"coordinates",ke.kml),s=Un(n,"altitudeMode",ke.kml),a=Un(n,"altitudeMode",ke.gx),c=Lf(n,"extrude",ke.kml),d=Lf(n,"tessellate",ke.kml),u=fX(s,a),h=xi(n,"drawOrder",ke.gx),p=e._ellipsoid,A=ZQ(r,p),f=o.polyline;if(u&&c){let b=new DA;i.wall=b,b.positions=A;let C=o.polygon;l(C)&&(b.fill=C.fill,b.material=C.material),b.outline=!0,l(f)?(b.outlineColor=l(f.material)?f.material.color:U.WHITE,b.outlineWidth=f.width):l(C)&&(b.outlineColor=l(C.material)?C.material.color:U.WHITE)}else if(e._clampToGround&&!u&&d){let b=new Qc;b.clampToGround=!0,i.polyline=b,b.positions=A,l(f)?(b.material=l(f.material)?f.material.color.getValue(qe.MINIMUM_VALUE):U.WHITE,b.width=f.width??1):(b.material=U.WHITE,b.width=1),b.zIndex=h}else l(h)&&_t("kml-gx:drawOrder","KML - gx:drawOrder is not supported in LineStrings when clampToGround is false"),e._clampToGround&&!d&&_t("kml-line-tesselate","Ignoring clampToGround for KML lines without the tessellate flag."),f=l(f)?f.clone():new Qc,i.polyline=f,f.positions=Tft(A,s,a,p),(!d||u)&&(f.arcType=un.NONE);return!0}function Sft(e,t,n,i,o){let r=eo(n,"outerBoundaryIs",ke.kml),s=eo(r,"LinearRing",ke.kml),a=eo(s,"coordinates",ke.kml),c=e._ellipsoid,d=ZQ(a,c),u=Lf(n,"extrude",ke.kml),h=Un(n,"altitudeMode",ke.kml),p=Un(n,"altitudeMode",ke.gx),A=fX(h,p),f=l(o.polygon)?o.polygon.clone():Rq(),b=o.polyline;if(l(b)&&(f.outlineColor=l(b.material)?b.material.color:U.WHITE,f.outlineWidth=b.width),i.polygon=f,A?(f.perPositionHeight=!0,f.extrudedHeight=u?0:void 0):e._clampToGround||(f.height=0),l(d)){let C=new _c(d),T=Gf(n,"innerBoundaryIs",ke.kml);for(let E=0;E<T.length;E++){s=Gf(T[E],"LinearRing",ke.kml);for(let S=0;S<s.length;S++)a=eo(s[S],"coordinates",ke.kml),d=ZQ(a,c),l(d)&&C.holes.push(new _c(d))}f.hierarchy=C}return!0}function _ft(e,t,n,i,o){let r=Un(n,"altitudeMode",ke.kml),s=Un(n,"altitudeMode",ke.gx),a=Gf(n,"coord",ke.gx),c=Gf(n,"angles",ke.gx),d=Gf(n,"when",ke.kml),u=Lf(n,"extrude",ke.kml),h=fX(r,s),p=e._ellipsoid;c.length>0&&_t("kml-gx:angles","KML - gx:angles are not supported in gx:Tracks");let A=Math.min(a.length,d.length),f=[],b=[];for(let T=0;T<A;T++){let E=GQ(a[T].textContent,p);f.push(E),b.push(q.fromIso8601(d[T].textContent))}let C=new lc;return C.addSamples(b,f),i.position=C,LQ(e,i,o,dEe(r,s)),uEe(i,o),i.availability=new bs,d.length>0&&i.availability.addInterval(new Wn({start:b[0],stop:b[b.length-1]})),h&&u&&Gq(t,i,o),!0}function nEe(e,t,n,i,o,r,s,a,c){let d=e[0],u=e[e.length-1],h=new lc;h.addSamples(e,t),n.intervals.addInterval(new Wn({start:d,stop:u,isStartIncluded:c,isStopIncluded:c,data:Cft(h,s,a)})),i.addInterval(new Wn({start:d,stop:u,isStartIncluded:c,isStopIncluded:c})),o.intervals.addInterval(new Wn({start:d,stop:u,isStartIncluded:c,isStopIncluded:c,data:r}))}function Ift(e,t,n,i,o){let r=Lf(n,"interpolate",ke.gx),s=Gf(n,"Track",ke.gx),a,c,d,u=!1,h=new eb,p=new bs,A=new ac,f=e._ellipsoid;for(let b=0,C=s.length;b<C;b++){let T=s[b],E=Gf(T,"when",ke.kml),S=Gf(T,"coord",ke.gx),I=Un(T,"altitudeMode",ke.kml),R=Un(T,"altitudeMode",ke.gx),V=fX(I,R),W=Lf(T,"extrude",ke.kml),B=Math.min(S.length,E.length),N=[];a=[];for(let P=0;P<B;P++){let g=GQ(S[P].textContent,f);N.push(g),a.push(q.fromIso8601(E[P].textContent))}r&&(l(c)&&nEe([c,a[0]],[d,N[0]],A,p,h,!1,"absolute",void 0,!1),c=a[B-1],d=N[N.length-1]),nEe(a,N,A,p,h,V&&W,I,R,!0),u=u||V&&W}return i.availability=p,i.position=A,LQ(e,i,o),uEe(i,o),u&&(Gq(t,i,o),i.polyline.show=h),!0}var mEe={Point:Eft,LineString:tEe,LinearRing:tEe,Polygon:Sft,Track:_ft,MultiTrack:Ift,MultiGeometry:Zft,Model:Rft};function Zft(e,t,n,i,o,r){let s=n.childNodes,a=!1;for(let c=0,d=s.length;c<d;c++){let u=s.item(c),h=mEe[u.localName];if(l(h)){let p=sEe(u,t,r);p.parent=i,p.name=i.name,p.availability=i.availability,p.description=i.description,p.kml=i.kml,h(e,t,u,p,o)&&(a=!0)}}return a}function Rft(e,t,n,i,o){return _t("kml-unsupportedGeometry",`KML - Unsupported geometry: ${n.localName}`),!1}function Vft(e,t){let n=eo(e,"ExtendedData",ke.kml);if(!l(n))return;l(eo(n,"SchemaData",ke.kml))&&_t("kml-schemaData","KML - SchemaData is unsupported"),l(ba(n,"xmlns:prefix"))&&_t("kml-extendedData","KML - ExtendedData with xmlns:prefix is unsupported");let i={},o=Gf(n,"Data",ke.kml);if(l(o)){let r=o.length;for(let s=0;s<r;s++){let a=o[s],c=ba(a,"name");l(c)&&(i[c]={displayName:Un(a,"displayName",ke.kml),value:Un(a,"value",ke.kml)})}}t.kml.extendedData=i}var Yo;typeof document<"u"&&(Yo=document.createElement("div"));function Gft(e,t,n,i,o){let r,s,a,c=t.kml,d=c.extendedData,u=Un(e,"description",ke.kml),h=t.balloonStyle??n.balloonStyle,p=U.WHITE,A=U.BLACK,f=u;l(h)&&(p=h.bgColor??U.WHITE,A=h.textColor??U.BLACK,f=h.text??u);let b;if(l(f)){if(f=f.replace("$[name]",t.name??""),f=f.replace("$[description]",u??""),f=f.replace("$[address]",c.address??""),f=f.replace("$[Snippet]",c.snippet??""),f=f.replace("$[id]",t.id),f=f.replace("$[geDirections]",""),l(d)){let E=f.match(/\$\[.+?\]/g);if(E!==null)for(r=0;r<E.length;r++){let S=E[r],I=S.substr(2,S.length-3),R=/\/displayName$/.test(I);I=I.replace(/\/displayName$/,""),b=d[I],l(b)&&(b=R?b.displayName:b.value),l(b)&&(f=f.replace(S,b??""))}}}else if(l(d)&&(a=Object.keys(d),a.length>0)){for(f='<table class="cesium-infoBox-defaultTable cesium-infoBox-defaultTable-lighter"><tbody>',r=0;r<a.length;r++)s=a[r],b=d[s],f+=`<tr><th>${b.displayName??s}</th><td>${b.value??""}</td></tr>`;f+="</tbody></table>"}if(!l(f))return;f=uft.link(f),Yo.innerHTML=f;let C=Yo.querySelectorAll("a");for(r=0;r<C.length;r++)C[r].setAttribute("target","_blank");l(i)&&i.keys.length>1&&(Pu(Yo,"a","href",i),Pu(Yo,"link","href",i),Pu(Yo,"area","href",i),Pu(Yo,"img","src",i),Pu(Yo,"iframe","src",i),Pu(Yo,"video","src",i),Pu(Yo,"audio","src",i),Pu(Yo,"source","src",i),Pu(Yo,"track","src",i),Pu(Yo,"input","src",i),Pu(Yo,"embed","src",i),Pu(Yo,"script","src",i),Pu(Yo,"video","poster",i)),Xu(Yo,"a","href",o),Xu(Yo,"link","href",o),Xu(Yo,"area","href",o),Xu(Yo,"img","src",o),Xu(Yo,"iframe","src",o),Xu(Yo,"video","src",o),Xu(Yo,"audio","src",o),Xu(Yo,"source","src",o),Xu(Yo,"track","src",o),Xu(Yo,"input","src",o),Xu(Yo,"embed","src",o),Xu(Yo,"script","src",o),Xu(Yo,"video","poster",o);let T='<div class="cesium-infoBox-description-lighter" style="';T+="overflow:auto;",T+="word-wrap:break-word;",T+=`background-color:${p.toCssColorString()};`,T+=`color:${A.toCssColorString()};`,T+='">',T+=`${Yo.innerHTML}</div>`,Yo.innerHTML="",t.description=T}function WQ(e,t,n){let i=n.entityCollection,o=n.parentEntity,r=n.sourceResource,s=n.uriResolver,a=sEe(t,i,n.context),c=a.kml,d=yft(e,t,n.styleCollection,r,s),u=Un(t,"name",ke.kml);a.name=u,a.parent=o;let h=gft(t);l(h)||(h=Aft(t)),a.availability=h,Fq(a);function p(S){return S?S.show&&p(S.parent):!0}let A=Lf(t,"visibility",ke.kml);a.show=p(o)&&(A??!0);let f=eo(t,"author",ke.atom),b=c.author;b.name=Un(f,"name",ke.atom),b.uri=Un(f,"uri",ke.atom),b.email=Un(f,"email",ke.atom);let C=eo(t,"link",ke.atom),T=c.link;T.href=ba(C,"href"),T.hreflang=ba(C,"hreflang"),T.rel=ba(C,"rel"),T.type=ba(C,"type"),T.title=ba(C,"title"),T.length=ba(C,"length"),c.address=Un(t,"address",ke.kml),c.phoneNumber=Un(t,"phoneNumber",ke.kml),c.snippet=Un(t,"Snippet",ke.kml),Vft(t,a),Gft(t,a,d,s,r);let E=e._ellipsoid;return pEe(t,a,E),fEe(t,a,E),l(eo(t,"Region",ke.kml))&&_t("kml-region","KML - Placemark Regions are unsupported"),{entity:a,styleEntity:d}}function hEe(e,t,n,i){i.addNodes(t.childNodes,n),i.process()}function Lft(e,t,n,i){let o=WQ(e,t,n),r=He(n);r.parentEntity=o.entity,hEe(e,t,r,i)}function Wft(e,t,n,i){let o=WQ(e,t,n),r=o.entity,s=o.styleEntity,a=!1,c=t.childNodes;for(let d=0,u=c.length;d<u&&!a;d++){let h=c.item(d),p=mEe[h.localName];l(p)&&(p(e,n.entityCollection,h,r,s,r.id),a=!0)}a||(r.merge(s),LQ(e,r,s))}var Fft={FlyTo:Nft,Wait:wft,SoundCue:xq,AnimatedUpdate:xq,TourControl:xq};function Bft(e,t,n,i){let o=Un(t,"name",ke.kml),r=ba(t,"id"),s=new lX(o,r),a=eo(t,"Playlist",ke.gx);if(a){let c=e._ellipsoid,d=a.childNodes;for(let u=0;u<d.length;u++){let h=d[u];if(h.localName){let p=Fft[h.localName];p?p(s,h,c):console.log(`Unknown KML Tour playlist entry type ${h.localName}`)}}}e._kmlTours.push(s)}function xq(e,t){_t(`KML Tour unsupported node ${t.localName}`)}function wft(e,t){let n=xi(t,"duration",ke.gx);e.addPlaylistEntry(new mX(n))}function Nft(e,t,n){let i=xi(t,"duration",ke.gx),o=Un(t,"flyToMode",ke.gx),r={kml:{}};pEe(t,r,n),fEe(t,r,n);let s=r.kml.lookAt||r.kml.camera,a=new uX(i,o,s);e.addPlaylistEntry(a)}function fEe(e,t,n){let i=eo(e,"Camera",ke.kml);if(l(i)){let o=xi(i,"longitude",ke.kml)??0,r=xi(i,"latitude",ke.kml)??0,s=xi(i,"altitude",ke.kml)??0,a=xi(i,"heading",ke.kml)??0,c=xi(i,"tilt",ke.kml)??0,d=xi(i,"roll",ke.kml)??0,u=m.fromDegrees(o,r,s,n),h=yc.fromDegrees(a,c-90,d);t.kml.camera=new aX(u,h)}}function pEe(e,t,n){let i=eo(e,"LookAt",ke.kml);if(l(i)){let o=xi(i,"longitude",ke.kml)??0,r=xi(i,"latitude",ke.kml)??0,s=xi(i,"altitude",ke.kml)??0,a=xi(i,"heading",ke.kml),c=xi(i,"tilt",ke.kml),d=xi(i,"range",ke.kml)??0;c=L.toRadians(c??0),a=L.toRadians(a??0);let u=new jm(a,c-L.PI_OVER_TWO,d),h=m.fromDegrees(o,r,s,n);t.kml.lookAt=new cX(h,u)}}function Pft(e,t,n,i){let o=n.screenOverlayContainer;if(!l(o))return;let r=n.sourceResource,s=n.uriResolver,a=eo(t,"Icon",ke.kml),c=Vq(a,e,r,s,!1);if(!l(c))return;let d=document.createElement("img");e._screenOverlays.push(d),d.src=c.url,d.onload=function(){let u=["position: absolute"],h=eo(t,"screenXY",ke.kml),p=eo(t,"overlayXY",ke.kml),A=eo(t,"size",ke.kml),f,b,C,T,E,S;l(A)&&(f=Gy(A,"x"),b=Gy(A,"y"),C=ba(A,"xunits"),T=ba(A,"yunits"),l(f)&&f!==-1&&f!==0&&(C==="fraction"?E=`width: ${Math.floor(f*100)}%`:C==="pixels"&&(E=`width: ${f}px`),u.push(E)),l(b)&&b!==-1&&b!==0&&(T==="fraction"?S=`height: ${Math.floor(b*100)}%`:T==="pixels"&&(S=`height: ${b}px`),u.push(S))),d.style=u.join(";");let I=0,R=d.height;l(p)&&(f=Gy(p,"x"),b=Gy(p,"y"),C=ba(p,"xunits"),T=ba(p,"yunits"),l(f)&&(C==="fraction"?I=f*d.width:(C==="pixels"||C==="insetPixels")&&(I=f)),l(b)&&(T==="fraction"?R=b*d.height:(T==="pixels"||T==="insetPixels")&&(R=b))),l(h)&&(f=Gy(h,"x"),b=Gy(h,"y"),C=ba(h,"xunits"),T=ba(h,"yunits"),l(f)&&(C==="fraction"?E=`left: calc(${Math.floor(f*100)}% - ${I}px)`:C==="pixels"?E=`left: ${f-I}px`:C==="insetPixels"&&(E=`right: ${f-I}px`),u.push(E)),l(b)&&(T==="fraction"?S=`bottom: calc(${Math.floor(b*100)}% - ${R}px)`:T==="pixels"?S=`bottom: ${b-R}px`:T==="insetPixels"&&(S=`top: ${b-R}px`),u.push(S))),d.style=u.join(";")},o.appendChild(d)}function Xft(e,t,n,i){let r=WQ(e,t,n).entity,s,a=!1,c=e._ellipsoid,d=ZQ(eo(t,"LatLonQuad",ke.gx),c),u=xi(t,"drawOrder",ke.kml);if(l(d))s=Rq(),s.hierarchy=new _c(d),s.zIndex=u,r.polygon=s,a=!0;else{s=new Fh,s.zIndex=u,r.rectangle=s;let f=eo(t,"LatLonBox",ke.kml);if(l(f)){let b=xi(f,"west",ke.kml),C=xi(f,"south",ke.kml),T=xi(f,"east",ke.kml),E=xi(f,"north",ke.kml);l(b)&&(b=L.negativePiToPi(L.toRadians(b))),l(C)&&(C=L.clampToLatitudeRange(L.toRadians(C))),l(T)&&(T=L.negativePiToPi(L.toRadians(T))),l(E)&&(E=L.clampToLatitudeRange(L.toRadians(E))),s.coordinates=new de(b,C,T,E);let S=xi(f,"rotation",ke.kml);if(l(S)){let I=L.toRadians(S);s.rotation=I,s.stRotation=I}}}let h=eo(t,"Icon",ke.kml),p=Vq(h,e,n.sourceResource,n.uriResolver,!0);if(l(p)){a&&_t("kml-gx:LatLonQuad","KML - gx:LatLonQuad Icon does not support texture projection.");let f=xi(h,"x",ke.gx),b=xi(h,"y",ke.gx),C=xi(h,"w",ke.gx),T=xi(h,"h",ke.gx);(l(f)||l(b)||l(C)||l(T))&&_t("kml-groundOverlay-xywh","KML - gx:x, gx:y, gx:w, gx:h aren't supported for GroundOverlays"),s.material=p,s.material.color=QT(t,"color",ke.kml),s.material.transparent=!0}else s.material=QT(t,"color",ke.kml);let A=Un(t,"altitudeMode",ke.kml);l(A)?A==="absolute"?(s.height=xi(t,"altitude",ke.kml),s.zIndex=void 0):A!=="clampToGround"&&_t("kml-altitudeMode-unknown",`KML - Unknown altitudeMode: ${A}`):(A=Un(t,"altitudeMode",ke.gx),A==="relativeToSeaFloor"?(_t("kml-altitudeMode-relativeToSeaFloor","KML - altitudeMode relativeToSeaFloor is currently not supported, treating as absolute."),s.height=xi(t,"altitude",ke.kml),s.zIndex=void 0):A==="clampToSeaFloor"?_t("kml-altitudeMode-clampToSeaFloor","KML - altitudeMode clampToSeaFloor is currently not supported, treating as clampToGround."):l(A)&&_t("kml-altitudeMode-unknown",`KML - Unknown altitudeMode: ${A}`))}function AEe(e,t,n,i){e._unsupportedNode.raiseEvent(e,n.parentEntity,t,n.entityCollection,n.styleCollection,n.sourceResource,n.uriResolver),_t(`kml-unsupportedFeature-${t.nodeName}`,`KML - Unsupported feature: ${t.nodeName}`)}var Ly={INTERVAL:0,EXPIRE:1,STOP:2};function VQ(e){if(!l(e)||e.length===0)return"";let t=e[0];return(t==="&"||t==="?")&&(e=e.substring(1)),e}var Yft=new de,TZ=new Ae,Cq=new M,Mft=new m;function Lq(e,t,n,i,o,r){function s(d){return d<-L.PI_OVER_TWO?-L.PI_OVER_TWO:d>L.PI_OVER_TWO?L.PI_OVER_TWO:d}function a(d){return d>L.PI?d-L.TWO_PI:d<-L.PI?d+L.TWO_PI:d}let c=dx(e.queryParameters);if(c=c.replace(/%5B/g,"[").replace(/%5D/g,"]"),l(t)&&t._mode!==se.MORPHING){let d,u;if(o=o??Yft,l(n)&&(Cq.x=n.clientWidth*.5,Cq.y=n.clientHeight*.5,d=t.pickEllipsoid(Cq,r,Mft)),l(d)?u=r.cartesianToCartographic(d,TZ):(u=de.center(o,TZ),d=r.cartographicToCartesian(u)),l(i)&&!L.equalsEpsilon(i,1,L.EPSILON9)){let T=o.width*i*.5,E=o.height*i*.5;o=new de(a(u.longitude-T),s(u.latitude-E),a(u.longitude+T),s(u.latitude+E))}c=c.replace("[bboxWest]",L.toDegrees(o.west).toString()),c=c.replace("[bboxSouth]",L.toDegrees(o.south).toString()),c=c.replace("[bboxEast]",L.toDegrees(o.east).toString()),c=c.replace("[bboxNorth]",L.toDegrees(o.north).toString());let h=L.toDegrees(u.longitude).toString(),p=L.toDegrees(u.latitude).toString();c=c.replace("[lookatLon]",h),c=c.replace("[lookatLat]",p),c=c.replace("[lookatTilt]",L.toDegrees(t.pitch).toString()),c=c.replace("[lookatHeading]",L.toDegrees(t.heading).toString()),c=c.replace("[lookatRange]",m.distance(t.positionWC,d)),c=c.replace("[lookatTerrainLon]",h),c=c.replace("[lookatTerrainLat]",p),c=c.replace("[lookatTerrainAlt]",u.height.toString()),r.cartesianToCartographic(t.positionWC,TZ),c=c.replace("[cameraLon]",L.toDegrees(TZ.longitude).toString()),c=c.replace("[cameraLat]",L.toDegrees(TZ.latitude).toString()),c=c.replace("[cameraAlt]",L.toDegrees(TZ.height).toString());let A=t.frustum,f=A.aspectRatio,b="",C="";if(l(f)){let T=L.toDegrees(A.fov);f>1?(b=T,C=T/f):(C=T,b=T*f)}c=c.replace("[horizFov]",b.toString()),c=c.replace("[vertFov]",C.toString())}else c=c.replace("[bboxWest]","-180"),c=c.replace("[bboxSouth]","-90"),c=c.replace("[bboxEast]","180"),c=c.replace("[bboxNorth]","90"),c=c.replace("[lookatLon]",""),c=c.replace("[lookatLat]",""),c=c.replace("[lookatRange]",""),c=c.replace("[lookatTilt]",""),c=c.replace("[lookatHeading]",""),c=c.replace("[lookatTerrainLon]",""),c=c.replace("[lookatTerrainLat]",""),c=c.replace("[lookatTerrainAlt]",""),c=c.replace("[cameraLon]",""),c=c.replace("[cameraLat]",""),c=c.replace("[cameraAlt]",""),c=c.replace("[horizFov]",""),c=c.replace("[vertFov]","");l(n)?(c=c.replace("[horizPixels]",n.clientWidth),c=c.replace("[vertPixels]",n.clientHeight)):(c=c.replace("[horizPixels]",""),c=c.replace("[vertPixels]","")),c=c.replace("[terrainEnabled]","1"),c=c.replace("[clientVersion]","1"),c=c.replace("[kmlVersion]","2.2"),c=c.replace("[clientName]","Cesium"),c=c.replace("[language]","English"),e.setQueryParameters($d(c))}function vft(e,t,n,i){let r=WQ(e,t,n).entity,s=n.sourceResource,a=n.uriResolver,c=eo(t,"Link",ke.kml);if(l(c)||(c=eo(t,"Url",ke.kml)),l(c)){let d=Un(c,"href",ke.kml),u,h;if(l(d)){let p=d;if(d=Zq(d,s,n.uriResolver),/^data:/.test(d.getUrlComponent()))/\.kmz/i.test(s.getUrlComponent())||(p=s.getDerivedResource({url:p}));else{if(p=d.clone(),u=Un(c,"viewRefreshMode",ke.kml),u==="onRegion"){_t("kml-refrehMode-onRegion","KML - Unsupported viewRefreshMode: onRegion");return}h=Un(c,"viewBoundScale",ke.kml)??1;let C=u==="onStop"?"BBOX=[bboxWest],[bboxSouth],[bboxEast],[bboxNorth]":"",T=Un(c,"viewFormat",ke.kml)??C,E=Un(c,"httpQuery",ke.kml);l(T)&&d.setQueryParameters($d(VQ(T))),l(E)&&d.setQueryParameters($d(VQ(E)));let S=e._ellipsoid;Lq(d,e.camera,e.canvas,h,e._lastCameraView.bbox,S)}let A={sourceUri:p,uriResolver:a,context:r.id,screenOverlayContainer:n.screenOverlayContainer},f=new Ya,b=Wq(e,f,d,A).then(function(C){let T=e._entityCollection,E=f.values;T.suspendEvents();for(let R=0;R<E.length;R++){let V=E[R];l(V.parent)||(V.parent=r,Fq(V)),T.add(V)}T.resumeEvents();let S=Un(c,"refreshMode",ke.kml),I=xi(c,"refreshInterval",ke.kml)??0;if(S==="onInterval"&&I>0||S==="onExpire"||u==="onStop"){let R=eo(C,"NetworkLinkControl",ke.kml),V=l(R),W=q.now(),B={id:qn(),href:d,cookie:{},lastUpdated:W,updating:!1,entity:r,viewBoundScale:h,needsUpdate:!1,cameraUpdateTime:W},N=0;if(V&&(B.cookie=$d(Un(R,"cookie",ke.kml)??""),N=xi(R,"minRefreshPeriod",ke.kml)??0),S==="onInterval")V&&(I=Math.max(N,I)),B.refreshMode=Ly.INTERVAL,B.time=I;else if(S==="onExpire"){let P;if(V&&(P=Un(R,"expires",ke.kml)),l(P))try{let g=q.fromIso8601(P),_=q.secondsDifference(g,W);_>0&&_<N&&q.addSeconds(W,N,g),B.refreshMode=Ly.EXPIRE,B.time=g}catch{_t("kml-refreshMode-onInterval-onExpire","KML - NetworkLinkControl expires is not a valid date")}else _t("kml-refreshMode-onExpire","KML - refreshMode of onExpire requires the NetworkLinkControl to have an expires element")}else l(e.camera)?(B.refreshMode=Ly.STOP,B.time=xi(c,"viewRefreshTime",ke.kml)??0):_t("kml-refrehMode-onStop-noCamera","A NetworkLink with viewRefreshMode=onStop requires the `camera` property to be defined.");l(B.refreshMode)&&e._networkLinks.set(B.id,B)}}).catch(function(C){_t(`An error occured during loading ${d.url}`),e._error.raiseEvent(e,C)});i.addPromise(b)}}}function Uft(e,t,n,i){let o=Iq[t.localName];return l(o)?o(e,t,n,i):AEe(e,t,n,i)}function Sq(e,t,n,i,o,r,s){t.removeAll();let a=n.documentElement,c=a.localName==="Document"?a:eo(a,"Document",ke.kml),d=Un(c,"name",ke.kml);l(d)||(d=Jg(i.getUrlComponent())),l(e._name)||(e._name=d);let u=new Yu._DeferredLoading(e),h=new Ya(e);return Promise.all(lEe(e,n,h,i,!1,o)).then(function(){let p=n.documentElement;if(p.localName==="kml"){let f=p.childNodes;for(let b=0;b<f.length;b++){let C=f[b];if(l(Iq[C.localName])){p=C;break}}}let A={parentEntity:void 0,entityCollection:t,styleCollection:h,sourceResource:i,uriResolver:o,context:s,screenOverlayContainer:r};return t.suspendEvents(),Uft(e,p,A,u),t.resumeEvents(),u.wait().then(function(){return n.documentElement})})}async function Dft(e,t,n,i,o){let r=en("ThirdParty/Workers/zip-web-worker.js"),s=en("ThirdParty/zip-module.wasm");cZ({workerURI:r,wasmURI:s});let a=new YT(new Mp(n)),c=await a.getEntries(),d=[],u={},h;for(let p=0;p<c.length;p++){let A=c[p];A.directory||(/\.kml$/i.test(A.filename)&&(!l(h)||!/\//i.test(A.filename))?(l(h)&&d.push(yq(h,u)),h=A):d.push(yq(A,u)))}if(l(h)&&d.push(pft(h,u)),await Promise.all(d),a.close(),!l(u.kml))throw new me("KMZ file does not contain a KML document.");return u.keys=Object.keys(u),Sq(e,t,u.kml,i,u,o)}function Wq(e,t,n,i){i=i??Q.EMPTY_OBJECT;let o=i.sourceUri,r=i.uriResolver,s=i.context,a=i.screenOverlayContainer,c=n;if(typeof n=="string"||n instanceof Le){n=Le.createIfNeeded(n),c=n.fetchBlob(),o=o??n.clone();let d=e._resourceCredits,u=n.credits;if(l(u)){let h=u.length;for(let p=0;p<h;p++)d.push(u[p])}}else o=o??Le.DEFAULT.clone();return o=Le.createIfNeeded(o),l(a)&&(a=vn(a)),Promise.resolve(c).then(function(d){return d instanceof Blob?hft(d).then(function(u){return u?Dft(e,t,d,o,a):fft(d).then(function(h){h=oEe(h),h=rEe(h);let p,A;try{p=_q.parseFromString(h,"application/xml")}catch(f){A=f.toString()}if(l(A)||p.body||p.documentElement.tagName==="parsererror"){let f=l(A)?A:p.documentElement.firstChild.nodeValue;throw f||(f=p.body.innerText),new me(f)}return Sq(e,t,p,o,r,a,s)})}):Sq(e,t,d,o,r,a,s)}).catch(function(d){return e._error.raiseEvent(e,d),console.log(d),Promise.reject(d)})}function Yu(e){e=e??Q.EMPTY_OBJECT;let t=e.camera,n=e.canvas;this._changed=new xe,this._error=new xe,this._loading=new xe,this._refresh=new xe,this._unsupportedNode=new xe,this._clock=void 0,this._entityCollection=new Ya(this),this._name=void 0,this._isLoading=!1,this._pinBuilder=new mb,this._networkLinks=new Xt,this._entityCluster=new _u,this.canvas=n,this.camera=t,this._lastCameraView={position:l(t)?m.clone(t.positionWC):void 0,direction:l(t)?m.clone(t.directionWC):void 0,up:l(t)?m.clone(t.upWC):void 0,bbox:l(t)?t.computeViewRectangle():de.clone(de.MAX_VALUE)},this._ellipsoid=e.ellipsoid??ie.default;let i=e.credit;typeof i=="string"&&(i=new Et(i)),this._credit=i,this._resourceCredits=[],this._kmlTours=[],this._screenOverlays=[]}Yu.load=function(e,t){return t=t??Q.EMPTY_OBJECT,new Yu(t).load(e,t)};Object.defineProperties(Yu.prototype,{name:{get:function(){return this._name},set:function(e){this._name!==e&&(this._name=e,this._changed.raiseEvent(this))}},clock:{get:function(){return this._clock}},entities:{get:function(){return this._entityCollection}},isLoading:{get:function(){return this._isLoading}},changedEvent:{get:function(){return this._changed}},errorEvent:{get:function(){return this._error}},loadingEvent:{get:function(){return this._loading}},refreshEvent:{get:function(){return this._refresh}},unsupportedNodeEvent:{get:function(){return this._unsupportedNode}},show:{get:function(){return this._entityCollection.show},set:function(e){this._entityCollection.show=e}},clustering:{get:function(){return this._entityCluster},set:function(e){this._entityCluster=e}},credit:{get:function(){return this._credit}},kmlTours:{get:function(){return this._kmlTours}}});Yu.prototype.load=function(e,t){t=t??Q.EMPTY_OBJECT,ys.setLoading(this,!0);let n=this._name;this._name=void 0,this._clampToGround=t.clampToGround??!1;let i=this;return Wq(this,this._entityCollection,e,t).then(function(){let o,r=i._entityCollection.computeAvailability(),s=r.start,a=r.stop,c=q.equals(s,qe.MINIMUM_VALUE),d=q.equals(a,qe.MAXIMUM_VALUE);if(!c||!d){let h;c&&(h=new Date,h.setHours(0,0,0,0),s=q.fromDate(h)),d&&(h=new Date,h.setHours(24,0,0,0),a=q.fromDate(h)),o=new Af,o.startTime=s,o.stopTime=a,o.currentTime=q.clone(s),o.clockRange=xs.LOOP_STOP,o.clockStep=Xo.SYSTEM_CLOCK_MULTIPLIER,o.multiplier=Math.round(Math.min(Math.max(q.secondsDifference(a,s)/60,1),31556900))}let u=!1;return o!==i._clock&&(i._clock=o,u=!0),n!==i._name&&(u=!0),u&&i._changed.raiseEvent(i),ys.setLoading(i,!1),i}).catch(function(o){return ys.setLoading(i,!1),i._error.raiseEvent(i,o),console.log(o),Promise.reject(o)})};Yu.prototype.destroy=function(){for(;this._screenOverlays.length>0;)this._screenOverlays.pop().remove()};function Fq(e){let t=e.parent;if(l(t)){let n=t.availability;if(l(n)){let i=e.availability;l(i)?i.intersect(n):e.availability=n}}}function kft(e,t,n,i,o){return function(r){if(!i.contains(t.id))return;let s=!1,a=eo(r,"NetworkLinkControl",ke.kml),c=l(a),d=0;if(c){if(l(eo(a,"Update",ke.kml))){_t("kml-networkLinkControl-update","KML - NetworkLinkControl updates aren't supported."),t.updating=!1,i.remove(t.id);return}t.cookie=$d(Un(a,"cookie",ke.kml)??""),d=xi(a,"minRefreshPeriod",ke.kml)??0}let u=q.now(),h=t.refreshMode;if(h===Ly.INTERVAL)l(a)&&(t.time=Math.max(d,t.time));else if(h===Ly.EXPIRE){let W;if(l(a)&&(W=Un(a,"expires",ke.kml)),l(W))try{let B=q.fromIso8601(W),N=q.secondsDifference(B,u);N>0&&N<d&&q.addSeconds(u,d,B),t.time=B}catch{_t("kml-networkLinkControl-expires","KML - NetworkLinkControl expires is not a valid date"),s=!0}else _t("kml-refreshMode-onExpire","KML - refreshMode of onExpire requires the NetworkLinkControl to have an expires element"),s=!0}let p=t.entity,A=e._entityCollection,f=n.values;function b(W){A.remove(W);let B=W._children,N=B.length;for(let P=0;P<N;++P)b(B[P])}A.suspendEvents();let C=A.values.slice(),T;for(T=0;T<C.length;++T){let W=C[T];W.parent===p&&(W.parent=void 0,b(W))}for(A.resumeEvents(),A.suspendEvents(),T=0;T<f.length;T++){let W=f[T];l(W.parent)||(W.parent=p,Fq(W)),A.add(W)}A.resumeEvents(),s?i.remove(t.id):t.lastUpdated=u;let E=A.computeAvailability(),S=E.start,I=E.stop,R=q.equals(S,qe.MINIMUM_VALUE),V=q.equals(I,qe.MAXIMUM_VALUE);if(!R||!V){let W=e._clock;(W.startTime!==S||W.stopTime!==I)&&(W.startTime=S,W.stopTime=I,e._changed.raiseEvent(e))}t.updating=!1,t.needsUpdate=!1,e._refresh.raiseEvent(e,o.getUrlComponent(!0))}}var Tq=new Xt;Yu.prototype.update=function(e){let t=this._networkLinks;if(t.length===0)return!0;let n=q.now(),i=this;Tq.removeAll();function o(u){let h=u._children,p=h.length;for(let A=0;A<p;++A){let f=h[A];Tq.set(f.id,f),o(f)}}let r=!1,s=this._lastCameraView,a=this.camera;l(a)&&!(a.positionWC.equalsEpsilon(s.position,L.EPSILON7)&&a.directionWC.equalsEpsilon(s.direction,L.EPSILON7)&&a.upWC.equalsEpsilon(s.up,L.EPSILON7))&&(s.position=m.clone(a.positionWC),s.direction=m.clone(a.directionWC),s.up=m.clone(a.upWC),s.bbox=a.computeViewRectangle(),r=!0);let c=new Xt,d=!1;return t.values.forEach(function(u){let h=u.entity;if(!Tq.contains(h.id)){if(!u.updating){let p=!1;if(u.refreshMode===Ly.INTERVAL?q.secondsDifference(n,u.lastUpdated)>u.time&&(p=!0):u.refreshMode===Ly.EXPIRE?q.greaterThan(n,u.time)&&(p=!0):u.refreshMode===Ly.STOP&&(r&&(u.needsUpdate=!0,u.cameraUpdateTime=n),u.needsUpdate&&q.secondsDifference(n,u.cameraUpdateTime)>=u.time&&(p=!0)),p){o(h),u.updating=!0;let A=new Ya,f=u.href.clone();f.setQueryParameters(u.cookie);let b=i._ellipsoid??ie.default;Lq(f,i.camera,i.canvas,u.viewBoundScale,s.bbox,b),Wq(i,A,f,{context:h.id}).then(kft(i,u,A,c,f)).catch(function(C){let T=`NetworkLink ${u.href} refresh failed: ${C}`;console.log(T),i._error.raiseEvent(i,T)}),d=!0}}c.set(u.id,u)}}),d&&(this._networkLinks=c,this._changed.raiseEvent(this)),!0};function Qft(){this.author={name:void 0,uri:void 0,email:void 0},this.link={href:void 0,hreflang:void 0,rel:void 0,type:void 0,title:void 0,length:void 0},this.address=void 0,this.phoneNumber=void 0,this.snippet=void 0,this.extendedData=void 0}Yu._DeferredLoading=Jp;Yu._getTimestamp=Xi;var OT=Yu;var _Ui=y(x(),1);function pX(){fe.throwInstantiationError()}pX.prototype.update=fe.throwInstantiationError;pX.prototype.getBoundingSphere=fe.throwInstantiationError;pX.prototype.isDestroyed=fe.throwInstantiationError;pX.prototype.destroy=fe.throwInstantiationError;var Bq=pX;var Cki=y(x(),1);var ZUi=y(x(),1),Oft={NONE:0,LERC:1},eh=Object.freeze(Oft);var HDi=y(x(),1);var nDi=y(x(),1);var MUi=y(x(),1);var VUi=y(x(),1),zft={NONE:0,BITS12:1},Da=Object.freeze(zft);var AX=new m,Hft=new m,th=new M,Jft=new F,Kft=new F,jft=Math.pow(2,12);function Wc(e,t,n,i,o,r,s,a,c,d){let u=Da.NONE,h,p;if(l(t)&&l(n)&&l(i)&&l(o)){let A=t.minimum,f=t.maximum,b=m.subtract(f,A,Hft),C=i-n;Math.max(m.maximumComponent(b),C)<jft-1?u=Da.BITS12:u=Da.NONE;let E=F.fromScale(b,Jft);E=F.setTranslation(E,A,E);let S=F.fromScale(m.fromElements(1/b.x,1/b.y,1/b.z,AX),Kft);S=F.multiplyByTranslation(S,m.negate(A,AX),S),p=F.clone(o,new F);let I=F.getTranslation(o,AX);I=m.subtract(I,e,AX),p=F.setTranslation(p,I,p),p=F.multiply(p,E,p),h=F.inverseTransformation(o,new F),h=F.multiply(S,h,h),o=F.multiply(o,E,new F)}this.quantization=u,this.minimumHeight=n,this.maximumHeight=i,this.center=m.clone(e),this.toScaledENU=h,this.fromScaledENU=o,this.matrix=p,this.hasVertexNormals=r??!1,this.hasWebMercatorT=s??!1,this.hasGeodeticSurfaceNormals=a??!1,this.exaggeration=c??1,this.exaggerationRelativeHeight=d??0,this.stride=0,this._offsetGeodeticSurfaceNormal=0,this._offsetVertexNormal=0,this._calculateStrideAndOffsets()}Wc.prototype.encode=function(e,t,n,i,o,r,s,a){let c=i.x,d=i.y;if(this.quantization===Da.BITS12){n=F.multiplyByPoint(this.toScaledENU,n,AX),n.x=L.clamp(n.x,0,1),n.y=L.clamp(n.y,0,1),n.z=L.clamp(n.z,0,1);let u=this.maximumHeight-this.minimumHeight,h=L.clamp((o-this.minimumHeight)/u,0,1);M.fromElements(n.x,n.y,th);let p=on.compressTextureCoordinates(th);M.fromElements(n.z,h,th);let A=on.compressTextureCoordinates(th);M.fromElements(c,d,th);let f=on.compressTextureCoordinates(th);if(e[t++]=p,e[t++]=A,e[t++]=f,this.hasWebMercatorT){M.fromElements(s,0,th);let b=on.compressTextureCoordinates(th);e[t++]=b}}else e[t++]=n.x-this.center.x,e[t++]=n.y-this.center.y,e[t++]=n.z-this.center.z,e[t++]=o,e[t++]=c,e[t++]=d,this.hasWebMercatorT&&(e[t++]=s);return this.hasVertexNormals&&(e[t++]=on.octPackFloat(r)),this.hasGeodeticSurfaceNormals&&(e[t++]=a.x,e[t++]=a.y,e[t++]=a.z),t};var qft=new m,gEe=new m;Wc.prototype.addGeodeticSurfaceNormals=function(e,t,n){if(this.hasGeodeticSurfaceNormals)return;let i=this.stride,o=e.length/i;this.hasGeodeticSurfaceNormals=!0,this._calculateStrideAndOffsets();let r=this.stride;for(let s=0;s<o;s++){for(let u=0;u<i;u++){let h=s*i+u,p=s*r+u;t[p]=e[h]}let a=this.decodePosition(t,s,qft),c=n.geodeticSurfaceNormal(a,gEe),d=s*r+this._offsetGeodeticSurfaceNormal;t[d]=c.x,t[d+1]=c.y,t[d+2]=c.z}};Wc.prototype.removeGeodeticSurfaceNormals=function(e,t){if(!this.hasGeodeticSurfaceNormals)return;let n=this.stride,i=e.length/n;this.hasGeodeticSurfaceNormals=!1,this._calculateStrideAndOffsets();let o=this.stride;for(let r=0;r<i;r++)for(let s=0;s<o;s++){let a=r*n+s,c=r*o+s;t[c]=e[a]}};Wc.prototype.decodePosition=function(e,t,n){if(l(n)||(n=new m),t*=this.stride,this.quantization===Da.BITS12){let i=on.decompressTextureCoordinates(e[t],th);n.x=i.x,n.y=i.y;let o=on.decompressTextureCoordinates(e[t+1],th);return n.z=o.x,F.multiplyByPoint(this.fromScaledENU,n,n)}return n.x=e[t],n.y=e[t+1],n.z=e[t+2],m.add(n,this.center,n)};Wc.prototype.getExaggeratedPosition=function(e,t,n){n=this.decodePosition(e,t,n);let i=this.exaggeration,o=this.exaggerationRelativeHeight;if(i!==1&&this.hasGeodeticSurfaceNormals){let s=this.decodeGeodeticSurfaceNormal(e,t,gEe),a=this.decodeHeight(e,t),c=Eo.getHeight(a,i,o)-a;n.x+=s.x*c,n.y+=s.y*c,n.z+=s.z*c}return n};Wc.prototype.decodeTextureCoordinates=function(e,t,n){return l(n)||(n=new M),t*=this.stride,this.quantization===Da.BITS12?on.decompressTextureCoordinates(e[t+2],n):M.fromElements(e[t+4],e[t+5],n)};Wc.prototype.decodeHeight=function(e,t){return t*=this.stride,this.quantization===Da.BITS12?on.decompressTextureCoordinates(e[t+1],th).y*(this.maximumHeight-this.minimumHeight)+this.minimumHeight:e[t+3]};Wc.prototype.decodeWebMercatorT=function(e,t){return t*=this.stride,this.quantization===Da.BITS12?on.decompressTextureCoordinates(e[t+3],th).x:e[t+6]};Wc.prototype.getOctEncodedNormal=function(e,t,n){t=t*this.stride+this._offsetVertexNormal;let i=e[t]/256,o=Math.floor(i),r=(i-o)*256;return M.fromElements(o,r,n)};Wc.prototype.decodeNormal=function(e,t,n){let i=t=t*this.stride+this._offsetVertexNormal;return on.octDecodeFloat(e[i],n)};Wc.prototype.decodeGeodeticSurfaceNormal=function(e,t,n){return t=t*this.stride+this._offsetGeodeticSurfaceNormal,n.x=e[t],n.y=e[t+1],n.z=e[t+2],n};Wc.prototype._calculateStrideAndOffsets=function(){let e=0;this.quantization===Da.BITS12?e+=3:e+=6,this.hasWebMercatorT&&(e+=1),this.hasVertexNormals&&(this._offsetVertexNormal=e,e+=1),this.hasGeodeticSurfaceNormals&&(this._offsetGeodeticSurfaceNormal=e,e+=3),this.stride=e};var FQ={position3DAndHeight:0,textureCoordAndEncodedNormals:1,geodeticSurfaceNormal:2},BQ={compressed0:0,compressed1:1,geodeticSurfaceNormal:2};Wc.prototype.getAttributes=function(e){let t=H.FLOAT,n=H.getSizeInBytes(t),i=this.stride*n,o=0,r=[];function s(a,c){r.push({index:a,vertexBuffer:e,componentDatatype:t,componentsPerAttribute:c,offsetInBytes:o,strideInBytes:i}),o+=c*n}if(this.quantization===Da.NONE){s(FQ.position3DAndHeight,4);let a=2;a+=this.hasWebMercatorT?1:0,a+=this.hasVertexNormals?1:0,s(FQ.textureCoordAndEncodedNormals,a),this.hasGeodeticSurfaceNormals&&s(FQ.geodeticSurfaceNormal,3)}else{let a=this.hasWebMercatorT||this.hasVertexNormals,c=this.hasWebMercatorT&&this.hasVertexNormals;s(BQ.compressed0,a?4:3),c&&s(BQ.compressed1,1),this.hasGeodeticSurfaceNormals&&s(BQ.geodeticSurfaceNormal,3)}return r};Wc.prototype.getAttributeLocations=function(){return this.quantization===Da.NONE?FQ:BQ};Wc.clone=function(e,t){if(l(e))return l(t)||(t=new Wc),t.quantization=e.quantization,t.minimumHeight=e.minimumHeight,t.maximumHeight=e.maximumHeight,t.center=m.clone(e.center),t.toScaledENU=F.clone(e.toScaledENU),t.fromScaledENU=F.clone(e.fromScaledENU),t.matrix=F.clone(e.matrix),t.hasVertexNormals=e.hasVertexNormals,t.hasWebMercatorT=e.hasWebMercatorT,t.hasGeodeticSurfaceNormals=e.hasGeodeticSurfaceNormals,t.exaggeration=e.exaggeration,t.exaggerationRelativeHeight=e.exaggerationRelativeHeight,t._calculateStrideAndOffsets(),t};var yr=Wc;var Kp={};Kp.DEFAULT_STRUCTURE=Object.freeze({heightScale:1,heightOffset:0,elementsPerHeight:1,stride:1,elementMultiplier:256,isBigEndian:!1});var wq=new m,$ft=new F,ept=new m,tpt=new m;Kp.computeVertices=function(e){let t=Math.cos,n=Math.sin,i=Math.sqrt,o=Math.atan,r=Math.exp,s=L.PI_OVER_TWO,a=L.toRadians,c=e.heightmap,d=e.width,u=e.height,h=e.skirtHeight,p=h>0,A=e.isGeographic??!0,f=e.ellipsoid??ie.default,b=1/f.maximumRadius,C=de.clone(e.nativeRectangle),T=de.clone(e.rectangle),E,S,I,R;l(T)?(E=T.west,S=T.south,I=T.east,R=T.north):A?(E=a(C.west),S=a(C.south),I=a(C.east),R=a(C.north)):(E=C.west*b,S=s-2*o(r(-C.south*b)),I=C.east*b,R=s-2*o(r(-C.north*b)));let V=e.relativeToCenter,W=l(V);V=W?V:m.ZERO;let B=e.includeWebMercatorT??!1,N=e.exaggeration??1,P=e.exaggerationRelativeHeight??0,_=N!==1,Z=e.structure??Kp.DEFAULT_STRUCTURE,G=Z.heightScale??Kp.DEFAULT_STRUCTURE.heightScale,w=Z.heightOffset??Kp.DEFAULT_STRUCTURE.heightOffset,X=Z.elementsPerHeight??Kp.DEFAULT_STRUCTURE.elementsPerHeight,k=Z.stride??Kp.DEFAULT_STRUCTURE.stride,v=Z.elementMultiplier??Kp.DEFAULT_STRUCTURE.elementMultiplier,D=Z.isBigEndian??Kp.DEFAULT_STRUCTURE.isBigEndian,Y=de.computeWidth(C),O=de.computeHeight(C),J=Y/(d-1),te=O/(u-1);A||(Y*=b,O*=b);let z=f.radiiSquared,j=z.x,ee=z.y,ge=z.z,ye=65536,ae=-65536,Ce=bt.eastNorthUpToFixedFrame(V,f),Te=F.inverseTransformation(Ce,$ft),Fe,Ne;B&&(Fe=pi.geodeticLatitudeToMercatorAngle(S),Ne=1/(pi.geodeticLatitudeToMercatorAngle(R)-Fe));let Pe=ept;Pe.x=Number.POSITIVE_INFINITY,Pe.y=Number.POSITIVE_INFINITY,Pe.z=Number.POSITIVE_INFINITY;let Xe=tpt;Xe.x=Number.NEGATIVE_INFINITY,Xe.y=Number.NEGATIVE_INFINITY,Xe.z=Number.NEGATIVE_INFINITY;let st=Number.POSITIVE_INFINITY,Ye=d*u,xt=h>0?d*2+u*2:0,at=Ye+xt,Je=new Array(at),lt=new Array(at),ht=new Array(at),Rt=B?new Array(at):[],_e=_?new Array(at):[],Re=0,jt=u,At=0,kt=d;p&&(--Re,++jt,--At,++kt);let On=1e-5;for(let ai=Re;ai<jt;++ai){let jn=ai;jn<0&&(jn=0),jn>=u&&(jn=u-1);let io=C.north-te*jn;A?io=a(io):io=s-2*o(r(-io*b));let wo=(io-S)/(R-S);wo=L.clamp(wo,0,1);let bo=ai===Re,nr=ai===jt-1;h>0&&(bo?io+=On*O:nr&&(io-=On*O));let zo=t(io),Sn=n(io),Ri=ge*Sn,Pn;B&&(Pn=(pi.geodeticLatitudeToMercatorAngle(io)-Fe)*Ne);for(let Ho=At;Ho<kt;++Ho){let Jo=Ho;Jo<0&&(Jo=0),Jo>=d&&(Jo=d-1);let oa=jn*(d*k)+Jo*k,Di;if(X===1)Di=c[oa];else{Di=0;let ra;if(D)for(ra=0;ra<X;++ra)Di=Di*v+c[oa+ra];else for(ra=X-1;ra>=0;--ra)Di=Di*v+c[oa+ra]}Di=Di*G+w,ae=Math.max(ae,Di),ye=Math.min(ye,Di);let Ro=C.west+J*Jo;A?Ro=a(Ro):Ro=Ro*b;let Ca=(Ro-E)/(I-E);Ca=L.clamp(Ca,0,1);let Ss=jn*d+Jo;if(h>0){let ra=Ho===At,sa=Ho===kt-1,sn=bo||nr||ra||sa;if((bo||nr)&&(ra||sa))continue;sn&&(Di-=h,ra?(Ss=Ye+(u-jn-1),Ro-=On*Y):nr?Ss=Ye+u+(d-Jo-1):sa?(Ss=Ye+u+d+jn,Ro+=On*Y):bo&&(Ss=Ye+u+d+u+Jo))}let Wr=zo*t(Ro),Ta=zo*n(Ro),zd=j*Wr,Hd=ee*Ta,ph=1/i(zd*Wr+Hd*Ta+Ri*Sn),Ja=zd*ph,Nb=Hd*ph,zf=Ri*ph,Cr=new m;Cr.x=Ja+Wr*Di,Cr.y=Nb+Ta*Di,Cr.z=zf+Sn*Di,F.multiplyByPoint(Te,Cr,wq),m.minimumByComponent(wq,Pe,Pe),m.maximumByComponent(wq,Xe,Xe),st=Math.min(st,Di),Je[Ss]=Cr,ht[Ss]=new M(Ca,wo),lt[Ss]=Di,B&&(Rt[Ss]=Pn),_&&(_e[Ss]=f.geodeticSurfaceNormal(Cr))}}let $e=ue.fromPoints(Je),uo;l(T)&&(uo=nn.fromRectangle(T,ye,ae,f));let Qt;W&&(Qt=new hf(f).computeHorizonCullingPointPossiblyUnderEllipsoid(V,Je,ye));let Bo=new ou(Pe,Xe,V),no=new yr(V,Bo,st,ae,Ce,!1,B,_,N,P),Yi=new Float32Array(at*no.stride),Oo=0;for(let ai=0;ai<at;++ai)Oo=no.encode(Yi,Oo,Je[ai],ht[ai],lt[ai],void 0,Rt[ai],_e[ai]);return{vertices:Yi,maximumHeight:ae,minimumHeight:ye,encoding:no,boundingSphere3D:$e,orientedBoundingBox:uo,occludeePointInScaledSpace:Qt}};var EZ=Kp;var rDi=y(x(),1);function Wy(){fe.throwInstantiationError()}Object.defineProperties(Wy.prototype,{credits:{get:fe.throwInstantiationError},waterMask:{get:fe.throwInstantiationError}});Wy.prototype.interpolateHeight=fe.throwInstantiationError;Wy.prototype.isChildAvailable=fe.throwInstantiationError;Wy.prototype.createMesh=fe.throwInstantiationError;Wy.prototype.upsample=fe.throwInstantiationError;Wy.prototype.wasCreatedByUpsampling=fe.throwInstantiationError;Wy.maximumAsynchronousTasks=5;var Yd=Wy;var LDi=y(x(),1);var bDi=y(x(),1);var npt=3;function Xq(e,t,n){this._vertices=e,this._indices=t,this._encoding=n,this._inverseTransform=new F,this._needsRebuild=!0,this._rootNode=new Pq}var ipt=new $n("incrementallyBuildTerrainPicker");Object.defineProperties(Xq.prototype,{needsRebuild:{get:function(){return this._needsRebuild},set:function(e){this._needsRebuild=e}}});function Pq(){this.x=0,this.y=0,this.level=0,this.aabb=bEe(this.x,this.y,this.level),this.intersectingTriangles=new Uint32Array(0),this.children=[],this.buildingChildren=!1}Pq.prototype.addChild=function(e){let t=new Pq;t.x=this.x*2+(e&1),t.y=this.y*2+(e>>1&1),t.level=this.level+1,t.aabb=bEe(t.x,t.y,t.level),this.children[e]=t};var opt=new Cn,wQ=[new m,new m,new m];Xq.prototype.rayIntersect=function(e,t,n,i,o){this._needsRebuild&&rpt(this,t);let r=this._inverseTransform,s=opt;s.origin=F.multiplyByPoint(r,e.origin,s.origin),s.direction=F.multiplyByPointAsVector(r,e.direction,s.direction);let a=[];return yEe(this._rootNode,s,a),dpt(this,a,e,n,i,o)};function rpt(e,t){F.inverse(t,e._inverseTransform),e._needsRebuild=!1;let n=e._indices.length/3,i=new Uint32Array(n);for(let o=0;o<n;++o)i[o]=o;e._rootNode.intersectingTriangles=i,e._rootNode.children.length=0}var spt=new m,apt=new m;function bEe(e,t,n){let i=1/Math.pow(2,n),o=m.fromElements(e*i-.5,t*i-.5,-.5,spt),r=m.fromElements((e+1)*i-.5,(t+1)*i-.5,.5,apt);return ou.fromCorners(o,r)}function cpt(e,t,n,i,o){m.pack(n[0],e,9*o),m.pack(n[1],e,9*o+3),m.pack(n[2],e,9*o+6),t[o]=i}var lpt=new Qr;function yEe(e,t,n){let i=hi.rayAxisAlignedBoundingBox(t,e.aabb,lpt);if(!l(i))return;if(!e.children.length||e.buildingChildren){n.push({node:e,interval:new Qr(i.start,i.stop)});return}for(let r=0;r<e.children.length;r++)yEe(e.children[r],t,n)}function dpt(e,t,n,i,o,r){let s=t.sort(function(c,d){return c.interval.start-d.interval.start}),a=Number.MAX_VALUE;for(let c=0;c<s.length;c++){let d=s[c],u=upt(e,n,d.node,i,o,r);if(a=Math.min(u,a),a!==Number.MAX_VALUE)break}if(a!==Number.MAX_VALUE)return Cn.getPoint(n,a)}function upt(e,t,n,i,o,r){let s=Number.MAX_VALUE,a=e._encoding,c=e._indices,d=e._vertices,u=n.intersectingTriangles.length,p=!(n.level>=npt)&&!n.buildingChildren,A,f;p&&(A=new Float64Array(u*9),f=new Uint32Array(u));for(let b=0;b<u;b++){let C=n.intersectingTriangles[b],T=Nq(a,o,r,t,d,c[3*C],wQ[0]),E=Nq(a,o,r,t,d,c[3*C+1],wQ[1]),S=Nq(a,o,r,t,d,c[3*C+2],wQ[2]),I=hi.rayTriangleParametric(t,T,E,S,i);l(I)&&I<s&&I>=0&&(s=I),p&&cpt(A,f,wQ,C,b)}if(p){for(let b=0;b<4;b++)n.addChild(b);hpt(e._inverseTransform,n,f,A)}return s}var mpt=new Ae;function Nq(e,t,n,i,o,r,s){let a=e.getExaggeratedPosition(o,r,s);if(t===se.SCENE3D)return a;let d=n.ellipsoid.cartesianToCartographic(a,mpt);a=n.project(d,s),a=m.fromElements(a.z,a.x,a.y,s);let u=L.TWO_PI*n.ellipsoid.maximumRadius,h=Math.round((i.origin.y-a.y)/u);return a.y+=h*u,a}async function hpt(e,t,n,i){t.buildingChildren=!0;let o=new Float64Array(16);F.pack(e,o,0);let r=new Float64Array(24);for(let u=0;u<4;u++)m.pack(t.children[u].aabb.minimum,r,u*6),m.pack(t.children[u].aabb.maximum,r,u*6+3);let s={aabbs:r,inverseTransform:o,triangleIndices:n,trianglePositions:i},a=[r.buffer,o.buffer,n.buffer,i.buffer],c=ipt.scheduleTask(s,a);if(!l(c)){t.buildingChildren=!1;return}(await c).intersectingTrianglesArrays.forEach((u,h)=>{l(t.children[h])&&(t.children[h].intersectingTriangles=new Uint32Array(u))}),t.intersectingTriangles=new Uint32Array(0),t.buildingChildren=!1}var gX=Xq;function bX(e,t,n,i,o,r,s,a,c,d,u,h,p,A,f,b,C){this.center=e,this.vertices=t,this.stride=u??6,this.indices=n,this.indexCountWithoutSkirts=i,this.vertexCountWithoutSkirts=o,this.minimumHeight=r,this.maximumHeight=s,this.rectangle=a,this.boundingSphere3D=c,this.occludeePointInScaledSpace=d,this.orientedBoundingBox=h,this.encoding=p,this.westIndicesSouthToNorth=A,this.southIndicesEastToWest=f,this.eastIndicesNorthToSouth=b,this.northIndicesWestToEast=C,this._transform=new F,this._lastPickSceneMode=void 0,this._terrainPicker=new gX(t,n,p)}bX.prototype.getTransform=function(e,t){return this._lastPickSceneMode===e?this._transform:(this._terrainPicker.needsRebuild=!0,!l(e)||e===se.SCENE3D?fpt(this,this._transform):Cpt(this,t,this._transform))};function fpt(e,t){let n=e.encoding.exaggeration,i=e.encoding.exaggerationRelativeHeight,o=Eo.getHeight(e.minimumHeight,n,i),r=Eo.getHeight(e.maximumHeight,n,i),s=nn.fromRectangle(e.rectangle,o,r,ie.default,e.orientedBoundingBox);return nn.computeTransformation(s,t),F.getScale(t,Yq).z<=L.EPSILON16&&(Yq.z=1,F.setScale(t,Yq,t)),t}var ppt=new m,Apt=new m,gpt=new Ae,bpt=new Ae,ypt=new m,xpt=new m,Yq=new m;function Cpt(e,t,n){let i=e.encoding.exaggeration,o=e.encoding.exaggerationRelativeHeight,r=Eo.getHeight(e.minimumHeight,i,o),s=Eo.getHeight(e.maximumHeight,i,o),a=t.project(Ae.fromRadians(e.rectangle.west,e.rectangle.south,0,gpt),ppt),c=t.project(Ae.fromRadians(e.rectangle.east,e.rectangle.north,0,bpt),Apt),d=s-r,u=m.fromElements(c.x-a.x,c.y-a.y,d>0?d:1,ypt),h=m.fromElements(a.x+u.x*.5,a.y+u.y*.5,r+u.z*.5,xpt);return F.fromTranslation(h,n),F.setScale(n,u,n),F.multiply(bt.SWIZZLE_3D_TO_2D_MATRIX,n,n),n}bX.prototype.pick=function(e,t,n,i){let o=this._terrainPicker.rayIntersect(e,this.getTransform(n,i),t,n,i);return this._lastPickSceneMode=n,o};bX.prototype.updateExaggeration=function(e,t){this._terrainPicker._vertices=this.vertices,this._terrainPicker.needsRebuild=!0,this._lastPickSceneMode=void 0};bX.prototype.updateSceneMode=function(e){this._terrainPicker.needsRebuild=!0,this._lastPickSceneMode=void 0};var hc=bX;function fb(e){e=e??Q.EMPTY_OBJECT,this._buffer=e.buffer,this._width=e.width,this._height=e.height,this._childTileMask=e.childTileMask??15,this._encoding=e.encoding??eh.NONE;let t=EZ.DEFAULT_STRUCTURE,n=e.structure;l(n)?n!==t&&(n.heightScale=n.heightScale??t.heightScale,n.heightOffset=n.heightOffset??t.heightOffset,n.elementsPerHeight=n.elementsPerHeight??t.elementsPerHeight,n.stride=n.stride??t.stride,n.elementMultiplier=n.elementMultiplier??t.elementMultiplier,n.isBigEndian=n.isBigEndian??t.isBigEndian):n=t,this._structure=n,this._createdByUpsampling=e.createdByUpsampling??!1,this._waterMask=e.waterMask,this._skirtHeight=void 0,this._bufferType=this._encoding===eh.LERC?Float32Array:this._buffer.constructor,this._mesh=void 0}Object.defineProperties(fb.prototype,{credits:{get:function(){}},waterMask:{get:function(){return this._waterMask}},childTileMask:{get:function(){return this._childTileMask}}});var xEe="createVerticesFromHeightmap",Tpt=new $n(xEe),Ept=new $n(xEe,Yd.maximumAsynchronousTasks);fb.prototype.createMesh=function(e){e=e??Q.EMPTY_OBJECT;let t=e.tilingScheme,n=e.x,i=e.y,o=e.level,r=e.exaggeration??1,s=e.exaggerationRelativeHeight??0,a=e.throttle??!0,c=t.ellipsoid,d=t.tileXYToNativeRectangle(n,i,o),u=t.tileXYToRectangle(n,i,o),h=c.cartographicToCartesian(de.center(u)),p=this._structure,f=Qo.getEstimatedLevelZeroGeometricErrorForAHeightmap(c,this._width,t.getNumberOfXTilesAtLevel(0))/(1<<o);this._skirtHeight=Math.min(f*4,1e3);let C=(a?Ept:Tpt).scheduleTask({heightmap:this._buffer,structure:p,includeWebMercatorT:!0,width:this._width,height:this._height,nativeRectangle:d,rectangle:u,relativeToCenter:h,ellipsoid:c,skirtHeight:this._skirtHeight,isGeographic:t.projection instanceof ki,exaggeration:r,exaggerationRelativeHeight:s,encoding:this._encoding});if(!l(C))return;let T=this;return Promise.resolve(C).then(function(E){let S;T._skirtHeight>0?S=Qo.getRegularGridAndSkirtIndicesAndEdgeIndices(E.gridWidth,E.gridHeight):S=Qo.getRegularGridIndicesAndEdgeIndices(E.gridWidth,E.gridHeight);let I=E.gridWidth*E.gridHeight;return T._mesh=new hc(h,new Float32Array(E.vertices),S.indices,S.indexCountWithoutSkirts,I,E.minimumHeight,E.maximumHeight,u,ue.clone(E.boundingSphere3D),m.clone(E.occludeePointInScaledSpace),E.numberOfAttributes,nn.clone(E.orientedBoundingBox),yr.clone(E.encoding),S.westIndicesSouthToNorth,S.southIndicesEastToWest,S.eastIndicesNorthToSouth,S.northIndicesWestToEast),T._buffer=void 0,T._mesh})};fb.prototype._createMeshSync=function(e){let t=e.tilingScheme,n=e.x,i=e.y,o=e.level,r=e.exaggeration??1,s=e.exaggerationRelativeHeight??0,a=t.ellipsoid,c=t.tileXYToNativeRectangle(n,i,o),d=t.tileXYToRectangle(n,i,o),u=a.cartographicToCartesian(de.center(d)),h=this._structure,A=Qo.getEstimatedLevelZeroGeometricErrorForAHeightmap(a,this._width,t.getNumberOfXTilesAtLevel(0))/(1<<o);this._skirtHeight=Math.min(A*4,1e3);let f=EZ.computeVertices({heightmap:this._buffer,structure:h,includeWebMercatorT:!0,width:this._width,height:this._height,nativeRectangle:c,rectangle:d,relativeToCenter:u,ellipsoid:a,skirtHeight:this._skirtHeight,isGeographic:t.projection instanceof ki,exaggeration:r,exaggerationRelativeHeight:s});this._buffer=void 0;let b;this._skirtHeight>0?b=Qo.getRegularGridAndSkirtIndicesAndEdgeIndices(this._width,this._height):b=Qo.getRegularGridIndicesAndEdgeIndices(this._width,this._height);let C=f.gridWidth*f.gridHeight;return this._mesh=new hc(u,f.vertices,b.indices,b.indexCountWithoutSkirts,C,f.minimumHeight,f.maximumHeight,d,f.boundingSphere3D,f.occludeePointInScaledSpace,f.encoding.stride,f.orientedBoundingBox,f.encoding,b.westIndicesSouthToNorth,b.southIndicesEastToWest,b.eastIndicesNorthToSouth,b.northIndicesWestToEast),this._mesh};fb.prototype.interpolateHeight=function(e,t,n){let i=this._width,o=this._height,r=this._structure,s=r.stride,a=r.elementsPerHeight,c=r.elementMultiplier,d=r.isBigEndian,u=r.heightOffset,h=r.heightScale,p=l(this._mesh),A=this._encoding===eh.LERC;if(!p&&A)return;let b;if(p){let C=this._mesh.vertices,T=this._mesh.encoding;b=CEe(C,T,u,h,e,i,o,t,n)}else b=Spt(this._buffer,a,c,s,d,e,i,o,t,n),b=b*h+u;return b};fb.prototype.upsample=function(e,t,n,i,o,r,s){let a=this._mesh;if(!l(a))return;let c=this._width,d=this._height,u=this._structure,h=u.stride,p=new this._bufferType(c*d*h),A=a.vertices,f=a.encoding,b=e.tileXYToRectangle(t,n,i),C=e.tileXYToRectangle(o,r,s),T=u.heightOffset,E=u.heightScale,S=u.elementsPerHeight,I=u.elementMultiplier,R=u.isBigEndian,V=Math.pow(I,S-1);for(let W=0;W<d;++W){let B=L.lerp(C.north,C.south,W/(d-1));for(let N=0;N<c;++N){let P=L.lerp(C.west,C.east,N/(c-1)),g=CEe(A,f,T,E,b,c,d,P,B);g=g<u.lowestEncodedHeight?u.lowestEncodedHeight:g,g=g>u.highestEncodedHeight?u.highestEncodedHeight:g,_pt(p,S,I,V,h,R,W*c+N,g)}}return Promise.resolve(new fb({buffer:p,width:c,height:d,childTileMask:0,structure:this._structure,createdByUpsampling:!0}))};fb.prototype.isChildAvailable=function(e,t,n,i){let o=2;return n!==e*2&&++o,i!==t*2&&(o-=2),(this._childTileMask&1<<o)!==0};fb.prototype.wasCreatedByUpsampling=function(){return this._createdByUpsampling};function Spt(e,t,n,i,o,r,s,a,c,d){let u=(c-r.west)*(s-1)/(r.east-r.west),h=(d-r.south)*(a-1)/(r.north-r.south),p=u|0,A=p+1;A>=s&&(A=s-1,p=s-2);let f=h|0,b=f+1;b>=a&&(b=a-1,f=a-2);let C=u-p,T=h-f;f=a-1-f,b=a-1-b;let E=NQ(e,t,n,i,o,f*s+p),S=NQ(e,t,n,i,o,f*s+A),I=NQ(e,t,n,i,o,b*s+p),R=NQ(e,t,n,i,o,b*s+A);return TEe(C,T,E,S,I,R)}function CEe(e,t,n,i,o,r,s,a,c){let d=(a-o.west)*(r-1)/(o.east-o.west),u=(c-o.south)*(s-1)/(o.north-o.south),h=d|0,p=h+1;p>=r&&(p=r-1,h=r-2);let A=u|0,f=A+1;f>=s&&(f=s-1,A=s-2);let b=d-h,C=u-A;A=s-1-A,f=s-1-f;let T=(t.decodeHeight(e,A*r+h)-n)/i,E=(t.decodeHeight(e,A*r+p)-n)/i,S=(t.decodeHeight(e,f*r+h)-n)/i,I=(t.decodeHeight(e,f*r+p)-n)/i;return TEe(b,C,T,E,S,I)}function TEe(e,t,n,i,o,r){return t<e?n+e*(i-n)+t*(r-i):n+e*(r-o)+t*(o-n)}function NQ(e,t,n,i,o,r){r*=i;let s=0,a;if(o)for(a=0;a<t;++a)s=s*n+e[r+a];else for(a=t-1;a>=0;--a)s=s*n+e[r+a];return s}function _pt(e,t,n,i,o,r,s,a){s*=o;let c;if(r)for(c=0;c<t-1;++c)e[s+c]=a/i|0,a-=e[s+c]*i,i/=n;else for(c=t-1;c>0;--c)e[s+c]=a/i|0,a-=e[s+c]*i,i/=n;e[s+c]=a}var Fc=fb;var eki=y(x(),1);function IZ(e,t){this._tilingScheme=e,this._maximumLevel=t,this._rootNodes=[]}var zT=new de;function Ipt(e,t,n,i){let o=i.length;for(let r=0;r<o;++r){let s=i[r];if(s.x===t&&s.y===n&&s.level===e)return!0}return!1}IZ.prototype.addAvailableTileRange=function(e,t,n,i,o){let r=this._tilingScheme,s=this._rootNodes;if(e===0)for(let p=n;p<=o;++p)for(let A=t;A<=i;++A)Ipt(e,A,p,s)||s.push(new SZ(r,void 0,0,A,p));r.tileXYToRectangle(t,n,e,zT);let a=zT.west,c=zT.north;r.tileXYToRectangle(i,o,e,zT);let d=zT.east,u=zT.south,h=new Lpt(e,a,u,d,c);for(let p=0;p<s.length;++p){let A=s[p];Mq(A.extent,h)&&Wpt(this._maximumLevel,A,h)}};IZ.prototype.computeMaximumLevelAtPosition=function(e){let t;for(let n=0;n<this._rootNodes.length;++n){let i=this._rootNodes[n];if(_Z(i.extent,e)){t=i;break}}return l(t)?yX(void 0,t,e):-1};var Zpt=[],Rpt=[],Vpt=new de,Gpt=new de;IZ.prototype.computeBestAvailableLevelOverRectangle=function(e){let t=Zpt;t.length=0,e.east<e.west?(t.push(de.fromRadians(-Math.PI,e.south,e.east,e.north,Vpt)),t.push(de.fromRadians(e.west,e.south,Math.PI,e.north,Gpt))):t.push(e);let n=Rpt;n.length=0;let i;for(i=0;i<this._rootNodes.length;++i)xX(n,this._rootNodes[i],t);for(i=n.length-1;i>=0;--i)if(l(n[i])&&n[i].length===0)return i;return 0};var EEe=new Ae;IZ.prototype.isTileAvailable=function(e,t,n){let i=this._tilingScheme.tileXYToRectangle(t,n,e,zT);return de.center(i,EEe),this.computeMaximumLevelAtPosition(EEe)>=e};IZ.prototype.computeChildMaskForTile=function(e,t,n){let i=e+1;if(i>=this._maximumLevel)return 0;let o=0;return o|=this.isTileAvailable(i,2*t,2*n+1)?1:0,o|=this.isTileAvailable(i,2*t+1,2*n+1)?2:0,o|=this.isTileAvailable(i,2*t,2*n)?4:0,o|=this.isTileAvailable(i,2*t+1,2*n)?8:0,o};function SZ(e,t,n,i,o){this.tilingScheme=e,this.parent=t,this.level=n,this.x=i,this.y=o,this.extent=e.tileXYToRectangle(i,o,n),this.rectangles=[],this._sw=void 0,this._se=void 0,this._nw=void 0,this._ne=void 0}Object.defineProperties(SZ.prototype,{nw:{get:function(){return this._nw||(this._nw=new SZ(this.tilingScheme,this,this.level+1,this.x*2,this.y*2)),this._nw}},ne:{get:function(){return this._ne||(this._ne=new SZ(this.tilingScheme,this,this.level+1,this.x*2+1,this.y*2)),this._ne}},sw:{get:function(){return this._sw||(this._sw=new SZ(this.tilingScheme,this,this.level+1,this.x*2,this.y*2+1)),this._sw}},se:{get:function(){return this._se||(this._se=new SZ(this.tilingScheme,this,this.level+1,this.x*2+1,this.y*2+1)),this._se}}});function Lpt(e,t,n,i,o){this.level=e,this.west=t,this.south=n,this.east=i,this.north=o}function Mq(e,t){let n=Math.max(e.west,t.west),i=Math.max(e.south,t.south),o=Math.min(e.east,t.east),r=Math.min(e.north,t.north);return i<r&&n<o}function Wpt(e,t,n){for(;t.level<e;)if(PQ(t.nw.extent,n))t=t.nw;else if(PQ(t.ne.extent,n))t=t.ne;else if(PQ(t.sw.extent,n))t=t.sw;else if(PQ(t.se.extent,n))t=t.se;else break;if(t.rectangles.length===0||t.rectangles[t.rectangles.length-1].level<=n.level)t.rectangles.push(n);else{let i=yo(t.rectangles,n.level,Fpt);i<0&&(i=~i),t.rectangles.splice(i,0,n)}}function Fpt(e,t){return e.level-t}function PQ(e,t){return t.west>=e.west&&t.east<=e.east&&t.south>=e.south&&t.north<=e.north}function _Z(e,t){return t.longitude>=e.west&&t.longitude<=e.east&&t.latitude>=e.south&&t.latitude<=e.north}function yX(e,t,n){let i=0,o=!1;for(;!o;){let r=t._nw&&_Z(t._nw.extent,n),s=t._ne&&_Z(t._ne.extent,n),a=t._sw&&_Z(t._sw.extent,n),c=t._se&&_Z(t._se.extent,n);if(r+s+a+c>1){r&&(i=Math.max(i,yX(t,t._nw,n))),s&&(i=Math.max(i,yX(t,t._ne,n))),a&&(i=Math.max(i,yX(t,t._sw,n))),c&&(i=Math.max(i,yX(t,t._se,n)));break}else r?t=t._nw:s?t=t._ne:a?t=t._sw:c?t=t._se:o=!0}for(;t!==e;){let r=t.rectangles;for(let s=r.length-1;s>=0&&r[s].level>i;--s){let a=r[s];_Z(a,n)&&(i=a.level)}t=t.parent}return i}function xX(e,t,n){if(!t)return;let i,o=!1;for(i=0;i<n.length;++i)o=o||Mq(t.extent,n[i]);if(!o)return;let r=t.rectangles;for(i=0;i<r.length;++i){let s=r[i];e[s.level]||(e[s.level]=n),e[s.level]=Bpt(e[s.level],s)}xX(e,t._nw,n),xX(e,t._ne,n),xX(e,t._sw,n),xX(e,t._se,n)}function Bpt(e,t){let n=[];for(let i=0;i<e.length;++i){let o=e[i];Mq(o,t)?(o.west<t.west&&n.push(new de(o.west,o.south,t.west,o.north)),o.east>t.east&&n.push(new de(t.east,o.south,o.east,o.north)),o.south<t.south&&n.push(new de(Math.max(t.west,o.west),o.south,Math.min(t.east,o.east),t.south)),o.north>t.north&&n.push(new de(Math.max(t.west,o.west),t.north,Math.min(t.east,o.east),o.north))):n.push(o)}return n}var Wf=IZ;var wpt=15;function SEe(e){this.ellipsoid=e.ellipsoid??ie.default,this.credit=void 0,this.tilingScheme=void 0,this.height=void 0,this.width=void 0,this.encoding=void 0,this.lodCount=void 0,this.hasAvailability=!1,this.tilesAvailable=void 0,this.tilesAvailabilityLoaded=void 0,this.levelZeroMaximumGeometricError=void 0,this.terrainDataStructure=void 0}SEe.prototype.build=function(e){e._credit=this.credit,e._tilingScheme=this.tilingScheme,e._height=this.height,e._width=this.width,e._encoding=this.encoding,e._lodCount=this.lodCount,e._hasAvailability=this.hasAvailability,e._tilesAvailable=this.tilesAvailable,e._tilesAvailabilityLoaded=this.tilesAvailabilityLoaded,e._levelZeroMaximumGeometricError=this.levelZeroMaximumGeometricError,e._terrainDataStructure=this.terrainDataStructure};function Npt(e,t){let n=t.copyrightText;l(n)&&(e.credit=new Et(n));let i=t.spatialReference,o=i.latestWkid??i.wkid,r=t.extent,s={ellipsoid:e.ellipsoid};if(o===4326)s.rectangle=de.fromDegrees(r.xmin,r.ymin,r.xmax,r.ymax),e.tilingScheme=new zi(s);else if(o===3857){let d=Math.PI*e.ellipsoid.maximumRadius;t.extent.xmax>d&&(t.extent.xmax=d),t.extent.ymax>d&&(t.extent.ymax=d),t.extent.xmin<-d&&(t.extent.xmin=-d),t.extent.ymin<-d&&(t.extent.ymin=-d),s.rectangleSouthwestInMeters=new M(r.xmin,r.ymin),s.rectangleNortheastInMeters=new M(r.xmax,r.ymax),e.tilingScheme=new ws(s)}else throw new me("Invalid spatial reference");let a=t.tileInfo;if(!l(a))throw new me("tileInfo is required");e.width=a.rows+1,e.height=a.cols+1,e.encoding=a.format==="LERC"?eh.LERC:eh.NONE,e.lodCount=a.lods.length-1,(e.hasAvailability=t.capabilities.indexOf("Tilemap")!==-1)&&(e.tilesAvailable=new Wf(e.tilingScheme,e.lodCount),e.tilesAvailable.addAvailableTileRange(0,0,0,e.tilingScheme.getNumberOfXTilesAtLevel(0),e.tilingScheme.getNumberOfYTilesAtLevel(0)),e.tilesAvailabilityLoaded=new Wf(e.tilingScheme,e.lodCount)),e.levelZeroMaximumGeometricError=Qo.getEstimatedLevelZeroGeometricErrorForAHeightmap(e.tilingScheme.ellipsoid,e.width,e.tilingScheme.getNumberOfXTilesAtLevel(0)),t.bandCount>1&&console.log("ArcGISTiledElevationTerrainProvider: Terrain data has more than 1 band. Using the first one."),l(t.minValues)&&l(t.maxValues)?e.terrainDataStructure={elementMultiplier:1,lowestEncodedHeight:t.minValues[0],highestEncodedHeight:t.maxValues[0]}:e.terrainDataStructure={elementMultiplier:1}}async function Ppt(e,t,n){try{let i=await t.fetchJson();Npt(e,i)}catch(i){let o=`An error occurred while accessing ${t}.`;throw qo.reportError(void 0,n,l(n)?n._errorEvent:void 0,o),i}}function Fy(e){e=e??Q.EMPTY_OBJECT,this._resource=void 0,this._credit=void 0,this._tilingScheme=void 0,this._levelZeroMaximumGeometricError=void 0,this._maxLevel=void 0,this._terrainDataStructure=void 0,this._width=void 0,this._height=void 0,this._encoding=void 0,this._lodCount=void 0,this._hasAvailability=!1,this._tilesAvailable=void 0,this._tilesAvailabilityLoaded=void 0,this._availableCache={},this._errorEvent=new xe}Object.defineProperties(Fy.prototype,{errorEvent:{get:function(){return this._errorEvent}},credit:{get:function(){return this._credit}},tilingScheme:{get:function(){return this._tilingScheme}},hasWaterMask:{get:function(){return!1}},hasVertexNormals:{get:function(){return!1}},availability:{get:function(){return this._tilesAvailable}}});Fy.fromUrl=async function(e,t){t=t??Q.EMPTY_OBJECT,e=await Promise.resolve(e);let n=Le.createIfNeeded(e);n.appendForwardSlash(),l(t.token)&&(n=n.getDerivedResource({queryParameters:{token:t.token}}));let i=n.getDerivedResource({queryParameters:{f:"pjson"}}),o=new SEe(t);await Ppt(o,i);let r=new Fy(t);return o.build(r),r._resource=n,r};Fy.prototype.requestTileGeometry=function(e,t,n,i){let o=this._resource.getDerivedResource({url:`tile/${n}/${t}/${e}`,request:i}),r=this._hasAvailability,s=Promise.resolve(!0),a;if(r&&!l(vq(this,n+1,e*2,t*2))){let h=_Ee(this,n+1,e*2,t*2);s=h.promise,a=h.request}let c=o.fetchArrayBuffer();if(!l(c)||!l(s))return;let d=this,u=this._tilesAvailable;return Promise.all([c,s]).then(function(h){return new Fc({buffer:h[0],width:d._width,height:d._height,childTileMask:r?u.computeChildMaskForTile(n,e,t):wpt,structure:d._terrainDataStructure,encoding:d._encoding})}).catch(async function(h){if(l(a)&&a.state===Ai.CANCELLED){i.cancel();try{await i.deferred?.promise}catch{}return i.state=Ai.CANCELLED,Promise.reject(h)}return Promise.reject(h)})};function vq(e,t,n,i){if(!e._hasAvailability)return;let o=e._tilesAvailabilityLoaded,r=e._tilesAvailable;if(t>e._lodCount)return!1;if(r.isTileAvailable(t,n,i))return!0;if(o.isTileAvailable(t,n,i))return!1}Fy.prototype.getLevelMaximumGeometricError=function(e){return this._levelZeroMaximumGeometricError/(1<<e)};Fy.prototype.getTileDataAvailable=function(e,t,n){if(!this._hasAvailability)return;let i=vq(this,n,e,t);if(l(i))return i;_Ee(this,n,e,t)};Fy.prototype.loadTileDataAvailability=function(e,t,n){};function Xpt(e,t,n,i){let o=t-1,r=n-1,s=i[e.y*t+e.x],a=[],c={startX:e.x,startY:e.y,endX:0,endY:0},d=new M(e.x+1,e.y+1),u=!1,h=!1;for(;!(u&&h);){let p=d.x,A=h?d.y+1:d.y;if(!u){for(let f=e.y;f<A;++f)if(i[f*t+d.x]!==s){u=!0;break}u?(a.push(new M(d.x,e.y)),--d.x,--p,c.endX=d.x):d.x===o?(c.endX=d.x,u=!0):++d.x}if(!h){let f=d.y*t;for(let b=e.x;b<=p;++b)if(i[f+b]!==s){h=!0;break}h?(a.push(new M(e.x,d.y)),--d.y,c.endY=d.y):d.y===r?(c.endY=d.y,h=!0):++d.y}}return{endingIndices:a,range:c,value:s}}function Ypt(e,t,n,i,o){let r=[];if(o.every(function(c){return c===o[0]}))return o[0]===1&&r.push({startX:e,startY:t,endX:e+n-1,endY:t+i-1}),r;let a=[new M(0,0)];for(;a.length>0;){let c=a.pop(),d=Xpt(c,n,i,o);if(d.value===1){let h=d.range;h.startX+=e,h.endX+=e,h.startY+=t,h.endY+=t,r.push(h)}let u=d.endingIndices;u.length>0&&(a=a.concat(u))}return r}function _Ee(e,t,n,i){if(!e._hasAvailability)return{};let o=Math.floor(n/128)*128,r=Math.floor(i/128)*128,s=Math.min(1<<t,128),a=`tilemap/${t}/${r}/${o}/${s}/${s}`,c=e._availableCache;if(l(c[a]))return c[a];let d=new Tr({throttle:!1,throttleByServer:!0,type:Ds.TERRAIN}),h=e._resource.getDerivedResource({url:a,request:d}).fetchJson();return l(h)?(h=h.then(function(p){let A=Ypt(o,r,s,s,p.data);e._tilesAvailabilityLoaded.addAvailableTileRange(t,o,r,o+s,r+s);let f=e._tilesAvailable;for(let b=0;b<A.length;++b){let C=A[b];f.addAvailableTileRange(t,C.startX,C.startY,C.endX,C.endY)}return vq(e,t,n,i)}),c[a]={promise:h,request:d},h=h.finally(function(p){return delete c[a],p}),{promise:h,request:d}):{}}var Uq=Fy;var Rki=y(x(),1);var IEe="https://dev.virtualearth.net/REST/v1/Locations";function Dq(e){e=e??Q.EMPTY_OBJECT;let t=e.key;this._key=t;let n={key:t};l(e.culture)&&(n.culture=e.culture),this._resource=new Le({url:IEe,queryParameters:n}),this._credit=new Et('<img src="http://dev.virtualearth.net/Branding/logo_powered_by.png"/>',!1)}Object.defineProperties(Dq.prototype,{url:{get:function(){return IEe}},key:{get:function(){return this._key}},credit:{get:function(){return this._credit}}});Dq.prototype.geocode=async function(e){return this._resource.getDerivedResource({queryParameters:{query:e}}).fetchJsonp("jsonp").then(function(n){return n.resourceSets.length===0?[]:n.resourceSets[0].resources.map(function(o){let r=o.bbox,s=r[0],a=r[1],c=r[2],d=r[3];return{displayName:o.name,destination:de.fromDegrees(a,s,d,c)}})})};var kq=Dq;var Lki=y(x(),1);function Qq(){}Object.defineProperties(Qq.prototype,{credit:{get:function(){}}});Qq.prototype.geocode=function(e){let t=e.match(/[^\s,\n]+/g);if(t.length===2||t.length===3){let n=+t[0],i=+t[1],o=t.length===3?+t[2]:300;if(isNaN(n)&&isNaN(i)){let r=/^(\d+.?\d*)([nsew])/i;for(let s=0;s<t.length;++s){let a=t[s].match(r);r.test(t[s])&&a.length===3&&(/^[ns]/i.test(a[2])?i=/^[n]/i.test(a[2])?+a[1]:-a[1]:/^[ew]/i.test(a[2])&&(n=/^[e]/i.test(a[2])?+a[1]:-a[1]))}}if(!isNaN(n)&&!isNaN(i)&&!isNaN(o)){let r={displayName:e,destination:m.fromDegrees(n,i,o)};return Promise.resolve([r])}}return Promise.resolve([])};var Oq=Qq;var Mki=y(x(),1);var Mpt=new re,ZEe=new m,ZZ=new m;function vpt(e){let t=e.points,n=e.times;if(t.length<3){let i=n[0],o=1/(n[1]-i),r=t[0],s=t[1];return function(a,c){l(c)||(c=new m);let d=(a-i)*o;return m.lerp(r,s,d,c)}}return function(i,o){l(o)||(o=new m);let r=e._lastTimeIndex=e.findTimeInterval(i,e._lastTimeIndex),s=(i-n[r])/(n[r+1]-n[r]),a=Mpt;a.z=s,a.y=s*s,a.x=a.y*s,a.w=1;let c,d,u,h,p;return r===0?(c=t[0],d=t[1],u=e.firstTangent,h=m.subtract(t[2],c,ZEe),m.multiplyByScalar(h,.5,h),p=F.multiplyByVector(L0.hermiteCoefficientMatrix,a,a)):r===t.length-2?(c=t[r],d=t[r+1],h=e.lastTangent,u=m.subtract(d,t[r-1],ZEe),m.multiplyByScalar(u,.5,u),p=F.multiplyByVector(L0.hermiteCoefficientMatrix,a,a)):(c=t[r-1],d=t[r],u=t[r+1],h=t[r+2],p=F.multiplyByVector(By.catmullRomCoefficientMatrix,a,a)),o=m.multiplyByScalar(c,p.x,o),m.multiplyByScalar(d,p.y,ZZ),m.add(o,ZZ,o),m.multiplyByScalar(u,p.z,ZZ),m.add(o,ZZ,o),m.multiplyByScalar(h,p.w,ZZ),m.add(o,ZZ,o)}}var Upt=new m,Dpt=new m;function By(e){e=e??Q.EMPTY_OBJECT;let t=e.points,n=e.times,i=e.firstTangent,o=e.lastTangent;if(t.length>2&&(l(i)||(i=Upt,m.multiplyByScalar(t[1],2,i),m.subtract(i,t[2],i),m.subtract(i,t[0],i),m.multiplyByScalar(i,.5,i)),!l(o))){let r=t.length-1;o=Dpt,m.multiplyByScalar(t[r-1],2,o),m.subtract(t[r],o,o),m.add(o,t[r-2],o),m.multiplyByScalar(o,.5,o)}this._times=n,this._points=t,this._firstTangent=m.clone(i),this._lastTangent=m.clone(o),this._evaluateFunction=vpt(this),this._lastTimeIndex=0}Object.defineProperties(By.prototype,{times:{get:function(){return this._times}},points:{get:function(){return this._points}},firstTangent:{get:function(){return this._firstTangent}},lastTangent:{get:function(){return this._lastTangent}}});By.catmullRomCoefficientMatrix=new F(-.5,1,-.5,0,1.5,-2.5,0,1,-1.5,2,.5,0,.5,-.5,0,0);By.prototype.findTimeInterval=So.prototype.findTimeInterval;By.prototype.wrapTime=So.prototype.wrapTime;By.prototype.clampTime=So.prototype.clampTime;By.prototype.evaluate=function(e,t){return this._evaluateFunction(e,t)};var zq=By;var W9i=y(x(),1);var d9i=y(x(),1);var Hq={},kpt={positions:void 0,normals:void 0,indices:void 0,edgeIndicesWest:void 0,edgeIndicesSouth:void 0,edgeIndicesEast:void 0,edgeIndicesNorth:void 0},Qpt=new Ae,Opt=new m,zpt=new F,Hpt=new F,Jpt=new F,Kpt=new m,jpt=new m,qpt=new m,$pt=new m,eAt=new Ae,tAt=new M,CX=new m,nAt=new M,iAt=new m,oAt=new m,XQ=function(e,t){return e-t};Hq.createMesh=async function(e){e=e??Q.EMPTY_OBJECT;let{exaggeration:t=1,exaggerationRelativeHeight:n=0,hasVertexNormals:i,hasWebMercatorT:o,gltf:r,minimumHeight:s,maximumHeight:a,skirtHeight:c}=e,u=t!==1,h=ue.clone(e.boundingSphere,new ue),p=nn.clone(e.orientedBoundingBox,new nn),A=m.clone(e.horizonOcclusionPoint,new m),f=ie.clone(e.ellipsoid,new ie),b=de.clone(e.rectangle,new de);await(r.extensionsRequired!==void 0&&r.extensionsRequired.indexOf("EXT_meshopt_compression")!==-1?p0.ready:Promise.resolve(void 0));let E=b.west,S=b.south,I=b.north,R=b.width,V=b.height,W=de.center(b,Qpt);W.height=.5*(s+a);let B=Ae.toCartesian(W,f,Opt),N=bt.eastNorthUpToFixedFrame(B,f,zpt),P=F.inverseTransformation(N,Hpt),g=F.unpack(r.nodes[0].matrix,0,Jpt);g=F.multiply(ro.Y_UP_TO_Z_UP,g,g);let _=PAt(r,i,kpt),Z=Qo.getSkirtVertexCount(_.edgeIndicesWest,_.edgeIndicesSouth,_.edgeIndicesEast,_.edgeIndicesNorth),G=_.positions,w=_.normals,X=_.indices,k=G.length/3,v=k+Z,D=X.length,Y=Qo.getSkirtIndexCountWithFilledCorners(Z),O=v<=65535?Uint16Array:Uint32Array,J=new O(D+Y);J.set(X);let te=new O(_.edgeIndicesWest),z=new O(_.edgeIndicesSouth),j=new O(_.edgeIndicesEast),ee=new O(_.edgeIndicesNorth),ge=new O(te).sort(),ye=new O(z).sort(),ae=new O(j).sort(),Ce=new O(ee).sort(),Te=pi.geodeticLatitudeToMercatorAngle(S),Ne=1/(pi.geodeticLatitudeToMercatorAngle(I)-Te),Pe=m.fromElements(Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY,Kpt),Xe=m.fromElements(Number.NEGATIVE_INFINITY,Number.NEGATIVE_INFINITY,Number.NEGATIVE_INFINITY,jpt),st=new yr(h.center,void 0,void 0,void 0,void 0,i,o,u,t,n),Ye=st.stride,xt=new Float32Array(v*Ye),at=0;for(let lt=0;lt<k;lt++){let ht=m.unpack(G,lt*3,qpt),Rt=F.multiplyByPoint(g,ht,$pt),_e=Ae.fromCartesian(Rt,f,eAt),{longitude:Re,latitude:jt,height:At}=_e,kt=(Re-E)/R,On=(jt-S)/V;kt=L.clamp(kt,0,1),On=L.clamp(On,0,1),yo(ge,lt,XQ)>=0?kt=0:yo(ae,lt,XQ)>=0&&(kt=1),yo(ye,lt,XQ)>=0?On=0:yo(Ce,lt,XQ)>=0&&(On=1);let $e=M.fromElements(kt,On,tAt),uo;if(i){let Yi=m.unpack(w,lt*3,CX);Yi=F.multiplyByPointAsVector(g,Yi,CX),Yi=m.normalize(Yi,CX),uo=on.octEncode(Yi,nAt)}let Qt;o&&(Qt=(pi.geodeticLatitudeToMercatorAngle(jt)-Te)*Ne);let Bo;u&&(Bo=f.geodeticSurfaceNormal(Rt,iAt)),at=st.encode(xt,at,Rt,$e,At,uo,Qt,Bo);let no=F.multiplyByPoint(P,Rt,oAt);Pe=m.minimumByComponent(no,Pe,Pe),Xe=m.maximumByComponent(no,Xe,Xe)}let Je=new hc(m.clone(st.center,new m),xt,J,D,k,s,a,b,ue.clone(h,new ue),m.clone(A,new m),Ye,nn.clone(p,new nn),st,te,z,j,ee);return BEe(Je,b,f,Pe,Xe,N,P,c),Promise.resolve(Je)};var rAt=new M,sAt=new M,aAt=new Array(6),cAt=new M,lAt=new M,dAt=new M,uAt=new m,mAt=new m,hAt=new m,fAt=new Ae,pAt=new m,AAt=new Ae,gAt=new Ae,REe=new m,bAt=new m,yAt=new m,xAt=new m,CAt=new m,TAt=new m,EAt=new m,SAt=new m,_At=new F,IAt=new F,VEe=new M,ZAt=new M,RAt=new m,VAt=new ue,GAt=new nn,LAt=new ou,GEe=new m,LEe=new M,WAt=new M,WEe=new m,FAt=new m;function BAt(e){let t=e.meshes[0].primitives[0],n=e.accessors[t.attributes.POSITION],i=e.bufferViews[n.bufferView],o=n.count,r=i.extensions?i.extensions.EXT_meshopt_compression:void 0;if(r===void 0){let A=e.buffers[i.buffer].extras._pipeline.source;return new Float32Array(A.buffer,A.byteOffset+(i.byteOffset??0)+(n.byteOffset??0),o*3)}let s=e.buffers[r.buffer].extras._pipeline.source,a=new Uint8Array(s.buffer,s.byteOffset+(r.byteOffset??0)+(n.byteOffset??0),r.byteLength),c=r.byteStride,d=c===4?Uint8Array:Uint16Array,u=new d(o*4);p0.decodeVertexBuffer(new Uint8Array(u.buffer),o,c,a);let h=(1<<u.BYTES_PER_ELEMENT*8)-1,p=new Float32Array(o*3);for(let A=0;A<o;A++)p[A*3+0]=u[A*4+0]/h,p[A*3+1]=u[A*4+1]/h,p[A*3+2]=u[A*4+2]/h;return p}function wAt(e){let t=e.meshes[0].primitives[0],n=e.accessors[t.attributes.NORMAL],i=e.bufferViews[n.bufferView],o=n.count,r=i.extensions?i.extensions.EXT_meshopt_compression:void 0;if(r===void 0){let h=e.buffers[i.buffer].extras._pipeline.source;return new Float32Array(h.buffer,h.byteOffset+(i.byteOffset??0)+(n.byteOffset??0),o*3)}let s=e.buffers[r.buffer].extras._pipeline.source,a=new Uint8Array(s.buffer,s.byteOffset+(r.byteOffset??0)+(n.byteOffset??0),r.byteLength),c=r.byteStride,d=new Int8Array(o*c);p0.decodeVertexBuffer(new Uint8Array(d.buffer),o,c,a);let u=new Float32Array(o*3);for(let h=0;h<o;h++){let p=Math.max(d[h*4+0]/127,-1),A=Math.max(d[h*4+1]/127,-1),f=1-(Math.abs(p)+Math.abs(A));if(f<0){let C=p,T=A;p=(1-Math.abs(T))*L.signNotZero(C),A=(1-Math.abs(C))*L.signNotZero(T)}let b=CX;b.x=p,b.y=A,b.z=f,b=m.normalize(b,CX),u[h*3+0]=b.x,u[h*3+1]=b.y,u[h*3+2]=b.z}return u}function NAt(e){let t=e.meshes[0].primitives[0],n=e.accessors[t.indices],i=e.bufferViews[n.bufferView],o=n.count,r=n.componentType===H.UNSIGNED_SHORT?Uint16Array:Uint32Array,s=i.extensions?i.extensions.EXT_meshopt_compression:void 0;if(s===void 0){let u=e.buffers[i.buffer].extras._pipeline.source;return new r(u.buffer,u.byteOffset+(i.byteOffset??0)+(n.byteOffset??0),o)}let a=e.buffers[s.buffer].extras._pipeline.source,c=new Uint8Array(a.buffer,a.byteOffset+(s.byteOffset??0)+(n.byteOffset??0),s.byteLength),d=new r(o);return p0.decodeIndexBuffer(new Uint8Array(d.buffer),o,s.byteStride,c),d}function YQ(e,t){let n=e.meshes[0].primitives[0],i=e.accessors[n.extensions.CESIUM_tile_edges[t]],o=e.bufferViews[i.bufferView],r=i.count,s=i.componentType===H.UNSIGNED_SHORT?Uint16Array:Uint32Array,a=o.extensions?o.extensions.EXT_meshopt_compression:void 0;if(a===void 0){let p=e.buffers[o.buffer].extras._pipeline.source;return new s(p.buffer,p.byteOffset+(o.byteOffset??0)+(i.byteOffset??0),r)}let c=e.buffers[a.buffer].extras._pipeline.source,d=new Uint8Array(c.buffer,c.byteOffset+(a.byteOffset??0)+(i.byteOffset??0),a.byteLength),u=new s(r),h=a.byteStride;return p0.decodeIndexSequence(new Uint8Array(u.buffer),r,h,d),u}function PAt(e,t,n){return n.positions=BAt(e),n.normals=t?wAt(e):void 0,n.indices=NAt(e),n.edgeIndicesWest=YQ(e,"left"),n.edgeIndicesSouth=YQ(e,"bottom"),n.edgeIndicesEast=YQ(e,"right"),n.edgeIndicesNorth=YQ(e,"top"),n}Hq.upsampleMesh=function(e){e=e??Q.EMPTY_OBJECT;let{isEastChild:t,isNorthChild:n,parentMinimumHeight:i,parentMaximumHeight:o,skirtHeight:r}=e,s=e.parentIndexCountWithoutSkirts,a=e.parentIndices,c=e.parentVertexCountWithoutSkirts,d=e.parentVertices,u=yr.clone(e.parentEncoding,new yr),h=u.hasVertexNormals,p=u.hasWebMercatorT,A=u.exaggeration,f=u.exaggerationRelativeHeight,C=A!==1,T=de.clone(e.rectangle,new de),E=ie.clone(e.ellipsoid),S=[],I=[],R=[],V=[],W=[],B=[],N=[],P=[];KAt(t,n,s,a,c,d,u,V,W,B,N,P,S,R,I);let g=de.center(T,fAt);g.height=.5*(i+o);let _=Ae.toCartesian(g,E,pAt),Z=S.length,G=new yr(_,void 0,void 0,void 0,void 0,h,p,C,A,f),w=G.stride,X=Qo.getSkirtVertexCount(W,B,N,P),k=Z+X,v=V.length,D=Qo.getSkirtIndexCountWithFilledCorners(X),Y=v+D,O=k<=65535?Uint16Array:Uint32Array,J=new O(Y);J.set(V);let te=new O(W),z=new O(B),j=new O(N),ee=new O(P),ge=new Float32Array(k*w),ye=0,ae=bt.eastNorthUpToFixedFrame(_,E,_At),Ce=F.inverseTransformation(ae,IAt),Te=T.west,Fe=T.east,Ne=T.south,Pe=T.north,Xe=pi.geodeticLatitudeToMercatorAngle(Ne),Ye=1/(pi.geodeticLatitudeToMercatorAngle(Pe)-Xe),xt=Number.POSITIVE_INFINITY,at=Number.NEGATIVE_INFINITY,Je=m.fromElements(Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY,EAt),lt=m.fromElements(Number.NEGATIVE_INFINITY,Number.NEGATIVE_INFINITY,Number.NEGATIVE_INFINITY,SAt);for(let At=0;At<Z;At++){let kt=S[At],On=a[kt*3+0],$e=a[kt*3+1],uo=a[kt*3+2],Qt=ZAt;Qt.x=I[At*2+0],Qt.y=I[At*2+1];let Bo=Qt.x,no=Qt.y,Yi=R[At*2+0],Oo=R[At*2+1],ai=1-Yi-Oo,jn=u.decodeHeight(d,On),io=u.decodeHeight(d,$e),wo=u.decodeHeight(d,uo),bo=jn*Yi+io*Oo+wo*ai;xt=Math.min(bo,xt),at=Math.max(bo,at);let nr=L.lerp(Te,Fe,Bo),zo=L.lerp(Ne,Pe,no),Sn=Ae.fromRadians(nr,zo,bo,gAt),Ri=Ae.toCartesian(Sn,E,bAt),Pn=F.multiplyByPoint(Ce,Ri,xAt);Je=m.minimumByComponent(Pn,Je,Je),lt=m.maximumByComponent(Pn,lt,lt);let Ho;if(h){let Di=u.decodeNormal(d,On,uAt),Ro=u.decodeNormal(d,$e,mAt),Ca=u.decodeNormal(d,uo,hAt),Ss=m.fromElements(Di.x*Yi+Ro.x*Oo+Ca.x*ai,Di.y*Yi+Ro.y*Oo+Ca.y*ai,Di.z*Yi+Ro.z*Oo+Ca.z*ai,GEe);Ss=m.normalize(Ss,GEe),Ho=on.octEncode(Ss,WAt)}let Jo;p&&(Jo=(pi.geodeticLatitudeToMercatorAngle(zo)-Xe)*Ye);let oa;C&&(oa=E.geodeticSurfaceNormal(Ri,FAt)),ye=G.encode(ge,ye,Ri,Qt,bo,Ho,Jo,oa)}let ht=nn.fromRectangle(T,xt,at,E,GAt),Rt=ue.fromVertices(ge,G.center,w,VAt),Re=new hf(E).computeHorizonCullingPointFromVerticesPossiblyUnderEllipsoid(G.center,ge,w,G.center,xt,RAt),jt=new hc(m.clone(G.center,new m),ge,J,v,Z,xt,at,T,ue.clone(Rt),m.clone(Re),w,nn.clone(ht),G,te,z,j,ee);return BEe(jt,T,E,Je,lt,ae,Ce,r),jt};function BEe(e,t,n,i,o,r,s,a){let{encoding:c}=e,d=c.stride,u=e.vertices,{hasVertexNormals:h,hasWebMercatorT:p,exaggeration:A,exaggerationRelativeHeight:f}=c,C=A!==1,T=e.vertexCountWithoutSkirts,E=T*d,S=u.length/d,I=S-T,R=e.indices,V=e.indexCountWithoutSkirts,W=e.westIndicesSouthToNorth,B=e.southIndicesEastToWest,N=e.eastIndicesNorthToSouth,P=e.northIndicesWestToEast;Qo.addSkirtIndicesWithFilledCorners(W,B,N,P,T,R,V);let g=0,_=g+W.length,Z=_+B.length,G=Z+N.length,w=[W,B,N,P],X=[g,_,Z,G],k=[-1,0,1,0],v=[0,-1,0,1],D=m.clone(i,CAt),Y=m.clone(o,TAt),O=e.maximumHeight,J=e.minimumHeight-a;for(let j=0;j<I;j++){let ee=0;for(ee=0;ee<3&&!(j<X[ee+1]);ee++);let ge=w[ee][j-X[ee]],ye=c.decodeTextureCoordinates(u,ge,VEe),ae=1e-4,Ce=ye.x+k[ee]*ae,Te=ye.y+v[ee]*ae,Fe=L.lerp(t.west,t.east,Ce),Ne=L.clamp(L.lerp(t.south,t.north,Te),-L.PI_OVER_TWO,+L.PI_OVER_TWO),Xe=c.decodeHeight(u,ge)-a,st=Ae.fromRadians(Fe,Ne,Xe,AAt),Ye=Ae.toCartesian(st,n,REe),xt;h&&(xt=c.getOctEncodedNormal(u,ge,LEe));let at;p&&(at=c.decodeWebMercatorT(u,ge));let Je;C&&(Je=n.geodeticSurfaceNormal(Ye,WEe)),E=c.encode(u,E,Ye,ye,Xe,xt,at,Je);let lt=F.multiplyByPoint(s,Ye,yAt);m.minimumByComponent(lt,D,D),m.maximumByComponent(lt,Y,Y)}let te=ou.fromCorners(D,Y,LAt),z=new yr(c.center,te,J,O,r,c.hasVertexNormals,c.hasWebMercatorT,C,A,f);if(c.quantization!==z.quantization){let j=z,ee=j.stride,ge=new Float32Array(S*ee),ye=0;for(let ae=0;ae<S;ae++)ye=j.encode(ge,ye,c.decodePosition(u,ae,REe),c.decodeTextureCoordinates(u,ae,VEe),c.decodeHeight(u,ae),c.hasVertexNormals?c.getOctEncodedNormal(u,ae,LEe):void 0,c.hasWebMercatorT?c.decodeWebMercatorT(u,ae):void 0,c.hasGeodeticSurfaceNormals?c.decodeGeodeticSurfaceNormal(u,ae,WEe):void 0);e.vertices=ge,e.stride=ee,e.encoding=j}return e}var Jq=0,XAt=1,Kq=2,jq=3,YAt=4,MAt=new m,vAt=[new m,new m,new m,new m,new m,new m],UAt=[new M,new M,new M,new M,new M,new M],DAt=[new m,new m,new m,new m,new m,new m],kAt=[new M,new M,new M,new M,new M,new M];function FEe(e,t,n,i){switch(n){case Jq:return L.sign(i.x-e.x);case Kq:return L.sign(t.x-i.x);case jq:return L.sign(i.y-e.y);default:return L.sign(t.y-i.y)}}function QAt(e,t,n,i,o,r){let s,a,c;switch(n){case Jq:s=(e.x-i.x)/(o.x-i.x),a=e.x,c=i.y+(o.y-i.y)*s;break;case Kq:s=(t.x-i.x)/(o.x-i.x),a=t.x,c=i.y+(o.y-i.y)*s;break;case jq:s=(e.y-i.y)/(o.y-i.y),a=i.x+(o.x-i.x)*s,c=e.y;break;default:s=(t.y-i.y)/(o.y-i.y),a=i.x+(o.x-i.x)*s,c=t.y;break}return m.fromElements(a,c,s,r)}var OAt={length:0,coordinates:[new M,new M,new M,new M,new M,new M],barycentricCoordinates:[new m,new m,new m,new m,new m,new m]};function zAt(e,t,n,i,o,r,s,a){let c=0,d=UAt,u=vAt,h=3,p=kAt;M.clone(o,p[0]),M.clone(r,p[1]),M.clone(s,p[2]);let A=DAt;m.fromElements(1,0,0,A[0]),m.fromElements(0,1,0,A[1]),m.fromElements(0,0,1,A[2]);for(let f=0;f<t;f++){let b=(e+f)%YAt,C=d,T=u;d=p,u=A,c=h,p=C,A=T,h=0;let E=c-1,S=d[E],I=u[E],R=FEe(n,i,b,S);for(let V=0;V<c;V++){let W=d[V],B=u[V],N=FEe(n,i,b,W);if(R*N===-1){let P=QAt(n,i,b,S,W,MAt),{x:g,y:_,z:Z}=P,G=1-Z,w=I.x*G+B.x*Z,X=I.y*G+B.y*Z,k=I.z*G+B.z*Z;M.fromElements(g,_,p[h]),m.fromElements(w,X,k,A[h]),h++}N>=0&&(M.clone(W,p[h]),m.clone(B,A[h]),h++),E=V,S=W,I=B,R=N}if(h===0)break}a.length=h;for(let f=0;f<h;f++)M.clone(p[f],a.coordinates[f]),m.clone(A[f],a.barycentricCoordinates[f]);return a}function HAt(e,t,n,i,o,r,s,a){return zAt(e?t?jq:Jq:t?Kq:XAt,2,n,i,o,r,s,a)}var JAt=[[],[0],[1],[0,1],[2],[0,2],[1,2],[0,1,2]];function KAt(e,t,n,i,o,r,s,a,c,d,u,h,p,A,f){let b={},C=e?.5:0,T=e?1:.5,E=t?.5:0,S=t?1:.5,I=rAt;I.x=C,I.y=E;let R=sAt;R.x=T,R.y=S;let V=0;for(let W=0;W<n;W+=3){let B=i[W+0],N=i[W+1],P=i[W+2],g=s.decodeTextureCoordinates(r,B,cAt),_=s.decodeTextureCoordinates(r,N,lAt),Z=s.decodeTextureCoordinates(r,P,dAt),G=HAt(e,t,I,R,g,_,Z,OAt),w=G.length;if(w<3)continue;let X=aAt;for(let Y=0;Y<w;Y++){let O=G.barycentricCoordinates[Y],J=O.x,te=O.y,z=O.z,j=Math.ceil(J)|Math.ceil(te)<<1|Math.ceil(z)<<2,ee=JAt[j],ge,ye=!1;if(ee.length===1){let ae=ee[0],Te=i[W+ae];ge=b[Te],ge===void 0&&(ye=!0,ge=V++,b[Te]=ge)}else if(ee.length===2){let ae=ee[0],Ce=ee[1],Te=i[W+ae],Fe=i[W+Ce],Ne=G.barycentricCoordinates[(Y+w-1)%w],Pe=Math.ceil(Ne.x)|Math.ceil(Ne.y)<<1|Math.ceil(Ne.z)<<2,Xe=j===Pe,st=Math.min(Te,Fe),Ye=Math.max(Te,Fe),xt=o+2*(st*o+Ye),at=xt+0,Je=xt+1,lt=b[at],ht=b[Je],Rt=!Xe==(lt===void 0||ht===void 0);if(ge=Rt?lt:ht,ge===void 0){ye=!0,ge=V++;let _e=Rt?at:Je;b[_e]=ge}}else ye=!0,ge=V++;if(X[Y]=ge,ye){let ae=W/3;p.push(ae);let Ce=G.coordinates[Y],Te=(Ce.x-C)/(T-C),Fe=(Ce.y-E)/(S-E);f.push(Te,Fe),A.push(J,te),Te===0?c.push(ge):Te===1&&u.push(ge),Fe===0?d.push(ge):Fe===1&&h.push(ge)}}let k=X[0],v=X[1],D=X[2];a.push(k,v,D);for(let Y=3;Y<w;Y++)v=D,D=X[Y],a.push(k,v,D)}c.sort(function(W,B){return f[W*2+1]-f[B*2+1]}),d.sort(function(W,B){return f[B*2+0]-f[W*2+0]}),u.sort(function(W,B){return f[B*2+1]-f[W*2+1]}),h.sort(function(W,B){return f[W*2+0]-f[B*2+0]})}var RZ=Hq;var p9i=y(x(),1);var MQ={};MQ.clipTriangleAtAxisAlignedThreshold=function(e,t,n,i,o,r){l(r)?r.length=0:r=[];let s,a,c;t?(s=n<e,a=i<e,c=o<e):(s=n>e,a=i>e,c=o>e);let d=s+a+c,u,h,p,A,f,b;return d===1?s?(u=(e-n)/(i-n),h=(e-n)/(o-n),r.push(1),r.push(2),h!==1&&(r.push(-1),r.push(0),r.push(2),r.push(h)),u!==1&&(r.push(-1),r.push(0),r.push(1),r.push(u))):a?(p=(e-i)/(o-i),A=(e-i)/(n-i),r.push(2),r.push(0),A!==1&&(r.push(-1),r.push(1),r.push(0),r.push(A)),p!==1&&(r.push(-1),r.push(1),r.push(2),r.push(p))):c&&(f=(e-o)/(n-o),b=(e-o)/(i-o),r.push(0),r.push(1),b!==1&&(r.push(-1),r.push(2),r.push(1),r.push(b)),f!==1&&(r.push(-1),r.push(2),r.push(0),r.push(f))):d===2?!s&&n!==e?(A=(e-i)/(n-i),f=(e-o)/(n-o),r.push(0),r.push(-1),r.push(1),r.push(0),r.push(A),r.push(-1),r.push(2),r.push(0),r.push(f)):!a&&i!==e?(b=(e-o)/(i-o),u=(e-n)/(i-n),r.push(1),r.push(-1),r.push(2),r.push(1),r.push(b),r.push(-1),r.push(0),r.push(1),r.push(u)):!c&&o!==e&&(h=(e-n)/(o-n),p=(e-i)/(o-i),r.push(2),r.push(-1),r.push(0),r.push(2),r.push(h),r.push(-1),r.push(1),r.push(2),r.push(p)):d!==3&&(r.push(0),r.push(1),r.push(2)),r};MQ.computeBarycentricCoordinates=function(e,t,n,i,o,r,s,a,c){let d=n-s,u=s-o,h=r-a,p=i-a,A=1/(h*d+u*p),f=t-a,b=e-s,C=(h*b+u*f)*A,T=(-p*b+d*f)*A,E=1-C-T;return l(c)?(c.x=C,c.y=T,c.z=E,c):new m(C,T,E)};MQ.computeLineSegmentLineSegmentIntersection=function(e,t,n,i,o,r,s,a,c){let d=(s-o)*(t-r)-(a-r)*(e-o),u=(n-e)*(t-r)-(i-t)*(e-o),h=(a-r)*(n-e)-(s-o)*(i-t);if(h===0)return;let p=d/h,A=u/h;if(p>=0&&p<=1&&A>=0&&A<=1)return l(c)||(c=new M),c.x=e+p*(n-e),c.y=t+p*(i-t),c};var Ff=MQ;function Ab(e){e=e??Q.EMPTY_OBJECT,this._minimumHeight=e.minimumHeight,this._maximumHeight=e.maximumHeight,this._skirtHeight=e.skirtHeight,this._boundingSphere=ue.clone(e.boundingSphere,new ue),this._orientedBoundingBox=nn.clone(e.orientedBoundingBox,new nn),this._horizonOcclusionPoint=m.clone(e.horizonOcclusionPoint,new m),this._hasVertexNormals=e.requestVertexNormals??!1,this._hasWaterMask=e.requestWaterMask??!1,this._hasWebMercatorT=!0,this._credits=e.credits,this._childTileMask=e.childTileMask??15,this._gltf=e.gltf,this._mesh=void 0,this._waterMask=e.waterMask}Object.defineProperties(Ab.prototype,{credits:{get:function(){return this._credits}},waterMask:{get:function(){return this._waterMask}}});Ab.prototype.interpolateHeight=function(e,t,n){let i=this._mesh;return i===void 0?void 0:NEe(i,e,t,n)};Ab.prototype.isChildAvailable=function(e,t,n,i){let o=2;return n!==e*2&&++o,i!==t*2&&(o-=2),(this._childTileMask&1<<o)!==0};var wEe="createVerticesFromCesium3DTilesTerrain",jAt=new $n(wEe),qAt=new $n(wEe,Yd.maximumAsynchronousTasks);Ab.prototype.createMesh=function(e){e=e??Q.EMPTY_OBJECT;let n=e.throttle??!0?qAt:jAt,i=e.tilingScheme,o=i.ellipsoid,r=e.x,s=e.y,a=e.level,c=i.tileXYToRectangle(r,s,a,new de),d=this._gltf,u=n.scheduleTask({ellipsoid:o,rectangle:c,hasVertexNormals:this._hasVertexNormals,hasWaterMask:this._hasWaterMask,hasWebMercatorT:this._hasWebMercatorT,gltf:d,minimumHeight:this._minimumHeight,maximumHeight:this._maximumHeight,boundingSphere:this._boundingSphere,orientedBoundingBox:this._orientedBoundingBox,horizonOcclusionPoint:this._horizonOcclusionPoint,skirtHeight:this._skirtHeight,exaggeration:e.exaggeration,exaggerationRelativeHeight:e.exaggerationRelativeHeight});if(!l(u))return;let h=this;return Promise.resolve(u).then(function(p){let A=p,f=yr.clone(A.encoding,new yr),b=new Float32Array(A.verticesBuffer),C=b.length/f.stride,T=A.vertexCountWithoutSkirts,E=C<=65535?Uint16Array:Uint32Array,S=new E(A.indicesBuffer),I=new E(A.westIndicesBuffer),R=new E(A.eastIndicesBuffer),V=new E(A.southIndicesBuffer),W=new E(A.northIndicesBuffer),B=A.indexCountWithoutSkirts,N=h._minimumHeight,P=h._maximumHeight,g=m.clone(f.center,new m),_=ue.clone(h._boundingSphere,new ue),Z=m.clone(h._horizonOcclusionPoint,new m),G=nn.clone(h._orientedBoundingBox,new nn),w=new hc(g,b,S,B,T,N,P,c,_,Z,f.stride,G,f,I,V,R,W);return h._mesh=w,Promise.resolve(w)})};Ab.prototype._createMeshSync=function(e){e=e??Q.EMPTY_OBJECT;let t=e.tilingScheme,n=t.ellipsoid,i=e.x,o=e.y,r=e.level,s=t.tileXYToRectangle(i,o,r,new de),a=RZ.createMesh({ellipsoid:n,rectangle:s,hasVertexNormals:this._hasVertexNormals,hasWebMercatorT:this._hasWebMercatorT,gltf:this._gltf,minimumHeight:this._minimumHeight,maximumHeight:this._maximumHeight,boundingSphere:this._boundingSphere,orientedBoundingBox:this._orientedBoundingBox,horizonOcclusionPoint:this._horizonOcclusionPoint,skirtHeight:this._skirtHeight,exaggeration:e.exaggeration,exaggerationRelativeHeight:e.exaggerationRelativeHeight}),c=this;return Promise.resolve(a).then(function(d){return c._mesh=d,Promise.resolve(d)})};Ab.prototype.upsample=function(e,t,n,i,o,r,s){let a=this._mesh;return a===void 0?void 0:vQ(!1,a,this._skirtHeight,this._credits,e,t,n,i,o,r,s)};Ab.prototype._upsampleSync=function(e,t,n,i,o,r,s){let a=this._mesh;return a===void 0?void 0:vQ(!0,a,this._skirtHeight,this._credits,e,t,n,i,o,r,s)};Ab.prototype.wasCreatedByUpsampling=function(){return!1};function pb(e){e=e??Q.EMPTY_OBJECT,this._mesh=e.terrainMesh,this._skirtHeight=e.skirtHeight,this._credits=e.credits}pb.prototype.createMesh=function(e){return e=e??Q.EMPTY_OBJECT,Promise.resolve(this._mesh)};pb.prototype.upsample=function(e,t,n,i,o,r,s){return vQ(!1,this._mesh,this._skirtHeight,this._credits,e,t,n,i,o,r,s)};pb.prototype._upsampleSync=function(e,t,n,i,o,r,s){return vQ(!0,this._mesh,this._skirtHeight,this._credits,e,t,n,i,o,r,s)};pb.prototype.interpolateHeight=function(e,t,n){let i=this._mesh;return NEe(i,e,t,n)};pb.prototype.wasCreatedByUpsampling=function(){return!0};pb.prototype.isChildAvailable=function(e,t,n,i){return!1};Object.defineProperties(pb.prototype,{credits:{get:function(){return this._credits}},waterMask:{get:function(){}}});var $At=new $n("upsampleVerticesFromCesium3DTilesTerrain",Yd.maximumAsynchronousTasks);function vQ(e,t,n,i,o,r,s,a,c,d,u){if(u-a>1)throw new fe("Upsampling through more than one level at a time is not currently supported.");let p=n*.5,A=r*2!==c,f=s*2===d,b=o.tileXYToRectangle(c,d,u,new de),C=o.ellipsoid,T={isEastChild:A,isNorthChild:f,rectangle:b,ellipsoid:C,skirtHeight:p,parentVertices:t.vertices,parentIndices:t.indices,parentVertexCountWithoutSkirts:t.vertexCountWithoutSkirts,parentIndexCountWithoutSkirts:t.indexCountWithoutSkirts,parentMinimumHeight:t.minimumHeight,parentMaximumHeight:t.maximumHeight,parentEncoding:t.encoding};if(e){let S=RZ.upsampleMesh(T),I=new pb({terrainMesh:S,skirtHeight:p,credits:i});return Promise.resolve(I)}let E=$At.scheduleTask(T);if(E!==void 0)return E.then(function(S){let I=yr.clone(S.encoding,new yr),R=I.stride,V=new Float32Array(S.verticesBuffer),W=V.length/R,B=S.vertexCountWithoutSkirts,N=W<=65535?Uint16Array:Uint32Array,P=new N(S.indicesBuffer),g=new N(S.westIndicesBuffer),_=new N(S.eastIndicesBuffer),Z=new N(S.southIndicesBuffer),G=new N(S.northIndicesBuffer),w=S.indexCountWithoutSkirts,X=S.minimumHeight,k=S.maximumHeight,v=m.clone(I.center,new m),D=ue.clone(S.boundingSphere,new ue),Y=m.clone(S.horizonOcclusionPoint,new m),O=nn.clone(S.orientedBoundingBox,new nn),J=new hc(v,V,P,w,B,X,k,b,D,Y,R,O,I,g,Z,_,G),te=new pb({terrainMesh:J,skirtHeight:p,credits:i});return Promise.resolve(te)})}var egt=new M,tgt=new M,ngt=new M,igt=new m;function NEe(e,t,n,i){let o=L.clamp((n-t.west)/t.width,0,1),r=L.clamp((i-t.south)/t.height,0,1),{vertices:s,encoding:a,indices:c}=e;for(let d=0;d<e.indexCountWithoutSkirts;d+=3){let u=c[d],h=c[d+1],p=c[d+2],A=a.decodeTextureCoordinates(s,u,egt),f=a.decodeTextureCoordinates(s,h,tgt),b=a.decodeTextureCoordinates(s,p,ngt),C=Math.min(A.x,f.x,b.x),T=Math.max(A.x,f.x,b.x),E=Math.min(A.y,f.y,b.y),S=Math.max(A.y,f.y,b.y);if(o>=C&&o<=T&&r>=E&&r<=S){let I=Ff.computeBarycentricCoordinates(o,r,A.x,A.y,f.x,f.y,b.x,b.y,igt);if(I.x>=0&&I.y>=0&&I.z>=0){let R=a.decodeHeight(s,u),V=a.decodeHeight(s,h),W=a.decodeHeight(s,p);return I.x*R+I.y*V+I.z*W}}}return 0}var TX=Ab;var d5i=y(x(),1);var N9i=y(x(),1);function Bf(e){this._comparator=e.comparator,this._maximumLength=e.maximumLength,this._array=l(e.maximumLength)?new Array(e.maximumLength):[],this._length=0}Object.defineProperties(Bf.prototype,{length:{get:function(){return this._length}},maximumLength:{get:function(){return this._maximumLength},set:function(e){if(l(e)){for(;this._length>e;)this.removeMinimum();this._array.length=e}this._maximumLength=e}},internalArray:{get:function(){return this._array}},comparator:{get:function(){return this._comparator}}});Bf.prototype.clone=function(){let e=this._maximumLength,t=this._comparator,n=this._array,i=this._length,o=new Bf({comparator:t,maximumLength:e});o._length=i;for(let r=0;r<i;r++)o._array[r]=n[r];return o};Bf.prototype.reset=function(){this._length=0;let e=this._maximumLength;if(l(e))for(let t=0;t<e;t++)this._array[t]=void 0;else this._array.length=0};Bf.prototype.resort=function(){let e=this._length;for(let t=0;t<e;t++)PEe(this,t)};Bf.prototype.insert=function(e){let t,n=this._maximumLength;if(l(n)){if(n===0)return;if(this._length===n){let o=this._array[0];if(this._comparator(e,o)<=0)return e;t=this.removeMinimum()}}let i=this._length;return this._array[i]=e,this._length++,PEe(this,i),t};Bf.prototype.removeMinimum=function(){let e=this._length;if(e===0)return;this._length--;let t=this._array[0];return e>=2&&(this._array[0]=this._array[e-1],XEe(this,0)),this._array[e-1]=void 0,t};Bf.prototype.removeMaximum=function(){let e=this._length;if(e===0)return;this._length--;let t;if(e<=2)t=this._array[e-1];else{let n=qq(this,1,2)?1:2;t=this._array[n],this._array[n]=this._array[e-1],e>=4&&XEe(this,n)}return this._array[e-1]=void 0,t};Bf.prototype.getMinimum=function(){if(this._length!==0)return this._array[0]};Bf.prototype.getMaximum=function(){let e=this._length;if(e!==0)return e<=2?this._array[e-1]:this._array[qq(this,1,2)?1:2]};function UQ(e,t,n){let i=e._array,o=i[t];i[t]=i[n],i[n]=o}function EX(e,t,n){return e._comparator(e._array[t],e._array[n])<0}function qq(e,t,n){return e._comparator(e._array[t],e._array[n])>0}function PEe(e,t){if(t===0)return;let n=Math.floor(L.log2(t+1))%2===0,i=Math.floor((t-1)/2),o=EX(e,t,i);for(o!==n&&(UQ(e,t,i),t=i);t>=3;){let r=Math.floor((t-3)/4);if(EX(e,t,r)!==o)break;UQ(e,t,r),t=r}}function XEe(e,t){let n=e._length,i=Math.floor(L.log2(t+1))%2===0,o;for(;(o=2*t+1)<n;){let r=o,s=o+1;if(s<n){EX(e,s,r)===i&&(r=s);let a=2*o+1,c=Math.max(Math.min(n-a,4),0);for(let d=0;d<c;d++){let u=a+d;EX(e,u,r)===i&&(r=u)}}if(EX(e,r,t)===i&&(UQ(e,r,t),r!==o&&r!==s)){let a=Math.floor((r-1)/2);qq(e,r,a)===i&&UQ(e,r,a)}t=r}}var gb=Bf;function jp(e){e=e??Q.EMPTY_OBJECT;let t=e.credit;typeof t=="string"&&(t=new Et(t)),this._credit=t,this._tileCredits=void 0,this._errorEvent=new xe,this._ellipsoid=e.ellipsoid??ie.WGS84,this._tilingScheme=new zi({ellipsoid:this._ellipsoid}),this._subtreeCache=new HT({provider:this}),this._tileset0=void 0,this._tileset1=void 0,this._resource=void 0,this._requestVertexNormals=e.requestVertexNormals??!1,this._requestWaterMask=e.requestWaterMask??!1}jp.fromUrl=async function(e,t){t=t??Q.EMPTY_OBJECT,e=await Promise.resolve(e);let n=Le.createIfNeeded(e),i;try{i=await n.fetchJson()}catch(u){throw new me("Could not load tileset JSON",u)}let o=new jp(t);o._tileCredits=n.credits,o._resource=n;let r=i.root.children,s=r[0],a=r[1],c=i.schema,d=Xl.fromJson(c);return o._tileset0=new Rp(n,s,d),o._tileset1=new Rp(n,a,d),o};jp.fromIonAssetId=async function(e,t){let n=await cs.fromAssetId(e);return jp.fromUrl(n,t)};var ogt=new Array(3);jp.prototype.requestTileGeometry=async function(e,t,n,i){let o=MEe(n,e),r=o===0?this._tileset0:this._tileset1,s=vEe(r,n,e,t),a=s.getSubtreeCoordinates(),c=this._subtreeCache,d=c.find(o,a),u=this._requestWaterMask,h=this,p;if(d===void 0){let E=r.subtreeUriTemplate.getDerivedResource({templateValues:a.getTemplateValues()});p=r.baseResource.getDerivedResource({url:E.url}).fetchArrayBuffer().then(async function(I){if(d=c.find(o,a),d===void 0){let R=new Uint8Array(I);d=await tg.fromSubtreeJson(h._resource,void 0,R,r,a),c.addSubtree(o,d)}return d})}else p=Promise.resolve(d);let A=r.contentUriTemplates[0].getDerivedResource({templateValues:s.getTemplateValues()}),f=r.baseResource.getDerivedResource({url:A.url}),b=f.fetchArrayBuffer();if(b===void 0)return;let C=b.then(E=>pC(new Uint8Array(E))),T=ogt;T[0]=p,T[1]=C,T[2]=u?C.then(E=>rgt(E,f)):void 0;try{let E=await Promise.all(T),S=E[0],I=E[1],R=E[2],V=S.getTileMetadataView(s),W=V.getPropertyBySemantic(Em.TILE_MINIMUM_HEIGHT),B=V.getPropertyBySemantic(Em.TILE_MAXIMUM_HEIGHT),N=V.getPropertyBySemantic(Em.TILE_BOUNDING_SPHERE),P=ue.unpack(N,0,new ue),g=V.getPropertyBySemantic(Em.TILE_HORIZON_OCCLUSION_POINT),Z=h._tilingScheme.tileXYToRectangle(e,t,n,new de),G=h._ellipsoid,w=nn.fromRectangle(Z,W,B,G,new nn),X=h.getLevelMaximumGeometricError(n)*5,k=DQ(r,S,s,0,0),v=DQ(r,S,s,1,0),D=DQ(r,S,s,0,1),Y=DQ(r,S,s,1,1),O=(k?1:0)|(v?2:0)|(D?4:0)|(Y?8:0),J=new TX({gltf:I,minimumHeight:W,maximumHeight:B,boundingSphere:P,orientedBoundingBox:w,horizonOcclusionPoint:g,skirtHeight:X,requestVertexNormals:h._requestVertexNormals,childTileMask:O,credits:h._tileCredits,waterMask:R});return Promise.resolve(J)}catch(E){console.log(`Could not load subtree: ${o} ${a.level} ${a.x} ${a.y}: ${E}`),console.log(`Could not load tile: ${o} ${s.level} ${s.x} ${s.y}: ${E}`);return}};jp.prototype.getTileDataAvailable=function(e,t,n){let i=this._subtreeCache,o=MEe(n,e),r=o===0?this._tileset0:this._tileset1,s=vEe(r,n,e,t),a=s.getSubtreeCoordinates(),c=i.find(o,a);if(c!==void 0)return c.tileIsAvailableAtCoordinates(s);if(a.isImplicitTilesetRoot())return s.isSubtreeRoot()?!0:void 0;let d=a.getParentSubtreeCoordinates(),u=i.find(o,d);if(u!==void 0)return u.childSubtreeIsAvailableAtCoordinates(a)?s.isSubtreeRoot()?!0:void 0:!1};function MEe(e,t){let n=1<<e;return t/n|0}function vEe(e,t,n,i){let o=1<<t,r=t,s=n%o,a=o-i-1,{subdivisionScheme:c,subtreeLevels:d}=e;return new Vp({subdivisionScheme:c,subtreeLevels:d,level:r,x:s,y:a})}async function rgt(e,t){let n=e.extensions?.EXT_structural_metadata;if(!l(n)||!l(n.propertyTextures))return;let i=new x0({schema:n.schema});await i.load();let o=i.schema,r,s;if(l(o.classes)){for(let A in o.classes)if(o.classes.hasOwnProperty(A)&&(r=o.classes[A],s=r.propertiesBySemantic.WATERMASK,l(s)))break}if(!l(s))return;let a=n.propertyTextures.find(A=>A.class===r.id);if(!l(a))throw new fe(`Expected a propertyTexture with a class ${r.id}`);let c=a.properties[s.id],d=e.textures[c.index],u=e.images[d.source]?.bufferView,h=Fi.getBufferViewLoader({gltf:e,bufferViewId:u,gltfResource:t,baseResource:t});return await h.load(),await $A({uint8Array:new Uint8Array(h.typedArray),format:"image/png",flipY:!1,skipColorSpaceConversion:!0})}function DQ(e,t,n,i,o){let r=n.isBottomOfSubtree(),a=$q(e,1,i,o),c=n.getDescendantCoordinates(a);return r?t.childSubtreeIsAvailableAtCoordinates(c):t.tileIsAvailableAtCoordinates(c)}function $q(e,t,n,i){let{subdivisionScheme:o,subtreeLevels:r}=e;return new Vp({subdivisionScheme:o,subtreeLevels:r,level:t,x:n,y:i})}jp.prototype.loadTileDataAvailability=function(e,t,n){};jp.prototype.getLevelMaximumGeometricError=function(e){let t=this._ellipsoid;return Qo.getEstimatedLevelZeroGeometricErrorForAHeightmap(t,64,2)/(1<<e)};Object.defineProperties(jp.prototype,{errorEvent:{get:function(){return this._errorEvent}},credit:{get:function(){return this._credit}},tilingScheme:{get:function(){return this._tilingScheme}},hasWaterMask:{get:function(){return this._requestWaterMask}},hasVertexNormals:{get:function(){return this._requestVertexNormals}},availability:{get:function(){return this._subtreeCache}}});function sgt(e,t,n){this.rootId=e,this.subtree=t,this.stamp=n}function HT(e){this._maximumSubtreeCount=e.maximumSubtreeCount??0,this._subtreeRequestCounter=0,this._queue=new gb({comparator:HT.comparator}),this._provider=e.provider}HT.comparator=function(e,t){let n=e.subtree.implicitCoordinates,i=t.subtree.implicitCoordinates;return n.isAncestor(i)?1:i.isAncestor(n)?-1:e.stamp-t.stamp};HT.prototype.addSubtree=function(e,t){let n=new sgt(e,t,this._subtreeRequestCounter);this._queue.insert(n),this._subtreeRequestCounter++;let i=t.implicitCoordinates;if(i.level>0){let o=i.getParentSubtreeCoordinates(),r=this.find(e,o)}if(this._maximumSubtreeCount>0)for(;this._queue.length>this._maximumSubtreeCount&&this._queue.getMinimum()!==n;)this._queue.removeMinimum()};HT.prototype.find=function(e,t){let n=this._queue,i=n.internalArray,{level:o,x:r,y:s}=t;for(let a=0;a<n.length;a++){let c=i[a],d=c.rootId,u=c.subtree.implicitCoordinates;if(d===e&&u.level===o&&u.x===r&&u.y===s)return c.subtree}};HT.prototype._computeMaximumImplicitTileCoordinatesAtPosition=function(e){let{longitude:t,latitude:n}=e,i=this._provider,o=t<0?0:1,r=o===0?i._tileset0:i._tileset1,s=r.subtreeLevels,a=$q(r,0,0,0),c=this.find(o,a);if(c===void 0)return;let d=c.implicitCoordinates,u=d.x,h=d.y,p=d.level,A=-L.PI,f=+L.PI,b=L.lerp(A,f,o/2),C=L.lerp(A,f,(o+1)/2),T=-L.PI*.5,E=+L.PI*.5,S=0,I=0,R=!0;for(;R;){let W=1/(1<<p),B=(C-b)*W,N=b+u*B,P=(E-T)*W,g=T+h*P;S=(t-N)/B,I=(n-g)/P;let _=YEe(r,d,S,I,s);if(c.childSubtreeIsAvailableAtCoordinates(_)){let Z=this.find(o,_);if(Z!==void 0)c=Z,d=c.implicitCoordinates,u=d.x,h=d.y,p=d.level;else return _}else R=!1}let V;for(let W=0;W<s;W++){let B=YEe(r,d,S,I,W);if(c.tileIsAvailableAtCoordinates(B))V=B;else break}return V};function YEe(e,t,n,i,o){let r=1<<o,s=L.clamp(n*r|0,0,r-1),a=L.clamp(i*r|0,0,r-1),c=$q(e,o,s,a);return t.getDescendantCoordinates(c)}HT.prototype.computeMaximumLevelAtPosition=function(e){let t=this._computeMaximumImplicitTileCoordinatesAtPosition(e);return t===void 0?0:t.level};var e$=jp;var K5i=y(x(),1);var _5i=y(x(),1);function wy(e){e=e??Q.EMPTY_OBJECT,this._quantizedVertices=e.quantizedVertices,this._encodedNormals=e.encodedNormals,this._indices=e.indices,this._minimumHeight=e.minimumHeight,this._maximumHeight=e.maximumHeight,this._boundingSphere=e.boundingSphere,this._orientedBoundingBox=e.orientedBoundingBox,this._horizonOcclusionPoint=e.horizonOcclusionPoint,this._credits=e.credits;let t=this._quantizedVertices.length/3,n=this._uValues=this._quantizedVertices.subarray(0,t),i=this._vValues=this._quantizedVertices.subarray(t,2*t);this._heightValues=this._quantizedVertices.subarray(2*t,3*t);function o(s,a){return i[s]-i[a]}function r(s,a){return n[s]-n[a]}this._westIndices=QQ(e.westIndices,o,t),this._southIndices=QQ(e.southIndices,r,t),this._eastIndices=QQ(e.eastIndices,o,t),this._northIndices=QQ(e.northIndices,r,t),this._westSkirtHeight=e.westSkirtHeight,this._southSkirtHeight=e.southSkirtHeight,this._eastSkirtHeight=e.eastSkirtHeight,this._northSkirtHeight=e.northSkirtHeight,this._childTileMask=e.childTileMask??15,this._createdByUpsampling=e.createdByUpsampling??!1,this._waterMask=e.waterMask,this._mesh=void 0}Object.defineProperties(wy.prototype,{credits:{get:function(){return this._credits}},waterMask:{get:function(){return this._waterMask}},childTileMask:{get:function(){return this._childTileMask}},canUpsample:{get:function(){return l(this._mesh)}}});var kQ=[];function QQ(e,t,n){kQ.length=e.length;let i=!1;for(let o=0,r=e.length;o<r;++o)kQ[o]=e[o],i=i||o>0&&t(e[o-1],e[o])>0;return i?(kQ.sort(t),Ue.createTypedArray(n,kQ)):e}var UEe="createVerticesFromQuantizedTerrainMesh",agt=new $n(UEe),cgt=new $n(UEe,Yd.maximumAsynchronousTasks);wy.prototype.createMesh=function(e){e=e??Q.EMPTY_OBJECT;let t=e.tilingScheme,n=e.x,i=e.y,o=e.level,r=e.exaggeration??1,s=e.exaggerationRelativeHeight??0,a=e.throttle??!0,c=t.ellipsoid,d=t.tileXYToRectangle(n,i,o),h=(a?cgt:agt).scheduleTask({minimumHeight:this._minimumHeight,maximumHeight:this._maximumHeight,quantizedVertices:this._quantizedVertices,octEncodedNormals:this._encodedNormals,includeWebMercatorT:!0,indices:this._indices,westIndices:this._westIndices,southIndices:this._southIndices,eastIndices:this._eastIndices,northIndices:this._northIndices,westSkirtHeight:this._westSkirtHeight,southSkirtHeight:this._southSkirtHeight,eastSkirtHeight:this._eastSkirtHeight,northSkirtHeight:this._northSkirtHeight,rectangle:d,relativeToCenter:this._boundingSphere.center,ellipsoid:c,exaggeration:r,exaggerationRelativeHeight:s});if(!l(h))return;let p=this;return Promise.resolve(h).then(function(A){let f=p._quantizedVertices.length/3,b=f+p._westIndices.length+p._southIndices.length+p._eastIndices.length+p._northIndices.length,C=Ue.createTypedArray(b,A.indices),T=new Float32Array(A.vertices),E=A.center,S=A.minimumHeight,I=A.maximumHeight,R=p._boundingSphere,V=p._orientedBoundingBox,W=m.clone(A.occludeePointInScaledSpace)??p._horizonOcclusionPoint,B=A.vertexStride,N=yr.clone(A.encoding);return p._mesh=new hc(E,T,C,A.indexCountWithoutSkirts,f,S,I,d,R,W,B,V,N,A.westIndicesSouthToNorth,A.southIndicesEastToWest,A.eastIndicesNorthToSouth,A.northIndicesWestToEast),p._quantizedVertices=void 0,p._encodedNormals=void 0,p._indices=void 0,p._uValues=void 0,p._vValues=void 0,p._heightValues=void 0,p._westIndices=void 0,p._southIndices=void 0,p._eastIndices=void 0,p._northIndices=void 0,p._mesh})};var lgt=new $n("upsampleQuantizedTerrainMesh",Yd.maximumAsynchronousTasks);wy.prototype.upsample=function(e,t,n,i,o,r,s){let a=this._mesh;if(!l(this._mesh))return;let c=t*2!==o,d=n*2===r,u=e.ellipsoid,h=e.tileXYToRectangle(o,r,s),p=lgt.scheduleTask({vertices:a.vertices,vertexCountWithoutSkirts:a.vertexCountWithoutSkirts,indices:a.indices,indexCountWithoutSkirts:a.indexCountWithoutSkirts,encoding:a.encoding,minimumHeight:this._minimumHeight,maximumHeight:this._maximumHeight,isEastChild:c,isNorthChild:d,childRectangle:h,ellipsoid:u});if(!l(p))return;let A=Math.min(this._westSkirtHeight,this._eastSkirtHeight);A=Math.min(A,this._southSkirtHeight),A=Math.min(A,this._northSkirtHeight);let f=c?A*.5:this._westSkirtHeight,b=d?A*.5:this._southSkirtHeight,C=c?this._eastSkirtHeight:A*.5,T=d?this._northSkirtHeight:A*.5,E=this._credits;return Promise.resolve(p).then(function(S){let I=new Uint16Array(S.vertices),R=Ue.createTypedArray(I.length/3,S.indices),V;return l(S.encodedNormals)&&(V=new Uint8Array(S.encodedNormals)),new wy({quantizedVertices:I,indices:R,encodedNormals:V,minimumHeight:S.minimumHeight,maximumHeight:S.maximumHeight,boundingSphere:ue.clone(S.boundingSphere),orientedBoundingBox:nn.clone(S.orientedBoundingBox),horizonOcclusionPoint:m.clone(S.horizonOcclusionPoint),westIndices:S.westIndices,southIndices:S.southIndices,eastIndices:S.eastIndices,northIndices:S.northIndices,westSkirtHeight:f,southSkirtHeight:b,eastSkirtHeight:C,northSkirtHeight:T,childTileMask:0,credits:E,createdByUpsampling:!0})})};var t$=32767,DEe=new m;wy.prototype.interpolateHeight=function(e,t,n){let i=L.clamp((t-e.west)/e.width,0,1);i*=t$;let o=L.clamp((n-e.south)/e.height,0,1);return o*=t$,l(this._mesh)?hgt(this,i,o):fgt(this,i,o)};function kEe(e,t,n,i,o,r,s,a){let c=Math.min(n,o,s),d=Math.max(n,o,s),u=Math.min(i,r,a),h=Math.max(i,r,a);return e>=c&&e<=d&&t>=u&&t<=h}var dgt=new M,ugt=new M,mgt=new M;function hgt(e,t,n){let i=e._mesh,o=i.vertices,r=i.encoding,s=i.indices;for(let a=0,c=s.length;a<c;a+=3){let d=s[a],u=s[a+1],h=s[a+2],p=r.decodeTextureCoordinates(o,d,dgt),A=r.decodeTextureCoordinates(o,u,ugt),f=r.decodeTextureCoordinates(o,h,mgt);if(kEe(t,n,p.x,p.y,A.x,A.y,f.x,f.y)){let b=Ff.computeBarycentricCoordinates(t,n,p.x,p.y,A.x,A.y,f.x,f.y,DEe);if(b.x>=-1e-15&&b.y>=-1e-15&&b.z>=-1e-15){let C=r.decodeHeight(o,d),T=r.decodeHeight(o,u),E=r.decodeHeight(o,h);return b.x*C+b.y*T+b.z*E}}}}function fgt(e,t,n){let i=e._uValues,o=e._vValues,r=e._heightValues,s=e._indices;for(let a=0,c=s.length;a<c;a+=3){let d=s[a],u=s[a+1],h=s[a+2],p=i[d],A=i[u],f=i[h],b=o[d],C=o[u],T=o[h];if(kEe(t,n,p,b,A,C,f,T)){let E=Ff.computeBarycentricCoordinates(t,n,p,b,A,C,f,T,DEe);if(E.x>=-1e-15&&E.y>=-1e-15&&E.z>=-1e-15){let S=E.x*r[d]+E.y*r[u]+E.z*r[h];return L.lerp(e._minimumHeight,e._maximumHeight,S/t$)}}}}wy.prototype.isChildAvailable=function(e,t,n,i){let o=2;return n!==e*2&&++o,i!==t*2&&(o-=2),(this._childTileMask&1<<o)!==0};wy.prototype.wasCreatedByUpsampling=function(){return this._createdByUpsampling};var JT=wy;function pgt(e){this.resource=e.resource,this.version=e.version,this.isHeightmap=e.isHeightmap,this.tileUrlTemplates=e.tileUrlTemplates,this.availability=e.availability,this.hasVertexNormals=e.hasVertexNormals,this.hasWaterMask=e.hasWaterMask,this.hasMetadata=e.hasMetadata,this.availabilityLevels=e.availabilityLevels,this.availabilityTilesLoaded=e.availabilityTilesLoaded,this.littleEndianExtensionSize=e.littleEndianExtensionSize,this.availabilityPromiseCache={}}function OEe(e){this.requestVertexNormals=e.requestVertexNormals??!1,this.requestWaterMask=e.requestWaterMask??!1,this.requestMetadata=e.requestMetadata??!0,this.ellipsoid=e.ellipsoid??ie.default,this.heightmapWidth=65,this.heightmapStructure=void 0,this.hasWaterMask=!1,this.hasMetadata=!1,this.hasVertexNormals=!1,this.scheme=void 0,this.lastResource=void 0,this.layerJsonResource=void 0,this.previousError=void 0,this.availability=void 0,this.tilingScheme=void 0,this.levelZeroMaximumGeometricError=void 0,this.heightmapStructure=void 0,this.layers=[],this.attribution="",this.overallAvailability=[],this.overallMaxZoom=0,this.tileCredits=[]}OEe.prototype.build=function(e){e._heightmapWidth=this.heightmapWidth,e._scheme=this.scheme;let t=l(this.lastResource.credits)?this.lastResource.credits:[];e._tileCredits=t.concat(this.tileCredits),e._availability=this.availability,e._tilingScheme=this.tilingScheme,e._requestWaterMask=this.requestWaterMask,e._levelZeroMaximumGeometricError=this.levelZeroMaximumGeometricError,e._heightmapStructure=this.heightmapStructure,e._layers=this.layers,e._hasWaterMask=this.hasWaterMask,e._hasVertexNormals=this.hasVertexNormals,e._hasMetadata=this.hasMetadata};async function zEe(e,t,n){if(!t.format){let b="The tile format is not specified in the layer.json file.";throw e.previousError=qo.reportError(e.previousError,n,l(n)?n._errorEvent:void 0,b),new me(b)}if(!t.tiles||t.tiles.length===0){let b="The layer.json file does not specify any tile URL templates.";throw e.previousError=qo.reportError(e.previousError,n,l(n)?n._errorEvent:void 0,b),new me(b)}let i=!1,o=!1,r=!1,s=!0,a=!1;if(t.format==="heightmap-1.0")a=!0,l(e.heightmapStructure)||(e.heightmapStructure={heightScale:1/5,heightOffset:-1e3,elementsPerHeight:1,stride:1,elementMultiplier:256,isBigEndian:!1,lowestEncodedHeight:0,highestEncodedHeight:256*256-1}),o=!0,e.requestWaterMask=!0;else if(t.format.indexOf("quantized-mesh-1.")!==0){let b=`The tile format "${t.format}" is invalid or not supported.`;throw e.previousError=qo.reportError(e.previousError,n,l(n)?n._errorEvent:void 0,b),new me(b)}let c=t.tiles,d=t.maxzoom;if(e.overallMaxZoom=Math.max(e.overallMaxZoom,d),!t.projection||t.projection==="EPSG:4326")e.tilingScheme=new zi({numberOfLevelZeroTilesX:2,numberOfLevelZeroTilesY:1,ellipsoid:e.ellipsoid});else if(t.projection==="EPSG:3857")e.tilingScheme=new ws({numberOfLevelZeroTilesX:1,numberOfLevelZeroTilesY:1,ellipsoid:e.ellipsoid});else{let b=`The projection "${t.projection}" is invalid or not supported.`;throw e.previousError=qo.reportError(e.previousError,n,l(n)?n._errorEvent:void 0,b),new me(b)}if(e.levelZeroMaximumGeometricError=Qo.getEstimatedLevelZeroGeometricErrorForAHeightmap(e.tilingScheme.ellipsoid,e.heightmapWidth,e.tilingScheme.getNumberOfXTilesAtLevel(0)),!t.scheme||t.scheme==="tms"||t.scheme==="slippyMap")e.scheme=t.scheme;else{let b=`The scheme "${t.scheme}" is invalid or not supported.`;throw e.previousError=qo.reportError(e.previousError,n,l(n)?n._errorEvent:void 0,b),new me(b)}let u;l(t.extensions)&&t.extensions.indexOf("octvertexnormals")!==-1?i=!0:l(t.extensions)&&t.extensions.indexOf("vertexnormals")!==-1&&(i=!0,s=!1),l(t.extensions)&&t.extensions.indexOf("watermask")!==-1&&(o=!0),l(t.extensions)&&t.extensions.indexOf("metadata")!==-1&&(r=!0);let h=t.metadataAvailability,p=t.available,A;if(l(p)&&!l(h)){A=new Wf(e.tilingScheme,p.length);for(let b=0;b<p.length;++b){let C=p[b],T=e.tilingScheme.getNumberOfYTilesAtLevel(b);l(e.overallAvailability[b])||(e.overallAvailability[b]=[]);for(let E=0;E<C.length;++E){let S=C[E],I=T-S.endY-1,R=T-S.startY-1;e.overallAvailability[b].push([S.startX,I,S.endX,R]),A.addAvailableTileRange(b,S.startX,I,S.endX,R)}}}else l(h)&&(u=new Wf(e.tilingScheme,d),A=new Wf(e.tilingScheme,d),e.overallAvailability[0]=[[0,0,1,0]],A.addAvailableTileRange(0,0,0,1,0));e.hasWaterMask=e.hasWaterMask||o,e.hasVertexNormals=e.hasVertexNormals||i,e.hasMetadata=e.hasMetadata||r,l(t.attribution)&&(e.attribution.length>0&&(e.attribution+=" "),e.attribution+=t.attribution),e.layers.push(new pgt({resource:e.lastResource,version:t.version,isHeightmap:a,tileUrlTemplates:c,availability:A,hasVertexNormals:i,hasWaterMask:o,hasMetadata:r,availabilityLevels:h,availabilityTilesLoaded:u,littleEndianExtensionSize:s}));let f=t.parentUrl;return l(f)?l(A)?(e.lastResource=e.lastResource.getDerivedResource({url:f}),e.lastResource.appendForwardSlash(),e.layerJsonResource=e.lastResource.getDerivedResource({url:"layer.json"}),await o$(e),!0):(console.log("A layer.json can't have a parentUrl if it does't have an available array."),!0):!0}function Agt(e,t,n){let i=`An error occurred while accessing ${e.layerJsonResource.url}.`;if(l(t)&&(i+=`
${t.message}`),e.previousError=qo.reportError(e.previousError,n,l(n)?n._errorEvent:void 0,i),e.previousError.retry)return o$(e,n);throw new me(i)}async function ggt(e,t,n){await zEe(e,t,n);let i=e.overallAvailability.length;if(i>0){let o=e.availability=new Wf(e.tilingScheme,e.overallMaxZoom);for(let r=0;r<i;++r){let s=e.overallAvailability[r];for(let a=0;a<s.length;++a){let c=s[a];o.addAvailableTileRange(r,c[0],c[1],c[2],c[3])}}}if(e.attribution.length>0){let o=new Et(e.attribution);e.tileCredits.push(o)}return!0}async function o$(e,t){try{let n=await e.layerJsonResource.fetchJson();return ggt(e,n,t)}catch(n){return l(n)&&n.statusCode===404?(await zEe(e,{tilejson:"2.1.0",format:"heightmap-1.0",version:"1.0.0",scheme:"tms",tiles:["{z}/{x}/{y}.terrain?v={version}"]},t),!0):Agt(e,n,t)}}function wf(e){e=e??Q.EMPTY_OBJECT,this._heightmapWidth=void 0,this._heightmapStructure=void 0,this._hasWaterMask=!1,this._hasVertexNormals=!1,this._hasMetadata=!1,this._scheme=void 0,this._ellipsoid=e.ellipsoid,this._requestVertexNormals=e.requestVertexNormals??!1,this._requestWaterMask=e.requestWaterMask??!1,this._requestMetadata=e.requestMetadata??!0,this._errorEvent=new xe;let t=e.credit;typeof t=="string"&&(t=new Et(t)),this._credit=t,this._availability=void 0,this._tilingScheme=void 0,this._levelZeroMaximumGeometricError=void 0,this._layers=void 0,this._tileCredits=void 0}var n$={OCT_VERTEX_NORMALS:1,WATER_MASK:2,METADATA:4};function QEe(e){return!l(e)||e.length===0?{Accept:"application/vnd.quantized-mesh,application/octet-stream;q=0.9,*/*;q=0.01"}:{Accept:`application/vnd.quantized-mesh;extensions=${e.join("-")},application/octet-stream;q=0.9,*/*;q=0.01`}}function bgt(e,t,n,i,o){let r=new Uint16Array(t,0,e._heightmapWidth*e._heightmapWidth);return new Fc({buffer:r,childTileMask:new Uint8Array(t,r.byteLength,1)[0],waterMask:new Uint8Array(t,r.byteLength+1,t.byteLength-r.byteLength-1),width:e._heightmapWidth,height:e._heightmapWidth,structure:e._heightmapStructure,credits:e._tileCredits})}function ygt(e,t,n,i,o,r){let s=r.littleEndianExtensionSize,a=0,c=3,d=c+1,u=Float64Array.BYTES_PER_ELEMENT*c,h=Float64Array.BYTES_PER_ELEMENT*d,A=Uint16Array.BYTES_PER_ELEMENT*3,f=3,b=Uint16Array.BYTES_PER_ELEMENT,C=b*f,T=new DataView(t),E=new m(T.getFloat64(a,!0),T.getFloat64(a+8,!0),T.getFloat64(a+16,!0));a+=u;let S=T.getFloat32(a,!0);a+=Float32Array.BYTES_PER_ELEMENT;let I=T.getFloat32(a,!0);a+=Float32Array.BYTES_PER_ELEMENT;let R=new ue(new m(T.getFloat64(a,!0),T.getFloat64(a+8,!0),T.getFloat64(a+16,!0)),T.getFloat64(a+u,!0));a+=h;let V=new m(T.getFloat64(a,!0),T.getFloat64(a+8,!0),T.getFloat64(a+16,!0));a+=u;let W=T.getUint32(a,!0);a+=Uint32Array.BYTES_PER_ELEMENT;let B=new Uint16Array(t,a,W*3);a+=W*A,W>64*1024&&(b=Uint32Array.BYTES_PER_ELEMENT,C=b*f);let N=B.subarray(0,W),P=B.subarray(W,2*W),g=B.subarray(W*2,3*W);on.zigZagDeltaDecode(N,P,g),a%b!==0&&(a+=b-a%b);let _=T.getUint32(a,!0);a+=Uint32Array.BYTES_PER_ELEMENT;let Z=Ue.createTypedArrayFromArrayBuffer(W,t,a,_*f);a+=_*C;let G=0,w=Z.length;for(let ae=0;ae<w;++ae){let Ce=Z[ae];Z[ae]=G-Ce,Ce===0&&++G}let X=T.getUint32(a,!0);a+=Uint32Array.BYTES_PER_ELEMENT;let k=Ue.createTypedArrayFromArrayBuffer(W,t,a,X);a+=X*b;let v=T.getUint32(a,!0);a+=Uint32Array.BYTES_PER_ELEMENT;let D=Ue.createTypedArrayFromArrayBuffer(W,t,a,v);a+=v*b;let Y=T.getUint32(a,!0);a+=Uint32Array.BYTES_PER_ELEMENT;let O=Ue.createTypedArrayFromArrayBuffer(W,t,a,Y);a+=Y*b;let J=T.getUint32(a,!0);a+=Uint32Array.BYTES_PER_ELEMENT;let te=Ue.createTypedArrayFromArrayBuffer(W,t,a,J);a+=J*b;let z,j;for(;a<T.byteLength;){let ae=T.getUint8(a,!0);a+=Uint8Array.BYTES_PER_ELEMENT;let Ce=T.getUint32(a,s);if(a+=Uint32Array.BYTES_PER_ELEMENT,ae===n$.OCT_VERTEX_NORMALS&&e._requestVertexNormals)z=new Uint8Array(t,a,W*2);else if(ae===n$.WATER_MASK&&e._requestWaterMask)j=new Uint8Array(t,a,Ce);else if(ae===n$.METADATA&&e._requestMetadata){let Te=T.getUint32(a,!0);if(Te>0){let Ne=Zr(new Uint8Array(t),a+Uint32Array.BYTES_PER_ELEMENT,Te).available;if(l(Ne))for(let Pe=0;Pe<Ne.length;++Pe){let Xe=n+Pe+1,st=Ne[Pe],Ye=e._tilingScheme.getNumberOfYTilesAtLevel(Xe);for(let xt=0;xt<st.length;++xt){let at=st[xt],Je=Ye-at.endY-1,lt=Ye-at.startY-1;e.availability.addAvailableTileRange(Xe,at.startX,Je,at.endX,lt),r.availability.addAvailableTileRange(Xe,at.startX,Je,at.endX,lt)}}}r.availabilityTilesLoaded.addAvailableTileRange(n,i,o,i,o)}a+=Ce}let ee=e.getLevelMaximumGeometricError(n)*5,ge=e._tilingScheme.tileXYToRectangle(i,o,n),ye=nn.fromRectangle(ge,S,I,e._tilingScheme.ellipsoid);return new JT({center:E,minimumHeight:S,maximumHeight:I,boundingSphere:R,orientedBoundingBox:ye,horizonOcclusionPoint:V,quantizedVertices:B,encodedNormals:z,indices:Z,westIndices:k,southIndices:D,eastIndices:O,northIndices:te,westSkirtHeight:ee,southSkirtHeight:ee,eastSkirtHeight:ee,northSkirtHeight:ee,childTileMask:e.availability.computeChildMaskForTile(n,i,o),waterMask:j,credits:e._tileCredits})}wf.prototype.requestTileGeometry=function(e,t,n,i){let o=this._layers,r,s=o.length,a=!1,c=Promise.resolve();if(s===1)r=o[0];else for(let d=0;d<s;++d){let u=o[d];if(!l(u.availability)||u.availability.isTileAvailable(n,e,t)){r=u;break}let h=r$(this,e,t,n,u,d===0);h.result&&(a=!0,c=c.then(()=>h.promise))}return!l(r)&&a?c.then(()=>new Promise(d=>{setTimeout(()=>{let u=this.requestTileGeometry(e,t,n,i);d(u)},0)})):HEe(this,e,t,n,r,i)};function HEe(e,t,n,i,o,r){if(!l(o))return Promise.reject(new me("Terrain tile doesn't exist"));let s=o.tileUrlTemplates;if(s.length===0)return;let a;!e._scheme||e._scheme==="tms"?a=e._tilingScheme.getNumberOfYTilesAtLevel(i)-n-1:a=n;let c=[];e._requestVertexNormals&&o.hasVertexNormals&&c.push(o.littleEndianExtensionSize?"octvertexnormals":"vertexnormals"),e._requestWaterMask&&o.hasWaterMask&&c.push("watermask"),e._requestMetadata&&o.hasMetadata&&c.push("metadata");let d,u,h=s[(t+a+i)%s.length],p=o.resource;l(p._ionEndpoint)&&!l(p._ionEndpoint.externalType)?(c.length!==0&&(u={extensions:c.join("-")}),d=QEe(void 0)):d=QEe(c);let A=p.getDerivedResource({url:h,templateValues:{version:o.version,z:i,x:t,y:a},queryParameters:u,headers:d,request:r}).fetchArrayBuffer();if(l(A))return A.then(function(f){return l(f)?l(e._heightmapStructure)?bgt(e,f,i,t,n):ygt(e,f,i,t,n,o):Promise.reject(new me("Mesh buffer doesn't exist."))})}Object.defineProperties(wf.prototype,{errorEvent:{get:function(){return this._errorEvent}},credit:{get:function(){return this._credit}},tilingScheme:{get:function(){return this._tilingScheme}},hasWaterMask:{get:function(){return this._hasWaterMask&&this._requestWaterMask}},hasVertexNormals:{get:function(){return this._hasVertexNormals&&this._requestVertexNormals}},hasMetadata:{get:function(){return this._hasMetadata&&this._requestMetadata}},requestVertexNormals:{get:function(){return this._requestVertexNormals}},requestWaterMask:{get:function(){return this._requestWaterMask}},requestMetadata:{get:function(){return this._requestMetadata}},availability:{get:function(){return this._availability}}});wf.prototype.getLevelMaximumGeometricError=function(e){return this._levelZeroMaximumGeometricError/(1<<e)};wf.fromIonAssetId=async function(e,t){let n=await cs.fromAssetId(e);return wf.fromUrl(n,t)};wf.fromUrl=async function(e,t){t=t??Q.EMPTY_OBJECT,e=await Promise.resolve(e);let n=Le.createIfNeeded(e);n.appendForwardSlash();let i=new OEe(t);i.lastResource=n,i.layerJsonResource=i.lastResource.getDerivedResource({url:"layer.json"}),await o$(i);let o=new wf(t);return i.build(o),o};wf.prototype.getTileDataAvailable=function(e,t,n){if(!l(this._availability))return;if(n>this._availability._maximumLevel)return!1;if(this._availability.isTileAvailable(n,e,t))return!0;if(!this._hasMetadata)return!1;let i=this._layers,o=i.length;for(let r=0;r<o;++r)if(r$(this,e,t,n,i[r],r===0).result)return;return!1};wf.prototype.loadTileDataAvailability=function(e,t,n){if(!l(this._availability)||n>this._availability._maximumLevel||this._availability.isTileAvailable(n,e,t)||!this._hasMetadata)return;let i=this._layers,o=i.length;for(let r=0;r<o;++r){let s=r$(this,e,t,n,i[r],r===0);if(l(s.promise))return s.promise}};function i$(e,t,n,i){if(i===0)return;let o=e.availabilityLevels,r=i%o===0?i-o:(i/o|0)*o,s=1<<i-r,a=t/s|0,c=n/s|0;return{level:r,x:a,y:c}}function r$(e,t,n,i,o,r){if(!l(o.availabilityLevels))return{result:!1};let s,a=function(){delete o.availabilityPromiseCache[s]},c=o.availabilityTilesLoaded,d=o.availability,u=i$(o,t,n,i);for(;l(u);){if(d.isTileAvailable(u.level,u.x,u.y)&&!c.isTileAvailable(u.level,u.x,u.y)){let h;if(!r&&(s=`${u.level}-${u.x}-${u.y}`,h=o.availabilityPromiseCache[s],!l(h))){let p=new Tr({throttle:!1,throttleByServer:!1,type:Ds.TERRAIN});h=HEe(e,u.x,u.y,u.level,o,p),l(h)&&(o.availabilityPromiseCache[s]=h,h.then(a))}return{result:!0,promise:h}}u=i$(o,u.x,u.y,u.level)}return{result:!1}}wf._getAvailabilityTile=i$;var KT=wf;var oQi=y(x(),1);function bb(e){e=e??Q.EMPTY_OBJECT;let t=e.radius,n={center:e.center,semiMajorAxis:t,semiMinorAxis:t,ellipsoid:e.ellipsoid,height:e.height,extrudedHeight:e.extrudedHeight,granularity:e.granularity,vertexFormat:e.vertexFormat,stRotation:e.stRotation,shadowVolume:e.shadowVolume};this._ellipseGeometry=new ed(n),this._workerName="createCircleGeometry"}bb.packedLength=ed.packedLength;bb.pack=function(e,t,n){return ed.pack(e._ellipseGeometry,t,n)};var JEe=new ed({center:new m,semiMajorAxis:1,semiMinorAxis:1}),Bc={center:new m,radius:void 0,ellipsoid:ie.clone(ie.default),height:void 0,extrudedHeight:void 0,granularity:void 0,vertexFormat:new ve,stRotation:void 0,semiMajorAxis:void 0,semiMinorAxis:void 0,shadowVolume:void 0};bb.unpack=function(e,t,n){let i=ed.unpack(e,t,JEe);return Bc.center=m.clone(i._center,Bc.center),Bc.ellipsoid=ie.clone(i._ellipsoid,Bc.ellipsoid),Bc.ellipsoid=ie.clone(i._ellipsoid,JEe._ellipsoid),Bc.height=i._height,Bc.extrudedHeight=i._extrudedHeight,Bc.granularity=i._granularity,Bc.vertexFormat=ve.clone(i._vertexFormat,Bc.vertexFormat),Bc.stRotation=i._stRotation,Bc.shadowVolume=i._shadowVolume,l(n)?(Bc.semiMajorAxis=i._semiMajorAxis,Bc.semiMinorAxis=i._semiMinorAxis,n._ellipseGeometry=new ed(Bc),n):(Bc.radius=i._semiMajorAxis,new bb(Bc))};bb.createGeometry=function(e){return ed.createGeometry(e._ellipseGeometry)};bb.createShadowVolume=function(e,t,n){let i=e._ellipseGeometry._granularity,o=e._ellipseGeometry._ellipsoid,r=t(i,o),s=n(i,o);return new bb({center:e._ellipseGeometry._center,radius:e._ellipseGeometry._semiMajorAxis,ellipsoid:o,stRotation:e._ellipseGeometry._stRotation,granularity:i,extrudedHeight:r,height:s,vertexFormat:ve.POSITION_ONLY,shadowVolume:!0})};Object.defineProperties(bb.prototype,{rectangle:{get:function(){return this._ellipseGeometry.rectangle}},textureCoordinateRotationPoints:{get:function(){return this._ellipseGeometry.textureCoordinateRotationPoints}}});var s$=bb;var uQi=y(x(),1);function VZ(e){e=e??Q.EMPTY_OBJECT;let t=e.radius,n={center:e.center,semiMajorAxis:t,semiMinorAxis:t,ellipsoid:e.ellipsoid,height:e.height,extrudedHeight:e.extrudedHeight,granularity:e.granularity,numberOfVerticalLines:e.numberOfVerticalLines};this._ellipseGeometry=new Lu(n),this._workerName="createCircleOutlineGeometry"}VZ.packedLength=Lu.packedLength;VZ.pack=function(e,t,n){return Lu.pack(e._ellipseGeometry,t,n)};var xgt=new Lu({center:new m,semiMajorAxis:1,semiMinorAxis:1}),Mu={center:new m,radius:void 0,ellipsoid:ie.clone(ie.UNIT_SPHERE),height:void 0,extrudedHeight:void 0,granularity:void 0,numberOfVerticalLines:void 0,semiMajorAxis:void 0,semiMinorAxis:void 0};VZ.unpack=function(e,t,n){let i=Lu.unpack(e,t,xgt);return Mu.center=m.clone(i._center,Mu.center),Mu.ellipsoid=ie.clone(i._ellipsoid,Mu.ellipsoid),Mu.height=i._height,Mu.extrudedHeight=i._extrudedHeight,Mu.granularity=i._granularity,Mu.numberOfVerticalLines=i._numberOfVerticalLines,l(n)?(Mu.semiMajorAxis=i._semiMajorAxis,Mu.semiMinorAxis=i._semiMinorAxis,n._ellipseGeometry=new Lu(Mu),n):(Mu.radius=i._semiMajorAxis,new VZ(Mu))};VZ.createGeometry=function(e){return Lu.createGeometry(e._ellipseGeometry)};var a$=VZ;var pQi=y(x(),1);function Cgt(e){return e=e??Q.EMPTY_OBJECT,KT.fromIonAssetId(2426648,{requestVertexNormals:e.requestVertexNormals??!1})}var SX=Cgt;var xQi=y(x(),1);function Tgt(e){return e=e??Q.EMPTY_OBJECT,KT.fromIonAssetId(1,{requestVertexNormals:e.requestVertexNormals??!1,requestWaterMask:e.requestWaterMask??!1,ellipsoid:ie.WGS84})}var jT=Tgt;var GQi=y(x(),1);function GZ(e){e=e??Q.EMPTY_OBJECT,this._callback=e.callback,this._tilingScheme=e.tilingScheme,l(this._tilingScheme)||(this._tilingScheme=new zi({ellipsoid:e.ellipsoid??ie.default})),this._width=e.width,this._height=e.height;let t=Math.max(this._width,this._height);this._levelZeroMaximumGeometricError=Qo.getEstimatedLevelZeroGeometricErrorForAHeightmap(this._tilingScheme.ellipsoid,t,this._tilingScheme.getNumberOfXTilesAtLevel(0)),this._errorEvent=new xe;let n=e.credit;typeof n=="string"&&(n=new Et(n)),this._credit=n}Object.defineProperties(GZ.prototype,{errorEvent:{get:function(){return this._errorEvent}},credit:{get:function(){return this._credit}},tilingScheme:{get:function(){return this._tilingScheme}},hasWaterMask:{get:function(){return!1}},hasVertexNormals:{get:function(){return!1}},availability:{get:function(){}},width:{get:function(){return this._width}},height:{get:function(){return this._height}}});GZ.prototype.requestTileGeometry=function(e,t,n,i){let o=this._callback(e,t,n);if(!l(o))return;let r=this._width,s=this._height;return Promise.resolve(o).then(function(a){let c=a;return Array.isArray(c)&&(c=new Float64Array(c)),new Fc({buffer:c,width:r,height:s})})};GZ.prototype.getLevelMaximumGeometricError=function(e){return this._levelZeroMaximumGeometricError/(1<<e)};GZ.prototype.getTileDataAvailable=function(e,t,n){};GZ.prototype.loadTileDataAvailability=function(e,t,n){};var c$=GZ;var FQi=y(x(),1);var Egt=1953029805,Sgt=2917034100;function l$(e,t){if(l$.passThroughDataForTesting)return t;let n=e.byteLength;if(n===0||n%4!==0)throw new me("The length of key must be greater than 0 and a multiple of 4.");let i=new DataView(t),o=i.getUint32(0,!0);if(o===Egt||o===Sgt)return t;let r=new DataView(e),s=0,a=t.byteLength,c=a-a%8,d=n,u,h=8;for(;s<c;)for(h=(h+8)%24,u=h;s<c&&u<d;)i.setUint32(s,i.getUint32(s,!0)^r.getUint32(u,!0),!0),i.setUint32(s+4,i.getUint32(s+4,!0)^r.getUint32(u+4,!0),!0),s+=8,u+=24;if(s<a)for(u>=d&&(h=(h+8)%24,u=h);s<a;)i.setUint8(s,i.getUint8(s)^r.getUint8(u)),s++,u++}l$.passThroughDataForTesting=!1;var _X=l$;var wQi=y(x(),1);function KEe(e){this.proxy=e}KEe.prototype.getURL=function(e){let t=this.proxy.indexOf("?")===-1?"?":"";return this.proxy+t+encodeURIComponent(e)};var d$=KEe;var kQi=y(x(),1);function LZ(e){e=e??Q.EMPTY_OBJECT,this._tilingScheme=e.tilingScheme,l(this._tilingScheme)||(this._tilingScheme=new zi({ellipsoid:e.ellipsoid??ie.default})),this._levelZeroMaximumGeometricError=Qo.getEstimatedLevelZeroGeometricErrorForAHeightmap(this._tilingScheme.ellipsoid,64,this._tilingScheme.getNumberOfXTilesAtLevel(0)),this._errorEvent=new xe}Object.defineProperties(LZ.prototype,{errorEvent:{get:function(){return this._errorEvent}},credit:{get:function(){}},tilingScheme:{get:function(){return this._tilingScheme}},hasWaterMask:{get:function(){return!1}},hasVertexNormals:{get:function(){return!1}},availability:{get:function(){}}});LZ.prototype.requestTileGeometry=function(e,t,n,i){return Promise.resolve(new Fc({buffer:new Uint8Array(256),width:16,height:16}))};LZ.prototype.getLevelMaximumGeometricError=function(e){return this._levelZeroMaximumGeometricError/(1<<e)};LZ.prototype.getTileDataAvailable=function(e,t,n){};LZ.prototype.loadTileDataAvailability=function(e,t,n){};var qT=LZ;var TOi=y(x(),1);var rOi=y(x(),1);var $Qi=y(x(),1);function qp(e){e=e??Q.EMPTY_OBJECT,this.left=e.left,this._left=void 0,this.right=e.right,this._right=void 0,this.top=e.top,this._top=void 0,this.bottom=e.bottom,this._bottom=void 0,this.near=e.near??1,this._near=this.near,this.far=e.far??5e8,this._far=this.far,this._cullingVolume=new Os,this._perspectiveMatrix=new F,this._infinitePerspective=new F}function u$(e){let{top:t,bottom:n,right:i,left:o,near:r,far:s}=e;(t!==e._top||n!==e._bottom||o!==e._left||i!==e._right||r!==e._near||s!==e._far)&&(e._left=o,e._right=i,e._top=t,e._bottom=n,e._near=r,e._far=s,e._perspectiveMatrix=F.computePerspectiveOffCenter(o,i,n,t,r,s,e._perspectiveMatrix),e._infinitePerspective=F.computeInfinitePerspectiveOffCenter(o,i,n,t,r,e._infinitePerspective))}Object.defineProperties(qp.prototype,{projectionMatrix:{get:function(){return u$(this),this._perspectiveMatrix}},infiniteProjectionMatrix:{get:function(){return u$(this),this._infinitePerspective}}});var _gt=new m,Igt=new m,Zgt=new m,Rgt=new m;qp.prototype.computeCullingVolume=function(e,t,n){let i=this._cullingVolume.planes,o=this.top,r=this.bottom,s=this.right,a=this.left,c=this.near,d=this.far,u=m.cross(t,n,_gt),h=Igt;m.multiplyByScalar(t,c,h),m.add(e,h,h);let p=Zgt;m.multiplyByScalar(t,d,p),m.add(e,p,p);let A=Rgt;m.multiplyByScalar(u,a,A),m.add(h,A,A),m.subtract(A,e,A),m.normalize(A,A),m.cross(A,n,A),m.normalize(A,A);let f=i[0];return l(f)||(f=i[0]=new re),f.x=A.x,f.y=A.y,f.z=A.z,f.w=-m.dot(A,e),m.multiplyByScalar(u,s,A),m.add(h,A,A),m.subtract(A,e,A),m.cross(n,A,A),m.normalize(A,A),f=i[1],l(f)||(f=i[1]=new re),f.x=A.x,f.y=A.y,f.z=A.z,f.w=-m.dot(A,e),m.multiplyByScalar(n,r,A),m.add(h,A,A),m.subtract(A,e,A),m.cross(u,A,A),m.normalize(A,A),f=i[2],l(f)||(f=i[2]=new re),f.x=A.x,f.y=A.y,f.z=A.z,f.w=-m.dot(A,e),m.multiplyByScalar(n,o,A),m.add(h,A,A),m.subtract(A,e,A),m.cross(A,u,A),m.normalize(A,A),f=i[3],l(f)||(f=i[3]=new re),f.x=A.x,f.y=A.y,f.z=A.z,f.w=-m.dot(A,e),f=i[4],l(f)||(f=i[4]=new re),f.x=t.x,f.y=t.y,f.z=t.z,f.w=-m.dot(t,h),m.negate(t,A),f=i[5],l(f)||(f=i[5]=new re),f.x=A.x,f.y=A.y,f.z=A.z,f.w=-m.dot(A,p),this._cullingVolume};qp.prototype.getPixelDimensions=function(e,t,n,i,o){u$(this);let r=1/this.near,s=this.top*r,a=2*i*n*s/t;s=this.right*r;let c=2*i*n*s/e;return o.x=c,o.y=a,o};qp.prototype.clone=function(e){return l(e)||(e=new qp),e.right=this.right,e.left=this.left,e.top=this.top,e.bottom=this.bottom,e.near=this.near,e.far=this.far,e._left=void 0,e._right=void 0,e._top=void 0,e._bottom=void 0,e._near=void 0,e._far=void 0,e};qp.prototype.equals=function(e){return l(e)&&e instanceof qp&&this.right===e.right&&this.left===e.left&&this.top===e.top&&this.bottom===e.bottom&&this.near===e.near&&this.far===e.far};qp.prototype.equalsEpsilon=function(e,t,n){return e===this||l(e)&&e instanceof qp&&L.equalsEpsilon(this.right,e.right,t,n)&&L.equalsEpsilon(this.left,e.left,t,n)&&L.equalsEpsilon(this.top,e.top,t,n)&&L.equalsEpsilon(this.bottom,e.bottom,t,n)&&L.equalsEpsilon(this.near,e.near,t,n)&&L.equalsEpsilon(this.far,e.far,t,n)};var id=qp;function Md(e){e=e??Q.EMPTY_OBJECT,this._offCenterFrustum=new id,this.fov=e.fov,this._fov=void 0,this._fovy=void 0,this._sseDenominator=void 0,this.aspectRatio=e.aspectRatio,this._aspectRatio=void 0,this.near=e.near??1,this._near=this.near,this.far=e.far??5e8,this._far=this.far,this.xOffset=e.xOffset??0,this._xOffset=this.xOffset,this.yOffset=e.yOffset??0,this._yOffset=this.yOffset}Md.packedLength=6;Md.pack=function(e,t,n){return n=n??0,t[n++]=e.fov,t[n++]=e.aspectRatio,t[n++]=e.near,t[n++]=e.far,t[n++]=e.xOffset,t[n]=e.yOffset,t};Md.unpack=function(e,t,n){return t=t??0,l(n)||(n=new Md),n.fov=e[t++],n.aspectRatio=e[t++],n.near=e[t++],n.far=e[t++],n.xOffset=e[t++],n.yOffset=e[t],n};function Nf(e){if(!(e.fov!==e._fov||e.aspectRatio!==e._aspectRatio||e.near!==e._near||e.far!==e._far||e.xOffset!==e._xOffset||e.yOffset!==e._yOffset))return;e._aspectRatio=e.aspectRatio,e._fov=e.fov,e._fovy=e.aspectRatio<=1?e.fov:Math.atan(Math.tan(e.fov*.5)/e.aspectRatio)*2,e._near=e.near,e._far=e.far,e._sseDenominator=2*Math.tan(.5*e._fovy),e._xOffset=e.xOffset,e._yOffset=e.yOffset;let n=e._offCenterFrustum;n.top=e.near*Math.tan(.5*e._fovy),n.bottom=-n.top,n.right=e.aspectRatio*n.top,n.left=-n.right,n.near=e.near,n.far=e.far,n.right+=e.xOffset,n.left+=e.xOffset,n.top+=e.yOffset,n.bottom+=e.yOffset}Object.defineProperties(Md.prototype,{projectionMatrix:{get:function(){return Nf(this),this._offCenterFrustum.projectionMatrix}},infiniteProjectionMatrix:{get:function(){return Nf(this),this._offCenterFrustum.infiniteProjectionMatrix}},fovy:{get:function(){return Nf(this),this._fovy}},sseDenominator:{get:function(){return Nf(this),this._sseDenominator}},offCenterFrustum:{get:function(){return Nf(this),this._offCenterFrustum}}});Md.prototype.computeCullingVolume=function(e,t,n){return Nf(this),this._offCenterFrustum.computeCullingVolume(e,t,n)};Md.prototype.getPixelDimensions=function(e,t,n,i,o){return Nf(this),this._offCenterFrustum.getPixelDimensions(e,t,n,i,o)};Md.prototype.clone=function(e){return l(e)||(e=new Md),e.aspectRatio=this.aspectRatio,e.fov=this.fov,e.near=this.near,e.far=this.far,e._aspectRatio=void 0,e._fov=void 0,e._near=void 0,e._far=void 0,this._offCenterFrustum.clone(e._offCenterFrustum),e};Md.prototype.equals=function(e){return!l(e)||!(e instanceof Md)?!1:(Nf(this),Nf(e),this.fov===e.fov&&this.aspectRatio===e.aspectRatio&&this._offCenterFrustum.equals(e._offCenterFrustum))};Md.prototype.equalsEpsilon=function(e,t,n){return!l(e)||!(e instanceof Md)?!1:(Nf(this),Nf(e),L.equalsEpsilon(this.fov,e.fov,t,n)&&L.equalsEpsilon(this.aspectRatio,e.aspectRatio,t,n)&&this._offCenterFrustum.equalsEpsilon(e._offCenterFrustum,t,n))};var Ui=Md;var OQ=0,Vgt=1;function $T(e){let t=e.frustum,n=e.orientation,i=e.origin,o=e.vertexFormat??ve.DEFAULT,r=e._drawNearPlane??!0,s,a;t instanceof Ui?(s=OQ,a=Ui.packedLength):t instanceof bn&&(s=Vgt,a=bn.packedLength),this._frustumType=s,this._frustum=t.clone(),this._origin=m.clone(i),this._orientation=Me.clone(n),this._drawNearPlane=r,this._vertexFormat=o,this._workerName="createFrustumGeometry",this.packedLength=2+a+m.packedLength+Me.packedLength+ve.packedLength}$T.pack=function(e,t,n){n=n??0;let i=e._frustumType,o=e._frustum;return t[n++]=i,i===OQ?(Ui.pack(o,t,n),n+=Ui.packedLength):(bn.pack(o,t,n),n+=bn.packedLength),m.pack(e._origin,t,n),n+=m.packedLength,Me.pack(e._orientation,t,n),n+=Me.packedLength,ve.pack(e._vertexFormat,t,n),n+=ve.packedLength,t[n]=e._drawNearPlane?1:0,t};var Ggt=new Ui,Lgt=new bn,Wgt=new Me,Fgt=new m,Bgt=new ve;$T.unpack=function(e,t,n){t=t??0;let i=e[t++],o;i===OQ?(o=Ui.unpack(e,t,Ggt),t+=Ui.packedLength):(o=bn.unpack(e,t,Lgt),t+=bn.packedLength);let r=m.unpack(e,t,Fgt);t+=m.packedLength;let s=Me.unpack(e,t,Wgt);t+=Me.packedLength;let a=ve.unpack(e,t,Bgt);t+=ve.packedLength;let c=e[t]===1;if(!l(n))return new $T({frustum:o,origin:r,orientation:s,vertexFormat:a,_drawNearPlane:c});let d=i===n._frustumType?n._frustum:void 0;return n._frustum=o.clone(d),n._frustumType=i,n._origin=m.clone(r,n._origin),n._orientation=Me.clone(s,n._orientation),n._vertexFormat=ve.clone(a,n._vertexFormat),n._drawNearPlane=c,n};function WZ(e,t,n,i,o,r,s,a){let c=e/3*2;for(let d=0;d<4;++d)l(t)&&(t[e]=r.x,t[e+1]=r.y,t[e+2]=r.z),l(n)&&(n[e]=s.x,n[e+1]=s.y,n[e+2]=s.z),l(i)&&(i[e]=a.x,i[e+1]=a.y,i[e+2]=a.z),e+=3;o[c]=0,o[c+1]=0,o[c+2]=1,o[c+3]=0,o[c+4]=1,o[c+5]=1,o[c+6]=0,o[c+7]=1}var wgt=new $,Ngt=new F,m$=new F,jEe=new m,qEe=new m,$Ee=new m,Pgt=new m,Xgt=new m,Ygt=new m,Ny=new Array(3),IX=new Array(4);IX[0]=new re(-1,-1,1,1);IX[1]=new re(1,-1,1,1);IX[2]=new re(1,1,1,1);IX[3]=new re(-1,1,1,1);var eSe=new Array(4);for(let e=0;e<4;++e)eSe[e]=new re;$T._computeNearFarPlanes=function(e,t,n,i,o,r,s,a){let c=$.fromQuaternion(t,wgt),d=r??jEe,u=s??qEe,h=a??$Ee;d=$.getColumn(c,0,d),u=$.getColumn(c,1,u),h=$.getColumn(c,2,h),m.normalize(d,d),m.normalize(u,u),m.normalize(h,h),m.negate(d,d);let p=F.computeView(e,h,u,d,Ngt),A,f,b=i.projectionMatrix;if(n===OQ){let C=F.multiply(b,p,m$);f=F.inverse(C,m$)}else A=F.inverseTransformation(p,m$);l(f)?(Ny[0]=i.near,Ny[1]=i.far):(Ny[0]=0,Ny[1]=i.near,Ny[2]=i.far);for(let C=0;C<2;++C)for(let T=0;T<4;++T){let E=re.clone(IX[T],eSe[T]);if(l(f)){E=F.multiplyByVector(f,E,E);let S=1/E.w;m.multiplyByScalar(E,S,E),m.subtract(E,e,E),m.normalize(E,E);let I=m.dot(h,E);m.multiplyByScalar(E,Ny[C]/I,E),m.add(E,e,E)}else{let S=i.offCenterFrustum;l(S)&&(i=S);let I=Ny[C],R=Ny[C+1];E.x=(E.x*(i.right-i.left)+i.left+i.right)*.5,E.y=(E.y*(i.top-i.bottom)+i.bottom+i.top)*.5,E.z=(E.z*(I-R)-I-R)*.5,E.w=1,F.multiplyByVector(A,E,E)}o[12*C+T*3]=E.x,o[12*C+T*3+1]=E.y,o[12*C+T*3+2]=E.z}};$T.createGeometry=function(e){let t=e._frustumType,n=e._frustum,i=e._origin,o=e._orientation,r=e._drawNearPlane,s=e._vertexFormat,a=r?6:5,c=new Float64Array(72);$T._computeNearFarPlanes(i,o,t,n,c);let d=24;c[d]=c[12],c[d+1]=c[13],c[d+2]=c[14],c[d+3]=c[0],c[d+4]=c[1],c[d+5]=c[2],c[d+6]=c[9],c[d+7]=c[10],c[d+8]=c[11],c[d+9]=c[21],c[d+10]=c[22],c[d+11]=c[23],d+=12,c[d]=c[15],c[d+1]=c[16],c[d+2]=c[17],c[d+3]=c[3],c[d+4]=c[4],c[d+5]=c[5],c[d+6]=c[0],c[d+7]=c[1],c[d+8]=c[2],c[d+9]=c[12],c[d+10]=c[13],c[d+11]=c[14],d+=12,c[d]=c[3],c[d+1]=c[4],c[d+2]=c[5],c[d+3]=c[15],c[d+4]=c[16],c[d+5]=c[17],c[d+6]=c[18],c[d+7]=c[19],c[d+8]=c[20],c[d+9]=c[6],c[d+10]=c[7],c[d+11]=c[8],d+=12,c[d]=c[6],c[d+1]=c[7],c[d+2]=c[8],c[d+3]=c[18],c[d+4]=c[19],c[d+5]=c[20],c[d+6]=c[21],c[d+7]=c[22],c[d+8]=c[23],c[d+9]=c[9],c[d+10]=c[10],c[d+11]=c[11],r||(c=c.subarray(12));let u=new xn({position:new we({componentDatatype:H.DOUBLE,componentsPerAttribute:3,values:c})});if(l(s.normal)||l(s.tangent)||l(s.bitangent)||l(s.st)){let p=l(s.normal)?new Float32Array(12*a):void 0,A=l(s.tangent)?new Float32Array(12*a):void 0,f=l(s.bitangent)?new Float32Array(12*a):void 0,b=l(s.st)?new Float32Array(8*a):void 0,C=jEe,T=qEe,E=$Ee,S=m.negate(C,Pgt),I=m.negate(T,Xgt),R=m.negate(E,Ygt);d=0,r&&(WZ(d,p,A,f,b,R,C,T),d+=12),WZ(d,p,A,f,b,E,S,T),d+=12,WZ(d,p,A,f,b,S,R,T),d+=12,WZ(d,p,A,f,b,I,R,S),d+=12,WZ(d,p,A,f,b,C,E,T),d+=12,WZ(d,p,A,f,b,T,E,S),l(p)&&(u.normal=new we({componentDatatype:H.FLOAT,componentsPerAttribute:3,values:p})),l(A)&&(u.tangent=new we({componentDatatype:H.FLOAT,componentsPerAttribute:3,values:A})),l(f)&&(u.bitangent=new we({componentDatatype:H.FLOAT,componentsPerAttribute:3,values:f})),l(b)&&(u.st=new we({componentDatatype:H.FLOAT,componentsPerAttribute:2,values:b}))}let h=new Uint16Array(6*a);for(let p=0;p<a;++p){let A=p*6,f=p*4;h[A]=f,h[A+1]=f+1,h[A+2]=f+2,h[A+3]=f,h[A+4]=f+2,h[A+5]=f+3}return new Ct({attributes:u,indices:h,primitiveType:We.TRIANGLES,boundingSphere:ue.fromVertices(c)})};var eE=$T;var NOi=y(x(),1);var h$=0,Mgt=1;function ZX(e){let t=e.frustum,n=e.orientation,i=e.origin,o=e._drawNearPlane??!0,r,s;t instanceof Ui?(r=h$,s=Ui.packedLength):t instanceof bn&&(r=Mgt,s=bn.packedLength),this._frustumType=r,this._frustum=t.clone(),this._origin=m.clone(i),this._orientation=Me.clone(n),this._drawNearPlane=o,this._workerName="createFrustumOutlineGeometry",this.packedLength=2+s+m.packedLength+Me.packedLength}ZX.pack=function(e,t,n){n=n??0;let i=e._frustumType,o=e._frustum;return t[n++]=i,i===h$?(Ui.pack(o,t,n),n+=Ui.packedLength):(bn.pack(o,t,n),n+=bn.packedLength),m.pack(e._origin,t,n),n+=m.packedLength,Me.pack(e._orientation,t,n),n+=Me.packedLength,t[n]=e._drawNearPlane?1:0,t};var vgt=new Ui,Ugt=new bn,Dgt=new Me,kgt=new m;ZX.unpack=function(e,t,n){t=t??0;let i=e[t++],o;i===h$?(o=Ui.unpack(e,t,vgt),t+=Ui.packedLength):(o=bn.unpack(e,t,Ugt),t+=bn.packedLength);let r=m.unpack(e,t,kgt);t+=m.packedLength;let s=Me.unpack(e,t,Dgt);t+=Me.packedLength;let a=e[t]===1;if(!l(n))return new ZX({frustum:o,origin:r,orientation:s,_drawNearPlane:a});let c=i===n._frustumType?n._frustum:void 0;return n._frustum=o.clone(c),n._frustumType=i,n._origin=m.clone(r,n._origin),n._orientation=Me.clone(s,n._orientation),n._drawNearPlane=a,n};ZX.createGeometry=function(e){let t=e._frustumType,n=e._frustum,i=e._origin,o=e._orientation,r=e._drawNearPlane,s=new Float64Array(24);eE._computeNearFarPlanes(i,o,t,n,s);let a=new xn({position:new we({componentDatatype:H.DOUBLE,componentsPerAttribute:3,values:s})}),c,d,u=r?2:1,h=new Uint16Array(8*(u+1)),p=r?0:1;for(;p<2;++p)c=r?p*8:0,d=p*4,h[c]=d,h[c+1]=d+1,h[c+2]=d+1,h[c+3]=d+2,h[c+4]=d+2,h[c+5]=d+3,h[c+6]=d+3,h[c+7]=d;for(p=0;p<2;++p)c=(u+p)*8,d=p*4,h[c]=d,h[c+1]=d+4,h[c+2]=d+1,h[c+3]=d+5,h[c+4]=d+2,h[c+5]=d+6,h[c+6]=d+3,h[c+7]=d+7;return new Ct({attributes:a,indices:h,primitiveType:We.LINES,boundingSphere:ue.fromVertices(s)})};var RX=ZX;var vOi=y(x(),1);function zQ(){fe.throwInstantiationError()}Object.defineProperties(zQ.prototype,{credit:{get:fe.throwInstantiationError}});zQ.getCreditsFromResult=function(e){if(l(e.attributions))return e.attributions.map(Et.getIonCredit)};zQ.prototype.geocode=fe.throwInstantiationError;var FZ=zQ;var DOi=y(x(),1),Qgt={SEARCH:0,AUTOCOMPLETE:1},Py=Object.freeze(Qgt);var OOi=y(x(),1);function tSe(){fe.throwInstantiationError()}tSe.createGeometry=function(e){fe.throwInstantiationError()};var f$=tSe;var HOi=y(x(),1);function Ogt(e,t,n){let i=new Uint8ClampedArray(e.buffer),o=new ImageData(i,t,n),r=document.createElement("canvas");return r.width=t,r.height=n,r.getContext("2d").putImageData(o,0,0),r}var VX=Ogt;var fzi=y(x(),1),qgt=y(p$(),1);var tzi=y(x(),1);var jOi=y(x(),1);function zgt(e,t){return(e&t)!==0}var cl=zgt;var Hgt=[1,2,4,8],nSe=15,Jgt=16,Kgt=64,jgt=128;function $p(e,t,n,i,o,r){this._bits=e,this.cnodeVersion=t,this.imageryVersion=n,this.terrainVersion=i,this.imageryProvider=o,this.terrainProvider=r,this.ancestorHasTerrain=!1,this.terrainState=void 0}$p.clone=function(e,t){return l(t)?(t._bits=e._bits,t.cnodeVersion=e.cnodeVersion,t.imageryVersion=e.imageryVersion,t.terrainVersion=e.terrainVersion,t.imageryProvider=e.imageryProvider,t.terrainProvider=e.terrainProvider):t=new $p(e._bits,e.cnodeVersion,e.imageryVersion,e.terrainVersion,e.imageryProvider,e.terrainProvider),t.ancestorHasTerrain=e.ancestorHasTerrain,t.terrainState=e.terrainState,t};$p.prototype.setParent=function(e){this.ancestorHasTerrain=e.ancestorHasTerrain||this.hasTerrain()};$p.prototype.hasSubtree=function(){return cl(this._bits,Jgt)};$p.prototype.hasImagery=function(){return cl(this._bits,Kgt)};$p.prototype.hasTerrain=function(){return cl(this._bits,jgt)};$p.prototype.hasChildren=function(){return cl(this._bits,nSe)};$p.prototype.hasChild=function(e){return cl(this._bits,Hgt[e])};$p.prototype.getChildBitmask=function(){return this._bits&nSe};var GX=$p;function $gt(e){let t=e.length,n=new ArrayBuffer(t),i=new Uint8Array(n);for(let o=0;o<t;++o)i[o]=e.charCodeAt(o);return n}var ebt=$gt(`E\xF4\xBD\vy\xE2jE"\x92,\xCDq\xF8IFgQ\0B%\xC6\xE8a,f)\b\xC64\xDCjb%y
wmi\xD6\xF0\x9Ck\x93\xA1\xBDNu\xE0A[\xDF@V\f\xD9\xBBr\x9B\x81|3S\xEEOl\xD4q\xB0{\xC0\x7FEVZ\xADwUe\v3\x92*\xACl5\xC50s\xF83>mF8J\xB4\xDD\xF0.\xDDu\xDA\x8CDt"\xFAa"\f3"So\xAF9D\v\x8C9\xD99L\xB9\xBF\x7F\xAB\\\x8CP_\x9F"ux\xE9\x07q\x91h;\xC1\xC4\x9B\x7F\xF0<VqH\x82'UfYNe\x98u\xA3aF}a?A\0\x9F\xD7\xB44M\xCE\x87F\xB0\xD5\xB8\x8A'{\x8B\xDC+\xBBMg0\xC8\xD1\xF6\\\x8FP\xFA[/F\x9Bn5/'C.\xEB
\f^\xA5s\x1Be4\xE5l.jC'c#U\xA9?q{gC}:\xAF\xCD\xE2TU\x9C\xFDK\xC6\xE2\x9F/(\xED\xCB\\\xC6-f\x07\x88\xA7;/*"N\xB0k.\xDD\r\x95}}G\xBAC\xB2\xB2+>M\xAA>}\xE6\xCEI\x89\xC6\xE6x\fa1-\xA4O\xA5~q \x88\xEC\r1\xE8N\v\0nPh}=\b\r\x95\xA6n\xA3h\x97$[k\xF3#\xF3\xB6s\xB3\r\v@\xC0\x9F\xD8Q]\xFA".j\xDFI\0\xB9\xA0wU\xC6\xEFj\xBF{GL\x7F\x83\xEE\xDC\xDCF\x85\xA9\xADS\x07+S4\x07\xFF\x94Y\xE48\xE81\x83N\xB9XFk\xCB-#\x86\x92p\x005\x88"\xCF1\xB2&/\xE7\xC3u-6,rt\xB0#G\xB7\xD3\xD1&\x857r\xE2\0\x8CD\xCF\xDA3-\xDE\`\x86i#i*|\xCDKQ\r\x95T9w.)\xEA\x1B\xA6P\xA2j\x8FoP\x99\\>T\xFB\xEFP[\v\x07E\x89m(w7\xDB\x8EJfJo\x99 \xE5p\xE2\xB9q~\fmI-z\xFEr\xC7\xF2Y0\x8F\xBB]s\xE5\xC9 \xEAx\xEC \x90\xF0\x8A\x7FB|G\`\xB0\xBD&\xB7q\xB6\xC7\x9F\xD13\x82=\xD3\xAB\xEEc\x99\xC8+S\xA0D\\q\xC6\xCCD2O<\xCA\xC0)=R\xD3aX\xA9}e\xB4\xDC\xCF\r\xF4=\xF1\b\xA9B\xDA# \xD8\xBF^PI\xF8M\xC0\xCBGLO\xF7{+\xD8\xC51\x92;\xB5o\xDCl\r\x92\x88\xD1\x9E\xDB?\xE2\xE9\xDA_\xD4\x84\xE2FaZ\xDEU\xCF\xA4\0\xBE\xFD\xCEg\xF1Ji\x97\xE6 H\xD8]\x7F~\xAEq N\xAE\xC0V\xA9\x91<\x82r\xE7v\xEC)I\xD6]-\x83\xE3\xDB6\xA9;f\x97\x87j\xD5\xB6=P^R\xB9K\xC7sWx\xC9\xF4.Y\x07\x95\x93o\xD0KW>''\xC7\`\xDB;\xED\x9ASD>?\x8D\x92mw\xA2
\xEB?R\xA8\xC6U^1I7\x85\xF4\xC5&-\xA9\xBF\x8B'T\xDA\xC3j \xE5*x\xB0\xD6\x90pr\xAA\x8Bh\xBD\x88\xF7_H\xB1~\xC0XL?f\xF9>\xE1e\xC0p\xA7\xCF8i\xAF\xF0VldI\x9C'\xADxtO\xC2\x87\xDEV9\0\xDAw\v\xCB-\x1B\x89\xFB5O\xF5\bQ\`\xC1
ZGM&30x\xDA\xC0\x9CFG\xE2[y\`In7gS
>\xE9\xECF9\xB2\xF14\r\xC6\x84Sun\xE1\fY\xD9\xDE)\x85{II\xA5wy\xBEIV.6\xE7\v:\xBBOb{\xD2M1\x95/\xBD8{\xA8O!\xE1\xECFpv\x95})"x\x88
\x90\xDD\x9D\\\xDA\xDEQ\xCF\xF0\xFCYRe|3\xDF\xF3H\xDA\xBB*u\xDB\`\xB2\xD4\xFC\xED\x1B\xEC\x7F5\xA8\xFF(1\x07-\xC8\xDC\x88F|\x8A["`);function vu(e){this.imageryPresent=!0,this.protoImagery=void 0,this.terrainPresent=!0,this.negativeAltitudeExponentBias=32,this.negativeAltitudeThreshold=L.EPSILON12,this.providers={},this.key=void 0,this._resource=void 0,this._quadPacketVersion=1,this._tileInfo={},this._subtreePromises={}}Object.defineProperties(vu.prototype,{url:{get:function(){return this._resource.url}},proxy:{get:function(){return this._resource.proxy}},resource:{get:function(){return this._resource}}});vu.fromUrl=async function(e){let t=e;typeof t!="string"&&!(t instanceof Le)&&(t=e.url);let n=Le.createIfNeeded(t);n.appendForwardSlash();let i=new vu;i._resource=n;try{await tbt(i),await i.getQuadTreePacket("",i._quadPacketVersion)}catch(o){let r=`An error occurred while accessing ${oSe(i,"",1).url}: ${o}`;throw new me(r)}return i};vu.tileXYToQuadKey=function(e,t,n){let i="";for(let o=n;o>=0;--o){let r=1<<o,s=0;cl(t,r)?cl(e,r)&&(s|=1):(s|=2,cl(e,r)||(s|=1)),i+=s}return i};vu.quadKeyToTileXY=function(e){let t=0,n=0,i=e.length-1;for(let o=i;o>=0;--o){let r=1<<o,s=+e[i-o];cl(s,2)?cl(s,1)||(t|=r):(n|=r,cl(s,1)&&(t|=r))}return{x:t,y:n,level:i}};vu.prototype.isValid=function(e){let t=this.getTileInformationFromQuadKey(e);if(l(t))return t!==null;let n=!0,i=e,o;for(;i.length>1;)if(o=i.substring(i.length-1),i=i.substring(0,i.length-1),t=this.getTileInformationFromQuadKey(i),l(t)){!t.hasSubtree()&&!t.hasChild(parseInt(o))&&(n=!1);break}else if(t===null){n=!1;break}return n};var iSe=new $n("decodeGoogleEarthEnterprisePacket");vu.prototype.getQuadTreePacket=function(e,t,n){t=t??1,e=e??"";let o=oSe(this,e,t,n).fetchArrayBuffer();if(!l(o))return;let r=this._tileInfo,s=this.key;return o.then(function(a){return iSe.scheduleTask({buffer:a,quadKey:e,type:"Metadata",key:s},[a]).then(function(d){let u,h=-1;if(e!==""){h=e.length+1;let f=d[e];u=r[e],u._bits|=f._bits,delete d[e]}let p=Object.keys(d);p.sort(function(f,b){return f.length-b.length});let A=p.length;for(let f=0;f<A;++f){let b=p[f];if(d[b]!==null){let T=GX.clone(d[b]),E=b.length;if(E===h)T.setParent(u);else if(E>1){let S=r[b.substring(0,b.length-1)];T.setParent(S)}r[b]=T}else r[b]=null}})})};vu.prototype.populateSubtree=function(e,t,n,i){let o=vu.tileXYToQuadKey(e,t,n);return b$(this,o,i)};function b$(e,t,n){let i=e._tileInfo,o=t,r=i[o];if(l(r)&&(!r.hasSubtree()||r.hasChildren()))return r;for(;r===void 0&&o.length>1;)o=o.substring(0,o.length-1),r=i[o];let s,a=e._subtreePromises,c=a[o];if(l(c))return c.then(function(){return s=new Tr({throttle:n.throttle,throttleByServer:n.throttleByServer,type:n.type,priorityFunction:n.priorityFunction}),b$(e,t,s)});if(!l(r)||!r.hasSubtree())return Promise.reject(new me(`Couldn't load metadata for tile ${t}`));if(c=e.getQuadTreePacket(o,r.cnodeVersion,n),!!l(c))return a[o]=c,c.then(function(){return s=new Tr({throttle:n.throttle,throttleByServer:n.throttleByServer,type:n.type,priorityFunction:n.priorityFunction}),b$(e,t,s)}).finally(function(){delete a[o]})}vu.prototype.getTileInformation=function(e,t,n){let i=vu.tileXYToQuadKey(e,t,n);return this._tileInfo[i]};vu.prototype.getTileInformationFromQuadKey=function(e){return this._tileInfo[e]};function oSe(e,t,n,i){return e._resource.getDerivedResource({url:`flatfile?q2-0${t}-q.${n.toString()}`,request:i})}var A$,g$;function tbt(e){let t=e._resource.getDerivedResource({url:"dbRoot.v5",queryParameters:{output:"proto"}});if(!l(g$)){let n=en("ThirdParty/google-earth-dbroot-parser.js"),i=window.cesiumGoogleEarthDbRootParser;g$=lx(n).then(function(){A$=window.cesiumGoogleEarthDbRootParser(qgt),l(i)?window.cesiumGoogleEarthDbRootParser=i:delete window.cesiumGoogleEarthDbRootParser})}return g$.then(function(){return t.fetchArrayBuffer()}).then(function(n){let i=A$.EncryptedDbRootProto.decode(new Uint8Array(n)),o=i.encryptionData,r=o.byteOffset,s=r+o.byteLength,a=e.key=o.buffer.slice(r,s);o=i.dbrootData,r=o.byteOffset,s=r+o.byteLength;let c=o.buffer.slice(r,s);return iSe.scheduleTask({buffer:c,type:"DbRoot",key:a},[c])}).then(function(n){let i=A$.DbRootProto.decode(new Uint8Array(n.buffer));if(e.imageryPresent=i.imageryPresent??e.imageryPresent,e.protoImagery=i.protoImagery,e.terrainPresent=i.terrainPresent??e.terrainPresent,l(i.endSnippet)&&l(i.endSnippet.model)){let a=i.endSnippet.model;e.negativeAltitudeExponentBias=a.negativeAltitudeExponentBias??e.negativeAltitudeExponentBias,e.negativeAltitudeThreshold=a.compressedNegativeAltitudeThreshold??e.negativeAltitudeThreshold}l(i.databaseVersion)&&(e._quadPacketVersion=i.databaseVersion.quadtreeVersion??e._quadPacketVersion);let o=e.providers,r=i.providerInfo??[],s=r.length;for(let a=0;a<s;++a){let c=r[a],d=c.copyrightString;l(d)&&(o[c.providerId]=new Et(d.value))}}).catch(function(){console.log(`Failed to retrieve ${t.url}. Using defaults.`),e.key=ebt})}var yb=vu;var Lzi=y(x(),1);function tE(e){e=e??Q.EMPTY_OBJECT,this._buffer=e.buffer,this._credits=e.credits,this._negativeAltitudeExponentBias=e.negativeAltitudeExponentBias,this._negativeElevationThreshold=e.negativeElevationThreshold;let t=e.childTileMask??15,n=t&3;n|=t&4?8:0,n|=t&8?4:0,this._childTileMask=n,this._createdByUpsampling=e.createdByUpsampling??!1,this._skirtHeight=void 0,this._bufferType=this._buffer.constructor,this._mesh=void 0,this._minimumHeight=void 0,this._maximumHeight=void 0}Object.defineProperties(tE.prototype,{credits:{get:function(){return this._credits}},waterMask:{get:function(){}}});var aSe="createVerticesFromGoogleEarthEnterpriseBuffer",nbt=new $n(aSe),ibt=new $n(aSe,Yd.maximumAsynchronousTasks),rSe=new de,HQ=new de;tE.prototype.createMesh=function(e){e=e??Q.EMPTY_OBJECT;let t=e.tilingScheme,n=e.x,i=e.y,o=e.level,r=e.exaggeration??1,s=e.exaggerationRelativeHeight??0,a=e.throttle??!0,c=t.ellipsoid;t.tileXYToNativeRectangle(n,i,o,rSe),t.tileXYToRectangle(n,i,o,HQ);let d=c.cartographicToCartesian(de.center(HQ)),h=40075.16/(1<<o);this._skirtHeight=Math.min(h*8,1e3);let A=(a?ibt:nbt).scheduleTask({buffer:this._buffer,nativeRectangle:rSe,rectangle:HQ,relativeToCenter:d,ellipsoid:c,skirtHeight:this._skirtHeight,exaggeration:r,exaggerationRelativeHeight:s,includeWebMercatorT:!0,negativeAltitudeExponentBias:this._negativeAltitudeExponentBias,negativeElevationThreshold:this._negativeElevationThreshold});if(!l(A))return;let f=this;return A.then(function(b){return f._mesh=new hc(d,new Float32Array(b.vertices),new Uint16Array(b.indices),b.indexCountWithoutSkirts,b.vertexCountWithoutSkirts,b.minimumHeight,b.maximumHeight,HQ,ue.clone(b.boundingSphere3D),m.clone(b.occludeePointInScaledSpace),b.numberOfAttributes,nn.clone(b.orientedBoundingBox),yr.clone(b.encoding),b.westIndicesSouthToNorth,b.southIndicesEastToWest,b.eastIndicesNorthToSouth,b.northIndicesWestToEast),f._minimumHeight=b.minimumHeight,f._maximumHeight=b.maximumHeight,f._buffer=void 0,f._mesh})};tE.prototype.interpolateHeight=function(e,t,n){let i=L.clamp((t-e.west)/e.width,0,1),o=L.clamp((n-e.south)/e.height,0,1);return l(this._mesh)?cbt(this,i,o):ubt(this,i,o,e)};var obt=new $n("upsampleQuantizedTerrainMesh",Yd.maximumAsynchronousTasks);tE.prototype.upsample=function(e,t,n,i,o,r,s){let a=this._mesh;if(!l(this._mesh))return;let c=t*2!==o,d=n*2===r,u=e.ellipsoid,h=e.tileXYToRectangle(o,r,s),p=obt.scheduleTask({vertices:a.vertices,indices:a.indices,indexCountWithoutSkirts:a.indexCountWithoutSkirts,vertexCountWithoutSkirts:a.vertexCountWithoutSkirts,encoding:a.encoding,minimumHeight:this._minimumHeight,maximumHeight:this._maximumHeight,isEastChild:c,isNorthChild:d,childRectangle:h,ellipsoid:u});if(!l(p))return;let A=this;return p.then(function(f){let b=new Uint16Array(f.vertices),C=Ue.createTypedArray(b.length/3,f.indices),T=A._skirtHeight;return new JT({quantizedVertices:b,indices:C,minimumHeight:f.minimumHeight,maximumHeight:f.maximumHeight,boundingSphere:ue.clone(f.boundingSphere),orientedBoundingBox:nn.clone(f.orientedBoundingBox),horizonOcclusionPoint:m.clone(f.horizonOcclusionPoint),westIndices:f.westIndices,southIndices:f.southIndices,eastIndices:f.eastIndices,northIndices:f.northIndices,westSkirtHeight:T,southSkirtHeight:T,eastSkirtHeight:T,northSkirtHeight:T,childTileMask:0,createdByUpsampling:!0,credits:A._credits})})};tE.prototype.isChildAvailable=function(e,t,n,i){let o=2;return n!==e*2&&++o,i!==t*2&&(o-=2),(this._childTileMask&1<<o)!==0};tE.prototype.wasCreatedByUpsampling=function(){return this._createdByUpsampling};var rbt=new M,sbt=new M,abt=new M,cSe=new m;function cbt(e,t,n){let i=e._mesh,o=i.vertices,r=i.encoding,s=i.indices;for(let a=0,c=s.length;a<c;a+=3){let d=s[a],u=s[a+1],h=s[a+2],p=r.decodeTextureCoordinates(o,d,rbt),A=r.decodeTextureCoordinates(o,u,sbt),f=r.decodeTextureCoordinates(o,h,abt),b=Ff.computeBarycentricCoordinates(t,n,p.x,p.y,A.x,A.y,f.x,f.y,cSe);if(b.x>=-1e-15&&b.y>=-1e-15&&b.z>=-1e-15){let C=r.decodeHeight(o,d),T=r.decodeHeight(o,u),E=r.decodeHeight(o,h);return b.x*C+b.y*T+b.z*E}}}var lbt=Uint16Array.BYTES_PER_ELEMENT,sSe=Uint32Array.BYTES_PER_ELEMENT,y$=Int32Array.BYTES_PER_ELEMENT,dbt=Float32Array.BYTES_PER_ELEMENT,x$=Float64Array.BYTES_PER_ELEMENT;function ubt(e,t,n,i){let o=e._buffer,r=0,s=0,a=0;n>.5?(t>.5?(r=2,s=.5):r=3,a=.5):t>.5&&(r=1,s=.5);let c=new DataView(o),d=0;for(let R=0;R<r;++R)d+=c.getUint32(d,!0),d+=sSe;d+=sSe,d+=2*x$;let u=L.toRadians(c.getFloat64(d,!0)*180);d+=x$;let h=L.toRadians(c.getFloat64(d,!0)*180);d+=x$;let p=i.width/u/2,A=i.height/h/2,f=c.getInt32(d,!0);d+=y$;let b=c.getInt32(d,!0)*3;d+=y$,d+=y$;let C=new Array(f),T=new Array(f),E=new Array(f),S;for(S=0;S<f;++S)C[S]=s+c.getUint8(d++)*p,T[S]=a+c.getUint8(d++)*A,E[S]=c.getFloat32(d,!0)*6371010,d+=dbt;let I=new Array(b);for(S=0;S<b;++S)I[S]=c.getUint16(d,!0),d+=lbt;for(S=0;S<b;S+=3){let R=I[S],V=I[S+1],W=I[S+2],B=C[R],N=C[V],P=C[W],g=T[R],_=T[V],Z=T[W],G=Ff.computeBarycentricCoordinates(t,n,B,g,N,_,P,Z,cSe);if(G.x>=-1e-15&&G.y>=-1e-15&&G.z>=-1e-15)return G.x*E[R]+G.y*E[V]+G.z*E[W]}}var BZ=tE;var Jzi=y(x(),1);var nh={UNKNOWN:0,NONE:1,SELF:2,PARENT:3},JQ=new q;function KQ(){this._terrainCache={},this._lastTidy=q.now()}KQ.prototype.add=function(e,t){this._terrainCache[e]={buffer:t,timestamp:q.now()}};KQ.prototype.get=function(e){let n=this._terrainCache[e];if(l(n))return delete this._terrainCache[e],n.buffer};KQ.prototype.tidy=function(){if(q.now(JQ),q.secondsDifference(JQ,this._lastTidy)>10){let e=this._terrainCache,t=Object.keys(e),n=t.length;for(let i=0;i<n;++i){let o=t[i],r=e[o];q.secondsDifference(JQ,r.timestamp)>10&&delete e[o]}q.clone(JQ,this._lastTidy)}};function Xy(e){e=e??Q.EMPTY_OBJECT,this._tilingScheme=new zi({numberOfLevelZeroTilesX:2,numberOfLevelZeroTilesY:2,rectangle:new de(-L.PI,-L.PI,L.PI,L.PI),ellipsoid:e.ellipsoid});let t=e.credit;typeof t=="string"&&(t=new Et(t)),this._credit=t,this._levelZeroMaximumGeometricError=40075.16,this._terrainCache=new KQ,this._terrainPromises={},this._terrainRequests={},this._errorEvent=new xe}Object.defineProperties(Xy.prototype,{url:{get:function(){return this._metadata.url}},proxy:{get:function(){return this._metadata.proxy}},tilingScheme:{get:function(){return this._tilingScheme}},errorEvent:{get:function(){return this._errorEvent}},credit:{get:function(){return this._credit}},hasWaterMask:{get:function(){return!1}},hasVertexNormals:{get:function(){return!1}},availability:{get:function(){}}});Xy.fromMetadata=function(e,t){if(!e.terrainPresent)throw new me(`The server ${e.url} doesn't have terrain`);let n=new Xy(t);return n._metadata=e,n};var mbt=new $n("decodeGoogleEarthEnterprisePacket");function lSe(e,t,n){let i=t.getChildBitmask();if(t.terrainState===nh.PARENT){i=0;for(let o=0;o<4;++o){let r=n.getTileInformationFromQuadKey(e+o.toString());l(r)&&r.hasTerrain()&&(i|=1<<o)}}return i}Xy.prototype.requestTileGeometry=function(e,t,n,i){let o=yb.tileXYToQuadKey(e,t,n),r=this._terrainCache,s=this._metadata,a=s.getTileInformationFromQuadKey(o);if(!l(a))return Promise.reject(new me("Terrain tile doesn't exist"));let c=a.terrainState;l(c)||(c=a.terrainState=nh.UNKNOWN);let d=r.get(o);if(l(d)){let T=s.providers[a.terrainProvider];return Promise.resolve(new BZ({buffer:d,childTileMask:lSe(o,a,s),credits:l(T)?[T]:void 0,negativeAltitudeExponentBias:s.negativeAltitudeExponentBias,negativeElevationThreshold:s.negativeAltitudeThreshold}))}if(r.tidy(),a.ancestorHasTerrain){if(c===nh.NONE)return Promise.reject(new me("Terrain tile doesn't exist"))}else return Promise.resolve(new Fc({buffer:new Uint8Array(256),width:16,height:16}));let u,h=o,p=-1;switch(c){case nh.SELF:p=a.terrainVersion;break;case nh.PARENT:h=h.substring(0,h.length-1),u=s.getTileInformationFromQuadKey(h),p=u.terrainVersion;break;case nh.UNKNOWN:a.hasTerrain()?p=a.terrainVersion:(h=h.substring(0,h.length-1),u=s.getTileInformationFromQuadKey(h),l(u)&&u.hasTerrain()&&(p=u.terrainVersion));break}if(p<0)return Promise.reject(new me("Terrain tile doesn't exist"));let A=this._terrainPromises,f=this._terrainRequests,b,C;if(l(A[h]))b=A[h],C=f[h];else{C=i;let T=hbt(this,h,p,C).fetchArrayBuffer();if(!l(T))return;b=T.then(function(E){return l(E)?mbt.scheduleTask({buffer:E,type:"Terrain",key:s.key},[E]).then(function(S){let I=s.getTileInformationFromQuadKey(h);I.terrainState=nh.SELF,r.add(h,S[0]);let R=I.terrainProvider,V=S.length-1;for(let W=0;W<V;++W){let B=h+W.toString(),N=s.getTileInformationFromQuadKey(B);l(N)&&(r.add(B,S[W+1]),N.terrainState=nh.PARENT,N.terrainProvider===0&&(N.terrainProvider=R))}}):Promise.reject(new me("Failed to load terrain."))}),A[h]=b,f[h]=C,b=b.finally(function(){delete A[h],delete f[h]})}return b.then(function(){let T=r.get(o);if(l(T)){let E=s.providers[a.terrainProvider];return new BZ({buffer:T,childTileMask:lSe(o,a,s),credits:l(E)?[E]:void 0,negativeAltitudeExponentBias:s.negativeAltitudeExponentBias,negativeElevationThreshold:s.negativeAltitudeThreshold})}return Promise.reject(new me("Failed to load terrain."))}).catch(function(T){return C.state===Ai.CANCELLED?(i.state=C.state,Promise.reject(T)):(a.terrainState=nh.NONE,Promise.reject(T))})};Xy.prototype.getLevelMaximumGeometricError=function(e){return this._levelZeroMaximumGeometricError/(1<<e)};Xy.prototype.getTileDataAvailable=function(e,t,n){let i=this._metadata,o=yb.tileXYToQuadKey(e,t,n),r=i.getTileInformation(e,t,n);if(r===null)return!1;if(l(r)){if(!r.ancestorHasTerrain)return!0;let s=r.terrainState;if(s===nh.NONE)return!1;if((!l(s)||s===nh.UNKNOWN)&&(r.terrainState=nh.UNKNOWN,!r.hasTerrain())){o=o.substring(0,o.length-1);let a=i.getTileInformationFromQuadKey(o);if(!l(a)||!a.hasTerrain())return!1}return!0}if(i.isValid(o)){let s=new Tr({throttle:!1,throttleByServer:!0,type:Ds.TERRAIN});i.populateSubtree(e,t,n,s)}return!1};Xy.prototype.loadTileDataAvailability=function(e,t,n){};function hbt(e,t,n,i){return n=l(n)&&n>0?n:1,e._metadata.resource.getDerivedResource({url:`flatfile?f1c-0${t}-t.${n.toString()}`,request:i})}var C$=Xy;var n3i=y(x(),1);var fbt="https://maps.googleapis.com/maps/api/geocode/json",dSe='<img alt="Google" src="https://assets.ion.cesium.com/google-credit.png" style="vertical-align:-5px">';function T$(e){e=e??Q.EMPTY_OBJECT;let t=e.key;this._resource=new Le({url:fbt,queryParameters:{key:t}}),this._credit=new Et(dSe,!0)}Object.defineProperties(T$.prototype,{credit:{get:function(){return this._credit}}});T$.prototype.geocode=async function(e){let n=await this._resource.getDerivedResource({queryParameters:{address:e}}).fetchJson();if(n.status==="ZERO_RESULTS")return[];if(n.status!=="OK")throw new me(`GoogleGeocoderService got a bad response ${n.status}: ${n.error_message}`);return n.results.map(o=>{let r=o.geometry.viewport.southwest,s=o.geometry.viewport.northeast;return{displayName:o.formatted_address,destination:de.fromDegrees(r.lng,r.lat,s.lng,s.lat),attribution:{html:dSe,collapsible:!1}}})};var E$=T$;var u3i=y(x(),1);var o3i=y(x(),1);function pbt(e,t,n,i){this.rightAscension=e,this.declination=t,this.rotation=n,this.rotationRate=i}var LX=pbt;var SSe={},Abt=32.184,gbt=2451545,uSe=-.0529921,mSe=-.1059842,hSe=13.0120009,fSe=13.3407154,pSe=.9856003,ASe=26.4057084,gSe=13.064993,bSe=.3287146,ySe=1.7484877,xSe=-.1589763,CSe=.0036096,TSe=.1643573,ESe=12.9590088,S$=new q;SSe.ComputeMoon=function(e,t){l(e)||(e=q.now()),S$=q.addSeconds(e,Abt,S$);let n=q.totalDays(S$)-gbt,i=n/di.DAYS_PER_JULIAN_CENTURY,o=(125.045+uSe*n)*L.RADIANS_PER_DEGREE,r=(250.089+mSe*n)*L.RADIANS_PER_DEGREE,s=(260.008+hSe*n)*L.RADIANS_PER_DEGREE,a=(176.625+fSe*n)*L.RADIANS_PER_DEGREE,c=(357.529+pSe*n)*L.RADIANS_PER_DEGREE,d=(311.589+ASe*n)*L.RADIANS_PER_DEGREE,u=(134.963+gSe*n)*L.RADIANS_PER_DEGREE,h=(276.617+bSe*n)*L.RADIANS_PER_DEGREE,p=(34.226+ySe*n)*L.RADIANS_PER_DEGREE,A=(15.134+xSe*n)*L.RADIANS_PER_DEGREE,f=(119.743+CSe*n)*L.RADIANS_PER_DEGREE,b=(239.961+TSe*n)*L.RADIANS_PER_DEGREE,C=(25.053+ESe*n)*L.RADIANS_PER_DEGREE,T=Math.sin(o),E=Math.sin(r),S=Math.sin(s),I=Math.sin(a),R=Math.sin(c),V=Math.sin(d),W=Math.sin(u),B=Math.sin(h),N=Math.sin(p),P=Math.sin(A),g=Math.sin(f),_=Math.sin(b),Z=Math.sin(C),G=Math.cos(o),w=Math.cos(r),X=Math.cos(s),k=Math.cos(a),v=Math.cos(c),D=Math.cos(d),Y=Math.cos(u),O=Math.cos(h),J=Math.cos(p),te=Math.cos(A),z=Math.cos(f),j=Math.cos(b),ee=Math.cos(C),ge=(269.9949+.0031*i-3.8787*T-.1204*E+.07*S-.0172*I+.0072*V-.0052*P+.0043*Z)*L.RADIANS_PER_DEGREE,ye=(66.5392+.013*i+1.5419*G+.0239*w-.0278*X+.0068*k-.0029*D+9e-4*Y+8e-4*te-9e-4*ee)*L.RADIANS_PER_DEGREE,ae=(38.3213+13.17635815*n-14e-13*n*n+3.561*T+.1208*E-.0642*S+.0158*I+.0252*R-.0066*V-.0047*W-.0046*B+.0028*N+.0052*P+.004*g+.0019*_-.0044*Z)*L.RADIANS_PER_DEGREE,Ce=(13.17635815-14e-13*(2*n)+3.561*G*uSe+.1208*w*mSe-.0642*X*hSe+.0158*k*fSe+.0252*v*pSe-.0066*D*ASe-.0047*Y*gSe-.0046*O*bSe+.0028*J*ySe+.0052*te*xSe+.004*z*CSe+.0019*j*TSe-.0044*ee*ESe)/86400*L.RADIANS_PER_DEGREE;return l(t)||(t=new LX),t.rightAscension=ge,t.declination=ye,t.rotation=ae,t.rotationRate=Ce,t};var WX=SSe;var x3i=y(x(),1);function _Se(e){(!l(e)||typeof e!="function")&&(e=WX.ComputeMoon),this._computeFunction=e}var bbt=new m,ybt=new m,xbt=new m;function Cbt(e,t,n){let i=bbt;i.x=Math.cos(e+L.PI_OVER_TWO),i.y=Math.sin(e+L.PI_OVER_TWO),i.z=0;let o=Math.cos(t),r=xbt;r.x=o*Math.cos(e),r.y=o*Math.sin(e),r.z=Math.sin(t);let s=m.cross(r,i,ybt);return l(n)||(n=new $),n[0]=i.x,n[1]=s.x,n[2]=r.x,n[3]=i.y,n[4]=s.y,n[5]=r.y,n[6]=i.z,n[7]=s.z,n[8]=r.z,n}var Tbt=new $,Ebt=new Me;_Se.prototype.evaluate=function(e,t){l(e)||(e=q.now());let n=this._computeFunction(e),i=Cbt(n.rightAscension,n.declination,t),o=L.zeroToTwoPi(n.rotation),r=Me.fromAxisAngle(m.UNIT_Z,o,Ebt),s=$.fromQuaternion(Me.conjugate(r,r),Tbt);return $.multiply(s,i,i)};var FX=_Se;var E3i=y(x(),1);var BX={};BX.type=void 0;BX.getRequiredDataPoints=fe.throwInstantiationError;BX.interpolateOrderZero=fe.throwInstantiationError;BX.interpolate=fe.throwInstantiationError;var _$=BX;var _3i=y(x(),1),Sbt={GOOGLE:"GOOGLE",BING:"BING",DEFAULT:"DEFAULT"},xb=Object.freeze(Sbt);var U3i=y(x(),1);var W3i=y(x(),1);function I$(e){this._url=Le.createIfNeeded(e),this._url.appendForwardSlash()}Object.defineProperties(I$.prototype,{url:{get:function(){return this._url}},credit:{get:function(){}}});I$.prototype.geocode=async function(e,t){return this._url.getDerivedResource({url:t===Py.AUTOCOMPLETE?"autocomplete":"search",queryParameters:{text:e}}).fetchJson().then(function(i){return i.features.map(function(o){let r,s=o.bbox;if(l(s))r=de.fromDegrees(s[0],s[1],s[2],s[3]);else{let a=o.geometry.coordinates[0],c=o.geometry.coordinates[1];r=m.fromDegrees(a,c)}return{displayName:o.properties.label,destination:r,attributions:i.attributions}})})};var wX=I$;function _bt(e){if(!Object.values(xb).some(t=>t===e))throw new fe(`Invalid geocodeProviderType: "${e}"`)}var ISe=Object.freeze({[xb.GOOGLE]:"google",[xb.BING]:"bing",[xb.DEFAULT]:void 0});function Ibt(e){return ISe[e]}function Zbt(e){return Object.entries(ISe).find(t=>t[1]===e)[0]}function Z$(e){e=e??Q.EMPTY_OBJECT;let t=e.geocodeProviderType??xb.DEFAULT,n=e.accessToken??Nh.defaultAccessToken,i=Le.createIfNeeded(e.server??Nh.defaultServer);i.appendForwardSlash();let o=Nh.getDefaultTokenCredit(n);l(o)&&e.scene.frameState.creditDisplay.addStaticCredit(Et.clone(o));let r=i.getDerivedResource({url:"v1/geocode"});l(n)&&r.appendQueryParameters({access_token:n}),this._accessToken=n,this._server=i,this._pelias=new wX(r),this.geocodeProviderType=t}Object.defineProperties(Z$.prototype,{credit:{get:function(){}},geocodeProviderType:{get:function(){return Zbt(this._pelias.url.queryParameters.geocoder)},set:function(e){_bt(e);let t={...this._pelias.url.queryParameters,geocoder:Ibt(e)};l(t.geocoder)||delete t.geocoder,this._pelias.url.setQueryParameters(t)}}});Z$.prototype.geocode=async function(e,t){return this._pelias.geocode(e,t)};var nE=Z$;var z3i=y(x(),1);var ta={};ta.ExportStatus=Object.freeze({NotStarted:"NotStarted",InProgress:"InProgress",Complete:"Complete",Invalid:"Invalid"});ta.ExportType=Object.freeze({IMODEL:"IMODEL",CESIUM:"CESIUM","3DTILES":"3DTILES"});ta.RealityDataType=Object.freeze({Cesium3DTiles:"Cesium3DTiles",PNTS:"PNTS",RealityMesh3DTiles:"RealityMesh3DTiles",Terrain3DTiles:"Terrain3DTiles",GaussianSplat3DTiles:"GS_3DT",KML:"KML",GeoJSON:"GeoJSON",Unstructured:"Unstructured"});ta.defaultAccessToken=void 0;ta.defaultShareKey=void 0;ta._getAuthorizationHeader=function(){return l(ta.defaultShareKey)?`Basic ${ta.defaultShareKey}`:`Bearer ${ta.defaultAccessToken}`};ta.apiEndpoint=new Le({url:"https://api.bentley.com"});ta.getExports=async function(e,t){let n=new Le({url:`${ta.apiEndpoint}mesh-export`,headers:{Authorization:ta._getAuthorizationHeader(),Accept:"application/vnd.bentley.itwin-platform.v1+json",Prefer:"return=representation"},queryParameters:{iModelId:e,exportType:ta.ExportType["3DTILES"],$top:"5",client:"CesiumJS"}});typeof CESIUM_VERSION<"u"&&n.appendQueryParameters({clientVersion:CESIUM_VERSION}),l(t)&&t!==""&&n.appendQueryParameters({changesetId:t});try{return await n.fetchJson()}catch(i){let o=JSON.parse(i.response);if(i.statusCode===401){let r=o.error.details?.[0].code??"";throw new me(`Unauthorized, bad token, wrong scopes or headers bad. ${r}`)}else{if(i.statusCode===403)throw console.error(o.error.code,o.error.message),new me("Not allowed, forbidden");if(i.statusCode===422)throw new me(`Unprocessable Entity:${o.error.code} ${o.error.message}`);if(i.statusCode===429)throw new me("Too many requests")}throw new me(`Unknown request failure ${i.statusCode}`)}};ta.getRealityDataMetadata=async function(e,t){let n=new Le({url:`${ta.apiEndpoint}reality-management/reality-data/${t}`,headers:{Authorization:ta._getAuthorizationHeader(),Accept:"application/vnd.bentley.itwin-platform.v1+json"},queryParameters:{iTwinId:e}});try{return(await n.fetchJson()).realityData}catch(i){let o=JSON.parse(i.response);if(i.statusCode===401){let r=o.error.details?.[0].code??"";throw new me(`Unauthorized, bad token, wrong scopes or headers bad. ${r}`)}else{if(i.statusCode===403)throw console.error(o.error.code,o.error.message),new me("Not allowed, forbidden");if(i.statusCode===404)throw new me(`Reality data not found: ${e}, ${t}`);if(i.statusCode===422)throw new me(`Unprocessable Entity:${o.error.code} ${o.error.message}`);if(i.statusCode===429)throw new me("Too many requests")}throw new me(`Unknown request failure ${i.statusCode}`)}};ta.getRealityDataURL=async function(e,t,n){let i=new Le({url:`${ta.apiEndpoint}reality-management/reality-data/${t}/readaccess`,headers:{Authorization:ta._getAuthorizationHeader(),Accept:"application/vnd.bentley.itwin-platform.v1+json"},queryParameters:{iTwinId:e}});try{let r=(await i.fetchJson())._links.containerUrl.href,s=new URL(r);return s.pathname=`${s.pathname}/${n}`,s.toString()}catch(o){let r=JSON.parse(o.response);if(o.statusCode===401){let s=r.error.details?.[0].code??"";throw new me(`Unauthorized, bad token, wrong scopes or headers bad. ${s}`)}else{if(o.statusCode===403)throw console.error(r.error.code,r.error.message),new me("Not allowed, forbidden");if(o.statusCode===404)throw new me(`Reality data not found: ${e}, ${t}`);if(o.statusCode===422)throw new me(`Unprocessable Entity:${r.error.code} ${r.error.message}`);if(o.statusCode===429)throw new me("Too many requests")}throw new me(`Unknown request failure ${o.statusCode}`)}};var na=ta;var J3i=y(x(),1),Rbt={SHIFT:0,CTRL:1,ALT:2},ka=Object.freeze(Rbt);var q3i=y(x(),1);function jQ(){fe.throwInstantiationError()}Object.defineProperties(jQ.prototype,{ellipsoid:{get:fe.throwInstantiationError}});jQ.prototype.project=fe.throwInstantiationError;jQ.prototype.unproject=fe.throwInstantiationError;var R$=jQ;var eHi=y(x(),1);var V$=[],G$=[];function Vbt(e,t,n,i,o,r){let s=o-i+1,a=r-o,c=V$,d=G$,u,h;for(u=0;u<s;++u)c[u]=e[i+u];for(h=0;h<a;++h)d[h]=e[o+h+1];u=0,h=0;for(let p=i;p<=r;++p){let A=c[u],f=d[h];u<s&&(h>=a||t(A,f,n)<=0)?(e[p]=A,++u):h<a&&(e[p]=f,++h)}}function L$(e,t,n,i,o){if(i>=o)return;let r=Math.floor((i+o)*.5);L$(e,t,n,i,r),L$(e,t,n,r+1,o),Vbt(e,t,n,i,r,o)}function Gbt(e,t,n){let i=e.length,o=Math.ceil(i*.5);V$.length=o,G$.length=o,L$(e,t,n,0,i-1),V$.length=0,G$.length=0}var eA=Gbt;var rHi=y(x(),1);function wZ(e){e=e??Q.EMPTY_OBJECT;let t=e.weights,n=e.times;this._times=n,this._weights=t,this._count=t.length/n.length,this._lastTimeIndex=0}Object.defineProperties(wZ.prototype,{times:{get:function(){return this._times}},weights:{get:function(){return this._weights}}});wZ.prototype.findTimeInterval=So.prototype.findTimeInterval;wZ.prototype.wrapTime=So.prototype.wrapTime;wZ.prototype.clampTime=So.prototype.clampTime;wZ.prototype.evaluate=function(e,t){let n=this.weights,i=this.times,o=this._lastTimeIndex=this.findTimeInterval(e,this._lastTimeIndex),r=(e-i[o])/(i[o+1]-i[o]);l(t)||(t=new Array(this._count));for(let s=0;s<this._count;s++){let a=o*this._count+s;t[s]=n[a]*(1-r)+n[a+this._count]*r}return t};var W$=wZ;var AHi=y(x(),1);var aHi=y(x(),1),Lbt={NONE:-1,PARTIAL:0,FULL:1},vr=Object.freeze(Lbt);function ll(e,t){this._occluderPosition=m.clone(e.center),this._occluderRadius=e.radius,this._horizonDistance=0,this._horizonPlaneNormal=void 0,this._horizonPlanePosition=void 0,this._cameraPosition=void 0,this.cameraPosition=t}var qQ=new m;Object.defineProperties(ll.prototype,{position:{get:function(){return this._occluderPosition}},radius:{get:function(){return this._occluderRadius}},cameraPosition:{set:function(e){e=m.clone(e,this._cameraPosition);let t=m.subtract(this._occluderPosition,e,qQ),n=m.magnitudeSquared(t),i=this._occluderRadius*this._occluderRadius,o,r,s;if(n>i){o=Math.sqrt(n-i),n=1/Math.sqrt(n),r=m.multiplyByScalar(t,n,qQ);let a=o*o*n;s=m.add(e,m.multiplyByScalar(r,a,qQ),qQ)}else o=Number.MAX_VALUE;this._horizonDistance=o,this._horizonPlaneNormal=r,this._horizonPlanePosition=s,this._cameraPosition=e}}});ll.fromBoundingSphere=function(e,t,n){return l(n)?(m.clone(e.center,n._occluderPosition),n._occluderRadius=e.radius,n.cameraPosition=t,n):new ll(e,t)};var RSe=new m;ll.prototype.isPointVisible=function(e){if(this._horizonDistance!==Number.MAX_VALUE){let t=m.subtract(e,this._occluderPosition,RSe),n=this._occluderRadius;if(n=m.magnitudeSquared(t)-n*n,n>0)return n=Math.sqrt(n)+this._horizonDistance,t=m.subtract(e,this._cameraPosition,t),n*n>m.magnitudeSquared(t)}return!1};var Wbt=new m;ll.prototype.isBoundingSphereVisible=function(e){let t=m.clone(e.center,Wbt),n=e.radius;if(this._horizonDistance!==Number.MAX_VALUE){let i=m.subtract(t,this._occluderPosition,RSe),o=this._occluderRadius-n;if(o=m.magnitudeSquared(i)-o*o,n<this._occluderRadius)return o>0?(o=Math.sqrt(o)+this._horizonDistance,i=m.subtract(t,this._cameraPosition,i),o*o+n*n>m.magnitudeSquared(i)):!1;if(o>0){i=m.subtract(t,this._cameraPosition,i);let r=m.magnitudeSquared(i),s=this._occluderRadius*this._occluderRadius,a=n*n;return(this._horizonDistance*this._horizonDistance+s)*a>r*s?!0:(o=Math.sqrt(o)+this._horizonDistance,o*o+a>r)}return!0}return!1};var Fbt=new m;ll.prototype.computeVisibility=function(e){let t=m.clone(e.center),n=e.radius;if(n>this._occluderRadius)return vr.FULL;if(this._horizonDistance!==Number.MAX_VALUE){let i=m.subtract(t,this._occluderPosition,Fbt),o=this._occluderRadius-n,r=m.magnitudeSquared(i);if(o=r-o*o,o>0){o=Math.sqrt(o)+this._horizonDistance,i=m.subtract(t,this._cameraPosition,i);let s=m.magnitudeSquared(i);return o*o+n*n<s?vr.NONE:(o=this._occluderRadius+n,o=r-o*o,o>0?(o=Math.sqrt(o)+this._horizonDistance,s<o*o+n*n?vr.FULL:vr.PARTIAL):(i=m.subtract(t,this._horizonPlanePosition,i),m.dot(i,this._horizonPlaneNormal)>-n?vr.PARTIAL:vr.FULL))}}return vr.NONE};var $Q=new m;ll.computeOccludeePoint=function(e,t,n){let i=m.clone(t),o=m.clone(e.center),r=e.radius,s=n.length,a=m.normalize(m.subtract(i,o,$Q),$Q),c=-m.dot(a,o),d=ll._anyRotationVector(o,a,c),u=ll._horizonToPlaneNormalDotProduct(e,a,c,d,n[0]);if(!u)return;let h;for(let A=1;A<s;++A){if(h=ll._horizonToPlaneNormalDotProduct(e,a,c,d,n[A]),!h)return;h<u&&(u=h)}if(u<.0017453283658983088)return;let p=r/u;return m.add(o,m.multiplyByScalar(a,p,$Q),$Q)};var Bbt=[];ll.computeOccludeePointFromRectangle=function(e,t){t=t??ie.default;let n=de.subsample(e,t,0,Bbt),i=ue.fromPoints(n),o=m.ZERO;if(!m.equals(o,i.center))return ll.computeOccludeePoint(new ue(o,t.minimumRadius),i.center,n)};var wbt=new m;ll._anyRotationVector=function(e,t,n){let i=m.abs(t,wbt),o=i.x>i.y?0:1;(o===0&&i.z>i.x||o===1&&i.z>i.y)&&(o=2);let r=new m,s;o===0?(i.x=e.x,i.y=e.y+1,i.z=e.z+1,s=m.UNIT_X):o===1?(i.x=e.x+1,i.y=e.y,i.z=e.z+1,s=m.UNIT_Y):(i.x=e.x+1,i.y=e.y+1,i.z=e.z,s=m.UNIT_Z);let a=(m.dot(t,i)+n)/-m.dot(t,s);return m.normalize(m.subtract(m.add(i,m.multiplyByScalar(s,a,r),i),e,i),i)};var Nbt=new m;ll._rotationVector=function(e,t,n,i,o){let r=m.subtract(i,e,Nbt);if(r=m.normalize(r,r),m.dot(t,r)<.9999999847691291){let s=m.cross(t,r,r);if(m.magnitude(s)>L.EPSILON13)return m.normalize(s,new m)}return o};var F$=new m,Pbt=new m,eO=new m,ZSe=new m;ll._horizonToPlaneNormalDotProduct=function(e,t,n,i,o){let r=m.clone(o,F$),s=m.clone(e.center,Pbt),a=e.radius,c=m.subtract(s,r,eO),d=m.magnitudeSquared(c),u=a*a;if(d<u)return!1;let h=d-u,p=Math.sqrt(h),f=1/Math.sqrt(d),C=p*f*p;c=m.normalize(c,c);let T=m.add(r,m.multiplyByScalar(c,C,ZSe),ZSe),E=Math.sqrt(h-C*C),S=this._rotationVector(s,t,n,r,i),I=m.fromElements(S.x*S.x*c.x+(S.x*S.y-S.z)*c.y+(S.x*S.z+S.y)*c.z,(S.x*S.y+S.z)*c.x+S.y*S.y*c.y+(S.y*S.z-S.x)*c.z,(S.x*S.z-S.y)*c.x+(S.y*S.z+S.x)*c.y+S.z*S.z*c.z,F$);I=m.normalize(I,I);let R=m.multiplyByScalar(I,E,F$);S=m.normalize(m.subtract(m.add(T,R,eO),s,eO),eO);let V=m.dot(t,S);S=m.normalize(m.subtract(m.subtract(T,R,S),s,S),S);let W=m.dot(t,S);return V<W?V:W};var NX=ll;var SHi=y(x(),1);function B$(e,t,n){e=Le.createIfNeeded(e),e.appendForwardSlash(),e.setQueryParameters({key:t}),this._url=e,this._params=n??{},this._credit=new Et('Geodata copyright <a href="https://www.openstreetmap.org/">OpenStreetMap</a> contributors',!1)}Object.defineProperties(B$.prototype,{url:{get:function(){return this._url}},params:{get:function(){return this._params}},credit:{get:function(){return this._credit}}});B$.prototype.geocode=async function(e){return this._url.getDerivedResource({url:"json",queryParameters:Ft(this._params,{q:e})}).fetchJson().then(function(n){return n.results.map(function(i){let o,r=i.bounds;if(l(r))o=de.fromDegrees(r.southwest.lng,r.southwest.lat,r.northeast.lng,r.northeast.lat);else{let{lng:s,lat:a}=i.geometry;o=m.fromDegrees(s,a)}return{displayName:i.formatted,destination:o}})})};var w$=B$;var ZHi=y(x(),1);var Xbt={packedLength:void 0,pack:fe.throwInstantiationError,unpack:fe.throwInstantiationError},N$=Xbt;var GHi=y(x(),1);var Ybt={packedInterpolationLength:void 0,convertPackedArrayForInterpolation:fe.throwInstantiationError,unpackInterpolationResult:fe.throwInstantiationError},P$=Ybt;var wHi=y(x(),1);var Mbt=new m;function vbt(e,t,n,i){let o=bx(e,t,n,i,Mbt);return l(o)?o.x>0&&o.y>0&&o.z>0:!1}var X$=vbt;var XHi=y(x(),1);function VSe(){fe.throwInstantiationError()}VSe.prototype.getURL=fe.throwInstantiationError;var Y$=VSe;var vHi=y(x(),1);async function Ubt(e,t,n,i){return l(i)||(i=!1),Qbt(e,t,n,i)}function Dbt(e,t,n){let i=e[0],o=i.terrainProvider.requestTileGeometry(i.x,i.y,i.level);if(!o)return!1;let r;return n?r=o.then(LSe(i)):r=o.then(LSe(i)).catch(Obt(i)),e.shift(),t.push(r),!0}function kbt(e){return new Promise(function(t){setTimeout(t,e)})}function M$(e,t,n){return e.length?Dbt(e,t,n)?M$(e,t,n):kbt(100).then(()=>M$(e,t,n)):Promise.resolve()}function Qbt(e,t,n,i){let o=e.tilingScheme,r,s=[],a={};for(r=0;r<n.length;++r){let d=o.positionToTileXY(n[r],t);if(!l(d))continue;let u=d.toString();if(!a.hasOwnProperty(u)){let h={x:d.x,y:d.y,level:t,tilingScheme:o,terrainProvider:e,positions:[]};a[u]=h,s.push(h)}a[u].positions.push(n[r])}let c=[];return M$(s,c,i).then(function(){return Promise.all(c).then(function(){return n})})}function GSe(e,t,n){let i=t.interpolateHeight(n,e.longitude,e.latitude);return i===void 0?!1:(e.height=i,!0)}function LSe(e){let t=e.positions,n=e.tilingScheme.tileXYToRectangle(e.x,e.y,e.level);return function(i){let o=!1;for(let r=0;r<t.length;++r){let s=t[r];if(!GSe(s,i,n)){o=!0;break}}return o?i.createMesh({tilingScheme:e.tilingScheme,x:e.x,y:e.y,level:e.level,throttle:!1}).then(function(){for(let r=0;r<t.length;++r){let s=t[r];GSe(s,i,n)}}):Promise.resolve()}}function Obt(e){let t=e.positions;return function(){for(let n=0;n<t.length;++n){let i=t[n];i.height=void 0}}}var PX=Ubt;var OHi=y(x(),1);var v$=new M;async function WSe(e,t,n){l(n)||(n=!1);let i=[],o=[],r=e.availability,s=[];for(let c=0;c<t.length;++c){let d=t[c],u=r.computeMaximumLevelAtPosition(d);if(o[c]=u,u===0){e.tilingScheme.positionToTileXY(d,1,v$);let p=e.loadTileDataAvailability(v$.x,v$.y,1);l(p)&&s.push(p)}let h=i[u];l(h)||(i[u]=h=[]),h.push(d)}await Promise.all(s),await Promise.all(i.map(function(c,d){if(l(c))return PX(e,d,c,n)}));let a=[];for(let c=0;c<t.length;++c){let d=t[c];r.computeMaximumLevelAtPosition(d)!==o[c]&&a.push(d)}return a.length>0&&await WSe(e,a,n),t}var iE=WSe;var oJi=y(x(),1);var HHi=y(x(),1),zbt={LEFT_DOWN:0,LEFT_UP:1,LEFT_CLICK:2,LEFT_DOUBLE_CLICK:3,RIGHT_DOWN:5,RIGHT_UP:6,RIGHT_CLICK:7,MIDDLE_DOWN:10,MIDDLE_UP:11,MIDDLE_CLICK:12,MOUSE_MOVE:15,WHEEL:16,PINCH_START:17,PINCH_END:18,PINCH_MOVE:19},Gn=Object.freeze(zbt);function Yy(e,t,n){let i=e._element;if(i===document)return n.x=t.clientX,n.y=t.clientY,n;let o=i.getBoundingClientRect();return n.x=(t.clientX-o.left)*(i.offsetWidth/o.width),n.y=(t.clientY-o.top)*(i.offsetHeight/o.height),n}function z$(e,t){let n=e;return l(t)&&(n+=`+${t}`),n}function oE(e){if(e.shiftKey)return ka.SHIFT;if(e.ctrlKey)return ka.CTRL;if(e.altKey)return ka.ALT}var Es={LEFT:0,MIDDLE:1,RIGHT:2};function Uu(e,t,n,i){function o(r){i(e,r)}n.addEventListener(t,o,{capture:!1,passive:!1}),e._removalFunctions.push(function(){n.removeEventListener(t,o,!1)})}function Hbt(e){let t=e._element,n=l(t.disableRootEvents)?t:document;hn.supportsPointerEvents()?(Uu(e,"pointerdown",t,e0t),Uu(e,"pointerup",t,USe),Uu(e,"pointermove",t,t0t),Uu(e,"pointercancel",t,USe)):(Uu(e,"mousedown",t,DSe),Uu(e,"mouseup",n,kSe),Uu(e,"mousemove",n,QSe),Uu(e,"touchstart",t,qbt),Uu(e,"touchend",n,PSe),Uu(e,"touchmove",n,$bt),Uu(e,"touchcancel",n,PSe)),Uu(e,"dblclick",t,Kbt);let i;"onwheel"in t?i="wheel":document.onmousewheel!==void 0?i="mousewheel":i="DOMMouseScroll",Uu(e,i,t,jbt)}function Jbt(e){let t=e._removalFunctions;for(let n=0;n<t.length;++n)t[n]()}var FSe={position:new M};function H$(e){e._lastSeenTouchEvent=Xi()}function J$(e){return Xi()-e._lastSeenTouchEvent>Pf.mouseEmulationIgnoreMilliseconds}function O$(e,t,n){let i=e.x-t.x,o=e.y-t.y;return Math.sqrt(i*i+o*o)<n}function DSe(e,t){if(!J$(e))return;let n=t.button;e._buttonDown[n]=!0;let i;if(n===Es.LEFT)i=Gn.LEFT_DOWN;else if(n===Es.MIDDLE)i=Gn.MIDDLE_DOWN;else if(n===Es.RIGHT)i=Gn.RIGHT_DOWN;else return;let o=Yy(e,t,e._primaryPosition);M.clone(o,e._primaryStartPosition),M.clone(o,e._primaryPreviousPosition);let r=oE(t),s=e.getInputAction(i,r);l(s)&&(M.clone(o,FSe.position),s(FSe),t.preventDefault())}var BSe={position:new M},wSe={position:new M};function U$(e,t,n,i){let o=oE(i),r=e.getInputAction(t,o),s=e.getInputAction(n,o);if(l(r)||l(s)){let a=Yy(e,i,e._primaryPosition);if(l(r)&&(M.clone(a,BSe.position),r(BSe)),l(s)){let c=e._primaryStartPosition;O$(c,a,e._clickPixelTolerance)&&(M.clone(a,wSe.position),s(wSe))}}}function kSe(e,t){if(!J$(e))return;let n=t.button;n!==Es.LEFT&&n!==Es.MIDDLE&&n!==Es.RIGHT||(e._buttonDown[Es.LEFT]&&(U$(e,Gn.LEFT_UP,Gn.LEFT_CLICK,t),e._buttonDown[Es.LEFT]=!1),e._buttonDown[Es.MIDDLE]&&(U$(e,Gn.MIDDLE_UP,Gn.MIDDLE_CLICK,t),e._buttonDown[Es.MIDDLE]=!1),e._buttonDown[Es.RIGHT]&&(U$(e,Gn.RIGHT_UP,Gn.RIGHT_CLICK,t),e._buttonDown[Es.RIGHT]=!1))}var D$={startPosition:new M,endPosition:new M};function QSe(e,t){if(!J$(e))return;let n=oE(t),i=Yy(e,t,e._primaryPosition),o=e._primaryPreviousPosition,r=e.getInputAction(Gn.MOUSE_MOVE,n);l(r)&&(M.clone(o,D$.startPosition),M.clone(i,D$.endPosition),r(D$)),M.clone(i,o),(e._buttonDown[Es.LEFT]||e._buttonDown[Es.MIDDLE]||e._buttonDown[Es.RIGHT])&&t.preventDefault()}var NSe={position:new M};function Kbt(e,t){let n=t.button,i;if(n===Es.LEFT)i=Gn.LEFT_DOUBLE_CLICK;else return;let o=oE(t),r=e.getInputAction(i,o);l(r)&&(Yy(e,t,NSe.position),r(NSe))}function jbt(e,t){let n;if(l(t.deltaY)){let r=t.deltaMode;r===t.DOM_DELTA_PIXEL?n=-t.deltaY:r===t.DOM_DELTA_LINE?n=-t.deltaY*40:n=-t.deltaY*120}else t.detail>0?n=t.detail*-120:n=t.wheelDelta;if(!l(n))return;let i=oE(t),o=e.getInputAction(Gn.WHEEL,i);l(o)&&(o(n),t.preventDefault())}function qbt(e,t){H$(e);let n=t.changedTouches,i,o=n.length,r,s,a=e._positions;for(i=0;i<o;++i)r=n[i],s=r.identifier,a.set(s,Yy(e,r,new M));tO(e,t);let c=e._previousPositions;for(i=0;i<o;++i)r=n[i],s=r.identifier,c.set(s,M.clone(a.get(s)))}function PSe(e,t){H$(e);let n=t.changedTouches,i,o=n.length,r,s,a=e._positions;for(i=0;i<o;++i)r=n[i],s=r.identifier,a.remove(s);tO(e,t);let c=e._previousPositions;for(i=0;i<o;++i)r=n[i],s=r.identifier,c.remove(s)}var XSe={position:new M},k$={position1:new M,position2:new M},YSe={position:new M},MSe={position:new M},vSe={position:new M};function tO(e,t){let n=oE(t),i=e._positions,o=i.length,r,s,a=e._isPinching;if(o!==1&&e._buttonDown[Es.LEFT]){if(e._buttonDown[Es.LEFT]=!1,l(e._touchHoldTimer)&&(clearTimeout(e._touchHoldTimer),e._touchHoldTimer=void 0),r=e.getInputAction(Gn.LEFT_UP,n),l(r)&&(M.clone(e._primaryPosition,YSe.position),r(YSe)),o===0&&!e._isTouchHolding&&(s=e.getInputAction(Gn.LEFT_CLICK,n),l(s))){let c=e._primaryStartPosition,d=e._previousPositions.values[0];O$(c,d,e._clickPixelTolerance)&&(M.clone(e._primaryPosition,MSe.position),s(MSe))}e._isTouchHolding=!1}if(o===0&&a&&(e._isPinching=!1,r=e.getInputAction(Gn.PINCH_END,n),l(r)&&r()),o===1&&!a){let c=i.values[0];M.clone(c,e._primaryPosition),M.clone(c,e._primaryStartPosition),M.clone(c,e._primaryPreviousPosition),e._buttonDown[Es.LEFT]=!0,r=e.getInputAction(Gn.LEFT_DOWN,n),l(r)&&(M.clone(c,XSe.position),r(XSe)),e._touchHoldTimer=setTimeout(function(){if(!e.isDestroyed()&&(e._touchHoldTimer=void 0,e._isTouchHolding=!0,s=e.getInputAction(Gn.RIGHT_CLICK,n),l(s))){let d=e._primaryStartPosition,u=e._previousPositions.values[0];O$(d,u,e._holdPixelTolerance)&&(M.clone(e._primaryPosition,vSe.position),s(vSe))}},Pf.touchHoldDelayMilliseconds),t.preventDefault()}o===2&&!a&&(e._isPinching=!0,r=e.getInputAction(Gn.PINCH_START,n),l(r)&&(M.clone(i.values[0],k$.position1),M.clone(i.values[1],k$.position2),r(k$),t.preventDefault()))}function $bt(e,t){H$(e);let n=t.changedTouches,i,o=n.length,r,s,a=e._positions;for(i=0;i<o;++i){r=n[i],s=r.identifier;let d=a.get(s);l(d)&&Yy(e,r,d)}OSe(e,t);let c=e._previousPositions;for(i=0;i<o;++i)r=n[i],s=r.identifier,M.clone(a.get(s),c.get(s))}var Q$={startPosition:new M,endPosition:new M},XX={distance:{startPosition:new M,endPosition:new M},angleAndHeight:{startPosition:new M,endPosition:new M}};function OSe(e,t){let n=oE(t),i=e._positions,o=e._previousPositions,r=i.length,s;if(r===1&&e._buttonDown[Es.LEFT]){let a=i.values[0];M.clone(a,e._primaryPosition);let c=e._primaryPreviousPosition;s=e.getInputAction(Gn.MOUSE_MOVE,n),l(s)&&(M.clone(c,Q$.startPosition),M.clone(a,Q$.endPosition),s(Q$)),M.clone(a,c),t.preventDefault()}else if(r===2&&e._isPinching&&(s=e.getInputAction(Gn.PINCH_MOVE,n),l(s))){let a=i.values[0],c=i.values[1],d=o.values[0],u=o.values[1],h=c.x-a.x,p=c.y-a.y,A=Math.sqrt(h*h+p*p)*.25,f=u.x-d.x,b=u.y-d.y,C=Math.sqrt(f*f+b*b)*.25,T=(c.y+a.y)*.125,E=(u.y+d.y)*.125,S=Math.atan2(p,h),I=Math.atan2(b,f);M.fromElements(0,C,XX.distance.startPosition),M.fromElements(0,A,XX.distance.endPosition),M.fromElements(I,E,XX.angleAndHeight.startPosition),M.fromElements(S,T,XX.angleAndHeight.endPosition),s(XX)}}function e0t(e,t){if(t.target.setPointerCapture(t.pointerId),t.pointerType==="touch"){let n=e._positions,i=t.pointerId;n.set(i,Yy(e,t,new M)),tO(e,t),e._previousPositions.set(i,M.clone(n.get(i)))}else DSe(e,t)}function USe(e,t){if(t.pointerType==="touch"){let n=e._positions,i=t.pointerId;n.remove(i),tO(e,t),e._previousPositions.remove(i)}else kSe(e,t)}function t0t(e,t){if(t.pointerType==="touch"){let n=e._positions,i=t.pointerId,o=n.get(i);if(!l(o))return;Yy(e,t,o),OSe(e,t);let r=e._previousPositions;M.clone(n.get(i),r.get(i))}else QSe(e,t)}function Pf(e){this._inputEvents={},this._buttonDown={[Es.LEFT]:!1,[Es.MIDDLE]:!1,[Es.RIGHT]:!1},this._isPinching=!1,this._isTouchHolding=!1,this._lastSeenTouchEvent=-Pf.mouseEmulationIgnoreMilliseconds,this._primaryStartPosition=new M,this._primaryPosition=new M,this._primaryPreviousPosition=new M,this._positions=new Xt,this._previousPositions=new Xt,this._removalFunctions=[],this._touchHoldTimer=void 0,this._clickPixelTolerance=5,this._holdPixelTolerance=25,this._element=e??document,Hbt(this)}Pf.prototype.setInputAction=function(e,t,n){let i=z$(t,n);this._inputEvents[i]=e};Pf.prototype.getInputAction=function(e,t){let n=z$(e,t);return this._inputEvents[n]};Pf.prototype.removeInputAction=function(e,t){let n=z$(e,t);delete this._inputEvents[n]};Pf.prototype.isDestroyed=function(){return!1};Pf.prototype.destroy=function(){return Jbt(this),he(this)};Pf.mouseEmulationIgnoreMilliseconds=800;Pf.touchHoldDelayMilliseconds=1500;var Du=Pf;var CJi=y(x(),1);function n0t(e,t,n,i,o,r,s){let a=Ji.numberOfPoints(e,t,o),c,d=n.red,u=n.green,h=n.blue,p=n.alpha,A=i.red,f=i.green,b=i.blue,C=i.alpha;if(U.equals(n,i)){for(c=0;c<a;c++)r[s++]=U.floatToByte(d),r[s++]=U.floatToByte(u),r[s++]=U.floatToByte(h),r[s++]=U.floatToByte(p);return s}let T=(A-d)/a,E=(f-u)/a,S=(b-h)/a,I=(C-p)/a,R=s;for(c=0;c<a;c++)r[R++]=U.floatToByte(d+c*T),r[R++]=U.floatToByte(u+c*E),r[R++]=U.floatToByte(h+c*S),r[R++]=U.floatToByte(p+c*I);return R}function YX(e){e=e??Q.EMPTY_OBJECT;let t=e.positions,n=e.colors,i=e.colorsPerVertex??!1;this._positions=t,this._colors=n,this._colorsPerVertex=i,this._arcType=e.arcType??un.GEODESIC,this._granularity=e.granularity??L.RADIANS_PER_DEGREE,this._ellipsoid=e.ellipsoid??ie.default,this._workerName="createSimplePolylineGeometry";let o=1+t.length*m.packedLength;o+=l(n)?1+n.length*U.packedLength:1,this.packedLength=o+ie.packedLength+3}YX.pack=function(e,t,n){n=n??0;let i,o=e._positions,r=o.length;for(t[n++]=r,i=0;i<r;++i,n+=m.packedLength)m.pack(o[i],t,n);let s=e._colors;for(r=l(s)?s.length:0,t[n++]=r,i=0;i<r;++i,n+=U.packedLength)U.pack(s[i],t,n);return ie.pack(e._ellipsoid,t,n),n+=ie.packedLength,t[n++]=e._colorsPerVertex?1:0,t[n++]=e._arcType,t[n]=e._granularity,t};YX.unpack=function(e,t,n){t=t??0;let i,o=e[t++],r=new Array(o);for(i=0;i<o;++i,t+=m.packedLength)r[i]=m.unpack(e,t);o=e[t++];let s=o>0?new Array(o):void 0;for(i=0;i<o;++i,t+=U.packedLength)s[i]=U.unpack(e,t);let a=ie.unpack(e,t);t+=ie.packedLength;let c=e[t++]===1,d=e[t++],u=e[t];return l(n)?(n._positions=r,n._colors=s,n._ellipsoid=a,n._colorsPerVertex=c,n._arcType=d,n._granularity=u,n):new YX({positions:r,colors:s,ellipsoid:a,colorsPerVertex:c,arcType:d,granularity:u})};var nO=new Array(2),iO=new Array(2),i0t={positions:nO,height:iO,ellipsoid:void 0,minDistance:void 0,granularity:void 0};YX.createGeometry=function(e){let t=e._positions,n=e._colors,i=e._colorsPerVertex,o=e._arcType,r=e._granularity,s=e._ellipsoid,a=L.chordLength(r,s.maximumRadius),c=l(n)&&!i,d,u=t.length,h,p,A,f,b=0;if(o===un.GEODESIC||o===un.RHUMB){let I,R,V;o===un.GEODESIC?(I=L.chordLength(r,s.maximumRadius),R=Ji.numberOfPoints,V=Ji.generateArc):(I=r,R=Ji.numberOfPointsRhumbLine,V=Ji.generateRhumbArc);let W=Ji.extractHeights(t,s),B=i0t;if(o===un.GEODESIC?B.minDistance=a:B.granularity=r,B.ellipsoid=s,c){let N=0;for(d=0;d<u-1;d++)N+=R(t[d],t[d+1],I)+1;h=new Float64Array(N*3),A=new Uint8Array(N*4),B.positions=nO,B.height=iO;let P=0;for(d=0;d<u-1;++d){nO[0]=t[d],nO[1]=t[d+1],iO[0]=W[d],iO[1]=W[d+1];let g=V(B);if(l(n)){let _=g.length/3;f=n[d];for(let Z=0;Z<_;++Z)A[P++]=U.floatToByte(f.red),A[P++]=U.floatToByte(f.green),A[P++]=U.floatToByte(f.blue),A[P++]=U.floatToByte(f.alpha)}h.set(g,b),b+=g.length}}else if(B.positions=t,B.height=W,h=new Float64Array(V(B)),l(n)){for(A=new Uint8Array(h.length/3*4),d=0;d<u-1;++d){let P=t[d],g=t[d+1],_=n[d],Z=n[d+1];b=n0t(P,g,_,Z,a,A,b)}let N=n[u-1];A[b++]=U.floatToByte(N.red),A[b++]=U.floatToByte(N.green),A[b++]=U.floatToByte(N.blue),A[b++]=U.floatToByte(N.alpha)}}else{p=c?u*2-2:u,h=new Float64Array(p*3),A=l(n)?new Uint8Array(p*4):void 0;let I=0,R=0;for(d=0;d<u;++d){let V=t[d];if(c&&d>0&&(m.pack(V,h,I),I+=3,f=n[d-1],A[R++]=U.floatToByte(f.red),A[R++]=U.floatToByte(f.green),A[R++]=U.floatToByte(f.blue),A[R++]=U.floatToByte(f.alpha)),c&&d===u-1)break;m.pack(V,h,I),I+=3,l(n)&&(f=n[d],A[R++]=U.floatToByte(f.red),A[R++]=U.floatToByte(f.green),A[R++]=U.floatToByte(f.blue),A[R++]=U.floatToByte(f.alpha))}}let C=new xn;C.position=new we({componentDatatype:H.DOUBLE,componentsPerAttribute:3,values:h}),l(n)&&(C.color=new we({componentDatatype:H.UNSIGNED_BYTE,componentsPerAttribute:4,values:A,normalize:!0})),p=h.length/3;let T=(p-1)*2,E=Ue.createTypedArray(p,T),S=0;for(d=0;d<p-1;++d)E[S++]=d,E[S++]=d+1;return new Ct({attributes:C,indices:E,primitiveType:We.LINES,boundingSphere:ue.fromPoints(t)})};var K$=YX;var ZJi=y(x(),1);function NZ(e){let t=e.radius??1,i={radii:new m(t,t,t),stackPartitions:e.stackPartitions,slicePartitions:e.slicePartitions,vertexFormat:e.vertexFormat};this._ellipsoidGeometry=new Ma(i),this._workerName="createSphereGeometry"}NZ.packedLength=Ma.packedLength;NZ.pack=function(e,t,n){return Ma.pack(e._ellipsoidGeometry,t,n)};var o0t=new Ma,My={radius:void 0,radii:new m,vertexFormat:new ve,stackPartitions:void 0,slicePartitions:void 0};NZ.unpack=function(e,t,n){let i=Ma.unpack(e,t,o0t);return My.vertexFormat=ve.clone(i._vertexFormat,My.vertexFormat),My.stackPartitions=i._stackPartitions,My.slicePartitions=i._slicePartitions,l(n)?(m.clone(i._radii,My.radii),n._ellipsoidGeometry=new Ma(My),n):(My.radius=i._radii.x,new NZ(My))};NZ.createGeometry=function(e){return Ma.createGeometry(e._ellipsoidGeometry)};var MX=NZ;var VJi=y(x(),1);function r0t(e){return e<=.04045?e*.07739938080495357:Math.pow((e+.055)*.9478672985781991,2.4)}var rE=r0t;var LJi=y(x(),1),s0t={WEST:0,NORTH:1,EAST:2,SOUTH:3,NORTHWEST:4,NORTHEAST:5,SOUTHWEST:6,SOUTHEAST:7},Zn=s0t;var BJi=y(x(),1);function vy(e){}Object.defineProperties(vy.prototype,{ellipsoid:{get:fe.throwInstantiationError},rectangle:{get:fe.throwInstantiationError},projection:{get:fe.throwInstantiationError}});vy.prototype.getNumberOfXTilesAtLevel=fe.throwInstantiationError;vy.prototype.getNumberOfYTilesAtLevel=fe.throwInstantiationError;vy.prototype.rectangleToNativeRectangle=fe.throwInstantiationError;vy.prototype.tileXYToNativeRectangle=fe.throwInstantiationError;vy.prototype.tileXYToRectangle=fe.throwInstantiationError;vy.prototype.positionToTileXY=fe.throwInstantiationError;var j$=vy;var vJi=y(x(),1);function sE(e){e=e??Q.EMPTY_OBJECT,this._clock=void 0,this._element=void 0,this._clockSubscription=void 0,this._seekFunction=void 0,this._lastPlaybackRate=void 0,this.clock=e.clock,this.element=e.element,this.epoch=e.epoch??qe.MINIMUM_VALUE,this.tolerance=e.tolerance??1,this._seeking=!1,this._seekFunction=void 0,this._firstTickAfterSeek=!1}Object.defineProperties(sE.prototype,{clock:{get:function(){return this._clock},set:function(e){let t=this._clock;t!==e&&(l(t)&&(this._clockSubscription(),this._clockSubscription=void 0),l(e)&&(this._clockSubscription=e.onTick.addEventListener(sE.prototype._onTick,this)),this._clock=e)}},element:{get:function(){return this._element},set:function(e){let t=this._element;t!==e&&(l(t)&&t.removeEventListener("seeked",this._seekFunction,!1),l(e)&&(this._seeking=!1,this._seekFunction=a0t(this),e.addEventListener("seeked",this._seekFunction,!1)),this._element=e,this._seeking=!1,this._firstTickAfterSeek=!1)}}});sE.prototype.destroy=function(){return this.element=void 0,this.clock=void 0,he(this)};sE.prototype.isDestroyed=function(){return!1};sE.prototype._trySetPlaybackRate=function(e){if(this._lastPlaybackRate===e.multiplier)return;let t=this._element;try{t.playbackRate=e.multiplier}catch{t.playbackRate=0}this._lastPlaybackRate=e.multiplier};sE.prototype._onTick=function(e){let t=this._element;if(!l(t)||t.readyState<2)return;let n=t.paused,i=e.shouldAnimate;if(i===n&&(i?t.play():t.pause()),this._seeking||this._firstTickAfterSeek){this._firstTickAfterSeek=!1;return}this._trySetPlaybackRate(e);let o=e.currentTime,r=this.epoch??qe.MINIMUM_VALUE,s=q.secondsDifference(o,r),a=t.duration,c,d=t.currentTime;t.loop?(s=s%a,s<0&&(s=a-s),c=s):s>a?c=a:s<0?c=0:c=s;let u=i?this.tolerance??1:.001;Math.abs(c-d)>u&&(this._seeking=!0,t.currentTime=c)};function a0t(e){return function(){e._seeking=!1,e._firstTickAfterSeek=!0}}var q$=sE;var iKi=y(x(),1);function c0t(e,t){this.rectangle=e,this.maxLevel=t}function zSe(e){this.ellipsoid=e.ellipsoid??ie.default,this.tilingScheme=void 0,this.heightmapWidth=void 0,this.heightmapHeight=void 0,this.levelZeroMaximumGeometricError=void 0,this.rectangles=[]}zSe.prototype.build=function(e){e._tilingScheme=this.tilingScheme,e._heightmapWidth=this.heightmapWidth,e._heightmapHeight=this.heightmapHeight,e._levelZeroMaximumGeometricError=this.levelZeroMaximumGeometricError,e._rectangles=this.rectangles};function l0t(e,t){let n=t.getElementsByTagName("SRS")[0].textContent;if(n==="EPSG:4326")e.tilingScheme=new zi({ellipsoid:e.ellipsoid});else throw new me(`SRS ${n} is not supported`);let i=t.getElementsByTagName("TileFormat")[0];e.heightmapWidth=parseInt(i.getAttribute("width"),10),e.heightmapHeight=parseInt(i.getAttribute("height"),10),e.levelZeroMaximumGeometricError=Qo.getEstimatedLevelZeroGeometricErrorForAHeightmap(e.ellipsoid,Math.min(e.heightmapWidth,e.heightmapHeight),e.tilingScheme.getNumberOfXTilesAtLevel(0));let o=t.getElementsByTagName("DataExtent");for(let r=0;r<o.length;++r){let s=o[r],a=L.toRadians(parseFloat(s.getAttribute("minx"))),c=L.toRadians(parseFloat(s.getAttribute("miny"))),d=L.toRadians(parseFloat(s.getAttribute("maxx"))),u=L.toRadians(parseFloat(s.getAttribute("maxy"))),h=parseInt(s.getAttribute("maxlevel"),10);e.rectangles.push(new c0t(new de(a,c,d,u),h))}}function d0t(e,t,n){let i=`An error occurred while accessing ${e.url}`;throw l(t)&&l(t.message)&&(i=`${i}: ${t.message}`),qo.reportError(void 0,n,l(n)?n._errorEvent:void 0,i),new me(i)}async function u0t(e,t,n){try{let i=await t.fetchXML();l0t(e,i)}catch(i){d0t(t,i,n)}}function Uy(e){e=e??Q.EMPTY_OBJECT,this._errorEvent=new xe,this._terrainDataStructure={heightScale:1/1e3,heightOffset:-1e3,elementsPerHeight:3,stride:4,elementMultiplier:256,isBigEndian:!0,lowestEncodedHeight:0,highestEncodedHeight:256*256*256-1};let t=e.credit;typeof t=="string"&&(t=new Et(t)),this._credit=t,this._tilingScheme=void 0,this._rectangles=[]}Object.defineProperties(Uy.prototype,{errorEvent:{get:function(){return this._errorEvent}},credit:{get:function(){return this._credit}},tilingScheme:{get:function(){return this._tilingScheme}},hasWaterMask:{get:function(){return!1}},hasVertexNormals:{get:function(){return!1}},availability:{get:function(){}}});Uy.fromUrl=async function(e,t){t=t??Q.EMPTY_OBJECT;let n=new zSe(t),i=Le.createIfNeeded(e);await u0t(n,i);let o=new Uy(t);return n.build(o),o._resource=i,o};Uy.prototype.requestTileGeometry=function(e,t,n,i){let o=this._tilingScheme.getNumberOfYTilesAtLevel(n),s=this._resource.getDerivedResource({url:`${n}/${e}/${o-t-1}.tif`,queryParameters:{cesium:!0},request:i}).fetchImage({preferImageBitmap:!0});if(!l(s))return;let a=this;return Promise.resolve(s).then(function(c){return new Fc({buffer:gh(c),width:a._heightmapWidth,height:a._heightmapHeight,childTileMask:m0t(a,e,t,n),structure:a._terrainDataStructure})})};Uy.prototype.getLevelMaximumGeometricError=function(e){return this._levelZeroMaximumGeometricError/(1<<e)};var HSe=new de;function m0t(e,t,n,i){let o=e._tilingScheme,r=e._rectangles,s=o.tileXYToRectangle(t,n,i),a=0;for(let c=0;c<r.length&&a!==15;++c){let d=r[c];if(d.maxLevel<=i)continue;let u=d.rectangle,h=de.intersection(u,s,HSe);l(h)&&(oO(o,u,t*2,n*2,i+1)&&(a|=4),oO(o,u,t*2+1,n*2,i+1)&&(a|=8),oO(o,u,t*2,n*2+1,i+1)&&(a|=1),oO(o,u,t*2+1,n*2+1,i+1)&&(a|=2))}return a}function oO(e,t,n,i,o){let r=e.tileXYToRectangle(n,i,o);return l(de.intersection(r,t,HSe))}Uy.prototype.getTileDataAvailable=function(e,t,n){};Uy.prototype.loadTileDataAvailability=function(e,t,n){};var $$=Uy;var rKi=y(x(),1),h0t={VK_FORMAT_UNDEFINED:0,VK_FORMAT_R4G4_UNORM_PACK8:1,VK_FORMAT_R4G4B4A4_UNORM_PACK16:2,VK_FORMAT_B4G4R4A4_UNORM_PACK16:3,VK_FORMAT_R5G6B5_UNORM_PACK16:4,VK_FORMAT_B5G6R5_UNORM_PACK16:5,VK_FORMAT_R5G5B5A1_UNORM_PACK16:6,VK_FORMAT_B5G5R5A1_UNORM_PACK16:7,VK_FORMAT_A1R5G5B5_UNORM_PACK16:8,VK_FORMAT_R8_UNORM:9,VK_FORMAT_R8_SNORM:10,VK_FORMAT_R8_USCALED:11,VK_FORMAT_R8_SSCALED:12,VK_FORMAT_R8_UINT:13,VK_FORMAT_R8_SINT:14,VK_FORMAT_R8_SRGB:15,VK_FORMAT_R8G8_UNORM:16,VK_FORMAT_R8G8_SNORM:17,VK_FORMAT_R8G8_USCALED:18,VK_FORMAT_R8G8_SSCALED:19,VK_FORMAT_R8G8_UINT:20,VK_FORMAT_R8G8_SINT:21,VK_FORMAT_R8G8_SRGB:22,VK_FORMAT_R8G8B8_UNORM:23,VK_FORMAT_R8G8B8_SNORM:24,VK_FORMAT_R8G8B8_USCALED:25,VK_FORMAT_R8G8B8_SSCALED:26,VK_FORMAT_R8G8B8_UINT:27,VK_FORMAT_R8G8B8_SINT:28,VK_FORMAT_R8G8B8_SRGB:29,VK_FORMAT_B8G8R8_UNORM:30,VK_FORMAT_B8G8R8_SNORM:31,VK_FORMAT_B8G8R8_USCALED:32,VK_FORMAT_B8G8R8_SSCALED:33,VK_FORMAT_B8G8R8_UINT:34,VK_FORMAT_B8G8R8_SINT:35,VK_FORMAT_B8G8R8_SRGB:36,VK_FORMAT_R8G8B8A8_UNORM:37,VK_FORMAT_R8G8B8A8_SNORM:38,VK_FORMAT_R8G8B8A8_USCALED:39,VK_FORMAT_R8G8B8A8_SSCALED:40,VK_FORMAT_R8G8B8A8_UINT:41,VK_FORMAT_R8G8B8A8_SINT:42,VK_FORMAT_R8G8B8A8_SRGB:43,VK_FORMAT_B8G8R8A8_UNORM:44,VK_FORMAT_B8G8R8A8_SNORM:45,VK_FORMAT_B8G8R8A8_USCALED:46,VK_FORMAT_B8G8R8A8_SSCALED:47,VK_FORMAT_B8G8R8A8_UINT:48,VK_FORMAT_B8G8R8A8_SINT:49,VK_FORMAT_B8G8R8A8_SRGB:50,VK_FORMAT_A8B8G8R8_UNORM_PACK32:51,VK_FORMAT_A8B8G8R8_SNORM_PACK32:52,VK_FORMAT_A8B8G8R8_USCALED_PACK32:53,VK_FORMAT_A8B8G8R8_SSCALED_PACK32:54,VK_FORMAT_A8B8G8R8_UINT_PACK32:55,VK_FORMAT_A8B8G8R8_SINT_PACK32:56,VK_FORMAT_A8B8G8R8_SRGB_PACK32:57,VK_FORMAT_A2R10G10B10_UNORM_PACK32:58,VK_FORMAT_A2R10G10B10_SNORM_PACK32:59,VK_FORMAT_A2R10G10B10_USCALED_PACK32:60,VK_FORMAT_A2R10G10B10_SSCALED_PACK32:61,VK_FORMAT_A2R10G10B10_UINT_PACK32:62,VK_FORMAT_A2R10G10B10_SINT_PACK32:63,VK_FORMAT_A2B10G10R10_UNORM_PACK32:64,VK_FORMAT_A2B10G10R10_SNORM_PACK32:65,VK_FORMAT_A2B10G10R10_USCALED_PACK32:66,VK_FORMAT_A2B10G10R10_SSCALED_PACK32:67,VK_FORMAT_A2B10G10R10_UINT_PACK32:68,VK_FORMAT_A2B10G10R10_SINT_PACK32:69,VK_FORMAT_R16_UNORM:70,VK_FORMAT_R16_SNORM:71,VK_FORMAT_R16_USCALED:72,VK_FORMAT_R16_SSCALED:73,VK_FORMAT_R16_UINT:74,VK_FORMAT_R16_SINT:75,VK_FORMAT_R16_SFLOAT:76,VK_FORMAT_R16G16_UNORM:77,VK_FORMAT_R16G16_SNORM:78,VK_FORMAT_R16G16_USCALED:79,VK_FORMAT_R16G16_SSCALED:80,VK_FORMAT_R16G16_UINT:81,VK_FORMAT_R16G16_SINT:82,VK_FORMAT_R16G16_SFLOAT:83,VK_FORMAT_R16G16B16_UNORM:84,VK_FORMAT_R16G16B16_SNORM:85,VK_FORMAT_R16G16B16_USCALED:86,VK_FORMAT_R16G16B16_SSCALED:87,VK_FORMAT_R16G16B16_UINT:88,VK_FORMAT_R16G16B16_SINT:89,VK_FORMAT_R16G16B16_SFLOAT:90,VK_FORMAT_R16G16B16A16_UNORM:91,VK_FORMAT_R16G16B16A16_SNORM:92,VK_FORMAT_R16G16B16A16_USCALED:93,VK_FORMAT_R16G16B16A16_SSCALED:94,VK_FORMAT_R16G16B16A16_UINT:95,VK_FORMAT_R16G16B16A16_SINT:96,VK_FORMAT_R16G16B16A16_SFLOAT:97,VK_FORMAT_R32_UINT:98,VK_FORMAT_R32_SINT:99,VK_FORMAT_R32_SFLOAT:100,VK_FORMAT_R32G32_UINT:101,VK_FORMAT_R32G32_SINT:102,VK_FORMAT_R32G32_SFLOAT:103,VK_FORMAT_R32G32B32_UINT:104,VK_FORMAT_R32G32B32_SINT:105,VK_FORMAT_R32G32B32_SFLOAT:106,VK_FORMAT_R32G32B32A32_UINT:107,VK_FORMAT_R32G32B32A32_SINT:108,VK_FORMAT_R32G32B32A32_SFLOAT:109,VK_FORMAT_R64_UINT:110,VK_FORMAT_R64_SINT:111,VK_FORMAT_R64_SFLOAT:112,VK_FORMAT_R64G64_UINT:113,VK_FORMAT_R64G64_SINT:114,VK_FORMAT_R64G64_SFLOAT:115,VK_FORMAT_R64G64B64_UINT:116,VK_FORMAT_R64G64B64_SINT:117,VK_FORMAT_R64G64B64_SFLOAT:118,VK_FORMAT_R64G64B64A64_UINT:119,VK_FORMAT_R64G64B64A64_SINT:120,VK_FORMAT_R64G64B64A64_SFLOAT:121,VK_FORMAT_B10G11R11_UFLOAT_PACK32:122,VK_FORMAT_E5B9G9R9_UFLOAT_PACK32:123,VK_FORMAT_D16_UNORM:124,VK_FORMAT_X8_D24_UNORM_PACK32:125,VK_FORMAT_D32_SFLOAT:126,VK_FORMAT_S8_UINT:127,VK_FORMAT_D16_UNORM_S8_UINT:128,VK_FORMAT_D24_UNORM_S8_UINT:129,VK_FORMAT_D32_SFLOAT_S8_UINT:130,VK_FORMAT_BC1_RGB_UNORM_BLOCK:131,VK_FORMAT_BC1_RGB_SRGB_BLOCK:132,VK_FORMAT_BC1_RGBA_UNORM_BLOCK:133,VK_FORMAT_BC1_RGBA_SRGB_BLOCK:134,VK_FORMAT_BC2_UNORM_BLOCK:135,VK_FORMAT_BC2_SRGB_BLOCK:136,VK_FORMAT_BC3_UNORM_BLOCK:137,VK_FORMAT_BC3_SRGB_BLOCK:138,VK_FORMAT_BC4_UNORM_BLOCK:139,VK_FORMAT_BC4_SNORM_BLOCK:140,VK_FORMAT_BC5_UNORM_BLOCK:141,VK_FORMAT_BC5_SNORM_BLOCK:142,VK_FORMAT_BC6H_UFLOAT_BLOCK:143,VK_FORMAT_BC6H_SFLOAT_BLOCK:144,VK_FORMAT_BC7_UNORM_BLOCK:145,VK_FORMAT_BC7_SRGB_BLOCK:146,VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK:147,VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK:148,VK_FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK:149,VK_FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK:150,VK_FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK:151,VK_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK:152,VK_FORMAT_EAC_R11_UNORM_BLOCK:153,VK_FORMAT_EAC_R11_SNORM_BLOCK:154,VK_FORMAT_EAC_R11G11_UNORM_BLOCK:155,VK_FORMAT_EAC_R11G11_SNORM_BLOCK:156,VK_FORMAT_ASTC_4x4_UNORM_BLOCK:157,VK_FORMAT_ASTC_4x4_SRGB_BLOCK:158,VK_FORMAT_ASTC_5x4_UNORM_BLOCK:159,VK_FORMAT_ASTC_5x4_SRGB_BLOCK:160,VK_FORMAT_ASTC_5x5_UNORM_BLOCK:161,VK_FORMAT_ASTC_5x5_SRGB_BLOCK:162,VK_FORMAT_ASTC_6x5_UNORM_BLOCK:163,VK_FORMAT_ASTC_6x5_SRGB_BLOCK:164,VK_FORMAT_ASTC_6x6_UNORM_BLOCK:165,VK_FORMAT_ASTC_6x6_SRGB_BLOCK:166,VK_FORMAT_ASTC_8x5_UNORM_BLOCK:167,VK_FORMAT_ASTC_8x5_SRGB_BLOCK:168,VK_FORMAT_ASTC_8x6_UNORM_BLOCK:169,VK_FORMAT_ASTC_8x6_SRGB_BLOCK:170,VK_FORMAT_ASTC_8x8_UNORM_BLOCK:171,VK_FORMAT_ASTC_8x8_SRGB_BLOCK:172,VK_FORMAT_ASTC_10x5_UNORM_BLOCK:173,VK_FORMAT_ASTC_10x5_SRGB_BLOCK:174,VK_FORMAT_ASTC_10x6_UNORM_BLOCK:175,VK_FORMAT_ASTC_10x6_SRGB_BLOCK:176,VK_FORMAT_ASTC_10x8_UNORM_BLOCK:177,VK_FORMAT_ASTC_10x8_SRGB_BLOCK:178,VK_FORMAT_ASTC_10x10_UNORM_BLOCK:179,VK_FORMAT_ASTC_10x10_SRGB_BLOCK:180,VK_FORMAT_ASTC_12x10_UNORM_BLOCK:181,VK_FORMAT_ASTC_12x10_SRGB_BLOCK:182,VK_FORMAT_ASTC_12x12_UNORM_BLOCK:183,VK_FORMAT_ASTC_12x12_SRGB_BLOCK:184,VK_FORMAT_G8B8G8R8_422_UNORM:1000156e3,VK_FORMAT_B8G8R8G8_422_UNORM:1000156001,VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM:1000156002,VK_FORMAT_G8_B8R8_2PLANE_420_UNORM:1000156003,VK_FORMAT_G8_B8_R8_3PLANE_422_UNORM:1000156004,VK_FORMAT_G8_B8R8_2PLANE_422_UNORM:1000156005,VK_FORMAT_G8_B8_R8_3PLANE_444_UNORM:1000156006,VK_FORMAT_R10X6_UNORM_PACK16:1000156007,VK_FORMAT_R10X6G10X6_UNORM_2PACK16:1000156008,VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16:1000156009,VK_FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16:1000156010,VK_FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16:1000156011,VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16:1000156012,VK_FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16:1000156013,VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16:1000156014,VK_FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16:1000156015,VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16:1000156016,VK_FORMAT_R12X4_UNORM_PACK16:1000156017,VK_FORMAT_R12X4G12X4_UNORM_2PACK16:1000156018,VK_FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16:1000156019,VK_FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16:1000156020,VK_FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16:1000156021,VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16:1000156022,VK_FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16:1000156023,VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16:1000156024,VK_FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16:1000156025,VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16:1000156026,VK_FORMAT_G16B16G16R16_422_UNORM:1000156027,VK_FORMAT_B16G16R16G16_422_UNORM:1000156028,VK_FORMAT_G16_B16_R16_3PLANE_420_UNORM:1000156029,VK_FORMAT_G16_B16R16_2PLANE_420_UNORM:1000156030,VK_FORMAT_G16_B16_R16_3PLANE_422_UNORM:1000156031,VK_FORMAT_G16_B16R16_2PLANE_422_UNORM:1000156032,VK_FORMAT_G16_B16_R16_3PLANE_444_UNORM:1000156033,VK_FORMAT_PVRTC1_2BPP_UNORM_BLOCK_IMG:1000054e3,VK_FORMAT_PVRTC1_4BPP_UNORM_BLOCK_IMG:1000054001,VK_FORMAT_PVRTC2_2BPP_UNORM_BLOCK_IMG:1000054002,VK_FORMAT_PVRTC2_4BPP_UNORM_BLOCK_IMG:1000054003,VK_FORMAT_PVRTC1_2BPP_SRGB_BLOCK_IMG:1000054004,VK_FORMAT_PVRTC1_4BPP_SRGB_BLOCK_IMG:1000054005,VK_FORMAT_PVRTC2_2BPP_SRGB_BLOCK_IMG:1000054006,VK_FORMAT_PVRTC2_4BPP_SRGB_BLOCK_IMG:1000054007,VK_FORMAT_ASTC_4x4_SFLOAT_BLOCK_EXT:1000066e3,VK_FORMAT_ASTC_5x4_SFLOAT_BLOCK_EXT:1000066001,VK_FORMAT_ASTC_5x5_SFLOAT_BLOCK_EXT:1000066002,VK_FORMAT_ASTC_6x5_SFLOAT_BLOCK_EXT:1000066003,VK_FORMAT_ASTC_6x6_SFLOAT_BLOCK_EXT:1000066004,VK_FORMAT_ASTC_8x5_SFLOAT_BLOCK_EXT:1000066005,VK_FORMAT_ASTC_8x6_SFLOAT_BLOCK_EXT:1000066006,VK_FORMAT_ASTC_8x8_SFLOAT_BLOCK_EXT:1000066007,VK_FORMAT_ASTC_10x5_SFLOAT_BLOCK_EXT:1000066008,VK_FORMAT_ASTC_10x6_SFLOAT_BLOCK_EXT:1000066009,VK_FORMAT_ASTC_10x8_SFLOAT_BLOCK_EXT:1000066010,VK_FORMAT_ASTC_10x10_SFLOAT_BLOCK_EXT:1000066011,VK_FORMAT_ASTC_12x10_SFLOAT_BLOCK_EXT:1000066012,VK_FORMAT_ASTC_12x12_SFLOAT_BLOCK_EXT:1000066013,VK_FORMAT_G8B8G8R8_422_UNORM_KHR:1000156e3,VK_FORMAT_B8G8R8G8_422_UNORM_KHR:1000156001,VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM_KHR:1000156002,VK_FORMAT_G8_B8R8_2PLANE_420_UNORM_KHR:1000156003,VK_FORMAT_G8_B8_R8_3PLANE_422_UNORM_KHR:1000156004,VK_FORMAT_G8_B8R8_2PLANE_422_UNORM_KHR:1000156005,VK_FORMAT_G8_B8_R8_3PLANE_444_UNORM_KHR:1000156006,VK_FORMAT_R10X6_UNORM_PACK16_KHR:1000156007,VK_FORMAT_R10X6G10X6_UNORM_2PACK16_KHR:1000156008,VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16_KHR:1000156009,VK_FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16_KHR:1000156010,VK_FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16_KHR:1000156011,VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16_KHR:1000156012,VK_FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16_KHR:1000156013,VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16_KHR:1000156014,VK_FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16_KHR:1000156015,VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16_KHR:1000156016,VK_FORMAT_R12X4_UNORM_PACK16_KHR:1000156017,VK_FORMAT_R12X4G12X4_UNORM_2PACK16_KHR:1000156018,VK_FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16_KHR:1000156019,VK_FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16_KHR:1000156020,VK_FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16_KHR:1000156021,VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16_KHR:1000156022,VK_FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16_KHR:1000156023,VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16_KHR:1000156024,VK_FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16_KHR:1000156025,VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16_KHR:1000156026,VK_FORMAT_G16B16G16R16_422_UNORM_KHR:1000156027,VK_FORMAT_B16G16R16G16_422_UNORM_KHR:1000156028,VK_FORMAT_G16_B16_R16_3PLANE_420_UNORM_KHR:1000156029,VK_FORMAT_G16_B16R16_2PLANE_420_UNORM_KHR:1000156030,VK_FORMAT_G16_B16_R16_3PLANE_422_UNORM_KHR:1000156031,VK_FORMAT_G16_B16R16_2PLANE_422_UNORM_KHR:1000156032,VK_FORMAT_G16_B16_R16_3PLANE_444_UNORM_KHR:1000156033},eee=Object.freeze(h0t);var cKi=y(x(),1);function f0t(e){switch(e){case ne.FLOAT:return"float";case ne.FLOAT_VEC2:return"vec2";case ne.FLOAT_VEC3:return"vec3";case ne.FLOAT_VEC4:return"vec4";case ne.FLOAT_MAT2:return"mat2";case ne.FLOAT_MAT3:return"mat3";case ne.FLOAT_MAT4:return"mat4";case ne.SAMPLER_2D:return"sampler2D";case ne.BOOL:return"bool"}}var tee=f0t;var dKi=y(x(),1);function p0t(e,t,n){return function(){n.apply(e,arguments),t.apply(e,arguments)}}var vX=p0t;var mKi=y(x(),1),PZ=`#ifdef MRT
layout (location = 0) out vec4 out_FragData_0;
layout (location = 1) out vec4 out_FragData_1;
#else
layout (location = 0) out vec4 out_FragColor;
#endif
uniform vec4 u_bgColor;
uniform sampler2D u_depthTexture;
in vec2 v_textureCoordinates;
void main()
{
if (texture(u_depthTexture, v_textureCoordinates).r < 1.0)
{
#ifdef MRT
out_FragData_0 = u_bgColor;
out_FragData_1 = vec4(u_bgColor.a);
#else
out_FragColor = u_bgColor;
#endif
return;
}
discard;
}
`;var fKi=y(x(),1),UX=`in vec2 v_textureCoordinates;
const float M_PI = 3.141592653589793;
float vdcRadicalInverse(int i)
{
float r;
float base = 2.0;
float value = 0.0;
float invBase = 1.0 / base;
float invBi = invBase;
for (int x = 0; x < 100; x++)
{
if (i <= 0)
{
break;
}
r = mod(float(i), base);
value += r * invBi;
invBi *= invBase;
i = int(float(i) * invBase);
}
return value;
}
vec2 hammersley2D(int i, int N)
{
return vec2(float(i) / float(N), vdcRadicalInverse(i));
}
vec3 importanceSampleGGX(vec2 xi, float alphaRoughness, vec3 N)
{
float alphaRoughnessSquared = alphaRoughness * alphaRoughness;
float phi = 2.0 * M_PI * xi.x;
float cosTheta = sqrt((1.0 - xi.y) / (1.0 + (alphaRoughnessSquared - 1.0) * xi.y));
float sinTheta = sqrt(1.0 - cosTheta * cosTheta);
vec3 H = vec3(sinTheta * cos(phi), sinTheta * sin(phi), cosTheta);
vec3 upVector = abs(N.z) < 0.999 ? vec3(0.0, 0.0, 1.0) : vec3(1.0, 0.0, 0.0);
vec3 tangentX = normalize(cross(upVector, N));
vec3 tangentY = cross(N, tangentX);
return tangentX * H.x + tangentY * H.y + N * H.z;
}
/**
* Estimate the geometric self-shadowing of the microfacets in a surface,
* using the Smith Joint GGX visibility function.
* Note: Vis = G / (4 * NdotL * NdotV)
* see Eric Heitz. 2014. Understanding the Masking-Shadowing Function in Microfacet-Based BRDFs. Journal of Computer Graphics Techniques, 3
* see Real-Time Rendering. Page 331 to 336.
* see https://google.github.io/filament/Filament.md.html#materialsystem/specularbrdf/geometricshadowing(specularg)
*
* @param {float} alphaRoughness The roughness of the material, expressed as the square of perceptual roughness.
* @param {float} NdotL The cosine of the angle between the surface normal and the direction to the light source.
* @param {float} NdotV The cosine of the angle between the surface normal and the direction to the camera.
*/
float smithVisibilityGGX(float alphaRoughness, float NdotL, float NdotV)
{
float alphaRoughnessSq = alphaRoughness * alphaRoughness;
float GGXV = NdotL * sqrt(NdotV * NdotV * (1.0 - alphaRoughnessSq) + alphaRoughnessSq);
float GGXL = NdotV * sqrt(NdotL * NdotL * (1.0 - alphaRoughnessSq) + alphaRoughnessSq);
float GGX = GGXV + GGXL; // 2.0 if NdotL = NdotV = 1.0
if (GGX > 0.0)
{
return 0.5 / GGX; // 1/4 if NdotL = NdotV = 1.0
}
return 0.0;
}
vec2 integrateBrdf(float roughness, float NdotV)
{
vec3 V = vec3(sqrt(1.0 - NdotV * NdotV), 0.0, NdotV);
float A = 0.0;
float B = 0.0;
const int NumSamples = 1024;
float alphaRoughness = roughness * roughness;
for (int i = 0; i < NumSamples; i++)
{
vec2 xi = hammersley2D(i, NumSamples);
vec3 H = importanceSampleGGX(xi, alphaRoughness, vec3(0.0, 0.0, 1.0));
vec3 L = 2.0 * dot(V, H) * H - V;
float NdotL = clamp(L.z, 0.0, 1.0);
float NdotH = clamp(H.z, 0.0, 1.0);
float VdotH = clamp(dot(V, H), 0.0, 1.0);
if (NdotL > 0.0)
{
float G = smithVisibilityGGX(alphaRoughness, NdotL, NdotV);
float G_Vis = 4.0 * G * VdotH * NdotL / NdotH;
float Fc = pow(1.0 - VdotH, 5.0);
A += (1.0 - Fc) * G_Vis;
B += Fc * G_Vis;
}
}
return vec2(A, B) / float(NumSamples);
}
void main()
{
out_FragColor = vec4(integrateBrdf(v_textureCoordinates.y, v_textureCoordinates.x), 0.0, 1.0);
}
`;var AKi=y(x(),1),DX=`uniform sampler2D u_noiseTexture;
uniform vec3 u_noiseTextureDimensions;
uniform float u_noiseDetail;
in vec2 v_offset;
in vec3 v_maximumSize;
in vec4 v_color;
in float v_slice;
in float v_brightness;
float wrap(float value, float rangeLength) {
if(value < 0.0) {
float absValue = abs(value);
float modValue = mod(absValue, rangeLength);
return mod(rangeLength - modValue, rangeLength);
}
return mod(value, rangeLength);
}
vec3 wrapVec(vec3 value, float rangeLength) {
return vec3(wrap(value.x, rangeLength),
wrap(value.y, rangeLength),
wrap(value.z, rangeLength));
}
vec2 voxelToUV(vec3 voxelIndex) {
float textureSliceWidth = u_noiseTextureDimensions.x;
float noiseTextureRows = u_noiseTextureDimensions.y;
float inverseNoiseTextureRows = u_noiseTextureDimensions.z;
float textureSliceWidthSquared = textureSliceWidth * textureSliceWidth;
vec2 inverseNoiseTextureDimensions = vec2(noiseTextureRows / textureSliceWidthSquared,
inverseNoiseTextureRows / textureSliceWidth);
vec3 wrappedIndex = wrapVec(voxelIndex, textureSliceWidth);
float column = mod(wrappedIndex.z, textureSliceWidth * inverseNoiseTextureRows);
float row = floor(wrappedIndex.z / textureSliceWidth * noiseTextureRows);
float xPixelCoord = wrappedIndex.x + column * textureSliceWidth;
float yPixelCoord = wrappedIndex.y + row * textureSliceWidth;
return vec2(xPixelCoord, yPixelCoord) * inverseNoiseTextureDimensions;
}
// Interpolate a voxel with its neighbor (along the positive X-axis)
vec4 lerpSamplesX(vec3 voxelIndex, float x) {
vec2 uv0 = voxelToUV(voxelIndex);
vec2 uv1 = voxelToUV(voxelIndex + vec3(1.0, 0.0, 0.0));
vec4 sample0 = texture(u_noiseTexture, uv0);
vec4 sample1 = texture(u_noiseTexture, uv1);
return mix(sample0, sample1, x);
}
vec4 sampleNoiseTexture(vec3 position) {
float textureSliceWidth = u_noiseTextureDimensions.x;
vec3 recenteredPos = position + vec3(textureSliceWidth / 2.0);
vec3 lerpValue = fract(recenteredPos);
vec3 voxelIndex = floor(recenteredPos);
vec4 xLerp00 = lerpSamplesX(voxelIndex, lerpValue.x);
vec4 xLerp01 = lerpSamplesX(voxelIndex + vec3(0.0, 0.0, 1.0), lerpValue.x);
vec4 xLerp10 = lerpSamplesX(voxelIndex + vec3(0.0, 1.0, 0.0), lerpValue.x);
vec4 xLerp11 = lerpSamplesX(voxelIndex + vec3(0.0, 1.0, 1.0), lerpValue.x);
vec4 yLerp0 = mix(xLerp00, xLerp10, lerpValue.y);
vec4 yLerp1 = mix(xLerp01, xLerp11, lerpValue.y);
return mix(yLerp0, yLerp1, lerpValue.z);
}
// Intersection with a unit sphere with radius 0.5 at center (0, 0, 0).
bool intersectSphere(vec3 origin, vec3 dir, float slice,
out vec3 point, out vec3 normal) {
float A = dot(dir, dir);
float B = dot(origin, dir);
float C = dot(origin, origin) - 0.25;
float discriminant = (B * B) - (A * C);
if(discriminant < 0.0) {
return false;
}
float root = sqrt(discriminant);
float t = (-B - root) / A;
if(t < 0.0) {
t = (-B + root) / A;
}
point = origin + t * dir;
if(slice >= 0.0) {
point.z = (slice / 2.0) - 0.5;
if(length(point) > 0.5) {
return false;
}
}
normal = normalize(point);
point -= czm_epsilon2 * normal;
return true;
}
// Transforms the ray origin and direction into unit sphere space,
// then transforms the result back into the ellipsoid's space.
bool intersectEllipsoid(vec3 origin, vec3 dir, vec3 center, vec3 scale, float slice,
out vec3 point, out vec3 normal) {
if(scale.x <= 0.01 || scale.y < 0.01 || scale.z < 0.01) {
return false;
}
vec3 o = (origin - center) / scale;
vec3 d = dir / scale;
vec3 p, n;
bool intersected = intersectSphere(o, d, slice, p, n);
if(intersected) {
point = (p * scale) + center;
normal = n;
}
return intersected;
}
// Assume that if phase shift is being called for octave i,
// the frequency is of i - 1. This saves us from doing extra
// division / multiplication operations.
vec2 phaseShift2D(vec2 p, vec2 freq) {
return (czm_pi / 2.0) * sin(freq.yx * p.yx);
}
vec2 phaseShift3D(vec3 p, vec2 freq) {
return phaseShift2D(p.xy, freq) + czm_pi * vec2(sin(freq.x * p.z));
}
// The cloud texture function derived from Gardner's 1985 paper,
// "Visual Simulation of Clouds."
// https://www.cs.drexel.edu/~david/Classes/Papers/p297-gardner.pdf
const float T0 = 0.6; // contrast of the texture pattern
const float k = 0.1; // computed to produce a maximum value of 1
const float C0 = 0.8; // coefficient
const float FX0 = 0.6; // frequency X
const float FY0 = 0.6; // frequency Y
const int octaves = 5;
float T(vec3 point) {
vec2 sum = vec2(0.0);
float Ci = C0;
vec2 FXY = vec2(FX0, FY0);
vec2 PXY = vec2(0.0);
for(int i = 1; i <= octaves; i++) {
PXY = phaseShift3D(point, FXY);
Ci *= 0.707;
FXY *= 2.0;
vec2 sinTerm = sin(FXY * point.xy + PXY);
sum += Ci * sinTerm + vec2(T0);
}
return k * sum.x * sum.y;
}
const float a = 0.5; // fraction of surface reflection due to ambient or scattered light,
const float t = 0.4; // fraction of texture shading
const float s = 0.25; // fraction of specular reflection
float I(float Id, float Is, float It) {
return (1.0 - a) * ((1.0 - t) * ((1.0 - s) * Id + s * Is) + t * It) + a;
}
const vec3 lightDir = normalize(vec3(0.2, -1.0, 0.7));
vec4 drawCloud(vec3 rayOrigin, vec3 rayDir, vec3 cloudCenter, vec3 cloudScale, float cloudSlice,
float brightness) {
vec3 cloudPoint, cloudNormal;
if(!intersectEllipsoid(rayOrigin, rayDir, cloudCenter, cloudScale, cloudSlice,
cloudPoint, cloudNormal)) {
return vec4(0.0);
}
float Id = clamp(dot(cloudNormal, -lightDir), 0.0, 1.0); // diffuse reflection
float Is = max(pow(dot(-lightDir, -rayDir), 2.0), 0.0); // specular reflection
float It = T(cloudPoint); // texture function
float intensity = I(Id, Is, It);
vec3 color = vec3(intensity * clamp(brightness, 0.1, 1.0));
vec4 noise = sampleNoiseTexture(u_noiseDetail * cloudPoint);
float W = noise.x;
float W2 = noise.y;
float W3 = noise.z;
// The dot product between the cloud's normal and the ray's direction is greatest
// in the center of the ellipsoid's surface. It decreases towards the edge.
// Thus, it is used to blur the areas leading to the edges of the ellipsoid,
// so that no harsh lines appear.
// The first (and biggest) layer of worley noise is then subtracted from this.
// The final result is scaled up so that the base cloud is not too translucent.
float ndDot = clamp(dot(cloudNormal, -rayDir), 0.0, 1.0);
float TR = pow(ndDot, 3.0) - W; // translucency
TR *= 1.3;
// Subtracting the second and third layers of worley noise is more complicated.
// If these layers of noise were simply subtracted from the current translucency,
// the shape derived from the first layer of noise would be completely deleted.
// The erosion of this noise should thus be constricted to the edges of the cloud.
// However, because the edges of the ellipsoid were already blurred away, mapping
// the noise to (1.0 - ndDot) will have no impact on most of the cloud's appearance.
// The value of (0.5 - ndDot) provides the best compromise.
float minusDot = 0.5 - ndDot;
// Even with the previous calculation, subtracting the second layer of wnoise
// erode too much of the cloud. The addition of it, however, will detailed
// volume to the cloud. As long as the noise is only added and not subtracted,
// the results are aesthetically pleasing.
// The minusDot product is mapped in a way that it is larger at the edges of
// the ellipsoid, so a subtraction and min operation are used instead of
// an addition and max one.
TR -= min(minusDot * W2, 0.0);
// The third level of worley noise is subtracted from the result, with some
// modifications. First, a scalar is added to minusDot so that the noise
// starts affecting the shape farther away from the center of the ellipsoid's
// surface. Then, it is scaled down so its impact is not too intense.
TR -= 0.8 * (minusDot + 0.25) * W3;
// The texture function's shading does not correlate with the shape of the cloud
// produced by the layers of noise, so an extra shading scalar is calculated.
// The darkest areas of the cloud are assigned to be where the noise erodes
// the cloud the most. This is then interpolated based on the translucency
// and the diffuse shading term of that point in the cloud.
float shading = mix(1.0 - 0.8 * W * W, 1.0, Id * TR);
// To avoid values that are too dark, this scalar is increased by a small amount
// and clamped so it never goes to zero.
shading = clamp(shading + 0.2, 0.3, 1.0);
// Finally, the contrast of the cloud's color is increased.
vec3 finalColor = mix(vec3(0.5), shading * color, 1.15);
return vec4(finalColor, clamp(TR, 0.0, 1.0)) * v_color;
}
void main() {
#ifdef DEBUG_BILLBOARDS
out_FragColor = vec4(0.0, 0.5, 0.5, 1.0);
#endif
// To avoid calculations with high values,
// we raycast from an arbitrarily smaller space.
vec2 coordinate = v_maximumSize.xy * v_offset;
vec3 ellipsoidScale = 0.82 * v_maximumSize;
vec3 ellipsoidCenter = vec3(0.0);
float zOffset = max(ellipsoidScale.z - 10.0, 0.0);
vec3 eye = vec3(0, 0, -10.0 - zOffset);
vec3 rayDir = normalize(vec3(coordinate, 1.0) - eye);
vec3 rayOrigin = eye;
#ifdef DEBUG_ELLIPSOIDS
vec3 point, normal;
if(intersectEllipsoid(rayOrigin, rayDir, ellipsoidCenter, ellipsoidScale, v_slice,
point, normal)) {
out_FragColor = v_brightness * v_color;
}
#else
#ifndef DEBUG_BILLBOARDS
vec4 cloud = drawCloud(rayOrigin, rayDir,
ellipsoidCenter, ellipsoidScale, v_slice, v_brightness);
if(cloud.w < 0.01) {
discard;
}
out_FragColor = cloud;
#endif
#endif
}
`;var bKi=y(x(),1),kX=`#ifdef INSTANCED
in vec2 direction;
#endif
in vec4 positionHighAndScaleX;
in vec4 positionLowAndScaleY;
in vec4 packedAttribute0;
in vec4 packedAttribute1;
in vec4 color;
out vec2 v_offset;
out vec3 v_maximumSize;
out vec4 v_color;
out float v_slice;
out float v_brightness;
void main() {
// Unpack attributes.
vec3 positionHigh = positionHighAndScaleX.xyz;
vec3 positionLow = positionLowAndScaleY.xyz;
vec2 scale = vec2(positionHighAndScaleX.w, positionLowAndScaleY.w);
float show = packedAttribute0.x;
float brightness = packedAttribute0.y;
vec2 coordinates = packedAttribute0.wz;
vec3 maximumSize = packedAttribute1.xyz;
float slice = packedAttribute1.w;
#ifdef INSTANCED
vec2 dir = direction;
#else
vec2 dir = coordinates;
#endif
vec2 offset = dir - vec2(0.5, 0.5);
vec2 scaledOffset = scale * offset;
vec4 p = czm_translateRelativeToEye(positionHigh, positionLow);
vec4 positionEC = czm_modelViewRelativeToEye * p;
positionEC.xy += scaledOffset;
positionEC.xyz *= show;
gl_Position = czm_projection * positionEC;
v_offset = offset;
v_maximumSize = maximumSize;
v_color = color;
v_slice = slice;
v_brightness = brightness;
}
`;var xKi=y(x(),1),QX=`uniform vec3 u_noiseTextureDimensions;
uniform float u_noiseDetail;
uniform vec3 u_noiseOffset;
in vec2 v_position;
float wrap(float value, float rangeLength) {
if(value < 0.0) {
float absValue = abs(value);
float modValue = mod(absValue, rangeLength);
return mod(rangeLength - modValue, rangeLength);
}
return mod(value, rangeLength);
}
vec3 wrapVec(vec3 value, float rangeLength) {
return vec3(wrap(value.x, rangeLength),
wrap(value.y, rangeLength),
wrap(value.z, rangeLength));
}
vec3 random3(vec3 p) {
float dot1 = dot(p, vec3(127.1, 311.7, 932.8));
float dot2 = dot(p, vec3(269.5, 183.3, 421.4));
return fract(vec3(sin(dot1 - dot2), cos(dot1 * dot2), dot1 * dot2));
}
// Frequency corresponds to cell size.
// The higher the frequency, the smaller the cell size.
vec3 getWorleyCellPoint(vec3 centerCell, vec3 offset, float freq) {
float textureSliceWidth = u_noiseTextureDimensions.x;
vec3 cell = centerCell + offset;
cell = wrapVec(cell, textureSliceWidth / u_noiseDetail);
cell += floor(u_noiseOffset / u_noiseDetail);
vec3 p = offset + random3(cell);
return p;
}
float worleyNoise(vec3 p, float freq) {
vec3 centerCell = floor(p * freq);
vec3 pointInCell = fract(p * freq);
float shortestDistance = 1000.0;
for(float z = -1.0; z <= 1.0; z++) {
for(float y = -1.0; y <= 1.0; y++) {
for(float x = -1.0; x <= 1.0; x++) {
vec3 offset = vec3(x, y, z);
vec3 point = getWorleyCellPoint(centerCell, offset, freq);
float distance = length(pointInCell - point);
if(distance < shortestDistance) {
shortestDistance = distance;
}
}
}
}
return shortestDistance;
}
const float MAX_FBM_ITERATIONS = 10.0;
float worleyFBMNoise(vec3 p, float octaves, float scale) {
float noise = 0.0;
float freq = 1.0;
float persistence = 0.625;
for(float i = 0.0; i < MAX_FBM_ITERATIONS; i++) {
if(i >= octaves) {
break;
}
noise += worleyNoise(p * scale, freq * scale) * persistence;
persistence *= 0.5;
freq *= 2.0;
}
return noise;
}
void main() {
float textureSliceWidth = u_noiseTextureDimensions.x;
float inverseNoiseTextureRows = u_noiseTextureDimensions.z;
float x = mod(v_position.x, textureSliceWidth);
float y = mod(v_position.y, textureSliceWidth);
float sliceRow = floor(v_position.y / textureSliceWidth);
float z = floor(v_position.x / textureSliceWidth) + sliceRow * inverseNoiseTextureRows * textureSliceWidth;
vec3 position = vec3(x, y, z);
position /= u_noiseDetail;
float worley0 = clamp(worleyFBMNoise(position, 3.0, 1.0), 0.0, 1.0);
float worley1 = clamp(worleyFBMNoise(position, 3.0, 2.0), 0.0, 1.0);
float worley2 = clamp(worleyFBMNoise(position, 3.0, 3.0), 0.0, 1.0);
out_FragColor = vec4(worley0, worley1, worley2, 1.0);
}
`;var TKi=y(x(),1),OX=`uniform vec3 u_noiseTextureDimensions;
in vec2 position;
out vec2 v_position;
void main()
{
gl_Position = vec4(position, 0.1, 1.0);
float textureSliceWidth = u_noiseTextureDimensions.x;
float noiseTextureRows = u_noiseTextureDimensions.y;
float inverseNoiseTextureRows = u_noiseTextureDimensions.z;
vec2 transformedPos = (position * 0.5) + vec2(0.5);
transformedPos *= textureSliceWidth;
transformedPos.x *= textureSliceWidth * inverseNoiseTextureRows;
transformedPos.y *= noiseTextureRows;
v_position = transformedPos;
}
`;var SKi=y(x(),1),zX=`uniform sampler2D u_opaqueDepthTexture;
uniform sampler2D u_translucentDepthTexture;
in vec2 v_textureCoordinates;
void main()
{
float opaqueDepth = texture(u_opaqueDepthTexture, v_textureCoordinates).r;
float translucentDepth = texture(u_translucentDepthTexture, v_textureCoordinates).r;
translucentDepth = czm_branchFreeTernary(translucentDepth > opaqueDepth, 1.0, translucentDepth);
out_FragColor = czm_packDepth(translucentDepth);
}
`;var IKi=y(x(),1),HX=`/**
* Compositing for Weighted Blended Order-Independent Transparency. See:
* - http://jcgt.org/published/0002/02/09/
* - http://casual-effects.blogspot.com/2014/03/weighted-blended-order-independent.html
*/
uniform sampler2D u_opaque;
uniform sampler2D u_accumulation;
uniform sampler2D u_revealage;
in vec2 v_textureCoordinates;
void main()
{
vec4 opaque = texture(u_opaque, v_textureCoordinates);
vec4 accum = texture(u_accumulation, v_textureCoordinates);
float r = texture(u_revealage, v_textureCoordinates).r;
#ifdef MRT
vec4 transparent = vec4(accum.rgb / clamp(r, 1e-4, 5e4), accum.a);
#else
vec4 transparent = vec4(accum.rgb / clamp(accum.a, 1e-4, 5e4), r);
#endif
out_FragColor = (1.0 - transparent.a) * transparent + transparent.a * opaque;
if (opaque != czm_backgroundColor)
{
out_FragColor.a = 1.0;
}
}
`;var RKi=y(x(),1),JX=`uniform mat3 u_cubeMapPanoramaTransform;
in vec3 position;
out vec3 v_texCoord;
void main()
{
vec3 p = czm_viewRotation * (u_cubeMapPanoramaTransform * (czm_entireFrustum.y * position));
gl_Position = czm_projection * vec4(p, 1.0);
v_texCoord = position.xyz;
}
`;var GKi=y(x(),1),KX=`in vec4 positionEC;
void main()
{
vec3 position;
vec3 direction;
if (czm_orthographicIn3D == 1.0)
{
vec2 uv = (gl_FragCoord.xy - czm_viewport.xy) / czm_viewport.zw;
vec2 minPlane = vec2(czm_frustumPlanes.z, czm_frustumPlanes.y); // left, bottom
vec2 maxPlane = vec2(czm_frustumPlanes.w, czm_frustumPlanes.x); // right, top
position = vec3(mix(minPlane, maxPlane, uv), 0.0);
direction = vec3(0.0, 0.0, -1.0);
}
else
{
position = vec3(0.0);
direction = normalize(positionEC.xyz);
}
czm_ray ray = czm_ray(position, direction);
vec3 ellipsoid_center = czm_view[3].xyz;
czm_raySegment intersection = czm_rayEllipsoidIntersectionInterval(ray, ellipsoid_center, czm_ellipsoidInverseRadii);
if (!czm_isEmpty(intersection))
{
out_FragColor = vec4(1.0, 1.0, 0.0, 1.0);
}
else
{
discard;
}
czm_writeLogDepth();
}
`;var WKi=y(x(),1),jX=`in vec4 position;
out vec4 positionEC;
void main()
{
positionEC = czm_modelView * position;
gl_Position = czm_projection * positionEC;
czm_vertexLogDepth();
}
`;var BKi=y(x(),1),XZ=`uniform vec3 u_radii;
uniform vec3 u_oneOverEllipsoidRadiiSquared;
in vec3 v_positionEC;
vec4 computeEllipsoidColor(czm_ray ray, float intersection, float side)
{
vec3 positionEC = czm_pointAlongRay(ray, intersection);
vec3 positionMC = (czm_inverseModelView * vec4(positionEC, 1.0)).xyz;
vec3 geodeticNormal = normalize(czm_geodeticSurfaceNormal(positionMC, vec3(0.0), u_oneOverEllipsoidRadiiSquared));
vec3 sphericalNormal = normalize(positionMC / u_radii);
vec3 normalMC = geodeticNormal * side; // normalized surface normal (always facing the viewer) in model coordinates
vec3 normalEC = normalize(czm_normal * normalMC); // normalized surface normal in eye coordinates
vec2 st = czm_ellipsoidTextureCoordinates(sphericalNormal);
vec3 positionToEyeEC = -positionEC;
czm_materialInput materialInput;
materialInput.s = st.s;
materialInput.st = st;
materialInput.str = (positionMC + u_radii) / u_radii;
materialInput.normalEC = normalEC;
materialInput.tangentToEyeMatrix = czm_eastNorthUpToEyeCoordinates(positionMC, normalEC);
materialInput.positionToEyeEC = positionToEyeEC;
czm_material material = czm_getMaterial(materialInput);
#ifdef ONLY_SUN_LIGHTING
return czm_private_phong(normalize(positionToEyeEC), material, czm_sunDirectionEC);
#else
return czm_phong(normalize(positionToEyeEC), material, czm_lightDirectionEC);
#endif
}
void main()
{
// PERFORMANCE_TODO: When dynamic branching is available, compute ratio of maximum and minimum radii
// in the vertex shader. Only when it is larger than some constant, march along the ray.
// Otherwise perform one intersection test which will be the common case.
// Test if the ray intersects a sphere with the ellipsoid's maximum radius.
// For very oblate ellipsoids, using the ellipsoid's radii for an intersection test
// may cause false negatives. This will discard fragments before marching the ray forward.
float maxRadius = max(u_radii.x, max(u_radii.y, u_radii.z)) * 1.5;
vec3 direction = normalize(v_positionEC);
vec3 ellipsoidCenter = czm_modelView[3].xyz;
float t1 = -1.0;
float t2 = -1.0;
float b = -2.0 * dot(direction, ellipsoidCenter);
float c = dot(ellipsoidCenter, ellipsoidCenter) - maxRadius * maxRadius;
float discriminant = b * b - 4.0 * c;
if (discriminant >= 0.0) {
t1 = (-b - sqrt(discriminant)) * 0.5;
t2 = (-b + sqrt(discriminant)) * 0.5;
}
if (t1 < 0.0 && t2 < 0.0) {
discard;
}
float t = min(t1, t2);
if (t < 0.0) {
t = 0.0;
}
// March ray forward to intersection with larger sphere and find
czm_ray ray = czm_ray(t * direction, direction);
vec3 ellipsoid_inverseRadii = vec3(1.0 / u_radii.x, 1.0 / u_radii.y, 1.0 / u_radii.z);
czm_raySegment intersection = czm_rayEllipsoidIntersectionInterval(ray, ellipsoidCenter, ellipsoid_inverseRadii);
if (czm_isEmpty(intersection))
{
discard;
}
// If the viewer is outside, compute outsideFaceColor, with normals facing outward.
vec4 outsideFaceColor = (intersection.start != 0.0) ? computeEllipsoidColor(ray, intersection.start, 1.0) : vec4(0.0);
// If the viewer either is inside or can see inside, compute insideFaceColor, with normals facing inward.
vec4 insideFaceColor = (outsideFaceColor.a < 1.0) ? computeEllipsoidColor(ray, intersection.stop, -1.0) : vec4(0.0);
out_FragColor = mix(insideFaceColor, outsideFaceColor, outsideFaceColor.a);
out_FragColor.a = 1.0 - (1.0 - insideFaceColor.a) * (1.0 - outsideFaceColor.a);
#if (defined(WRITE_DEPTH) && (__VERSION__ == 300 || defined(GL_EXT_frag_depth)))
t = (intersection.start != 0.0) ? intersection.start : intersection.stop;
vec3 positionEC = czm_pointAlongRay(ray, t);
vec4 positionCC = czm_projection * vec4(positionEC, 1.0);
#ifdef LOG_DEPTH
czm_writeLogDepth(1.0 + positionCC.w);
#else
float z = positionCC.z / positionCC.w;
float n = czm_depthRange.near;
float f = czm_depthRange.far;
gl_FragDepth = (z * (f - n) + f + n) * 0.5;
#endif
#endif
}
`;var NKi=y(x(),1),YZ=`in vec3 position;
uniform vec3 u_radii;
out vec3 v_positionEC;
void main()
{
// In the vertex data, the cube goes from (-1.0, -1.0, -1.0) to (1.0, 1.0, 1.0) in model coordinates.
// Scale to consider the radii. We could also do this once on the CPU when using the BoxGeometry,
// but doing it here allows us to change the radii without rewriting the vertex data, and
// allows all ellipsoids to reuse the same vertex data.
vec4 p = vec4(u_radii * position, 1.0);
vec4 pEC = czm_modelView * p;
v_positionEC = pEC.xyz; // position in eye coordinates
gl_Position = czm_projection * pEC;
// With multi-frustum, when the ellipsoid primitive is positioned on the intersection of two frustums
// and close to terrain, the terrain (writes depth) in the closest frustum can overwrite part of the
// ellipsoid (does not write depth) that was rendered in the farther frustum.
//
// Here, we clamp the depth in the vertex shader to avoid being overwritten; however, this creates
// artifacts since some fragments can be alpha blended twice. This is solved by only rendering
// the ellipsoid in the closest frustum to the viewer.
gl_Position.z = clamp(gl_Position.z, czm_depthRange.near, czm_depthRange.far);
czm_vertexLogDepth();
}
`;var XKi=y(x(),1);/**
* @license
* Copyright (c) 2014-2015, NVIDIA CORPORATION. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* * Neither the name of NVIDIA CORPORATION nor the names of its
* contributors may be used to endorse or promote products derived
* from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/var qX=`/**
* @license
* Copyright (c) 2014-2015, NVIDIA CORPORATION. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* * Neither the name of NVIDIA CORPORATION nor the names of its
* contributors may be used to endorse or promote products derived
* from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS \`\`AS IS'' AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
// NVIDIA GameWorks Graphics Samples GitHub link: https://github.com/NVIDIAGameWorks/GraphicsSamples
// Original source (archived): https://archive.org/details/nvidiagame-works-graphics-samples-master
// Original FXAA 3.11 shader link: https://github.com/NVIDIAGameWorks/GraphicsSamples/blob/master/samples/es3-kepler/FXAA/FXAA3_11.h
// Shader link in fork: https://github.com/lyntel/GraphicsSamples/blob/3d30817ebeeade64fe6a4fc3aa1fe4265c29b6fd/samples/es3-kepler/FXAA/FXAA3_11.h
// Steps used to integrate into Cesium:
// * The following defines are set:
// #define FXAA_PC 1
// #define FXAA_WEBGL_1 1
// #define FXAA_GREEN_AS_LUMA 1
// #define FXAA_EARLY_EXIT 1
// #define FXAA_GLSL_120 1
// * All other preprocessor directives besides the FXAA_QUALITY__P* directives were removed.
// * Double underscores are invalid for preprocessor directives so replace them with a single underscore. Replace
// /FXAA_QUALITY__P(.*)/g with /FXAA_QUALITY__P$1/.
// * There are no implicit conversions from ivec* to vec* so replace:
// #define FxaaInt2 ivec2
// with
// #define FxaaInt2 vec2
// * The texture2DLod function is only available in vertex shaders so replace:
// #define FxaaTexTop(t, p) texture2DLod(t, p, 0.0)
// #define FxaaTexOff(t, p, o, r) texture2DLod(t, p + (o * r), 0.0)
// with
// #define FxaaTexTop(t, p) texture(t, p)
// #define FxaaTexOff(t, p, o, r) texture(t, p + (o * r))
// * FXAA_QUALITY_PRESET is prepended in the javascript code. We may want to expose that setting in the future.
// * The following parameters to FxaaPixelShader are unused and can be removed:
// fxaaConsolePosPos
// fxaaConsoleRcpFrameOpt
// fxaaConsoleRcpFrameOpt2
// fxaaConsole360RcpFrameOpt2
// fxaaConsoleEdgeSharpness
// fxaaConsoleEdgeThreshold
// fxaaConsoleEdgeThresholdMi
// fxaaConsole360ConstDir
//
// Choose the quality preset.
// This needs to be compiled into the shader as it effects code.
// Best option to include multiple presets is to
// in each shader define the preset, then include this file.
//
// OPTIONS
// -----------------------------------------------------------------------
// 10 to 15 - default medium dither (10=fastest, 15=highest quality)
// 20 to 29 - less dither, more expensive (20=fastest, 29=highest quality)
// 39 - no dither, very expensive
//
// NOTES
// -----------------------------------------------------------------------
// 12 = slightly faster then FXAA 3.9 and higher edge quality (default)
// 13 = about same speed as FXAA 3.9 and better than 12
// 23 = closest to FXAA 3.9 visually and performance wise
// _ = the lowest digit is directly related to performance
// _ = the highest digit is directly related to style
//
//#define FXAA_QUALITY_PRESET 12
#if (FXAA_QUALITY_PRESET == 10)
#define FXAA_QUALITY_PS 3
#define FXAA_QUALITY_P0 1.5
#define FXAA_QUALITY_P1 3.0
#define FXAA_QUALITY_P2 12.0
#endif
#if (FXAA_QUALITY_PRESET == 11)
#define FXAA_QUALITY_PS 4
#define FXAA_QUALITY_P0 1.0
#define FXAA_QUALITY_P1 1.5
#define FXAA_QUALITY_P2 3.0
#define FXAA_QUALITY_P3 12.0
#endif
#if (FXAA_QUALITY_PRESET == 12)
#define FXAA_QUALITY_PS 5
#define FXAA_QUALITY_P0 1.0
#define FXAA_QUALITY_P1 1.5
#define FXAA_QUALITY_P2 2.0
#define FXAA_QUALITY_P3 4.0
#define FXAA_QUALITY_P4 12.0
#endif
#if (FXAA_QUALITY_PRESET == 13)
#define FXAA_QUALITY_PS 6
#define FXAA_QUALITY_P0 1.0
#define FXAA_QUALITY_P1 1.5
#define FXAA_QUALITY_P2 2.0
#define FXAA_QUALITY_P3 2.0
#define FXAA_QUALITY_P4 4.0
#define FXAA_QUALITY_P5 12.0
#endif
#if (FXAA_QUALITY_PRESET == 14)
#define FXAA_QUALITY_PS 7
#define FXAA_QUALITY_P0 1.0
#define FXAA_QUALITY_P1 1.5
#define FXAA_QUALITY_P2 2.0
#define FXAA_QUALITY_P3 2.0
#define FXAA_QUALITY_P4 2.0
#define FXAA_QUALITY_P5 4.0
#define FXAA_QUALITY_P6 12.0
#endif
#if (FXAA_QUALITY_PRESET == 15)
#define FXAA_QUALITY_PS 8
#define FXAA_QUALITY_P0 1.0
#define FXAA_QUALITY_P1 1.5
#define FXAA_QUALITY_P2 2.0
#define FXAA_QUALITY_P3 2.0
#define FXAA_QUALITY_P4 2.0
#define FXAA_QUALITY_P5 2.0
#define FXAA_QUALITY_P6 4.0
#define FXAA_QUALITY_P7 12.0
#endif
#if (FXAA_QUALITY_PRESET == 20)
#define FXAA_QUALITY_PS 3
#define FXAA_QUALITY_P0 1.5
#define FXAA_QUALITY_P1 2.0
#define FXAA_QUALITY_P2 8.0
#endif
#if (FXAA_QUALITY_PRESET == 21)
#define FXAA_QUALITY_PS 4
#define FXAA_QUALITY_P0 1.0
#define FXAA_QUALITY_P1 1.5
#define FXAA_QUALITY_P2 2.0
#define FXAA_QUALITY_P3 8.0
#endif
#if (FXAA_QUALITY_PRESET == 22)
#define FXAA_QUALITY_PS 5
#define FXAA_QUALITY_P0 1.0
#define FXAA_QUALITY_P1 1.5
#define FXAA_QUALITY_P2 2.0
#define FXAA_QUALITY_P3 2.0
#define FXAA_QUALITY_P4 8.0
#endif
#if (FXAA_QUALITY_PRESET == 23)
#define FXAA_QUALITY_PS 6
#define FXAA_QUALITY_P0 1.0
#define FXAA_QUALITY_P1 1.5
#define FXAA_QUALITY_P2 2.0
#define FXAA_QUALITY_P3 2.0
#define FXAA_QUALITY_P4 2.0
#define FXAA_QUALITY_P5 8.0
#endif
#if (FXAA_QUALITY_PRESET == 24)
#define FXAA_QUALITY_PS 7
#define FXAA_QUALITY_P0 1.0
#define FXAA_QUALITY_P1 1.5
#define FXAA_QUALITY_P2 2.0
#define FXAA_QUALITY_P3 2.0
#define FXAA_QUALITY_P4 2.0
#define FXAA_QUALITY_P5 3.0
#define FXAA_QUALITY_P6 8.0
#endif
#if (FXAA_QUALITY_PRESET == 25)
#define FXAA_QUALITY_PS 8
#define FXAA_QUALITY_P0 1.0
#define FXAA_QUALITY_P1 1.5
#define FXAA_QUALITY_P2 2.0
#define FXAA_QUALITY_P3 2.0
#define FXAA_QUALITY_P4 2.0
#define FXAA_QUALITY_P5 2.0
#define FXAA_QUALITY_P6 4.0
#define FXAA_QUALITY_P7 8.0
#endif
#if (FXAA_QUALITY_PRESET == 26)
#define FXAA_QUALITY_PS 9
#define FXAA_QUALITY_P0 1.0
#define FXAA_QUALITY_P1 1.5
#define FXAA_QUALITY_P2 2.0
#define FXAA_QUALITY_P3 2.0
#define FXAA_QUALITY_P4 2.0
#define FXAA_QUALITY_P5 2.0
#define FXAA_QUALITY_P6 2.0
#define FXAA_QUALITY_P7 4.0
#define FXAA_QUALITY_P8 8.0
#endif
#if (FXAA_QUALITY_PRESET == 27)
#define FXAA_QUALITY_PS 10
#define FXAA_QUALITY_P0 1.0
#define FXAA_QUALITY_P1 1.5
#define FXAA_QUALITY_P2 2.0
#define FXAA_QUALITY_P3 2.0
#define FXAA_QUALITY_P4 2.0
#define FXAA_QUALITY_P5 2.0
#define FXAA_QUALITY_P6 2.0
#define FXAA_QUALITY_P7 2.0
#define FXAA_QUALITY_P8 4.0
#define FXAA_QUALITY_P9 8.0
#endif
#if (FXAA_QUALITY_PRESET == 28)
#define FXAA_QUALITY_PS 11
#define FXAA_QUALITY_P0 1.0
#define FXAA_QUALITY_P1 1.5
#define FXAA_QUALITY_P2 2.0
#define FXAA_QUALITY_P3 2.0
#define FXAA_QUALITY_P4 2.0
#define FXAA_QUALITY_P5 2.0
#define FXAA_QUALITY_P6 2.0
#define FXAA_QUALITY_P7 2.0
#define FXAA_QUALITY_P8 2.0
#define FXAA_QUALITY_P9 4.0
#define FXAA_QUALITY_P10 8.0
#endif
#if (FXAA_QUALITY_PRESET == 29)
#define FXAA_QUALITY_PS 12
#define FXAA_QUALITY_P0 1.0
#define FXAA_QUALITY_P1 1.5
#define FXAA_QUALITY_P2 2.0
#define FXAA_QUALITY_P3 2.0
#define FXAA_QUALITY_P4 2.0
#define FXAA_QUALITY_P5 2.0
#define FXAA_QUALITY_P6 2.0
#define FXAA_QUALITY_P7 2.0
#define FXAA_QUALITY_P8 2.0
#define FXAA_QUALITY_P9 2.0
#define FXAA_QUALITY_P10 4.0
#define FXAA_QUALITY_P11 8.0
#endif
#if (FXAA_QUALITY_PRESET == 39)
#define FXAA_QUALITY_PS 12
#define FXAA_QUALITY_P0 1.0
#define FXAA_QUALITY_P1 1.0
#define FXAA_QUALITY_P2 1.0
#define FXAA_QUALITY_P3 1.0
#define FXAA_QUALITY_P4 1.0
#define FXAA_QUALITY_P5 1.5
#define FXAA_QUALITY_P6 2.0
#define FXAA_QUALITY_P7 2.0
#define FXAA_QUALITY_P8 2.0
#define FXAA_QUALITY_P9 2.0
#define FXAA_QUALITY_P10 4.0
#define FXAA_QUALITY_P11 8.0
#endif
#define FxaaBool bool
#define FxaaFloat float
#define FxaaFloat2 vec2
#define FxaaFloat3 vec3
#define FxaaFloat4 vec4
#define FxaaHalf float
#define FxaaHalf2 vec2
#define FxaaHalf3 vec3
#define FxaaHalf4 vec4
#define FxaaInt2 vec2
#define FxaaTex sampler2D
#define FxaaSat(x) clamp(x, 0.0, 1.0)
#define FxaaTexTop(t, p) texture(t, p)
#define FxaaTexOff(t, p, o, r) texture(t, p + (o * r))
FxaaFloat FxaaLuma(FxaaFloat4 rgba) { return rgba.y; }
FxaaFloat4 FxaaPixelShader(
//
// Use noperspective interpolation here (turn off perspective interpolation).
// {xy} = center of pixel
FxaaFloat2 pos,
//
// Input color texture.
// {rgb_} = color in linear or perceptual color space
// if (FXAA_GREEN_AS_LUMA == 0)
// {___a} = luma in perceptual color space (not linear)
FxaaTex tex,
//
// Only used on FXAA Quality.
// This must be from a constant/uniform.
// {x_} = 1.0/screenWidthInPixels
// {_y} = 1.0/screenHeightInPixels
FxaaFloat2 fxaaQualityRcpFrame,
//
// Only used on FXAA Quality.
// This used to be the FXAA_QUALITY_SUBPIX define.
// It is here now to allow easier tuning.
// Choose the amount of sub-pixel aliasing removal.
// This can effect sharpness.
// 1.00 - upper limit (softer)
// 0.75 - default amount of filtering
// 0.50 - lower limit (sharper, less sub-pixel aliasing removal)
// 0.25 - almost off
// 0.00 - completely off
FxaaFloat fxaaQualitySubpix,
//
// Only used on FXAA Quality.
// This used to be the FXAA_QUALITY_EDGE_THRESHOLD define.
// It is here now to allow easier tuning.
// The minimum amount of local contrast required to apply algorithm.
// 0.333 - too little (faster)
// 0.250 - low quality
// 0.166 - default
// 0.125 - high quality
// 0.063 - overkill (slower)
FxaaFloat fxaaQualityEdgeThreshold,
//
// Only used on FXAA Quality.
// This used to be the FXAA_QUALITY_EDGE_THRESHOLD_MIN define.
// It is here now to allow easier tuning.
// Trims the algorithm from processing darks.
// 0.0833 - upper limit (default, the start of visible unfiltered edges)
// 0.0625 - high quality (faster)
// 0.0312 - visible limit (slower)
// Special notes when using FXAA_GREEN_AS_LUMA,
// Likely want to set this to zero.
// As colors that are mostly not-green
// will appear very dark in the green channel!
// Tune by looking at mostly non-green content,
// then start at zero and increase until aliasing is a problem.
FxaaFloat fxaaQualityEdgeThresholdMin
) {
/*--------------------------------------------------------------------------*/
FxaaFloat2 posM;
posM.x = pos.x;
posM.y = pos.y;
FxaaFloat4 rgbyM = FxaaTexTop(tex, posM);
#define lumaM rgbyM.y
FxaaFloat lumaS = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2( 0, 1), fxaaQualityRcpFrame.xy));
FxaaFloat lumaE = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2( 1, 0), fxaaQualityRcpFrame.xy));
FxaaFloat lumaN = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2( 0,-1), fxaaQualityRcpFrame.xy));
FxaaFloat lumaW = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2(-1, 0), fxaaQualityRcpFrame.xy));
/*--------------------------------------------------------------------------*/
FxaaFloat maxSM = max(lumaS, lumaM);
FxaaFloat minSM = min(lumaS, lumaM);
FxaaFloat maxESM = max(lumaE, maxSM);
FxaaFloat minESM = min(lumaE, minSM);
FxaaFloat maxWN = max(lumaN, lumaW);
FxaaFloat minWN = min(lumaN, lumaW);
FxaaFloat rangeMax = max(maxWN, maxESM);
FxaaFloat rangeMin = min(minWN, minESM);
FxaaFloat rangeMaxScaled = rangeMax * fxaaQualityEdgeThreshold;
FxaaFloat range = rangeMax - rangeMin;
FxaaFloat rangeMaxClamped = max(fxaaQualityEdgeThresholdMin, rangeMaxScaled);
FxaaBool earlyExit = range < rangeMaxClamped;
/*--------------------------------------------------------------------------*/
if(earlyExit)
return rgbyM;
/*--------------------------------------------------------------------------*/
FxaaFloat lumaNW = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2(-1,-1), fxaaQualityRcpFrame.xy));
FxaaFloat lumaSE = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2( 1, 1), fxaaQualityRcpFrame.xy));
FxaaFloat lumaNE = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2( 1,-1), fxaaQualityRcpFrame.xy));
FxaaFloat lumaSW = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2(-1, 1), fxaaQualityRcpFrame.xy));
/*--------------------------------------------------------------------------*/
FxaaFloat lumaNS = lumaN + lumaS;
FxaaFloat lumaWE = lumaW + lumaE;
FxaaFloat subpixRcpRange = 1.0/range;
FxaaFloat subpixNSWE = lumaNS + lumaWE;
FxaaFloat edgeHorz1 = (-2.0 * lumaM) + lumaNS;
FxaaFloat edgeVert1 = (-2.0 * lumaM) + lumaWE;
/*--------------------------------------------------------------------------*/
FxaaFloat lumaNESE = lumaNE + lumaSE;
FxaaFloat lumaNWNE = lumaNW + lumaNE;
FxaaFloat edgeHorz2 = (-2.0 * lumaE) + lumaNESE;
FxaaFloat edgeVert2 = (-2.0 * lumaN) + lumaNWNE;
/*--------------------------------------------------------------------------*/
FxaaFloat lumaNWSW = lumaNW + lumaSW;
FxaaFloat lumaSWSE = lumaSW + lumaSE;
FxaaFloat edgeHorz4 = (abs(edgeHorz1) * 2.0) + abs(edgeHorz2);
FxaaFloat edgeVert4 = (abs(edgeVert1) * 2.0) + abs(edgeVert2);
FxaaFloat edgeHorz3 = (-2.0 * lumaW) + lumaNWSW;
FxaaFloat edgeVert3 = (-2.0 * lumaS) + lumaSWSE;
FxaaFloat edgeHorz = abs(edgeHorz3) + edgeHorz4;
FxaaFloat edgeVert = abs(edgeVert3) + edgeVert4;
/*--------------------------------------------------------------------------*/
FxaaFloat subpixNWSWNESE = lumaNWSW + lumaNESE;
FxaaFloat lengthSign = fxaaQualityRcpFrame.x;
FxaaBool horzSpan = edgeHorz >= edgeVert;
FxaaFloat subpixA = subpixNSWE * 2.0 + subpixNWSWNESE;
/*--------------------------------------------------------------------------*/
if(!horzSpan) lumaN = lumaW;
if(!horzSpan) lumaS = lumaE;
if(horzSpan) lengthSign = fxaaQualityRcpFrame.y;
FxaaFloat subpixB = (subpixA * (1.0/12.0)) - lumaM;
/*--------------------------------------------------------------------------*/
FxaaFloat gradientN = lumaN - lumaM;
FxaaFloat gradientS = lumaS - lumaM;
FxaaFloat lumaNN = lumaN + lumaM;
FxaaFloat lumaSS = lumaS + lumaM;
FxaaBool pairN = abs(gradientN) >= abs(gradientS);
FxaaFloat gradient = max(abs(gradientN), abs(gradientS));
if(pairN) lengthSign = -lengthSign;
FxaaFloat subpixC = FxaaSat(abs(subpixB) * subpixRcpRange);
/*--------------------------------------------------------------------------*/
FxaaFloat2 posB;
posB.x = posM.x;
posB.y = posM.y;
FxaaFloat2 offNP;
offNP.x = (!horzSpan) ? 0.0 : fxaaQualityRcpFrame.x;
offNP.y = ( horzSpan) ? 0.0 : fxaaQualityRcpFrame.y;
if(!horzSpan) posB.x += lengthSign * 0.5;
if( horzSpan) posB.y += lengthSign * 0.5;
/*--------------------------------------------------------------------------*/
FxaaFloat2 posN;
posN.x = posB.x - offNP.x * FXAA_QUALITY_P0;
posN.y = posB.y - offNP.y * FXAA_QUALITY_P0;
FxaaFloat2 posP;
posP.x = posB.x + offNP.x * FXAA_QUALITY_P0;
posP.y = posB.y + offNP.y * FXAA_QUALITY_P0;
FxaaFloat subpixD = ((-2.0)*subpixC) + 3.0;
FxaaFloat lumaEndN = FxaaLuma(FxaaTexTop(tex, posN));
FxaaFloat subpixE = subpixC * subpixC;
FxaaFloat lumaEndP = FxaaLuma(FxaaTexTop(tex, posP));
/*--------------------------------------------------------------------------*/
if(!pairN) lumaNN = lumaSS;
FxaaFloat gradientScaled = gradient * 1.0/4.0;
FxaaFloat lumaMM = lumaM - lumaNN * 0.5;
FxaaFloat subpixF = subpixD * subpixE;
FxaaBool lumaMLTZero = lumaMM < 0.0;
/*--------------------------------------------------------------------------*/
lumaEndN -= lumaNN * 0.5;
lumaEndP -= lumaNN * 0.5;
FxaaBool doneN = abs(lumaEndN) >= gradientScaled;
FxaaBool doneP = abs(lumaEndP) >= gradientScaled;
if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P1;
if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P1;
FxaaBool doneNP = (!doneN) || (!doneP);
if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P1;
if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P1;
/*--------------------------------------------------------------------------*/
if(doneNP) {
if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));
if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));
if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;
if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;
doneN = abs(lumaEndN) >= gradientScaled;
doneP = abs(lumaEndP) >= gradientScaled;
if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P2;
if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P2;
doneNP = (!doneN) || (!doneP);
if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P2;
if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P2;
/*--------------------------------------------------------------------------*/
#if (FXAA_QUALITY_PS > 3)
if(doneNP) {
if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));
if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));
if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;
if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;
doneN = abs(lumaEndN) >= gradientScaled;
doneP = abs(lumaEndP) >= gradientScaled;
if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P3;
if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P3;
doneNP = (!doneN) || (!doneP);
if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P3;
if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P3;
/*--------------------------------------------------------------------------*/
#if (FXAA_QUALITY_PS > 4)
if(doneNP) {
if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));
if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));
if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;
if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;
doneN = abs(lumaEndN) >= gradientScaled;
doneP = abs(lumaEndP) >= gradientScaled;
if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P4;
if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P4;
doneNP = (!doneN) || (!doneP);
if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P4;
if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P4;
/*--------------------------------------------------------------------------*/
#if (FXAA_QUALITY_PS > 5)
if(doneNP) {
if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));
if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));
if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;
if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;
doneN = abs(lumaEndN) >= gradientScaled;
doneP = abs(lumaEndP) >= gradientScaled;
if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P5;
if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P5;
doneNP = (!doneN) || (!doneP);
if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P5;
if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P5;
/*--------------------------------------------------------------------------*/
#if (FXAA_QUALITY_PS > 6)
if(doneNP) {
if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));
if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));
if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;
if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;
doneN = abs(lumaEndN) >= gradientScaled;
doneP = abs(lumaEndP) >= gradientScaled;
if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P6;
if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P6;
doneNP = (!doneN) || (!doneP);
if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P6;
if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P6;
/*--------------------------------------------------------------------------*/
#if (FXAA_QUALITY_PS > 7)
if(doneNP) {
if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));
if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));
if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;
if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;
doneN = abs(lumaEndN) >= gradientScaled;
doneP = abs(lumaEndP) >= gradientScaled;
if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P7;
if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P7;
doneNP = (!doneN) || (!doneP);
if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P7;
if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P7;
/*--------------------------------------------------------------------------*/
#if (FXAA_QUALITY_PS > 8)
if(doneNP) {
if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));
if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));
if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;
if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;
doneN = abs(lumaEndN) >= gradientScaled;
doneP = abs(lumaEndP) >= gradientScaled;
if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P8;
if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P8;
doneNP = (!doneN) || (!doneP);
if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P8;
if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P8;
/*--------------------------------------------------------------------------*/
#if (FXAA_QUALITY_PS > 9)
if(doneNP) {
if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));
if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));
if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;
if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;
doneN = abs(lumaEndN) >= gradientScaled;
doneP = abs(lumaEndP) >= gradientScaled;
if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P9;
if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P9;
doneNP = (!doneN) || (!doneP);
if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P9;
if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P9;
/*--------------------------------------------------------------------------*/
#if (FXAA_QUALITY_PS > 10)
if(doneNP) {
if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));
if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));
if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;
if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;
doneN = abs(lumaEndN) >= gradientScaled;
doneP = abs(lumaEndP) >= gradientScaled;
if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P10;
if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P10;
doneNP = (!doneN) || (!doneP);
if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P10;
if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P10;
/*--------------------------------------------------------------------------*/
#if (FXAA_QUALITY_PS > 11)
if(doneNP) {
if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));
if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));
if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;
if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;
doneN = abs(lumaEndN) >= gradientScaled;
doneP = abs(lumaEndP) >= gradientScaled;
if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P11;
if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P11;
doneNP = (!doneN) || (!doneP);
if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P11;
if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P11;
/*--------------------------------------------------------------------------*/
#if (FXAA_QUALITY_PS > 12)
if(doneNP) {
if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));
if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));
if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;
if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;
doneN = abs(lumaEndN) >= gradientScaled;
doneP = abs(lumaEndP) >= gradientScaled;
if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P12;
if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P12;
doneNP = (!doneN) || (!doneP);
if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P12;
if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P12;
/*--------------------------------------------------------------------------*/
}
#endif
/*--------------------------------------------------------------------------*/
}
#endif
/*--------------------------------------------------------------------------*/
}
#endif
/*--------------------------------------------------------------------------*/
}
#endif
/*--------------------------------------------------------------------------*/
}
#endif
/*--------------------------------------------------------------------------*/
}
#endif
/*--------------------------------------------------------------------------*/
}
#endif
/*--------------------------------------------------------------------------*/
}
#endif
/*--------------------------------------------------------------------------*/
}
#endif
/*--------------------------------------------------------------------------*/
}
#endif
/*--------------------------------------------------------------------------*/
}
/*--------------------------------------------------------------------------*/
FxaaFloat dstN = posM.x - posN.x;
FxaaFloat dstP = posP.x - posM.x;
if(!horzSpan) dstN = posM.y - posN.y;
if(!horzSpan) dstP = posP.y - posM.y;
/*--------------------------------------------------------------------------*/
FxaaBool goodSpanN = (lumaEndN < 0.0) != lumaMLTZero;
FxaaFloat spanLength = (dstP + dstN);
FxaaBool goodSpanP = (lumaEndP < 0.0) != lumaMLTZero;
FxaaFloat spanLengthRcp = 1.0/spanLength;
/*--------------------------------------------------------------------------*/
FxaaBool directionN = dstN < dstP;
FxaaFloat dst = min(dstN, dstP);
FxaaBool goodSpan = directionN ? goodSpanN : goodSpanP;
FxaaFloat subpixG = subpixF * subpixF;
FxaaFloat pixelOffset = (dst * (-spanLengthRcp)) + 0.5;
FxaaFloat subpixH = subpixG * fxaaQualitySubpix;
/*--------------------------------------------------------------------------*/
FxaaFloat pixelOffsetGood = goodSpan ? pixelOffset : 0.0;
FxaaFloat pixelOffsetSubpix = max(pixelOffsetGood, subpixH);
if(!horzSpan) posM.x += pixelOffsetSubpix * lengthSign;
if( horzSpan) posM.y += pixelOffsetSubpix * lengthSign;
return FxaaFloat4(FxaaTexTop(tex, posM).xyz, lumaM);
}
`;var MKi=y(x(),1),$X=`uniform vec4 u_initialColor;
#if TEXTURE_UNITS > 0
uniform sampler2D u_dayTextures[TEXTURE_UNITS];
uniform vec4 u_dayTextureTranslationAndScale[TEXTURE_UNITS];
uniform bool u_dayTextureUseWebMercatorT[TEXTURE_UNITS];
#ifdef APPLY_ALPHA
uniform float u_dayTextureAlpha[TEXTURE_UNITS];
#endif
#ifdef APPLY_DAY_NIGHT_ALPHA
uniform float u_dayTextureNightAlpha[TEXTURE_UNITS];
uniform float u_dayTextureDayAlpha[TEXTURE_UNITS];
#endif
#ifdef APPLY_SPLIT
uniform float u_dayTextureSplit[TEXTURE_UNITS];
#endif
#ifdef APPLY_BRIGHTNESS
uniform float u_dayTextureBrightness[TEXTURE_UNITS];
#endif
#ifdef APPLY_CONTRAST
uniform float u_dayTextureContrast[TEXTURE_UNITS];
#endif
#ifdef APPLY_HUE
uniform float u_dayTextureHue[TEXTURE_UNITS];
#endif
#ifdef APPLY_SATURATION
uniform float u_dayTextureSaturation[TEXTURE_UNITS];
#endif
#ifdef APPLY_GAMMA
uniform float u_dayTextureOneOverGamma[TEXTURE_UNITS];
#endif
//\u3010mars3d.cn\u4FEE\u6539\u3011 Hao 2022-1-5 \u74E6\u7247\u6EE4\u955C\u6548\u679C
#ifdef APPLY_INVERT_COLOR_MARS3D
uniform bool u_mars3dTextureInvertColor[TEXTURE_UNITS];
#endif
#ifdef APPLY_FILTER_COLOR_MARS3D
uniform vec3 u_mars3dTextureFilterColor[TEXTURE_UNITS];
#endif
//\u3010mars3d.cn\u4FEE\u6539\u3011 Hao 2022-1-5 \u74E6\u7247\u6EE4\u955C\u6548\u679C
#ifdef APPLY_IMAGERY_CUTOUT
uniform vec4 u_dayTextureCutoutRectangles[TEXTURE_UNITS];
#endif
#ifdef APPLY_COLOR_TO_ALPHA
uniform vec4 u_colorsToAlpha[TEXTURE_UNITS];
#endif
uniform vec4 u_dayTextureTexCoordsRectangle[TEXTURE_UNITS];
#endif
#if defined(HAS_WATER_MASK) && (defined(SHOW_REFLECTIVE_OCEAN) || defined(APPLY_MATERIAL))
uniform sampler2D u_waterMask;
uniform vec4 u_waterMaskTranslationAndScale;
uniform float u_zoomedOutOceanSpecularIntensity;
#endif
#ifdef SHOW_OCEAN_WAVES
uniform sampler2D u_oceanNormalMap;
#endif
#if defined(ENABLE_DAYNIGHT_SHADING) || defined(GROUND_ATMOSPHERE)
uniform vec2 u_lightingFadeDistance;
#endif
#ifdef TILE_LIMIT_RECTANGLE
uniform vec4 u_cartographicLimitRectangle;
#endif
#ifdef GROUND_ATMOSPHERE
uniform vec2 u_nightFadeDistance;
#endif
#ifdef ENABLE_CLIPPING_PLANES
uniform highp sampler2D u_clippingPlanes;
uniform mat4 u_clippingPlanesMatrix;
uniform vec4 u_clippingPlanesEdgeStyle;
#endif
#ifdef ENABLE_CLIPPING_POLYGONS
uniform highp sampler2D u_clippingDistance;
in vec2 v_clippingPosition;
flat in int v_regionIndex;
#endif
#if defined(GROUND_ATMOSPHERE) || defined(FOG) && defined(DYNAMIC_ATMOSPHERE_LIGHTING) && (defined(ENABLE_VERTEX_LIGHTING) || defined(ENABLE_DAYNIGHT_SHADING))
uniform float u_minimumBrightness;
#endif
// Based on colorCorrect
// The colorCorrect flag can only be true when tileProvider.hue/saturation/brightnessShift
// are nonzero AND when (applyFog || showGroundAtmosphere) in the tile provider
// - The tileProvider.hue/saturation/brightnessShift are just passed through
// from the Globe hue/saturation/brightness, like atmosphereBrightnessShift
// - The applyFog depends on enableFog, and some tile distance from the viewer
// - The showGroundAtmosphere is a flag that is passed through from the Globe,
// and is true by default when the ellipsoid is WGS84
#ifdef COLOR_CORRECT
uniform vec3 u_hsbShift; // Hue, saturation, brightness
#endif
// Based on highlightFillTile
// This is set for terrain tiles when they are "fill" tiles, and
// the terrainProvider.fillHighlightColor was set to a value with
// nonzero alpha
#ifdef HIGHLIGHT_FILL_TILE
uniform vec4 u_fillHighlightColor;
#endif
// Based on translucent
// This is set depending on the GlobeTranslucencyState
#ifdef TRANSLUCENT
uniform vec4 u_frontFaceAlphaByDistance;
uniform vec4 u_backFaceAlphaByDistance;
uniform vec4 u_translucencyRectangle;
#endif
// Based on showUndergroundColor
// This is set when GlobeSurfaceTileProvider.isUndergroundVisible
// returns true, AND the tileProvider.undergroundColor had a value with
// nonzero alpha, and the tileProvider.undergroundColorAlphaByDistance
// was in the right range
#ifdef UNDERGROUND_COLOR
uniform vec4 u_undergroundColor;
uniform vec4 u_undergroundColorAlphaByDistance;
#endif
// Based on enableLighting && hasVertexNormals
// The enableLighting flag is passed in directly from the Globe.
// The hasVertexNormals flag is from the tileProvider
#ifdef ENABLE_VERTEX_LIGHTING
uniform float u_lambertDiffuseMultiplier;
uniform float u_vertexShadowDarkness;
#endif
in vec3 v_positionMC;
in vec3 v_positionEC;
in vec3 v_textureCoordinates;
in vec3 v_normalMC;
in vec3 v_normalEC;
#ifdef APPLY_MATERIAL
in float v_height;
in float v_slope;
in float v_aspect;
#endif
//\u3010mars3d.cn\u4FEE\u6539\u3011 Muyao 2023-07-19 \u5730\u5F62\u533A\u57DF\u6750\u8D28(\u6DF9\u6CA1\uFF0C\u7B49\u9AD8\u7EBF)
#ifdef APPLY_MARS3D_FLOOD
uniform bool u_mars_flood_enabled;
uniform bool u_mars_flood_only;
uniform vec4 u_mars_flood_rectangle;
uniform highp sampler2D u_mars_flood_texture;
#endif
//\u3010mars3d.cn\u4FEE\u6539\u3011 Muyao 2023-07-19 \u5730\u5F62\u533A\u57DF\u6750\u8D28(\u6DF9\u6CA1\uFF0C\u7B49\u9AD8\u7EBF)
//\u3010mars3d.cn\u4FEE\u6539\u3011 Muyao 2023-07-19 \u5730\u5F62\u5F00\u6316
#ifdef APPLY_MARS3D_CLIP
uniform bool u_mars_clip_enabled;
uniform bool u_mars_clip_only;
uniform vec4 u_mars_clip_rectangle;
uniform highp sampler2D u_mars_clip_texture;
#endif
//\u3010mars3d.cn\u4FEE\u6539\u3011 Muyao 2023-07-19 \u5730\u5F62\u5F00\u6316
//\u3010mars3d.cn\u4FEE\u6539\u3011 Muyao 2023-07-19 \u5730\u5F62\u7F16\u8F91\u901A\u7528\u7684\u8303\u56F4\u5224\u65AD\u65B9\u6CD5\uFF08\u542B \u5730\u5F62\u62AC\u5347/\u5730\u5F62\u538B\u5E73/\u5730\u5F62\u5F00\u6316/\u5730\u5F62\u533A\u57DF\u6750\u8D28\uFF09
uniform highp float u_mars_inverseTileWidth;
uniform highp vec2 u_mars_cartographicTileRectangle;
bool inAreaMars3DRange(vec4 rectangle, sampler2D rangeTexture) {
float lo = v_textureCoordinates.x / u_mars_inverseTileWidth + u_mars_cartographicTileRectangle.x;
float la = v_textureCoordinates.y / u_mars_inverseTileWidth + u_mars_cartographicTileRectangle.y;
float newX = (lo - rectangle.x) / rectangle.z;
float newY = (la - rectangle.y) / rectangle.w;
if(newX >= 0.0 && newX <= 1.0 && newY >= 0.0 && newY <= 1.0){
vec4 point = texture(rangeTexture, vec2(newX, newY));
return point.r > 0.0;
}
return false;
}
//\u3010mars3d.cn\u4FEE\u6539\u3011 Muyao 2023-07-19 \u5730\u5F62\u7F16\u8F91\u901A\u7528\u7684\u8303\u56F4\u5224\u65AD\u65B9\u6CD5\uFF08\u542B \u5730\u5F62\u62AC\u5347/\u5730\u5F62\u538B\u5E73/\u5730\u5F62\u5F00\u6316/\u5730\u5F62\u533A\u57DF\u6750\u8D28\uFF09
#if defined(FOG) || defined(GROUND_ATMOSPHERE) || defined(UNDERGROUND_COLOR) || defined(TRANSLUCENT)
in float v_distance;
#endif
#if defined(GROUND_ATMOSPHERE) || defined(FOG)
in vec3 v_atmosphereRayleighColor;
in vec3 v_atmosphereMieColor;
in float v_atmosphereOpacity;
#endif
// \u3010mars3d.cn\u4FEE\u6539\u3011 Muyao 2023-02-20 \u5730\u5F62\u62AC\u5347
#ifdef APPLY_MARS3D_UPLIFT
uniform vec4 u_mars_uplift_rectangle;
uniform highp sampler2D u_mars_uplift_texture;
uniform bool u_mars_uplift_enabled;
uniform bool u_mars_uplift_hideInsideOrOutside;
#endif
// \u3010mars3d.cn\u4FEE\u6539\u3011 Muyao 2023-02-20 \u5730\u5F62\u62AC\u5347
#if defined(UNDERGROUND_COLOR) || defined(TRANSLUCENT)
float interpolateByDistance(vec4 nearFarScalar, float distance)
{
float startDistance = nearFarScalar.x;
float startValue = nearFarScalar.y;
float endDistance = nearFarScalar.z;
float endValue = nearFarScalar.w;
float t = clamp((distance - startDistance) / (endDistance - startDistance), 0.0, 1.0);
return mix(startValue, endValue, t);
}
#endif
#if defined(UNDERGROUND_COLOR) || defined(TRANSLUCENT) || defined(APPLY_MATERIAL)
vec4 alphaBlend(vec4 sourceColor, vec4 destinationColor)
{
return sourceColor * vec4(sourceColor.aaa, 1.0) + destinationColor * (1.0 - sourceColor.a);
}
#endif
#ifdef TRANSLUCENT
bool inTranslucencyRectangle()
{
return
v_textureCoordinates.x > u_translucencyRectangle.x &&
v_textureCoordinates.x < u_translucencyRectangle.z &&
v_textureCoordinates.y > u_translucencyRectangle.y &&
v_textureCoordinates.y < u_translucencyRectangle.w;
}
#endif
vec4 sampleAndBlend(
vec4 previousColor,
sampler2D textureToSample,
vec2 tileTextureCoordinates,
vec4 textureCoordinateRectangle,
vec4 textureCoordinateTranslationAndScale,
float textureAlpha,
float textureNightAlpha,
float textureDayAlpha,
float textureBrightness,
float textureContrast,
float textureHue,
float textureSaturation,
float textureOneOverGamma,
//\u3010mars3d.cn\u4FEE\u6539\u3011 Hao 2022-1-5 \u74E6\u7247\u6EE4\u955C\u6548\u679C
bool textureInvertColor,
vec3 texturefilterColor,
//\u3010mars3d.cn\u4FEE\u6539\u3011 Hao 2022-1-5 \u74E6\u7247\u6EE4\u955C\u6548\u679C
float split,
vec4 colorToAlpha,
float nightBlend)
{
// This crazy step stuff sets the alpha to 0.0 if this following condition is true:
// tileTextureCoordinates.s < textureCoordinateRectangle.s ||
// tileTextureCoordinates.s > textureCoordinateRectangle.p ||
// tileTextureCoordinates.t < textureCoordinateRectangle.t ||
// tileTextureCoordinates.t > textureCoordinateRectangle.q
// In other words, the alpha is zero if the fragment is outside the rectangle
// covered by this texture. Would an actual 'if' yield better performance?
vec2 alphaMultiplier = step(textureCoordinateRectangle.st, tileTextureCoordinates);
textureAlpha = textureAlpha * alphaMultiplier.x * alphaMultiplier.y;
alphaMultiplier = step(vec2(0.0), textureCoordinateRectangle.pq - tileTextureCoordinates);
textureAlpha = textureAlpha * alphaMultiplier.x * alphaMultiplier.y;
#if defined(APPLY_DAY_NIGHT_ALPHA) && defined(ENABLE_DAYNIGHT_SHADING)
textureAlpha *= mix(textureDayAlpha, textureNightAlpha, nightBlend);
#endif
vec2 translation = textureCoordinateTranslationAndScale.xy;
vec2 scale = textureCoordinateTranslationAndScale.zw;
vec2 textureCoordinates = tileTextureCoordinates * scale + translation;
vec4 value = texture(textureToSample, textureCoordinates);
vec3 color = value.rgb;
float alpha = value.a;
#ifdef APPLY_COLOR_TO_ALPHA
vec3 colorDiff = abs(color.rgb - colorToAlpha.rgb);
colorDiff.r = czm_maximumComponent(colorDiff);
alpha = czm_branchFreeTernary(colorDiff.r < colorToAlpha.a, 0.0, alpha);
#endif
#if !defined(APPLY_GAMMA)
vec4 tempColor = czm_gammaCorrect(vec4(color, alpha));
color = tempColor.rgb;
alpha = tempColor.a;
#else
color = pow(color, vec3(textureOneOverGamma));
#endif
#ifdef APPLY_SPLIT
float splitPosition = czm_splitPosition;
// Split to the left
if (split < 0.0 && gl_FragCoord.x > splitPosition) {
alpha = 0.0;
}
// Split to the right
else if (split > 0.0 && gl_FragCoord.x < splitPosition) {
alpha = 0.0;
}
#endif
#ifdef APPLY_BRIGHTNESS
color = mix(vec3(0.0), color, textureBrightness);
#endif
#ifdef APPLY_CONTRAST
color = mix(vec3(0.5), color, textureContrast);
#endif
#ifdef APPLY_HUE
color = czm_hue(color, textureHue);
#endif
#ifdef APPLY_SATURATION
color = czm_saturation(color, textureSaturation);
#endif
//\u3010mars3d.cn\u4FEE\u6539\u3011 Hao 2022-1-5 \u74E6\u7247\u6EE4\u955C\u6548\u679C
#ifdef APPLY_INVERT_COLOR_MARS3D
if(textureInvertColor) {
color = vec3(1.0 - color.r, 1.0 - color.g, 1.0 - color.b);
}
#endif
#ifdef APPLY_FILTER_COLOR_MARS3D
if(texturefilterColor.x != 1.0 || texturefilterColor.y != 1.0 || texturefilterColor.z != 1.0) {
color = vec3(color.r * texturefilterColor.x, color.g * texturefilterColor.y, color.b * texturefilterColor.z);
}
#endif
//\u3010mars3d.cn\u4FEE\u6539\u3011 Hao 2022-1-5 \u74E6\u7247\u6EE4\u955C\u6548\u679C
float sourceAlpha = alpha * textureAlpha;
float outAlpha = mix(previousColor.a, 1.0, sourceAlpha);
outAlpha += sign(outAlpha) - 1.0;
vec3 outColor = mix(previousColor.rgb * previousColor.a, color, sourceAlpha) / outAlpha;
// When rendering imagery for a tile in multiple passes,
// some GPU/WebGL implementation combinations will not blend fragments in
// additional passes correctly if their computation includes an unmasked
// divide-by-zero operation,
// even if it's not in the output or if the output has alpha zero.
//
// For example, without sanitization for outAlpha,
// this renders without artifacts:
// if (outAlpha == 0.0) { outColor = vec3(0.0); }
//
// but using czm_branchFreeTernary will cause portions of the tile that are
// alpha-zero in the additional pass to render as black instead of blending
// with the previous pass:
// outColor = czm_branchFreeTernary(outAlpha == 0.0, vec3(0.0), outColor);
//
// So instead, sanitize against divide-by-zero,
// store this state on the sign of outAlpha, and correct on return.
return vec4(outColor, max(outAlpha, 0.0));
}
vec3 colorCorrect(vec3 rgb) {
#ifdef COLOR_CORRECT
// Convert rgb color to hsb
vec3 hsb = czm_RGBToHSB(rgb);
// Perform hsb shift
hsb.x += u_hsbShift.x; // hue
hsb.y = clamp(hsb.y + u_hsbShift.y, 0.0, 1.0); // saturation
hsb.z = hsb.z > czm_epsilon7 ? hsb.z + u_hsbShift.z : 0.0; // brightness
// Convert shifted hsb back to rgb
rgb = czm_HSBToRGB(hsb);
#endif
return rgb;
}
vec4 computeDayColor(vec4 initialColor, vec3 textureCoordinates, float nightBlend);
vec4 computeWaterColor(vec3 positionEyeCoordinates, vec2 textureCoordinates, mat3 enuToEye, vec4 imageryColor, float specularMapValue, float fade);
const float fExposure = 2.0;
vec3 computeEllipsoidPosition()
{
float mpp = czm_metersPerPixel(vec4(0.0, 0.0, -czm_currentFrustum.x, 1.0), 1.0);
vec2 xy = gl_FragCoord.xy / czm_viewport.zw * 2.0 - vec2(1.0);
xy *= czm_viewport.zw * mpp * 0.5;
vec3 direction;
if (czm_orthographicIn3D == 1.0)
{
direction = vec3(0.0, 0.0, -1.0);
}
else
{
direction = normalize(vec3(xy, -czm_currentFrustum.x));
}
czm_ray ray = czm_ray(vec3(0.0), direction);
vec3 ellipsoid_center = czm_view[3].xyz;
czm_raySegment intersection = czm_rayEllipsoidIntersectionInterval(ray, ellipsoid_center, czm_ellipsoidInverseRadii);
vec3 ellipsoidPosition = czm_pointAlongRay(ray, intersection.start);
return (czm_inverseView * vec4(ellipsoidPosition, 1.0)).xyz;
}
void main()
{
//\u3010mars3d.cn\u4FEE\u6539\u3011 Muyao 2023-07-19 \u5730\u5F62\u5F00\u6316
#ifdef APPLY_MARS3D_CLIP
if(u_mars_clip_enabled) {
if(u_mars_clip_only) {
if(!inAreaMars3DRange(u_mars_clip_rectangle, u_mars_clip_texture)) {
discard;
}
} else {
if(inAreaMars3DRange(u_mars_clip_rectangle, u_mars_clip_texture)) {
discard;
}
}
}
#endif
//\u3010mars3d.cn\u4FEE\u6539\u3011 Muyao 2023-07-19 \u5730\u5F62\u5F00\u6316
#ifdef TILE_LIMIT_RECTANGLE
if (v_textureCoordinates.x < u_cartographicLimitRectangle.x || u_cartographicLimitRectangle.z < v_textureCoordinates.x ||
v_textureCoordinates.y < u_cartographicLimitRectangle.y || u_cartographicLimitRectangle.w < v_textureCoordinates.y)
{
discard;
}
#endif
#ifdef ENABLE_CLIPPING_PLANES
float clipDistance = clip(gl_FragCoord, u_clippingPlanes, u_clippingPlanesMatrix);
#endif
#if defined(SHOW_REFLECTIVE_OCEAN) || defined(ENABLE_DAYNIGHT_SHADING) || defined(HDR)
vec3 normalMC = czm_geodeticSurfaceNormal(v_positionMC, vec3(0.0), vec3(1.0)); // normalized surface normal in model coordinates
vec3 normalEC = czm_normal3D * normalMC; // normalized surface normal in eye coordinates
#endif
#if defined(APPLY_DAY_NIGHT_ALPHA) && defined(ENABLE_DAYNIGHT_SHADING)
float nightBlend = 1.0 - clamp(czm_getLambertDiffuse(czm_lightDirectionEC, normalEC) * 5.0, 0.0, 1.0);
#else
float nightBlend = 0.0;
#endif
// The clamp below works around an apparent bug in Chrome Canary v23.0.1241.0
// where the fragment shader sees textures coordinates < 0.0 and > 1.0 for the
// fragments on the edges of tiles even though the vertex shader is outputting
// coordinates strictly in the 0-1 range.
vec4 color = computeDayColor(u_initialColor, clamp(v_textureCoordinates, 0.0, 1.0), nightBlend);
#ifdef SHOW_TILE_BOUNDARIES
if (v_textureCoordinates.x < (1.0/256.0) || v_textureCoordinates.x > (255.0/256.0) ||
v_textureCoordinates.y < (1.0/256.0) || v_textureCoordinates.y > (255.0/256.0))
{
color = vec4(1.0, 0.0, 0.0, 1.0);
}
#endif
#if defined(ENABLE_DAYNIGHT_SHADING) || defined(GROUND_ATMOSPHERE)
float cameraDist;
if (czm_sceneMode == czm_sceneMode2D)
{
cameraDist = max(czm_frustumPlanes.x - czm_frustumPlanes.y, czm_frustumPlanes.w - czm_frustumPlanes.z) * 0.5;
}
else if (czm_sceneMode == czm_sceneModeColumbusView)
{
cameraDist = -czm_view[3].z;
}
else
{
cameraDist = length(czm_view[3]);
}
float fadeOutDist = u_lightingFadeDistance.x;
float fadeInDist = u_lightingFadeDistance.y;
if (czm_sceneMode != czm_sceneMode3D) {
vec3 radii = czm_ellipsoidRadii;
float maxRadii = max(radii.x, max(radii.y, radii.z));
fadeOutDist -= maxRadii;
fadeInDist -= maxRadii;
}
float fade = clamp((cameraDist - fadeOutDist) / (fadeInDist - fadeOutDist), 0.0, 1.0);
#else
float fade = 0.0;
#endif
#if defined(HAS_WATER_MASK) && (defined(SHOW_REFLECTIVE_OCEAN) || defined(APPLY_MATERIAL))
vec2 waterMaskTranslation = u_waterMaskTranslationAndScale.xy;
vec2 waterMaskScale = u_waterMaskTranslationAndScale.zw;
vec2 waterMaskTextureCoordinates = v_textureCoordinates.xy * waterMaskScale + waterMaskTranslation;
waterMaskTextureCoordinates.y = 1.0 - waterMaskTextureCoordinates.y;
float mask = texture(u_waterMask, waterMaskTextureCoordinates).r;
#ifdef SHOW_REFLECTIVE_OCEAN
if (mask > 0.0)
{
mat3 enuToEye = czm_eastNorthUpToEyeCoordinates(v_positionMC, normalEC);
vec2 ellipsoidTextureCoordinates = czm_ellipsoidTextureCoordinates(normalMC);
vec2 ellipsoidFlippedTextureCoordinates = czm_ellipsoidTextureCoordinates(normalMC.zyx);
vec2 textureCoordinates = mix(ellipsoidTextureCoordinates, ellipsoidFlippedTextureCoordinates, czm_morphTime * smoothstep(0.9, 0.95, normalMC.z));
color = computeWaterColor(v_positionEC, textureCoordinates, enuToEye, color, mask, fade);
}
#endif
#endif
#ifdef APPLY_MATERIAL
czm_materialInput materialInput;
materialInput.st = v_textureCoordinates.st;
materialInput.normalEC = normalize(v_normalEC);
materialInput.positionToEyeEC = -v_positionEC;
materialInput.tangentToEyeMatrix = czm_eastNorthUpToEyeCoordinates(v_positionMC, normalize(v_normalEC));
materialInput.slope = v_slope;
materialInput.height = v_height;
materialInput.aspect = v_aspect;
#ifdef HAS_WATER_MASK
materialInput.waterMask = mask;
#endif
czm_material material = czm_getMaterial(materialInput);
//\u3010mars3d.cn\u4FEE\u6539\u3011 Muyao 2023-07-19 \u5730\u5F62\u533A\u57DF\u6750\u8D28(\u6DF9\u6CA1\uFF0C\u7B49\u9AD8\u7EBF)
bool hasAlphaBlend = true;
#ifdef APPLY_MARS3D_FLOOD
hasAlphaBlend = !u_mars_flood_enabled || (u_mars_flood_enabled && inAreaMars3DRange(u_mars_flood_rectangle, u_mars_flood_texture));
if(u_mars_flood_enabled) {
if(u_mars_flood_only) {
if(! inAreaMars3DRange(u_mars_flood_rectangle, u_mars_flood_texture)) {
discard;
}
}
}
#endif
//\u3010mars3d.cn\u4FEE\u6539\u3011 Muyao 2023-07-19 \u5730\u5F62\u533A\u57DF\u6750\u8D28(\u6DF9\u6CA1\uFF0C\u7B49\u9AD8\u7EBF)
if(hasAlphaBlend) {
vec4 materialColor = vec4(material.diffuse, material.alpha);
color = alphaBlend(materialColor, color);
}
#endif
#ifdef ENABLE_VERTEX_LIGHTING
float diffuseIntensity = clamp(czm_getLambertDiffuse(czm_lightDirectionEC, normalize(v_normalEC)) * u_lambertDiffuseMultiplier + u_vertexShadowDarkness, 0.0, 1.0);
vec4 finalColor = vec4(color.rgb * czm_lightColor * diffuseIntensity, color.a);
#elif defined(ENABLE_DAYNIGHT_SHADING)
float diffuseIntensity = clamp(czm_getLambertDiffuse(czm_lightDirectionEC, normalEC) * 5.0 + 0.3, 0.0, 1.0);
diffuseIntensity = mix(1.0, diffuseIntensity, fade);
vec4 finalColor = vec4(color.rgb * czm_lightColor * diffuseIntensity, color.a);
#else
vec4 finalColor = color;
#endif
#ifdef ENABLE_CLIPPING_PLANES
vec4 clippingPlanesEdgeColor = vec4(1.0);
clippingPlanesEdgeColor.rgb = u_clippingPlanesEdgeStyle.rgb;
float clippingPlanesEdgeWidth = u_clippingPlanesEdgeStyle.a;
if (clipDistance < clippingPlanesEdgeWidth)
{
finalColor = clippingPlanesEdgeColor;
}
#endif
#ifdef ENABLE_CLIPPING_POLYGONS
vec2 clippingPosition = v_clippingPosition;
int regionIndex = v_regionIndex;
clipPolygons(u_clippingDistance, CLIPPING_POLYGON_REGIONS_LENGTH, clippingPosition, regionIndex);
#endif
#ifdef HIGHLIGHT_FILL_TILE
finalColor = vec4(mix(finalColor.rgb, u_fillHighlightColor.rgb, u_fillHighlightColor.a), finalColor.a);
#endif
#if defined(DYNAMIC_ATMOSPHERE_LIGHTING_FROM_SUN)
vec3 atmosphereLightDirection = czm_sunDirectionWC;
#else
vec3 atmosphereLightDirection = czm_lightDirectionWC;
#endif
#if defined(GROUND_ATMOSPHERE) || defined(FOG)
if (!czm_backFacing())
{
bool dynamicLighting = false;
#if defined(DYNAMIC_ATMOSPHERE_LIGHTING) && (defined(ENABLE_DAYNIGHT_SHADING) || defined(ENABLE_VERTEX_LIGHTING))
dynamicLighting = true;
#endif
vec3 rayleighColor;
vec3 mieColor;
float opacity;
vec3 positionWC;
vec3 lightDirection;
// When the camera is far away (camera distance > nightFadeOutDistance), the scattering is computed in the fragment shader.
// Otherwise, the scattering is computed in the vertex shader.
#ifdef PER_FRAGMENT_GROUND_ATMOSPHERE
positionWC = computeEllipsoidPosition();
lightDirection = czm_branchFreeTernary(dynamicLighting, atmosphereLightDirection, normalize(positionWC));
computeAtmosphereScattering(
positionWC,
lightDirection,
rayleighColor,
mieColor,
opacity
);
#else
positionWC = v_positionMC;
lightDirection = czm_branchFreeTernary(dynamicLighting, atmosphereLightDirection, normalize(positionWC));
rayleighColor = v_atmosphereRayleighColor;
mieColor = v_atmosphereMieColor;
opacity = v_atmosphereOpacity;
#endif
#ifdef COLOR_CORRECT
const bool ignoreBlackPixels = true;
rayleighColor = czm_applyHSBShift(rayleighColor, u_hsbShift, ignoreBlackPixels);
mieColor = czm_applyHSBShift(mieColor, u_hsbShift, ignoreBlackPixels);
#endif
vec4 groundAtmosphereColor = computeAtmosphereColor(positionWC, lightDirection, rayleighColor, mieColor, opacity);
// Fog is applied to tiles selected for fog, close to the Earth.
#ifdef FOG
vec3 fogColor = groundAtmosphereColor.rgb;
// If there is lighting, apply that to the fog.
#if defined(DYNAMIC_ATMOSPHERE_LIGHTING) && (defined(ENABLE_VERTEX_LIGHTING) || defined(ENABLE_DAYNIGHT_SHADING))
float darken = clamp(dot(normalize(czm_viewerPositionWC), atmosphereLightDirection), u_minimumBrightness, 1.0);
fogColor *= darken;
#endif
#ifndef HDR
fogColor.rgb = czm_pbrNeutralTonemapping(fogColor.rgb);
fogColor.rgb = czm_inverseGamma(fogColor.rgb);
#endif
finalColor = vec4(czm_fog(v_distance, finalColor.rgb, fogColor.rgb, czm_fogVisualDensityScalar), finalColor.a);
#else
// Apply ground atmosphere. This happens when the camera is far away from the earth.
// The transmittance is based on optical depth i.e. the length of segment of the ray inside the atmosphere.
// This value is larger near the "circumference", as it is further away from the camera. We use it to
// brighten up that area of the ground atmosphere.
const float transmittanceModifier = 0.5;
float transmittance = transmittanceModifier + clamp(1.0 - groundAtmosphereColor.a, 0.0, 1.0);
vec3 finalAtmosphereColor = finalColor.rgb + groundAtmosphereColor.rgb * transmittance;
#if defined(DYNAMIC_ATMOSPHERE_LIGHTING) && (defined(ENABLE_VERTEX_LIGHTING) || defined(ENABLE_DAYNIGHT_SHADING))
float fadeInDist = u_nightFadeDistance.x;
float fadeOutDist = u_nightFadeDistance.y;
float sunlitAtmosphereIntensity = clamp((cameraDist - fadeOutDist) / (fadeInDist - fadeOutDist), 0.05, 1.0);
float darken = clamp(dot(normalize(positionWC), atmosphereLightDirection), 0.0, 1.0);
vec3 darkenendGroundAtmosphereColor = mix(groundAtmosphereColor.rgb, finalAtmosphereColor.rgb, darken);
finalAtmosphereColor = mix(darkenendGroundAtmosphereColor, finalAtmosphereColor, sunlitAtmosphereIntensity);
#endif
#ifndef HDR
finalAtmosphereColor.rgb = vec3(1.0) - exp(-fExposure * finalAtmosphereColor.rgb);
#else
finalAtmosphereColor.rgb = czm_saturation(finalAtmosphereColor.rgb, 1.6);
#endif
finalColor.rgb = mix(finalColor.rgb, finalAtmosphereColor.rgb, fade);
#endif
}
#endif
#ifdef UNDERGROUND_COLOR
if (czm_backFacing())
{
float distanceFromEllipsoid = max(czm_eyeHeight, 0.0);
float distance = max(v_distance - distanceFromEllipsoid, 0.0);
float blendAmount = interpolateByDistance(u_undergroundColorAlphaByDistance, distance);
vec4 undergroundColor = vec4(u_undergroundColor.rgb, u_undergroundColor.a * blendAmount);
finalColor = alphaBlend(undergroundColor, finalColor);
}
#endif
#ifdef TRANSLUCENT
if (inTranslucencyRectangle())
{
vec4 alphaByDistance = gl_FrontFacing ? u_frontFaceAlphaByDistance : u_backFaceAlphaByDistance;
finalColor.a *= interpolateByDistance(alphaByDistance, v_distance);
}
#endif
// \u3010mars3d.cn\u4FEE\u6539\u3011 Muyao 2023-02-20 \u5730\u5F62\u62AC\u5347
#ifdef APPLY_MARS3D_UPLIFT
if(u_mars_uplift_enabled) {
bool isInSlopeRampRectangle = inAreaMars3DRange(u_mars_uplift_rectangle, u_mars_uplift_texture);
if(isInSlopeRampRectangle == u_mars_uplift_hideInsideOrOutside) {
discard;
}
}
#endif
out_FragColor = finalColor;
}
#ifdef SHOW_REFLECTIVE_OCEAN
float waveFade(float edge0, float edge1, float x)
{
float y = clamp((x - edge0) / (edge1 - edge0), 0.0, 1.0);
return pow(1.0 - y, 5.0);
}
float linearFade(float edge0, float edge1, float x)
{
return clamp((x - edge0) / (edge1 - edge0), 0.0, 1.0);
}
// Based on water rendering by Jonas Wagner:
// http://29a.ch/2012/7/19/webgl-terrain-rendering-water-fog
// low altitude wave settings
const float oceanFrequencyLowAltitude = 825000.0;
const float oceanAnimationSpeedLowAltitude = 0.004;
const float oceanOneOverAmplitudeLowAltitude = 1.0 / 2.0;
const float oceanSpecularIntensity = 0.5;
// high altitude wave settings
const float oceanFrequencyHighAltitude = 125000.0;
const float oceanAnimationSpeedHighAltitude = 0.008;
const float oceanOneOverAmplitudeHighAltitude = 1.0 / 2.0;
vec4 computeWaterColor(vec3 positionEyeCoordinates, vec2 textureCoordinates, mat3 enuToEye, vec4 imageryColor, float maskValue, float fade)
{
vec3 positionToEyeEC = -positionEyeCoordinates;
float positionToEyeECLength = length(positionToEyeEC);
// The double normalize below works around a bug in Firefox on Android devices.
vec3 normalizedPositionToEyeEC = normalize(normalize(positionToEyeEC));
// Fade out the waves as the camera moves far from the surface.
float waveIntensity = waveFade(70000.0, 1000000.0, positionToEyeECLength);
#ifdef SHOW_OCEAN_WAVES
// high altitude waves
float time = czm_frameNumber * oceanAnimationSpeedHighAltitude;
vec4 noise = czm_getWaterNoise(u_oceanNormalMap, textureCoordinates * oceanFrequencyHighAltitude, time, 0.0);
vec3 normalTangentSpaceHighAltitude = vec3(noise.xy, noise.z * oceanOneOverAmplitudeHighAltitude);
// low altitude waves
time = czm_frameNumber * oceanAnimationSpeedLowAltitude;
noise = czm_getWaterNoise(u_oceanNormalMap, textureCoordinates * oceanFrequencyLowAltitude, time, 0.0);
vec3 normalTangentSpaceLowAltitude = vec3(noise.xy, noise.z * oceanOneOverAmplitudeLowAltitude);
// blend the 2 wave layers based on distance to surface
float highAltitudeFade = linearFade(0.0, 60000.0, positionToEyeECLength);
float lowAltitudeFade = 1.0 - linearFade(20000.0, 60000.0, positionToEyeECLength);
vec3 normalTangentSpace =
(highAltitudeFade * normalTangentSpaceHighAltitude) +
(lowAltitudeFade * normalTangentSpaceLowAltitude);
normalTangentSpace = normalize(normalTangentSpace);
// fade out the normal perturbation as we move farther from the water surface
normalTangentSpace.xy *= waveIntensity;
normalTangentSpace = normalize(normalTangentSpace);
#else
vec3 normalTangentSpace = vec3(0.0, 0.0, 1.0);
#endif
vec3 normalEC = enuToEye * normalTangentSpace;
const vec3 waveHighlightColor = vec3(0.3, 0.45, 0.6);
// Use diffuse light to highlight the waves
float diffuseIntensity = czm_getLambertDiffuse(czm_lightDirectionEC, normalEC) * maskValue;
vec3 diffuseHighlight = waveHighlightColor * diffuseIntensity * (1.0 - fade);
#ifdef SHOW_OCEAN_WAVES
// Where diffuse light is low or non-existent, use wave highlights based solely on
// the wave bumpiness and no particular light direction.
float tsPerturbationRatio = normalTangentSpace.z;
vec3 nonDiffuseHighlight = mix(waveHighlightColor * 5.0 * (1.0 - tsPerturbationRatio), vec3(0.0), diffuseIntensity);
#else
vec3 nonDiffuseHighlight = vec3(0.0);
#endif
// Add specular highlights in 3D, and in all modes when zoomed in.
float specularIntensity = czm_getSpecular(czm_lightDirectionEC, normalizedPositionToEyeEC, normalEC, 10.0);
float surfaceReflectance = mix(0.0, mix(u_zoomedOutOceanSpecularIntensity, oceanSpecularIntensity, waveIntensity), maskValue);
float specular = specularIntensity * surfaceReflectance;
#ifdef HDR
specular *= 1.4;
float e = 0.2;
float d = 3.3;
float c = 1.7;
vec3 color = imageryColor.rgb + (c * (vec3(e) + imageryColor.rgb * d) * (diffuseHighlight + nonDiffuseHighlight + specular));
#else
vec3 color = imageryColor.rgb + diffuseHighlight + nonDiffuseHighlight + specular;
#endif
return vec4(color, imageryColor.a);
}
#endif // #ifdef SHOW_REFLECTIVE_OCEAN
`;var UKi=y(x(),1),eY=`#ifdef QUANTIZATION_BITS12
in vec4 compressed0;
in float compressed1;
#else
in vec4 position3DAndHeight;
in vec4 textureCoordAndEncodedNormals;
#endif
#ifdef GEODETIC_SURFACE_NORMALS
in vec3 geodeticSurfaceNormal;
#endif
#ifdef EXAGGERATION
uniform vec2 u_verticalExaggerationAndRelativeHeight;
#endif
uniform vec3 u_center3D;
uniform mat4 u_modifiedModelView;
uniform mat4 u_modifiedModelViewProjection;
uniform vec4 u_tileRectangle;
// Uniforms for 2D Mercator projection
uniform vec2 u_southAndNorthLatitude;
uniform vec2 u_southMercatorYAndOneOverHeight;
out vec3 v_positionMC;
out vec3 v_positionEC;
out vec3 v_textureCoordinates;
out vec3 v_normalMC;
out vec3 v_normalEC;
#ifdef APPLY_MATERIAL
out float v_slope;
out float v_aspect;
out float v_height;
#endif
#if defined(FOG) || defined(GROUND_ATMOSPHERE) || defined(UNDERGROUND_COLOR) || defined(TRANSLUCENT)
out float v_distance;
#endif
#if defined(FOG) || defined(GROUND_ATMOSPHERE)
out vec3 v_atmosphereRayleighColor;
out vec3 v_atmosphereMieColor;
out float v_atmosphereOpacity;
#endif
#ifdef ENABLE_CLIPPING_POLYGONS
uniform highp sampler2D u_clippingExtents;
out vec2 v_clippingPosition;
flat out int v_regionIndex;
#endif
// These functions are generated at runtime.
vec4 getPosition(vec3 position, float height, vec2 textureCoordinates);
float get2DYPositionFraction(vec2 textureCoordinates);
vec4 getPosition3DMode(vec3 position, float height, vec2 textureCoordinates)
{
return u_modifiedModelViewProjection * vec4(position, 1.0);
}
float get2DMercatorYPositionFraction(vec2 textureCoordinates)
{
// The width of a tile at level 11, in radians and assuming a single root tile, is
// 2.0 * czm_pi / pow(2.0, 11.0)
// We want to just linearly interpolate the 2D position from the texture coordinates
// when we're at this level or higher. The constant below is the expression
// above evaluated and then rounded up at the 4th significant digit.
const float maxTileWidth = 0.003068;
float positionFraction = textureCoordinates.y;
float southLatitude = u_southAndNorthLatitude.x;
float northLatitude = u_southAndNorthLatitude.y;
if (northLatitude - southLatitude > maxTileWidth)
{
float southMercatorY = u_southMercatorYAndOneOverHeight.x;
float oneOverMercatorHeight = u_southMercatorYAndOneOverHeight.y;
float currentLatitude = mix(southLatitude, northLatitude, textureCoordinates.y);
currentLatitude = clamp(currentLatitude, -czm_webMercatorMaxLatitude, czm_webMercatorMaxLatitude);
positionFraction = czm_latitudeToWebMercatorFraction(currentLatitude, southMercatorY, oneOverMercatorHeight);
}
return positionFraction;
}
float get2DGeographicYPositionFraction(vec2 textureCoordinates)
{
return textureCoordinates.y;
}
vec4 getPositionPlanarEarth(vec3 position, float height, vec2 textureCoordinates)
{
float yPositionFraction = get2DYPositionFraction(textureCoordinates);
vec4 rtcPosition2D = vec4(height, mix(u_tileRectangle.st, u_tileRectangle.pq, vec2(textureCoordinates.x, yPositionFraction)), 1.0);
return u_modifiedModelViewProjection * rtcPosition2D;
}
vec4 getPosition2DMode(vec3 position, float height, vec2 textureCoordinates)
{
return getPositionPlanarEarth(position, 0.0, textureCoordinates);
}
vec4 getPositionColumbusViewMode(vec3 position, float height, vec2 textureCoordinates)
{
return getPositionPlanarEarth(position, height, textureCoordinates);
}
vec4 getPositionMorphingMode(vec3 position, float height, vec2 textureCoordinates)
{
// We do not do RTC while morphing, so there is potential for jitter.
// This is unlikely to be noticeable, though.
vec3 position3DWC = position + u_center3D;
float yPositionFraction = get2DYPositionFraction(textureCoordinates);
vec4 position2DWC = vec4(height, mix(u_tileRectangle.st, u_tileRectangle.pq, vec2(textureCoordinates.x, yPositionFraction)), 1.0);
vec4 morphPosition = czm_columbusViewMorph(position2DWC, vec4(position3DWC, 1.0), czm_morphTime);
vec4 morphPositionEC = czm_modelView * morphPosition;
return czm_projection * morphPositionEC;
}
#ifdef QUANTIZATION_BITS12
uniform vec2 u_minMaxHeight;
uniform mat4 u_scaleAndBias;
#endif
// \u3010mars3d.cn\u4FEE\u6539\u3011 Muyao 2023-02-20 \u5730\u5F62\u538B\u5E73
#ifdef APPLY_MARS3D_FLAT
uniform bool u_mars_flat_enabled;
uniform vec4 u_mars_flat_rectangle;
uniform highp sampler2D u_mars_flat_texture;
uniform highp float u_mars_inverseTileWidth;
uniform highp vec2 u_mars_cartographicTileRectangle;
vec4 getAreaMars3DRange(vec4 rectangle, sampler2D rangeTexture, vec2 textureCoordinates) {
float lo = textureCoordinates.x / u_mars_inverseTileWidth + u_mars_cartographicTileRectangle.x;
float la = textureCoordinates.y / u_mars_inverseTileWidth + u_mars_cartographicTileRectangle.y;
float newX = (lo - rectangle.x) / rectangle.z;
float newY = (la - rectangle.y) / rectangle.w;
vec4 point;
if(newX >= 0.0 && newX <= 1.0 && newY >= 0.0 && newY <= 1.0){
vec4 point = texture(rangeTexture, vec2(newX, newY));
return point;
}else{
return vec4(0.0);
}
}
#endif
// \u3010mars3d.cn\u4FEE\u6539\u3011 Muyao 2023-02-20 \u5730\u5F62\u538B\u5E73
void main()
{
#ifdef QUANTIZATION_BITS12
vec2 xy = czm_decompressTextureCoordinates(compressed0.x);
vec2 zh = czm_decompressTextureCoordinates(compressed0.y);
vec3 position = vec3(xy, zh.x);
float height = zh.y;
vec2 textureCoordinates = czm_decompressTextureCoordinates(compressed0.z);
height = height * (u_minMaxHeight.y - u_minMaxHeight.x) + u_minMaxHeight.x;
position = (u_scaleAndBias * vec4(position, 1.0)).xyz;
#if (defined(ENABLE_VERTEX_LIGHTING) || defined(GENERATE_POSITION_AND_NORMAL)) && defined(INCLUDE_WEB_MERCATOR_Y) || defined(APPLY_MATERIAL)
float webMercatorT = czm_decompressTextureCoordinates(compressed0.w).x;
float encodedNormal = compressed1;
#elif defined(INCLUDE_WEB_MERCATOR_Y)
float webMercatorT = czm_decompressTextureCoordinates(compressed0.w).x;
float encodedNormal = 0.0;
#elif defined(ENABLE_VERTEX_LIGHTING) || defined(GENERATE_POSITION_AND_NORMAL) || defined(APPLY_MATERIAL)
float webMercatorT = textureCoordinates.y;
float encodedNormal = compressed0.w;
#else
float webMercatorT = textureCoordinates.y;
float encodedNormal = 0.0;
#endif
#else
// A single float per element
vec3 position = position3DAndHeight.xyz;
float height = position3DAndHeight.w;
vec2 textureCoordinates = textureCoordAndEncodedNormals.xy;
#if (defined(ENABLE_VERTEX_LIGHTING) || defined(GENERATE_POSITION_AND_NORMAL) || defined(APPLY_MATERIAL)) && defined(INCLUDE_WEB_MERCATOR_Y)
float webMercatorT = textureCoordAndEncodedNormals.z;
float encodedNormal = textureCoordAndEncodedNormals.w;
#elif defined(ENABLE_VERTEX_LIGHTING) || defined(GENERATE_POSITION_AND_NORMAL) || defined(APPLY_MATERIAL)
float webMercatorT = textureCoordinates.y;
float encodedNormal = textureCoordAndEncodedNormals.z;
#elif defined(INCLUDE_WEB_MERCATOR_Y)
float webMercatorT = textureCoordAndEncodedNormals.z;
float encodedNormal = 0.0;
#else
float webMercatorT = textureCoordinates.y;
float encodedNormal = 0.0;
#endif
#endif
vec3 position3DWC = position + u_center3D;
#ifdef GEODETIC_SURFACE_NORMALS
vec3 ellipsoidNormal = geodeticSurfaceNormal;
#else
vec3 ellipsoidNormal = normalize(position3DWC);
#endif
#if defined(EXAGGERATION) && defined(GEODETIC_SURFACE_NORMALS)
float exaggeration = u_verticalExaggerationAndRelativeHeight.x;
float relativeHeight = u_verticalExaggerationAndRelativeHeight.y;
float newHeight = (height - relativeHeight) * exaggeration + relativeHeight;
// stop from going through center of earth
float minRadius = min(min(czm_ellipsoidRadii.x, czm_ellipsoidRadii.y), czm_ellipsoidRadii.z);
newHeight = max(newHeight, -minRadius);
vec3 offset = ellipsoidNormal * (newHeight - height);
position += offset;
position3DWC += offset;
height = newHeight;
#endif
// \u3010mars3d.cn\u4FEE\u6539\u3011 Muyao 2023-02-20 \u5730\u5F62\u538B\u5E73
#ifdef APPLY_MARS3D_FLAT
if(u_mars_flat_enabled) {
vec4 isInside = getAreaMars3DRange(u_mars_flat_rectangle,u_mars_flat_texture,textureCoordinates);
if(isInside.r>0.0 || isInside.g>0.0 || isInside.b>0.0 || isInside.a>0.0){
float newHeight = czm_unpackFloat(isInside);
if(newHeight>-9999.0 && newHeight<9999.0){
vec3 offset = (newHeight - height) * ellipsoidNormal;
position += offset;
position3DWC += offset;
height = newHeight;
// vec3 newPosition = (position3DWC + offset) - u_center3D;
}
}
}
#endif
// \u3010mars3d.cn\u4FEE\u6539\u3011 Muyao 2023-02-20 \u5730\u5F62\u538B\u5E73
gl_Position = getPosition(position, height, textureCoordinates);
v_positionEC = (u_modifiedModelView * vec4(position, 1.0)).xyz;
v_positionMC = position3DWC; // position in model coordinates
v_textureCoordinates = vec3(textureCoordinates, webMercatorT);
#if defined(ENABLE_VERTEX_LIGHTING) || defined(GENERATE_POSITION_AND_NORMAL) || defined(APPLY_MATERIAL)
vec3 normalMC = czm_octDecode(encodedNormal);
#if defined(EXAGGERATION) && defined(GEODETIC_SURFACE_NORMALS)
vec3 projection = dot(normalMC, ellipsoidNormal) * ellipsoidNormal;
vec3 rejection = normalMC - projection;
normalMC = normalize(projection + rejection * exaggeration);
#endif
v_normalMC = normalMC;
v_normalEC = czm_normal3D * v_normalMC;
#endif
#ifdef ENABLE_CLIPPING_POLYGONS
vec2 sphericalLatLong = czm_approximateSphericalCoordinates(position3DWC);
sphericalLatLong.y = czm_branchFreeTernary(sphericalLatLong.y < czm_pi, sphericalLatLong.y, sphericalLatLong.y - czm_twoPi);
vec2 minDistance = vec2(czm_infinity);
v_clippingPosition = vec2(czm_infinity);
v_regionIndex = -1;
for (int regionIndex = 0; regionIndex < CLIPPING_POLYGON_REGIONS_LENGTH; regionIndex++) {
vec4 extents = unpackClippingExtents(u_clippingExtents, regionIndex);
vec2 rectUv = (sphericalLatLong.yx - extents.yx) * extents.wz;
vec2 clamped = clamp(rectUv, vec2(0.0), vec2(1.0));
vec2 distance = abs(rectUv - clamped) * extents.wz;
float threshold = 0.01;
if (minDistance.x > distance.x || minDistance.y > distance.y) {
minDistance = distance;
v_clippingPosition = rectUv;
if (rectUv.x > threshold && rectUv.y > threshold && rectUv.x < 1.0 - threshold && rectUv.y < 1.0 - threshold) {
v_regionIndex = regionIndex;
}
}
}
#endif
#if defined(FOG) || (defined(GROUND_ATMOSPHERE) && !defined(PER_FRAGMENT_GROUND_ATMOSPHERE))
bool dynamicLighting = false;
#if defined(DYNAMIC_ATMOSPHERE_LIGHTING) && (defined(ENABLE_DAYNIGHT_SHADING) || defined(ENABLE_VERTEX_LIGHTING))
dynamicLighting = true;
#endif
#if defined(DYNAMIC_ATMOSPHERE_LIGHTING_FROM_SUN)
vec3 atmosphereLightDirection = czm_sunDirectionWC;
#else
vec3 atmosphereLightDirection = czm_lightDirectionWC;
#endif
vec3 lightDirection = czm_branchFreeTernary(dynamicLighting, atmosphereLightDirection, normalize(position3DWC));
computeAtmosphereScattering(
position3DWC,
lightDirection,
v_atmosphereRayleighColor,
v_atmosphereMieColor,
v_atmosphereOpacity
);
#endif
#if defined(FOG) || defined(GROUND_ATMOSPHERE) || defined(UNDERGROUND_COLOR) || defined(TRANSLUCENT)
v_distance = length((czm_modelView3D * vec4(position3DWC, 1.0)).xyz);
#endif
#ifdef APPLY_MATERIAL
float northPoleZ = czm_ellipsoidRadii.z;
vec3 northPolePositionMC = vec3(0.0, 0.0, northPoleZ);
vec3 vectorEastMC = normalize(cross(northPolePositionMC - v_positionMC, ellipsoidNormal));
float dotProd = abs(dot(ellipsoidNormal, v_normalMC));
v_slope = acos(dotProd);
vec3 normalRejected = ellipsoidNormal * dotProd;
vec3 normalProjected = v_normalMC - normalRejected;
vec3 aspectVector = normalize(normalProjected);
v_aspect = acos(dot(aspectVector, vectorEastMC));
float determ = dot(cross(vectorEastMC, aspectVector), ellipsoidNormal);
v_aspect = czm_branchFreeTernary(determ < 0.0, 2.0 * czm_pi - v_aspect, v_aspect);
v_height = height;
#endif
}
`;var kKi=y(x(),1),MZ=`void computeAtmosphereScattering(vec3 positionWC, vec3 lightDirection, out vec3 rayleighColor, out vec3 mieColor, out float opacity) {
vec3 cameraToPositionWC = positionWC - czm_viewerPositionWC;
vec3 cameraToPositionWCDirection = normalize(cameraToPositionWC);
czm_ray primaryRay = czm_ray(czm_viewerPositionWC, cameraToPositionWCDirection);
float atmosphereInnerRadius = length(positionWC);
computeScattering(
primaryRay,
length(cameraToPositionWC),
lightDirection,
atmosphereInnerRadius,
rayleighColor,
mieColor,
opacity
);
}
`;var OKi=y(x(),1),vZ=`float interpolateByDistance(vec4 nearFarScalar, float distance)
{
float startDistance = nearFarScalar.x;
float startValue = nearFarScalar.y;
float endDistance = nearFarScalar.z;
float endValue = nearFarScalar.w;
float t = clamp((distance - startDistance) / (endDistance - startDistance), 0.0, 1.0);
return mix(startValue, endValue, t);
}
void computeAtmosphereScattering(vec3 positionWC, vec3 lightDirection, out vec3 rayleighColor, out vec3 mieColor, out float opacity, out float underTranslucentGlobe)
{
float ellipsoidRadiiDifference = czm_ellipsoidRadii.x - czm_ellipsoidRadii.z;
// Adjustment to the atmosphere radius applied based on the camera height.
float distanceAdjustMin = czm_ellipsoidRadii.x / 4.0;
float distanceAdjustMax = czm_ellipsoidRadii.x;
float distanceAdjustModifier = ellipsoidRadiiDifference / 2.0;
float distanceAdjust = distanceAdjustModifier * clamp((czm_eyeHeight - distanceAdjustMin) / (distanceAdjustMax - distanceAdjustMin), 0.0, 1.0);
// Since atmosphere scattering assumes the atmosphere is a spherical shell, we compute an inner radius of the atmosphere best fit
// for the position on the ellipsoid.
float radiusAdjust = (ellipsoidRadiiDifference / 4.0) + distanceAdjust;
float atmosphereInnerRadius = (length(czm_viewerPositionWC) - czm_eyeHeight) - radiusAdjust;
// Setup the primary ray: from the camera position to the vertex position.
vec3 cameraToPositionWC = positionWC - czm_viewerPositionWC;
vec3 cameraToPositionWCDirection = normalize(cameraToPositionWC);
czm_ray primaryRay = czm_ray(czm_viewerPositionWC, cameraToPositionWCDirection);
underTranslucentGlobe = 0.0;
// Brighten the sky atmosphere under the Earth's atmosphere when translucency is enabled.
#if defined(GLOBE_TRANSLUCENT)
// Check for intersection with the inner radius of the atmopshere.
czm_raySegment primaryRayEarthIntersect = czm_raySphereIntersectionInterval(primaryRay, vec3(0.0), atmosphereInnerRadius + radiusAdjust);
if (primaryRayEarthIntersect.start > 0.0 && primaryRayEarthIntersect.stop > 0.0) {
// Compute position on globe.
vec3 direction = normalize(positionWC);
czm_ray ellipsoidRay = czm_ray(positionWC, -direction);
czm_raySegment ellipsoidIntersection = czm_rayEllipsoidIntersectionInterval(ellipsoidRay, vec3(0.0), czm_ellipsoidInverseRadii);
vec3 onEarth = positionWC - (direction * ellipsoidIntersection.start);
// Control the color using the camera angle.
float angle = dot(normalize(czm_viewerPositionWC), normalize(onEarth));
// Control the opacity using the distance from Earth.
opacity = interpolateByDistance(vec4(0.0, 1.0, czm_ellipsoidRadii.x, 0.0), length(czm_viewerPositionWC - onEarth));
vec3 horizonColor = vec3(0.1, 0.2, 0.3);
vec3 nearColor = vec3(0.0);
rayleighColor = mix(nearColor, horizonColor, exp(-angle) * opacity);
// Set the traslucent flag to avoid alpha adjustment in computeFinalColor funciton.
underTranslucentGlobe = 1.0;
return;
}
#endif
computeScattering(
primaryRay,
length(cameraToPositionWC),
lightDirection,
atmosphereInnerRadius,
rayleighColor,
mieColor,
opacity
);
// Alter the opacity based on how close the viewer is to the ground.
// (0.0 = At edge of atmosphere, 1.0 = On ground)
float cameraHeight = czm_eyeHeight + atmosphereInnerRadius;
float atmosphereOuterRadius = atmosphereInnerRadius + ATMOSPHERE_THICKNESS;
opacity = clamp((atmosphereOuterRadius - cameraHeight) / (atmosphereOuterRadius - atmosphereInnerRadius), 0.0, 1.0);
// Alter alpha based on time of day (0.0 = night , 1.0 = day)
float nightAlpha = (u_radiiAndDynamicAtmosphereColor.z != 0.0) ? clamp(dot(normalize(positionWC), lightDirection), 0.0, 1.0) : 1.0;
opacity *= pow(nightAlpha, 0.5);
}
`;var HKi=y(x(),1),tY=`in vec3 v_outerPositionWC;
uniform vec3 u_hsbShift;
#ifndef PER_FRAGMENT_ATMOSPHERE
in vec3 v_mieColor;
in vec3 v_rayleighColor;
in float v_opacity;
in float v_translucent;
#endif
void main (void)
{
float lightEnum = u_radiiAndDynamicAtmosphereColor.z;
vec3 lightDirection = czm_getDynamicAtmosphereLightDirection(v_outerPositionWC, lightEnum);
vec3 mieColor;
vec3 rayleighColor;
float opacity;
float translucent;
#ifdef PER_FRAGMENT_ATMOSPHERE
computeAtmosphereScattering(
v_outerPositionWC,
lightDirection,
rayleighColor,
mieColor,
opacity,
translucent
);
#else
mieColor = v_mieColor;
rayleighColor = v_rayleighColor;
opacity = v_opacity;
translucent = v_translucent;
#endif
vec4 color = computeAtmosphereColor(v_outerPositionWC, lightDirection, rayleighColor, mieColor, opacity);
#ifndef HDR
color.rgb = czm_pbrNeutralTonemapping(color.rgb);
color.rgb = czm_inverseGamma(color.rgb);
#endif
#ifdef COLOR_CORRECT
const bool ignoreBlackPixels = true;
color.rgb = czm_applyHSBShift(color.rgb, u_hsbShift, ignoreBlackPixels);
#endif
// For the parts of the sky atmosphere that are not behind a translucent globe,
// we mix in the default opacity so that the sky atmosphere still appears at distance.
// This is needed because the opacity in the sky atmosphere is initially adjusted based
// on the camera height.
if (translucent == 0.0) {
color.a = mix(color.b, 1.0, color.a) * smoothstep(0.0, 1.0, czm_morphTime);
}
out_FragColor = color;
}
`;var KKi=y(x(),1),nY=`in vec4 position;
out vec3 v_outerPositionWC;
#ifndef PER_FRAGMENT_ATMOSPHERE
out vec3 v_mieColor;
out vec3 v_rayleighColor;
out float v_opacity;
out float v_translucent;
#endif
void main(void)
{
vec4 positionWC = czm_model * position;
float lightEnum = u_radiiAndDynamicAtmosphereColor.z;
vec3 lightDirection = czm_getDynamicAtmosphereLightDirection(positionWC.xyz, lightEnum);
#ifndef PER_FRAGMENT_ATMOSPHERE
computeAtmosphereScattering(
positionWC.xyz,
lightDirection,
v_rayleighColor,
v_mieColor,
v_opacity,
v_translucent
);
#endif
v_outerPositionWC = positionWC.xyz;
vec4 positionEC = czm_modelView * position;
gl_Position = czm_projection * positionEC;
}
`;var qKi=y(x(),1),iY=`uniform samplerCube u_cubeMap;
in vec3 v_texCoord;
void main()
{
vec4 color = czm_textureCube(u_cubeMap, normalize(v_texCoord));
out_FragColor = vec4(czm_gammaCorrect(color).rgb, czm_morphTime);
}
`;var eji=y(x(),1),oY=`in vec3 position;
out vec3 v_texCoord;
void main()
{
vec3 p = czm_viewRotation * (czm_temeToPseudoFixed * (czm_entireFrustum.y * position));
gl_Position = czm_projection * vec4(p, 1.0);
v_texCoord = position.xyz;
}
`;var nji=y(x(),1),rY=`uniform sampler2D u_texture;
in vec2 v_textureCoordinates;
void main()
{
vec4 color = texture(u_texture, v_textureCoordinates);
out_FragColor = czm_gammaCorrect(color);
}
`;var oji=y(x(),1),sY=`uniform float u_radiusTS;
in vec2 v_textureCoordinates;
vec2 rotate(vec2 p, vec2 direction)
{
return vec2(p.x * direction.x - p.y * direction.y, p.x * direction.y + p.y * direction.x);
}
vec4 addBurst(vec2 position, vec2 direction, float lengthScalar)
{
vec2 rotatedPosition = rotate(position, direction) * vec2(25.0, 0.75);
float radius = length(rotatedPosition) * lengthScalar;
float burst = 1.0 - smoothstep(0.0, 0.55, radius);
return vec4(burst);
}
void main()
{
float lengthScalar = 2.0 / sqrt(2.0);
vec2 position = v_textureCoordinates - vec2(0.5);
float radius = length(position) * lengthScalar;
float surface = step(radius, u_radiusTS);
vec4 color = vec4(vec2(1.0), surface + 0.2, surface);
float glow = 1.0 - smoothstep(0.0, 0.55, radius);
color.ba += mix(vec2(0.0), vec2(1.0), glow) * 0.75;
vec4 burst = vec4(0.0);
// The following loop has been manually unrolled for speed, to
// avoid sin() and cos().
//
//for (float i = 0.4; i < 3.2; i += 1.047) {
// vec2 direction = vec2(sin(i), cos(i));
// burst += 0.4 * addBurst(position, direction, lengthScalar);
//
// direction = vec2(sin(i - 0.08), cos(i - 0.08));
// burst += 0.3 * addBurst(position, direction, lengthScalar);
//}
burst += 0.4 * addBurst(position, vec2(0.38942, 0.92106), lengthScalar); // angle == 0.4
burst += 0.4 * addBurst(position, vec2(0.99235, 0.12348), lengthScalar); // angle == 0.4 + 1.047
burst += 0.4 * addBurst(position, vec2(0.60327, -0.79754), lengthScalar); // angle == 0.4 + 1.047 * 2.0
burst += 0.3 * addBurst(position, vec2(0.31457, 0.94924), lengthScalar); // angle == 0.4 - 0.08
burst += 0.3 * addBurst(position, vec2(0.97931, 0.20239), lengthScalar); // angle == 0.4 + 1.047 - 0.08
burst += 0.3 * addBurst(position, vec2(0.66507, -0.74678), lengthScalar); // angle == 0.4 + 1.047 * 2.0 - 0.08
// End of manual loop unrolling.
color += clamp(burst, vec4(0.0), vec4(1.0)) * 0.15;
out_FragColor = clamp(color, vec4(0.0), vec4(1.0));
}
`;var sji=y(x(),1),aY=`in vec2 direction;
uniform float u_size;
out vec2 v_textureCoordinates;
void main()
{
vec4 position;
if (czm_morphTime == 1.0)
{
position = vec4(czm_sunPositionWC, 1.0);
}
else
{
position = vec4(czm_sunPositionColumbusView.zxy, 1.0);
}
vec4 positionEC = czm_view * position;
vec4 positionWC = czm_eyeToWindowCoordinates(positionEC);
vec2 halfSize = vec2(u_size * 0.5);
halfSize *= ((direction * 2.0) - 1.0);
gl_Position = czm_viewportOrthographic * vec4(positionWC.xy + halfSize, -positionWC.z, 1.0);
v_textureCoordinates = direction;
}
`;var cji=y(x(),1),cY=`
in vec2 v_textureCoordinates;
void main()
{
czm_materialInput materialInput;
materialInput.s = v_textureCoordinates.s;
materialInput.st = v_textureCoordinates;
materialInput.str = vec3(v_textureCoordinates, 0.0);
materialInput.normalEC = vec3(0.0, 0.0, -1.0);
czm_material material = czm_getMaterial(materialInput);
out_FragColor = vec4(material.diffuse + material.emission, material.alpha);
}
`;var jbo=y(x(),1);var fji=y(x(),1);async function nee(e,t){let n=t.terrainProvider,i=t.mapProjection,o=i.ellipsoid,r,s=t.camera.getRectangleCameraCoordinates(e);if(t.mode===se.SCENE3D?r=o.cartesianToCartographic(s):r=i.unproject(s),!l(n))return r;let a=n.availability;if(!l(a)||t.mode===se.SCENE2D)return r;let c=[de.center(e),de.southeast(e),de.southwest(e),de.northeast(e),de.northwest(e)],d=await nee._sampleTerrainMostDetailed(n,c),u=!1,h=d.reduce(function(A,f){return l(f.height)?(u=!0,Math.max(f.height,A)):A},-Number.MAX_VALUE),p=r;return u&&(p.height+=h),p}nee._sampleTerrainMostDetailed=iE;var aE=nee;var v7i=y(x(),1);var Iji=y(x(),1);var bji=y(x(),1);var A0t=new M;function g0t(e,t){let n=e.unionClippingRegions,i=e.length,o=ls.useFloatTexture(t),r=ls.getTextureResolution(e,t,A0t),s=r.x,a=r.y,c=o?x0t(s,a):C0t(s,a);return c+=`
`,c+=n?b0t(i):y0t(i),c}function b0t(e){return`float clip(vec4 fragCoord, sampler2D clippingPlanes, mat4 clippingPlanesMatrix)
{
vec4 position = czm_windowToEyeCoordinates(fragCoord);
vec3 clipNormal = vec3(0.0);
vec3 clipPosition = vec3(0.0);
float clipAmount;
float pixelWidth = czm_metersPerPixel(position);
bool breakAndDiscard = false;
for (int i = 0; i < ${e}; ++i)
{
vec4 clippingPlane = getClippingPlane(clippingPlanes, i, clippingPlanesMatrix);
clipNormal = clippingPlane.xyz;
clipPosition = -clippingPlane.w * clipNormal;
float amount = dot(clipNormal, (position.xyz - clipPosition)) / pixelWidth;
clipAmount = czm_branchFreeTernary(i == 0, amount, min(amount, clipAmount));
if (amount <= 0.0)
{
breakAndDiscard = true;
// HLSL compiler bug if we discard here: https://bugs.chromium.org/p/angleproject/issues/detail?id=1945#c6
break;
}
}
if (breakAndDiscard) {
discard;
}
return clipAmount;
}
`}function y0t(e){return`float clip(vec4 fragCoord, sampler2D clippingPlanes, mat4 clippingPlanesMatrix)
{
bool clipped = true;
vec4 position = czm_windowToEyeCoordinates(fragCoord);
vec3 clipNormal = vec3(0.0);
vec3 clipPosition = vec3(0.0);
float clipAmount = 0.0;
float pixelWidth = czm_metersPerPixel(position);
for (int i = 0; i < ${e}; ++i)
{
vec4 clippingPlane = getClippingPlane(clippingPlanes, i, clippingPlanesMatrix);
clipNormal = clippingPlane.xyz;
clipPosition = -clippingPlane.w * clipNormal;
float amount = dot(clipNormal, (position.xyz - clipPosition)) / pixelWidth;
clipAmount = max(amount, clipAmount);
clipped = clipped && (amount <= 0.0);
}
if (clipped)
{
discard;
}
return clipAmount;
}
`}function x0t(e,t){let n=1/e,i=1/t,o=`${n}`;o.indexOf(".")===-1&&(o+=".0");let r=`${i}`;return r.indexOf(".")===-1&&(r+=".0"),`vec4 getClippingPlane(highp sampler2D packedClippingPlanes, int clippingPlaneNumber, mat4 transform)
{
int pixY = clippingPlaneNumber / ${e};
int pixX = clippingPlaneNumber - (pixY * ${e});
// Sample from center of pixel
float u = (float(pixX) + 0.5) * ${o};
float v = (float(pixY) + 0.5) * ${r};
vec4 plane = texture(packedClippingPlanes, vec2(u, v));
return czm_transformPlane(plane, transform);
}
`}function C0t(e,t){let n=1/e,i=1/t,o=`${n}`;o.indexOf(".")===-1&&(o+=".0");let r=`${i}`;return r.indexOf(".")===-1&&(r+=".0"),`vec4 getClippingPlane(highp sampler2D packedClippingPlanes, int clippingPlaneNumber, mat4 transform)
{
int clippingPlaneStartIndex = clippingPlaneNumber * 2;
int pixY = clippingPlaneStartIndex / ${e};
int pixX = clippingPlaneStartIndex - (pixY * ${e});
// Sample from center of pixel
float u = (float(pixX) + 0.5) * ${o};
float v = (float(pixY) + 0.5) * ${r};
vec4 oct32 = texture(packedClippingPlanes, vec2(u, v)) * 255.0;
vec2 oct = vec2(oct32.x * 256.0 + oct32.y, oct32.z * 256.0 + oct32.w);
vec4 plane;
plane.xyz = czm_octDecode(oct, 65535.0);
plane.w = czm_unpackFloat(texture(packedClippingPlanes, vec2(u + ${o}, v)));
return czm_transformPlane(plane, transform);
}
`}var cE=g0t;function T0t(e,t,n,i,o,r){this.numberOfDayTextures=e,this.flags=t,this.material=n,this.shaderProgram=i,this.clippingShaderState=o,this.clippingPolygonShaderState=r}function iee(){this.baseVertexShaderSource=void 0,this.baseFragmentShaderSource=void 0,this._shadersByTexturesFlags=[],this.material=void 0}function E0t(e){let t="vec4 getPosition(vec3 position, float height, vec2 textureCoordinates) { return getPosition3DMode(position, height, textureCoordinates); }",n="vec4 getPosition(vec3 position, float height, vec2 textureCoordinates) { return getPositionColumbusViewMode(position, height, textureCoordinates); }",i="vec4 getPosition(vec3 position, float height, vec2 textureCoordinates) { return getPositionMorphingMode(position, height, textureCoordinates); }",o;switch(e){case se.SCENE3D:o=t;break;case se.SCENE2D:case se.COLUMBUS_VIEW:o=n;break;case se.MORPHING:o=i;break}return o}function S0t(e){return e.webgl2?`void clipPolygons(highp sampler2D clippingDistance, int regionsLength, vec2 clippingPosition, int regionIndex) {
czm_clipPolygons(clippingDistance, regionsLength, clippingPosition, regionIndex);
}`:`void clipPolygons(highp sampler2D clippingDistance, int regionsLength, vec2 clippingPosition, int regionIndex) {
}`}function _0t(e){return e.webgl2?`vec4 unpackClippingExtents(highp sampler2D extentsTexture, int index) {
return czm_unpackClippingExtents(extentsTexture, index);
}`:`vec4 unpackClippingExtents(highp sampler2D extentsTexture, int index) {
return vec4();
}`}function I0t(e){return e?"float get2DYPositionFraction(vec2 textureCoordinates) { return get2DMercatorYPositionFraction(textureCoordinates); }":"float get2DYPositionFraction(vec2 textureCoordinates) { return get2DGeographicYPositionFraction(textureCoordinates); }"}iee.prototype.getShaderProgram=function(e){let t=e.frameState,n=e.surfaceTile,i=e.numberOfDayTextures,o=e.applyBrightness,r=e.applyContrast,s=e.applyHue,a=e.applySaturation,c=e.applyGamma,d=e.applyAlpha,u=e.applyDayNightAlpha,h=e.applySplit,p=e.hasWaterMask,A=e.showReflectiveOcean,f=e.showOceanWaves,b=e.enableLighting,C=e.dynamicAtmosphereLighting,T=e.dynamicAtmosphereLightingFromSun,E=e.showGroundAtmosphere,S=e.perFragmentGroundAtmosphere,I=e.hasVertexNormals,R=e.useWebMercatorProjection,V=e.enableFog,W=e.enableClippingPlanes,B=e.clippingPlanes,N=e.enableClippingPolygons,P=e.clippingPolygons,g=e.clippedByBoundaries,_=e.hasImageryLayerCutout,Z=e.colorCorrect,G=e.highlightFillTile,w=e.colorToAlpha,X=e.hasGeodeticSurfaceNormals,k=e.hasExaggeration,v=e.showUndergroundColor,D=e.translucent,Y=e.marsOptions||{},O=0,J="",z=n.renderedMesh.encoding;z.quantization===Da.BITS12&&(O=1,J="QUANTIZATION_BITS12");let ee=0,ge="";g&&(ee=1,ge="TILE_LIMIT_RECTANGLE");let ye=0,ae="";_&&(ye=1,ae="APPLY_IMAGERY_CUTOUT");let Ce=t.mode,Te=((Ce|o<<2|r<<3|s<<4|a<<5|c<<6|d<<7|p<<8|A<<9|f<<10|b<<11|C<<12|T<<13|E<<14|S<<15|I<<16|R<<17|V<<18|O<<19|h<<20|W<<21|N<<22|ee<<23|ye<<24|Z<<25|G<<26|w<<27|X<<28|k<<29|v<<30|D<<31)>>>0)+(u?4294967296:0),Fe=0;l(B)&&B.length>0&&(Fe=W?B.clippingPlanesState:0);let Ne=0;l(P)&&P.length>0&&(Ne=N?P.clippingPolygonsState:0);let Pe=n.surfaceShader;if(l(Pe)&&Pe.numberOfDayTextures===i&&Pe.flags===Te&&Pe.material===this.material&&Pe.clippingShaderState===Fe&&Pe.clippingPolygonShaderState===Ne)return Pe.shaderProgram;let Xe=this._shadersByTexturesFlags[i];if(l(Xe)||(Xe=this._shadersByTexturesFlags[i]=[]),Pe=Xe[Te],!l(Pe)||Pe.material!==this.material||Pe.clippingShaderState!==Fe||Pe.clippingPolygonShaderState!==Ne){let st=this.baseVertexShaderSource.clone(),Ye=this.baseFragmentShaderSource.clone();Fe!==0&&Ye.sources.unshift(cE(B,t.context)),Ne!==0&&(Ye.sources.unshift(S0t(t.context)),st.sources.unshift(_0t(t.context))),Y.enableUplift&&Ye.defines.push("APPLY_MARS3D_UPLIFT"),Y.enableFlat&&st.defines.push("APPLY_MARS3D_FLAT"),Y.enableClip&&Ye.defines.push("APPLY_MARS3D_CLIP"),Y.enableFlood&&Ye.defines.push("APPLY_MARS3D_FLOOD"),st.defines.push(J),Ye.defines.push(`TEXTURE_UNITS ${i}`,ge,ae),o&&Ye.defines.push("APPLY_BRIGHTNESS"),r&&Ye.defines.push("APPLY_CONTRAST"),s&&Ye.defines.push("APPLY_HUE"),a&&Ye.defines.push("APPLY_SATURATION"),c&&Ye.defines.push("APPLY_GAMMA"),Y.invertColor&&Ye.defines.push("APPLY_INVERT_COLOR_MARS3D"),Y.filterColor&&Ye.defines.push("APPLY_FILTER_COLOR_MARS3D"),d&&Ye.defines.push("APPLY_ALPHA"),u&&Ye.defines.push("APPLY_DAY_NIGHT_ALPHA"),p&&Ye.defines.push("HAS_WATER_MASK"),A&&(Ye.defines.push("SHOW_REFLECTIVE_OCEAN"),st.defines.push("SHOW_REFLECTIVE_OCEAN")),f&&Ye.defines.push("SHOW_OCEAN_WAVES"),w&&Ye.defines.push("APPLY_COLOR_TO_ALPHA"),v&&(st.defines.push("UNDERGROUND_COLOR"),Ye.defines.push("UNDERGROUND_COLOR")),D&&(st.defines.push("TRANSLUCENT"),Ye.defines.push("TRANSLUCENT")),b&&(I?(st.defines.push("ENABLE_VERTEX_LIGHTING"),Ye.defines.push("ENABLE_VERTEX_LIGHTING")):(st.defines.push("ENABLE_DAYNIGHT_SHADING"),Ye.defines.push("ENABLE_DAYNIGHT_SHADING"))),C&&(st.defines.push("DYNAMIC_ATMOSPHERE_LIGHTING"),Ye.defines.push("DYNAMIC_ATMOSPHERE_LIGHTING"),T&&(st.defines.push("DYNAMIC_ATMOSPHERE_LIGHTING_FROM_SUN"),Ye.defines.push("DYNAMIC_ATMOSPHERE_LIGHTING_FROM_SUN"))),E&&(st.defines.push("GROUND_ATMOSPHERE"),Ye.defines.push("GROUND_ATMOSPHERE"),S&&(st.defines.push("PER_FRAGMENT_GROUND_ATMOSPHERE"),Ye.defines.push("PER_FRAGMENT_GROUND_ATMOSPHERE"))),st.defines.push("INCLUDE_WEB_MERCATOR_Y"),Ye.defines.push("INCLUDE_WEB_MERCATOR_Y"),V&&(st.defines.push("FOG"),Ye.defines.push("FOG")),h&&Ye.defines.push("APPLY_SPLIT"),W&&Ye.defines.push("ENABLE_CLIPPING_PLANES"),N&&(Ye.defines.push("ENABLE_CLIPPING_POLYGONS"),st.defines.push("ENABLE_CLIPPING_POLYGONS"),P.inverse&&Ye.defines.push("CLIPPING_INVERSE"),Ye.defines.push(`CLIPPING_POLYGON_REGIONS_LENGTH ${P.extentsCount}`),st.defines.push(`CLIPPING_POLYGON_REGIONS_LENGTH ${P.extentsCount}`)),Z&&Ye.defines.push("COLOR_CORRECT"),G&&Ye.defines.push("HIGHLIGHT_FILL_TILE"),X&&st.defines.push("GEODETIC_SURFACE_NORMALS"),k&&st.defines.push("EXAGGERATION");let xt=` vec4 computeDayColor(vec4 initialColor, vec3 textureCoordinates, float nightBlend)
{
vec4 color = initialColor;
`;_&&(xt+=` vec4 cutoutAndColorResult;
bool texelUnclipped;
`);for(let Je=0;Je<i;++Je)_?xt+=` cutoutAndColorResult = u_dayTextureCutoutRectangles[${Je}];
texelUnclipped = v_textureCoordinates.x < cutoutAndColorResult.x || cutoutAndColorResult.z < v_textureCoordinates.x || v_textureCoordinates.y < cutoutAndColorResult.y || cutoutAndColorResult.w < v_textureCoordinates.y;
cutoutAndColorResult = sampleAndBlend(
`:xt+=` color = sampleAndBlend(
`,xt+=` color,
u_dayTextures[${Je}],
u_dayTextureUseWebMercatorT[${Je}] ? textureCoordinates.xz : textureCoordinates.xy,
u_dayTextureTexCoordsRectangle[${Je}],
u_dayTextureTranslationAndScale[${Je}],
${d?`u_dayTextureAlpha[${Je}]`:"1.0"},
${u?`u_dayTextureNightAlpha[${Je}]`:"1.0"},
${u?`u_dayTextureDayAlpha[${Je}]`:"1.0"},
${o?`u_dayTextureBrightness[${Je}]`:"0.0"},
${r?`u_dayTextureContrast[${Je}]`:"0.0"},
${s?`u_dayTextureHue[${Je}]`:"0.0"},
${a?`u_dayTextureSaturation[${Je}]`:"0.0"},
${c?`u_dayTextureOneOverGamma[${Je}]`:"0.0"},
//\u3010mars3d.cn\u4FEE\u6539\u3011 Hao 2022-1-5 \u74E6\u7247\u6EE4\u955C\u6548\u679C
${Y.invertColor?`u_mars3dTextureInvertColor[${Je}]`:"false"},
${Y.filterColor?`u_mars3dTextureFilterColor[${Je}]`:"vec3(1.0)"},
//\u3010mars3d.cn\u4FEE\u6539\u3011 Hao 2022-1-5 \u74E6\u7247\u6EE4\u955C\u6548\u679C
${h?`u_dayTextureSplit[${Je}]`:"0.0"},
${w?`u_colorsToAlpha[${Je}]`:"vec4(0.0)"},
nightBlend);
`,_&&(xt+=` color = czm_branchFreeTernary(texelUnclipped, cutoutAndColorResult, color);
`);xt+=` return color;
}`,Ye.sources.push(xt),st.sources.push(E0t(Ce)),st.sources.push(I0t(R));let at=tn.fromCache({context:t.context,vertexShaderSource:st,fragmentShaderSource:Ye,attributeLocations:z.getAttributeLocations()});Pe=Xe[Te]=new T0t(i,Te,this.material,at,Fe,Ne)}return n.surfaceShader=Pe,Pe.shaderProgram};iee.prototype.destroy=function(){let e,t,n=this._shadersByTexturesFlags;for(let i in n)if(n.hasOwnProperty(i)){let o=n[i];if(!l(o))continue;for(e in o)o.hasOwnProperty(e)&&(t=o[e],l(t)&&t.shaderProgram.destroy())}return he(this)};var lY=iee;var _8i=y(x(),1);var t4i=y(x(),1);var Rji=y(x(),1),Z0t={START:0,LOADING:1,DONE:2,FAILED:3},Qa=Object.freeze(Z0t);var Gji=y(x(),1),R0t={FAILED:0,UNLOADED:1,RECEIVING:2,RECEIVED:3,TRANSFORMING:4,TRANSFORMED:5,READY:6},Wo=Object.freeze(R0t);function xr(){this.imagery=[],this.waterMaskTexture=void 0,this.waterMaskTranslationAndScale=new re(0,0,1,1),this.terrainData=void 0,this.vertexArray=void 0,this.tileBoundingRegion=void 0,this.occludeePointInScaledSpace=new m,this.boundingVolumeSourceTile=void 0,this.boundingVolumeIsFromMesh=!1,this.terrainState=Wo.UNLOADED,this.mesh=void 0,this.fill=void 0,this.pickBoundingSphere=new ue,this.surfaceShader=void 0,this.isClipped=!0,this.clippedByBoundaries=!1}Object.defineProperties(xr.prototype,{eligibleForUnloading:{get:function(){let e=this.terrainState,n=!(e===Wo.RECEIVING||e===Wo.TRANSFORMING),i=this.imagery;for(let o=0,r=i.length;n&&o<r;++o){let s=i[o];n=!l(s.loadingImagery)||s.loadingImagery.state!==Qn.TRANSITIONING}return n}},renderedMesh:{get:function(){if(l(this.vertexArray))return this.mesh;if(l(this.fill))return this.fill.mesh}}});xr.prototype.pick=function(e,t,n,i,o){if(!l(this.renderedMesh))return;let r=this.renderedMesh.pick(e,i,t,n);return m.clone(r,o)};xr.prototype.freeResources=function(){l(this.waterMaskTexture)&&(--this.waterMaskTexture.referenceCount,this.waterMaskTexture.referenceCount===0&&this.waterMaskTexture.destroy(),this.waterMaskTexture=void 0),this.terrainData=void 0,this.terrainState=Wo.UNLOADED,this.mesh=void 0,this.fill=this.fill&&this.fill.destroy();let e=this.imagery;for(let t=0,n=e.length;t<n;++t)e[t].freeResources();this.imagery.length=0,this.freeVertexArray()};xr.prototype.freeVertexArray=function(){xr._freeVertexArray(this.vertexArray),this.vertexArray=void 0,xr._freeVertexArray(this.wireframeVertexArray),this.wireframeVertexArray=void 0};xr.initialize=function(e,t,n){let i=e.data;l(i)||(i=e.data=new xr),e.state===Qa.START&&(V0t(e,t,n),e.state=Qa.LOADING)};xr.processStateMachine=function(e,t,n,i,o,r,s){xr.initialize(e,n,i);let a=e.data;if(e.state===Qa.LOADING&&G0t(e,t,n,i,o,r),s)return;let c=e.renderable;e.renderable=l(a.vertexArray);let d=a.terrainState===Wo.READY;e.upsampledFromParent=l(a.terrainData)&&a.terrainData.wasCreatedByUpsampling();let u=a.processImagery(e,n,t);if(d&&u){let h=e._loadedCallbacks,p={};for(let A in h)h.hasOwnProperty(A)&&(h[A](e)||(p[A]=h[A]));e._loadedCallbacks=p,e.state=Qa.DONE}c&&(e.renderable=!0)};xr.prototype.processImagery=function(e,t,n,i){let o=e.data,r=e.upsampledFromParent,s=!1,a=!0,c=o.imagery,d,u;for(d=0,u=c.length;d<u;++d){let h=c[d];if(!l(h.loadingImagery)){r=!1;continue}if(h.loadingImagery.state===Qn.PLACEHOLDER){let A=h.loadingImagery.imageryLayer;if(A.ready){h.freeResources(),c.splice(d,1),A._createTileImagerySkeletons(e,t,d),--d,u=c.length;continue}else r=!1}let p=h.processStateMachine(e,n,i);a=a&&p,s=s||p||l(h.readyImagery),r=r&&l(h.loadingImagery)&&(h.loadingImagery.state===Qn.FAILED||h.loadingImagery.state===Qn.INVALID)}return e.upsampledFromParent=r,e.renderable=e.renderable&&(s||a),a};function JSe(e,t,n,i){let o=e.renderedMesh,r=o.vertices,s=o.encoding,a=r.length/s.stride,c=yr.clone(s);c.hasGeodeticSurfaceNormals=t,c=yr.clone(c);let d=c.stride,u=new Float32Array(a*d);t?s.addGeodeticSurfaceNormals(r,u,n):s.removeGeodeticSurfaceNormals(r,u),o.vertices=u,o.stride=d,o!==e.mesh?(xr._freeVertexArray(e.fill.vertexArray),e.fill.vertexArray=xr._createVertexArrayForMesh(i.context,o)):(xr._freeVertexArray(e.vertexArray),e.vertexArray=xr._createVertexArrayForMesh(i.context,o)),xr._freeVertexArray(e.wireframeVertexArray),e.wireframeVertexArray=void 0}xr.prototype.addGeodeticSurfaceNormals=function(e,t){JSe(this,!0,e,t)};xr.prototype.removeGeodeticSurfaceNormals=function(e){JSe(this,!1,void 0,e)};xr.prototype.updateExaggeration=function(e,t,n){let i=this,o=i.renderedMesh;if(o===void 0)return;let r=t.verticalExaggeration,s=t.verticalExaggerationRelativeHeight,a=r!==1,c=o.encoding,d=c.exaggeration!==r,u=c.exaggerationRelativeHeight!==s;if(d||u){if(d)if(a&&!c.hasGeodeticSurfaceNormals){let p=e.tilingScheme.ellipsoid;i.addGeodeticSurfaceNormals(p,t)}else!a&&c.hasGeodeticSurfaceNormals&&i.removeGeodeticSurfaceNormals(t);if(c.exaggeration=r,c.exaggerationRelativeHeight=s,n!==void 0){n._tileToUpdateHeights.push(e);let p=e.customData;for(let A of p)A.level=-1}o.updateExaggeration(r,s)}};xr.prototype.updateSceneMode=function(e){let n=this.renderedMesh;n!==void 0&&n.updateSceneMode(e)};function V0t(e,t,n){let i=t.getTileDataAvailable(e.x,e.y,e.level);if(!l(i)&&l(e.parent)){let o=e.parent,r=o.data;l(r)&&l(r.terrainData)&&(i=r.terrainData.isChildAvailable(o.x,o.y,e.x,e.y))}i===!1&&(e.data.terrainState=Wo.FAILED);for(let o=0,r=n.length;o<r;++o){let s=n.get(o);s.show&&s._createTileImagerySkeletons(e,t)}}function G0t(e,t,n,i,o,r){let s=e.data,a=e.parent;if(s.terrainState===Wo.FAILED&&a!==void 0&&(a.data!==void 0&&a.data.terrainData!==void 0&&a.data.terrainData.canUpsample!==!1||xr.processStateMachine(a,t,n,i,o,r,!0)),s.terrainState===Wo.FAILED&&L0t(s,e,t,n,e.x,e.y,e.level),s.terrainState===Wo.UNLOADED&&W0t(s,n,e.x,e.y,e.level),s.terrainState===Wo.RECEIVED&&B0t(s,t,n,e.x,e.y,e.level),s.terrainState===Wo.TRANSFORMED&&(w0t(s,t.context,n,e.x,e.y,e.level,r),s.updateExaggeration(e,t,o)),s.terrainState>=Wo.RECEIVED&&s.waterMaskTexture===void 0&&n.hasWaterMask)if(s.terrainData.waterMask!==void 0)P0t(t.context,s);else{let d=s._findAncestorTileWithTerrainData(e);l(d)&&l(d.data.waterMaskTexture)&&(s.waterMaskTexture=d.data.waterMaskTexture,++s.waterMaskTexture.referenceCount,s._computeWaterMaskTranslationAndScale(e,d,s.waterMaskTranslationAndScale))}}function L0t(e,t,n,i,o,r,s){let a=t.parent;if(!a){t.state=Qa.FAILED;return}let c=a.data.terrainData,d=a.x,u=a.y,h=a.level;if(!l(c))return;let p=c.upsample(i.tilingScheme,d,u,h,o,r,s);l(p)&&(e.terrainState=Wo.RECEIVING,Promise.resolve(p).then(function(A){l(A)&&(e.terrainData=A,e.terrainState=Wo.RECEIVED)}).catch(function(){e.terrainState=Wo.FAILED}))}function W0t(e,t,n,i,o){function r(c){if(!l(c)){e.terrainState=Wo.UNLOADED,e.request=void 0;return}e.terrainData=c,e.terrainState=Wo.RECEIVED,e.request=void 0}function s(c){if(e.request.state===Ai.CANCELLED){e.terrainData=void 0,e.terrainState=Wo.UNLOADED,e.request=void 0;return}e.terrainState=Wo.FAILED,e.request=void 0;let d=`Failed to obtain terrain tile X: ${n} Y: ${i} Level: ${o}. Error message: "${c}"`;t._requestError=qo.reportError(t._requestError,t,t.errorEvent,d,n,i,o),t._requestError.retry&&a()}function a(){let c=new Tr({throttle:!1,throttleByServer:!0,type:Ds.TERRAIN});e.request=c;let d=t.requestTileGeometry(n,i,o,c);l(d)?(e.terrainState=Wo.RECEIVING,Promise.resolve(d).then(function(u){r(u)}).catch(function(u){s(u)})):(e.terrainState=Wo.UNLOADED,e.request=void 0)}a()}var F0t={tilingScheme:void 0,x:0,y:0,level:0,exaggeration:1,exaggerationRelativeHeight:0,throttle:!0};function B0t(e,t,n,i,o,r){let s=n.tilingScheme,a=F0t;a.tilingScheme=s,a.x=i,a.y=o,a.level=r,a.exaggeration=t.verticalExaggeration,a.exaggerationRelativeHeight=t.verticalExaggerationRelativeHeight,a.throttle=!0;let d=e.terrainData.createMesh(a);l(d)&&(e.terrainState=Wo.TRANSFORMING,Promise.resolve(d).then(function(u){e.mesh=u,e.terrainState=Wo.TRANSFORMED}).catch(function(){e.terrainState=Wo.FAILED}))}xr._createVertexArrayForMesh=function(e,t){let n=t.vertices,i=it.createVertexBuffer({context:e,typedArray:n,usage:Be.STATIC_DRAW}),o=t.encoding.getAttributes(i),r=t.indices.indexBuffers||{},s=r[e.id];if(!l(s)||s.isDestroyed()){let a=t.indices;s=it.createIndexBuffer({context:e,typedArray:a,usage:Be.STATIC_DRAW,indexDatatype:Ue.fromSizeInBytes(a.BYTES_PER_ELEMENT)}),s.vertexArrayDestroyable=!1,s.referenceCount=1,r[e.id]=s,t.indices.indexBuffers=r}else++s.referenceCount;return new kn({context:e,attributes:o,indexBuffer:s})};xr._freeVertexArray=function(e){if(l(e)){let t=e.indexBuffer;e.isDestroyed()||e.destroy(),l(t)&&!t.isDestroyed()&&l(t.referenceCount)&&(--t.referenceCount,t.referenceCount===0&&t.destroy())}};function w0t(e,t,n,i,o,r,s){e.vertexArray=xr._createVertexArrayForMesh(t,e.mesh),e.terrainState=Wo.READY,e.fill=e.fill&&e.fill.destroy(s)}function N0t(e){let t=e.cache.tile_waterMaskData;if(!l(t)){let n=Lt.create({context:e,pixelFormat:Ke.LUMINANCE,pixelDatatype:Oe.UNSIGNED_BYTE,source:{arrayBufferView:new Uint8Array([255]),width:1,height:1}});n.referenceCount=1;let i=new Ht({wrapS:gn.CLAMP_TO_EDGE,wrapT:gn.CLAMP_TO_EDGE,minificationFilter:zt.LINEAR,magnificationFilter:li.LINEAR});t={allWaterTexture:n,sampler:i,destroy:function(){this.allWaterTexture.destroy()}},e.cache.tile_waterMaskData=t}return t}function P0t(e,t){let n=t.terrainData.waterMask,i=N0t(e),o,r=n.length;if(n instanceof ImageBitmap)o=Lt.create({context:e,source:n,sampler:i.sampler,flipY:!1,skipColorSpaceConversion:!0});else if(r===1)if(n[0]!==0)o=i.allWaterTexture;else return;else{let s=Math.sqrt(r);o=Lt.create({context:e,pixelFormat:Ke.LUMINANCE,pixelDatatype:Oe.UNSIGNED_BYTE,source:{width:s,height:s,arrayBufferView:n},sampler:i.sampler,flipY:!1}),o.referenceCount=0}++o.referenceCount,t.waterMaskTexture=o,re.fromElements(0,0,1,1,t.waterMaskTranslationAndScale)}xr.prototype._findAncestorTileWithTerrainData=function(e){let t=e.parent;for(;l(t)&&(!l(t.data)||!l(t.data.terrainData)||t.data.terrainData.wasCreatedByUpsampling());)t=t.parent;return t};xr.prototype._computeWaterMaskTranslationAndScale=function(e,t,n){let i=t.rectangle,o=e.rectangle,r=o.width,s=o.height,a=r/i.width,c=s/i.height;return n.x=a*(o.west-i.west)/r,n.y=c*(o.south-i.south)/s,n.z=a,n.w=c,n};var ih=xr;var _4i=y(x(),1);var i4i=y(x(),1),KSe={NONE:0,CULLED:1,RENDERED:2,REFINED:3,RENDERED_AND_KICKED:6,REFINED_AND_KICKED:7,CULLED_BUT_NEEDED:9,wasKicked:function(e){return e>=KSe.RENDERED_AND_KICKED},originalResult:function(e){return e&3},kick:function(e){return e|4}},ui=KSe;function DZ(e){this.tile=e,this.frameLastUpdated=void 0,this.westMeshes=[],this.westTiles=[],this.southMeshes=[],this.southTiles=[],this.eastMeshes=[],this.eastTiles=[],this.northMeshes=[],this.northTiles=[],this.southwestMesh=void 0,this.southwestTile=void 0,this.southeastMesh=void 0,this.southeastTile=void 0,this.northwestMesh=void 0,this.northwestTile=void 0,this.northeastMesh=void 0,this.northeastTile=void 0,this.changedThisFrame=!0,this.visitedFrame=void 0,this.enqueuedFrame=void 0,this.mesh=void 0,this.vertexArray=void 0,this.waterMaskTexture=void 0,this.waterMaskTranslationAndScale=new re}DZ.prototype.update=function(e,t,n){this.changedThisFrame&&(i_e(e,t,this.tile,n),this.changedThisFrame=!1)};DZ.prototype.destroy=function(e){this._destroyVertexArray(e),l(this.waterMaskTexture)&&(--this.waterMaskTexture.referenceCount,this.waterMaskTexture.referenceCount===0&&this.waterMaskTexture.destroy(),this.waterMaskTexture=void 0)};DZ.prototype._destroyVertexArray=function(e){l(this.vertexArray)&&(l(e)?e.push(this.vertexArray):ih._freeVertexArray(this.vertexArray),this.vertexArray=void 0)};var X0t=new _0;DZ.updateFillTiles=function(e,t,n,i){let o=e._quadtree,r=o._levelZeroTiles,s=o._lastSelectionFrameNumber,a=X0t;a.clear();for(let d=0;d<t.length;++d){let u=t[d];l(u.data.vertexArray)&&a.enqueue(t[d])}let c=a.dequeue();for(;c!==void 0;){let d=c.findTileToWest(r),u=c.findTileToSouth(r),h=c.findTileToEast(r),p=c.findTileToNorth(r);ya(e,n,c,d,s,Zn.EAST,!1,a,i),ya(e,n,c,u,s,Zn.NORTH,!1,a,i),ya(e,n,c,h,s,Zn.WEST,!1,a,i),ya(e,n,c,p,s,Zn.SOUTH,!1,a,i);let A=d.findTileToNorth(r),f=d.findTileToSouth(r),b=h.findTileToNorth(r),C=h.findTileToSouth(r);ya(e,n,c,A,s,Zn.SOUTHEAST,!1,a,i),ya(e,n,c,b,s,Zn.SOUTHWEST,!1,a,i),ya(e,n,c,f,s,Zn.NORTHEAST,!1,a,i),ya(e,n,c,C,s,Zn.NORTHWEST,!1,a,i),c=a.dequeue()}};function ya(e,t,n,i,o,r,s,a,c){if(i===void 0)return;let d=i;for(;d&&(d._lastSelectionResultFrame!==o||ui.wasKicked(d._lastSelectionResult)||ui.originalResult(d._lastSelectionResult)===ui.CULLED);){if(s)return;let u=d.parent;if(r>=Zn.NORTHWEST&&u!==void 0)switch(r){case Zn.NORTHWEST:d=d===u.northwestChild?u:void 0;break;case Zn.NORTHEAST:d=d===u.northeastChild?u:void 0;break;case Zn.SOUTHWEST:d=d===u.southwestChild?u:void 0;break;case Zn.SOUTHEAST:d=d===u.southeastChild?u:void 0;break}else d=u}if(d!==void 0){if(d._lastSelectionResult===ui.RENDERED){if(l(d.data.vertexArray))return;Y0t(e,t,n,d,r,o,a,c);return}if(ui.originalResult(i._lastSelectionResult)!==ui.CULLED)switch(r){case Zn.WEST:ya(e,t,n,i.northwestChild,o,r,!0,a,c),ya(e,t,n,i.southwestChild,o,r,!0,a,c);break;case Zn.EAST:ya(e,t,n,i.southeastChild,o,r,!0,a,c),ya(e,t,n,i.northeastChild,o,r,!0,a,c);break;case Zn.SOUTH:ya(e,t,n,i.southwestChild,o,r,!0,a,c),ya(e,t,n,i.southeastChild,o,r,!0,a,c);break;case Zn.NORTH:ya(e,t,n,i.northeastChild,o,r,!0,a,c),ya(e,t,n,i.northwestChild,o,r,!0,a,c);break;case Zn.NORTHWEST:ya(e,t,n,i.northwestChild,o,r,!0,a,c);break;case Zn.NORTHEAST:ya(e,t,n,i.northeastChild,o,r,!0,a,c);break;case Zn.SOUTHWEST:ya(e,t,n,i.southwestChild,o,r,!0,a,c);break;case Zn.SOUTHEAST:ya(e,t,n,i.southeastChild,o,r,!0,a,c);break;default:throw new fe("Invalid edge")}}}function Y0t(e,t,n,i,o,r,s,a){let c=i.data;if(c.fill===void 0)c.fill=new DZ(i);else if(c.fill.visitedFrame===r)return;c.fill.enqueuedFrame!==r&&(c.fill.enqueuedFrame=r,c.fill.changedThisFrame=!1,s.enqueue(i)),M0t(e,t,n,i,o,a)}function M0t(e,t,n,i,o,r){let s=i.data.fill,a,c=n.data.fill;l(c)?(c.visitedFrame=t.frameNumber,c.changedThisFrame&&(i_e(e,t,n,r),c.changedThisFrame=!1),a=n.data.fill.mesh):a=n.data.mesh;let d,u;switch(o){case Zn.WEST:d=s.westMeshes,u=s.westTiles;break;case Zn.SOUTH:d=s.southMeshes,u=s.southTiles;break;case Zn.EAST:d=s.eastMeshes,u=s.eastTiles;break;case Zn.NORTH:d=s.northMeshes,u=s.northTiles;break;case Zn.NORTHWEST:s.changedThisFrame=s.changedThisFrame||s.northwestMesh!==a,s.northwestMesh=a,s.northwestTile=n;return;case Zn.NORTHEAST:s.changedThisFrame=s.changedThisFrame||s.northeastMesh!==a,s.northeastMesh=a,s.northeastTile=n;return;case Zn.SOUTHWEST:s.changedThisFrame=s.changedThisFrame||s.southwestMesh!==a,s.southwestMesh=a,s.southwestTile=n;return;case Zn.SOUTHEAST:s.changedThisFrame=s.changedThisFrame||s.southeastMesh!==a,s.southeastMesh=a,s.southeastTile=n;return}if(n.level<=i.level){s.changedThisFrame=s.changedThisFrame||d[0]!==a||d.length!==1,d[0]=a,u[0]=n,d.length=1,u.length=1;return}let h,p,A,f,b=n.rectangle,C,T=i.rectangle;switch(o){case Zn.WEST:for(C=(T.north-T.south)*L.EPSILON5,h=0;h<u.length&&(A=u[h],f=A.rectangle,!L.greaterThan(b.north,f.south,C));++h);for(p=h;p<u.length&&(A=u[p],f=A.rectangle,!L.greaterThanOrEquals(b.south,f.north,C));++p);break;case Zn.SOUTH:for(C=(T.east-T.west)*L.EPSILON5,h=0;h<u.length&&(A=u[h],f=A.rectangle,!L.lessThan(b.west,f.east,C));++h);for(p=h;p<u.length&&(A=u[p],f=A.rectangle,!L.lessThanOrEquals(b.east,f.west,C));++p);break;case Zn.EAST:for(C=(T.north-T.south)*L.EPSILON5,h=0;h<u.length&&(A=u[h],f=A.rectangle,!L.lessThan(b.south,f.north,C));++h);for(p=h;p<u.length&&(A=u[p],f=A.rectangle,!L.lessThanOrEquals(b.north,f.south,C));++p);break;case Zn.NORTH:for(C=(T.east-T.west)*L.EPSILON5,h=0;h<u.length&&(A=u[h],f=A.rectangle,!L.greaterThan(b.east,f.west,C));++h);for(p=h;p<u.length&&(A=u[p],f=A.rectangle,!L.greaterThanOrEquals(b.west,f.east,C));++p);break}p-h===1?(s.changedThisFrame=s.changedThisFrame||d[h]!==a,d[h]=a,u[h]=n):(s.changedThisFrame=!0,d.splice(h,p-h,a),u.splice(h,p-h,n))}var lE=new Ae,v0t=new Ae,UZ=new m,aee=new m,oee=new M,ree=new M,ku=new M;function uO(){this.height=0,this.encodedNormal=new M}function rO(e,t,n,i,o,r,s,a,c){if(l(o))return o;let d;if(l(r)&&l(s))d=(r.height+s.height)*.5;else if(l(r))d=r.height;else if(l(s))d=s.height;else if(l(a))d=a.height;else{let h=e.tile.data.tileBoundingRegion,p=0,A=0;l(h)&&(p=h.minimumHeight,A=h.maximumHeight),d=(p+A)*.5}return o_e(e,t,n,i,d,c),c}var U0t={minimumHeight:0,maximumHeight:0},D0t=new m,jSe=new uO,qSe=new uO,$Se=new uO,e_e=new uO,k0t=typeof Uint8Array<"u"?new Uint8Array(81):void 0,Q0t={tilingScheme:void 0,x:0,y:0,level:0,exaggeration:1,exaggerationRelativeHeight:0};function i_e(e,t,n,i){ih.initialize(n,e.terrainProvider,e._imageryLayers);let o=n.data,r=o.fill,s=n.rectangle,a=t.verticalExaggeration,c=t.verticalExaggerationRelativeHeight,d=a!==1,u=n.tilingScheme.ellipsoid,h=aO(r,u,0,1,r.northwestTile,r.northwestMesh,r.northTiles,r.northMeshes,r.westTiles,r.westMeshes,$Se),p=aO(r,u,0,0,r.southwestTile,r.southwestMesh,r.westTiles,r.westMeshes,r.southTiles,r.southMeshes,jSe),A=aO(r,u,1,0,r.southeastTile,r.southeastMesh,r.southTiles,r.southMeshes,r.eastTiles,r.eastMeshes,qSe),f=aO(r,u,1,1,r.northeastTile,r.northeastMesh,r.eastTiles,r.eastMeshes,r.northTiles,r.northMeshes,e_e);h=rO(r,u,0,1,h,p,f,A,$Se),p=rO(r,u,0,0,p,h,A,f,jSe),A=rO(r,u,1,1,A,p,f,h,qSe),f=rO(r,u,1,1,f,A,h,p,e_e);let b=p.height,C=A.height,T=h.height,E=f.height,S=Math.min(b,C,T,E),I=Math.max(b,C,T,E),R=(S+I)*.5,V,W,B=e.getLevelMaximumGeometricError(n.level),N=u.maximumRadius-B,P=Math.acos(N/u.maximumRadius)*4;if(P*=1.5,s.width>P&&I-S<=B){let Z=new Fc({width:9,height:9,buffer:k0t,structure:{heightOffset:I}}),G=Q0t;G.tilingScheme=n.tilingScheme,G.x=n.x,G.y=n.y,G.level=n.level,G.exaggeration=a,G.exaggerationRelativeHeight=c,r.mesh=Z._createMeshSync(G)}else{let Z=d,G=de.center(s,v0t);G.height=R;let w=u.cartographicToCartesian(G,D0t),X=new yr(w,void 0,void 0,void 0,void 0,!0,!0,Z,a,c),k=5,v;for(v=r.westMeshes,V=0,W=v.length;V<W;++V)k+=v[V].eastIndicesNorthToSouth.length;for(v=r.southMeshes,V=0,W=v.length;V<W;++V)k+=v[V].northIndicesWestToEast.length;for(v=r.eastMeshes,V=0,W=v.length;V<W;++V)k+=v[V].westIndicesSouthToNorth.length;for(v=r.northMeshes,V=0,W=v.length;V<W;++V)k+=v[V].southIndicesEastToWest.length;let D=U0t;D.minimumHeight=S,D.maximumHeight=I;let Y=X.stride,O=new Float32Array(k*Y),J=0,te=J;J=sO(u,s,X,O,J,0,1,h.height,h.encodedNormal,1,D),J=lO(r,u,X,O,J,r.westTiles,r.westMeshes,Zn.EAST,D);let z=J;J=sO(u,s,X,O,J,0,0,p.height,p.encodedNormal,0,D),J=lO(r,u,X,O,J,r.southTiles,r.southMeshes,Zn.NORTH,D);let j=J;J=sO(u,s,X,O,J,1,0,A.height,A.encodedNormal,0,D),J=lO(r,u,X,O,J,r.eastTiles,r.eastMeshes,Zn.WEST,D);let ee=J;J=sO(u,s,X,O,J,1,1,f.height,f.encodedNormal,1,D),J=lO(r,u,X,O,J,r.northTiles,r.northMeshes,Zn.SOUTH,D),S=D.minimumHeight,I=D.maximumHeight;let ge=nn.fromRectangle(s,S,I,n.tilingScheme.ellipsoid),ye=pi.geodeticLatitudeToMercatorAngle(s.south),ae=1/(pi.geodeticLatitudeToMercatorAngle(s.north)-ye),Ce=(pi.geodeticLatitudeToMercatorAngle(G.latitude)-ye)*ae,Te=u.geodeticSurfaceNormalCartographic(lE,aee),Fe=on.octEncode(Te,oee),Ne=J;X.encode(O,J*Y,ge.center,M.fromElements(.5,.5,ku),R,Fe,Ce,Te),++J;let Pe=J,Xe=Pe<256?1:2,st=(Pe-1)*3,Ye=st*Xe,xt=(O.length-Pe*Y)*Float32Array.BYTES_PER_ELEMENT,at;if(xt>=Ye){let Re=Pe*Y*Float32Array.BYTES_PER_ELEMENT;at=Pe<256?new Uint8Array(O.buffer,Re,st):new Uint16Array(O.buffer,Re,st)}else at=Pe<256?new Uint8Array(st):new Uint16Array(st);O=new Float32Array(O.buffer,0,Pe*Y);let Je=0;for(V=0;V<Pe-2;++V)at[Je++]=Ne,at[Je++]=V,at[Je++]=V+1;at[Je++]=Ne,at[Je++]=V,at[Je++]=0;let lt=[];for(V=z;V>=te;--V)lt.push(V);let ht=[];for(V=j;V>=z;--V)ht.push(V);let Rt=[];for(V=ee;V>=j;--V)Rt.push(V);let _e=[];for(_e.push(0),V=Ne-1;V>=ee;--V)_e.push(V);r.mesh=new hc(X.center,O,at,st,Pe,S,I,s,ue.fromOrientedBoundingBox(ge),q0t(e,ge.center,s,S,I),X.stride,ge,X,lt,ht,Rt,_e)}let g=t.context;r._destroyVertexArray(i),r.vertexArray=ih._createVertexArrayForMesh(g,r.mesh),o.processImagery(n,e.terrainProvider,t,!0);let _=r.waterMaskTexture;if(r.waterMaskTexture=void 0,e.terrainProvider.hasWaterMask){let Z=o._findAncestorTileWithTerrainData(n);l(Z)&&l(Z.data.waterMaskTexture)&&(r.waterMaskTexture=Z.data.waterMaskTexture,++r.waterMaskTexture.referenceCount,o._computeWaterMaskTranslationAndScale(n,Z,r.waterMaskTranslationAndScale))}l(_)&&(--_.referenceCount,_.referenceCount===0&&_.destroy())}function sO(e,t,n,i,o,r,s,a,c,d,u){let h=lE;h.longitude=L.lerp(t.west,t.east,r),h.latitude=L.lerp(t.south,t.north,s),h.height=a;let p=e.cartographicToCartesian(h,UZ),A;n.hasGeodeticSurfaceNormals&&(A=e.geodeticSurfaceNormal(p,aee));let f=ree;return f.x=r,f.y=s,n.encode(i,o*n.stride,p,f,a,c,d,A),u.minimumHeight=Math.min(u.minimumHeight,a),u.maximumHeight=Math.max(u.maximumHeight,a),o+1}var dO=new de;function dY(e,t,n,i){let o=e.rectangle,r=t.rectangle;t.x===0&&n.x===1&&e.x===e.tilingScheme.getNumberOfXTilesAtLevel(e.level)-1?(o=de.clone(e.rectangle,dO),o.west-=L.TWO_PI,o.east-=L.TWO_PI):e.x===0&&n.x===0&&t.x===t.tilingScheme.getNumberOfXTilesAtLevel(t.level)-1&&(o=de.clone(e.rectangle,dO),o.west+=L.TWO_PI,o.east+=L.TWO_PI);let s=o.east-o.west,a=(r.west-o.west)/s,c=(r.east-o.west)/s,d=o.north-o.south,u=(r.south-o.south)/d,h=(r.north-o.south)/d,p=(n.x-a)/(c-a),A=(n.y-u)/(h-u);return Math.abs(p)<Math.EPSILON5?p=0:Math.abs(p-1)<Math.EPSILON5&&(p=1),Math.abs(A)<Math.EPSILON5?A=0:Math.abs(A-1)<Math.EPSILON5&&(A=1),i.x=p,i.y=A,i}var O0t=new M;function see(e,t,n,i,o){let r=e.encoding,s=e.vertices;if(o.height=r.decodeHeight(s,t),r.hasVertexNormals)r.getOctEncodedNormal(s,t,o.encodedNormal);else{let a=o.encodedNormal;a.x=0,a.y=0}}var z0t=new M,H0t=new m;function J0t(e,t,n,i,o,r,s,a,c,d){let u=i.encoding,h=i.vertices,p=dY(t,n,u.decodeTextureCoordinates(h,o,ku),ku),A=dY(t,n,u.decodeTextureCoordinates(h,r,ree),ree),f;c?f=(s-p.x)/(A.x-p.x):f=(a-p.y)/(A.y-p.y);let b=u.decodeHeight(h,o),C=u.decodeHeight(h,r),T=n.rectangle;lE.longitude=L.lerp(T.west,T.east,s),lE.latitude=L.lerp(T.south,T.north,a),d.height=lE.height=L.lerp(b,C,f);let E;if(u.hasVertexNormals){let S=u.getOctEncodedNormal(h,o,O0t),I=u.getOctEncodedNormal(h,r,z0t),R=on.octDecode(S.x,S.y,UZ),V=on.octDecode(I.x,I.y,H0t);E=m.lerp(R,V,f,UZ),m.normalize(E,E),on.octEncode(E,d.encodedNormal)}else E=e.geodeticSurfaceNormalCartographic(lE,UZ),on.octEncode(E,d.encodedNormal)}function o_e(e,t,n,i,o,r){r.height=o;let s=t.geodeticSurfaceNormalCartographic(lE,UZ);on.octEncode(s,r.encodedNormal)}function aO(e,t,n,i,o,r,s,a,c,d,u){if(n_e(e,t,a,s,!1,n,i,u)||n_e(e,t,d,c,!0,n,i,u))return u;let p;if(cee(o,r))return n===0?i===0?p=r.eastIndicesNorthToSouth[0]:p=r.southIndicesEastToWest[0]:i===0?p=r.northIndicesWestToEast[0]:p=r.westIndicesSouthToNorth[0],see(r,p,n,i,u),u;let A;if(n===0?i===0?A=cO(e.westMeshes,e.westTiles,Zn.EAST,e.southMeshes,e.southTiles,Zn.NORTH,n,i):A=cO(e.northMeshes,e.northTiles,Zn.SOUTH,e.westMeshes,e.westTiles,Zn.EAST,n,i):i===0?A=cO(e.southMeshes,e.southTiles,Zn.NORTH,e.eastMeshes,e.eastTiles,Zn.WEST,n,i):A=cO(e.eastMeshes,e.eastTiles,Zn.WEST,e.northMeshes,e.northTiles,Zn.SOUTH,n,i),l(A))return o_e(e,t,n,i,A,u),u}function cO(e,t,n,i,o,r,s,a){let c=t_e(e,t,!1,n,s,a),d=t_e(i,o,!0,r,s,a);return l(c)&&l(d)?(c+d)*.5:l(c)?c:d}function lO(e,t,n,i,o,r,s,a,c){for(let d=0;d<r.length;++d)o=K0t(e,t,n,i,o,r[d],s[d],a,c);return o}function K0t(e,t,n,i,o,r,s,a,c){let d=r.rectangle;a===Zn.EAST&&e.tile.x===0?(d=de.clone(r.rectangle,dO),d.west-=L.TWO_PI,d.east-=L.TWO_PI):a===Zn.WEST&&r.x===0&&(d=de.clone(r.rectangle,dO),d.west+=L.TWO_PI,d.east+=L.TWO_PI);let u=e.tile.rectangle,h,p;o>0&&(n.decodeTextureCoordinates(i,o-1,ku),h=ku.x,p=ku.y);let A,f;switch(a){case Zn.WEST:A=s.westIndicesSouthToNorth,f=!1;break;case Zn.NORTH:A=s.northIndicesWestToEast,f=!0;break;case Zn.EAST:A=s.eastIndicesNorthToSouth,f=!1;break;case Zn.SOUTH:A=s.southIndicesEastToWest,f=!0;break}let b=r,C=e.tile,T=s.encoding,E=s.vertices,S=n.stride,I,R;T.hasWebMercatorT&&(I=pi.geodeticLatitudeToMercatorAngle(u.south),R=1/(pi.geodeticLatitudeToMercatorAngle(u.north)-I));for(let V=0;V<A.length;++V){let W=A[V],B=T.decodeTextureCoordinates(E,W,ku);dY(b,C,B,B);let N=B.x,P=B.y,g=f?N:P;if(g<0||g>1||Math.abs(N-h)<L.EPSILON5&&Math.abs(P-p)<L.EPSILON5)continue;let _=Math.abs(N)<L.EPSILON5||Math.abs(N-1)<L.EPSILON5,Z=Math.abs(P)<L.EPSILON5||Math.abs(P-1)<L.EPSILON5;if(_&&Z)continue;let G=T.decodePosition(E,W,UZ),w=T.decodeHeight(E,W),X;T.hasVertexNormals?X=T.getOctEncodedNormal(E,W,oee):(X=oee,X.x=0,X.y=0);let k=P;if(T.hasWebMercatorT){let D=L.lerp(u.south,u.north,P);k=(pi.geodeticLatitudeToMercatorAngle(D)-I)*R}let v;n.hasGeodeticSurfaceNormals&&(v=t.geodeticSurfaceNormal(G,aee)),n.encode(i,o*S,G,B,w,X,k,v),c.minimumHeight=Math.min(c.minimumHeight,w),c.maximumHeight=Math.max(c.maximumHeight,w),++o}return o}function t_e(e,t,n,i,o,r){let s,a,c;n?(s=0,a=e.length,c=1):(s=e.length-1,a=-1,c=-1);for(let d=s;d!==a;d+=c){let u=e[d],h=t[d];if(!cee(h,u))continue;let p;switch(i){case Zn.WEST:p=u.westIndicesSouthToNorth;break;case Zn.SOUTH:p=u.southIndicesEastToWest;break;case Zn.EAST:p=u.eastIndicesNorthToSouth;break;case Zn.NORTH:p=u.northIndicesWestToEast;break}let A=p[n?0:p.length-1];if(l(A))return u.encoding.decodeHeight(u.vertices,A)}}function cee(e,t){return l(t)&&(!l(e.data.fill)||!e.data.fill.changedThisFrame)}function n_e(e,t,n,i,o,r,s,a){let c,d,u,h,p,A=i[o?0:n.length-1],f=n[o?0:n.length-1];if(cee(A,f)&&(r===0?s===0?(c=o?f.northIndicesWestToEast:f.eastIndicesNorthToSouth,d=o,u=o):(c=o?f.eastIndicesNorthToSouth:f.southIndicesEastToWest,d=!o,u=!1):s===0?(c=o?f.westIndicesSouthToNorth:f.northIndicesWestToEast,d=!o,u=!0):(c=o?f.southIndicesEastToWest:f.westIndicesSouthToNorth,d=o,u=!o),c.length>0)){h=o?0:c.length-1,p=c[h],f.encoding.decodeTextureCoordinates(f.vertices,p,ku);let b=dY(A,e.tile,ku,ku);if(b.x===r&&b.y===s)return see(f,p,r,s,a),!0;if(h=yo(c,d?r:s,function(C,T){f.encoding.decodeTextureCoordinates(f.vertices,C,ku);let E=dY(A,e.tile,ku,ku);return u?d?E.x-r:E.y-s:d?r-E.x:s-E.y}),h<0){if(h=~h,h>0&&h<c.length)return J0t(t,A,e.tile,f,c[h-1],c[h],r,s,d,a),!0}else return see(f,c[h],r,s,a),!0}return!1}var j0t=[new m,new m,new m,new m];function q0t(e,t,n,i,o,r){let s=e.quadtree._occluders.ellipsoid,a=s.ellipsoid,c=j0t;return m.fromRadians(n.west,n.south,o,a,c[0]),m.fromRadians(n.east,n.south,o,a,c[1]),m.fromRadians(n.west,n.north,o,a,c[2]),m.fromRadians(n.east,n.north,o,a,c[3]),s.computeHorizonCullingPointPossiblyUnderEllipsoid(t,c,i,r)}var kZ=DZ;function Lr(e){this.lightingFadeOutDistance=65e5,this.lightingFadeInDistance=9e6,this.hasWaterMask=!1,this.showWaterEffect=!1,this.oceanNormalMap=void 0,this.zoomedOutOceanSpecularIntensity=.5,this.enableLighting=!1,this.dynamicAtmosphereLighting=!1,this.dynamicAtmosphereLightingFromSun=!1,this.showGroundAtmosphere=!1,this.shadows=Vn.RECEIVE_ONLY,this.vertexShadowDarkness=.3,this.fillHighlightColor=void 0,this.hueShift=0,this.saturationShift=0,this.brightnessShift=0,this.showSkirts=!0,this.backFaceCulling=!0,this.undergroundColor=void 0,this.undergroundColorAlphaByDistance=void 0,this.lambertDiffuseMultiplier=0,this.materialUniformMap=void 0,this._materialUniformMap=void 0,this._quadtree=void 0,this._terrainProvider=e.terrainProvider,this._imageryLayers=e.imageryLayers,this._surfaceShaderSet=e.surfaceShaderSet,this._renderState=void 0,this._blendRenderState=void 0,this._disableCullingRenderState=void 0,this._disableCullingBlendRenderState=void 0,this._errorEvent=new xe,this._removeLayerAddedListener=this._imageryLayers.layerAdded.addEventListener(Lr.prototype._onLayerAdded,this),this._removeLayerRemovedListener=this._imageryLayers.layerRemoved.addEventListener(Lr.prototype._onLayerRemoved,this),this._removeLayerMovedListener=this._imageryLayers.layerMoved.addEventListener(Lr.prototype._onLayerMoved,this),this._removeLayerShownListener=this._imageryLayers.layerShownOrHidden.addEventListener(Lr.prototype._onLayerShownOrHidden,this),this._imageryLayersUpdatedEvent=new xe,this._layerOrderChanged=!1,this._tilesToRenderByTextureCount=[],this._drawCommands=[],this._uniformMaps=[],this._usedDrawCommands=0,this._vertexArraysToDestroy=[],this._debug={wireframe:!1,boundingSphereTile:void 0},this._baseColor=void 0,this._firstPassInitialColor=void 0,this.baseColor=new U(0,0,.5,1),this._clippingPlanes=void 0,this._clippingPolygons=void 0,this.cartographicLimitRectangle=de.clone(de.MAX_VALUE),this._hasLoadedTilesThisFrame=!1,this._hasFillTilesThisFrame=!1,this._oldVerticalExaggeration=void 0,this._oldVerticalExaggerationRelativeHeight=void 0,this._oldSceneMode=se.SCENE3D,this._initByMars3D&&this._initByMars3D(e)}Object.defineProperties(Lr.prototype,{baseColor:{get:function(){return this._baseColor},set:function(e){this._baseColor=e,this._firstPassInitialColor=re.fromColor(e,this._firstPassInitialColor)}},quadtree:{get:function(){return this._quadtree},set:function(e){this._quadtree=e}},tilingScheme:{get:function(){if(l(this._terrainProvider))return this._terrainProvider.tilingScheme}},errorEvent:{get:function(){return this._errorEvent}},imageryLayersUpdatedEvent:{get:function(){return this._imageryLayersUpdatedEvent}},terrainProvider:{get:function(){return this._terrainProvider},set:function(e){this._terrainProvider!==e&&(this._terrainProvider=e,l(this._quadtree)&&this._quadtree.invalidateAllTiles())}},clippingPlanes:{get:function(){return this._clippingPlanes},set:function(e){ls.setOwner(e,this,"_clippingPlanes")}},clippingPolygons:{get:function(){return this._clippingPolygons},set:function(e){Uh.setOwner(e,this,"_clippingPolygons")}}});function $0t(e,t){let n=e.loadingImagery;l(n)||(n=e.readyImagery);let i=t.loadingImagery;return l(i)||(i=t.readyImagery),n.imageryLayer._layerIndex-i.imageryLayer._layerIndex}Lr.prototype.update=function(e){this._imageryLayers._update()};function eyt(e,t){let n=t.creditDisplay,i=e._terrainProvider;l(i)&&l(i.credit)&&n.addCreditToNextFrame(i.credit);let o=e._imageryLayers;for(let r=0,s=o.length;r<s;++r){let a=o.get(r);a.ready&&a.show&&l(a.imageryProvider.credit)&&n.addCreditToNextFrame(a.imageryProvider.credit)}}Lr.prototype.initialize=function(e){this._imageryLayers.queueReprojectionCommands(e),this._layerOrderChanged&&(this._layerOrderChanged=!1,this._quadtree.forEachLoadedTile(function(i){i.data.imagery.sort($0t)})),eyt(this,e);let t=this._vertexArraysToDestroy,n=t.length;for(let i=0;i<n;++i)ih._freeVertexArray(t[i]);t.length=0};Lr.prototype.beginUpdate=function(e){let t=this._tilesToRenderByTextureCount;for(let o=0,r=t.length;o<r;++o){let s=t[o];l(s)&&(s.length=0)}let n=this._clippingPlanes;l(n)&&n.enabled&&n.update(e);let i=this._clippingPolygons;l(i)&&i.enabled&&(i.update(e),i.queueCommands(e)),this._usedDrawCommands=0,this._hasLoadedTilesThisFrame=!1,this._hasFillTilesThisFrame=!1};Lr.prototype.endUpdate=function(e){if(!l(this._renderState)){this._renderState=Qe.fromCache({cull:{enabled:!0},depthTest:{enabled:!0,func:ec.LESS}}),this._blendRenderState=Qe.fromCache({cull:{enabled:!0},depthTest:{enabled:!0,func:ec.LESS_OR_EQUAL},blending:ln.ALPHA_BLEND});let a=He(this._renderState,!0);a.cull.enabled=!1,this._disableCullingRenderState=Qe.fromCache(a),a=He(this._blendRenderState,!0),a.cull.enabled=!1,this._disableCullingBlendRenderState=Qe.fromCache(a)}this._hasFillTilesThisFrame&&this._hasLoadedTilesThisFrame&&kZ.updateFillTiles(this,this._quadtree._tilesToRender,e,this._vertexArraysToDestroy);let t=this.quadtree,n=e.verticalExaggeration,i=e.verticalExaggerationRelativeHeight,o=this._oldVerticalExaggeration!==n||this._oldVerticalExaggerationRelativeHeight!==i;this._oldVerticalExaggeration=n,this._oldVerticalExaggerationRelativeHeight=i,o&&t.forEachLoadedTile(function(a){a.data.updateExaggeration(a,e,t)});let r=this._oldSceneMode!==e.mode;this._oldSceneMode=e.mode,r&&t.forEachLoadedTile(function(a){a.data.updateSceneMode(e.mode)});let s=this._tilesToRenderByTextureCount;for(let a=0,c=s.length;a<c;++a){let d=s[a];if(l(d))for(let u=0,h=d.length;u<h;++u){let p=d[u],A=p.data.tileBoundingRegion;l_e(this,p,e,!1);let f=this.marsOptions?.uplift;if(f&&f.enabled&&f.height!==0&&f.rectangles){for(let b=0;b<f.rectangles.length;b++)if(de.intersection(A.rectangle,f.rectangles[b])){l_e(this,p,e,!0);break}}e.minimumTerrainHeight=Math.min(e.minimumTerrainHeight,A.minimumHeight)}}};function d_e(e,t){let n=t.globeTranslucencyState;if(n.translucent){let i=e.renderState.blending.enabled;n.pushDerivedCommands(e,i,t)}else t.commandList.push(e)}Lr.prototype.updateForPick=function(e){let t=this._drawCommands;for(let n=0,i=this._usedDrawCommands;n<i;++n)d_e(t[n],e)};Lr.prototype.cancelReprojections=function(){this._imageryLayers.cancelReprojections()};Lr.prototype.getLevelMaximumGeometricError=function(e){return l(this._terrainProvider)?this._terrainProvider.getLevelMaximumGeometricError(e):0};Lr.prototype.loadTile=function(e,t){let n=t.data,i=!0,o;l(n)&&(i=n.boundingVolumeSourceTile!==t||t._lastSelectionResult===ui.CULLED_BUT_NEEDED,o=n.terrainState),ih.processStateMachine(t,e,this.terrainProvider,this._imageryLayers,this.quadtree,this._vertexArraysToDestroy,i),n=t.data,i&&o!==t.data.terrainState&&this.computeTileVisibility(t,e,this.quadtree.occluders)!==vr.NONE&&n.boundingVolumeSourceTile===t&&(i=!1,ih.processStateMachine(t,e,this.terrainProvider,this._imageryLayers,this.quadtree,this._vertexArraysToDestroy,i))};var tyt=new ue,u_e=new de,nyt=new de,iyt=new Ae;function hO(e,t){if(t.west<t.east)return t;let n=de.clone(t,nyt);return de.center(e,iyt).longitude>0?n.east=L.PI:n.west=-L.PI,n}function m_e(e,t){if(t.cameraUnderground||t.globeTranslucencyState.translucent)return!0;if(e.backFaceCulling)return!1;let n=e._clippingPlanes;if(l(n)&&n.enabled)return!0;let i=e._clippingPolygons;return!!(l(i)&&i.enabled||!de.equals(e.cartographicLimitRectangle,de.MAX_VALUE))}Lr.prototype.computeTileVisibility=function(e,t,n){let i=this.computeDistanceToTile(e,t);e._distance=i;let o=m_e(this,t);if(t.fog.enabled&&!o&&L.fog(i,t.fog.density)>=1)return vr.NONE;let r=e.data,s=r.tileBoundingRegion;if(r.boundingVolumeSourceTile===void 0)return vr.PARTIAL;let a=t.cullingVolume,c=s.boundingVolume;l(c)||(c=s.boundingSphere),r.clippedByBoundaries=!1;let d=hO(e.rectangle,this.cartographicLimitRectangle),u=de.simpleIntersection(d,e.rectangle,u_e);if(!l(u))return vr.NONE;if(de.equals(u,e.rectangle)||(r.clippedByBoundaries=!0),t.mode!==se.SCENE3D&&(c=tyt,ue.fromRectangleWithHeights2D(e.rectangle,t.mapProjection,s.minimumHeight,s.maximumHeight,c),m.fromElements(c.center.z,c.center.x,c.center.y,c.center),t.mode===se.MORPHING&&l(r.renderedMesh)&&(c=ue.union(s.boundingSphere,c,c))),!l(c))return vr.PARTIAL;let h=this._clippingPlanes;if(l(h)&&h.enabled){let C=h.computeIntersectionWithBoundingVolume(c);if(e.isClipped=C!==qt.INSIDE,C===qt.OUTSIDE)return vr.NONE}let p=this._clippingPolygons;if(l(p)&&p.enabled){let C=p.computeIntersectionWithBoundingVolume(s);e.isClipped=C!==qt.OUTSIDE}let A,f=a.computeVisibility(c);if(f===qt.OUTSIDE?A=vr.NONE:f===qt.INTERSECTING?A=vr.PARTIAL:f===qt.INSIDE&&(A=vr.FULL),A===vr.NONE)return A;let b=t.mode===se.SCENE3D&&t.camera.frustum instanceof bn;if(t.mode===se.SCENE3D&&!b&&l(n)&&!o){let C=r.occludeePointInScaledSpace;return!l(C)||n.ellipsoid.isScaledSpacePointVisiblePossiblyUnderEllipsoid(C,s.minimumHeight)?A:vr.NONE}return A};Lr.prototype.canRefine=function(e){return l(e.data.terrainData)?!0:this.terrainProvider.getTileDataAvailable(e.x*2,e.y*2,e.level+1)!==void 0};var oyt=[],ryt=[];Lr.prototype.canRenderWithoutLosingDetail=function(e,t){let n=e.data,i=oyt;i.length=this._imageryLayers.length;let o=!1,r=!1,s;l(n)&&(o=n.terrainState===Wo.READY,r=!0,s=n.imagery);let a,c;for(a=0,c=i.length;a<c;++a)i[a]=r;if(l(s))for(a=0,c=s.length;a<c;++a){let h=s[a],p=h.loadingImagery,A=!l(p)||p.state===Qn.FAILED||p.state===Qn.INVALID,f=(h.loadingImagery||h.readyImagery).imageryLayer._layerIndex;i[f]=A&&i[f]}let d=this.quadtree._lastSelectionFrameNumber,u=ryt;for(u.length=0,u.push(e.southwestChild,e.southeastChild,e.northwestChild,e.northeastChild);u.length>0;){let h=u.pop(),p=h._lastSelectionResultFrame===d?h._lastSelectionResult:ui.NONE;if(p===ui.RENDERED){let A=h.data;if(!l(A))continue;if(!o&&h.data.terrainState===Wo.READY)return!1;let f=h.data.imagery;for(a=0,c=f.length;a<c;++a){let b=f[a],C=b.loadingImagery,T=!l(C)||C.state===Qn.FAILED||C.state===Qn.INVALID,E=(b.loadingImagery||b.readyImagery).imageryLayer._layerIndex;if(T&&!i[E])return!1}}else p===ui.REFINED&&u.push(h.southwestChild,h.southeastChild,h.northwestChild,h.northeastChild)}return!0};var syt=new m;Lr.prototype.computeTileLoadPriority=function(e,t){let n=e.data;if(n===void 0)return 0;let i=n.tileBoundingRegion.boundingVolume;if(i===void 0)return 0;let o=t.camera.positionWC,r=t.camera.directionWC,s=m.subtract(i.center,o,syt),a=m.magnitude(s);return a<L.EPSILON5?0:(m.divideByScalar(s,a,s),(1-m.dot(s,r))*e._distance)};var r_e=new F,mO=new F,ayt=new re,cyt=new re,lyt=new re,dyt=new m,s_e=new m,uyt=new m,myt=new m;Lr.prototype.showTileThisFrame=function(e,t){let n=0,i=e.data.imagery;for(let a=0,c=i.length;a<c;++a){let d=i[a];l(d.readyImagery)&&d.readyImagery.imageryLayer.alpha!==0&&++n}let o=this._tilesToRenderByTextureCount[n];l(o)||(o=[],this._tilesToRenderByTextureCount[n]=o),o.push(e);let r=e.data;l(r.vertexArray)?this._hasLoadedTilesThisFrame=!0:this._hasFillTilesThisFrame=!0;let s=this._debug;++s.tilesRendered,s.texturesRendered+=n};var hyt=[new m,new m,new m,new m];function a_e(e,t,n,i,o,r){let s=e.quadtree._occluders.ellipsoid,a=s.ellipsoid,c=hyt;return m.fromRadians(n.west,n.south,o,a,c[0]),m.fromRadians(n.east,n.south,o,a,c[1]),m.fromRadians(n.west,n.north,o,a,c[2]),m.fromRadians(n.east,n.north,o,a,c[3]),s.computeHorizonCullingPointPossiblyUnderEllipsoid(t,c,i,r)}Lr.prototype.computeDistanceToTile=function(e,t){fyt(e,this,t);let n=e.data;if(n.boundingVolumeSourceTile===void 0)return 9999999999;let o=n.tileBoundingRegion,r=o.minimumHeight,s=o.maximumHeight;if(n.boundingVolumeSourceTile!==e){let c=t.camera.positionCartographic.height,d=Math.abs(c-r),u=Math.abs(c-s);d>u?(o.minimumHeight=r,o.maximumHeight=r):(o.minimumHeight=s,o.maximumHeight=s)}let a=o.distanceToCamera(t);return o.minimumHeight=r,o.maximumHeight=s,a};function fyt(e,t,n){let i=e.data;i===void 0&&(i=e.data=new ih);let o=e.tilingScheme.ellipsoid;i.tileBoundingRegion===void 0&&(i.tileBoundingRegion=new Tu({computeBoundingVolumes:!1,rectangle:e.rectangle,ellipsoid:o,minimumHeight:0,maximumHeight:0}));let r=i.tileBoundingRegion,s=r.minimumHeight,a=r.maximumHeight,c=!1,d=e,u=0,h=t.marsOptions?.flat;if(h&&h.enabled&&h.rectangles){for(let C=0;C<h.rectangles.length;C++)if(de.intersection(e.rectangle,h.rectangles[C])){u=h.rectangles[C]._flatHeight??h.heights[C];break}}let p=t.marsOptions?.uplift,A=0;if(p&&p.enabled&&p.height!==0&&p.rectangles){for(let C=0;C<p.rectangles.length;C++)if(de.intersection(r.rectangle,p.rectangles[C])){A=p.height;break}}let f=i.mesh,b=i.terrainData;if(f!==void 0&&f.minimumHeight!==void 0&&f.maximumHeight!==void 0)r.minimumHeight=f.minimumHeight,r.maximumHeight=f.maximumHeight,c=!0;else if(b!==void 0&&b._minimumHeight!==void 0&&b._maximumHeight!==void 0)r.minimumHeight=b._minimumHeight,r.maximumHeight=b._maximumHeight;else{r.minimumHeight=Number.NaN,r.maximumHeight=Number.NaN;let C=e.parent;for(;C!==void 0;){let T=C.data;if(T!==void 0){let E=T.mesh,S=T.terrainData;if(E!==void 0&&E.minimumHeight!==void 0&&E.maximumHeight!==void 0){r.minimumHeight=E.minimumHeight,r.maximumHeight=E.maximumHeight;break}else if(S!==void 0&&S._minimumHeight!==void 0&&S._maximumHeight!==void 0){r.minimumHeight=S._minimumHeight,r.maximumHeight=S._maximumHeight;break}}C=C.parent}d=C}if(r.maximumHeight+=A,r.minimumHeight-=u,d!==void 0){let C=n.verticalExaggeration,T=n.verticalExaggerationRelativeHeight;if((C!==1||u!==0)&&(c=!1,r.minimumHeight=Eo.getHeight(r.minimumHeight,C,T),r.maximumHeight=Eo.getHeight(r.maximumHeight,C,T)),c)i.boundingVolumeIsFromMesh||(r._orientedBoundingBox=nn.clone(f.orientedBoundingBox,r._orientedBoundingBox),r._boundingSphere=ue.clone(f.boundingSphere3D,r._boundingSphere),i.occludeePointInScaledSpace=m.clone(f.occludeePointInScaledSpace,i.occludeePointInScaledSpace),l(i.occludeePointInScaledSpace)||(i.occludeePointInScaledSpace=a_e(t,r._orientedBoundingBox.center,e.rectangle,r.minimumHeight,r.maximumHeight,i.occludeePointInScaledSpace)));else{let S=r._orientedBoundingBox===void 0||r._boundingSphere===void 0;(r.minimumHeight!==s||r.maximumHeight!==a||S)&&(r.computeBoundingVolumes(o),i.occludeePointInScaledSpace=a_e(t,r._orientedBoundingBox.center,e.rectangle,r.minimumHeight,r.maximumHeight,i.occludeePointInScaledSpace))}i.boundingVolumeSourceTile=d,i.boundingVolumeIsFromMesh=c}else i.boundingVolumeSourceTile=void 0,i.boundingVolumeIsFromMesh=!1}Lr.prototype.isDestroyed=function(){return!1};Lr.prototype.destroy=function(){return this._tileProvider=this._tileProvider&&this._tileProvider.destroy(),this._clippingPlanes=this._clippingPlanes&&this._clippingPlanes.destroy(),this._clippingPolygons=this._clippingPolygons&&this._clippingPolygons.destroy(),this._removeLayerAddedListener=this._removeLayerAddedListener&&this._removeLayerAddedListener(),this._removeLayerRemovedListener=this._removeLayerRemovedListener&&this._removeLayerRemovedListener(),this._removeLayerMovedListener=this._removeLayerMovedListener&&this._removeLayerMovedListener(),this._removeLayerShownListener=this._removeLayerShownListener&&this._removeLayerShownListener(),he(this)};function pyt(e,t,n){return function(i){let o,r,s=-1,a=i.data.imagery,c=a.length,d;for(d=0;d<c;++d)if(o=a[d],r=o.readyImagery??o.loadingImagery,r.imageryLayer===t){s=d;break}if(s!==-1){let u=s+e;if(o=a[u],r=l(o)?o.readyImagery??o.loadingImagery:void 0,!l(r)||r.imageryLayer!==t)return!t._createTileImagerySkeletons(i,n,u);for(d=s;d<u;++d)a[d].freeResources();a.splice(s,e)}return!0}}Lr.prototype._onLayerAdded=function(e,t){if(!this.isDestroyed()&&e.show){let n=this._terrainProvider,i=this,o=this._imageryLayersUpdatedEvent,r=function(){e._imageryCache={},i._quadtree.forEachLoadedTile(function(s){if(l(s._loadedCallbacks[e._layerIndex]))return;let a,c=s.data.imagery,d=c.length,u=-1,h=0;for(a=0;a<d;++a){let A=c[a];if((A.readyImagery??A.loadingImagery).imageryLayer===e)u===-1&&(u=a),++h;else if(u!==-1)break}if(u===-1)return;let p=u+h;e._createTileImagerySkeletons(s,n,p)&&(s._loadedCallbacks[e._layerIndex]=pyt(h,e,n),s.state=Qa.LOADING)})};if(e.ready){let s=e.imageryProvider;s._reload=r}this._quadtree.forEachLoadedTile(function(s){e._createTileImagerySkeletons(s,n)&&(s.state=Qa.LOADING,s.level!==0&&(s._lastSelectionResultFrame!==i.quadtree._lastSelectionFrameNumber||s._lastSelectionResult!==ui.RENDERED)&&(s.renderable=!1))}),this._layerOrderChanged=!0,o.raiseEvent()}};Lr.prototype._onLayerRemoved=function(e,t){this._quadtree.forEachLoadedTile(function(n){let i=n.data.imagery,o=-1,r=0;for(let s=0,a=i.length;s<a;++s){let c=i[s],d=c.loadingImagery;if(l(d)||(d=c.readyImagery),d.imageryLayer===e)o===-1&&(o=s),c.freeResources(),++r;else if(o!==-1)break}o!==-1&&i.splice(o,r)}),l(e.imageryProvider)&&(e.imageryProvider._reload=void 0),this._imageryLayersUpdatedEvent.raiseEvent()};Lr.prototype._onLayerMoved=function(e,t,n){this._layerOrderChanged=!0,this._imageryLayersUpdatedEvent.raiseEvent()};Lr.prototype._onLayerShownOrHidden=function(e,t,n){n?this._onLayerAdded(e,t):this._onLayerRemoved(e,t)};var Ayt=new F,gyt=new F;function c_e(e,t){let n={u_initialColor:function(){return this.properties.initialColor},u_fillHighlightColor:function(){return this.properties.fillHighlightColor},u_zoomedOutOceanSpecularIntensity:function(){return this.properties.zoomedOutOceanSpecularIntensity},u_oceanNormalMap:function(){return this.properties.oceanNormalMap},u_atmosphereLightIntensity:function(){return this.properties.atmosphereLightIntensity},u_atmosphereRayleighCoefficient:function(){return this.properties.atmosphereRayleighCoefficient},u_atmosphereMieCoefficient:function(){return this.properties.atmosphereMieCoefficient},u_atmosphereRayleighScaleHeight:function(){return this.properties.atmosphereRayleighScaleHeight},u_atmosphereMieScaleHeight:function(){return this.properties.atmosphereMieScaleHeight},u_atmosphereMieAnisotropy:function(){return this.properties.atmosphereMieAnisotropy},u_lightingFadeDistance:function(){return this.properties.lightingFadeDistance},u_nightFadeDistance:function(){return this.properties.nightFadeDistance},u_center3D:function(){return this.properties.center3D},u_verticalExaggerationAndRelativeHeight:function(){return this.properties.verticalExaggerationAndRelativeHeight},u_tileRectangle:function(){return this.properties.tileRectangle},u_modifiedModelView:function(){let i=e.context.uniformState.view,o=F.multiplyByPoint(i,this.properties.rtc,s_e);return F.setTranslation(i,o,r_e),r_e},u_modifiedModelViewProjection:function(){let i=e.context.uniformState.view,o=e.context.uniformState.projection,r=F.multiplyByPoint(i,this.properties.rtc,s_e);return F.setTranslation(i,r,mO),F.multiply(o,mO,mO),mO},u_dayTextures:function(){return this.properties.dayTextures},u_dayTextureTranslationAndScale:function(){return this.properties.dayTextureTranslationAndScale},u_dayTextureTexCoordsRectangle:function(){return this.properties.dayTextureTexCoordsRectangle},u_dayTextureUseWebMercatorT:function(){return this.properties.dayTextureUseWebMercatorT},u_dayTextureAlpha:function(){return this.properties.dayTextureAlpha},u_dayTextureNightAlpha:function(){return this.properties.dayTextureNightAlpha},u_dayTextureDayAlpha:function(){return this.properties.dayTextureDayAlpha},u_dayTextureBrightness:function(){return this.properties.dayTextureBrightness},u_dayTextureContrast:function(){return this.properties.dayTextureContrast},u_dayTextureHue:function(){return this.properties.dayTextureHue},u_dayTextureSaturation:function(){return this.properties.dayTextureSaturation},u_dayTextureOneOverGamma:function(){return this.properties.dayTextureOneOverGamma},u_dayIntensity:function(){return this.properties.dayIntensity},u_southAndNorthLatitude:function(){return this.properties.southAndNorthLatitude},u_southMercatorYAndOneOverHeight:function(){return this.properties.southMercatorYAndOneOverHeight},u_waterMask:function(){return this.properties.waterMask},u_waterMaskTranslationAndScale:function(){return this.properties.waterMaskTranslationAndScale},u_minMaxHeight:function(){return this.properties.minMaxHeight},u_scaleAndBias:function(){return this.properties.scaleAndBias},u_dayTextureSplit:function(){return this.properties.dayTextureSplit},u_dayTextureCutoutRectangles:function(){return this.properties.dayTextureCutoutRectangles},u_clippingPlanes:function(){let i=t._clippingPlanes;return l(i)&&l(i.texture)?i.texture:e.context.defaultTexture},u_cartographicLimitRectangle:function(){return this.properties.localizedCartographicLimitRectangle},u_clippingPlanesMatrix:function(){let i=t._clippingPlanes,o=l(i)?F.multiply(e.context.uniformState.view,i.modelMatrix,Ayt):F.IDENTITY;return F.inverseTranspose(o,gyt)},u_clippingPlanesEdgeStyle:function(){let i=this.properties.clippingPlanesEdgeColor;return i.alpha=this.properties.clippingPlanesEdgeWidth,i},u_clippingDistance:function(){let i=t._clippingPolygons.clippingTexture;return l(i)?i:e.context.defaultTexture},u_clippingExtents:function(){let i=t._clippingPolygons.extentsTexture;return l(i)?i:e.context.defaultTexture},u_minimumBrightness:function(){return e.fog.minimumBrightness},u_hsbShift:function(){return this.properties.hsbShift},u_colorsToAlpha:function(){return this.properties.colorsToAlpha},u_frontFaceAlphaByDistance:function(){return this.properties.frontFaceAlphaByDistance},u_backFaceAlphaByDistance:function(){return this.properties.backFaceAlphaByDistance},u_translucencyRectangle:function(){return this.properties.localizedTranslucencyRectangle},u_undergroundColor:function(){return this.properties.undergroundColor},u_undergroundColorAlphaByDistance:function(){return this.properties.undergroundColorAlphaByDistance},u_lambertDiffuseMultiplier:function(){return this.properties.lambertDiffuseMultiplier},u_vertexShadowDarkness:function(){return this.properties.vertexShadowDarkness},u_mars3dTextureInvertColor:function(){return this.properties.mars3dTextureInvertColor},u_mars3dTextureFilterColor:function(){return this.properties.mars3dTextureFilterColor},u_mars_inverseTileWidth:function(){return this.properties.mars_inverseTileWidth},u_mars_cartographicTileRectangle:function(){return this.properties.mars_cartographicTileRectangle},u_mars_flat_enabled:function(){return this.properties.mars_flat_enabled},u_mars_flat_rectangle:function(){return this.properties.mars_flat_rectangle},u_mars_flat_texture:function(){return l(this.properties.mars_flat_texture)?this.properties.mars_flat_texture:e.context.defaultTexture},u_mars_uplift_enabled:function(){return this.properties.mars_uplift_enabled},u_mars_uplift_hideInsideOrOutside:function(){return this.properties.mars_uplift_hideInsideOrOutside},u_mars_uplift_rectangle:function(){return this.properties.mars_uplift_rectangle},u_mars_uplift_texture:function(){return l(this.properties.mars_uplift_texture)?this.properties.mars_uplift_texture:e.context.defaultTexture},u_mars_clip_enabled:function(){return this.properties.mars_clip_enabled},u_mars_clip_rectangle:function(){return this.properties.mars_clip_rectangle},u_mars_clip_texture:function(){return l(this.properties.mars_clip_texture)?this.properties.mars_clip_texture:e.context.defaultTexture},u_mars_clip_only:function(){return this.properties.mars_clip_only},u_mars_flood_enabled:function(){return this.properties.mars_flood_enabled},u_mars_flood_rectangle:function(){return this.properties.mars_flood_rectangle},u_mars_flood_texture:function(){return l(this.properties.mars_flood_texture)?this.properties.mars_flood_texture:e.context.defaultTexture},u_mars_flood_only:function(){return this.properties.mars_flood_only},properties:{initialColor:new re(0,0,.5,1),fillHighlightColor:new U(0,0,0,0),zoomedOutOceanSpecularIntensity:.5,oceanNormalMap:void 0,lightingFadeDistance:new M(65e5,9e6),nightFadeDistance:new M(1e7,4e7),atmosphereLightIntensity:10,atmosphereRayleighCoefficient:new m(55e-7,13e-6,284e-7),atmosphereMieCoefficient:new m(21e-6,21e-6,21e-6),atmosphereRayleighScaleHeight:1e4,atmosphereMieScaleHeight:3200,atmosphereMieAnisotropy:.9,hsbShift:new m,center3D:void 0,rtc:new m,modifiedModelView:new F,tileRectangle:new re,verticalExaggerationAndRelativeHeight:new M(1,0),dayTextures:[],dayTextureTranslationAndScale:[],dayTextureTexCoordsRectangle:[],dayTextureUseWebMercatorT:[],dayTextureAlpha:[],dayTextureNightAlpha:[],dayTextureDayAlpha:[],dayTextureBrightness:[],dayTextureContrast:[],dayTextureHue:[],dayTextureSaturation:[],dayTextureOneOverGamma:[],dayTextureSplit:[],dayTextureCutoutRectangles:[],dayIntensity:0,colorsToAlpha:[],southAndNorthLatitude:new M,southMercatorYAndOneOverHeight:new M,waterMask:void 0,waterMaskTranslationAndScale:new re,minMaxHeight:new M,scaleAndBias:new F,clippingPlanesEdgeColor:U.clone(U.WHITE),clippingPlanesEdgeWidth:0,localizedCartographicLimitRectangle:new re,frontFaceAlphaByDistance:new re,backFaceAlphaByDistance:new re,localizedTranslucencyRectangle:new re,undergroundColor:U.clone(U.TRANSPARENT),undergroundColorAlphaByDistance:new re,lambertDiffuseMultiplier:0,vertexShadowDarkness:0,mars3dTextureInvertColor:[],mars3dTextureFilterColor:[],mars_inverseTileWidth:0,mars_cartographicTileRectangle:void 0,mars_flat_enabled:!1,mars_flat_rectangle:new re,mars_flat_texture:void 0,mars_uplift_enabled:!1,mars_uplift_hideInsideOrOutside:!1,mars_uplift_rectangle:new re,mars_uplift_texture:void 0,mars_clip_enabled:!1,mars_clip_rectangle:new re,mars_clip_texture:void 0,mars_clip_only:!1,mars_flood_enabled:!1,mars_flood_rectangle:new re,mars_flood_texture:void 0,mars_flood_only:!1}};return l(t.materialUniformMap)?Ft(n,t.materialUniformMap):n}function byt(e,t,n){let i=n.data,o,r;if(l(i.vertexArray)?(o=i.mesh,r=i.vertexArray):l(i.fill)&&l(i.fill.vertexArray)&&(o=i.fill.mesh,r=i.fill.vertexArray),!(!l(o)||!l(r))){if(l(i.wireframeVertexArray)){if(i.wireframeVertexArray.mesh===o)return;i.wireframeVertexArray.destroy(),i.wireframeVertexArray=void 0}i.wireframeVertexArray=yyt(e,r,o),i.wireframeVertexArray.mesh=o}}function yyt(e,t,n){let o={indices:n.indices,primitiveType:We.TRIANGLES};zn.toWireframe(o);let r=o.indices,s=it.createIndexBuffer({context:e,typedArray:r,usage:Be.STATIC_DRAW,indexDatatype:Ue.fromSizeInBytes(r.BYTES_PER_ELEMENT)});return new kn({context:e,attributes:t._attributes,indexBuffer:s})}var h_e,f_e,fO;(function(){let e=new wt({geometry:Rh.fromDimensions({dimensions:new m(2,2,2)})}),t=new wt({geometry:new Yg({radius:1})}),n=new F,i,o;function r(s){return new Nn({geometryInstances:s,appearance:new yn({translucent:!1,flat:!0}),asynchronous:!1})}h_e=function(s,a){return s===i||(fO(),i=s,n=F.fromRotationTranslation(s.halfAxes,s.center,n),e.modelMatrix=n,e.attributes.color=$t.fromColor(a),o=r(e)),o},f_e=function(s,a){return s===i||(fO(),i=s,n=F.fromTranslation(s.center,n),n=F.multiplyByUniformScale(n,s.radius,n),t.modelMatrix=n,t.attributes.color=$t.fromColor(a),o=r(t)),o},fO=function(){l(o)&&(o.destroy(),o=void 0,i=void 0)}})();var xyt=new re(0,0,0,0),Cyt={frameState:void 0,surfaceTile:void 0,numberOfDayTextures:void 0,applyBrightness:void 0,applyContrast:void 0,applyHue:void 0,applySaturation:void 0,applyGamma:void 0,applyAlpha:void 0,applyDayNightAlpha:void 0,applySplit:void 0,showReflectiveOcean:void 0,showOceanWaves:void 0,enableLighting:void 0,dynamicAtmosphereLighting:void 0,dynamicAtmosphereLightingFromSun:void 0,showGroundAtmosphere:void 0,perFragmentGroundAtmosphere:void 0,hasVertexNormals:void 0,useWebMercatorProjection:void 0,enableFog:void 0,enableClippingPlanes:void 0,clippingPlanes:void 0,enableClippingPolygons:void 0,clippingPolygons:void 0,clippedByBoundaries:void 0,hasImageryLayerCutout:void 0,colorCorrect:void 0,colorToAlpha:void 0,hasGeodeticSurfaceNormals:void 0,hasExaggeration:void 0},Tyt=U.TRANSPARENT,Eyt=new Ot;function l_e(e,t,n,i){let o=t.data;l(o.vertexArray)||(o.fill===void 0&&(o.fill=new kZ(t)),o.fill.update(e,n));let r=n.creditDisplay,s=o.terrainData;if(l(s)&&l(s.credits)){let At=s.credits;for(let kt=0,On=At.length;kt<On;++kt)r.addCreditToNextFrame(At[kt])}let a=Bt.maximumTextureImageUnits,c=o.waterMaskTexture,d=o.waterMaskTranslationAndScale;!l(c)&&l(o.fill)&&(c=o.fill.waterMaskTexture,d=o.fill.waterMaskTranslationAndScale);let u=n.cameraUnderground,h=n.globeTranslucencyState,p=h.translucent,A=h.frontFaceAlphaByDistance,f=h.backFaceAlphaByDistance,b=h.rectangle,C=e.undergroundColor??Tyt,T=e.undergroundColorAlphaByDistance??Eyt,E=m_e(e,n)&&n.mode===se.SCENE3D&&C.alpha>0&&(T.nearValue>0||T.farValue>0),S=e.lambertDiffuseMultiplier,I=e.vertexShadowDarkness,R=e.hasWaterMask&&l(c),V=R&&e.showWaterEffect,W=e.oceanNormalMap,B=V&&l(W),N=e.terrainProvider,P=l(N)&&e.terrainProvider.hasVertexNormals,g=n.fog.enabled&&n.fog.renderable&&!u,_=e.showGroundAtmosphere&&n.mode===se.SCENE3D,Z=Vn.castShadows(e.shadows)&&!p,G=Vn.receiveShadows(e.shadows)&&!p,w=e.hueShift,X=e.saturationShift,k=e.brightnessShift,v=!(L.equalsEpsilon(w,0,L.EPSILON7)&&L.equalsEpsilon(X,0,L.EPSILON7)&&L.equalsEpsilon(k,0,L.EPSILON7)),D=!1;if(_){let At=m.magnitude(n.camera.positionWC),kt=e.nightFadeOutDistance;D=At>kt}R&&--a,B&&--a,l(n.shadowState)&&n.shadowState.shadowsEnabled&&--a,l(e.clippingPlanes)&&e.clippingPlanes.enabled&&--a,l(e.clippingPolygons)&&e.clippingPolygons.enabled&&(--a,--a),a-=h.numberOfTextureUniforms;let Y=o.renderedMesh,O=Y.center,J=Y.encoding,te=o.tileBoundingRegion,z=n.verticalExaggeration,j=n.verticalExaggerationRelativeHeight,ee=e.marsOptions?.uplift;i&&ee&&(j=n.verticalExaggerationRelativeHeight-ee.height/(z-1)),e.marsOptions?.uplift?.enabled&&--a,e.marsOptions?.clip?.enabled&&--a,e.marsOptions?.flat?.enabled&&--a,e.marsOptions?.flood?.enabled&&--a;let ge=z!==1,ye=J.hasGeodeticSurfaceNormals,ae=ayt,Ce=0,Te=0,Fe=0,Ne=0,Pe=!1;if(n.mode!==se.SCENE3D){let At=n.mapProjection,kt=At.project(de.southwest(t.rectangle),uyt),On=At.project(de.northeast(t.rectangle),myt);if(ae.x=kt.x,ae.y=kt.y,ae.z=On.x,ae.w=On.y,n.mode!==se.MORPHING&&(O=dyt,O.x=0,O.y=(ae.z+ae.x)*.5,O.z=(ae.w+ae.y)*.5,ae.x-=O.y,ae.y-=O.z,ae.z-=O.y,ae.w-=O.z),n.mode===se.SCENE2D&&J.quantization===Da.BITS12){let $e=1/(Math.pow(2,12)-1)*.5,uo=(ae.z-ae.x)*$e,Qt=(ae.w-ae.y)*$e;ae.x-=uo,ae.y-=Qt,ae.z+=uo,ae.w+=Qt}At instanceof pi&&(Ce=t.rectangle.south,Te=t.rectangle.north,Fe=pi.geodeticLatitudeToMercatorAngle(Ce),Ne=1/(pi.geodeticLatitudeToMercatorAngle(Te)-Fe),Pe=!0)}let Xe=Cyt;Xe.frameState=n,Xe.surfaceTile=o,Xe.hasWaterMask=R,Xe.showReflectiveOcean=V,Xe.showOceanWaves=B,Xe.enableLighting=e.enableLighting,Xe.dynamicAtmosphereLighting=e.dynamicAtmosphereLighting,Xe.dynamicAtmosphereLightingFromSun=e.dynamicAtmosphereLightingFromSun,Xe.showGroundAtmosphere=_,Xe.atmosphereLightIntensity=e.atmosphereLightIntensity,Xe.atmosphereRayleighCoefficient=e.atmosphereRayleighCoefficient,Xe.atmosphereMieCoefficient=e.atmosphereMieCoefficient,Xe.atmosphereRayleighScaleHeight=e.atmosphereRayleighScaleHeight,Xe.atmosphereMieScaleHeight=e.atmosphereMieScaleHeight,Xe.atmosphereMieAnisotropy=e.atmosphereMieAnisotropy,Xe.perFragmentGroundAtmosphere=D,Xe.hasVertexNormals=P,Xe.useWebMercatorProjection=Pe,Xe.clippedByBoundaries=o.clippedByBoundaries,Xe.hasGeodeticSurfaceNormals=ye,Xe.hasExaggeration=ge;let st=o.imagery,Ye=0,xt=st.length,at=e.showSkirts&&!u&&!p,Je=e.backFaceCulling&&!u&&!p,lt=Je?e._renderState:e._disableCullingRenderState,ht=Je?e._blendRenderState:e._disableCullingBlendRenderState,Rt=lt,_e=e._firstPassInitialColor,Re=n.context;if(l(e._debug.boundingSphereTile)||fO(),e._materialUniformMap!==e.materialUniformMap){e._materialUniformMap=e.materialUniformMap;let At=e._drawCommands.length;for(let kt=0;kt<At;++kt)e._uniformMaps[kt]=c_e(n,e)}do{let At=0,kt,On;if(e._drawCommands.length<=e._usedDrawCommands?(kt=new ot,kt.owner=t,kt.cull=!1,kt.boundingVolume=new ue,kt.orientedBoundingBox=void 0,On=c_e(n,e),e._drawCommands.push(kt),e._uniformMaps.push(On)):(kt=e._drawCommands[e._usedDrawCommands],On=e._uniformMaps[e._usedDrawCommands]),kt.owner=t,++e._usedDrawCommands,t===e._debug.boundingSphereTile){let sa=te.boundingVolume,sn=te.boundingSphere;l(sa)?h_e(sa,U.RED).update(n):l(sn)&&f_e(sn,U.RED).update(n)}let $e=On.properties;re.clone(_e,$e.initialColor),$e.oceanNormalMap=W,$e.lightingFadeDistance.x=e.lightingFadeOutDistance,$e.lightingFadeDistance.y=e.lightingFadeInDistance,$e.nightFadeDistance.x=e.nightFadeOutDistance,$e.nightFadeDistance.y=e.nightFadeInDistance,$e.atmosphereLightIntensity=e.atmosphereLightIntensity,$e.atmosphereRayleighCoefficient=e.atmosphereRayleighCoefficient,$e.atmosphereMieCoefficient=e.atmosphereMieCoefficient,$e.atmosphereRayleighScaleHeight=e.atmosphereRayleighScaleHeight,$e.atmosphereMieScaleHeight=e.atmosphereMieScaleHeight,$e.atmosphereMieAnisotropy=e.atmosphereMieAnisotropy,$e.zoomedOutOceanSpecularIntensity=e.zoomedOutOceanSpecularIntensity;let uo=u?f:A,Qt=u?A:f;l(uo)&&(re.fromElements(uo.near,uo.nearValue,uo.far,uo.farValue,$e.frontFaceAlphaByDistance),re.fromElements(Qt.near,Qt.nearValue,Qt.far,Qt.farValue,$e.backFaceAlphaByDistance)),re.fromElements(T.near,T.nearValue,T.far,T.farValue,$e.undergroundColorAlphaByDistance),U.clone(C,$e.undergroundColor),$e.lambertDiffuseMultiplier=S,$e.vertexShadowDarkness=I;let Bo=!l(o.vertexArray)&&l(e.fillHighlightColor)&&e.fillHighlightColor.alpha>0;Bo&&U.clone(e.fillHighlightColor,$e.fillHighlightColor),$e.verticalExaggerationAndRelativeHeight.x=z,$e.verticalExaggerationAndRelativeHeight.y=j,$e.center3D=Y.center,m.clone(O,$e.rtc),re.clone(ae,$e.tileRectangle),$e.southAndNorthLatitude.x=Ce,$e.southAndNorthLatitude.y=Te,$e.southMercatorYAndOneOverHeight.x=Fe,$e.southMercatorYAndOneOverHeight.y=Ne;let no=cyt,Yi=hO(t.rectangle,e.cartographicLimitRectangle),Oo=lyt,ai=hO(t.rectangle,b);m.fromElements(w,X,k,$e.hsbShift);let jn=t.rectangle,io=1/jn.width,wo=1/jn.height;no.x=(Yi.west-jn.west)*io,no.y=(Yi.south-jn.south)*wo,no.z=(Yi.east-jn.west)*io,no.w=(Yi.north-jn.south)*wo,re.clone(no,$e.localizedCartographicLimitRectangle),Oo.x=(ai.west-jn.west)*io,Oo.y=(ai.south-jn.south)*wo,Oo.z=(ai.east-jn.west)*io,Oo.w=(ai.north-jn.south)*wo,$e.mars_inverseTileWidth=io,$e.mars_cartographicTileRectangle=new M(jn.west,jn.south);let bo=e.marsOptions?.clip;bo?(bo.rectangle?$e.mars_clip_rectangle=new re(bo.rectangle.west,bo.rectangle.south,bo.rectangle.width,bo.rectangle.height):$e.mars_clip_rectangle=new re,$e.mars_clip_texture=bo.texture,$e.mars_clip_only=bo.onlySelf,$e.mars_clip_enabled=bo.enabled):($e.mars_clip_enabled=!1,$e.mars_clip_rectangle=new re,$e.mars_clip_texture=void 0,$e.mars_clip_only=!1);let nr=e.marsOptions?.flood;nr?(nr.rectangle?$e.mars_flood_rectangle=new re(nr.rectangle.west,nr.rectangle.south,nr.rectangle.width,nr.rectangle.height):$e.mars_flood_rectangle=new re,$e.mars_flood_texture=nr.texture,$e.mars_flood_only=nr.onlySelf,$e.mars_flood_enabled=nr.enabled):($e.mars_flood_enabled=!1,$e.mars_flood_rectangle=new re,$e.mars_flood_texture=void 0);let zo=e.marsOptions?.flat;zo?(zo.rectangle?$e.mars_flat_rectangle=new re(zo.rectangle.west,zo.rectangle.south,zo.rectangle.width,zo.rectangle.height):$e.mars_flat_rectangle=new re,$e.mars_flat_texture=zo.texture,$e.mars_flat_enabled=zo.enabled):($e.mars_flat_enabled=!1,$e.mars_flat_rectangle=new re,$e.mars_flat_texture=void 0);let Sn=e.marsOptions?.uplift;Sn?(Sn.rectangle?$e.mars_uplift_rectangle=new re(Sn.rectangle.west,Sn.rectangle.south,Sn.rectangle.width,Sn.rectangle.height):$e.mars_uplift_rectangle=new re,$e.mars_uplift_texture=Sn.texture,$e.mars_uplift_enabled=(!Sn.showUp||Sn.enabled&&Sn.height!==0)&&l(Sn.rectangles)&&Sn.rectangles.length>0,$e.mars_uplift_hideInsideOrOutside=!i):($e.mars_uplift_enabled=!1,$e.mars_uplift_rectangle=new re,$e.mars_uplift_texture=void 0,$e.mars_uplift_hideInsideOrOutside=!1),re.clone(Oo,$e.localizedTranslucencyRectangle);let Ri=g&&L.fog(t._distance,n.fog.density)>L.EPSILON3;v=v&&(Ri||_);let Pn=!1,Ho=!1,Jo=!1,oa=!1,Di=!1,Ro=!1,Ca=!1,Ss=!1,Wr=!1,Ta=!1,zd=!1,Hd=!1;for(;At<a&&Ye<xt;){let sa=st[Ye],sn=sa.readyImagery;if(++Ye,!l(sn)||sn.imageryLayer.alpha===0)continue;let Ve=sa.useWebMercatorT?sn.textureWebMercator:sn.texture,ut=sn.imageryLayer;l(sa.textureTranslationAndScale)||(sa.textureTranslationAndScale=ut._calculateTextureTranslationAndScale(t,sa)),$e.dayTextures[At]=Ve,$e.dayTextureTranslationAndScale[At]=sa.textureTranslationAndScale,$e.dayTextureTexCoordsRectangle[At]=sa.textureCoordinateRectangle,$e.dayTextureUseWebMercatorT[At]=sa.useWebMercatorT,$e.dayTextureAlpha[At]=ut.alpha,Ro=Ro||$e.dayTextureAlpha[At]!==1,$e.dayTextureNightAlpha[At]=ut.nightAlpha,Ca=Ca||$e.dayTextureNightAlpha[At]!==1,$e.dayTextureDayAlpha[At]=ut.dayAlpha,Ca=Ca||$e.dayTextureDayAlpha[At]!==1,$e.dayTextureBrightness[At]=ut.brightness,Pn=Pn||$e.dayTextureBrightness[At]!==fs.DEFAULT_BRIGHTNESS,$e.dayTextureContrast[At]=ut.contrast,Ho=Ho||$e.dayTextureContrast[At]!==fs.DEFAULT_CONTRAST,$e.dayTextureHue[At]=ut.hue,Jo=Jo||$e.dayTextureHue[At]!==fs.DEFAULT_HUE,$e.dayTextureSaturation[At]=ut.saturation,oa=oa||$e.dayTextureSaturation[At]!==fs.DEFAULT_SATURATION,$e.dayTextureOneOverGamma[At]=1/ut.gamma,Di=Di||$e.dayTextureOneOverGamma[At]!==1/fs.DEFAULT_GAMMA,$e.dayTextureSplit[At]=ut.splitDirection,Ss=Ss||$e.dayTextureSplit[At]!==0,zd=zd||!!ut.invertColor,$e.mars3dTextureInvertColor[At]=!!ut.invertColor,Hd=Hd||!!ut.filterColor,ut.filterColor?$e.mars3dTextureFilterColor[At]=new m(ut.filterColor.red,ut.filterColor.green,ut.filterColor.blue):$e.mars3dTextureFilterColor[At]=new m(1,1,1);let cn=$e.dayTextureCutoutRectangles[At];if(l(cn)||(cn=$e.dayTextureCutoutRectangles[At]=new re),re.clone(re.ZERO,cn),l(ut.cutoutRectangle)){let mo=hO(jn,ut.cutoutRectangle),_s=de.simpleIntersection(mo,jn,u_e);Wr=l(_s)||Wr,cn.x=(mo.west-jn.west)*io,cn.y=(mo.south-jn.south)*wo,cn.z=(mo.east-jn.west)*io,cn.w=(mo.north-jn.south)*wo}let po=$e.colorsToAlpha[At];l(po)||(po=$e.colorsToAlpha[At]=new re);let vs=l(ut.colorToAlpha)&&ut.colorToAlphaThreshold>0;if(Ta=Ta||vs,vs){let mo=ut.colorToAlpha;po.x=mo.red,po.y=mo.green,po.z=mo.blue,po.w=ut.colorToAlphaThreshold}else po.w=-1;if(l(sn.credits)){let mo=sn.credits;for(let _s=0,pl=mo.length;_s<pl;++_s)r.addCreditToNextFrame(mo[_s])}++At}$e.dayTextures.length=At,$e.waterMask=c,re.clone(d,$e.waterMaskTranslationAndScale),$e.minMaxHeight.x=J.minimumHeight,$e.minMaxHeight.y=J.maximumHeight,F.clone(J.matrix,$e.scaleAndBias);let Jd=e._clippingPlanes,ph=l(Jd)&&Jd.enabled&&t.isClipped;ph&&($e.clippingPlanesEdgeColor=U.clone(Jd.edgeColor,$e.clippingPlanesEdgeColor),$e.clippingPlanesEdgeWidth=Jd.edgeWidth);let Ja=e._clippingPolygons,Nb=l(Ja)&&Ja.enabled&&t.isClipped;Xe.numberOfDayTextures=At,Xe.applyBrightness=Pn,Xe.applyContrast=Ho,Xe.applyHue=Jo,Xe.applySaturation=oa,Xe.applyGamma=Di,Xe.applyAlpha=Ro,Xe.applyDayNightAlpha=Ca,Xe.applySplit=Ss,Xe.enableFog=Ri,Xe.enableClippingPlanes=ph,Xe.clippingPlanes=Jd,Xe.enableClippingPolygons=Nb,Xe.clippingPolygons=Ja,Xe.hasImageryLayerCutout=Wr,Xe.colorCorrect=v,Xe.highlightFillTile=Bo,Xe.colorToAlpha=Ta,Xe.showUndergroundColor=E,Xe.translucent=p,Xe.marsOptions={invertColor:zd,filterColor:Hd,enableUplift:e?._marsOptions?.uplift?.enabled,enableFlat:e?._marsOptions?.flat?.enabled,enableClip:e?._marsOptions?.clip?.enabled,enableFlood:e?._marsOptions?.flood?.enabled};let zf=o.renderedMesh.indices.length;at||(zf=o.renderedMesh.indexCountWithoutSkirts),kt.shaderProgram=e._surfaceShaderSet.getShaderProgram(Xe),kt.castShadows=Z,kt.receiveShadows=G,kt.renderState=Rt,kt.primitiveType=We.TRIANGLES,kt.vertexArray=o.vertexArray||o.fill.vertexArray,kt.count=zf,kt.uniformMap=On,kt.pass=Ge.GLOBE,e._debug.wireframe&&(byt(Re,e,t),l(o.wireframeVertexArray)&&(kt.vertexArray=o.wireframeVertexArray,kt.primitiveType=We.LINES,kt.count=zf*2));let Cr=kt.boundingVolume,ra=kt.orientedBoundingBox;n.mode!==se.SCENE3D?(ue.fromRectangleWithHeights2D(t.rectangle,n.mapProjection,te.minimumHeight,te.maximumHeight,Cr),m.fromElements(Cr.center.z,Cr.center.x,Cr.center.y,Cr.center),n.mode===se.MORPHING&&(Cr=ue.union(te.boundingSphere,Cr,Cr))):(kt.boundingVolume=ue.clone(te.boundingSphere,Cr),kt.orientedBoundingBox=nn.clone(te.boundingVolume,ra)),kt.dirty=!0,p&&h.updateDerivedCommands(kt,n),d_e(kt,n),Rt=ht,_e=xyt}while(Ye<xt)}var uY=Lr;var G8i=y(x(),1);function p_e(){this._enabled=!1,this._frontFaceAlpha=1,this._frontFaceAlphaByDistance=void 0,this._backFaceAlpha=1,this._backFaceAlphaByDistance=void 0,this._rectangle=de.clone(de.MAX_VALUE)}Object.defineProperties(p_e.prototype,{enabled:{get:function(){return this._enabled},set:function(e){this._enabled=e}},frontFaceAlpha:{get:function(){return this._frontFaceAlpha},set:function(e){this._frontFaceAlpha=e}},frontFaceAlphaByDistance:{get:function(){return this._frontFaceAlphaByDistance},set:function(e){this._frontFaceAlphaByDistance=Ot.clone(e,this._frontFaceAlphaByDistance)}},backFaceAlpha:{get:function(){return this._backFaceAlpha},set:function(e){this._backFaceAlpha=e}},backFaceAlphaByDistance:{get:function(){return this._backFaceAlphaByDistance},set:function(e){this._backFaceAlphaByDistance=Ot.clone(e,this._backFaceAlphaByDistance)}},rectangle:{get:function(){return this._rectangle},set:function(e){l(e)||(e=de.clone(de.MAX_VALUE)),de.clone(e,this._rectangle)}}});var mY=p_e;var d7i=y(x(),1);var B8i=y(x(),1);function A_e(e){this._ellipsoid=new hf(e.ellipsoid,m.ZERO)}Object.defineProperties(A_e.prototype,{ellipsoid:{get:function(){return this._ellipsoid}}});var hY=A_e;var v8i=y(x(),1);var lee=class{constructor(t){this.maxSize=t,this.cache=new Map}get(t){if(!this.cache.has(t))return;let n=this.cache.get(t);return this.cache.delete(t),this.cache.set(t,n),n}set(t,n){if(this.cache.has(t))this.cache.delete(t);else if(this.cache.size>=this.maxSize){let i=this.cache.keys().next().value;this.cache.delete(i)}this.cache.set(t,n)}clear(){this.cache.clear()}},Syt=1e3;function Oa(e){this._tilingScheme=e.tilingScheme,this._x=e.x,this._y=e.y,this._level=e.level,this._parent=e.parent,this._rectangle=this._tilingScheme.tileXYToRectangle(this._x,this._y,this._level),this._southwestChild=void 0,this._southeastChild=void 0,this._northwestChild=void 0,this._northeastChild=void 0,this.replacementPrevious=void 0,this.replacementNext=void 0,this._distance=0,this._loadPriority=0,this._customData=new Set,this._customDataIterator=void 0,this._addedCustomData=[],this._removedCustomData=[],this._lastSelectionResult=ui.NONE,this._lastSelectionResultFrame=void 0,this._loadedCallbacks={},this._positionCache=new lee(Syt),this.state=Qa.START,this.renderable=!1,this.upsampledFromParent=!1,this.data=void 0}Oa.createLevelZeroTiles=function(e){let t=e.getNumberOfXTilesAtLevel(0),n=e.getNumberOfYTilesAtLevel(0),i=new Array(t*n),o=0;for(let r=0;r<n;++r)for(let s=0;s<t;++s)i[o++]=new Oa({tilingScheme:e,x:s,y:r,level:0});return i};var _yt=256;function Iyt(e,t,n,i){let o=n.width/_yt*i,r=Math.floor(e/o)*o,s=Math.floor(t/o)*o;return`${r.toFixed(10)},${s.toFixed(10)}`}Oa.prototype._getCacheKey=function(e,t){return Iyt(e.longitude,e.latitude,this._rectangle,t)};Oa.prototype.getPositionCacheEntry=function(e,t){return this._positionCache.get(this._getCacheKey(e,t))};Oa.prototype.setPositionCacheEntry=function(e,t,n){this._positionCache.set(this._getCacheKey(e,t),n)};Oa.prototype.clearPositionCache=function(){this._positionCache.size>0&&this._positionCache.clear()};Oa.prototype.updateCustomData=function(){let e=this._addedCustomData,t=this._removedCustomData;if(e.length===0&&t.length===0)return;let n=this.customData;for(let i=0;i<e.length;++i){let o=e[i];n.add(o),g_e(this,o.positionCartographic)._addedCustomData.push(o)}this._addedCustomData.length=0;for(let i=0;i<t.length;++i){let o=t[i];n.has(o)&&n.delete(o),g_e(this,o.positionCartographic)._removedCustomData.push(o)}this._removedCustomData.length=0};var Zyt=new Ae;function g_e(e,t){let n=e.northwestChild.rectangle,i=de.southeast(n,Zyt),o=t.longitude>=i.longitude?1:0;switch((t.latitude<i.latitude?1:0)*2+o){case 0:return e.northwestChild;case 1:return e.northeastChild;case 2:return e.southwestChild;default:return e.southeastChild}}Object.defineProperties(Oa.prototype,{tilingScheme:{get:function(){return this._tilingScheme}},x:{get:function(){return this._x}},y:{get:function(){return this._y}},level:{get:function(){return this._level}},parent:{get:function(){return this._parent}},rectangle:{get:function(){return this._rectangle}},children:{get:function(){return[this.northwestChild,this.northeastChild,this.southwestChild,this.southeastChild]}},southwestChild:{get:function(){return l(this._southwestChild)||(this._southwestChild=new Oa({tilingScheme:this.tilingScheme,x:this.x*2,y:this.y*2+1,level:this.level+1,parent:this})),this._southwestChild}},southeastChild:{get:function(){return l(this._southeastChild)||(this._southeastChild=new Oa({tilingScheme:this.tilingScheme,x:this.x*2+1,y:this.y*2+1,level:this.level+1,parent:this})),this._southeastChild}},northwestChild:{get:function(){return l(this._northwestChild)||(this._northwestChild=new Oa({tilingScheme:this.tilingScheme,x:this.x*2,y:this.y*2,level:this.level+1,parent:this})),this._northwestChild}},northeastChild:{get:function(){return l(this._northeastChild)||(this._northeastChild=new Oa({tilingScheme:this.tilingScheme,x:this.x*2+1,y:this.y*2,level:this.level+1,parent:this})),this._northeastChild}},customData:{get:function(){return this._customData}},needsLoading:{get:function(){return this.state<Qa.DONE}},eligibleForUnloading:{get:function(){let e=!0;return l(this.data)&&(e=this.data.eligibleForUnloading,l(e)||(e=!0)),e}}});Oa.prototype.findLevelZeroTile=function(e,t,n){let i=this.tilingScheme.getNumberOfXTilesAtLevel(0);if(t<0?t+=i:t>=i&&(t-=i),!(n<0||n>=this.tilingScheme.getNumberOfYTilesAtLevel(0)))return e.filter(function(o){return o.x===t&&o.y===n})[0]};Oa.prototype.findTileToWest=function(e){let t=this.parent;if(t===void 0)return this.findLevelZeroTile(e,this.x-1,this.y);if(t.southeastChild===this)return t.southwestChild;if(t.northeastChild===this)return t.northwestChild;let n=t.findTileToWest(e);if(n!==void 0)return t.southwestChild===this?n.southeastChild:n.northeastChild};Oa.prototype.findTileToEast=function(e){let t=this.parent;if(t===void 0)return this.findLevelZeroTile(e,this.x+1,this.y);if(t.southwestChild===this)return t.southeastChild;if(t.northwestChild===this)return t.northeastChild;let n=t.findTileToEast(e);if(n!==void 0)return t.southeastChild===this?n.southwestChild:n.northwestChild};Oa.prototype.findTileToSouth=function(e){let t=this.parent;if(t===void 0)return this.findLevelZeroTile(e,this.x,this.y+1);if(t.northwestChild===this)return t.southwestChild;if(t.northeastChild===this)return t.southeastChild;let n=t.findTileToSouth(e);if(n!==void 0)return t.southwestChild===this?n.northwestChild:n.northeastChild};Oa.prototype.findTileToNorth=function(e){let t=this.parent;if(t===void 0)return this.findLevelZeroTile(e,this.x,this.y-1);if(t.southwestChild===this)return t.northwestChild;if(t.southeastChild===this)return t.northeastChild;let n=t.findTileToNorth(e);if(n!==void 0)return t.northwestChild===this?n.southwestChild:n.southeastChild};Oa.prototype.freeResources=function(){this.clearPositionCache(),this.state=Qa.START,this.renderable=!1,this.upsampledFromParent=!1,l(this.data)&&l(this.data.freeResources)&&this.data.freeResources(),pO(this._southwestChild),this._southwestChild=void 0,pO(this._southeastChild),this._southeastChild=void 0,pO(this._northwestChild),this._northwestChild=void 0,pO(this._northeastChild),this._northeastChild=void 0};function pO(e){l(e)&&e.freeResources()}var fY=Oa;var k8i=y(x(),1);function AO(){this.head=void 0,this.tail=void 0,this.count=0,this._lastBeforeStartOfFrame=void 0}AO.prototype.markStartOfRenderFrame=function(){this._lastBeforeStartOfFrame=this.head};AO.prototype.trimTiles=function(e){let t=this.tail,n=!0;for(;n&&l(this._lastBeforeStartOfFrame)&&this.count>e&&l(t);){n=t!==this._lastBeforeStartOfFrame;let i=t.replacementPrevious;t.eligibleForUnloading&&(t.freeResources(),b_e(this,t)),t=i}};function b_e(e,t){let n=t.replacementPrevious,i=t.replacementNext;t===e._lastBeforeStartOfFrame&&(e._lastBeforeStartOfFrame=i),t===e.head?e.head=i:n.replacementNext=i,t===e.tail?e.tail=n:i.replacementPrevious=n,t.replacementPrevious=void 0,t.replacementNext=void 0,--e.count}AO.prototype.markTileRendered=function(e){let t=this.head;if(t===e){e===this._lastBeforeStartOfFrame&&(this._lastBeforeStartOfFrame=e.replacementNext);return}if(++this.count,!l(t)){e.replacementPrevious=void 0,e.replacementNext=void 0,this.head=e,this.tail=e;return}(l(e.replacementPrevious)||l(e.replacementNext))&&b_e(this,e),e.replacementPrevious=void 0,e.replacementNext=t,t.replacementPrevious=e,this.head=e};var pY=AO;function oh(e){this._tileProvider=e.tileProvider,this._tileProvider.quadtree=this,this._debug={enableDebugOutput:!1,maxDepth:0,maxDepthVisited:0,tilesVisited:0,tilesCulled:0,tilesRendered:0,tilesWaitingForChildren:0,lastMaxDepth:-1,lastMaxDepthVisited:-1,lastTilesVisited:-1,lastTilesCulled:-1,lastTilesRendered:-1,lastTilesWaitingForChildren:-1,suspendLodUpdate:!1};let n=this._tileProvider.tilingScheme.ellipsoid;this._tilesRenderedThisFrame=new Set,this._tilesToRender=[],this._tileLoadQueueHigh=[],this._tileLoadQueueMedium=[],this._tileLoadQueueLow=[],this._tileReplacementQueue=new pY,this._levelZeroTiles=void 0,this._loadQueueTimeSlice=5,this._tilesInvalidated=!1,this._addHeightCallbacks=[],this._removeHeightCallbacks=[],this._tileToUpdateHeights=[],this._updateHeightsTimeSlice=2,this._cameraPositionCartographic=void 0,this._cameraReferenceFrameOriginCartographic=void 0,this.maximumScreenSpaceError=e.maximumScreenSpaceError??2,this.tileCacheSize=e.tileCacheSize??100,this.loadingDescendantLimit=20,this.preloadAncestors=!0,this.preloadSiblings=!1,this._occluders=new hY({ellipsoid:n}),this._tileLoadProgressEvent=new xe,this._lastTileLoadQueueLength=0,this._lastSelectionFrameNumber=void 0}Object.defineProperties(oh.prototype,{tileProvider:{get:function(){return this._tileProvider}},tileLoadProgressEvent:{get:function(){return this._tileLoadProgressEvent}},occluders:{get:function(){return this._occluders}}});oh.prototype.invalidateAllTiles=function(){this._tilesInvalidated=!0};function Ryt(e){let t=e._tileReplacementQueue;t.head=void 0,t.tail=void 0,t.count=0,x_e(e);let n=e._levelZeroTiles;if(l(n))for(let i=0;i<n.length;++i){let r=n[i].customData;for(let s of r)s.level=0,e._addHeightCallbacks.push(s);n[i].freeResources()}e._levelZeroTiles=void 0,e._tileProvider.cancelReprojections()}oh.prototype.forEachLoadedTile=function(e){let t=this._tileReplacementQueue.head;for(;l(t);)t.state!==Qa.START&&e(t),t=t.replacementNext};oh.prototype.forEachRenderedTile=function(e){let t=this._tilesRenderedThisFrame;for(let n of t)e(n)};oh.prototype.updateHeight=function(e,t){let n=this,i={positionOnEllipsoidSurface:void 0,positionCartographic:e,level:-1,callback:t};return i.removeFunc=function(){let o=n._addHeightCallbacks,r=o.length;for(let s=0;s<r;++s)if(o[s]===i){o.splice(s,1);break}n._removeHeightCallbacks.push(i),i.callback&&(i.callback=void 0)},n._addHeightCallbacks.push(i),i.removeFunc};oh.prototype.update=function(e){l(this._tileProvider.update)&&this._tileProvider.update(e)};function x_e(e){let t=e._debug;t.maxDepth=0,t.maxDepthVisited=0,t.tilesVisited=0,t.tilesCulled=0,t.tilesRendered=0,t.tilesWaitingForChildren=0,e._tileLoadQueueHigh.length=0,e._tileLoadQueueMedium.length=0,e._tileLoadQueueLow.length=0}oh.prototype.beginFrame=function(e){e.passes.render&&(this._tilesInvalidated&&(Ryt(this),this._tilesInvalidated=!1),this._tileProvider.initialize(e),x_e(this),!this._debug.suspendLodUpdate&&(this._tileReplacementQueue.markStartOfRenderFrame(),this._tilesRenderedThisFrame.clear()))};oh.prototype.render=function(e){let t=e.passes,n=this._tileProvider;t.render&&(n.beginUpdate(e),Wyt(this,e),Uyt(this,e),n.endUpdate(e)),t.pick&&this._tilesToRender.length>0&&n.updateForPick(e)};function Vyt(e,t){let n=e._tileLoadQueueHigh.length+e._tileLoadQueueMedium.length+e._tileLoadQueueLow.length;if(n!==e._lastTileLoadQueueLength||e._tilesInvalidated){let o=xe.prototype.raiseEvent.bind(e._tileLoadProgressEvent,n);t.afterRender.push(()=>(o(),!0)),e._lastTileLoadQueueLength=n}let i=e._debug;i.enableDebugOutput&&!i.suspendLodUpdate&&(i.maxDepth=e._tilesToRender.reduce(function(o,r){return Math.max(o,r.level)},-1),i.tilesRendered=e._tilesToRender.length,(i.tilesVisited!==i.lastTilesVisited||i.tilesRendered!==i.lastTilesRendered||i.tilesCulled!==i.lastTilesCulled||i.maxDepth!==i.lastMaxDepth||i.tilesWaitingForChildren!==i.lastTilesWaitingForChildren||i.maxDepthVisited!==i.lastMaxDepthVisited)&&(console.log(`Visited ${i.tilesVisited}, Rendered: ${i.tilesRendered}, Culled: ${i.tilesCulled}, Max Depth Rendered: ${i.maxDepth}, Max Depth Visited: ${i.maxDepthVisited}, Waiting for children: ${i.tilesWaitingForChildren}`),i.lastTilesVisited=i.tilesVisited,i.lastTilesRendered=i.tilesRendered,i.lastTilesCulled=i.tilesCulled,i.lastMaxDepth=i.maxDepth,i.lastTilesWaitingForChildren=i.tilesWaitingForChildren,i.lastMaxDepthVisited=i.maxDepthVisited))}oh.prototype.endFrame=function(e){!e.passes.render||e.mode===se.MORPHING||(Xyt(this,e),vyt(this,e),Vyt(this,e))};oh.prototype.isDestroyed=function(){return!1};oh.prototype.destroy=function(){this._tileProvider=this._tileProvider&&this._tileProvider.destroy()};var gY,y_e=new Ae;function Gyt(e,t){let n=de.center(e.rectangle,y_e),i=n.longitude-gY.longitude,o=n.latitude-gY.latitude;n=de.center(t.rectangle,y_e);let r=n.longitude-gY.longitude,s=n.latitude-gY.latitude;return i*i+o*o-(r*r+s*s)}var Lyt=new m,AY=[];function Wyt(e,t){let n=e._debug;if(n.suspendLodUpdate)return;let i=e._tilesToRender;i.length=0;let o=e._tileProvider;if(!l(e._levelZeroTiles)){let h=o.tilingScheme;if(l(h)){let p=o.tilingScheme;e._levelZeroTiles=fY.createLevelZeroTiles(p);let A=e._levelZeroTiles.length;if(AY.length<A){AY=new Array(A);for(let f=0;f<A;++f)AY[f]===void 0&&(AY[f]=new bY)}}else return}e._occluders.ellipsoid.cameraPosition=t.camera.positionWC;let r=e._levelZeroTiles,s=r.length>1?e._occluders:void 0;gY=t.camera.positionCartographic,r.sort(Gyt);let a=e._addHeightCallbacks,c=e._removeHeightCallbacks;a.forEach(h=>{let p=r.find(A=>de.contains(A.rectangle,h.positionCartographic));p&&p._addedCustomData.push(h)}),c.forEach(h=>{let p=r.find(A=>de.contains(A.rectangle,h.positionCartographic));p&&p._removedCustomData.push(h)}),r.forEach(h=>h.updateCustomData()),a.length=0,c.length=0;let d=t.camera;e._cameraPositionCartographic=d.positionCartographic;let u=F.getTranslation(d.transform,Lyt);e._cameraReferenceFrameOriginCartographic=e.tileProvider.tilingScheme.ellipsoid.cartesianToCartographic(u,e._cameraReferenceFrameOriginCartographic);for(let h=0;h<r.length;++h){let p=r[h];e._tileReplacementQueue.markTileRendered(p),p.renderable?wc(e,p,o,t,s,!1,AY[h]):(Cb(e,e._tileLoadQueueHigh,p,t),++n.tilesWaitingForChildren)}e._lastSelectionFrameNumber=t.frameNumber}function Cb(e,t,n,i){n.needsLoading&&(e.tileProvider.computeTileLoadPriority!==void 0&&(n._loadPriority=e.tileProvider.computeTileLoadPriority(n,i)),t.push(n))}function bY(){this.allAreRenderable=!0,this.anyWereRenderedLastFrame=!1,this.notYetRenderableCount=0}function C_e(){this.southwest=new bY,this.southeast=new bY,this.northwest=new bY,this.northeast=new bY}C_e.prototype.combine=function(e){let t=this.southwest,n=this.southeast,i=this.northwest,o=this.northeast;e.allAreRenderable=t.allAreRenderable&&n.allAreRenderable&&i.allAreRenderable&&o.allAreRenderable,e.anyWereRenderedLastFrame=t.anyWereRenderedLastFrame||n.anyWereRenderedLastFrame||i.anyWereRenderedLastFrame||o.anyWereRenderedLastFrame,e.notYetRenderableCount=t.notYetRenderableCount+n.notYetRenderableCount+i.notYetRenderableCount+o.notYetRenderableCount};var uee=new Array(31);for(let e=0;e<uee.length;++e)uee[e]=new C_e;function Fyt(e,t,n,i,o){let r=e._debug;++r.tilesVisited,e._tileReplacementQueue.markTileRendered(n),n.updateCustomData(),n.level>r.maxDepthVisited&&(r.maxDepthVisited=n.level);let s=Nyt(e,t,n)<e.maximumScreenSpaceError,a=n.southwestChild,c=n.southeastChild,d=n.northwestChild,u=n.northeastChild,h=e._lastSelectionFrameNumber,p=n._lastSelectionResultFrame===h?n._lastSelectionResult:ui.NONE,A=e.tileProvider;if(s||i){let f=ui.originalResult(p)===ui.RENDERED,b=ui.originalResult(p)===ui.CULLED||p===ui.NONE,C=n.state===Qa.DONE,T=f||b||C;if(T||l(A.canRenderWithoutLosingDetail)&&(T=A.canRenderWithoutLosingDetail(n)),T){s&&Cb(e,e._tileLoadQueueMedium,n,t),gO(e,n),o.allAreRenderable=n.renderable,o.anyWereRenderedLastFrame=p===ui.RENDERED,o.notYetRenderableCount=n.renderable?0:1,n._lastSelectionResultFrame=t.frameNumber,n._lastSelectionResult=ui.RENDERED,o.anyWereRenderedLastFrame||e._tileToUpdateHeights.push(n);return}i=!0,s&&Cb(e,e._tileLoadQueueHigh,n,t)}if(A.canRefine(n)){if(a.upsampledFromParent&&c.upsampledFromParent&&d.upsampledFromParent&&u.upsampledFromParent){gO(e,n),Cb(e,e._tileLoadQueueMedium,n,t),e._tileReplacementQueue.markTileRendered(a),e._tileReplacementQueue.markTileRendered(c),e._tileReplacementQueue.markTileRendered(d),e._tileReplacementQueue.markTileRendered(u),o.allAreRenderable=n.renderable,o.anyWereRenderedLastFrame=p===ui.RENDERED,o.notYetRenderableCount=n.renderable?0:1,n._lastSelectionResultFrame=t.frameNumber,n._lastSelectionResult=ui.RENDERED,o.anyWereRenderedLastFrame||e._tileToUpdateHeights.push(n);return}n._lastSelectionResultFrame=t.frameNumber,n._lastSelectionResult=ui.REFINED;let b=e._tilesToRender.length,C=e._tileLoadQueueLow.length,T=e._tileLoadQueueMedium.length,E=e._tileLoadQueueHigh.length,S=e._tileToUpdateHeights.length;if(Byt(e,a,c,d,u,t,i,o),b!==e._tilesToRender.length){let I=o.allAreRenderable,R=o.anyWereRenderedLastFrame,V=o.notYetRenderableCount,W=!1;if(!I&&!R){let B=e._tilesToRender;for(let P=b;P<B.length;++P){let g=B[P];for(;g!==void 0&&g._lastSelectionResult!==ui.KICKED&&g!==n;)g._lastSelectionResult=ui.kick(g._lastSelectionResult),g=g.parent}e._tilesToRender.length=b,e._tileToUpdateHeights.length=S,gO(e,n),n._lastSelectionResult=ui.RENDERED;let N=p===ui.RENDERED;!N&&V>e.loadingDescendantLimit&&(e._tileLoadQueueLow.length=C,e._tileLoadQueueMedium.length=T,e._tileLoadQueueHigh.length=E,Cb(e,e._tileLoadQueueMedium,n,t),o.notYetRenderableCount=n.renderable?0:1,W=!0),o.allAreRenderable=n.renderable,o.anyWereRenderedLastFrame=N,N||e._tileToUpdateHeights.push(n),++r.tilesWaitingForChildren}e.preloadAncestors&&!W&&Cb(e,e._tileLoadQueueLow,n,t)}return}n._lastSelectionResultFrame=t.frameNumber,n._lastSelectionResult=ui.RENDERED,gO(e,n),Cb(e,e._tileLoadQueueHigh,n,t),o.allAreRenderable=n.renderable,o.anyWereRenderedLastFrame=p===ui.RENDERED,o.notYetRenderableCount=n.renderable?0:1}function Byt(e,t,n,i,o,r,s,a){let c=r.camera.positionCartographic,d=e._tileProvider,u=e._occluders,h=uee[t.level],p=h.southwest,A=h.southeast,f=h.northwest,b=h.northeast;c.longitude<t.rectangle.east?c.latitude<t.rectangle.north?(wc(e,t,d,r,u,s,p),wc(e,n,d,r,u,s,A),wc(e,i,d,r,u,s,f),wc(e,o,d,r,u,s,b)):(wc(e,i,d,r,u,s,f),wc(e,t,d,r,u,s,p),wc(e,o,d,r,u,s,b),wc(e,n,d,r,u,s,A)):c.latitude<t.rectangle.north?(wc(e,n,d,r,u,s,A),wc(e,t,d,r,u,s,p),wc(e,o,d,r,u,s,b),wc(e,i,d,r,u,s,f)):(wc(e,o,d,r,u,s,b),wc(e,i,d,r,u,s,f),wc(e,n,d,r,u,s,A),wc(e,t,d,r,u,s,p)),h.combine(a)}function wyt(e,t){let n=t.rectangle;return l(e._cameraPositionCartographic)&&de.contains(n,e._cameraPositionCartographic)||l(e._cameraReferenceFrameOriginCartographic)&&de.contains(n,e._cameraReferenceFrameOriginCartographic)}function wc(e,t,n,i,o,r,s){if(n.computeTileVisibility(t,i,o)!==vr.NONE)return Fyt(e,i,t,r,s);if(++e._debug.tilesCulled,e._tileReplacementQueue.markTileRendered(t),s.allAreRenderable=!0,s.anyWereRenderedLastFrame=!1,s.notYetRenderableCount=0,wyt(e,t)){(!l(t.data)||!l(t.data.vertexArray))&&Cb(e,e._tileLoadQueueMedium,t,i);let a=e._lastSelectionFrameNumber,c=t._lastSelectionResultFrame===a?t._lastSelectionResult:ui.NONE;c!==ui.CULLED_BUT_NEEDED&&c!==ui.RENDERED&&e._tileToUpdateHeights.push(t),t._lastSelectionResult=ui.CULLED_BUT_NEEDED}else e.preloadSiblings||t.level===0?(Cb(e,e._tileLoadQueueLow,t,i),t._lastSelectionResult=ui.CULLED):t._lastSelectionResult=ui.CULLED;t._lastSelectionResultFrame=i.frameNumber}function Nyt(e,t,n){if(t.mode===se.SCENE2D||t.camera.frustum instanceof bn||t.camera.frustum instanceof as)return Pyt(e,t,n);let i=e._tileProvider.getLevelMaximumGeometricError(n.level),o=n._distance,r=t.context.drawingBufferHeight,s=t.camera.frustum.sseDenominator,a=i*r/(o*s);return t.fog.enabled&&(a-=L.fog(o,t.fog.density)*t.fog.sse),a/=t.pixelRatio,a}function Pyt(e,t,n){let o=t.camera.frustum,r=o.offCenterFrustum;l(r)&&(o=r);let s=t.context,a=s.drawingBufferWidth,c=s.drawingBufferHeight,d=e._tileProvider.getLevelMaximumGeometricError(n.level),u=Math.max(o.top-o.bottom,o.right-o.left)/Math.max(a,c),h=d/u;return t.fog.enabled&&t.mode!==se.SCENE2D&&(h-=L.fog(n._distance,t.fog.density)*t.fog.sse),h/=t.pixelRatio,h}function gO(e,t){e._tilesToRender.push(t),e._tilesRenderedThisFrame.add(t)}function Xyt(e,t){let n=e._tileLoadQueueHigh,i=e._tileLoadQueueMedium,o=e._tileLoadQueueLow;if(n.length===0&&i.length===0&&o.length===0)return;e._tileReplacementQueue.trimTiles(e.tileCacheSize);let r=Xi()+e._loadQueueTimeSlice,s=e._tileProvider,a=dee(e,t,s,r,n,!1);a=dee(e,t,s,r,i,a),dee(e,t,s,r,o,a)}function Yyt(e,t){return e._loadPriority-t._loadPriority}function dee(e,t,n,i,o,r){n.computeTileLoadPriority!==void 0&&o.sort(Yyt);for(let s=0,a=o.length;s<a&&(Xi()<i||!r);++s){let c=o[s];e._tileReplacementQueue.markTileRendered(c),n.loadTile(t,c),r=!0}return r}var QZ=new Cn,bO=new Ae,Dy=new m,Myt=[];function vyt(e,t){if(!l(e.tileProvider.tilingScheme))return;let n=Myt;n.length=0;let i=e._tileToUpdateHeights,o=Xi(),r=e._updateHeightsTimeSlice,s=o+r,a=t.mode,c=t.mapProjection,d=e.tileProvider.tilingScheme.ellipsoid,u;for(;i.length>0;){let h=i[0];if(!l(h.data)||!l(h.data.mesh)){let C=h._lastSelectionResultFrame===e._lastSelectionFrameNumber?h._lastSelectionResult:ui.NONE;(C===ui.RENDERED||C===ui.CULLED_BUT_NEEDED)&&n.push(h),h.clearPositionCache(),i.shift();continue}let p=h.customData;l(h._customDataIterator)||(h._customDataIterator=p.values());let A=h._customDataIterator,f=!1,b;for(;!(b=A.next()).done;){let C=b.value,T=h.data.terrainData,E=l(T)&&T.wasCreatedByUpsampling();if(h.level>C.level&&!E){let S,I=h.getPositionCacheEntry(C.positionCartographic,e.maximumScreenSpaceError);if(l(I))S=I;else{if(l(C.positionOnEllipsoidSurface)||(C.positionOnEllipsoidSurface=m.fromRadians(C.positionCartographic.longitude,C.positionCartographic.latitude,0,d)),a===se.SCENE3D){let R=d.geodeticSurfaceNormal(C.positionOnEllipsoidSurface,QZ.direction),V=d.getSurfaceNormalIntersectionWithZAxis(C.positionOnEllipsoidSurface,11500,QZ.origin);if(!l(V)){let W=0;l(h.data.tileBoundingRegion)&&(W=h.data.tileBoundingRegion.minimumHeight);let B=Math.min(W,-11500),N=m.multiplyByScalar(R,Math.abs(B)+1,Dy);m.subtract(C.positionOnEllipsoidSurface,N,QZ.origin)}}else Ae.clone(C.positionCartographic,bO),bO.height=-11500,c.project(bO,Dy),m.fromElements(Dy.z,Dy.x,Dy.y,Dy),m.clone(Dy,QZ.origin),m.clone(m.UNIT_X,QZ.direction);S=h.data.pick(QZ,a,c,!1,Dy),l(S)&&h.setPositionCacheEntry(C.positionCartographic,e.maximumScreenSpaceError,S)}if(l(S)){if(l(C.callback)){let R=d.cartesianToCartographic(S,bO);C.callback(R)}C.level=h.level}}if(Xi()>=s){f=!0;break}}if(f){h._customDataIterator=A;break}else h._customDataIterator=void 0,i.shift()}for(u=0;u<n.length;u++)i.push(n[u])}function Uyt(e,t){let n=e._tileProvider,i=e._tilesToRender;for(let o=0,r=i.length;o<r;++o){let s=i[o];n.showTileThisFrame(s,t)}}var yY=oh;function Xf(e){e=e??ie.default;let t=new qT({ellipsoid:e}),n=new dT;this._ellipsoid=e,this._imageryLayerCollection=n,this._surfaceShaderSet=new lY,this._material=void 0,this._surface=new yY({tileProvider:new uY({terrainProvider:t,imageryLayers:n,surfaceShaderSet:this._surfaceShaderSet})}),this._terrainProvider=t,this._terrainProviderChanged=new xe,this._undergroundColor=U.clone(U.BLACK),this._undergroundColorAlphaByDistance=new Ot(e.maximumRadius/1e3,0,e.maximumRadius/5,1),this._translucency=new mY,hee(this),this.show=!0,this._oceanNormalMapResourceDirty=!0,this._oceanNormalMapResource=new Le({url:en("Assets/Textures/waterNormalsSmall.jpg")}),this.maximumScreenSpaceError=2,this.tileCacheSize=100,this.loadingDescendantLimit=20,this.preloadAncestors=!0,this.preloadSiblings=!1,this.fillHighlightColor=void 0,this.enableLighting=!1,this.lambertDiffuseMultiplier=.9,this.dynamicAtmosphereLighting=!0,this.dynamicAtmosphereLightingFromSun=!1,this.showGroundAtmosphere=ie.WGS84.equals(e),this.atmosphereLightIntensity=10,this.atmosphereRayleighCoefficient=new m(55e-7,13e-6,284e-7),this.atmosphereMieCoefficient=new m(21e-6,21e-6,21e-6),this.atmosphereRayleighScaleHeight=1e4,this.atmosphereMieScaleHeight=3200,this.atmosphereMieAnisotropy=.9,this.lightingFadeOutDistance=L.PI_OVER_TWO*e.minimumRadius,this.lightingFadeInDistance=L.PI*e.minimumRadius,this.nightFadeOutDistance=L.PI_OVER_TWO*e.minimumRadius,this.nightFadeInDistance=5*L.PI_OVER_TWO*e.minimumRadius,this.showWaterEffect=!0,this.depthTestAgainstTerrain=!1,this.shadows=Vn.RECEIVE_ONLY,this.atmosphereHueShift=0,this.atmosphereSaturationShift=0,this.atmosphereBrightnessShift=0,this.showSkirts=!0,this.backFaceCulling=!0,this._oceanNormalMap=void 0,this._zoomedOutOceanSpecularIntensity=void 0,this.vertexShadowDarkness=.3}Object.defineProperties(Xf.prototype,{ellipsoid:{get:function(){return this._ellipsoid}},imageryLayers:{get:function(){return this._imageryLayerCollection}},imageryLayersUpdatedEvent:{get:function(){return this._surface.tileProvider.imageryLayersUpdatedEvent}},tilesLoaded:{get:function(){return l(this._surface)?this._surface._tileLoadQueueHigh.length===0&&this._surface._tileLoadQueueMedium.length===0&&this._surface._tileLoadQueueLow.length===0:!0}},baseColor:{get:function(){return this._surface.tileProvider.baseColor},set:function(e){this._surface.tileProvider.baseColor=e}},clippingPlanes:{get:function(){return this._surface.tileProvider.clippingPlanes},set:function(e){this._surface.tileProvider.clippingPlanes=e}},clippingPolygons:{get:function(){return this._surface.tileProvider.clippingPolygons},set:function(e){this._surface.tileProvider.clippingPolygons=e}},cartographicLimitRectangle:{get:function(){return this._surface.tileProvider.cartographicLimitRectangle},set:function(e){l(e)||(e=de.clone(de.MAX_VALUE)),this._surface.tileProvider.cartographicLimitRectangle=e}},oceanNormalMapUrl:{get:function(){return this._oceanNormalMapResource.url},set:function(e){this._oceanNormalMapResource.url=e,this._oceanNormalMapResourceDirty=!0}},terrainProvider:{get:function(){return this._terrainProvider},set:function(e){e!==this._terrainProvider&&(this._terrainProvider=e,this._terrainProviderChanged.raiseEvent(e),l(this._material)&&hee(this))}},terrainProviderChanged:{get:function(){return this._terrainProviderChanged}},tileLoadProgressEvent:{get:function(){return this._surface.tileLoadProgressEvent}},material:{get:function(){return this._material},set:function(e){this._material!==e&&(this._material=e,hee(this))}},undergroundColor:{get:function(){return this._undergroundColor},set:function(e){this._undergroundColor=U.clone(e,this._undergroundColor)}},undergroundColorAlphaByDistance:{get:function(){return this._undergroundColorAlphaByDistance},set:function(e){this._undergroundColorAlphaByDistance=Ot.clone(e,this._undergroundColorAlphaByDistance)}},translucency:{get:function(){return this._translucency}}});function hee(e){let t=[],n=l(e._material)&&(l(e._material.shaderSource.match(/slope/))||l(e._material.shaderSource.match("normalEC"))),i=[Dh,MZ];l(e._material)&&(!n||e._terrainProvider.hasVertexNormals)?(i.push(e._material.shaderSource),t.push("APPLY_MATERIAL"),e._surface._tileProvider.materialUniformMap=e._material._uniforms):e._surface._tileProvider.materialUniformMap=void 0,i.push($X),e._surfaceShaderSet.baseVertexShaderSource=new ze({sources:[Dh,MZ,eY],defines:t}),e._surfaceShaderSet.baseFragmentShaderSource=new ze({sources:i,defines:t}),e._surfaceShaderSet.material=e._material}function Dyt(e){return function(t,n){let i=ue.distanceSquaredTo(t.pickBoundingSphere,e),o=ue.distanceSquaredTo(n.pickBoundingSphere,e);return i-o}}var kyt=[],Qyt={start:0,stop:0};Xf.prototype.pickWorldCoordinates=function(e,t,n,i){n=n??!0;let o=t.mode,r=t.mapProjection,s=kyt;s.length=0;for(let d of this._surface._tilesRenderedThisFrame){let u=d.data;if(!l(u))continue;let h=u.pickBoundingSphere;if(o!==se.SCENE3D)u.pickBoundingSphere=h=ue.fromRectangleWithHeights2D(d.rectangle,r,u.tileBoundingRegion.minimumHeight,u.tileBoundingRegion.maximumHeight,h),m.fromElements(h.center.z,h.center.x,h.center.y,h.center);else if(l(u.renderedMesh))ue.clone(u.tileBoundingRegion.boundingSphere,h);else continue;let p=hi.raySphere(e,h,Qyt);l(p)&&s.push(u)}s.sort(Dyt(e.origin));let a,c=s.length;for(let d=0;d<c&&(a=s[d].pick(e,t.mode,t.mapProjection,n,i),!l(a));++d);return a};var Oyt=new Ae;Xf.prototype.pick=function(e,t,n){if(n=this.pickWorldCoordinates(e,t,!0,n),l(n)&&t.mode!==se.SCENE3D){n=m.fromElements(n.y,n.z,n.x,n);let i=t.mapProjection.unproject(n,Oyt);n=this._ellipsoid.cartographicToCartesian(i,n)}return n};var zyt=new m,T_e=new m,Hyt=new Ae,Jyt=new Cn;function mee(e,t){return l(e)&&de.contains(e.rectangle,t)?e:void 0}Xf.prototype.getHeight=function(e){let t=this._surface._levelZeroTiles;if(!l(t))return;let n,i,o=t.length;for(i=0;i<o&&(n=t[i],!de.contains(n.rectangle,e));++i);if(i>=o)return;let r=n;for(;l(n);)n=mee(n._southwestChild,e)||mee(n._southeastChild,e)||mee(n._northwestChild,e)||n._northeastChild,l(n)&&l(n.data)&&l(n.data.renderedMesh)&&(r=n);if(n=r,!l(n)||!l(n.data)||!l(n.data.renderedMesh))return;let s=this._surface._tileProvider.tilingScheme.projection,a=this._surface._tileProvider.tilingScheme.ellipsoid,c=m.fromRadians(e.longitude,e.latitude,0,a,zyt),d=Jyt,u=a.geodeticSurfaceNormal(c,d.direction),h=a.getSurfaceNormalIntersectionWithZAxis(c,11500,d.origin);if(!l(h)){let A;l(n.data.tileBoundingRegion)&&(A=n.data.tileBoundingRegion.minimumHeight);let f=Math.min(A??0,-11500),b=m.multiplyByScalar(u,Math.abs(f)+1,T_e);m.subtract(c,b,d.origin)}let p=n.data.pick(d,se.SCENE3D,s,!1,T_e);if(l(p))return a.cartesianToCartographic(p,Hyt).height};Xf.prototype.update=function(e){this.show&&e.passes.render&&this._surface.update(e)};Xf.prototype.beginFrame=function(e){let t=this._surface,n=t.tileProvider,i=this.terrainProvider,o=l(i)&&i.hasWaterMask&&i.hasWaterMask;if(o&&this._oceanNormalMapResourceDirty){this._oceanNormalMapResourceDirty=!1;let a=this._oceanNormalMapResource,c=a.url;if(l(c)){let d=this;a.fetchImage().then(function(u){c===d._oceanNormalMapResource.url&&(d._oceanNormalMap=d._oceanNormalMap&&d._oceanNormalMap.destroy(),d._oceanNormalMap=new Lt({context:e.context,source:u}))})}else this._oceanNormalMap=this._oceanNormalMap&&this._oceanNormalMap.destroy()}let r=e.passes,s=e.mode;r.render&&(this.showGroundAtmosphere?this._zoomedOutOceanSpecularIntensity=.4:this._zoomedOutOceanSpecularIntensity=.5,t.maximumScreenSpaceError=this.maximumScreenSpaceError,t.tileCacheSize=this.tileCacheSize,t.loadingDescendantLimit=this.loadingDescendantLimit,t.preloadAncestors=this.preloadAncestors,t.preloadSiblings=this.preloadSiblings,n.terrainProvider=this.terrainProvider,n.lightingFadeOutDistance=this.lightingFadeOutDistance,n.lightingFadeInDistance=this.lightingFadeInDistance,n.nightFadeOutDistance=this.nightFadeOutDistance,n.nightFadeInDistance=this.nightFadeInDistance,n.zoomedOutOceanSpecularIntensity=s===se.SCENE3D?this._zoomedOutOceanSpecularIntensity:0,n.hasWaterMask=o,n.showWaterEffect=this.showWaterEffect,n.oceanNormalMap=this._oceanNormalMap,n.enableLighting=this.enableLighting,n.dynamicAtmosphereLighting=this.dynamicAtmosphereLighting,n.dynamicAtmosphereLightingFromSun=this.dynamicAtmosphereLightingFromSun,n.showGroundAtmosphere=this.showGroundAtmosphere,n.atmosphereLightIntensity=this.atmosphereLightIntensity,n.atmosphereRayleighCoefficient=this.atmosphereRayleighCoefficient,n.atmosphereMieCoefficient=this.atmosphereMieCoefficient,n.atmosphereRayleighScaleHeight=this.atmosphereRayleighScaleHeight,n.atmosphereMieScaleHeight=this.atmosphereMieScaleHeight,n.atmosphereMieAnisotropy=this.atmosphereMieAnisotropy,n.shadows=this.shadows,n.hueShift=this.atmosphereHueShift,n.saturationShift=this.atmosphereSaturationShift,n.brightnessShift=this.atmosphereBrightnessShift,n.fillHighlightColor=this.fillHighlightColor,n.showSkirts=this.showSkirts,n.backFaceCulling=this.backFaceCulling,n.vertexShadowDarkness=this.vertexShadowDarkness,n.undergroundColor=this._undergroundColor,n.undergroundColorAlphaByDistance=this._undergroundColorAlphaByDistance,n.lambertDiffuseMultiplier=this.lambertDiffuseMultiplier,t.beginFrame(e))};Xf.prototype.render=function(e){this.show&&(l(this._material)&&this._material.update(e.context),this._surface.render(e))};Xf.prototype.endFrame=function(e){this.show&&e.passes.render&&this._surface.endFrame(e)};Xf.prototype.isDestroyed=function(){return!1};Xf.prototype.destroy=function(){return this._surfaceShaderSet=this._surfaceShaderSet&&this._surfaceShaderSet.destroy(),this._surface=this._surface&&this._surface.destroy(),this._oceanNormalMap=this._oceanNormalMap&&this._oceanNormalMap.destroy(),he(this)};var xY=Xf;var I6i=y(x(),1);var u6i=y(x(),1);var fee={position:0};function yO(e){e=e??Q.EMPTY_OBJECT,this.center=m.clone(e.center??m.ZERO),this._center=new m,this.radii=m.clone(e.radii),this._radii=new m,this._oneOverEllipsoidRadiiSquared=new m,this._boundingSphere=new ue,this.modelMatrix=F.clone(e.modelMatrix??F.IDENTITY),this._modelMatrix=new F,this._computedModelMatrix=new F,this.show=e.show??!0,this.material=e.material??Oi.fromType(Oi.ColorType),this._material=void 0,this._translucent=void 0,this.id=e.id,this._id=void 0,this.debugShowBoundingVolume=e.debugShowBoundingVolume??!1,this.onlySunLighting=e.onlySunLighting??!1,this._onlySunLighting=!1,this._depthTestEnabled=e.depthTestEnabled??!0,this._useLogDepth=!1,this._sp=void 0,this._rs=void 0,this._va=void 0,this._pickSP=void 0,this._pickId=void 0,this._colorCommand=new ot({owner:e._owner??this}),this._pickCommand=new ot({owner:e._owner??this,pickOnly:!0});let t=this;this._uniforms={u_radii:function(){return t.radii},u_oneOverEllipsoidRadiiSquared:function(){return t._oneOverEllipsoidRadiiSquared}},this._pickUniforms={czm_pickColor:function(){return t._pickId.color}}}function Kyt(e){let t=e.cache.ellipsoidPrimitive_vertexArray;if(l(t))return t;let n=Cc.createGeometry(Cc.fromDimensions({dimensions:new m(2,2,2),vertexFormat:ve.POSITION_ONLY}));return t=kn.fromGeometry({context:e,geometry:n,attributeLocations:fee,bufferUsage:Be.STATIC_DRAW,interleave:!0}),e.cache.ellipsoidPrimitive_vertexArray=t,t}yO.prototype.update=function(e){if(!this.show||e.mode!==se.SCENE3D||!l(this.center)||!l(this.radii))return;let t=e.context,n=this.material.isTranslucent(),i=this._translucent!==n;(!l(this._rs)||i)&&(this._translucent=n,this._rs=Qe.fromCache({cull:{enabled:!0,face:wi.FRONT},depthTest:{enabled:this._depthTestEnabled},depthMask:!n&&t.fragmentDepth,blending:n?ln.ALPHA_BLEND:void 0})),l(this._va)||(this._va=Kyt(t));let o=!1,r=this.radii;if(!m.equals(this._radii,r)){m.clone(r,this._radii);let b=this._oneOverEllipsoidRadiiSquared;b.x=1/(r.x*r.x),b.y=1/(r.y*r.y),b.z=1/(r.z*r.z),o=!0}(!F.equals(this.modelMatrix,this._modelMatrix)||!m.equals(this.center,this._center))&&(F.clone(this.modelMatrix,this._modelMatrix),m.clone(this.center,this._center),F.multiplyByTranslation(this.modelMatrix,this.center,this._computedModelMatrix),o=!0),o&&(m.clone(m.ZERO,this._boundingSphere.center),this._boundingSphere.radius=m.maximumComponent(r),ue.transform(this._boundingSphere,this._computedModelMatrix,this._boundingSphere));let s=this._material!==this.material;this._material=this.material,this._material.update(t);let a=this.onlySunLighting!==this._onlySunLighting;this._onlySunLighting=this.onlySunLighting;let c=e.useLogDepth,d=this._useLogDepth!==c;this._useLogDepth=c;let u=this._colorCommand,h,p;(s||a||i||d)&&(h=new ze({sources:[YZ]}),p=new ze({sources:[this.material.shaderSource,XZ]}),this.onlySunLighting&&p.defines.push("ONLY_SUN_LIGHTING"),!n&&t.fragmentDepth&&p.defines.push("WRITE_DEPTH"),this._useLogDepth&&(h.defines.push("LOG_DEPTH"),p.defines.push("LOG_DEPTH")),this._sp=tn.replaceCache({context:t,shaderProgram:this._sp,vertexShaderSource:h,fragmentShaderSource:p,attributeLocations:fee}),u.vertexArray=this._va,u.renderState=this._rs,u.shaderProgram=this._sp,u.uniformMap=Ft(this._uniforms,this.material._uniforms),u.executeInClosestFrustum=n);let A=e.commandList,f=e.passes;if(f.render&&(u.boundingVolume=this._boundingSphere,u.debugShowBoundingVolume=this.debugShowBoundingVolume,u.modelMatrix=this._computedModelMatrix,u.pass=n?Ge.TRANSLUCENT:Ge.OPAQUE,A.push(u)),f.pick){let b=this._pickCommand;(!l(this._pickId)||this._id!==this.id)&&(this._id=this.id,this._pickId=this._pickId&&this._pickId.destroy(),this._pickId=t.createPickId({primitive:this,id:this.id})),(s||a||!l(this._pickSP)||d)&&(h=new ze({sources:[YZ]}),p=new ze({sources:[this.material.shaderSource,XZ],pickColorQualifier:"uniform"}),this.onlySunLighting&&p.defines.push("ONLY_SUN_LIGHTING"),!n&&t.fragmentDepth&&p.defines.push("WRITE_DEPTH"),this._useLogDepth&&(h.defines.push("LOG_DEPTH"),p.defines.push("LOG_DEPTH")),this._pickSP=tn.replaceCache({context:t,shaderProgram:this._pickSP,vertexShaderSource:h,fragmentShaderSource:p,attributeLocations:fee}),b.vertexArray=this._va,b.renderState=this._rs,b.shaderProgram=this._pickSP,b.uniformMap=Ft(Ft(this._uniforms,this._pickUniforms),this.material._uniforms),b.executeInClosestFrustum=n),b.boundingVolume=this._boundingSphere,b.modelMatrix=this._computedModelMatrix,b.pass=n?Ge.TRANSLUCENT:Ge.OPAQUE,A.push(b)}};yO.prototype.isDestroyed=function(){return!1};yO.prototype.destroy=function(){return this._sp=this._sp&&this._sp.destroy(),this._pickSP=this._pickSP&&this._pickSP.destroy(),this._pickId=this._pickId&&this._pickId.destroy(),he(this)};var CY=yO;function TY(e){e=e??Q.EMPTY_OBJECT;let t=e.textureUrl;l(t)||(t=en("Assets/Textures/moonSmall.jpg")),this.show=e.show??!0,this.textureUrl=t,this._ellipsoid=e.ellipsoid??ie.MOON,this.onlySunLighting=e.onlySunLighting??!0,this._ellipsoidPrimitive=new CY({radii:this.ellipsoid.radii,material:Oi.fromType(Oi.ImageType),depthTestEnabled:!1,_owner:this}),this._ellipsoidPrimitive.material.translucent=!1,this._axes=new FX}Object.defineProperties(TY.prototype,{ellipsoid:{get:function(){return this._ellipsoid}}});var xO=new $,jyt=new $,qyt=new m,CO=[];TY.prototype.update=function(e){if(!this.show)return;let t=this._ellipsoidPrimitive;t.material.uniforms.image=this.textureUrl,t.onlySunLighting=this.onlySunLighting;let n=e.time;l(bt.computeIcrfToFixedMatrix(n,xO))||bt.computeTemeToPseudoFixedMatrix(n,xO);let i=this._axes.evaluate(n,jyt);$.transpose(i,i),$.multiply(xO,i,i);let o=qb.computeMoonPositionInEarthInertialFrame(n,qyt);$.multiplyByVector(xO,o,o),F.fromRotationTranslation(i,o,t.modelMatrix);let r=e.commandList;return e.commandList=CO,CO.length=0,t.update(e),e.commandList=r,CO.length===1?CO[0]:void 0};TY.prototype.isDestroyed=function(){return!1};TY.prototype.destroy=function(){return this._ellipsoidPrimitive=this._ellipsoidPrimitive&&this._ellipsoidPrimitive.destroy(),he(this)};var EY=TY;var Fpo=y(x(),1);var X6i=y(x(),1);function SY(){this._colorTexture=void 0,this._drawCommand=void 0}Object.defineProperties(SY.prototype,{colorTexture:{get:function(){return this._colorTexture}}});function $yt(e,t,n){let i=t.createViewportQuadCommand(UX,{framebuffer:n,renderState:Qe.fromCache({viewport:new nt(0,0,256,256)})});e._drawCommand=i}SY.prototype.update=function(e){if(!l(this._colorTexture)){let t=e.context,n=new Lt({context:t,width:256,height:256,pixelFormat:Ke.RGBA,pixelDatatype:Oe.UNSIGNED_BYTE,sampler:Ht.NEAREST});this._colorTexture=n;let i=new ss({context:t,colorTextures:[n],destroyAttachments:!1});$yt(this,t,i),this._drawCommand.execute(t),i.destroy(),this._drawCommand.shaderProgram=this._drawCommand.shaderProgram&&this._drawCommand.shaderProgram.destroy()}};SY.prototype.isDestroyed=function(){return!1};SY.prototype.destroy=function(){return this._colorTexture=this._colorTexture&&this._colorTexture.destroy(),he(this)};var _Y=SY;var Rqi=y(x(),1);var K6i=y(x(),1);var I_e={};function ext(e,t,n){let i,o,r;if(e instanceof Ui){let s=Math.tan(.5*e.fovy);return i=e.near,o=e.near*s,r=e.aspectRatio*o,Math.max(t*i/r,n*i/o)}else if(e instanceof id)return i=e.near,o=e.top,r=e.right,Math.max(t*i/r,n*i/o);return Math.max(t,n)}var txt=new m,E_e=new m;function Z_e(e,t,n,i){if(l(i)&&n(.5)>i){let o=n(0),r=n(1),s=n(.5),a=s-o,c=s-r;return function(d){let u=n(d);if(d<=.5){let p=(u-o)/a;return L.lerp(e,-L.PI_OVER_TWO,p)}let h=(u-r)/c;return L.lerp(-L.PI_OVER_TWO,t,1-h)}}return function(o){return L.lerp(e,t,o)}}function Aee(e,t,n,i,o){let r=o,s=Math.max(n,i);if(!l(r)){let a=e.position,c=t,d=e.up,u=e.right,h=e.frustum,p=m.subtract(a,c,txt),A=m.magnitude(m.multiplyByScalar(d,m.dot(p,d),E_e)),f=m.magnitude(m.multiplyByScalar(u,m.dot(p,u),E_e));r=Math.min(ext(h,A,f)*.2,1e9)}if(s<r){let d=-Math.pow((r-n)*1e6,.125),u=Math.pow((r-i)*1e6,1/8);return function(h){let p=h*(u-d)+d;return-Math.pow(p,8)/1e6+r}}return function(a){return L.lerp(n,i,a)}}function IY(e,t){return L.equalsEpsilon(e,L.TWO_PI,L.EPSILON11)&&(e=0),t>e+Math.PI?e+=L.TWO_PI:t<e-Math.PI&&(e-=L.TWO_PI),e}var R_e=new m;function nxt(e,t,n,i,o,r,s,a){let c=e.camera,d=m.clone(c.position,R_e),u=c.pitch,h=IY(c.heading,i),p=IY(c.roll,r),A=Aee(c,n,d.z,n.z,s),f=Z_e(u,o,A,a);function b(C){let T=C.time/t;c.setView({orientation:{heading:L.lerp(h,i,T),pitch:f(T),roll:L.lerp(p,r,T)}}),M.lerp(d,n,T,c.position),c.position.z=A(T)}return b}function ixt(e,t){e.longitude<t.longitude?e.longitude+=L.TWO_PI:t.longitude+=L.TWO_PI}function oxt(e,t){let n=e.longitude-t.longitude;n<-L.PI?e.longitude+=L.TWO_PI:n>L.PI&&(t.longitude+=L.TWO_PI)}var rxt=new Ae,sxt=new Ae;function axt(e,t,n,i,o,r,s,a,c,d){let u=e.camera,p=e.mapProjection.ellipsoid,A=Ae.clone(u.positionCartographic,rxt),f=u.pitch,b=IY(u.heading,i),C=IY(u.roll,r),T=p.cartesianToCartographic(n,sxt);A.longitude=L.zeroToTwoPi(A.longitude),T.longitude=L.zeroToTwoPi(T.longitude);let E=!1;if(l(a)){let V=L.zeroToTwoPi(a),W=Math.min(A.longitude,T.longitude),B=Math.max(A.longitude,T.longitude),N=V>=W&&V<=B;if(l(c)){let P=Math.abs(A.longitude-T.longitude),g=L.TWO_PI-P;(N?P:g)<(N?g:P)*c&&!N&&(E=!0)}else N||(E=!0)}E?ixt(A,T):oxt(A,T);let S=Aee(u,n,A.height,T.height,s),I=Z_e(f,o,S,d);function R(){let V=A.longitude,W=T.longitude,B=A.latitude,N=T.latitude;return function(g){let _=g.time/t,Z=m.fromRadians(L.lerp(V,W,_),L.lerp(B,N,_),S(_),p);u.setView({destination:Z,orientation:{heading:L.lerp(b,i,_),pitch:I(_),roll:L.lerp(C,r,_)}})}}return R()}function cxt(e,t,n,i,o,r,s){let a=e.camera,c=m.clone(a.position,R_e),d=IY(a.heading,i),u=a.frustum.right-a.frustum.left,h=Aee(a,n,u,n.z,s);function p(A){let f=A.time/t;a.setView({orientation:{heading:L.lerp(d,i,f)}}),M.lerp(c,n,f,a.position);let b=h(f),C=a.frustum,T=C.top/C.right,E=(b-(C.right-C.left))*.5;C.right+=E,C.left-=E,C.top=T*C.right,C.bottom=-C.top}return p}var S_e=new Ae,lxt=new m;function pee(e,t){return{startObject:{},stopObject:{},duration:0,complete:e,cancel:t}}function __e(e,t){function n(){typeof t=="function"&&t(),e.enableInputs=!0}return n}I_e.createTween=function(e,t){t=t??Q.EMPTY_OBJECT;let n=t.destination,i=e.mode;if(i===se.MORPHING)return pee();let o=t.convert??!0,r=e.mapProjection,s=r.ellipsoid,a=t.maximumHeight,c=t.flyOverLongitude,d=t.flyOverLongitudeWeight,u=t.pitchAdjustHeight,h=t.easingFunction;o&&i!==se.SCENE3D&&(s.cartesianToCartographic(n,S_e),n=r.project(S_e,lxt));let p=e.camera,A=t.endTransform;l(A)&&p._setTransform(A);let f=t.duration;l(f)||(f=Math.ceil(m.distance(p.position,n)/1e6)+2,f=Math.min(f,3));let b=t.heading??0,C=t.pitch??-L.PI_OVER_TWO,T=t.roll??0,E=e.screenSpaceCameraController;E.enableInputs=!1;let S=__e(E,t.complete),I=__e(E,t.cancel),R=p.frustum,V=e.mode===se.SCENE2D;if(V=V&&M.equalsEpsilon(p.position,n,L.EPSILON6),V=V&&L.equalsEpsilon(Math.max(R.right-R.left,R.top-R.bottom),n.z,L.EPSILON6),V=V||e.mode!==se.SCENE2D&&m.equalsEpsilon(n,p.position,L.EPSILON10),V=V&&L.equalsEpsilon(L.negativePiToPi(b),L.negativePiToPi(p.heading),L.EPSILON10)&&L.equalsEpsilon(L.negativePiToPi(C),L.negativePiToPi(p.pitch),L.EPSILON10)&&L.equalsEpsilon(L.negativePiToPi(T),L.negativePiToPi(p.roll),L.EPSILON10),V)return pee(S,I);let W=new Array(4);if(W[se.SCENE2D]=cxt,W[se.SCENE3D]=axt,W[se.COLUMBUS_VIEW]=nxt,f<=0)return pee(function(){W[i](e,1,n,b,C,T,a,c,d,u)({time:1}),typeof S=="function"&&S()},I);let B=W[i](e,f,n,b,C,T,a,c,d,u);if(!l(h)){let N=p.positionCartographic.height,P=i===se.SCENE3D?s.cartesianToCartographic(n).height:n.z;N>P&&N>11500?h=Ts.CUBIC_OUT:h=Ts.QUINTIC_IN_OUT}return{duration:f,easingFunction:h,startObject:{time:0},stopObject:{time:f},update:B,complete:S,cancel:I}};var ZY=I_e;var q6i=y(x(),1),dxt={ROTATE:0,INFINITE_SCROLL:1},od=Object.freeze(dxt);function mn(e){this._scene=e,this._transform=F.clone(F.IDENTITY),this._invTransform=F.clone(F.IDENTITY),this._actualTransform=F.clone(F.IDENTITY),this._actualInvTransform=F.clone(F.IDENTITY),this._transformChanged=!1,this.position=new m,this._position=new m,this._positionWC=new m,this._positionCartographic=new Ae,this._oldPositionWC=void 0,this.positionWCDeltaMagnitude=0,this.positionWCDeltaMagnitudeLastFrame=0,this.timeSinceMoved=0,this._lastMovedTimestamp=0,this.direction=new m,this._direction=new m,this._directionWC=new m,this.up=new m,this._up=new m,this._upWC=new m,this.right=new m,this._right=new m,this._rightWC=new m,this.frustum=new Ui,this.frustum.aspectRatio=e.drawingBufferWidth/e.drawingBufferHeight,this.frustum.fov=L.toRadians(60),this.defaultMoveAmount=1e5,this.defaultLookAmount=Math.PI/60,this.defaultRotateAmount=Math.PI/3600,this.defaultZoomAmount=1e5,this.constrainedAxis=void 0,this.maximumZoomFactor=1.5,this._moveStart=new xe,this._moveEnd=new xe,this._changed=new xe,this._changedPosition=void 0,this._changedDirection=void 0,this._changedFrustum=void 0,this._changedHeading=void 0,this._changedRoll=void 0,this.percentageChanged=.5,this._viewMatrix=new F,this._invViewMatrix=new F,N_e(this),this._mode=se.SCENE3D,this._modeChanged=!0;let t=e.mapProjection;this._projection=t,this._maxCoord=t.project(new Ae(Math.PI,L.PI_OVER_TWO)),this._max2Dfrustum=void 0,H_e(this,mn.DEFAULT_VIEW_RECTANGLE,this.position,!0);let n=m.magnitude(this.position);n+=n*mn.DEFAULT_VIEW_FACTOR,m.normalize(this.position,this.position),m.multiplyByScalar(this.position,n,this.position)}mn.TRANSFORM_2D=new F(0,0,1,0,1,0,0,0,0,1,0,0,0,0,0,1);mn.TRANSFORM_2D_INVERSE=F.inverseTransformation(mn.TRANSFORM_2D,new F);mn.DEFAULT_VIEW_RECTANGLE=de.fromDegrees(-95,-20,-70,90);mn.DEFAULT_VIEW_FACTOR=.5;mn.DEFAULT_OFFSET=new jm(0,-L.PI_OVER_FOUR,0);function N_e(e){F.computeView(e._position,e._direction,e._up,e._right,e._viewMatrix),F.multiply(e._viewMatrix,e._actualInvTransform,e._viewMatrix),F.inverseTransformation(e._viewMatrix,e._invViewMatrix)}function uxt(e){if(!l(e._oldPositionWC))e._oldPositionWC=m.clone(e.positionWC,e._oldPositionWC);else{e.positionWCDeltaMagnitudeLastFrame=e.positionWCDeltaMagnitude;let t=m.subtract(e.positionWC,e._oldPositionWC,e._oldPositionWC);e.positionWCDeltaMagnitude=m.magnitude(t),e._oldPositionWC=m.clone(e.positionWC,e._oldPositionWC),e.positionWCDeltaMagnitude>0?(e.timeSinceMoved=0,e._lastMovedTimestamp=Xi()):e.timeSinceMoved=Math.max(Xi()-e._lastMovedTimestamp,0)/1e3}}mn.prototype.canPreloadFlight=function(){return l(this._currentFlight)&&this._mode!==se.SCENE2D};mn.prototype._updateCameraChanged=function(){let e=this;if(uxt(e),e._changed.numberOfListeners===0)return;let t=e.percentageChanged,n=e.heading;l(e._changedHeading)||(e._changedHeading=n);let i=Math.abs(e._changedHeading-n)%L.TWO_PI;i=i>L.PI?L.TWO_PI-i:i;let o=i/Math.PI;o>t&&(e._changedHeading=n);let r=e.roll;l(e._changedRoll)||(e._changedRoll=r);let s=Math.abs(e._changedRoll-r)%L.TWO_PI;s=s>L.PI?L.TWO_PI-s:s;let a=s/Math.PI;if(a>t&&(e._changedRoll=r),(a>t||o>t)&&e._changed.raiseEvent(Math.max(a,o)),e._mode===se.SCENE2D){if(!l(e._changedFrustum)){e._changedPosition=m.clone(e.position,e._changedPosition),e._changedFrustum=e.frustum.clone();return}let p=e.position,A=e._changedPosition,f=e.frustum,b=e._changedFrustum,C=p.x+f.left,T=p.x+f.right,E=A.x+b.left,S=A.x+b.right,I=p.y+f.bottom,R=p.y+f.top,V=A.y+b.bottom,W=A.y+b.top,B=Math.max(C,E),N=Math.min(T,S),P=Math.max(I,V),g=Math.min(R,W),_;if(B>=N||P>=R)_=1;else{let Z=b;C<E&&T>S&&I<V&&R>W&&(Z=f),_=1-(N-B)*(g-P)/((Z.right-Z.left)*(Z.top-Z.bottom))}_>t&&(e._changed.raiseEvent(_),e._changedPosition=m.clone(e.position,e._changedPosition),e._changedFrustum=e.frustum.clone(e._changedFrustum));return}if(!l(e._changedDirection)){e._changedPosition=m.clone(e.positionWC,e._changedPosition),e._changedDirection=m.clone(e.directionWC,e._changedDirection);return}let c=L.acosClamped(m.dot(e.directionWC,e._changedDirection)),d;l(e.frustum.fovy)?d=c/(e.frustum.fovy*.5):d=c;let h=m.distance(e.positionWC,e._changedPosition)/e.positionCartographic.height;(d>t||h>t)&&(e._changed.raiseEvent(Math.max(d,h)),e._changedPosition=m.clone(e.positionWC,e._changedPosition),e._changedDirection=m.clone(e.directionWC,e._changedDirection))};function mxt(e){bt.basisTo2D(e._projection,e._transform,e._actualTransform)}var hxt=new Ae,fxt=new m,TO=new m,pxt=new re,Axt=new re,gxt=new re,bxt=new re,yxt=new re;function xxt(e){let t=e._projection,n=t.ellipsoid,i=F.getColumn(e._transform,3,pxt),o=n.cartesianToCartographic(i,hxt),r=t.project(o,fxt),s=Axt;s.x=r.z,s.y=r.x,s.z=r.y,s.w=1;let a=re.clone(re.UNIT_X,yxt),c=re.add(F.getColumn(e._transform,0,TO),i,TO);n.cartesianToCartographic(c,o),t.project(o,r);let d=gxt;d.x=r.z,d.y=r.x,d.z=r.y,d.w=0,m.subtract(d,s,d),d.x=0;let u=bxt;if(m.magnitudeSquared(d)>L.EPSILON10)m.cross(a,d,u);else{let h=re.add(F.getColumn(e._transform,1,TO),i,TO);n.cartesianToCartographic(h,o),t.project(o,r),u.x=r.z,u.y=r.x,u.z=r.y,u.w=0,m.subtract(u,s,u),u.x=0,m.magnitudeSquared(u)<L.EPSILON10&&(re.clone(re.UNIT_Y,d),re.clone(re.UNIT_Z,u))}m.cross(u,a,d),m.normalize(d,d),m.cross(a,d,u),m.normalize(u,u),F.setColumn(e._actualTransform,0,d,e._actualTransform),F.setColumn(e._actualTransform,1,u,e._actualTransform),F.setColumn(e._actualTransform,2,a,e._actualTransform),F.setColumn(e._actualTransform,3,s,e._actualTransform)}var gee=new m;function ul(e){let t=e._mode,n=!1,i=0;t===se.SCENE2D&&(i=e.frustum.right-e.frustum.left,n=i!==e._positionCartographic.height);let o=e._position,r=!m.equals(o,e.position)||n;r&&(o=m.clone(e.position,e._position));let s=e._direction,a=!m.equals(s,e.direction);a&&(m.normalize(e.direction,e.direction),s=m.clone(e.direction,e._direction));let c=e._up,d=!m.equals(c,e.up);d&&(m.normalize(e.up,e.up),c=m.clone(e.up,e._up));let u=e._right,h=!m.equals(u,e.right);h&&(m.normalize(e.right,e.right),u=m.clone(e.right,e._right));let p=e._transformChanged||e._modeChanged;e._transformChanged=!1,p&&(F.inverseTransformation(e._transform,e._invTransform),e._mode===se.COLUMBUS_VIEW||e._mode===se.SCENE2D?F.equals(F.IDENTITY,e._transform)?F.clone(mn.TRANSFORM_2D,e._actualTransform):e._mode===se.COLUMBUS_VIEW?mxt(e):xxt(e):F.clone(e._transform,e._actualTransform),F.inverseTransformation(e._actualTransform,e._actualInvTransform),e._modeChanged=!1);let A=e._actualTransform;if(r||p)if(e._positionWC=F.multiplyByPoint(A,o,e._positionWC),t===se.SCENE3D||t===se.MORPHING)e._positionCartographic=e._projection.ellipsoid.cartesianToCartographic(e._positionWC,e._positionCartographic);else{let f=gee;f.x=e._positionWC.y,f.y=e._positionWC.z,f.z=e._positionWC.x,t===se.SCENE2D&&(f.z=i),e._projection.unproject(f,e._positionCartographic)}if(a||d||h){let f=m.dot(s,m.cross(c,u,gee));if(Math.abs(1-f)>L.EPSILON2){let b=1/m.magnitudeSquared(c),C=m.dot(c,s)*b,T=m.multiplyByScalar(s,C,gee);c=m.normalize(m.subtract(c,T,e._up),e._up),m.clone(c,e.up),u=m.cross(s,c,e._right),m.clone(u,e.right)}}(a||p)&&(e._directionWC=F.multiplyByPointAsVector(A,s,e._directionWC),m.normalize(e._directionWC,e._directionWC)),(d||p)&&(e._upWC=F.multiplyByPointAsVector(A,c,e._upWC),m.normalize(e._upWC,e._upWC)),(h||p)&&(e._rightWC=F.multiplyByPointAsVector(A,u,e._rightWC),m.normalize(e._rightWC,e._rightWC)),(r||a||d||h||p)&&N_e(e)}function P_e(e,t){let n;return L.equalsEpsilon(Math.abs(e.z),1,L.EPSILON3)?n=Math.atan2(t.y,t.x)-L.PI_OVER_TWO:n=Math.atan2(e.y,e.x)-L.PI_OVER_TWO,L.TWO_PI-L.zeroToTwoPi(n)}function X_e(e){return L.PI_OVER_TWO-L.acosClamped(e.z)}function Y_e(e,t,n){let i=0;return L.equalsEpsilon(Math.abs(e.z),1,L.EPSILON3)||(i=Math.atan2(-n.z,t.z),i=L.zeroToTwoPi(i+L.TWO_PI)),i}var _O=new F,IO=new F;Object.defineProperties(mn.prototype,{transform:{get:function(){return this._transform}},inverseTransform:{get:function(){return ul(this),this._invTransform}},viewMatrix:{get:function(){return ul(this),this._viewMatrix}},inverseViewMatrix:{get:function(){return ul(this),this._invViewMatrix}},positionCartographic:{get:function(){return ul(this),this._positionCartographic}},positionWC:{get:function(){return ul(this),this._positionWC}},directionWC:{get:function(){return ul(this),this._directionWC}},upWC:{get:function(){return ul(this),this._upWC}},rightWC:{get:function(){return ul(this),this._rightWC}},heading:{get:function(){if(this._mode!==se.MORPHING){let e=this._projection.ellipsoid,t=F.clone(this._transform,_O),n=bt.eastNorthUpToFixedFrame(this.positionWC,e,IO);this._setTransform(n);let i=P_e(this.direction,this.up);return this._setTransform(t),i}}},pitch:{get:function(){if(this._mode!==se.MORPHING){let e=this._projection.ellipsoid,t=F.clone(this._transform,_O),n=bt.eastNorthUpToFixedFrame(this.positionWC,e,IO);this._setTransform(n);let i=X_e(this.direction);return this._setTransform(t),i}}},roll:{get:function(){if(this._mode!==se.MORPHING){let e=this._projection.ellipsoid,t=F.clone(this._transform,_O),n=bt.eastNorthUpToFixedFrame(this.positionWC,e,IO);this._setTransform(n);let i=Y_e(this.direction,this.up,this.right);return this._setTransform(t),i}}},moveStart:{get:function(){return this._moveStart}},moveEnd:{get:function(){return this._moveEnd}},changed:{get:function(){return this._changed}}});mn.prototype.update=function(e){let t=!1;if(e!==this._mode&&(this._mode=e,this._modeChanged=e!==se.MORPHING,t=this._mode===se.SCENE2D),t){let n=this._max2Dfrustum=this.frustum.clone(),i=2,o=n.top/n.right;n.right=this._maxCoord.x*i,n.left=-n.right,n.top=o*n.right,n.bottom=-n.top}this._mode===se.SCENE2D&&D_e(this,this.position)};var Cxt=new m,Txt=new m,Ext=new m;mn.prototype._setTransform=function(e){let t=m.clone(this.positionWC,Cxt),n=m.clone(this.upWC,Txt),i=m.clone(this.directionWC,Ext);F.clone(e,this._transform),this._transformChanged=!0,ul(this);let o=this._actualInvTransform;F.multiplyByPoint(o,t,this.position),F.multiplyByPointAsVector(o,i,this.direction),F.multiplyByPointAsVector(o,n,this.up),m.cross(this.direction,this.up,this.right),ul(this)};var Sxt=new M,_xt=new Cn,Ixt=new m,Zxt=new m;function M_e(e){if(!F.equals(F.IDENTITY,e.transform))return m.magnitude(e.position);let t=e._scene,n=t.globe,i=Sxt;i.x=t.drawingBufferWidth/t.pixelRatio/2,i.y=t.drawingBufferHeight/t.pixelRatio/2;let o;if(l(n)){let a=e.getPickRay(i,_xt);o=n.pickWorldCoordinates(a,t,!0,Ixt)}let r;t.pickPositionSupported&&(r=t.pickPositionWorldCoordinates(i,Zxt));let s;if(l(o)||l(r)){let a=l(r)?m.distance(r,e.positionWC):Number.POSITIVE_INFINITY,c=l(o)?m.distance(o,e.positionWC):Number.POSITIVE_INFINITY;s=Math.min(a,c)}else s=Math.max(e.positionCartographic.height,0);return s}mn.prototype._adjustOrthographicFrustum=function(e){this.frustum instanceof bn&&(!e&&this._positionCartographic.height<15e4||(this.frustum.width=M_e(this)))};var ZO=new m,Tee=new F,Rxt=new F,Eee=new Me,See=new $,v_e=new Ae;function Vxt(e,t,n){let i=F.clone(e.transform,Tee),o=bt.eastNorthUpToFixedFrame(t,e._projection.ellipsoid,Rxt);e._setTransform(o),m.clone(m.ZERO,e.position),n.heading=n.heading-L.PI_OVER_TWO;let r=Me.fromHeadingPitchRoll(n,Eee),s=$.fromQuaternion(r,See);$.getColumn(s,0,e.direction),$.getColumn(s,2,e.up),m.cross(e.direction,e.up,e.right),e._setTransform(i),e._adjustOrthographicFrustum(!0)}function Gxt(e,t,n,i){let o=F.clone(e.transform,Tee);if(e._setTransform(F.IDENTITY),!m.equals(t,e.positionWC)){if(i){let a=e._projection,c=a.ellipsoid.cartesianToCartographic(t,v_e);t=a.project(c,ZO)}m.clone(t,e.position)}n.heading=n.heading-L.PI_OVER_TWO;let r=Me.fromHeadingPitchRoll(n,Eee),s=$.fromQuaternion(r,See);$.getColumn(s,0,e.direction),$.getColumn(s,2,e.up),m.cross(e.direction,e.up,e.right),e._setTransform(o),e._adjustOrthographicFrustum(!0)}function Lxt(e,t,n,i){let o=F.clone(e.transform,Tee);if(e._setTransform(F.IDENTITY),!m.equals(t,e.positionWC)){if(i){let c=e._projection,d=c.ellipsoid.cartesianToCartographic(t,v_e);t=c.project(d,ZO)}M.clone(t,e.position);let r=-t.z*.5,s=-r,a=e.frustum;if(s>r){let c=a.top/a.right;a.right=s,a.left=r,a.top=a.right*c,a.bottom=-a.top}}if(e._scene.mapMode2D===od.ROTATE){n.heading=n.heading-L.PI_OVER_TWO,n.pitch=-L.PI_OVER_TWO,n.roll=0;let r=Me.fromHeadingPitchRoll(n,Eee),s=$.fromQuaternion(r,See);$.getColumn(s,2,e.up),m.cross(e.direction,e.up,e.right)}e._setTransform(o)}var Wxt=new m,Fxt=new m,Bxt=new m;function U_e(e,t,n,i){let o=m.clone(n.direction,Wxt),r=m.clone(n.up,Fxt);if(e._scene.mode===se.SCENE3D){let a=e._projection.ellipsoid,c=bt.eastNorthUpToFixedFrame(t,a,_O),d=F.inverseTransformation(c,IO);F.multiplyByPointAsVector(d,o,o),F.multiplyByPointAsVector(d,r,r)}let s=m.cross(o,r,Bxt);return i.heading=P_e(o,r),i.pitch=X_e(o),i.roll=Y_e(o,r,s),i}var Cee={destination:void 0,orientation:{direction:void 0,up:void 0,heading:void 0,pitch:void 0,roll:void 0},convert:void 0,endTransform:void 0},OZ=new yc;mn.prototype.setView=function(e){e=e??Q.EMPTY_OBJECT;let t=e.orientation??Q.EMPTY_OBJECT,n=this._mode;if(n===se.MORPHING)return;l(e.endTransform)&&this._setTransform(e.endTransform);let i=e.convert??!0,o=e.destination??m.clone(this.positionWC,ZO);l(o)&&l(o.west)&&(o=this.getRectangleCameraCoordinates(o,ZO),i=!1),l(t.direction)&&(t=U_e(this,o,t,Cee.orientation)),OZ.heading=t.heading??0,OZ.pitch=t.pitch??-L.PI_OVER_TWO,OZ.roll=t.roll??0,n===se.SCENE3D?Vxt(this,o,OZ):n===se.SCENE2D?Lxt(this,o,OZ,i):Gxt(this,o,OZ,i)};var wxt=new m;mn.prototype.flyHome=function(e){let t=this._mode;if(t===se.MORPHING&&this._scene.completeMorph(),t===se.SCENE2D)this.flyTo({destination:mn.DEFAULT_VIEW_RECTANGLE,duration:e,endTransform:F.IDENTITY});else if(t===se.SCENE3D){let n=this.getRectangleCameraCoordinates(mn.DEFAULT_VIEW_RECTANGLE),i=m.magnitude(n);i+=i*mn.DEFAULT_VIEW_FACTOR,m.normalize(n,n),m.multiplyByScalar(n,i,n),this.flyTo({destination:n,duration:e,endTransform:F.IDENTITY})}else if(t===se.COLUMBUS_VIEW){let n=this._projection.ellipsoid.maximumRadius,i=new m(0,-1,1);i=m.multiplyByScalar(m.normalize(i,i),5*n,i),this.flyTo({destination:i,duration:e,orientation:{heading:0,pitch:-Math.acos(m.normalize(i,wxt).z),roll:0},endTransform:F.IDENTITY,convert:!1})}};mn.prototype.worldToCameraCoordinates=function(e,t){return l(t)||(t=new re),ul(this),F.multiplyByVector(this._actualInvTransform,e,t)};mn.prototype.worldToCameraCoordinatesPoint=function(e,t){return l(t)||(t=new m),ul(this),F.multiplyByPoint(this._actualInvTransform,e,t)};mn.prototype.worldToCameraCoordinatesVector=function(e,t){return l(t)||(t=new m),ul(this),F.multiplyByPointAsVector(this._actualInvTransform,e,t)};mn.prototype.cameraToWorldCoordinates=function(e,t){return l(t)||(t=new re),ul(this),F.multiplyByVector(this._actualTransform,e,t)};mn.prototype.cameraToWorldCoordinatesPoint=function(e,t){return l(t)||(t=new m),ul(this),F.multiplyByPoint(this._actualTransform,e,t)};mn.prototype.cameraToWorldCoordinatesVector=function(e,t){return l(t)||(t=new m),ul(this),F.multiplyByPointAsVector(this._actualTransform,e,t)};function D_e(e,t){let n=e._scene.mapMode2D===od.ROTATE,i=e._maxCoord.x,o=e._maxCoord.y,r,s;n?(s=i,r=-s):(s=t.x-i*2,r=t.x+i*2),t.x>i&&(t.x=s),t.x<-i&&(t.x=r),t.y>o&&(t.y=o),t.y<-o&&(t.y=-o)}var V_e=new m;mn.prototype.move=function(e,t){let n=this.position;m.multiplyByScalar(e,t,V_e),m.add(n,V_e,n),this._mode===se.SCENE2D&&D_e(this,n),this._adjustOrthographicFrustum(!0)};mn.prototype.moveForward=function(e){e=e??this.defaultMoveAmount,this._mode===se.SCENE2D?RO(this,e):this.move(this.direction,e)};mn.prototype.moveBackward=function(e){e=e??this.defaultMoveAmount,this._mode===se.SCENE2D?RO(this,-e):this.move(this.direction,-e)};mn.prototype.moveUp=function(e){e=e??this.defaultMoveAmount,this.move(this.up,e)};mn.prototype.moveDown=function(e){e=e??this.defaultMoveAmount,this.move(this.up,-e)};mn.prototype.moveRight=function(e){e=e??this.defaultMoveAmount,this.move(this.right,e)};mn.prototype.moveLeft=function(e){e=e??this.defaultMoveAmount,this.move(this.right,-e)};mn.prototype.lookLeft=function(e){e=e??this.defaultLookAmount,this._mode!==se.SCENE2D&&this.look(this.up,-e)};mn.prototype.lookRight=function(e){e=e??this.defaultLookAmount,this._mode!==se.SCENE2D&&this.look(this.up,e)};mn.prototype.lookUp=function(e){e=e??this.defaultLookAmount,this._mode!==se.SCENE2D&&this.look(this.right,-e)};mn.prototype.lookDown=function(e){e=e??this.defaultLookAmount,this._mode!==se.SCENE2D&&this.look(this.right,e)};var Nxt=new Me,Pxt=new $;mn.prototype.look=function(e,t){let n=t??this.defaultLookAmount,i=Me.fromAxisAngle(e,-n,Nxt),o=$.fromQuaternion(i,Pxt),r=this.direction,s=this.up,a=this.right;$.multiplyByVector(o,r,r),$.multiplyByVector(o,s,s),$.multiplyByVector(o,a,a)};mn.prototype.twistLeft=function(e){e=e??this.defaultLookAmount,this.look(this.direction,e)};mn.prototype.twistRight=function(e){e=e??this.defaultLookAmount,this.look(this.direction,-e)};var Xxt=new Me,Yxt=new $;mn.prototype.rotate=function(e,t){let n=t??this.defaultRotateAmount,i=Me.fromAxisAngle(e,-n,Xxt),o=$.fromQuaternion(i,Yxt);$.multiplyByVector(o,this.position,this.position),$.multiplyByVector(o,this.direction,this.direction),$.multiplyByVector(o,this.up,this.up),m.cross(this.direction,this.up,this.right),m.cross(this.right,this.direction,this.up),this._adjustOrthographicFrustum(!1)};mn.prototype.rotateDown=function(e){e=e??this.defaultRotateAmount,k_e(this,e)};mn.prototype.rotateUp=function(e){e=e??this.defaultRotateAmount,k_e(this,-e)};var Mxt=new m,vxt=new m,Uxt=new m,G_e=new m;function k_e(e,t){let n=e.position;if(l(e.constrainedAxis)&&!m.equalsEpsilon(e.position,m.ZERO,L.EPSILON2)){let i=m.normalize(n,Mxt),o=m.equalsEpsilon(i,e.constrainedAxis,L.EPSILON2),r=m.equalsEpsilon(i,m.negate(e.constrainedAxis,G_e),L.EPSILON2);if(!o&&!r){let s=m.normalize(e.constrainedAxis,vxt),a=m.dot(i,s),c=L.acosClamped(a);t>0&&t>c&&(t=c-L.EPSILON4),a=m.dot(i,m.negate(s,G_e)),c=L.acosClamped(a),t<0&&-t>c&&(t=-c+L.EPSILON4);let d=m.cross(s,i,Uxt);e.rotate(d,t)}else(o&&t<0||r&&t>0)&&e.rotate(e.right,t)}else e.rotate(e.right,t)}mn.prototype.rotateRight=function(e){e=e??this.defaultRotateAmount,Q_e(this,-e)};mn.prototype.rotateLeft=function(e){e=e??this.defaultRotateAmount,Q_e(this,e)};function Q_e(e,t){l(e.constrainedAxis)?e.rotate(e.constrainedAxis,t):e.rotate(e.up,t)}function RO(e,t){let n=e.frustum,i;if(t=t*.5,Math.abs(n.top)+Math.abs(n.bottom)>Math.abs(n.left)+Math.abs(n.right)){let o=n.top-t,r=n.bottom+t,s=e._maxCoord.y;e._scene.mapMode2D===od.ROTATE&&(s*=e.maximumZoomFactor),r>s&&(r=s,o=-s),o<=r&&(o=1,r=-1),i=n.right/n.top,n.top=o,n.bottom=r,n.right=n.top*i,n.left=-n.right}else{let o=n.right-t,r=n.left+t,s=e._maxCoord.x;e._scene.mapMode2D===od.ROTATE&&(s*=e.maximumZoomFactor),o>s&&(o=s,r=-s),o<=r&&(o=1,r=-1),i=n.top/n.right,n.right=o,n.left=r,n.top=n.right*i,n.bottom=-n.top}}function O_e(e,t){e.move(e.direction,t)}mn.prototype.zoomIn=function(e){e=e??this.defaultZoomAmount,this._mode===se.SCENE2D?RO(this,e):O_e(this,e)};mn.prototype.zoomOut=function(e){e=e??this.defaultZoomAmount,this._mode===se.SCENE2D?RO(this,-e):O_e(this,-e)};mn.prototype.getMagnitude=function(){if(this._mode===se.SCENE3D)return m.magnitude(this.position);if(this._mode===se.COLUMBUS_VIEW)return Math.abs(this.position.z);if(this._mode===se.SCENE2D)return Math.max(this.frustum.right-this.frustum.left,this.frustum.top-this.frustum.bottom)};var Dxt=new F;mn.prototype.lookAt=function(e,t){let i=this._scene.ellipsoid??ie.default,o=bt.eastNorthUpToFixedFrame(e,i,Dxt);this.lookAtTransform(o,t)};var kxt=new m,Qxt=new Me,Oxt=new Me,zxt=new $;function z_e(e,t,n){t=L.clamp(t,-L.PI_OVER_TWO,L.PI_OVER_TWO),e=L.zeroToTwoPi(e)-L.PI_OVER_TWO;let i=Me.fromAxisAngle(m.UNIT_Y,-t,Qxt),o=Me.fromAxisAngle(m.UNIT_Z,-e,Oxt),r=Me.multiply(o,i,o),s=$.fromQuaternion(r,zxt),a=m.clone(m.UNIT_X,kxt);return $.multiplyByVector(s,a,a),m.negate(a,a),m.multiplyByScalar(a,n,a),a}mn.prototype.lookAtTransform=function(e,t){if(this._setTransform(e),!l(t))return;let n;if(l(t.heading)?n=z_e(t.heading,t.pitch,t.range):n=t,this._mode===se.SCENE2D){M.clone(M.ZERO,this.position),m.negate(n,this.up),this.up.z=0,m.magnitudeSquared(this.up)<L.EPSILON10&&m.clone(m.UNIT_Y,this.up),m.normalize(this.up,this.up),this._setTransform(F.IDENTITY),m.negate(m.UNIT_Z,this.direction),m.cross(this.direction,this.up,this.right),m.normalize(this.right,this.right);let i=this.frustum,o=i.top/i.right;i.right=m.magnitude(n)*.5,i.left=-i.right,i.top=o*i.right,i.bottom=-i.top,this._setTransform(e);return}m.clone(n,this.position),m.negate(this.position,this.direction),m.normalize(this.direction,this.direction),m.cross(this.direction,m.UNIT_Z,this.right),m.magnitudeSquared(this.right)<L.EPSILON10&&m.clone(m.UNIT_X,this.right),m.normalize(this.right,this.right),m.cross(this.right,this.direction,this.up),m.normalize(this.up,this.up),this._adjustOrthographicFrustum(!0)};var RY=new Ae,Hxt=new Ae,Jxt=new m,Kxt=new m,jxt=new m,qxt=new m,$xt=new m,eCt=new m,tCt=new m,bee=new m,nCt={direction:new m,right:new m,up:new m},L_e;function dl(e,t,n,i){return Math.abs(m.dot(t,n))/i-m.dot(e,n)}function H_e(e,t,n,i){let o=e._projection.ellipsoid,r=i?e:nCt,{north:s,south:a,west:c}=t,{east:d}=t;c>d&&(d+=L.TWO_PI);let u=(c+d)*.5,h;if(a<-L.PI_OVER_TWO+L.RADIANS_PER_DEGREE&&s>L.PI_OVER_TWO-L.RADIANS_PER_DEGREE)h=0;else{let N=RY;N.longitude=u,N.latitude=s,N.height=0;let P=Hxt;P.longitude=u,P.latitude=a,P.height=0;let g=L_e;(!l(g)||g.ellipsoid!==o)&&(L_e=g=new NA(void 0,void 0,o)),g.setEndPoints(N,P),h=g.interpolateUsingFraction(.5,RY).latitude}let p=RY;p.longitude=u,p.latitude=h,p.height=0;let A=o.cartographicToCartesian(p,tCt),f=RY;f.longitude=d,f.latitude=s;let b=o.cartographicToCartesian(f,Jxt);f.longitude=c;let C=o.cartographicToCartesian(f,jxt);f.longitude=u;let T=o.cartographicToCartesian(f,$xt);f.latitude=a;let E=o.cartographicToCartesian(f,eCt);f.longitude=d;let S=o.cartographicToCartesian(f,qxt);f.longitude=c;let I=o.cartographicToCartesian(f,Kxt);m.subtract(C,A,C),m.subtract(S,A,S),m.subtract(b,A,b),m.subtract(I,A,I),m.subtract(T,A,T),m.subtract(E,A,E);let R=o.geodeticSurfaceNormal(A,r.direction);m.negate(R,R);let V=m.cross(R,m.UNIT_Z,r.right);m.normalize(V,V);let W=m.cross(V,R,r.up),B;if(e.frustum instanceof bn){let N=Math.max(m.distance(b,C),m.distance(S,I)),P=Math.max(m.distance(b,S),m.distance(C,I)),g,_,Z=e.frustum._offCenterFrustum,G=Z.right/Z.top,w=P*G;N>w?(g=N,_=g/G):(_=P,g=w),B=Math.max(g,_)}else{let N=Math.tan(e.frustum.fovy*.5),P=e.frustum.aspectRatio*N;if(B=Math.max(dl(R,W,C,N),dl(R,W,S,N),dl(R,W,b,N),dl(R,W,I,N),dl(R,W,T,N),dl(R,W,E,N),dl(R,V,C,P),dl(R,V,S,P),dl(R,V,b,P),dl(R,V,I,P),dl(R,V,T,P),dl(R,V,E,P)),a<0&&s>0){let g=RY;g.longitude=c,g.latitude=0,g.height=0;let _=o.cartographicToCartesian(g,bee);m.subtract(_,A,_),B=Math.max(B,dl(R,W,_,N),dl(R,V,_,P)),g.longitude=d,_=o.cartographicToCartesian(g,bee),m.subtract(_,A,_),B=Math.max(B,dl(R,W,_,N),dl(R,V,_,P))}}return m.add(A,m.multiplyByScalar(R,-B,bee),n)}var iCt=new Ae,oCt=new m,rCt=new m;function sCt(e,t,n){let i=e._projection;t.west>t.east&&(t=de.MAX_VALUE);let o=e._actualTransform,r=e._actualInvTransform,s=iCt;s.longitude=t.east,s.latitude=t.north;let a=i.project(s,oCt);F.multiplyByPoint(o,a,a),F.multiplyByPoint(r,a,a),s.longitude=t.west,s.latitude=t.south;let c=i.project(s,rCt);if(F.multiplyByPoint(o,c,c),F.multiplyByPoint(r,c,c),n.x=(a.x-c.x)*.5+c.x,n.y=(a.y-c.y)*.5+c.y,l(e.frustum.fovy)){let d=Math.tan(e.frustum.fovy*.5),u=e.frustum.aspectRatio*d;n.z=Math.max((a.x-c.x)/u,(a.y-c.y)/d)*.5}else{let d=a.x-c.x,u=a.y-c.y;n.z=Math.max(d,u)}return n}var aCt=new Ae,cCt=new m,lCt=new m;function dCt(e,t,n){let i=e._projection,o=t.east;t.west>t.east&&(e._scene.mapMode2D===od.INFINITE_SCROLL?o+=L.TWO_PI:(t=de.MAX_VALUE,o=t.east));let r=aCt;r.longitude=o,r.latitude=t.north;let s=i.project(r,cCt);r.longitude=t.west,r.latitude=t.south;let a=i.project(r,lCt),c=Math.abs(s.x-a.x)*.5,d=Math.abs(s.y-a.y)*.5,u,h,p=e.frustum.right/e.frustum.top,A=d*p;return c>A?(u=c,h=u/p):(h=d,u=A),d=Math.max(2*u,2*h),n.x=(s.x-a.x)*.5+a.x,n.y=(s.y-a.y)*.5+a.y,r=i.unproject(n,r),r.height=d,n=i.project(r,n),n}mn.prototype.getRectangleCameraCoordinates=function(e,t){let n=this._mode;if(l(t)||(t=new m),n===se.SCENE3D)return H_e(this,e,t);if(n===se.COLUMBUS_VIEW)return sCt(this,e,t);if(n===se.SCENE2D)return dCt(this,e,t)};var uCt=new Cn;function mCt(e,t,n,i){n=n??ie.default;let o=e.getPickRay(t,uCt),r=hi.rayEllipsoid(o,n);if(!r)return;let s=r.start>0?r.start:r.stop;return Cn.getPoint(o,s,i)}var hCt=new Cn;function fCt(e,t,n,i){let r=e.getPickRay(t,hCt).origin;r=m.fromElements(r.y,r.z,0,r);let s=n.unproject(r);if(!(s.latitude<-L.PI_OVER_TWO||s.latitude>L.PI_OVER_TWO))return n.ellipsoid.cartographicToCartesian(s,i)}var pCt=new Cn;function ACt(e,t,n,i){let o=e.getPickRay(t,pCt),r=-o.origin.x/o.direction.x;Cn.getPoint(o,r,i);let s=n.unproject(new m(i.y,i.z,0));if(!(s.latitude<-L.PI_OVER_TWO||s.latitude>L.PI_OVER_TWO||s.longitude<-Math.PI||s.longitude>Math.PI))return n.ellipsoid.cartographicToCartesian(s,i)}mn.prototype.pickEllipsoid=function(e,t,n){let i=this._scene.canvas;if(!(i.clientWidth===0||i.clientHeight===0)){if(l(n)||(n=new m),t=t??ie.default,this._mode===se.SCENE3D)n=mCt(this,e,t,n);else if(this._mode===se.SCENE2D)n=fCt(this,e,this._projection,n);else if(this._mode===se.COLUMBUS_VIEW)n=ACt(this,e,this._projection,n);else return;return n}};var gCt=new m,bCt=new m,yCt=new m;function xCt(e,t,n){let i=e._scene.canvas,o=i.clientWidth,r=i.clientHeight,s=Math.tan(e.frustum.fovy*.5),a=e.frustum.aspectRatio*s,c=e.frustum.near,d=2/o*t.x-1,u=2/r*(r-t.y)-1,h=e.positionWC;m.clone(h,n.origin);let p=m.multiplyByScalar(e.directionWC,c,gCt);m.add(h,p,p);let A=m.multiplyByScalar(e.rightWC,d*c*a,bCt),f=m.multiplyByScalar(e.upWC,u*c*s,yCt),b=m.add(p,A,n.direction);return m.add(b,f,b),m.subtract(b,h,b),m.normalize(b,b),n}var EO=new m;function CCt(e,t,n){let i=e._scene.canvas,o=i.clientWidth,r=i.clientHeight,s=e.frustum,a=s.offCenterFrustum;l(a)&&(s=a);let c=2/o*t.x-1;c*=(s.right-s.left)*.5;let d=2/r*(r-t.y)-1;d*=(s.top-s.bottom)*.5;let u=n.origin;if(m.clone(e.positionWC,u),m.multiplyByScalar(e.rightWC,c,EO),m.add(EO,u,u),m.multiplyByScalar(e.upWC,d,EO),m.add(EO,u,u),m.clone(e.directionWC,n.direction),e._mode===se.SCENE2D&&e._scene.mapMode2D===od.INFINITE_SCROLL){let h=e._maxCoord.x;u.y=L.mod(u.y+h,2*h)-h}return n}mn.prototype.getPickRay=function(e,t){l(t)||(t=new Cn);let n=this._scene.canvas;if(n.clientWidth<=0||n.clientHeight<=0)return;let i=this.frustum;return l(i.aspectRatio)&&l(i.fov)&&l(i.near)?xCt(this,e,t):CCt(this,e,t)};var TCt=new m,ECt=new m;mn.prototype.distanceToBoundingSphere=function(e){let t=m.subtract(this.positionWC,e.center,TCt),n=m.multiplyByScalar(this.directionWC,m.dot(t,this.directionWC),ECt);return Math.max(0,m.magnitude(n)-e.radius)};var SCt=new M;mn.prototype.getPixelSize=function(e,t,n){let i=this.distanceToBoundingSphere(e),o=this.frustum.getPixelDimensions(t,n,i,this._scene.pixelRatio,SCt);return Math.max(o.x,o.y)};function _Ct(e,t,n,i,o,r){let s=m.clone(t);n.y>i?s.y-=n.y-i:n.y<-i&&(s.y+=-i-n.y),n.z>o?s.z-=n.z-o:n.z<-o&&(s.z+=-o-n.z);function a(c){let d=m.lerp(t,s,c.time,new m);e.worldToCameraCoordinatesPoint(d,e.position)}return{easingFunction:Ts.EXPONENTIAL_OUT,startObject:{time:0},stopObject:{time:1},duration:r,update:a}}var ICt=new m,W_e=new m,ZCt=new m,RCt=new m;function VCt(e,t){let n=e.position,i=e.direction,o=e.worldToCameraCoordinatesVector(m.UNIT_X,ICt),r=-m.dot(o,n)/m.dot(o,i),s=m.add(n,m.multiplyByScalar(i,r,W_e),W_e);e.cameraToWorldCoordinatesPoint(s,s),n=e.cameraToWorldCoordinatesPoint(e.position,ZCt);let a=Math.tan(e.frustum.fovy*.5),c=e.frustum.aspectRatio*a,d=m.magnitude(m.subtract(n,s,RCt)),u=c*d,h=a*d,p=e._maxCoord.x,A=e._maxCoord.y,f=Math.max(u-p,p),b=Math.max(h-A,A);if(n.z<-f||n.z>f||n.y<-b||n.y>b){let C=s.y<-f||s.y>f,T=s.z<-b||s.z>b;if(C||T)return _Ct(e,n,s,f,b,t)}}mn.prototype.createCorrectPositionTween=function(e){if(this._mode===se.COLUMBUS_VIEW)return VCt(this,e)};var GCt=new m,za={destination:void 0,heading:void 0,pitch:void 0,roll:void 0,duration:void 0,complete:void 0,cancel:void 0,endTransform:void 0,maximumHeight:void 0,easingFunction:void 0};mn.prototype.cancelFlight=function(){l(this._currentFlight)&&(this._currentFlight.cancelTween(),this._currentFlight=void 0)};mn.prototype.completeFlight=function(){if(l(this._currentFlight)){this._currentFlight.cancelTween();let e={destination:void 0,orientation:{heading:void 0,pitch:void 0,roll:void 0}};e.destination=za.destination,e.orientation.heading=za.heading,e.orientation.pitch=za.pitch,e.orientation.roll=za.roll,this.setView(e),l(this._currentFlight.complete)&&this._currentFlight.complete(),this._currentFlight=void 0}};mn.prototype.flyTo=function(e){e=e??Q.EMPTY_OBJECT;let t=e.destination;if(this._mode===se.MORPHING)return;this.cancelFlight();let i=t instanceof de;i&&(t=this.getRectangleCameraCoordinates(t,GCt));let o=e.orientation??Q.EMPTY_OBJECT;if(l(o.direction)&&(o=U_e(this,t,o,Cee.orientation)),l(e.duration)&&e.duration<=0){let u=Cee;u.destination=e.destination,u.orientation.heading=o.heading,u.orientation.pitch=o.pitch,u.orientation.roll=o.roll,u.convert=e.convert,u.endTransform=e.endTransform,this.setView(u),typeof e.complete=="function"&&e.complete();return}let r=this,s;za.destination=t,za.heading=o.heading,za.pitch=o.pitch,za.roll=o.roll,za.duration=e.duration,za.complete=function(){s===r._currentFlight&&(r._currentFlight=void 0),l(e.complete)&&e.complete()},za.cancel=e.cancel,za.endTransform=e.endTransform,za.convert=i?!1:e.convert,za.maximumHeight=e.maximumHeight,za.pitchAdjustHeight=e.pitchAdjustHeight,za.flyOverLongitude=e.flyOverLongitude,za.flyOverLongitudeWeight=e.flyOverLongitudeWeight,za.easingFunction=e.easingFunction;let a=this._scene,c=ZY.createTween(a,za);if(c.duration===0){typeof c.complete=="function"&&c.complete();return}s=a.tweens.add(c),this._currentFlight=s;let d=this._scene.preloadFlightCamera;this._mode!==se.SCENE2D&&(l(d)||(d=mn.clone(this)),d.setView({destination:t,orientation:o}),this._scene.preloadFlightCullingVolume=d.frustum.computeCullingVolume(d.positionWC,d.directionWC,d.upWC))};function LCt(e,t){let n=e.frustum,i=Math.tan(n.fovy*.5),o=n.aspectRatio*i;return Math.max(t/o,t/i)}function WCt(e,t){let n=e.frustum,i=n.offCenterFrustum;l(i)&&(n=i);let o,r,s=n.right/n.top,a=t*s;return t>a?(o=t,r=o/s):(r=t,o=a),Math.max(o,r)*1.5}var FCt=100;function J_e(e,t,n){n=jm.clone(l(n)?n:mn.DEFAULT_OFFSET);let i=e._scene.screenSpaceCameraController.minimumZoomDistance,o=e._scene.screenSpaceCameraController.maximumZoomDistance,r=n.range;if(!l(r)||r===0){let s=t.radius;s===0?n.range=FCt:e.frustum instanceof bn||e._mode===se.SCENE2D?n.range=WCt(e,s):n.range=LCt(e,s),n.range=L.clamp(n.range,i,o)}return n}mn.prototype.viewBoundingSphere=function(e,t){t=J_e(this,e,t),this.lookAt(e.center,t)};var BCt=new F,wCt=new m,NCt=new m,PCt=new m,XCt=new m,YCt=new re,MCt=new Me,vCt=new $;mn.prototype.flyToBoundingSphere=function(e,t){t=t??Q.EMPTY_OBJECT;let n=this._mode===se.SCENE2D||this._mode===se.COLUMBUS_VIEW;this._setTransform(F.IDENTITY);let i=J_e(this,e,t.offset),o;n?o=m.multiplyByScalar(m.UNIT_Z,i.range,wCt):o=z_e(i.heading,i.pitch,i.range);let s=this._scene.ellipsoid??ie.default,a=bt.eastNorthUpToFixedFrame(e.center,s,BCt);F.multiplyByPoint(a,o,o);let c,d;if(!n){if(c=m.subtract(e.center,o,NCt),m.normalize(c,c),d=F.multiplyByPointAsVector(a,m.UNIT_Z,PCt),1-Math.abs(m.dot(c,d))<L.EPSILON6){let h=Me.fromAxisAngle(c,i.heading,MCt),p=$.fromQuaternion(h,vCt);m.fromCartesian4(F.getColumn(a,1,YCt),d),$.multiplyByVector(p,d,d)}let u=m.cross(c,d,XCt);m.cross(u,c,d),m.normalize(d,d)}this.flyTo({destination:o,orientation:{direction:c,up:d},duration:t.duration,complete:t.complete,cancel:t.cancel,endTransform:t.endTransform,maximumHeight:t.maximumHeight,easingFunction:t.easingFunction,flyOverLongitude:t.flyOverLongitude,flyOverLongitudeWeight:t.flyOverLongitudeWeight,pitchAdjustHeight:t.pitchAdjustHeight})};var F_e=new m,B_e=new m,yee=new m,w_e=new m,VY=[new m,new m,new m,new m];function UCt(e,t){let n=t.radii,i=e.positionWC,o=m.multiplyComponents(t.oneOverRadii,i,F_e),r=m.magnitude(o),s=m.normalize(o,B_e),a,c;m.equalsEpsilon(s,m.UNIT_Z,L.EPSILON10)?(a=new m(0,1,0),c=new m(0,0,1)):(a=m.normalize(m.cross(m.UNIT_Z,s,yee),yee),c=m.normalize(m.cross(s,a,w_e),w_e));let d=Math.sqrt(m.magnitudeSquared(o)-1),u=m.multiplyByScalar(s,1/r,F_e),h=d/r,p=m.multiplyByScalar(a,h,B_e),A=m.multiplyByScalar(c,h,yee),f=m.add(u,A,VY[0]);m.subtract(f,p,f),m.multiplyComponents(n,f,f);let b=m.subtract(u,A,VY[1]);m.subtract(b,p,b),m.multiplyComponents(n,b,b);let C=m.subtract(u,A,VY[2]);m.add(C,p,C),m.multiplyComponents(n,C,C);let T=m.add(u,A,VY[3]);return m.add(T,p,T),m.multiplyComponents(n,T,T),VY}var xee=new M,DCt=new m,ky=[new Ae,new Ae,new Ae,new Ae];function SO(e,t,n,i,o,r){xee.x=e,xee.y=t;let s=i.pickEllipsoid(xee,o,DCt);return l(s)?(ky[n]=o.cartesianToCartographic(s,ky[n]),1):(ky[n]=o.cartesianToCartographic(r[n],ky[n]),0)}mn.prototype.computeViewRectangle=function(e,t){e=e??ie.default;let n=this.frustum.computeCullingVolume(this.positionWC,this.directionWC,this.upWC),i=new ue(m.ZERO,e.maximumRadius);if(n.computeVisibility(i)===qt.OUTSIDE)return;let r=this._scene.canvas,s=r.clientWidth,a=r.clientHeight,c=0,d=UCt(this,e);if(c+=SO(0,0,0,this,e,d),c+=SO(0,a,1,this,e,d),c+=SO(s,a,2,this,e,d),c+=SO(s,0,3,this,e,d),c<2)return de.MAX_VALUE;t=de.fromCartographicArray(ky,t);let u=0,h=ky[3].longitude;for(let p=0;p<4;++p){let A=ky[p].longitude,f=Math.abs(A-h);f>L.PI?u+=L.TWO_PI-f:u+=f,h=A}return L.equalsEpsilon(Math.abs(u),L.TWO_PI,L.EPSILON9)&&(t.west=-L.PI,t.east=L.PI,ky[0].latitude>=0?t.north=L.PI_OVER_TWO:t.south=-L.PI_OVER_TWO),t};mn.prototype.switchToPerspectiveFrustum=function(){if(this._mode===se.SCENE2D||this.frustum instanceof Ui)return;let e=this._scene;this.frustum=new Ui,this.frustum.aspectRatio=e.drawingBufferWidth/e.drawingBufferHeight,this.frustum.fov=L.toRadians(60)};mn.prototype.switchToOrthographicFrustum=function(){if(this._mode===se.SCENE2D||this.frustum instanceof bn)return;let e=M_e(this),t=this._scene;this.frustum=new bn,this.frustum.aspectRatio=t.drawingBufferWidth/t.drawingBufferHeight,this.frustum.width=e};mn.clone=function(e,t){return l(t)||(t=new mn(e._scene)),m.clone(e.position,t.position),m.clone(e.direction,t.direction),m.clone(e.up,t.up),m.clone(e.right,t.right),F.clone(e._transform,t.transform),t._transformChanged=!0,t.frustum=e.frustum.clone(),t};var Zo=mn;var Gqi=y(x(),1);function kCt(e){this.pass=e.pass,this.commandList=e.commandList,this.camera=e.camera,this.cullingVolume=e.cullingVolume,this.ready=!1}var rh=kCt;var Pqi=y(x(),1);var eIe=y(qd(),1),K_e=576,QCt=100,GY="#ffffff",VO="#48b";function tIe(e,t){this.credit=e,this.count=t??1}function OCt(e,t){let n=e.length;for(let i=0;i<n;i++){let o=e[i];if(Et.equals(o,t))return!0}return!1}function zCt(e){let t=e._previousCesiumCredit,n=e._currentCesiumCredit;Et.equals(n,t)||(l(t)&&e._cesiumCreditContainer.removeChild(t.element),l(n)&&e._cesiumCreditContainer.appendChild(n.element),e._previousCesiumCredit=n)}var nIe="cesium-credit-delimiter";function j_e(e){let t=document.createElement("span");return t.textContent=e,t.className=nIe,t}function q_e(e,t){if(l(t)){let n=document.createElement(t);n._creditId=e._creditId,n.appendChild(e),e=n}return e}function $_e(e,t,n,i){let o=e.childNodes,r=-1;t.sort(function(s,a){return a.count-s.count});for(let s=0;s<t.length;++s){let a=t[s].credit;if(l(a)){if(r=s,l(n)&&(r*=2,s>0)){let d=r-1;if(o.length<=d)e.appendChild(j_e(n));else{let u=o[d];u.className!==nIe&&e.replaceChild(j_e(n),u)}}let c=a.element;if(o.length<=r)e.appendChild(q_e(c,i));else{let d=o[r];d._creditId!==a._id&&e.replaceChild(q_e(c,i),d)}}}for(++r;r<o.length;)e.removeChild(o[r])}function HCt(e){let t=e._lightboxCredits,n=e.viewport.clientWidth,i=e.viewport.clientHeight;n!==e._lastViewportWidth&&(n<K_e?(t.className="cesium-credit-lightbox cesium-credit-lightbox-mobile",t.style.marginTop="0"):(t.className="cesium-credit-lightbox cesium-credit-lightbox-expanded",t.style.marginTop=`${Math.floor((i-t.clientHeight)*.5)}px`),e._lastViewportWidth=n),n>=K_e&&i!==e._lastViewportHeight&&(t.style.marginTop=`${Math.floor((i-t.clientHeight)*.5)}px`,e._lastViewportHeight=i)}function JCt(e){let t=`
.cesium-credit-lightbox-overlay {
display: none;
z-index: 1;
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-color: rgba(80, 80, 80, 0.8);
}
.cesium-credit-lightbox {
background-color: #303336;
color: ${GY};
position: relative;
min-height: ${QCt}px;
margin: auto;
}
.cesium-credit-lightbox > ul > li a,
.cesium-credit-lightbox > ul > li a:visited,
.cesium-credit-wrapper a,
.cesium-credit-wrapper a:visited {
color: ${GY};
}
.cesium-credit-lightbox > ul > li a:hover {
color: ${VO};
}
.cesium-credit-lightbox.cesium-credit-lightbox-expanded {
border: 1px solid #444;
border-radius: 5px;
max-width: 470px;
}
.cesium-credit-lightbox.cesium-credit-lightbox-mobile {
height: 100%;
width: 100%;
}
.cesium-credit-lightbox-title {
padding: 20px 20px 0 20px;
}
.cesium-credit-lightbox-close {
font-size: 18pt;
cursor: pointer;
position: absolute;
top: 0;
right: 6px;
color: ${GY};
}
.cesium-credit-lightbox-close:hover {
color: ${VO};
}
.cesium-credit-lightbox > ul {
margin: 0;
padding: 12px 20px 12px 40px;
font-size: 13px;
}
.cesium-credit-lightbox > ul > li {
padding-bottom: 6px;
}
.cesium-credit-lightbox > ul > li * {
padding: 0;
margin: 0;
}
.cesium-credit-expand-link {
padding-left: 5px;
cursor: pointer;
text-decoration: underline;
color: ${GY};
}
.cesium-credit-expand-link:hover {
color: ${VO};
}
.cesium-credit-text {
color: ${GY};
}
.cesium-credit-delimiter {
padding: 0 5px;
}
.cesium-credit-textContainer *,
.cesium-credit-logoContainer * {
display: inline;
}
.cesium-credit-textContainer a:hover {
color: ${VO}
}
.cesium-credit-textContainer .cesium-credit-wrapper:first-of-type {
padding-left: 5px;
}
`;function n(r){if(r.shadowRoot)return r.shadowRoot;if(r.getRootNode){let s=r.getRootNode();if(s instanceof ShadowRoot)return s}}let i=n(e)??document.head,o=document.createElement("style");o.innerHTML=t,i.appendChild(o)}function Ur(e,t,n){let i=this;n=n??document.body;let o=document.createElement("div");o.className="cesium-credit-lightbox-overlay",n.appendChild(o);let r=document.createElement("div");r.className="cesium-credit-lightbox",o.appendChild(r);function s(f){r.contains(f.target)||i.hideLightbox()}o.addEventListener("click",s,!1);let a=document.createElement("div");a.className="cesium-credit-lightbox-title",a.textContent="Data provided by:",r.appendChild(a);let c=document.createElement("a");c.onclick=this.hideLightbox.bind(this),c.innerHTML="&times;",c.className="cesium-credit-lightbox-close",r.appendChild(c);let d=document.createElement("ul");r.appendChild(d);let u=document.createElement("div");u.className="cesium-credit-logoContainer",u.style.display="inline",e.appendChild(u);let h=document.createElement("div");h.className="cesium-credit-textContainer",h.style.display="inline",e.appendChild(h);let p=document.createElement("a");p.className="cesium-credit-expand-link",p.onclick=this.showLightbox.bind(this),p.textContent="Data attribution",e.appendChild(p),JCt(e);let A=Et.clone(Ur.cesiumCredit);this._delimiter=t??"\u2022",this._screenContainer=h,this._cesiumCreditContainer=u,this._lastViewportHeight=void 0,this._lastViewportWidth=void 0,this._lightboxCredits=r,this._creditList=d,this._lightbox=o,this._hideLightbox=s,this._expandLink=p,this._expanded=!1,this._staticCredits=[],this._cesiumCredit=A,this._previousCesiumCredit=void 0,this._currentCesiumCredit=A,this._creditDisplayElementPool=[],this._creditDisplayElementIndex=0,this._currentFrameCredits={screenCredits:new Xt,lightboxCredits:new Xt},this._defaultCredit=void 0,this.viewport=n,this.container=e}function iIe(e,t,n,i){i=i??1;let o=t.get(n.id);if(l(o))o.count<Number.MAX_VALUE&&(o.count+=i);else{let r=e._creditDisplayElementPool,s=e._creditDisplayElementPoolIndex;s<r.length?(o=r[s],o.credit=n,o.count=i):(o=new tIe(n,i),r.push(o)),++e._creditDisplayElementPoolIndex,t.set(n.id,o)}}Ur.prototype.addCreditToNextFrame=function(e){if(e.isIon()){l(this._defaultCredit)||(this._defaultCredit=Et.clone(oIe())),this._currentCesiumCredit=this._defaultCredit;return}let t;e.showOnScreen?t=this._currentFrameCredits.screenCredits:t=this._currentFrameCredits.lightboxCredits,iIe(this,t,e)};Ur.prototype.addStaticCredit=function(e){let t=this._staticCredits;OCt(t,e)||t.push(e)};Ur.prototype.removeStaticCredit=function(e){let t=this._staticCredits,n=t.indexOf(e);n!==-1&&t.splice(n,1)};Ur.prototype.showLightbox=function(){this._lightbox.style.display="block",this._expanded=!0};Ur.prototype.hideLightbox=function(){this._lightbox.style.display="none",this._expanded=!1};Ur.prototype.update=function(){this._expanded&&HCt(this)};Ur.prototype.beginFrame=function(){let e=this._currentFrameCredits;this._creditDisplayElementPoolIndex=0;let t=e.screenCredits,n=e.lightboxCredits;t.removeAll(),n.removeAll();let i=this._staticCredits;for(let o=0;o<i.length;++o){let r=i[o],s=r.showOnScreen?t:n;r.isIon()&&Et.equals(Ur.cesiumCredit,this._cesiumCredit)||iIe(this,s,r,Number.MAX_VALUE)}Et.equals(Ur.cesiumCredit,this._cesiumCredit)||(this._cesiumCredit=Et.clone(Ur.cesiumCredit)),this._currentCesiumCredit=this._cesiumCredit};Ur.prototype.endFrame=function(){let e=this._currentFrameCredits.screenCredits.values;$_e(this._screenContainer,e,this._delimiter,void 0);let t=this._currentFrameCredits.lightboxCredits.values;this._expandLink.style.display=t.length>0?"inline":"none",$_e(this._creditList,t,void 0,"li"),zCt(this)};Ur.prototype.destroy=function(){return this._lightbox.removeEventListener("click",this._hideLightbox,!1),this.container.removeChild(this._cesiumCreditContainer),this.container.removeChild(this._screenContainer),this.container.removeChild(this._expandLink),this.viewport.removeChild(this._lightbox),he(this)};Ur.prototype.isDestroyed=function(){return!1};Ur._cesiumCredit=void 0;Ur._cesiumCreditInitialized=!1;var GO;function oIe(){if(!l(GO)){let e=en("Assets/Images/ion-credit.png");e.indexOf("http://")!==0&&e.indexOf("https://")!==0&&e.indexOf("data:")!==0&&(e=new eIe.default(e).path()),GO=new Et(`<a href="https://cesium.com/" target="_blank"><img src="${e}" style="vertical-align: -7px" title="Cesium ion"/></a>`,!0)}return Ur._cesiumCreditInitialized||(Ur._cesiumCredit=GO,Ur._cesiumCreditInitialized=!0),GO}Object.defineProperties(Ur,{cesiumCredit:{get:function(){return oIe(),Ur._cesiumCredit},set:function(e){Ur._cesiumCredit=e,Ur._cesiumCreditInitialized=!0}}});Ur.CreditDisplayElement=tIe;var LY=Ur;var n$i=y(x(),1);function LO(e){e=e??Q.EMPTY_OBJECT,this._camera=e.camera,this._frustumSplits=e.frustumSplits,this._color=e.color??U.CYAN,this._updateOnChange=e.updateOnChange??!0,this.show=e.show??!0,this.id=e.id,this._id=void 0,this._outlinePrimitives=[],this._planesPrimitives=[]}var KCt=new m,jCt=new $,qCt=new Me,$Ct=new Ui,eTt=new id,tTt=new bn,nTt=new as,iTt=new U,oTt=[1,1e5];LO.prototype.update=function(e){if(!this.show)return;let t=this._planesPrimitives,n=this._outlinePrimitives,i,o;if(this._updateOnChange){for(o=t.length,i=0;i<o;++i)n[i]=n[i]&&n[i].destroy(),t[i]=t[i]&&t[i].destroy();t.length=0,n.length=0}if(t.length===0){let r=this._camera,s=r.frustum,a;s instanceof Ui?a=$Ct:s instanceof id?a=eTt:s instanceof bn?a=tTt:a=nTt,a=s.clone(a);let c,d=this._frustumSplits;!l(d)||d.length<=1?(d=oTt,d[0]=this._camera.frustum.near,d[1]=this._camera.frustum.far,c=1):c=d.length-1;let u=r.positionWC,h=r.directionWC,p=r.upWC,A=r.rightWC;A=m.negate(A,KCt);let f=jCt;$.setColumn(f,0,A,f),$.setColumn(f,1,p,f),$.setColumn(f,2,h,f);let b=Me.fromRotationMatrix(f,qCt);for(t.length=n.length=c,i=0;i<c;++i)a.near=d[i],a.far=d[i+1],t[i]=new Nn({geometryInstances:new wt({geometry:new eE({origin:u,orientation:b,frustum:a,_drawNearPlane:i===0}),attributes:{color:$t.fromColor(U.fromAlpha(this._color,.1,iTt))},id:this.id,pickPrimitive:this}),appearance:new yn({translucent:!0,flat:!0}),asynchronous:!1}),n[i]=new Nn({geometryInstances:new wt({geometry:new RX({origin:u,orientation:b,frustum:a,_drawNearPlane:i===0}),attributes:{color:$t.fromColor(this._color)},id:this.id,pickPrimitive:this}),appearance:new yn({translucent:!1,flat:!0}),asynchronous:!1})}for(o=t.length,i=0;i<o;++i)n[i].update(e),t[i].update(e)};LO.prototype.isDestroyed=function(){return!1};LO.prototype.destroy=function(){let e=this._planesPrimitives.length;for(let t=0;t<e;++t)this._outlinePrimitives[t]=this._outlinePrimitives[t]&&this._outlinePrimitives[t].destroy(),this._planesPrimitives[t]=this._planesPrimitives[t]&&this._planesPrimitives[t].destroy();return he(this)};var tA=LO;var S$i=y(x(),1);function FY(e){this._rs=void 0,this._sp=void 0,this._va=void 0,this._command=void 0,this._mode=void 0,this._useLogDepth=!1,this._ellipsoidOffset=e??0}var WY=hn.supportsTypedArrays()?new Float32Array(12):[],rIe=new m,sIe=new m,_ee=new m,aIe=new m,WO=new m;function rTt(e,t){let n=e.radii,i=t.camera,o,r,s;if(i.frustum instanceof bn)o=m.ZERO,r=i.rightWC,s=i.upWC;else{let h=i.positionWC,p=m.multiplyComponents(e.oneOverRadii,h,rIe),A=m.normalize(p,sIe),f=m.normalize(m.cross(m.UNIT_Z,p,_ee),_ee),b=m.normalize(m.cross(A,f,aIe),aIe),C=m.magnitude(p),T=Math.sqrt(C*C-1);o=m.multiplyByScalar(A,1/C,rIe);let E=T/C;r=m.multiplyByScalar(f,E,sIe),s=m.multiplyByScalar(b,E,_ee)}let a=m.add(o,s,WO);m.subtract(a,r,a),m.multiplyComponents(n,a,a),m.pack(a,WY,0);let c=m.subtract(o,s,WO);m.subtract(c,r,c),m.multiplyComponents(n,c,c),m.pack(c,WY,3);let d=m.add(o,s,WO);m.add(d,r,d),m.multiplyComponents(n,d,d),m.pack(d,WY,6);let u=m.subtract(o,s,WO);return m.add(u,r,u),m.multiplyComponents(n,u,u),m.pack(u,WY,9),WY}FY.prototype.update=function(e){if(this._mode=e.mode,e.mode!==se.SCENE3D)return;let t=e.context,n=e.mapProjection.ellipsoid.radii,i=new ie(n.x+this._ellipsoidOffset,n.y+this._ellipsoidOffset,n.z+this._ellipsoidOffset),o=e.useLogDepth;if(l(this._command)||(this._rs=Qe.fromCache({cull:{enabled:!0},depthTest:{enabled:!0},colorMask:{red:!1,green:!1,blue:!1,alpha:!1}}),this._command=new ot({renderState:this._rs,boundingVolume:new ue(m.ZERO,i.maximumRadius),pass:Ge.OPAQUE,owner:this})),!l(this._sp)||this._useLogDepth!==o){this._useLogDepth=o;let s=new ze({sources:[jX]}),a=new ze({sources:[KX]});o&&(a.defines.push("LOG_DEPTH"),s.defines.push("LOG_DEPTH")),this._sp=tn.replaceCache({shaderProgram:this._sp,context:t,vertexShaderSource:s,fragmentShaderSource:a,attributeLocations:{position:0}}),this._command.shaderProgram=this._sp}let r=rTt(i,e);if(l(this._va))this._va.getAttribute(0).vertexBuffer.copyFromArrayView(r);else{let s=new Ct({attributes:{position:new we({componentDatatype:H.FLOAT,componentsPerAttribute:3,values:r})},indices:[0,1,2,2,1,3],primitiveType:We.TRIANGLES});this._va=kn.fromGeometry({context:t,geometry:s,attributeLocations:{position:0},bufferUsage:Be.DYNAMIC_DRAW}),this._command.vertexArray=this._va}};FY.prototype.execute=function(e,t){this._mode===se.SCENE3D&&this._command.execute(e,t)};FY.prototype.isDestroyed=function(){return!1};FY.prototype.destroy=function(){this._sp=this._sp&&this._sp.destroy(),this._va=this._va&&this._va.destroy()};var BY=FY;var B$i=y(x(),1);function HZ(){}var sTt=/\bgl_FragDepth\b/,aTt=/\bdiscard\b/;function cTt(e,t){let n=e.shaderCache.getDerivedShaderProgram(t,"depthOnly");if(l(n))return n;let i=t.fragmentShaderSource,o=!1,r=i.sources;for(let a=0;a<r.length;++a)if(sTt.test(r[a])||aTt.test(r[a])){o=!0;break}let s=i.defines.indexOf("LOG_DEPTH")>=0;if(!o&&!s){let a=`void main()
{
out_FragColor = vec4(1.0);
}
`;i=new ze({sources:[a]})}else if(!o&&s){let a=`void main()
{
out_FragColor = vec4(1.0);
czm_writeLogDepth();
}
`;i=new ze({defines:["LOG_DEPTH"],sources:[a]})}return e.shaderCache.createDerivedShaderProgram(t,"depthOnly",{vertexShaderSource:t.vertexShaderSource,fragmentShaderSource:i,attributeLocations:t._attributeLocations})}function lTt(e,t){let n=e._depthOnlyRenderStateCache,i=n[t.id];if(l(i))return i;let o=Qe.getState(t);o.depthMask=!0,o.colorMask={red:!1,green:!1,blue:!1,alpha:!1};let r=Qe.fromCache(o);return n[t.id]=r,r}HZ.createDepthOnlyDerivedCommand=function(e,t,n,i){l(i)||(i={});let o=i.depthOnlyCommand?.shaderProgram,r=i.depthOnlyCommand?.renderState;return i.depthOnlyCommand=ot.shallowClone(t,i.depthOnlyCommand),!l(o)||i.shaderProgramId!==t.shaderProgram.id?(i.depthOnlyCommand.shaderProgram=cTt(n,t.shaderProgram),i.depthOnlyCommand.renderState=lTt(e,t.renderState),i.shaderProgramId=t.shaderProgram.id):(i.depthOnlyCommand.shaderProgram=o,i.depthOnlyCommand.renderState=r),i};var dTt=/\s+czm_writeLogDepth\(/,uTt=/\s+czm_vertexLogDepth\(/;function mTt(e,t){if(t.fragmentShaderSource.defines.indexOf("LOG_DEPTH_READ_ONLY")>=0)return t;let i=e.shaderCache.getDerivedShaderProgram(t,"logDepth");if(l(i))return i;let o=t._attributeLocations,r=t.vertexShaderSource.clone(),s=t.fragmentShaderSource.clone();r.defines=l(r.defines)?r.defines.slice(0):[],r.defines.push("LOG_DEPTH"),s.defines=l(s.defines)?s.defines.slice(0):[],s.defines.push("LOG_DEPTH");let a=!1,c=r.sources;for(let u=0;u<c.length;++u)if(uTt.test(c[u])){a=!0;break}if(!a){for(let h=0;h<c.length;++h)c[h]=ze.replaceMain(c[h],"czm_log_depth_main");c.push(`
void main()
{
czm_log_depth_main();
czm_vertexLogDepth();
}
`)}c=s.sources,a=!1;for(let u=0;u<c.length;++u)dTt.test(c[u])&&(a=!0);s.defines.indexOf("LOG_DEPTH_WRITE")!==-1&&(a=!0);let d="";if(!a){for(let u=0;u<c.length;u++)c[u]=ze.replaceMain(c[u],"czm_log_depth_main");d=`
void main()
{
czm_log_depth_main();
czm_writeLogDepth();
}
`}return c.push(d),e.shaderCache.createDerivedShaderProgram(t,"logDepth",{vertexShaderSource:r,fragmentShaderSource:s,attributeLocations:o})}HZ.createLogDepthCommand=function(e,t,n){l(n)||(n={});let i=n.command?.shaderProgram;return n.command=ot.shallowClone(e,n.command),!l(i)||n.shaderProgramId!==e.shaderProgram.id?(n.command.shaderProgram=mTt(t,e.shaderProgram),n.shaderProgramId=e.shaderProgram.id):n.command.shaderProgram=i,n};function hTt(e,t,n){let i=e.shaderCache.getDerivedShaderProgram(t,"pick");if(l(i))return i;Object.prototype.toString.call(n)==="[object Object]"&&(n.color?n=`vec4(${U.floatToByte(n.color.red)}, ${U.floatToByte(n.color.green)}, ${U.floatToByte(n.color.blue)}, ${U.floatToByte(n.color.alpha)})`:n="vec4(1.0)");let o=t._attributeLocations,{sources:r,defines:s}=t.fragmentShaderSource,c=r.some(A=>A.includes("out_FragData"))?"out_FragData_0":"out_FragColor",d=`void main ()
{
czm_non_pick_main();
if (${c}.a == 0.0) {
discard;
}
${c} = ${n};
} `,u=r.length,h=new Array(u+1);for(let A=0;A<u;++A)h[A]=ze.replaceMain(r[A],"czm_non_pick_main");h[u]=d;let p=new ze({sources:h,defines:s});return e.shaderCache.createDerivedShaderProgram(t,"pick",{vertexShaderSource:t.vertexShaderSource,fragmentShaderSource:p,attributeLocations:o})}function cIe(e,t){let n=e.picking.pickRenderStateCache,i=n[t.id];if(l(i))return i;let o=Qe.getState(t);o.blending.enabled=!1,o.depthMask=!0;let r=Qe.fromCache(o);return n[t.id]=r,r}HZ.createPickDerivedCommand=function(e,t,n,i){l(i)||(i={});let o=i.pickCommand?.shaderProgram,r=i.pickCommand?.renderState;return i.pickCommand=ot.shallowClone(t,i.pickCommand),!l(o)||i.shaderProgramId!==t.shaderProgram.id?(i.pickCommand.shaderProgram=hTt(n,t.shaderProgram,t.pickId),i.pickCommand.renderState=cIe(e,t.renderState),i.shaderProgramId=t.shaderProgram.id):(i.pickCommand.shaderProgram=o,i.pickCommand.renderState=r),i};function zZ(e,t,n){let i=e.length;for(let o=0;o<i;o++)e[o].trimStart().split(/\s+/)[0]===t&&(e[o]=`${t} ${n}`)}function fTt(e){return e.isArray?e.arrayLength:St.getComponentCount(e.type)}function lIe(e,t,n){return`((${e} - float(${t})) / float(${n}))`}function dIe(e,t){let n=Yt.getMaximum(t);return`(${e}) / float(${n})`}function pTt(e,t){let n="float(value)";if(t.hasValueTransform){let i=t.offset,o=t.scale;n=lIe(n,i,o)}return e.normalized||(n=dIe(n,e.componentType)),n}function ATt(e,t,n){let o=`float(${`value.${n}`})`;if(t.hasValueTransform){let r=t.offset[n],s=t.scale[n];o=lIe(o,r,s)}return e.normalized||(o=dIe(o,e.componentType)),o}function gTt(e,t,n){let i=n.schemaId,o=n.className,r=n.propertyName,s=`pickMetadata-${i}-${o}-${r}`,a=e.shaderCache.getDerivedShaderProgram(t,s);if(l(a))return a;let c=n.metadataProperty,d=n.classProperty,u=d.getGlslType(),h=["0.0","0.0","0.0","0.0"],p=fTt(d);if(p===1)h[0]=pTt(d,c);else{let C=["x","y","z","w"];for(let T=0;T<p;T++)h[T]=ATt(d,c,C[T])}let A=t.fragmentShaderSource.defines.slice();A.push(Au.METADATA_PICKING_ENABLED),zZ(A,Au.METADATA_PICKING_VALUE_TYPE,u),zZ(A,Au.METADATA_PICKING_VALUE_STRING,`metadata.${r}`),zZ(A,Au.METADATA_PICKING_VALUE_COMPONENT_X,h[0]),zZ(A,Au.METADATA_PICKING_VALUE_COMPONENT_Y,h[1]),zZ(A,Au.METADATA_PICKING_VALUE_COMPONENT_Z,h[2]),zZ(A,Au.METADATA_PICKING_VALUE_COMPONENT_W,h[3]);let f=new ze({sources:t.fragmentShaderSource.sources,defines:A});return e.shaderCache.createDerivedShaderProgram(t,s,{vertexShaderSource:t.vertexShaderSource,fragmentShaderSource:f,attributeLocations:t._attributeLocations})}HZ.createPickMetadataDerivedCommand=function(e,t,n,i){return l(i)||(i={}),i.pickMetadataCommand=ot.shallowClone(t,i.pickMetadataCommand),i.pickMetadataCommand.shaderProgram=gTt(n,t.shaderProgram,t.pickedMetadataInfo),i.pickMetadataCommand.renderState=cIe(e,t.renderState),i.shaderProgramId=t.shaderProgram.id,i};function bTt(e,t){let n=e.shaderCache.getDerivedShaderProgram(t,"HDR");if(l(n))return n;let i=t._attributeLocations,o=t.vertexShaderSource.clone(),r=t.fragmentShaderSource.clone();return o.defines=l(o.defines)?o.defines.slice(0):[],o.defines.push("HDR"),r.defines=l(r.defines)?r.defines.slice(0):[],r.defines.push("HDR"),e.shaderCache.createDerivedShaderProgram(t,"HDR",{vertexShaderSource:o,fragmentShaderSource:r,attributeLocations:i})}HZ.createHdrCommand=function(e,t,n){l(n)||(n={});let i=n.command?.shaderProgram;return n.command=ot.shallowClone(e,n.command),!l(i)||n.shaderProgramId!==e.shaderProgram.id?(n.command.shaderProgram=bTt(t,e.shaderProgram),n.shaderProgramId=e.shaderProgram.id):n.command.shaderProgram=i,n};var nA=HZ;var v$i=y(x(),1);function FO(e){this._scene=e,this._lastAlpha=void 0,this._lastBeta=void 0,this._lastGamma=void 0,this._alpha=void 0,this._beta=void 0,this._gamma=void 0;let t=this;function n(i){let o=i.alpha;if(!l(o)){t._alpha=void 0,t._beta=void 0,t._gamma=void 0;return}t._alpha=L.toRadians(o),t._beta=L.toRadians(i.beta),t._gamma=L.toRadians(i.gamma)}window.addEventListener("deviceorientation",n,!1),this._removeListener=function(){window.removeEventListener("deviceorientation",n,!1)}}var yTt=new Me,uIe=new Me,xTt=new $;function CTt(e,t,n,i){let o=e.direction,r=e.right,s=e.up,a=Me.fromAxisAngle(o,n,uIe),c=Me.fromAxisAngle(r,i,yTt),d=Me.multiply(c,a,c),u=Me.fromAxisAngle(s,t,uIe);Me.multiply(u,d,d);let h=$.fromQuaternion(d,xTt);$.multiplyByVector(h,r,r),$.multiplyByVector(h,s,s),$.multiplyByVector(h,o,o)}FO.prototype.update=function(){if(!l(this._alpha))return;l(this._lastAlpha)||(this._lastAlpha=this._alpha,this._lastBeta=this._beta,this._lastGamma=this._gamma);let e=this._lastAlpha-this._alpha,t=this._lastBeta-this._beta,n=this._lastGamma-this._gamma;CTt(this._scene.camera,-e,t,n),this._lastAlpha=this._alpha,this._lastBeta=this._beta,this._lastGamma=this._gamma};FO.prototype.isDestroyed=function(){return!1};FO.prototype.destroy=function(){return this._removeListener(),he(this)};var wY=FO;var z$i=y(x(),1);function Iee(){this.enabled=!0,this.renderable=!0,this.density=6e-4,this.heightScalar=.001,this._heightFalloff=.59,this.maxHeight=8e5,this.visualDensityScalar=.15,this.screenSpaceErrorFactor=2,this.minimumBrightness=.03}Object.defineProperties(Iee.prototype,{heightFalloff:{get:function(){return this._heightFalloff},set:function(e){this._heightFalloff=e}}});var TTt=new m;Iee.prototype.update=function(e){if(!(e.fog.enabled=this.enabled))return;e.fog.renderable=this.renderable;let n=e.camera,i=n.positionCartographic;if(!l(i)||i.height>this.maxHeight||e.mode!==se.SCENE3D){e.fog.enabled=!1,e.fog.density=0;return}let o=i.height,r=this.density*this.heightScalar*Math.pow(Math.max(o/this.maxHeight,L.EPSILON4),-Math.max(this._heightFalloff,0)),s=m.normalize(n.positionWC,TTt),a=Math.abs(m.dot(n.directionWC,s));r*=1-a,e.fog.density=r,e.fog.visualDensityScalar=this.visualDensityScalar,e.fog.sse=this.screenSpaceErrorFactor,e.fog.minimumBrightness=this.minimumBrightness};var NY=Iee;var K$i=y(x(),1);function ETt(e,t,n){this.context=e,this.commandList=[],this.panoramaCommandList=[],this.shadowMaps=[],this.brdfLutGenerator=void 0,this.environmentMap=void 0,this.sphericalHarmonicCoefficients=void 0,this.specularEnvironmentMaps=void 0,this.specularEnvironmentMapsMaximumLOD=void 0,this.mode=se.SCENE3D,this.morphTime=se.getMorphTime(se.SCENE3D),this.frameNumber=0,this.newFrame=!1,this.time=void 0,this.jobScheduler=n,this.mapProjection=void 0,this.camera=void 0,this.cameraUnderground=!1,this.globeTranslucencyState=void 0,this.cullingVolume=void 0,this.occluder=void 0,this.maximumScreenSpaceError=void 0,this.pixelRatio=1,this.passes={render:!1,pick:!1,pickVoxel:!1,depth:!1,postProcess:!1,offscreen:!1},this.creditDisplay=t,this.afterRender=[],this.scene3DOnly=!1,this.fog={enabled:!1,renderable:!1,density:void 0,visualDensityScalar:void 0,sse:void 0,minimumBrightness:void 0},this.atmosphere=void 0,this.verticalExaggeration=1,this.verticalExaggerationRelativeHeight=0,this.shadowState={shadowsEnabled:!0,shadowMaps:[],lightShadowMaps:[],nearPlane:1,farPlane:5e3,closestObjectSize:1e3,lastDirtyTime:0,outOfView:!0},this.splitPosition=0,this.frustumSplits=[],this.backgroundColor=void 0,this.light=void 0,this.minimumDisableDepthTestDistance=void 0,this.invertClassification=!1,this.invertClassificationColor=void 0,this.useLogDepth=!1,this.tilesetPassState=void 0,this.minimumTerrainHeight=0,this.pickingMetadata=!1,this.pickedMetadataInfo=void 0,this.edgeVisibilityRequested=!1}var PY=ETt;var leo=y(x(),1);var fc={OPAQUE_FRONT_FACE:0,OPAQUE_BACK_FACE:1,DEPTH_ONLY_FRONT_FACE:2,DEPTH_ONLY_BACK_FACE:3,DEPTH_ONLY_FRONT_AND_BACK_FACE:4,TRANSLUCENT_FRONT_FACE:5,TRANSLUCENT_BACK_FACE:6,TRANSLUCENT_FRONT_FACE_MANUAL_DEPTH_TEST:7,TRANSLUCENT_BACK_FACE_MANUAL_DEPTH_TEST:8,PICK_FRONT_FACE:9,PICK_BACK_FACE:10,DERIVED_COMMANDS_MAXIMUM_LENGTH:11},dE=fc.DERIVED_COMMANDS_MAXIMUM_LENGTH,CIe=["opaqueFrontFaceCommand","opaqueBackFaceCommand","depthOnlyFrontFaceCommand","depthOnlyBackFaceCommand","depthOnlyFrontAndBackFaceCommand","translucentFrontFaceCommand","translucentBackFaceCommand","translucentFrontFaceManualDepthTestCommand","translucentBackFaceManualDepthTestCommand","pickFrontFaceCommand","pickBackFaceCommand"];function uE(){this._frontFaceAlphaByDistance=new Ot(0,1,0,1),this._backFaceAlphaByDistance=new Ot(0,1,0,1),this._frontFaceTranslucent=!1,this._backFaceTranslucent=!1,this._requiresManualDepthTest=!1,this._sunVisibleThroughGlobe=!1,this._environmentVisible=!1,this._useDepthPlane=!1,this._numberOfTextureUniforms=0,this._globeTranslucencyFramebuffer=void 0,this._rectangle=de.clone(de.MAX_VALUE),this._derivedCommandKey=0,this._derivedCommandsDirty=!1,this._derivedCommandPacks=void 0,this._derivedCommandTypes=new Array(dE),this._derivedBlendCommandTypes=new Array(dE),this._derivedPickCommandTypes=new Array(dE),this._derivedCommandTypesToUpdate=new Array(dE),this._derivedCommandsLength=0,this._derivedBlendCommandsLength=0,this._derivedPickCommandsLength=0,this._derivedCommandsToUpdateLength=0}Object.defineProperties(uE.prototype,{frontFaceAlphaByDistance:{get:function(){return this._frontFaceAlphaByDistance}},backFaceAlphaByDistance:{get:function(){return this._backFaceAlphaByDistance}},translucent:{get:function(){return this._frontFaceTranslucent}},sunVisibleThroughGlobe:{get:function(){return this._sunVisibleThroughGlobe}},environmentVisible:{get:function(){return this._environmentVisible}},useDepthPlane:{get:function(){return this._useDepthPlane}},numberOfTextureUniforms:{get:function(){return this._numberOfTextureUniforms}},rectangle:{get:function(){return this._rectangle}}});uE.prototype.update=function(e){let t=e.globe;if(!l(t)||!t.show){this._frontFaceTranslucent=!1,this._backFaceTranslucent=!1,this._sunVisibleThroughGlobe=!0,this._environmentVisible=!0,this._useDepthPlane=!1;return}this._frontFaceAlphaByDistance=mIe(t.translucency.enabled,t.translucency.frontFaceAlpha,t.translucency.frontFaceAlphaByDistance,this._frontFaceAlphaByDistance),this._backFaceAlphaByDistance=mIe(t.translucency.enabled,t.translucency.backFaceAlpha,t.translucency.backFaceAlphaByDistance,this._backFaceAlphaByDistance),this._frontFaceTranslucent=hIe(t.translucency.enabled,this._frontFaceAlphaByDistance,t),this._backFaceTranslucent=hIe(t.translucency.enabled,this._backFaceAlphaByDistance,t),this._requiresManualDepthTest=ZTt(this,e,t),this._sunVisibleThroughGlobe=STt(this,e),this._environmentVisible=_Tt(this,e),this._useDepthPlane=ITt(this,e),this._numberOfTextureUniforms=RTt(this),this._rectangle=de.clone(t.translucency.rectangle,this._rectangle),VTt(this,e)};function mIe(e,t,n,i){return e?l(n)?(Ot.clone(n,i),i.nearValue*=t,i.farValue*=t,i):(i.nearValue=t,i.farValue=t,i):(i.nearValue=1,i.farValue=1,i)}function hIe(e,t,n){return e&&(n.baseColor.alpha<1||t.nearValue<1||t.farValue<1)}function STt(e,t){let n=e._frontFaceTranslucent,i=e._backFaceTranslucent;return n&&(t.cameraUnderground||i)}function _Tt(e,t){return!t.cameraUnderground||e._frontFaceTranslucent}function ITt(e,t){return!t.cameraUnderground&&!e._frontFaceTranslucent}function ZTt(e,t,n){return e._frontFaceTranslucent&&!e._backFaceTranslucent&&!n.depthTestAgainstTerrain&&t.mode!==se.SCENE2D&&t.context.depthTexture}function RTt(e){let t=0;return e._frontFaceTranslucent&&++t,e._requiresManualDepthTest&&++t,t}function VTt(e,t){e._derivedCommandsLength=Zee(e,t,!1,!1,e._derivedCommandTypes),e._derivedBlendCommandsLength=Zee(e,t,!0,!1,e._derivedBlendCommandTypes),e._derivedPickCommandsLength=Zee(e,t,!1,!0,e._derivedPickCommandTypes);let n,i=0;for(n=0;n<e._derivedCommandsLength;++n)i|=1<<e._derivedCommandTypes[n];for(n=0;n<e._derivedBlendCommandsLength;++n)i|=1<<e._derivedBlendCommandTypes[n];for(n=0;n<e._derivedPickCommandsLength;++n)i|=1<<e._derivedPickCommandTypes[n];let o=0;for(n=0;n<dE;++n)(i&1<<n)>0&&(e._derivedCommandTypesToUpdate[o++]=n);e._derivedCommandsToUpdateLength=o;let r=i!==e._derivedCommandKey;e._derivedCommandKey=i,e._derivedCommandsDirty=r,!l(e._derivedCommandPacks)&&e._frontFaceTranslucent&&(e._derivedCommandPacks=kTt())}function Zee(e,t,n,i,o){let r=0,s=e._frontFaceTranslucent,a=e._backFaceTranslucent;if(!s)return r;let c=t.cameraUnderground,d=e._requiresManualDepthTest,u=i?fc.PICK_FRONT_FACE:d?fc.TRANSLUCENT_FRONT_FACE_MANUAL_DEPTH_TEST:fc.TRANSLUCENT_FRONT_FACE,h=i?fc.PICK_BACK_FACE:d?fc.TRANSLUCENT_BACK_FACE_MANUAL_DEPTH_TEST:fc.TRANSLUCENT_BACK_FACE;return t.mode===se.SCENE2D?(o[r++]=fc.DEPTH_ONLY_FRONT_FACE,o[r++]=u,r):(a?(n||(o[r++]=fc.DEPTH_ONLY_FRONT_AND_BACK_FACE),c?(o[r++]=u,o[r++]=h):(o[r++]=h,o[r++]=u)):c?(n||(o[r++]=fc.DEPTH_ONLY_BACK_FACE),o[r++]=fc.OPAQUE_FRONT_FACE,o[r++]=h):(n||(o[r++]=fc.DEPTH_ONLY_FRONT_FACE),o[r++]=fc.OPAQUE_BACK_FACE,o[r++]=u),r)}function sh(e,t){let n=e.indexOf(t);n>-1&&e.splice(n,1)}function fIe(e,t){return e.indexOf(t)>-1}function GTt(e,t){sh(e.defines,"TRANSLUCENT"),sh(t.defines,"TRANSLUCENT")}function LTt(e,t){sh(e.defines,"GROUND_ATMOSPHERE"),sh(t.defines,"GROUND_ATMOSPHERE"),sh(e.defines,"FOG"),sh(t.defines,"FOG"),sh(e.defines,"TRANSLUCENT"),sh(t.defines,"TRANSLUCENT")}function Ree(e,t){if(fIe(t.defines,"TILE_LIMIT_RECTANGLE")||fIe(t.defines,"ENABLE_CLIPPING_PLANES"))return;let n=`void main()
{
out_FragColor = vec4(1.0);
}
`;t.sources=[n]}function Vee(e,t){let n=t.sources,i=n.length;for(let r=0;r<i;++r)n[r]=ze.replaceMain(n[r],"czm_globe_translucency_main");n.push(`
uniform sampler2D u_classificationTexture;
void main()
{
vec2 st = gl_FragCoord.xy / czm_viewport.zw;
#ifdef MANUAL_DEPTH_TEST
float logDepthOrDepth = czm_unpackDepth(texture(czm_globeDepthTexture, st));
if (logDepthOrDepth != 0.0)
{
vec4 eyeCoordinate = czm_windowToEyeCoordinates(gl_FragCoord.xy, logDepthOrDepth);
float depthEC = eyeCoordinate.z / eyeCoordinate.w;
if (v_positionEC.z < depthEC)
{
discard;
}
}
#endif
czm_globe_translucency_main();
vec4 classificationColor = texture(u_classificationTexture, st);
if (classificationColor.a > 0.0)
{
// Reverse premultiplication process to get the correct composited result of the classification primitives
classificationColor.rgb /= classificationColor.a;
}
out_FragColor = classificationColor * vec4(classificationColor.aaa, 1.0) + out_FragColor * (1.0 - classificationColor.a);
}
`)}function TIe(e,t){Vee(e,t),sh(e.defines,"GROUND_ATMOSPHERE"),sh(t.defines,"GROUND_ATMOSPHERE"),sh(e.defines,"FOG"),sh(t.defines,"FOG")}function WTt(e,t){Vee(e,t),e.defines.push("GENERATE_POSITION"),t.defines.push("MANUAL_DEPTH_TEST")}function FTt(e,t){TIe(e,t),e.defines.push("GENERATE_POSITION"),t.defines.push("MANUAL_DEPTH_TEST")}function pIe(e,t){let n=`uniform sampler2D u_classificationTexture;
void main()
{
vec2 st = gl_FragCoord.xy / czm_viewport.zw;
vec4 pickColor = texture(u_classificationTexture, st);
if (pickColor == vec4(0.0))
{
discard;
}
out_FragColor = pickColor;
}
`;t.sources=[n]}function BTt(e,t,n,i,o,r){if(!l(o))return t;if(!i&&l(n))return n;let s=e.shaderCache.getDerivedShaderProgram(t,r);if(!l(s)){let a=t._attributeLocations,c=t.vertexShaderSource.clone(),d=t.fragmentShaderSource.clone();c.defines=l(c.defines)?c.defines.slice(0):[],d.defines=l(d.defines)?d.defines.slice(0):[],o(c,d),s=e.shaderCache.createDerivedShaderProgram(t,r,{vertexShaderSource:c,fragmentShaderSource:d,attributeLocations:a})}return s}function wTt(e){e.cull.face=wi.BACK,e.cull.enabled=!0}function NTt(e){e.cull.face=wi.FRONT,e.cull.enabled=!0}function PTt(e){e.cull.face=wi.BACK,e.cull.enabled=!0,e.colorMask={red:!1,green:!1,blue:!1,alpha:!1}}function XTt(e){e.cull.face=wi.FRONT,e.cull.enabled=!0,e.colorMask={red:!1,green:!1,blue:!1,alpha:!1}}function YTt(e){e.cull.enabled=!1,e.colorMask={red:!1,green:!1,blue:!1,alpha:!1}}function AIe(e){e.cull.face=wi.BACK,e.cull.enabled=!0,e.depthMask=!1,e.blending=ln.ALPHA_BLEND}function gIe(e){e.cull.face=wi.FRONT,e.cull.enabled=!0,e.depthMask=!1,e.blending=ln.ALPHA_BLEND}function MTt(e){e.cull.face=wi.BACK,e.cull.enabled=!0,e.blending.enabled=!1}function vTt(e){e.cull.face=wi.FRONT,e.cull.enabled=!0,e.blending.enabled=!1}function UTt(e,t,n,i,o){if(!l(i))return e;if(!n&&l(t))return t;let r=o[e.id];if(!l(r)){let s=Qe.getState(e);i(s),r=Qe.fromCache(s),o[e.id]=r}return r}function JZ(e){return{u_classificationTexture:function(){return e._globeTranslucencyFramebuffer.classificationTexture}}}function DTt(e,t,n,i,o){return l(o)?!i&&l(n)?n:Ft(t,o(e),!1):t}function Yf(e){this.pass=e.pass,this.pickOnly=e.pickOnly,this.getShaderProgramFunction=e.getShaderProgramFunction,this.getRenderStateFunction=e.getRenderStateFunction,this.getUniformMapFunction=e.getUniformMapFunction,this.renderStateCache={}}function kTt(){return[new Yf({pass:Ge.GLOBE,pickOnly:!1,getShaderProgramFunction:GTt,getRenderStateFunction:wTt,getUniformMapFunction:void 0}),new Yf({pass:Ge.GLOBE,pickOnly:!1,getShaderProgramFunction:LTt,getRenderStateFunction:NTt,getUniformMapFunction:void 0}),new Yf({pass:Ge.GLOBE,pickOnly:!1,getShaderProgramFunction:Ree,getRenderStateFunction:PTt,getUniformMapFunction:void 0}),new Yf({pass:Ge.GLOBE,pickOnly:!1,getShaderProgramFunction:Ree,getRenderStateFunction:XTt,getUniformMapFunction:void 0}),new Yf({pass:Ge.GLOBE,pickOnly:!1,getShaderProgramFunction:Ree,getRenderStateFunction:YTt,getUniformMapFunction:void 0}),new Yf({pass:Ge.TRANSLUCENT,pickOnly:!1,getShaderProgramFunction:Vee,getRenderStateFunction:AIe,getUniformMapFunction:JZ}),new Yf({pass:Ge.TRANSLUCENT,pickOnly:!1,getShaderProgramFunction:TIe,getRenderStateFunction:gIe,getUniformMapFunction:JZ}),new Yf({pass:Ge.TRANSLUCENT,pickOnly:!1,getShaderProgramFunction:WTt,getRenderStateFunction:AIe,getUniformMapFunction:JZ}),new Yf({pass:Ge.TRANSLUCENT,pickOnly:!1,getShaderProgramFunction:FTt,getRenderStateFunction:gIe,getUniformMapFunction:JZ}),new Yf({pass:Ge.TRANSLUCENT,pickOnly:!0,getShaderProgramFunction:pIe,getRenderStateFunction:MTt,getUniformMapFunction:JZ}),new Yf({pass:Ge.TRANSLUCENT,pickOnly:!0,getShaderProgramFunction:pIe,getRenderStateFunction:vTt,getUniformMapFunction:JZ})]}var bIe=new Array(dE),yIe=new Array(dE);uE.prototype.updateDerivedCommands=function(e,t){let n=this._derivedCommandTypesToUpdate,i=this._derivedCommandsToUpdateLength;if(i!==0){for(let o=0;o<i;++o)yIe[o]=this._derivedCommandPacks[n[o]],bIe[o]=CIe[n[o]];QTt(this,e,i,n,bIe,yIe,t)}};function QTt(e,t,n,i,o,r,s){let a=t.derivedCommands.globeTranslucency,c=e._derivedCommandsDirty;if(t.dirty||!l(a)||c){t.dirty=!1,l(a)||(a={},t.derivedCommands.globeTranslucency=a);let d=s.frameNumber,u=a.uniformMapDirtyFrame??0,h=a.shaderProgramDirtyFrame??0,p=a.renderStateDirtyFrame??0,A=a.uniformMap!==t.uniformMap,f=a.shaderProgramId!==t.shaderProgram.id,b=a.renderStateId!==t.renderState.id;A&&(a.uniformMapDirtyFrame=d),f&&(a.shaderProgramDirtyFrame=d),b&&(a.renderStateDirtyFrame=d),a.uniformMap=t.uniformMap,a.shaderProgramId=t.shaderProgram.id,a.renderStateId=t.renderState.id;for(let C=0;C<n;++C){let T=r[C],E=i[C],S=o[C],I=a[S],R,V,W;l(I)?(R=I.uniformMap,V=I.shaderProgram,W=I.renderState):(R=void 0,V=void 0,W=void 0),I=ot.shallowClone(t,I),a[S]=I;let B=I.derivedCommands.uniformMapDirtyFrame??0,N=I.derivedCommands.shaderProgramDirtyFrame??0,P=I.derivedCommands.renderStateDirtyFrame??0,g=A||B<u,_=f||N<h,Z=b||P<p;g&&(I.derivedCommands.uniformMapDirtyFrame=d),_&&(I.derivedCommands.shaderProgramDirtyFrame=d),Z&&(I.derivedCommands.renderStateDirtyFrame=d),I.derivedCommands.type=E,I.pass=T.pass,I.pickOnly=T.pickOnly,I.uniformMap=DTt(e,t.uniformMap,R,g,T.getUniformMapFunction),I.shaderProgram=BTt(s.context,t.shaderProgram,V,_,T.getShaderProgramFunction,S),I.renderState=UTt(t.renderState,W,Z,T.getRenderStateFunction,T.renderStateCache)}}}uE.prototype.pushDerivedCommands=function(e,t,n){let i=n.passes.pick||n.passes.pickVoxel;if(i&&t)return;let o=this._derivedCommandTypes,r=this._derivedCommandsLength;if(i?(o=this._derivedPickCommandTypes,r=this._derivedPickCommandsLength):t&&(o=this._derivedBlendCommandTypes,r=this._derivedBlendCommandsLength),r===0){n.commandList.push(e);return}let s=e.derivedCommands.globeTranslucency;for(let a=0;a<r;++a){let c=CIe[o[a]];n.commandList.push(s[c])}};function EIe(e,t,n,i,o,r){for(let s=0;s<t;++s){let a=e[s],c=a.derivedCommands.type;(!l(r)||r.indexOf(c)>-1)&&n(a,i,o)}}function xIe(e,t,n,i,o){for(let r=0;r<t;++r)n(e[r],i,o)}var OTt=[fc.OPAQUE_FRONT_FACE,fc.OPAQUE_BACK_FACE],zTt=[fc.DEPTH_ONLY_FRONT_FACE,fc.DEPTH_ONLY_BACK_FACE,fc.DEPTH_ONLY_FRONT_AND_BACK_FACE];uE.prototype.executeGlobeCommands=function(e,t,n,i,o){let r=i.context,s=e.commands[Ge.GLOBE],a=e.indices[Ge.GLOBE];a!==0&&(this._globeTranslucencyFramebuffer=n,n.clearClassification(r,o),EIe(s,a,t,i,o,OTt))};uE.prototype.executeGlobeClassificationCommands=function(e,t,n,i,o){let{context:r}=i,{uniformState:s}=r,a=e.commands[Ge.GLOBE],c=e.indices[Ge.GLOBE],d=e.commands[Ge.TERRAIN_CLASSIFICATION],u=e.indices[Ge.TERRAIN_CLASSIFICATION];if(c===0||u===0)return;let h=this._frontFaceTranslucent,p=this._backFaceTranslucent;if((!h||!p)&&xIe(d,u,t,i,o),!h&&!p)return;this._globeTranslucencyFramebuffer=n;let A=s.globeDepthTexture,f=o.framebuffer;if(o.framebuffer=n.classificationFramebuffer,EIe(a,c,t,i,o,zTt),r.depthTexture){let b=n.packDepth(r,o);s.globeDepthTexture=b}xIe(d,u,t,i,o),s.globeDepthTexture=A,o.framebuffer=f};var XY=uE;var Geo=y(x(),1);var ueo=y(x(),1),vd=`uniform sampler2D colorTexture;
in vec2 v_textureCoordinates;
void main()
{
out_FragColor = texture(colorTexture, v_textureCoordinates);
}
`;function iA(){this._numSamples=1,this.previousFramebuffer=void 0,this._previousFramebuffer=void 0,this._depthStencilTexture=void 0,this._depthStencilRenderbuffer=void 0,this._fbo=new Ti({depthStencil:!0,createDepthAttachments:!1}),this._fboClassified=new Ti({depthStencil:!0,createDepthAttachments:!1}),this._rsUnclassified=void 0,this._rsClassified=void 0,this._unclassifiedCommand=void 0,this._classifiedCommand=void 0,this._translucentCommand=void 0,this._clearColorCommand=new mi({color:new U(0,0,0,0),owner:this}),this._clearCommand=new mi({color:new U(0,0,0,0),depth:1,stencil:0});let e=this;this._uniformMap={colorTexture:function(){return e._fbo.getColorTexture()},depthTexture:function(){return e._depthStencilTexture},classifiedTexture:function(){return e._fboClassified.getColorTexture()}}}Object.defineProperties(iA.prototype,{unclassifiedCommand:{get:function(){return this._unclassifiedCommand}}});iA.isTranslucencySupported=function(e){return e.depthTexture&&e.fragmentDepth};var HTt={depthMask:!1,stencilTest:{enabled:!0,frontFunction:ni.EQUAL,frontOperation:{fail:Vt.KEEP,zFail:Vt.KEEP,zPass:Vt.KEEP},backFunction:ni.NEVER,reference:0,mask:Jt.CLASSIFICATION_MASK},blending:ln.ALPHA_BLEND},JTt={depthMask:!1,stencilTest:{enabled:!0,frontFunction:ni.NOT_EQUAL,frontOperation:{fail:Vt.KEEP,zFail:Vt.KEEP,zPass:Vt.KEEP},backFunction:ni.NEVER,reference:0,mask:Jt.CLASSIFICATION_MASK},blending:ln.ALPHA_BLEND},KTt={depthMask:!0,depthTest:{enabled:!0},stencilTest:Jt.setCesium3DTileBit(),stencilMask:Jt.CESIUM_3D_TILE_MASK,blending:ln.ALPHA_BLEND},jTt=`uniform sampler2D colorTexture;
uniform sampler2D depthTexture;
uniform sampler2D classifiedTexture;
in vec2 v_textureCoordinates;
void main()
{
vec4 color = texture(colorTexture, v_textureCoordinates);
if (color.a == 0.0)
{
discard;
}
bool isClassified = all(equal(texture(classifiedTexture, v_textureCoordinates), vec4(0.0)));
#ifdef UNCLASSIFIED
vec4 highlightColor = czm_invertClassificationColor;
if (isClassified)
{
discard;
}
#else
vec4 highlightColor = vec4(1.0);
if (!isClassified)
{
discard;
}
#endif
out_FragColor = color * highlightColor;
gl_FragDepth = texture(depthTexture, v_textureCoordinates).r;
}
`,qTt=`uniform sampler2D colorTexture;
in vec2 v_textureCoordinates;
void main()
{
vec4 color = texture(colorTexture, v_textureCoordinates);
if (color.a == 0.0)
{
discard;
}
#ifdef UNCLASSIFIED
out_FragColor = color * czm_invertClassificationColor;
#else
out_FragColor = color;
#endif
}
`;iA.prototype.update=function(e,t,n){let i=this._fbo.getColorTexture(),o=this.previousFramebuffer!==this._previousFramebuffer;this._previousFramebuffer=this.previousFramebuffer;let r=this._numSamples!==t,s=e.drawingBufferWidth,a=e.drawingBufferHeight,c=!l(i)||i.width!==s||i.height!==a;if((c||o||r)&&(this._numSamples=t,this._depthStencilTexture=this._depthStencilTexture&&this._depthStencilTexture.destroy(),this._depthStencilRenderbuffer=this._depthStencilRenderbuffer&&this._depthStencilRenderbuffer.destroy(),l(this._previousFramebuffer)||(this._depthStencilTexture=new Lt({context:e,width:s,height:a,pixelFormat:Ke.DEPTH_STENCIL,pixelDatatype:Oe.UNSIGNED_INT_24_8}),t>1&&(this._depthStencilRenderbuffer=new nu({context:e,width:s,height:a,format:Tl.DEPTH24_STENCIL8,numSamples:t})))),!l(this._fbo.framebuffer)||c||o||r){this._fbo.destroy(),this._fboClassified.destroy();let d,u;l(this._previousFramebuffer)?(d=n.getDepthStencilTexture(),u=n.getDepthStencilRenderbuffer()):(d=this._depthStencilTexture,u=this._depthStencilRenderbuffer),this._fbo.setDepthStencilTexture(d),l(u)&&this._fbo.setDepthStencilRenderbuffer(u),this._fbo.update(e,s,a,t),l(this._previousFramebuffer)||(this._fboClassified.setDepthStencilTexture(d),this._fboClassified.update(e,s,a))}if(l(this._rsUnclassified)||(this._rsUnclassified=Qe.fromCache(HTt),this._rsClassified=Qe.fromCache(JTt),this._rsDefault=Qe.fromCache(KTt)),!l(this._unclassifiedCommand)||o||r){l(this._unclassifiedCommand)&&(this._unclassifiedCommand.shaderProgram=this._unclassifiedCommand.shaderProgram&&this._unclassifiedCommand.shaderProgram.destroy(),this._classifiedCommand.shaderProgram=this._classifiedCommand.shaderProgram&&this._classifiedCommand.shaderProgram.destroy());let d=l(this._previousFramebuffer)?qTt:jTt,u=new ze({defines:["UNCLASSIFIED"],sources:[d]}),h=new ze({sources:[d]});this._unclassifiedCommand=e.createViewportQuadCommand(u,{renderState:l(this._previousFramebuffer)?this._rsUnclassified:this._rsDefault,uniformMap:this._uniformMap,owner:this}),this._classifiedCommand=e.createViewportQuadCommand(h,{renderState:l(this._previousFramebuffer)?this._rsClassified:this._rsDefault,uniformMap:this._uniformMap,owner:this}),l(this._translucentCommand)&&(this._translucentCommand.shaderProgram=this._translucentCommand.shaderProgram&&this._translucentCommand.shaderProgram.destroy()),l(this._previousFramebuffer)||(this._translucentCommand=e.createViewportQuadCommand(vd,{renderState:this._rsUnclassified,uniformMap:this._uniformMap,owner:this}))}};iA.prototype.prepareTextures=function(e,t){this._fbo._numSamples>1&&this._fbo.prepareTextures(e,t)};iA.prototype.clear=function(e,t){l(this._previousFramebuffer)?this._fbo.clear(e,this._clearColorCommand,t):(this._fbo.clear(e,this._clearCommand,t),this._fboClassified.clear(e,this._clearCommand,t))};iA.prototype.executeClassified=function(e,t){if(!l(this._previousFramebuffer)){let n=t.framebuffer;this.prepareTextures(e,!0),t.framebuffer=this._fboClassified.framebuffer,this._translucentCommand.execute(e,t),t.framebuffer=n}this._classifiedCommand.execute(e,t)};iA.prototype.executeUnclassified=function(e,t){this._unclassifiedCommand.execute(e,t)};iA.prototype.isDestroyed=function(){return!1};iA.prototype.destroy=function(){return this._fbo.destroy(),this._fboClassified.destroy(),this._depthStencilTexture=this._depthStencilTexture&&this._depthStencilTexture.destroy(),this._depthStencilRenderbuffer=this._depthStencilRenderbuffer&&this._depthStencilRenderbuffer.destroy(),l(this._unclassifiedCommand)&&(this._unclassifiedCommand.shaderProgram=this._unclassifiedCommand.shaderProgram&&this._unclassifiedCommand.shaderProgram.destroy(),this._classifiedCommand.shaderProgram=this._classifiedCommand.shaderProgram&&this._classifiedCommand.shaderProgram.destroy()),he(this)};var KZ=iA;var weo=y(x(),1);function BO(e){this._total=e,this.usedThisFrame=0,this.stolenFromMeThisFrame=0,this.starvedThisFrame=!1,this.starvedLastFrame=!1}Object.defineProperties(BO.prototype,{total:{get:function(){return this._total}}});function Qy(e){let t=new Array(Ic.NUMBER_OF_JOB_TYPES);t[Ic.TEXTURE]=new BO(l(e)?e[Ic.TEXTURE]:10),t[Ic.PROGRAM]=new BO(l(e)?e[Ic.PROGRAM]:10),t[Ic.BUFFER]=new BO(l(e)?e[Ic.BUFFER]:30);let n=t.length,i,o=0;for(i=0;i<n;++i)o+=t[i].total;let r=new Array(n);for(i=0;i<n;++i)r[i]=!1;this._totalBudget=o,this._totalUsedThisFrame=0,this._budgets=t,this._executedThisFrame=r}Qy.getTimestamp=Xi;Object.defineProperties(Qy.prototype,{totalBudget:{get:function(){return this._totalBudget}}});Qy.prototype.disableThisFrame=function(){this._totalUsedThisFrame=this._totalBudget};Qy.prototype.resetBudgets=function(){let e=this._budgets,t=e.length;for(let n=0;n<t;++n){let i=e[n];i.starvedLastFrame=i.starvedThisFrame,i.starvedThisFrame=!1,i.usedThisFrame=0,i.stolenFromMeThisFrame=0}this._totalUsedThisFrame=0};Qy.prototype.execute=function(e,t){let n=this._budgets,i=n[t],o=this._executedThisFrame[t];if(this._totalUsedThisFrame>=this._totalBudget&&o)return i.starvedThisFrame=!0,!1;let r;if(i.usedThisFrame+i.stolenFromMeThisFrame>=i.total){let c=n.length,d;for(d=0;d<c&&(r=n[d],!(r.usedThisFrame+r.stolenFromMeThisFrame<r.total&&!r.starvedLastFrame));++d);if(d===c&&o)return!1;o&&(i.starvedThisFrame=!0)}let s=Qy.getTimestamp();e.execute();let a=Qy.getTimestamp()-s;return this._totalUsedThisFrame+=a,r?r.stolenFromMeThisFrame+=a:i.usedThisFrame+=a,this._executedThisFrame[t]=!0,!0};var YY=Qy;var veo=y(x(),1);function wO(e){e=e??Q.EMPTY_OBJECT;let t=vn(e.container);this._container=t;let n=document.createElement("div");n.className="cesium-performanceDisplay";let i=document.createElement("div");i.className="cesium-performanceDisplay-fps",this._fpsText=document.createTextNode(""),i.appendChild(this._fpsText);let o=document.createElement("div");o.className="cesium-performanceDisplay-ms",this._msText=document.createTextNode(""),o.appendChild(this._msText),n.appendChild(o),n.appendChild(i),this._container.appendChild(n),this._lastFpsSampleTime=Xi(),this._lastMsSampleTime=Xi(),this._fpsFrameCount=0,this._msFrameCount=0,this._throttled=!1;let r=document.createElement("div");r.className="cesium-performanceDisplay-throttled",this._throttledText=document.createTextNode(""),r.appendChild(this._throttledText),n.appendChild(r)}Object.defineProperties(wO.prototype,{throttled:{get:function(){return this._throttled},set:function(e){this._throttled!==e&&(e?this._throttledText.nodeValue="(throttled)":this._throttledText.nodeValue="",this._throttled=e)}}});wO.prototype.update=function(e){let t=Xi(),n=e??!0;this._fpsFrameCount++;let i=t-this._lastFpsSampleTime;if(i>1e3){let r="N/A";n&&(r=this._fpsFrameCount*1e3/i|0),this._fpsText.nodeValue=`${r} FPS`,this._lastFpsSampleTime=t,this._fpsFrameCount=0}this._msFrameCount++;let o=t-this._lastMsSampleTime;if(o>200){let r="N/A";n&&(r=(o/this._msFrameCount).toFixed(2)),this._msText.nodeValue=`${r} MS`,this._lastMsSampleTime=t,this._msFrameCount=0}};wO.prototype.destroy=function(){return he(this)};var Tb=wO;var nro=y(x(),1);var eto=y(x(),1);var pc={};pc.decodeRawMetadataValue=function(e,t,n){switch(e){case Yt.INT8:return t.getInt8(n);case Yt.UINT8:return t.getUint8(n);case Yt.INT16:return t.getInt16(n,!0);case Yt.UINT16:return t.getUint16(n,!0);case Yt.INT32:return t.getInt32(n,!0);case Yt.UINT32:return t.getUint32(n,!0);case Yt.INT64:return t.getBigInt64(n,!0);case Yt.UINT64:return t.getBigUint64(n,!0);case Yt.FLOAT32:return t.getFloat32(n,!0);case Yt.FLOAT64:return t.getFloat64(n,!0)}throw new me(`Invalid component type: ${e}`)};pc.decodeRawMetadataValueComponent=function(e,t,n){let i=e.componentType,o=pc.decodeRawMetadataValue(i,t,n);return e.normalized?Yt.normalize(o,i):o};pc.decodeRawMetadataValueElement=function(e,t,n){let i=e.componentType,o=Yt.getSizeInBytes(i),r=e.type,s=St.getComponentCount(r),a=o*s;if(s>1){let u=Array(s);for(let h=0;h<s;h++){let p=n*a+h*o,A=pc.decodeRawMetadataValueComponent(e,t,p);u[h]=A}return u}let c=n*a;return pc.decodeRawMetadataValueComponent(e,t,c)};pc.decodeRawMetadataValues=function(e,t){let n=new DataView(t.buffer,t.byteOffset,t.byteLength);if(e.isArray){let o=e.arrayLength,r=Array(o);for(let s=0;s<o;s++){let a=pc.decodeRawMetadataValueElement(e,n,s);r[s]=a}return r}return pc.decodeRawMetadataValueElement(e,n,0)};pc.convertToObjectType=function(e,t){if(!l(t)||e===St.SCALAR||e===St.STRING||e===St.BOOLEAN||e===St.ENUM)return t;let n=t.map(i=>Number(i));switch(e){case St.VEC2:return M.unpack(n,0,new M);case St.VEC3:return m.unpack(n,0,new m);case St.VEC4:return re.unpack(n,0,new re);case St.MAT2:return Qi.unpack(n,0,new Qi);case St.MAT3:return $.unpack(n,0,new $);case St.MAT4:return F.unpack(n,0,new F)}throw new me(`Invalid metadata object type: ${e}`)};pc.convertFromObjectType=function(e,t){if(!l(t)||e===St.SCALAR||e===St.STRING||e===St.BOOLEAN||e===St.ENUM)return t;switch(e){case St.VEC2:return M.pack(t,Array(2));case St.VEC3:return m.pack(t,Array(3));case St.VEC4:return re.pack(t,Array(4));case St.MAT2:return Qi.pack(t,Array(4));case St.MAT3:return $.pack(t,Array(9));case St.MAT4:return F.pack(t,Array(16))}throw new me(`Invalid metadata object type: ${e}`)};pc.decodeMetadataValues=function(e,t,n){let i=pc.decodeRawMetadataValues(e,n);if(t.hasValueTransform){let r=pc.convertFromObjectType(e.type,t.offset),s=pc.convertFromObjectType(e.type,t.scale);i=mp.valueTransformInPlace(i,r,s,Yt.applyValueTransform)}if(e.isArray){let r=e.arrayLength,s=Array(r);for(let a=0;a<r;a++){let c=i[a],d=pc.convertToObjectType(e.type,c);s[a]=d}return s}return pc.convertToObjectType(e.type,i)};var MY=Object.freeze(pc);var ato=y(x(),1);function mE(){this._framebuffer=new Ti,this._textureToCopy=void 0,this._copyDepthCommand=void 0}Object.defineProperties(mE.prototype,{framebuffer:{get:function(){return this._framebuffer.framebuffer}}});function $Tt(e,t,n){let{width:i,height:o}=n;e._framebuffer.update(t,i,o)}function eEt(e,t,n){l(e._copyDepthCommand)||(e._copyDepthCommand=t.createViewportQuadCommand(`uniform highp sampler2D colorTexture;
in vec2 v_textureCoordinates;
void main()
{
vec4 globeDepthPacked = texture(czm_globeDepthTexture, v_textureCoordinates);
float globeDepth = czm_unpackDepth(globeDepthPacked);
float depth = texture(colorTexture, v_textureCoordinates).r;
out_FragColor = czm_branchFreeTernary(globeDepth <= 0.0 || globeDepth >= 1.0 || depth < globeDepth && depth > 0.0 && depth < 1.0,
czm_packDepth(depth), globeDepthPacked);
}
`,{renderState:Qe.fromCache(),uniformMap:{colorTexture:function(){return e._textureToCopy}},owner:e})),e._textureToCopy=n,e._copyDepthCommand.framebuffer=e.framebuffer}mE.prototype.update=function(e,t){$Tt(this,e,t),eEt(this,e,t)};var tEt=new re,nEt=new re(1,1/255,1/65025,1/16581375);mE.prototype.getDepth=function(e,t,n){if(!l(this.framebuffer))return;let i=e.readPixels({x:t,y:n,width:1,height:1,framebuffer:this.framebuffer}),o=re.unpack(i,0,tEt);return re.divideByScalar(o,255,o),re.dot(o,nEt)};mE.prototype.executeCopyDepth=function(e,t){this._copyDepthCommand.execute(e,t)};mE.prototype.isDestroyed=function(){return!1};mE.prototype.destroy=function(){return this._framebuffer.destroy(),l(this._copyDepthCommand)&&(this._copyDepthCommand.shaderProgram=l(this._copyDepthCommand.shaderProgram)&&this._copyDepthCommand.shaderProgram.destroy()),he(this)};var vY=mE;var Voo=y(x(),1);var Ato=y(x(),1);function Oy(e){e=e||{},this._framebufferManager=new Ti({colorAttachmentsLength:3,createColorAttachments:!0,depthStencil:!0,supportsDepthTexture:!0,color:!0}),this._framebuffer=void 0,this._colorTexture=void 0,this._idTexture=void 0,this._depthTexture=void 0,this._depthStencilTexture=void 0,this._clearCommand=new mi({color:new U(0,0,0,0),depth:1,stencil:0,owner:this})}Object.defineProperties(Oy.prototype,{framebuffer:{get:function(){return this._framebuffer}},colorTexture:{get:function(){return this._colorTexture}},idTexture:{get:function(){return this._idTexture}},depthTexture:{get:function(){return this._depthTexture}},depthStencilTexture:{get:function(){return this._depthStencilTexture}}});Oy.prototype.update=function(e,t,n,i,o){let r=t.width,s=t.height,a=n?e.halfFloatingPointTexture?Oe.HALF_FLOAT:Oe.FLOAT:Oe.UNSIGNED_BYTE,c=this._framebufferManager.update(e,r,s,1,a,Ke.RGBA);return this._framebufferManager.framebuffer&&(this._framebuffer=this._framebufferManager.framebuffer,this._colorTexture=l(i)?i:this._framebufferManager.getColorTexture(0),this._idTexture=this._framebufferManager.getColorTexture(1),this._depthTexture=this._framebufferManager.getColorTexture(2),this._depthStencilTexture=l(o)?o:this._framebufferManager.getDepthStencilTexture()),c};Oy.prototype.clear=function(e,t,n){this.getClearCommand(n).execute(e,t)};Oy.prototype.getClearCommand=function(e){return this._clearCommand.framebuffer=this._framebuffer,l(e)&&U.clone(e,this._clearCommand.color),this._clearCommand};Oy.prototype.getFramebuffer=function(e,t,n,i){return this.update(e,t,!1,n,i),this._framebuffer};Oy.prototype.isDestroyed=function(){return!1};Oy.prototype.destroy=function(){return this._framebufferManager=this._framebufferManager&&this._framebufferManager.destroy(),this._clearCommand=void 0,he(this)};var UY=Oy;var yto=y(x(),1);function iEt(e,t){this.near=e??0,this.far=t??0;let n=Ge.NUMBER_OF_PASSES,i=new Array(n),o=new Array(n);for(let r=0;r<n;++r)i[r]=[],o[r]=0;this.commands=i,this.indices=o}var DY=iEt;var Pto=y(x(),1);var Cto=y(x(),1),zy=`uniform highp sampler2D u_depthTexture;
in vec2 v_textureCoordinates;
void main()
{
out_FragColor = czm_packDepth(texture(u_depthTexture, v_textureCoordinates).r);
}
`;function oA(){this._picking=!1,this._numSamples=1,this._tempCopyDepthTexture=void 0,this._pickColorFramebuffer=new Ti({depthStencil:!0,supportsDepthTexture:!0}),this._outputFramebuffer=new Ti({depthStencil:!0,supportsDepthTexture:!0}),this._copyDepthFramebuffer=new Ti,this._tempCopyDepthFramebuffer=new Ti,this._updateDepthFramebuffer=new Ti({createColorAttachments:!1,createDepthAttachments:!1,depthStencil:!0}),this._clearGlobeColorCommand=void 0,this._copyColorCommand=void 0,this._copyDepthCommand=void 0,this._tempCopyDepthCommand=void 0,this._updateDepthCommand=void 0,this._viewport=new nt,this._rs=void 0,this._rsBlend=void 0,this._rsUpdate=void 0,this._useScissorTest=!1,this._scissorRectangle=void 0,this._useHdr=void 0,this._clearGlobeDepth=void 0}Object.defineProperties(oA.prototype,{colorFramebufferManager:{get:function(){return this._picking?this._pickColorFramebuffer:this._outputFramebuffer}},framebuffer:{get:function(){return this.colorFramebufferManager.framebuffer}},depthStencilTexture:{get:function(){return this.colorFramebufferManager.getDepthStencilTexture()}},picking:{get:function(){return this._picking},set:function(e){this._picking=e}}});function SIe(e,t,n,i,o){let r=e._viewport;r.width=n,r.height=i;let s=!nt.equals(r,o.viewport),a=s!==e._useScissorTest;e._useScissorTest=s,nt.equals(e._scissorRectangle,o.viewport)||(e._scissorRectangle=nt.clone(o.viewport,e._scissorRectangle),a=!0),(!l(e._rs)||!nt.equals(r,e._rs.viewport)||a)&&(e._rs=Qe.fromCache({viewport:r,scissorTest:{enabled:e._useScissorTest,rectangle:e._scissorRectangle}}),e._rsBlend=Qe.fromCache({viewport:r,scissorTest:{enabled:e._useScissorTest,rectangle:e._scissorRectangle},blending:ln.ALPHA_BLEND}),e._rsUpdate=Qe.fromCache({viewport:r,scissorTest:{enabled:e._useScissorTest,rectangle:e._scissorRectangle},stencilTest:{enabled:!0,frontFunction:ni.EQUAL,frontOperation:{fail:Vt.KEEP,zFail:Vt.KEEP,zPass:Vt.KEEP},backFunction:ni.NEVER,reference:Jt.CESIUM_3D_TILE_MASK,mask:Jt.CESIUM_3D_TILE_MASK}})),l(e._copyDepthCommand)||(e._copyDepthCommand=t.createViewportQuadCommand(zy,{uniformMap:{u_depthTexture:function(){return e.colorFramebufferManager.getDepthStencilTexture()}},owner:e})),e._copyDepthCommand.framebuffer=e._copyDepthFramebuffer.framebuffer,e._copyDepthCommand.renderState=e._rs,l(e._copyColorCommand)||(e._copyColorCommand=t.createViewportQuadCommand(vd,{uniformMap:{colorTexture:function(){return e.colorFramebufferManager.getColorTexture()}},owner:e})),e._copyColorCommand.renderState=e._rs,l(e._tempCopyDepthCommand)||(e._tempCopyDepthCommand=t.createViewportQuadCommand(zy,{uniformMap:{u_depthTexture:function(){return e._tempCopyDepthTexture}},owner:e})),e._tempCopyDepthCommand.framebuffer=e._tempCopyDepthFramebuffer.framebuffer,e._tempCopyDepthCommand.renderState=e._rs,l(e._updateDepthCommand)||(e._updateDepthCommand=t.createViewportQuadCommand(vd,{uniformMap:{colorTexture:function(){return e._tempCopyDepthFramebuffer.getColorTexture()}},owner:e})),e._updateDepthCommand.framebuffer=e._updateDepthFramebuffer.framebuffer,e._updateDepthCommand.renderState=e._rsUpdate,l(e._clearGlobeColorCommand)||(e._clearGlobeColorCommand=new mi({color:new U(0,0,0,0),stencil:0,owner:e})),e._clearGlobeColorCommand.framebuffer=e.framebuffer}oA.prototype.update=function(e,t,n,i,o,r){let{width:s,height:a}=n,c=o?e.halfFloatingPointTexture?Oe.HALF_FLOAT:Oe.FLOAT:Oe.UNSIGNED_BYTE;this._numSamples=i,this.picking?this._pickColorFramebuffer.update(e,s,a):this._outputFramebuffer.update(e,s,a,i,c),this._copyDepthFramebuffer.update(e,s,a),SIe(this,e,s,a,t),e.uniformState.globeDepthTexture=void 0,this._clearGlobeDepth=r};oA.prototype.prepareColorTextures=function(e,t){!this.picking&&this._numSamples>1&&this._outputFramebuffer.prepareTextures(e,t)};oA.prototype.executeCopyDepth=function(e,t){l(this._copyDepthCommand)&&(this.prepareColorTextures(e),this._copyDepthCommand.execute(e,t),e.uniformState.globeDepthTexture=this._copyDepthFramebuffer.getColorTexture())};oA.prototype.executeUpdateDepth=function(e,t,n){let i=l(n)?n:t.framebuffer.depthStencilTexture;if(!this._clearGlobeDepth&&i===this.colorFramebufferManager.getDepthStencilTexture()){l(this._copyDepthCommand)&&this._copyDepthCommand.execute(e,t);return}if(!l(this._updateDepthCommand))return;let o=this._updateDepthFramebuffer;if(!l(o.framebuffer)||o.getDepthStencilTexture()!==i||o.getColorTexture()!==this._copyDepthFramebuffer.getColorTexture()){let r=this._copyDepthFramebuffer.getColorTexture(),{width:s,height:a}=r;this._tempCopyDepthFramebuffer.destroy(),this._tempCopyDepthFramebuffer.update(e,s,a),o.setColorTexture(r,0),o.setDepthStencilTexture(i),o.update(e,s,a),SIe(this,e,s,a,t)}this._tempCopyDepthTexture=i,this._tempCopyDepthCommand.execute(e,t),this._updateDepthCommand.execute(e,t)};oA.prototype.executeCopyColor=function(e,t){l(this._copyColorCommand)&&this._copyColorCommand.execute(e,t)};oA.prototype.clear=function(e,t,n){let i=this._clearGlobeColorCommand;l(i)&&(U.clone(n,i.color),this.colorFramebufferManager.clear(e,i,t))};oA.prototype.isDestroyed=function(){return!1};oA.prototype.destroy=function(){return this._pickColorFramebuffer.destroy(),this._outputFramebuffer.destroy(),this._copyDepthFramebuffer.destroy(),this._tempCopyDepthFramebuffer.destroy(),this._updateDepthFramebuffer.destroy(),l(this._copyColorCommand)&&(this._copyColorCommand.shaderProgram=this._copyColorCommand.shaderProgram.destroy()),l(this._copyDepthCommand)&&(this._copyDepthCommand.shaderProgram=this._copyDepthCommand.shaderProgram.destroy()),l(this._tempCopyDepthCommand)&&(this._tempCopyDepthCommand.shaderProgram=this._tempCopyDepthCommand.shaderProgram.destroy()),l(this._updateDepthCommand)&&(this._updateDepthCommand.shaderProgram=this._updateDepthCommand.shaderProgram.destroy()),he(this)};var kY=oA;var Hto=y(x(),1);function hE(){this._framebuffer=new Ti({depthStencil:!0,supportsDepthTexture:!0}),this._packedDepthFramebuffer=new Ti,this._renderState=void 0,this._packedDepthCommand=void 0,this._clearCommand=void 0,this._viewport=new nt,this._useScissorTest=!1,this._scissorRectangle=void 0,this._useHdr=void 0}Object.defineProperties(hE.prototype,{classificationTexture:{get:function(){return this._framebuffer.getColorTexture()}},classificationFramebuffer:{get:function(){return this._framebuffer.framebuffer}},packedDepthFramebuffer:{get:function(){return this._packedDepthFramebuffer.framebuffer}},depthStencilTexture:{get:function(){return this._framebuffer.getDepthStencilTexture()}},depthStencilRenderbuffer:{get:function(){return this._framebuffer.getDepthStencilRenderbuffer()}},packedDepthTexture:{get:function(){return this._packedDepthFramebuffer.getColorTexture()}}});function oEt(e){e._framebuffer.destroy(),e._packedDepthFramebuffer.destroy()}function rEt(e,t,n,i,o){let r=o?t.halfFloatingPointTexture?Oe.HALF_FLOAT:Oe.FLOAT:Oe.UNSIGNED_BYTE;e._framebuffer.update(t,n,i,1,r),e._packedDepthFramebuffer.update(t,n,i)}function sEt(e,t,n,i,o){e._viewport.width=n,e._viewport.height=i;let r=!nt.equals(e._viewport,o.viewport),s=r!==e._useScissorTest;e._useScissorTest=r,nt.equals(e._scissorRectangle,o.viewport)||(e._scissorRectangle=nt.clone(o.viewport,e._scissorRectangle),s=!0),(!l(e._renderState)||!nt.equals(e._viewport,e._renderState.viewport)||s)&&(e._renderState=Qe.fromCache({viewport:e._viewport,scissorTest:{enabled:e._useScissorTest,rectangle:e._scissorRectangle}})),l(e._packedDepthCommand)||(e._packedDepthCommand=t.createViewportQuadCommand(zy,{uniformMap:{u_depthTexture:function(){return e.depthStencilTexture}},owner:e})),l(e._clearCommand)||(e._clearCommand=new mi({color:new U(0,0,0,0),depth:1,stencil:0,owner:e})),e._packedDepthCommand.framebuffer=e._packedDepthFramebuffer.framebuffer,e._packedDepthCommand.renderState=e._renderState,e._clearCommand.framebuffer=e.classificationFramebuffer,e._clearCommand.renderState=e._renderState}hE.prototype.updateAndClear=function(e,t,n,i){let o=t.width,r=t.height;rEt(this,n,o,r,e),sEt(this,n,o,r,i),this._useHdr=e};hE.prototype.clearClassification=function(e,t){this._clearCommand.execute(e,t)};hE.prototype.packDepth=function(e,t){return this._packedDepthCommand.execute(e,t),this.packedDepthTexture};hE.prototype.isDestroyed=function(){return!1};hE.prototype.destroy=function(){return oEt(this),he(this)};var QY=hE;var hno=y(x(),1);function Eb(e){this._numSamples=1,this._translucentMultipassSupport=!1,this._translucentMRTSupport=!1;let t=e.colorBufferFloat&&e.depthTexture&&e.floatBlend;this._translucentMRTSupport=e.drawBuffers&&t,this._translucentMultipassSupport=!this._translucentMRTSupport&&t,this._opaqueFBO=void 0,this._opaqueTexture=void 0,this._depthStencilTexture=void 0,this._accumulationTexture=void 0,this._translucentFBO=new Ti({colorAttachmentsLength:this._translucentMRTSupport?2:1,createColorAttachments:!1,createDepthAttachments:!1,depth:!0}),this._alphaFBO=new Ti({createColorAttachments:!1,createDepthAttachments:!1,depth:!0}),this._adjustTranslucentFBO=new Ti({colorAttachmentsLength:this._translucentMRTSupport?2:1,createColorAttachments:!1}),this._adjustAlphaFBO=new Ti({createColorAttachments:!1}),this._opaqueClearCommand=new mi({color:new U(0,0,0,0),owner:this}),this._translucentMRTClearCommand=new mi({color:new U(0,0,0,1),owner:this}),this._translucentMultipassClearCommand=new mi({color:new U(0,0,0,0),owner:this}),this._alphaClearCommand=new mi({color:new U(1,1,1,1),owner:this}),this._translucentRenderStateCache={},this._alphaRenderStateCache={},this._compositeCommand=void 0,this._adjustTranslucentCommand=void 0,this._adjustAlphaCommand=void 0,this._viewport=new nt,this._rs=void 0,this._useScissorTest=!1,this._scissorRectangle=void 0,this._useHDR=!1}function _Ie(e){e._accumulationTexture=e._accumulationTexture&&!e._accumulationTexture.isDestroyed()&&e._accumulationTexture.destroy(),e._revealageTexture=e._revealageTexture&&!e._revealageTexture.isDestroyed()&&e._revealageTexture.destroy()}function Gee(e){e._translucentFBO.destroy(),e._alphaFBO.destroy(),e._adjustTranslucentFBO.destroy(),e._adjustAlphaFBO.destroy()}function IIe(e){_Ie(e),Gee(e)}function aEt(e,t,n,i){_Ie(e),e._accumulationTexture=new Lt({context:t,width:n,height:i,pixelFormat:Ke.RGBA,pixelDatatype:Oe.FLOAT}),e._revealageTexture=new Lt({context:t,pixelFormat:Ke.RGBA,pixelDatatype:Oe.FLOAT,width:n,height:i,flipY:!1})}function cEt(e,t){Gee(e);let n=ne.FRAMEBUFFER_COMPLETE,i=!0,{width:o,height:r}=e._accumulationTexture;if(e._translucentMRTSupport&&(e._translucentFBO.setColorTexture(e._accumulationTexture,0),e._translucentFBO.setColorTexture(e._revealageTexture,1),e._translucentFBO.setDepthStencilTexture(e._depthStencilTexture),e._translucentFBO.update(t,o,r),e._adjustTranslucentFBO.setColorTexture(e._accumulationTexture,0),e._adjustTranslucentFBO.setColorTexture(e._revealageTexture,1),e._adjustTranslucentFBO.update(t,o,r),(e._translucentFBO.status!==n||e._adjustTranslucentFBO.status!==n)&&(Gee(e),e._translucentMRTSupport=!1)),!e._translucentMRTSupport){e._translucentFBO.setColorTexture(e._accumulationTexture),e._translucentFBO.setDepthStencilTexture(e._depthStencilTexture),e._translucentFBO.update(t,o,r),e._alphaFBO.setColorTexture(e._revealageTexture),e._alphaFBO.setDepthStencilTexture(e._depthStencilTexture),e._alphaFBO.update(t,o,r),e._adjustTranslucentFBO.setColorTexture(e._accumulationTexture),e._adjustTranslucentFBO.update(t,o,r),e._adjustAlphaFBO.setColorTexture(e._revealageTexture),e._adjustAlphaFBO.update(t,o,r);let s=e._translucentFBO.status===n,a=e._alphaFBO.status===n,c=e._adjustTranslucentFBO.status===n,d=e._adjustAlphaFBO.status===n;(!s||!a||!c||!d)&&(IIe(e),e._translucentMultipassSupport=!1,i=!1)}return i}Eb.prototype.update=function(e,t,n,i,o){if(!this.isSupported())return;this._opaqueFBO=n,this._opaqueTexture=n.getColorTexture(0),this._depthStencilTexture=n.getDepthStencilTexture();let{width:r,height:s}=this._opaqueTexture,a=this._accumulationTexture,c=!l(a)||a.width!==r||a.height!==s||i!==this._useHDR,d=this._numSamples!==o;if((c||d)&&(this._numSamples=o,aEt(this,e,r,s)),(!l(this._translucentFBO.framebuffer)||c||d)&&!cEt(this,e))return;this._useHDR=i;let u=this,h,p;l(this._compositeCommand)||(h=new ze({sources:[HX]}),this._translucentMRTSupport&&h.defines.push("MRT"),p={u_opaque:function(){return u._opaqueTexture},u_accumulation:function(){return u._accumulationTexture},u_revealage:function(){return u._revealageTexture}},this._compositeCommand=e.createViewportQuadCommand(h,{uniformMap:p,owner:this})),l(this._adjustTranslucentCommand)||(this._translucentMRTSupport?(h=new ze({defines:["MRT"],sources:[PZ]}),p={u_bgColor:function(){return u._translucentMRTClearCommand.color},u_depthTexture:function(){return u._depthStencilTexture}},this._adjustTranslucentCommand=e.createViewportQuadCommand(h,{uniformMap:p,owner:this})):this._translucentMultipassSupport&&(h=new ze({sources:[PZ]}),p={u_bgColor:function(){return u._translucentMultipassClearCommand.color},u_depthTexture:function(){return u._depthStencilTexture}},this._adjustTranslucentCommand=e.createViewportQuadCommand(h,{uniformMap:p,owner:this}),p={u_bgColor:function(){return u._alphaClearCommand.color},u_depthTexture:function(){return u._depthStencilTexture}},this._adjustAlphaCommand=e.createViewportQuadCommand(h,{uniformMap:p,owner:this}))),this._viewport.width=r,this._viewport.height=s;let A=!nt.equals(this._viewport,t.viewport),f=A!==this._useScissorTest;this._useScissorTest=A,nt.equals(this._scissorRectangle,t.viewport)||(this._scissorRectangle=nt.clone(t.viewport,this._scissorRectangle),f=!0),(!l(this._rs)||!nt.equals(this._viewport,this._rs.viewport)||f)&&(this._rs=Qe.fromCache({viewport:this._viewport,scissorTest:{enabled:this._useScissorTest,rectangle:this._scissorRectangle}})),l(this._compositeCommand)&&(this._compositeCommand.renderState=this._rs),this._adjustTranslucentCommand&&(this._adjustTranslucentCommand.renderState=this._rs),l(this._adjustAlphaCommand)&&(this._adjustAlphaCommand.renderState=this._rs)};var lEt={enabled:!0,color:new U(0,0,0,0),equationRgb:Ec.ADD,equationAlpha:Ec.ADD,functionSourceRgb:Ko.ONE,functionDestinationRgb:Ko.ONE,functionSourceAlpha:Ko.ZERO,functionDestinationAlpha:Ko.ONE_MINUS_SOURCE_ALPHA},dEt={enabled:!0,color:new U(0,0,0,0),equationRgb:Ec.ADD,equationAlpha:Ec.ADD,functionSourceRgb:Ko.ONE,functionDestinationRgb:Ko.ONE,functionSourceAlpha:Ko.ONE,functionDestinationAlpha:Ko.ONE},uEt={enabled:!0,color:new U(0,0,0,0),equationRgb:Ec.ADD,equationAlpha:Ec.ADD,functionSourceRgb:Ko.ZERO,functionDestinationRgb:Ko.ONE_MINUS_SOURCE_ALPHA,functionSourceAlpha:Ko.ZERO,functionDestinationAlpha:Ko.ONE_MINUS_SOURCE_ALPHA};function Lee(e,t,n,i){let o=n[i.id];if(!l(o)){let r=Qe.getState(i);r.depthMask=!1,r.blending=t,o=Qe.fromCache(r),n[i.id]=o}return o}function mEt(e,t,n){return Lee(t,lEt,e._translucentRenderStateCache,n)}function hEt(e,t,n){return Lee(t,dEt,e._translucentRenderStateCache,n)}function fEt(e,t,n){return Lee(t,uEt,e._alphaRenderStateCache,n)}var pEt=` vec3 Ci = czm_out_FragColor.rgb * czm_out_FragColor.a;
float ai = czm_out_FragColor.a;
float wzi = czm_alphaWeight(ai);
out_FragData_0 = vec4(Ci * wzi, ai);
out_FragData_1 = vec4(ai * wzi);
`,AEt=` vec3 Ci = czm_out_FragColor.rgb * czm_out_FragColor.a;
float ai = czm_out_FragColor.a;
float wzi = czm_alphaWeight(ai);
out_FragColor = vec4(Ci, ai) * wzi;
`,gEt=` float ai = czm_out_FragColor.a;
out_FragColor = vec4(ai);
`;function Wee(e,t,n,i){let{shaderCache:o}=e,r=o.getDerivedShaderProgram(t,n);if(l(r))return r;let s=t._attributeLocations,a=t.fragmentShaderSource.clone();a.sources=a.sources.map(function(u){return ze.replaceMain(u,"czm_translucent_main").replace(/out_FragColor/g,"czm_out_FragColor").replace(/layout\s*\(location\s*=\s*0\)\s*out\s+vec4\s+out_FragColor;/g,"").replace(/\bdiscard\b/g,"czm_discard = true").replace(/czm_phong/g,"czm_translucentPhong")}),a.sources.splice(0,0,`#define CESIUM_REDIRECTED_COLOR_OUTPUT
vec4 czm_out_FragColor;
bool czm_discard = false;
`);let c=[...i.matchAll(/out_FragData_(\d+)/g)],d="";for(let u=0;u<c.length;u++){let h=c[u];d=`layout (location = ${h[1]}) out vec4 ${h[0]};
${d}`}return a.sources.push(d),a.sources.push(`void main()
{
czm_translucent_main();
if (czm_discard)
{
discard;
}
${i}}
`),o.createDerivedShaderProgram(t,n,{vertexShaderSource:t.vertexShaderSource,fragmentShaderSource:a,attributeLocations:s})}function bEt(e,t){return Wee(e,t,"translucentMRT",pEt)}function yEt(e,t){return Wee(e,t,"translucentMultipass",AEt)}function xEt(e,t){return Wee(e,t,"alphaMultipass",gEt)}Eb.prototype.createDerivedCommands=function(e,t,n){if(l(n)||(n={}),this._translucentMRTSupport){let a,c;return l(n.translucentCommand)&&(a=n.translucentCommand.shaderProgram,c=n.translucentCommand.renderState),n.translucentCommand=ot.shallowClone(e,n.translucentCommand),!l(a)||n.shaderProgramId!==e.shaderProgram.id?(n.translucentCommand.shaderProgram=bEt(t,e.shaderProgram),n.translucentCommand.renderState=mEt(this,t,e.renderState),n.shaderProgramId=e.shaderProgram.id):(n.translucentCommand.shaderProgram=a,n.translucentCommand.renderState=c),n}let i,o,r,s;return l(n.translucentCommand)&&(i=n.translucentCommand.shaderProgram,o=n.translucentCommand.renderState,r=n.alphaCommand.shaderProgram,s=n.alphaCommand.renderState),n.translucentCommand=ot.shallowClone(e,n.translucentCommand),n.alphaCommand=ot.shallowClone(e,n.alphaCommand),!l(i)||n.shaderProgramId!==e.shaderProgram.id?(n.translucentCommand.shaderProgram=yEt(t,e.shaderProgram),n.translucentCommand.renderState=hEt(this,t,e.renderState),n.alphaCommand.shaderProgram=xEt(t,e.shaderProgram),n.alphaCommand.renderState=fEt(this,t,e.renderState),n.shaderProgramId=e.shaderProgram.id):(n.translucentCommand.shaderProgram=i,n.translucentCommand.renderState=o,n.alphaCommand.shaderProgram=r,n.alphaCommand.renderState=s),n};function CEt(e,t,n,i,o,r){let{context:s,frameState:a}=t,{useLogDepth:c,shadowState:d}=a,u=t._hdr,h=i.framebuffer,p=d.lightShadowsEnabled;i.framebuffer=e._adjustTranslucentFBO.framebuffer,e._adjustTranslucentCommand.execute(s,i),i.framebuffer=e._adjustAlphaFBO.framebuffer,e._adjustAlphaCommand.execute(s,i);let A=e._opaqueFBO.framebuffer;i.framebuffer=e._translucentFBO.framebuffer;for(let f=0;f<o.length;++f){let b=o[f];b=c?b.derivedCommands.logDepth.command:b,b=u?b.derivedCommands.hdr.command:b;let C=p&&b.receiveShadows?b.derivedCommands.oit.shadows.translucentCommand:b.derivedCommands.oit.translucentCommand;n(C,t,i,A)}if(l(r)){let f=r.unclassifiedCommand,b=p&&f.receiveShadows?f.derivedCommands.oit.shadows.translucentCommand:f.derivedCommands.oit.translucentCommand;n(b,t,i,A)}i.framebuffer=e._alphaFBO.framebuffer;for(let f=0;f<o.length;++f){let b=o[f];b=c?b.derivedCommands.logDepth.command:b,b=u?b.derivedCommands.hdr.command:b;let C=p&&b.receiveShadows?b.derivedCommands.oit.shadows.alphaCommand:b.derivedCommands.oit.alphaCommand;n(C,t,i,A)}if(l(r)){let f=r.unclassifiedCommand,b=p&&f.receiveShadows?f.derivedCommands.oit.shadows.alphaCommand:f.derivedCommands.oit.alphaCommand;n(b,t,i,A)}i.framebuffer=h}function TEt(e,t,n,i,o,r){let{context:s,frameState:a}=t,{useLogDepth:c,shadowState:d}=a,u=t._hdr,h=i.framebuffer,p=d.lightShadowsEnabled;i.framebuffer=e._adjustTranslucentFBO.framebuffer,e._adjustTranslucentCommand.execute(s,i);let A=e._opaqueFBO.framebuffer;i.framebuffer=e._translucentFBO.framebuffer;for(let f=0;f<o.length;++f){let b=o[f];b=c?b.derivedCommands.logDepth.command:b,b=u?b.derivedCommands.hdr.command:b;let C=p&&b.receiveShadows?b.derivedCommands.oit.shadows.translucentCommand:b.derivedCommands.oit.translucentCommand;n(C,t,i,A)}if(l(r)){let f=r.unclassifiedCommand,b=p&&f.receiveShadows?f.derivedCommands.oit.shadows.translucentCommand:f.derivedCommands.oit.translucentCommand;n(b,t,i,A)}i.framebuffer=h}Eb.prototype.executeCommands=function(e,t,n,i,o){if(this._translucentMRTSupport){TEt(this,e,t,n,i,o);return}CEt(this,e,t,n,i,o)};Eb.prototype.execute=function(e,t){this._compositeCommand.execute(e,t)};Eb.prototype.clear=function(e,t,n){let i=t.framebuffer;t.framebuffer=this._opaqueFBO.framebuffer,U.clone(n,this._opaqueClearCommand.color),this._opaqueClearCommand.execute(e,t),t.framebuffer=this._translucentFBO.framebuffer,(this._translucentMRTSupport?this._translucentMRTClearCommand:this._translucentMultipassClearCommand).execute(e,t),this._translucentMultipassSupport&&(t.framebuffer=this._alphaFBO.framebuffer,this._alphaClearCommand.execute(e,t)),t.framebuffer=i};Eb.prototype.isSupported=function(){return this._translucentMRTSupport||this._translucentMultipassSupport};Eb.prototype.isDestroyed=function(){return!1};Eb.prototype.destroy=function(){return IIe(this),l(this._compositeCommand)&&(this._compositeCommand.shaderProgram=this._compositeCommand.shaderProgram&&this._compositeCommand.shaderProgram.destroy()),l(this._adjustTranslucentCommand)&&(this._adjustTranslucentCommand.shaderProgram=this._adjustTranslucentCommand.shaderProgram&&this._adjustTranslucentCommand.shaderProgram.destroy()),l(this._adjustAlphaCommand)&&(this._adjustAlphaCommand.shaderProgram=this._adjustAlphaCommand.shaderProgram&&this._adjustAlphaCommand.shaderProgram.destroy()),he(this)};var OY=Eb;var yno=y(x(),1);function zY(){this._framebuffer=new Ti({color:!1,depthStencil:!0,supportsDepthTexture:!0}),this._passState=void 0}Object.defineProperties(zY.prototype,{framebuffer:{get:function(){return this._framebuffer.framebuffer}}});function EEt(e){e._framebuffer.destroy()}function SEt(e,t){let n=t.drawingBufferWidth,i=t.drawingBufferHeight;e._framebuffer.update(t,n,i);let o=new Uc(t);o.blendingEnabled=!1,o.scissorTest={enabled:!0,rectangle:new nt},o.viewport=new nt,e._passState=o}zY.prototype.update=function(e,t,n){let i=n.width,o=n.height;this._framebuffer.isDirty(i,o)&&SEt(this,e);let r=this.framebuffer,s=this._passState;return s.framebuffer=r,s.viewport.width=i,s.viewport.height=o,s.scissorTest.rectangle.x=t.x,s.scissorTest.rectangle.y=o-t.y,s.scissorTest.rectangle.width=1,s.scissorTest.rectangle.height=1,s};zY.prototype.isDestroyed=function(){return!1};zY.prototype.destroy=function(){return EEt(this),he(this)};var HY=zY;var Lno=y(x(),1);function fE(e){let t=new Uc(e);t.blendingEnabled=!1,t.scissorTest={enabled:!0,rectangle:new nt},t.viewport=new nt,this._context=e,this._fb=new Ti({depthStencil:!0}),this._passState=t,this._width=0,this._height=0}function ZIe(e,t,n,i,o=1){let r=Math.max(n,i),s=r*r,a=Math.floor(n*.5),c=Math.floor(i*.5),d=0,u=0,h=0,p=-1,A=new Set;for(let f=0;f<s;++f){if(-a<=d&&d<=a&&-c<=u&&u<=c){let b=4*((c-u)*n+d+a),C=U.bytesToRgba(t[b],t[b+1],t[b+2],t[b+3]),T=e.getObjectByPickColor(C);if(l(T)&&(A.add(T),A.size>=o))break}if(d===u||d<0&&-d===u||d>0&&d===1-u){let b=h;h=-p,p=b}d+=h,u+=p}return[...A]}fE.prototype.begin=function(e,t){let n=this._context,{width:i,height:o}=t;return nt.clone(e,this._passState.scissorTest.rectangle),this._width=i,this._height=o,this._fb.update(n,i,o),this._passState.framebuffer=this._fb.framebuffer,this._passState.viewport.width=i,this._passState.viewport.height=o,this._passState};fE.prototype.endAsync=async function(e,t,n=1){let i=e.width??1,o=e.height??1,r=this._context,s=this._fb.framebuffer,a=Oe.UNSIGNED_BYTE,c=Ke.RGBA;l(s)&&s.numberOfColorAttachments>0&&(a=s.getColorTexture(0).pixelDatatype,c=s.getColorTexture(0).pixelFormat);let d=r.readPixelsToPBO({x:e.x,y:e.y,width:i,height:o,framebuffer:s}),u=KL.create({context:r});try{await u.waitForSignal(A=>t.afterRender.push(A));let h=Ke.createTypedArray(c,a,i,o);return d.getBufferData(h),ZIe(r,h,i,o,n)}catch{throw new me("Async Picking Request Timeout")}finally{u.destroy(),d.destroy()}};fE.prototype.end=function(e,t=1){let n=e.width??1,i=e.height??1,o=this._context,r=o.readPixels({x:e.x,y:e.y,width:n,height:i,framebuffer:this._fb.framebuffer});return ZIe(o,r,n,i,t)};fE.prototype.readCenterPixel=function(e){let t=e.width??1,n=e.height??1,o=this._context.readPixels({x:e.x,y:e.y,width:t,height:n,framebuffer:this._fb.framebuffer}),r=Math.floor(t*.5),a=4*(Math.floor(n*.5)*t+r);return o.slice(a,a+4)};fE.prototype.isDestroyed=function(){return!1};fE.prototype.destroy=function(){return this._fb.destroy(),he(this)};var JY=fE;var Xno=y(x(),1);function Sb(){this._numSamples=1,this._colorFramebuffer=new Ti({depthStencil:!0,supportsDepthTexture:!0}),this._idFramebuffer=new Ti({depthStencil:!0,supportsDepthTexture:!0}),this._idClearColor=new U(0,0,0,0),this._clearCommand=new mi({color:new U(0,0,0,0),depth:1,owner:this})}function _Et(e){e._colorFramebuffer.destroy(),e._idFramebuffer.destroy()}Object.defineProperties(Sb.prototype,{framebuffer:{get:function(){return this._colorFramebuffer.framebuffer}},idFramebuffer:{get:function(){return this._idFramebuffer.framebuffer}},depthStencilTexture:{get:function(){return this._colorFramebuffer.getDepthStencilTexture()}}});Sb.prototype.update=function(e,t,n,i){let o=t.width,r=t.height,s=n?e.halfFloatingPointTexture?Oe.HALF_FLOAT:Oe.FLOAT:Oe.UNSIGNED_BYTE;this._numSamples=i,this._colorFramebuffer.update(e,o,r,i,s),this._idFramebuffer.update(e,o,r)};Sb.prototype.clear=function(e,t,n){U.clone(n,this._clearCommand.color),U.clone(this._idClearColor,this._clearCommand.color),this._colorFramebuffer.clear(e,this._clearCommand,t),this._idFramebuffer.clear(e,this._clearCommand,t)};Sb.prototype.getFramebuffer=function(){return this._colorFramebuffer.framebuffer};Sb.prototype.getIdFramebuffer=function(){return this._idFramebuffer.framebuffer};Sb.prototype.prepareColorTextures=function(e){this._numSamples>1&&this._colorFramebuffer.prepareTextures(e)};Sb.prototype.isDestroyed=function(){return!1};Sb.prototype.destroy=function(){return _Et(this),he(this)};var pE=Sb;var wio=y(x(),1);var Uno=y(x(),1);function AE(){}AE.getShadowCastShaderKeyword=function(e,t,n,i){return`castShadow ${e} ${t} ${n} ${i}`};AE.createShadowCastVertexShader=function(e,t,n){let i=e.defines.slice(0),o=e.sources.slice(0);i.push("SHADOW_MAP"),n&&i.push("GENERATE_POSITION");let r=ze.findPositionVarying(e),s=l(r);if(t&&!s){let a=o.length;for(let d=0;d<a;++d)o[d]=ze.replaceMain(o[d],"czm_shadow_cast_main");o.push(`out vec3 v_positionEC;
void main()
{
czm_shadow_cast_main();
v_positionEC = (czm_inverseProjection * gl_Position).xyz;
}`)}return new ze({defines:i,sources:o})};AE.createShadowCastFragmentShader=function(e,t,n,i){let o=e.defines.slice(0),r=e.sources.slice(0);o.push("SHADOW_MAP");let s=ze.findPositionVarying(e),a=l(s);a||(s="v_positionEC");let c=r.length;for(let u=0;u<c;++u)r[u]=ze.replaceMain(r[u],"czm_shadow_cast_main");let d="";return t&&(a||(d+=`in vec3 v_positionEC;
`),d+=`uniform vec4 shadowMap_lightPositionEC;
`),i?d+=`void main()
{
`:d+=`void main()
{
czm_shadow_cast_main();
if (out_FragColor.a == 0.0)
{
discard;
}
`,t?d+=` float distance = length(${s});
if (distance >= shadowMap_lightPositionEC.w)
{
discard;
}
distance /= shadowMap_lightPositionEC.w; // radius
out_FragColor = czm_packDepth(distance);
`:n?d+=` out_FragColor = vec4(1.0);
`:d+=` out_FragColor = czm_packDepth(gl_FragCoord.z);
`,d+=`}
`,r.push(d),new ze({defines:o,sources:r})};AE.getShadowReceiveShaderKeyword=function(e,t,n,i){let o=e._usesDepthTexture,r=e._polygonOffsetSupported,s=e._isPointLight,a=e._isSpotLight,c=e._numberOfCascades>1,d=e.debugCascadeColors,u=e.softShadows;return`receiveShadow ${o}${r}${s}${a}${c}${d}${u}${t}${n}${i}`};AE.createShadowReceiveVertexShader=function(e,t,n){let i=e.defines.slice(0),o=e.sources.slice(0);return i.push("SHADOW_MAP"),t&&(n?i.push("GENERATE_POSITION_AND_NORMAL"):i.push("GENERATE_POSITION")),new ze({defines:i,sources:o})};AE.createShadowReceiveFragmentShader=function(e,t,n,i,o){let r=ze.findNormalVarying(e),s=!i&&l(r)||i&&o,a=ze.findPositionVarying(e),c=l(a),d=t._usesDepthTexture,u=t._polygonOffsetSupported,h=t._isPointLight,p=t._isSpotLight,A=t._numberOfCascades>1,f=t.debugCascadeColors,b=t.softShadows,C=h?t._pointBias:i?t._terrainBias:t._primitiveBias,T=e.defines.slice(0),E=e.sources.slice(0),S=E.length;for(let V=0;V<S;++V)E[V]=ze.replaceMain(E[V],"czm_shadow_receive_main");h?T.push("USE_CUBE_MAP_SHADOW"):d&&T.push("USE_SHADOW_DEPTH_TEXTURE"),b&&!h&&T.push("USE_SOFT_SHADOWS"),A&&n&&i&&(s?T.push("ENABLE_VERTEX_LIGHTING"):T.push("ENABLE_DAYNIGHT_SHADING")),n&&C.normalShading&&s&&(T.push("USE_NORMAL_SHADING"),C.normalShadingSmooth>0&&T.push("USE_NORMAL_SHADING_SMOOTH"));let I="";h?I+=`uniform samplerCube shadowMap_textureCube;
`:I+=`uniform sampler2D shadowMap_texture;
`;let R;return c?R=` return vec4(${a}, 1.0);
`:R=`#ifndef LOG_DEPTH
return czm_windowToEyeCoordinates(gl_FragCoord);
#else
return vec4(v_logPositionEC, 1.0);
#endif
`,I+=`uniform mat4 shadowMap_matrix;
uniform vec3 shadowMap_lightDirectionEC;
uniform vec4 shadowMap_lightPositionEC;
uniform vec4 shadowMap_normalOffsetScaleDistanceMaxDistanceAndDarkness;
uniform vec4 shadowMap_texelSizeDepthBiasAndNormalShadingSmooth;
#ifdef LOG_DEPTH
in vec3 v_logPositionEC;
#endif
vec4 getPositionEC()
{
${R}}
vec3 getNormalEC()
{
${s?` return normalize(${r});
`:` return vec3(1.0);
`}}
void applyNormalOffset(inout vec4 positionEC, vec3 normalEC, float nDotL)
{
${C.normalOffset&&s?` float normalOffset = shadowMap_normalOffsetScaleDistanceMaxDistanceAndDarkness.x;
float normalOffsetScale = 1.0 - nDotL;
vec3 offset = normalOffset * normalOffsetScale * normalEC;
positionEC.xyz += offset;
`:""}}
`,I+=`void main()
{
czm_shadow_receive_main();
vec4 positionEC = getPositionEC();
vec3 normalEC = getNormalEC();
float depth = -positionEC.z;
`,I+=` czm_shadowParameters shadowParameters;
shadowParameters.texelStepSize = shadowMap_texelSizeDepthBiasAndNormalShadingSmooth.xy;
shadowParameters.depthBias = shadowMap_texelSizeDepthBiasAndNormalShadingSmooth.z;
shadowParameters.normalShadingSmooth = shadowMap_texelSizeDepthBiasAndNormalShadingSmooth.w;
shadowParameters.darkness = shadowMap_normalOffsetScaleDistanceMaxDistanceAndDarkness.w;
`,i?I+=` shadowParameters.depthBias *= max(depth * 0.01, 1.0);
`:u||(I+=` shadowParameters.depthBias *= mix(1.0, 100.0, depth * 0.0015);
`),h?I+=` vec3 directionEC = positionEC.xyz - shadowMap_lightPositionEC.xyz;
float distance = length(directionEC);
directionEC = normalize(directionEC);
float radius = shadowMap_lightPositionEC.w;
// Stop early if the fragment is beyond the point light radius
if (distance > radius)
{
return;
}
vec3 directionWC = czm_inverseViewRotation * directionEC;
shadowParameters.depth = distance / radius;
shadowParameters.nDotL = clamp(dot(normalEC, -directionEC), 0.0, 1.0);
shadowParameters.texCoords = directionWC;
float visibility = czm_shadowVisibility(shadowMap_textureCube, shadowParameters);
`:p?I+=` vec3 directionEC = normalize(positionEC.xyz - shadowMap_lightPositionEC.xyz);
float nDotL = clamp(dot(normalEC, -directionEC), 0.0, 1.0);
applyNormalOffset(positionEC, normalEC, nDotL);
vec4 shadowPosition = shadowMap_matrix * positionEC;
// Spot light uses a perspective projection, so perform the perspective divide
shadowPosition /= shadowPosition.w;
// Stop early if the fragment is not in the shadow bounds
if (any(lessThan(shadowPosition.xyz, vec3(0.0))) || any(greaterThan(shadowPosition.xyz, vec3(1.0))))
{
return;
}
shadowParameters.texCoords = shadowPosition.xy;
shadowParameters.depth = shadowPosition.z;
shadowParameters.nDotL = nDotL;
float visibility = czm_shadowVisibility(shadowMap_texture, shadowParameters);
`:A?I+=` float maxDepth = shadowMap_cascadeSplits[1].w;
// Stop early if the eye depth exceeds the last cascade
if (depth > maxDepth)
{
return;
}
// Get the cascade based on the eye-space depth
vec4 weights = czm_cascadeWeights(depth);
// Apply normal offset
float nDotL = clamp(dot(normalEC, shadowMap_lightDirectionEC), 0.0, 1.0);
applyNormalOffset(positionEC, normalEC, nDotL);
// Transform position into the cascade
vec4 shadowPosition = czm_cascadeMatrix(weights) * positionEC;
// Get visibility
shadowParameters.texCoords = shadowPosition.xy;
shadowParameters.depth = shadowPosition.z;
shadowParameters.nDotL = nDotL;
float visibility = czm_shadowVisibility(shadowMap_texture, shadowParameters);
// Fade out shadows that are far away
float shadowMapMaximumDistance = shadowMap_normalOffsetScaleDistanceMaxDistanceAndDarkness.z;
float fade = max((depth - shadowMapMaximumDistance * 0.8) / (shadowMapMaximumDistance * 0.2), 0.0);
visibility = mix(visibility, 1.0, fade);
${f?` // Draw cascade colors for debugging
out_FragColor *= czm_cascadeColor(weights);
`:""}`:I+=` float nDotL = clamp(dot(normalEC, shadowMap_lightDirectionEC), 0.0, 1.0);
applyNormalOffset(positionEC, normalEC, nDotL);
vec4 shadowPosition = shadowMap_matrix * positionEC;
// Stop early if the fragment is not in the shadow bounds
if (any(lessThan(shadowPosition.xyz, vec3(0.0))) || any(greaterThan(shadowPosition.xyz, vec3(1.0))))
{
return;
}
shadowParameters.texCoords = shadowPosition.xy;
shadowParameters.depth = shadowPosition.z;
shadowParameters.nDotL = nDotL;
float visibility = czm_shadowVisibility(shadowMap_texture, shadowParameters);
`,I+=` out_FragColor.rgb *= visibility;
}
`,E.push(I),new ze({defines:T,sources:E})};var rA=AE;function sA(e){e=e??Q.EMPTY_OBJECT;let t=e.context;this._enabled=e.enabled??!0,this._softShadows=e.softShadows??!1,this._normalOffset=e.normalOffset??!0,this.dirty=!0,this.fromLightSource=e.fromLightSource??!0,this.darkness=e.darkness??.3,this._darkness=this.darkness,this.fadingEnabled=e.fadingEnabled??!0,this.maximumDistance=e.maximumDistance??5e3,this._outOfView=!1,this._outOfViewPrevious=!1,this._needsUpdate=!0;let n=!0;(hn.isEdge()||(hn.isChrome()||hn.isFirefox())&&hn.isWindows()&&!t.depthTexture)&&(n=!1),this._polygonOffsetSupported=n;let i=e.depthBiasStep??1;this._terrainBias={polygonOffset:n,polygonOffsetFactor:1.1,polygonOffsetUnits:4,normalOffset:this._normalOffset,normalOffsetScale:.5,normalShading:!0,normalShadingSmooth:.3,depthBias:1e-4*i},this._primitiveBias={polygonOffset:n,polygonOffsetFactor:1.1,polygonOffsetUnits:4,normalOffset:this._normalOffset,normalOffsetScale:.1,normalShading:!0,normalShadingSmooth:.05,depthBias:2e-5*i},this._pointBias={polygonOffset:!1,polygonOffsetFactor:1.1,polygonOffsetUnits:4,normalOffset:this._normalOffset,normalOffsetScale:0,normalShading:!0,normalShadingSmooth:.1,depthBias:5e-4*i},this._depthAttachment=void 0,this._colorAttachment=void 0,this._shadowMapMatrix=new F,this._shadowMapTexture=void 0,this._lightDirectionEC=new m,this._lightPositionEC=new re,this._distance=0,this._lightCamera=e.lightCamera,this._shadowMapCamera=new NO,this._shadowMapCullingVolume=void 0,this._sceneCamera=void 0,this._boundingSphere=new ue,this._isPointLight=e.isPointLight??!1,this._pointLightRadius=e.pointLightRadius??100,this._cascadesEnabled=this._isPointLight?!1:e.cascadesEnabled??!0,this._numberOfCascades=this._cascadesEnabled?e.numberOfCascades??4:0,this._fitNearFar=!0,this._maximumCascadeDistances=[25,150,700,Number.MAX_VALUE],this._textureSize=new M,this._isSpotLight=!1,this._cascadesEnabled?this._shadowMapCamera.frustum=new as:l(this._lightCamera.frustum.fov)&&(this._isSpotLight=!0),this._cascadeSplits=[new re,new re],this._cascadeMatrices=[new F,new F,new F,new F],this._cascadeDistances=new re;let o;this._isPointLight?o=6:this._cascadesEnabled?o=this._numberOfCascades:o=1,this._passes=new Array(o);for(let r=0;r<o;++r)this._passes[r]=new IEt(t);this.debugShow=!1,this.debugFreezeFrame=!1,this._debugFreezeFrame=!1,this._debugCascadeColors=!1,this._debugLightFrustum=void 0,this._debugCameraFrustum=void 0,this._debugCascadeFrustums=new Array(this._numberOfCascades),this._debugShadowViewCommand=void 0,this._usesDepthTexture=t.depthTexture,this._isPointLight&&(this._usesDepthTexture=!1),this._primitiveRenderState=void 0,this._terrainRenderState=void 0,this._pointRenderState=void 0,Bee(this),this._clearCommand=new mi({depth:1,color:new U}),this._clearPassState=new Uc(t),this._size=e.size??2048,this.size=this._size}sA.MAXIMUM_DISTANCE=2e4;function IEt(e){this.camera=new NO,this.passState=new Uc(e),this.framebuffer=void 0,this.textureOffsets=void 0,this.commandList=[],this.cullingVolume=void 0}function Fee(e,t){return Qe.fromCache({cull:{enabled:!0,face:wi.BACK},depthTest:{enabled:!0},colorMask:{red:e,green:e,blue:e,alpha:e},depthMask:!0,polygonOffset:{enabled:t.polygonOffset,factor:t.polygonOffsetFactor,units:t.polygonOffsetUnits}})}function Bee(e){let t=!e._usesDepthTexture;e._primitiveRenderState=Fee(t,e._primitiveBias),e._terrainRenderState=Fee(t,e._terrainBias),e._pointRenderState=Fee(t,e._pointBias)}sA.prototype.debugCreateRenderStates=function(){Bee(this)};Object.defineProperties(sA.prototype,{enabled:{get:function(){return this._enabled},set:function(e){this.dirty=this._enabled!==e,this._enabled=e}},normalOffset:{get:function(){return this._normalOffset},set:function(e){this.dirty=this._normalOffset!==e,this._normalOffset=e,this._terrainBias.normalOffset=e,this._primitiveBias.normalOffset=e,this._pointBias.normalOffset=e}},softShadows:{get:function(){return this._softShadows},set:function(e){this.dirty=this._softShadows!==e,this._softShadows=e}},size:{get:function(){return this._size},set:function(e){WEt(this,e)}},outOfView:{get:function(){return this._outOfView}},shadowMapCullingVolume:{get:function(){return this._shadowMapCullingVolume}},passes:{get:function(){return this._passes}},isPointLight:{get:function(){return this._isPointLight}},debugCascadeColors:{get:function(){return this._debugCascadeColors},set:function(e){this.dirty=this._debugCascadeColors!==e,this._debugCascadeColors=e}}});function wee(e){let t=e._passes.length;for(let n=0;n<t;++n){let i=e._passes[n],o=i.framebuffer;l(o)&&!o.isDestroyed()&&o.destroy(),i.framebuffer=void 0}e._depthAttachment=e._depthAttachment&&e._depthAttachment.destroy(),e._colorAttachment=e._colorAttachment&&e._colorAttachment.destroy()}function ZEt(e,t){let n=new nu({context:t,width:e._textureSize.x,height:e._textureSize.y,format:Tl.DEPTH_COMPONENT16}),i=new Lt({context:t,width:e._textureSize.x,height:e._textureSize.y,pixelFormat:Ke.RGBA,pixelDatatype:Oe.UNSIGNED_BYTE,sampler:Ht.NEAREST}),o=new ss({context:t,depthRenderbuffer:n,colorTextures:[i],destroyAttachments:!1}),r=e._passes.length;for(let s=0;s<r;++s){let a=e._passes[s];a.framebuffer=o,a.passState.framebuffer=o}e._shadowMapTexture=i,e._depthAttachment=n,e._colorAttachment=i}function REt(e,t){let n=new Lt({context:t,width:e._textureSize.x,height:e._textureSize.y,pixelFormat:Ke.DEPTH_STENCIL,pixelDatatype:Oe.UNSIGNED_INT_24_8,sampler:Ht.NEAREST}),i=new ss({context:t,depthStencilTexture:n,destroyAttachments:!1}),o=e._passes.length;for(let r=0;r<o;++r){let s=e._passes[r];s.framebuffer=i,s.passState.framebuffer=i}e._shadowMapTexture=n,e._depthAttachment=n}function VEt(e,t){let n=new nu({context:t,width:e._textureSize.x,height:e._textureSize.y,format:Tl.DEPTH_COMPONENT16}),i=new Or({context:t,width:e._textureSize.x,height:e._textureSize.y,pixelFormat:Ke.RGBA,pixelDatatype:Oe.UNSIGNED_BYTE,sampler:Ht.NEAREST}),o=[i.negativeX,i.negativeY,i.negativeZ,i.positiveX,i.positiveY,i.positiveZ];for(let r=0;r<6;++r){let s=new ss({context:t,depthRenderbuffer:n,colorTextures:[o[r]],destroyAttachments:!1}),a=e._passes[r];a.framebuffer=s,a.passState.framebuffer=s}e._shadowMapTexture=i,e._depthAttachment=n,e._colorAttachment=i}function GIe(e,t){e._isPointLight?VEt(e,t):e._usesDepthTexture?REt(e,t):ZEt(e,t)}function GEt(e,t){e._usesDepthTexture&&e._passes[0].framebuffer.status!==ne.FRAMEBUFFER_COMPLETE&&(e._usesDepthTexture=!1,Bee(e),wee(e),GIe(e,t))}function LEt(e,t){(!l(e._passes[0].framebuffer)||e._shadowMapTexture.width!==e._textureSize.x)&&(wee(e),GIe(e,t),GEt(e,t),LIe(e,t))}function LIe(e,t,n){n=n??0,(e._isPointLight||n===0)&&(e._clearCommand.framebuffer=e._passes[n].framebuffer,e._clearCommand.execute(t,e._clearPassState))}function WEt(e,t){e._size=t;let n=e._passes,i=n.length,o=e._textureSize;if(e._isPointLight){t=Bt.maximumCubeMapSize>=t?t:Bt.maximumCubeMapSize,o.x=t,o.y=t;let r=new nt(0,0,t,t);n[0].passState.viewport=r,n[1].passState.viewport=r,n[2].passState.viewport=r,n[3].passState.viewport=r,n[4].passState.viewport=r,n[5].passState.viewport=r}else i===1?(t=Bt.maximumTextureSize>=t?t:Bt.maximumTextureSize,o.x=t,o.y=t,n[0].passState.viewport=new nt(0,0,t,t)):i===4&&(t=Bt.maximumTextureSize>=t*2?t:Bt.maximumTextureSize/2,o.x=t*2,o.y=t*2,n[0].passState.viewport=new nt(0,0,t,t),n[1].passState.viewport=new nt(t,0,t,t),n[2].passState.viewport=new nt(0,t,t,t),n[3].passState.viewport=new nt(t,t,t,t));e._clearPassState.viewport=new nt(0,0,o.x,o.y);for(let r=0;r<i;++r){let s=n[r],a=s.passState.viewport,c=a.x/o.x,d=a.y/o.y,u=a.width/o.x,h=a.height/o.y;s.textureOffsets=new F(u,0,0,c,0,h,0,d,0,0,1,0,0,0,0,1)}}var FEt=new nt;function BEt(e,t){let n;e._isPointLight?n=`uniform samplerCube shadowMap_textureCube;
in vec2 v_textureCoordinates;
void main()
{
vec2 uv = v_textureCoordinates;
vec3 dir;
if (uv.y < 0.5)
{
if (uv.x < 0.333)
{
dir.x = -1.0;
dir.y = uv.x * 6.0 - 1.0;
dir.z = uv.y * 4.0 - 1.0;
}
else if (uv.x < 0.666)
{
dir.y = -1.0;
dir.x = uv.x * 6.0 - 3.0;
dir.z = uv.y * 4.0 - 1.0;
}
else
{
dir.z = -1.0;
dir.x = uv.x * 6.0 - 5.0;
dir.y = uv.y * 4.0 - 1.0;
}
}
else
{
if (uv.x < 0.333)
{
dir.x = 1.0;
dir.y = uv.x * 6.0 - 1.0;
dir.z = uv.y * 4.0 - 3.0;
}
else if (uv.x < 0.666)
{
dir.y = 1.0;
dir.x = uv.x * 6.0 - 3.0;
dir.z = uv.y * 4.0 - 3.0;
}
else
{
dir.z = 1.0;
dir.x = uv.x * 6.0 - 5.0;
dir.y = uv.y * 4.0 - 3.0;
}
}
float shadow = czm_unpackDepth(czm_textureCube(shadowMap_textureCube, dir));
out_FragColor = vec4(vec3(shadow), 1.0);
}
`:n=`uniform sampler2D shadowMap_texture;
in vec2 v_textureCoordinates;
void main()
{
${e._usesDepthTexture?` float shadow = texture(shadowMap_texture, v_textureCoordinates).r;
`:` float shadow = czm_unpackDepth(texture(shadowMap_texture, v_textureCoordinates));
`} out_FragColor = vec4(vec3(shadow), 1.0);
}
`;let i=t.createViewportQuadCommand(n,{uniformMap:{shadowMap_texture:function(){return e._shadowMapTexture},shadowMap_textureCube:function(){return e._shadowMapTexture}}});return i.pass=Ge.OVERLAY,i}function wEt(e,t){let n=t.context,i=t.context.drawingBufferWidth,o=t.context.drawingBufferHeight,r=Math.min(i,o)*.3,s=FEt;s.x=i-r,s.y=0,s.width=r,s.height=r;let a=e._debugShadowViewCommand;l(a)||(a=BEt(e,n),e._debugShadowViewCommand=a),(!l(a.renderState)||!nt.equals(a.renderState.viewport,s))&&(a.renderState=Qe.fromCache({viewport:nt.clone(s)})),t.commandList.push(e._debugShadowViewCommand)}var aA=new Array(8);aA[0]=new re(-1,-1,-1,1);aA[1]=new re(1,-1,-1,1);aA[2]=new re(1,1,-1,1);aA[3]=new re(-1,1,-1,1);aA[4]=new re(-1,-1,1,1);aA[5]=new re(1,-1,1,1);aA[6]=new re(1,1,1,1);aA[7]=new re(-1,1,1,1);var Hy=new F,Nee=new Array(8);for(let e=0;e<8;++e)Nee[e]=new re;function NEt(e,t){let n=new wt({geometry:new Rh({minimum:new m(-.5,-.5,-.5),maximum:new m(.5,.5,.5)}),attributes:{color:$t.fromColor(t)}}),i=new wt({geometry:new Yg({radius:.5}),attributes:{color:$t.fromColor(t)}});return new Nn({geometryInstances:[n,i],appearance:new yn({translucent:!1,flat:!0}),asynchronous:!1,modelMatrix:e})}var PEt=[U.RED,U.GREEN,U.BLUE,U.MAGENTA],XEt=new m;function YEt(e,t){wEt(e,t);let n=e.debugFreezeFrame&&!e._debugFreezeFrame;if(e._debugFreezeFrame=e.debugFreezeFrame,e.debugFreezeFrame&&(n&&(e._debugCameraFrustum=e._debugCameraFrustum&&e._debugCameraFrustum.destroy(),e._debugCameraFrustum=new tA({camera:e._sceneCamera,color:U.CYAN,updateOnChange:!1})),e._debugCameraFrustum.update(t)),e._cascadesEnabled){if(e.debugFreezeFrame){n&&(e._debugLightFrustum=e._debugLightFrustum&&e._debugLightFrustum.destroy(),e._debugLightFrustum=new tA({camera:e._shadowMapCamera,color:U.YELLOW,updateOnChange:!1})),e._debugLightFrustum.update(t);for(let i=0;i<e._numberOfCascades;++i)n&&(e._debugCascadeFrustums[i]=e._debugCascadeFrustums[i]&&e._debugCascadeFrustums[i].destroy(),e._debugCascadeFrustums[i]=new tA({camera:e._passes[i].camera,color:PEt[i],updateOnChange:!1})),e._debugCascadeFrustums[i].update(t)}}else if(e._isPointLight){if(!l(e._debugLightFrustum)||e._needsUpdate){let i=e._shadowMapCamera.positionWC,o=Me.IDENTITY,r=e._pointLightRadius*2,s=m.fromElements(r,r,r,XEt),a=F.fromTranslationQuaternionRotationScale(i,o,s,Hy);e._debugLightFrustum=e._debugLightFrustum&&e._debugLightFrustum.destroy(),e._debugLightFrustum=NEt(a,U.YELLOW)}e._debugLightFrustum.update(t)}else(!l(e._debugLightFrustum)||e._needsUpdate)&&(e._debugLightFrustum=new tA({camera:e._shadowMapCamera,color:U.YELLOW,updateOnChange:!1})),e._debugLightFrustum.update(t)}function NO(){this.viewMatrix=new F,this.inverseViewMatrix=new F,this.frustum=void 0,this.positionCartographic=new Ae,this.positionWC=new m,this.directionWC=m.clone(m.UNIT_Z),this.upWC=m.clone(m.UNIT_Y),this.rightWC=m.clone(m.UNIT_X),this.viewProjectionMatrix=new F}NO.prototype.clone=function(e){F.clone(e.viewMatrix,this.viewMatrix),F.clone(e.inverseViewMatrix,this.inverseViewMatrix),this.frustum=e.frustum.clone(this.frustum),Ae.clone(e.positionCartographic,this.positionCartographic),m.clone(e.positionWC,this.positionWC),m.clone(e.directionWC,this.directionWC),m.clone(e.upWC,this.upWC),m.clone(e.rightWC,this.rightWC)};var MEt=new F(.5,0,0,.5,0,.5,0,.5,0,0,.5,.5,0,0,0,1);NO.prototype.getViewProjection=function(){let e=this.viewMatrix,t=this.frustum.projectionMatrix;return F.multiply(t,e,this.viewProjectionMatrix),F.multiply(MEt,this.viewProjectionMatrix,this.viewProjectionMatrix),this.viewProjectionMatrix};var vEt=new Array(5),UEt=new Ui,DEt=new Array(4),WIe=new m,FIe=new m;function kEt(e,t){let n=e._shadowMapCamera,i=e._sceneCamera,o=i.frustum.near,r=i.frustum.far,s=e._numberOfCascades,a,c=r-o,d=r/o,u=.9,h=!1;t.shadowState.closestObjectSize<200&&(h=!0,u=.9);let p=DEt,A=vEt;for(A[0]=o,A[s]=r,a=0;a<s;++a){let P=(a+1)/s,g=o*Math.pow(d,P),_=o+c*P,Z=L.lerp(_,g,u);A[a+1]=Z,p[a]=Z-A[a]}if(h){for(a=0;a<s;++a)p[a]=Math.min(p[a],e._maximumCascadeDistances[a]);let P=A[0];for(a=0;a<s-1;++a)P+=p[a],A[a+1]=P}re.unpack(A,0,e._cascadeSplits[0]),re.unpack(A,1,e._cascadeSplits[1]),re.unpack(p,0,e._cascadeDistances);let f=n.frustum,b=f.left,C=f.right,T=f.bottom,E=f.top,S=f.near,I=f.far,R=n.positionWC,V=n.directionWC,W=n.upWC,B=i.frustum.clone(UEt),N=n.getViewProjection();for(a=0;a<s;++a){B.near=A[a],B.far=A[a+1];let P=F.multiply(B.projectionMatrix,i.viewMatrix,Hy),g=F.inverse(P,Hy),_=F.multiply(N,g,Hy),Z=m.fromElements(Number.MAX_VALUE,Number.MAX_VALUE,Number.MAX_VALUE,WIe),G=m.fromElements(-Number.MAX_VALUE,-Number.MAX_VALUE,-Number.MAX_VALUE,FIe);for(let D=0;D<8;++D){let Y=re.clone(aA[D],Nee[D]);F.multiplyByVector(_,Y,Y),m.divideByScalar(Y,Y.w,Y),m.minimumByComponent(Y,Z,Z),m.maximumByComponent(Y,G,G)}Z.x=Math.max(Z.x,0),Z.y=Math.max(Z.y,0),Z.z=0,G.x=Math.min(G.x,1),G.y=Math.min(G.y,1),G.z=Math.min(G.z,1);let w=e._passes[a],X=w.camera;X.clone(n);let k=X.frustum;k.left=b+Z.x*(C-b),k.right=b+G.x*(C-b),k.bottom=T+Z.y*(E-T),k.top=T+G.y*(E-T),k.near=S+Z.z*(I-S),k.far=S+G.z*(I-S),w.cullingVolume=X.frustum.computeCullingVolume(R,V,W);let v=e._cascadeMatrices[a];F.multiply(X.getViewProjection(),i.inverseViewMatrix,v),F.multiply(w.textureOffsets,v,v)}}var QEt=new F,OEt=new m,zEt=new m,RIe=new m;function HEt(e,t){let n=e._shadowMapCamera,i=e._sceneCamera,o=F.multiply(i.frustum.projectionMatrix,i.viewMatrix,Hy),r=F.inverse(o,Hy),s=n.directionWC,a=i.directionWC;m.equalsEpsilon(s,a,L.EPSILON10)&&(a=i.upWC);let c=m.cross(s,a,OEt);a=m.cross(c,s,zEt),m.normalize(a,a),m.normalize(c,c);let d=m.fromElements(0,0,0,RIe),u=F.computeView(d,s,a,c,QEt),h=F.multiply(u,r,Hy),p=m.fromElements(Number.MAX_VALUE,Number.MAX_VALUE,Number.MAX_VALUE,WIe),A=m.fromElements(-Number.MAX_VALUE,-Number.MAX_VALUE,-Number.MAX_VALUE,FIe);for(let I=0;I<8;++I){let R=re.clone(aA[I],Nee[I]);F.multiplyByVector(h,R,R),m.divideByScalar(R,R.w,R),m.minimumByComponent(R,p,p),m.maximumByComponent(R,A,A)}A.z+=1e3,p.z-=10;let f=RIe;f.x=-(.5*(p.x+A.x)),f.y=-(.5*(p.y+A.y)),f.z=-A.z;let b=F.fromTranslation(f,Hy);u=F.multiply(b,u,u);let C=.5*(A.x-p.x),T=.5*(A.y-p.y),E=A.z-p.z,S=n.frustum;S.left=-C,S.right=C,S.bottom=-T,S.top=T,S.near=.01,S.far=E,F.clone(u,n.viewMatrix),F.inverse(u,n.inverseViewMatrix),F.getTranslation(n.inverseViewMatrix,n.positionWC),t.mapProjection.ellipsoid.cartesianToCartographic(n.positionWC,n.positionCartographic),m.clone(s,n.directionWC),m.clone(a,n.upWC),m.clone(c,n.rightWC)}var JEt=[new m(-1,0,0),new m(0,-1,0),new m(0,0,-1),new m(1,0,0),new m(0,1,0),new m(0,0,1)],KEt=[new m(0,-1,0),new m(0,0,-1),new m(0,-1,0),new m(0,-1,0),new m(0,0,1),new m(0,-1,0)],jEt=[new m(0,0,1),new m(1,0,0),new m(-1,0,0),new m(0,0,-1),new m(1,0,0),new m(1,0,0)];function qEt(e,t){let n=new Ui;n.fov=L.PI_OVER_TWO,n.near=1,n.far=e._pointLightRadius,n.aspectRatio=1;for(let i=0;i<6;++i){let o=e._passes[i].camera;o.positionWC=e._shadowMapCamera.positionWC,o.positionCartographic=t.mapProjection.ellipsoid.cartesianToCartographic(o.positionWC,o.positionCartographic),o.directionWC=JEt[i],o.upWC=KEt[i],o.rightWC=jEt[i],F.computeView(o.positionWC,o.directionWC,o.upWC,o.rightWC,o.viewMatrix),F.inverse(o.viewMatrix,o.inverseViewMatrix),o.frustum=n}}var $Et=new m,eSt=new m,BIe=new ue,VIe=BIe.center;function tSt(e,t){let n=e._sceneCamera,i=e._shadowMapCamera,o=BIe;if(e._cascadesEnabled){if(n.frustum.near>=e.maximumDistance){e._outOfView=!0,e._needsUpdate=!1;return}let r=t.mapProjection.ellipsoid.geodeticSurfaceNormal(n.positionWC,$Et),s=m.negate(i.directionWC,eSt),a=m.dot(r,s);if(e.fadingEnabled){let c=L.clamp(a/.1,0,1);e._darkness=L.lerp(1,e.darkness,c)}else e._darkness=e.darkness;if(a<0){e._outOfView=!0,e._needsUpdate=!1;return}e._needsUpdate=!0,e._outOfView=!1}else if(e._isPointLight)o.center=i.positionWC,o.radius=e._pointLightRadius,e._outOfView=t.cullingVolume.computeVisibility(o)===qt.OUTSIDE,e._needsUpdate=!e._outOfView&&!e._boundingSphere.equals(o),ue.clone(o,e._boundingSphere);else{let r=i.frustum.far/2,s=m.add(i.positionWC,m.multiplyByScalar(i.directionWC,r,VIe),VIe);o.center=s,o.radius=r,e._outOfView=t.cullingVolume.computeVisibility(o)===qt.OUTSIDE,e._needsUpdate=!e._outOfView&&!e._boundingSphere.equals(o),ue.clone(o,e._boundingSphere)}}function nSt(e,t){let n=t.camera,i=e._lightCamera,o=e._sceneCamera,r=e._shadowMapCamera;e._cascadesEnabled?m.clone(i.directionWC,r.directionWC):e._isPointLight?m.clone(i.positionWC,r.positionWC):r.clone(i);let s=e._lightDirectionEC;F.multiplyByPointAsVector(n.viewMatrix,r.directionWC,s),m.normalize(s,s),m.negate(s,s),F.multiplyByPoint(n.viewMatrix,r.positionWC,e._lightPositionEC),e._lightPositionEC.w=e._pointLightRadius;let a,c;e._fitNearFar?(a=Math.min(t.shadowState.nearPlane,e.maximumDistance),c=Math.min(t.shadowState.farPlane,e.maximumDistance),c=Math.max(c,a+1)):(a=n.frustum.near,c=e.maximumDistance),e._sceneCamera=Zo.clone(n,o),n.frustum.clone(e._sceneCamera.frustum),e._sceneCamera.frustum.near=a,e._sceneCamera.frustum.far=c,e._distance=c-a,tSt(e,t),!e._outOfViewPrevious&&e._outOfView&&(e._needsUpdate=!0),e._outOfViewPrevious=e._outOfView}sA.prototype.update=function(e){if(nSt(this,e),this._needsUpdate)if(LEt(this,e.context),this._isPointLight&&qEt(this,e),this._cascadesEnabled&&(HEt(this,e),this._numberOfCascades>1&&kEt(this,e)),this._isPointLight)this._shadowMapCullingVolume=Os.fromBoundingSphere(this._boundingSphere);else{let t=this._shadowMapCamera,n=t.positionWC,i=t.directionWC,o=t.upWC;this._shadowMapCullingVolume=t.frustum.computeCullingVolume(n,i,o),this._passes.length===1&&this._passes[0].camera.clone(t)}if(this._passes.length===1){let t=this._sceneCamera.inverseViewMatrix;F.multiply(this._shadowMapCamera.getViewProjection(),t,this._shadowMapMatrix)}this.debugShow&&YEt(this,e)};sA.prototype.updatePass=function(e,t){LIe(this,e,t)};var iSt=new M;function wIe(e,t,n){let i=e._isPointLight?e._pointBias:n?e._terrainBias:e._primitiveBias,o={shadowMap_texture:function(){return e._shadowMapTexture},shadowMap_textureCube:function(){return e._shadowMapTexture},shadowMap_matrix:function(){return e._shadowMapMatrix},shadowMap_cascadeSplits:function(){return e._cascadeSplits},shadowMap_cascadeMatrices:function(){return e._cascadeMatrices},shadowMap_lightDirectionEC:function(){return e._lightDirectionEC},shadowMap_lightPositionEC:function(){return e._lightPositionEC},shadowMap_cascadeDistances:function(){return e._cascadeDistances},shadowMap_texelSizeDepthBiasAndNormalShadingSmooth:function(){let r=iSt;return r.x=1/e._textureSize.x,r.y=1/e._textureSize.y,re.fromElements(r.x,r.y,i.depthBias,i.normalShadingSmooth,this.combinedUniforms1)},shadowMap_normalOffsetScaleDistanceMaxDistanceAndDarkness:function(){return re.fromElements(i.normalOffsetScale,e._distance,e.maximumDistance,e._darkness,this.combinedUniforms2)},combinedUniforms1:new re,combinedUniforms2:new re};return Ft(t,o,!1)}function oSt(e,t,n,i,o,r){let s,a,c;if(l(r)&&(s=r.shaderProgram,a=r.renderState,c=r.uniformMap),r=ot.shallowClone(n,r),r.castShadows=!0,r.receiveShadows=!1,!l(s)||o!==n.shaderProgram.id||t){let d=n.shaderProgram,u=n.pass===Ge.GLOBE,h=n.pass!==Ge.TRANSLUCENT,p=e._isPointLight,A=e._usesDepthTexture,f=rA.getShadowCastShaderKeyword(p,u,A,h);if(s=i.shaderCache.getDerivedShaderProgram(d,f),!l(s)){let C=d.vertexShaderSource,T=d.fragmentShaderSource,E=rA.createShadowCastVertexShader(C,p,u),S=rA.createShadowCastFragmentShader(T,p,A,h);s=i.shaderCache.createDerivedShaderProgram(d,f,{vertexShaderSource:E,fragmentShaderSource:S,attributeLocations:d._attributeLocations})}a=e._primitiveRenderState,p?a=e._pointRenderState:u&&(a=e._terrainRenderState),n.renderState.cull.enabled||(a=He(a,!1),a.cull=He(a.cull,!1),a.cull.enabled=!1,a=Qe.fromCache(a)),c=wIe(e,n.uniformMap,u)}return r.shaderProgram=s,r.renderState=a,r.uniformMap=c,r}sA.createReceiveDerivedCommand=function(e,t,n,i,o){l(o)||(o={});let r=e.length>0,s=t.shaderProgram,a=s.vertexShaderSource,c=s.fragmentShaderSource,d=t.pass===Ge.GLOBE,u=!1;if(d&&(u=t.owner.data.renderedMesh.encoding.hasVertexNormals),t.receiveShadows&&r){let h,p;l(o.receiveCommand)&&(h=o.receiveCommand.shaderProgram,p=o.receiveCommand.uniformMap),o.receiveCommand=ot.shallowClone(t,o.receiveCommand),o.castShadows=!1,o.receiveShadows=!0;let A=o.receiveShaderCastShadows!==t.castShadows,f=o.receiveShaderProgramId!==t.shaderProgram.id;if(!l(h)||f||n||A){let b=rA.getShadowReceiveShaderKeyword(e[0],t.castShadows,d,u);if(h=i.shaderCache.getDerivedShaderProgram(s,b),!l(h)){let C=rA.createShadowReceiveVertexShader(a,d,u),T=rA.createShadowReceiveFragmentShader(c,e[0],t.castShadows,d,u);h=i.shaderCache.createDerivedShaderProgram(s,b,{vertexShaderSource:C,fragmentShaderSource:T,attributeLocations:s._attributeLocations})}p=wIe(e[0],t.uniformMap,d)}o.receiveCommand.shaderProgram=h,o.receiveCommand.uniformMap=p,o.receiveShaderProgramId=t.shaderProgram.id,o.receiveShaderCastShadows=t.castShadows}return o};sA.createCastDerivedCommand=function(e,t,n,i,o){if(l(o)||(o={}),t.castShadows){let r=o.castCommands;l(r)||(r=o.castCommands=[]);let s=o.castShaderProgramId,a=e.length;r.length=a;for(let c=0;c<a;++c)r[c]=oSt(e[c],n,t,i,s,r[c]);o.castShaderProgramId=t.shaderProgram.id}return o};sA.prototype.isDestroyed=function(){return!1};sA.prototype.destroy=function(){wee(this),this._debugLightFrustum=this._debugLightFrustum&&this._debugLightFrustum.destroy(),this._debugCameraFrustum=this._debugCameraFrustum&&this._debugCameraFrustum.destroy(),this._debugShadowViewCommand=this._debugShadowViewCommand&&this._debugShadowViewCommand.shaderProgram&&this._debugShadowViewCommand.shaderProgram.destroy();for(let e=0;e<this._numberOfCascades;++e)this._debugCascadeFrustums[e]=this._debugCascadeFrustums[e]&&this._debugCascadeFrustums[e].destroy();return he(this)};var _b=sA;var ooo=y(x(),1);var Pio=y(x(),1),gE=`uniform sampler2D colorTexture;
#ifdef DEBUG_SHOW_DEPTH
uniform sampler2D u_packedTranslucentDepth;
#endif
in vec2 v_textureCoordinates;
void main()
{
#ifdef DEBUG_SHOW_DEPTH
if (v_textureCoordinates.x < 0.5)
{
out_FragColor.rgb = vec3(czm_unpackDepth(texture(u_packedTranslucentDepth, v_textureCoordinates)));
out_FragColor.a = 1.0;
}
#else
vec4 color = texture(colorTexture, v_textureCoordinates);
#ifdef PICK
if (color == vec4(0.0))
{
discard;
}
#else
// Reverse premultiplication process to get the correct composited result of the classification primitives
color.rgb /= color.a;
#endif
out_FragColor = color;
#endif
}
`;var rSt=!1;function Jy(e){this._drawClassificationFBO=new Ti({createDepthAttachments:!1}),this._accumulationFBO=new Ti({createDepthAttachments:!1}),this._packFBO=new Ti,this._opaqueDepthStencilTexture=void 0,this._textureToComposite=void 0,this._translucentDepthStencilTexture=void 0,this._packDepthCommand=void 0,this._accumulateCommand=void 0,this._compositeCommand=void 0,this._copyCommand=void 0,this._clearColorCommand=new mi({color:new U(0,0,0,0),owner:this}),this._clearDepthStencilCommand=new mi({depth:1,stencil:0,owner:this}),this._supported=e.depthTexture,this._viewport=new nt,this._rsDepth=void 0,this._rsAccumulate=void 0,this._rsComp=void 0,this._useScissorTest=void 0,this._scissorRectangle=void 0,this._hasTranslucentDepth=!1,this._frustumsDrawn=0}Object.defineProperties(Jy.prototype,{hasTranslucentDepth:{get:function(){return this._hasTranslucentDepth}}});function NIe(e){e._textureToComposite=void 0,e._translucentDepthStencilTexture=e._translucentDepthStencilTexture&&!e._translucentDepthStencilTexture.isDestroyed()&&e._translucentDepthStencilTexture.destroy()}function PIe(e){e._drawClassificationFBO.destroy(),e._accumulationFBO.destroy(),e._packFBO.destroy()}function sSt(e,t,n,i){NIe(e),e._translucentDepthStencilTexture=new Lt({context:t,width:n,height:i,pixelFormat:Ke.DEPTH_STENCIL,pixelDatatype:Oe.UNSIGNED_INT_24_8,sampler:Ht.NEAREST})}function aSt(e,t,n,i){PIe(e),e._drawClassificationFBO.setDepthStencilTexture(e._translucentDepthStencilTexture),e._drawClassificationFBO.update(t,n,i),e._accumulationFBO.setDepthStencilTexture(e._translucentDepthStencilTexture),e._accumulationFBO.update(t,n,i),e._packFBO.update(t,n,i)}function cSt(e,t,n,i){if(!e.isSupported())return;e._opaqueDepthStencilTexture=i;let o=e._opaqueDepthStencilTexture.width,r=e._opaqueDepthStencilTexture.height;e._drawClassificationFBO.isDirty(o,r)&&(sSt(e,t,o,r),aSt(e,t,o,r));let s,a;if(l(e._packDepthCommand)||(s=new ze({sources:[zX]}),a={u_opaqueDepthTexture:function(){return e._opaqueDepthStencilTexture},u_translucentDepthTexture:function(){return e._translucentDepthStencilTexture}},e._packDepthCommand=t.createViewportQuadCommand(s,{uniformMap:a,owner:e})),!l(e._compositeCommand)){s=new ze({sources:[gE]}),a={colorTexture:function(){return e._textureToComposite}},rSt&&(s.defines=["DEBUG_SHOW_DEPTH"],a.u_packedTranslucentDepth=function(){return e._packFBO.getColorTexture()}),e._compositeCommand=t.createViewportQuadCommand(s,{uniformMap:a,owner:e});let u=e._compositeCommand,h=u.shaderProgram,p=t.shaderCache.createDerivedShaderProgram(h,"pick",{vertexShaderSource:h.vertexShaderSource,fragmentShaderSource:new ze({sources:s.sources,defines:["PICK"]}),attributeLocations:h._attributeLocations}),A=ot.shallowClone(u);A.shaderProgram=p,u.derivedCommands.pick=A}l(e._copyCommand)||(s=new ze({sources:[gE]}),a={colorTexture:function(){return e._drawClassificationFBO.getColorTexture()}},e._copyCommand=t.createViewportQuadCommand(s,{uniformMap:a,owner:e})),l(e._accumulateCommand)||(s=new ze({sources:[gE]}),a={colorTexture:function(){return e._drawClassificationFBO.getColorTexture()}},e._accumulateCommand=t.createViewportQuadCommand(s,{uniformMap:a,owner:e})),e._viewport.width=o,e._viewport.height=r;let c=!nt.equals(e._viewport,n.viewport),d=c!==e._useScissorTest;e._useScissorTest=c,nt.equals(e._scissorRectangle,n.viewport)||(e._scissorRectangle=nt.clone(n.viewport,e._scissorRectangle),d=!0),(!l(e._rsDepth)||!nt.equals(e._viewport,e._rsDepth.viewport)||d)&&(e._rsDepth=Qe.fromCache({viewport:e._viewport,scissorTest:{enabled:e._useScissorTest,rectangle:e._scissorRectangle}})),l(e._packDepthCommand)&&(e._packDepthCommand.renderState=e._rsDepth),(!l(e._rsAccumulate)||!nt.equals(e._viewport,e._rsAccumulate.viewport)||d)&&(e._rsAccumulate=Qe.fromCache({viewport:e._viewport,scissorTest:{enabled:e._useScissorTest,rectangle:e._scissorRectangle},stencilTest:{enabled:!0,frontFunction:ni.EQUAL,reference:Jt.CESIUM_3D_TILE_MASK}})),l(e._accumulateCommand)&&(e._accumulateCommand.renderState=e._rsAccumulate),(!l(e._rsComp)||!nt.equals(e._viewport,e._rsComp.viewport)||d)&&(e._rsComp=Qe.fromCache({viewport:e._viewport,scissorTest:{enabled:e._useScissorTest,rectangle:e._scissorRectangle},blending:ln.ALPHA_BLEND})),l(e._compositeCommand)&&(e._compositeCommand.renderState=e._rsComp,e._compositeCommand.derivedCommands.pick.renderState=e._rsComp)}Jy.prototype.executeTranslucentCommands=function(e,t,n,i,o){let r=e.frameState.useLogDepth,s=e.context,a=n.framebuffer;for(let c=0;c<i.length;++c){let d=i[c];if(d=r?d.derivedCommands.logDepth.command:d,d.depthForTranslucentClassification){this._hasTranslucentDepth=!0;break}}if(this._hasTranslucentDepth){cSt(this,s,n,o),n.framebuffer=this._drawClassificationFBO.framebuffer,this._clearDepthStencilCommand.execute(s,n);for(let c=0;c<i.length;++c){let d=i[c];if(d=r?d.derivedCommands.logDepth.command:d,!d.depthForTranslucentClassification)continue;let u=d.derivedCommands.depth.depthOnlyCommand;t(u,e,n)}this._frustumsDrawn+=this._hasTranslucentDepth?1:0,this._hasTranslucentDepth&&(n.framebuffer=this._packFBO.framebuffer,this._packDepthCommand.execute(s,n)),n.framebuffer=a}};Jy.prototype.executeClassificationCommands=function(e,t,n,i){if(!this._hasTranslucentDepth)return;let o=e.context,r=o.uniformState,s=n.framebuffer;n.framebuffer=this._accumulationFBO.framebuffer,this._accumulateCommand.execute(o,n),n.framebuffer=this._drawClassificationFBO.framebuffer,this._frustumsDrawn>1&&this._clearColorCommand.execute(o,n),r.updatePass(Ge.CESIUM_3D_TILE_CLASSIFICATION);let a=r.globeDepthTexture;r.globeDepthTexture=this._packFBO.getColorTexture();let c=i.commands[Ge.CESIUM_3D_TILE_CLASSIFICATION],d=i.indices[Ge.CESIUM_3D_TILE_CLASSIFICATION];for(let u=0;u<d;++u)t(c[u],e,n);r.globeDepthTexture=a,n.framebuffer=s,this._frustumsDrawn!==1&&(n.framebuffer=this._accumulationFBO.framebuffer,this._accumulateCommand.execute(o,n),n.framebuffer=s)};Jy.prototype.execute=function(e,t){if(!this._hasTranslucentDepth)return;this._frustumsDrawn===1?this._textureToComposite=this._drawClassificationFBO.getColorTexture():this._textureToComposite=this._accumulationFBO.getColorTexture(),(e.frameState.passes.pick?this._compositeCommand.derivedCommands.pick:this._compositeCommand).execute(e.context,t),lSt(this,e,t)};function lSt(e,t,n){if(!e._hasTranslucentDepth)return;let i=n.framebuffer;n.framebuffer=e._drawClassificationFBO.framebuffer,e._clearColorCommand.execute(t._context,n),n.framebuffer=i,e._frustumsDrawn>1&&(n.framebuffer=e._accumulationFBO.framebuffer,e._clearColorCommand.execute(t._context,n)),e._hasTranslucentDepth=!1,e._frustumsDrawn=0}Jy.prototype.isSupported=function(){return this._supported};Jy.prototype.isDestroyed=function(){return!1};Jy.prototype.destroy=function(){return NIe(this),PIe(this),l(this._compositeCommand)&&(this._compositeCommand.shaderProgram=this._compositeCommand.shaderProgram&&this._compositeCommand.shaderProgram.destroy()),l(this._packDepthCommand)&&(this._packDepthCommand.shaderProgram=this._packDepthCommand.shaderProgram&&this._packDepthCommand.shaderProgram.destroy()),he(this)};var KY=Jy;function dSt(){this.command=void 0,this.near=void 0,this.far=void 0}function PO(e,t,n){let i=e.context,o;i.depthTexture&&(o=new kY);let r;e._useOIT&&i.depthTexture&&(r=new OY(i));let s=new Uc(i);s.viewport=nt.clone(n),this.camera=t,this._cameraClone=Zo.clone(t),this._cameraStartFired=!1,this._cameraMovedTime=void 0,this.viewport=n,this.passState=s,this.pickFramebuffer=new JY(i),this.pickDepthFramebuffer=new HY,this.sceneFramebuffer=new pE,this.edgeFramebuffer=new UY,this.globeDepth=o,this.globeTranslucencyFramebuffer=new QY,this.oit=r,this.translucentTileClassification=new KY(i),this.pickDepths=[],this.frustumCommandsList=[],this.debugFrustumStatistics=void 0,this._commandExtents=[]}var Pee=new m,Xee=new m;function uSt(e,t,n){let i=Math.max(m.maximumComponent(m.abs(e.position,Pee)),m.maximumComponent(m.abs(t.position,Xee))),o=1/Math.max(1,i);return m.multiplyByScalar(e.position,o,Pee),m.multiplyByScalar(t.position,o,Xee),m.equalsEpsilon(Pee,Xee,n)&&m.equalsEpsilon(e.direction,t.direction,n)&&m.equalsEpsilon(e.up,t.up,n)&&m.equalsEpsilon(e.right,t.right,n)&&F.equalsEpsilon(e.transform,t.transform,n)&&e.frustum.equalsEpsilon(t.frustum,n)}PO.prototype.checkForCameraUpdates=function(e){let t=this.camera,n=this._cameraClone;return uSt(t,n,L.EPSILON15)?(this._cameraStartFired&&Xi()-this._cameraMovedTime>e.cameraEventWaitTime&&(t.moveEnd.raiseEvent(),this._cameraStartFired=!1),!1):(this._cameraStartFired||(t.moveStart.raiseEvent(),this._cameraStartFired=!0),this._cameraMovedTime=Xi(),Zo.clone(t,n),!0)};function mSt(e,t,n,i){let{frameState:o}=t,{camera:r,useLogDepth:s}=o,a=s?t.logarithmicDepthFarToNearRatio:t.farToNearRatio,c=t.mode===se.SCENE2D,d=t.nearToFarDistance2D;i*=1+L.EPSILON2,n=Math.min(Math.max(n,r.frustum.near),r.frustum.far),i=Math.max(Math.min(i,r.frustum.far),n),isNaN(n)&&(n=r.frustum.near),isNaN(i)&&(i=r.frustum.far);let u;c?(i=Math.min(i,r.position.z+t.nearToFarDistance2D),n=Math.min(n,i),u=Math.ceil(Math.max(1,i-n)/t.nearToFarDistance2D)):u=Math.ceil(Math.log(i/n)/Math.log(a));let{frustumCommandsList:h}=e;h.length=u;for(let p=0;p<u;++p){let A,f;c?(A=Math.min(i-d,n+p*d),f=Math.min(i,A+d)):(A=Math.max(n,Math.pow(a,p)*n),f=Math.min(i,a*A));let b=h[p];l(b)?(b.near=A,b.far=f):b=h[p]=new DY(A,f)}}function hSt(e,t,n){let{command:i,near:o,far:r}=n;t.debugShowFrustums&&(i.debugOverlappingFrustums=0);let{frustumCommandsList:s}=e;for(let a=0;a<s.length;++a){let c=s[a];if(o>c.far)continue;if(r<c.near)break;let d=i.pass,u=c.indices[d]++;if(c.commands[d][u]=i,t.debugShowFrustums&&(i.debugOverlappingFrustums|=1<<a),i.executeInClosestFrustum)break}if(t.debugShowFrustums){let{debugFrustumStatistics:a}=e,{debugOverlappingFrustums:c}=i,d=a.commandsInFrustums;d[c]=l(d[c])?d[c]+1:1,++a.totalCommands}t.updateDerivedCommands(i)}var XIe=new Os,fSt=new Qr;PO.prototype.createPotentiallyVisibleSet=function(e){let{frameState:t}=e,{camera:n,commandList:i,shadowState:o}=t,{positionWC:r,directionWC:s,frustum:a}=n,c=e._computeCommandList,d=e._overlayCommandList;e.debugShowFrustums&&(this.debugFrustumStatistics={totalCommands:0,commandsInFrustums:{}});let u=this.frustumCommandsList;for(let N=0;N<u.length;++N)for(let P=0;P<Ge.NUMBER_OF_PASSES;++P)u[N].indices[P]=0;c.length=0,d.length=0;let h=this._commandExtents,p=h.length,A=0,f=+Number.MAX_VALUE,b=-Number.MAX_VALUE,{shadowsEnabled:C}=o,T=+Number.MAX_VALUE,E=-Number.MAX_VALUE,S=Number.MAX_VALUE,I=t.mode===se.SCENE3D?t.occluder:void 0,{cullingVolume:R}=t,V=XIe.planes;for(let N=0;N<5;++N)V[N]=R.planes[N];R=XIe;for(let N=0;N<i.length;++N){let P=i[N],{pass:g,boundingVolume:_}=P;if(g===Ge.COMPUTE)c.push(P);else if(g===Ge.OVERLAY)d.push(P);else{let Z,G;if(l(_)){if(!e.isVisible(R,P,I))continue;let X=_.computePlaneDistances(r,s,fSt);if(Z=X.start,G=X.stop,f=Math.min(f,Z),b=Math.max(b,G),C&&P.receiveShadows&&Z<_b.MAXIMUM_DISTANCE&&!(g===Ge.GLOBE&&Z<-100&&G>100)){let k=G-Z;g!==Ge.GLOBE&&Z<100&&(S=Math.min(S,k)),T=Math.min(T,Z),E=Math.max(E,G)}}else P instanceof mi?(Z=a.near,G=a.far):(Z=a.near,G=a.far,f=Math.min(f,Z),b=Math.max(b,G));let w=h[A];l(w)||(w=h[A]=new dSt),w.command=P,w.near=Z,w.far=G,A++}}C&&(T=Math.min(Math.max(T,a.near),a.far),E=Math.max(Math.min(E,a.far),T),o.nearPlane=T,o.farPlane=E,o.closestObjectSize=S),mSt(this,e,f,b);for(let N=0;N<A;N++)hSt(this,e,h[N]);if(A<p)for(let N=A;N<p;N++){let P=h[N];if(!l(P.command))break;P.command=void 0}let W=u.length,{frustumSplits:B}=t;B.length=W+1;for(let N=0;N<W;++N)B[N]=u[N].near,N===W-1&&(B[N+1]=u[N].far)};PO.prototype.destroy=function(){this.pickFramebuffer=this.pickFramebuffer&&this.pickFramebuffer.destroy(),this.pickDepthFramebuffer=this.pickDepthFramebuffer&&this.pickDepthFramebuffer.destroy(),this.sceneFramebuffer=this.sceneFramebuffer&&this.sceneFramebuffer.destroy(),this.edgeFramebuffer=this.edgeFramebuffer&&this.edgeFramebuffer.destroy(),this.globeDepth=this.globeDepth&&this.globeDepth.destroy(),this.oit=this.oit&&this.oit.destroy(),this.translucentTileClassification=this.translucentTileClassification&&this.translucentTileClassification.destroy(),this.globeTranslucencyFramebuffer=this.globeTranslucencyFramebuffer&&this.globeTranslucencyFramebuffer.destroy();let e=this.pickDepths;for(let t=0;t<e.length;++t)e[t].destroy()};var bE=PO;var MIe=.1,pSt=new rh({pass:sr.MOST_DETAILED_PRELOAD}),ASt=new rh({pass:sr.MOST_DETAILED_PICK}),jY=new rh({pass:sr.PICK});function xa(e){this._mostDetailedRayPicks=[],this.pickRenderStateCache={},this._pickPositionCache={},this._pickPositionCacheDirty=!1;let t=new nt(0,0,1,1),n=new Zo(e);n.frustum=new bn({width:MIe,aspectRatio:1,near:.1}),this._pickOffscreenView=new bE(e,n,t)}xa.prototype.update=function(){this._pickPositionCacheDirty=!0};xa.prototype.getPickDepth=function(e,t){let n=e.view.pickDepths,i=n[t];return l(i)||(i=new vY,n[t]=i),i};var gSt=new as,bSt=new m,XO=new m,ySt=new M,xSt=new F;function CSt(e,t,n,i,o){let r=e.camera,s=r.frustum,a=s.offCenterFrustum;l(a)&&(s=a);let c=2*(t.x-o.x)/o.width-1;c*=(s.right-s.left)*.5;let d=2*(o.height-t.y-o.y)/o.height-1;d*=(s.top-s.bottom)*.5;let u=F.clone(r.transform,xSt);r._setTransform(F.IDENTITY);let h=m.clone(r.position,bSt);m.multiplyByScalar(r.right,c,XO),m.add(XO,h,h),m.multiplyByScalar(r.up,d,XO),m.add(XO,h,h),r._setTransform(u),e.mode===se.SCENE2D&&m.fromElements(h.z,h.x,h.y,h);let p=s.getPixelDimensions(o.width,o.height,1,1,ySt),A=gSt;return A.right=p.x*.5,A.left=-A.right,A.top=p.y*.5,A.bottom=-A.top,A.near=s.near,A.far=s.far,A.computeCullingVolume(h,r.directionWC,r.upWC)}var TSt=new id,ESt=new M;function SSt(e,t,n,i,o){let r=e.camera,s=r.frustum,a=s.near,c=Math.tan(s.fovy*.5),d=s.aspectRatio*c,u=2*(t.x-o.x)/o.width-1,h=2*(o.height-t.y-o.y)/o.height-1,p=u*a*d,A=h*a*c,f=s.getPixelDimensions(o.width,o.height,1,1,ESt),b=f.x*n*.5,C=f.y*i*.5,T=TSt;return T.top=A+C,T.bottom=A-C,T.right=p+b,T.left=p-b,T.near=a,T.far=s.far,T.computeCullingVolume(r.positionWC,r.directionWC,r.upWC)}function YO(e,t,n,i,o){let r=e.camera.frustum;return r instanceof bn||r instanceof as?CSt(e,t,n,i,o):SSt(e,t,n,i,o)}var qY=new nt(0,0,3,3),MO=new M,$Y=new U(0,0,0,0);function Yee(e,t,n,i,o){return o.width=n??3,o.height=i??o.width,o.x=t.x-(o.width-1)*.5,o.y=e-t.y-(o.height-1)*.5,o}function vIe(e,t,n,i,o){let{context:r,frameState:s,defaultView:a}=e,{viewport:c,pickFramebuffer:d}=a;e.view=a,c.x=0,c.y=0,c.width=r.drawingBufferWidth,c.height=r.drawingBufferHeight;let u=a.passState;u.viewport=nt.clone(c,u.viewport);let h=so.transformWindowToDrawingBuffer(e,t,MO);Yee(r.drawingBufferHeight,h,i,o,n),e.jobScheduler.disableThisFrame(),e.updateFrameState(),s.cullingVolume=YO(e,h,n.width,n.height,c),s.invertClassification=!1,s.passes.pick=!0,s.tilesetPassState=jY,r.uniformState.update(s),e.updateEnvironment(),u=d.begin(n,c),e.updateAndExecuteCommands(u,$Y),e.resolveFramebuffers(u)}function UIe(e){let{context:t}=e;t.endFrame()}xa.prototype.pickAsync=async function(e,t,n,i,o=1){let{context:r,frameState:s,defaultView:a}=e,{pickFramebuffer:c}=a,d=qY;vIe(e,t,d,n,i);let u;return r.webgl2?u=c.endAsync(d,s,o):(u=c.end(d,o),u=Promise.resolve(u),_t("picking-async-fallback","Fallback to synchronous picking because async operation requires WebGL2 context.")),UIe(e),u};xa.prototype.pick=function(e,t,n,i,o=1){let{defaultView:r}=e,{pickFramebuffer:s}=r,a=qY;vIe(e,t,a,n,i);let c=s.end(a,o);return UIe(e),c};xa.prototype.pickVoxelCoordinate=function(e,t,n,i){let{context:o,frameState:r,defaultView:s}=e,{viewport:a,pickFramebuffer:c}=s;e.view=s,a.x=0,a.y=0,a.width=o.drawingBufferWidth,a.height=o.drawingBufferHeight;let d=s.passState;d.viewport=nt.clone(a,d.viewport);let u=so.transformWindowToDrawingBuffer(e,t,MO),h=Yee(o.drawingBufferHeight,u,n,i,qY);e.jobScheduler.disableThisFrame(),e.updateFrameState(),r.cullingVolume=YO(e,u,h.width,h.height,a),r.invertClassification=!1,r.passes.pickVoxel=!0,r.tilesetPassState=jY,o.uniformState.update(r),e.updateEnvironment(),d=c.begin(h,a),e.updateAndExecuteCommands(d,$Y),e.resolveFramebuffers(d);let p=c.readCenterPixel(h);return o.endFrame(),p};xa.prototype.pickMetadata=function(e,t,n){let{context:i,frameState:o,defaultView:r}=e,{viewport:s,pickFramebuffer:a}=r;e.view=r,s.x=0,s.y=0,s.width=i.drawingBufferWidth,s.height=i.drawingBufferHeight;let c=r.passState;c.viewport=nt.clone(s,c.viewport);let d=so.transformWindowToDrawingBuffer(e,t,MO),u=Yee(i.drawingBufferHeight,d,1,1,qY);e.jobScheduler.disableThisFrame(),e.updateFrameState(),o.cullingVolume=YO(e,d,u.width,u.height,s),o.invertClassification=!1,o.passes.pick=!0,o.tilesetPassState=jY,o.pickingMetadata=!0,o.pickedMetadataInfo=n,i.uniformState.update(o),e.updateEnvironment(),c=a.begin(u,s),e.updateAndExecuteCommands(c,$Y);let h=e._environmentState.useOIT;e._environmentState.useOIT=!1,e.resolveFramebuffers(c),e._environmentState.useOIT=h;let p=a.readCenterPixel(u);return i.endFrame(),o.pickingMetadata=!1,MY.decodeMetadataValues(n.classProperty,n.metadataProperty,p)};function _St(e,t){let{defaultView:n,context:i,frameState:o,environmentState:r}=e,{viewport:s,pickDepthFramebuffer:a}=n;e.view=n,s.x=0,s.y=0,s.width=i.drawingBufferWidth,s.height=i.drawingBufferHeight;let c=n.passState;c.viewport=nt.clone(s,c.viewport),e.clearPasses(o.passes),o.passes.pick=!0,o.passes.depth=!0,o.cullingVolume=YO(e,t,1,1,s),o.tilesetPassState=jY,e.updateEnvironment(),r.renderTranslucentDepthForPick=!0,c=a.update(i,t,s),e.updateAndExecuteCommands(c,$Y),e.resolveFramebuffers(c),i.endFrame()}var ISt=new Ui,ZSt=new id,RSt=new bn,VSt=new as;xa.prototype.pickPositionWorldCoordinates=function(e,t,n){if(!e.useDepthPicking)return;let i=t.toString();if(this._pickPositionCacheDirty)this._pickPositionCache={},this._pickPositionCacheDirty=!1;else if(this._pickPositionCache.hasOwnProperty(i))return m.clone(this._pickPositionCache[i],n);let{context:o,frameState:r,camera:s,defaultView:a}=e,{uniformState:c}=o;e.view=a;let d=so.transformWindowToDrawingBuffer(e,t,MO);e.pickTranslucentDepth?_St(e,d):(e.updateFrameState(),c.update(r),e.updateEnvironment()),d.y=e.drawingBufferHeight-d.y;let u;l(s.frustum.fov)?u=s.frustum.clone(ISt):l(s.frustum.infiniteProjectionMatrix)?u=s.frustum.clone(ZSt):l(s.frustum.width)?u=s.frustum.clone(RSt):u=s.frustum.clone(VSt);let{frustumCommandsList:h}=a,p=h.length;for(let A=0;A<p;++A){let b=this.getPickDepth(e,A).getDepth(o,d.x,d.y);if(l(b)&&b>0&&b<1){let C=h[A],T;return e.mode===se.SCENE2D?(T=s.position.z,s.position.z=T-C.near+1,u.far=Math.max(1,C.far-C.near),u.near=1,c.update(r),c.updateFrustum(u)):(u.near=C.near*(A!==0?e.opaqueFrustumNearOffset:1),u.far=C.far,c.updateFrustum(u)),n=so.drawingBufferToWorldCoordinates(e,d,b,n),e.mode===se.SCENE2D&&(s.position.z=T,c.update(r)),this._pickPositionCache[i]=m.clone(n),n}}this._pickPositionCache[i]=void 0};var GSt=new Ae;xa.prototype.pickPosition=function(e,t,n){if(n=this.pickPositionWorldCoordinates(e,t,n),l(n)&&e.mode!==se.SCENE3D){m.fromElements(n.y,n.z,n.x,n);let i=e.mapProjection,o=i.ellipsoid,r=i.unproject(n,GSt);o.cartographicToCartesian(r,n)}return n};function LSt(e,t,n,i,o,r){for(let s of e){let a=s.object,c=s.position,d=s.exclude;if(l(c)&&!l(a))return n.push(s),!0;if(!l(a)||!l(a.primitive)||!d&&(n.push(s),n.length>=t))return!0;let u=a.primitive,h=!1;if(typeof u.getGeometryInstanceAttributes=="function"&&l(a.id)){let p=u.getGeometryInstanceAttributes(a.id);l(p)&&l(p.show)&&(h=!0,p.show=Rn.toValue(!1,p.show),o.push(p))}a instanceof Ga&&(h=!0,a.show=!1,r.push(a)),h||(u.show=!1,i.push(u))}}function DIe(e,t){let n=[],i=[],o=[],r=[];l(t)||(t=Number.MAX_VALUE);let s=e(t);for(;l(s)&&s.length>0&&!LSt(s,t,n,i,o,r);)s=e(t-n.length);for(let a=0;a<i.length;++a)i[a].show=!0;for(let a=0;a<o.length;++a){let c=o[a];c.show=Rn.toValue(!0,c.show)}for(let a=0;a<r.length;++a)r[a].show=!0;return n}xa.prototype.drillPick=function(e,t,n,i,o){return DIe(a=>this.pick(e,t,i,o,a).map(d=>({object:d,position:void 0,exclude:!1})),n).map(a=>a.object)};var YIe=new m,WSt=new m;function FSt(e,t,n){this.ray=e,this.width=t,this.tilesets=n,this.ready=!1;let i=this;this.promise=new Promise(o=>{i._completePick=()=>{o()}})}function kIe(e,t,n,i){let o=t.direction,r=m.mostOrthogonalAxis(o,YIe),s=m.cross(o,r,YIe),a=m.cross(o,s,WSt);return i.position=t.origin,i.direction=o,i.up=a,i.right=s,i.frustum.width=n??MIe,i.frustum.computeCullingVolume(i.positionWC,i.directionWC,i.upWC)}function BSt(e,t,n){let i=t.frameState,{ray:o,width:r,tilesets:s}=n,a=e._pickOffscreenView.camera,c=kIe(e,o,r,a),d=pSt;d.camera=a,d.cullingVolume=c;let u=!0,h=s.length;for(let p=0;p<h;++p){let A=s[p];A.show&&t.primitives.contains(A)&&(A.updateForPass(i,d),u=u&&d.ready)}return u&&n._completePick(),u}xa.prototype.updateMostDetailedRayPicks=function(e){let t=this._mostDetailedRayPicks;for(let n=0;n<t.length;++n)BSt(this,e,t[n])&&t.splice(n--,1)};function QIe(e,t,n){for(let i=0;i<e.length;++i){let o=e.get(i);o.show&&(l(o.isCesium3DTileset)?(!l(t)||t.indexOf(o)===-1)&&n.push(o):o instanceof $l&&QIe(o,t,n))}}function vO(e,t,n,i,o,r){let s=[];if(QIe(t.primitives,i,s),s.length===0)return Promise.resolve(r());let a=new FSt(n,o,s);return e._mostDetailedRayPicks.push(a),a.promise.then(function(){return r()})}function wSt(e,t){return!l(e)||!l(t)||t.length===0?!1:t.indexOf(e)>-1||t.indexOf(e.primitive)>-1||t.indexOf(e.id)>-1}function NSt(e,t,n,i,o,r,s){let{context:a,frameState:c}=t,d=a.uniformState,u=e._pickOffscreenView;t.view=u,kIe(e,n,o,u.camera);let h=nt.clone(u.viewport,qY),p=u.pickFramebuffer.begin(h,u.viewport);t.jobScheduler.disableThisFrame(),t.updateFrameState(),c.invertClassification=!1,c.passes.pick=!0,c.passes.offscreen=!0,s?c.tilesetPassState=ASt:c.tilesetPassState=jY,d.update(c),t.updateEnvironment(),t.updateAndExecuteCommands(p,$Y),t.resolveFramebuffers(p);let A,f=u.pickFramebuffer.end(h,1)[0];if(t.context.depthTexture){let{frustumCommandsList:b}=u,C=b.length;for(let T=0;T<C;++T){let S=e.getPickDepth(t,T).getDepth(a,0,0);if(l(S)&&S>0&&S<1){let I=b[T],R=I.near*(T!==0?t.opaqueFrustumNearOffset:1),V=I.far,W=R+S*(V-R);A=Cn.getPoint(n,W);break}}}if(t.view=t.defaultView,a.endFrame(),l(f)||l(A))return{object:f,position:A,exclude:!l(A)&&r||wSt(f,i)}}function Mee(e,t,n,i,o,r,s,a){return DIe(function(){let d=NSt(e,t,n,o,r,s,a);return d?[d]:void 0},i)}function jZ(e,t,n,i,o,r,s){let a=Mee(e,t,n,1,i,o,r,s);if(a.length>0)return a[0]}function UO(e,t){return new Promise((n,i)=>{t.then(function(o){let r=e.postRender.addEventListener(function(){r(),n(o)});e.requestRender()}).catch(function(o){i(o)})})}xa.prototype.pickFromRay=function(e,t,n,i){return jZ(this,e,t,n,i,!1,!1)};xa.prototype.drillPickFromRay=function(e,t,n,i,o){return Mee(this,e,t,n,i,o,!1,!1)};xa.prototype.pickFromRayMostDetailed=function(e,t,n,i){let o=this;return t=Cn.clone(t),n=l(n)?n.slice():n,UO(e,vO(o,e,t,n,i,function(){return jZ(o,e,t,n,i,!1,!0)}))};xa.prototype.drillPickFromRayMostDetailed=function(e,t,n,i,o){let r=this;return t=Cn.clone(t),i=l(i)?i.slice():i,UO(e,vO(r,e,t,i,o,function(){return Mee(r,e,t,n,i,o,!1,!0)}))};var PSt=new m,XSt=new m,YSt=new Cn,OIe=new Ae;function vee(e,t){let n=e.ellipsoid,i=Gi._defaultMaxTerrainHeight,o=n.geodeticSurfaceNormalCartographic(t,XSt),r=Ae.toCartesian(t,n,PSt),s=YSt;s.origin=r,s.direction=o;let a=new Cn;return Cn.getPoint(s,i,a.origin),m.negate(o,a.direction),a}function zIe(e,t){let n=e.ellipsoid,i=Ae.fromCartesian(t,n,OIe);return vee(e,i)}function HIe(e,t){let n=e.ellipsoid;return Ae.fromCartesian(t,n,OIe).height}function MSt(e,t,n,i,o){let r=vee(t,n);return vO(e,t,r,i,o,function(){let s=jZ(e,t,r,i,o,!0,!0);if(l(s))return HIe(t,s.position)})}function vSt(e,t,n,i,o,r){let s=zIe(t,n);return vO(e,t,s,i,o,function(){let a=jZ(e,t,s,i,o,!0,!0);if(l(a))return m.clone(a.position,r)})}xa.prototype.sampleHeight=function(e,t,n,i){let o=vee(e,t),r=jZ(this,e,o,n,i,!0,!1);if(l(r))return HIe(e,r.position)};xa.prototype.clampToHeight=function(e,t,n,i,o){let r=zIe(e,t),s=jZ(this,e,r,n,i,!0,!1);if(l(s))return m.clone(s.position,o)};xa.prototype.sampleHeightMostDetailed=function(e,t,n,i){n=l(n)?n.slice():n;let o=t.length,r=new Array(o);for(let s=0;s<o;++s)r[s]=MSt(this,e,t[s],n,i);return UO(e,Promise.all(r).then(function(s){let a=s.length;for(let c=0;c<a;++c)t[c].height=s[c];return t}))};xa.prototype.clampToHeightMostDetailed=function(e,t,n,i){n=l(n)?n.slice():n;let o=t.length,r=new Array(o);for(let s=0;s<o;++s)r[s]=vSt(this,e,t[s],n,i,t[s]);return UO(e,Promise.all(r).then(function(s){let a=s.length;for(let c=0;c<a;++c)t[c]=s[c];return t}))};xa.prototype.destroy=function(){this._pickOffscreenView=this._pickOffscreenView&&this._pickOffscreenView.destroy()};var eM=xa;var Zao=y(x(),1);var tao=y(x(),1);var oro=y(x(),1),tM=`uniform sampler2D colorTexture;
in vec2 v_textureCoordinates;
#ifdef AUTO_EXPOSURE
uniform sampler2D autoExposure;
#else
uniform float exposure;
#endif
void main()
{
vec4 fragmentColor = texture(colorTexture, v_textureCoordinates);
vec3 color = fragmentColor.rgb;
#ifdef AUTO_EXPOSURE
color /= texture(autoExposure, vec2(0.5)).r;
#else
color *= vec3(exposure);
#endif
color = czm_acesTonemapping(color);
color = czm_inverseGamma(color);
out_FragColor = vec4(color, fragmentColor.a);
}
`;var sro=y(x(),1),nM=`precision highp float;
uniform sampler2D randomTexture;
uniform sampler2D depthTexture;
uniform float intensity;
uniform float bias;
uniform float lengthCap;
uniform int stepCount;
uniform int directionCount;
vec4 pixelToEye(vec2 screenCoordinate)
{
vec2 uv = screenCoordinate / czm_viewport.zw;
float depth = czm_readDepth(depthTexture, uv);
vec2 xy = 2.0 * uv - vec2(1.0);
vec4 posEC = czm_inverseProjection * vec4(xy, depth, 1.0);
posEC = posEC / posEC.w;
// Avoid numerical error at far plane
if (depth >= 1.0) {
posEC.z = czm_currentFrustum.y;
}
return posEC;
}
// Reconstruct surface normal in eye coordinates, avoiding edges
vec3 getNormalXEdge(vec3 positionEC)
{
// Find the 3D surface positions at adjacent screen pixels
vec2 centerCoord = gl_FragCoord.xy;
vec3 positionLeft = pixelToEye(centerCoord + vec2(-1.0, 0.0)).xyz;
vec3 positionRight = pixelToEye(centerCoord + vec2(1.0, 0.0)).xyz;
vec3 positionUp = pixelToEye(centerCoord + vec2(0.0, 1.0)).xyz;
vec3 positionDown = pixelToEye(centerCoord + vec2(0.0, -1.0)).xyz;
// Compute potential tangent vectors
vec3 dx0 = positionEC - positionLeft;
vec3 dx1 = positionRight - positionEC;
vec3 dy0 = positionEC - positionDown;
vec3 dy1 = positionUp - positionEC;
// The shorter tangent is more likely to be on the same surface
vec3 dx = length(dx0) < length(dx1) ? dx0 : dx1;
vec3 dy = length(dy0) < length(dy1) ? dy0 : dy1;
return normalize(cross(dx, dy));
}
const float sqrtTwoPi = sqrt(czm_twoPi);
float gaussian(float x, float standardDeviation) {
float argument = x / standardDeviation;
return exp(-0.5 * argument * argument) / (sqrtTwoPi * standardDeviation);
}
void main(void)
{
vec4 positionEC = pixelToEye(gl_FragCoord.xy);
// Exit if we are too close to the back of the frustum, where the depth value is invalid.
float maxValidDepth = czm_currentFrustum.y - lengthCap;
if (-positionEC.z > maxValidDepth)
{
out_FragColor = vec4(1.0);
return;
}
vec3 normalEC = getNormalXEdge(positionEC.xyz);
float gaussianVariance = lengthCap * sqrt(-positionEC.z);
// Choose a step length such that the marching stops just before 3 * variance.
float stepLength = 3.0 * gaussianVariance / (float(stepCount) + 1.0);
float metersPerPixel = czm_metersPerPixel(positionEC, 1.0);
// Minimum step is 1 pixel to avoid double sampling
float pixelsPerStep = max(stepLength / metersPerPixel, 1.0);
stepLength = pixelsPerStep * metersPerPixel;
float angleStepScale = 1.0 / float(directionCount);
float angleStep = angleStepScale * czm_twoPi;
float cosStep = cos(angleStep);
float sinStep = sin(angleStep);
mat2 rotateStep = mat2(cosStep, sinStep, -sinStep, cosStep);
// Initial sampling direction (different for each pixel)
const float randomTextureSize = 255.0;
vec2 randomTexCoord = fract(gl_FragCoord.xy / randomTextureSize);
float randomVal = texture(randomTexture, randomTexCoord).x;
vec2 sampleDirection = vec2(cos(angleStep * randomVal), sin(angleStep * randomVal));
float ao = 0.0;
// Loop over sampling directions
#if __VERSION__ == 300
for (int i = 0; i < directionCount; i++)
{
#else
for (int i = 0; i < 16; i++)
{
if (i >= directionCount) {
break;
}
#endif
sampleDirection = rotateStep * sampleDirection;
float localAO = 0.0;
vec2 radialStep = pixelsPerStep * sampleDirection;
#if __VERSION__ == 300
for (int j = 0; j < stepCount; j++)
{
#else
for (int j = 0; j < 64; j++)
{
if (j >= stepCount) {
break;
}
#endif
// Step along sampling direction, away from output pixel
vec2 samplePixel = floor(gl_FragCoord.xy + float(j + 1) * radialStep) + vec2(0.5);
// Exit if we stepped off the screen
if (clamp(samplePixel, vec2(0.0), czm_viewport.zw) != samplePixel) {
break;
}
// Compute step vector from output point to sampled point
vec4 samplePositionEC = pixelToEye(samplePixel);
vec3 stepVector = samplePositionEC.xyz - positionEC.xyz;
// Estimate the angle from the surface normal.
float dotVal = clamp(dot(normalEC, normalize(stepVector)), 0.0, 1.0);
dotVal = czm_branchFreeTernary(dotVal > bias, dotVal, 0.0);
dotVal = czm_branchFreeTernary(-samplePositionEC.z <= maxValidDepth, dotVal, 0.0);
// Weight contribution based on the distance from the output point
float sampleDistance = length(stepVector);
float weight = gaussian(sampleDistance, gaussianVariance);
localAO += weight * dotVal;
}
ao += localAO;
}
ao *= angleStepScale * stepLength;
ao = 1.0 - clamp(ao, 0.0, 1.0);
ao = pow(ao, intensity);
out_FragColor = vec4(vec3(ao), 1.0);
}
`;var cro=y(x(),1),iM=`uniform sampler2D colorTexture;
uniform sampler2D ambientOcclusionTexture;
uniform bool ambientOcclusionOnly;
in vec2 v_textureCoordinates;
void main(void)
{
vec4 color = texture(colorTexture, v_textureCoordinates);
vec4 ao = texture(ambientOcclusionTexture, v_textureCoordinates);
out_FragColor = ambientOcclusionOnly ? ao : ao * color;
}
`;var dro=y(x(),1),oM=`uniform sampler2D colorTexture;
uniform float gradations;
in vec2 v_textureCoordinates;
void main(void)
{
vec3 rgb = texture(colorTexture, v_textureCoordinates).rgb;
#ifdef CZM_SELECTED_FEATURE
if (czm_selected()) {
out_FragColor = vec4(rgb, 1.0);
return;
}
#endif
float luminance = czm_luminance(rgb);
float darkness = luminance * gradations;
darkness = (darkness - fract(darkness)) / gradations;
out_FragColor = vec4(vec3(darkness), 1.0);
}
`;var mro=y(x(),1),rM=`uniform sampler2D colorTexture;
uniform sampler2D bloomTexture;
uniform bool glowOnly;
in vec2 v_textureCoordinates;
void main(void)
{
vec4 color = texture(colorTexture, v_textureCoordinates);
#ifdef CZM_SELECTED_FEATURE
if (czm_selected()) {
out_FragColor = color;
return;
}
#endif
vec4 bloom = texture(bloomTexture, v_textureCoordinates);
out_FragColor = glowOnly ? bloom : bloom + color;
}
`;var fro=y(x(),1),sM=`uniform sampler2D colorTexture;
uniform float brightness;
in vec2 v_textureCoordinates;
void main(void)
{
vec3 rgb = texture(colorTexture, v_textureCoordinates).rgb;
vec3 target = vec3(0.0);
out_FragColor = vec4(mix(target, rgb, brightness), 1.0);
}
`;var Aro=y(x(),1),aM=`uniform sampler2D colorTexture;
uniform float contrast;
uniform float brightness;
in vec2 v_textureCoordinates;
void main(void)
{
vec3 sceneColor = texture(colorTexture, v_textureCoordinates).xyz;
sceneColor = czm_RGBToHSB(sceneColor);
sceneColor.z += brightness;
sceneColor = czm_HSBToRGB(sceneColor);
float factor = (259.0 * (contrast + 255.0)) / (255.0 * (259.0 - contrast));
sceneColor = factor * (sceneColor - vec3(0.5)) + vec3(0.5);
out_FragColor = vec4(sceneColor, 1.0);
}
`;var bro=y(x(),1),cM=`uniform sampler2D colorTexture;
uniform sampler2D blurTexture;
uniform sampler2D depthTexture;
uniform float focalDistance;
in vec2 v_textureCoordinates;
vec4 toEye(vec2 uv, float depth)
{
vec2 xy = vec2((uv.x * 2.0 - 1.0), ((1.0 - uv.y) * 2.0 - 1.0));
vec4 posInCamera = czm_inverseProjection * vec4(xy, depth, 1.0);
posInCamera = posInCamera / posInCamera.w;
return posInCamera;
}
float computeDepthBlur(float depth)
{
float f;
if (depth < focalDistance)
{
f = (focalDistance - depth) / (focalDistance - czm_currentFrustum.x);
}
else
{
f = (depth - focalDistance) / (czm_currentFrustum.y - focalDistance);
f = pow(f, 0.1);
}
f *= f;
f = clamp(f, 0.0, 1.0);
return pow(f, 0.5);
}
void main(void)
{
float depth = czm_readDepth(depthTexture, v_textureCoordinates);
vec4 posInCamera = toEye(v_textureCoordinates, depth);
float d = computeDepthBlur(-posInCamera.z);
out_FragColor = mix(texture(colorTexture, v_textureCoordinates), texture(blurTexture, v_textureCoordinates), d);
}
`;var xro=y(x(),1),lM=`uniform sampler2D depthTexture;
in vec2 v_textureCoordinates;
void main(void)
{
float depth = czm_readDepth(depthTexture, v_textureCoordinates);
out_FragColor = vec4(vec3(depth), 1.0);
}
`;var Tro=y(x(),1),dM=`uniform sampler2D depthTexture;
uniform float length;
uniform vec4 color;
in vec2 v_textureCoordinates;
void main(void)
{
float directions[3];
directions[0] = -1.0;
directions[1] = 0.0;
directions[2] = 1.0;
float scalars[3];
scalars[0] = 3.0;
scalars[1] = 10.0;
scalars[2] = 3.0;
float padx = czm_pixelRatio / czm_viewport.z;
float pady = czm_pixelRatio / czm_viewport.w;
#ifdef CZM_SELECTED_FEATURE
bool selected = false;
for (int i = 0; i < 3; ++i)
{
float dir = directions[i];
selected = selected || czm_selected(vec2(-padx, dir * pady));
selected = selected || czm_selected(vec2(padx, dir * pady));
selected = selected || czm_selected(vec2(dir * padx, -pady));
selected = selected || czm_selected(vec2(dir * padx, pady));
if (selected)
{
break;
}
}
if (!selected)
{
out_FragColor = vec4(color.rgb, 0.0);
return;
}
#endif
float horizEdge = 0.0;
float vertEdge = 0.0;
for (int i = 0; i < 3; ++i)
{
float dir = directions[i];
float scale = scalars[i];
horizEdge -= texture(depthTexture, v_textureCoordinates + vec2(-padx, dir * pady)).x * scale;
horizEdge += texture(depthTexture, v_textureCoordinates + vec2(padx, dir * pady)).x * scale;
vertEdge -= texture(depthTexture, v_textureCoordinates + vec2(dir * padx, -pady)).x * scale;
vertEdge += texture(depthTexture, v_textureCoordinates + vec2(dir * padx, pady)).x * scale;
}
float len = sqrt(horizEdge * horizEdge + vertEdge * vertEdge);
out_FragColor = vec4(color.rgb, len > length ? color.a : 0.0);
}
`;var Sro=y(x(),1),uM=`uniform sampler2D colorTexture;
in vec2 v_textureCoordinates;
#ifdef AUTO_EXPOSURE
uniform sampler2D autoExposure;
#else
uniform float exposure;
#endif
// See slides 142 and 143:
// http://www.gdcvault.com/play/1012459/Uncharted_2__HDR_Lighting
void main()
{
vec4 fragmentColor = texture(colorTexture, v_textureCoordinates);
vec3 color = fragmentColor.rgb;
#ifdef AUTO_EXPOSURE
float exposure = texture(autoExposure, vec2(0.5)).r;
color /= exposure;
#else
color *= vec3(exposure);
#endif
const float A = 0.22; // shoulder strength
const float B = 0.30; // linear strength
const float C = 0.10; // linear angle
const float D = 0.20; // toe strength
const float E = 0.01; // toe numerator
const float F = 0.30; // toe denominator
const float white = 11.2; // linear white point value
vec3 c = ((color * (A * color + C * B) + D * E) / (color * ( A * color + B) + D * F)) - E / F;
float w = ((white * (A * white + C * B) + D * E) / (white * ( A * white + B) + D * F)) - E / F;
c = czm_inverseGamma(c / w);
out_FragColor = vec4(c, fragmentColor.a);
}
`;var Iro=y(x(),1),mM=`uniform sampler2D colorTexture;
in vec2 v_textureCoordinates;
#ifdef AUTO_EXPOSURE
uniform sampler2D autoExposure;
#else
uniform float exposure;
#endif
void main()
{
vec4 fragmentColor = texture(colorTexture, v_textureCoordinates);
vec3 color = fragmentColor.rgb;
#ifdef AUTO_EXPOSURE
color /= texture(autoExposure, vec2(0.5)).r;
#else
color *= vec3(exposure);
#endif
color = czm_pbrNeutralTonemapping(color);
color = czm_inverseGamma(color);
out_FragColor = vec4(color, fragmentColor.a);
}
`;var Rro=y(x(),1),hM=`in vec2 v_textureCoordinates;
uniform sampler2D colorTexture;
const float fxaaQualitySubpix = 0.5;
const float fxaaQualityEdgeThreshold = 0.125;
const float fxaaQualityEdgeThresholdMin = 0.0833;
void main()
{
vec2 fxaaQualityRcpFrame = vec2(1.0) / czm_viewport.zw;
vec4 color = FxaaPixelShader(
v_textureCoordinates,
colorTexture,
fxaaQualityRcpFrame,
fxaaQualitySubpix,
fxaaQualityEdgeThreshold,
fxaaQualityEdgeThresholdMin);
float alpha = texture(colorTexture, v_textureCoordinates).a;
out_FragColor = vec4(color.rgb, alpha);
}
`;var Gro=y(x(),1),Ky=`#define SAMPLES 8
uniform float delta;
uniform float sigma;
uniform float direction; // 0.0 for x direction, 1.0 for y direction
uniform sampler2D colorTexture;
#ifdef USE_STEP_SIZE
uniform float stepSize;
#else
uniform vec2 step;
#endif
in vec2 v_textureCoordinates;
// Incremental Computation of the Gaussian:
// https://developer.nvidia.com/gpugems/GPUGems3/gpugems3_ch40.html
void main()
{
vec2 st = v_textureCoordinates;
vec2 dir = vec2(1.0 - direction, direction);
#ifdef USE_STEP_SIZE
vec2 step = vec2(stepSize * (czm_pixelRatio / czm_viewport.zw));
#else
vec2 step = step;
#endif
vec3 g;
g.x = 1.0 / (sqrt(czm_twoPi) * sigma);
g.y = exp((-0.5 * delta * delta) / (sigma * sigma));
g.z = g.y * g.y;
vec4 result = texture(colorTexture, st) * g.x;
for (int i = 1; i < SAMPLES; ++i)
{
g.xy *= g.yz;
vec2 offset = float(i) * dir * step;
result += texture(colorTexture, st - offset) * g.x;
result += texture(colorTexture, st + offset) * g.x;
}
out_FragColor = result;
}
`;var Wro=y(x(),1),fM=`uniform sampler2D colorTexture;
uniform sampler2D dirtTexture;
uniform sampler2D starTexture;
uniform vec2 dirtTextureDimensions;
uniform float distortion;
uniform float ghostDispersal;
uniform float haloWidth;
uniform float dirtAmount;
uniform float earthRadius;
uniform float intensity;
in vec2 v_textureCoordinates;
// whether it is in space or not
// 6500000.0 is empirical value
#define DISTANCE_TO_SPACE 6500000.0
// return ndc from world coordinate biased earthRadius
vec4 getNDCFromWC(vec3 WC, float earthRadius)
{
vec4 positionEC = czm_view * vec4(WC, 1.0);
positionEC = vec4(positionEC.x + earthRadius, positionEC.y, positionEC.z, 1.0);
vec4 positionWC = czm_eyeToWindowCoordinates(positionEC);
return czm_viewportOrthographic * vec4(positionWC.xy, -positionWC.z, 1.0);
}
// Check if current pixel is included Earth
// if then mask it gradually
float isInEarth(vec2 texcoord, vec2 sceneSize)
{
vec2 NDC = texcoord * 2.0 - 1.0;
vec4 earthPosSC = getNDCFromWC(vec3(0.0), 0.0);
vec4 earthPosSCEdge = getNDCFromWC(vec3(0.0), earthRadius * 1.5);
NDC.xy -= earthPosSC.xy;
float X = abs(NDC.x) * sceneSize.x;
float Y = abs(NDC.y) * sceneSize.y;
return clamp(0.0, 1.0, max(sqrt(X * X + Y * Y) / max(abs(earthPosSCEdge.x * sceneSize.x), 1.0) - 0.8 , 0.0));
}
// For Chromatic effect
vec4 textureDistorted(sampler2D tex, vec2 texcoord, vec2 direction, vec3 distortion, bool isSpace)
{
vec2 sceneSize = czm_viewport.zw;
vec3 color;
if(isSpace)
{
color.r = isInEarth(texcoord + direction * distortion.r, sceneSize) * texture(tex, texcoord + direction * distortion.r).r;
color.g = isInEarth(texcoord + direction * distortion.g, sceneSize) * texture(tex, texcoord + direction * distortion.g).g;
color.b = isInEarth(texcoord + direction * distortion.b, sceneSize) * texture(tex, texcoord + direction * distortion.b).b;
}
else
{
color.r = texture(tex, texcoord + direction * distortion.r).r;
color.g = texture(tex, texcoord + direction * distortion.g).g;
color.b = texture(tex, texcoord + direction * distortion.b).b;
}
return vec4(clamp(color, 0.0, 1.0), 0.0);
}
void main(void)
{
vec4 originalColor = texture(colorTexture, v_textureCoordinates);
vec3 rgb = originalColor.rgb;
bool isSpace = length(czm_viewerPositionWC.xyz) > DISTANCE_TO_SPACE;
// Sun position
vec4 sunPos = czm_morphTime == 1.0 ? vec4(czm_sunPositionWC, 1.0) : vec4(czm_sunPositionColumbusView.zxy, 1.0);
vec4 sunPositionEC = czm_view * sunPos;
vec4 sunPositionWC = czm_eyeToWindowCoordinates(sunPositionEC);
sunPos = czm_viewportOrthographic * vec4(sunPositionWC.xy, -sunPositionWC.z, 1.0);
// If sun is not in the screen space, use original color.
if(!isSpace || !((sunPos.x >= -1.1 && sunPos.x <= 1.1) && (sunPos.y >= -1.1 && sunPos.y <= 1.1)))
{
// Lens flare is disabled when not in space until #5932 is fixed.
// https://github.com/CesiumGS/cesium/issues/5932
out_FragColor = originalColor;
return;
}
vec2 texcoord = vec2(1.0) - v_textureCoordinates;
vec2 pixelSize = czm_pixelRatio / czm_viewport.zw;
vec2 invPixelSize = 1.0 / pixelSize;
vec3 distortionVec = pixelSize.x * vec3(-distortion, 0.0, distortion);
// ghost vector to image centre:
vec2 ghostVec = (vec2(0.5) - texcoord) * ghostDispersal;
vec3 direction = normalize(vec3(ghostVec, 0.0));
// sample ghosts:
vec4 result = vec4(0.0);
vec4 ghost = vec4(0.0);
for (int i = 0; i < 4; ++i)
{
vec2 offset = fract(texcoord + ghostVec * float(i));
// Only bright spots from the centre of the source image
ghost += textureDistorted(colorTexture, offset, direction.xy, distortionVec, isSpace);
}
result += ghost;
// sample halo
vec2 haloVec = normalize(ghostVec) * haloWidth;
float weightForHalo = length(vec2(0.5) - fract(texcoord + haloVec)) / length(vec2(0.5));
weightForHalo = pow(1.0 - weightForHalo, 5.0);
result += textureDistorted(colorTexture, texcoord + haloVec, direction.xy, distortionVec, isSpace) * weightForHalo * 1.5;
// dirt on lens
vec2 dirtTexCoords = (v_textureCoordinates * invPixelSize) / dirtTextureDimensions;
if (dirtTexCoords.x > 1.0)
{
dirtTexCoords.x = mod(floor(dirtTexCoords.x), 2.0) == 1.0 ? 1.0 - fract(dirtTexCoords.x) : fract(dirtTexCoords.x);
}
if (dirtTexCoords.y > 1.0)
{
dirtTexCoords.y = mod(floor(dirtTexCoords.y), 2.0) == 1.0 ? 1.0 - fract(dirtTexCoords.y) : fract(dirtTexCoords.y);
}
result += dirtAmount * texture(dirtTexture, dirtTexCoords);
// Rotating starburst texture's coordinate
// dot(czm_view[0].xyz, vec3(0.0, 0.0, 1.0)) + dot(czm_view[1].xyz, vec3(0.0, 1.0, 0.0))
float camrot = czm_view[0].z + czm_view[1].y;
float cosValue = cos(camrot);
float sinValue = sin(camrot);
mat3 rotation = mat3(
cosValue, -sinValue, 0.0,
sinValue, cosValue, 0.0,
0.0, 0.0, 1.0
);
vec3 st1 = vec3(v_textureCoordinates * 2.0 - vec2(1.0), 1.0);
vec3 st2 = vec3((rotation * st1).xy, 1.0);
vec3 st3 = st2 * 0.5 + vec3(0.5);
vec2 lensStarTexcoord = st3.xy;
float weightForLensFlare = length(vec3(sunPos.xy, 0.0));
float oneMinusWeightForLensFlare = max(1.0 - weightForLensFlare, 0.0);
if (!isSpace)
{
result *= oneMinusWeightForLensFlare * intensity * 0.2;
}
else
{
result *= oneMinusWeightForLensFlare * intensity;
result *= texture(starTexture, lensStarTexcoord) * pow(weightForLensFlare, 1.0) * max((1.0 - length(vec3(st1.xy, 0.0))), 0.0) * 2.0;
}
result += texture(colorTexture, v_textureCoordinates);
out_FragColor = result;
}
`;var Bro=y(x(),1),pM=`uniform sampler2D colorTexture;
uniform vec3 white;
in vec2 v_textureCoordinates;
#ifdef AUTO_EXPOSURE
uniform sampler2D autoExposure;
#else
uniform float exposure;
#endif
// See equation 4:
// http://www.cs.utah.edu/~reinhard/cdrom/tonemap.pdf
void main()
{
vec4 fragmentColor = texture(colorTexture, v_textureCoordinates);
vec3 color = fragmentColor.rgb;
#ifdef AUTO_EXPOSURE
float exposure = texture(autoExposure, vec2(0.5)).r;
color /= exposure;
#else
color *= vec3(exposure);
#endif
color = (color * (1.0 + color / white)) / (1.0 + color);
color = czm_inverseGamma(color);
out_FragColor = vec4(color, fragmentColor.a);
}
`;var Nro=y(x(),1),AM=`uniform sampler2D colorTexture;
in vec2 v_textureCoordinates;
float rand(vec2 co)
{
return fract(sin(dot(co.xy ,vec2(12.9898, 78.233))) * 43758.5453);
}
void main(void)
{
float noiseValue = rand(v_textureCoordinates + sin(czm_frameNumber)) * 0.1;
vec3 rgb = texture(colorTexture, v_textureCoordinates).rgb;
vec3 green = vec3(0.0, 1.0, 0.0);
out_FragColor = vec4((noiseValue + rgb) * green, 1.0);
}
`;var Xro=y(x(),1),gM=`uniform sampler2D colorTexture;
in vec2 v_textureCoordinates;
#ifdef AUTO_EXPOSURE
uniform sampler2D autoExposure;
#else
uniform float exposure;
#endif
// See equation 3:
// http://www.cs.utah.edu/~reinhard/cdrom/tonemap.pdf
void main()
{
vec4 fragmentColor = texture(colorTexture, v_textureCoordinates);
vec3 color = fragmentColor.rgb;
#ifdef AUTO_EXPOSURE
float exposure = texture(autoExposure, vec2(0.5)).r;
color /= exposure;
#else
color *= vec3(exposure);
#endif
color = color / (1.0 + color);
color = czm_inverseGamma(color);
out_FragColor = vec4(color, fragmentColor.a);
}
`;var Mro=y(x(),1),bM=`uniform sampler2D colorTexture;
uniform sampler2D silhouetteTexture;
in vec2 v_textureCoordinates;
void main(void)
{
vec4 silhouetteColor = texture(silhouetteTexture, v_textureCoordinates);
vec4 color = texture(colorTexture, v_textureCoordinates);
out_FragColor = mix(color, silhouetteColor, silhouetteColor.a);
}
`;var Jro=y(x(),1);function yE(){this._uniformMap=void 0,this._command=void 0,this._colorTexture=void 0,this._depthTexture=void 0,this._ready=!1,this._name="czm_autoexposure",this._logDepthChanged=void 0,this._useLogDepth=void 0,this._framebuffers=void 0,this._previousLuminance=new Ti,this._commands=void 0,this._clearCommand=void 0,this._minMaxLuminance=new M,this.enabled=!0,this._enabled=!0,this.minimumLuminance=.1,this.maximumLuminance=10}Object.defineProperties(yE.prototype,{ready:{get:function(){return this._ready}},name:{get:function(){return this._name}},outputTexture:{get:function(){let e=this._framebuffers;if(l(e))return e[e.length-1].getColorTexture(0)}}});function JIe(e){let t=e._framebuffers;if(!l(t))return;let n=t.length;for(let i=0;i<n;++i)t[i].destroy();e._framebuffers=void 0,e._previousLuminance.destroy(),e._previousLuminance=void 0}function USt(e,t){JIe(e);let n=e._width,i=e._height,o=t.halfFloatingPointTexture?Oe.HALF_FLOAT:Oe.FLOAT,r=Math.ceil(Math.log(Math.max(n,i))/Math.log(3)),s=new Array(r);for(let c=0;c<r;++c)n=Math.max(Math.ceil(n/3),1),i=Math.max(Math.ceil(i/3),1),s[c]=new Ti,s[c].update(t,n,i,1,o);let a=s[r-1].getColorTexture(0);e._previousLuminance.update(t,a.width,a.height,1,o),e._framebuffers=s}function KIe(e){let t=e._commands;if(!l(t))return;let n=t.length;for(let i=0;i<n;++i)t[i].shaderProgram.destroy();e._commands=void 0}function DSt(e,t){let n;if(t===0)n={colorTexture:function(){return e._colorTexture},colorTextureDimensions:function(){return e._colorTexture.dimensions}};else{let i=e._framebuffers[t-1].getColorTexture(0);n={colorTexture:function(){return i},colorTextureDimensions:function(){return i.dimensions}}}return n.minMaxLuminance=function(){return e._minMaxLuminance},n.previousLuminance=function(){return e._previousLuminance.getColorTexture(0)},n}function kSt(e,t){let n=`uniform sampler2D colorTexture;
in vec2 v_textureCoordinates;
float sampleTexture(vec2 offset) {
`;return e===0?n+=` vec4 color = texture(colorTexture, v_textureCoordinates + offset);
return czm_luminance(color.rgb);
`:n+=` return texture(colorTexture, v_textureCoordinates + offset).r;
`,n+=`}
`,n+=`uniform vec2 colorTextureDimensions;
uniform vec2 minMaxLuminance;
uniform sampler2D previousLuminance;
void main() {
float color = 0.0;
float xStep = 1.0 / colorTextureDimensions.x;
float yStep = 1.0 / colorTextureDimensions.y;
int count = 0;
for (int i = 0; i < 3; ++i) {
for (int j = 0; j < 3; ++j) {
vec2 offset;
offset.x = -xStep + float(i) * xStep;
offset.y = -yStep + float(j) * yStep;
if (offset.x < 0.0 || offset.x > 1.0 || offset.y < 0.0 || offset.y > 1.0) {
continue;
}
color += sampleTexture(offset);
++count;
}
}
if (count > 0) {
color /= float(count);
}
`,e===t-1&&(n+=` float previous = texture(previousLuminance, vec2(0.5)).r;
color = clamp(color, minMaxLuminance.x, minMaxLuminance.y);
color = previous + (color - previous) / (60.0 * 1.5);
color = clamp(color, minMaxLuminance.x, minMaxLuminance.y);
`),n+=` out_FragColor = vec4(color);
}
`,n}function QSt(e,t){KIe(e);let n=e._framebuffers,i=n.length,o=new Array(i);for(let r=0;r<i;++r)o[r]=t.createViewportQuadCommand(kSt(r,i),{framebuffer:n[r].framebuffer,uniformMap:DSt(e,r)});e._commands=o}yE.prototype.clear=function(e){let t=this._framebuffers;if(!l(t))return;let n=this._clearCommand;l(n)||(n=this._clearCommand=new mi({color:new U(0,0,0,0),framebuffer:void 0}));let i=t.length;for(let o=0;o<i;++o)t[o].clear(e,n)};yE.prototype.update=function(e){let t=e.drawingBufferWidth,n=e.drawingBufferHeight;(t!==this._width||n!==this._height)&&(this._width=t,this._height=n,USt(this,e),QSt(this,e),this._ready||(this._ready=!0)),this._minMaxLuminance.x=this.minimumLuminance,this._minMaxLuminance.y=this.maximumLuminance;let i=this._framebuffers,o=i[i.length-1];i[i.length-1]=this._previousLuminance,this._commands[this._commands.length-1].framebuffer=this._previousLuminance.framebuffer,this._previousLuminance=o};yE.prototype.execute=function(e,t){this._colorTexture=t;let n=this._commands;if(!l(n))return;let i=n.length;for(let o=0;o<i;++o)n[o].execute(e)};yE.prototype.isDestroyed=function(){return!1};yE.prototype.destroy=function(){return JIe(this),KIe(this),he(this)};var yM=yE;var bso=y(x(),1);var jro=y(x(),1),OSt={NEAREST:0,LINEAR:1},Qu=OSt;function xE(e){e=e??Q.EMPTY_OBJECT;let{name:t=qn(),fragmentShader:n,uniforms:i,textureScale:o=1,forcePowerOfTwo:r=!1,sampleMode:s=Qu.NEAREST,pixelFormat:a=Ke.RGBA,pixelDatatype:c=Oe.UNSIGNED_BYTE,clearColor:d=U.BLACK,scissorRectangle:u}=e;this._fragmentShader=n,this._uniforms=i,this._textureScale=o,this._forcePowerOfTwo=r,this._sampleMode=s,this._pixelFormat=a,this._pixelDatatype=c,this._clearColor=d,this._uniformMap=void 0,this._command=void 0,this._colorTexture=void 0,this._depthTexture=void 0,this._idTexture=void 0,this._actualUniforms={},this._dirtyUniforms=[],this._texturesToRelease=[],this._texturesToCreate=[],this._texturePromise=void 0;let h=new Uc;h.scissorTest={enabled:!0,rectangle:l(u)?nt.clone(u):new nt},this._passState=h,this._ready=!1,this._name=t,this._logDepthChanged=void 0,this._useLogDepth=void 0,this._selectedIdTexture=void 0,this._selected=void 0,this._selectedShadow=void 0,this._parentSelected=void 0,this._parentSelectedShadow=void 0,this._combinedSelected=void 0,this._combinedSelectedShadow=void 0,this._selectedLength=0,this._parentSelectedLength=0,this._selectedDirty=!0,this._textureCache=void 0,this._index=void 0,this.enabled=!0,this._enabled=!0}Object.defineProperties(xE.prototype,{ready:{get:function(){return this._ready}},name:{get:function(){return this._name}},fragmentShader:{get:function(){return this._fragmentShader}},uniforms:{get:function(){return this._uniforms}},textureScale:{get:function(){return this._textureScale}},forcePowerOfTwo:{get:function(){return this._forcePowerOfTwo}},sampleMode:{get:function(){return this._sampleMode}},pixelFormat:{get:function(){return this._pixelFormat}},pixelDatatype:{get:function(){return this._pixelDatatype}},clearColor:{get:function(){return this._clearColor}},scissorRectangle:{get:function(){return this._passState.scissorTest.rectangle}},outputTexture:{get:function(){if(l(this._textureCache)){let e=this._textureCache.getFramebuffer(this._name);if(l(e))return e.getColorTexture(0)}}},selected:{get:function(){return this._selected},set:function(e){this._selected=e}},parentSelected:{get:function(){return this._parentSelected},set:function(e){this._parentSelected=e}}});var zSt=/uniform\s+sampler2D\s+depthTexture/g;xE.prototype._isSupported=function(e){return!zSt.test(this._fragmentShader)||e.depthTexture};function HSt(e,t,n){let i=t[n];return(typeof i=="string"||i instanceof HTMLCanvasElement||i instanceof HTMLImageElement||i instanceof HTMLVideoElement||i instanceof ImageData)&&e._dirtyUniforms.push(n),{get:function(){return t[n]},set:function(o){let r=t[n];t[n]=o;let s=e._actualUniforms,a=s[n];l(a)&&a!==r&&a instanceof Lt&&!l(e._textureCache.getStageByName(n))&&(e._texturesToRelease.push(a),delete s[n],delete s[`${n}Dimensions`]),r instanceof Lt&&e._texturesToRelease.push(r),typeof o=="string"||o instanceof HTMLCanvasElement||o instanceof HTMLImageElement||o instanceof HTMLVideoElement||o instanceof ImageData?e._dirtyUniforms.push(n):s[n]=o}}}function JSt(e,t){return function(){let n=e._actualUniforms[t];return typeof n=="function"?n():n}}function KSt(e,t){return function(){let n=e[t]();if(l(n))return n.dimensions}}function jSt(e){if(l(e._uniformMap))return;let t={},n={},i=e._uniforms,o=e._actualUniforms;for(let r in i){if(!i.hasOwnProperty(r))continue;typeof i[r]!="function"?(t[r]=JSt(e,r),n[r]=HSt(e,i,r)):(t[r]=i[r],n[r]=i[r]),o[r]=i[r];let s=t[r]();(typeof s=="string"||s instanceof Lt||s instanceof HTMLImageElement||s instanceof HTMLCanvasElement||s instanceof HTMLVideoElement)&&(t[`${r}Dimensions`]=KSt(t,r))}e._uniforms={},Object.defineProperties(e._uniforms,n),e._uniformMap=Ft(t,{colorTexture:function(){return e._colorTexture},colorTextureDimensions:function(){return e._colorTexture.dimensions},depthTexture:function(){return e._depthTexture},depthTextureDimensions:function(){return e._depthTexture.dimensions},czm_idTexture:function(){return e._idTexture},czm_selectedIdTexture:function(){return e._selectedIdTexture},czm_selectedIdTextureStep:function(){return 1/e._selectedIdTexture.width}})}function qSt(e,t){return e=e.replace(/in\s+vec2\s+v_textureCoordinates;/g,""),`#define CZM_SELECTED_FEATURE
uniform sampler2D czm_idTexture;
uniform sampler2D czm_selectedIdTexture;
uniform float czm_selectedIdTextureStep;
in vec2 v_textureCoordinates;
bool czm_selected(vec2 offset)
{
bool selected = false;
vec4 id = texture(czm_idTexture, v_textureCoordinates + offset);
for (int i = 0; i < ${t}; ++i)
{
vec4 selectedId = texture(czm_selectedIdTexture, vec2((float(i) + 0.5) * czm_selectedIdTextureStep, 0.5));
if (all(equal(id, selectedId)))
{
return true;
}
}
return false;
}
bool czm_selected()
{
return czm_selected(vec2(0.0));
}
${e}`}function $St(e,t){if(l(e._command)&&!e._logDepthChanged&&!e._selectedDirty)return;let n=e._fragmentShader;if(l(e._selectedIdTexture)){let o=e._selectedIdTexture.width;n=qSt(n,o)}let i=new ze({defines:[e._useLogDepth?"LOG_DEPTH":""],sources:[n]});e._command=t.createViewportQuadCommand(i,{uniformMap:e._uniformMap,owner:e})}function e_t(e){let t=e._sampleMode,n,i;t===Qu.LINEAR?(n=zt.LINEAR,i=li.LINEAR):(n=zt.NEAREST,i=li.NEAREST);let o=e._sampler;(!l(o)||o.minificationFilter!==n||o.magnificationFilter!==i)&&(e._sampler=new Ht({wrapS:gn.CLAMP_TO_EDGE,wrapT:gn.CLAMP_TO_EDGE,minificationFilter:n,magnificationFilter:i}))}function t_t(e,t){return function(n){e._texturesToCreate.push({name:t,source:n})}}function n_t(e,t){return function(){return e._textureCache.getOutputTexture(t)}}function i_t(e,t){let n=e._texturesToRelease;for(let a=0;a<n.length;++a){let c=n[a];c=c&&c.destroy()}n.length=0;let i=e._texturesToCreate;for(let a=0;a<i.length;++a){let{name:c,source:d}=i[a];e._actualUniforms[c]=new Lt({context:t,source:d})}i.length=0;let o=e._dirtyUniforms;if(o.length===0&&!l(e._texturePromise)){e._ready=!0;return}if(o.length===0||l(e._texturePromise))return;let r=e._uniforms,s=[];for(let a=0;a<o.length;++a){let c=o[a],d=r[c],u=e._textureCache.getStageByName(d);if(l(u))e._actualUniforms[c]=n_t(e,d);else if(typeof d=="string"){let h=new Le({url:d});s.push(h.fetchImage().then(t_t(e,c)))}else e._texturesToCreate.push({name:c,source:d})}o.length=0,s.length>0?(e._ready=!1,e._texturePromise=Promise.all(s).then(function(){e._ready=!0,e._texturePromise=void 0})):e._ready=!0}function jIe(e){l(e._command)&&(e._command.shaderProgram=e._command.shaderProgram&&e._command.shaderProgram.destroy(),e._command=void 0),e._selectedIdTexture=e._selectedIdTexture&&e._selectedIdTexture.destroy();let t=e._textureCache;if(!l(t))return;let n=e._uniforms,i=e._actualUniforms;for(let o in i){if(!i.hasOwnProperty(o))continue;let r=i[o];r instanceof Lt&&(l(t.getStageByName(n[o]))||r.destroy(),e._dirtyUniforms.push(o))}}function o_t(e){let t=l(e._selected)?e._selected.length:0,n=l(e._parentSelected)?e._parentSelected:0,i=e._selected!==e._selectedShadow||t!==e._selectedLength||e._parentSelected!==e._parentSelectedShadow||n!==e._parentSelectedLength;if(l(e._selected)&&l(e._parentSelected)?e._combinedSelected=e._selected.concat(e._parentSelected):l(e._parentSelected)?e._combinedSelected=e._parentSelected:e._combinedSelected=e._selected,!i&&l(e._combinedSelected)){if(!l(e._combinedSelectedShadow))return!0;for(let o=0;o<e._combinedSelected.length;++o)if(e._combinedSelected[o]!==e._combinedSelectedShadow[o])return!0}return i}function r_t(e,t){if(!e._selectedDirty)return;e._selectedIdTexture=e._selectedIdTexture&&e._selectedIdTexture.destroy(),e._selectedIdTexture=void 0;let n=e._combinedSelected;if(!l(n))return;let i=0;for(let s=0;s<n.length;++s){let a=n[s];l(a.pickIds)?i+=a.pickIds.length:l(a.pickId)&&++i}if(n.length===0||i===0){let s=new Uint8Array([255,255,255,255]);e._selectedIdTexture=new Lt({context:t,pixelFormat:Ke.RGBA,pixelDatatype:Oe.UNSIGNED_BYTE,source:{arrayBufferView:s,width:1,height:1},sampler:Ht.NEAREST});return}let o=0,r=new Uint8Array(i*4);for(let s=0;s<n.length;++s){let a=n[s];if(l(a.pickIds)){let c=a.pickIds,d=c.length;for(let u=0;u<d;++u){let h=c[u].color;r[o]=U.floatToByte(h.red),r[o+1]=U.floatToByte(h.green),r[o+2]=U.floatToByte(h.blue),r[o+3]=U.floatToByte(h.alpha),o+=4}}else if(l(a.pickId)){let c=a.pickId.color;r[o]=U.floatToByte(c.red),r[o+1]=U.floatToByte(c.green),r[o+2]=U.floatToByte(c.blue),r[o+3]=U.floatToByte(c.alpha),o+=4}}e._selectedIdTexture=new Lt({context:t,pixelFormat:Ke.RGBA,pixelDatatype:Oe.UNSIGNED_BYTE,source:{arrayBufferView:r,width:i,height:1},sampler:Ht.NEAREST})}xE.prototype.update=function(e,t){if(this.enabled!==this._enabled&&!this.enabled&&jIe(this),this._enabled=this.enabled,!this._enabled||(this._logDepthChanged=t!==this._useLogDepth,this._useLogDepth=t,this._selectedDirty=o_t(this),this._selectedShadow=this._selected,this._parentSelectedShadow=this._parentSelected,this._combinedSelectedShadow=this._combinedSelected,this._selectedLength=l(this._selected)?this._selected.length:0,this._parentSelectedLength=l(this._parentSelected)?this._parentSelected.length:0,r_t(this,e),jSt(this),i_t(this,e),$St(this,e),e_t(this),this._selectedDirty=!1,!this._ready))return;let n=this._textureCache.getFramebuffer(this._name);if(this._command.framebuffer=n,!l(n))return;let i=n.getColorTexture(0),o;(i.width!==e.drawingBufferWidth||i.height!==e.drawingBufferHeight)&&(o=this._renderState,(!l(o)||i.width!==o.viewport.width||i.height!==o.viewport.height)&&(this._renderState=Qe.fromCache({viewport:new nt(0,0,i.width,i.height)}))),this._command.renderState=o};xE.prototype.execute=function(e,t,n,i){if(!l(this._command)||!l(this._command.framebuffer)||!this._ready||!this._enabled)return;this._colorTexture=t,this._depthTexture=n,this._idTexture=i,Ht.equals(this._colorTexture.sampler,this._sampler)||(this._colorTexture.sampler=this._sampler);let o=this.scissorRectangle.width>0&&this.scissorRectangle.height>0?this._passState:void 0;l(o)&&(o.context=e),this._command.execute(e,o)};xE.prototype.isDestroyed=function(){return!1};xE.prototype.destroy=function(){return jIe(this),he(this)};var Fo=xE;var Sso=y(x(),1);function CE(e){e=e??Q.EMPTY_OBJECT,this._stages=e.stages,this._inputPreviousStageTexture=e.inputPreviousStageTexture??!0;let t=e.name;l(t)||(t=qn()),this._name=t,this._uniforms=e.uniforms,this._textureCache=void 0,this._index=void 0,this._selected=void 0,this._selectedShadow=void 0,this._parentSelected=void 0,this._parentSelectedShadow=void 0,this._combinedSelected=void 0,this._combinedSelectedShadow=void 0,this._selectedLength=0,this._parentSelectedLength=0,this._selectedDirty=!0}Object.defineProperties(CE.prototype,{ready:{get:function(){let e=this._stages,t=e.length;for(let n=0;n<t;++n)if(!e[n].ready)return!1;return!0}},name:{get:function(){return this._name}},enabled:{get:function(){return this._stages[0].enabled},set:function(e){let t=this._stages,n=t.length;for(let i=0;i<n;++i)t[i].enabled=e}},uniforms:{get:function(){return this._uniforms}},inputPreviousStageTexture:{get:function(){return this._inputPreviousStageTexture}},length:{get:function(){return this._stages.length}},selected:{get:function(){return this._selected},set:function(e){this._selected=e}},parentSelected:{get:function(){return this._parentSelected},set:function(e){this._parentSelected=e}}});CE.prototype._isSupported=function(e){let t=this._stages,n=t.length;for(let i=0;i<n;++i)if(!t[i]._isSupported(e))return!1;return!0};CE.prototype.get=function(e){return this._stages[e]};function s_t(e){let t=l(e._selected)?e._selected.length:0,n=l(e._parentSelected)?e._parentSelected:0,i=e._selected!==e._selectedShadow||t!==e._selectedLength;if(i=i||e._parentSelected!==e._parentSelectedShadow||n!==e._parentSelectedLength,l(e._selected)&&l(e._parentSelected)?e._combinedSelected=e._selected.concat(e._parentSelected):l(e._parentSelected)?e._combinedSelected=e._parentSelected:e._combinedSelected=e._selected,!i&&l(e._combinedSelected)){if(!l(e._combinedSelectedShadow))return!0;t=e._combinedSelected.length;for(let o=0;o<t;++o)if(e._combinedSelected[o]!==e._combinedSelectedShadow[o])return!0}return i}CE.prototype.update=function(e,t){this._selectedDirty=s_t(this),this._selectedShadow=this._selected,this._parentSelectedShadow=this._parentSelected,this._combinedSelectedShadow=this._combinedSelected,this._selectedLength=l(this._selected)?this._selected.length:0,this._parentSelectedLength=l(this._parentSelected)?this._parentSelected.length:0;let n=this._stages,i=n.length;for(let o=0;o<i;++o){let r=n[o];this._selectedDirty&&(r.parentSelected=this._combinedSelected),r.update(e,t)}};CE.prototype.isDestroyed=function(){return!1};CE.prototype.destroy=function(){let e=this._stages,t=e.length;for(let n=0;n<t;++n)e[n].destroy();return he(this)};var Ud=CE;var ns={};function Uee(e){let o=`#define USE_STEP_SIZE
${Ky}`,r=new Fo({name:`${e}_x_direction`,fragmentShader:o,uniforms:{delta:1,sigma:2,stepSize:1,direction:0},sampleMode:Qu.LINEAR}),s=new Fo({name:`${e}_y_direction`,fragmentShader:o,uniforms:{delta:1,sigma:2,stepSize:1,direction:1},sampleMode:Qu.LINEAR}),a={};return Object.defineProperties(a,{delta:{get:function(){return r.uniforms.delta},set:function(c){let d=r.uniforms,u=s.uniforms;d.delta=u.delta=c}},sigma:{get:function(){return r.uniforms.sigma},set:function(c){let d=r.uniforms,u=s.uniforms;d.sigma=u.sigma=c}},stepSize:{get:function(){return r.uniforms.stepSize},set:function(c){let d=r.uniforms,u=s.uniforms;d.stepSize=u.stepSize=c}}}),new Ud({name:e,stages:[r,s],uniforms:a})}ns.createBlurStage=function(){return Uee("czm_blur")};ns.createDepthOfFieldStage=function(){let e=Uee("czm_depth_of_field_blur"),t=new Fo({name:"czm_depth_of_field_composite",fragmentShader:cM,uniforms:{focalDistance:5,blurTexture:e.name}}),n={};return Object.defineProperties(n,{focalDistance:{get:function(){return t.uniforms.focalDistance},set:function(i){t.uniforms.focalDistance=i}},delta:{get:function(){return e.uniforms.delta},set:function(i){e.uniforms.delta=i}},sigma:{get:function(){return e.uniforms.sigma},set:function(i){e.uniforms.sigma=i}},stepSize:{get:function(){return e.uniforms.stepSize},set:function(i){e.uniforms.stepSize=i}}}),new Ud({name:"czm_depth_of_field",stages:[e,t],inputPreviousStageTexture:!1,uniforms:n})};ns.isDepthOfFieldSupported=function(e){return e.context.depthTexture};ns.createEdgeDetectionStage=function(){let e=qn();return new Fo({name:`czm_edge_detection_${e}`,fragmentShader:dM,uniforms:{length:.25,color:U.clone(U.BLACK)}})};ns.isEdgeDetectionSupported=function(e){return e.context.depthTexture};function a_t(e){if(!l(e))return ns.createEdgeDetectionStage();let t=new Ud({name:"czm_edge_detection_multiple",stages:e,inputPreviousStageTexture:!1}),n={},i="",o="";for(let a=0;a<e.length;++a)i+=`uniform sampler2D edgeTexture${a};
`,o+=` vec4 edge${a} = texture(edgeTexture${a}, v_textureCoordinates);
if (edge${a}.a > 0.0)
{
color = edge${a};
break;
}
`,n[`edgeTexture${a}`]=e[a].name;let r=`${i}in vec2 v_textureCoordinates;
void main() {
vec4 color = vec4(0.0);
for (int i = 0; i < ${e.length}; i++)
{
${o} }
out_FragColor = color;
}
`,s=new Fo({name:"czm_edge_detection_combine",fragmentShader:r,uniforms:n});return new Ud({name:"czm_edge_detection_composite",stages:[t,s]})}ns.createSilhouetteStage=function(e){let t=a_t(e),n=new Fo({name:"czm_silhouette_color_edges",fragmentShader:bM,uniforms:{silhouetteTexture:t.name}});return new Ud({name:"czm_silhouette",stages:[t,n],inputPreviousStageTexture:!1,uniforms:t.uniforms})};ns.isSilhouetteSupported=function(e){return e.context.depthTexture};ns.createBloomStage=function(){let e=new Fo({name:"czm_bloom_contrast_bias",fragmentShader:aM,uniforms:{contrast:128,brightness:-.3}}),t=Uee("czm_bloom_blur"),n=new Ud({name:"czm_bloom_contrast_bias_blur",stages:[e,t]}),i=new Fo({name:"czm_bloom_generate_composite",fragmentShader:rM,uniforms:{glowOnly:!1,bloomTexture:n.name}}),o={};return Object.defineProperties(o,{glowOnly:{get:function(){return i.uniforms.glowOnly},set:function(r){i.uniforms.glowOnly=r}},contrast:{get:function(){return e.uniforms.contrast},set:function(r){e.uniforms.contrast=r}},brightness:{get:function(){return e.uniforms.brightness},set:function(r){e.uniforms.brightness=r}},delta:{get:function(){return t.uniforms.delta},set:function(r){t.uniforms.delta=r}},sigma:{get:function(){return t.uniforms.sigma},set:function(r){t.uniforms.sigma=r}},stepSize:{get:function(){return t.uniforms.stepSize},set:function(r){t.uniforms.stepSize=r}}}),new Ud({name:"czm_bloom",stages:[n,i],inputPreviousStageTexture:!1,uniforms:o})};ns.createAmbientOcclusionStage=function(){let e=new Fo({name:"czm_ambient_occlusion_generate",fragmentShader:nM,uniforms:{intensity:3,bias:.1,lengthCap:.26,directionCount:8,stepCount:32,randomTexture:void 0}}),t=new Fo({name:"czm_ambient_occlusion_composite",fragmentShader:iM,uniforms:{ambientOcclusionOnly:!1,ambientOcclusionTexture:e.name}}),n={};return Object.defineProperties(n,{intensity:{get:function(){return e.uniforms.intensity},set:function(i){e.uniforms.intensity=i}},bias:{get:function(){return e.uniforms.bias},set:function(i){e.uniforms.bias=i}},lengthCap:{get:function(){return e.uniforms.lengthCap},set:function(i){e.uniforms.lengthCap=i}},directionCount:{get:function(){return e.uniforms.directionCount},set:function(i){e.uniforms.directionCount=i}},stepCount:{get:function(){return e.uniforms.stepCount},set:function(i){e.uniforms.stepCount=i}},randomTexture:{get:function(){return e.uniforms.randomTexture},set:function(i){e.uniforms.randomTexture=i}},ambientOcclusionOnly:{get:function(){return t.uniforms.ambientOcclusionOnly},set:function(i){t.uniforms.ambientOcclusionOnly=i}}}),new Ud({name:"czm_ambient_occlusion",stages:[e,t],inputPreviousStageTexture:!1,uniforms:n})};ns.isAmbientOcclusionSupported=function(e){return e.context.depthTexture};var c_t=`#define FXAA_QUALITY_PRESET 39
${qX}
${hM}`;ns.createFXAAStage=function(){return new Fo({name:"czm_FXAA",fragmentShader:c_t,sampleMode:Qu.LINEAR})};ns.createAcesTonemappingStage=function(e){let t=e?`#define AUTO_EXPOSURE
`:"";return t+=tM,new Fo({name:"czm_aces",fragmentShader:t,uniforms:{autoExposure:void 0,exposure:1}})};ns.createFilmicTonemappingStage=function(e){let t=e?`#define AUTO_EXPOSURE
`:"";return t+=uM,new Fo({name:"czm_filmic",fragmentShader:t,uniforms:{autoExposure:void 0,exposure:1}})};ns.createPbrNeutralTonemappingStage=function(e){let t=e?`#define AUTO_EXPOSURE
`:"";return t+=mM,new Fo({name:"czm_pbr_neutral",fragmentShader:t,uniforms:{autoExposure:void 0,exposure:1}})};ns.createReinhardTonemappingStage=function(e){let t=e?`#define AUTO_EXPOSURE
`:"";return t+=gM,new Fo({name:"czm_reinhard",fragmentShader:t,uniforms:{autoExposure:void 0,exposure:1}})};ns.createModifiedReinhardTonemappingStage=function(e){let t=e?`#define AUTO_EXPOSURE
`:"";return t+=pM,new Fo({name:"czm_modified_reinhard",fragmentShader:t,uniforms:{white:U.WHITE,autoExposure:void 0,exposure:1}})};ns.createAutoExposureStage=function(){return new yM};ns.createBlackAndWhiteStage=function(){return new Fo({name:"czm_black_and_white",fragmentShader:oM,uniforms:{gradations:5}})};ns.createBrightnessStage=function(){return new Fo({name:"czm_brightness",fragmentShader:sM,uniforms:{brightness:.5}})};ns.createNightVisionStage=function(){return new Fo({name:"czm_night_vision",fragmentShader:AM})};ns.createDepthViewStage=function(){return new Fo({name:"czm_depth_view",fragmentShader:lM})};ns.createLensFlareStage=function(){return new Fo({name:"czm_lens_flare",fragmentShader:fM,uniforms:{dirtTexture:en("Assets/Textures/LensFlare/DirtMask.jpg"),starTexture:en("Assets/Textures/LensFlare/StarBurst.jpg"),intensity:2,distortion:10,ghostDispersal:.4,haloWidth:.4,dirtAmount:.4,earthRadius:ie.WGS84.maximumRadius}})};var Ou=ns;var lao=y(x(),1);function Ib(e){this._collection=e,this._framebuffers=[],this._stageNameToFramebuffer={},this._width=void 0,this._height=void 0,this._updateDependencies=!1}function CM(e){for(;l(e.length);)e=e.get(e.length-1);return e.name}function Dee(e,t,n,i,o){if(!i.enabled||!i._isSupported(t))return o;let r=n[i.name]={};if(l(o)){let a=e.getStageByName(o);r[CM(a)]=!0}let s=i.uniforms;if(l(s)){let a=Object.getOwnPropertyNames(s),c=a.length;for(let d=0;d<c;++d){let u=s[a[d]];if(typeof u=="string"){let h=e.getStageByName(u);l(h)&&(r[CM(h)]=!0)}}}return i.name}function xM(e,t,n,i,o){if(l(i.enabled)&&!i.enabled||l(i._isSupported)&&!i._isSupported(t))return o;let r=o,s=!l(i.inputPreviousStageTexture)||i.inputPreviousStageTexture,a=o,c=i.length;for(let h=0;h<c;++h){let p=i.get(h);l(p.length)?a=xM(e,t,n,p,o):a=Dee(e,t,n,p,o),s&&(o=a)}let d,u;if(s)for(d=1;d<c;++d)u=CM(i.get(d)),l(n[u])||(n[u]={}),n[u][r]=!0;else for(d=1;d<c;++d){u=CM(i.get(d));let h=n[u];for(let p=0;p<d;++p)h[CM(i.get(p))]=!0}return a}function l_t(e,t){let n={};if(l(e.ambientOcclusion)){let i=e.ambientOcclusion,o=e.bloom,r=e._tonemapping,s=e.fxaa,a=xM(e,t,n,i,void 0);a=xM(e,t,n,o,a),a=Dee(e,t,n,r,a),a=xM(e,t,n,e,a),Dee(e,t,n,s,a)}else xM(e,t,n,e,void 0);return n}function d_t(e,t,n){let o=e._collection.getStageByName(t),r=o._textureScale,s=o._forcePowerOfTwo,a=o._pixelFormat,c=o._pixelDatatype,d=o._clearColor,u,h,p=e._framebuffers,A=p.length;for(u=0;u<A;++u){if(h=p[u],r!==h.textureScale||s!==h.forcePowerOfTwo||a!==h.pixelFormat||c!==h.pixelDatatype||!U.equals(d,h.clearColor))continue;let f=h.stages,b=f.length,C=!1;for(let T=0;T<b;++T)if(n[f[T]]){C=!0;break}if(!C)break}return l(h)&&u<A?(h.stages.push(t),h):(h={textureScale:r,forcePowerOfTwo:s,pixelFormat:a,pixelDatatype:c,clearColor:d,stages:[t],buffer:new Ti({pixelFormat:a,pixelDatatype:c}),clear:void 0},p.push(h),h)}function u_t(e,t){let n=l_t(e._collection,t);for(let i in n)n.hasOwnProperty(i)&&(e._stageNameToFramebuffer[i]=d_t(e,i,n[i]))}function kee(e){let t=e._framebuffers,n=t.length;for(let i=0;i<n;++i)t[i].buffer.destroy()}function m_t(e,t){let n=e._width,i=e._height,o=e._framebuffers,r=o.length;for(let s=0;s<r;++s){let a=o[s],c=a.textureScale,d=Math.ceil(n*c),u=Math.ceil(i*c),h=Math.min(d,u);a.forcePowerOfTwo&&(L.isPowerOfTwo(h)||(h=L.nextPowerOfTwo(h)),d=h,u=h),a.buffer.update(t,d,u),a.clear=new mi({color:a.clearColor,framebuffer:a.buffer.framebuffer})}}Ib.prototype.updateDependencies=function(){this._updateDependencies=!0};Ib.prototype.update=function(e){let t=this._collection,n=this._updateDependencies,i=l(t.ambientOcclusion)&&t.ambientOcclusion.enabled&&t.ambientOcclusion._isSupported(e),o=l(t.bloom)&&t.bloom.enabled&&t.bloom._isSupported(e),r=l(t._tonemapping)&&t._tonemapping.enabled&&t._tonemapping._isSupported(e),s=l(t.fxaa)&&t.fxaa.enabled&&t.fxaa._isSupported(e),a=!l(t._activeStages)||t._activeStages.length>0||i||o||r||s;if((n||!a&&this._framebuffers.length>0)&&(kee(this),this._framebuffers.length=0,this._stageNameToFramebuffer={},this._width=void 0,this._height=void 0),!n&&!a)return;this._framebuffers.length===0&&u_t(this,e);let c=e.drawingBufferWidth,d=e.drawingBufferHeight,u=this._width!==c||this._height!==d;!n&&!u||(this._width=c,this._height=d,this._updateDependencies=!1,kee(this),m_t(this,e))};Ib.prototype.clear=function(e){let t=this._framebuffers;for(let n=0;n<t.length;++n)t[n].clear.execute(e)};Ib.prototype.getStageByName=function(e){return this._collection.getStageByName(e)};Ib.prototype.getOutputTexture=function(e){return this._collection.getOutputTexture(e)};Ib.prototype.getFramebuffer=function(e){let t=this._stageNameToFramebuffer[e];if(l(t))return t.buffer.framebuffer};Ib.prototype.isDestroyed=function(){return!1};Ib.prototype.destroy=function(){return kee(this),he(this)};var TE=Ib;var uao=y(x(),1),h_t={REINHARD:"REINHARD",MODIFIED_REINHARD:"MODIFIED_REINHARD",FILMIC:"FILMIC",ACES:"ACES",PBR_NEUTRAL:"PBR_NEUTRAL"};var Zb=Object.freeze(h_t);var Qee=[];function rd(){let e=Ou.createFXAAStage(),t=Ou.createAmbientOcclusionStage(),n=Ou.createBloomStage();this._autoExposureEnabled=!1,this._autoExposure=Ou.createAutoExposureStage(),this._exposure=1,this._tonemapping=void 0,this._tonemapper=void 0,this.tonemapper=Zb.PBR_NEUTRAL;let i=this._tonemapping;e.enabled=!1,t.enabled=!1,n.enabled=!1,i.enabled=!1;let o=new TE(this),r={},s=Qee;for(s.push(e,t,n,i);s.length>0;){let c=s.pop();r[c.name]=c,c._textureCache=o;let d=c.length;if(l(d))for(let u=0;u<d;++u)s.push(c.get(u))}this._stages=[],this._activeStages=[],this._previousActiveStages=[],this._randomTexture=void 0;let a=this;t.uniforms.randomTexture=function(){return a._randomTexture},this._ao=t,this._bloom=n,this._fxaa=e,this._aoEnabled=void 0,this._bloomEnabled=void 0,this._tonemappingEnabled=void 0,this._fxaaEnabled=void 0,this._activeStagesChanged=!1,this._stagesRemoved=!1,this._textureCacheDirty=!1,this._stageNames=r,this._textureCache=o}Object.defineProperties(rd.prototype,{ready:{get:function(){let e=!1,t=this._stages,n=t.length;for(let a=n-1;a>=0;--a){let c=t[a];e=e||c.ready&&c.enabled}let i=this._fxaa,o=this._ao,r=this._bloom,s=this._tonemapping;return e=e||i.ready&&i.enabled,e=e||o.ready&&o.enabled,e=e||r.ready&&r.enabled,e=e||s.ready&&s.enabled,e}},fxaa:{get:function(){return this._fxaa}},ambientOcclusion:{get:function(){return this._ao}},bloom:{get:function(){return this._bloom}},length:{get:function(){return Oee(this),this._stages.length}},outputTexture:{get:function(){let e=this._fxaa;if(e.enabled&&e.ready)return this.getOutputTexture(e.name);let t=this._stages,n=t.length;for(let s=n-1;s>=0;--s){let a=t[s];if(l(a)&&a.ready&&a.enabled)return this.getOutputTexture(a.name)}let i=this._tonemapping;if(i.enabled&&i.ready)return this.getOutputTexture(i.name);let o=this._bloom;if(o.enabled&&o.ready)return this.getOutputTexture(o.name);let r=this._ao;if(r.enabled&&r.ready)return this.getOutputTexture(r.name)}},hasSelected:{get:function(){let e=this._stages.slice();for(;e.length>0;){let t=e.pop();if(!l(t))continue;if(l(t.selected))return!0;let n=t.length;if(l(n))for(let i=0;i<n;++i)e.push(t.get(i))}return!1}},tonemapper:{get:function(){return this._tonemapper},set:function(e){if(this._tonemapper===e)return;l(this._tonemapping)&&(delete this._stageNames[this._tonemapping.name],this._tonemapping.destroy());let t=this._autoExposureEnabled,n;switch(e){case Zb.REINHARD:n=Ou.createReinhardTonemappingStage(t);break;case Zb.MODIFIED_REINHARD:n=Ou.createModifiedReinhardTonemappingStage(t);break;case Zb.FILMIC:n=Ou.createFilmicTonemappingStage(t);break;case Zb.PBR_NEUTRAL:n=Ou.createPbrNeutralTonemappingStage(t);break;default:n=Ou.createAcesTonemappingStage(t);break}if(t){let i=this._autoExposure;n.uniforms.autoExposure=function(){return i.outputTexture}}else n.uniforms.exposure=this._exposure;this._tonemapper=e,this._tonemapping=n,l(this._stageNames)&&(this._stageNames[n.name]=n,n._textureCache=this._textureCache),this._textureCacheDirty=!0}},exposure:{get:function(){return this._exposure},set:function(e){this._tonemapping.uniforms.exposure=e,this._exposure=e}}});function Oee(e){if(!e._stagesRemoved)return;e._stagesRemoved=!1;let t=[],n=e._stages;for(let i=0,o=0;i<n.length;++i){let r=n[i];r&&(r._index=o++,t.push(r))}e._stages=t}rd.prototype.add=function(e){let t=this._stageNames,n=Qee;for(n.push(e);n.length>0;){let o=n.pop();t[o.name]=o,o._textureCache=this._textureCache;let r=o.length;if(l(r))for(let s=0;s<r;++s)n.push(o.get(s))}let i=this._stages;return e._index=i.length,i.push(e),this._textureCacheDirty=!0,e};rd.prototype.remove=function(e){if(!this.contains(e))return!1;let t=this._stageNames,n=Qee;for(n.push(e);n.length>0;){let i=n.pop();delete t[i.name];let o=i.length;if(l(o))for(let r=0;r<o;++r)n.push(i.get(r))}return this._stages[e._index]=void 0,this._stagesRemoved=!0,this._textureCacheDirty=!0,e._index=void 0,e._textureCache=void 0,e.destroy(),!0};rd.prototype.contains=function(e){return l(e)&&l(e._index)&&e._textureCache===this._textureCache};rd.prototype.get=function(e){return Oee(this),this._stages[e]};rd.prototype.removeAll=function(){let e=this._stages,t=e.length;for(let n=0;n<t;++n)this.remove(e[n]);e.length=0};rd.prototype.getStageByName=function(e){return this._stageNames[e]};rd.prototype.update=function(e,t,n){Oee(this);let i=this._activeStages,o=this._activeStages=this._previousActiveStages;this._previousActiveStages=i;let r=this._stages;o.length=r.length;let s=0;for(let T=0;T<r.length;++T){let E=r[T];E.ready&&E.enabled&&E._isSupported(e)&&(o[s++]=E)}o.length=s;let a=s!==i.length;if(!a){for(let T=0;T<s;++T)if(o[T]!==i[T]){a=!0;break}}let c=this._ao,d=this._bloom,u=this._autoExposure,h=this._tonemapping,p=this._fxaa;h.enabled=n;let A=c.enabled&&c._isSupported(e),f=d.enabled&&d._isSupported(e),b=h.enabled&&h._isSupported(e),C=p.enabled&&p._isSupported(e);if((a||this._textureCacheDirty||A!==this._aoEnabled||f!==this._bloomEnabled||b!==this._tonemappingEnabled||C!==this._fxaaEnabled)&&(this._textureCache.updateDependencies(),this._aoEnabled=A,this._bloomEnabled=f,this._tonemappingEnabled=b,this._fxaaEnabled=C,this._textureCacheDirty=!1),l(this._randomTexture)&&!A&&(this._randomTexture.destroy(),this._randomTexture=void 0),!l(this._randomTexture)&&A){let E=new Uint8Array(196608);for(let S=0;S<196608;S+=3)E[S]=Math.floor(Math.random()*255);this._randomTexture=new Lt({context:e,pixelFormat:Ke.RGB,pixelDatatype:Oe.UNSIGNED_BYTE,source:{arrayBufferView:E,width:256,height:256},sampler:new Ht({wrapS:gn.REPEAT,wrapT:gn.REPEAT,minificationFilter:zt.NEAREST,magnificationFilter:li.NEAREST})})}this._textureCache.update(e),p.update(e,t),c.update(e,t),d.update(e,t),h.update(e,t),this._autoExposureEnabled&&u.update(e,t);for(let T=0;T<r.length;++T)r[T].update(e,t);s=0;for(let T=0;T<r.length;++T){let E=r[T];E.ready&&E.enabled&&E._isSupported(e)&&s++}a=s!==o.length,a&&this.update(e,t,n)};rd.prototype.clear=function(e){this._textureCache.clear(e),this._autoExposureEnabled&&this._autoExposure.clear(e)};function EE(e){for(;l(e.length);)e=e.get(e.length-1);return e.outputTexture}rd.prototype.getOutputTexture=function(e){let t=this.getStageByName(e);if(l(t))return EE(t)};function cA(e,t,n,i,o){if(l(e.execute)){e.execute(t,n,i,o);return}if(e.inputPreviousStageTexture){cA(e.get(0),t,n,i,o);for(let r=1;r<e.length;++r)cA(e.get(r),t,EE(e.get(r-1)),i,o)}else for(let r=0;r<e.length;++r)cA(e.get(r),t,n,i,o)}rd.prototype.execute=function(e,t,n,i){let o=this._activeStages,r=o.length,s=this._fxaa,a=this._ao,c=this._bloom,d=this._autoExposure,u=this._tonemapping,h=a.enabled&&a._isSupported(e),p=c.enabled&&c._isSupported(e),A=this._autoExposureEnabled,f=u.enabled&&u._isSupported(e),b=s.enabled&&s._isSupported(e);if(!b&&!h&&!p&&!f&&r===0)return;let C=t;h&&a.ready&&(cA(a,e,C,n,i),C=EE(a)),p&&c.ready&&(cA(c,e,C,n,i),C=EE(c)),A&&d.ready&&cA(d,e,C,n,i),f&&u.ready&&(cA(u,e,C,n,i),C=EE(u));let T=C;if(r>0){cA(o[0],e,C,n,i);for(let E=1;E<r;++E)cA(o[E],e,EE(o[E-1]),n,i);T=EE(o[r-1])}b&&s.ready&&cA(s,e,T,n,i)};rd.prototype.copy=function(e,t){if(!l(this._copyColorCommand)){let n=this;this._copyColorCommand=e.createViewportQuadCommand(vd,{uniformMap:{colorTexture:function(){return n.outputTexture}},owner:this})}this._copyColorCommand.framebuffer=t,this._copyColorCommand.execute(e)};rd.prototype.isDestroyed=function(){return!1};rd.prototype.destroy=function(){return this._fxaa.destroy(),this._ao.destroy(),this._bloom.destroy(),this._autoExposure.destroy(),this._tonemapping.destroy(),this.removeAll(),this._textureCache=this._textureCache&&this._textureCache.destroy(),he(this)};var TM=rd;var Qao=y(x(),1);function SE(e){this._scene=e,this._currentTweens=[],this._morphHandler=void 0,this._morphCancelled=!1,this._completeMorph=void 0,this._morphToOrthographic=!1}SE.prototype.completeMorph=function(){l(this._completeMorph)&&this._completeMorph()};SE.prototype.morphTo2D=function(e,t){l(this._completeMorph)&&this._completeMorph();let n=this._scene;this._previousMode=n.mode,this._morphToOrthographic=n.camera.frustum instanceof bn,!(this._previousMode===se.SCENE2D||this._previousMode===se.MORPHING)&&(this._scene.morphStart.raiseEvent(this,this._previousMode,se.SCENE2D,!0),n._mode=se.MORPHING,n.camera._setTransform(F.IDENTITY),this._previousMode===se.COLUMBUS_VIEW?O_t(this,e):$_t(this,e,t),e===0&&l(this._completeMorph)&&this._completeMorph())};var f_t=new m,p_t=new m,A_t=new m,g_t=new m,b_t=new m,y_t=new m,x_t=new m,C_t=new Ae,T_t=new F,E_t=new Ui,S_t=new bn,__t={position:void 0,direction:void 0,up:void 0,position2D:void 0,direction2D:void 0,up2D:void 0,frustum:void 0};SE.prototype.morphToColumbusView=function(e,t){l(this._completeMorph)&&this._completeMorph();let n=this._scene;if(this._previousMode=n.mode,this._previousMode===se.COLUMBUS_VIEW||this._previousMode===se.MORPHING)return;this._scene.morphStart.raiseEvent(this,this._previousMode,se.COLUMBUS_VIEW,!0),n.camera._setTransform(F.IDENTITY);let i=f_t,o=p_t,r=A_t;if(e>0)i.x=0,i.y=-1,i.z=1,i=m.multiplyByScalar(m.normalize(i,i),5*t.maximumRadius,i),m.negate(m.normalize(i,o),o),m.cross(m.UNIT_X,o,r);else{let d=n.camera;if(this._previousMode===se.SCENE2D)m.clone(d.position,i),i.z=d.frustum.right-d.frustum.left,m.negate(m.UNIT_Z,o),m.clone(m.UNIT_Y,r);else{m.clone(d.positionWC,i),m.clone(d.directionWC,o),m.clone(d.upWC,r);let u=t.scaleToGeodeticSurface(i,x_t),h=bt.eastNorthUpToFixedFrame(u,t,T_t);F.inverseTransformation(h,h),n.mapProjection.project(t.cartesianToCartographic(i,C_t),i),F.multiplyByPointAsVector(h,o,o),F.multiplyByPointAsVector(h,r,r)}}let s;this._morphToOrthographic?(s=S_t,s.width=n.camera.frustum.right-n.camera.frustum.left,s.aspectRatio=n.drawingBufferWidth/n.drawingBufferHeight):(s=E_t,s.aspectRatio=n.drawingBufferWidth/n.drawingBufferHeight,s.fov=L.toRadians(60));let a=__t;a.position=i,a.direction=o,a.up=r,a.frustum=s;let c=tIt(a);EM(this,c),this._previousMode===se.SCENE2D?eIt(this,e,a,c):(a.position2D=F.multiplyByPoint(Zo.TRANSFORM_2D,i,g_t),a.direction2D=F.multiplyByPointAsVector(Zo.TRANSFORM_2D,o,b_t),a.up2D=F.multiplyByPointAsVector(Zo.TRANSFORM_2D,r,y_t),n._mode=se.MORPHING,cZe(this,e,a,c)),e===0&&l(this._completeMorph)&&this._completeMorph()};var Jee={position:new m,direction:new m,up:new m,frustum:void 0},$Ie=new Ui;SE.prototype.morphTo3D=function(e,t){l(this._completeMorph)&&this._completeMorph();let n=this._scene;if(this._previousMode=n.mode,!(this._previousMode===se.SCENE3D||this._previousMode===se.MORPHING)){if(this._scene.morphStart.raiseEvent(this,this._previousMode,se.SCENE3D,!0),n._mode=se.MORPHING,n.camera._setTransform(F.IDENTITY),this._previousMode===se.SCENE2D)N_t(this,e,t);else{let i;e>0?(i=Jee,m.fromDegrees(0,0,5*t.maximumRadius,t,i.position),m.negate(i.position,i.direction),m.normalize(i.direction,i.direction),m.clone(m.UNIT_Z,i.up)):i=eZe(this,t);let o,r=n.camera;r.frustum instanceof bn?o=r.frustum.clone():(o=$Ie,o.aspectRatio=n.drawingBufferWidth/n.drawingBufferHeight,o.fov=L.toRadians(60)),i.frustum=o;let s=dZe(i);EM(this,s),Hee(this,e,i,s)}e===0&&l(this._completeMorph)&&this._completeMorph()}};SE.prototype.isDestroyed=function(){return!1};SE.prototype.destroy=function(){return DO(this),he(this)};function EM(e,t){if(e._scene.completeMorphOnUserInput){e._morphHandler=new Du(e._scene.canvas);let n=function(){e._morphCancelled=!0,e._scene.camera.cancelFlight(),t(e)};e._completeMorph=n,e._morphHandler.setInputAction(n,Gn.LEFT_DOWN),e._morphHandler.setInputAction(n,Gn.MIDDLE_DOWN),e._morphHandler.setInputAction(n,Gn.RIGHT_DOWN),e._morphHandler.setInputAction(n,Gn.WHEEL)}}function DO(e){let t=e._currentTweens;for(let n=0;n<t.length;++n)t[n].cancelTween();e._currentTweens.length=0,e._morphHandler=e._morphHandler&&e._morphHandler.destroy()}var I_t=new Ae,Z_t=new m,R_t=new F;function eZe(e,t){let n=e._scene,i=n.camera,o=Jee,r=o.position,s=o.direction,a=o.up,c=n.mapProjection.unproject(i.position,I_t);t.cartographicToCartesian(c,r);let d=t.scaleToGeodeticSurface(r,Z_t),u=bt.eastNorthUpToFixedFrame(d,t,R_t);return F.multiplyByPointAsVector(u,i.direction,s),F.multiplyByPointAsVector(u,i.up,a),o}var V_t=new m,G_t=new m,L_t=new m,W_t=new m,F_t=new m,B_t=new m;function Hee(e,t,n,i){t*=.5;let o=e._scene,r=o.camera,s=m.clone(r.position,V_t),a=m.clone(r.direction,G_t),c=m.clone(r.up,L_t),d=F.multiplyByPoint(Zo.TRANSFORM_2D_INVERSE,n.position,W_t),u=F.multiplyByPointAsVector(Zo.TRANSFORM_2D_INVERSE,n.direction,F_t),h=F.multiplyByPointAsVector(Zo.TRANSFORM_2D_INVERSE,n.up,B_t);function p(f){ah(s,d,f.time,r.position),ah(a,u,f.time,r.direction),ah(c,h,f.time,r.up),m.cross(r.direction,r.up,r.right),m.normalize(r.right,r.right)}let A=o.tweens.add({duration:t,easingFunction:Ts.QUARTIC_OUT,startObject:{time:0},stopObject:{time:1},update:p,complete:function(){lZe(e,o,0,1,t,i)}});e._currentTweens.push(A)}var w_t=new bn,tZe=new m,nZe=new m,iZe=new m,Kee=new m,oZe=new m,rZe=new m;function N_t(e,t,n){t/=3;let i=e._scene,o=i.camera,r;t>0?(r=Jee,m.fromDegrees(0,0,5*n.maximumRadius,n,r.position),m.negate(r.position,r.direction),m.normalize(r.direction,r.direction),m.clone(m.UNIT_Z,r.up)):(o.position.z=o.frustum.right-o.frustum.left,r=eZe(e,n));let s;e._morphToOrthographic?(s=w_t,s.aspectRatio=i.drawingBufferWidth/i.drawingBufferHeight,s.width=o.frustum.right-o.frustum.left):(s=$Ie,s.aspectRatio=i.drawingBufferWidth/i.drawingBufferHeight,s.fov=L.toRadians(60)),r.frustum=s;let a=dZe(r);EM(e,a);let c;e._morphToOrthographic?c=function(){Hee(e,t,r,a)}:c=function(){aZe(e,t,r,function(){Hee(e,t,r,a)})},t>0?(i._mode=se.SCENE2D,o.flyTo({duration:t,destination:m.fromDegrees(0,0,5*n.maximumRadius,n,Kee),complete:function(){i._mode=se.MORPHING,c()}})):c()}function ah(e,t,n,i){return m.lerp(e,t,n,i)}function sZe(e,t,n,i,o){let r=e._scene,s=r.camera;if(s.frustum instanceof bn)return;let a=s.frustum.fov,c=L.RADIANS_PER_DEGREE*.5,d=n.position.z*Math.tan(a*.5);s.frustum.far=d/Math.tan(c*.5)+1e7;function u(p){s.frustum.fov=L.lerp(a,c,p.time);let A=d/Math.tan(s.frustum.fov*.5);i(s,A)}let h=r.tweens.add({duration:t,easingFunction:Ts.QUARTIC_OUT,startObject:{time:0},stopObject:{time:1},update:u,complete:function(){s.frustum=n.frustum.clone(),o(e)}});e._currentTweens.push(h)}var P_t=new m,X_t=new m,Y_t=new m,zee=new m,M_t=new m,v_t=new m,U_t=new as,D_t=new Cn,k_t=new m,Q_t={position:void 0,direction:void 0,up:void 0,frustum:void 0};function O_t(e,t){t*=.5;let n=e._scene,i=n.camera,o=m.clone(i.position,P_t),r=m.clone(i.direction,X_t),s=m.clone(i.up,Y_t),a=m.negate(m.UNIT_Z,M_t),c=m.clone(m.UNIT_Y,v_t),d=zee;if(t>0)m.clone(m.ZERO,zee),d.z=5*n.ellipsoid.maximumRadius;else{m.clone(o,zee);let C=D_t;F.multiplyByPoint(Zo.TRANSFORM_2D,o,C.origin),F.multiplyByPointAsVector(Zo.TRANSFORM_2D,r,C.direction);let T=n.globe;if(l(T)){let E=T.pickWorldCoordinates(C,n,!0,k_t);l(E)&&(F.multiplyByPoint(Zo.TRANSFORM_2D_INVERSE,E,d),d.z+=m.distance(o,d))}}let u=U_t;u.right=d.z*.5,u.left=-u.right,u.top=u.right*(n.drawingBufferHeight/n.drawingBufferWidth),u.bottom=-u.top;let h=Q_t;h.position=d,h.direction=a,h.up=c,h.frustum=u;let p=uZe(h);EM(e,p);function A(C){ah(o,d,C.time,i.position),ah(r,a,C.time,i.direction),ah(s,c,C.time,i.up),m.cross(i.direction,i.up,i.right),m.normalize(i.right,i.right),i._adjustOrthographicFrustum(!0)}function f(C,T){C.position.z=T}let b=n.tweens.add({duration:t,easingFunction:Ts.QUARTIC_OUT,startObject:{time:0},stopObject:{time:1},update:A,complete:function(){sZe(e,t,h,f,p)}});e._currentTweens.push(b)}var qIe=new Ae,z_t={position:new m,direction:new m,up:new m,position2D:new m,direction2D:new m,up2D:new m,frustum:new as},H_t={position:new m,direction:new m,up:new m,frustum:void 0},J_t=new m,K_t=new Cn,j_t=new F,q_t=new m;function $_t(e,t,n){t*=.5;let i=e._scene,o=i.camera,r=z_t;if(t>0)m.clone(m.ZERO,r.position),r.position.z=5*n.maximumRadius,m.negate(m.UNIT_Z,r.direction),m.clone(m.UNIT_Y,r.up);else{n.cartesianToCartographic(o.positionWC,qIe),i.mapProjection.project(qIe,r.position),m.negate(m.UNIT_Z,r.direction),m.clone(m.UNIT_Y,r.up);let h=K_t;m.clone(r.position2D,h.origin);let p=m.clone(o.directionWC,h.direction),A=n.scaleToGeodeticSurface(o.positionWC,q_t),f=bt.eastNorthUpToFixedFrame(A,n,j_t);F.inverseTransformation(f,f),F.multiplyByPointAsVector(f,p,p),F.multiplyByPointAsVector(Zo.TRANSFORM_2D,p,p);let b=i.globe;if(l(b)){let C=b.pickWorldCoordinates(h,i,!0,J_t);if(l(C)){let T=m.distance(r.position2D,C);C.x+=T,m.clone(C,r.position2D)}}}function s(h,p){h.position.x=p}F.multiplyByPoint(Zo.TRANSFORM_2D,r.position,r.position2D),F.multiplyByPointAsVector(Zo.TRANSFORM_2D,r.direction,r.direction2D),F.multiplyByPointAsVector(Zo.TRANSFORM_2D,r.up,r.up2D);let a=r.frustum;a.right=r.position.z*.5,a.left=-a.right,a.top=a.right*(i.drawingBufferHeight/i.drawingBufferWidth),a.bottom=-a.top;let c=H_t;F.multiplyByPoint(Zo.TRANSFORM_2D_INVERSE,r.position2D,c.position),m.clone(r.direction,c.direction),m.clone(r.up,c.up),c.frustum=a;let d=uZe(c);EM(e,d);function u(){sZe(e,t,r,s,d)}cZe(e,t,r,u)}function aZe(e,t,n,i){let o=e._scene,r=o.camera,s=r.frustum.right-r.frustum.left;r.frustum=n.frustum.clone();let a=r.frustum.fov,c=L.RADIANS_PER_DEGREE*.5,d=s*Math.tan(a*.5);r.frustum.far=d/Math.tan(c*.5)+1e7,r.frustum.fov=c;function u(p){r.frustum.fov=L.lerp(c,a,p.time),r.position.z=d/Math.tan(r.frustum.fov*.5)}let h=o.tweens.add({duration:t,easingFunction:Ts.QUARTIC_OUT,startObject:{time:0},stopObject:{time:1},update:u,complete:function(){i(e)}});e._currentTweens.push(h)}function eIt(e,t,n,i){t*=.5;let o=e._scene,r=o.camera,s=m.clone(n.position,Kee),a=m.clone(n.direction,oZe),c=m.clone(n.up,rZe);o._mode=se.MORPHING;function d(){r.frustum=n.frustum.clone();let u=m.clone(r.position,tZe),h=m.clone(r.direction,nZe),p=m.clone(r.up,iZe);u.z=s.z;function A(b){ah(u,s,b.time,r.position),ah(h,a,b.time,r.direction),ah(p,c,b.time,r.up),m.cross(r.direction,r.up,r.right),m.normalize(r.right,r.right)}let f=o.tweens.add({duration:t,easingFunction:Ts.QUARTIC_OUT,startObject:{time:0},stopObject:{time:1},update:A,complete:function(){i(e)}});e._currentTweens.push(f)}e._morphToOrthographic?d():aZe(e,0,n,d)}function cZe(e,t,n,i){let o=e._scene,r=o.camera,s=m.clone(r.position,tZe),a=m.clone(r.direction,nZe),c=m.clone(r.up,iZe),d=m.clone(n.position2D,Kee),u=m.clone(n.direction2D,oZe),h=m.clone(n.up2D,rZe);function p(f){ah(s,d,f.time,r.position),ah(a,u,f.time,r.direction),ah(c,h,f.time,r.up),m.cross(r.direction,r.up,r.right),m.normalize(r.right,r.right),r._adjustOrthographicFrustum(!0)}let A=o.tweens.add({duration:t,easingFunction:Ts.QUARTIC_OUT,startObject:{time:0},stopObject:{time:1},update:p,complete:function(){lZe(e,o,1,0,t,i)}});e._currentTweens.push(A)}function lZe(e,t,n,i,o,r){let s={object:t,property:"morphTime",startValue:n,stopValue:i,duration:o,easingFunction:Ts.QUARTIC_OUT};l(r)&&(s.complete=function(){r(e)});let a=t.tweens.addProperty(s);e._currentTweens.push(a)}function dZe(e){return function(t){let n=t._scene;n._mode=se.SCENE3D,n.morphTime=se.getMorphTime(se.SCENE3D),DO(t);let i=n.camera;(t._previousMode!==se.MORPHING||t._morphCancelled)&&(t._morphCancelled=!1,m.clone(e.position,i.position),m.clone(e.direction,i.direction),m.clone(e.up,i.up),m.cross(i.direction,i.up,i.right),m.normalize(i.right,i.right),i.frustum=e.frustum.clone());let o=i.frustum;n.frameState.useLogDepth&&(o.near=.1,o.far=1e10);let r=l(t._completeMorph);t._completeMorph=void 0,n.camera.update(n.mode),t._scene.morphComplete.raiseEvent(t,t._previousMode,se.SCENE3D,r)}}function uZe(e){return function(t){let n=t._scene;n._mode=se.SCENE2D,n.morphTime=se.getMorphTime(se.SCENE2D),DO(t);let i=n.camera;m.clone(e.position,i.position),i.position.z=n.ellipsoid.maximumRadius*2,m.clone(e.direction,i.direction),m.clone(e.up,i.up),m.cross(i.direction,i.up,i.right),m.normalize(i.right,i.right),i.frustum=e.frustum.clone();let o=l(t._completeMorph);t._completeMorph=void 0,n.camera.update(n.mode),t._scene.morphComplete.raiseEvent(t,t._previousMode,se.SCENE2D,o)}}function tIt(e){return function(t){let n=t._scene;n._mode=se.COLUMBUS_VIEW,n.morphTime=se.getMorphTime(se.COLUMBUS_VIEW),DO(t);let i=n.camera;(t._previousModeMode!==se.MORPHING||t._morphCancelled)&&(t._morphCancelled=!1,m.clone(e.position,i.position),m.clone(e.direction,i.direction),m.clone(e.up,i.up),m.cross(i.direction,i.up,i.right),m.normalize(i.right,i.right));let o=i.frustum;n.frameState.useLogDepth&&(o.near=.1,o.far=1e10);let r=l(t._completeMorph);t._completeMorph=void 0,n.camera.update(n.mode),t._scene.morphComplete.raiseEvent(t,t._previousMode,se.COLUMBUS_VIEW,r)}}var SM=SE;var Yco=y(x(),1);var ico=y(x(),1);var zao=y(x(),1),nIt={LEFT_DRAG:0,RIGHT_DRAG:1,MIDDLE_DRAG:2,WHEEL:3,PINCH:4},to=Object.freeze(nIt);function Ha(e,t){let n=`${e}`;return l(t)&&(n+=`+${t}`),n}function iIt(e,t){M.clone(e.distance.startPosition,t.distance.startPosition),M.clone(e.distance.endPosition,t.distance.endPosition),M.clone(e.angleAndHeight.startPosition,t.angleAndHeight.startPosition),M.clone(e.angleAndHeight.endPosition,t.angleAndHeight.endPosition)}function mZe(e,t,n){let i=Ha(to.PINCH,t),o=e._update,r=e._isDown,s=e._eventStartPosition,a=e._pressTime,c=e._releaseTime;o[i]=!0,r[i]=!1,s[i]=new M;let d=e._movement[i];l(d)||(d=e._movement[i]={}),d.distance={startPosition:new M,endPosition:new M},d.angleAndHeight={startPosition:new M,endPosition:new M},d.prevAngle=0,e._eventHandler.setInputAction(function(u){e._buttonsDown++,r[i]=!0,a[i]=new Date,M.lerp(u.position1,u.position2,.5,s[i])},Gn.PINCH_START,t),e._eventHandler.setInputAction(function(){e._buttonsDown=Math.max(e._buttonsDown-1,0),r[i]=!1,c[i]=new Date},Gn.PINCH_END,t),e._eventHandler.setInputAction(function(u){if(r[i]){o[i]?(iIt(u,d),o[i]=!1,d.prevAngle=d.angleAndHeight.startPosition.x):(M.clone(u.distance.endPosition,d.distance.endPosition),M.clone(u.angleAndHeight.endPosition,d.angleAndHeight.endPosition));let h=d.angleAndHeight.endPosition.x,p=d.prevAngle,A=Math.PI*2;for(;h>=p+Math.PI;)h-=A;for(;h<p-Math.PI;)h+=A;d.angleAndHeight.endPosition.x=-h*n.clientWidth/12,d.angleAndHeight.startPosition.x=-p*n.clientWidth/12}},Gn.PINCH_MOVE,t)}function hZe(e,t){let n=Ha(to.WHEEL,t),i=e._pressTime,o=e._releaseTime,r=e._update;r[n]=!0;let s=e._movement[n];l(s)||(s=e._movement[n]={});let a=e._lastMovement[n];l(a)||(a=e._lastMovement[n]={startPosition:new M,endPosition:new M,valid:!1}),s.startPosition=new M,M.clone(M.ZERO,s.startPosition),s.endPosition=new M,e._eventHandler.setInputAction(function(c){let d=7.5*L.toRadians(c);i[n]=o[n]=new Date,s.endPosition.x=0,s.endPosition.y=d,M.clone(s.endPosition,a.endPosition),a.valid=!0,r[n]=!1},Gn.WHEEL,t)}function qZ(e,t,n){let i=Ha(n,t),o=e._isDown,r=e._eventStartPosition,s=e._pressTime;o[i]=!1,r[i]=new M;let a=e._lastMovement[i];l(a)||(a=e._lastMovement[i]={startPosition:new M,endPosition:new M,valid:!1});let c,d;n===to.LEFT_DRAG?(c=Gn.LEFT_DOWN,d=Gn.LEFT_UP):n===to.RIGHT_DRAG?(c=Gn.RIGHT_DOWN,d=Gn.RIGHT_UP):n===to.MIDDLE_DRAG&&(c=Gn.MIDDLE_DOWN,d=Gn.MIDDLE_UP),e._eventHandler.setInputAction(function(u){e._buttonsDown++,a.valid=!1,o[i]=!0,s[i]=new Date,M.clone(u.position,r[i])},c,t),e._eventHandler.setInputAction(function(){jee(Ha(n,void 0),e);for(let u of Object.values(ka)){let h=Ha(n,u);jee(h,e)}},d,t)}function jee(e,t){let n=t._releaseTime,i=t._isDown;i[e]&&(t._buttonsDown=Math.max(t._buttonsDown-1,0)),i[e]=!1,n[e]=new Date}function fZe(e,t){M.clone(e.startPosition,t.startPosition),M.clone(e.endPosition,t.endPosition)}function oIt(e,t,n){let i=n._isDown,o=!1,r=Ha(e,t);for(let[c,d]of Object.entries(i))c.startsWith(e)&&d&&c!==r&&(o=!0,jee(c,n));if(!o)return;let s=n._pressTime,a=n._lastMovement[r];l(a)||(a=n._lastMovement[r]={startPosition:new M,endPosition:new M,valid:!1}),n._buttonsDown++,a.valid=!1,i[r]=!0,s[r]=new Date}function pZe(e,t){let n=e._update,i=e._movement,o=e._lastMovement,r=e._isDown;for(let s in to)if(to.hasOwnProperty(s)){let a=to[s];if(l(a)){let c=Ha(a,t);n[c]=!0,l(e._lastMovement[c])||(e._lastMovement[c]={startPosition:new M,endPosition:new M,valid:!1}),l(e._movement[c])||(e._movement[c]={startPosition:new M,endPosition:new M})}}e._eventHandler.setInputAction(function(s){for(let a in to)if(to.hasOwnProperty(a)){let c=to[a];if(l(c)){let d=Ha(c,t);oIt(c,t,e),r[d]&&(n[d]?(fZe(i[d],o[d]),o[d].valid=!0,fZe(s,i[d]),n[d]=!1):M.clone(s.endPosition,i[d].endPosition))}}M.clone(s.endPosition,e._currentMousePosition)},Gn.MOUSE_MOVE,t)}function ch(e){this._eventHandler=new Du(e),this._update={},this._movement={},this._lastMovement={},this._isDown={},this._eventStartPosition={},this._pressTime={},this._releaseTime={},this._buttonsDown=0,this._currentMousePosition=new M,hZe(this,void 0),mZe(this,void 0,e),qZ(this,void 0,to.LEFT_DRAG),qZ(this,void 0,to.RIGHT_DRAG),qZ(this,void 0,to.MIDDLE_DRAG),pZe(this,void 0);for(let t in ka)if(ka.hasOwnProperty(t)){let n=ka[t];l(n)&&(hZe(this,n),mZe(this,n,e),qZ(this,n,to.LEFT_DRAG),qZ(this,n,to.RIGHT_DRAG),qZ(this,n,to.MIDDLE_DRAG),pZe(this,n))}}Object.defineProperties(ch.prototype,{currentMousePosition:{get:function(){return this._currentMousePosition}},anyButtonDown:{get:function(){let e=!this._update[Ha(to.WHEEL)]||!this._update[Ha(to.WHEEL,ka.SHIFT)]||!this._update[Ha(to.WHEEL,ka.CTRL)]||!this._update[Ha(to.WHEEL,ka.ALT)];return this._buttonsDown>0||e}}});ch.prototype.isMoving=function(e,t){let n=Ha(e,t);return!this._update[n]};ch.prototype.getMovement=function(e,t){let n=Ha(e,t);return this._movement[n]};ch.prototype.getLastMovement=function(e,t){let n=Ha(e,t),i=this._lastMovement[n];if(i.valid)return i};ch.prototype.isButtonDown=function(e,t){let n=Ha(e,t);return this._isDown[n]};ch.prototype.getStartMousePosition=function(e,t){if(e===to.WHEEL)return this._currentMousePosition;let n=Ha(e,t);return this._eventStartPosition[n]};ch.prototype.getButtonPressTime=function(e,t){let n=Ha(e,t);return this._pressTime[n]};ch.prototype.getButtonReleaseTime=function(e,t){let n=Ha(e,t);return this._releaseTime[n]};ch.prototype.reset=function(){for(let e in this._update)this._update.hasOwnProperty(e)&&(this._update[e]=!0)};ch.prototype.isDestroyed=function(){return!1};ch.prototype.destroy=function(){return this._eventHandler=this._eventHandler&&this._eventHandler.destroy(),he(this)};var _M=ch;var mco=y(x(),1);function kO(e,t,n,i,o,r,s,a,c,d){this._tweens=e,this._tweenjs=t,this._startObject=He(n),this._stopObject=He(i),this._duration=o,this._delay=r,this._easingFunction=s,this._update=a,this._complete=c,this.cancel=d,this.needsStart=!0}Object.defineProperties(kO.prototype,{startObject:{get:function(){return this._startObject}},stopObject:{get:function(){return this._stopObject}},duration:{get:function(){return this._duration}},delay:{get:function(){return this._delay}},easingFunction:{get:function(){return this._easingFunction}},update:{get:function(){return this._update}},complete:{get:function(){return this._complete}},tweenjs:{get:function(){return this._tweenjs}}});kO.prototype.cancelTween=function(){this._tweens.remove(this)};function Mf(){this._tweens=[]}Object.defineProperties(Mf.prototype,{length:{get:function(){return this._tweens.length}}});Mf.prototype.add=function(e){if(e=e??Q.EMPTY_OBJECT,e.duration===0)return l(e.complete)&&e.complete(),new kO(this);let t=e.duration/di.SECONDS_PER_MILLISECOND,n=e.delay??0,i=n/di.SECONDS_PER_MILLISECOND,o=e.easingFunction??Ts.LINEAR_NONE,r=e.startObject,s=new zTe(r);s.to(He(e.stopObject),t),s.delay(i),s.easing(o),l(e.update)&&s.onUpdate(function(){e.update(r)}),s.onComplete(e.complete??null),s.repeat(e._repeat??0);let a=new kO(this,s,e.startObject,e.stopObject,e.duration,n,o,e.update,e.complete,e.cancel);return this._tweens.push(a),a};Mf.prototype.addProperty=function(e){e=e??Q.EMPTY_OBJECT;let t=e.object,n=e.property,i=e.startValue,o=e.stopValue;function r(s){t[n]=s.value}return this.add({startObject:{value:i},stopObject:{value:o},duration:e.duration??3,delay:e.delay,easingFunction:e.easingFunction,update:r,complete:e.complete,cancel:e.cancel,_repeat:e._repeat})};Mf.prototype.addAlpha=function(e){e=e??Q.EMPTY_OBJECT;let t=e.material,n=[];for(let o in t.uniforms)t.uniforms.hasOwnProperty(o)&&l(t.uniforms[o])&&l(t.uniforms[o].alpha)&&n.push(o);function i(o){let r=n.length;for(let s=0;s<r;++s)t.uniforms[n[s]].alpha=o.alpha}return this.add({startObject:{alpha:e.startValue??0},stopObject:{alpha:e.stopValue??1},duration:e.duration??3,delay:e.delay,easingFunction:e.easingFunction,update:i,complete:e.complete,cancel:e.cancel})};Mf.prototype.addOffsetIncrement=function(e){e=e??Q.EMPTY_OBJECT;let n=e.material.uniforms;return this.addProperty({object:n,property:"offset",startValue:n.offset,stopValue:n.offset+1,duration:e.duration,delay:e.delay,easingFunction:e.easingFunction,update:e.update,cancel:e.cancel,_repeat:1/0})};Mf.prototype.remove=function(e){if(!l(e))return!1;let t=this._tweens.indexOf(e);return t!==-1?(e.tweenjs.stop(),l(e.cancel)&&e.cancel(),this._tweens.splice(t,1),!0):!1};Mf.prototype.removeAll=function(){let e=this._tweens;for(let t=0;t<e.length;++t){let n=e[t];n.tweenjs.stop(),l(n.cancel)&&n.cancel()}e.length=0};Mf.prototype.contains=function(e){return l(e)&&this._tweens.indexOf(e)!==-1};Mf.prototype.get=function(e){return this._tweens[e]};Mf.prototype.update=function(e){let t=this._tweens,n=0;for(e=l(e)?e/di.SECONDS_PER_MILLISECOND:Xi();n<t.length;){let i=t[n],o=i.tweenjs;if(i.needsStart)i.needsStart=!1,o.start(e);else if(o.update(e))n++;else{if(t[n]?.needsStart)continue;o.stop(),t.splice(n,1)}}};var _E=Mf;function jy(e){this.enableInputs=!0,this.enableTranslate=!0,this.enableZoom=!0,this.enableRotate=!0,this.enableTilt=!0,this.enableLook=!0,this.inertiaSpin=.9,this.inertiaTranslate=.9,this.inertiaZoom=.8,this.maximumMovementRatio=.1,this.bounceAnimationTime=3,this.minimumZoomDistance=1,this.maximumZoomDistance=Number.POSITIVE_INFINITY,this.zoomFactor=5,this.translateEventTypes=to.LEFT_DRAG,this.zoomEventTypes=[to.RIGHT_DRAG,to.WHEEL,to.PINCH],this.rotateEventTypes=to.LEFT_DRAG,this.tiltEventTypes=[to.MIDDLE_DRAG,to.PINCH,{eventType:to.LEFT_DRAG,modifier:ka.CTRL},{eventType:to.RIGHT_DRAG,modifier:ka.CTRL}],this.lookEventTypes={eventType:to.LEFT_DRAG,modifier:ka.SHIFT};let t=e.ellipsoid??ie.default;this.minimumPickingTerrainHeight=ie.WGS84.equals(t)?15e4:t.minimumRadius*.025,this._minimumPickingTerrainHeight=this.minimumPickingTerrainHeight,this.minimumPickingTerrainDistanceWithInertia=ie.WGS84.equals(t)?4e3:t.minimumRadius*63e-5,this.minimumCollisionTerrainHeight=ie.WGS84.equals(t)?15e3:t.minimumRadius*.0025,this._minimumCollisionTerrainHeight=this.minimumCollisionTerrainHeight,this.minimumTrackBallHeight=ie.WGS84.equals(t)?75e5:t.minimumRadius*1.175,this._minimumTrackBallHeight=this.minimumTrackBallHeight,this.enableCollisionDetection=!0,this.maximumTiltAngle=void 0,this._scene=e,this._globe=void 0,this._ellipsoid=t,this._lastGlobeHeight=0,this._aggregator=new _M(e.canvas),this._lastInertiaSpinMovement=void 0,this._lastInertiaZoomMovement=void 0,this._lastInertiaTranslateMovement=void 0,this._lastInertiaTiltMovement=void 0,this._inertiaDisablers={_lastInertiaZoomMovement:["_lastInertiaSpinMovement","_lastInertiaTranslateMovement","_lastInertiaTiltMovement"],_lastInertiaTiltMovement:["_lastInertiaSpinMovement","_lastInertiaTranslateMovement"]},this._tweens=new _E,this._tween=void 0,this._horizontalRotationAxis=void 0,this._tiltCenterMousePosition=new M(-1,-1),this._tiltCenter=new m,this._rotateMousePosition=new M(-1,-1),this._rotateStartPosition=new m,this._strafeStartPosition=new m,this._strafeMousePosition=new M,this._strafeEndMousePosition=new M,this._zoomMouseStart=new M(-1,-1),this._zoomWorldPosition=new m,this._useZoomWorldPosition=!1,this._panLastMousePosition=new M,this._panLastWorldPosition=new m,this._tiltCVOffMap=!1,this._looking=!1,this._rotating=!1,this._strafing=!1,this._zoomingOnVector=!1,this._zoomingUnderground=!1,this._rotatingZoom=!1,this._adjustedHeightForTerrain=!1,this._cameraUnderground=!1;let n=e.mapProjection;this._maxCoord=n.project(new Ae(Math.PI,L.PI_OVER_TWO)),this._rotateFactor=void 0,this._rotateRateRangeAdjustment=void 0,this._maximumRotateRate=1.77,this._minimumRotateRate=1/5e3,this._minimumZoomRate=20,this._maximumZoomRate=5906376272e3,this._minimumUndergroundPickDistance=2e3,this._maximumUndergroundPickDistance=1e4}function rIt(e,t){if(e<0)return 0;let n=(1-t)*25;return Math.exp(-n*e)}function sIt(e){return M.equalsEpsilon(e.startPosition,e.endPosition,L.EPSILON14)}var aIt=.4;function cIt(e,t,n,i,o,r,s){let a=r[s];l(a)||(a=r[s]={startPosition:new M,endPosition:new M,motion:new M,inertiaEnabled:!0});let c=e.getButtonPressTime(t,n),d=e.getButtonReleaseTime(t,n),u=c&&d&&(d.getTime()-c.getTime())/1e3,p=d&&(new Date().getTime()-d.getTime())/1e3;if(c&&d&&u<aIt){let A=rIt(p,i),f=e.getLastMovement(t,n);if(!l(f)||sIt(f)||!a.inertiaEnabled||(a.motion.x=(f.endPosition.x-f.startPosition.x)*.5,a.motion.y=(f.endPosition.y-f.startPosition.y)*.5,a.startPosition=M.clone(f.startPosition,a.startPosition),a.endPosition=M.multiplyByScalar(a.motion,A,a.endPosition),a.endPosition=M.add(a.startPosition,a.endPosition,a.endPosition),isNaN(a.endPosition.x)||isNaN(a.endPosition.y)||M.distance(a.startPosition,a.endPosition)<.5))return;if(!e.isButtonDown(t,n)){let b=e.getStartMousePosition(t,n);o(r,b,a)}}}function lIt(e,t){if(l(t)){let n=e[t];l(n)&&(n.inertiaEnabled=!0);let i=e._inertiaDisablers[t];if(l(i)){let o=i.length;for(let r=0;r<o;++r)n=e[i[r]],l(n)&&(n.inertiaEnabled=!1)}}}var AZe=[];function sd(e,t,n,i,o,r){if(!l(n))return;let s=e._aggregator;Array.isArray(n)||(AZe[0]=n,n=AZe);let a=n.length;for(let c=0;c<a;++c){let d=n[c],u=l(d.eventType)?d.eventType:d,h=d.modifier,p=s.isMoving(u,h)&&s.getMovement(u,h),A=s.getStartMousePosition(u,h);e.enableInputs&&t&&(p?(i(e,A,p),lIt(e,r)):o<1&&cIt(s,u,h,o,i,e,r))}}var QO=new Cn,dIt=new m,uIt=new M,mIt=new m,hIt=new M,fIt=new m,pIt=new m,AIt=new m,gIt=new m,ZZe=new m,bIt=new m,yIt=new m,xIt=new m,CIt=new m,TIt=new m,EIt=new m,SIt=new m,_It=new m,IIt=new m,ZIt=new m,IE=new m,gZe=new m,bZe=new m,qee={orientation:new yc};function ate(e,t,n,i,o,r){let s=1;l(r)&&(s=L.clamp(Math.abs(r),.25,1));let a=n.endPosition.y-n.startPosition.y,d=a>0?e.minimumZoomDistance*s:0,u=e.maximumZoomDistance,h=o-d,p=i*h;p=L.clamp(p,e._minimumZoomRate,e._maximumZoomRate);let A=a/e._scene.canvas.clientHeight;A=Math.min(A,e.maximumMovementRatio);let f=p*A;if(e.enableCollisionDetection||e.minimumZoomDistance===0||!l(e._globe)){if(f>0&&Math.abs(o-d)<1||f<0&&Math.abs(o-u)<1)return;o-f<d?f=o-d-1:o-f>u&&(f=o-u)}let b=e._scene,C=b.camera,T=b.mode,E=qee.orientation;E.heading=C.heading,E.pitch=C.pitch,E.roll=C.roll;let S=n.inertiaEnabled??M.equals(t,e._zoomMouseStart),I=e._zoomingOnVector,R=e._rotatingZoom,V;if(S||(e._zoomMouseStart=M.clone(t,e._zoomMouseStart),l(e._globe)&&T===se.SCENE2D?(V=C.getPickRay(t,QO).origin,V=m.fromElements(V.y,V.z,V.x)):l(e._globe)&&(V=Rb(e,t,dIt)),l(V)?(e._useZoomWorldPosition=!0,e._zoomWorldPosition=m.clone(V,e._zoomWorldPosition)):e._useZoomWorldPosition=!1,I=e._zoomingOnVector=!1,R=e._rotatingZoom=!1,e._zoomingUnderground=e._cameraUnderground),!e._useZoomWorldPosition){C.zoomIn(f);return}let W=T===se.COLUMBUS_VIEW;if(C.positionCartographic.height<2e6&&(R=!0),!S||R){if(T===se.SCENE2D){let B=e._zoomWorldPosition,N=C.position;if(!m.equals(B,N)&&C.positionCartographic.height<e._maxCoord.x*2){let P=C.position.x,g=m.subtract(B,N,mIt);m.normalize(g,g);let _=m.distance(B,N)*f/(C.getMagnitude()*.5);C.move(g,_*.5),(C.position.x<0&&P>0||C.position.x>0&&P<0)&&(V=C.getPickRay(t,QO).origin,V=m.fromElements(V.y,V.z,V.x),e._zoomWorldPosition=m.clone(V,e._zoomWorldPosition))}}else if(T===se.SCENE3D){let B=m.normalize(C.position,ZZe);if(e._cameraUnderground||e._zoomingUnderground||C.positionCartographic.height<3e3&&Math.abs(m.dot(C.direction,B))<.6)W=!0;else{let N=b.canvas,P=hIt;P.x=N.clientWidth/2,P.y=N.clientHeight/2;let g=Rb(e,P,fIt);if(!l(g))W=!0;else if(C.positionCartographic.height<1e6)if(m.dot(C.direction,B)>=-.5)W=!0;else{let _=yIt;m.clone(C.position,_);let Z=e._zoomWorldPosition,G=bIt;if(G=m.normalize(Z,G),m.dot(G,B)<0)return;let w=ZIt,X=TIt;m.clone(C.direction,X),m.add(_,m.multiplyByScalar(X,1e3,IE),w);let k=EIt,v=SIt;m.subtract(Z,_,k),m.normalize(k,v);let D=m.dot(B,v);if(D>=0){e._zoomMouseStart.x=-1;return}let Y=Math.acos(-D),O=m.magnitude(_),J=m.magnitude(Z),te=O-f,z=m.magnitude(k),j=Math.asin(L.clamp(z/J*Math.sin(Y),-1,1)),ee=Math.asin(L.clamp(te/J*Math.sin(Y),-1,1)),ge=j-ee+Y,ye=xIt;m.normalize(_,ye);let ae=CIt;ae=m.cross(v,ye,ae),ae=m.normalize(ae,ae),m.normalize(m.cross(ye,ae,IE),X),m.multiplyByScalar(m.normalize(w,IE),m.magnitude(w)-f,w),m.normalize(_,_),m.multiplyByScalar(_,te,_);let Ce=_It;m.multiplyByScalar(m.add(m.multiplyByScalar(ye,Math.cos(ge)-1,gZe),m.multiplyByScalar(X,Math.sin(ge),bZe),IE),te,Ce),m.add(_,Ce,_),m.normalize(w,ye),m.normalize(m.cross(ye,ae,IE),X);let Te=IIt;m.multiplyByScalar(m.add(m.multiplyByScalar(ye,Math.cos(ge)-1,gZe),m.multiplyByScalar(X,Math.sin(ge),bZe),IE),m.magnitude(w),Te),m.add(w,Te,w),m.clone(_,C.position),m.normalize(m.subtract(w,_,IE),C.direction),m.clone(C.direction,C.direction),m.cross(C.direction,C.up,C.right),m.cross(C.right,C.direction,C.up),C.setView(qee);return}else{let _=m.normalize(g,pIt),Z=m.normalize(e._zoomWorldPosition,AIt),G=m.dot(Z,_);if(G>0&&G<1){let w=L.acosClamped(G),X=m.cross(Z,_,gIt),k=Math.abs(w)>L.toRadians(20)?C.positionCartographic.height*.75:C.positionCartographic.height-f,v=f/k;C.rotate(X,w*v)}}}}e._rotatingZoom=!W}if(!S&&W||I){let B,N=so.worldToWindowCoordinates(b,e._zoomWorldPosition,uIt);T!==se.COLUMBUS_VIEW&&M.equals(t,e._zoomMouseStart)&&l(N)?B=C.getPickRay(N,QO):B=C.getPickRay(t,QO);let P=B.direction;(T===se.COLUMBUS_VIEW||T===se.SCENE2D)&&m.fromElements(P.y,P.z,P.x,P),C.move(P,f),e._zoomingOnVector=!0}else C.zoomIn(f);e._cameraUnderground||C.setView(qee)}var RIt=new Cn,VIt=new Cn,GIt=new m;function LIt(e,t,n){let o=e._scene.camera,r=o.getPickRay(n.startPosition,RIt).origin,s=o.getPickRay(n.endPosition,VIt).origin;r=m.fromElements(r.y,r.z,r.x,r),s=m.fromElements(s.y,s.z,s.x,s);let a=m.subtract(r,s,GIt),c=m.magnitude(a);c>0&&(m.normalize(a,a),o.move(a,c))}function ite(e,t,n){l(n.distance)&&(n=n.distance);let o=e._scene.camera;ate(e,t,n,e.zoomFactor,o.getMagnitude())}var WIt=new M,FIt=new M;function yZe(e,t,n){if(l(n.angleAndHeight)){BIt(e,t,n.angleAndHeight);return}let i=e._scene,o=i.camera,r=i.canvas,s=r.clientWidth,a=r.clientHeight,c=WIt;c.x=2/s*n.startPosition.x-1,c.y=2/a*(a-n.startPosition.y)-1,c=M.normalize(c,c);let d=FIt;d.x=2/s*n.endPosition.x-1,d.y=2/a*(a-n.endPosition.y)-1,d=M.normalize(d,d);let u=L.acosClamped(c.x);c.y<0&&(u=L.TWO_PI-u);let h=L.acosClamped(d.x);d.y<0&&(h=L.TWO_PI-h);let p=h-u;o.twistRight(p)}function BIt(e,t,n){let i=e._rotateFactor*e._rotateRateRangeAdjustment;i>e._maximumRotateRate&&(i=e._maximumRotateRate),i<e._minimumRotateRate&&(i=e._minimumRotateRate);let o=e._scene,r=o.camera,s=o.canvas,a=(n.endPosition.x-n.startPosition.x)/s.clientWidth;a=Math.min(a,e.maximumMovementRatio);let c=i*a*Math.PI*4;r.twistRight(c)}function wIt(e){let t=e._scene.mapMode2D===od.ROTATE;F.equals(F.IDENTITY,e._scene.camera.transform)?(sd(e,e.enableTranslate,e.translateEventTypes,LIt,e.inertiaTranslate,"_lastInertiaTranslateMovement"),sd(e,e.enableZoom,e.zoomEventTypes,ite,e.inertiaZoom,"_lastInertiaZoomMovement"),t&&sd(e,e.enableRotate,e.tiltEventTypes,yZe,e.inertiaSpin,"_lastInertiaTiltMovement")):(sd(e,e.enableZoom,e.zoomEventTypes,ite,e.inertiaZoom,"_lastInertiaZoomMovement"),t&&sd(e,e.enableRotate,e.translateEventTypes,yZe,e.inertiaSpin,"_lastInertiaSpinMovement"))}var RZe=new Cn,NIt=new m,PIt=new m;function Rb(e,t,n){let i=e._scene,o=e._globe,r=i.camera,s;if(i.pickPositionSupported&&(s=i.pickPositionWorldCoordinates(t,NIt)),!l(o))return m.clone(s,n);let a=!e._cameraUnderground,c=r.getPickRay(t,RZe),d=o.pickWorldCoordinates(c,i,a,PIt),u=l(s)?m.distance(s,r.positionWC):Number.POSITIVE_INFINITY,h=l(d)?m.distance(d,r.positionWC):Number.POSITIVE_INFINITY;return u<h?m.clone(s,n):m.clone(d,n)}var XIt=new Ae;function qO(e){let t=e._ellipsoid,n=e._scene,i=n.camera,o=n.mode,r=0;if(o===se.SCENE3D){let c=t.cartesianToCartographic(i.position,XIt);l(c)&&(r=c.height)}else r=i.position.z;let s=e._scene.globeHeight??0;return Math.abs(s-r)}var YIt=new m;function VZe(e,t){let n=t.origin,i=t.direction,o=qO(e),r=m.normalize(n,YIt),s=Math.abs(m.dot(r,i));return s=Math.max(s,.5)*2,o*s}function GZe(e,t,n,i){let o=m.distance(t.origin,n),r=qO(e),s=L.clamp(r*5,e._minimumUndergroundPickDistance,e._maximumUndergroundPickDistance);return o>s&&(o=Math.min(o,r/5),o=Math.max(o,100)),Cn.getPoint(t,o,i)}function LZe(e,t,n,i){let o;return l(n)?(o=m.distance(t.origin,n),o>e._maximumUndergroundPickDistance&&(o=qO(e))):o=qO(e),Cn.getPoint(t,o,i)}var MIt=new M;function WZe(e,t){let n=t.endPosition,i=M.subtract(t.endPosition,t.startPosition,MIt),o=e._strafeEndMousePosition;M.add(o,i,o),t.endPosition=o,cte(e,t,e._strafeStartPosition),t.endPosition=n}var xZe=new Cn,vIt=new Cn,$ee=new m,UIt=new m,DIt=new m,kIt=new m,QIt=new dn(m.UNIT_X,0),OIt=new M,zIt=new M;function HIt(e,t,n){if(m.equals(t,e._translateMousePosition)||(e._looking=!1),m.equals(t,e._strafeMousePosition)||(e._strafing=!1),e._looking){Hu(e,t,n);return}if(e._strafing){WZe(e,n);return}let o=e._scene.camera,r=e._cameraUnderground,s=M.clone(n.startPosition,OIt),a=M.clone(n.endPosition,zIt),c=o.getPickRay(s,xZe),d=m.clone(m.ZERO,kIt),u=m.UNIT_X,h;if(o.position.z<e._minimumPickingTerrainHeight&&(h=Rb(e,s,$ee),l(h)&&(d.x=h.x)),r||d.x>o.position.z&&l(h)){let S=h;r&&(S=LZe(e,c,h,$ee)),M.clone(t,e._strafeMousePosition),M.clone(t,e._strafeEndMousePosition),m.clone(S,e._strafeStartPosition),e._strafing=!0,cte(e,n,e._strafeStartPosition);return}let p=dn.fromPointNormal(d,u,QIt);c=o.getPickRay(s,xZe);let A=hi.rayPlane(c,p,$ee),f=o.getPickRay(a,vIt),b=hi.rayPlane(f,p,UIt);if(!l(A)||!l(b)){e._looking=!0,Hu(e,t,n),M.clone(t,e._translateMousePosition);return}let C=m.subtract(A,b,DIt),T=C.x;C.x=C.y,C.y=C.z,C.z=T;let E=m.magnitude(C);E>L.EPSILON6&&(m.normalize(C,C),o.move(C,E))}var FZe=new M,HO=new Cn,JO=new m,JIt=new m,BZe=new F,KIt=new F,jIt=new m,qIt=new dn(m.UNIT_X,0),ete=new m,ote=new Ae,wZe=new F,$It=new Me,eZt=new $,KO=new m;function tZt(e,t,n){if(l(n.angleAndHeight)&&(n=n.angleAndHeight),M.equals(t,e._tiltCenterMousePosition)||(e._tiltCVOffMap=!1,e._looking=!1),e._looking){Hu(e,t,n);return}let o=e._scene.camera;e._tiltCVOffMap||!e.onMap()||Math.abs(o.position.z)>e._minimumPickingTerrainHeight?(e._tiltCVOffMap=!0,nZt(e,t,n)):iZt(e,t,n)}function nZt(e,t,n){let i=e._scene,o=i.camera,r=i.canvas,s=FZe;s.x=r.clientWidth/2,s.y=r.clientHeight/2;let a=o.getPickRay(s,HO),c=m.UNIT_X,d=a.origin,u=a.direction,h,p=m.dot(c,u);if(Math.abs(p)>L.EPSILON6&&(h=-m.dot(c,d)/p),!l(h)||h<=0){e._looking=!0,Hu(e,t,n),M.clone(t,e._tiltCenterMousePosition);return}let A=m.multiplyByScalar(u,h,JO);m.add(d,A,A);let f=i.mapProjection,b=f.ellipsoid;m.fromElements(A.y,A.z,A.x,A);let C=f.unproject(A,ote);b.cartographicToCartesian(C,A);let T=bt.eastNorthUpToFixedFrame(A,b,BZe),E=e._globe,S=e._ellipsoid;e._globe=void 0,e._ellipsoid=ie.UNIT_SPHERE,e._rotateFactor=1,e._rotateRateRangeAdjustment=1;let I=F.clone(o.transform,wZe);o._setTransform(T),zu(e,t,n,m.UNIT_Z),o._setTransform(I),e._globe=E,e._ellipsoid=S;let R=S.maximumRadius;e._rotateFactor=1/R,e._rotateRateRangeAdjustment=R}function iZt(e,t,n){let i=e._scene,o=i.camera,r=e._cameraUnderground,s,a,c=m.UNIT_X;if(M.equals(t,e._tiltCenterMousePosition))s=m.clone(e._tiltCenter,JO);else{if(o.position.z<e._minimumPickingTerrainHeight&&(s=Rb(e,t,JO)),!l(s)){a=o.getPickRay(t,HO);let g=a.origin,_=a.direction,Z,G=m.dot(c,_);if(Math.abs(G)>L.EPSILON6&&(Z=-m.dot(c,g)/G),!l(Z)||Z<=0){e._looking=!0,Hu(e,t,n),M.clone(t,e._tiltCenterMousePosition);return}s=m.multiplyByScalar(_,Z,JO),m.add(g,s,s)}r&&(l(a)||(a=o.getPickRay(t,HO)),GZe(e,a,s,s)),M.clone(t,e._tiltCenterMousePosition),m.clone(s,e._tiltCenter)}let d=i.canvas,u=FZe;u.x=d.clientWidth/2,u.y=e._tiltCenterMousePosition.y,a=o.getPickRay(u,HO);let h=m.clone(m.ZERO,jIt);h.x=s.x;let p=dn.fromPointNormal(h,c,qIt),A=hi.rayPlane(a,p,JIt),f=o._projection,b=f.ellipsoid;m.fromElements(s.y,s.z,s.x,s);let C=f.unproject(s,ote);b.cartographicToCartesian(C,s);let T=bt.eastNorthUpToFixedFrame(s,b,BZe),E;l(A)?(m.fromElements(A.y,A.z,A.x,A),C=f.unproject(A,ote),b.cartographicToCartesian(C,A),E=bt.eastNorthUpToFixedFrame(A,b,KIt)):E=T;let S=e._globe,I=e._ellipsoid;e._globe=void 0,e._ellipsoid=ie.UNIT_SPHERE,e._rotateFactor=1,e._rotateRateRangeAdjustment=1;let R=m.UNIT_Z,V=F.clone(o.transform,wZe);o._setTransform(T);let W=m.cross(m.UNIT_Z,m.normalize(o.position,ete),ete),B=m.dot(o.right,W);if(zu(e,t,n,R,!1,!0),o._setTransform(E),B<0){let g=n.startPosition.y-n.endPosition.y;(r&&g<0||!r&&g>0)&&(R=void 0);let _=o.constrainedAxis;o.constrainedAxis=void 0,zu(e,t,n,R,!0,!1),o.constrainedAxis=_}else zu(e,t,n,R,!0,!1);if(l(o.constrainedAxis)){let g=m.cross(o.direction,o.constrainedAxis,KO);m.equalsEpsilon(g,m.ZERO,L.EPSILON6)||(m.dot(g,o.right)<0&&m.negate(g,g),m.cross(g,o.direction,o.up),m.cross(o.direction,o.up,o.right),m.normalize(o.up,o.up),m.normalize(o.right,o.right))}o._setTransform(V),e._globe=S,e._ellipsoid=I;let N=I.maximumRadius;e._rotateFactor=1/N,e._rotateRateRangeAdjustment=N;let P=m.clone(o.positionWC,ete);if(e.enableCollisionDetection&&mte(e,!0),!m.equals(o.positionWC,P)){o._setTransform(E),o.worldToCameraCoordinatesPoint(P,P);let g=m.magnitudeSquared(P);m.magnitudeSquared(o.position)>g&&(m.normalize(o.position,o.position),m.multiplyByScalar(o.position,Math.sqrt(g),o.position));let _=m.angleBetween(P,o.position),Z=m.cross(P,o.position,P);m.normalize(Z,Z);let G=Me.fromAxisAngle(Z,_,$It),w=$.fromQuaternion(G,eZt);$.multiplyByVector(w,o.direction,o.direction),$.multiplyByVector(w,o.up,o.up),m.cross(o.direction,o.up,o.right),m.cross(o.right,o.direction,o.up),o._setTransform(V)}}var NZe=new M,PZe=new Cn,XZe=new m;function YZe(e,t,n){l(n.distance)&&(n=n.distance);let i=e._scene,o=i.camera,r=i.canvas,s=e._cameraUnderground,a;s?a=t:(a=NZe,a.x=r.clientWidth/2,a.y=r.clientHeight/2);let c=o.getPickRay(a,PZe),d=c.origin,u=c.direction,h=o.position.z,p;h<e._minimumPickingTerrainHeight&&(p=Rb(e,a,XZe));let A;if(l(p)&&(A=m.distance(d,p)),s){let f=VZe(e,c,h);l(A)?A=Math.min(A,f):A=f}if(!l(A)){let f=m.UNIT_X;A=-m.dot(f,d)/m.dot(f,u)}ate(e,t,n,e.zoomFactor,A)}function oZt(e){let n=e._scene.camera;if(!F.equals(F.IDENTITY,n.transform))sd(e,e.enableRotate,e.rotateEventTypes,zu,e.inertiaSpin,"_lastInertiaSpinMovement"),sd(e,e.enableZoom,e.zoomEventTypes,lte,e.inertiaZoom,"_lastInertiaZoomMovement");else{let i=e._tweens;if(e._aggregator.anyButtonDown&&i.removeAll(),sd(e,e.enableTilt,e.tiltEventTypes,tZt,e.inertiaSpin,"_lastInertiaTiltMovement"),sd(e,e.enableTranslate,e.translateEventTypes,HIt,e.inertiaTranslate,"_lastInertiaTranslateMovement"),sd(e,e.enableZoom,e.zoomEventTypes,YZe,e.inertiaZoom,"_lastInertiaZoomMovement"),sd(e,e.enableLook,e.lookEventTypes,Hu),!e._aggregator.anyButtonDown&&!i.contains(e._tween)){let o=n.createCorrectPositionTween(e.bounceAnimationTime);l(o)&&(e._tween=i.add(o))}i.update()}}var rZt=new Cn,sZt=new dn(m.UNIT_X,0),aZt=new m,cZt=new m;function cte(e,t,n){let i=e._scene,o=i.camera,r=o.getPickRay(t.endPosition,rZt),s=m.clone(o.direction,cZt);i.mode===se.COLUMBUS_VIEW&&m.fromElements(s.z,s.x,s.y,s);let a=dn.fromPointNormal(n,s,sZt),c=hi.rayPlane(r,a,aZt);l(c)&&(s=m.subtract(n,c,s),i.mode===se.COLUMBUS_VIEW&&m.fromElements(s.y,s.z,s.x,s),m.add(o.position,s,o.position))}var CZe=new m,MZe=new Ae,rte=new m,ste=new ie,lZt=new m,dZt=new m,uZt=new m;function mZt(e,t,n){let o=e._scene.camera,r=e._cameraUnderground,s=e._ellipsoid;if(!F.equals(o.transform,F.IDENTITY)){zu(e,t,n);return}let a,c,d=s.geodeticSurfaceNormal(o.position,lZt);if(M.equals(t,e._rotateMousePosition)){if(e._looking)Hu(e,t,n,d);else if(e._rotating)zu(e,t,n);else if(e._strafing)WZe(e,n);else{if(m.magnitude(o.position)<m.magnitude(e._rotateStartPosition))return;a=m.magnitude(e._rotateStartPosition),c=rte,c.x=c.y=c.z=a,s=ie.fromCartesian3(c,ste),nte(e,t,n,s)}return}e._looking=!1,e._rotating=!1,e._strafing=!1;let u=s.cartesianToCartographic(o.positionWC,MZe).height,h=e._globe;if(l(h)&&u<e._minimumPickingTerrainHeight){let p=Rb(e,n.startPosition,uZt);if(l(p)){let A=!1,f=o.getPickRay(n.startPosition,RZe);if(r)A=!0,LZe(e,f,p,p);else{let b=s.geodeticSurfaceNormal(p,dZt);Math.abs(m.dot(f.direction,b))<.05?A=!0:A=m.magnitude(o.position)<m.magnitude(p)}A?(M.clone(t,e._strafeEndMousePosition),m.clone(p,e._strafeStartPosition),e._strafing=!0,cte(e,n,e._strafeStartPosition)):(a=m.magnitude(p),c=rte,c.x=c.y=c.z=a,s=ie.fromCartesian3(c,ste),nte(e,t,n,s),m.clone(p,e._rotateStartPosition))}else e._looking=!0,Hu(e,t,n,d)}else l(o.pickEllipsoid(n.startPosition,e._ellipsoid,CZe))?(nte(e,t,n,e._ellipsoid),m.clone(CZe,e._rotateStartPosition)):u>e._minimumTrackBallHeight?(e._rotating=!0,zu(e,t,n)):(e._looking=!0,Hu(e,t,n,d));M.clone(t,e._rotateMousePosition)}function zu(e,t,n,i,o,r){o=o??!1,r=r??!1;let s=e._scene,a=s.camera,c=s.canvas,d=a.constrainedAxis;l(i)&&(a.constrainedAxis=i);let u=m.magnitude(a.position),h=e._rotateFactor*(u-e._rotateRateRangeAdjustment);h>e._maximumRotateRate&&(h=e._maximumRotateRate),h<e._minimumRotateRate&&(h=e._minimumRotateRate);let p=(n.startPosition.x-n.endPosition.x)/c.clientWidth,A=(n.startPosition.y-n.endPosition.y)/c.clientHeight;p=Math.min(p,e.maximumMovementRatio),A=Math.min(A,e.maximumMovementRatio);let f=h*p*Math.PI*2,b=h*A*Math.PI;if(l(i)&&l(e.maximumTiltAngle)){let C=e.maximumTiltAngle,T=m.dot(a.direction,i),E=Math.PI-Math.acos(T)+b;E>C&&(b-=E-C)}o||a.rotateRight(f),r||a.rotateUp(b),a.constrainedAxis=d}var tte=re.clone(re.UNIT_W),TZe=re.clone(re.UNIT_W),OO=new m,$Z=new m,zO=new m,EZe=new m,hZt=new M,fZt=new M,pZt=new M,AZt=new M,gZt=new Cn;function nte(e,t,n,i){let o=e._scene,r=o.camera,s=M.clone(n.startPosition,hZt),a=M.clone(n.endPosition,fZt),c=i.cartesianToCartographic(r.positionWC,MZe).height,d,u;if(!n.inertiaEnabled&&c<e._minimumPickingTerrainHeight&&(d=m.clone(e._panLastWorldPosition,tte),!l(e._globe)&&!M.equalsEpsilon(s,e._panLastMousePosition)&&(d=Rb(e,s,tte)),!l(e._globe)&&l(d))){let h=m.subtract(d,r.positionWC,$Z),p=m.multiplyByScalar(r.directionWC,m.dot(r.directionWC,h),$Z),A=m.magnitude(p),f=r.frustum.getPixelDimensions(o.drawingBufferWidth,o.drawingBufferHeight,A,o.pixelRatio,AZt),b=M.subtract(a,s,pZt),C=m.multiplyByScalar(r.rightWC,b.x*f.x,$Z),T=m.normalize(r.positionWC,ZZe),E=r.getPickRay(a,gZt).direction,S=m.subtract(E,m.projectVector(E,r.rightWC,zO),zO),I=m.angleBetween(S,r.directionWC),R=1;l(r.frustum.fov)&&(R=Math.max(Math.tan(I),.1));let V=Math.abs(m.dot(r.directionWC,T)),W=-b.y*f.y*2/Math.sqrt(R)*(1-V),B=m.multiplyByScalar(E,W,zO);V=Math.abs(m.dot(r.upWC,T));let N=m.multiplyByScalar(r.upWC,-b.y*(1-V)*f.y,EZe);u=m.add(d,C,TZe),u=m.add(u,B,u),u=m.add(u,N,u),m.clone(u,e._panLastWorldPosition),M.clone(a,e._panLastMousePosition)}if((!l(d)||!l(u))&&(d=r.pickEllipsoid(s,i,tte),u=r.pickEllipsoid(a,i,TZe)),!l(d)||!l(u)){e._rotating=!0,zu(e,t,n);return}if(d=r.worldToCameraCoordinates(d,d),u=r.worldToCameraCoordinates(u,u),l(r.constrainedAxis)){let h=r.constrainedAxis,p=m.mostOrthogonalAxis(h,OO);m.cross(p,h,p),m.normalize(p,p);let A=m.cross(h,p,$Z),f=m.magnitude(d),b=m.dot(h,d),C=Math.acos(b/f),T=m.multiplyByScalar(h,b,zO);m.subtract(d,T,T),m.normalize(T,T);let E=m.magnitude(u),S=m.dot(h,u),I=Math.acos(S/E),R=m.multiplyByScalar(h,S,EZe);m.subtract(u,R,R),m.normalize(R,R);let V=Math.acos(m.dot(T,p));m.dot(T,A)<0&&(V=L.TWO_PI-V);let W=Math.acos(m.dot(R,p));m.dot(R,A)<0&&(W=L.TWO_PI-W);let B=V-W,N;m.equalsEpsilon(h,r.position,L.EPSILON2)?N=r.right:N=m.cross(h,r.position,OO);let P=m.cross(h,N,OO),g=m.dot(P,m.subtract(d,h,$Z)),_=m.dot(P,m.subtract(u,h,$Z)),Z;g>0&&_>0?Z=I-C:g>0&&_<=0?m.dot(r.position,h)>0?Z=-C-I:Z=C+I:Z=C-I,r.rotateRight(B),r.rotateUp(Z)}else{m.normalize(d,d),m.normalize(u,u);let h=m.dot(d,u),p=m.cross(d,u,OO);if(h<1&&!m.equalsEpsilon(p,m.ZERO,L.EPSILON14)){let A=Math.acos(h);r.rotate(p,A)}}}var bZt=new m,yZt=new Ae,SZe=0;function lte(e,t,n){l(n.distance)&&(n=n.distance);let i=n.inertiaEnabled,o=e._ellipsoid,r=e._scene,s=r.camera,a=r.canvas,c=e._cameraUnderground,d;c?d=t:(d=NZe,d.x=a.clientWidth/2,d.y=a.clientHeight/2);let u=s.getPickRay(d,PZe),h,p=o.cartesianToCartographic(s.position,yZt).height,A=Math.abs(SZe)<e.minimumPickingTerrainDistanceWithInertia;(i?A:p<e._minimumPickingTerrainHeight)&&(h=Rb(e,d,XZe));let b;if(l(h)&&(b=m.distance(u.origin,h)),!l(e._globe)&&l(b)&&s.getMagnitude()<b&&(h=void 0,b=void 0),l(b)&&(SZe=b),c){let T=VZe(e,u,p);l(b)?b=Math.min(b,T):b=T}l(b)||(b=p);let C=m.normalize(s.position,bZt);ate(e,t,n,e.zoomFactor,b,m.dot(C,s.direction))}var vZe=new M,jO=new Cn,IM=new m,xZt=new m,UZe=new F,CZt=new F,DZe=new F,TZt=new Me,EZt=new $,dte=new Ae,ute=new m;function SZt(e,t,n){let o=e._scene.camera;if(!F.equals(o.transform,F.IDENTITY))return;if(l(n.angleAndHeight)&&(n=n.angleAndHeight),M.equals(t,e._tiltCenterMousePosition)||(e._tiltOnEllipsoid=!1,e._looking=!1),e._looking){let a=e._ellipsoid.geodeticSurfaceNormal(o.position,ute);Hu(e,t,n,a);return}let s=e._ellipsoid.cartesianToCartographic(o.position,dte);e._tiltOnEllipsoid||s.height>e._minimumCollisionTerrainHeight?(e._tiltOnEllipsoid=!0,IZt(e,t,n)):ZZt(e,t,n)}var _Zt=new Ae;function IZt(e,t,n){let i=e._ellipsoid,o=e._scene,r=o.camera,s=e.minimumZoomDistance*.25,a=i.cartesianToCartographic(r.positionWC,_Zt).height;if(a-s-1<L.EPSILON3&&n.endPosition.y-n.startPosition.y<0)return;let c=o.canvas,d=vZe;d.x=c.clientWidth/2,d.y=c.clientHeight/2;let u=r.getPickRay(d,jO),h,p=hi.rayEllipsoid(u,i);if(l(p))h=Cn.getPoint(u,p.start,IM);else if(a>e._minimumTrackBallHeight){let E=hi.grazingAltitudeLocation(u,i);if(!l(E))return;let S=i.cartesianToCartographic(E,dte);S.height=0,h=i.cartographicToCartesian(S,IM)}else{e._looking=!0;let E=e._ellipsoid.geodeticSurfaceNormal(r.position,ute);Hu(e,t,n,E),M.clone(t,e._tiltCenterMousePosition);return}let A=bt.eastNorthUpToFixedFrame(h,i,UZe),f=e._globe,b=e._ellipsoid;e._globe=void 0,e._ellipsoid=ie.UNIT_SPHERE,e._rotateFactor=1,e._rotateRateRangeAdjustment=1;let C=F.clone(r.transform,DZe);r._setTransform(A),zu(e,t,n,m.UNIT_Z),r._setTransform(C),e._globe=f,e._ellipsoid=b;let T=b.maximumRadius;e._rotateFactor=1/T,e._rotateRateRangeAdjustment=T}function ZZt(e,t,n){let i=e._ellipsoid,o=e._scene,r=o.camera,s=e._cameraUnderground,a,c,d;if(M.equals(t,e._tiltCenterMousePosition))a=m.clone(e._tiltCenter,IM);else{if(a=Rb(e,t,IM),!l(a)){if(c=r.getPickRay(t,jO),d=hi.rayEllipsoid(c,i),!l(d)){if(i.cartesianToCartographic(r.position,dte).height<=e._minimumTrackBallHeight){e._looking=!0;let _=e._ellipsoid.geodeticSurfaceNormal(r.position,ute);Hu(e,t,n,_),M.clone(t,e._tiltCenterMousePosition)}return}a=Cn.getPoint(c,d.start,IM)}s&&(l(c)||(c=r.getPickRay(t,jO)),GZe(e,c,a,a)),M.clone(t,e._tiltCenterMousePosition),m.clone(a,e._tiltCenter)}let u=o.canvas,h=vZe;h.x=u.clientWidth/2,h.y=e._tiltCenterMousePosition.y,c=r.getPickRay(h,jO);let p=m.magnitude(a),A=m.fromElements(p,p,p,rte),f=ie.fromCartesian3(A,ste);if(d=hi.rayEllipsoid(c,f),!l(d))return;let b=m.magnitude(c.origin)>p?d.start:d.stop,C=Cn.getPoint(c,b,xZt),T=bt.eastNorthUpToFixedFrame(a,i,UZe),E=bt.eastNorthUpToFixedFrame(C,f,CZt),S=e._globe,I=e._ellipsoid;e._globe=void 0,e._ellipsoid=ie.UNIT_SPHERE,e._rotateFactor=1,e._rotateRateRangeAdjustment=1;let R=m.UNIT_Z,V=F.clone(r.transform,DZe);r._setTransform(E);let W=m.cross(C,r.positionWC,KO);if(m.dot(r.rightWC,W)<0){let g=n.startPosition.y-n.endPosition.y;(s&&g<0||!s&&g>0)&&(R=void 0);let _=r.constrainedAxis;r.constrainedAxis=void 0,zu(e,t,n,R,!0,!1),r.constrainedAxis=_}else zu(e,t,n,R,!0,!1);if(r._setTransform(T),zu(e,t,n,R,!1,!0),l(r.constrainedAxis)){let g=m.cross(r.direction,r.constrainedAxis,KO);m.equalsEpsilon(g,m.ZERO,L.EPSILON6)||(m.dot(g,r.right)<0&&m.negate(g,g),m.cross(g,r.direction,r.up),m.cross(r.direction,r.up,r.right),m.normalize(r.up,r.up),m.normalize(r.right,r.right))}r._setTransform(V),e._globe=S,e._ellipsoid=I;let N=I.maximumRadius;e._rotateFactor=1/N,e._rotateRateRangeAdjustment=N;let P=m.clone(r.positionWC,KO);if(e.enableCollisionDetection&&mte(e,!0),!m.equals(r.positionWC,P)){r._setTransform(E),r.worldToCameraCoordinatesPoint(P,P);let g=m.magnitudeSquared(P);m.magnitudeSquared(r.position)>g&&(m.normalize(r.position,r.position),m.multiplyByScalar(r.position,Math.sqrt(g),r.position));let _=m.angleBetween(P,r.position),Z=m.cross(P,r.position,P);m.normalize(Z,Z);let G=Me.fromAxisAngle(Z,_,TZt),w=$.fromQuaternion(G,EZt);$.multiplyByVector(w,r.direction,r.direction),$.multiplyByVector(w,r.up,r.up),m.cross(r.direction,r.up,r.right),m.cross(r.right,r.direction,r.up),r._setTransform(V)}}var RZt=new M,VZt=new M,_Ze=new Cn,IZe=new Cn,GZt=new m,LZt=new m;function Hu(e,t,n,i){let r=e._scene.camera,s=RZt;s.x=n.startPosition.x,s.y=0;let a=VZt;a.x=n.endPosition.x,a.y=0;let c=r.getPickRay(s,_Ze),d=r.getPickRay(a,IZe),u=0,h,p;r.frustum instanceof bn?(h=c.origin,p=d.origin,m.add(r.direction,h,h),m.add(r.direction,p,p),m.subtract(h,r.position,h),m.subtract(p,r.position,p),m.normalize(h,h),m.normalize(p,p)):(h=c.direction,p=d.direction);let A=m.dot(h,p);A<1&&(u=Math.acos(A)),u=n.startPosition.x>n.endPosition.x?-u:u;let f=e._horizontalRotationAxis;if(l(i)?r.look(i,-u):l(f)?r.look(f,-u):r.lookLeft(u),s.x=0,s.y=n.startPosition.y,a.x=0,a.y=n.endPosition.y,c=r.getPickRay(s,_Ze),d=r.getPickRay(a,IZe),u=0,r.frustum instanceof bn?(h=c.origin,p=d.origin,m.add(r.direction,h,h),m.add(r.direction,p,p),m.subtract(h,r.position,h),m.subtract(p,r.position,p),m.normalize(h,h),m.normalize(p,p)):(h=c.direction,p=d.direction),A=m.dot(h,p),A<1&&(u=Math.acos(A)),u=n.startPosition.y>n.endPosition.y?-u:u,i=i??f,l(i)){let b=r.direction,C=m.negate(i,GZt),T=m.equalsEpsilon(b,i,L.EPSILON2),E=m.equalsEpsilon(b,C,L.EPSILON2);if(!T&&!E){A=m.dot(b,i);let S=L.acosClamped(A);u>0&&u>S&&(u=S-L.EPSILON4),A=m.dot(b,C),S=L.acosClamped(A),u<0&&-u>S&&(u=-S+L.EPSILON4);let I=m.cross(i,b,LZt);r.look(I,u)}else(T&&u<0||E&&u>0)&&r.look(r.right,-u)}else r.lookUp(u)}function WZt(e){sd(e,e.enableRotate,e.rotateEventTypes,mZt,e.inertiaSpin,"_lastInertiaSpinMovement"),sd(e,e.enableZoom,e.zoomEventTypes,lte,e.inertiaZoom,"_lastInertiaZoomMovement"),sd(e,e.enableTilt,e.tiltEventTypes,SZt,e.inertiaSpin,"_lastInertiaTiltMovement"),sd(e,e.enableLook,e.lookEventTypes,Hu)}var FZt=new F,BZt=new Ae;function mte(e,t){e._adjustedHeightForTerrain=!0;let n=e._scene,i=n.mode;if(i===se.SCENE2D||i===se.MORPHING)return;let o=n.camera,r=n.ellipsoid??ie.WGS84,s=n.mapProjection,a,c;F.equals(o.transform,F.IDENTITY)||(a=F.clone(o.transform,FZt),c=m.magnitude(o.position),o._setTransform(F.IDENTITY));let d=BZt;i===se.SCENE3D?r.cartesianToCartographic(o.position,d):s.unproject(o.position,d);let u=!1;if(d.height<e._minimumCollisionTerrainHeight){let h=e._scene.globeHeight;if(l(h)){let p=h+e.minimumZoomDistance,A=h-e._lastGlobeHeight,f=A/e._lastGlobeHeight;d.height<p&&(t||Math.abs(f)<=.1)&&(d.height=p,i===se.SCENE3D?r.cartographicToCartesian(d,o.position):s.project(d,o.position),u=!0),t||Math.abs(f)<=.1?e._lastGlobeHeight=h:e._lastGlobeHeight+=A*.1}}l(a)&&(o._setTransform(a),u&&(m.normalize(o.position,o.position),m.negate(o.position,o.direction),m.multiplyByScalar(o.position,Math.max(c,e.minimumZoomDistance),o.position),m.normalize(o.direction,o.direction),m.cross(o.direction,o.up,o.right),m.cross(o.right,o.direction,o.up)))}jy.zoom2D=ite;jy.zoomCV=YZe;jy.zoom3D=lte;jy.prototype.onMap=function(){let e=this._scene,t=e.mode,n=e.camera;return t===se.COLUMBUS_VIEW?Math.abs(n.position.x)-this._maxCoord.x<0&&Math.abs(n.position.y)-this._maxCoord.y<0:!0};var wZt=new m,NZt=new m;jy.prototype.update=function(){let e=this._scene,{camera:t,globe:n,mode:i}=e;F.equals(t.transform,F.IDENTITY)?(this._globe=n,this._ellipsoid=e.ellipsoid??ie.default):(this._globe=void 0,this._ellipsoid=ie.UNIT_SPHERE);let{verticalExaggeration:o,verticalExaggerationRelativeHeight:r}=e;this._minimumCollisionTerrainHeight=Eo.getHeight(this.minimumCollisionTerrainHeight,o,r),this._minimumPickingTerrainHeight=Eo.getHeight(this.minimumPickingTerrainHeight,o,r),this._minimumTrackBallHeight=Eo.getHeight(this.minimumTrackBallHeight,o,r),this._cameraUnderground=e.cameraUnderground&&l(this._globe);let s=this._ellipsoid.maximumRadius;this._rotateFactor=1/s,this._rotateRateRangeAdjustment=s,this._adjustedHeightForTerrain=!1;let a=m.clone(t.positionWC,wZt),c=m.clone(t.directionWC,NZt);if(i===se.SCENE2D?wIt(this):i===se.COLUMBUS_VIEW?(this._horizontalRotationAxis=m.UNIT_Z,oZt(this)):i===se.SCENE3D&&(this._horizontalRotationAxis=void 0,WZt(this)),this.enableCollisionDetection&&!this._adjustedHeightForTerrain){let d=!m.equals(a,t.positionWC)||!m.equals(c,t.directionWC);mte(this,d)}this._aggregator.reset()};jy.prototype.isDestroyed=function(){return!1};jy.prototype.destroy=function(){return this._tweens.removeAll(),this._aggregator=this._aggregator&&this._aggregator.destroy(),he(this)};var ZM=jy;var clo=y(x(),1);var vco=y(x(),1),RM=`uniform sampler2D colorTexture;
uniform sampler2D colorTexture2;
uniform vec2 center;
uniform float radius;
in vec2 v_textureCoordinates;
void main()
{
vec4 color0 = texture(colorTexture, v_textureCoordinates);
vec4 color1 = texture(colorTexture2, v_textureCoordinates);
float x = length(gl_FragCoord.xy - center) / radius;
float t = smoothstep(0.5, 0.8, x);
out_FragColor = mix(color0 + color1, color1, t);
}
`;var Dco=y(x(),1),VM=`uniform sampler2D colorTexture;
uniform float avgLuminance;
uniform float threshold;
uniform float offset;
in vec2 v_textureCoordinates;
float key(float avg)
{
float guess = 1.5 - (1.5 / (avg * 0.1 + 1.0));
return max(0.0, guess) + 0.1;
}
// See section 9. "The bright-pass filter" of Realtime HDR Rendering
// http://www.cg.tuwien.ac.at/research/publications/2007/Luksch_2007_RHR/Luksch_2007_RHR-RealtimeHDR%20.pdf
void main()
{
vec4 color = texture(colorTexture, v_textureCoordinates);
vec3 xyz = czm_RGBToXYZ(color.rgb);
float luminance = xyz.r;
float scaledLum = key(avgLuminance) * luminance / avgLuminance;
float brightLum = max(scaledLum - threshold, 0.0);
float brightness = brightLum / (offset + brightLum);
xyz.r = brightness;
out_FragColor = vec4(czm_XYZToRGB(xyz), 1.0);
}
`;function Vb(){this._sceneFramebuffer=new pE;let e=.125,t=new Array(6);t[0]=new Fo({fragmentShader:vd,textureScale:e,forcePowerOfTwo:!0,sampleMode:Qu.LINEAR});let n=t[1]=new Fo({fragmentShader:VM,uniforms:{avgLuminance:.5,threshold:.25,offset:.1},textureScale:e,forcePowerOfTwo:!0}),i=this;this._delta=1,this._sigma=2,this._blurStep=new M,t[2]=new Fo({fragmentShader:Ky,uniforms:{step:function(){return i._blurStep.x=i._blurStep.y=1/n.outputTexture.width,i._blurStep},delta:function(){return i._delta},sigma:function(){return i._sigma},direction:0},textureScale:e,forcePowerOfTwo:!0}),t[3]=new Fo({fragmentShader:Ky,uniforms:{step:function(){return i._blurStep.x=i._blurStep.y=1/n.outputTexture.width,i._blurStep},delta:function(){return i._delta},sigma:function(){return i._sigma},direction:1},textureScale:e,forcePowerOfTwo:!0}),t[4]=new Fo({fragmentShader:vd,sampleMode:Qu.LINEAR}),this._uCenter=new M,this._uRadius=void 0,t[5]=new Fo({fragmentShader:RM,uniforms:{center:function(){return i._uCenter},radius:function(){return i._uRadius},colorTexture2:function(){return i._sceneFramebuffer.framebuffer.getColorTexture(0)}}}),this._stages=new Ud({stages:t});let o=new TE(this),r=t.length;for(let s=0;s<r;++s)t[s]._textureCache=o;this._textureCache=o,this.length=t.length}Vb.prototype.get=function(e){return this._stages.get(e)};Vb.prototype.getStageByName=function(e){let t=this._stages.length;for(let n=0;n<t;++n){let i=this._stages.get(n);if(i.name===e)return i}};var PZt=new re,kZe=new M,XZt=new M,QZe=new F;function YZt(e,t,n){let i=t.uniformState,o=i.sunPositionWC,r=i.view,s=i.viewProjection,a=i.projection,c=F.computeViewportTransformation(n,0,1,QZe),d=F.multiplyByPoint(r,o,PZt),u=bt.pointToGLWindowCoordinates(s,c,o,kZe);d.x+=L.SOLAR_RADIUS;let h=bt.pointToGLWindowCoordinates(a,c,d,d),p=M.magnitude(M.subtract(h,u,h))*30*2,A=XZt;A.x=p,A.y=p,e._uCenter=M.clone(u,e._uCenter),e._uRadius=Math.max(A.x,A.y)*.15;let f=t.drawingBufferWidth,b=t.drawingBufferHeight,C=e._stages,T=C.get(0),E=T.outputTexture.width,S=T.outputTexture.height,I=new nt;I.width=E,I.height=S,c=F.computeViewportTransformation(I,0,1,QZe),u=bt.pointToGLWindowCoordinates(s,c,o,kZe),A.x*=E/f,A.y*=S/b;let R=T.scissorRectangle;R.x=Math.max(u.x-A.x*.5,0),R.y=Math.max(u.y-A.y*.5,0),R.width=Math.min(A.x,f),R.height=Math.min(A.y,b);for(let V=1;V<4;++V)nt.clone(R,C.get(V).scissorRectangle)}Vb.prototype.clear=function(e,t,n){this._sceneFramebuffer.clear(e,t,n),this._textureCache.clear(e)};Vb.prototype.update=function(e){let t=e.context,n=e.viewport,i=this._sceneFramebuffer;i.update(t,n);let o=i.framebuffer;return this._textureCache.update(t),this._stages.update(t,!1),YZt(this,t,n),o};Vb.prototype.execute=function(e){let t=this._sceneFramebuffer.framebuffer.getColorTexture(0),n=this._stages,i=n.length;n.get(0).execute(e,t);for(let o=1;o<i;++o)n.get(o).execute(e,n.get(o-1).outputTexture)};Vb.prototype.copy=function(e,t){if(!l(this._copyColorCommand)){let n=this;this._copyColorCommand=e.createViewportQuadCommand(vd,{uniformMap:{colorTexture:function(){return n._stages.get(n._stages.length-1).outputTexture}},owner:this})}this._copyColorCommand.framebuffer=t,this._copyColorCommand.execute(e)};Vb.prototype.isDestroyed=function(){return!1};Vb.prototype.destroy=function(){return this._textureCache.destroy(),this._stages.destroy(),he(this)};var GM=Vb;var plo=y(x(),1);function OZe(){this._cachedShowFrustumsShaders={}}function MZt(e){let t={},n=e.vertexAttributes;for(let i in n)n.hasOwnProperty(i)&&(t[i]=n[i].index);return t}function vZt(e,t){let n=e.context,i=t,o=i.fragmentShaderSource.clone(),r=[];o.sources=o.sources.map(function(u){u=ze.replaceMain(u,"czm_Debug_main");let h=/out_FragData_(\d+)/g,p;for(;(p=h.exec(u))!==null;)r.indexOf(p[1])===-1&&r.push(p[1]);return u});let s=r.length,a="";a+=`uniform vec3 debugShowCommandsColor;
`,a+=`uniform vec3 debugShowFrustumsColor;
`,a+=`void main()
{
czm_Debug_main();
`;let c;if(s>0)for(c=0;c<s;++c)a+=` out_FragData_${r[c]}.rgb *= debugShowCommandsColor;
`,a+=` out_FragData_${r[c]}.rgb *= debugShowFrustumsColor;
`;else a+=` out_FragColor.rgb *= debugShowCommandsColor;
`,a+=` out_FragColor.rgb *= debugShowFrustumsColor;
`;a+="}",o.sources.push(a);let d=MZt(i);return tn.fromCache({context:n,vertexShaderSource:i.vertexShaderSource,fragmentShaderSource:o,attributeLocations:d})}var LM=new U;function UZt(e,t){let n;return l(t.uniformMap)?n=t.uniformMap:n={},l(n.debugShowCommandsColor)||l(n.debugShowFrustumsColor)||(n.debugShowCommandsColor=function(){return e.debugShowCommands?(l(t._debugColor)||(t._debugColor=U.fromRandom()),t._debugColor):U.WHITE},n.debugShowFrustumsColor=function(){return e.debugShowFrustums?(LM.red=t.debugOverlappingFrustums&1?1:0,LM.green=t.debugOverlappingFrustums&2?1:0,LM.blue=t.debugOverlappingFrustums&4?1:0,LM.alpha=1,LM):U.WHITE}),n}var DZt=new ot;OZe.prototype.executeDebugShowFrustumsCommand=function(e,t,n){let i=t.shaderProgram.id,o=this._cachedShowFrustumsShaders[i];l(o)||(o=vZt(e,t.shaderProgram),this._cachedShowFrustumsShaders[i]=o);let r=ot.shallowClone(t,DZt);r.shaderProgram=o,r.uniformMap=UZt(e,t),r.execute(e.context,n)};var WM=OZe;var Clo=y(x(),1);function ZE(e,t,n){this._primitive=e,this._tileIndex=t,this._sampleIndex=n,this._metadata={},this._orientedBoundingBox=new nn}ZE.fromKeyframeNode=function(e,t,n,i){let o=new ZE(e,t,n),{spatialNode:r,content:s}=i;return o._metadata=kZt(e,s,n),o._orientedBoundingBox=OZt(e,r,n,o._orientedBoundingBox),o};function kZt(e,t,n){if(!l(t)||!l(t.metadata))return;let{names:i,types:o}=e.provider,{metadata:r}=t,s={};for(let a=0;a<i.length;a++){let c=i[a],d=St.getComponentCount(o[a]),u=r[a].slice(n*d,(n+1)*d);s[c]=u}return s}var zZe=new m,QZt=new m;function OZt(e,t,n,i){let o=t.dimensions,r=o.x*o.y,s=Math.floor(n/r),a=n-s*r,c=Math.floor(a/o.x),d=a-c*o.x,u=m.fromElements(d,c,s,zZe),h=m.divideComponents(m.subtract(u,e._paddingBefore,zZe),e.dimensions,QZt);return e._shape.computeOrientedBoundingBoxForSample(t,e.dimensions,h,i)}Object.defineProperties(ZE.prototype,{metadata:{get:function(){return this._metadata}},primitive:{get:function(){return this._primitive}},sampleIndex:{get:function(){return this._sampleIndex}},tileIndex:{get:function(){return this._tileIndex}},orientedBoundingBox:{get:function(){return this._orientedBoundingBox.clone()}}});ZE.prototype.hasProperty=function(e){return l(this._metadata[e])};ZE.prototype.getNames=function(){return Object.keys(this._metadata)};ZE.prototype.getProperty=function(e){return this._metadata[e]};var FM=ZE;var Kho=y(x(),1);var luo=y(x(),1);var Ilo=y(x(),1);function zZt(e,t){let{shaderBuilder:n}=e,{names:i,types:o,componentTypes:r,minimumValues:s,maximumValues:a}=t._provider,c=o.length,d=l(s)&&l(a);n.addDefine("METADATA_COUNT",c,pe.FRAGMENT),d&&n.addDefine("STATISTICS",void 0,pe.FRAGMENT);for(let g=0;g<c;g++){let _=i[g],Z=$O(o[g]),G=`PropertyStatistics_${_}`,w=`PropertyStatistics_${_}`;n.addStruct(G,w,pe.FRAGMENT),n.addStructField(G,Z,"min"),n.addStructField(G,Z,"max")}let u="MetadataStatistics",h="MetadataStatistics",p="metadataStatistics";n.addStruct(u,h,pe.FRAGMENT);for(let g=0;g<c;g++){let _=i[g],Z=`PropertyStatistics_${_}`,G=_;n.addStructField(u,Z,G)}let A="Metadata",f="Metadata",b="metadata";n.addStruct(A,f,pe.FRAGMENT);for(let g=0;g<c;g++){let _=$O(o[g]);n.addStructField(A,_,i[g])}let C="Attributes",T="Attributes",E="attributes";n.addStruct(C,T,pe.FRAGMENT),n.addStructField(C,"vec3","positionEC"),n.addStructField(C,"vec3","normalEC");let S="Voxel",I="Voxel",R="voxel";n.addStruct(S,I,pe.FRAGMENT),n.addStructField(S,"vec3","viewDirUv"),n.addStructField(S,"float","travelDistance"),n.addStructField(S,"int","stepCount"),n.addStructField(S,"int","tileIndex"),n.addStructField(S,"int","sampleIndex"),n.addStructField(S,"float","distanceToDepthBuffer");let V="FragmentInput";n.addStruct(V,"FragmentInput",pe.FRAGMENT),n.addStructField(V,h,p),n.addStructField(V,f,b),n.addStructField(V,T,E),n.addStructField(V,I,R);let B="Properties",N="Properties",P="properties";n.addStruct(B,N,pe.FRAGMENT);for(let g=0;g<c;g++){let _=$O(o[g]);n.addStructField(B,_,i[g])}{let g="clearProperties";n.addFunction(g,`${N} clearProperties()`,pe.FRAGMENT),n.addFunctionLines(g,[`${N} ${P};`]);for(let _=0;_<c;_++){let Z=$O(o[_],r[_]);n.addFunctionLines(g,[`${P}.${i[_]} = ${Z}(0.0);`])}n.addFunctionLines(g,[`return ${P};`])}{let g="sumProperties";n.addFunction(g,`${N} sumProperties(${N} propertiesA, ${N} propertiesB)`,pe.FRAGMENT),n.addFunctionLines(g,[`${N} ${P};`]);for(let _=0;_<c;_++){let Z=i[_];n.addFunctionLines(g,[`${P}.${Z} = propertiesA.${Z} + propertiesB.${Z};`])}n.addFunctionLines(g,[`return ${P};`])}{let g="scaleProperties";n.addFunction(g,`${N} scaleProperties(${N} ${P}, float scale)`,pe.FRAGMENT),n.addFunctionLines(g,[`${N} scaledProperties = ${P};`]);for(let _=0;_<c;_++)n.addFunctionLines(g,[`scaledProperties.${i[_]} *= scale;`]);n.addFunctionLines(g,["return scaledProperties;"])}{let g="mixProperties";n.addFunction(g,`${N} mixProperties(${N} propertiesA, ${N} propertiesB, float mixFactor)`,pe.FRAGMENT),n.addFunctionLines(g,[`${N} ${P};`]);for(let _=0;_<c;_++){let Z=i[_];n.addFunctionLines(g,[`${P}.${Z} = mix(propertiesA.${Z}, propertiesB.${Z}, mixFactor);`])}n.addFunctionLines(g,[`return ${P};`])}{let g="copyPropertiesToMetadata";n.addFunction(g,`void copyPropertiesToMetadata(in ${N} ${P}, inout ${f} ${b})`,pe.FRAGMENT);for(let _=0;_<c;_++){let Z=i[_];n.addFunctionLines(g,[`${b}.${Z} = ${P}.${Z};`])}}if(d){let g="setStatistics";n.addFunction(g,`void setStatistics(inout ${h} ${p})`,pe.FRAGMENT);for(let _=0;_<c;_++){let Z=i[_],G=o[_],w=St.getComponentCount(G);for(let X=0;X<w;X++){let k=JZt(G,X),v=s[_][X],D=a[_][X];!l(v)||!l(D)||n.addFunctionLines(g,[`${p}.${Z}.min${k} = ${HZe(v)};`,`${p}.${Z}.max${k} = ${HZe(D)};`])}}}{let g="getPropertiesFromMegatextureAtUv";n.addFunction(g,`${N} getPropertiesFromMegatextureAtUv(vec3 texcoord)`,pe.FRAGMENT),n.addFunctionLines(g,[`${N} ${P};`]);for(let _=0;_<c;_++){let Z=o[_],G=r[_],w=HZt(Z,G);n.addFunctionLines(g,[`properties.${i[_]} = texture(u_megatextureTextures[${_}], texcoord)${w};`])}n.addFunctionLines(g,[`return ${P};`])}}function $O(e){if(e===St.SCALAR)return"float";if(e===St.VEC2)return"vec2";if(e===St.VEC3)return"vec3";if(e===St.VEC4)return"vec4"}function HZt(e){if(e===St.SCALAR)return".r";if(e===St.VEC2)return".ra";if(e===St.VEC3)return".rgb";if(e===St.VEC4)return""}function HZe(e){let t=e.toString();return t.indexOf(".")===-1&&(t=`${e}.0`),t}function JZt(e,t){return e===St.SCALAR?"":`[${t}]`}var BM=zZt;var klo=y(x(),1);function vf(e){let{planes:t,modelMatrix:n=F.IDENTITY,unionClippingRegions:i=!1}=e??Q.EMPTY_OBJECT;if(this._planes=[],this.modelMatrix=F.clone(n),this.planeAdded=new xe,this.planeRemoved=new xe,this._unionClippingRegions=i,this._testIntersection=i?JZe:KZe,this._float32View=void 0,this._clippingPlanesTexture=void 0,l(t))for(let o=0;o<t.length;++o)this.add(t[o])}function JZe(e){return e===qt.OUTSIDE}function KZe(e){return e===qt.INSIDE}Object.defineProperties(vf.prototype,{length:{get:function(){return this._planes.length}},unionClippingRegions:{get:function(){return this._unionClippingRegions},set:function(e){this._unionClippingRegions!==e&&(this._unionClippingRegions=e,this._testIntersection=e?JZe:KZe)}},texture:{get:function(){return this._clippingPlanesTexture}},clippingPlanesState:{get:function(){return this._unionClippingRegions?this._planes.length:-this._planes.length}}});vf.prototype.add=function(e){let t=this._planes.length;e.index=t,this._planes.push(e),this.planeAdded.raiseEvent(e,t)};vf.prototype.get=function(e){return this._planes[e]};function jZe(e,t){for(let n=0;n<e.length;++n)if(dn.equals(e[n],t))return n;return-1}vf.prototype.contains=function(e){return jZe(this._planes,e)!==-1};vf.prototype.remove=function(e){let t=this._planes,n=jZe(t,e);if(n===-1)return!1;e instanceof zs&&(e.onChangeCallback=void 0,e.index=-1);let i=t.length-1;for(let o=n;o<i;++o){let r=t[o+1];t[o]=r,r instanceof zs&&(r.index=o)}return t.length=i,this.planeRemoved.raiseEvent(e,n),!0};vf.prototype.removeAll=function(){let e=this._planes;for(let t=0;t<e.length;++t){let n=e[t];n instanceof zs&&(n.onChangeCallback=void 0,n.index=-1),this.planeRemoved.raiseEvent(n,t)}this._planes=[]};var KZt=new dn(m.fromElements(1,0,0),0);function jZt(e,t){let n=e._float32View,i=e._planes,o=0;for(let r=0;r<i.length;++r){let{normal:s,distance:a}=$Zt(i[r],t,KZt);n[o]=s.x,n[o+1]=s.y,n[o+2]=s.z,n[o+3]=a,o+=4}}var hte=new re,qZt=new m;function $Zt(e,t,n){let{normal:i,distance:o}=e,r=re.fromElements(i.x,i.y,i.z,o,hte),s=F.multiplyByVector(t,r,hte),a=m.fromCartesian4(s,qZt);return s=re.divideByScalar(s,m.magnitude(a),hte),dn.fromCartesian4(s,n)}function qZe(e,t){return t.x=Math.min(e,Bt.maximumTextureSize),t.y=Math.ceil(e/t.x),t}var eRt=new M;vf.prototype.update=function(e,t){let n=this._clippingPlanesTexture,i=this.length;if(l(n)){let s=n.width*n.height;(s<i||i<.25*s)&&(n.destroy(),n=void 0,this._clippingPlanesTexture=void 0)}if(this.length===0)return;if(!l(n)){let s=qZe(i,eRt);s.y*=2,n=new Lt({context:e.context,width:s.x,height:s.y,pixelFormat:Ke.RGBA,pixelDatatype:Oe.FLOAT,sampler:Ht.NEAREST,flipY:!1}),this._float32View=new Float32Array(s.x*s.y*4),this._clippingPlanesTexture=n}let{width:o,height:r}=n;jZt(this,t),n.copyFrom({source:{width:o,height:r,arrayBufferView:this._float32View}})};vf.getTextureResolution=function(e,t,n){let i=e.texture;if(l(i))return n.x=i.width,n.y=i.height,n;let o=e.length,r=qZe(o,n);return r.y*=2,r};vf.prototype.isDestroyed=function(){return!1};vf.prototype.destroy=function(){return this._clippingPlanesTexture=this._clippingPlanesTexture&&this._clippingPlanesTexture.destroy(),he(this)};var Gb=vf;var Hdo=y(x(),1);var Olo=y(x(),1),wM=`struct Ray {
vec3 pos;
vec3 dir;
};
float minComponent(in vec3 v) {
return min(min(v.x, v.y), v.z);
}
float maxComponent(in vec3 v) {
return max(max(v.x, v.y), v.z);
}
`;var Hlo=y(x(),1),NM=`// See Intersection.glsl for the definition of intersectScene
// See IntersectionUtils.glsl for the definition of nextIntersection
// See convertLocalToBoxUv.glsl, convertLocalToCylinderUv.glsl, or convertLocalToEllipsoidUv.glsl
// for the definitions of convertLocalToShapeSpaceDerivative and getTileAndUvCoordinate.
// The appropriate functions are selected based on the VoxelPrimitive shape type,
// and added to the shader in Scene/VoxelRenderResources.js.
// See Octree.glsl for the definitions of TraversalData, SampleData,
// traverseOctreeFromBeginning, and traverseOctreeFromExisting
// See Megatexture.glsl for the definition of accumulatePropertiesFromMegatexture
#define STEP_COUNT_MAX 1000 // Harcoded value because GLSL doesn't like variable length loops
#if defined(PICKING_VOXEL)
#define ALPHA_ACCUM_MAX 0.1
#else
#define ALPHA_ACCUM_MAX 0.98 // Must be > 0.0 and <= 1.0
#endif
uniform mat4 u_transformPositionViewToLocal;
uniform mat3 u_transformDirectionViewToLocal;
uniform vec3 u_cameraPositionLocal;
uniform vec3 u_cameraDirectionLocal;
uniform float u_stepSize;
#if defined(PICKING)
uniform vec4 u_pickColor;
#endif
vec3 getSampleSize(in int level) {
vec3 sampleCount = exp2(float(level)) * vec3(u_dimensions);
vec3 sampleSizeUv = 1.0 / sampleCount;
return scaleShapeUvToShapeSpace(sampleSizeUv);
}
#define MINIMUM_STEP_SCALAR (0.02)
#define SHIFT_FRACTION (0.001)
/**
* Given a coordinate within a tile, and sample spacings along a ray through
* the coordinate, find the distance to the points where the ray entered and
* exited the voxel cell, along with the surface normals at those points.
* The surface normals are returned in shape space coordinates.
*/
RayShapeIntersection getVoxelIntersection(in vec3 tileUv, in vec3 sampleSizeAlongRay) {
vec3 voxelCoord = tileUv * vec3(u_dimensions);
vec3 directions = sign(sampleSizeAlongRay);
vec3 positiveDirections = max(directions, 0.0);
vec3 entryCoord = mix(ceil(voxelCoord), floor(voxelCoord), positiveDirections);
vec3 exitCoord = entryCoord + directions;
vec3 distanceFromEntry = -abs((entryCoord - voxelCoord) * sampleSizeAlongRay);
float lastEntry = maxComponent(distanceFromEntry);
bvec3 isLastEntry = equal(distanceFromEntry, vec3(lastEntry));
vec3 entryNormal = -1.0 * vec3(isLastEntry) * directions;
vec4 entry = vec4(entryNormal, lastEntry);
vec3 distanceToExit = abs((exitCoord - voxelCoord) * sampleSizeAlongRay);
float firstExit = minComponent(distanceToExit);
bvec3 isFirstExit = equal(distanceToExit, vec3(firstExit));
vec3 exitNormal = vec3(isFirstExit) * directions;
vec4 exit = vec4(exitNormal, firstExit);
return RayShapeIntersection(entry, exit);
}
vec4 getStepSize(in SampleData sampleData, in Ray viewRay, in RayShapeIntersection shapeIntersection, in mat3 jacobianT, in float currentT) {
vec3 gradient = viewRay.dir * jacobianT;
vec3 sampleSizeAlongRay = getSampleSize(sampleData.tileCoords.w) / gradient;
RayShapeIntersection voxelIntersection = getVoxelIntersection(sampleData.tileUv, sampleSizeAlongRay);
// Transform normal from shape space to Cartesian space to eye space
vec3 voxelNormal = jacobianT * voxelIntersection.entry.xyz;
voxelNormal = normalize(czm_normal * voxelNormal);
// Compare with the shape intersection, to choose the appropriate normal
vec4 voxelEntry = vec4(voxelNormal, currentT + voxelIntersection.entry.w);
vec4 entry = intersectionMax(shapeIntersection.entry, voxelEntry);
float fixedStep = minComponent(abs(sampleSizeAlongRay)) * u_stepSize;
float shift = fixedStep * SHIFT_FRACTION;
float dt = voxelIntersection.exit.w + shift;
if ((currentT + dt) > shapeIntersection.exit.w) {
// Stop at end of shape
dt = shapeIntersection.exit.w - currentT + shift;
}
float stepSize = clamp(dt, fixedStep * MINIMUM_STEP_SCALAR, fixedStep + shift);
return vec4(entry.xyz, stepSize);
}
vec2 packIntToVec2(int value) {
float shifted = float(value) / 255.0;
float lowBits = fract(shifted);
float highBits = floor(shifted) / 255.0;
return vec2(highBits, lowBits);
}
vec2 packFloatToVec2(float value) {
float lowBits = fract(value);
float highBits = floor(value) / 255.0;
return vec2(highBits, lowBits);
}
int getSampleIndex(in SampleData sampleData) {
// tileUv = 1.0 is a valid coordinate but sampleIndex = u_inputDimensions is not.
// (tileUv = 1.0 corresponds to the far edge of the last sample, at index = u_inputDimensions - 1).
// Clamp to [0, voxelDimensions - 0.5) to avoid numerical error before flooring
vec3 maxCoordinate = vec3(u_inputDimensions) - vec3(0.5);
vec3 inputCoordinate = clamp(sampleData.inputCoordinate, vec3(0.0), maxCoordinate);
ivec3 sampleIndex = ivec3(floor(inputCoordinate));
// Convert to a 1D index for lookup in a 1D data array
return sampleIndex.x + u_inputDimensions.x * (sampleIndex.y + u_inputDimensions.y * sampleIndex.z);
}
/**
* Compute the view ray at the current fragment, in the local coordinates of the shape.
*/
Ray getViewRayLocal() {
vec4 eyeCoordinates = czm_windowToEyeCoordinates(gl_FragCoord);
vec3 origin;
vec3 direction;
if (czm_orthographicIn3D == 1.0) {
eyeCoordinates.z = 0.0;
origin = (u_transformPositionViewToLocal * eyeCoordinates).xyz;
direction = u_cameraDirectionLocal;
} else {
origin = u_cameraPositionLocal;
direction = u_transformDirectionViewToLocal * normalize(eyeCoordinates.xyz);
}
return Ray(origin, direction);
}
Ray getViewRayEC() {
vec4 eyeCoordinates = czm_windowToEyeCoordinates(gl_FragCoord);
vec3 viewPosEC = (czm_orthographicIn3D == 1.0)
? vec3(eyeCoordinates.xy, 0.0)
: vec3(0.0);
vec3 viewDirEC = normalize(eyeCoordinates.xyz);
return Ray(viewPosEC, viewDirEC);
}
void main()
{
Ray viewRayLocal = getViewRayLocal();
Ray viewRayEC = getViewRayEC();
Intersections ix;
vec2 screenCoord = (gl_FragCoord.xy - czm_viewport.xy) / czm_viewport.zw; // [0,1]
RayShapeIntersection shapeIntersection = intersectScene(screenCoord, viewRayLocal, viewRayEC, ix);
// Exit early if the scene was completely missed.
if (shapeIntersection.entry.w == NO_HIT) {
discard;
}
float currentT = shapeIntersection.entry.w;
float endT = shapeIntersection.exit.w;
vec3 positionEC = viewRayEC.pos + currentT * viewRayEC.dir;
TileAndUvCoordinate tileAndUv = getTileAndUvCoordinate(positionEC);
vec3 positionLocal = viewRayLocal.pos + currentT * viewRayLocal.dir;
mat3 jacobianT = convertLocalToShapeSpaceDerivative(positionLocal);
// Traverse the tree from the start position
TraversalData traversalData;
SampleData sampleDatas[SAMPLE_COUNT];
traverseOctreeFromBeginning(tileAndUv, traversalData, sampleDatas);
vec4 step = getStepSize(sampleDatas[0], viewRayLocal, shapeIntersection, jacobianT, currentT);
FragmentInput fragmentInput;
#if defined(STATISTICS)
setStatistics(fragmentInput.metadataStatistics);
#endif
czm_modelMaterial materialOutput;
vec4 colorAccum = vec4(0.0);
for (int stepCount = 0; stepCount < STEP_COUNT_MAX; ++stepCount) {
// Read properties from the megatexture based on the traversal state
Properties properties = accumulatePropertiesFromMegatexture(sampleDatas);
// Prepare the custom shader inputs
copyPropertiesToMetadata(properties, fragmentInput.metadata);
fragmentInput.attributes.positionEC = positionEC;
// Re-normalize normals: some shape intersections may have been scaled to encode positive/negative shapes
fragmentInput.attributes.normalEC = normalize(step.xyz);
fragmentInput.voxel.viewDirUv = viewRayLocal.dir;
fragmentInput.voxel.travelDistance = step.w;
fragmentInput.voxel.stepCount = stepCount;
fragmentInput.voxel.tileIndex = sampleDatas[0].megatextureIndex;
fragmentInput.voxel.sampleIndex = getSampleIndex(sampleDatas[0]);
fragmentInput.voxel.distanceToDepthBuffer = ix.distanceToDepthBuffer - currentT;
// Run the custom shader
fragmentMain(fragmentInput, materialOutput);
// Sanitize the custom shader output
vec4 color = vec4(materialOutput.diffuse, materialOutput.alpha);
color.rgb = max(color.rgb, vec3(0.0));
color.a = clamp(color.a, 0.0, 1.0);
// Pre-multiplied alpha blend
colorAccum += (1.0 - colorAccum.a) * vec4(color.rgb * color.a, color.a);
// Stop traversing if the alpha has been fully saturated
if (colorAccum.a > ALPHA_ACCUM_MAX) {
colorAccum.a = ALPHA_ACCUM_MAX;
break;
}
if (step.w == 0.0) {
// Shape is infinitely thin. The ray may have hit the edge of a
// foreground voxel. Step ahead slightly to check for more voxels
step.w = 0.001;
}
// Keep raymarching
currentT += step.w;
// Check if there's more intersections.
if (currentT > endT) {
#if (INTERSECTION_COUNT == 1)
break;
#else
shapeIntersection = nextIntersection(ix);
if (shapeIntersection.entry.w == NO_HIT) {
break;
} else {
// Found another intersection. Resume raymarching there
currentT = shapeIntersection.entry.w;
endT = shapeIntersection.exit.w;
}
#endif
}
positionEC = viewRayEC.pos + currentT * viewRayEC.dir;
tileAndUv = getTileAndUvCoordinate(positionEC);
positionLocal = viewRayLocal.pos + currentT * viewRayLocal.dir;
jacobianT = convertLocalToShapeSpaceDerivative(positionLocal);
// Traverse the tree from the current ray position.
// This is similar to traverseOctreeFromBeginning but is faster when the ray is in the same tile as the previous step.
traverseOctreeFromExisting(tileAndUv, traversalData, sampleDatas);
step = getStepSize(sampleDatas[0], viewRayLocal, shapeIntersection, jacobianT, currentT);
}
// Convert the alpha from [0,ALPHA_ACCUM_MAX] to [0,1]
colorAccum.a /= ALPHA_ACCUM_MAX;
#if defined(PICKING)
// If alpha is 0.0 there is nothing to pick
if (colorAccum.a == 0.0) {
discard;
}
out_FragColor = u_pickColor;
#elif defined(PICKING_VOXEL)
// If alpha is 0.0 there is nothing to pick
if (colorAccum.a == 0.0) {
discard;
}
vec2 megatextureId = packIntToVec2(sampleDatas[0].megatextureIndex);
vec2 sampleIndex = packIntToVec2(getSampleIndex(sampleDatas[0]));
out_FragColor = vec4(megatextureId, sampleIndex);
#else
out_FragColor = colorAccum;
#endif
}
`;var Klo=y(x(),1),PM=`in vec2 position;
uniform vec4 u_ndcSpaceAxisAlignedBoundingBox;
void main() {
vec2 aabbMin = u_ndcSpaceAxisAlignedBoundingBox.xy;
vec2 aabbMax = u_ndcSpaceAxisAlignedBoundingBox.zw;
vec2 translation = 0.5 * (aabbMax + aabbMin);
vec2 scale = 0.5 * (aabbMax - aabbMin);
gl_Position = vec4(position * scale + translation, 0.0, 1.0);
}
`;var qlo=y(x(),1),XM=`/* Intersection defines
#define INTERSECTION_COUNT ###
*/
#define NO_HIT (-czm_infinity)
#define INF_HIT (czm_infinity * 0.5)
struct RayShapeIntersection {
vec4 entry;
vec4 exit;
};
vec4 intersectionMin(in vec4 intersect0, in vec4 intersect1)
{
if (intersect0.w == NO_HIT) {
return intersect1;
} else if (intersect1.w == NO_HIT) {
return intersect0;
}
return (intersect0.w <= intersect1.w) ? intersect0 : intersect1;
}
vec4 intersectionMax(in vec4 intersect0, in vec4 intersect1)
{
return (intersect0.w >= intersect1.w) ? intersect0 : intersect1;
}
RayShapeIntersection intersectIntersections(in Ray ray, in RayShapeIntersection intersect0, in RayShapeIntersection intersect1)
{
bool missed = (intersect0.entry.w == NO_HIT) ||
(intersect1.entry.w == NO_HIT) ||
(intersect0.exit.w < intersect1.entry.w) ||
(intersect0.entry.w > intersect1.exit.w);
if (missed) {
vec4 miss = vec4(normalize(ray.dir), NO_HIT);
return RayShapeIntersection(miss, miss);
}
vec4 entry = intersectionMax(intersect0.entry, intersect1.entry);
vec4 exit = intersectionMin(intersect0.exit, intersect1.exit);
return RayShapeIntersection(entry, exit);
}
struct Intersections {
// Don't access these member variables directly - call the functions instead.
// Store an array of ray-surface intersections. Each intersection is composed of:
// .xyz for the surface normal at the intersection point
// .w for the T value
// The scale of the normal encodes the shape intersection type:
// length(intersection.xyz) = 1: positive shape entry
// length(intersection.xyz) = 2: positive shape exit
// length(intersection.xyz) = 3: negative shape entry
// length(intersection.xyz) = 4: negative shape exit
// INTERSECTION_COUNT is the number of ray-*shape* (volume) intersections,
// so we need twice as many to track ray-*surface* intersections
vec4 intersections[INTERSECTION_COUNT * 2];
float distanceToDepthBuffer;
#if (INTERSECTION_COUNT > 1)
// Maintain state for future nextIntersection calls
int index;
int surroundCount;
bool surroundIsPositive;
#endif
};
RayShapeIntersection getFirstIntersection(in Intersections ix)
{
return RayShapeIntersection(ix.intersections[0], ix.intersections[1]);
}
vec4 encodeIntersectionType(vec4 intersection, int index, bool entry)
{
float scale = float(index > 0) * 2.0 + float(!entry) + 1.0;
return vec4(intersection.xyz * scale, intersection.w);
}
// Use defines instead of real functions because WebGL1 cannot access array with non-constant index.
#define setIntersection(/*inout Intersections*/ ix, /*int*/ index, /*float*/ t, /*bool*/ positive, /*bool*/ enter) (ix).intersections[(index)] = vec4(0.0, float(!positive) * 2.0 + float(!enter) + 1.0, 0.0, (t))
#define setIntersectionPair(/*inout Intersections*/ ix, /*int*/ index, /*vec2*/ entryExit) (ix).intersections[(index) * 2 + 0] = vec4(0.0, float((index) > 0) * 2.0 + 1.0, 0.0, (entryExit).x); (ix).intersections[(index) * 2 + 1] = vec4(0.0, float((index) > 0) * 2.0 + 2.0, 0.0, (entryExit).y)
#define setSurfaceIntersection(/*inout Intersections*/ ix, /*int*/ index, /*vec4*/ intersection, /*bool*/ positive, /*bool*/ enter) (ix).intersections[(index)] = encodeIntersectionType((intersection), int(!positive), (enter))
#define setShapeIntersection(/*inout Intersections*/ ix, /*int*/ index, /*RayShapeIntersection*/ intersection) (ix).intersections[(index) * 2 + 0] = encodeIntersectionType((intersection).entry, (index), true); (ix).intersections[(index) * 2 + 1] = encodeIntersectionType((intersection).exit, (index), false)
#if (INTERSECTION_COUNT > 1)
void initializeIntersections(inout Intersections ix) {
// Sort the intersections from min T to max T with bubble sort.
// Note: If this sorting function changes, some of the intersection test may
// need to be updated. Search for "bubble sort" to find those areas.
const int sortPasses = INTERSECTION_COUNT * 2 - 1;
for (int n = sortPasses; n > 0; --n) {
for (int i = 0; i < sortPasses; ++i) {
// The loop should be: for (i = 0; i < n; ++i) {...} but WebGL1 cannot
// loop with non-constant condition, so it has to break early instead
if (i >= n) { break; }
vec4 intersect0 = ix.intersections[i + 0];
vec4 intersect1 = ix.intersections[i + 1];
bool inOrder = intersect0.w <= intersect1.w;
ix.intersections[i + 0] = inOrder ? intersect0 : intersect1;
ix.intersections[i + 1] = inOrder ? intersect1 : intersect0;
}
}
// Prepare initial state for nextIntersection
ix.index = 0;
ix.surroundCount = 0;
ix.surroundIsPositive = false;
}
#endif
#if (INTERSECTION_COUNT > 1)
RayShapeIntersection nextIntersection(inout Intersections ix) {
vec4 surfaceIntersection = vec4(0.0, 0.0, 0.0, NO_HIT);
RayShapeIntersection shapeIntersection = RayShapeIntersection(surfaceIntersection, surfaceIntersection);
const int passCount = INTERSECTION_COUNT * 2;
if (ix.index == passCount) {
return shapeIntersection;
}
for (int i = 0; i < passCount; ++i) {
// The loop should be: for (i = ix.index; i < passCount; ++i) {...} but WebGL1 cannot
// loop with non-constant condition, so it has to continue instead.
if (i < ix.index) {
continue;
}
ix.index = i + 1;
surfaceIntersection = ix.intersections[i];
int intersectionType = int(length(surfaceIntersection.xyz) - 0.5);
bool currShapeIsPositive = intersectionType < 2;
bool enter = intersectionType % 2 == 0;
ix.surroundCount += enter ? +1 : -1;
ix.surroundIsPositive = currShapeIsPositive ? enter : ix.surroundIsPositive;
// entering positive or exiting negative
if (ix.surroundCount == 1 && ix.surroundIsPositive && enter == currShapeIsPositive) {
shapeIntersection.entry = surfaceIntersection;
}
// exiting positive or entering negative after being inside positive
bool exitPositive = !enter && currShapeIsPositive && ix.surroundCount == 0;
bool enterNegativeFromPositive = enter && !currShapeIsPositive && ix.surroundCount == 2 && ix.surroundIsPositive;
if (exitPositive || enterNegativeFromPositive) {
shapeIntersection.exit = surfaceIntersection;
// entry and exit have been found, so the loop can stop
if (exitPositive) {
// After exiting positive shape there is nothing left to intersect, so jump to the end index.
ix.index = passCount;
}
break;
}
}
return shapeIntersection;
}
#endif
// NOTE: initializeIntersections, nextIntersection aren't even declared unless INTERSECTION_COUNT > 1
`;var edo=y(x(),1),YM=`// See IntersectionUtils.glsl for the definitions of Ray, Intersections,
// setIntersectionPair, INF_HIT, NO_HIT
/* intersectDepth defines (set in Scene/VoxelRenderResources.js)
#define DEPTH_INTERSECTION_INDEX ###
*/
void intersectDepth(in vec2 screenCoord, in Ray ray, inout Intersections ix) {
float logDepthOrDepth = czm_unpackDepth(texture(czm_globeDepthTexture, screenCoord));
float entry;
float exit;
if (logDepthOrDepth != 0.0) {
// Calculate how far the ray must travel before it hits the depth buffer.
vec4 eyeCoordinateDepth = czm_screenToEyeCoordinates(screenCoord, logDepthOrDepth);
eyeCoordinateDepth /= eyeCoordinateDepth.w;
entry = dot(eyeCoordinateDepth.xyz - ray.pos, ray.dir);
exit = +INF_HIT;
} else {
// There's no depth at this location.
entry = NO_HIT;
exit = NO_HIT;
}
ix.distanceToDepthBuffer = entry;
#if defined(DEPTH_TEST)
setIntersectionPair(ix, DEPTH_INTERSECTION_INDEX, vec2(entry, exit));
#endif
}
`;var ndo=y(x(),1),MM=`// See IntersectionUtils.glsl for the definitions of Ray, Intersections, INF_HIT,
// NO_HIT, setShapeIntersection
/* Clipping plane defines (set in Scene/VoxelRenderResources.js)
#define CLIPPING_PLANES_UNION
#define CLIPPING_PLANES_COUNT
#define CLIPPING_PLANES_INTERSECTION_INDEX
*/
uniform sampler2D u_clippingPlanesTexture;
uniform mat4 u_clippingPlanesMatrix;
// Plane is in Hessian Normal Form
vec4 intersectPlane(in Ray ray, in vec4 plane) {
vec3 n = plane.xyz; // normal
float w = plane.w; // -dot(pointOnPlane, normal)
float a = dot(ray.pos, n);
float b = dot(ray.dir, n);
float t = -(w + a) / b;
return vec4(n, t);
}
#ifdef CLIPPING_PLANES
void intersectClippingPlanes(in Ray ray, inout Intersections ix) {
vec4 backSide = vec4(-ray.dir, -INF_HIT);
vec4 farSide = vec4(ray.dir, +INF_HIT);
RayShapeIntersection clippingVolume;
#if (CLIPPING_PLANES_COUNT == 1)
// Union and intersection are the same when there's one clipping plane, and the code
// is more simplified.
vec4 planeUv = getClippingPlane(u_clippingPlanesTexture, 0);
vec4 intersection = intersectPlane(ray, planeUv);
bool reflects = dot(ray.dir, intersection.xyz) < 0.0;
clippingVolume.entry = reflects ? backSide : intersection;
clippingVolume.exit = reflects ? intersection : farSide;
setShapeIntersection(ix, CLIPPING_PLANES_INTERSECTION_INDEX, clippingVolume);
#elif defined(CLIPPING_PLANES_UNION)
vec4 firstTransmission = vec4(ray.dir, +INF_HIT);
vec4 lastReflection = vec4(-ray.dir, -INF_HIT);
for (int i = 0; i < CLIPPING_PLANES_COUNT; i++) {
vec4 planeUv = getClippingPlane(u_clippingPlanesTexture, i);
vec4 intersection = intersectPlane(ray, planeUv);
if (dot(ray.dir, planeUv.xyz) > 0.0) {
firstTransmission = intersection.w <= firstTransmission.w ? intersection : firstTransmission;
} else {
lastReflection = intersection.w >= lastReflection.w ? intersection : lastReflection;
}
}
clippingVolume.entry = backSide;
clippingVolume.exit = lastReflection;
setShapeIntersection(ix, CLIPPING_PLANES_INTERSECTION_INDEX + 0, clippingVolume);
clippingVolume.entry = firstTransmission;
clippingVolume.exit = farSide;
setShapeIntersection(ix, CLIPPING_PLANES_INTERSECTION_INDEX + 1, clippingVolume);
#else // intersection
vec4 lastTransmission = vec4(ray.dir, -INF_HIT);
vec4 firstReflection = vec4(-ray.dir, +INF_HIT);
for (int i = 0; i < CLIPPING_PLANES_COUNT; i++) {
vec4 planeUv = getClippingPlane(u_clippingPlanesTexture, i);
vec4 intersection = intersectPlane(ray, planeUv);
if (dot(ray.dir, planeUv.xyz) > 0.0) {
lastTransmission = intersection.w > lastTransmission.w ? intersection : lastTransmission;
} else {
firstReflection = intersection.w < firstReflection.w ? intersection: firstReflection;
}
}
if (lastTransmission.w < firstReflection.w) {
clippingVolume.entry = lastTransmission;
clippingVolume.exit = firstReflection;
} else {
clippingVolume.entry = vec4(-ray.dir, NO_HIT);
clippingVolume.exit = vec4(ray.dir, NO_HIT);
}
setShapeIntersection(ix, CLIPPING_PLANES_INTERSECTION_INDEX, clippingVolume);
#endif
}
#endif
`;var odo=y(x(),1),eR=`// See IntersectionUtils.glsl for the definitions of Ray, NO_HIT, INF_HIT,
// RayShapeIntersection
vec4 transformNormalToEC(in vec4 intersection) {
return vec4(normalize(czm_normal * intersection.xyz), intersection.w);
}
RayShapeIntersection transformNormalsToEC(in RayShapeIntersection ix) {
return RayShapeIntersection(transformNormalToEC(ix.entry), transformNormalToEC(ix.exit));
}
vec4 intersectLongitude(in Ray ray, in float angle, in bool positiveNormal) {
float normalSign = positiveNormal ? 1.0 : -1.0;
vec2 planeNormal = vec2(-sin(angle), cos(angle)) * normalSign;
vec2 position = ray.pos.xy;
vec2 direction = ray.dir.xy;
float approachRate = dot(direction, planeNormal);
float distance = -dot(position, planeNormal);
float t = (approachRate == 0.0)
? NO_HIT
: distance / approachRate;
return vec4(planeNormal, 0.0, t);
}
RayShapeIntersection intersectHalfSpace(in Ray ray, in float angle, in bool positiveNormal)
{
vec4 intersection = intersectLongitude(ray, angle, positiveNormal);
vec4 farSide = vec4(normalize(ray.dir), INF_HIT);
bool hitFront = (intersection.w > 0.0) == (dot(ray.pos.xy, intersection.xy) > 0.0);
if (!hitFront) {
return RayShapeIntersection(intersection, farSide);
} else {
return RayShapeIntersection(-1.0 * farSide, intersection);
}
}
void intersectFlippedWedge(in Ray ray, in vec2 minMaxAngle, out RayShapeIntersection intersections[2])
{
intersections[0] = transformNormalsToEC(intersectHalfSpace(ray, minMaxAngle.x, false));
intersections[1] = transformNormalsToEC(intersectHalfSpace(ray, minMaxAngle.y, true));
}
bool hitPositiveHalfPlane(in Ray ray, in vec4 intersection, in bool positiveNormal) {
float normalSign = positiveNormal ? 1.0 : -1.0;
vec2 planeDirection = vec2(intersection.y, -intersection.x) * normalSign;
vec2 hit = ray.pos.xy + intersection.w * ray.dir.xy;
return dot(hit, planeDirection) > 0.0;
}
void intersectHalfPlane(in Ray ray, in float angle, out RayShapeIntersection intersections[2]) {
vec4 intersection = intersectLongitude(ray, angle, true);
vec4 farSide = vec4(normalize(ray.dir), INF_HIT);
bool hitPositiveSide = hitPositiveHalfPlane(ray, intersection, true);
farSide = transformNormalToEC(farSide);
if (hitPositiveSide) {
intersection = transformNormalToEC(intersection);
intersections[0].entry = -1.0 * farSide;
intersections[0].exit = vec4(-1.0 * intersection.xyz, intersection.w);
intersections[1].entry = intersection;
intersections[1].exit = farSide;
} else {
vec4 miss = vec4(normalize(czm_normal * ray.dir), NO_HIT);
intersections[0].entry = -1.0 * farSide;
intersections[0].exit = farSide;
intersections[1].entry = miss;
intersections[1].exit = miss;
}
}
RayShapeIntersection intersectRegularWedge(in Ray ray, in vec2 minMaxAngle)
{
// Note: works for maxAngle > minAngle + pi, where the "regular wedge"
// is actually a negative volume.
// Compute intersections with the two planes.
// Normals will point toward the "outside" (negative space)
vec4 intersect1 = intersectLongitude(ray, minMaxAngle.x, false);
vec4 intersect2 = intersectLongitude(ray, minMaxAngle.y, true);
// Choose intersection with smallest T as the "first", the other as "last"
// Note: first or last could be in the "shadow" wedge, beyond the tip
bool inOrder = intersect1.w <= intersect2.w;
vec4 first = inOrder ? intersect1 : intersect2;
vec4 last = inOrder ? intersect2 : intersect1;
bool firstIsAhead = first.w >= 0.0;
bool startedInsideFirst = dot(ray.pos.xy, first.xy) < 0.0;
bool exitFromInside = firstIsAhead == startedInsideFirst;
bool lastIsAhead = last.w > 0.0;
bool startedOutsideLast = dot(ray.pos.xy, last.xy) >= 0.0;
bool enterFromOutside = lastIsAhead == startedOutsideLast;
vec4 farSide = vec4(normalize(ray.dir), INF_HIT);
vec4 miss = vec4(normalize(ray.dir), NO_HIT);
if (exitFromInside && enterFromOutside) {
// Ray crosses both faces of negative wedge, exiting then entering the positive shape
return transformNormalsToEC(RayShapeIntersection(first, last));
} else if (!exitFromInside && enterFromOutside) {
// Ray starts inside wedge. last is in shadow wedge, and first is actually the entry
return transformNormalsToEC(RayShapeIntersection(-1.0 * farSide, first));
} else if (exitFromInside && !enterFromOutside) {
// First intersection was in the shadow wedge, so last is actually the exit
return transformNormalsToEC(RayShapeIntersection(last, farSide));
} else { // !exitFromInside && !enterFromOutside
// Both intersections were in the shadow wedge
return transformNormalsToEC(RayShapeIntersection(miss, miss));
}
}
`;var sdo=y(x(),1),vM=`// See IntersectionUtils.glsl for the definitions of Ray, RayShapeIntersection,
// NO_HIT, Intersections
/* Box defines (set in Scene/VoxelBoxShape.js)
#define BOX_INTERSECTION_INDEX ### // always 0
*/
uniform sampler2D u_renderBoundPlanesTexture;
RayShapeIntersection intersectBoundPlanes(in Ray ray) {
vec4 lastEntry = vec4(ray.dir, -INF_HIT);
vec4 firstExit = vec4(-ray.dir, +INF_HIT);
for (int i = 0; i < 6; i++) {
vec4 boundPlane = getBoundPlane(u_renderBoundPlanesTexture, i);
vec4 intersection = intersectPlane(ray, boundPlane);
if (dot(ray.dir, boundPlane.xyz) < 0.0) {
lastEntry = intersection.w > lastEntry.w ? intersection : lastEntry;
} else {
firstExit = intersection.w < firstExit.w ? intersection: firstExit;
}
}
if (lastEntry.w < firstExit.w) {
return RayShapeIntersection(lastEntry, firstExit);
} else {
return RayShapeIntersection(vec4(-ray.dir, NO_HIT), vec4(ray.dir, NO_HIT));
}
}
void intersectShape(in Ray rayUV, in Ray rayEC, inout Intersections ix)
{
RayShapeIntersection intersection = intersectBoundPlanes(rayEC);
setShapeIntersection(ix, BOX_INTERSECTION_INDEX, intersection);
}
`;var cdo=y(x(),1),UM=`// See IntersectionUtils.glsl for the definitions of Ray, NO_HIT, Intersections,
// RayShapeIntersection, setSurfaceIntersection, setShapeIntersection,
// intersectIntersections
// See IntersectLongitude.glsl for the definitions of intersectHalfPlane,
// intersectFlippedWedge, intersectRegularWedge
/* Cylinder defines (set in Scene/VoxelCylinderShape.js)
#define CYLINDER_HAS_RENDER_BOUNDS_RADIUS_MIN
#define CYLINDER_HAS_RENDER_BOUNDS_RADIUS_FLAT
#define CYLINDER_HAS_RENDER_BOUNDS_ANGLE
#define CYLINDER_HAS_RENDER_BOUNDS_ANGLE_RANGE_UNDER_HALF
#define CYLINDER_HAS_RENDER_BOUNDS_ANGLE_RANGE_OVER_HALF
#define CYLINDER_HAS_RENDER_BOUNDS_ANGLE_RANGE_EQUAL_ZERO
#define CYLINDER_INTERSECTION_INDEX_RADIUS_MAX
#define CYLINDER_INTERSECTION_INDEX_RADIUS_MIN
#define CYLINDER_INTERSECTION_INDEX_ANGLE
*/
// Cylinder uniforms
uniform vec2 u_cylinderRenderRadiusMinMax;
#if defined(CYLINDER_HAS_RENDER_BOUNDS_ANGLE)
uniform vec2 u_cylinderRenderAngleMinMax;
#endif
uniform sampler2D u_renderBoundPlanesTexture;
RayShapeIntersection intersectBoundPlanes(in Ray ray) {
vec4 lastEntry = vec4(ray.dir, -INF_HIT);
vec4 firstExit = vec4(-ray.dir, +INF_HIT);
for (int i = 0; i < 2; i++) {
vec4 boundPlane = getBoundPlane(u_renderBoundPlanesTexture, i);
vec4 intersection = intersectPlane(ray, boundPlane);
if (dot(ray.dir, boundPlane.xyz) < 0.0) {
lastEntry = intersection.w > lastEntry.w ? intersection : lastEntry;
} else {
firstExit = intersection.w < firstExit.w ? intersection: firstExit;
}
}
if (lastEntry.w < firstExit.w) {
return RayShapeIntersection(lastEntry, firstExit);
} else {
return RayShapeIntersection(vec4(-ray.dir, NO_HIT), vec4(ray.dir, NO_HIT));
}
}
/**
* Find the intersection of a ray with a right cylindrical surface of a given radius
* about the z-axis.
*/
RayShapeIntersection intersectCylinder(in Ray ray, in float radius, in bool convex)
{
vec2 position = ray.pos.xy;
vec2 direction = ray.dir.xy;
float a = dot(direction, direction);
float b = dot(position, direction);
float c = dot(position, position) - radius * radius;
float determinant = b * b - a * c;
if (determinant < 0.0) {
vec4 miss = vec4(normalize(ray.dir), NO_HIT);
return RayShapeIntersection(miss, miss);
}
determinant = sqrt(determinant);
float t1 = (-b - determinant) / a;
float t2 = (-b + determinant) / a;
float signFlip = convex ? 1.0 : -1.0;
vec3 normal1 = vec3((position + t1 * direction) * signFlip, 0.0);
vec3 normal2 = vec3((position + t2 * direction) * signFlip, 0.0);
// Return normals in eye coordinates
vec4 intersect1 = vec4(normalize(czm_normal * normal1), t1);
vec4 intersect2 = vec4(normalize(czm_normal * normal2), t2);
return RayShapeIntersection(intersect1, intersect2);
}
/**
* Find the intersection of a ray with a right cylindrical solid of given
* radius and height bounds. NOTE: The shape is assumed to be convex.
*/
RayShapeIntersection intersectBoundedCylinder(in Ray ray, in Ray rayEC, in float radius)
{
RayShapeIntersection cylinderIntersection = intersectCylinder(ray, radius, true);
RayShapeIntersection heightBoundsIntersection = intersectBoundPlanes(rayEC);
return intersectIntersections(ray, cylinderIntersection, heightBoundsIntersection);
}
void intersectShape(in Ray ray, in Ray rayEC, inout Intersections ix)
{
RayShapeIntersection outerIntersect = intersectBoundedCylinder(ray, rayEC, u_cylinderRenderRadiusMinMax.y);
setShapeIntersection(ix, CYLINDER_INTERSECTION_INDEX_RADIUS_MAX, outerIntersect);
if (outerIntersect.entry.w == NO_HIT) {
return;
}
#if defined(CYLINDER_HAS_RENDER_BOUNDS_RADIUS_FLAT)
// When the cylinder is perfectly thin it's necessary to sandwich the
// inner cylinder intersection inside the outer cylinder intersection.
// Without this special case,
// [outerMin, outerMax, innerMin, innerMax] will bubble sort to
// [outerMin, innerMin, outerMax, innerMax] which will cause the back
// side of the cylinder to be invisible because it will think the ray
// is still inside the inner (negative) cylinder after exiting the
// outer (positive) cylinder.
// With this special case,
// [outerMin, innerMin, innerMax, outerMax] will bubble sort to
// [outerMin, innerMin, innerMax, outerMax] which will work correctly.
// Note: If initializeIntersections() changes its sorting function
// from bubble sort to something else, this code may need to change.
RayShapeIntersection innerIntersect = intersectCylinder(ray, 1.0, false);
setSurfaceIntersection(ix, 0, outerIntersect.entry, true, true); // positive, enter
setSurfaceIntersection(ix, 1, innerIntersect.entry, false, true); // negative, enter
setSurfaceIntersection(ix, 2, innerIntersect.exit, false, false); // negative, exit
setSurfaceIntersection(ix, 3, outerIntersect.exit, true, false); // positive, exit
#elif defined(CYLINDER_HAS_RENDER_BOUNDS_RADIUS_MIN)
RayShapeIntersection innerIntersect = intersectCylinder(ray, u_cylinderRenderRadiusMinMax.x, false);
setShapeIntersection(ix, CYLINDER_INTERSECTION_INDEX_RADIUS_MIN, innerIntersect);
#endif
#if defined(CYLINDER_HAS_RENDER_BOUNDS_ANGLE_RANGE_UNDER_HALF)
RayShapeIntersection wedgeIntersect = intersectRegularWedge(ray, u_cylinderRenderAngleMinMax);
setShapeIntersection(ix, CYLINDER_INTERSECTION_INDEX_ANGLE, wedgeIntersect);
#elif defined(CYLINDER_HAS_RENDER_BOUNDS_ANGLE_RANGE_OVER_HALF)
RayShapeIntersection wedgeIntersects[2];
intersectFlippedWedge(ray, u_cylinderRenderAngleMinMax, wedgeIntersects);
setShapeIntersection(ix, CYLINDER_INTERSECTION_INDEX_ANGLE + 0, wedgeIntersects[0]);
setShapeIntersection(ix, CYLINDER_INTERSECTION_INDEX_ANGLE + 1, wedgeIntersects[1]);
#elif defined(CYLINDER_HAS_RENDER_BOUNDS_ANGLE_RANGE_EQUAL_ZERO)
RayShapeIntersection wedgeIntersects[2];
intersectHalfPlane(ray, u_cylinderRenderAngleMinMax.x, wedgeIntersects);
setShapeIntersection(ix, CYLINDER_INTERSECTION_INDEX_ANGLE + 0, wedgeIntersects[0]);
setShapeIntersection(ix, CYLINDER_INTERSECTION_INDEX_ANGLE + 1, wedgeIntersects[1]);
#endif
}
`;var ddo=y(x(),1),DM=`// See IntersectionUtils.glsl for the definitions of Ray, NO_HIT, INF_HIT, Intersections,
// RayShapeIntersection, setSurfaceIntersection, setShapeIntersection
// See IntersectLongitude.glsl for the definitions of intersectHalfPlane,
// intersectFlippedWedge, intersectRegularWedge
/* Ellipsoid defines (set in Scene/VoxelEllipsoidShape.js)
#define ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE
#define ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE_RANGE_EQUAL_ZERO
#define ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE_RANGE_UNDER_HALF
#define ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE_RANGE_OVER_HALF
#define ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MAX_UNDER_HALF
#define ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MAX_EQUAL_HALF
#define ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MAX_OVER_HALF
#define ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MIN_UNDER_HALF
#define ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MIN_EQUAL_HALF
#define ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MIN_OVER_HALF
#define ELLIPSOID_INTERSECTION_INDEX_LONGITUDE
#define ELLIPSOID_INTERSECTION_INDEX_LATITUDE_MAX
#define ELLIPSOID_INTERSECTION_INDEX_LATITUDE_MIN
#define ELLIPSOID_INTERSECTION_INDEX_HEIGHT_MAX
#define ELLIPSOID_INTERSECTION_INDEX_HEIGHT_MIN
*/
#if defined(ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE)
uniform vec2 u_ellipsoidRenderLongitudeMinMax;
#endif
uniform float u_eccentricitySquared;
uniform vec2 u_ellipsoidRenderLatitudeSinMinMax;
uniform vec2 u_clipMinMaxHeight; // Values are negative: clipHeight - maxShapeHeight
RayShapeIntersection intersectZPlane(in Ray ray, in float z) {
float t = -ray.pos.z / ray.dir.z;
bool startsOutside = sign(ray.pos.z) == sign(z);
bool entry = (t >= 0.0) != startsOutside;
vec4 intersect = vec4(0.0, 0.0, z, t);
vec4 farSide = vec4(normalize(ray.dir), INF_HIT);
if (entry) {
return RayShapeIntersection(intersect, farSide);
} else {
return RayShapeIntersection(-1.0 * farSide, intersect);
}
}
RayShapeIntersection intersectHeight(in Ray ray, in float height, in bool convex)
{
// Scale the ray by the ellipsoid axes to make it a unit sphere
// Note: approximating ellipsoid + height as an ellipsoid
vec3 radiiCorrection = vec3(1.0) / (u_ellipsoidRadii + height);
vec3 position = ray.pos * radiiCorrection;
vec3 direction = ray.dir * radiiCorrection;
float a = dot(direction, direction); // ~ 1.0 (or maybe 4.0 if ray is scaled)
float b = dot(direction, position); // roughly inside [-1.0, 1.0] when zoomed in
float c = dot(position, position) - 1.0; // ~ 0.0 when zoomed in.
float determinant = b * b - a * c; // ~ b * b when zoomed in
if (determinant < 0.0) {
vec4 miss = vec4(normalize(direction), NO_HIT);
return RayShapeIntersection(miss, miss);
}
determinant = sqrt(determinant);
// Compute larger root using standard formula
float signB = b < 0.0 ? -1.0 : 1.0;
// The other root may suffer from subtractive cancellation in the standard formula.
// Compute it from the first root instead.
float t1 = (-b - signB * determinant) / a;
float t2 = c / (a * t1);
float tmin = min(t1, t2);
float tmax = max(t1, t2);
float directionScale = convex ? 1.0 : -1.0;
vec3 d1 = directionScale * (position + tmin * direction);
vec3 d2 = directionScale * (position + tmax * direction);
// Return normals in eye coordinates. Use spherical approximation for the normal.
vec3 normal1 = normalize(czm_normal * d1);
vec3 normal2 = normalize(czm_normal * d2);
return RayShapeIntersection(vec4(normal1, tmin), vec4(normal2, tmax));
}
/**
* Given a circular cone around the z-axis, with apex at the origin,
* find the parametric distance(s) along a ray where that ray intersects
* the cone.
* The cone opening angle is described by the squared cosine of
* its half-angle (the angle between the Z-axis and the surface)
*/
vec2 intersectDoubleEndedCone(in Ray ray, in float cosSqrHalfAngle)
{
vec3 o = ray.pos;
vec3 d = ray.dir;
float sinSqrHalfAngle = 1.0 - cosSqrHalfAngle;
float aSin = d.z * d.z * sinSqrHalfAngle;
float aCos = -dot(d.xy, d.xy) * cosSqrHalfAngle;
float a = aSin + aCos;
float bSin = d.z * o.z * sinSqrHalfAngle;
float bCos = -dot(o.xy, d.xy) * cosSqrHalfAngle;
float b = bSin + bCos;
float cSin = o.z * o.z * sinSqrHalfAngle;
float cCos = -dot(o.xy, o.xy) * cosSqrHalfAngle;
float c = cSin + cCos;
// determinant = b * b - a * c. But bSin * bSin = aSin * cSin.
// Avoid subtractive cancellation by expanding to eliminate these terms
float determinant = 2.0 * bSin * bCos + bCos * bCos - aSin * cCos - aCos * cSin - aCos * cCos;
if (determinant < 0.0) {
return vec2(NO_HIT);
} else if (a == 0.0) {
// Ray is parallel to cone surface
return (b == 0.0)
? vec2(NO_HIT) // Ray is on cone surface
: vec2(-0.5 * c / b, NO_HIT);
}
determinant = sqrt(determinant);
// Compute larger root using standard formula
float signB = b < 0.0 ? -1.0 : 1.0;
float t1 = (-b - signB * determinant) / a;
// The other root may suffer from subtractive cancellation in the standard formula.
// Compute it from the first root instead.
float t2 = c / (a * t1);
float tmin = min(t1, t2);
float tmax = max(t1, t2);
return vec2(tmin, tmax);
}
/**
* Given a point on a conical surface, find the surface normal at that point.
*/
vec3 getConeNormal(in vec3 p, in bool convex) {
// Start with radial component pointing toward z-axis
vec2 radial = -abs(p.z) * normalize(p.xy);
// Z component points toward opening of cone
float zSign = (p.z < 0.0) ? -1.0 : 1.0;
float z = length(p.xy) * zSign;
// Flip normal if shape is convex
float flip = (convex) ? -1.0 : 1.0;
return normalize(vec3(radial, z) * flip);
}
/**
* Compute the shift between the ellipsoid origin and the apex of a cone of latitude
*/
float getLatitudeConeShift(in float sinLatitude) {
// Find prime vertical radius of curvature:
// the distance along the ellipsoid normal to the intersection with the z-axis
float x2 = u_eccentricitySquared * sinLatitude * sinLatitude;
float primeVerticalRadius = u_ellipsoidRadii.x * inversesqrt(1.0 - x2);
// Compute a shift from the origin to the intersection of the cone with the z-axis
return primeVerticalRadius * u_eccentricitySquared * sinLatitude;
}
void intersectFlippedCone(in Ray ray, in float cosHalfAngle, out RayShapeIntersection intersections[2]) {
// Shift the ray to account for the latitude cone not being centered at the Earth center
ray.pos.z += getLatitudeConeShift(cosHalfAngle);
float cosSqrHalfAngle = cosHalfAngle * cosHalfAngle;
vec2 intersect = intersectDoubleEndedCone(ray, cosSqrHalfAngle);
vec4 miss = vec4(normalize(ray.dir), NO_HIT);
vec4 farSide = vec4(normalize(ray.dir), INF_HIT);
// Initialize output with no intersections
intersections[0].entry = -1.0 * farSide;
intersections[0].exit = farSide;
intersections[1].entry = miss;
intersections[1].exit = miss;
if (intersect.x == NO_HIT) {
return;
}
// Find the points of intersection
float tmin = intersect.x;
float tmax = intersect.y;
vec3 p0 = ray.pos + tmin * ray.dir;
vec3 p1 = ray.pos + tmax * ray.dir;
vec4 intersect0 = vec4(getConeNormal(p0, true), tmin);
vec4 intersect1 = vec4(getConeNormal(p1, true), tmax);
bool p0InShadowCone = sign(p0.z) != sign(cosHalfAngle);
bool p1InShadowCone = sign(p1.z) != sign(cosHalfAngle);
if (p0InShadowCone && p1InShadowCone) {
// no valid intersections
} else if (p0InShadowCone) {
intersections[0].exit = intersect1;
} else if (p1InShadowCone) {
intersections[0].entry = intersect0;
} else {
intersections[0].exit = intersect0;
intersections[1].entry = intersect1;
intersections[1].exit = farSide;
}
}
RayShapeIntersection intersectRegularCone(in Ray ray, in float cosHalfAngle, in bool convex) {
// Shift the ray to account for the latitude cone not being centered at the Earth center
ray.pos.z += getLatitudeConeShift(cosHalfAngle);
float cosSqrHalfAngle = cosHalfAngle * cosHalfAngle;
vec2 intersect = intersectDoubleEndedCone(ray, cosSqrHalfAngle);
vec4 miss = vec4(normalize(ray.dir), NO_HIT);
vec4 farSide = vec4(normalize(ray.dir), INF_HIT);
if (intersect.x == NO_HIT) {
return RayShapeIntersection(miss, miss);
}
// Find the points of intersection
float tmin = intersect.x;
float tmax = intersect.y;
vec3 p0 = ray.pos + tmin * ray.dir;
vec3 p1 = ray.pos + tmax * ray.dir;
vec4 intersect0 = vec4(getConeNormal(p0, convex), tmin);
vec4 intersect1 = vec4(getConeNormal(p1, convex), tmax);
bool p0InShadowCone = sign(p0.z) != sign(cosHalfAngle);
bool p1InShadowCone = sign(p1.z) != sign(cosHalfAngle);
if (p0InShadowCone && p1InShadowCone) {
return RayShapeIntersection(miss, miss);
} else if (p0InShadowCone) {
return RayShapeIntersection(intersect1, farSide);
} else if (p1InShadowCone) {
return RayShapeIntersection(-1.0 * farSide, intersect0);
} else {
return RayShapeIntersection(intersect0, intersect1);
}
}
void intersectShape(in Ray ray, in Ray rayEC, inout Intersections ix) { // Outer ellipsoid
RayShapeIntersection outerIntersect = intersectHeight(ray, u_clipMinMaxHeight.y, true);
setShapeIntersection(ix, ELLIPSOID_INTERSECTION_INDEX_HEIGHT_MAX, outerIntersect);
// Exit early if the outer ellipsoid was missed.
if (outerIntersect.entry.w == NO_HIT) {
return;
}
// Inner ellipsoid
RayShapeIntersection innerIntersect = intersectHeight(ray, u_clipMinMaxHeight.x, false);
if (innerIntersect.entry.w == NO_HIT) {
setShapeIntersection(ix, ELLIPSOID_INTERSECTION_INDEX_HEIGHT_MIN, innerIntersect);
} else {
// When the ellipsoid is large and thin it's possible for floating point math
// to cause the ray to intersect the inner ellipsoid before the outer ellipsoid.
// To prevent this from happening, clamp innerIntersect to outerIntersect and
// sandwich the inner ellipsoid intersection inside the outer ellipsoid intersection.
// Without this special case,
// [outerMin, outerMax, innerMin, innerMax] will bubble sort to
// [outerMin, innerMin, outerMax, innerMax] which will cause the back
// side of the ellipsoid to be invisible because it will think the ray
// is still inside the inner (negative) ellipsoid after exiting the
// outer (positive) ellipsoid.
// With this special case,
// [outerMin, innerMin, innerMax, outerMax] will bubble sort to
// [outerMin, innerMin, innerMax, outerMax] which will work correctly.
// Note: If initializeIntersections() changes its sorting function
// from bubble sort to something else, this code may need to change.
innerIntersect.entry.w = max(innerIntersect.entry.w, outerIntersect.entry.w);
innerIntersect.exit.w = min(innerIntersect.exit.w, outerIntersect.exit.w);
setSurfaceIntersection(ix, 0, outerIntersect.entry, true, true); // positive, enter
setSurfaceIntersection(ix, 1, innerIntersect.entry, false, true); // negative, enter
setSurfaceIntersection(ix, 2, innerIntersect.exit, false, false); // negative, exit
setSurfaceIntersection(ix, 3, outerIntersect.exit, true, false); // positive, exit
}
// Bottom cone
#if defined(ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MIN_UNDER_HALF)
RayShapeIntersection bottomConeIntersection = intersectRegularCone(ray, u_ellipsoidRenderLatitudeSinMinMax.x, false);
setShapeIntersection(ix, ELLIPSOID_INTERSECTION_INDEX_LATITUDE_MIN, bottomConeIntersection);
#elif defined(ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MIN_EQUAL_HALF)
RayShapeIntersection bottomConeIntersection = intersectZPlane(ray, -1.0);
setShapeIntersection(ix, ELLIPSOID_INTERSECTION_INDEX_LATITUDE_MIN, bottomConeIntersection);
#elif defined(ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MIN_OVER_HALF)
RayShapeIntersection bottomConeIntersections[2];
intersectFlippedCone(ray, u_ellipsoidRenderLatitudeSinMinMax.x, bottomConeIntersections);
setShapeIntersection(ix, ELLIPSOID_INTERSECTION_INDEX_LATITUDE_MIN + 0, bottomConeIntersections[0]);
setShapeIntersection(ix, ELLIPSOID_INTERSECTION_INDEX_LATITUDE_MIN + 1, bottomConeIntersections[1]);
#endif
// Top cone
#if defined(ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MAX_UNDER_HALF)
RayShapeIntersection topConeIntersections[2];
intersectFlippedCone(ray, u_ellipsoidRenderLatitudeSinMinMax.y, topConeIntersections);
setShapeIntersection(ix, ELLIPSOID_INTERSECTION_INDEX_LATITUDE_MAX + 0, topConeIntersections[0]);
setShapeIntersection(ix, ELLIPSOID_INTERSECTION_INDEX_LATITUDE_MAX + 1, topConeIntersections[1]);
#elif defined(ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MAX_EQUAL_HALF)
RayShapeIntersection topConeIntersection = intersectZPlane(ray, 1.0);
setShapeIntersection(ix, ELLIPSOID_INTERSECTION_INDEX_LATITUDE_MAX, topConeIntersection);
#elif defined(ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MAX_OVER_HALF)
RayShapeIntersection topConeIntersection = intersectRegularCone(ray, u_ellipsoidRenderLatitudeSinMinMax.y, false);
setShapeIntersection(ix, ELLIPSOID_INTERSECTION_INDEX_LATITUDE_MAX, topConeIntersection);
#endif
// Wedge
#if defined(ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE_RANGE_EQUAL_ZERO)
RayShapeIntersection wedgeIntersects[2];
intersectHalfPlane(ray, u_ellipsoidRenderLongitudeMinMax.x, wedgeIntersects);
setShapeIntersection(ix, ELLIPSOID_INTERSECTION_INDEX_LONGITUDE + 0, wedgeIntersects[0]);
setShapeIntersection(ix, ELLIPSOID_INTERSECTION_INDEX_LONGITUDE + 1, wedgeIntersects[1]);
#elif defined(ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE_RANGE_UNDER_HALF)
RayShapeIntersection wedgeIntersect = intersectRegularWedge(ray, u_ellipsoidRenderLongitudeMinMax);
setShapeIntersection(ix, ELLIPSOID_INTERSECTION_INDEX_LONGITUDE, wedgeIntersect);
#elif defined(ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE_RANGE_OVER_HALF)
RayShapeIntersection wedgeIntersects[2];
intersectFlippedWedge(ray, u_ellipsoidRenderLongitudeMinMax, wedgeIntersects);
setShapeIntersection(ix, ELLIPSOID_INTERSECTION_INDEX_LONGITUDE + 0, wedgeIntersects[0]);
setShapeIntersection(ix, ELLIPSOID_INTERSECTION_INDEX_LONGITUDE + 1, wedgeIntersects[1]);
#endif
}
`;var mdo=y(x(),1),RE=`// Main intersection function for Voxel scenes.
// See IntersectBox.glsl, IntersectCylinder.glsl, or IntersectEllipsoid.glsl
// for the definition of intersectShape. The appropriate function is selected
// based on the VoxelPrimitive shape type, and added to the shader in
// Scene/VoxelRenderResources.js.
// See also IntersectClippingPlane.glsl and IntersectDepth.glsl.
// See IntersectionUtils.glsl for the definitions of Ray, NO_HIT,
// getFirstIntersection, initializeIntersections, nextIntersection.
/* Intersection defines (set in Scene/VoxelRenderResources.js)
#define INTERSECTION_COUNT ###
*/
RayShapeIntersection intersectScene(in vec2 screenCoord, in Ray ray, in Ray rayEC, out Intersections ix) {
// Do a ray-shape intersection to find the exact starting and ending points.
intersectShape(ray, rayEC, ix);
// Exit early if the positive shape was completely missed or behind the ray.
RayShapeIntersection intersection = getFirstIntersection(ix);
if (intersection.entry.w == NO_HIT) {
// Positive shape was completely missed - so exit early.
return intersection;
}
// Clipping planes
#if defined(CLIPPING_PLANES)
intersectClippingPlanes(ray, ix);
#endif
// Depth
intersectDepth(screenCoord, rayEC, ix);
// Find the first intersection that's in front of the ray
#if (INTERSECTION_COUNT > 1)
initializeIntersections(ix);
for (int i = 0; i < INTERSECTION_COUNT; ++i) {
intersection = nextIntersection(ix);
if (intersection.exit.w > 0.0) {
// Set start to 0.0 when ray is inside the shape.
intersection.entry.w = max(intersection.entry.w, 0.0);
break;
}
}
#else
// Set start to 0.0 when ray is inside the shape.
intersection.entry.w = max(intersection.entry.w, 0.0);
#endif
return intersection;
}
`;var fdo=y(x(),1),kM=`uniform vec3 u_boxLocalToShapeUvScale;
uniform vec3 u_boxLocalToShapeUvTranslate;
uniform ivec4 u_cameraTileCoordinates;
uniform vec3 u_cameraTileUv;
uniform mat3 u_boxEcToXyz;
mat3 convertLocalToShapeSpaceDerivative(in vec3 positionLocal) {
// For BOX, local space = shape space, so the Jacobian is the identity matrix.
return mat3(1.0);
}
vec3 scaleShapeUvToShapeSpace(in vec3 shapeUv) {
return shapeUv / u_boxLocalToShapeUvScale;
}
vec3 convertEcToDeltaTile(in vec3 positionEC) {
vec3 dPosition = u_boxEcToXyz * positionEC;
return u_boxLocalToShapeUvScale * dPosition * float(1 << u_cameraTileCoordinates.w);
}
TileAndUvCoordinate getTileAndUvCoordinate(in vec3 positionEC) {
vec3 deltaTileCoordinate = convertEcToDeltaTile(positionEC);
vec3 tileUvSum = u_cameraTileUv + deltaTileCoordinate;
ivec3 tileCoordinate = u_cameraTileCoordinates.xyz + ivec3(floor(tileUvSum));
tileCoordinate = min(max(ivec3(0), tileCoordinate), ivec3((1 << u_cameraTileCoordinates.w) - 1));
ivec3 tileCoordinateChange = tileCoordinate - u_cameraTileCoordinates.xyz;
vec3 tileUv = clamp(tileUvSum - vec3(tileCoordinateChange), 0.0, 1.0);
return TileAndUvCoordinate(ivec4(tileCoordinate, u_cameraTileCoordinates.w), tileUv);
}
`;var Ado=y(x(),1),QM=`uniform vec2 u_cylinderLocalToShapeUvRadius; // x = scale, y = offset
uniform vec2 u_cylinderLocalToShapeUvHeight; // x = scale, y = offset
uniform vec2 u_cylinderLocalToShapeUvAngle; // x = scale, y = offset
uniform float u_cylinderShapeUvAngleRangeOrigin;
uniform mat3 u_cylinderEcToRadialTangentUp;
uniform ivec4 u_cameraTileCoordinates;
uniform vec3 u_cameraTileUv;
uniform vec3 u_cameraShapePosition; // (radial distance, angle, height) of camera in shape space
mat3 convertLocalToShapeSpaceDerivative(in vec3 position) {
vec3 radial = normalize(vec3(position.xy, 0.0));
vec3 z = vec3(0.0, 0.0, 1.0);
vec3 east = normalize(vec3(-position.y, position.x, 0.0));
return mat3(radial, east / length(position.xy), z);
}
vec3 scaleShapeUvToShapeSpace(in vec3 shapeUv) {
float radius = shapeUv.x / u_cylinderLocalToShapeUvRadius.x;
float angle = shapeUv.y * czm_twoPi / u_cylinderLocalToShapeUvAngle.x;
float height = shapeUv.z / u_cylinderLocalToShapeUvHeight.x;
return vec3(radius, angle, height);
}
/**
* Computes the change in polar coordinates given a change in position.
* @param {vec2} dPosition The change in position in Cartesian coordinates.
* @param {float} cameraRadialDistance The radial distance of the camera from the origin.
* @return {vec2} The change in polar coordinates (radial distance, angle).
*/
vec2 computePolarChange(in vec2 dPosition, in float cameraRadialDistance) {
float dAngle = atan(dPosition.y, cameraRadialDistance + dPosition.x);
// Find the direction of the radial axis at the output angle, in Cartesian coordinates
vec2 outputRadialAxis = vec2(cos(dAngle), sin(dAngle));
float sinHalfAngle = sin(dAngle / 2.0);
float versine = 2.0 * sinHalfAngle * sinHalfAngle;
float dRadial = dot(dPosition, outputRadialAxis) - cameraRadialDistance * versine;
return vec2(dRadial, dAngle);
}
vec3 convertEcToDeltaShape(in vec3 positionEC) {
// 1. Rotate to radial, tangent, and up coordinates
vec3 rtu = u_cylinderEcToRadialTangentUp * positionEC;
// 2. Compute change in angular and radial coordinates.
vec2 dPolar = computePolarChange(rtu.xy, u_cameraShapePosition.x);
return vec3(dPolar.xy, rtu.z);
}
vec3 convertEcToDeltaTile(in vec3 positionEC) {
vec3 deltaShape = convertEcToDeltaShape(positionEC);
// Convert to tileset coordinates in [0, 1]
float dx = u_cylinderLocalToShapeUvRadius.x * deltaShape.x;
float dy = deltaShape.y / czm_twoPi;
#if defined(CYLINDER_HAS_SHAPE_BOUNDS_ANGLE)
// Wrap to ensure dy is not crossing through the unoccupied angle range, where
// angle to tile coordinate conversions would be more complicated
float cameraUvAngle = (u_cameraShapePosition.y + czm_pi) / czm_twoPi;
float cameraUvAngleShift = fract(cameraUvAngle - u_cylinderShapeUvAngleRangeOrigin);
float rawOutputUvAngle = cameraUvAngleShift + dy;
float rotation = floor(rawOutputUvAngle);
dy -= rotation;
#endif
dy *= u_cylinderLocalToShapeUvAngle.x;
float dz = u_cylinderLocalToShapeUvHeight.x * deltaShape.z;
// Convert to tile coordinate changes
return vec3(dx, dy, dz) * float(1 << u_cameraTileCoordinates.w);
}
TileAndUvCoordinate getTileAndUvCoordinate(in vec3 positionEC) {
vec3 deltaTileCoordinate = convertEcToDeltaTile(positionEC);
vec3 tileUvSum = u_cameraTileUv + deltaTileCoordinate;
ivec3 tileCoordinate = u_cameraTileCoordinates.xyz + ivec3(floor(tileUvSum));
int maxTileCoordinate = (1 << u_cameraTileCoordinates.w) - 1;
tileCoordinate.x = min(max(0, tileCoordinate.x), maxTileCoordinate);
tileCoordinate.z = min(max(0, tileCoordinate.z), maxTileCoordinate);
#if (!defined(CYLINDER_HAS_SHAPE_BOUNDS_ANGLE))
ivec3 tileCoordinateChange = tileCoordinate - u_cameraTileCoordinates.xyz;
if (tileCoordinate.y < 0) {
tileCoordinate.y += (maxTileCoordinate + 1);
} else if (tileCoordinate.y > maxTileCoordinate) {
tileCoordinate.y -= (maxTileCoordinate + 1);
}
#else
tileCoordinate.y = min(max(0, tileCoordinate.y), maxTileCoordinate);
ivec3 tileCoordinateChange = tileCoordinate - u_cameraTileCoordinates.xyz;
#endif
vec3 tileUv = tileUvSum - vec3(tileCoordinateChange);
tileUv.x = clamp(tileUv.x, 0.0, 1.0);
#if (!defined(CYLINDER_HAS_SHAPE_BOUNDS_ANGLE))
// If there is only one tile spanning 2*PI angle, the coordinate wraps around
tileUv.y = (u_cameraTileCoordinates.w == 0) ? fract(tileUv.y) : clamp(tileUv.y, 0.0, 1.0);
#else
tileUv.y = clamp(tileUv.y, 0.0, 1.0);
#endif
tileUv.z = clamp(tileUv.z, 0.0, 1.0);
return TileAndUvCoordinate(ivec4(tileCoordinate, u_cameraTileCoordinates.w), tileUv);
}
`;var bdo=y(x(),1),OM=`/* Ellipsoid defines (set in Scene/VoxelEllipsoidShape.js)
#define ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE_MIN_DISCONTINUITY
#define ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE_MAX_DISCONTINUITY
#define ELLIPSOID_HAS_SHAPE_BOUNDS_LONGITUDE
#define ELLIPSOID_HAS_SHAPE_BOUNDS_LONGITUDE_MIN_MAX_REVERSED
#define ELLIPSOID_HAS_SHAPE_BOUNDS_LATITUDE
*/
uniform vec3 u_cameraPositionCartographic; // (longitude, latitude, height) in radians and meters
uniform vec2 u_ellipsoidCurvatureAtLatitude;
uniform mat3 u_ellipsoidEcToEastNorthUp;
uniform vec3 u_ellipsoidRadii;
uniform vec2 u_evoluteScale; // (radii.x ^ 2 - radii.z ^ 2) * vec2(1.0, -1.0) / radii;
uniform vec3 u_ellipsoidInverseRadiiSquared;
#if defined(ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE_MIN_DISCONTINUITY) || defined(ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE_MAX_DISCONTINUITY) || defined(ELLIPSOID_HAS_SHAPE_BOUNDS_LONGITUDE_MIN_MAX_REVERSED)
uniform vec3 u_ellipsoidShapeUvLongitudeMinMaxMid;
#endif
#if defined(ELLIPSOID_HAS_SHAPE_BOUNDS_LONGITUDE)
uniform vec2 u_ellipsoidLocalToShapeUvLongitude; // x = scale, y = offset
uniform float u_ellipsoidShapeUvLongitudeRangeOrigin;
#endif
#if defined(ELLIPSOID_HAS_SHAPE_BOUNDS_LATITUDE)
uniform vec2 u_ellipsoidLocalToShapeUvLatitude; // x = scale, y = offset
#endif
uniform float u_ellipsoidInverseHeightDifference;
uniform ivec4 u_cameraTileCoordinates;
uniform vec3 u_cameraTileUv;
// robust iterative solution without trig functions
// https://github.com/0xfaded/ellipse_demo/issues/1
// https://stackoverflow.com/questions/22959698/distance-from-given-point-to-given-ellipse
// Extended to return radius of curvature along with the point
vec3 nearestPointAndRadiusOnEllipse(vec2 pos, vec2 radii) {
vec2 p = abs(pos);
vec2 inverseRadii = 1.0 / radii;
// We describe the ellipse parametrically: v = radii * vec2(cos(t), sin(t))
// but store the cos and sin of t in a vec2 for efficiency.
// Initial guess: t = pi/4
vec2 tTrigs = vec2(0.7071067811865476);
// Initial guess of point on ellipsoid
vec2 v = radii * tTrigs;
// Center of curvature of the ellipse at v
vec2 evolute = u_evoluteScale * tTrigs * tTrigs * tTrigs;
const int iterations = 3;
for (int i = 0; i < iterations; ++i) {
// Find the (approximate) intersection of p - evolute with the ellipsoid.
vec2 q = normalize(p - evolute) * length(v - evolute);
// Update the estimate of t.
tTrigs = (q + evolute) * inverseRadii;
tTrigs = normalize(clamp(tTrigs, 0.0, 1.0));
v = radii * tTrigs;
evolute = u_evoluteScale * tTrigs * tTrigs * tTrigs;
}
return vec3(v * sign(pos), length(v - evolute));
}
mat3 convertLocalToShapeSpaceDerivative(in vec3 position) {
vec3 east = normalize(vec3(-position.y, position.x, 0.0));
// Convert the 3D position to a 2D position relative to the ellipse (radii.x, radii.z)
// (assume radii.y == radii.x) and find the nearest point on the ellipse and its normal
float distanceFromZAxis = length(position.xy);
vec2 posEllipse = vec2(distanceFromZAxis, position.z);
vec3 surfacePointAndRadius = nearestPointAndRadiusOnEllipse(posEllipse, u_ellipsoidRadii.xz);
vec2 surfacePoint = surfacePointAndRadius.xy;
vec2 normal2d = normalize(surfacePoint * u_ellipsoidInverseRadiiSquared.xz);
vec3 north = vec3(-normal2d.y * normalize(position.xy), abs(normal2d.x));
float heightSign = length(posEllipse) < length(surfacePoint) ? -1.0 : 1.0;
float height = heightSign * length(posEllipse - surfacePoint);
vec3 up = normalize(cross(east, north));
return mat3(east / distanceFromZAxis, north / (surfacePointAndRadius.z + height), up);
}
vec3 scaleShapeUvToShapeSpace(in vec3 shapeUv) {
// Convert from [0, 1] to radians [-pi, pi]
float longitude = shapeUv.x * czm_twoPi;
#if defined (ELLIPSOID_HAS_SHAPE_BOUNDS_LONGITUDE)
longitude /= u_ellipsoidLocalToShapeUvLongitude.x;
#endif
// Convert from [0, 1] to radians [-pi/2, pi/2]
float latitude = shapeUv.y * czm_pi;
#if defined(ELLIPSOID_HAS_SHAPE_BOUNDS_LATITUDE)
latitude /= u_ellipsoidLocalToShapeUvLatitude.x;
#endif
float height = shapeUv.z / u_ellipsoidInverseHeightDifference;
return vec3(longitude, latitude, height);
}
vec3 convertEcToDeltaShape(in vec3 positionEC) {
vec3 enu = u_ellipsoidEcToEastNorthUp * positionEC;
// 1. Compute the change in longitude from the camera to the ENU point
// First project the camera and ENU positions to the equatorial XY plane,
// positioning the camera on the +x axis, so that enu.x projects along the +y axis
float cosLatitude = cos(u_cameraPositionCartographic.y);
float sinLatitude = sin(u_cameraPositionCartographic.y);
float primeVerticalRadius = 1.0 / u_ellipsoidCurvatureAtLatitude.x;
vec2 cameraXY = vec2((primeVerticalRadius + u_cameraPositionCartographic.z) * cosLatitude, 0.0);
// Note precision loss in positionXY.x if length(enu) << length(cameraXY)
vec2 positionXY = cameraXY + vec2(-enu.y * sinLatitude + enu.z * cosLatitude, enu.x);
float dLongitude = atan(positionXY.y, positionXY.x);
// 2. Find the longitude component of positionXY, by rotating about Z until the y component is zero.
// Use the versine to compute the change in x directly from the change in angle:
// versine(angle) = 2 * sin^2(angle/2)
float sinHalfLongitude = sin(dLongitude / 2.0);
float dx = length(positionXY) * 2.0 * sinHalfLongitude * sinHalfLongitude;
// Rotate longitude component back to ENU North and Up, and remove from enu
enu += vec3(-enu.x, -dx * sinLatitude, dx * cosLatitude);
// 3. Compute the change in latitude from the camera to the ENU point.
// First project the camera and ENU positions to the meridional ZX plane,
// positioning the camera on the +Z axis, so that enu.y maps to the +X axis.
float meridionalRadius = 1.0 / u_ellipsoidCurvatureAtLatitude.y;
vec2 cameraZX = vec2(meridionalRadius + u_cameraPositionCartographic.z, 0.0);
vec2 positionZX = cameraZX + vec2(enu.z, enu.y);
float dLatitude = atan(positionZX.y, positionZX.x);
// 4. Compute the change in height above the ellipsoid
// Find the change in enu.z associated with rotating the point to the latitude of the camera
float sinHalfLatitude = sin(dLatitude / 2.0);
float dz = length(positionZX) * 2.0 * sinHalfLatitude * sinHalfLatitude;
// The remaining change in enu.z is the change in height above the ellipsoid
float dHeight = enu.z + dz;
return vec3(dLongitude, dLatitude, dHeight);
}
vec3 convertEcToDeltaTile(in vec3 positionEC) {
vec3 deltaShape = convertEcToDeltaShape(positionEC);
// Convert to tileset coordinates in [0, 1]
float dx = deltaShape.x / czm_twoPi;
#if (defined(ELLIPSOID_HAS_SHAPE_BOUNDS_LONGITUDE))
// Wrap to ensure dx is not crossing through the unoccupied angle range, where
// angle to tile coordinate conversions would be more complicated
float cameraUvLongitude = (u_cameraPositionCartographic.x + czm_pi) / czm_twoPi;
float cameraUvLongitudeShift = fract(cameraUvLongitude - u_ellipsoidShapeUvLongitudeRangeOrigin);
float rawOutputUvLongitude = cameraUvLongitudeShift + dx;
float rotation = floor(rawOutputUvLongitude);
dx -= rotation;
dx *= u_ellipsoidLocalToShapeUvLongitude.x;
#endif
float dy = deltaShape.y / czm_pi;
#if (defined(ELLIPSOID_HAS_SHAPE_BOUNDS_LATITUDE))
dy *= u_ellipsoidLocalToShapeUvLatitude.x;
#endif
float dz = u_ellipsoidInverseHeightDifference * deltaShape.z;
// Convert to tile coordinate changes
return vec3(dx, dy, dz) * float(1 << u_cameraTileCoordinates.w);
}
TileAndUvCoordinate getTileAndUvCoordinate(in vec3 positionEC) {
vec3 deltaTileCoordinate = convertEcToDeltaTile(positionEC);
vec3 tileUvSum = u_cameraTileUv + deltaTileCoordinate;
ivec3 tileCoordinate = u_cameraTileCoordinates.xyz + ivec3(floor(tileUvSum));
int maxTileCoordinate = (1 << u_cameraTileCoordinates.w) - 1;
tileCoordinate.y = min(max(0, tileCoordinate.y), maxTileCoordinate);
tileCoordinate.z = min(max(0, tileCoordinate.z), maxTileCoordinate);
#if (!defined(ELLIPSOID_HAS_SHAPE_BOUNDS_LONGITUDE))
ivec3 tileCoordinateChange = tileCoordinate - u_cameraTileCoordinates.xyz;
if (tileCoordinate.x < 0) {
tileCoordinate.x += (maxTileCoordinate + 1);
} else if (tileCoordinate.x > maxTileCoordinate) {
tileCoordinate.x -= (maxTileCoordinate + 1);
}
#else
tileCoordinate.x = min(max(0, tileCoordinate.x), maxTileCoordinate);
ivec3 tileCoordinateChange = tileCoordinate - u_cameraTileCoordinates.xyz;
#endif
vec3 tileUv = tileUvSum - vec3(tileCoordinateChange);
#if (!defined(ELLIPSOID_HAS_SHAPE_BOUNDS_LONGITUDE))
// If there is only one tile spanning 2*PI angle, the coordinate wraps around
tileUv.x = (u_cameraTileCoordinates.w == 0) ? fract(tileUv.x) : clamp(tileUv.x, 0.0, 1.0);
#else
tileUv.x = clamp(tileUv.x, 0.0, 1.0);
#endif
tileUv.y = clamp(tileUv.y, 0.0, 1.0);
tileUv.z = clamp(tileUv.z, 0.0, 1.0);
return TileAndUvCoordinate(ivec4(tileCoordinate, u_cameraTileCoordinates.w), tileUv);
}
`;var xdo=y(x(),1),zM=`// These octree flags must be in sync with GpuOctreeFlag in VoxelTraversal.js
#define OCTREE_FLAG_INTERNAL 0
#define OCTREE_FLAG_LEAF 1
#define OCTREE_FLAG_PACKED_LEAF_FROM_PARENT 2
#define OCTREE_MAX_LEVELS 32 // Harcoded value because GLSL doesn't like variable length loops
uniform sampler2D u_octreeInternalNodeTexture;
uniform vec2 u_octreeInternalNodeTexelSizeUv;
uniform int u_octreeInternalNodeTilesPerRow;
#if (SAMPLE_COUNT > 1)
uniform sampler2D u_octreeLeafNodeTexture;
uniform vec2 u_octreeLeafNodeTexelSizeUv;
uniform int u_octreeLeafNodeTilesPerRow;
#endif
uniform ivec3 u_dimensions; // does not include padding, and is in the z-up orientation
uniform ivec3 u_inputDimensions; // includes padding, and is in the orientation of the input data
#if defined(PADDING)
uniform ivec3 u_paddingBefore;
#endif
struct OctreeNodeData {
int data;
int flag;
};
struct TraversalData {
ivec4 octreeCoords;
int parentOctreeIndex;
};
struct TileAndUvCoordinate {
ivec4 tileCoords;
vec3 tileUv;
};
struct SampleData {
int megatextureIndex;
ivec4 tileCoords;
vec3 tileUv;
vec3 inputCoordinate;
#if (SAMPLE_COUNT > 1)
float weight;
#endif
};
int normU8_toInt(in float value) {
return int(value * 255.0);
}
int normU8x2_toInt(in vec2 value) {
return int(value.x * 255.0) + 256 * int(value.y * 255.0);
}
float normU8x2_toFloat(in vec2 value) {
return float(normU8x2_toInt(value)) / 65535.0;
}
OctreeNodeData getOctreeNodeData(in vec2 octreeUv) {
vec4 texData = texture(u_octreeInternalNodeTexture, octreeUv);
OctreeNodeData data;
data.data = normU8x2_toInt(texData.xy);
data.flag = normU8x2_toInt(texData.zw);
return data;
}
OctreeNodeData getOctreeChildData(in int parentOctreeIndex, in ivec3 childCoord) {
int childIndex = childCoord.z * 4 + childCoord.y * 2 + childCoord.x;
int octreeCoordX = (parentOctreeIndex % u_octreeInternalNodeTilesPerRow) * 9 + 1 + childIndex;
int octreeCoordY = parentOctreeIndex / u_octreeInternalNodeTilesPerRow;
vec2 octreeUv = u_octreeInternalNodeTexelSizeUv * vec2(float(octreeCoordX) + 0.5, float(octreeCoordY) + 0.5);
return getOctreeNodeData(octreeUv);
}
int getOctreeParentIndex(in int octreeIndex) {
int octreeCoordX = (octreeIndex % u_octreeInternalNodeTilesPerRow) * 9;
int octreeCoordY = octreeIndex / u_octreeInternalNodeTilesPerRow;
vec2 octreeUv = u_octreeInternalNodeTexelSizeUv * vec2(float(octreeCoordX) + 0.5, float(octreeCoordY) + 0.5);
vec4 parentData = texture(u_octreeInternalNodeTexture, octreeUv);
int parentOctreeIndex = normU8x2_toInt(parentData.xy);
return parentOctreeIndex;
}
vec3 getTileUv(in TileAndUvCoordinate tileAndUv, in ivec4 octreeCoords) {
int levelDifference = tileAndUv.tileCoords.w - octreeCoords.w;
float scalar = exp2(-1.0 * float(levelDifference));
vec3 originShift = vec3(tileAndUv.tileCoords.xyz - (octreeCoords.xyz << levelDifference)) * scalar;
return tileAndUv.tileUv * scalar + originShift;
}
vec3 getClampedTileUv(in TileAndUvCoordinate tileAndUv, in ivec4 octreeCoords) {
vec3 tileUv = getTileUv(tileAndUv, octreeCoords);
return clamp(tileUv, vec3(0.0), vec3(1.0));
}
void addSampleCoordinates(in TileAndUvCoordinate tileAndUv, inout SampleData sampleData) {
vec3 tileUv = getClampedTileUv(tileAndUv, sampleData.tileCoords);
vec3 inputCoordinate = tileUv * vec3(u_dimensions);
#if defined(PADDING)
inputCoordinate += vec3(u_paddingBefore);
#endif
#if defined(Y_UP_METADATA_ORDER)
#if defined(SHAPE_BOX)
float inputY = inputCoordinate.y;
inputCoordinate.y = inputCoordinate.z;
// u_inputDimensions.z is the y-up dimension along the 3D Tiles y-axis.
inputCoordinate.z = float(u_inputDimensions.z) - inputY;
#elif defined(SHAPE_CYLINDER)
float angle = inputCoordinate.y;
float height = inputCoordinate.z;
#if (!defined(CYLINDER_HAS_SHAPE_BOUNDS_ANGLE))
// Account for the different 0-angle convention in glTF vs 3DTiles
if (sampleData.tileCoords.w == 0) {
float angleCount = float(u_inputDimensions.z);
angle = mod(angle + angleCount / 2.0, angleCount);
}
#endif
inputCoordinate.y = height;
inputCoordinate.z = angle;
#endif
#endif
sampleData.tileUv = tileUv;
sampleData.inputCoordinate = inputCoordinate;
}
void getOctreeLeafSampleData(in OctreeNodeData data, in ivec4 octreeCoords, out SampleData sampleData) {
sampleData.megatextureIndex = data.data;
sampleData.tileCoords = (data.flag == OCTREE_FLAG_PACKED_LEAF_FROM_PARENT)
? ivec4(octreeCoords.xyz / 2, octreeCoords.w - 1)
: octreeCoords;
}
#if (SAMPLE_COUNT > 1)
void getOctreeLeafSampleDatas(in OctreeNodeData data, in ivec4 octreeCoords, out SampleData sampleDatas[SAMPLE_COUNT]) {
int leafIndex = data.data;
int leafNodeTexelCount = 2;
// Adding 0.5 moves to the center of the texel
float leafCoordXStart = float((leafIndex % u_octreeLeafNodeTilesPerRow) * leafNodeTexelCount) + 0.5;
float leafCoordY = float(leafIndex / u_octreeLeafNodeTilesPerRow) + 0.5;
// Get an interpolation weight and a flag to determine whether to read the parent texture
vec2 leafUv0 = u_octreeLeafNodeTexelSizeUv * vec2(leafCoordXStart + 0.0, leafCoordY);
vec4 leafData0 = texture(u_octreeLeafNodeTexture, leafUv0);
float lerp = normU8x2_toFloat(leafData0.xy);
sampleDatas[0].weight = 1.0 - lerp;
sampleDatas[1].weight = lerp;
// TODO: this looks wrong? Should be comparing to OCTREE_FLAG_PACKED_LEAF_FROM_PARENT
sampleDatas[0].tileCoords = (normU8_toInt(leafData0.z) == 1)
? ivec4(octreeCoords.xyz / 2, octreeCoords.w - 1)
: octreeCoords;
sampleDatas[1].tileCoords = (normU8_toInt(leafData0.w) == 1)
? ivec4(octreeCoords.xyz / 2, octreeCoords.w - 1)
: octreeCoords;
// Get megatexture indices for both samples
vec2 leafUv1 = u_octreeLeafNodeTexelSizeUv * vec2(leafCoordXStart + 1.0, leafCoordY);
vec4 leafData1 = texture(u_octreeLeafNodeTexture, leafUv1);
sampleDatas[0].megatextureIndex = normU8x2_toInt(leafData1.xy);
sampleDatas[1].megatextureIndex = normU8x2_toInt(leafData1.zw);
}
#endif
OctreeNodeData traverseOctreeDownwards(in ivec4 tileCoordinate, inout TraversalData traversalData) {
OctreeNodeData childData;
for (int i = 0; i < OCTREE_MAX_LEVELS; ++i) {
// tileCoordinate.xyz is defined at the level of detail tileCoordinate.w.
// Find the corresponding coordinate at the level traversalData.octreeCoords.w
int level = traversalData.octreeCoords.w + 1;
int levelDifference = tileCoordinate.w - level;
ivec3 coordinateAtLevel = tileCoordinate.xyz >> levelDifference;
traversalData.octreeCoords = ivec4(coordinateAtLevel, level);
ivec3 childCoordinate = coordinateAtLevel & 1;
childData = getOctreeChildData(traversalData.parentOctreeIndex, childCoordinate);
if (childData.flag != OCTREE_FLAG_INTERNAL) {
// leaf tile - stop traversing
break;
}
traversalData.parentOctreeIndex = childData.data;
}
return childData;
}
/**
* Transform a given position to an octree tile coordinate and a position within that tile,
* and find the corresponding megatexture index and texture coordinates
*/
void traverseOctreeFromBeginning(in TileAndUvCoordinate tileAndUv, out TraversalData traversalData, out SampleData sampleDatas[SAMPLE_COUNT]) {
traversalData.octreeCoords = ivec4(0);
traversalData.parentOctreeIndex = 0;
OctreeNodeData nodeData = getOctreeNodeData(vec2(0.0));
if (nodeData.flag != OCTREE_FLAG_LEAF) {
nodeData = traverseOctreeDownwards(tileAndUv.tileCoords, traversalData);
}
#if (SAMPLE_COUNT == 1)
getOctreeLeafSampleData(nodeData, traversalData.octreeCoords, sampleDatas[0]);
addSampleCoordinates(tileAndUv, sampleDatas[0]);
#else
getOctreeLeafSampleDatas(nodeData, traversalData.octreeCoords, sampleDatas);
addSampleCoordinates(tileAndUv, sampleDatas[0]);
addSampleCoordinates(tileAndUv, sampleDatas[1]);
#endif
}
bool insideTile(in ivec4 tileCoordinate, in ivec4 octreeCoords) {
int levelDifference = tileCoordinate.w - octreeCoords.w;
if (levelDifference < 0) {
return false;
}
ivec3 coordinateAtLevel = tileCoordinate.xyz >> levelDifference;
return coordinateAtLevel == octreeCoords.xyz;
}
void traverseOctreeFromExisting(in TileAndUvCoordinate tileAndUv, inout TraversalData traversalData, inout SampleData sampleDatas[SAMPLE_COUNT]) {
ivec4 tileCoords = tileAndUv.tileCoords;
if (insideTile(tileCoords, traversalData.octreeCoords)) {
for (int i = 0; i < SAMPLE_COUNT; i++) {
addSampleCoordinates(tileAndUv, sampleDatas[i]);
}
return;
}
// Go up tree until we find a parent tile containing tileCoords.
// Assumes all parents are available all they way up to the root.
for (int i = 0; i < OCTREE_MAX_LEVELS; ++i) {
traversalData.octreeCoords.xyz /= 2;
traversalData.octreeCoords.w -= 1;
if (insideTile(tileCoords, traversalData.octreeCoords)) {
break;
}
traversalData.parentOctreeIndex = getOctreeParentIndex(traversalData.parentOctreeIndex);
}
// Go down tree
OctreeNodeData nodeData = traverseOctreeDownwards(tileCoords, traversalData);
#if (SAMPLE_COUNT == 1)
getOctreeLeafSampleData(nodeData, traversalData.octreeCoords, sampleDatas[0]);
addSampleCoordinates(tileAndUv, sampleDatas[0]);
#else
getOctreeLeafSampleDatas(nodeData, traversalData.octreeCoords, sampleDatas);
addSampleCoordinates(tileAndUv, sampleDatas[0]);
addSampleCoordinates(tileAndUv, sampleDatas[1]);
#endif
}
`;var Tdo=y(x(),1),HM=`// See Octree.glsl for the definitions of SampleData
/* Megatexture defines (set in Scene/VoxelRenderResources.js)
#define SAMPLE_COUNT ###
#define PADDING
*/
uniform ivec3 u_megatextureTileCounts; // number of tiles in the megatexture, along each axis
vec3 index1DTo3DTexCoord(int index)
{
int tilesPerZ = u_megatextureTileCounts.x * u_megatextureTileCounts.y;
int iz = index / tilesPerZ;
int remainder = index - iz * tilesPerZ;
int iy = remainder / u_megatextureTileCounts.x;
int ix = remainder - iy * u_megatextureTileCounts.x;
return vec3(ix, iy, iz) / vec3(u_megatextureTileCounts);
}
Properties getPropertiesFromMegatexture(in SampleData sampleData) {
int tileIndex = sampleData.megatextureIndex;
vec3 voxelCoord = sampleData.inputCoordinate;
// UV coordinate of the lower corner of the tile in the megatexture
vec3 tileUvOffset = index1DTo3DTexCoord(tileIndex);
// Voxel location
vec3 tileDimensions = vec3(u_inputDimensions);
vec3 clampedVoxelCoord = clamp(voxelCoord, vec3(0.5), tileDimensions - vec3(0.5));
vec3 voxelUv = clampedVoxelCoord / tileDimensions / vec3(u_megatextureTileCounts);
return getPropertiesFromMegatextureAtUv(tileUvOffset + voxelUv);
}
// Convert an array of sample datas to a final weighted properties.
Properties accumulatePropertiesFromMegatexture(in SampleData sampleDatas[SAMPLE_COUNT]) {
#if (SAMPLE_COUNT == 1)
return getPropertiesFromMegatexture(sampleDatas[0]);
#else
// When more than one sample is taken the accumulator needs to start at 0
Properties properties = clearProperties();
for (int i = 0; i < SAMPLE_COUNT; ++i) {
float weight = sampleDatas[i].weight;
// Avoid reading the megatexture when the weight is 0 as it can be costly.
if (weight > 0.0) {
Properties tempProperties = getPropertiesFromMegatexture(sampleDatas[i]);
tempProperties = scaleProperties(tempProperties, weight);
properties = sumProperties(properties, tempProperties);
}
}
return properties;
#endif
}
`;var Sdo=y(x(),1),tRt={Z_UP:0,Y_UP:1},lA=Object.freeze(tRt);function nRt(e){let t=new GA;this.shaderBuilder=t;let n=e._customShader,i=Ft(e._uniformMap,n.uniformMap);e._uniformMap=i;let o=n.uniforms;for(let f in o)if(o.hasOwnProperty(f)){let b=o[f];t.addUniform(b.type,f,pe.FRAGMENT)}t.addUniform("sampler3D","u_megatextureTextures[METADATA_COUNT]",pe.FRAGMENT),this.uniformMap=i;let r=e._clippingPlanes,s=l(r)&&r.enabled?r.length:0;this.clippingPlanes=r,this.clippingPlanesLength=s;let a=e._shape.renderBoundPlanes,c=a?.length??0;this.renderBoundPlanes=a,this.renderBoundPlanesLength=c,t.addVertexLines([PM]),e.provider.metadataOrder===lA.Y_UP&&t.addDefine("Y_UP_METADATA_ORDER",void 0,pe.FRAGMENT);let d=e._provider.shape;d==="BOX"?t.addDefine("SHAPE_BOX",void 0,pe.FRAGMENT):d==="CYLINDER"?t.addDefine("SHAPE_CYLINDER",void 0,pe.FRAGMENT):d==="ELLIPSOID"&&t.addDefine("SHAPE_ELLIPSOID",void 0,pe.FRAGMENT),t.addFragmentLines([n.fragmentShaderText,"#line 0",zM,wM,HM,XM,MM,YM]),s>0&&(t.addDefine("CLIPPING_PLANES",void 0,pe.FRAGMENT),t.addDefine("CLIPPING_PLANES_COUNT",s,pe.FRAGMENT),r.unionClippingRegions&&t.addDefine("CLIPPING_PLANES_UNION",void 0,pe.FRAGMENT)),e._depthTest&&t.addDefine("DEPTH_TEST",void 0,pe.FRAGMENT),d==="BOX"?t.addFragmentLines([kM,vM,RE]):d==="CYLINDER"?t.addFragmentLines([QM,eR,UM,RE]):d==="ELLIPSOID"&&t.addFragmentLines([OM,eR,DM,RE]),t.addFragmentLines([NM]);let u=e._shape,h=u.shaderDefines;for(let f in h)if(h.hasOwnProperty(f)){let b=h[f];l(b)&&(b=b===!0?void 0:b,t.addDefine(f,b,pe.FRAGMENT))}let p=u.shaderMaximumIntersectionsLength;s>0&&(t.addDefine("CLIPPING_PLANES_INTERSECTION_INDEX",p,pe.FRAGMENT),s===1?p+=1:r.unionClippingRegions?p+=2:p+=1),e._depthTest&&(t.addDefine("DEPTH_INTERSECTION_INDEX",p,pe.FRAGMENT),p+=1),t.addDefine("INTERSECTION_COUNT",p,pe.FRAGMENT),(!m.equals(e.paddingBefore,m.ZERO)||!m.equals(e.paddingAfter,m.ZERO))&&t.addDefine("PADDING",void 0,pe.FRAGMENT),e._useLogDepth&&t.addDefine("LOG_DEPTH_READ_ONLY",void 0,pe.FRAGMENT);let A=e._traversal;t.addDefine("SAMPLE_COUNT",`${A._sampleCount}`,pe.FRAGMENT)}var JM=nRt;var $Ze=new M;function iRt(e,t){let n=new JM(e);BM(n,e);let{shaderBuilder:i,clippingPlanes:o,clippingPlanesLength:r,renderBoundPlanes:s,renderBoundPlanesLength:a}=n;if(r>0){let S="getClippingPlane",I=`vec4 ${S}(highp sampler2D packedPlanes, int planeNumber)`,R=ls.getTextureResolution(o,t,$Ze),V=eRe(R);i.addFunction(S,I,pe.FRAGMENT),i.addFunctionLines(S,[V])}if(a>0){let S="getBoundPlane",I=`vec4 ${S}(highp sampler2D packedPlanes, int planeNumber)`,R=Gb.getTextureResolution(s,t,$Ze),V=eRe(R);i.addFunction(S,I,pe.FRAGMENT),i.addFunctionLines(S,[V])}let c=i.clone();c.addDefine("PICKING",void 0,pe.FRAGMENT);let d=i.clone();d.addDefine("PICKING_VOXEL",void 0,pe.FRAGMENT);let u=i.buildShaderProgram(t),h=c.buildShaderProgram(t),p=d.buildShaderProgram(t),A=Qe.fromCache({cull:{enabled:!0,face:wi.BACK},depthTest:{enabled:!1},depthMask:!1,blending:ln.PRE_MULTIPLIED_ALPHA_BLEND}),f=t.getViewportQuadVertexArray(),b=e._depthTest,C=new ot({vertexArray:f,primitiveType:We.TRIANGLES,renderState:A,shaderProgram:u,uniformMap:n.uniformMap,modelMatrix:e._compoundModelMatrix,pass:Ge.VOXELS,executeInClosestFrustum:!0,owner:this,cull:b,occlude:b}),T=ot.shallowClone(C,new ot);T.shaderProgram=h,T.pickOnly=!0;let E=ot.shallowClone(C,new ot);if(E.shaderProgram=p,E.pickOnly=!0,l(e._drawCommand)){let S=e._drawCommand;S.shaderProgram=S.shaderProgram&&S.shaderProgram.destroy()}if(l(e._drawCommandPick)){let S=e._drawCommandPick;S.shaderProgram=S.shaderProgram&&S.shaderProgram.destroy()}if(l(e._drawCommandPickVoxel)){let S=e._drawCommandPickVoxel;S.shaderProgram=S.shaderProgram&&S.shaderProgram.destroy()}e._drawCommand=C,e._drawCommandPick=T,e._drawCommandPickVoxel=E}function eRe(e){let t=e.x,n=e.y,i=1/t,o=1/n,r=`${i}`;r.indexOf(".")===-1&&(r+=".0");let s=`${o}`;return s.indexOf(".")===-1&&(s+=".0"),`int pixY = planeNumber / ${t};
int pixX = planeNumber - (pixY * ${t});
// Sample from center of pixel
float u = (float(pixX) + 0.5) * ${r};
float v = (float(pixY) + 0.5) * ${s};
return texture(packedPlanes, vec2(u, v));`}var KM=iRt;var Wuo=y(x(),1);var uuo=y(x(),1),oRt={FLOAT:"float",VEC2:"vec2",VEC3:"vec3",VEC4:"vec4",INT:"int",INT_VEC2:"ivec2",INT_VEC3:"ivec3",INT_VEC4:"ivec4",BOOL:"bool",BOOL_VEC2:"bvec2",BOOL_VEC3:"bvec3",BOOL_VEC4:"bvec4",MAT2:"mat2",MAT3:"mat3",MAT4:"mat4",SAMPLER_2D:"sampler2D",SAMPLER_CUBE:"samplerCube"},tR=Object.freeze(oRt);var Tuo=y(x(),1);function nR(){this._defaultTexture=void 0,this._textures={},this._loadedImages=[],this._lastUpdatedFrame=-1}nR.prototype.getTexture=function(e){return this._textures[e]};function rRt(e,t,n){n.resource.fetchImage().then(function(i){e._loadedImages.push({id:t,image:i,textureUniform:n})}).catch(function(){let i=e._textures[t];l(i)&&i!==e._defaultTexture&&i.destroy(),e._textures[t]=e._defaultTexture})}nR.prototype.loadTexture2D=function(e,t){l(t.typedArray)?this._loadedImages.push({id:e,textureUniform:t}):rRt(this,e,t)};function sRt(e,t,n){let{id:i,textureUniform:o,image:r}=t,s=n.webgl2?ez(o,r,n):aRt(o,r,n),a=e._textures[i];l(a)&&a!==n.defaultTexture&&a.destroy(),e._textures[i]=s}function ez(e,t,n){let{typedArray:i,sampler:o}=e,r=l(i)?nRe(e,n):new Lt({context:n,source:t,sampler:o});return tRe(o)&&r.generateMipmap(),r}function aRt(e,t,n){let{typedArray:i,sampler:o}=e,r=tRe(o),s=o.wrapS===gn.REPEAT||o.wrapS===gn.MIRRORED_REPEAT||o.wrapT===gn.REPEAT||o.wrapT===gn.MIRRORED_REPEAT,{width:a,height:c}=l(i)?e:t,d=[a,c].every(L.isPowerOfTwo);if((r||s)&&!d)if(l(i)){if(e.pixelDatatype===Oe.UNSIGNED_BYTE){let h=VX(i,a,c),p=y0(h);return ez({sampler:o},p,n)}}else{let h=y0(t);return ez(e,h,n)}else return ez(e,t,n);return r?console.warn("Texture requires resizing for mipmaps but pixelDataType cannot be resized. The texture may be rendered incorrectly."):s&&console.warn("Texture requires resizing for wrapping but pixelDataType cannot be resized. The texture may be rendered incorrectly."),nRe(e,n)}function tRe(e){return[zt.NEAREST_MIPMAP_NEAREST,zt.NEAREST_MIPMAP_LINEAR,zt.LINEAR_MIPMAP_NEAREST,zt.LINEAR_MIPMAP_LINEAR].includes(e.minificationFilter)}function nRe(e,t){let{pixelFormat:n,pixelDatatype:i,width:o,height:r,typedArray:s,sampler:a}=e;return new Lt({context:t,pixelFormat:n,pixelDatatype:i,source:{arrayBufferView:s,width:o,height:r},sampler:a,flipY:!1})}nR.prototype.update=function(e){if(e.frameNumber===this._lastUpdatedFrame)return;this._lastUpdatedFrame=e.frameNumber;let t=e.context;this._defaultTexture=t.defaultTexture;let n=this._loadedImages;for(let i=0;i<n.length;i++){let o=n[i];sRt(this,o,t)}n.length=0};nR.prototype.isDestroyed=function(){return!1};nR.prototype.destroy=function(){let e=this._textures;for(let t in e)if(e.hasOwnProperty(t)){let n=e[t];n!==this._defaultTexture&&n.destroy()}return he(this)};var jM=nR;function qM(e){e=e??Q.EMPTY_OBJECT,this.mode=e.mode??fg.MODIFY_MATERIAL,this.lightingModel=e.lightingModel,this.uniforms=e.uniforms??Q.EMPTY_OBJECT,this.varyings=e.varyings??Q.EMPTY_OBJECT,this.vertexShaderText=e.vertexShaderText,this.fragmentShaderText=e.fragmentShaderText,this.translucencyMode=e.translucencyMode??w0.INHERIT,this._textureManager=new jM,this._defaultTexture=void 0,this.uniformMap=cRt(this),this.usedVariablesVertex={attributeSet:{},featureIdSet:{},metadataSet:{}},this.usedVariablesFragment={attributeSet:{},featureIdSet:{},metadataSet:{},materialSet:{}},uRt(this),mRt(this)}function cRt(e){let t=e.uniforms,n={};for(let i in t)if(t.hasOwnProperty(i)){let o=t[i];o.type===tR.SAMPLER_2D?(e._textureManager.loadTexture2D(i,o.value),n[i]=lRt(e,i)):n[i]=dRt(e,i)}return n}function lRt(e,t){return function(){return e._textureManager.getTexture(t)??e._defaultTexture}}function dRt(e,t){return function(){return e.uniforms[t].value}}function VE(e,t,n){let i;for(;(i=t.exec(e))!==null;){let o=i[1];n[o]=!0}}function uRt(e){let t=/[vf]sInput\.attributes\.(\w+)/g,n=/[vf]sInput\.featureIds\.(\w+)/g,i=/[vf]sInput\.(?:metadata|metadataClass|metadataStatistics)\.(\w+)/g,o,r=e.vertexShaderText;l(r)&&(o=e.usedVariablesVertex.attributeSet,VE(r,t,o),o=e.usedVariablesVertex.featureIdSet,VE(r,n,o),o=e.usedVariablesVertex.metadataSet,VE(r,i,o));let s=e.fragmentShaderText;if(l(s)){o=e.usedVariablesFragment.attributeSet,VE(s,t,o),o=e.usedVariablesFragment.featureIdSet,VE(s,n,o),o=e.usedVariablesFragment.metadataSet,VE(s,i,o);let a=/material\.(\w+)/g,c=e.usedVariablesFragment.materialSet;VE(s,a,c)}}function iRe(e){let t=/^.*MC$/,n=/^.*WC$/,i=/^.*EC$/;return t.test(e)?`${e} (model coordinates)`:n.test(e)?`${e} (Cartesian world coordinates)`:i.test(e)?`${e} (eye coordinates)`:e}function ml(e,t,n,i){if(e.hasOwnProperty(t)){let o=`${iRe(t)} is not available in the ${i} shader. Did you mean ${iRe(n)} instead?`;throw new fe(o)}}function mRt(e){let t=e.usedVariablesVertex.attributeSet;ml(t,"position","positionMC","vertex"),ml(t,"normal","normalMC","vertex"),ml(t,"tangent","tangentMC","vertex"),ml(t,"bitangent","bitangentMC","vertex"),ml(t,"positionWC","positionMC","vertex"),ml(t,"positionEC","positionMC","vertex"),ml(t,"normalEC","normalMC","vertex"),ml(t,"tangentEC","tangentMC","vertex"),ml(t,"bitangentEC","bitangentMC","vertex");let n=e.usedVariablesFragment.attributeSet;ml(n,"position","positionEC","fragment"),ml(n,"normal","normalEC","fragment"),ml(n,"tangent","tangentEC","fragment"),ml(n,"bitangent","bitangentEC","fragment"),ml(n,"normalMC","normalEC","fragment"),ml(n,"tangentMC","tangentEC","fragment"),ml(n,"bitangentMC","bitangentEC","fragment")}qM.prototype.setUniform=function(e,t){let n=this.uniforms[e];n.type===tR.SAMPLER_2D?this._textureManager.loadTexture2D(e,t):l(t.clone)?n.value=t.clone(n.value):n.value=t};qM.prototype.update=function(e){this._defaultTexture=e.context.defaultTexture,this._textureManager.update(e)};qM.prototype.isDestroyed=function(){return!1};qM.prototype.destroy=function(){this._textureManager=this._textureManager&&this._textureManager.destroy(),he(this)};var GE=qM;var Muo=y(x(),1);function Lb(e){let{loader:t,metadata:n}=e;this._loader=t,this._metadata=n,this._resourcesLoaded=!1,this._ready=!1}Object.defineProperties(Lb.prototype,{ready:{get:function(){return this._ready}},metadata:{get:function(){return this._metadata}}});Lb.fromMetadataArray=function(e){return new Lb({metadata:e})};Lb.fromGltf=async function(e){let t=new uu({gltfResource:e,releaseGltfJson:!1,loadAttributesAsTypedArray:!0});try{await t.load()}catch(n){throw t.destroy(),n}return new Lb({loader:t})};Lb.prototype.update=function(e,t){let n=this._loader;if(!this._ready){if(t.afterRender.push(()=>!0),!l(n)){this._ready=!0;return}if(this._resourcesLoaded){let{structuralMetadata:i,scene:o}=n.components,{attributes:r}=o.nodes[0].primitives[0];this._metadata=hRt(r,i,e),this._ready=!0;return}this._resourcesLoaded=n.process(t)}};function hRt(e,t,n){let{className:i,names:o,types:r,componentTypes:s}=n.provider,a=t.propertyAttributes.find(u=>u.class.id===i),{properties:c}=a,d=new Array(o.length);for(let u=0;u<e.length;u++){let h=c[o[u]].attribute,p=e.find(C=>C.name===h);if(!l(p))continue;let A=Yt.toComponentDatatype(s[u]),f=St.getComponentCount(r[u]),b=p.count*f;d[u]=H.createArrayBufferView(A,p.typedArray.buffer,p.typedArray.byteOffset+p.byteOffset,b)}return d}Lb.prototype.isDestroyed=function(){return!1};Lb.prototype.destroy=function(){return this._loader=this._loader&&this._loader.destroy(),he(this)};var LE=Lb;var Zmo=y(x(),1);var Kuo=y(x(),1);function hl(){this._orientedBoundingBox=new nn,this._boundingSphere=new ue,this._boundTransform=new F,this._shapeTransform=new F,this._minBounds=hl.DefaultMinBounds.clone(),this._maxBounds=hl.DefaultMaxBounds.clone(),this._renderMinBounds=hl.DefaultMinBounds.clone(),this._renderMaxBounds=hl.DefaultMaxBounds.clone();let{DefaultMinBounds:e,DefaultMaxBounds:t}=hl,n=[new zs(m.negate(m.UNIT_X,new m),e.x),new zs(m.negate(m.UNIT_Y,new m),e.y),new zs(m.negate(m.UNIT_Z,new m),e.z),new zs(m.UNIT_X,-t.x),new zs(m.UNIT_Y,-t.y),new zs(m.UNIT_Z,-t.z)];this._renderBoundPlanes=new Gb({planes:n}),this._shaderUniforms={boxEcToXyz:new $,boxLocalToShapeUvScale:new m,boxLocalToShapeUvTranslate:new m},this._shaderDefines={BOX_INTERSECTION_INDEX:void 0},this._shaderMaximumIntersectionsLength=0}Object.defineProperties(hl.prototype,{orientedBoundingBox:{get:function(){return this._orientedBoundingBox}},renderBoundPlanes:{get:function(){return this._renderBoundPlanes}},boundingSphere:{get:function(){return this._boundingSphere}},boundTransform:{get:function(){return this._boundTransform}},shapeTransform:{get:function(){return this._shapeTransform}},shaderUniforms:{get:function(){return this._shaderUniforms}},shaderDefines:{get:function(){return this._shaderDefines}},shaderMaximumIntersectionsLength:{get:function(){return this._shaderMaximumIntersectionsLength}}});var fRt=new m,pRt=new m,ARt=new $,gRt=new m,bRt=new m;hl.prototype.update=function(e,t,n,i,o){i=i??t.clone(gRt),o=o??n.clone(bRt),t=m.clone(t,this._minBounds),n=m.clone(n,this._maxBounds);let r=m.clamp(t,i,o,this._renderMinBounds),s=m.clamp(n,i,o,this._renderMaxBounds),a=F.getScale(e,pRt);if(r.x>s.x||r.y>s.y||r.z>s.z||(r.x===s.x)+(r.y===s.y)+(r.z===s.z)>=2||a.x===0||a.y===0||a.z===0)return!1;let c=this._renderBoundPlanes;c.get(0).distance=r.x,c.get(1).distance=r.y,c.get(2).distance=r.z,c.get(3).distance=-s.x,c.get(4).distance=-s.y,c.get(5).distance=-s.z,this._shapeTransform=F.clone(e,this._shapeTransform),this._orientedBoundingBox=Ate(r,s,this._shapeTransform,this._orientedBoundingBox),this._boundTransform=F.fromRotationTranslation(this._orientedBoundingBox.halfAxes,this._orientedBoundingBox.center,this._boundTransform),this._boundingSphere=ue.fromOrientedBoundingBox(this._orientedBoundingBox,this._boundingSphere);let d=this._shaderUniforms,u=this._shaderDefines;for(let b in u)u.hasOwnProperty(b)&&(u[b]=void 0);let h=0;u.BOX_INTERSECTION_INDEX=h,h+=1;let p=t,A=n,f=m.fromElements(fte(p.x,A.x),fte(p.y,A.y),fte(p.z,A.z),d.boxLocalToShapeUvScale);return d.boxLocalToShapeUvTranslate=m.negate(m.multiplyComponents(f,p,d.boxLocalToShapeUvTranslate),d.boxLocalToShapeUvTranslate),this._shaderMaximumIntersectionsLength=h,!0};function fte(e,t){return L.equalsEpsilon(e,t,L.EPSILON7)?1:1/(t-e)}var yRt=new F;hl.prototype.updateViewTransforms=function(e){let t=this._shaderUniforms,n=F.inverse(this._shapeTransform,yRt),i=F.getMatrix3(n,t.boxEcToXyz),o=e.context.uniformState.inverseViewRotation;$.multiply(i,o,t.boxEcToXyz)};hl.prototype.convertLocalToShapeUvSpace=function(e,t){let{boxLocalToShapeUvScale:n,boxLocalToShapeUvTranslate:i}=this._shaderUniforms;return m.add(m.multiplyComponents(e,n,t),i,t)};var tz=new m,pte=new m;hl.prototype.computeOrientedBoundingBoxForTile=function(e,t,n,i,o){let r=this._minBounds,s=this._maxBounds,a=1/Math.pow(2,e),c=m.fromElements(L.lerp(r.x,s.x,a*t),L.lerp(r.y,s.y,a*n),L.lerp(r.z,s.z,a*i),tz),d=m.fromElements(L.lerp(r.x,s.x,a*(t+1)),L.lerp(r.y,s.y,a*(n+1)),L.lerp(r.z,s.z,a*(i+1)),pte);return Ate(c,d,this._shapeTransform,o)};var oRe=new m;hl.prototype.computeOrientedBoundingBoxForSample=function(e,t,n,i){let o=1/Math.pow(2,e.level),r=m.divideComponents(m.ONE,t,oRe),s=m.multiplyByScalar(r,o,oRe),a=m.multiplyByScalar(m.fromElements(e.x+n.x,e.y+n.y,e.z+n.z,tz),o,tz),c=m.add(a,s,pte),d=this._minBounds,u=this._maxBounds,h=m.fromElements(L.lerp(d.x,u.x,a.x),L.lerp(d.y,u.y,a.y),L.lerp(d.z,u.z,a.z),tz),p=m.fromElements(L.lerp(d.x,u.x,c.x),L.lerp(d.y,u.y,c.y),L.lerp(d.z,u.z,c.z),pte);return Ate(h,p,this._shapeTransform,i)};hl.DefaultMinBounds=Object.freeze(new m(-1,-1,-1));hl.DefaultMaxBounds=Object.freeze(new m(1,1,1));var rRe=new m;function Ate(e,t,n,i){let o=hl.DefaultMinBounds,r=hl.DefaultMaxBounds;if(m.equals(e,o)&&m.equals(t,r))i.center=F.getTranslation(n,i.center),i.halfAxes=F.getMatrix3(n,i.halfAxes);else{let a=F.getScale(n,rRe),c=m.midpoint(e,t,fRt);i.center=F.multiplyByPoint(n,c,i.center),a=m.fromElements(a.x*.5*(t.x-e.x),a.y*.5*(t.y-e.y),a.z*.5*(t.z-e.z),rRe);let d=F.getRotation(n,ARt);i.halfAxes=$.setScale(d,a,i.halfAxes)}return i}var WE=hl;var cmo=y(x(),1);function Ju(){this._orientedBoundingBox=new nn,this._boundingSphere=new ue,this._boundTransform=new F,this._shapeTransform=new F,this._minBounds=Ju.DefaultMinBounds.clone(),this._maxBounds=Ju.DefaultMaxBounds.clone();let{DefaultMinBounds:e,DefaultMaxBounds:t}=Ju,n=[new zs(m.negate(m.UNIT_Z,new m),e.z),new zs(m.UNIT_Z,-t.z)];this._renderBoundPlanes=new Gb({planes:n}),this._shaderUniforms={cameraShapePosition:new m,cylinderEcToRadialTangentUp:new $,cylinderRenderRadiusMinMax:new M,cylinderRenderAngleMinMax:new M,cylinderLocalToShapeUvRadius:new M,cylinderLocalToShapeUvAngle:new M,cylinderLocalToShapeUvHeight:new M,cylinderShapeUvAngleRangeOrigin:0},this._shaderDefines={CYLINDER_HAS_SHAPE_BOUNDS_ANGLE:void 0,CYLINDER_HAS_RENDER_BOUNDS_RADIUS_MIN:void 0,CYLINDER_HAS_RENDER_BOUNDS_RADIUS_FLAT:void 0,CYLINDER_HAS_RENDER_BOUNDS_ANGLE:void 0,CYLINDER_HAS_RENDER_BOUNDS_ANGLE_RANGE_EQUAL_ZERO:void 0,CYLINDER_HAS_RENDER_BOUNDS_ANGLE_RANGE_UNDER_HALF:void 0,CYLINDER_HAS_RENDER_BOUNDS_ANGLE_RANGE_OVER_HALF:void 0,CYLINDER_INTERSECTION_INDEX_RADIUS_MAX:void 0,CYLINDER_INTERSECTION_INDEX_RADIUS_MIN:void 0,CYLINDER_INTERSECTION_INDEX_ANGLE:void 0},this._shaderMaximumIntersectionsLength=0}Object.defineProperties(Ju.prototype,{orientedBoundingBox:{get:function(){return this._orientedBoundingBox}},renderBoundPlanes:{get:function(){return this._renderBoundPlanes}},boundingSphere:{get:function(){return this._boundingSphere}},boundTransform:{get:function(){return this._boundTransform}},shapeTransform:{get:function(){return this._shapeTransform}},shaderUniforms:{get:function(){return this._shaderUniforms}},shaderDefines:{get:function(){return this._shaderDefines}},shaderMaximumIntersectionsLength:{get:function(){return this._shaderMaximumIntersectionsLength}}});var xRt=new m,CRt=new m,TRt=new m,ERt=new m,SRt=new m,_Rt=new F,IRt=new m,sRe=new M;Ju.prototype.update=function(e,t,n,i,o){i=i??t.clone(CRt),o=o??n.clone(TRt),t=m.clone(t,this._minBounds),n=m.clone(n,this._maxBounds);let{DefaultMinBounds:r,DefaultMaxBounds:s}=Ju,a=s.y-r.y,c=.5*a,d=L.EPSILON10,u=L.EPSILON10;t.x=Math.max(0,t.x),n.x=Math.max(0,n.x),t.y=L.negativePiToPi(t.y),n.y=L.negativePiToPi(n.y),i.y=L.negativePiToPi(i.y),o.y=L.negativePiToPi(o.y);let h=m.maximumByComponent(t,i,ERt),p=m.minimumByComponent(n,o,SRt),A=F.getScale(e,xRt);if(p.x===0||h.x>p.x||h.z>p.z||L.equalsEpsilon(A.x,0,void 0,d)||L.equalsEpsilon(A.y,0,void 0,d)||L.equalsEpsilon(A.z,0,void 0,d))return!1;let f=this._renderBoundPlanes;f.get(0).distance=h.z,f.get(1).distance=-p.z,this._shapeTransform=F.clone(e,this._shapeTransform),this._orientedBoundingBox=yte(h,p,this._shapeTransform,this._orientedBoundingBox),this._boundTransform=F.fromRotationTranslation(this._orientedBoundingBox.halfAxes,this._orientedBoundingBox.center,this._boundTransform),this._boundingSphere=ue.fromOrientedBoundingBox(this._orientedBoundingBox,this._boundingSphere);let b=n.y<t.y,C=n.y-t.y+b*a,T=p.y<h.y,E=p.y-h.y+T*a,S=E>=c-u&&E<a-u,I=E>u&&E<c-u,R=E<=u,V=S||I||R,W=this._shaderUniforms,B=this._shaderDefines;for(let Y in B)B.hasOwnProperty(Y)&&(B[Y]=void 0);let N=0;B.CYLINDER_INTERSECTION_INDEX_RADIUS_MAX=N,N+=1,C<a-u&&(B.CYLINDER_HAS_SHAPE_BOUNDS_ANGLE=!0),h.x!==r.x&&(B.CYLINDER_HAS_RENDER_BOUNDS_RADIUS_MIN=!0,B.CYLINDER_INTERSECTION_INDEX_RADIUS_MIN=N,N+=1),W.cylinderRenderRadiusMinMax=M.fromElements(h.x,p.x,W.cylinderRenderRadiusMinMax),h.x===p.x&&(B.CYLINDER_HAS_RENDER_BOUNDS_RADIUS_FLAT=!0);let P=n.x-t.x,g=0,_=1;P!==0&&(g=1/P,_=-t.x*g),W.cylinderLocalToShapeUvRadius=M.fromElements(g,_,W.cylinderLocalToShapeUvRadius);let Z=n.z-t.z,G=0,w=1;Z!==0&&(G=1/Z,w=-t.z*G),W.cylinderLocalToShapeUvHeight=M.fromElements(G,w,W.cylinderLocalToShapeUvHeight),V&&(B.CYLINDER_HAS_RENDER_BOUNDS_ANGLE=!0,B.CYLINDER_INTERSECTION_INDEX_ANGLE=N,S?(B.CYLINDER_HAS_RENDER_BOUNDS_ANGLE_RANGE_UNDER_HALF=!0,N+=1):I?(B.CYLINDER_HAS_RENDER_BOUNDS_ANGLE_RANGE_OVER_HALF=!0,N+=2):R&&(B.CYLINDER_HAS_RENDER_BOUNDS_ANGLE_RANGE_EQUAL_ZERO=!0,N+=2),W.cylinderRenderAngleMinMax=M.fromElements(h.y,p.y,W.cylinderRenderAngleMinMax));let X=(t.y-r.y)/a,k=(n.y-r.y)/a,v=1-C/a,D=(k+.5*v)%1;if(W.cylinderShapeUvAngleRangeOrigin=D,C<=u)W.cylinderLocalToShapeUvAngle=M.fromElements(0,1,W.cylinderLocalToShapeUvAngle);else{let Y=a/C,O=X-D,J=-Y*(O-Math.floor(O));W.cylinderLocalToShapeUvAngle=M.fromElements(Y,J,W.cylinderLocalToShapeUvAngle)}return this._shaderMaximumIntersectionsLength=N,!0};var ZRt=new $,RRt=new $,VRt=new F;Ju.prototype.updateViewTransforms=function(e){let t=this._shaderUniforms,n=F.inverse(this._shapeTransform,_Rt),i=F.multiplyByPoint(n,e.camera.positionWC,IRt);t.cameraShapePosition=m.fromElements(M.magnitude(i),Math.atan2(i.y,i.x),i.z,t.cameraShapePosition);let o=M.normalize(M.fromCartesian3(i,sRe),sRe),r=$.fromRowMajorArray([o.x,o.y,0,-o.y,o.x,0,0,0,1],ZRt),s=e.context.uniformState.inverseView,a=F.multiplyTransformation(n,s,VRt),c=F.getMatrix3(a,RRt);t.cylinderEcToRadialTangentUp=$.multiply(r,c,t.cylinderEcToRadialTangentUp)};Ju.prototype.convertLocalToShapeUvSpace=function(e,t){let n=Math.hypot(e.x,e.y),i=Math.atan2(e.y,e.x),o=e.z,{cylinderLocalToShapeUvRadius:r,cylinderLocalToShapeUvAngle:s,cylinderShapeUvAngleRangeOrigin:a,cylinderLocalToShapeUvHeight:c}=this._shaderUniforms;return n=n*r.x+r.y,i=(i+Math.PI)/(2*Math.PI),i-=a,i=i-Math.floor(i),i=i*s.x+s.y,o=o*c.x+c.y,m.fromElements(n,i,o,t)};var nz=new m,bte=new m;Ju.prototype.computeOrientedBoundingBoxForTile=function(e,t,n,i,o){let r=this._minBounds,s=this._maxBounds,a=1/Math.pow(2,e),c=m.fromElements(L.lerp(r.x,s.x,t*a),L.lerp(r.y,s.y,n*a),L.lerp(r.z,s.z,i*a),nz),d=m.fromElements(L.lerp(r.x,s.x,(t+1)*a),L.lerp(r.y,s.y,(n+1)*a),L.lerp(r.z,s.z,(i+1)*a),bte);return yte(c,d,this._shapeTransform,o)};var aRe=new m;Ju.prototype.computeOrientedBoundingBoxForSample=function(e,t,n,i){let o=1/Math.pow(2,e.level),r=m.divideComponents(m.ONE,t,aRe),s=m.multiplyByScalar(r,o,aRe),a=m.multiplyByScalar(m.fromElements(e.x+n.x,e.y+n.y,e.z+n.z,nz),o,nz),c=m.add(a,s,bte),d=this._minBounds,u=this._maxBounds,h=m.fromElements(L.lerp(d.x,u.x,a.x),L.lerp(d.y,u.y,a.y),L.lerp(d.z,u.z,a.z),nz),p=m.fromElements(L.lerp(d.x,u.x,c.x),L.lerp(d.y,u.y,c.y),L.lerp(d.z,u.z,c.z),bte);return yte(h,p,this._shapeTransform,i)};Ju.DefaultMinBounds=Object.freeze(new m(0,-L.PI,-1));Ju.DefaultMaxBounds=Object.freeze(new m(1,+L.PI,1));var GRt=5,LRt=new Array(GRt),WRt=new m,FRt=new $,BRt=new F,wRt=new F,NRt=new F,gte=new F,PRt=new m,XRt=new m,YRt=new m,lRe=new Array(8);for(let e=0;e<8;e++)lRe[e]=new m;function cRe(e,t,n){return Math.abs(re.dot(e,t))<n}function MRt(e){let t=F.getColumn(e,0,PRt),n=F.getColumn(e,1,XRt),i=F.getColumn(e,2,YRt),o=L.EPSILON4;return cRe(t,n,o)&&cRe(n,i,o)}function vRt(e,t){let n=lRe;m.fromElements(-.5,-.5,-.5,n[0]),m.fromElements(-.5,-.5,.5,n[1]),m.fromElements(-.5,.5,-.5,n[2]),m.fromElements(-.5,.5,.5,n[3]),m.fromElements(.5,-.5,-.5,n[4]),m.fromElements(.5,-.5,.5,n[5]),m.fromElements(.5,.5,-.5,n[6]),m.fromElements(.5,.5,.5,n[7]);for(let i=0;i<8;++i)F.multiplyByPoint(e,n[i],n[i]);return nn.fromPoints(n,t)}var URt=new m;function yte(e,t,n,i){let o=e.x,r=t.x,s=e.y,a=t.y<s?t.y+L.TWO_PI:t.y,c=e.z,d=t.z,u=a-s,h=s+u*.5,p=LRt,A=0;p[A++]=s,p[A++]=a,p[A++]=h,u>L.PI&&(p[A++]=h-L.PI_OVER_TWO,p[A++]=h+L.PI_OVER_TWO);let f=Number.POSITIVE_INFINITY,b=Number.POSITIVE_INFINITY,C=Number.NEGATIVE_INFINITY,T=Number.NEGATIVE_INFINITY;for(let X=0;X<A;++X){let k=p[X]-h,v=Math.cos(k),D=Math.sin(k),Y=v*o,O=D*o,J=v*r,te=D*r;f=Math.min(f,Y,J),b=Math.min(b,O,te),C=Math.max(C,Y,J),T=Math.max(T,O,te)}let E=C-f,S=T-b,I=d-c,R=(f+C)*.5,V=(b+T)*.5,W=(c+d)*.5,B=m.fromElements(R,V,W,WRt),N=$.fromRotationZ(h,FRt),P=m.fromElements(E,S,I,URt),g=F.fromScale(P,NRt),_=F.fromRotation(N,wRt),Z=F.fromTranslation(B,BRt),G=F.multiplyTransformation(_,F.multiplyTransformation(Z,g,gte),gte),w=F.multiplyTransformation(n,G,gte);return MRt(w)?nn.fromTransformation(w,i):vRt(w,i)}var FE=Ju;var Tmo=y(x(),1);function lh(){this._orientedBoundingBox=new nn,this._boundingSphere=new ue,this._boundTransform=new F,this._shapeTransform=new F,this._rectangle=new de,this._minimumHeight=lh.DefaultMinBounds.z,this._maximumHeight=lh.DefaultMaxBounds.z,this._ellipsoid=new ie,this._translation=new m,this._rotation=new $,this._shaderUniforms={cameraPositionCartographic:new m,ellipsoidEcToEastNorthUp:new $,ellipsoidRadii:new m,eccentricitySquared:0,evoluteScale:new M,ellipsoidCurvatureAtLatitude:new M,ellipsoidInverseRadiiSquared:new m,ellipsoidRenderLongitudeMinMax:new M,ellipsoidShapeUvLongitudeRangeOrigin:0,ellipsoidShapeUvLongitudeMinMaxMid:new m,ellipsoidLocalToShapeUvLongitude:new M,ellipsoidLocalToShapeUvLatitude:new M,ellipsoidRenderLatitudeSinMinMax:new M,ellipsoidInverseHeightDifference:0,clipMinMaxHeight:new M},this._shaderDefines={ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE:void 0,ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE_RANGE_EQUAL_ZERO:void 0,ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE_RANGE_UNDER_HALF:void 0,ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE_RANGE_OVER_HALF:void 0,ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE_MIN_DISCONTINUITY:void 0,ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE_MAX_DISCONTINUITY:void 0,ELLIPSOID_HAS_SHAPE_BOUNDS_LONGITUDE:void 0,ELLIPSOID_HAS_SHAPE_BOUNDS_LONGITUDE_MIN_MAX_REVERSED:void 0,ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MAX_UNDER_HALF:void 0,ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MAX_EQUAL_HALF:void 0,ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MAX_OVER_HALF:void 0,ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MIN_UNDER_HALF:void 0,ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MIN_EQUAL_HALF:void 0,ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MIN_OVER_HALF:void 0,ELLIPSOID_HAS_SHAPE_BOUNDS_LATITUDE:void 0,ELLIPSOID_INTERSECTION_INDEX_LONGITUDE:void 0,ELLIPSOID_INTERSECTION_INDEX_LATITUDE_MAX:void 0,ELLIPSOID_INTERSECTION_INDEX_LATITUDE_MIN:void 0,ELLIPSOID_INTERSECTION_INDEX_HEIGHT_MAX:void 0,ELLIPSOID_INTERSECTION_INDEX_HEIGHT_MIN:void 0},this._shaderMaximumIntersectionsLength=0}Object.defineProperties(lh.prototype,{orientedBoundingBox:{get:function(){return this._orientedBoundingBox}},boundingSphere:{get:function(){return this._boundingSphere}},boundTransform:{get:function(){return this._boundTransform}},shapeTransform:{get:function(){return this._shapeTransform}},shaderUniforms:{get:function(){return this._shaderUniforms}},shaderDefines:{get:function(){return this._shaderDefines}},shaderMaximumIntersectionsLength:{get:function(){return this._shaderMaximumIntersectionsLength}}});var DRt=new m,kRt=new m,QRt=new m,ORt=new m,zRt=new m,HRt=new m,JRt=new m,KRt=new m,dRe=new m,uRe=new m,jRt=new de;lh.prototype.update=function(e,t,n,i,o){let{DefaultMinBounds:r,DefaultMaxBounds:s}=lh;i=i??r,o=o??s;let a=L.EPSILON10,c=L.EPSILON3,d=L.EPSILON10,u=L.EPSILON10,h=L.EPSILON3,p=F.getScale(e,KRt),A=m.clone(r,DRt);A.z=-m.minimumComponent(p);let f=m.clamp(t,A,s,kRt),b=m.clamp(n,A,s,QRt),C=m.clamp(i,A,s,ORt),T=m.clamp(o,A,s,zRt),E=m.maximumByComponent(f,C,HRt),S=m.minimumByComponent(b,T,JRt),I=m.add(p,m.fromElements(b.z,b.z,b.z,dRe),dRe),R=m.add(p,m.fromElements(S.z,S.z,S.z,uRe),uRe);if(E.y>S.y||E.y===s.y||S.y===r.y||E.z>S.z||L.equalsEpsilon(R,m.ZERO,void 0,a))return!1;this._rectangle=de.fromRadians(f.x,f.y,b.x,b.y),this._translation=F.getTranslation(e,this._translation),this._rotation=F.getRotation(e,this._rotation),this._ellipsoid=ie.fromCartesian3(p,this._ellipsoid),this._minimumHeight=f.z,this._maximumHeight=b.z;let V=de.fromRadians(E.x,E.y,S.x,S.y,jRt);this._orientedBoundingBox=xte(V,E.z,S.z,this._ellipsoid,this._translation,this._rotation,this._orientedBoundingBox),this._shapeTransform=F.fromRotationTranslation(this._rotation,this._translation,this._shapeTransform),this._boundTransform=F.fromRotationTranslation(this._orientedBoundingBox.halfAxes,this._orientedBoundingBox.center,this._boundTransform),this._boundingSphere=ue.fromOrientedBoundingBox(this._orientedBoundingBox,this._boundingSphere);let W=s.x-r.x,B=.5*W,N=S.x<E.x,P=S.x-E.x+N*W,g=P<=d,_=P>=B-d&&P<W-d,Z=P>d&&P<B-d,G=g||_||Z,w=b.x<f.x,X=b.x-f.x+w*W,k=X>B+d&&X<W-d,v=X>=B-d&&X<=B+d,D=X<B-d,Y=k||v||D,O=S.y<-h,J=S.y>=-h&&S.y<=+h,te=S.y>+h&&S.y<s.y-u,z=O||J||te,j=E.y>r.y+u&&E.y<-h,ee=E.y>=-h&&E.y<=+h,ge=E.y>+h,ye=j||ee||ge,ae=z||ye,Ce=b.y-f.y,Te=b.y<-h,Fe=b.y>=-h&&b.y<=+h,Ne=b.y>+h&&b.y<s.y-u,Pe=Te||Fe||Ne,Xe=f.y>r.y+u&&f.y<-h,st=f.y>=-h&&f.y<=+h,Ye=f.y>+h,at=Pe||(Xe||st||Ye),Je=this._shaderUniforms,lt=this._shaderDefines;for(let At in lt)lt.hasOwnProperty(At)&&(lt[At]=void 0);Je.ellipsoidRadii=m.clone(I,Je.ellipsoidRadii);let{x:ht,z:Rt}=Je.ellipsoidRadii,_e=Rt/ht;Je.eccentricitySquared=1-_e*_e,Je.evoluteScale=M.fromElements((ht*ht-Rt*Rt)/ht,(Rt*Rt-ht*ht)/Rt,Je.evoluteScale),Je.ellipsoidInverseRadiiSquared=m.divideComponents(m.ONE,m.multiplyComponents(Je.ellipsoidRadii,Je.ellipsoidRadii,Je.ellipsoidInverseRadiiSquared),Je.ellipsoidInverseRadiiSquared);let Re=0;lt.ELLIPSOID_INTERSECTION_INDEX_HEIGHT_MAX=Re,Re+=1,lt.ELLIPSOID_INTERSECTION_INDEX_HEIGHT_MIN=Re,Re+=1,Je.clipMinMaxHeight=M.fromElements(E.z-b.z,S.z-b.z,Je.clipMinMaxHeight);let jt=b.z-f.z;if(Je.ellipsoidInverseHeightDifference=1/jt,f.z===b.z&&(Je.ellipsoidInverseHeightDifference=0),G&&(lt.ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE=!0,lt.ELLIPSOID_INTERSECTION_INDEX_LONGITUDE=Re,_?(lt.ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE_RANGE_UNDER_HALF=!0,Re+=1):Z?(lt.ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE_RANGE_OVER_HALF=!0,Re+=2):g&&(lt.ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE_RANGE_EQUAL_ZERO=!0,Re+=2),Je.ellipsoidRenderLongitudeMinMax=M.fromElements(E.x,S.x,Je.ellipsoidRenderLongitudeMinMax)),Y){lt.ELLIPSOID_HAS_SHAPE_BOUNDS_LONGITUDE=!0;let At=(f.x-r.x)/W,kt=(b.x-r.x)/W,On=1-X/W,$e=(kt+.5*On)%1;if(Je.ellipsoidShapeUvLongitudeRangeOrigin=$e,b.x<f.x&&(lt.ELLIPSOID_HAS_SHAPE_BOUNDS_LONGITUDE_MIN_MAX_REVERSED=!0),X<=d)Je.ellipsoidLocalToShapeUvLongitude=M.fromElements(0,1,Je.ellipsoidLocalToShapeUvLongitude);else{let Qt=W/X,Bo=At-$e,no=-Qt*(Bo-Math.floor(Bo));Je.ellipsoidLocalToShapeUvLongitude=M.fromElements(Qt,no,Je.ellipsoidLocalToShapeUvLongitude)}}if(G){let At=L.equalsEpsilon(E.x,r.x,void 0,c),kt=L.equalsEpsilon(S.x,s.x,void 0,c);At&&(lt.ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE_MIN_DISCONTINUITY=!0),kt&&(lt.ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE_MAX_DISCONTINUITY=!0);let On=(f.x-r.x)/W,$e=(b.x-r.x)/W,uo=(S.x-r.x)/W,Qt=1-P/W,Bo=(uo+.5*Qt)%1;Je.ellipsoidShapeUvLongitudeMinMaxMid=m.fromElements(On,$e,Bo,Je.ellipsoidShapeUvLongitudeMinMaxMid)}if(ae&&(ye&&(lt.ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MIN=!0,lt.ELLIPSOID_INTERSECTION_INDEX_LATITUDE_MIN=Re,j?(lt.ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MIN_UNDER_HALF=!0,Re+=1):ee?(lt.ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MIN_EQUAL_HALF=!0,Re+=1):ge&&(lt.ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MIN_OVER_HALF=!0,Re+=2)),z&&(lt.ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MAX=!0,lt.ELLIPSOID_INTERSECTION_INDEX_LATITUDE_MAX=Re,O?(lt.ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MAX_UNDER_HALF=!0,Re+=2):J?(lt.ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MAX_EQUAL_HALF=!0,Re+=1):te&&(lt.ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MAX_OVER_HALF=!0,Re+=1)),Je.ellipsoidRenderLatitudeSinMinMax=M.fromElements(Math.sin(E.y),Math.sin(S.y),Je.ellipsoidRenderLatitudeSinMinMax)),at)if(lt.ELLIPSOID_HAS_SHAPE_BOUNDS_LATITUDE=!0,Ce<u)Je.ellipsoidLocalToShapeUvLatitude=M.fromElements(0,1,Je.ellipsoidLocalToShapeUvLatitude);else{let kt=(s.y-r.y)/Ce,On=(r.y-f.y)/Ce;Je.ellipsoidLocalToShapeUvLatitude=M.fromElements(kt,On,Je.ellipsoidLocalToShapeUvLatitude)}return this._shaderMaximumIntersectionsLength=Re,!0};var qRt=new Ae,$Rt=new m,eVt=new F,mRe=new $;lh.prototype.updateViewTransforms=function(e){let t=this._shaderUniforms,n=this._ellipsoid,i=e.camera.positionWC,o=n.cartesianToCartographic(i,qRt);m.fromElements(o.longitude,o.latitude,o.height,t.cameraPositionCartographic);let r=m.fromRadians(o.longitude,o.latitude,0,n,$Rt);t.ellipsoidCurvatureAtLatitude=n.getLocalCurvature(r,t.ellipsoidCurvatureAtLatitude);let s=bt.eastNorthUpToFixedFrame(r,n,eVt),a=F.getRotation(s,mRe),c=e.context.uniformState.viewRotation,d=$.multiply(c,a,mRe);t.ellipsoidEcToEastNorthUp=$.transpose(d,t.ellipsoidEcToEastNorthUp)};var yRe=new de;lh.prototype.computeOrientedBoundingBoxForTile=function(e,t,n,i,o){let r=1/Math.pow(2,e),s=t*r,a=(t+1)*r,c=n*r,d=(n+1)*r,u=i*r,h=(i+1)*r,p=de.subsection(this._rectangle,s,c,a,d,yRe),A=L.lerp(this._minimumHeight,this._maximumHeight,u),f=L.lerp(this._minimumHeight,this._maximumHeight,h);return xte(p,A,f,this._ellipsoid,this._translation,this._rotation,o)};var tVt=new M,nVt=new M,$M=new M,hRe=new M,fRe=new M,ev=new M;function iVt(e,t,n,i){let o=M.abs(e,tVt),r=M.fromElements(1/t.x,1/t.y,nVt),s=M.fromElements(Math.SQRT1_2,Math.SQRT1_2,$M),a=M.multiplyComponents(t,s,hRe),c=M.fromElements(n.x*s.x*s.x*s.x,n.y*s.y*s.y*s.y,fRe);for(let d=0;d<3;++d){let u=M.magnitude(M.subtract(a,c,ev)),h=M.normalize(M.subtract(o,c,ev),ev),p=M.multiplyByScalar(h,u,ev);s=M.multiplyComponents(M.add(p,c,$M),r,$M),s=M.normalize(M.clamp(s,M.ZERO,M.ONE,$M),$M),a=M.multiplyComponents(t,s,hRe),c=M.fromElements(n.x*s.x*s.x*s.x,n.y*s.y*s.y*s.y,fRe)}return m.fromElements(Math.sign(e.x)*a.x,Math.sign(e.y)*a.y,M.magnitude(M.subtract(a,c,ev)),i)}var oVt=new M,pRe=new M,rVt=new m,ARe=new M;lh.prototype.convertLocalToShapeUvSpace=function(e,t){let n=Math.atan2(e.y,e.x),{ellipsoidRadii:i,evoluteScale:o,ellipsoidInverseRadiiSquared:r,ellipsoidInverseHeightDifference:s,ellipsoidShapeUvLongitudeRangeOrigin:a,ellipsoidLocalToShapeUvLongitude:c,ellipsoidLocalToShapeUvLatitude:d}=this._shaderUniforms,u=Math.hypot(e.x,e.y),h=M.fromElements(u,e.z,pRe),p=iVt(h,M.fromElements(i.x,i.z,oVt),o,rVt),A=M.normalize(M.fromElements(p.x*r.x,p.y*r.z,ARe),ARe),f=Math.atan2(A.y,A.x),b=M.magnitude(h)<M.magnitude(p)?-1:1,C=M.subtract(h,p,pRe),T=b*M.magnitude(C),{ELLIPSOID_HAS_SHAPE_BOUNDS_LONGITUDE:E,ELLIPSOID_HAS_SHAPE_BOUNDS_LATITUDE:S}=this._shaderDefines;return n=(n+Math.PI)/(2*Math.PI),l(E)&&(n-=a,n=n-Math.floor(n),n=n*c.x+c.y),f=(f+Math.PI/2)/Math.PI,l(S)&&(f=f*d.x+d.y),T=1+T*s,m.fromElements(n,f,T,t)};var gRe=new m,bRe=new m,sVt=new m;lh.prototype.computeOrientedBoundingBoxForSample=function(e,t,n,i){let o=1/Math.pow(2,e.level),r=m.divideComponents(m.ONE,t,gRe),s=m.multiplyByScalar(r,o,gRe),a=m.multiplyByScalar(m.fromElements(e.x+n.x,e.y+n.y,e.z+n.z,bRe),o,bRe),c=m.add(a,s,sVt),d=de.subsection(this._rectangle,a.x,a.y,c.x,c.y,yRe),u=L.lerp(this._minimumHeight,this._maximumHeight,a.z),h=L.lerp(this._minimumHeight,this._maximumHeight,c.z);return xte(d,u,h,this._ellipsoid,this._translation,this._rotation,i)};function xte(e,t,n,i,o,r,s){return s=nn.fromRectangle(e,t,n,i,s),s.center=m.add(s.center,o,s.center),s.halfAxes=$.multiply(s.halfAxes,r,s.halfAxes),s}lh.DefaultMinBounds=Object.freeze(new m(-L.PI,-L.PI_OVER_TWO,-ie.WGS84.minimumRadius));lh.DefaultMaxBounds=Object.freeze(new m(L.PI,L.PI_OVER_TWO,10*ie.WGS84.maximumRadius));var BE=lh;var Ku={BOX:"BOX",ELLIPSOID:"ELLIPSOID",CYLINDER:"CYLINDER"};Ku.getMinBounds=function(e){switch(e){case Ku.BOX:return WE.DefaultMinBounds;case Ku.ELLIPSOID:return BE.DefaultMinBounds;case Ku.CYLINDER:return FE.DefaultMinBounds}};Ku.getMaxBounds=function(e){switch(e){case Ku.BOX:return WE.DefaultMaxBounds;case Ku.ELLIPSOID:return BE.DefaultMaxBounds;case Ku.CYLINDER:return FE.DefaultMaxBounds}};Ku.getShapeConstructor=function(e){switch(e){case Ku.BOX:return WE;case Ku.ELLIPSOID:return BE;case Ku.CYLINDER:return FE}};var Ac=Object.freeze(Ku);var xho=y(x(),1);var Vmo=y(x(),1),Cte=Object.freeze({UNLOADED:0,RECEIVING:1,PROCESSING:2,LOADED:3,FAILED:4,UNAVAILABLE:5});function tv(e,t){this.spatialNode=e,this.keyframe=t,this.state=Cte.UNLOADED,this.content=void 0,this.megatextureIndex=-1,this.priority=-Number.MAX_VALUE,this.highPriorityFrameNumber=-1}tv.prototype.unload=function(){this.content=this.content&&this.content.destroy(),this.spatialNode=void 0,this.state=Cte.UNLOADED,this.megatextureIndex=-1,this.priority=-Number.MAX_VALUE,this.highPriorityFrameNumber=-1};tv.priorityComparator=function(e,t){return e.priority-t.priority};tv.searchComparator=function(e,t){return e.keyframe-t.keyframe};tv.LoadState=Cte;var Mo=tv;var Qmo=y(x(),1);function dA(e,t,n,i,o=134217728,r){let s=aVt(i),a=cVt(n),c=n*Yt.getSizeInBytes(i),d=dA.get3DTextureDimension(t,c,o,r),u=m.divideComponents(d,t,new m);this.channelCount=n,this.componentType=i,this.textureMemoryByteLength=c*d.x*d.y*d.z,this.tileCounts=m.clone(u,new m),this.voxelCountPerTile=m.clone(t,new m),this.maximumTileCount=u.x*u.y*u.z,this.texture=new jL({context:e,pixelFormat:a,pixelDatatype:s,flipY:!1,width:d.x,height:d.y,depth:d.z,sampler:new Ht({wrapR:gn.CLAMP_TO_EDGE,wrapS:gn.CLAMP_TO_EDGE,wrapT:gn.CLAMP_TO_EDGE,minificationFilter:zt.LINEAR,magnificationFilter:li.LINEAR})}),this.nodes=new Array(this.maximumTileCount);for(let h=0;h<this.maximumTileCount;h++)this.nodes[h]=new lVt(h);for(let h=0;h<this.maximumTileCount;h++){let p=this.nodes[h];p.previousNode=h>0?this.nodes[h-1]:void 0,p.nextNode=h<this.maximumTileCount-1?this.nodes[h+1]:void 0}this.occupiedList=void 0,this.emptyList=this.nodes[0],this.occupiedCount=0,this._nearestSampling=!1}Object.defineProperties(dA.prototype,{nearestSampling:{get:function(){return this._nearestSampling},set:function(e){this._nearestSampling!==e&&(e?this.texture.sampler=Ht.NEAREST:this.texture.sampler=new Ht({wrapR:gn.CLAMP_TO_EDGE,wrapS:gn.CLAMP_TO_EDGE,wrapT:gn.CLAMP_TO_EDGE,minificationFilter:zt.LINEAR,magnificationFilter:li.LINEAR}),this._nearestSampling=e)}}});function aVt(e){if(e===Yt.FLOAT32||e===Yt.FLOAT64)return Oe.FLOAT;if(e===Yt.UINT8)return Oe.UNSIGNED_BYTE}function cVt(e){switch(e){case 1:return Ke.RED;case 2:return Ke.RG;case 3:return Ke.RGB;case 4:return Ke.RGBA}}function lVt(e){this.index=e,this.nextNode=void 0,this.previousNode=void 0}dA.prototype.add=function(e){if(this.isFull())throw new fe("Trying to add when there are no empty spots");let t=this.emptyList;this.emptyList=this.emptyList.nextNode,l(this.emptyList)&&(this.emptyList.previousNode=void 0),t.nextNode=this.occupiedList,l(t.nextNode)&&(t.nextNode.previousNode=t),this.occupiedList=t;let n=t.index;return this.writeDataToTexture(n,e),this.occupiedCount++,n};dA.prototype.remove=function(e){if(e<0||e>=this.maximumTileCount)throw new fe("Megatexture index out of bounds");let t=this.nodes[e];l(t.previousNode)&&(t.previousNode.nextNode=t.nextNode),l(t.nextNode)&&(t.nextNode.previousNode=t.previousNode),t.nextNode=this.emptyList,l(t.nextNode)&&(t.nextNode.previousNode=t),t.previousNode=void 0,this.emptyList=t,this.occupiedCount--};dA.prototype.isFull=function(){return this.emptyList===void 0};dA.get3DTextureDimension=function(e,t,n,i){let{maximum3DTextureSize:o}=Bt;if(m.maximumComponent(e)>o)throw new me("The GL context does not support a 3D texture large enough to contain a tile with the given dimensions.");let r=t*e.x*e.y*e.z,s=Math.floor(n/r);if(s<1)throw new me("Not enough texture memory available to create a megatexture with the given tile dimensions.");l(i)?i=Math.min(i,s):i=s;let a=Object.entries(e).sort((u,h)=>h[1]-u[1]),c=a.map(([u,h])=>Math.floor(o/h));for(let u=0;u<3;u++){let h=xRe(c);if(h<i)break;let p=c.slice();p.splice(u,1);let A=p[0]*p[1],f=h-i,b=Math.floor(f/A);c[u]-=b}xRe(c)>s&&(c[2]=Math.floor(s/(c[0]*c[1])));let d=new m;for(let u=0;u<3;u++){let[h,p]=a[u];d[h]=c[u]*p}return d};function xRe(e){return e.reduce((t,n)=>t*n)}dA.prototype.writeDataToTexture=function(e,t){let{tileCounts:n,voxelCountPerTile:i}=this,o={arrayBufferView:t,width:i.x,height:i.y,depth:i.z},r=n.x*n.y,s=Math.floor(e/r),a=e-s*r,c=Math.floor(a/n.x),d=a-c*n.x,u={source:o,xOffset:d*i.x,yOffset:c*i.y,zOffset:s*i.z};this.texture.copyFrom(u)};dA.prototype.isDestroyed=function(){return!1};dA.prototype.destroy=function(){return this.texture=this.texture&&this.texture.destroy(),he(this)};var nv=dA;var tho=y(x(),1);function dh(e,t,n,i,o,r,s){this.children=void 0,this.parent=o,this.level=e,this.x=t,this.y=n,this.z=i,this.dimensions=m.clone(s),this.keyframeNodes=[],this.renderableKeyframeNodes=[],this.renderableKeyframeNodeLerp=0,this.renderableKeyframeNodePrevious=void 0,this.renderableKeyframeNodeNext=void 0,this.orientedBoundingBox=new nn,this.approximateVoxelSize=0,this.screenSpaceError=0,this.visitedFrameNumber=-1,this.computeBoundingVolumes(r)}var dVt=new m;dh.prototype.computeBoundingVolumes=function(e){this.orientedBoundingBox=e.computeOrientedBoundingBoxForTile(this.level,this.x,this.y,this.z,this.orientedBoundingBox);let t=$.getScale(this.orientedBoundingBox.halfAxes,dVt),n=2*m.maximumComponent(t);this.approximateVoxelSize=n/m.minimumComponent(this.dimensions)};dh.prototype.constructChildNodes=function(e){let{level:t,x:n,y:i,z:o}=this,r=n*2,s=i*2,a=o*2,c=s+1,d=r+1,u=a+1,h=t+1,p=[[h,r,s,a],[h,d,s,a],[h,r,c,a],[h,d,c,a],[h,r,s,u],[h,d,s,u],[h,r,c,u],[h,d,c,u]];this.children=p.map(([A,f,b,C])=>new dh(A,f,b,C,this,e,this.dimensions))};dh.prototype.visibility=function(e,t){let n=this.orientedBoundingBox;return e.cullingVolume.computeVisibilityWithPlaneMask(n,t)};dh.prototype.computeScreenSpaceError=function(e,t){let n=this.orientedBoundingBox,i=Math.sqrt(n.distanceSquaredTo(e));i=Math.max(i,L.EPSILON7);let o=this.approximateVoxelSize,r=t*(o/i);this.screenSpaceError=r};var CRe={keyframe:0};function iv(e,t){return CRe.keyframe=e,yo(t,CRe,Mo.searchComparator)}dh.prototype.computeSurroundingRenderableKeyframeNodes=function(e){let t=this,n=t.level,i=Math.floor(e),o=Math.ceil(e),r,s,a=+Number.MAX_VALUE,c=+Number.MAX_VALUE;for(;l(t);){let{renderableKeyframeNodes:h}=t;if(h.length>=1){let p=uVt(i,h),A=h[p],f=o===i||i<A.keyframe?p:Math.min(p+1,h.length-1),b=h[f],C=i-A.keyframe,T=TRe(n-t.level,C);T<a&&(a=T,r=A);let E=b.keyframe-o,S=TRe(n-t.level,E);if(S<c&&(c=S,s=b),C===0&&E===0)break}t=t.parent}if(this.renderableKeyframeNodePrevious=r,this.renderableKeyframeNodeNext=s,!l(r)||!l(s))return;let d=r.keyframe,u=s.keyframe;this.renderableKeyframeNodeLerp=d===u?0:L.clamp((e-d)/(u-d),0,1)};function uVt(e,t){let n=iv(e,t);return n<0?L.clamp(~n-1,0,t.length-1):n}function TRe(e,t){let n=Math.exp(e*4),i=t>=0?1:-200;return e*n+t*i}dh.prototype.isVisited=function(e){return this.visitedFrameNumber===e};dh.prototype.createKeyframeNode=function(e){let t=iv(e,this.keyframeNodes);if(t<0){t=~t;let n=new Mo(this,e);this.keyframeNodes.splice(t,0,n)}};dh.prototype.destroyKeyframeNode=function(e,t){let n=e.keyframe,i=iv(n,this.keyframeNodes);if(i<0)throw new fe("Keyframe node does not exist.");if(this.keyframeNodes.splice(i,1),e.megatextureIndex!==-1){for(let r=0;r<t.length;r++)t[r].remove(e.megatextureIndex);let o=iv(n,this.renderableKeyframeNodes);if(o<0)throw new fe("Renderable keyframe node does not exist.");this.renderableKeyframeNodes.splice(o,1)}e.unload()};dh.prototype.addKeyframeNodeToMegatextures=function(e,t){if(e.megatextureIndex!==-1||e.content.metadata.length!==t.length)throw new fe("Keyframe node cannot be added to megatexture");let{metadata:n}=e.content;for(let r=0;r<t.length;r++){let s=t[r];e.megatextureIndex=s.add(n[r])}let i=this.renderableKeyframeNodes,o=iv(e.keyframe,i);if(o>=0)throw new fe("Keyframe already renderable");o=~o,i.splice(o,0,e)};dh.prototype.isRenderable=function(e){let t=this.renderableKeyframeNodePrevious,n=this.renderableKeyframeNodeNext,i=this.level;return l(t)&&l(n)&&(t.spatialNode.level===i||n.spatialNode.level===i)&&this.visitedFrameNumber===e};var ov=dh;function qy(e,t,n,i){let{provider:o,dimensions:r,inputDimensions:s}=e,{types:a,componentTypes:c}=o;l(i)?i=Math.min(Math.max(0,i),512*1024*1024):i=128*1024*1024,this._primitive=e,this.textureMemoryByteLength=0,this.megatextures=new Array(a.length);let d=l(o.maximumTileCount)?o.maximumTileCount:l(o.availableLevels)?(8**o.availableLevels-1)/7:void 0;for(let T=0;T<a.length;T++){let E=a[T],S=St.getComponentCount(E),I=c[T];this.megatextures[T]=new nv(t,s,S,I,i,d),this.textureMemoryByteLength+=this.megatextures[T].textureMemoryByteLength}let u=this.megatextures[0].maximumTileCount;this._simultaneousRequestCount=0,this._debugPrint=!1,this._calculateStatistics=this._primitive._calculateStatistics??!1,this._frameNumber=0;let h=e._shape;this.rootNode=new ov(0,0,0,0,void 0,h,r),this._priorityQueue=new gb({maximumLength:u,comparator:Mo.priorityComparator}),this._highPriorityKeyframeNodes=new Array(u),this._highPriorityKeyframeNodeCount=0,this._keyframeNodesInMegatexture=new Array(u),this._keyframeCount=n,this._sampleCount=void 0,this._keyframeLocation=0,this._binaryTreeKeyframeWeighting=new Array(n),this._initialTilesLoaded=!1;let p=this._binaryTreeKeyframeWeighting;p[0]=0,p[n-1]=0,Tte(p,1,n-2,0);let A=9,f=2048,b=Math.floor(f/A),C=Math.ceil(u/b);this.internalNodeTexture=new Lt({context:t,pixelFormat:Ke.RGBA,pixelDatatype:Oe.UNSIGNED_BYTE,flipY:!1,width:f,height:C,sampler:new Ht({minificationFilter:zt.NEAREST,magnificationFilter:li.NEAREST})}),this.internalNodeTilesPerRow=b,this.internalNodeTexelSizeUv=new M(1/f,1/C),this.leafNodeTexture=void 0,this.leafNodeTilesPerRow=void 0,this.leafNodeTexelSizeUv=new M}qy.prototype.findKeyframeNode=function(e){return this._keyframeNodesInMegatexture.find(function(t){return t.megatextureIndex===e})};function Tte(e,t,n,i){if(t>n)return;let o=Math.floor((t+n)/2);e[o]=i,Tte(e,t,o-1,i+1),Tte(e,o+1,n,i+1)}qy.simultaneousRequestCountMaximum=50;qy.prototype.update=function(e,t,n,i){let o=this._primitive,r=e.context,s=this.megatextures[0].maximumTileCount,a=this._keyframeCount,c=o._levelBlendFactor,d=c>0,u=a>1,h=(d?2:1)*(u?2:1);this._sampleCount=h;let p=h>=2;if(p&&!l(this.leafNodeTexture)){let S=Math.floor(512),I=Math.ceil(s/S);this.leafNodeTexture=new Lt({context:r,pixelFormat:Ke.RGBA,pixelDatatype:Oe.UNSIGNED_BYTE,flipY:!1,width:1024,height:I,sampler:new Ht({minificationFilter:zt.NEAREST,magnificationFilter:li.NEAREST})}),this.leafNodeTexelSizeUv=M.fromElements(1/1024,1/I,this.leafNodeTexelSizeUv),this.leafNodeTilesPerRow=S}else!p&&l(this.leafNodeTexture)&&(this.leafNodeTexture=this.leafNodeTexture.destroy());if(this._keyframeLocation=L.clamp(t,0,a-1),n&&ERe(this,this.rootNode),i)return;this._frameNumber=e.frameNumber;let A=Xi();fVt(this,e),pVt(this,e);let f=Xi();xVt(this,h,c);let b=Xi(),C=o.loadProgress.numberOfListeners>0||o.allTilesLoaded.numberOfListeners>0||o.initialTilesLoaded.numberOfListeners>0;if(this._debugPrint||this._calculateStatistics||C){let T=f-A,E=b-f,S=b-A;yVt(this,e,T,E,S)}};qy.prototype.isRenderable=function(e){return e.isRenderable(this._frameNumber)};qy.prototype.isDestroyed=function(){return!1};qy.prototype.destroy=function(){let e=this.megatextures,t=e.length;for(let n=0;n<t;n++)e[n]=e[n]&&e[n].destroy();return this.textureMemoryByteLength=0,this.internalNodeTexture=this.internalNodeTexture&&this.internalNodeTexture.destroy(),this.leafNodeTexture=this.leafNodeTexture&&this.leafNodeTexture.destroy(),he(this)};function ERe(e,t){if(t.computeBoundingVolumes(e._primitive._shape),l(t.children))for(let n=0;n<8;n++){let i=t.children[n];ERe(e,i)}}function mVt(e,t){if(e._simultaneousRequestCount>=qy.simultaneousRequestCountMaximum)return;let i=e._primitive.provider,{keyframe:o,spatialNode:r}=t;if(l(i.availableLevels)&&r.level>=i.availableLevels)return;function s(u){e._simultaneousRequestCount--,t.content=u,t.state=l(u)?Mo.LoadState.PROCESSING:Mo.LoadState.UNAVAILABLE}function a(u){e._simultaneousRequestCount--,t.state=Mo.LoadState.FAILED,e._primitive.tileFailed.raiseEvent()}let c={tileLevel:r.level,tileX:r.x,tileY:r.y,tileZ:r.z,keyframe:o},d=i.requestData(c);l(d)&&(e._simultaneousRequestCount++,t.state=Mo.LoadState.RECEIVING,d.then(s).catch(a))}function hVt(e){return e/(1+e)}function fVt(e,t){let n=e._frameNumber,i=e._priorityQueue;i.reset(),SRe(e.rootNode,Os.MASK_INDETERMINATE,e,t);let o=e._highPriorityKeyframeNodes,r=0,s;for(;i.length>0;)s=i.removeMaximum(),s.highPriorityFrameNumber=n,o[r]=s,r++;e._highPriorityKeyframeNodeCount=r}function pVt(e,t){let n=e.megatextures[0],i=n.occupiedCount,o=e._keyframeNodesInMegatexture;o.length=i,o.sort(AVt);let r=e._highPriorityKeyframeNodes,s=e._highPriorityKeyframeNodeCount,a=0,c=0;for(let d=0;d<s;d++){let u=r[d];if(!(u.state===Mo.LoadState.LOADED||u.spatialNode===void 0)&&(u.state===Mo.LoadState.UNLOADED&&mVt(e,u),u.state===Mo.LoadState.PROCESSING)){let{content:h}=u;if(h.update(e._primitive,t),!h.ready)continue;if(!gVt(h.metadata,e)){u.content=void 0,u.state=Mo.LoadState.FAILED,e._primitive.tileFailed.raiseEvent();continue}let p=0;if(n.isFull()){p=i-1-a,a++;let A=o[p];e._primitive.tileUnload.raiseEvent(),A.spatialNode.destroyKeyframeNode(A,e.megatextures)}else p=i+c,c++;u.spatialNode.addKeyframeNodeToMegatextures(u,e.megatextures),u.state=Mo.LoadState.LOADED,o[p]=u,e._primitive.tileLoad.raiseEvent()}}}function AVt(e,t){return e.highPriorityFrameNumber===t.highPriorityFrameNumber?t.priority-e.priority:t.highPriorityFrameNumber-e.highPriorityFrameNumber}function gVt(e,t){let n=t._primitive.provider.types.length;if(!Array.isArray(e)||e.length!==n)return!1;let{megatextures:i}=t;for(let o=0;o<n;o++){let{voxelCountPerTile:r,channelCount:s}=i[o],{x:a,y:c,z:d}=r,u=a*c*d,h=e[o],p=u*s;if(h.length!==p)return!1}return!0}function SRe(e,t,n,i){let{camera:o,context:r,pixelRatio:s,frameNumber:a}=i,{positionWC:c,frustum:d}=o,h=r.drawingBufferHeight/s/d.sseDenominator;if(e.computeScreenSpaceError(c,h),t=e.visibility(i,t),t===Os.MASK_OUTSIDE)return;e.visitedFrameNumber=a;let p=n._primitive,A=p._shape,f=p.screenSpaceError,b=n._priorityQueue,C=n._keyframeCount,T=L.clamp(Math.floor(n._keyframeLocation),0,C-2),E=T+1;if(C===1)e.createKeyframeNode(0);else if(e.keyframeNodes.length!==C)for(let W=0;W<C;W++)e.createKeyframeNode(W);let{screenSpaceError:S,keyframeNodes:I}=e,R=hVt(S),V=!1;for(let W=0;W<I.length;W++){let B=I[W];B.priority=10*R+bVt(T,B.keyframe,E,n),B.state!==Mo.LoadState.UNAVAILABLE&&B.state!==Mo.LoadState.FAILED&&B.priority!==-Number.MAX_VALUE&&b.insert(B),B.state===Mo.LoadState.LOADED&&(V=!0)}if(S<f||!V){e.children=void 0;return}l(e.children)||e.constructChildNodes(A);for(let W=0;W<8;W++){let B=e.children[W];SRe(B,t,n,i)}}function bVt(e,t,n,i){let o=Math.min(Math.abs(t-e),Math.abs(t-n)),r=Math.max(e,i._keyframeCount-n-1,1),s=Math.pow(1-o/r,4),a=Math.exp(-i._binaryTreeKeyframeWeighting[t]);return L.lerp(a,s,.15+.85*s)}function yVt(e,t,n,i,o){let r=e._keyframeCount,s=e.rootNode,a=Object.keys(Mo.LoadState).length,c=new Array(a),d=new Array(a),u=0;for(let V=0;V<a;V++){let W=new Array(r).fill(0);c[V]=W,d[V]=0}function h(V){let W=V.keyframeNodes;for(let B=0;B<W.length;B++){let N=W[B],P=N.keyframe,g=N.state;c[g][P]+=1,d[g]+=1,u++}if(l(V.children))for(let B=0;B<8;B++){let N=V.children[B];h(N)}}h(s),e._primitive.statistics.numberOfTilesWithContentReady=d[Mo.LoadState.LOADED],e._primitive.statistics.visited=u;let p=d[Mo.LoadState.RECEIVING],A=d[Mo.LoadState.PROCESSING],f=p!==e._primitive.statistics.numberOfPendingRequests||A!==e._primitive.statistics.numberOfTilesProcessing;if(f&&t.afterRender.push(function(){return e._primitive.loadProgress.raiseEvent(p,A),!0}),e._primitive.statistics.numberOfPendingRequests=p,e._primitive.statistics.numberOfTilesProcessing=A,f&&(p===0&&A===0)&&(t.afterRender.push(function(){return e._primitive.allTilesLoaded.raiseEvent(),!0}),e._initialTilesLoaded||(e._initialTilesLoaded=!0,t.afterRender.push(function(){return e._primitive.initialTilesLoaded.raiseEvent(),!0}))),!e._debugPrint)return;let C=`KEYFRAMES: ${c[Mo.LoadState.LOADED]}`,T=`UNLOADED: ${d[Mo.LoadState.UNLOADED]} | RECEIVING: ${d[Mo.LoadState.RECEIVING]} | PROCESSING: ${d[Mo.LoadState.PROCESSING]} | LOADED: ${d[Mo.LoadState.LOADED]} | FAILED: ${d[Mo.LoadState.FAILED]} | UNAVAILABLE: ${d[Mo.LoadState.UNAVAILABLE]} | TOTAL: ${u}`,E=Math.round(n*100)/100,S=Math.round(i*100)/100,I=Math.round(o*100)/100,R=`LOAD: ${E} | OCT: ${S} | ALL: ${I}`;console.log(`${C} || ${T} || ${R}`)}var iz={INTERNAL:0,LEAF:1,PACKED_LEAF_FROM_PARENT:2};function xVt(e,t,n){let i=e._primitive._screenSpaceError,o=e._keyframeLocation,r=e._frameNumber,s=t>=2,a=0,c=0,d=[],u=[];function h(A,f,b,C,T){let E=!1;if(l(A.children))for(let S=0;S<8;S++){let I=A.children[S];I.computeSurroundingRenderableKeyframeNodes(o),I.isRenderable(r)&&(E=!0)}if(E){d[T]=iz.INTERNAL<<16|f,d[b]=C,a++,C=f,T=C*9+1;for(let S=0;S<8;S++){let I=A.children[S];f=a,b=f*9+0,h(I,f,b,C,T+S)}}else{if(e._primitive.tileVisible.raiseEvent(),s){let S=c*5,I=A.renderableKeyframeNodePrevious,R=A.level-I.spatialNode.level,V=I.spatialNode.parent,W=l(V)?V.renderableKeyframeNodePrevious:I,B=CVt(A,i,n),N=R,P=1,g=I.megatextureIndex,_=W.megatextureIndex;u[S+0]=B,u[S+1]=N,u[S+2]=P,u[S+3]=g,u[S+4]=_,d[T]=iz.LEAF<<16|c}else{let S=A.renderableKeyframeNodePrevious,R=A.level-S.spatialNode.level===0?iz.LEAF:iz.PACKED_LEAF_FROM_PARENT;d[T]=R<<16|S.megatextureIndex}c++}}let p=e.rootNode;p.computeSurroundingRenderableKeyframeNodes(o),p.isRenderable(r)&&h(p,0,0,0,0),TVt(d,9,e.internalNodeTilesPerRow,e.internalNodeTexture),s&&EVt(u,2,e.leafNodeTilesPerRow,e.leafNodeTexture)}function CVt(e,t,n){if(e.parent===void 0)return 0;let i=e.screenSpaceError,o=e.parent.screenSpaceError,s=((t-i)/(o-i)+n-1)/n;return L.clamp(s,0,1)}function TVt(e,t,n,i){let o=Ke.componentsLength(i.pixelFormat),r=Math.ceil(e.length/t),s=Math.max(1,t*Math.min(r,n)),a=Math.max(1,Math.ceil(r/n)),c=new Uint8Array(s*a*o);for(let h=0;h<e.length;h++){let p=e[h],A=h*o;for(let f=0;f<o;f++)c[A+f]=p>>>f*8&255}let u={source:{arrayBufferView:c,width:s,height:a},xOffset:0,yOffset:0};i.copyFrom(u)}function EVt(e,t,n,i){let o=Ke.componentsLength(i.pixelFormat),r=5,s=Math.ceil(e.length/r),a=Math.max(1,t*Math.min(s,n)),c=Math.max(1,Math.ceil(s/n)),d=new Uint8Array(a*c*o);for(let p=0;p<s;p++){let A=e[p*r+0],f=e[p*r+1],b=e[p*r+2],C=e[p*r+3],T=e[p*r+4],E=L.clamp(Math.floor(65536*A),0,65535);d[p*8+0]=E>>>0&255,d[p*8+1]=E>>>8&255,d[p*8+2]=f&255,d[p*8+3]=b&255,d[p*8+4]=C>>>0&255,d[p*8+5]=C>>>8&255,d[p*8+6]=T>>>0&255,d[p*8+7]=T>>>8&255}let h={source:{arrayBufferView:d,width:a,height:c},xOffset:0,yOffset:0};i.copyFrom(h)}var rv=qy;function uA(e){e=e??Q.EMPTY_OBJECT,this._ready=!1,this._provider=e.provider??uA.DefaultProvider,this._traversal=void 0,this._statistics=new lf,this._calculateStatistics=e.calculateStatistics??!1,this._shape=void 0,this._shapeVisible=!1,this._dimensions=new m,this._inputDimensions=new m,this._paddingBefore=new m,this._paddingAfter=new m,this._availableLevels=1,this._minBounds=new m,this._minBoundsOld=new m,this._maxBounds=new m,this._maxBoundsOld=new m,this._minClippingBounds=new m,this._minClippingBoundsOld=new m,this._maxClippingBounds=new m,this._maxClippingBoundsOld=new m,this._verticalExaggeration=1,this._verticalExaggerationRelativeHeight=0,this._clippingPlanes=void 0,this._clippingPlanesState=0,this._clippingPlanesEnabled=!1,this._modelMatrix=F.clone(e.modelMatrix??F.IDENTITY),this._modelMatrixOld=F.clone(this._modelMatrix),this._customShader=e.customShader??uA.DefaultCustomShader,this._customShaderCompilationEvent=new xe,this._shaderDirty=!0,this._drawCommand=void 0,this._drawCommandPick=void 0,this._pickId=void 0,this._clock=e.clock,this._transformPositionLocalToWorld=new F,this._transformPositionWorldToLocal=new F,this._transformPlaneLocalToView=new F,this._transformDirectionWorldToLocal=new $,this._nearestSampling=!1,this._levelBlendFactor=0,this._stepSizeMultiplier=1,this._depthTest=!0,this._useLogDepth=void 0,this._screenSpaceError=4,this._debugPolylines=new nf,this._debugDraw=!1,this._disableRender=!1,this._disableUpdate=!1,this._uniforms={octreeInternalNodeTexture:void 0,octreeInternalNodeTilesPerRow:0,octreeInternalNodeTexelSizeUv:new M,octreeLeafNodeTexture:void 0,octreeLeafNodeTilesPerRow:0,octreeLeafNodeTexelSizeUv:new M,megatextureTextures:[],megatextureTileCounts:new m,dimensions:new m,inputDimensions:new m,paddingBefore:new m,paddingAfter:new m,transformPositionViewToLocal:new F,transformDirectionViewToLocal:new $,cameraPositionLocal:new m,cameraDirectionLocal:new m,cameraTileCoordinates:new re,cameraTileUv:new m,ndcSpaceAxisAlignedBoundingBox:new re,clippingPlanesTexture:void 0,clippingPlanesMatrix:new F,renderBoundPlanesTexture:void 0,stepSize:0,pickColor:new U},this._shapeDefinesOld={},this._uniformMap={};let t=this._uniforms,n=this._uniformMap;for(let o in t)if(t.hasOwnProperty(o)){let r=`u_${o}`;n[r]=function(){return t[o]}}this.tileLoad=new xe,this.tileVisible=new xe,this.tileFailed=new xe,this.tileUnload=new xe,this.loadProgress=new xe,this.allTilesLoaded=new xe,this.initialTilesLoaded=new xe;let i=this._provider;SVt(this,i)}function SVt(e,t){let{shape:n,minBounds:i=Ac.getMinBounds(n),maxBounds:o=Ac.getMaxBounds(n)}=t;e.minBounds=i,e.maxBounds=o,e.minClippingBounds=i.clone(),e.maxClippingBounds=o.clone(),IRe(e);let r=Ac.getShapeConstructor(n);e._shape=new r,e._shapeVisible=ZRe(e)}Object.defineProperties(uA.prototype,{ready:{get:function(){return this._ready}},provider:{get:function(){return this._provider}},boundingSphere:{get:function(){return this._shape.boundingSphere}},orientedBoundingBox:{get:function(){return this._shape.orientedBoundingBox}},modelMatrix:{get:function(){return this._modelMatrix},set:function(e){this._modelMatrix=F.clone(e,this._modelMatrix)}},shape:{get:function(){return this._provider.shape}},dimensions:{get:function(){return this._dimensions}},inputDimensions:{get:function(){return this._inputDimensions}},paddingBefore:{get:function(){return this._paddingBefore}},paddingAfter:{get:function(){return this._paddingAfter}},minimumValues:{get:function(){return this._provider.minimumValues}},maximumValues:{get:function(){return this._provider.maximumValues}},show:{get:function(){return!this._disableRender},set:function(e){this._disableRender=!e}},disableUpdate:{get:function(){return this._disableUpdate},set:function(e){this._disableUpdate=e}},debugDraw:{get:function(){return this._debugDraw},set:function(e){this._debugDraw=e}},depthTest:{get:function(){return this._depthTest},set:function(e){this._depthTest!==e&&(this._depthTest=e,this._shaderDirty=!0)}},nearestSampling:{get:function(){return this._nearestSampling},set:function(e){this._nearestSampling=e}},levelBlendFactor:{get:function(){return this._levelBlendFactor},set:function(e){this._levelBlendFactor=L.clamp(e,0,1)}},screenSpaceError:{get:function(){return this._screenSpaceError},set:function(e){this._screenSpaceError=e}},stepSize:{get:function(){return this._stepSizeMultiplier},set:function(e){this._stepSizeMultiplier=e}},minBounds:{get:function(){return this._minBounds},set:function(e){this._minBounds=m.clone(e,this._minBounds)}},maxBounds:{get:function(){return this._maxBounds},set:function(e){this._maxBounds=m.clone(e,this._maxBounds)}},minClippingBounds:{get:function(){return this._minClippingBounds},set:function(e){this._minClippingBounds=m.clone(e,this._minClippingBounds)}},maxClippingBounds:{get:function(){return this._maxClippingBounds},set:function(e){this._maxClippingBounds=m.clone(e,this._maxClippingBounds)}},clippingPlanes:{get:function(){return this._clippingPlanes},set:function(e){ls.setOwner(e,this,"_clippingPlanes")}},customShader:{get:function(){return this._customShader},set:function(e){if(this._customShader!==e){let t=this._uniformMap,i=this._customShader.uniformMap;for(let o in i)i.hasOwnProperty(o)&&delete t[o];l(e)?this._customShader=e:this._customShader=uA.DefaultCustomShader,this._shaderDirty=!0}}},customShaderCompilationEvent:{get:function(){return this._customShaderCompilationEvent}},statistics:{get:function(){return this._statistics}}});var _Vt=new re,IVt=new re,ZVt=new F,RVt=new F,VVt=new m,GVt=new re;uA.prototype.update=function(e){let t=this._provider,n=this._uniforms;this._customShader.update(e);let i=e.context;if(!this._ready){PVt(this,t,i),e.afterRender.push(()=>(this._ready=!0,!0));return}let o=IRe(this),r=NVt(this,e);if((o||r)&&(this._shapeVisible=ZRe(this),zVt(this)&&(this._shaderDirty=!0)),!this._shapeVisible)return;this._shape.updateViewTransforms(e);let s=HVt(t.timeIntervalCollection,this._clock),a=this._traversal,c=a._sampleCount;if(a.update(e,s,o,this._disableUpdate),c!==a._sampleCount&&(this._shaderDirty=!0),!a.isRenderable(a.rootNode)||(this._debugDraw&&nGt(this,e),this._disableRender))return;this._useLogDepth!==e.useLogDepth&&(this._useLogDepth=e.useLogDepth,this._shaderDirty=!0),JVt(this,e)&&(this._shaderDirty=!0);let u=a.leafNodeTexture;l(u)&&(n.octreeLeafNodeTexture=a.leafNodeTexture,n.octreeLeafNodeTexelSizeUv=M.clone(a.leafNodeTexelSizeUv,n.octreeLeafNodeTexelSizeUv),n.octreeLeafNodeTilesPerRow=a.leafNodeTilesPerRow),this._shaderDirty&&(KM(this,i),this._shaderDirty=!1);let h=i.uniformState.viewProjection,{orientedBoundingBox:p}=this._shape,A=qVt(p,h,IVt);if(A.x===1||A.y===1||A.z===-1||A.w===-1)return;n.ndcSpaceAxisAlignedBoundingBox=re.clone(A,n.ndcSpaceAxisAlignedBoundingBox);let b=i.uniformState.inverseView,C=F.multiplyTransformation(this._transformPositionWorldToLocal,b,n.transformPositionViewToLocal);this._transformPlaneLocalToView=F.transpose(C,this._transformPlaneLocalToView);let T=i.uniformState.inverseViewRotation;n.transformDirectionViewToLocal=$.multiply(this._transformDirectionWorldToLocal,T,n.transformDirectionViewToLocal),n.cameraPositionLocal=F.multiplyByPoint(this._transformPositionWorldToLocal,e.camera.positionWC,n.cameraPositionLocal),n.cameraDirectionLocal=$.multiplyByVector(this._transformDirectionWorldToLocal,e.camera.directionWC,n.cameraDirectionLocal);let E=FVt(this,n.cameraPositionLocal,GVt);n.cameraTileCoordinates=re.fromElements(Math.floor(E.x),Math.floor(E.y),Math.floor(E.z),E.w,n.cameraTileCoordinates),n.cameraTileUv=m.fromElements(E.x-Math.floor(E.x),E.y-Math.floor(E.y),E.z-Math.floor(E.z),n.cameraTileUv),n.stepSize=this._stepSizeMultiplier,LVt(this),WVt(this,e);let S=e.passes.pick?this._drawCommandPick:e.passes.pickVoxel?this._drawCommandPickVoxel:this._drawCommand;S.boundingVolume=this._shape.boundingSphere,e.commandList.push(S)};function LVt(e){let{megatextures:t}=e._traversal;for(let n=0;n<t.length;++n)t[n].nearestSampling=e._nearestSampling}function WVt(e,t){let n=e._uniforms,{renderBoundPlanes:i}=e._shape;l(i)&&(i.update(t,e._transformPlaneLocalToView),n.renderBoundPlanesTexture=i.texture)}function FVt(e,t,n){let i=e._shape.convertLocalToShapeUvSpace(t,VVt),o=e._availableLevels,r=2**(o-1);return re.fromElements(i.x*r,i.y*r,i.z*r,o-1,n)}var BVt=new m,Ete=new m,wVt=new Ae;function NVt(e,t){let{verticalExaggeration:n,verticalExaggerationRelativeHeight:i}=t;return e._verticalExaggeration===n&&e._verticalExaggerationRelativeHeight===i?!1:(e._verticalExaggeration=n,e._verticalExaggerationRelativeHeight=i,!0)}function PVt(e,t,n){let i=e._uniforms;e._pickId=n.createPickId({primitive:e}),i.pickColor=U.clone(e._pickId.color,i.pickColor);let{shaderDefines:o,shaderUniforms:r}=e._shape;e._shapeDefinesOld=He(o,!0);let s=e._uniformMap;for(let c in r)if(r.hasOwnProperty(c)){let d=`u_${c}`;s[d]=function(){return r[c]}}if(e._dimensions=m.clone(t.dimensions,e._dimensions),i.dimensions=m.clone(e._dimensions,i.dimensions),e._paddingBefore=m.clone(t.paddingBefore??m.ZERO,e._paddingBefore),i.paddingBefore=m.clone(e._paddingBefore,i.paddingBefore),e._paddingAfter=m.clone(t.paddingAfter??m.ZERO,e._paddingAfter),i.paddingAfter=m.clone(e._paddingAfter,i.paddingAfter),e._inputDimensions=m.add(e._dimensions,e._paddingBefore,e._inputDimensions),e._inputDimensions=m.add(e._inputDimensions,e._paddingAfter,e._inputDimensions),t.metadataOrder===lA.Y_UP){let c=e._inputDimensions.y;e._inputDimensions.y=e._inputDimensions.z,e._inputDimensions.z=c}i.inputDimensions=m.clone(e._inputDimensions,i.inputDimensions),e._availableLevels=t.availableLevels??1;let a=t.keyframeCount??1;e._traversal=new rv(e,n,a),e.statistics.texturesByteLength=e._traversal.textureMemoryByteLength,OVt(e._traversal,i)}function IRe(e){return sv(e,"_modelMatrix","_modelMatrixOld")+sv(e,"_minBounds","_minBoundsOld")+sv(e,"_maxBounds","_maxBoundsOld")+sv(e,"_minClippingBounds","_minClippingBoundsOld")+sv(e,"_maxClippingBounds","_maxClippingBoundsOld")>0}function sv(e,t,n){let i=e[t],o=e[n],r=!i.equals(o);return r&&i.clone(o),r?1:0}var XVt=new m,YVt=new m,MVt=new m,vVt=new m,UVt=new F,DVt=new F;function ZRe(e){let t=e._verticalExaggeration,n=e._verticalExaggerationRelativeHeight,i=m.clone(e._minBounds,XVt),o=m.clone(e._maxBounds,YVt),r=m.clone(e._minClippingBounds,MVt),s=m.clone(e._maxClippingBounds,vVt),a=F.clone(e._modelMatrix,UVt);if(e.shape===Ac.ELLIPSOID)i.z=Eo.getHeight(e._minBounds.z,t,n),o.z=Eo.getHeight(e._maxBounds.z,t,n),r.z=Eo.getHeight(e._minClippingBounds.z,t,n),s.z=Eo.getHeight(e._maxClippingBounds.z,t,n);else{let f=m.fromElements(1,1,t,BVt);F.multiplyByScale(a,f,a),F.multiplyByTranslation(a,QVt(e),a)}let c=e._provider,d=c.shapeTransform??F.IDENTITY,u=c.globalTransform??F.IDENTITY,h=F.multiplyTransformation(u,a,DVt);F.multiplyTransformation(h,d,h);let p=e._shape;return p.update(h,i,o,r,s)?(e._transformPositionLocalToWorld=F.clone(p.shapeTransform,e._transformPositionLocalToWorld),e._transformPositionWorldToLocal=F.inverse(e._transformPositionLocalToWorld,e._transformPositionWorldToLocal),e._transformDirectionWorldToLocal=F.getMatrix3(e._transformPositionWorldToLocal,e._transformDirectionWorldToLocal),!0):!1}var kVt=new m;function QVt(e){let t=e._verticalExaggeration,n=e._verticalExaggerationRelativeHeight,{shapeTransform:i=F.IDENTITY,globalTransform:o=F.IDENTITY}=e._provider,r=F.getTranslation(i,Ete),s=F.multiplyByPoint(e._modelMatrix,r,Ete),a=F.multiplyByPoint(o,s,Ete),d=ie.WGS84.cartesianToCartographic(a,wVt),u=0;l(d)&&(u=d.height);let h=Eo.getHeight(u,t,n);return m.fromElements(0,0,(h-u)/t,kVt)}function OVt(e,t){t.octreeInternalNodeTexture=e.internalNodeTexture,t.octreeInternalNodeTexelSizeUv=M.clone(e.internalNodeTexelSizeUv,t.octreeInternalNodeTexelSizeUv),t.octreeInternalNodeTilesPerRow=e.internalNodeTilesPerRow;let{megatextures:n}=e,i=n[0];t.megatextureTextures=new Array(n.length);for(let o=0;o<n.length;o++)t.megatextureTextures[o]=n[o].texture;t.megatextureTileCounts=m.clone(i.tileCounts,t.megatextureTileCounts)}function zVt(e){let{shaderDefines:t}=e._shape,n=Object.keys(t).some(i=>t[i]!==e._shapeDefinesOld[i]);return n&&(e._shapeDefinesOld=He(t,!0)),n}function HVt(e,t){if(!l(e)||!l(t))return 0;let n=t.currentTime,i,o=e.indexOf(n);o>=0?i=e.get(o):(o=~o,o===e.length?(o=e.length-1,i=e.get(o),n=i.stop):(i=e.get(o),n=i.start));let r=q.secondsDifference(i.stop,i.start),a=q.secondsDifference(n,i.start)/r;return o+a}function JVt(e,t){let n=e.clippingPlanes;if(!l(n))return!1;n.update(t);let{clippingPlanesState:i,enabled:o}=n;if(o){let r=e._uniforms;r.clippingPlanesTexture=n.texture,r.clippingPlanesMatrix=F.transpose(F.multiplyTransformation(F.inverse(n.modelMatrix,r.clippingPlanesMatrix),e._transformPositionLocalToWorld,r.clippingPlanesMatrix),r.clippingPlanesMatrix)}return e._clippingPlanesState===i&&e._clippingPlanesEnabled===o?!1:(e._clippingPlanesState=i,e._clippingPlanesEnabled=o,!0)}uA.prototype.isDestroyed=function(){return!1};uA.prototype.destroy=function(){let e=this._drawCommand;l(e)&&(e.shaderProgram=e.shaderProgram&&e.shaderProgram.destroy());let t=this._drawCommandPick;return l(t)&&(t.shaderProgram=t.shaderProgram&&t.shaderProgram.destroy()),this._pickId=this._pickId&&this._pickId.destroy(),this._traversal=this._traversal&&this._traversal.destroy(),this.statistics.texturesByteLength=0,this._clippingPlanes=this._clippingPlanes&&this._clippingPlanes.destroy(),he(this)};var _Re=new Array(new re(-1,-1,-1,1),new re(1,-1,-1,1),new re(-1,1,-1,1),new re(1,1,-1,1),new re(-1,-1,1,1),new re(1,-1,1,1),new re(-1,1,1,1),new re(1,1,1,1)),KVt=new Array(1,2,4,0,3,5,0,3,6,1,2,7,0,5,6,1,4,7,2,4,7,3,5,6),jVt=new Array(new re,new re,new re,new re,new re,new re,new re,new re);function qVt(e,t,n){let i=F.fromRotationTranslation(e.halfAxes,e.center,ZVt),o=F.multiply(t,i,RVt),r=+Number.MAX_VALUE,s=-Number.MAX_VALUE,a=+Number.MAX_VALUE,c=-Number.MAX_VALUE,d,u=jVt,h=_Re.length;for(d=0;d<h;d++)F.multiplyByVector(o,_Re[d],u[d]);for(d=0;d<h;d++){let p=u[d];if(p.z>=-p.w){let A=p.x/p.w,f=p.y/p.w;r=Math.min(r,A),s=Math.max(s,A),a=Math.min(a,f),c=Math.max(c,f)}else for(let A=0;A<3;A++){let f=KVt[d*3+A],b=u[f];if(b.z>=-b.w){let C=p.z+p.w,T=b.z+b.w,E=C/(C-T),S=re.lerp(p,b,E,_Vt),I=S.x/S.w,R=S.y/S.w;r=Math.min(r,I),s=Math.max(s,I),a=Math.min(a,R),c=Math.max(c,R)}}}return r=L.clamp(r,-1,1),a=L.clamp(a,-1,1),s=L.clamp(s,-1,1),c=L.clamp(c,-1,1),n=re.fromElements(r,a,s,c,n),n}var Ste=3e7,$Vt=new m(Ste,0,0),eGt=new m(0,Ste,0),tGt=new m(0,0,Ste);function nGt(e,t){let n=e._traversal,i=e._debugPolylines;i.removeAll();function o(c,d,u,h){i.add({positions:[c,d],width:h,material:Oi.fromType("Color",{color:u})})}function r(c,d,u){let h=c.computeCorners();o(h[0],h[1],d,u),o(h[2],h[3],d,u),o(h[4],h[5],d,u),o(h[6],h[7],d,u),o(h[0],h[2],d,u),o(h[4],h[6],d,u),o(h[1],h[3],d,u),o(h[5],h[7],d,u),o(h[0],h[4],d,u),o(h[2],h[6],d,u),o(h[1],h[5],d,u),o(h[3],h[7],d,u)}function s(c){if(!n.isRenderable(c))return;let d=c.level,h=Math.max(1,5/Math.pow(2,d)),A=[U.RED,U.LIME,U.BLUE][d%3];if(r(c.orientedBoundingBox,A,h),l(c.children))for(let f=0;f<8;f++)s(c.children[f])}r(e._shape.orientedBoundingBox,U.WHITE,5),s(n.rootNode);let a=10;o(m.ZERO,$Vt,U.RED,a),o(m.ZERO,eGt,U.LIME,a),o(m.ZERO,tGt,U.BLUE,a),i.update(t)}uA.DefaultCustomShader=new GE({fragmentShaderText:`void fragmentMain(FragmentInput fsInput, inout czm_modelMaterial material)
{
material.diffuse = vec3(1.0);
material.alpha = 1.0;
}`});function RRe(){this.ready=!0,this.shape=Ac.BOX,this.dimensions=new m(1,1,1),this.names=["data"],this.types=[St.SCALAR],this.componentTypes=[Yt.FLOAT32],this.maximumTileCount=1}RRe.prototype.requestData=function(e){if((l(e)?e.tileLevel??0:0)>=1)return;let n=new LE({metadata:[new Float32Array(1)]});return Promise.resolve(n)};uA.DefaultProvider=new RRe;var $y=uA;var $ho=y(x(),1);function iGt(e,t,n,i){if(!l(e)||l(t)&&e.id!==t)return;let r=(e.classes||{})[n];if(!l(r))return;let a=(r.properties||{})[i];if(l(a))return a}var av=iGt;var tfo=y(x(),1);function oGt(e,t,n,i,o){this.schemaId=e,this.className=t,this.propertyName=n,this.classProperty=i,this.metadataProperty=o}var cv=oGt;var ofo=y(x(),1);function rGt(e,t,n){if(!l(e))return;let i=e.propertyTextures;for(let o of i)if(o.class.id===t){let a=o.properties[n];if(l(a))return a}}var lv=rGt;var rz=function(e){return function(){e.frameState.afterRender.push(function(){e.requestRender()})}};function Ci(e){e=e??Q.EMPTY_OBJECT;let t=e.canvas,n=e.creditContainer,i=e.creditViewport,o=e.contextOptions instanceof JL;if(o)this._context=e.contextOptions.createSceneContext(t);else{let d=He(e.contextOptions);this._context=new Zx(t,d)}let r=this._context,s=l(n);s||(n=document.createElement("div"),n.style.position="absolute",n.style.bottom="0",n.style["text-shadow"]="0 0 2px #000000",n.style.color="#ffffff",n.style["font-size"]="10px",n.style["padding-right"]="5px",t.parentNode.appendChild(n)),l(i)||(i=t.parentNode),this._id=qn(),this._jobScheduler=new YY,this._frameState=new PY(r,new LY(n,"\u2022",i),this._jobScheduler),this._frameState.scene3DOnly=e.scene3DOnly??!1,this._removeCreditContainer=!s,this._creditContainer=n,this._canvas=t,this._computeEngine=new QR(r),this._ellipsoid=e.ellipsoid??ie.default,this._globe=void 0,this._globeTranslucencyState=new XY,this._primitives=new $l({countReferences:o}),this._groundPrimitives=new $l({countReferences:o}),this._globeHeight=void 0,this._globeHeightDirty=!0,this._cameraUnderground=!1,this._removeUpdateHeightCallback=void 0,this._logDepthBuffer=Ci.defaultLogDepthBuffer&&r.fragmentDepth,this._logDepthBufferDirty=!0,this._tweens=new _E,this._shaderFrameCount=0,this._sunPostProcess=void 0,this._computeCommandList=[],this._overlayCommandList=[],this._useOIT=e.orderIndependentTranslucency??!0,this._executeOITFunction=void 0,this._depthPlane=new BY(e.depthPlaneEllipsoidOffset),this._clearColorCommand=new mi({color:new U,stencil:0,owner:this}),this._depthClearCommand=new mi({depth:1,owner:this}),this._stencilClearCommand=new mi({stencil:0}),this._classificationStencilClearCommand=new mi({stencil:0,renderState:Qe.fromCache({stencilMask:Jt.CLASSIFICATION_MASK})}),this._depthOnlyRenderStateCache={},this._transitioner=new SM(this),this._preUpdate=new xe,this._postUpdate=new xe,this._renderError=new xe,this._preRender=new xe,this._postRender=new xe,this._minimumDisableDepthTestDistance=0,this._debugInspector=new WM,this._msaaSamples=e.msaaSamples??4,this.rethrowRenderErrors=!1,this.completeMorphOnUserInput=!0,this.morphStart=new xe,this.morphComplete=new xe,this.skyBox=void 0,this.skyAtmosphere=void 0,this.sun=void 0,this.sunBloom=!0,this._sunBloom=void 0,this.moon=void 0,this.backgroundColor=U.clone(U.BLACK),this._mode=se.SCENE3D,this._mapProjection=l(e.mapProjection)?e.mapProjection:new ki(this._ellipsoid),this.morphTime=1,this.farToNearRatio=1e3,this.logarithmicDepthFarToNearRatio=1e9,this.nearToFarDistance2D=175e4,this.verticalExaggeration=1,this.verticalExaggerationRelativeHeight=0,this.debugCommandFilter=void 0,this.debugShowCommands=!1,this.debugShowFrustums=!1,this.debugShowFramesPerSecond=!1,this.debugShowDepthFrustum=1,this.debugShowFrustumPlanes=!1,this._debugShowFrustumPlanes=!1,this._debugFrustumPlanes=void 0,this.useDepthPicking=!0,this.pickTranslucentDepth=!1,this.cameraEventWaitTime=500,this.atmosphere=new CC,this.fog=new NY,this.fog.enabled=ie.WGS84.equals(this._ellipsoid),ie.WGS84.equals(this._ellipsoid)||(Zo.DEFAULT_VIEW_RECTANGLE=de.fromDegrees(-45,-45,45,45)),this._shadowMapCamera=new Zo(this),this.shadowMap=new _b({context:r,lightCamera:this._shadowMapCamera,enabled:e.shadows??!1}),this.invertClassification=!1,this.invertClassificationColor=U.clone(U.WHITE),this._actualInvertClassificationColor=U.clone(this._invertClassificationColor),this._invertClassification=new KZ,this.focalLength=void 0,this.eyeSeparation=void 0,this.postProcessStages=new TM,this._brdfLutGenerator=new _Y,this._performanceDisplay=void 0,this._debugVolume=void 0,this._screenSpaceCameraController=new ZM(this),this._cameraUnderground=!1,this._mapMode2D=e.mapMode2D??od.INFINITE_SCROLL,this._environmentState={skyBoxCommand:void 0,skyAtmosphereCommand:void 0,sunDrawCommand:void 0,sunComputeCommand:void 0,moonCommand:void 0,isSunVisible:!1,isMoonVisible:!1,isReadyForAtmosphere:!1,isSkyAtmosphereVisible:!1,clearGlobeDepth:!1,useDepthPlane:!1,renderTranslucentDepthForPick:!1,originalFramebuffer:void 0,useGlobeDepthFramebuffer:!1,useOIT:!1,useInvertClassification:!1,usePostProcess:!1,usePostProcessSelected:!1,useWebVR:!1},this._useWebVR=!1,this._cameraVR=void 0,this._aspectRatioVR=void 0,this.requestRenderMode=e.requestRenderMode??!1,this._renderRequested=!0,this.maximumRenderTimeChange=e.maximumRenderTimeChange??0,this._lastRenderTime=void 0,this._frameRateMonitor=void 0,this._removeRequestListenerCallback=Yc.requestCompletedEvent.addEventListener(rz(this)),this._removeTaskProcessorListenerCallback=$n.taskCompletedEvent.addEventListener(rz(this)),this._removeGlobeCallbacks=[],this._removeTerrainProviderReadyListener=void 0;let a=new nt(0,0,r.drawingBufferWidth,r.drawingBufferHeight),c=new Zo(this);this._logDepthBuffer&&(c.frustum.near=.1,c.frustum.far=1e10),this.preloadFlightCamera=new Zo(this),this.preloadFlightCullingVolume=void 0,this._picking=new eM(this),this._defaultView=new bE(this,c,a),this._view=this._defaultView,this._hdr=void 0,this._hdrDirty=void 0,this.highDynamicRange=!1,this.gamma=2.2,this.sphericalHarmonicCoefficients=void 0,this.specularEnvironmentMaps=void 0,this._specularEnvironmentCubeMap=void 0,this.light=new VA,this._enableEdgeVisibility=!1,BRe(this,0,q.now()),this.updateFrameState(),this.initializeFrame()}Ci.defaultLogDepthBuffer=!0;function sGt(e,t){for(let i=0;i<e._removeGlobeCallbacks.length;++i)e._removeGlobeCallbacks[i]();e._removeGlobeCallbacks.length=0;let n=[];l(t)&&(n.push(t.imageryLayersUpdatedEvent.addEventListener(rz(e))),n.push(t.terrainProviderChanged.addEventListener(rz(e)))),e._removeGlobeCallbacks=n}Object.defineProperties(Ci.prototype,{canvas:{get:function(){return this._canvas}},drawingBufferHeight:{get:function(){return this._context.drawingBufferHeight}},drawingBufferWidth:{get:function(){return this._context.drawingBufferWidth}},maximumAliasedLineWidth:{get:function(){return Bt.maximumAliasedLineWidth}},maximumCubeMapSize:{get:function(){return Bt.maximumCubeMapSize}},pickPositionSupported:{get:function(){return this._context.depthTexture}},sampleHeightSupported:{get:function(){return this._context.depthTexture}},clampToHeightSupported:{get:function(){return this._context.depthTexture}},invertClassificationSupported:{get:function(){return this._context.depthTexture}},specularEnvironmentMapsSupported:{get:function(){return wh.isSupported(this._context)}},ellipsoid:{get:function(){return this._ellipsoid}},globe:{get:function(){return this._globe},set:function(e){this._globe=this._globe&&this._globe.destroy(),this._globe=e,sGt(this,e)}},primitives:{get:function(){return this._primitives}},groundPrimitives:{get:function(){return this._groundPrimitives}},camera:{get:function(){return this._view.camera},set:function(e){this._view.camera=e}},view:{get:function(){return this._view},set:function(e){this._view=e}},defaultView:{get:function(){return this._defaultView}},picking:{get:function(){return this._picking}},screenSpaceCameraController:{get:function(){return this._screenSpaceCameraController}},mapProjection:{get:function(){return this._mapProjection}},jobScheduler:{get:function(){return this._jobScheduler}},frameState:{get:function(){return this._frameState}},environmentState:{get:function(){return this._environmentState}},tweens:{get:function(){return this._tweens}},imageryLayers:{get:function(){if(l(this.globe))return this.globe.imageryLayers}},terrainProvider:{get:function(){if(l(this.globe))return this.globe.terrainProvider},set:function(e){this._removeTerrainProviderReadyListener=this._removeTerrainProviderReadyListener&&this._removeTerrainProviderReadyListener(),l(this.globe)&&(this.globe.terrainProvider=e)}},terrainProviderChanged:{get:function(){if(l(this.globe))return this.globe.terrainProviderChanged}},preUpdate:{get:function(){return this._preUpdate}},postUpdate:{get:function(){return this._postUpdate}},renderError:{get:function(){return this._renderError}},preRender:{get:function(){return this._preRender}},postRender:{get:function(){return this._postRender}},lastRenderTime:{get:function(){return this._lastRenderTime}},context:{get:function(){return this._context}},debugFrustumStatistics:{get:function(){return this._view.debugFrustumStatistics}},scene3DOnly:{get:function(){return this._frameState.scene3DOnly}},orderIndependentTranslucency:{get:function(){return this._useOIT}},id:{get:function(){return this._id}},mode:{get:function(){return this._mode},set:function(e){e===se.SCENE2D?this.morphTo2D(0):e===se.SCENE3D?this.morphTo3D(0):e===se.COLUMBUS_VIEW&&this.morphToColumbusView(0),this._mode=e}},frustumCommandsList:{get:function(){return this._view.frustumCommandsList}},numberOfFrustums:{get:function(){return this._view.frustumCommandsList.length}},useWebVR:{get:function(){return this._useWebVR},set:function(e){this._useWebVR=e,this._useWebVR?(this._frameState.creditDisplay.container.style.visibility="hidden",this._cameraVR=new Zo(this),l(this._deviceOrientationCameraController)||(this._deviceOrientationCameraController=new wY(this)),this._aspectRatioVR=this.camera.frustum.aspectRatio):(this._frameState.creditDisplay.container.style.visibility="visible",this._cameraVR=void 0,this._deviceOrientationCameraController=this._deviceOrientationCameraController&&!this._deviceOrientationCameraController.isDestroyed()&&this._deviceOrientationCameraController.destroy(),this.camera.frustum.aspectRatio=this._aspectRatioVR,this.camera.frustum.xOffset=0)}},mapMode2D:{get:function(){return this._mapMode2D}},splitPosition:{get:function(){return this._frameState.splitPosition},set:function(e){this._frameState.splitPosition=e}},minimumDisableDepthTestDistance:{get:function(){return this._minimumDisableDepthTestDistance},set:function(e){this._minimumDisableDepthTestDistance=e}},logarithmicDepthBuffer:{get:function(){return this._logDepthBuffer},set:function(e){e=this._context.fragmentDepth&&e,this._logDepthBuffer!==e&&(this._logDepthBuffer=e,this._logDepthBufferDirty=!0)}},gamma:{get:function(){return this._context.uniformState.gamma},set:function(e){this._context.uniformState.gamma=e}},highDynamicRange:{get:function(){return this._hdr},set:function(e){let t=this._context,n=e&&t.depthTexture&&(t.colorBufferFloat||t.colorBufferHalfFloat);this._hdrDirty=n!==this._hdr,this._hdr=n}},highDynamicRangeSupported:{get:function(){let e=this._context;return e.depthTexture&&(e.colorBufferFloat||e.colorBufferHalfFloat)}},cameraUnderground:{get:function(){return this._cameraUnderground}},msaaSamples:{get:function(){return this._msaaSamples},set:function(e){e=Math.min(e,Bt.maximumSamples),this._msaaSamples=e}},msaaSupported:{get:function(){return this._context.msaa}},pixelRatio:{get:function(){return this._frameState.pixelRatio},set:function(e){this._frameState.pixelRatio=e}},opaqueFrustumNearOffset:{get:function(){return .9999}},globeHeight:{get:function(){return this._globeHeight}}});Ci.prototype.getCompressedTextureFormatSupported=function(e){let t=this.context;return(e==="WEBGL_compressed_texture_s3tc"||e==="s3tc")&&t.s3tc||(e==="WEBGL_compressed_texture_pvrtc"||e==="pvrtc")&&t.pvrtc||(e==="WEBGL_compressed_texture_etc"||e==="etc")&&t.etc||(e==="WEBGL_compressed_texture_etc1"||e==="etc1")&&t.etc1||(e==="WEBGL_compressed_texture_astc"||e==="astc")&&t.astc||(e==="EXT_texture_compression_bptc"||e==="bc7")&&t.bc7};function aGt(e,t){let n=e.pickedMetadataInfo,i=t.pickedMetadataInfo;return n?.schemaId!==i?.schemaId||n?.className!==i?.className||n?.propertyName!==i?.propertyName}function VRe(e,t,n){let i=e._frameState,o=e._context,r=e._view.oit,{lightShadowMaps:s,lightShadowsEnabled:a}=i.shadowState,c=t.derivedCommands;l(t.pickId)&&(c.picking=nA.createPickDerivedCommand(e,t,o,c.picking)),i.pickingMetadata&&t.pickMetadataAllowed&&(t.pickedMetadataInfo=i.pickedMetadataInfo,l(t.pickedMetadataInfo)&&(c.pickingMetadata=nA.createPickMetadataDerivedCommand(e,t,o,c.pickingMetadata))),t.pickOnly||(c.depth=nA.createDepthOnlyDerivedCommand(e,t,o,c.depth)),c.originalCommand=t,e._hdr&&(c.hdr=nA.createHdrCommand(t,o,c.hdr),t=c.hdr.command,c=t.derivedCommands),a&&t.receiveShadows&&(c.shadows=_b.createReceiveDerivedCommand(s,t,n,o,c.shadows)),t.pass===Ge.TRANSLUCENT&&l(r)&&r.isSupported()&&(a&&t.receiveShadows?(c.oit=l(c.oit)?c.oit:{},c.oit.shadows=r.createDerivedCommands(c.shadows.receiveCommand,o,c.oit.shadows)):c.oit=r.createDerivedCommands(t,o,c.oit))}Ci.prototype.updateDerivedCommands=function(e){let{derivedCommands:t}=e;if(!l(t))return;let n=this._frameState,{shadowState:i,useLogDepth:o}=this._frameState,r=this._context,s=!1,a=i.lastDirtyTime;e.lastDirtyTime!==a&&(e.lastDirtyTime=a,e.dirty=!0,s=!0);let c=this._hdr,d=l(t.logDepth),u=l(t.hdr),h=l(t.originalCommand),p=o&&!d,A=c&&!u,f=(!o||!c)&&!h,b=n.pickingMetadata&&aGt(e,n);if(e.dirty=e.dirty||p||A||f||b,!e.dirty)return;e.dirty=!1;let{shadowsEnabled:C,shadowMaps:T}=i;C&&e.castShadows&&(t.shadows=_b.createCastDerivedCommand(T,e,s,r,t.shadows)),(d||p)&&(t.logDepth=nA.createLogDepthCommand(e,r,t.logDepth),VRe(this,t.logDepth.command,s)),(h||f)&&VRe(this,e,s)};var cGt=new rh({pass:sr.RENDER}),_te=new rh({pass:sr.PRELOAD}),Ite=new rh({pass:sr.PRELOAD_FLIGHT}),lGt=new rh({pass:sr.REQUEST_RENDER_MODE_DEFER_CHECK}),GRe=new ue,Zte;function dGt(e){if(!(e._mode!==se.SCENE3D||!e.globe?.show||e._cameraUnderground||e._globeTranslucencyState.translucent))return GRe.radius=e.ellipsoid.minimumRadius+e.frameState.minimumTerrainHeight,Zte=NX.fromBoundingSphere(GRe,e.camera.positionWC,Zte),Zte}Ci.prototype.clearPasses=function(e){e.render=!1,e.pick=!1,e.pickVoxel=!1,e.depth=!1,e.postProcess=!1,e.offscreen=!1};function BRe(e,t,n){let i=e._frameState;i.frameNumber=t,i.time=q.clone(n,i.time)}Ci.prototype.updateFrameState=function(){let e=this.camera,t=this._frameState;t.commandList.length=0,t.shadowMaps.length=0,t.brdfLutGenerator=this._brdfLutGenerator,t.environmentMap=this.skyBox&&this.skyBox._cubeMap,t.mode=this._mode,t.morphTime=this.morphTime,t.mapProjection=this.mapProjection,t.camera=e,t.cullingVolume=e.frustum.computeCullingVolume(e.positionWC,e.directionWC,e.upWC),t.occluder=dGt(this),t.minimumTerrainHeight=0,t.minimumDisableDepthTestDistance=this._minimumDisableDepthTestDistance,t.invertClassification=this.invertClassification,t.useLogDepth=this._logDepthBuffer&&!(this.camera.frustum instanceof bn||this.camera.frustum instanceof as),t.light=this.light,t.cameraUnderground=this._cameraUnderground,t.globeTranslucencyState=this._globeTranslucencyState;let{globe:n}=this;l(n)&&n._terrainExaggerationChanged&&(this.verticalExaggeration=n._terrainExaggeration,this.verticalExaggerationRelativeHeight=n._terrainExaggerationRelativeHeight,n._terrainExaggerationChanged=!1),t.verticalExaggeration=this.verticalExaggeration,t.verticalExaggerationRelativeHeight=this.verticalExaggerationRelativeHeight,l(this._specularEnvironmentCubeMap)&&this._specularEnvironmentCubeMap.ready?(t.specularEnvironmentMaps=this._specularEnvironmentCubeMap.texture,t.specularEnvironmentMapsMaximumLOD=this._specularEnvironmentCubeMap.maximumMipmapLevel):(t.specularEnvironmentMaps=void 0,t.specularEnvironmentMapsMaximumLOD=void 0),t.sphericalHarmonicCoefficients=this.sphericalHarmonicCoefficients,this._actualInvertClassificationColor=U.clone(this.invertClassificationColor,this._actualInvertClassificationColor),KZ.isTranslucencySupported(this._context)||(this._actualInvertClassificationColor.alpha=1),t.invertClassificationColor=this._actualInvertClassificationColor,l(this.globe)?t.maximumScreenSpaceError=this.globe.maximumScreenSpaceError:t.maximumScreenSpaceError=2,this.clearPasses(t.passes),t.tilesetPassState=void 0};Ci.prototype.isVisible=function(e,t,n){if(!l(t))return!1;let{boundingVolume:i}=t;return!l(i)||!t.cull?!0:e.computeVisibility(i)===qt.OUTSIDE?!1:!l(n)||!t.occlude||!i.isOccluded(n)};var oz=new F(0,0,1,0,1,0,0,0,0,1,0,0,0,0,0,1);oz=F.inverseTransformation(oz,oz);function uGt(e,t,n,i){let o=t._frameState,r=o.context,s=e.boundingVolume;l(t._debugVolume)&&t._debugVolume.destroy();let a=m.clone(s.center);if(o.mode!==se.SCENE3D){a=F.multiplyByPoint(oz,a,a);let f=o.mapProjection,b=f.unproject(a);a=f.ellipsoid.cartographicToCartesian(b)}let c,d,{radius:u}=s;l(u)?(c=Ma.createGeometry(new Ma({radii:new m(u,u,u),vertexFormat:yn.FLAT_VERTEX_FORMAT})),d=F.fromTranslation(a)):(c=Cc.createGeometry(Cc.fromDimensions({dimensions:new m(2,2,2),vertexFormat:yn.FLAT_VERTEX_FORMAT})),d=F.fromRotationTranslation(s.halfAxes,a,new F)),t._debugVolume=new Nn({geometryInstances:new wt({geometry:zn.toWireframe(c),modelMatrix:d,attributes:{color:new $t(1,0,0,1)}}),appearance:new yn({flat:!0,translucent:!1}),asynchronous:!1});let h=o.commandList,p=o.commandList=[];t._debugVolume.update(o),e=p[0],o.useLogDepth&&(e=nA.createLogDepthCommand(e,r).command);let A;l(i)&&(A=n.framebuffer,n.framebuffer=i),e.execute(r,n),l(A)&&(n.framebuffer=A),o.commandList=h}function ju(e,t,n,i){let o=t._frameState,r=t._context;if(l(t.debugCommandFilter)&&!t.debugCommandFilter(e))return;if(e instanceof mi){e.execute(r,n);return}e.debugShowBoundingVolume&&l(e.boundingVolume)&&uGt(e,t,n,i),o.useLogDepth&&l(e.derivedCommands.logDepth)&&(e=e.derivedCommands.logDepth.command);let s=o.passes;if(!s.pick&&!s.pickVoxel&&!s.depth&&t._hdr&&l(e.derivedCommands)&&l(e.derivedCommands.hdr)&&(e=e.derivedCommands.hdr.command),s.pick||s.depth){if(s.pick&&!s.depth){if(o.pickingMetadata&&l(e.derivedCommands.pickingMetadata)){e=e.derivedCommands.pickingMetadata.pickMetadataCommand,e.execute(r,n);return}if(!o.pickingMetadata&&l(e.derivedCommands.picking)){e=e.derivedCommands.picking.pickCommand,e.execute(r,n);return}}else if(l(e.derivedCommands.depth)){e=e.derivedCommands.depth.depthOnlyCommand,e.execute(r,n);return}}if(t.debugShowCommands||t.debugShowFrustums){t._debugInspector.executeDebugShowFrustumsCommand(t,e,n);return}o.shadowState.lightShadowsEnabled&&e.receiveShadows&&l(e.derivedCommands.shadows)?e.derivedCommands.shadows.receiveCommand.execute(r,n):e.execute(r,n)}function LRe(e,t,n){let{derivedCommands:i}=e;if(!l(i))return;let o=t._frameState,r=t._context;o.useLogDepth&&l(i.logDepth)&&(e=i.logDepth.command);let{picking:s,pickingMetadata:a,depth:c}=e.derivedCommands;l(a)&&(e=i.pickingMetadata.pickMetadataCommand,e.execute(r,n)),l(s)?(e=s.pickCommand,e.execute(r,n)):l(c)&&(e=c.depthOnlyCommand,e.execute(r,n))}function wRe(e,t,n){return t.boundingVolume?.distanceSquaredTo(n)-e.boundingVolume?.distanceSquaredTo(n)}var mGt=new m;function WRe(e,t){let n=m.subtract(e,t,mGt),i=Math.max(0,m.magnitude(n));return i*i}function hGt(e,t,n){let i=e.boundingVolume,o=t.boundingVolume;return WRe(o.center,n)-WRe(i.center,n)}function fGt(e,t,n){return e.boundingVolume?.distanceSquaredTo(n)-t.boundingVolume?.distanceSquaredTo(n)+L.EPSILON12}function pGt(e,t,n,i,o){eA(i,wRe,e.camera.positionWC),l(o)&&t(o.unclassifiedCommand,e,n);for(let r=0;r<i.length;++r)t(i[r],e,n)}function AGt(e,t,n,i,o){eA(i,fGt,e.camera.positionWC),l(o)&&t(o.unclassifiedCommand,e,n);for(let r=0;r<i.length;++r)t(i[r],e,n)}function gGt(e,t,n){e.context.uniformState.updatePass(Ge.VOXELS);let i=n.commands[Ge.VOXELS];i.length=n.indices[Ge.VOXELS],eA(i,wRe,e.camera.positionWC);for(let o=0;o<i.length;++o)ju(i[o],e,t)}function bGt(e,t,n){e.context.uniformState.updatePass(Ge.GAUSSIAN_SPLATS);let i=n.commands[Ge.GAUSSIAN_SPLATS];i.length=n.indices[Ge.GAUSSIAN_SPLATS],eA(i,hGt,e.camera.positionWC);for(let o=0;o<i.length;++o)ju(i[o],e,t)}var yGt=new Ui,xGt=new id,CGt=new bn,TGt=new as;function EGt(e){let{frustum:t}=e;return l(t.fov)?t.clone(yGt):l(t.infiniteProjectionMatrix)?t.clone(xGt):l(t.width)?t.clone(CGt):t.clone(TGt)}function SGt(e){if(e._environmentState.useOIT){if(!l(e._executeOITFunction)){let{view:t,context:n}=e;e._executeOITFunction=function(i,o,r,s,a){t.globeDepth.prepareColorTextures(n),t.oit.executeCommands(i,o,r,s,a)}}return e._executeOITFunction}return e.frameState.passes.render?pGt:AGt}function _Gt(e,t,n){let{frameState:i,context:o}=e,{pick:r,pickVoxel:s}=i.passes,a=r||s,c;!a&&e._environmentState.useInvertClassification&&i.invertClassificationColor.alpha<1&&(c=e._invertClassification);let d=SGt(e);o.uniformState.updatePass(Ge.TRANSLUCENT);let u=n.commands[Ge.TRANSLUCENT];u.length=n.indices[Ge.TRANSLUCENT],d(e,ju,t,u,c)}function IGt(e,t,n){let{translucentTileClassification:i,globeDepth:o}=e._view;if(!(n.indices[Ge.CESIUM_3D_TILE_CLASSIFICATION]>0)||!i.isSupported())return;let s=n.commands[Ge.TRANSLUCENT];i.executeTranslucentCommands(e,ju,t,s,o.depthStencilTexture),i.executeClassificationCommands(e,ju,t,n)}function ZGt(e,t,n){e.context.uniformState.updatePass(Ge.CESIUM_3D_TILE_EDGES);let i=t.framebuffer;e.context.uniformState.edgeColorTexture=e.context.defaultTexture,e.context.uniformState.edgeIdTexture=e.context.defaultTexture,e.context.uniformState.edgeDepthTexture=e.context.defaultTexture,e._enableEdgeVisibility&&l(e._view)&&l(e._view.edgeFramebuffer)&&(t.framebuffer=e._view.edgeFramebuffer.framebuffer);let o=n.commands[Ge.CESIUM_3D_TILE_EDGES],r=n.indices[Ge.CESIUM_3D_TILE_EDGES];e._enableEdgeVisibility&&l(e._view)&&l(e._view.edgeFramebuffer)&&e._view.edgeFramebuffer.getClearCommand(new U(0,0,0,0)).execute(e.context,t);for(let s=0;s<r;++s)ju(o[s],e,t);t.framebuffer=i}function Vte(e,t){let{camera:n,context:i,frameState:o}=e,{uniformState:r}=i;r.updateCamera(n);let s=EGt(n);s.near=n.frustum.near,s.far=n.frustum.far;let a=o.passes,c=a.pick||a.pickVoxel;c||RGt(e,t);let{clearGlobeDepth:d,renderTranslucentDepthForPick:u,useDepthPlane:h,useGlobeDepthFramebuffer:p,useInvertClassification:A,usePostProcessSelected:f}=e._environmentState,{globeDepth:b,globeTranslucencyFramebuffer:C,sceneFramebuffer:T,frustumCommandsList:E}=e._view,S=E.length,I=e._globeTranslucencyState,R=e._depthClearCommand,V=e._stencilClearCommand,W=e._classificationStencilClearCommand,B=e._depthPlane,N=n.position.z;function P(_,Z){r.updatePass(Z);let G=_.commands[Z],w=_.indices[Z];for(let X=0;X<w;++X)ju(G[X],e,t);return w}function g(_,Z){r.updatePass(Z);let G=_.commands[Z],w=_.indices[Z];for(let X=0;X<w;++X)LRe(G[X],e,t)}for(let _=0;_<S;++_){let Z=S-_-1,G=E[Z];e.mode===se.SCENE2D?(n.position.z=N-G.near+1,s.far=Math.max(1,G.far-G.near),s.near=1,r.update(o),r.updateFrustum(s)):(s.near=Z!==0?G.near*e.opaqueFrustumNearOffset:G.near,s.far=G.far,r.updateFrustum(s)),R.execute(i,t),i.stencilBuffer&&V.execute(i,t),I.translucent?(r.updatePass(Ge.GLOBE),I.executeGlobeCommands(G,ju,C,e,t)):P(G,Ge.GLOBE),p&&b.executeCopyDepth(i,t),u||(I.translucent?(r.updatePass(Ge.TERRAIN_CLASSIFICATION),I.executeGlobeClassificationCommands(G,ju,C,e,t)):P(G,Ge.TERRAIN_CLASSIFICATION)),d&&(R.execute(i,t),h&&B.execute(i,t));let w;if(ZGt(e,t,G),e._enableEdgeVisibility&&l(e._view)&&l(e._view.edgeFramebuffer)){let k=e._view.edgeFramebuffer.colorTexture;l(k)?e.context.uniformState.edgeColorTexture=k:e.context.uniformState.edgeColorTexture=e.context.defaultTexture;let v=e._view.edgeFramebuffer.idTexture;l(v)?e.context.uniformState.edgeIdTexture=v:e.context.uniformState.edgeIdTexture=e.context.defaultTexture;let D=e._view.edgeFramebuffer.depthTexture;l(D)?e.context.uniformState.edgeDepthTexture=D:e.context.uniformState.edgeDepthTexture=e.context.defaultTexture}else e.context.uniformState.edgeColorTexture=e.context.defaultTexture,e.context.uniformState.edgeIdTexture=e.context.defaultTexture,e.context.uniformState.edgeDepthTexture=e.context.defaultTexture;if(!A||c||u)w=P(G,Ge.CESIUM_3D_TILE),w>0&&(p&&(b.prepareColorTextures(i,d),b.executeUpdateDepth(i,t,b.depthStencilTexture)),u||(w=P(G,Ge.CESIUM_3D_TILE_CLASSIFICATION)));else{e._invertClassification.clear(i,t);let k=t.framebuffer;t.framebuffer=e._invertClassification._fbo.framebuffer,w=P(G,Ge.CESIUM_3D_TILE),p&&(e._invertClassification.prepareTextures(i),b.executeUpdateDepth(i,t,e._invertClassification._fbo.getDepthStencilTexture())),w=P(G,Ge.CESIUM_3D_TILE_CLASSIFICATION_IGNORE_SHOW),t.framebuffer=k,e._invertClassification.executeClassified(i,t),o.invertClassificationColor.alpha===1&&e._invertClassification.executeUnclassified(i,t),w>0&&i.stencilBuffer&&W.execute(i,t),w=P(G,Ge.CESIUM_3D_TILE_CLASSIFICATION)}if(w>0&&i.stencilBuffer&&V.execute(i,t),gGt(e,t,G),P(G,Ge.OPAQUE),bGt(e,t,G),Z!==0&&e.mode!==se.SCENE2D&&(s.near=G.near,r.updateFrustum(s)),_Gt(e,t,G),IGt(e,t,G),i.depthTexture&&e.useDepthPicking&&(p||u)){let k=e._picking.getPickDepth(e,Z);k.update(i,b.depthStencilTexture),k.executeCopyDepth(i,t)}if(c||!f)continue;let X=t.framebuffer;t.framebuffer=T.getIdFramebuffer(),s.near=Z!==0?G.near*e.opaqueFrustumNearOffset:G.near,s.far=G.far,r.updateFrustum(s),I.translucent?(r.updatePass(Ge.GLOBE),I.executeGlobeCommands(G,LRe,C,e,t)):g(G,Ge.GLOBE),d&&(R.framebuffer=t.framebuffer,R.execute(i,t),R.framebuffer=void 0),d&&h&&B.execute(i,t),g(G,Ge.CESIUM_3D_TILE),g(G,Ge.OPAQUE),g(G,Ge.TRANSLUCENT),t.framebuffer=X}}function RGt(e,t){let{context:n,environmentState:i,view:o}=e;if(n.uniformState.updatePass(Ge.ENVIRONMENT),l(i.skyBoxCommand)&&ju(i.skyBoxCommand,e,t),i.isSkyAtmosphereVisible&&ju(i.skyAtmosphereCommand,e,t),i.isSunVisible&&(i.sunDrawCommand.execute(n,t),e.sunBloom&&!i.useWebVR)){let s;i.useGlobeDepthFramebuffer?s=o.globeDepth.framebuffer:i.usePostProcess?s=o.sceneFramebuffer.framebuffer:s=i.originalFramebuffer,e._sunPostProcess.execute(n),e._sunPostProcess.copy(n,s),t.framebuffer=s}i.isMoonVisible&&i.moonCommand.execute(n,t);let r=e.frameState.panoramaCommandList;for(let s=r.length-1;s>=0;s--){let a=r[s];l(a.shaderProgram)?ju(r[s],e,t):r.splice(s,1)}}function NRe(e){e.context.uniformState.updatePass(Ge.COMPUTE);let t=e._environmentState.sunComputeCommand;l(t)&&t.execute(e._computeEngine);let n=e._computeCommandList;for(let i=0;i<n.length;++i)n[i].execute(e._computeEngine)}function VGt(e,t){e.context.uniformState.updatePass(Ge.OVERLAY);let n=e.context,i=e._overlayCommandList;for(let o=0;o<i.length;++o)i[o].execute(n,t)}function GGt(e,t,n){let{shadowMapCullingVolume:i,isPointLight:o,passes:r}=n,s=r.length,a=[Ge.GLOBE,Ge.CESIUM_3D_TILE,Ge.OPAQUE,Ge.TRANSLUCENT];for(let c=0;c<t.length;++c){let d=t[c];if(e.updateDerivedCommands(d),!(!d.castShadows||a.indexOf(d.pass)<0||!e.isVisible(i,d)))if(o)for(let u=0;u<s;++u)r[u].commandList.push(d);else if(s===1)r[0].commandList.push(d);else{let u=!1;for(let h=s-1;h>=0;--h){let p=r[h].cullingVolume;if(e.isVisible(p,d))r[h].commandList.push(d),u=!0;else if(u)break}}}}function PRe(e){let{shadowState:t,commandList:n}=e.frameState,{shadowsEnabled:i,shadowMaps:o}=t;if(!i)return;let{context:r}=e,{uniformState:s}=r;for(let a=0;a<o.length;++a){let c=o[a];if(c.outOfView)continue;let{passes:d}=c;for(let u=0;u<d.length;++u)d[u].commandList.length=0;GGt(e,n,c);for(let u=0;u<d.length;++u){let h=c.passes[u],{camera:p,commandList:A}=h;s.updateCamera(p),c.updatePass(r,u);for(let f=0;f<A.length;++f){let b=A[f];s.updatePass(b.pass);let C=b.derivedCommands.shadows.castCommands[a];ju(C,e,h.passState)}}}}var LGt=new m;Ci.prototype.updateAndExecuteCommands=function(e,t){kGt(this,e,t),this._environmentState.useWebVR?WGt(this,e,t):this._frameState.mode!==se.SCENE2D||this._mapMode2D===od.ROTATE?ex(!0,this,e):vGt(this,e)};function WGt(e,t){let n=e._view,i=n.camera,r=e._environmentState.renderTranslucentDepthForPick;XRe(e),n.createPotentiallyVisibleSet(e),NRe(e),r||PRe(e);let s=t.viewport;s.x=0,s.y=0,s.width=s.width*.5;let a=Zo.clone(i,e._cameraVR);a.frustum=i.frustum;let c=i.frustum.near,d=c*(e.focalLength??5),u=e.eyeSeparation??d/30,h=m.multiplyByScalar(a.right,u*.5,LGt);i.frustum.aspectRatio=s.width/s.height;let p=.5*u*c/d;m.add(a.position,h,i.position),i.frustum.xOffset=p,Vte(e,t),s.x=s.width,m.subtract(a.position,h,i.position),i.frustum.xOffset=-p,Vte(e,t),Zo.clone(a,i)}var FGt=new Ae(Math.PI,L.PI_OVER_TWO),BGt=new m,wGt=new m,NGt=new F,PGt=new F,XGt=new m,YGt=new m,MGt=new nt;function vGt(e,t){let{frameState:n,camera:i}=e,{uniformState:o}=e.context,r=t.viewport,s=nt.clone(r,MGt);t.viewport=s;let a=FGt,c=BGt;e.mapProjection.project(a,c);let u=m.clone(i.position,wGt),h=F.clone(i.transform,PGt),p=i.frustum.clone();i._setTransform(F.IDENTITY);let A=F.computeViewportTransformation(s,0,1,NGt),f=i.frustum.projectionMatrix,b=i.positionWC.y,C=m.fromElements(L.sign(b)*c.x-b,0,-i.positionWC.x,XGt),T=bt.pointToGLWindowCoordinates(f,A,C,YGt);T.x=Math.floor(T.x);let E=s.x,S=s.width;if(b===0||T.x<=E||T.x>=E+S)ex(!0,e,t);else if(Math.abs(E+S*.5-T.x)<1)s.width=T.x-s.x,i.position.x*=L.sign(i.position.x),i.frustum.right=0,n.cullingVolume=i.frustum.computeCullingVolume(i.positionWC,i.directionWC,i.upWC),o.update(n),ex(!0,e,t),s.x=T.x,i.position.x=-i.position.x,i.frustum.right=-i.frustum.left,i.frustum.left=0,n.cullingVolume=i.frustum.computeCullingVolume(i.positionWC,i.directionWC,i.upWC),o.update(n),ex(!1,e,t);else if(T.x>E+S*.5){s.width=T.x-E;let I=i.frustum.right;i.frustum.right=c.x-b,n.cullingVolume=i.frustum.computeCullingVolume(i.positionWC,i.directionWC,i.upWC),o.update(n),ex(!0,e,t),s.x=T.x,s.width=E+S-T.x,i.position.x=-i.position.x,i.frustum.left=-i.frustum.right,i.frustum.right=I-i.frustum.right*2,n.cullingVolume=i.frustum.computeCullingVolume(i.positionWC,i.directionWC,i.upWC),o.update(n),ex(!1,e,t)}else{s.x=T.x,s.width=E+S-T.x;let I=i.frustum.left;i.frustum.left=-c.x-b,n.cullingVolume=i.frustum.computeCullingVolume(i.positionWC,i.directionWC,i.upWC),o.update(n),ex(!0,e,t),s.x=E,s.width=T.x-E,i.position.x=-i.position.x,i.frustum.right=-i.frustum.left,i.frustum.left=I-i.frustum.left*2,n.cullingVolume=i.frustum.computeCullingVolume(i.positionWC,i.directionWC,i.upWC),o.update(n),ex(!1,e,t)}i._setTransform(h),m.clone(u,i.position),i.frustum=p.clone(),t.viewport=r}function ex(e,t,n){let i=t._view,{renderTranslucentDepthForPick:o}=t._environmentState;e||(t.frameState.commandList.length=0),XRe(t),i.createPotentiallyVisibleSet(t),e&&(NRe(t),o||PRe(t)),Vte(t,n)}var FRe=new Os;Ci.prototype.updateEnvironment=function(){let e=this._frameState,t=this._view,n=this._environmentState,i=e.passes.render,o=e.passes.offscreen,r=this.atmosphere,s=this.skyAtmosphere,a=this.globe,c=this._globeTranslucencyState;if(!i||this._mode!==se.SCENE2D&&t.camera.frustum instanceof bn||!c.environmentVisible)n.skyAtmosphereCommand=void 0,n.skyBoxCommand=void 0,n.sunDrawCommand=void 0,n.sunComputeCommand=void 0,n.moonCommand=void 0;else{if(l(s)){if(l(a))s.setDynamicLighting(og.fromGlobeFlags(a)),n.isReadyForAtmosphere=n.isReadyForAtmosphere||!a.show||a._surface._tilesToRender.length>0;else{let T=r.dynamicLighting;s.setDynamicLighting(T),n.isReadyForAtmosphere=!0}n.skyAtmosphereCommand=s.update(e,a),l(n.skyAtmosphereCommand)&&this.updateDerivedCommands(n.skyAtmosphereCommand)}else n.skyAtmosphereCommand=void 0;n.skyBoxCommand=l(this.skyBox)?this.skyBox.update(e,this._hdr):void 0;let C=l(this.sun)?this.sun.update(e,t.passState,this._hdr):void 0;n.sunDrawCommand=l(C)?C.drawCommand:void 0,n.sunComputeCommand=l(C)?C.computeCommand:void 0,n.moonCommand=l(this.moon)?this.moon.update(e):void 0}let d=n.clearGlobeDepth=l(a)&&a.show&&(!a.depthTestAgainstTerrain||this.mode===se.SCENE2D);(n.useDepthPlane=d&&this.mode===se.SCENE3D&&c.useDepthPlane)&&this._depthPlane.update(e),n.renderTranslucentDepthForPick=!1,n.useWebVR=this._useWebVR&&this.mode!==se.SCENE2D&&!o;let h=e.mode===se.SCENE3D&&!c.sunVisibleThroughGlobe?e.occluder:void 0,p=e.cullingVolume,A=FRe.planes;for(let C=0;C<5;++C)A[C]=p.planes[C];p=FRe,n.isSkyAtmosphereVisible=l(n.skyAtmosphereCommand)&&n.isReadyForAtmosphere,n.isSunVisible=this.isVisible(p,n.sunDrawCommand,h),n.isMoonVisible=this.isVisible(p,n.moonCommand,h);let f=this.specularEnvironmentMaps,b=this._specularEnvironmentCubeMap;l(f)&&b?.url!==f?(b=b&&b.destroy(),this._specularEnvironmentCubeMap=new wh(f)):!l(f)&&l(b)&&(b.destroy(),this._specularEnvironmentCubeMap=void 0),l(this._specularEnvironmentCubeMap)&&this._specularEnvironmentCubeMap.update(e)};function UGt(e){let t=e._frameState;e.debugShowFrustumPlanes!==e._debugShowFrustumPlanes&&(e.debugShowFrustumPlanes?e._debugFrustumPlanes=new tA({camera:e.camera,updateOnChange:!1,frustumSplits:t.frustumSplits}):e._debugFrustumPlanes=e._debugFrustumPlanes&&e._debugFrustumPlanes.destroy(),e._debugShowFrustumPlanes=e.debugShowFrustumPlanes),l(e._debugFrustumPlanes)&&e._debugFrustumPlanes.update(t)}function DGt(e){let t=e._frameState,{passes:n,shadowState:i,shadowMaps:o}=t,r=o.length,s=r>0&&!n.pick&&!n.pickVoxel&&e.mode===se.SCENE3D;if(s!==i.shadowsEnabled&&(++i.lastDirtyTime,i.shadowsEnabled=s),i.lightShadowsEnabled=!1,!!s){for(let a=0;a<r;++a)if(o[a]!==i.shadowMaps[a]){++i.lastDirtyTime;break}i.shadowMaps.length=0,i.lightShadowMaps.length=0;for(let a=0;a<r;++a){let c=o[a];c.update(t),i.shadowMaps.push(c),c.fromLightSource&&(i.lightShadowMaps.push(c),i.lightShadowsEnabled=!0),c.dirty&&(++i.lastDirtyTime,c.dirty=!1)}}}function XRe(e){let t=e._frameState;t.edgeVisibilityRequested=!1,e._groundPrimitives.update(t),e._primitives.update(t),t.edgeVisibilityRequested&&e._enableEdgeVisibility===!1&&(e._enableEdgeVisibility=!0),UGt(e),DGt(e),e._globe&&e._globe.render(t)}function kGt(e,t,n){let i=e._context,o=e._frameState,r=e._environmentState,s=e._view,a=o.passes,c=a.pick||a.pickVoxel;l(s.globeDepth)&&(s.globeDepth.picking=c);let d=r.useWebVR;r.originalFramebuffer=t.framebuffer,l(e.sun)&&e.sunBloom!==e._sunBloom?(e.sunBloom&&!d?e._sunPostProcess=new GM:l(e._sunPostProcess)&&(e._sunPostProcess=e._sunPostProcess.destroy()),e._sunBloom=e.sunBloom):!l(e.sun)&&l(e._sunPostProcess)&&(e._sunPostProcess=e._sunPostProcess.destroy(),e._sunBloom=!1);let u=e._clearColorCommand;U.clone(n,u.color),u.execute(i,t);let h=r.useGlobeDepthFramebuffer=l(s.globeDepth);h&&(s.globeDepth.update(i,t,s.viewport,e.msaaSamples,e._hdr,r.clearGlobeDepth),s.globeDepth.clear(i,t,n));let p=s.oit,A=r.useOIT=!c&&l(p)&&p.isSupported();A&&(p.update(i,t,s.globeDepth.colorFramebufferManager,e._hdr,e.msaaSamples),p.clear(i,t,n),r.useOIT=p.isSupported());let f=e.postProcessStages,b=r.usePostProcess=!c&&(e._hdr||f.length>0||f.ambientOcclusion.enabled||f.fxaa.enabled||f.bloom.enabled);r.usePostProcessSelected=!1,b&&(s.sceneFramebuffer.update(i,s.viewport,e._hdr,e.msaaSamples),s.sceneFramebuffer.clear(i,t,n),f.update(i,o.useLogDepth,e._hdr),f.clear(i),b=r.usePostProcess=f.ready,r.usePostProcessSelected=b&&f.hasSelected),r.isSunVisible&&e.sunBloom&&!d?(t.framebuffer=e._sunPostProcess.update(t),e._sunPostProcess.clear(i,t,n)):h?t.framebuffer=s.globeDepth.framebuffer:b&&(t.framebuffer=s.sceneFramebuffer.framebuffer),l(t.framebuffer)&&u.execute(i,t);let C=r.useInvertClassification=!c&&l(t.framebuffer)&&e.invertClassification;if(!c&&e._enableEdgeVisibility&&s.edgeFramebuffer.update(i,s.viewport,e._hdr),C){let E;if(o.invertClassificationColor.alpha===1&&h&&(E=s.globeDepth.framebuffer),l(E)||i.depthTexture){if(e._invertClassification.previousFramebuffer=E,e._invertClassification.update(i,e.msaaSamples,s.globeDepth.colorFramebufferManager),e._invertClassification.clear(i,t),o.invertClassificationColor.alpha<1&&A){let S=e._invertClassification.unclassifiedCommand,I=S.derivedCommands;I.oit=p.createDerivedCommands(S,i,I.oit)}}else r.useInvertClassification=!1}e._globeTranslucencyState.translucent&&s.globeTranslucencyFramebuffer.updateAndClear(e._hdr,s.viewport,i,t)}Ci.prototype.resolveFramebuffers=function(e){let t=this._context,n=this._environmentState,i=this._view,{globeDepth:o,translucentTileClassification:r}=i;l(o)&&o.prepareColorTextures(t);let{useOIT:s,useGlobeDepthFramebuffer:a,usePostProcess:c,originalFramebuffer:d}=n,u=a?o.colorFramebufferManager:void 0,h=i.sceneFramebuffer._colorFramebuffer,p=i.sceneFramebuffer.idFramebuffer;if(s&&(e.framebuffer=c?h.framebuffer:d,i.oit.execute(t,e)),r.hasTranslucentDepth&&r.isSupported()&&r.execute(this,e),c){i.sceneFramebuffer.prepareColorTextures(t);let A=h;a&&!s&&(A=u);let f=this.postProcessStages,b=A.getColorTexture(0),C=p.getColorTexture(0),T=(u??h).getDepthStencilTexture();f.execute(t,b,T,C),f.copy(t,d)}!s&&!c&&a&&(e.framebuffer=d,o.executeCopyColor(t,e))};function QGt(e){let t=e._frameState.afterRender,n=t.slice();t.length=0;for(let i=0;i<n.length;++i)n[i]()&&e.requestRender()}function OGt(e){if(e.mode===se.MORPHING)return;let t=e.camera.positionCartographic;return e.getHeight(t)}function YRe(e,t,n){let i=Number.NEGATIVE_INFINITY;if(e instanceof $l){let o=e.length;for(let r=0;r<o;++r){let s=e.get(r),a=YRe(s,t,n);l(a)&&a>i&&(i=a)}}else if(e.isCesium3DTileset&&e.show&&e.enableCollision){let o=e.getHeight(t,n);if(l(o)&&o>i)return o}return i}Ci.prototype.getHeight=function(e,t){if(!l(e))return;let n=t===rt.CLAMP_TO_TERRAIN||t===rt.RELATIVE_TO_TERRAIN,i=t===rt.CLAMP_TO_3D_TILE||t===rt.RELATIVE_TO_3D_TILE;if(!l(e))return;let o=Number.NEGATIVE_INFINITY;if(!n){let s=YRe(this.primitives,e,this);l(s)&&s>o&&(o=s)}let r=this._globe;if(!i&&l(r)&&r.show){let s=r.getHeight(e);s>o&&(o=s)}if(o>Number.NEGATIVE_INFINITY)return o};var Rte=new Ae;Ci.prototype.updateHeight=function(e,t,n){let i=this._ellipsoid,o=A=>{Ae.clone(e,Rte);let f;l(A)&&(f=A.height),l(f)||(f=this.getHeight(e,n)),l(f)&&(Rte.height=f,t(Rte))},r=n===rt.CLAMP_TO_TERRAIN||n===rt.RELATIVE_TO_TERRAIN,s=n===rt.CLAMP_TO_3D_TILE||n===rt.RELATIVE_TO_3D_TILE,a;!s&&l(this.globe)&&(a=this.globe._surface.updateHeight(e,o));let c={},d=A=>{if(r||A.isDestroyed()||!A.isCesium3DTileset)return;let f=A.updateHeight(e,o,i);c[A.id]=f};if(!r){let A=this.primitives.length;for(let f=0;f<A;++f){let b=this.primitives.get(f);d(b)}}let u=this.primitives.primitiveAdded.addEventListener(d),h=this.primitives.primitiveRemoved.addEventListener(A=>{A.isDestroyed()||!A.isCesium3DTileset||(l(c[A.id])&&c[A.id](),delete c[A.id])});return()=>{a=a&&a(),Object.values(c).forEach(A=>A()),c={},u(),h()}};function zGt(e){let t=e.camera,n=e._mode,i=e._screenSpaceCameraController,o=t.positionCartographic;if(!l(o))return!1;if(!i.onMap()&&o.height<0)return!0;if(n===se.SCENE2D||n===se.MORPHING)return!1;let r=e._globeHeight;return l(r)&&o.height<r}Ci.prototype.initializeFrame=function(){if(this._shaderFrameCount++===120&&(this._shaderFrameCount=0,this._context.shaderCache.destroyReleasedShaderPrograms(),this._context.textureCache.destroyReleasedTextures()),this._tweens.update(),this._globeHeightDirty){l(this._removeUpdateHeightCallback)&&(this._removeUpdateHeightCallback(),this._removeUpdateHeightCallback=void 0),this._globeHeight=OGt(this),this._globeHeightDirty=!1;let e=this.camera.positionCartographic;this._removeUpdateHeightCallback=this.updateHeight(e,t=>{this.isDestroyed()||(this._globeHeight=t.height)})}this._cameraUnderground=zGt(this),this._globeTranslucencyState.update(this),this._screenSpaceCameraController.update(),l(this._deviceOrientationCameraController)&&this._deviceOrientationCameraController.update(),this.camera.update(this._mode),this.camera._updateCameraChanged()};function HGt(e,t){if(e.debugShowFramesPerSecond){if(!l(e._performanceDisplay)){let n=document.createElement("div");n.className="cesium-performanceDisplay-defaultContainer",e._canvas.parentNode.appendChild(n);let o=new Tb({container:n});e._performanceDisplay=o,e._performanceContainer=n}e._performanceDisplay.throttled=e.requestRenderMode,e._performanceDisplay.update(t)}else l(e._performanceDisplay)&&(e._performanceDisplay=e._performanceDisplay&&e._performanceDisplay.destroy(),e._performanceContainer.parentNode.removeChild(e._performanceContainer))}function JGt(e){e._jobScheduler.resetBudgets();let t=e._frameState;e.primitives.prePassesUpdate(t),l(e.globe)&&e.globe.update(t),e._picking.update(),t.creditDisplay.update()}function KGt(e){e.primitives.postPassesUpdate(e._frameState),Yc.update()}var jGt=new U;function qGt(e){let t=e._frameState,n=e.context,{uniformState:i}=n,o=e._defaultView;e._view=o,e.updateFrameState(),t.passes.render=!0,t.passes.postProcess=e.postProcessStages.hasSelected,t.tilesetPassState=cGt;let r=e.backgroundColor??U.BLACK;e._hdr&&(r=U.clone(r,jGt),r.red=Math.pow(r.red,e.gamma),r.green=Math.pow(r.green,e.gamma),r.blue=Math.pow(r.blue,e.gamma)),t.backgroundColor=r,t.atmosphere=e.atmosphere,e.fog.update(t),i.update(t);let s=e.shadowMap;l(s)&&s.enabled&&(!l(e.light)||e.light instanceof VA?m.negate(i.sunDirectionWC,e._shadowMapCamera.direction):m.clone(e.light.direction,e._shadowMapCamera.direction),t.shadowMaps.push(s)),e._computeCommandList.length=0,e._overlayCommandList.length=0;let a=o.viewport;a.x=0,a.y=0,a.width=n.drawingBufferWidth,a.height=n.drawingBufferHeight;let c=o.passState;c.framebuffer=void 0,c.blendingEnabled=void 0,c.scissorTest=void 0,c.viewport=nt.clone(a,c.viewport),n.beginFrame(),l(e.globe)&&e.globe.beginFrame(t),e.updateEnvironment(),e.updateAndExecuteCommands(c,r),e.resolveFramebuffers(c),c.framebuffer=void 0,VGt(e,c),l(e.globe)&&(e.globe.endFrame(t),e.globe.tilesLoaded||(e._renderRequested=!0)),n.endFrame()}function wE(e,t){try{t(e)}catch(n){if(e._renderError.raiseEvent(e,n),e.rethrowRenderErrors)throw n}}function $Gt(e){return e._picking.updateMostDetailedRayPicks(e)}Ci.prototype.render=function(e){this._preUpdate.raiseEvent(this,e);let t=this._frameState;t.newFrame=!1,l(e)||(e=q.now());let n=this._view.checkForCameraUpdates(this);n&&(this._globeHeightDirty=!0);let i=!this.requestRenderMode||this._renderRequested||n||this._logDepthBufferDirty||this._hdrDirty||this.mode===se.MORPHING;if(!i&&l(this.maximumRenderTimeChange)&&l(this._lastRenderTime)){let o=Math.abs(q.secondsDifference(this._lastRenderTime,e));i=i||o>this.maximumRenderTimeChange}if(i){this._lastRenderTime=q.clone(e,this._lastRenderTime),this._renderRequested=!1,this._logDepthBufferDirty=!1,this._hdrDirty=!1;let o=L.incrementWrap(t.frameNumber,15e6,1);BRe(this,o,e),t.newFrame=!0}wE(this,JGt),this.primitives.show&&(wE(this,$Gt),wE(this,eLt),wE(this,tLt),i||wE(this,nLt)),this._postUpdate.raiseEvent(this,e),i&&(this._preRender.raiseEvent(this,e),t.creditDisplay.beginFrame(),wE(this,qGt)),HGt(this,i),wE(this,KGt),QGt(this),i&&(this._postRender.raiseEvent(this,e),t.creditDisplay.endFrame())};Ci.prototype.forceRender=function(e){this._renderRequested=!0,this.render(e)};Ci.prototype.requestRender=function(){this._renderRequested=!0};Ci.prototype.clampLineWidth=function(e){return Math.max(Bt.minimumAliasedLineWidth,Math.min(e,Bt.maximumAliasedLineWidth))};Ci.prototype.pick=function(e,t,n){return this._picking.pick(this,e,t,n,1)[0]};Ci.prototype.pickAsync=async function(e,t,n){return(await this._picking.pickAsync(this,e,t,n,1))[0]};Ci.prototype.pickVoxel=function(e,t,n){let i=this.pick(e,t,n);if(!l(i))return;let o=i.primitive;if(!(o instanceof $y))return;let r=this._picking.pickVoxelCoordinate(this,e,t,n),s=255*r[0]+r[1],a=o._traversal.findKeyframeNode(s);if(!l(a))return;let c=255*r[2]+r[3];return FM.fromKeyframeNode(o,s,c,a)};Ci.prototype.pickMetadata=function(e,t,n,i){let o=this.pick(e);if(!l(o))return;let r=o.detail?.model?.structuralMetadata;if(!l(r))return;let s=r.schema,a=av(s,t,n,i);if(!l(a))return;let c=lv(r,n,i);if(!l(c))return;let d=new cv(t,n,i,a,c);return this._picking.pickMetadata(this,e,d)};Ci.prototype.pickMetadataSchema=function(e){let t=this.pick(e);return l(t)?t.detail?.model?.structuralMetadata?.schema:void 0};Ci.prototype.pickPositionWorldCoordinates=function(e,t){return this._picking.pickPositionWorldCoordinates(this,e,t)};Ci.prototype.pickPosition=function(e,t){return this._picking.pickPosition(this,e,t)};Ci.prototype.drillPick=function(e,t,n,i){return this._picking.drillPick(this,e,t,n,i)};function eLt(e){let t=e._frameState;_te.camera=t.camera,_te.cullingVolume=t.cullingVolume,e.primitives.updateForPass(t,_te)}function tLt(e){let t=e._frameState;if(!t.camera.canPreloadFlight())return;Ite.camera=e.preloadFlightCamera,Ite.cullingVolume=e.preloadFlightCullingVolume,e.primitives.updateForPass(t,Ite)}function nLt(e){e.primitives.updateForPass(e._frameState,lGt)}Ci.prototype.pickFromRay=function(e,t,n){return this._picking.pickFromRay(this,e,t,n)};Ci.prototype.drillPickFromRay=function(e,t,n,i){return this._picking.drillPickFromRay(this,e,t,n,i)};Ci.prototype.pickFromRayMostDetailed=function(e,t,n){return this._picking.pickFromRayMostDetailed(this,e,t,n)};Ci.prototype.drillPickFromRayMostDetailed=function(e,t,n,i){return this._picking.drillPickFromRayMostDetailed(this,e,t,n,i)};Ci.prototype.sampleHeight=function(e,t,n){return this._picking.sampleHeight(this,e,t,n)};Ci.prototype.clampToHeight=function(e,t,n,i){return this._picking.clampToHeight(this,e,t,n,i)};Ci.prototype.sampleHeightMostDetailed=function(e,t,n){return this._picking.sampleHeightMostDetailed(this,e,t,n)};Ci.prototype.clampToHeightMostDetailed=function(e,t,n){return this._picking.clampToHeightMostDetailed(this,e,t,n)};Ci.prototype.cartesianToCanvasCoordinates=function(e,t){return so.worldToWindowCoordinates(this,e,t)};Ci.prototype.completeMorph=function(){this._transitioner.completeMorph()};Ci.prototype.morphTo2D=function(e){e=e??2,this._transitioner.morphTo2D(e,this._ellipsoid)};Ci.prototype.morphToColumbusView=function(e){e=e??2,this._transitioner.morphToColumbusView(e,this._ellipsoid)};Ci.prototype.morphTo3D=function(e){e=e??2,this._transitioner.morphTo3D(e,this._ellipsoid)};function iLt(e,t){if(e._removeTerrainProviderReadyListener=e._removeTerrainProviderReadyListener&&e._removeTerrainProviderReadyListener(),t.ready){l(e.globe)&&(e.globe.terrainProvider=t.provider);return}e.globe.terrainProvider=void 0,e._removeTerrainProviderReadyListener=t.readyEvent.addEventListener(n=>{l(e)&&l(e.globe)&&(e.globe.terrainProvider=n),e._removeTerrainProviderReadyListener()})}Ci.prototype.setTerrain=function(e){return iLt(this,e),e};Ci.prototype.isDestroyed=function(){return!1};Ci.prototype.destroy=function(){this._tweens.removeAll(),this._computeEngine=this._computeEngine&&this._computeEngine.destroy(),this._screenSpaceCameraController=this._screenSpaceCameraController&&this._screenSpaceCameraController.destroy(),this._deviceOrientationCameraController=this._deviceOrientationCameraController&&!this._deviceOrientationCameraController.isDestroyed()&&this._deviceOrientationCameraController.destroy(),this._primitives=this._primitives&&this._primitives.destroy(),this._groundPrimitives=this._groundPrimitives&&this._groundPrimitives.destroy(),this._globe=this._globe&&this._globe.destroy(),this._removeTerrainProviderReadyListener=this._removeTerrainProviderReadyListener&&this._removeTerrainProviderReadyListener(),this.skyBox=this.skyBox&&this.skyBox.destroy(),this.skyAtmosphere=this.skyAtmosphere&&this.skyAtmosphere.destroy(),this._debugSphere=this._debugSphere&&this._debugSphere.destroy(),this.sun=this.sun&&this.sun.destroy(),this._sunPostProcess=this._sunPostProcess&&this._sunPostProcess.destroy(),this._depthPlane=this._depthPlane&&this._depthPlane.destroy(),this._transitioner=this._transitioner&&this._transitioner.destroy(),this._debugFrustumPlanes=this._debugFrustumPlanes&&this._debugFrustumPlanes.destroy(),this._brdfLutGenerator=this._brdfLutGenerator&&this._brdfLutGenerator.destroy(),this._picking=this._picking&&this._picking.destroy(),this._defaultView=this._defaultView&&this._defaultView.destroy(),this._view=void 0,this._removeCreditContainer&&this._canvas.parentNode.removeChild(this._creditContainer),this.postProcessStages=this.postProcessStages&&this.postProcessStages.destroy(),this._context=this._context&&this._context.destroy(),this._frameState.creditDisplay=this._frameState.creditDisplay&&this._frameState.creditDisplay.destroy(),l(this._performanceDisplay)&&(this._performanceDisplay=this._performanceDisplay&&this._performanceDisplay.destroy(),this._performanceContainer.parentNode.removeChild(this._performanceContainer)),this._removeRequestListenerCallback(),this._removeTaskProcessorListenerCallback();for(let e=0;e<this._removeGlobeCallbacks.length;++e)this._removeGlobeCallbacks[e]();return this._removeGlobeCallbacks.length=0,l(this._removeUpdateHeightCallback)&&(this._removeUpdateHeightCallback(),this._removeUpdateHeightCallback=void 0),he(this)};var dv=Ci;var oAo=y(x(),1);function iR(e){e=e??ie.WGS84,this.show=!0,this.perFragmentAtmosphere=!1,this._ellipsoid=e;let t=1.025,n=m.multiplyByScalar(e.radii,t,new m);this._scaleMatrix=F.fromScale(n),this._modelMatrix=new F,this._command=new ot({owner:this,modelMatrix:this._modelMatrix}),this._spSkyFromSpace=void 0,this._spSkyFromAtmosphere=void 0,this._flags=void 0,this.atmosphereLightIntensity=50,this.atmosphereRayleighCoefficient=new m(55e-7,13e-6,284e-7),this.atmosphereMieCoefficient=new m(21e-6,21e-6,21e-6),this.atmosphereRayleighScaleHeight=1e4,this.atmosphereMieScaleHeight=3200,this.atmosphereMieAnisotropy=.9,this.hueShift=0,this.saturationShift=0,this.brightnessShift=0,this._hueSaturationBrightness=new m;let i=new m;i.x=e.maximumRadius*t,i.y=e.maximumRadius,i.z=0,this._radiiAndDynamicAtmosphereColor=i;let o=this;this._command.uniformMap={u_radiiAndDynamicAtmosphereColor:function(){return o._radiiAndDynamicAtmosphereColor},u_hsbShift:function(){return o._hueSaturationBrightness.x=o.hueShift,o._hueSaturationBrightness.y=o.saturationShift,o._hueSaturationBrightness.z=o.brightnessShift,o._hueSaturationBrightness},u_atmosphereLightIntensity:function(){return o.atmosphereLightIntensity},u_atmosphereRayleighCoefficient:function(){return o.atmosphereRayleighCoefficient},u_atmosphereMieCoefficient:function(){return o.atmosphereMieCoefficient},u_atmosphereRayleighScaleHeight:function(){return o.atmosphereRayleighScaleHeight},u_atmosphereMieScaleHeight:function(){return o.atmosphereMieScaleHeight},u_atmosphereMieAnisotropy:function(){return o.atmosphereMieAnisotropy}}}Object.defineProperties(iR.prototype,{ellipsoid:{get:function(){return this._ellipsoid}}});iR.prototype.setDynamicLighting=function(e){this._radiiAndDynamicAtmosphereColor.z=e};var Gte=new F;iR.prototype.update=function(e,t){if(!this.show)return;let n=e.mode;if(n!==se.SCENE3D&&n!==se.MORPHING||!e.passes.render)return;let i=F.fromRotationTranslation(e.context.uniformState.inverseViewRotation,m.ZERO,Gte),o=F.multiplyTransformation(i,ro.Y_UP_TO_Z_UP,Gte),r=F.multiply(this._scaleMatrix,o,Gte);F.clone(r,this._modelMatrix);let s=e.context,a=oLt(this),c=e.globeTranslucencyState.translucent,d=this.perFragmentAtmosphere||c||!l(t)||!t.show,u=this._command;if(!l(u.vertexArray)){let p=Ma.createGeometry(new Ma({radii:new m(1,1,1),slicePartitions:256,stackPartitions:256,vertexFormat:ve.POSITION_ONLY}));u.vertexArray=kn.fromGeometry({context:s,geometry:p,attributeLocations:zn.createAttributeLocations(p),bufferUsage:Be.STATIC_DRAW}),u.renderState=Qe.fromCache({cull:{enabled:!0,face:wi.FRONT},blending:ln.ALPHA_BLEND,depthMask:!1})}let h=a|d<<2|c<<3;if(h!==this._flags){this._flags=h;let p=[];a&&p.push("COLOR_CORRECT"),d&&p.push("PER_FRAGMENT_ATMOSPHERE"),c&&p.push("GLOBE_TRANSLUCENT");let A=new ze({defines:p,sources:[Dh,vZ,nY]}),f=new ze({defines:p,sources:[Dh,vZ,tY]});this._spSkyAtmosphere=tn.fromCache({context:s,vertexShaderSource:A,fragmentShaderSource:f}),u.shaderProgram=this._spSkyAtmosphere}return u};function oLt(e){return!(L.equalsEpsilon(e.hueShift,0,L.EPSILON7)&&L.equalsEpsilon(e.saturationShift,0,L.EPSILON7)&&L.equalsEpsilon(e.brightnessShift,0,L.EPSILON7))}iR.prototype.isDestroyed=function(){return!1};iR.prototype.destroy=function(){let e=this._command;return e.vertexArray=e.vertexArray&&e.vertexArray.destroy(),this._spSkyAtmosphere=this._spSkyAtmosphere&&this._spSkyAtmosphere.destroy(),he(this)};var uv=iR;var BAo=y(x(),1);var RAo=y(x(),1);function mv(e){this.sources=e.sources,this._sources=void 0,this._transform=e.transform,this.show=e.show??!0,this._returnCommand=e.returnCommand??!1,this._addToPanoramaCommandList=!this._returnCommand,this._command=new ot({modelMatrix:F.clone(F.IDENTITY),owner:this,pass:Ge.ENVIRONMENT}),this._cubeMap=void 0,this._attributeLocations=void 0,this._useHdr=void 0,this._hasError=!1,this._error=void 0;let t=e.credit;typeof t=="string"&&(t=new Et(t)),this._credit=t}Object.defineProperties(mv.prototype,{transform:{get:function(){return this._transform}},credit:{get:function(){return l(this._credit)?this._credit:void 0}}});mv.prototype.update=function(e,t){let n=this,{mode:i,passes:o,context:r,panoramaCommandList:s}=e;if(!this.show||i!==se.SCENE3D&&i!==se.MORPHING||!o.render)return;if(this._hasError){let c=this._error;throw this._hasError=!1,this._error=void 0,c}if(this._sources!==this.sources){this._sources=this.sources;let c=this.sources;typeof c.positiveX=="string"?OL(r,this._sources).then(function(d){n._cubeMap=n._cubeMap&&n._cubeMap.destroy(),n._cubeMap=d}).catch(d=>{this._hasError=!0,this._error=d}):(this._cubeMap=this._cubeMap&&this._cubeMap.destroy(),this._cubeMap=new Or({context:r,source:c})),this._addToPanoramaCommandList=!0}let a=this._command;if(!l(a.vertexArray)){a.uniformMap={u_cubeMap:function(){return n._cubeMap},u_cubeMapPanoramaTransform:function(){return n._transform}};let c=Cc.createGeometry(Cc.fromDimensions({dimensions:new m(2,2,2),vertexFormat:ve.POSITION_ONLY})),d=this._attributeLocations=zn.createAttributeLocations(c);a.vertexArray=kn.fromGeometry({context:r,geometry:c,attributeLocations:d,bufferUsage:Be.STATIC_DRAW}),a.renderState=Qe.fromCache({depthTest:{enabled:!1},depthMask:!1,blending:ln.ALPHA_BLEND}),this._addToPanoramaCommandList=!0}if(!l(a.shaderProgram)||this._useHdr!==t){let c=new ze({defines:[t?"HDR":""],sources:[iY]});a.shaderProgram=tn.fromCache({context:r,vertexShaderSource:l(this._transform)?JX:oY,fragmentShaderSource:c,attributeLocations:this._attributeLocations}),this._useHdr=t,this._addToPanoramaCommandList=!0}if(l(this._cubeMap)){if(this.show&&l(this._credit)&&!this._returnCommand&&e.creditDisplay.addCreditToNextFrame(this._credit),this._returnCommand)return a;this._addToPanoramaCommandList&&(s.push(a),this._addToPanoramaCommandList=!1)}};mv.prototype.isDestroyed=function(){return!1};mv.prototype.destroy=function(){let e=this._command;return e.vertexArray=e.vertexArray&&e.vertexArray.destroy(),e.shaderProgram=e.shaderProgram&&e.shaderProgram.destroy(),this._cubeMap=this._cubeMap&&this._cubeMap.destroy(),he(this)};var NE=mv;function PE(e){this._sources=e.sources,this._show=e.show??!0,this._panorama=new NE({sources:this._sources,show:this._show,returnCommand:!0})}Object.defineProperties(PE.prototype,{sources:{get:function(){return this._panorama.sources},set:function(e){this._panorama.sources=e}},show:{get:function(){return this._panorama.show},set:function(e){this._panorama.show=e}}});PE.prototype.update=function(e,t){let{mode:n,passes:i}=e;if(!(n!==se.SCENE3D&&n!==se.MORPHING)&&i.render)return this._panorama.update(e,t)};PE.prototype.isDestroyed=function(){return!1};PE.prototype.destroy=function(){return this._panorama=this._panorama&&this._panorama.destroy(),he(this)};function oR(e){return en(`Assets/Textures/SkyBox/tycho2t3_80_${e}.jpg`)}PE.createEarthSkyBox=function(){return new PE({sources:{positiveX:oR("px"),negativeX:oR("mx"),positiveY:oR("py"),negativeY:oR("my"),positiveZ:oR("pz"),negativeZ:oR("mz")}})};var hv=PE;var lgo=y(x(),1);function pv(){this.show=!0,this._drawCommand=new ot({primitiveType:We.TRIANGLES,boundingVolume:new ue,owner:this}),this._commands={drawCommand:this._drawCommand,computeCommand:void 0},this._boundingVolume=new ue,this._boundingVolume2D=new ue,this._texture=void 0,this._drawingBufferWidth=void 0,this._drawingBufferHeight=void 0,this._radiusTS=void 0,this._size=void 0,this.glowFactor=1,this._glowFactorDirty=!1,this._useHdr=void 0;let e=this;this._uniformMap={u_texture:function(){return e._texture},u_size:function(){return e._size}}}Object.defineProperties(pv.prototype,{glowFactor:{get:function(){return this._glowFactor},set:function(e){e=Math.max(e,0),this._glowFactor=e,this._glowFactorDirty=!0}}});var rLt=new M,sLt=new M,aLt=new re,fv=new re;pv.prototype.update=function(e,t,n){if(!this.show)return;let i=e.mode;if(i===se.SCENE2D||i===se.MORPHING||!e.passes.render)return;let o=e.context,r=t.viewport.width,s=t.viewport.height;if(!l(this._texture)||r!==this._drawingBufferWidth||s!==this._drawingBufferHeight||this._glowFactorDirty||n!==this._useHdr){this._texture=this._texture&&this._texture.destroy(),this._drawingBufferWidth=r,this._drawingBufferHeight=s,this._glowFactorDirty=!1,this._useHdr=n;let I=Math.max(r,s);I=Math.pow(2,Math.ceil(Math.log(I)/Math.log(2))-2),I=Math.max(1,I);let R=n?o.halfFloatingPointTexture?Oe.HALF_FLOAT:Oe.FLOAT:Oe.UNSIGNED_BYTE;this._texture=new Lt({context:o,width:I,height:I,pixelFormat:Ke.RGBA,pixelDatatype:R}),this._glowLengthTS=this._glowFactor*5,this._radiusTS=1/(1+2*this._glowLengthTS)*.5;let V=this,W={u_radiusTS:function(){return V._radiusTS}};this._commands.computeCommand=new yl({fragmentShaderSource:sY,outputTexture:this._texture,uniformMap:W,persists:!1,owner:this,postExecute:function(){V._commands.computeCommand=void 0}})}let a=this._drawCommand;if(!l(a.vertexArray)){let I={direction:0},R=new Uint8Array(8);R[0]=0,R[1]=0,R[2]=255,R[3]=0,R[4]=255,R[5]=255,R[6]=0,R[7]=255;let V=it.createVertexBuffer({context:o,typedArray:R,usage:Be.STATIC_DRAW}),W=[{index:I.direction,vertexBuffer:V,componentsPerAttribute:2,normalize:!0,componentDatatype:H.UNSIGNED_BYTE}],B=it.createIndexBuffer({context:o,typedArray:new Uint16Array([0,1,2,0,2,3]),usage:Be.STATIC_DRAW,indexDatatype:Ue.UNSIGNED_SHORT});a.vertexArray=new kn({context:o,attributes:W,indexBuffer:B}),a.shaderProgram=tn.fromCache({context:o,vertexShaderSource:aY,fragmentShaderSource:rY,attributeLocations:I}),a.renderState=Qe.fromCache({blending:ln.ALPHA_BLEND}),a.uniformMap=this._uniformMap}let c=o.uniformState.sunPositionWC,d=o.uniformState.sunPositionColumbusView,u=this._boundingVolume,h=this._boundingVolume2D;m.clone(c,u.center),h.center.x=d.z,h.center.y=d.x,h.center.z=d.y,u.radius=L.SOLAR_RADIUS+L.SOLAR_RADIUS*this._glowLengthTS,h.radius=u.radius,i===se.SCENE3D?ue.clone(u,a.boundingVolume):i===se.COLUMBUS_VIEW&&ue.clone(h,a.boundingVolume);let p=so.computeActualEllipsoidPosition(e,c,fv),A=m.magnitude(m.subtract(p,e.camera.position,fv)),f=o.uniformState.projection,b=aLt;b.x=0,b.y=0,b.z=-A,b.w=1;let C=F.multiplyByVector(f,b,fv),T=so.clipToGLWindowCoordinates(t.viewport,C,rLt);b.x=L.SOLAR_RADIUS;let E=F.multiplyByVector(f,b,fv),S=so.clipToGLWindowCoordinates(t.viewport,E,sLt);return this._size=M.magnitude(M.subtract(S,T,fv)),this._size=2*this._size*(1+2*this._glowLengthTS),this._size=Math.ceil(this._size),this._commands};pv.prototype.isDestroyed=function(){return!1};pv.prototype.destroy=function(){let e=this._drawCommand;return e.vertexArray=e.vertexArray&&e.vertexArray.destroy(),e.shaderProgram=e.shaderProgram&&e.shaderProgram.destroy(),this._texture=this._texture&&this._texture.destroy(),he(this)};var Av=pv;var fbo=y(x(),1);var Kgo=y(x(),1);var URe=y(DU(),1);var ugo=y(x(),1);function cLt(e,t,n){return` float clipDistance = clip(gl_FragCoord, ${e}, ${t});
vec4 clippingPlanesEdgeColor = vec4(1.0);
clippingPlanesEdgeColor.rgb = ${n}.rgb;
float clippingPlanesEdgeWidth = ${n}.a;
if (clipDistance > 0.0 && clipDistance < clippingPlanesEdgeWidth)
{
out_FragColor = clippingPlanesEdgeColor;
}
`}var gv=cLt;var fgo=y(x(),1);var lLt={modifyFragmentShader:function(t){return t=ze.replaceMain(t,"czm_splitter_main"),t+=`uniform float czm_splitDirection;
void main()
{
#ifndef SHADOW_MAP
if (czm_splitDirection < 0.0 && gl_FragCoord.x > czm_splitPosition) discard;
if (czm_splitDirection > 0.0 && gl_FragCoord.x < czm_splitPosition) discard;
#endif
czm_splitter_main();
}
`,t},addUniforms:function(t,n){n.czm_splitDirection=function(){return t.splitDirection}}},rR=lLt;var XE={NEEDS_DECODE:0,DECODING:1,READY:2,FAILED:3};function bv(e){this._parsedContent=void 0,this._drawCommand=void 0,this._isTranslucent=!1,this._styleTranslucent=!1,this._constantColor=U.clone(U.DARKGRAY),this._highlightColor=U.clone(U.WHITE),this._pointSize=1,this._rtcCenter=void 0,this._quantizedVolumeScale=void 0,this._quantizedVolumeOffset=void 0,this._styleableShaderAttributes=void 0,this._isQuantized=!1,this._isOctEncoded16P=!1,this._isRGB565=!1,this._hasColors=!1,this._hasNormals=!1,this._hasBatchIds=!1,this._decodingState=XE.READY,this._dequantizeInShader=!0,this._isQuantizedDraco=!1,this._isOctEncodedDraco=!1,this._quantizedRange=0,this._octEncodedRange=0,this.backFaceCulling=!1,this._backFaceCulling=!1,this.normalShading=!0,this._normalShading=!0,this._opaqueRenderState=void 0,this._translucentRenderState=void 0,this._mode=void 0,this._ready=!1,this._pointsLength=0,this._geometryByteLength=0,this._vertexShaderLoaded=e.vertexShaderLoaded,this._fragmentShaderLoaded=e.fragmentShaderLoaded,this._uniformMapLoaded=e.uniformMapLoaded,this._batchTableLoaded=e.batchTableLoaded,this._pickIdLoaded=e.pickIdLoaded,this._opaquePass=e.opaquePass??Ge.OPAQUE,this._cull=e.cull??!0,this.style=void 0,this._style=void 0,this.styleDirty=!1,this.modelMatrix=F.clone(F.IDENTITY),this._modelMatrix=F.clone(F.IDENTITY),this.time=0,this.shadows=Vn.ENABLED,this._boundingSphere=void 0,this.clippingPlanes=void 0,this.isClipped=!1,this.clippingPlanesDirty=!1,this.clippingPlanesOriginMatrix=void 0,this.attenuation=!1,this._attenuation=!1,this.geometricError=0,this.geometricErrorScale=1,this.maximumAttenuation=this._pointSize,this.splitDirection=e.splitDirection??Br.NONE,this._splittingEnabled=!1,this._error=void 0,dLt(this,e)}Object.defineProperties(bv.prototype,{pointsLength:{get:function(){return this._pointsLength}},geometryByteLength:{get:function(){return this._geometryByteLength}},ready:{get:function(){return this._ready}},color:{get:function(){return U.clone(this._highlightColor)},set:function(e){this._highlightColor=U.clone(e,this._highlightColor)}},boundingSphere:{get:function(){if(l(this._drawCommand))return this._drawCommand.boundingVolume},set:function(e){this._boundingSphere=ue.clone(e,this._boundingSphere)}}});function dLt(e,t){let n=wC.parse(t.arrayBuffer,t.byteOffset);if(e._parsedContent=n,e._rtcCenter=n.rtcCenter,e._hasNormals=n.hasNormals,e._hasColors=n.hasColors,e._hasBatchIds=n.hasBatchIds,e._isTranslucent=n.isTranslucent,!n.hasBatchIds&&l(n.batchTableBinary)&&(n.styleableProperties=Xh.getBinaryProperties(n.pointsLength,n.batchTableJson,n.batchTableBinary)),l(n.draco)){let a=n.draco;e._decodingState=XE.NEEDS_DECODE,a.dequantizeInShader=e._dequantizeInShader}let i=n.positions;l(i)&&(e._isQuantized=i.isQuantized,e._quantizedVolumeScale=i.quantizedVolumeScale,e._quantizedVolumeOffset=i.quantizedVolumeOffset,e._quantizedRange=i.quantizedRange);let o=n.normals;l(o)&&(e._isOctEncoded16P=o.octEncoded);let r=n.colors;l(r)&&(l(r.constantColor)&&(e._constantColor=U.clone(r.constantColor,e._constantColor),e._hasColors=!1),e._isRGB565=r.isRGB565);let s=n.batchIds;l(n.batchIds)&&(s.name="BATCH_ID",s.semantic="BATCH_ID",s.setIndex=void 0),n.hasBatchIds&&e._batchTableLoaded(n.batchLength,n.batchTableJson,n.batchTableBinary),e._pointsLength=n.pointsLength}var uLt=new m,mLt=new m,hLt=new m,MRe,sz;function fLt(e){if(!l(sz)){MRe=new URe.default(0),sz=new Array(e);for(let t=0;t<e;++t)sz[t]=MRe.random()}return sz}function pLt(e){let n=e.length/3,i=Math.min(n,20),o=fLt(20),r=Number.MAX_VALUE,s=-Number.MAX_VALUE,a=m.fromElements(r,r,r,uLt),c=m.fromElements(s,s,s,mLt);for(let u=0;u<i;++u){let h=Math.floor(o[u]*n),p=m.unpack(e,h*3,hLt);m.minimumByComponent(a,p,a),m.maximumByComponent(c,p,c)}let d=ue.fromCornerPoints(a,c);return d.radius+=L.EPSILON2,d}function vRe(e,t){let n=H.fromTypedArray(e);return n===H.INT||n===H.UNSIGNED_INT||n===H.DOUBLE?(_t("Cast pnts property to floats",`Point cloud property "${t}" will be cast to a float array because INT, UNSIGNED_INT, and DOUBLE are not valid WebGL vertex attribute types. Some precision may be lost.`),new Float32Array(e)):e}var ALt=new re,gLt=new re,bLt=new U,DRe=0,az=1,wte=2,kRe=3,yLt=4,Lte=new F,xLt=new F;function CLt(e,t){let n=t.context,i=e._parsedContent,o=e._pointsLength,r=i.positions,s=i.colors,a=i.normals,c=i.batchIds,d=i.styleableProperties,u=l(d),h=e._isQuantized,p=e._isQuantizedDraco,A=e._isOctEncoded16P,f=e._isOctEncodedDraco,b=e._quantizedRange,C=e._octEncodedRange,T=e._isRGB565,E=e._isTranslucent,S=e._hasColors,I=e._hasNormals,R=e._hasBatchIds,V,W,B=[],N={};if(e._styleableShaderAttributes=N,u){let v=yLt;for(let D in d)if(d.hasOwnProperty(D)){let Y=d[D],O=vRe(Y.typedArray,D);V=Y.componentCount,W=H.fromTypedArray(O);let J=it.createVertexBuffer({context:n,typedArray:O,usage:Be.STATIC_DRAW});e._geometryByteLength+=J.sizeInBytes;let te={index:v,vertexBuffer:J,componentsPerAttribute:V,componentDatatype:W,normalize:!1,offsetInBytes:0,strideInBytes:0};B.push(te),N[D]={location:v,componentCount:V},++v}}let P=it.createVertexBuffer({context:n,typedArray:r.typedArray,usage:Be.STATIC_DRAW});e._geometryByteLength+=P.sizeInBytes;let g;S&&(g=it.createVertexBuffer({context:n,typedArray:s.typedArray,usage:Be.STATIC_DRAW}),e._geometryByteLength+=g.sizeInBytes);let _;I&&(_=it.createVertexBuffer({context:n,typedArray:a.typedArray,usage:Be.STATIC_DRAW}),e._geometryByteLength+=_.sizeInBytes);let Z;R&&(c.typedArray=vRe(c.typedArray,"batchIds"),Z=it.createVertexBuffer({context:n,typedArray:c.typedArray,usage:Be.STATIC_DRAW}),e._geometryByteLength+=Z.sizeInBytes);let G=[];if(h?W=H.UNSIGNED_SHORT:p?W=b<=255?H.UNSIGNED_BYTE:H.UNSIGNED_SHORT:W=H.FLOAT,G.push({index:DRe,vertexBuffer:P,componentsPerAttribute:3,componentDatatype:W,normalize:!1,offsetInBytes:0,strideInBytes:0}),e._cull&&(h||p?e._boundingSphere=ue.fromCornerPoints(m.ZERO,e._quantizedVolumeScale):e._boundingSphere=pLt(r.typedArray)),S)if(T)G.push({index:az,vertexBuffer:g,componentsPerAttribute:1,componentDatatype:H.UNSIGNED_SHORT,normalize:!1,offsetInBytes:0,strideInBytes:0});else{let v=E?4:3;G.push({index:az,vertexBuffer:g,componentsPerAttribute:v,componentDatatype:H.UNSIGNED_BYTE,normalize:!0,offsetInBytes:0,strideInBytes:0})}I&&(A?(V=2,W=H.UNSIGNED_BYTE):f?(V=2,W=C<=255?H.UNSIGNED_BYTE:H.UNSIGNED_SHORT):(V=3,W=H.FLOAT),G.push({index:wte,vertexBuffer:_,componentsPerAttribute:V,componentDatatype:W,normalize:!1,offsetInBytes:0,strideInBytes:0})),R&&G.push({index:kRe,vertexBuffer:Z,componentsPerAttribute:1,componentDatatype:H.fromTypedArray(c.typedArray),normalize:!1,offsetInBytes:0,strideInBytes:0}),u&&(G=G.concat(B));let w=new kn({context:n,attributes:G}),X={depthTest:{enabled:!0}},k={depthTest:{enabled:!0},depthMask:!1,blending:ln.ALPHA_BLEND};e._opaquePass===Ge.CESIUM_3D_TILE&&(X.stencilTest=Jt.setCesium3DTileBit(),X.stencilMask=Jt.CESIUM_3D_TILE_MASK,k.stencilTest=Jt.setCesium3DTileBit(),k.stencilMask=Jt.CESIUM_3D_TILE_MASK),e._opaqueRenderState=Qe.fromCache(X),e._translucentRenderState=Qe.fromCache(k),e._drawCommand=new ot({boundingVolume:new ue,cull:e._cull,modelMatrix:new F,primitiveType:We.POINTS,vertexArray:w,count:o,shaderProgram:void 0,uniformMap:void 0,renderState:E?e._translucentRenderState:e._opaqueRenderState,pass:E?Ge.TRANSLUCENT:e._opaquePass,owner:e,castShadows:!1,receiveShadows:!1,pickId:e._pickIdLoaded()})}function TLt(e,t){let n=t.context,i=e._isQuantized,o=e._isQuantizedDraco,r=e._isOctEncodedDraco,s={u_pointSizeAndTimeAndGeometricErrorAndDepthMultiplier:function(){let a=ALt;if(a.x=e._attenuation?e.maximumAttenuation:e._pointSize,a.x*=t.pixelRatio,a.y=e.time,e._attenuation){let c=t.camera.frustum,d;t.mode===se.SCENE2D||c instanceof bn?d=Number.POSITIVE_INFINITY:d=n.drawingBufferHeight/t.camera.frustum.sseDenominator,a.z=e.geometricError*e.geometricErrorScale,a.w=d}return a},u_highlightColor:function(){return e._highlightColor},u_constantColor:function(){return e._constantColor},u_clippingPlanes:function(){let a=e.clippingPlanes;return e.isClipped?a.texture:n.defaultTexture},u_clippingPlanesEdgeStyle:function(){let a=e.clippingPlanes;if(!l(a))return U.TRANSPARENT;let c=U.clone(a.edgeColor,bLt);return c.alpha=a.edgeWidth,c},u_clippingPlanesMatrix:function(){let a=e.clippingPlanes;if(!l(a))return F.IDENTITY;let c=e.clippingPlanesOriginMatrix??e._modelMatrix;F.multiply(n.uniformState.view3D,c,Lte);let d=F.multiply(Lte,a.modelMatrix,Lte);return F.inverseTranspose(d,xLt)}};rR.addUniforms(e,s),(i||o||r)&&(s=Ft(s,{u_quantizedVolumeScaleAndOctEncodedRange:function(){let a=gLt;if(l(e._quantizedVolumeScale)){let c=m.clone(e._quantizedVolumeScale,a);m.divideByScalar(c,e._quantizedRange,a)}return a.w=e._octEncodedRange,a}})),l(e._uniformMapLoaded)&&(s=e._uniformMapLoaded(s)),e._drawCommand.uniformMap=s}function Wte(e,t){let n=/czm_3dtiles_property_(\d+)/g,i=n.exec(e);for(;i!==null;){let o=parseInt(i[1]);t.indexOf(o)===-1&&t.push(o),i=n.exec(e)}}function Fte(e,t){e=e.slice(e.indexOf(`
`));let n=/czm_3dtiles_builtin_property_(\w+)/g,i=n.exec(e);for(;i!==null;){let o=i[1];t.indexOf(o)===-1&&t.push(o),i=n.exec(e)}}function Bte(e,t){let n=e.numberOfAttributes;for(let i=0;i<n;++i){let o=e.getAttribute(i);if(o.index===t)return o}}var ELt={POSITION:"czm_3dtiles_builtin_property_POSITION",POSITION_ABSOLUTE:"czm_3dtiles_builtin_property_POSITION_ABSOLUTE",COLOR:"czm_3dtiles_builtin_property_COLOR",NORMAL:"czm_3dtiles_builtin_property_NORMAL"};function SLt(e,t,n){let i,o,r,s=t.context,a=l(n),c=e._isQuantized,d=e._isQuantizedDraco,u=e._isOctEncoded16P,h=e._isOctEncodedDraco,p=e._isRGB565,A=e._isTranslucent,f=e._hasColors,b=e._hasNormals,C=e._hasBatchIds,T=e._backFaceCulling,E=e._normalShading,S=e._drawCommand.vertexArray,I=e.clippingPlanes,R=e._attenuation,V,W,B,N=A,P=He(ELt),g={},_=e._styleableShaderAttributes;for(o in _)_.hasOwnProperty(o)&&(r=_[o],P[o]=`czm_3dtiles_property_${r.location}`,g[r.location]=r);if(a){let ae={translucent:!1},Ce="(vec3 czm_3dtiles_builtin_property_POSITION, vec3 czm_3dtiles_builtin_property_POSITION_ABSOLUTE, vec4 czm_3dtiles_builtin_property_COLOR, vec3 czm_3dtiles_builtin_property_NORMAL)";V=n.getColorShaderFunction(`getColorFromStyle${Ce}`,P,ae),W=n.getShowShaderFunction(`getShowFromStyle${Ce}`,P,ae),B=n.getPointSizeShaderFunction(`getPointSizeFromStyle${Ce}`,P,ae),l(V)&&ae.translucent&&(N=!0)}e._styleTranslucent=N;let Z=l(V),G=l(W),w=l(B),X=e.isClipped,k=[],v=[];Z&&(Wte(V,k),Fte(V,v)),G&&(Wte(W,k),Fte(W,v)),w&&(Wte(B,k),Fte(B,v));let D=v.indexOf("COLOR")>=0,Y=v.indexOf("NORMAL")>=0;if(Y&&!b)throw new me("Style references the NORMAL semantic but the point cloud does not have normals");for(o in _)if(_.hasOwnProperty(o)){r=_[o];let ae=k.indexOf(r.location)>=0,Ce=Bte(S,r.location);Ce.enabled=ae}let O=f&&(!Z||D);if(f){let ae=Bte(S,az);ae.enabled=O}let J=b&&(E||T||Y);if(b){let ae=Bte(S,wte);ae.enabled=J}let te={a_position:DRe};O&&(te.a_color=az),J&&(te.a_normal=wte),C&&(te.a_batchId=kRe);let z="",j=k.length;for(i=0;i<j;++i){let ae=k[i];r=g[ae];let Ce=r.componentCount,Te=`czm_3dtiles_property_${ae}`,Fe;Ce===1?Fe="float":Fe=`vec${Ce}`,z+=`in ${Fe} ${Te};
`,te[Te]=r.location}TLt(e,t);let ee=`in vec3 a_position;
out vec4 v_color;
uniform vec4 u_pointSizeAndTimeAndGeometricErrorAndDepthMultiplier;
uniform vec4 u_constantColor;
uniform vec4 u_highlightColor;
`;ee+=`float u_pointSize;
float tiles3d_tileset_time;
`,R&&(ee+=`float u_geometricError;
float u_depthMultiplier;
`),ee+=z,O&&(A?ee+=`in vec4 a_color;
`:p?ee+=`in float a_color;
const float SHIFT_RIGHT_11 = 1.0 / 2048.0;
const float SHIFT_RIGHT_5 = 1.0 / 32.0;
const float SHIFT_LEFT_11 = 2048.0;
const float SHIFT_LEFT_5 = 32.0;
const float NORMALIZE_6 = 1.0 / 64.0;
const float NORMALIZE_5 = 1.0 / 32.0;
`:ee+=`in vec3 a_color;
`),J&&(u||h?ee+=`in vec2 a_normal;
`:ee+=`in vec3 a_normal;
`),C&&(ee+=`in float a_batchId;
`),(c||d||h)&&(ee+=`uniform vec4 u_quantizedVolumeScaleAndOctEncodedRange;
`),Z&&(ee+=V),G&&(ee+=W),w&&(ee+=B),ee+=`void main()
{
u_pointSize = u_pointSizeAndTimeAndGeometricErrorAndDepthMultiplier.x;
tiles3d_tileset_time = u_pointSizeAndTimeAndGeometricErrorAndDepthMultiplier.y;
`,R&&(ee+=` u_geometricError = u_pointSizeAndTimeAndGeometricErrorAndDepthMultiplier.z;
u_depthMultiplier = u_pointSizeAndTimeAndGeometricErrorAndDepthMultiplier.w;
`),O?A?ee+=` vec4 color = a_color;
`:p?ee+=` float compressed = a_color;
float r = floor(compressed * SHIFT_RIGHT_11);
compressed -= r * SHIFT_LEFT_11;
float g = floor(compressed * SHIFT_RIGHT_5);
compressed -= g * SHIFT_LEFT_5;
float b = compressed;
vec3 rgb = vec3(r * NORMALIZE_5, g * NORMALIZE_6, b * NORMALIZE_5);
vec4 color = vec4(rgb, 1.0);
`:ee+=` vec4 color = vec4(a_color, 1.0);
`:ee+=` vec4 color = u_constantColor;
`,c||d?ee+=` vec3 position = a_position * u_quantizedVolumeScaleAndOctEncodedRange.xyz;
`:ee+=` vec3 position = a_position;
`,ee+=` vec3 position_absolute = vec3(czm_model * vec4(position, 1.0));
`,J?(u?ee+=` vec3 normal = czm_octDecode(a_normal);
`:h?ee+=` vec3 normal = czm_octDecode(a_normal, u_quantizedVolumeScaleAndOctEncodedRange.w).zxy;
`:ee+=` vec3 normal = a_normal;
`,ee+=` vec3 normalEC = czm_normal * normal;
`):ee+=` vec3 normal = vec3(1.0);
`,Z&&(ee+=` color = getColorFromStyle(position, position_absolute, color, normal);
`),G&&(ee+=` float show = float(getShowFromStyle(position, position_absolute, color, normal));
`),w?ee+=` gl_PointSize = getPointSizeFromStyle(position, position_absolute, color, normal) * czm_pixelRatio;
`:R?ee+=` vec4 positionEC = czm_modelView * vec4(position, 1.0);
float depth = -positionEC.z;
gl_PointSize = min((u_geometricError / depth) * u_depthMultiplier, u_pointSize);
`:ee+=` gl_PointSize = u_pointSize;
`,ee+=` color = color * u_highlightColor;
`,J&&E&&(ee+=` float diffuseStrength = czm_getLambertDiffuse(czm_lightDirectionEC, normalEC);
diffuseStrength = max(diffuseStrength, 0.4);
color.xyz *= diffuseStrength * czm_lightColor;
`),ee+=` v_color = color;
gl_Position = czm_modelViewProjection * vec4(position, 1.0);
`,J&&T&&(ee+=` float visible = step(-normalEC.z, 0.0);
gl_Position *= visible;
gl_PointSize *= visible;
`),G&&(ee+=` gl_Position.w *= float(show);
gl_PointSize *= float(show);
`),ee+=`}
`;let ge=`in vec4 v_color;
`;X&&(ge+=`uniform highp sampler2D u_clippingPlanes;
uniform mat4 u_clippingPlanesMatrix;
uniform vec4 u_clippingPlanesEdgeStyle;
`,ge+=`
`,ge+=cE(I,s),ge+=`
`),ge+=`void main()
{
out_FragColor = czm_gammaCorrect(v_color);
`,X&&(ge+=gv("u_clippingPlanes","u_clippingPlanesMatrix","u_clippingPlanesEdgeStyle")),ge+=`}
`,e.splitDirection!==Br.NONE&&(ge=rR.modifyFragmentShader(ge)),l(e._vertexShaderLoaded)&&(ee=e._vertexShaderLoaded(ee)),l(e._fragmentShaderLoaded)&&(ge=e._fragmentShaderLoaded(ge));let ye=e._drawCommand;l(ye.shaderProgram)&&ye.shaderProgram.destroy(),ye.shaderProgram=tn.fromCache({context:s,vertexShaderSource:ee,fragmentShaderSource:ge,attributeLocations:te});try{ye.shaderProgram._bind()}catch{throw new me("Error generating style shader: this may be caused by a type mismatch, index out-of-bounds, or other syntax error.")}}function _Lt(e,t){if(e._decodingState===XE.READY)return!1;if(e._decodingState===XE.NEEDS_DECODE){let n=e._parsedContent,i=n.draco,o=qA.decodePointCloud(i,t);l(o)&&(e._decodingState=XE.DECODING,o.then(function(r){e._decodingState=XE.READY;let s=l(r.POSITION)?r.POSITION.array:void 0,a=l(r.RGB)?r.RGB.array:void 0,c=l(r.RGBA)?r.RGBA.array:void 0,d=l(r.NORMAL)?r.NORMAL.array:void 0,u=l(r.BATCH_ID)?r.BATCH_ID.array:void 0,h=l(s)&&l(r.POSITION.data.quantization),p=l(d)&&l(r.NORMAL.data.quantization);if(h){let C=r.POSITION.data.quantization,T=C.range;e._quantizedVolumeScale=m.fromElements(T,T,T),e._quantizedVolumeOffset=m.unpack(C.minValues),e._quantizedRange=(1<<C.quantizationBits)-1,e._isQuantizedDraco=!0}p&&(e._octEncodedRange=(1<<r.NORMAL.data.quantization.quantizationBits)-1,e._isOctEncodedDraco=!0);let A=n.styleableProperties,f=i.batchTableProperties;for(let C in f)if(f.hasOwnProperty(C)){let T=r[C];l(A)||(A={}),A[C]={typedArray:T.array,componentCount:T.data.componentsPerAttribute}}l(s)&&(n.positions={typedArray:s});let b=c??a;l(b)&&(n.colors={typedArray:b}),l(d)&&(n.normals={typedArray:d}),l(u)&&(n.batchIds={typedArray:u}),n.styleableProperties=A}).catch(function(r){e._decodingState=XE.FAILED,e._error=r}))}return!0}var ILt=new re,ZLt=new m;bv.prototype.update=function(e){let t=e.context;if(l(this._error)){let d=this._error;throw this._error=void 0,d}if(_Lt(this,t))return;let i=!1,o=!F.equals(this._modelMatrix,this.modelMatrix);if(this._mode!==e.mode&&(this._mode=e.mode,o=!0),l(this._drawCommand)||(CLt(this,e),o=!0,i=!0,this._ready=!0,this._parsedContent=void 0),o){F.clone(this.modelMatrix,this._modelMatrix);let d=this._drawCommand.modelMatrix;if(F.clone(this._modelMatrix,d),l(this._rtcCenter)&&F.multiplyByTranslation(d,this._rtcCenter,d),l(this._quantizedVolumeOffset)&&F.multiplyByTranslation(d,this._quantizedVolumeOffset,d),e.mode!==se.SCENE3D){let h=e.mapProjection,p=F.getColumn(d,3,ILt);re.equals(p,re.UNIT_W)||bt.basisTo2D(h,d,d)}let u=this._drawCommand.boundingVolume;if(ue.clone(this._boundingSphere,u),this._cull){let h=u.center;F.multiplyByPoint(d,h,h);let p=F.getScale(d,ZLt);u.radius*=m.maximumComponent(p)}}this.clippingPlanesDirty&&(this.clippingPlanesDirty=!1,i=!0),this._attenuation!==this.attenuation&&(this._attenuation=this.attenuation,i=!0),this.backFaceCulling!==this._backFaceCulling&&(this._backFaceCulling=this.backFaceCulling,i=!0),this.normalShading!==this._normalShading&&(this._normalShading=this.normalShading,i=!0),(this._style!==this.style||this.styleDirty)&&(this._style=this.style,this.styleDirty=!1,i=!0);let r=this.splitDirection!==Br.NONE;this._splittingEnabled!==r&&(this._splittingEnabled=r,i=!0),i&&SLt(this,e,this._style),this._drawCommand.castShadows=Vn.castShadows(this.shadows),this._drawCommand.receiveShadows=Vn.receiveShadows(this.shadows);let s=this._highlightColor.alpha<1||this._constantColor.alpha<1||this._styleTranslucent;this._drawCommand.renderState=s?this._translucentRenderState:this._opaqueRenderState,this._drawCommand.pass=s?Ge.TRANSLUCENT:this._opaquePass;let a=e.commandList,c=e.passes;(c.render||c.pick)&&a.push(this._drawCommand)};bv.prototype.isDestroyed=function(){return!1};bv.prototype.destroy=function(){let e=this._drawCommand;return l(e)&&(e.vertexArray=e.vertexArray&&e.vertexArray.destroy(),e.shaderProgram=e.shaderProgram&&e.shaderProgram.destroy()),he(this)};var yv=bv;function ME(e){e=e??Q.EMPTY_OBJECT,this.show=e.show??!0,this.modelMatrix=F.clone(e.modelMatrix??F.IDENTITY),this.shadows=e.shadows??Vn.ENABLED,this.maximumMemoryUsage=e.maximumMemoryUsage??256,this.shading=new gp(e.shading),this.style=e.style,this.frameFailed=new xe,this.frameChanged=new xe,this._clock=e.clock,this._intervals=e.intervals,this._clippingPlanes=void 0,this.clippingPlanes=e.clippingPlanes,this._pointCloudEyeDomeLighting=new cg,this._loadTimestamp=void 0,this._clippingPlanesState=0,this._styleDirty=!1,this._pickId=void 0,this._totalMemoryUsageInBytes=0,this._frames=[],this._previousInterval=void 0,this._nextInterval=void 0,this._lastRenderedFrame=void 0,this._clockMultiplier=0,this._runningSum=0,this._runningLength=0,this._runningIndex=0,this._runningSamples=new Array(5).fill(0),this._runningAverage=0}Object.defineProperties(ME.prototype,{clippingPlanes:{get:function(){return this._clippingPlanes},set:function(e){ls.setOwner(e,this,"_clippingPlanes")}},totalMemoryUsageInBytes:{get:function(){return this._totalMemoryUsageInBytes}},boundingSphere:{get:function(){if(l(this._lastRenderedFrame))return this._lastRenderedFrame.pointCloud.boundingSphere}}});function RLt(e){return`uniform vec4 czm_pickColor;
${e}`}function VLt(e){return function(t){return Ft(t,{czm_pickColor:function(){return e._pickId.color}})}}function GLt(){return"czm_pickColor"}ME.prototype.makeStyleDirty=function(){this._styleDirty=!0};ME.prototype._getAverageLoadTime=function(){return this._runningLength===0?.05:this._runningAverage};var LLt=new q;function Pte(e){let t=e._clock,n=t.canAnimate&&t.shouldAnimate,i=t.multiplier;return n?i:0}function YE(e,t){return e._intervals.indexOf(t.start)}function WLt(e,t){let n=e._intervals,i=e._clock,o=Pte(e);if(o===0)return;let r=e._getAverageLoadTime(),s=q.addSeconds(i.currentTime,r*o,LLt),a=n.indexOf(s),c=YE(e,t);return a===c&&(o>=0?++a:--a),n.get(a)}function FLt(e){let t=e._intervals,i=e._clock.currentTime,o=t.indexOf(i);return t.get(o)}function BLt(e,t,n){let i=Pte(e),o=YE(e,t),r=YE(e,n);return i>=0?o>=r:o<=r}function ORe(e,t){return function(n){let i=l(n.message)?n.message:n.toString();e.frameFailed.numberOfListeners>0?e.frameFailed.raiseEvent({uri:t,message:i}):(console.log(`A frame failed to load: ${t}`),console.log(`Error: ${i}`))}}function wLt(e,t,n){let i=YE(e,t),o=e._frames,r=o[i];if(!l(r)){let s=t.data.transform,a=l(s)?F.fromArray(s):void 0,c=t.data.uri;r={pointCloud:void 0,transform:a,timestamp:Xi(),sequential:!0,ready:!1,touchedFrameNumber:n.frameNumber,uri:c},o[i]=r,Le.fetchArrayBuffer({url:c}).then(function(d){r.pointCloud=new yv({arrayBuffer:d,cull:!0,fragmentShaderLoaded:RLt,uniformMapLoaded:VLt(e),pickIdLoaded:GLt})}).catch(ORe(e,c))}return r}function NLt(e,t){e._runningSum+=t,e._runningSum-=e._runningSamples[e._runningIndex],e._runningSamples[e._runningIndex]=t,e._runningLength=Math.min(e._runningLength+1,e._runningSamples.length),e._runningIndex=(e._runningIndex+1)%e._runningSamples.length,e._runningAverage=e._runningSum/e._runningLength}function PLt(e,t,n,i){t.touchedFrameNumber<i.frameNumber-1&&(t.sequential=!1);let o=t.pointCloud;if(l(o)&&!t.ready){let r=i.commandList,s=r.length;if(zRe(e,t,n,i),o.ready&&(t.ready=!0,e._totalMemoryUsageInBytes+=o.geometryByteLength,r.length=s,t.sequential)){let a=(Xi()-t.timestamp)/1e3;NLt(e,a)}}t.touchedFrameNumber=i.frameNumber}var XLt=new F;function YLt(e,t){let n=e.shading;return l(n)&&l(n.baseResolution)?n.baseResolution:l(t.boundingSphere)?L.cbrt(t.boundingSphere.volume()/t.pointsLength):0}function MLt(e){let t=e.shading;return l(t)&&l(t.maximumAttenuation)?t.maximumAttenuation:10}var vLt=new gp;function zRe(e,t,n,i){let o=e.shading??vLt,r=t.pointCloud,s=t.transform??F.IDENTITY;r.modelMatrix=F.multiplyTransformation(e.modelMatrix,s,XLt),r.style=e.style,r.time=n.timeSinceLoad,r.shadows=e.shadows,r.clippingPlanes=e._clippingPlanes,r.isClipped=n.isClipped,r.attenuation=o.attenuation,r.backFaceCulling=o.backFaceCulling,r.normalShading=o.normalShading,r.geometricError=YLt(e,r),r.geometricErrorScale=o.geometricErrorScale,r.maximumAttenuation=MLt(e);try{r.update(i)}catch(a){ORe(e,t.uri)(a)}t.touchedFrameNumber=i.frameNumber}function Nte(e,t,n,i){let o=wLt(e,t,i);PLt(e,o,n,i)}function ULt(e){return function(t){return t.touchedFrameNumber<e.frameNumber}}function HRe(e,t){let n=e._frames,i=n.length;for(let o=0;o<i;++o){let r=n[o];if(l(r)&&(!l(t)||t(r))){let s=r.pointCloud;r.ready&&(e._totalMemoryUsageInBytes-=s.geometryByteLength),l(s)&&s.destroy(),r===e._lastRenderedFrame&&(e._lastRenderedFrame=void 0),n[o]=void 0}}}function DLt(e,t){let n=YE(e,t),i=e._frames[n];if(l(i)&&i.ready)return i}function QRe(e,t,n,i,o){return l(n)?n.ready?!0:(Nte(e,t,i,o),n.ready):!1}function kLt(e,t,n,i,o){let r,s,a,c=e._intervals,d=e._frames,u=YE(e,n),h=YE(e,t);if(u>=h){for(r=u;r>=h;--r)if(s=c.get(r),a=d[r],QRe(e,s,a,i,o))return s}else for(r=u;r<=h;++r)if(s=c.get(r),a=d[r],QRe(e,s,a,i,o))return s;return t}function QLt(e,t,n){let i=e._frames,o=i.length;for(let r=0;r<o;++r){let s=i[r];l(s)&&l(s.pointCloud)&&(s.pointCloud.clippingPlanesDirty=t,s.pointCloud.styleDirty=n)}}var sR={timeSinceLoad:0,isClipped:!1,clippingPlanesDirty:!1};ME.prototype.update=function(e){if(e.mode===se.MORPHING||!this.show)return;l(this._pickId)||(this._pickId=e.context.createPickId({primitive:this})),l(this._loadTimestamp)||(this._loadTimestamp=q.clone(e.time));let t=Math.max(q.secondsDifference(e.time,this._loadTimestamp)*1e3,0),n=this._clippingPlanes,i=0,o=!1,r=l(n)&&n.enabled;r&&(n.update(e),i=n.clippingPlanesState),this._clippingPlanesState!==i&&(this._clippingPlanesState=i,o=!0);let s=this._styleDirty;this._styleDirty=!1,(o||s)&&QLt(this,o,s),sR.timeSinceLoad=t,sR.isClipped=r;let a=this.shading,c=this._pointCloudEyeDomeLighting,d=e.commandList,u=d.length,h=this._previousInterval,p=this._nextInterval,A=FLt(this);if(!l(A))return;let f=!1,b=Pte(this),C=b===0;b!==this._clockMultiplier&&(f=!0,this._clockMultiplier=b),(!l(h)||C)&&(h=A),(!l(p)||f||BLt(this,A,p))&&(p=WLt(this,A)),h=kLt(this,h,A,sR,e);let T=DLt(this,h);l(T)||(Nte(this,h,sR,e),T=this._lastRenderedFrame),l(T)&&zRe(this,T,sR,e),l(p)&&Nte(this,p,sR,e);let E=this;l(T)&&!l(this._lastRenderedFrame)&&e.afterRender.push(function(){return!0}),l(T)&&T!==this._lastRenderedFrame&&E.frameChanged.numberOfListeners>0&&e.afterRender.push(function(){return E.frameChanged.raiseEvent(E),!0}),this._previousInterval=h,this._nextInterval=p,this._lastRenderedFrame=T;let S=this._totalMemoryUsageInBytes,I=this.maximumMemoryUsage*1024*1024;S>I&&HRe(this,ULt(e));let V=d.length-u;l(a)&&a.attenuation&&a.eyeDomeLighting&&V>0&&c.update(e,u,a,this.boundingSphere)};ME.prototype.isDestroyed=function(){return!1};ME.prototype.destroy=function(){return HRe(this),this._clippingPlanes=this._clippingPlanes&&this._clippingPlanes.destroy(),this._pickId=this._pickId&&this._pickId.destroy(),he(this)};var aR=ME;function jRe(e,t){if(l(t)){let n=t.clock;l(n)&&n.getValue(e)}}function OLt(e){e._renderLoopRunning=!0;let t=0;function n(i){if(!e.isDestroyed())if(e._useDefaultRenderLoop)try{let o=e._targetFrameRate;if(!l(o))e.resize(),e.render(),requestAnimationFrame(n);else{let r=1e3/o,s=i-t;s>r&&(e.resize(),e.render(),t=i-s%r),requestAnimationFrame(n)}}catch(o){e._useDefaultRenderLoop=!1,e._renderLoopRunning=!1,e._showRenderLoopErrors&&e.showErrorPanel("An error occurred while rendering. Rendering has stopped.",void 0,o)}else e._renderLoopRunning=!1}requestAnimationFrame(n)}function qRe(e){let t=e._useBrowserRecommendedResolution?1:window.devicePixelRatio;return t*=e._resolutionScale,l(e._scene)&&(e._scene.pixelRatio=t),t}function $Re(e){let t=e._canvas,n=t.clientWidth,i=t.clientHeight,o=qRe(e);e._canvasClientWidth=n,e._canvasClientHeight=i,n*=o,i*=o,t.width=n,t.height=i,e._canRender=n!==0&&i!==0,e._lastDevicePixelRatio=window.devicePixelRatio}function eVe(e){let t=e._canvas,n=t.width,i=t.height;if(n!==0&&i!==0){let o=e._scene.camera.frustum;l(o.aspectRatio)?o.aspectRatio=n/i:(o.top=o.right*(i/n),o.bottom=-o.top)}}function tr(e,t){e=vn(e),t=t??Q.EMPTY_OBJECT;let n=document.createElement("div");n.className="cesium-widget",e.appendChild(n);let i=document.createElement("canvas"),o=hn.supportsImageRenderingPixelated();this._supportsImageRenderingPixelated=o,o&&(i.style.imageRendering=hn.imageRenderingValue()),i.oncontextmenu=function(){return!1},i.onselectstart=function(){return!1};function r(){i!==i.ownerDocument.activeElement&&i.ownerDocument.activeElement.blur()}(t.blurActiveElementOnCanvasFocus??!0)&&(i.addEventListener("mousedown",r),i.addEventListener("pointerdown",r)),n.appendChild(i);let a=document.createElement("div");a.className="cesium-widget-credits";let c=l(t.creditContainer)?vn(t.creditContainer):n;c.appendChild(a);let d=l(t.creditViewport)?vn(t.creditViewport):n,u=t.showRenderLoopErrors??!0,h=t.useBrowserRecommendedResolution??!0;this._element=n,this._container=e,this._canvas=i,this._canvasClientWidth=0,this._canvasClientHeight=0,this._lastDevicePixelRatio=0,this._creditViewport=d,this._creditContainer=c,this._innerCreditContainer=a,this._canRender=!1,this._renderLoopRunning=!1,this._showRenderLoopErrors=u,this._resolutionScale=1,this._useBrowserRecommendedResolution=h,this._forceResize=!1,this._entityView=void 0,this._clockTrackedDataSource=void 0,this._trackedEntity=void 0,this._needTrackedEntityUpdate=!1,this._zoomIsFlight=!1,this._zoomTarget=void 0,this._zoomPromise=void 0,this._zoomOptions=void 0,this._trackedEntityChanged=new xe,this._allowDataSourcesToSuspendAnimation=!0,this._clock=l(t.clock)?t.clock:new pf,l(t.shouldAnimate)&&(this._clock.shouldAnimate=t.shouldAnimate),$Re(this);try{let p=t.ellipsoid??ie.default,A=new dv({canvas:i,contextOptions:t.contextOptions,creditContainer:a,creditViewport:d,ellipsoid:p,mapProjection:t.mapProjection,orderIndependentTranslucency:t.orderIndependentTranslucency,scene3DOnly:t.scene3DOnly??!1,shadows:t.shadows,mapMode2D:t.mapMode2D,requestRenderMode:t.requestRenderMode,maximumRenderTimeChange:t.maximumRenderTimeChange,depthPlaneEllipsoidOffset:t.depthPlaneEllipsoidOffset,msaaSamples:t.msaaSamples});this._scene=A,A.camera.constrainedAxis=m.UNIT_Z,qRe(this),eVe(this);let f=t.globe;l(f)||(f=new xY(p)),f!==!1&&(A.globe=f,A.globe.shadows=t.terrainShadows??Vn.RECEIVE_ONLY);let b=t.skyBox;!l(b)&&ie.WGS84.equals(p)&&(b=hv.createEarthSkyBox()),b!==!1&&(A.skyBox=b,A.sun=new Av,ie.WGS84.equals(p)&&(A.moon=new EY));let C=t.skyAtmosphere;!l(C)&&ie.WGS84.equals(p)&&(C=new uv(p),C.show=t.globe!==!1&&f.show),C!==!1&&(A.skyAtmosphere=C);let T=t.baseLayer;t.globe!==!1&&T!==!1&&(l(T)||(T=fs.fromWorldImagery()),A.imageryLayers.add(T)),l(t.terrainProvider)&&t.globe!==!1&&(A.terrainProvider=t.terrainProvider),l(t.terrain)&&t.globe!==!1&&A.setTerrain(t.terrain),this._screenSpaceEventHandler=new Du(i),l(t.sceneMode)&&(t.sceneMode===se.SCENE2D&&this._scene.morphTo2D(0),t.sceneMode===se.COLUMBUS_VIEW&&this._scene.morphToColumbusView(0)),this._useDefaultRenderLoop=void 0,this.useDefaultRenderLoop=t.useDefaultRenderLoop??!0,this._targetFrameRate=void 0,this.targetFrameRate=t.targetFrameRate;let E=this;this._onRenderError=function(B,N){E._useDefaultRenderLoop=!1,E._renderLoopRunning=!1,E._showRenderLoopErrors&&E.showErrorPanel("An error occurred while rendering. Rendering has stopped.",void 0,N)},A.renderError.addEventListener(this._onRenderError);let S=t.dataSources,I=!1;l(S)||(S=new PN,I=!0);let R=new IP({scene:A,dataSourceCollection:S}),V=new Xr;this._dataSourceChangedListeners={},this._automaticallyTrackDataSourceClocks=t.automaticallyTrackDataSourceClocks??!0,this._dataSourceCollection=S,this._destroyDataSourceCollection=I,this._dataSourceDisplay=R,this._eventHelper=V,this._canAnimateUpdateCallback=this._updateCanAnimate,V.add(this._clock.onTick,tr.prototype._onTick,this),V.add(A.morphStart,tr.prototype._clearTrackedObject,this),V.add(S.dataSourceAdded,tr.prototype._onDataSourceAdded,this),V.add(S.dataSourceRemoved,tr.prototype._onDataSourceRemoved,this),V.add(A.postRender,tr.prototype._postRender,this);let W=S.length;for(let B=0;B<W;B++)this._dataSourceAdded(S,S.get(B));this._dataSourceAdded(void 0,R.defaultDataSource),V.add(S.dataSourceAdded,tr.prototype._dataSourceAdded,this),V.add(S.dataSourceRemoved,tr.prototype._dataSourceRemoved,this)}catch(p){throw u&&this.showErrorPanel("Error constructing CesiumWidget.",'Visit <a href="http://get.webgl.org">http://get.webgl.org</a> to verify that your web browser and hardware support WebGL. Consider trying a different web browser or updating your video drivers. Detailed error information is below:',p),p}}Object.defineProperties(tr.prototype,{container:{get:function(){return this._container}},canvas:{get:function(){return this._canvas}},creditContainer:{get:function(){return this._creditContainer}},creditViewport:{get:function(){return this._creditViewport}},scene:{get:function(){return this._scene}},imageryLayers:{get:function(){return this._scene.imageryLayers}},terrainProvider:{get:function(){return this._scene.terrainProvider},set:function(e){this._scene.terrainProvider=e}},creditDisplay:{get:function(){return this._scene.frameState.creditDisplay}},dataSourceDisplay:{get:function(){return this._dataSourceDisplay}},entities:{get:function(){return this._dataSourceDisplay.defaultDataSource.entities}},dataSources:{get:function(){return this._dataSourceCollection}},camera:{get:function(){return this._scene.camera}},ellipsoid:{get:function(){return this._scene.ellipsoid}},clock:{get:function(){return this._clock}},screenSpaceEventHandler:{get:function(){return this._screenSpaceEventHandler}},targetFrameRate:{get:function(){return this._targetFrameRate},set:function(e){this._targetFrameRate=e}},useDefaultRenderLoop:{get:function(){return this._useDefaultRenderLoop},set:function(e){this._useDefaultRenderLoop!==e&&(this._useDefaultRenderLoop=e,e&&!this._renderLoopRunning&&OLt(this))}},resolutionScale:{get:function(){return this._resolutionScale},set:function(e){this._resolutionScale!==e&&(this._resolutionScale=e,this._forceResize=!0)}},useBrowserRecommendedResolution:{get:function(){return this._useBrowserRecommendedResolution},set:function(e){this._useBrowserRecommendedResolution!==e&&(this._useBrowserRecommendedResolution=e,this._forceResize=!0)}},allowDataSourcesToSuspendAnimation:{get:function(){return this._allowDataSourcesToSuspendAnimation},set:function(e){this._allowDataSourcesToSuspendAnimation=e}},trackedEntity:{get:function(){return this._trackedEntity},set:function(e){if(this._trackedEntity!==e){this._trackedEntity=e,Xte(this);let t=this.scene,n=t.mode;!l(e)||!l(e.position)?(this._needTrackedEntityUpdate=!1,(n===se.COLUMBUS_VIEW||n===se.SCENE2D)&&(t.screenSpaceCameraController.enableTranslate=!0),(n===se.COLUMBUS_VIEW||n===se.SCENE3D)&&(t.screenSpaceCameraController.enableTilt=!0),this._entityView=void 0,this.camera.lookAtTransform(F.IDENTITY)):this._needTrackedEntityUpdate=!0,this._trackedEntityChanged.raiseEvent(e),this.scene.requestRender()}}},trackedEntityChanged:{get:function(){return this._trackedEntityChanged}},clockTrackedDataSource:{get:function(){return this._clockTrackedDataSource},set:function(e){this._clockTrackedDataSource!==e&&(this._clockTrackedDataSource=e,jRe(this.clock,e))}}});tr.prototype.showErrorPanel=function(e,t,n){let i=this._element,o=document.createElement("div");o.className="cesium-widget-errorPanel";let r=document.createElement("div");r.className="cesium-widget-errorPanel-content",o.appendChild(r);let s=document.createElement("div");s.className="cesium-widget-errorPanel-header",s.appendChild(document.createTextNode(e)),r.appendChild(s);let a=document.createElement("div");a.className="cesium-widget-errorPanel-scroll",r.appendChild(a);function c(){a.style.maxHeight=`${Math.max(Math.round(i.clientHeight*.9-100),30)}px`}c(),l(window.addEventListener)&&window.addEventListener("resize",c,!1);let d=l(t),u=l(n);if(d||u){let A=document.createElement("div");if(A.className="cesium-widget-errorPanel-message",a.appendChild(A),u){let f=yp(n);d||(typeof n=="string"&&(n=new Error(n)),t=yp({name:n.name,message:n.message}),f=n.stack),typeof console<"u"&&console.error(`${e}
${t}
${f}`);let b=document.createElement("div");b.className="cesium-widget-errorPanel-message-details collapsed";let C=document.createElement("span");C.className="cesium-widget-errorPanel-more-details",C.appendChild(document.createTextNode("See more...")),b.appendChild(C),b.onclick=function(T){b.removeChild(C),b.appendChild(document.createTextNode(f)),b.className="cesium-widget-errorPanel-message-details",r.className="cesium-widget-errorPanel-content expanded",b.onclick=void 0},a.appendChild(b)}A.innerHTML=`<p>${t}</p>`}let h=document.createElement("div");h.className="cesium-widget-errorPanel-buttonPanel",r.appendChild(h);let p=document.createElement("button");p.setAttribute("type","button"),p.className="cesium-button",p.appendChild(document.createTextNode("OK")),p.onclick=function(){l(c)&&l(window.removeEventListener)&&window.removeEventListener("resize",c,!1),i.removeChild(o)},h.appendChild(p),i.appendChild(o)};tr.prototype.isDestroyed=function(){return!1};tr.prototype.destroy=function(){let e=this.dataSources,t=e.length;for(let n=0;n<t;n++)this._dataSourceRemoved(e,e.get(n));this._dataSourceRemoved(void 0,this._dataSourceDisplay.defaultDataSource),this._dataSourceDisplay=this._dataSourceDisplay.destroy(),l(this._scene)&&(this._scene.renderError.removeEventListener(this._onRenderError),this._scene=this._scene.destroy()),this._container.removeChild(this._element),this._creditContainer.removeChild(this._innerCreditContainer),this._eventHelper.removeAll(),this._destroyDataSourceCollection&&(this._dataSourceCollection=this._dataSourceCollection.destroy()),he(this)};tr.prototype.resize=function(){let e=this._canvas;!this._forceResize&&this._canvasClientWidth===e.clientWidth&&this._canvasClientHeight===e.clientHeight&&this._lastDevicePixelRatio===window.devicePixelRatio||(this._forceResize=!1,$Re(this),eVe(this),this._scene.requestRender())};tr.prototype.render=function(){if(this._canRender){this._scene.initializeFrame();let e=this._clock.tick();this._scene.render(e)}else this._clock.tick()};tr.prototype._dataSourceAdded=function(e,t){t.entities.collectionChanged.addEventListener(tr.prototype._onEntityCollectionChanged,this)};tr.prototype._dataSourceRemoved=function(e,t){let n=t.entities;n.collectionChanged.removeEventListener(tr.prototype._onEntityCollectionChanged,this),l(this.trackedEntity)&&n.getById(this.trackedEntity.id)===this.trackedEntity&&(this.trackedEntity=void 0)};tr.prototype._updateCanAnimate=function(e){this._clock.canAnimate=e};var zLt=new ue;tr.prototype._onTick=function(e){let t=e.currentTime,n=this._dataSourceDisplay.update(t);this._allowDataSourcesToSuspendAnimation&&this._canAnimateUpdateCallback(n);let i=this._entityView;if(l(i)){let o=this._trackedEntity;this._dataSourceDisplay.getBoundingSphere(o,!1,i.boundingSphere??zLt)===Tt.DONE&&i.update(t)}};tr.prototype._onEntityCollectionChanged=function(e,t,n){let i=n.length;for(let o=0;o<i;o++){let r=n[o];this.trackedEntity===r&&(this.trackedEntity=void 0)}};tr.prototype._clearTrackedObject=function(){this.trackedEntity=void 0};tr.prototype._onDataSourceChanged=function(e){this.clockTrackedDataSource===e&&jRe(this.clock,e)};tr.prototype._onDataSourceAdded=function(e,t){this._automaticallyTrackDataSourceClocks&&(this.clockTrackedDataSource=t);let n=t.entities.id,i=this._eventHelper.add(t.changedEvent,tr.prototype._onDataSourceChanged,this);this._dataSourceChangedListeners[n]=i};tr.prototype._onDataSourceRemoved=function(e,t){let n=this.clockTrackedDataSource===t,i=t.entities.id;if(this._dataSourceChangedListeners[i](),this._dataSourceChangedListeners[i]=void 0,n){let o=e.length;this._automaticallyTrackDataSourceClocks&&o>0?this.clockTrackedDataSource=e.get(o-1):this.clockTrackedDataSource=void 0}};tr.prototype.zoomTo=function(e,t){return tVe(this,e,{offset:t},!1)};tr.prototype.flyTo=function(e,t){return tVe(this,e,t,!0)};function tVe(e,t,n,i){Xte(e);let o=new Promise(r=>{e._completeZoom=function(s){r(s)}});return e._zoomPromise=o,e._zoomIsFlight=i,e._zoomOptions=n,Promise.resolve(t).then(function(r){if(e._zoomPromise===o){if(r instanceof fs){let s;l(r.imageryProvider)?s=Promise.resolve(r.getImageryRectangle()):s=new Promise(a=>{let c=r.readyEvent.addEventListener(()=>{c(),a(r.getImageryRectangle())})}),s.then(function(a){return aE(a,e.scene)}).then(function(a){e._zoomPromise===o&&(e._zoomTarget=a)});return}if(r instanceof js||r instanceof aR||r instanceof $y||r instanceof Js){e._zoomTarget=r;return}if(r.isLoading&&l(r.loadingEvent)){let s=r.loadingEvent.addEventListener(function(){s(),e._zoomPromise===o&&(e._zoomTarget=r.entities.values.slice(0))});return}if(Array.isArray(r)){e._zoomTarget=r.slice(0);return}r=r.values??r,l(r.entities)&&(r=r.entities.values),Array.isArray(r)?e._zoomTarget=r.slice(0):e._zoomTarget=[r]}}),e.scene.requestRender(),o}function xv(e){e._zoomPromise=void 0,e._zoomTarget=void 0,e._zoomOptions=void 0}function Xte(e){let t=e._zoomPromise;l(t)&&(xv(e),e._completeZoom(!1))}tr.prototype._postRender=function(){HLt(this),JLt(this)};var JRe=new ue;function HLt(e){let t=e._zoomTarget;if(!l(t)||e.scene.mode===se.MORPHING)return;let n=e.scene,i=n.camera,o=e._zoomOptions??{},r;function s(u){l(o.offset)||(o.offset=new jm(0,-.5,u.radius)),r={offset:o.offset,duration:o.duration,maximumHeight:o.maximumHeight,complete:function(){e._completeZoom(!0)},cancel:function(){e._completeZoom(!1)}},e._zoomIsFlight?i.flyToBoundingSphere(u,r):(i.viewBoundingSphere(u,o.offset),i.lookAtTransform(F.IDENTITY),e._completeZoom(!0)),xv(e)}if(t instanceof aR){if(l(t.boundingSphere)){s(t.boundingSphere);return}let u=t.frameChanged.addEventListener(function(h){s(h.boundingSphere),u()});return}if(t instanceof js||t instanceof $y){s(t.boundingSphere);return}if(t instanceof Js){s(t.boundingVolume);return}if(t instanceof Ae){r={destination:n.ellipsoid.cartographicToCartesian(t),duration:o.duration,maximumHeight:o.maximumHeight,complete:function(){e._completeZoom(!0)},cancel:function(){e._completeZoom(!1)}},e._zoomIsFlight?i.flyTo(r):(i.setView(r),e._completeZoom(!0)),xv(e);return}let a=t,c=[];for(let u=0,h=a.length;u<h;u++){let p=e._dataSourceDisplay.getBoundingSphere(a[u],!1,JRe);if(p===Tt.PENDING)return;p!==Tt.FAILED&&c.push(ue.clone(JRe))}if(c.length===0){Xte(e);return}e.trackedEntity=void 0;let d=ue.fromBoundingSpheres(c);e._zoomIsFlight?(xv(e),i.flyToBoundingSphere(d,{duration:o.duration,maximumHeight:o.maximumHeight,complete:function(){e._completeZoom(!0)},cancel:function(){e._completeZoom(!1)},offset:o.offset})):(i.viewBoundingSphere(d,o.offset),i.lookAtTransform(F.IDENTITY),xv(e),e._completeZoom(!0))}var KRe=new ue;function JLt(e){if(!e._needTrackedEntityUpdate)return;let t=e._trackedEntity,n=e.clock.currentTime,i=K.getValueOrUndefined(t.position,n);if(!l(i))return;let o=e.scene,r=e._dataSourceDisplay.getBoundingSphere(t,!1,KRe);if(r===Tt.PENDING)return;let s=o.mode;(s===se.COLUMBUS_VIEW||s===se.SCENE2D)&&(o.screenSpaceCameraController.enableTranslate=!1),(s===se.COLUMBUS_VIEW||s===se.SCENE3D)&&(o.screenSpaceCameraController.enableTilt=!1);let a=r!==Tt.FAILED?KRe:void 0;e._entityView=new RP(t,o,o.ellipsoid),e._entityView.update(n,a),e._needTrackedEntityUpdate=!1}var Cv=tr;var t0o=y(x(),1);var KLt=new m(1,1,1);function Yte(e){e=e??KLt,this._dimensions=m.clone(e)}Object.defineProperties(Yte.prototype,{dimensions:{get:function(){return this._dimensions},set:function(e){m.clone(e,this._dimensions)}}});var jLt=new m;Yte.prototype.emit=function(e){let t=this._dimensions,n=m.multiplyByScalar(t,.5,jLt),i=L.randomBetween(-n.x,n.x),o=L.randomBetween(-n.y,n.y),r=L.randomBetween(-n.z,n.z);e.position=m.fromElements(i,o,r,e.position),e.velocity=m.normalize(e.position,e.velocity)};var Mte=Yte;var o0o=y(x(),1);function mA(){this.featurePropertiesDirty=!1}Object.defineProperties(mA.prototype,{featuresLength:{get:function(){fe.throwInstantiationError()}},pointsLength:{get:function(){fe.throwInstantiationError()}},trianglesLength:{get:function(){fe.throwInstantiationError()}},geometryByteLength:{get:function(){fe.throwInstantiationError()}},texturesByteLength:{get:function(){fe.throwInstantiationError()}},batchTableByteLength:{get:function(){fe.throwInstantiationError()}},innerContents:{get:function(){fe.throwInstantiationError()}},ready:{get:function(){fe.throwInstantiationError()}},tileset:{get:function(){fe.throwInstantiationError()}},tile:{get:function(){fe.throwInstantiationError()}},url:{get:function(){fe.throwInstantiationError()}},batchTable:{get:function(){fe.throwInstantiationError()}},metadata:{get:function(){fe.throwInstantiationError()},set:function(e){fe.throwInstantiationError()}},group:{get:function(){fe.throwInstantiationError()},set:function(e){fe.throwInstantiationError()}}});mA.prototype.hasProperty=function(e,t){fe.throwInstantiationError()};mA.prototype.getFeature=function(e){fe.throwInstantiationError()};mA.prototype.applyDebugSettings=function(e,t){fe.throwInstantiationError()};mA.prototype.applyStyle=function(e){fe.throwInstantiationError()};mA.prototype.update=function(e,t){fe.throwInstantiationError()};mA.prototype.pick=function(e,t,n){fe.throwInstantiationError()};mA.prototype.isDestroyed=function(){fe.throwInstantiationError()};mA.prototype.destroy=function(){fe.throwInstantiationError()};var vte=mA;var B0o=y(x(),1);var c0o=y(x(),1);function Tv(e){e=e??Q.EMPTY_OBJECT,this._maximumSubtreeCount=e.maximumSubtreeCount??0,this._subtreeRequestCounter=0,this._queue=new gb({comparator:Tv.comparator})}Tv.prototype.addSubtree=function(e){let t=new qLt(e,this._subtreeRequestCounter);this._subtreeRequestCounter++,this._queue.insert(t);let n=e.implicitCoordinates;if(n.level>0){let i=n.getParentSubtreeCoordinates(),o=this.find(i)}if(this._maximumSubtreeCount>0)for(;this._queue.length>this._maximumSubtreeCount&&this._queue.getMinimum()!==t;)this._queue.removeMinimum()};Tv.prototype.find=function(e){let t=this._queue,n=t.internalArray,i=t.length;for(let o=0;o<i;o++){let r=n[o],a=r.subtree.implicitCoordinates;if(e.isEqual(a))return r.subtree}};Tv.comparator=function(e,t){let n=e.subtree.implicitCoordinates,i=t.subtree.implicitCoordinates;return n.isAncestor(i)?1:i.isAncestor(n)?-1:e.stamp-t.stamp};function qLt(e,t){this.subtree=e,this.stamp=t}var Ev=Tv;function Sv(e){e=e??Q.EMPTY_OBJECT;let{className:t,names:n,types:i,componentTypes:o,shape:r,dimensions:s,paddingBefore:a=m.ZERO.clone(),paddingAfter:c=m.ZERO.clone(),globalTransform:d=F.IDENTITY.clone(),shapeTransform:u=F.IDENTITY.clone(),minBounds:h,maxBounds:p,minimumValues:A,maximumValues:f,maximumTileCount:b}=e;this._shapeTransform=u,this._globalTransform=d,this._shape=r,this._minBounds=h,this._maxBounds=p,this._dimensions=s,this._paddingBefore=a,this._paddingAfter=c,this._className=t,this._names=n,this._types=i,this._componentTypes=o,this._metadataOrder=r===Ac.ELLIPSOID?lA.Z_UP:lA.Y_UP,this._minimumValues=A,this._maximumValues=f,this._maximumTileCount=b,this._availableLevels=void 0,this._implicitTileset=void 0,this._subtreeCache=new Ev}Object.defineProperties(Sv.prototype,{globalTransform:{get:function(){return this._globalTransform}},shapeTransform:{get:function(){return this._shapeTransform}},shape:{get:function(){return this._shape}},minBounds:{get:function(){return this._minBounds}},maxBounds:{get:function(){return this._maxBounds}},dimensions:{get:function(){return this._dimensions}},paddingBefore:{get:function(){return this._paddingBefore}},paddingAfter:{get:function(){return this._paddingAfter}},className:{get:function(){return this._className}},names:{get:function(){return this._names}},types:{get:function(){return this._types}},componentTypes:{get:function(){return this._componentTypes}},metadataOrder:{get:function(){return this._metadataOrder}},minimumValues:{get:function(){return this._minimumValues}},maximumValues:{get:function(){return this._maximumValues}},maximumTileCount:{get:function(){return this._maximumTileCount}},availableLevels:{get:function(){return this._availableLevels}}});Sv.fromUrl=async function(e){let t=Le.createIfNeeded(e),n=await t.fetchJson();e1t(n);let i=a1t(n,t);await i.load();let{root:o}=n,r=_i(n,"3DTILES_metadata")?n.extensions["3DTILES_metadata"]:n,s=new cT({metadataJson:r,schema:i.schema}),a=o.content.extensions["3DTILES_content_voxels"],c=a.class,d=c1t(s,c);Object.assign(d,t1t(o)),l(o.transform)?d.globalTransform=F.unpack(o.transform):d.globalTransform=F.clone(F.IDENTITY),d.dimensions=m.unpack(a.dimensions),d.maximumTileCount=$Lt(s),l(a.padding)&&(d.paddingBefore=m.unpack(a.padding.before),d.paddingAfter=m.unpack(a.padding.after));let u=new Sv(d),h=new Rp(t,o,i.schema);return u._implicitTileset=h,u._availableLevels=h.availableLevels,Fi.unload(i),u};function $Lt(e){if(l(e.tileset))return e.tileset.getPropertyBySemantic(Em.TILESET_TILE_COUNT)}function e1t(e){let t=e.root;if(!l(t.content))throw new me("Root must have content");if(!_i(t.content,"3DTILES_content_voxels"))throw new me("Root tile content must have 3DTILES_content_voxels extension");if(!_i(t,"3DTILES_implicit_tiling")&&!l(t.implicitTiling))throw new me("Root tile must have implicit tiling");if(!l(e.schema)&&!l(e.schemaUri)&&!_i(e,"3DTILES_metadata"))throw new me("Tileset must have a metadata schema")}function t1t(e){let t=e.boundingVolume;if(l(t.box))return r1t(t.box);if(l(t.region))return n1t(t.region);if(_i(t,"3DTILES_bounding_volume_cylinder"))return s1t(t.extensions["3DTILES_bounding_volume_cylinder"]);throw new me("Only box, region and 3DTILES_bounding_volume_cylinder are supported in Cesium3DTilesVoxelProvider")}function n1t(e){let t=e[0],n=e[1],i=e[2],o=e[3],r=e[4],s=e[5],a=F.fromScale(ie.WGS84.radii),c=new m(t,n,r),d=new m(i,o,s);return{shape:Ac.ELLIPSOID,minBounds:c,maxBounds:d,shapeTransform:a}}var i1t=new m,o1t=new $;function r1t(e){let t=nn.unpack(e),n=$.getScale(t.halfAxes,i1t),i=$.getRotation(t.halfAxes,o1t);return{shape:Ac.BOX,minBounds:m.negate(n,new m),maxBounds:m.clone(n),shapeTransform:F.fromRotationTranslation(i,t.center)}}function s1t(e){let{minRadius:t,maxRadius:n,height:i,minAngle:o=-L.PI,maxAngle:r=L.PI,translation:s=[0,0,0],rotation:a=[0,0,0,1]}=e,c=-.5*i+s[2],d=.5*i+s[2],u=F.fromTranslationQuaternionRotationScale(m.unpack(s),Me.unpack(a),m.ONE);return{shape:Ac.CYLINDER,minBounds:m.fromElements(t,o,c),maxBounds:m.fromElements(n,r,d),shapeTransform:u}}function a1t(e,t){let{schemaUri:n,schema:i}=e;return l(n)?Fi.getSchemaLoader({resource:t.getDerivedResource({url:n})}):Fi.getSchemaLoader({schema:i})}function c1t(e,t){let{schema:n,statistics:i}=e,o=i?.classes[t],r=n.classes[t].properties,s=Object.entries(r).map(([A,f])=>{let{type:b,componentType:C}=f,T=o?.properties[A].min,E=o?.properties[A].max,S=St.getComponentCount(b),I=nVe(T,S),R=nVe(E,S);return{id:A,type:b,componentType:C,minValue:I,maxValue:R}}),a=s.map(A=>A.id),c=s.map(A=>A.type),d=s.map(A=>A.componentType),u=s.map(A=>A.minValue),h=s.map(A=>A.maxValue),p=u.some(l);return{className:t,names:a,types:c,componentTypes:d,minimumValues:p?u:void 0,maximumValues:p?h:void 0}}function nVe(e,t){if(!l(e))return;let n=Array.isArray(e)?e:[e];return Array.from({length:t},(i,o)=>n[o])}async function l1t(e,t){let n=e._implicitTileset,i=e._subtreeCache,o=i.find(t);if(l(o))return o;let r=n.subtreeUriTemplate.getDerivedResource({templateValues:t.getTemplateValues()}),s=n.baseResource.getDerivedResource({url:r.url}),a=await s.fetchArrayBuffer();if(o=i.find(t),l(o))return o;let c=Ng(a);return o=await tg.fromSubtreeJson(s,c.jsonPayload,c.binaryPayload,n,t),i.addSubtree(o),o}Sv.prototype.requestData=async function(e){e=e??Q.EMPTY_OBJECT;let{tileLevel:t=0,tileX:n=0,tileY:i=0,tileZ:o=0,keyframe:r=0}=e;if(r!==0)return Promise.reject("3D Tiles currently doesn't support time-dynamic data.");let s=this._implicitTileset,a=new Vp({subdivisionScheme:s.subdivisionScheme,subtreeLevels:s.subtreeLevels,level:t,x:n,y:i,z:o}),c=a.isSubtreeRoot()&&a.level>0,d=c?a.getParentSubtreeCoordinates():a.getSubtreeCoordinates(),h=await l1t(this,d);if(!(c?h.childSubtreeIsAvailableAtCoordinates:h.tileIsAvailableAtCoordinates).call(h,a))return Promise.reject(`Tile is not available at level ${t}, x ${n}, y ${i}, z ${o}.`);let{contentUriTemplates:f,baseResource:b}=s,C=f[0].getDerivedResource({templateValues:a.getTemplateValues()}),T=b.getDerivedResource({url:C.url});return LE.fromGltf(T)};var Ute=Sv;var X0o=y(x(),1);function Dte(e){e=e??1,this._radius=e??1}Object.defineProperties(Dte.prototype,{radius:{get:function(){return this._radius},set:function(e){this._radius=e}}});Dte.prototype.emit=function(e){let t=L.randomBetween(0,L.TWO_PI),n=L.randomBetween(0,this._radius),i=n*Math.cos(t),o=n*Math.sin(t),r=0;e.position=m.fromElements(i,o,r,e.position),e.velocity=m.clone(m.UNIT_Z,e.velocity)};var _v=Dte;var Ryo=y(x(),1);var M0o=y(x(),1),kte={CUMULUS:0};kte.validate=function(e){return e===kte.CUMULUS};var cR=Object.freeze(kte);var z0o=y(x(),1);function Uf(e,t){if(e=e??Q.EMPTY_OBJECT,this._show=e.show??!0,this._position=m.clone(e.position??m.ZERO),!l(e.scale)&&l(e.maximumSize))this._maximumSize=m.clone(e.maximumSize),this._scale=new M(this._maximumSize.x,this._maximumSize.y);else{this._scale=M.clone(e.scale??new M(20,12));let n=new m(this._scale.x,this._scale.y,Math.min(this._scale.x,this._scale.y)/1.5);this._maximumSize=m.clone(e.maximumSize??n)}this._slice=e.slice??-1,this._color=U.clone(e.color??U.WHITE),this._brightness=e.brightness??1,this._cloudCollection=t,this._index=-1}var d1t=Uf.SHOW_INDEX=0,u1t=Uf.POSITION_INDEX=1,m1t=Uf.SCALE_INDEX=2,h1t=Uf.MAXIMUM_SIZE_INDEX=3,f1t=Uf.SLICE_INDEX=4,p1t=Uf.BRIGHTNESS_INDEX=5,A1t=Uf.COLOR_INDEX=6;Uf.NUMBER_OF_PROPERTIES=7;function vE(e,t){let n=e._cloudCollection;l(n)&&(n._updateCloud(e,t),e._dirty=!0)}Object.defineProperties(Uf.prototype,{show:{get:function(){return this._show},set:function(e){this._show!==e&&(this._show=e,vE(this,d1t))}},position:{get:function(){return this._position},set:function(e){let t=this._position;m.equals(t,e)||(m.clone(e,t),vE(this,u1t))}},scale:{get:function(){return this._scale},set:function(e){let t=this._scale;M.equals(t,e)||(M.clone(e,t),vE(this,m1t))}},maximumSize:{get:function(){return this._maximumSize},set:function(e){let t=this._maximumSize;m.equals(t,e)||(m.clone(e,t),vE(this,h1t))}},color:{get:function(){return this._color},set:function(e){let t=this._color;U.equals(t,e)||(U.clone(e,t),vE(this,A1t))}},slice:{get:function(){return this._slice},set:function(e){this._slice!==e&&(this._slice=e,vE(this,f1t))}},brightness:{get:function(){return this._brightness},set:function(e){this._brightness!==e&&(this._brightness=e,vE(this,p1t))}}});Uf.prototype._destroy=function(){this._cloudCollection=void 0};var qu=Uf;var $u,cz=new m,g1t={positionHighAndScaleX:0,positionLowAndScaleY:1,packedAttribute0:2,packedAttribute1:3,color:4},b1t={direction:0,positionHighAndScaleX:1,positionLowAndScaleY:2,packedAttribute0:3,packedAttribute1:4,color:5},y1t=qu.SHOW_INDEX,x1t=qu.POSITION_INDEX,C1t=qu.SCALE_INDEX,T1t=qu.MAXIMUM_SIZE_INDEX,E1t=qu.SLICE_INDEX,S1t=qu.BRIGHTNESS_INDEX,_1t=qu.NUMBER_OF_PROPERTIES,I1t=qu.COLOR_INDEX;function Df(e){e=e??Q.EMPTY_OBJECT,this._clouds=[],this._cloudsToUpdate=[],this._cloudsToUpdateIndex=0,this._cloudsRemoved=!1,this._createVertexArray=!1,this._propertiesChanged=new Uint32Array(_1t),this._noiseTexture=void 0,this._textureSliceWidth=128,this._noiseTextureRows=4,this.noiseDetail=e.noiseDetail??16,this.noiseOffset=m.clone(e.noiseOffset??m.ZERO),this._loading=!1,this._ready=!1;let t=this;this._uniforms={u_noiseTexture:function(){return t._noiseTexture},u_noiseTextureDimensions:iVe(t),u_noiseDetail:function(){return t.noiseDetail}},this._vaNoise=void 0,this._spNoise=void 0,this._spCreated=!1,this._sp=void 0,this._rs=void 0,this.show=e.show??!0,this._colorCommands=[],this.debugBillboards=e.debugBillboards??!1,this._compiledDebugBillboards=!1,this.debugEllipsoids=e.debugEllipsoids??!1,this._compiledDebugEllipsoids=!1}function iVe(e){return function(){return cz.x=e._textureSliceWidth,cz.y=e._noiseTextureRows,cz.z=1/e._noiseTextureRows,cz}}Object.defineProperties(Df.prototype,{length:{get:function(){return Ote(this),this._clouds.length}}});function oVe(e){let t=e.length;for(let n=0;n<t;++n)e[n]&&e[n]._destroy()}Df.prototype.add=function(e){e=e??Q.EMPTY_OBJECT;let t=e.cloudType??cR.CUMULUS,n;return t===cR.CUMULUS&&(n=new qu(e,this),n._index=this._clouds.length,this._clouds.push(n),this._createVertexArray=!0),n};Df.prototype.remove=function(e){return this.contains(e)?(this._clouds[e._index]=void 0,this._cloudsRemoved=!0,this._createVertexArray=!0,e._destroy(),!0):!1};Df.prototype.removeAll=function(){oVe(this._clouds),this._clouds=[],this._cloudsToUpdate=[],this._cloudsToUpdateIndex=0,this._cloudsRemoved=!1,this._createVertexArray=!0};function Ote(e){if(e._cloudsRemoved){e._cloudsRemoved=!1;let t=[],n=e._clouds,i=n.length;for(let o=0,r=0;o<i;++o){let s=n[o];l(s)&&(n._index=r++,t.push(s))}e._clouds=t}}Df.prototype._updateCloud=function(e,t){e._dirty||(this._cloudsToUpdate[this._cloudsToUpdateIndex++]=e),++this._propertiesChanged[t]};Df.prototype.contains=function(e){return l(e)&&e._cloudCollection===this};Df.prototype.get=function(e){return Ote(this),this._clouds[e]};var Z1t=new Float32Array([-1,-1,1,-1,1,1,-1,1]),R1t=new Uint16Array([0,1,2,0,2,3]);function V1t(e){let t=it.createVertexBuffer({context:e,typedArray:Z1t,usage:Be.STATIC_DRAW}),n=it.createIndexBuffer({context:e,typedArray:R1t,usage:Be.STATIC_DRAW,indexDatatype:Ue.UNSIGNED_SHORT}),i=[{index:0,vertexBuffer:t,componentsPerAttribute:2,componentDatatype:H.FLOAT}];return new kn({context:e,attributes:i,indexBuffer:n})}var zte;function G1t(e){let n=e.cache.cloudCollection_indexBufferBatched;if(l(n))return n;let i=16384*6-6,o=new Uint16Array(i);for(let r=0,s=0;r<i;r+=6,s+=4)o[r]=s,o[r+1]=s+1,o[r+2]=s+2,o[r+3]=s,o[r+4]=s+2,o[r+5]=s+3;return n=it.createIndexBuffer({context:e,typedArray:o,usage:Be.STATIC_DRAW,indexDatatype:Ue.UNSIGNED_SHORT}),n.vertexArrayDestroyable=!1,e.cache.cloudCollection_indexBufferBatched=n,n}function L1t(e){let t=e.cache.cloudCollection_indexBufferInstanced;return l(t)||(t=it.createIndexBuffer({context:e,typedArray:new Uint16Array([0,1,2,0,2,3]),usage:Be.STATIC_DRAW,indexDatatype:Ue.UNSIGNED_SHORT}),t.vertexArrayDestroyable=!1,e.cache.cloudCollection_indexBufferInstanced=t),t}function W1t(e){let t=e.cache.cloudCollection_vertexBufferInstanced;return l(t)||(t=it.createVertexBuffer({context:e,typedArray:new Float32Array([0,0,1,0,1,1,0,1]),usage:Be.STATIC_DRAW}),t.vertexArrayDestroyable=!1,e.cache.cloudCollection_vertexBufferInstanced=t),t}function F1t(e,t,n){let i=[{index:$u.positionHighAndScaleX,componentsPerAttribute:4,componentDatatype:H.FLOAT,usage:Be.STATIC_DRAW},{index:$u.positionLowAndScaleY,componentsPerAttribute:4,componentDatatype:H.FLOAT,usage:Be.STATIC_DRAW},{index:$u.packedAttribute0,componentsPerAttribute:4,componentDatatype:H.FLOAT,usage:Be.STATIC_DRAW},{index:$u.packedAttribute1,componentsPerAttribute:4,componentDatatype:H.FLOAT,usage:Be.STATIC_DRAW},{index:$u.color,componentsPerAttribute:4,componentDatatype:H.UNSIGNED_BYTE,normalize:!0,usage:Be.STATIC_DRAW}];n&&i.push({index:$u.direction,componentsPerAttribute:2,componentDatatype:H.FLOAT,vertexBuffer:W1t(e)});let o=n?t:4*t;return new LA(e,i,o,n)}var Qte=new In;function rVe(e,t,n,i){let o,r=n[$u.positionHighAndScaleX],s=n[$u.positionLowAndScaleY],a=i.position;In.fromCartesian(a,Qte);let c=i.scale,d=Qte.high,u=Qte.low;e._instanced?(o=i._index,r(o,d.x,d.y,d.z,c.x),s(o,u.x,u.y,u.z,c.y)):(o=i._index*4,r(o+0,d.x,d.y,d.z,c.x),r(o+1,d.x,d.y,d.z,c.x),r(o+2,d.x,d.y,d.z,c.x),r(o+3,d.x,d.y,d.z,c.x),s(o+0,u.x,u.y,u.z,c.y),s(o+1,u.x,u.y,u.z,c.y),s(o+2,u.x,u.y,u.z,c.y),s(o+3,u.x,u.y,u.z,c.y))}function sVe(e,t,n,i){let o,r=n[$u.packedAttribute0],s=i.show,a=i.brightness;e._instanced?(o=i._index,r(o,s,a,0,0)):(o=i._index*4,r(o+0,s,a,0,0),r(o+1,s,a,1,0),r(o+2,s,a,1,1),r(o+3,s,a,0,1))}function aVe(e,t,n,i){let o,r=n[$u.packedAttribute1],s=i.maximumSize,a=i.slice;e._instanced?(o=i._index,r(o,s.x,s.y,s.z,a)):(o=i._index*4,r(o+0,s.x,s.y,s.z,a),r(o+1,s.x,s.y,s.z,a),r(o+2,s.x,s.y,s.z,a),r(o+3,s.x,s.y,s.z,a))}function cVe(e,t,n,i){let o,r=n[$u.color],s=i.color,a=U.floatToByte(s.red),c=U.floatToByte(s.green),d=U.floatToByte(s.blue),u=U.floatToByte(s.alpha);e._instanced?(o=i._index,r(o,a,c,d,u)):(o=i._index*4,r(o+0,a,c,d,u),r(o+1,a,c,d,u),r(o+2,a,c,d,u),r(o+3,a,c,d,u))}function B1t(e,t,n,i){rVe(e,t,n,i),sVe(e,t,n,i),aVe(e,t,n,i),cVe(e,t,n,i)}function w1t(e,t,n,i){let o=e,r=o._textureSliceWidth,s=o._noiseTextureRows,a=t.context;o._vaNoise=V1t(a),o._spNoise=tn.fromCache({context:a,vertexShaderSource:n,fragmentShaderSource:i,attributeLocations:{position:0}});let c=o.noiseDetail,d=o.noiseOffset;o._noiseTexture=new Lt({context:a,width:r*r/s,height:r*s,pixelDatatype:Oe.UNSIGNED_BYTE,pixelFormat:Ke.RGBA,sampler:new Ht({wrapS:gn.REPEAT,wrapT:gn.REPEAT,minificationFilter:zt.NEAREST,magnificationFilter:li.NEAREST})});let u=new yl({vertexArray:o._vaNoise,shaderProgram:o._spNoise,outputTexture:o._noiseTexture,uniformMap:{u_noiseTextureDimensions:iVe(o),u_noiseDetail:function(){return c},u_noiseOffset:function(){return d}},persists:!1,owner:e,postExecute:function(h){o._ready=!0,o._loading=!1}});t.commandList.push(u),o._loading=!0}function N1t(e,t){let n=e,i=t.context;n._createVertexArray=!1,n._vaf=n._vaf&&n._vaf.destroy();let o=e._clouds,r=o.length;if(r>0){n._vaf=F1t(i,r,n._instanced);let s=n._vaf.writers,a;for(a=0;a<r;++a){let c=o[a];B1t(e,t,s,c)}n._vaf.commit(zte(i))}}var P1t=[];function X1t(e,t){let n=t.context,i=e,r=i._clouds.length,s=i._cloudsToUpdate,a=i._cloudsToUpdateIndex,c=i._propertiesChanged,d=P1t;d.length=0,(c[x1t]||c[C1t])&&d.push(rVe),(c[y1t]||c[S1t])&&d.push(sVe),(c[T1t]||c[E1t])&&d.push(aVe),c[I1t]&&d.push(cVe);let u=d.length,h=i._vaf.writers,p,A,f;if(a/r>.1){for(p=0;p<a;++p)for(A=s[p],A._dirty=!1,f=0;f<u;++f)d[f](e,t,h,A);i._vaf.commit(zte(n))}else{for(p=0;p<a;++p){for(A=s[p],A._dirty=!1,f=0;f<u;++f)d[f](e,t,h,A);i._instanced?i._vaf.subCommit(A._index,1):i._vaf.subCommit(A._index*4,4)}i._vaf.endSubCommits()}i._cloudsToUpdateIndex=0}function Y1t(e,t,n,i){let o=t.context,r=e,s=new ze({defines:[],sources:[n]});r._instanced&&s.defines.push("INSTANCED");let a=new ze({defines:[],sources:[i]});r.debugBillboards&&a.defines.push("DEBUG_BILLBOARDS"),r.debugEllipsoids&&a.defines.push("DEBUG_ELLIPSOIDS"),r._sp=tn.replaceCache({context:o,shaderProgram:r._sp,vertexShaderSource:s,fragmentShaderSource:a,attributeLocations:$u}),r._rs=Qe.fromCache({depthTest:{enabled:!0,func:ne.LESS},depthMask:!1,blending:ln.ALPHA_BLEND}),r._spCreated=!0,r._compiledDebugBillboards=r.debugBillboards,r._compiledDebugEllipsoids=r.debugEllipsoids}function M1t(e,t){let n=e,i=t.passes,o=n._uniforms,r=t.commandList;if(i.render){let s=n._colorCommands,a=n._vaf.va,c=a.length;s.length=c;for(let d=0;d<c;d++){let u=s[d];l(u)||(u=s[d]=new ot),u.pass=Ge.TRANSLUCENT,u.owner=e,u.uniformMap=o,u.count=a[d].indicesCount,u.vertexArray=a[d].va,u.shaderProgram=n._sp,u.renderState=n._rs,n._instanced&&(u.count=6,u.instanceCount=n._clouds.length),r.push(u)}}}Df.prototype.update=function(e){if(Ote(this),!this.show)return;let t=this.debugBillboards||this.debugEllipsoids;this._ready=t?!0:l(this._noiseTexture),!this._ready&&!this._loading&&!t&&w1t(this,e,OX,QX),this._instanced=e.context.instancedArrays,$u=this._instanced?b1t:g1t,zte=this._instanced?L1t:G1t;let i=this._clouds.length,o=this._cloudsToUpdate,r=this._cloudsToUpdateIndex;this._createVertexArray?N1t(this,e):r>0&&X1t(this,e),r>i*1.5&&(o.length=i),!(!l(this._vaf)||!l(this._vaf.va)||!this._ready&!t)&&((!this._spCreated||this.debugBillboards!==this._compiledDebugBillboards||this.debugEllipsoids!==this._compiledDebugEllipsoids)&&Y1t(this,e,kX,DX),M1t(this,e))};Df.prototype.isDestroyed=function(){return!1};Df.prototype.destroy=function(){return this._noiseTexture=this._noiseTexture&&this._noiseTexture.destroy(),this._sp=this._sp&&this._sp.destroy(),this._vaf=this._vaf&&this._vaf.destroy(),oVe(this._clouds),he(this)};var Hte=Df;var Wyo=y(x(),1);var v1t=L.toRadians(30);function Jte(e){this._angle=e??v1t}Object.defineProperties(Jte.prototype,{angle:{get:function(){return this._angle},set:function(e){this._angle=e}}});Jte.prototype.emit=function(e){let t=Math.tan(this._angle),n=L.randomBetween(0,L.TWO_PI),i=L.randomBetween(0,t),o=i*Math.cos(n),r=i*Math.sin(n),s=1;e.velocity=m.fromElements(o,r,s,e.velocity),m.normalize(e.velocity,e.velocity),e.position=m.clone(m.ZERO,e.position)};var Kte=Jte;var Hyo=y(x(),1);var U1t=new U,D1t=new U,k1t=new U,Q1t=new U,lVe=new re,Iv=new Uint8Array(4);function dVe(e,t,n,i){let o=t.height===n.height?0:(e-t.height)/(n.height-t.height);return U.lerp(t.color,n.color,o,i)}function lz(e,t){return{height:e,color:U.clone(t)}}function uVe(e){return e=e.filter(function(t,n,i){let o=n>0,r=n<i.length-1,s=o?t.height===i[n-1].height:!0,a=r?t.height===i[n+1].height:!0;return!s||!a}),e=e.filter(function(t,n,i){let o=n>0,r=n<i.length-1,s=o?U.equals(t.color,i[n-1].color):!1,a=r?U.equals(t.color,i[n+1].color):!1;return!s||!a}),e=e.filter(function(t,n,i){let o=n>0,r=o?U.equals(t.color,i[n-1].color):!1,s=o?t.height===i[n-1].height:!0;return!r||!s}),e}function O1t(e){let t,n,i=[],o=e.length;for(t=0;t<o;t++){let r=e[t],s=r.entries,a=s.length,c=[];for(n=0;n<a;n++){let A=s[n],f=L.clamp(A.height,Dd._minimumHeight,Dd._maximumHeight),b=U.clone(A.color,U1t);b.red*=b.alpha,b.green*=b.alpha,b.blue*=b.alpha,c.push(lz(f,b))}let d=!0,u=!0;for(n=0;n<a-1;n++){let A=c[n+0],f=c[n+1];d=d&&A.height<=f.height,u=u&&A.height>=f.height}u?c=c.reverse():d||eA(c,function(A,f){return L.sign(A.height-f.height)});let h=r.extendDownwards??!1,p=r.extendUpwards??!1;c.length===1&&!h&&!p&&(h=!0,p=!0),h&&c.splice(0,0,lz(Dd._minimumHeight,c[0].color)),p&&c.splice(c.length,0,lz(Dd._maximumHeight,c[c.length-1].color)),c=uVe(c),i.push(c)}return i}function z1t(e){let t=O1t(e),n=[],i=[],o;function r(d,u){n.push(lz(d,u))}function s(d,u,h){let p=U.multiplyByScalar(h,1-u.alpha,Q1t);p=U.add(p,u,p),r(d,p)}let a=t.length;for(o=0;o<a;o++){let d=t[o],u=0,h=0;i=n,n=[];let p=d.length,A=i.length;for(;u<p||h<A;){let f=u<p?d[u]:void 0,b=u>0?d[u-1]:void 0,C=u<p-1?d[u+1]:void 0,T=h<A?i[h]:void 0,E=h>0?i[h-1]:void 0,S=h<A-1?i[h+1]:void 0;if(l(f)&&l(T)&&f.height===T.height){let I=l(S)&&T.height===S.height,R=!l(E),V=!l(S),W=l(C)&&f.height===C.height,B=!l(b),N=!l(C);I?W?(s(f.height,f.color,T.color),s(f.height,C.color,S.color)):B?(r(f.height,T.color),s(f.height,f.color,S.color)):N?(s(f.height,f.color,T.color),r(f.height,S.color)):(s(f.height,f.color,T.color),s(f.height,f.color,S.color)):R?W?(r(f.height,f.color),s(f.height,C.color,T.color)):N?(r(f.height,f.color),r(f.height,T.color)):(B||r(f.height,f.color),s(f.height,f.color,T.color)):V?W?(s(f.height,f.color,T.color),r(f.height,C.color)):B?(r(f.height,T.color),r(f.height,f.color)):N?s(f.height,f.color,T.color):(s(f.height,f.color,T.color),r(f.height,f.color)):W?(s(f.height,f.color,T.color),s(f.height,C.color,T.color)):B?(r(f.height,T.color),s(f.height,f.color,T.color)):N?(s(f.height,f.color,T.color),r(f.height,T.color)):s(f.height,f.color,T.color),u+=W?2:1,h+=I?2:1}else if(l(f)&&l(T)&&l(E)&&f.height<T.height){let I=dVe(f.height,E,T,k1t);l(b)?l(C)?s(f.height,f.color,I):(s(f.height,f.color,I),r(f.height,I)):(r(f.height,I),s(f.height,f.color,I)),u++}else if(l(T)&&l(f)&&l(b)&&T.height<f.height){let I=dVe(T.height,b,f,D1t);l(E)?l(S)?s(T.height,I,T.color):(s(T.height,I,T.color),r(T.height,I)):(r(T.height,I),s(T.height,I,T.color)),h++}else l(f)&&(!l(T)||f.height<T.height)?(l(T)&&!l(E)&&!l(C)?(r(f.height,f.color),r(f.height,Dd._emptyColor),r(T.height,Dd._emptyColor)):(!l(T)&&l(E)&&!l(b)&&(r(E.height,Dd._emptyColor),r(f.height,Dd._emptyColor)),r(f.height,f.color)),u++):l(T)&&(!l(f)||T.height<f.height)&&(r(T.height,T.color),h++)}}return uVe(n)}function Dd(e){let{scene:t,layers:n}=e??Q.EMPTY_OBJECT,{context:i}=t,o=z1t(n),r=o.length,s,a,c;if(!Dd._useFloatTexture(i)){a=Oe.UNSIGNED_BYTE,c=Ke.RGBA,s=new Uint8Array(r*4);for(let A=0;A<r;A++)re.packFloat(o[A].height,lVe),re.pack(lVe,s,A*4)}else{a=Oe.FLOAT,c=i.webgl2?Ke.RED:Ke.LUMINANCE,s=new Float32Array(r);for(let A=0;A<r;A++)s[A]=o[A].height}let u=Lt.create({context:i,pixelFormat:c,pixelDatatype:a,source:{arrayBufferView:s,width:r,height:1},sampler:new Ht({wrapS:gn.CLAMP_TO_EDGE,wrapT:gn.CLAMP_TO_EDGE,minificationFilter:zt.NEAREST,magnificationFilter:li.NEAREST})}),h=new Uint8Array(r*4);for(let A=0;A<r;A++)o[A].color.toBytes(Iv),h[A*4+0]=Iv[0],h[A*4+1]=Iv[1],h[A*4+2]=Iv[2],h[A*4+3]=Iv[3];let p=Lt.create({context:i,pixelFormat:Ke.RGBA,pixelDatatype:Oe.UNSIGNED_BYTE,source:{arrayBufferView:h,width:r,height:1},sampler:new Ht({wrapS:gn.CLAMP_TO_EDGE,wrapT:gn.CLAMP_TO_EDGE,minificationFilter:zt.LINEAR,magnificationFilter:li.LINEAR})});return Oi.fromType("ElevationBand",{heights:u,colors:p})}Dd._useFloatTexture=function(e){return e.floatingPointTexture};Dd._maximumHeight=5906376425472;Dd._minimumHeight=-5906376425472;Dd._emptyColor=new U(0,0,0,0);var jte=Dd;var ixo=y(x(),1);async function H1t(e,t){t=t??{},t.cacheBytes=t.cacheBytes??1536*1024*1024,t.maximumCacheOverflowBytes=t.maximumCacheOverflowBytes??1024*1024*1024,t.enableCollision=t.enableCollision??!0,e=e??Q.EMPTY_OBJECT,e.onlyUsingWithGoogleGeocoder||_t("google-tiles-with-google-geocoder","Only the Google geocoder can be used with Google Photorealistic 3D Tiles. Set the `geocode` property of Viewer constructor options. You can set additionalOptions.onlyUsingWithGoogleGeocoder to hide this warning once you have configured the geocoder.");let n=e.key??ua.defaultApiKey;if(!l(n))return J1t(t);let i,o=ua.getDefaultCredit();l(o)&&(i=[o]);let r=new Le({url:`${ua.mapTilesApiEndpoint}v1/3dtiles/root.json`,queryParameters:{key:n},credits:i});return js.fromUrl(r,t)}var mVe={};async function J1t(e){let i=mVe[2275207];l(i)||(i=cs.fromAssetId(2275207),mVe[2275207]=i);let o=await i;return js.fromUrl(o,e)}var qte=H1t;var dxo=y(x(),1);async function K1t(e){let t=await js.fromIonAssetId(96188,e);e=e??Q.EMPTY_OBJECT;let n=e.style;if(!l(n)){let i=(e.defaultColor??U.WHITE).toCssColorString();n=new Wg({color:`Boolean(\${feature['cesium#color']}) ? color(\${feature['cesium#color']}) : ${i}`})}return t.style=n,t}var $te=K1t;var xxo=y(x(),1);function j1t(e){e=e??Q.EMPTY_OBJECT;let t=[],n=e.geometry;(!l(n.attributes)||!l(n.primitiveType))&&(n=n.constructor.createGeometry(n));let i=n.attributes,o=F.clone(e.modelMatrix??F.IDENTITY),r=e.length??1e4;if(l(i.normal)&&t.push(new wt({geometry:zn.createLineSegmentsForVectors(n,"normal",r),attributes:{color:new $t(1,0,0,1)},modelMatrix:o})),l(i.tangent)&&t.push(new wt({geometry:zn.createLineSegmentsForVectors(n,"tangent",r),attributes:{color:new $t(0,1,0,1)},modelMatrix:o})),l(i.bitangent)&&t.push(new wt({geometry:zn.createLineSegmentsForVectors(n,"bitangent",r),attributes:{color:new $t(0,0,1,1)},modelMatrix:o})),t.length>0)return new Nn({asynchronous:!1,geometryInstances:t,appearance:new yn({flat:!0,translucent:!1})})}var ene=j1t;var _xo=y(x(),1);function Zv(e){e=e??Q.EMPTY_OBJECT;let t=e.attributeName,n=e.perInstanceAttribute;l(n)||(n=!1);let i=e.glslDatatype??"vec3",o=`v_${t}`,r;if(t==="normal"||t==="tangent"||t==="bitangent")r=`vec4 getColor() { return vec4((${o} + vec3(1.0)) * 0.5, 1.0); }
`;else switch(t==="st"&&(i="vec2"),i){case"float":r=`vec4 getColor() { return vec4(vec3(${o}), 1.0); }
`;break;case"vec2":r=`vec4 getColor() { return vec4(${o}, 0.0, 1.0); }
`;break;case"vec3":r=`vec4 getColor() { return vec4(${o}, 1.0); }
`;break;case"vec4":r=`vec4 getColor() { return ${o}; }
`;break}let s=`in vec3 position3DHigh;
in vec3 position3DLow;
in float batchId;
${n?"":`in ${i} ${t};
`}out ${i} ${o};
void main()
{
vec4 p = czm_translateRelativeToEye(position3DHigh, position3DLow);
${n?`${o} = czm_batchTable_${t}(batchId);
`:`${o} = ${t};
`}gl_Position = czm_modelViewProjectionRelativeToEye * p;
}`,a=`in ${i} ${o};
${r}
void main()
{
out_FragColor = getColor();
}`;this.material=void 0,this.translucent=e.translucent??!1,this._vertexShaderSource=e.vertexShaderSource??s,this._fragmentShaderSource=e.fragmentShaderSource??a,this._renderState=To.getDefaultRenderState(!1,!1,e.renderState),this._closed=e.closed??!1,this._attributeName=t,this._glslDatatype=i}Object.defineProperties(Zv.prototype,{vertexShaderSource:{get:function(){return this._vertexShaderSource}},fragmentShaderSource:{get:function(){return this._fragmentShaderSource}},renderState:{get:function(){return this._renderState}},closed:{get:function(){return this._closed}},attributeName:{get:function(){return this._attributeName}},glslDatatype:{get:function(){return this._glslDatatype}}});Zv.prototype.getFragmentShaderSource=To.prototype.getFragmentShaderSource;Zv.prototype.isTranslucent=To.prototype.isTranslucent;Zv.prototype.getRenderState=To.prototype.getRenderState;var tne=Zv;var Xxo=y(x(),1);function dz(e){e=e??Q.EMPTY_OBJECT,this.length=e.length??1e7,this._length=void 0,this.width=e.width??2,this._width=void 0,this.show=e.show??!0,this.modelMatrix=F.clone(e.modelMatrix??F.IDENTITY),this._modelMatrix=new F,this.id=e.id,this._id=void 0,this._primitive=void 0}dz.prototype.update=function(e){if(this.show){if(!l(this._primitive)||!F.equals(this._modelMatrix,this.modelMatrix)||this._length!==this.length||this._width!==this.width||this._id!==this.id){this._modelMatrix=F.clone(this.modelMatrix,this._modelMatrix),this._length=this.length,this._width=this.width,this._id=this.id,l(this._primitive)&&this._primitive.destroy(),this.modelMatrix[12]===0&&this.modelMatrix[13]===0&&this.modelMatrix[14]===0&&(this.modelMatrix[14]=.01);let t=new wt({geometry:new ab({positions:[m.ZERO,m.UNIT_X],width:this.width,vertexFormat:Vs.VERTEX_FORMAT,colors:[U.RED,U.RED],arcType:un.NONE}),modelMatrix:F.multiplyByUniformScale(this.modelMatrix,this.length,new F),id:this.id,pickPrimitive:this}),n=new wt({geometry:new ab({positions:[m.ZERO,m.UNIT_Y],width:this.width,vertexFormat:Vs.VERTEX_FORMAT,colors:[U.GREEN,U.GREEN],arcType:un.NONE}),modelMatrix:F.multiplyByUniformScale(this.modelMatrix,this.length,new F),id:this.id,pickPrimitive:this}),i=new wt({geometry:new ab({positions:[m.ZERO,m.UNIT_Z],width:this.width,vertexFormat:Vs.VERTEX_FORMAT,colors:[U.BLUE,U.BLUE],arcType:un.NONE}),modelMatrix:F.multiplyByUniformScale(this.modelMatrix,this.length,new F),id:this.id,pickPrimitive:this});this._primitive=new Nn({geometryInstances:[t,n,i],appearance:new Vs,asynchronous:!1})}this._primitive.update(e)}};dz.prototype.isDestroyed=function(){return!1};dz.prototype.destroy=function(){return this._primitive=this._primitive&&this._primitive.destroy(),he(this)};var Rv=dz;var Uxo=y(x(),1);function q1t(e){this.direction=m.clone(e.direction),this.color=U.clone(e.color??U.WHITE),this.intensity=e.intensity??1}var nne=q1t;var tCo=y(x(),1);var kxo=y(x(),1),Vv=`in vec3 v_positionMC;
in vec3 v_positionEC;
in vec2 v_st;
void main()
{
czm_materialInput materialInput;
vec3 normalEC = normalize(czm_normal3D * czm_geodeticSurfaceNormal(v_positionMC, vec3(0.0), vec3(1.0)));
#ifdef FACE_FORWARD
normalEC = faceforward(normalEC, vec3(0.0, 0.0, 1.0), -normalEC);
#endif
materialInput.s = v_st.s;
materialInput.st = v_st;
materialInput.str = vec3(v_st, 0.0);
// Convert tangent space material normal to eye space
materialInput.normalEC = normalEC;
materialInput.tangentToEyeMatrix = czm_eastNorthUpToEyeCoordinates(v_positionMC, materialInput.normalEC);
// Convert view vector to world space
vec3 positionToEyeEC = -v_positionEC;
materialInput.positionToEyeEC = positionToEyeEC;
czm_material material = czm_getMaterial(materialInput);
#ifdef FLAT
out_FragColor = vec4(material.diffuse + material.emission, material.alpha);
#else
out_FragColor = czm_phong(normalize(positionToEyeEC), material, czm_lightDirectionEC);
#endif
}
`;var Oxo=y(x(),1),Gv=`in vec3 position3DHigh;
in vec3 position3DLow;
in vec2 st;
in float batchId;
out vec3 v_positionMC;
out vec3 v_positionEC;
out vec2 v_st;
void main()
{
vec4 p = czm_computePosition();
v_positionMC = position3DHigh + position3DLow; // position in model coordinates
v_positionEC = (czm_modelViewRelativeToEye * p).xyz; // position in eye coordinates
v_st = st;
gl_Position = czm_modelViewProjectionRelativeToEye * p;
}
`;function UE(e){e=e??Q.EMPTY_OBJECT;let t=e.translucent??!0,n=e.aboveGround??!1;this.material=l(e.material)?e.material:Oi.fromType(Oi.ColorType),this.translucent=e.translucent??!0,this._vertexShaderSource=e.vertexShaderSource??Gv,this._fragmentShaderSource=e.fragmentShaderSource??Vv,this._renderState=To.getDefaultRenderState(t,!n,e.renderState),this._closed=!1,this._flat=e.flat??!1,this._faceForward=e.faceForward??n,this._aboveGround=n}Object.defineProperties(UE.prototype,{vertexShaderSource:{get:function(){return this._vertexShaderSource}},fragmentShaderSource:{get:function(){return this._fragmentShaderSource}},renderState:{get:function(){return this._renderState}},closed:{get:function(){return this._closed}},vertexFormat:{get:function(){return UE.VERTEX_FORMAT}},flat:{get:function(){return this._flat}},faceForward:{get:function(){return this._faceForward}},aboveGround:{get:function(){return this._aboveGround}}});UE.VERTEX_FORMAT=ve.POSITION_AND_ST;UE.prototype.getFragmentShaderSource=To.prototype.getFragmentShaderSource;UE.prototype.isTranslucent=To.prototype.isTranslucent;UE.prototype.getRenderState=To.prototype.getRenderState;var ine=UE;var pCo=y(x(),1);var $1t=1e5;function Lv(e){e=e??Q.EMPTY_OBJECT;let t=e.credit;typeof t=="string"&&(t=new Et(t)),this._credit=t,this._radius=l(e.radius)?e.radius:$1t,this._image=e.image,this._transform=l(e.transform)?e.transform:F.IDENTITY,this._repeatHorizontal=l(e.repeatHorizontal)?e.repeatHorizontal:1,this._repeatVertical=l(e.repeatVertical)?e.repeatVertical:1;let n=new MX({radius:this._radius,vertexFormat:ve.ALL}),i=new wt({geometry:n,modelMatrix:this._transform}),o=new Oi({fabric:{type:"Image",uniforms:{image:this._image,repeat:new M(-this._repeatHorizontal,this._repeatVertical)}}});return this._primitive=new Nn({geometryInstances:i,appearance:new go({material:o,closed:!0,faceForward:!1,translucent:!1,renderState:{cull:{enabled:!1}}}),credit:this._credit}),this}Object.defineProperties(Lv.prototype,{radius:{get:function(){return this._radius}},image:{get:function(){return this._image}},transform:{get:function(){return this._transform}},credit:{get:function(){return l(this._credit)?this._credit:void 0}},show:{get:function(){return l(this._primitive)?this._primitive.show:void 0},set:function(e){l(this._primitive)&&(this._primitive.show=e)}}});Lv.prototype.update=function(e){return l(this._credit)&&e.creditDisplay.addCreditToNextFrame(this._credit),this._primitive.update(e)};Lv.prototype.destroy=function(){return this._primitive=this._primitive&&this._primitive.destroy(),he(this)};Lv.prototype.isDestroyed=function(){return this._primitive.isDestroyed()};var one=Lv;var TCo=y(x(),1);function kd(e){this._scene=e.scene,this.samplingWindow=e.samplingWindow??kd.defaultSettings.samplingWindow,this.quietPeriod=e.quietPeriod??kd.defaultSettings.quietPeriod,this.warmupPeriod=e.warmupPeriod??kd.defaultSettings.warmupPeriod,this.minimumFrameRateDuringWarmup=e.minimumFrameRateDuringWarmup??kd.defaultSettings.minimumFrameRateDuringWarmup,this.minimumFrameRateAfterWarmup=e.minimumFrameRateAfterWarmup??kd.defaultSettings.minimumFrameRateAfterWarmup,this._lowFrameRate=new xe,this._nominalFrameRate=new xe,this._frameTimes=[],this._needsQuietPeriod=!0,this._quietPeriodEndTime=0,this._warmupPeriodEndTime=0,this._frameRateIsLow=!1,this._lastFramesPerSecond=void 0,this._pauseCount=0;let t=this;this._preUpdateRemoveListener=this._scene.preUpdate.addEventListener(function(o,r){eWt(t,r)}),this._hiddenPropertyName=document.hidden!==void 0?"hidden":document.mozHidden!==void 0?"mozHidden":document.msHidden!==void 0?"msHidden":document.webkitHidden!==void 0?"webkitHidden":void 0;let n=document.hidden!==void 0?"visibilitychange":document.mozHidden!==void 0?"mozvisibilitychange":document.msHidden!==void 0?"msvisibilitychange":document.webkitHidden!==void 0?"webkitvisibilitychange":void 0;function i(){tWt(t)}this._visibilityChangeRemoveListener=void 0,l(n)&&(document.addEventListener(n,i,!1),this._visibilityChangeRemoveListener=function(){document.removeEventListener(n,i,!1)})}kd.defaultSettings={samplingWindow:5,quietPeriod:2,warmupPeriod:5,minimumFrameRateDuringWarmup:4,minimumFrameRateAfterWarmup:8};kd.fromScene=function(e){return(!l(e._frameRateMonitor)||e._frameRateMonitor.isDestroyed())&&(e._frameRateMonitor=new kd({scene:e})),e._frameRateMonitor};Object.defineProperties(kd.prototype,{scene:{get:function(){return this._scene}},lowFrameRate:{get:function(){return this._lowFrameRate}},nominalFrameRate:{get:function(){return this._nominalFrameRate}},lastFramesPerSecond:{get:function(){return this._lastFramesPerSecond}}});kd.prototype.pause=function(){++this._pauseCount,this._pauseCount===1&&(this._frameTimes.length=0,this._lastFramesPerSecond=void 0)};kd.prototype.unpause=function(){--this._pauseCount,this._pauseCount<=0&&(this._pauseCount=0,this._needsQuietPeriod=!0)};kd.prototype.isDestroyed=function(){return!1};kd.prototype.destroy=function(){return this._preUpdateRemoveListener(),l(this._visibilityChangeRemoveListener)&&this._visibilityChangeRemoveListener(),he(this)};function eWt(e,t){if(e._pauseCount>0)return;let n=Xi();if(e._needsQuietPeriod)e._needsQuietPeriod=!1,e._frameTimes.length=0,e._quietPeriodEndTime=n+e.quietPeriod/di.SECONDS_PER_MILLISECOND,e._warmupPeriodEndTime=e._quietPeriodEndTime+(e.warmupPeriod+e.samplingWindow)/di.SECONDS_PER_MILLISECOND;else if(n>=e._quietPeriodEndTime){e._frameTimes.push(n);let i=n-e.samplingWindow/di.SECONDS_PER_MILLISECOND;if(e._frameTimes.length>=2&&e._frameTimes[0]<=i){for(;e._frameTimes.length>=2&&e._frameTimes[1]<i;)e._frameTimes.shift();let o=(n-e._frameTimes[0])/(e._frameTimes.length-1);e._lastFramesPerSecond=1e3/o;let r=1e3/(n>e._warmupPeriodEndTime?e.minimumFrameRateAfterWarmup:e.minimumFrameRateDuringWarmup);o>r?e._frameRateIsLow||(e._frameRateIsLow=!0,e._needsQuietPeriod=!0,e.lowFrameRate.raiseEvent(e.scene,e._lastFramesPerSecond)):e._frameRateIsLow&&(e._frameRateIsLow=!1,e._needsQuietPeriod=!0,e.nominalFrameRate.raiseEvent(e.scene,e._lastFramesPerSecond))}}}function tWt(e){document[e._hiddenPropertyName]?e.pause():e.unpause()}var Wv=kd;var NCo=y(x(),1);var hVe=y(p$(),1);function rne(){this._image=new Image}rne.prototype.isReady=function(){return!0};rne.prototype.shouldDiscardImage=function(e){return e===this._image};function DE(e){e=e??Q.EMPTY_OBJECT,this._defaultAlpha=void 0,this._defaultNightAlpha=void 0,this._defaultDayAlpha=void 0,this._defaultBrightness=void 0,this._defaultContrast=void 0,this._defaultHue=void 0,this._defaultSaturation=void 0,this._defaultGamma=void 0,this._defaultMinificationFilter=void 0,this._defaultMagnificationFilter=void 0,this._tileDiscardPolicy=e.tileDiscardPolicy,this._tilingScheme=new zi({numberOfLevelZeroTilesX:2,numberOfLevelZeroTilesY:2,rectangle:new de(-L.PI,-L.PI,L.PI,L.PI),ellipsoid:e.ellipsoid});let t=e.credit;typeof t=="string"&&(t=new Et(t)),this._credit=t,this._tileWidth=256,this._tileHeight=256,this._maximumLevel=23,l(this._tileDiscardPolicy)||(this._tileDiscardPolicy=new rne),this._errorEvent=new xe}Object.defineProperties(DE.prototype,{url:{get:function(){return this._metadata.url}},proxy:{get:function(){return this._metadata.proxy}},tileWidth:{get:function(){return this._tileWidth}},tileHeight:{get:function(){return this._tileHeight}},maximumLevel:{get:function(){return this._maximumLevel}},minimumLevel:{get:function(){return 0}},tilingScheme:{get:function(){return this._tilingScheme}},rectangle:{get:function(){return this._tilingScheme.rectangle}},tileDiscardPolicy:{get:function(){return this._tileDiscardPolicy}},errorEvent:{get:function(){return this._errorEvent}},credit:{get:function(){return this._credit}},hasAlphaChannel:{get:function(){return!1}}});DE.fromMetadata=function(e,t){if(!e.imageryPresent)throw new me(`The server ${e.url} doesn't have imagery`);let n=new DE(t);return n._metadata=e,n};DE.prototype.getTileCredits=function(e,t,n){let i=this._metadata,o=i.getTileInformation(e,t,n);if(l(o)){let r=i.providers[o.imageryProvider];if(l(r))return[r]}};DE.prototype.requestImage=function(e,t,n,i){let o=this._tileDiscardPolicy._image,r=this._metadata,s=yb.tileXYToQuadKey(e,t,n),a=r.getTileInformation(e,t,n);if(!l(a)){if(r.isValid(s)){let d=new Tr({throttle:i.throttle,throttleByServer:i.throttleByServer,type:i.type,priorityFunction:i.priorityFunction});r.populateSubtree(e,t,n,d);return}return Promise.resolve(o)}if(!a.hasImagery())return Promise.resolve(o);let c=nWt(this,a,e,t,n,i).fetchArrayBuffer();if(l(c))return c.then(function(d){_X(r.key,d);let u=new Uint8Array(d),h,p=r.protoImagery;if((!l(p)||!p)&&(h=iWt(u)),!l(h)&&(!l(p)||p)){let A=oWt(u);h=A.imageType,u=A.imageData}return!l(h)||!l(u)?o:$A({uint8Array:u,format:h,flipY:!0})})};DE.prototype.pickFeatures=function(e,t,n,i,o){};function nWt(e,t,n,i,o,r){let s=yb.tileXYToQuadKey(n,i,o),a=t.imageryVersion;return a=l(a)&&a>0?a:1,e._metadata.resource.getDerivedResource({url:`flatfile?f1-0${s}-i.${a.toString()}`,request:r})}function iWt(e){let t="JFIF";if(e[6]===t.charCodeAt(0)&&e[7]===t.charCodeAt(1)&&e[8]===t.charCodeAt(2)&&e[9]===t.charCodeAt(3))return"image/jpeg";let n="PNG";if(e[1]===n.charCodeAt(0)&&e[2]===n.charCodeAt(1)&&e[3]===n.charCodeAt(2))return"image/png"}function oWt(e){let t=hVe.Reader.create(e),n=t.len,i={};for(;t.pos<n;){let s=t.uint32(),a;switch(s>>>3){case 1:i.imageType=t.uint32();break;case 2:i.imageData=t.bytes();break;case 3:i.alphaType=t.uint32();break;case 4:i.imageAlpha=t.bytes();break;case 5:if(a=i.copyrightIds,l(a)||(a=i.copyrightIds=[]),(s&7)===2){let c=t.uint32()+t.pos;for(;t.pos<c;)a.push(t.uint32())}else a.push(t.uint32());break;default:t.skipType(s&7);break}}let o=i.imageType;if(l(o))switch(o){case 0:i.imageType="image/jpeg";break;case 4:i.imageType="image/png";break;default:throw new me("GoogleEarthEnterpriseImageryProvider: Unsupported image type.")}let r=i.alphaType;return l(r)&&r!==0&&(console.log("GoogleEarthEnterpriseImageryProvider: External alpha not supported."),delete i.alphaType,delete i.imageAlpha),i}var sne=DE;var jCo=y(x(),1);var rWt=600;function hA(e){e=e??Q.EMPTY_OBJECT,this._key=l(e.key)?e.key:ua.defaultApiKey,this._baseResource=Le.createIfNeeded(e.url??ua.streetViewStaticApiEndpoint),this._metadataResource=this._baseResource.getDerivedResource({url:"streetview/metadata"}),this._tileSize=e.tileSize??rWt}Object.defineProperties(hA.prototype,{});hA.prototype.loadPanorama=async function(e){let t=e.cartographic,n=e.tileSize??this._tileSize,i=`${n}x${n}`,o=e.signature,{panoId:r}=e;l(r)||(r=(await this.getNearestPanoId(t)).panoId);let s=ua.getDefaultCredit(),a=m.fromDegrees(L.toDegrees(t.longitude),L.toDegrees(t.latitude),0),c=[this._loadFaceImage({heading:0,pitch:0,tileSizeString:i,panoId:r,signature:o}),this._loadFaceImage({heading:180,pitch:0,tileSizeString:i,panoId:r,signature:o}),this._loadFaceImage({heading:-90,pitch:-90,tileSizeString:i,panoId:r,signature:o}),this._loadFaceImage({heading:-90,pitch:90,tileSizeString:i,panoId:r,signature:o}),this._loadFaceImage({heading:270,pitch:0,tileSizeString:i,panoId:r,signature:o}),this._loadFaceImage({heading:90,pitch:0,tileSizeString:i,panoId:r,signature:o})],[d,u,h,p,A,f]=await Promise.all(c),b=bt.localFrameToFixedFrameGenerator("north","down"),C=F.getMatrix3(b(a,ie.default),new $);return new NE({sources:{positiveX:d,negativeX:u,positiveY:h,negativeY:p,positiveZ:A,negativeZ:f},transform:C,credit:s})};hA.prototype.getNearestPanoId=async function(e,t){let i=[L.toDegrees(e.latitude),L.toDegrees(e.longitude)].join(","),r=await this._metadataResource.getDerivedResource({queryParameters:{key:this._key,location:i,radius:t??50}}).fetchJson();if(r.status!=="OK")throw new fe(`GoogleStreetViewCubeMapPanoramaProvider metadata error: ${r.status}`);return{panoId:r.pano_id,latitude:r.location.lat,longitude:r.location.lng}};hA.prototype.getPanoIdMetadata=async function(e){let n=await this._metadataResource.getDerivedResource({queryParameters:{key:this._key,pano:e}}).fetchJson();if(n.status!=="OK")throw new fe(`GoogleStreetViewCubeMapPanoramaProvider metadata error: ${n.status}`);return n};hA.prototype._loadFaceImage=async function(e){let t=this._buildFaceUrl(e);try{return await Le.fetchImage({url:t,preferImageBitmap:!0,flipY:!0})}catch{throw new fe(`Failed to load Street View face image: ${t}`)}};hA.prototype._buildFaceUrl=function(e){let{heading:t,pitch:n,tileSizeString:i,panoId:o,signature:r}=e;return this._baseResource.getDerivedResource({queryParameters:{size:i,pano:o,heading:t,pitch:n,key:this._key,...l(r)&&{signature:r}}}).url};hA.fromUrl=async function(e){if(e=e??{},e.key=e.key??ua.defaultStreetViewStaticApiKey??ua.defaultApiKey,!l(e.key)&&!l(ua.defaultStreetViewStaticApiKey)&&!l(ua.defaultApiKey))throw new fe("options.key, GoogleMaps.defaultStreetViewStaticApiKey or GoogleMaps.defaultApiKey is required.");return new hA({...e})};hA._parseMetadata=function(e){return{cartographic:Ae.fromDegrees(e.location.lng,e.location.lat,0)}};var ane=hA;var oTo=y(x(),1);var sWt=new U(1,1,1,.4),aWt=new U(0,1,0,.05),cWt=new U(0,.5,0,.2);function kE(e){e=e??Q.EMPTY_OBJECT,this._defaultAlpha=void 0,this._defaultNightAlpha=void 0,this._defaultDayAlpha=void 0,this._defaultBrightness=void 0,this._defaultContrast=void 0,this._defaultHue=void 0,this._defaultSaturation=void 0,this._defaultGamma=void 0,this._defaultMinificationFilter=void 0,this._defaultMagnificationFilter=void 0,this._tilingScheme=l(e.tilingScheme)?e.tilingScheme:new zi({ellipsoid:e.ellipsoid}),this._cells=e.cells??8,this._color=e.color??sWt,this._glowColor=e.glowColor??aWt,this._glowWidth=e.glowWidth??6,this._backgroundColor=e.backgroundColor??cWt,this._errorEvent=new xe,this._tileWidth=e.tileWidth??256,this._tileHeight=e.tileHeight??256,this._canvasSize=e.canvasSize??256,this._canvas=this._createGridCanvas()}Object.defineProperties(kE.prototype,{proxy:{get:function(){}},tileWidth:{get:function(){return this._tileWidth}},tileHeight:{get:function(){return this._tileHeight}},maximumLevel:{get:function(){}},minimumLevel:{get:function(){}},tilingScheme:{get:function(){return this._tilingScheme}},rectangle:{get:function(){return this._tilingScheme.rectangle}},tileDiscardPolicy:{get:function(){}},errorEvent:{get:function(){return this._errorEvent}},credit:{get:function(){}},hasAlphaChannel:{get:function(){return!0}}});kE.prototype._drawGrid=function(e){let n=this._canvasSize;for(let i=0;i<=this._cells;++i){let r=1+i/this._cells*(n-1);e.moveTo(r,0),e.lineTo(r,n),e.moveTo(0,r),e.lineTo(n,r)}e.stroke()};kE.prototype._createGridCanvas=function(){let e=document.createElement("canvas");e.width=this._canvasSize,e.height=this._canvasSize;let t=0,n=this._canvasSize,i=e.getContext("2d"),o=this._backgroundColor.toCssColorString();i.fillStyle=o,i.fillRect(t,t,n,n);let r=this._glowColor.toCssColorString();i.strokeStyle=r,i.lineWidth=this._glowWidth,i.strokeRect(t,t,n,n),this._drawGrid(i),i.lineWidth=this._glowWidth*.5,i.strokeRect(t,t,n,n),this._drawGrid(i);let s=this._color.toCssColorString();return i.strokeStyle=s,i.lineWidth=2,i.strokeRect(t,t,n,n),i.lineWidth=1,this._drawGrid(i),e};kE.prototype.getTileCredits=function(e,t,n){};kE.prototype.requestImage=function(e,t,n,i){return Promise.resolve(this._canvas)};kE.prototype.pickFeatures=function(e,t,n,i,o){};var cne=kE;var PEo=y(x(),1);var lEo=y(x(),1);var OTo=y(x(),1);var fTo=y(x(),1);function kf(){}kf._maxDecodingConcurrency=Math.max(hn.hardwareConcurrency-1,1);kf._decodeTaskProcessor=new $n("decodeI3S",kf._maxDecodingConcurrency);kf._promise=void 0;async function lWt(){if(await kf._decodeTaskProcessor.initWebAssemblyModule({wasmBinaryFile:"ThirdParty/draco_decoder.wasm"}))return kf._decodeTaskProcessor;throw new me("I3S decoder could not be initialized.")}kf.decode=async function(e,t,n,i,o){return l(kf._promise)||(kf._promise=lWt()),kf._promise.then(function(r){let s=n._parent._data,a=n._parent._inverseRotationMatrix,c=0,d=0,u=0;l(s.obb)?(c=s.obb.center[0],d=s.obb.center[1],u=s.obb.center[2]):l(s.mbs)&&(c=s.mbs[0],d=s.mbs[1],u=s.mbs[2]);let h=$.fromRotationX(-L.PI_OVER_TWO),p=new $;$.multiply(h,a,p);let A=Ae.fromDegrees(c,d,u),f=ie.WGS84.cartographicToCartesian(A),b={binaryData:n._data,featureData:l(i)&&l(i[0])?i[0].data:void 0,schema:t,bufferInfo:n._geometryBufferInfo,ellipsoidRadiiSquare:ie.WGS84.radiiSquared,url:e,geoidDataList:n._dataProvider._geoidDataList,cartographicCenter:A,cartesianCenter:f,parentRotation:p,enableFeatures:n._dataProvider.showFeatures,splitGeometryByColorTransparency:n._dataProvider.adjustMaterialAlphaMode,symbologyData:o,calculateNormals:n._dataProvider.calculateNormals};return r.scheduleTask(b)})};var Fv=kf;var bTo=y(x(),1);function lne(e,t){this._parent=e,this._dataProvider=e._dataProvider,this._layer=e._layer,l(this._parent._nodeIndex)?this._resource=this._parent._layer.resource.getDerivedResource({url:`nodes/${this._parent._data.mesh.attribute.resource}/${t}`}):this._resource=this._parent.resource.getDerivedResource({url:t})}Object.defineProperties(lne.prototype,{resource:{get:function(){return this._resource}},data:{get:function(){return this._data}}});lne.prototype.load=async function(){return this._data=await Qf.loadJson(this._resource),this._data};var Bv=lne;var TTo=y(x(),1);function Wb(e,t){this._storageInfo=t,this._parent=e,this._dataProvider=e._dataProvider,this._loadPromise=void 0;let n=`attributes/${t.key}/0`;l(this._parent._nodeIndex)?this._resource=this._parent._layer.resource.getDerivedResource({url:`nodes/${this._parent._data.mesh.attribute.resource}/${n}`}):this._resource=this._parent.resource.getDerivedResource({url:n})}Object.defineProperties(Wb.prototype,{resource:{get:function(){return this._resource}},header:{get:function(){return this._header}},values:{get:function(){if(l(this._values)){if(l(this._values.attributeValues))return this._values.attributeValues;if(l(this._values.objectIds))return this._values.objectIds}return[]}},name:{get:function(){return this._storageInfo.name}}});function uz(e){return e==="UInt8"||e==="Int8"?1:e==="UInt16"||e==="Int16"?2:e==="UInt32"||e==="Int32"||e==="Oid32"||e==="Float32"?4:e==="UInt64"||e==="Int64"||e==="Float64"?8:0}function dWt(e){return e==="String"?1:uz(e)}async function uWt(e){let t=await e._dataProvider._loadBinary(e._resource),n=new DataView(t);e._data=t,e._validateHeader(n);let i=e._parseHeader(n),o=e._getBodyOffset(i);e._validateBody(n,o),e._parseBody(n,o)}Wb.prototype.load=function(){return l(this._loadPromise)?this._loadPromise:(this._loadPromise=uWt(this).catch(function(e){console.error(e)}),this._loadPromise)};Wb.prototype._parseValue=function(e,t,n){let i;if(t==="UInt8")i=e.getUint8(n),n+=1;else if(t==="Int8")i=e.getInt8(n),n+=1;else if(t==="UInt16")i=e.getUint16(n,!0),n+=2;else if(t==="Int16")i=e.getInt16(n,!0),n+=2;else if(t==="UInt32")i=e.getUint32(n,!0),n+=4;else if(t==="Oid32")i=e.getUint32(n,!0),n+=4;else if(t==="Int32")i=e.getInt32(n,!0),n+=4;else if(t==="UInt64"){let o=e.getUint32(n,!0),r=e.getUint32(n+4,!0);i=o+Math.pow(2,32)*r,n+=8}else if(t==="Int64"){let o=e.getUint32(n,!0),r=e.getUint32(n+4,!0);r<Math.pow(2,31)?i=o+Math.pow(2,32)*r:i=o+Math.pow(2,32)*(r-Math.pow(2,32)),n+=8}else t==="Float32"?(i=e.getFloat32(n,!0),n+=4):t==="Float64"?(i=e.getFloat64(n,!0),n+=8):t==="String"&&(i=String.fromCharCode(e.getUint8(n)),n+=1);return{value:i,offset:n}};Wb.prototype._parseHeader=function(e){let t=0;this._header={};for(let n=0;n<this._storageInfo.header.length;n++){let i=this._storageInfo.header[n],o=this._parseValue(e,i.valueType,t);this._header[i.property]=o.value,t=o.offset}return t};Wb.prototype._parseBody=function(e,t){this._values={};for(let n=0;n<this._storageInfo.ordering.length;n++){let i=this._storageInfo.ordering[n],o=i==="ObjectIds"?"objectIds":i,r=this._storageInfo[o];if(l(r)){this._values[o]=[];for(let s=0;s<this._header.count;++s)if(r.valueType!=="String"){let a=this._parseValue(e,r.valueType,t);this._values[o].push(a.value),t=a.offset}else{let a=this._values.attributeByteCounts[s],c="";for(let d=0;d<a;++d){let u=this._parseValue(e,r.valueType,t);u.value.charCodeAt(0)!==0&&(c+=u.value),t=u.offset}this._values[o].push(c)}}}};Wb.prototype._getBodyOffset=function(e){let t=0;return l(this._storageInfo.attributeValues)?t=uz(this._storageInfo.attributeValues.valueType):l(this._storageInfo.objectIds)&&(t=uz(this._storageInfo.objectIds.valueType)),t>0?Math.ceil(e/t)*t:e};Wb.prototype._validateHeader=function(e){let t=0;for(let n=0;n<this._storageInfo.header.length;n++){let i=this._storageInfo.header[n];t+=dWt(i.valueType)}if(e.byteLength<t)throw new me(`Invalid attribute buffer size (field: ${this.name}, header: ${t}, actual: ${e.byteLength})`)};Wb.prototype._validateBody=function(e,t){if(!l(this._header.count))throw new me(`Invalid attribute buffer (field: ${this.name}, count is missing)`);let n;for(let i=0;i<this._storageInfo.ordering.length&&t<e.byteLength;i++){let o=this._storageInfo.ordering[i],r=o==="ObjectIds"?"objectIds":o,s=this._storageInfo[r];if(l(s))if(s.valueType!=="String"){r==="attributeByteCounts"&&(n=t);let a=uz(s.valueType);t+=a*this._header.count}else{if(!l(n))throw new me(`Invalid attribute buffer (field: ${this.name}, attributeByteCounts is missing)`);for(let a=0;a<this._header.count&&t<e.byteLength;++a){let c=this._parseValue(e,this._storageInfo.attributeByteCounts.valueType,n);t+=c.value,n=c.offset}}else throw new me(`Invalid attribute buffer (field: ${this.name}, ${r} is missing)`)}if(e.byteLength<t)throw new me(`Invalid attribute buffer size (field: ${this.name}, expected: ${t}, actual: ${e.byteLength})`)};var wv=Wb;var VTo=y(x(),1);function Nv(e,t){let n=e._dataProvider,i=e._layer,o;l(e._nodeIndex)?o=i.resource.getDerivedResource({url:`nodes/${e._data.mesh.geometry.resource}/${t}`}):o=e.resource.getDerivedResource({url:t}),this._parent=e,this._dataProvider=n,this._layer=i,this._resource=o,this._customAttributes=void 0}Object.defineProperties(Nv.prototype,{resource:{get:function(){return this._resource}},data:{get:function(){return this._data}},customAttributes:{get:function(){return this._customAttributes}}});Nv.prototype.load=function(){let e=this;return this._dataProvider._loadBinary(this._resource).then(function(t){return e._data=t,t})};var mWt=new m,hWt=new m,fWt=new m,pWt=new m,AWt=new m;function dne(e,t,n,i){let o=m.subtract(i,n,mWt),r=m.cross(o,m.subtract(e,n,hWt),pWt),s=m.cross(o,m.subtract(t,n,fWt),AWt);return m.dot(r,s)>=0}var gWt=new m,bWt=new m,yWt=new m,xWt=new m,CWt=new m,TWt=new m,EWt=new m,SWt=new m,_Wt=new m,IWt=new m;Nv.prototype.getClosestPointIndexOnTriangle=function(e,t,n){if(l(this._customAttributes)&&l(this._customAttributes.positions)){let i=new m(e,t,n);i.x-=this._customAttributes.cartesianCenter.x,i.y-=this._customAttributes.cartesianCenter.y,i.z-=this._customAttributes.cartesianCenter.z,$.multiplyByVector(this._customAttributes.parentRotation,i,i);let o=Number.MAX_VALUE,r,s,a,c,d=this._customAttributes.positions,u=this._customAttributes.indices,h;l(u)?h=u.length:h=d.length/3;for(let p=0;p<h;p++){let A,f,b;l(u)?(A=u[p],f=u[p+1],b=u[p+2]):(A=p*3,f=p*3+1,b=p*3+2);let C=m.fromElements(d[A*3],d[A*3+1],d[A*3+2],gWt),T=m.fromElements(d[f*3],d[f*3+1],d[f*3+2],bWt),E=new m(d[b*3],d[b*3+1],d[b*3+2],yWt);if(!dne(i,C,T,E)||!dne(i,T,C,E)||!dne(i,E,C,T))continue;let S=m.subtract(T,C,xWt),I=m.subtract(E,C,CWt),R=m.cross(S,I,TWt);if(m.magnitude(R)===0)continue;let V=m.normalize(R,EWt),W=m.subtract(i,C,SWt),B=Math.abs(m.dot(W,V));if(B<o){o=B,r=p;let N=m.magnitudeSquared(m.subtract(i,C,W)),P=m.magnitudeSquared(m.subtract(i,T,_Wt)),g=m.magnitudeSquared(m.subtract(i,E,IWt));N<P&&N<g?(a=A,c=C,s=N):P<g?(a=f,c=T,s=P):(a=b,c=E,s=g)}}if(l(r))return{index:a,distanceSquared:s,distance:Math.sqrt(s),queriedPosition:i,closestPosition:m.clone(c)}}return{index:-1,distanceSquared:Number.Infinity,distance:Number.Infinity}};function fVe(e){let t=[],n=e.length;for(let i=0;i<n;i++)i<3?t.push(rE(e[i])):t.push(e[i]);return t}Nv.prototype._generateGltf=function(e,t,n,i,o,r,s,a){let c={pbrMetallicRoughness:{metallicFactor:0},doubleSided:!0,name:"Material"},d=!1,u,h="";if(l(this._parent._data.mesh)&&l(this._layer._data.materialDefinitions)){let S=this._parent._data.mesh.material.definition;if(S>=0&&S<this._layer._data.materialDefinitions.length){if(u=this._layer._data.materialDefinitions[S],c=u,l(c.pbrMetallicRoughness)&&l(c.pbrMetallicRoughness.baseColorTexture)){d=!0,c.pbrMetallicRoughness.baseColorTexture.index=0;let I="0";if(l(this._layer._data.textureSetDefinitions))for(let R=0;R<this._layer._data.textureSetDefinitions.length;R++){let V=this._layer._data.textureSetDefinitions[R];for(let W=0;W<V.formats.length;W++){let B=V.formats[W];if(B.format==="jpg"){I=B.name;break}}}l(this._parent._data.mesh)&&this._parent._data.mesh.material.resource>=0&&(h=this._layer.resource.getDerivedResource({url:`nodes/${this._parent._data.mesh.material.resource}/textures/${I}`}).url)}l(c.pbrMetallicRoughness)&&l(c.pbrMetallicRoughness.baseColorFactor)&&(c.pbrMetallicRoughness.baseColorFactor=fVe(c.pbrMetallicRoughness.baseColorFactor)),l(c.emissiveFactor)&&(c.emissiveFactor=fVe(c.emissiveFactor))}}else l(this._parent._data.textureData)&&(d=!0,h=this._parent.resource.getDerivedResource({url:`${this._parent._data.textureData[0].href}`}).url,c.pbrMetallicRoughness.baseColorTexture={index:0});l(c.alphaMode)&&(c.alphaMode=c.alphaMode.toUpperCase());let p=[],A=[],f=[];d&&(p=[{sampler:0,source:0}],A=[{uri:h}],f=[{magFilter:9729,minFilter:9986,wrapS:10497,wrapT:10497}]);let b=[],C=n.length;for(let E=0;E<C;E++){let S=n[E].primitives,I=S.length;for(let R=0;R<I;R++){let V=S[R];if(l(V.material)){for(;V.material>=b.length;){let B=He(c,!0);b.push(B)}let W=b[V.material];l(V.extra)&&V.extra.isTransparent?l(W.alphaMode)||(W.alphaMode="BLEND"):W.alphaMode==="BLEND"&&(W.alphaMode="OPAQUE")}}}return{scene:0,scenes:[{nodes:e}],nodes:t,meshes:n,buffers:i,bufferViews:o,accessors:r,materials:b,textures:p,images:A,samplers:f,asset:{version:"2.0"},extensions:s,extensionsUsed:a}};var lR=Nv;function fl(e,t,n){let i,o,r,s;n?(i=0,o=e):(i=e._level+1,o=e._layer),typeof t=="number"?r=t:s=e.resource.getDerivedResource({url:`${t}/`}),this._parent=e,this._dataProvider=e._dataProvider,this._isRoot=n,this._level=i,this._layer=o,this._nodeIndex=r,this._resource=s,this._isLoading=!1,this._tile=void 0,this._data=void 0,this._geometryData=[],this._featureData=[],this._fields={},this._children=[],this._childrenReadyPromise=void 0,this._globalTransform=void 0,this._inverseGlobalTransform=void 0,this._inverseRotationMatrix=void 0,this._symbologyData=void 0}Object.defineProperties(fl.prototype,{resource:{get:function(){return this._resource}},layer:{get:function(){return this._layer}},parent:{get:function(){return this._parent}},children:{get:function(){return this._children}},geometryData:{get:function(){return this._geometryData}},featureData:{get:function(){return this._featureData}},fields:{get:function(){return this._fields}},tile:{get:function(){return this._tile}},data:{get:function(){return this._data}}});fl.prototype.load=async function(){let e=this;function t(){if(!e._isRoot){let o=e._create3DTileDefinition();e._tile=new vm(e._layer._tileset,e._dataProvider.resource,o,e._parent._tile),e._tile._i3sNode=e}}if(!l(this._nodeIndex)){let o=await Qf.loadJson(this._resource);e._data=o,t();return}let n=await this._layer._getNodeInNodePages(this._nodeIndex);e._data=n;let i;e._isRoot?i="nodes/root/":l(n.mesh)&&(i=`../${n.mesh.geometry.resource}/`),l(i)&&l(e._parent.resource)&&(e._resource=e._parent.resource.getDerivedResource({url:i})),t()};function pVe(e,t){let n=new wv(e,t);return e._fields[t.name]=n,n.load()}fl.prototype.loadFields=function(){let e=this._layer._data.attributeStorageInfo,t=[];if(l(e))for(let n=0;n<e.length;n++){let i=e[n],o=this._fields[i.name];l(o)?t.push(o.load()):t.push(pVe(this,i))}return Promise.all(t)};fl.prototype.loadField=function(e){let t=this._fields[e];if(l(t))return t.load();let n=this._layer._data.attributeStorageInfo;if(l(n))for(let i=0;i<n.length;i++){let o=n[i];if(o.name===e)return pVe(this,o)}return Promise.resolve()};fl.prototype.getFieldsForPickedPosition=function(e){let t=this.geometryData[0];if(!l(t.customAttributes.featureIndex))return{};let n=t.getClosestPointIndexOnTriangle(e.x,e.y,e.z);if(n.index===-1||n.index>t.customAttributes.featureIndex.length)return{};let i=t.customAttributes.featureIndex[n.index];return this.getFieldsForFeature(i)};fl.prototype.getFieldsForFeature=function(e){let t={};for(let n in this.fields)if(this.fields.hasOwnProperty(n)){let i=this.fields[n];e>=0&&e<i.values.length&&(t[i.name]=i.values[e])}return t};fl.prototype._loadChildren=function(){let e=this;if(l(this._childrenReadyPromise))return this._childrenReadyPromise;let t=[];if(l(e._data.children))for(let n=0;n<e._data.children.length;n++){let i=e._data.children[n],o=new fl(e,i.href??i,!1);e._children.push(o),t.push(o.load())}return this._childrenReadyPromise=Promise.all(t).then(function(){for(let n=0;n<e._children.length;n++)e._tile.children.push(e._children[n]._tile)}),this._childrenReadyPromise};fl.prototype._loadGeometryData=function(){let e=[];if(l(this._data.geometryData))for(let t=0;t<this._data.geometryData.length;t++){let n=new lR(this,this._data.geometryData[t].href);this._geometryData.push(n),e.push(n.load())}else if(l(this._data.mesh)){let t=this._layer._findBestGeometryBuffers(this._data.mesh.geometry.definition,["position","uv0"]),n=`./geometries/${t.bufferIndex}/`,i=new lR(this,n);i._geometryDefinitions=t.definition,i._geometryBufferInfo=t.geometryBufferInfo,this._geometryData.push(i),e.push(i.load())}return Promise.all(e)};fl.prototype._loadFeatureData=function(){let e=[];if(l(this._data.featureData))for(let t=0;t<this._data.featureData.length;t++){let n=new Bv(this,this._data.featureData[t].href);this._featureData.push(n),e.push(n.load())}return Promise.all(e)};fl.prototype._clearGeometryData=function(){this._geometryData=[]};fl.prototype._create3DTileDefinition=function(){let e=this._data.obb,t=this._data.mbs;if(!l(e)&&!l(t)){console.error("Failed to load I3S node. Bounding volume is required.");return}let n;if(l(e)?n=Ae.fromDegrees(e.center[0],e.center[1],e.center[2]):n=Ae.fromDegrees(t[0],t[1],t[2]),l(this._dataProvider._geoidDataList)&&l(n))for(let T=0;T<this._dataProvider._geoidDataList.length;T++){let E=this._dataProvider._geoidDataList[T],S=E.projection.project(n);if(S.x>E.nativeExtent.west&&S.x<E.nativeExtent.east&&S.y>E.nativeExtent.south&&S.y<E.nativeExtent.north){n.height+=GWt(S.x,S.y,E);break}}let i={},o,r=0;l(e)?(i={box:[0,0,0,e.halfSize[0],0,0,0,e.halfSize[1],0,0,0,e.halfSize[2]]},r=Math.max(Math.max(this._data.obb.halfSize[0],this._data.obb.halfSize[1]),this._data.obb.halfSize[2]),o=ie.WGS84.cartographicToCartesian(n)):(i={sphere:[0,0,0,t[3]]},o=ie.WGS84.cartographicToCartesian(n),r=this._data.mbs[3]),r*=2;let s=1/0;if(l(this._data.lodThreshold))if(this._layer._data.nodePages.lodSelectionMetricType==="maxScreenThresholdSQ"){let T=Math.sqrt(this._data.lodThreshold/(Math.PI*.25));s=r/T}else if(this._layer._data.nodePages.lodSelectionMetricType==="maxScreenThreshold"){let T=this._data.lodThreshold;s=r/T}else console.error("Invalid lodSelectionMetricType in Layer");else if(l(this._data.lodSelection))for(let T=0;T<this._data.lodSelection.length;T++)this._data.lodSelection[T].metricType==="maxScreenThreshold"&&(s=r/this._data.lodSelection[T].maxError);s===1/0&&(s=1e5);let a=s*16,c=new yc(0,0,0),d=bt.headingPitchRollQuaternion(o,c);l(this._data.obb)&&(d=new Me(this._data.obb.quaternion[0],this._data.obb.quaternion[1],this._data.obb.quaternion[2],this._data.obb.quaternion[3]));let u=$.fromQuaternion(d),h=$.inverse(u,new $),p=new F(u[0],u[1],u[2],0,u[3],u[4],u[5],0,u[6],u[7],u[8],0,o.x,o.y,o.z,1),A=F.inverse(p,new F),f=F.clone(p);l(this._parent._globalTransform)&&F.multiply(p,this._parent._inverseGlobalTransform,f),this._globalTransform=p,this._inverseGlobalTransform=A,this._inverseRotationMatrix=h;let b=[];for(let T=0;T<this._children.length;T++)b.push(this._children[T]._create3DTileDefinition());return{children:b,refine:"REPLACE",boundingVolume:i,transform:[f[0],f[4],f[8],f[12],f[1],f[5],f[9],f[13],f[2],f[6],f[10],f[14],f[3],f[7],f[11],f[15]],content:{uri:l(this._resource)?this._resource.url:void 0},geometricError:a}};fl.prototype._loadSymbology=async function(){!l(this._symbologyData)&&l(this._layer._symbology)&&(this._symbologyData=await this._layer._symbology._getSymbology(this))};fl.prototype._createContentURL=async function(){let e={scene:0,scenes:[{nodes:[0]}],nodes:[{name:"singleNode"}],meshes:[],buffers:[],bufferViews:[],accessors:[],materials:[],textures:[],images:[],samplers:[],asset:{version:"2.0"}},t=[this._loadGeometryData()];if(this._dataProvider.legacyVersion16&&t.push(this._loadFeatureData()),await Promise.all(t),l(this._geometryData)&&this._geometryData.length>0){this._dataProvider._applySymbology&&await this._loadSymbology();let o=this._geometryData[0].resource.url,r=this._layer._data.store.defaultGeometrySchema,s=this._geometryData[0],a=await Fv.decode(o,r,s,this._featureData[0],this._symbologyData);if(!l(a))return;e=s._generateGltf(a.meshData.nodesInScene,a.meshData.nodes,a.meshData.meshes,a.meshData.buffers,a.meshData.bufferViews,a.meshData.accessors,a.meshData.rootExtensions,a.meshData.extensionsUsed),this._geometryData[0]._customAttributes=a.meshData._customAttributes}let n=this._dataProvider._binarizeGltf(e),i=new Blob([n],{type:"application/binary"});return URL.createObjectURL(i)};async function ZWt(e){let t=e._layer._filters,n=[];for(let i=0;i<t.length;i++){let o=e.loadField(t[i].name);n.push(o)}return await Promise.all(n),t}function RWt(e,t,n){if(!l(n.values)||n.values.length===0)return!1;let i=l(t)?t.values:[],o;e<i.length&&(o=i[e]);let r=!1;for(let s=0;s<n.values.length;s++)if(n.values[s]===o){r=!0;break}return r}async function AVe(e,t){let n=e._tile.content.batchTable;if(l(n)&&n.featuresLength>0){n.setAllShow(!0);let i=await ZWt(e);if(i.length>0)for(let o=0;o<n.featuresLength;o++)for(let r=0;r<i.length;r++){let s=i[r];if(!RWt(o,e._fields[s.name],s)){n.setShow(o,!1);break}}}t.show=!0}fl.prototype._filterFeatures=function(){let e=[];for(let n=0;n<this._children.length;n++){let i=this._children[n]._filterFeatures();e.push(i)}let t=this._tile?.content?._model;if(l(this._geometryData)&&this._geometryData.length>0&&l(t)&&t.ready){t.show=!1;let n=AVe(this,t);e.push(n)}return Promise.all(e)};vm.prototype._hookedRequestContent=vm.prototype.requestContent;vm.prototype.requestContent=function(){if(!this.tileset._isI3STileSet)return this._hookedRequestContent();if(!this._isLoading){this._isLoading=!0;let e=this;return this._i3sNode._createContentURL().then(t=>{if(!l(t)){e._isLoading=!1;return}return e._contentResource=new Le({url:t}),e._hookedRequestContent()}).then(t=>{let n=t?._model;return l(e._i3sNode._geometryData)&&e._i3sNode._geometryData.length>0&&l(n)&&(n.show=!1,n.readyEvent.addEventListener(()=>{AVe(e._i3sNode,n)})),e._isLoading=!1,t})}};function VWt(e,t,n,i,o,r){let s=n*(1-e)+i*e,a=o*(1-e)+r*e;return s*(1-t)+a*t}function mz(e,t,n,i){let o=e+t*n;return i[o]}function GWt(e,t,n){let i=n.nativeExtent,o=(e-i.west)/(i.east-i.west)*(n.width-1),r=(t-i.south)/(i.north-i.south)*(n.height-1),s=Math.floor(o),a=Math.floor(r);o-=s,r-=a;let c=s<n.width?s+1:s,d=a<n.height?a+1:a;a=n.height-1-a,d=n.height-1-d;let u=mz(s,a,n.width,n.buffer),h=mz(c,a,n.width,n.buffer),p=mz(s,d,n.width,n.buffer),A=mz(c,d,n.width,n.buffer),f=VWt(o,r,u,h,p,A);return f=f*n.scale+n.offset,f}Object.defineProperties(vm.prototype,{i3sNode:{get:function(){return this._i3sNode}}});var dR=fl;var jTo=y(x(),1);function hz(e){this._layer=e,this._defaultSymbology=void 0,this._valueFields=[],this._uniqueValueHash=void 0,this._classBreaksHash=void 0,this._parseLayerSymbology()}Object.defineProperties(hz.prototype,{defaultSymbology:{get:function(){return this._defaultSymbology}}});function une(e,t){let n=[];for(let i=0;i<e.length;i++){let o=U.byteToFloat(e[i]);i<3?n.push(rE(o)):n.push(o)}return n.length===3&&(l(t)?n.push(1-t/100):n.push(1)),n}function uR(e,t){let n={edges:void 0,material:void 0};if(l(e)&&l(e.symbolLayers))for(let i=0;i<e.symbolLayers.length;i++){let o=e.symbolLayers[i];if(o.type==="Fill"){let r=o.edges,s=o.outline;if(l(r)?(n.edges={},l(r.color)&&(n.edges.color=une(r.color,r.transparency))):l(s)&&(n.edges={},l(s.color)&&(n.edges.color=une(s.color,s.transparency))),!t){let a=o.material;l(a)&&(n.material={colorMixMode:a.colorMixMode},l(a.color)&&(n.material.color=une(a.color,a.transparency)))}break}}return n}function LWt(e,t){if(l(e.uniqueValueGroups)){let n={};for(let i=0;i<e.uniqueValueGroups.length;i++){let o=e.uniqueValueGroups[i].classes;if(l(o))for(let r=0;r<o.length;r++){let s=uR(o[r].symbol,t),a=o[r].values;for(let c=0;c<a.length;c++){let d=a[c],u=n;for(let h=0;h<d.length;h++){let p=d[h];h===d.length-1?u[p]=s:(l(u[p])||(u[p]={}),u=u[p])}}}}return n}if(l(e.uniqueValueInfos)){let n={};for(let i=0;i<e.uniqueValueInfos.length;i++){let o=e.uniqueValueInfos[i];n[o.value]=uR(o.symbol,t)}return n}}function WWt(e,t){if(l(e.classBreakInfos)){let n=[...e.classBreakInfos];n.sort(function(o,r){let s=o.classMaxValue??o.classMinValue,a=r.classMaxValue??r.classMinValue;return s-a});let i={ranges:[],symbols:[]};l(e.minValue)&&(i.ranges.push(e.minValue),i.symbols.push(void 0));for(let o=0;o<n.length;o++){let r=n[o];l(r.classMinValue)&&(i.ranges.length===0||r.classMinValue>i.ranges[i.ranges.length-1])&&(i.ranges.push(r.classMinValue),i.symbols.push(void 0)),l(r.classMaxValue)&&(i.ranges.length===0||r.classMaxValue>i.ranges[i.ranges.length-1])&&(i.ranges.push(r.classMaxValue),i.symbols.push(uR(r.symbol,t)))}return i.symbols.push(void 0),i}}hz.prototype._parseLayerSymbology=function(){let e=this._layer.data.drawingInfo;if(l(e)&&l(e.renderer)){let t=this._layer.data.cachedDrawingInfo,n=l(t)&&t.color===!0,i=e.renderer;i.type==="simple"?this._defaultSymbology=uR(i.symbol,n):i.type==="uniqueValue"?(this._defaultSymbology=uR(i.defaultSymbol,n),this._valueFields.push(i.field1),l(i.field2)&&this._valueFields.push(i.field2),l(i.field3)&&this._valueFields.push(i.field3),this._uniqueValueHash=LWt(i,n)):i.type==="classBreaks"&&(this._defaultSymbology=uR(i.defaultSymbol,n),this._valueFields.push(i.field),this._classBreaksHash=WWt(i,n))}};function gVe(e,t,n,i){let o=t[n];if(i<o.length){let r=o[i],s=e[r];return l(s)&&++n<t.length?gVe(s,t,n,i):s}}function FWt(e,t){let n=0,i=e.length;if(n<i)do{let o=n+i>>>1;e[o]<t?n=o+1:i=o}while(n<i);return n}function BWt(e,t,n){let i=t[n],o=FWt(e.ranges,i);return e.symbols[o]}hz.prototype._getSymbology=async function(e){let t={default:this._defaultSymbology};if(this._valueFields.length>0){let n=[];for(let r=0;r<this._valueFields.length;r++)n.push(e.loadField(this._valueFields[r]));await Promise.all(n);let i=[];for(let r=0;r<this._valueFields.length;r++)i.push(e.fields[this._valueFields[r]].values);let o;if(l(this._uniqueValueHash)?o=r=>gVe(this._uniqueValueHash,i,0,r):l(this._classBreaksHash)&&(o=r=>BWt(this._classBreaksHash,i[0],r)),l(o)){let r=i[0];for(let s=0;s<r.length;s++){let a=o(s);l(a)&&(t[s]=a)}}}return t};var Pv=hz;function Qd(e,t,n){this._dataProvider=e,this._parent=n,!l(t.href)&&l(t.id)&&(t.href=`layers/${t.id}`);let i=this._parent.resource.getUrlComponent(),o="";i.match(/layers\/\d/)?o=`${i}`.replace(/\/+$/,""):o=`${i}`.replace(/\/?$/,"/").concat(`${t.href}`),this._version=t.store.version;let r=this._version.split(".");this._majorVersion=parseInt(r[0]),this._minorVersion=r.length>1?parseInt(r[1]):0,this._resource=new Le({url:o}),this._resource.setQueryParameters(this._dataProvider.resource.queryParameters),this._resource.appendForwardSlash(),this._data=t,this._rootNode=void 0,this._nodePages={},this._nodePageFetches={},this._extent=void 0,this._tileset=void 0,this._geometryDefinitions=void 0,this._filters=[],this._symbology=void 0,this._computeGeometryDefinitions(!0),this._computeExtent()}Object.defineProperties(Qd.prototype,{resource:{get:function(){return this._resource}},rootNode:{get:function(){return this._rootNode}},tileset:{get:function(){return this._tileset}},data:{get:function(){return this._data}},version:{get:function(){return this._version}},majorVersion:{get:function(){return this._majorVersion}},minorVersion:{get:function(){return this._minorVersion}},legacyVersion16:{get:function(){if(l(this.version))return this.majorVersion<1||this.majorVersion===1&&this.minorVersion<=6}}});Qd.prototype.load=async function(e){if(this._data.spatialReference.wkid!==4326)throw new me(`Unsupported spatial reference: ${this._data.spatialReference.wkid}`);if(this._dataProvider.applySymbology&&(this._symbology=new Pv(this)),await this._dataProvider.loadGeoidData(),await this._loadRootNode(e),await this._create3DTileset(e),this._rootNode._tile=this._tileset._root,this._tileset._root._i3sNode=this._rootNode,this.legacyVersion16)return this._rootNode._loadChildren()};Qd.prototype._computeGeometryDefinitions=function(e){if(this._geometryDefinitions=[],l(this._data.geometryDefinitions))for(let t=0;t<this._data.geometryDefinitions.length;t++){let n=[],i=this._data.geometryDefinitions[t].geometryBuffers;for(let o=0;o<i.length;o++){let r=i[o],s=[],a=!1;if(l(r.compressedAttributes)&&e){a=!0;let c=r.compressedAttributes.attributes;for(let d=0;d<c.length;d++)s.push(c[d])}else for(let c in r)c!=="offset"&&s.push(c);n.push({compressed:a,attributes:s,index:i.indexOf(r)})}n.sort(function(o,r){return o.compressed&&!r.compressed?-1:!o.compressed&&r.compressed?1:o.attributes.length-r.attributes.length}),this._geometryDefinitions.push(n)}};Qd.prototype._findBestGeometryBuffers=function(e,t){let n=this._geometryDefinitions[e];if(l(n)){for(let i=0;i<n.length;++i){let o=n[i],r=!1,s=o.attributes;for(let a=0;a<t.length;a++)if(!s.includes(t[a])){r=!0;break}if(!r)return{bufferIndex:o.index,definition:n,geometryBufferInfo:o}}if(l(n[0]))return{bufferIndex:0,definition:n,geometryBufferInfo:n[0]}}};Qd.prototype._loadRootNode=function(e){if(l(this._data.nodePages)){let t=0;l(this._data.nodePages.rootIndex)&&(t=this._data.nodePages.rootIndex),this._rootNode=new dR(this,t,!0)}else this._rootNode=new dR(this,this._data.store.rootNode,!0);return this._rootNode.load(e)};Qd.prototype._getNodeInNodePages=function(e){let t=Math.floor(e/this._data.nodePages.nodesPerPage),n=e%this._data.nodePages.nodesPerPage;return this._loadNodePage(t).then(function(i){return i.nodes[n]})};Qd._fetchJson=function(e){return e.fetchJson()};Qd.prototype._loadNodePage=function(e){let t=this;if(!l(this._nodePageFetches[e])){let n=this.resource.getDerivedResource({url:`nodepages/${e}/`}),i=Qd._fetchJson(n).then(function(o){return l(o.error)&&o.error.code!==200?Promise.reject(o.error):(t._nodePages[e]=o.nodes,o)});this._nodePageFetches[e]=i}return this._nodePageFetches[e]};Qd.prototype._computeExtent=function(){l(this._data.fullExtent)?this._extent=de.fromDegrees(this._data.fullExtent.xmin,this._data.fullExtent.ymin,this._data.fullExtent.xmax,this._data.fullExtent.ymax):l(this._data.store.extent)&&(this._extent=de.fromDegrees(this._data.store.extent[0],this._data.store.extent[1],this._data.store.extent[2],this._data.store.extent[3]))};Qd.prototype._create3DTileset=async function(e){let t={asset:{version:"1.0"},geometricError:Number.MAX_VALUE,root:this._rootNode._create3DTileDefinition()},n=new Blob([JSON.stringify(t)],{type:"application/json"}),i=URL.createObjectURL(n),o=this._symbology?.defaultSymbology?.edges?.color;l(o)&&!l(e?.outlineColor)&&(e=l(e)?He(e):{},e.outlineColor=U.fromCartesian4(re.fromArray(o))),this._tileset=await js.fromUrl(i,e),this._tileset.show=this._parent.show,this._tileset._isI3STileSet=!0,this._tileset.tileUnload.addEventListener(function(r){r._i3sNode._clearGeometryData(),URL.revokeObjectURL(r._contentResource._url),r._contentResource=r._i3sNode.resource}),this._tileset.tileVisible.addEventListener(function(r){l(r._i3sNode)&&r._i3sNode._loadChildren()})};Qd.prototype._updateVisibility=function(){l(this._tileset)&&(this._tileset.show=this._parent.show)};Qd.prototype.filterByAttributes=function(e){this._filters=l(e)?He(e,!0):[];let t=this._rootNode;return l(t)?t._filterFeatures():Promise.resolve()};var QE=Qd;var fEo=y(x(),1);function fz(e,t){this._dataProvider=e,this._resource=new Le({url:t}),this._resource.setQueryParameters(e.resource.queryParameters),this._resource.appendForwardSlash()}Object.defineProperties(fz.prototype,{resource:{get:function(){return this._resource}},data:{get:function(){return this._data}},names:{get:function(){let e=[],t=this._data.summary;if(l(t))for(let n=0;n<t.length;++n)e.push(t[n].fieldName);return e}}});fz.prototype.load=async function(){return this._data=await Qf.loadJson(this._resource),this._data};fz.prototype._getValues=function(e){let t=this._data.summary;if(l(t))for(let n=0;n<t.length;++n){let i=t[n];if(i.fieldName===e)return l(i.mostFrequentValues)?[...i.mostFrequentValues]:[]}};var Xv=fz;var xEo=y(x(),1);function Yv(e,t,n){this._dataProvider=e,this._parent=t,this._data=n,this._name=n.name,this._modelName=n.modelName,this._visibility=n.visibility??!0,this._resource=void 0,this._sublayers=[],this._i3sLayers=[]}Object.defineProperties(Yv.prototype,{resource:{get:function(){return this._resource}},data:{get:function(){return this._data}},name:{get:function(){return this._name}},modelName:{get:function(){return this._modelName}},sublayers:{get:function(){return this._sublayers}},visibility:{get:function(){return this._visibility},set:function(e){if(this._visibility!==e){this._visibility=e;for(let t=0;t<this._i3sLayers.length;t++)this._i3sLayers[t]._updateVisibility()}}},show:{get:function(){return this._visibility&&this._parent.show}}});Yv._fromData=async function(e,t,n,i){let o=new Yv(e,i,n);if(o._data.layerType==="group"){let r=o._data.sublayers;if(l(r)){let s=[];for(let c=0;c<r.length;c++){let d=Yv._fromData(e,t,r[c],o);s.push(d)}let a=await Promise.all(s);for(let c=0;c<a.length;c++){let d=a[c];o._sublayers.push(d),o._i3sLayers.push(...d._i3sLayers)}}}else if(o._data.layerType==="3DObject"){let r=t.concat(`/sublayers/${o._data.id}`),s=new Le({url:r});s.setQueryParameters(e.resource.queryParameters),s.appendForwardSlash(),o._resource=s;let a=await Qf.loadJson(o._resource),c=new QE(e,a,o);o._i3sLayers.push(c)}else console.log(`${o._data.layerType} layer ${o._data.name} is skipped as not supported.`);return o};var Mv=Yv;var xVe=y(bVe(),1);function ia(e){e=e??Q.EMPTY_OBJECT,this._name=e.name,this._show=e.show??!0,this._geoidTiledTerrainProvider=e.geoidTiledTerrainProvider,this._showFeatures=e.showFeatures??!1,this._adjustMaterialAlphaMode=e.adjustMaterialAlphaMode??!1,this._applySymbology=e.applySymbology??!1,this._calculateNormals=e.calculateNormals??!1,this._cesium3dTilesetOptions=e.cesium3dTilesetOptions??Q.EMPTY_OBJECT,this._layers=[],this._sublayers=[],this._data=void 0,this._extent=void 0,this._geoidDataPromise=void 0,this._geoidDataList=void 0,this._decoderTaskProcessor=void 0,this._taskProcessorReadyPromise=void 0,this._attributeStatistics=[],this._layersExtent=[]}Object.defineProperties(ia.prototype,{name:{get:function(){return this._name}},show:{get:function(){return this._show},set:function(e){if(this._show!==e){this._show=e;for(let t=0;t<this._layers.length;t++)this._layers[t]._updateVisibility()}}},geoidTiledTerrainProvider:{get:function(){return this._geoidTiledTerrainProvider}},layers:{get:function(){return this._layers}},sublayers:{get:function(){return this._sublayers}},data:{get:function(){return this._data}},extent:{get:function(){return this._extent}},resource:{get:function(){return this._resource}},showFeatures:{get:function(){return this._showFeatures}},adjustMaterialAlphaMode:{get:function(){return this._adjustMaterialAlphaMode}},applySymbology:{get:function(){return this._applySymbology}},calculateNormals:{get:function(){return this._calculateNormals}}});ia.prototype.destroy=function(){for(let e=0;e<this._layers.length;e++)l(this._layers[e]._tileset)&&this._layers[e]._tileset.destroy();return he(this)};ia.prototype.isDestroyed=function(){return!1};ia.prototype.update=function(e){for(let t=0;t<this._layers.length;t++)l(this._layers[t]._tileset)&&this._layers[t]._tileset.update(e)};ia.prototype.prePassesUpdate=function(e){for(let t=0;t<this._layers.length;t++)l(this._layers[t]._tileset)&&this._layers[t]._tileset.prePassesUpdate(e)};ia.prototype.postPassesUpdate=function(e){for(let t=0;t<this._layers.length;t++)l(this._layers[t]._tileset)&&this._layers[t]._tileset.postPassesUpdate(e)};ia.prototype.updateForPass=function(e,t){for(let n=0;n<this._layers.length;n++)l(this._layers[n]._tileset)&&this._layers[n]._tileset.updateForPass(e,t)};function wWt(e,t){let n=e.resource.getUrlComponent(),i="";return n.match(/layers\/\d/)?i=`${n}`.replace(/\/+$/,""):i=`${n}`.replace(/\/?$/,"/").concat(`layers/${t}`),i}async function yVe(e,t,n){if(t.layerType==="Building"){l(n.showFeatures)||(e._showFeatures=!0),l(n.adjustMaterialAlphaMode)||(e._adjustMaterialAlphaMode=!0),l(n.applySymbology)||(e._applySymbology=!0),l(n.calculateNormals)||(e._calculateNormals=!0);let i=wWt(e,t.id);if(l(t.sublayers)){let o=[];for(let s=0;s<t.sublayers.length;s++){let a=Mv._fromData(e,i,t.sublayers[s],e);o.push(a)}let r=await Promise.all(o);for(let s=0;s<r.length;s++){let a=r[s];e._sublayers.push(a),e._layers.push(...a._i3sLayers)}}if(l(t.statisticsHRef)){let o=i.concat(`/${t.statisticsHRef}`),r=new Xv(e,o);await r.load(),e._attributeStatistics.push(r)}if(l(t.fullExtent)){let o=de.fromDegrees(t.fullExtent.xmin,t.fullExtent.ymin,t.fullExtent.xmax,t.fullExtent.ymax);e._layersExtent.push(o)}}else if(t.layerType==="3DObject"||t.layerType==="IntegratedMesh"){!l(n.calculateNormals)&&!l(t.textureSetDefinitions)&&(e._calculateNormals=!0);let i=new QE(e,t,e);e._layers.push(i),l(i._extent)&&e._layersExtent.push(i._extent)}else console.log(`${t.layerType} layer ${t.name} is skipped as not supported.`)}ia.fromUrl=async function(e,t){t=t??Q.EMPTY_OBJECT;let n=Le.createIfNeeded(e);n.setQueryParameters({f:"pjson"},!0);let i=await ia.loadJson(n),o=new ia(t);if(o._resource=n,o._data=i,l(i.layers)){let s=[];for(let a=0;a<i.layers.length;a++){let c=yVe(o,i.layers[a],t);s.push(c)}await Promise.all(s)}else await yVe(o,i,t);o._computeExtent();let r=[];for(let s=0;s<o._layers.length;s++)r.push(o._layers[s].load(t.cesium3dTilesetOptions));return await Promise.all(r),o};ia._fetchJson=function(e){return e.fetchJson()};ia.loadJson=async function(e){let t=await ia._fetchJson(e);if(l(t.error)){if(console.error("Failed to fetch I3S ",e.url),l(t.error.message)&&console.error(t.error.message),l(t.error.details))for(let n=0;n<t.error.details.length;n++)console.log(t.error.details[n]);throw new me(t.error)}return t};ia.prototype._loadBinary=async function(e){let t=await e.fetchArrayBuffer();if(t.byteLength>0&&new Uint8Array(t)[0]===123&&new TextDecoder().decode(t).includes("404"))throw new me(`Failed to load binary: ${e.url}`);return t};ia.prototype._binarizeGltf=function(e){let n=new TextEncoder().encode(JSON.stringify(e)),i=new Uint8Array(n.byteLength+20),o={magic:new Uint8Array(i.buffer,0,4),version:new Uint32Array(i.buffer,4,1),length:new Uint32Array(i.buffer,8,1),chunkLength:new Uint32Array(i.buffer,12,1),chunkType:new Uint32Array(i.buffer,16,1),chunkData:new Uint8Array(i.buffer,20,n.byteLength)};return o.magic[0]=103,o.magic[1]=108,o.magic[2]=84,o.magic[3]=70,o.version[0]=2,o.length[0]=i.byteLength,o.chunkLength[0]=n.byteLength,o.chunkType[0]=1313821514,o.chunkData.set(n),i};var NWt=new M;function PWt(e,t){let n=e.tilingScheme,i=[],o={},r=e._lodCount,s=Ae.fromRadians(t.west,t.north),a=Ae.fromRadians(t.east,t.south),c=n.positionToTileXY(s,r),d=n.positionToTileXY(a,r);for(let h=c.x;h<=d.x;h++)for(let p=c.y;p<=d.y;p++){let A=M.fromElements(h,p,NWt),f=A.toString();if(!o.hasOwnProperty(f)){let b={x:A.x,y:A.y,level:r,tilingScheme:n,terrainProvider:e,positions:[]};o[f]=b,i.push(b)}}let u=[];for(let h=0;h<i.length;++h){let p=i[h],A=p.terrainProvider.requestTileGeometry(p.x,p.y,p.level);u.push(A)}return Promise.all(u).then(function(h){let p=[];for(let A=0;A<h.length;A++){let f={tilingScheme:n,x:i[A].x,y:i[A].y,level:i[A].level},b=h[A],C="Geographic";n._projection instanceof pi&&(C="WebMercator");let T={projectionType:C,projection:n._projection,nativeExtent:n.tileXYToNativeRectangle(f.x,f.y,f.level),height:b._height,width:b._width,scale:b._structure.heightScale,offset:b._structure.heightOffset};if(b._encoding===eh.LERC){let E=xVe.default.decode(b._buffer);T.buffer=E.pixels[0]}else T.buffer=b._buffer;p.push(T)}return p})}async function XWt(e){let t=e._geoidTiledTerrainProvider;if(l(t))try{let n=await PWt(t,e._extent);e._geoidDataList=n}catch{console.log("Error retrieving Geoid Terrain tiles - no geoid conversion will be performed.")}}ia.prototype.loadGeoidData=async function(){return l(this._geoidDataPromise)?this._geoidDataPromise:(this._geoidDataPromise=XWt(this),this._geoidDataPromise)};ia.prototype._computeExtent=function(){let e;for(let t=0;t<this._layersExtent.length;t++){let n=this._layersExtent[t];l(e)?de.union(e,n,e):e=de.clone(n)}this._extent=e};ia.prototype.getAttributeNames=function(){let e=[];for(let t=0;t<this._attributeStatistics.length;++t)e.push(...this._attributeStatistics[t].names);return e};ia.prototype.getAttributeValues=function(e){for(let t=0;t<this._attributeStatistics.length;++t){let n=this._attributeStatistics[t]._getValues(e);if(l(n))return n}return[]};ia.prototype.filterByAttributes=function(e){let t=[];for(let n=0;n<this._layers.length;n++){let i=this._layers[n].filterByAttributes(e);t.push(i)}return Promise.all(t)};var Qf=ia;var OEo=y(x(),1);var vv={};vv.createTilesetFromIModelId=async function({iModelId:e,changesetId:t,tilesetOptions:n}){let{exports:i}=await na.getExports(e,t);if(i.length>0&&i.every(c=>c.status===na.ExportStatus.Invalid))throw new me(`All exports for this iModel are Invalid: ${e}`);let o=i.find(c=>c.status===na.ExportStatus.Complete);if(!l(o))return;let r=new URL(o._links.mesh.href);r.pathname=`${r.pathname}/tileset.json`;let s=r.toString(),a=new Le({url:s});return js.fromUrl(a,n)};vv.createTilesetForRealityDataId=async function({iTwinId:e,realityDataId:t,type:n,rootDocument:i,tilesetOptions:o}){if(!l(n)||!l(i)){let c=await na.getRealityDataMetadata(e,t);i=c.rootDocument,n=c.type}if(![na.RealityDataType.Cesium3DTiles,na.RealityDataType.PNTS,na.RealityDataType.RealityMesh3DTiles,na.RealityDataType.Terrain3DTiles,na.RealityDataType.GaussianSplat3DTiles].includes(n))throw new me(`Reality data type is not a mesh type: ${n}`);let s=await na.getRealityDataURL(e,t,i),a={maximumScreenSpaceError:4,...o};return js.fromUrl(s,a)};vv.createDataSourceForRealityDataId=async function({iTwinId:e,realityDataId:t,type:n,rootDocument:i}){if(!l(n)||!l(i)){let s=await na.getRealityDataMetadata(e,t);i=s.rootDocument,n=s.type}if(![na.RealityDataType.KML,na.RealityDataType.GeoJSON].includes(n))throw new me(`Reality data type is not a data source type: ${n}`);let r=await na.getRealityDataURL(e,t,i);return n===na.RealityDataType.GeoJSON?Sy.load(r):OT.load(r)};vv.loadGeospatialFeatures=async function({iTwinId:e,collectionId:t,limit:n}){let i=n??1e4,o=`${na.apiEndpoint}geospatial-features/itwins/${e}/ogc/collections/${t}/items`,r=new Le({url:o,headers:{Authorization:na._getAuthorizationHeader(),Accept:"application/vnd.bentley.itwin-platform.v1+json"},queryParameters:{limit:i,client:"CesiumJS"}});return Sy.load(r)};var mne=vv;var JEo=y(x(),1);function CVe(){}Object.defineProperties(CVe.prototype,{color:{get:fe.throwInstantiationError},intensity:{get:fe.throwInstantiationError}});var hne=CVe;var nSo=y(x(),1);var YWt=/\/$/,TVe=new Et('&copy; <a href="https://www.mapbox.com/about/maps/">Mapbox</a> &copy; <a href="http://www.openstreetmap.org/copyright">OpenStreetMap</a> <strong><a href="https://www.mapbox.com/map-feedback/">Improve this map</a></strong>');function mR(e){e=e??Q.EMPTY_OBJECT;let t=e.styleId,n=e.accessToken;this._defaultAlpha=void 0,this._defaultNightAlpha=void 0,this._defaultDayAlpha=void 0,this._defaultBrightness=void 0,this._defaultContrast=void 0,this._defaultHue=void 0,this._defaultSaturation=void 0,this._defaultGamma=void 0,this._defaultMinificationFilter=void 0,this._defaultMagnificationFilter=void 0;let i=Le.createIfNeeded(e.url??"https://api.mapbox.com/styles/v1/");this._styleId=t,this._accessToken=n;let o=e.tilesize??512;this._tilesize=o;let r=e.username??"mapbox";this._username=r;let s=l(e.scaleFactor)?"@2x":"",a=i.getUrlComponent();YWt.test(a)||(a+="/"),a+=`${this._username}/${t}/tiles/${this._tilesize}/{z}/{x}/{y}${s}`,i.url=a,i.setQueryParameters({access_token:n});let c;l(e.credit)?(c=e.credit,typeof c=="string"&&(c=new Et(c))):c=TVe,this._resource=i,this._imageryProvider=new hs({url:i,credit:c,ellipsoid:e.ellipsoid,minimumLevel:e.minimumLevel,maximumLevel:e.maximumLevel,rectangle:e.rectangle})}Object.defineProperties(mR.prototype,{url:{get:function(){return this._imageryProvider.url}},rectangle:{get:function(){return this._imageryProvider.rectangle}},tileWidth:{get:function(){return this._imageryProvider.tileWidth}},tileHeight:{get:function(){return this._imageryProvider.tileHeight}},maximumLevel:{get:function(){return this._imageryProvider.maximumLevel}},minimumLevel:{get:function(){return this._imageryProvider.minimumLevel}},tilingScheme:{get:function(){return this._imageryProvider.tilingScheme}},tileDiscardPolicy:{get:function(){return this._imageryProvider.tileDiscardPolicy}},errorEvent:{get:function(){return this._imageryProvider.errorEvent}},credit:{get:function(){return this._imageryProvider.credit}},proxy:{get:function(){return this._imageryProvider.proxy}},hasAlphaChannel:{get:function(){return this._imageryProvider.hasAlphaChannel}}});mR.prototype.getTileCredits=function(e,t,n){};mR.prototype.requestImage=function(e,t,n,i){return this._imageryProvider.requestImage(e,t,n,i)};mR.prototype.pickFeatures=function(e,t,n,i,o){return this._imageryProvider.pickFeatures(e,t,n,i,o)};mR._defaultCredit=TVe;var fne=mR;var oSo=y(x(),1);function pne(e){}pne.prototype.isReady=function(){return!0};pne.prototype.shouldDiscardImage=function(e){return!1};var Ane=pne;var hSo=y(x(),1);var MWt=new Et("MapQuest, Open Street Map and contributors, CC-BY-SA");function Az(e){e=e??Q.EMPTY_OBJECT;let t=Le.createIfNeeded(e.url??"https://tile.openstreetmap.org/");t.appendForwardSlash(),t.url+=`{z}/{x}/{y}${e.retinaTiles?"@2x":""}.${e.fileExtension??"png"}`;let n=new ws({ellipsoid:e.ellipsoid}),i=256,o=256,r=e.minimumLevel??0,s=e.maximumLevel,a=e.rectangle??n.rectangle,c=n.positionToTileXY(de.southwest(a),r),d=n.positionToTileXY(de.northeast(a),r),u=(Math.abs(d.x-c.x)+1)*(Math.abs(d.y-c.y)+1),h=e.credit??MWt;typeof h=="string"&&(h=new Et(h)),hs.call(this,{url:t,credit:h,tilingScheme:n,tileWidth:i,tileHeight:o,minimumLevel:r,maximumLevel:s,rectangle:a})}l(Object.create)&&(Az.prototype=Object.create(hs.prototype),Az.prototype.constructor=Az);var Fb=Az;var ASo=y(x(),1);function EVe(){fe.throwInstantiationError()}Object.defineProperties(EVe.prototype,{show:{get:fe.throwInstantiationError,set:fe.throwInstantiationError},transform:{get:fe.throwInstantiationError},credit:{get:fe.throwInstantiationError}});var gne=EVe;var ySo=y(x(),1);function gz(){fe.throwInstantiationError()}Object.defineProperties(gz.prototype,{});gz.fromUrl=function(e){fe.throwInstantiationError()};gz.prototype.loadPanorama=function(e){fe.throwInstantiationError()};var bne=gz;var ISo=y(x(),1);var vWt=new M(1,1);function yne(e){e=e??Q.EMPTY_OBJECT,this.mass=e.mass??1,this.position=m.clone(e.position??m.ZERO),this.velocity=m.clone(e.velocity??m.ZERO),this.life=e.life??Number.MAX_VALUE,this.image=e.image,this.startColor=U.clone(e.startColor??U.WHITE),this.endColor=U.clone(e.endColor??U.WHITE),this.startScale=e.startScale??1,this.endScale=e.endScale??1,this.imageSize=M.clone(e.imageSize??vWt),this._age=0,this._normalizedAge=0,this._billboard=void 0}Object.defineProperties(yne.prototype,{age:{get:function(){return this._age}},normalizedAge:{get:function(){return this._normalizedAge}}});var SVe=new m;yne.prototype.update=function(e,t){return m.multiplyByScalar(this.velocity,e,SVe),m.add(this.position,SVe,this.position),l(t)&&t(this,e),this._age+=e,this.life===Number.MAX_VALUE?this._normalizedAge=0:this._normalizedAge=this._age/this.life,this._age<=this.life};var hR=yne;var VSo=y(x(),1);function _Ve(e){e=e??Q.EMPTY_OBJECT,this.time=e.time??0,this.minimum=e.minimum??0,this.maximum=e.maximum??50,this._complete=!1}Object.defineProperties(_Ve.prototype,{complete:{get:function(){return this._complete}}});var xne=_Ve;var WSo=y(x(),1);function IVe(e){}IVe.prototype.emit=function(e){fe.throwInstantiationError()};var Cne=IVe;var zSo=y(x(),1);var ZVe=new M(1,1);function Uv(e){e=e??Q.EMPTY_OBJECT,this.show=e.show??!0,this.updateCallback=e.updateCallback,this.loop=e.loop??!0,this.image=e.image??void 0;let t=e.emitter;l(t)||(t=new _v(.5)),this._emitter=t,this._bursts=e.bursts,this._modelMatrix=F.clone(e.modelMatrix??F.IDENTITY),this._emitterModelMatrix=F.clone(e.emitterModelMatrix??F.IDENTITY),this._matrixDirty=!0,this._combinedMatrix=new F,this._startColor=U.clone(e.color??e.startColor??U.WHITE),this._endColor=U.clone(e.color??e.endColor??U.WHITE),this._startScale=e.scale??e.startScale??1,this._endScale=e.scale??e.endScale??1,this._emissionRate=e.emissionRate??5,this._minimumSpeed=e.speed??e.minimumSpeed??1,this._maximumSpeed=e.speed??e.maximumSpeed??1,this._minimumParticleLife=e.particleLife??e.minimumParticleLife??5,this._maximumParticleLife=e.particleLife??e.maximumParticleLife??5,this._minimumMass=e.mass??e.minimumMass??1,this._maximumMass=e.mass??e.maximumMass??1,this._minimumImageSize=M.clone(e.imageSize??e.minimumImageSize??ZVe),this._maximumImageSize=M.clone(e.imageSize??e.maximumImageSize??ZVe),this._sizeInMeters=e.sizeInMeters??!1,this._lifetime=e.lifetime??Number.MAX_VALUE,this._billboardCollection=void 0,this._particles=[],this._particlePool=[],this._previousTime=void 0,this._currentTime=0,this._carryOver=0,this._complete=new xe,this._isComplete=!1,this._updateParticlePool=!0,this._particleEstimate=0}Object.defineProperties(Uv.prototype,{emitter:{get:function(){return this._emitter},set:function(e){this._emitter=e}},bursts:{get:function(){return this._bursts},set:function(e){this._bursts=e,this._updateParticlePool=!0}},modelMatrix:{get:function(){return this._modelMatrix},set:function(e){this._matrixDirty=this._matrixDirty||!F.equals(this._modelMatrix,e),F.clone(e,this._modelMatrix)}},emitterModelMatrix:{get:function(){return this._emitterModelMatrix},set:function(e){this._matrixDirty=this._matrixDirty||!F.equals(this._emitterModelMatrix,e),F.clone(e,this._emitterModelMatrix)}},startColor:{get:function(){return this._startColor},set:function(e){U.clone(e,this._startColor)}},endColor:{get:function(){return this._endColor},set:function(e){U.clone(e,this._endColor)}},startScale:{get:function(){return this._startScale},set:function(e){this._startScale=e}},endScale:{get:function(){return this._endScale},set:function(e){this._endScale=e}},emissionRate:{get:function(){return this._emissionRate},set:function(e){this._emissionRate=e,this._updateParticlePool=!0}},minimumSpeed:{get:function(){return this._minimumSpeed},set:function(e){this._minimumSpeed=e}},maximumSpeed:{get:function(){return this._maximumSpeed},set:function(e){this._maximumSpeed=e}},minimumParticleLife:{get:function(){return this._minimumParticleLife},set:function(e){this._minimumParticleLife=e}},maximumParticleLife:{get:function(){return this._maximumParticleLife},set:function(e){this._maximumParticleLife=e,this._updateParticlePool=!0}},minimumMass:{get:function(){return this._minimumMass},set:function(e){this._minimumMass=e}},maximumMass:{get:function(){return this._maximumMass},set:function(e){this._maximumMass=e}},minimumImageSize:{get:function(){return this._minimumImageSize},set:function(e){this._minimumImageSize=e}},maximumImageSize:{get:function(){return this._maximumImageSize},set:function(e){this._maximumImageSize=e}},sizeInMeters:{get:function(){return this._sizeInMeters},set:function(e){this._sizeInMeters=e}},lifetime:{get:function(){return this._lifetime},set:function(e){this._lifetime=e}},complete:{get:function(){return this._complete}},isComplete:{get:function(){return this._isComplete}}});function UWt(e){let t=e._emissionRate,n=e._maximumParticleLife,i=0,o=e._bursts;if(l(o)){let h=o.length;for(let p=0;p<h;++p)i+=o[p].maximum}let r=e._billboardCollection,s=e.image,a=Math.ceil(t*n+i),c=e._particles,d=e._particlePool,u=Math.max(a-c.length-d.length,0);for(let h=0;h<u;++h){let p=new hR;p._billboard=r.add({image:s,show:!1}),d.push(p)}e._particleEstimate=a}function DWt(e){let t=e._particlePool.pop();return l(t)||(t=new hR),t}function kWt(e,t){e._particlePool.push(t)}function QWt(e){let t=e._particles,n=e._particlePool,i=e._billboardCollection,o=t.length,r=n.length,s=e._particleEstimate,a=r-Math.max(s-o-r,0);for(let c=a;c<r;++c){let d=n[c];i.remove(d._billboard)}n.length=a}function OWt(e){l(e._billboard)&&(e._billboard.show=!1)}function RVe(e,t){let n=t._billboard;l(n)||(n=t._billboard=e._billboardCollection.add({image:t.image})),n.width=t.imageSize.x,n.height=t.imageSize.y,n.position=t.position,n.sizeInMeters=e.sizeInMeters,n.show=!0;let i=L.lerp(t.startColor.red,t.endColor.red,t.normalizedAge),o=L.lerp(t.startColor.green,t.endColor.green,t.normalizedAge),r=L.lerp(t.startColor.blue,t.endColor.blue,t.normalizedAge),s=L.lerp(t.startColor.alpha,t.endColor.alpha,t.normalizedAge);n.color=new U(i,o,r,s),n.scale=L.lerp(t.startScale,t.endScale,t.normalizedAge)}function zWt(e,t){t.startColor=U.clone(e._startColor,t.startColor),t.endColor=U.clone(e._endColor,t.endColor),t.startScale=e._startScale,t.endScale=e._endScale,t.image=e.image,t.life=L.randomBetween(e._minimumParticleLife,e._maximumParticleLife),t.mass=L.randomBetween(e._minimumMass,e._maximumMass),t.imageSize.x=L.randomBetween(e._minimumImageSize.x,e._maximumImageSize.x),t.imageSize.y=L.randomBetween(e._minimumImageSize.y,e._maximumImageSize.y),t._normalizedAge=0,t._age=0;let n=L.randomBetween(e._minimumSpeed,e._maximumSpeed);m.multiplyByScalar(t.velocity,n,t.velocity),e._particles.push(t)}function HWt(e,t){if(e._isComplete)return 0;t=L.mod(t,e._lifetime);let n=t*e._emissionRate,i=Math.floor(n);if(e._carryOver+=n-i,e._carryOver>1&&(i++,e._carryOver-=1),l(e.bursts)){let o=e.bursts.length;for(let r=0;r<o;r++){let s=e.bursts[r],a=e._currentTime;l(s)&&!s._complete&&a>s.time&&(i+=L.randomBetween(s.minimum,s.maximum),s._complete=!0)}}return i}var bz=new m;Uv.prototype.update=function(e){if(!this.show)return;l(this._billboardCollection)||(this._billboardCollection=new yu),this._updateParticlePool&&(UWt(this),this._updateParticlePool=!1);let t=0;this._previousTime&&(t=q.secondsDifference(e.time,this._previousTime)),t<0&&(t=0);let n=this._particles,i=this._emitter,o=this.updateCallback,r,s,a=n.length;for(r=0;r<a;++r)s=n[r],s.update(t,o)?RVe(this,s):(OWt(s),kWt(this,s),n[r]=n[a-1],--r,--a);n.length=a;let c=HWt(this,t);if(c>0&&l(i)){this._matrixDirty&&(this._combinedMatrix=F.multiply(this.modelMatrix,this.emitterModelMatrix,this._combinedMatrix),this._matrixDirty=!1);let d=this._combinedMatrix;for(r=0;r<c;r++)s=DWt(this),this._emitter.emit(s),m.add(s.position,s.velocity,bz),F.multiplyByPoint(d,bz,bz),s.position=F.multiplyByPoint(d,s.position,s.position),m.subtract(bz,s.position,s.velocity),m.normalize(s.velocity,s.velocity),zWt(this,s),RVe(this,s)}if(this._billboardCollection.update(e),this._previousTime=q.clone(e.time,this._previousTime),this._currentTime+=t,this._lifetime!==Number.MAX_VALUE&&this._currentTime>this._lifetime)if(this.loop){if(this._currentTime=L.mod(this._currentTime,this._lifetime),this.bursts){let d=this.bursts.length;for(r=0;r<d;r++)this.bursts[r]._complete=!1}}else this._isComplete=!0,this._complete.raiseEvent(this);e.frameNumber%120===0&&QWt(this)};Uv.prototype.isDestroyed=function(){return!1};Uv.prototype.destroy=function(){return this._billboardCollection=this._billboardCollection&&this._billboardCollection.destroy(),he(this)};var Tne=Uv;var KSo=y(x(),1);function em(){fe.throwInstantiationError()}em.computeDefaultLevelZeroMaximumGeometricError=function(e){return e.ellipsoid.maximumRadius*2*Math.PI*.25/(65*e.getNumberOfXTilesAtLevel(0))};Object.defineProperties(em.prototype,{quadtree:{get:fe.throwInstantiationError,set:fe.throwInstantiationError},tilingScheme:{get:fe.throwInstantiationError},errorEvent:{get:fe.throwInstantiationError}});em.prototype.update=fe.throwInstantiationError;em.prototype.beginUpdate=fe.throwInstantiationError;em.prototype.endUpdate=fe.throwInstantiationError;em.prototype.getLevelMaximumGeometricError=fe.throwInstantiationError;em.prototype.loadTile=fe.throwInstantiationError;em.prototype.computeTileVisibility=fe.throwInstantiationError;em.prototype.showTileThisFrame=fe.throwInstantiationError;em.prototype.computeDistanceToTile=fe.throwInstantiationError;em.prototype.isDestroyed=fe.throwInstantiationError;em.prototype.destroy=fe.throwInstantiationError;var Ene=em;var e_o=y(x(),1);function Sne(e){e=e??1,this._radius=e??1}Object.defineProperties(Sne.prototype,{radius:{get:function(){return this._radius},set:function(e){this._radius=e}}});Sne.prototype.emit=function(e){let t=L.randomBetween(0,L.TWO_PI),n=L.randomBetween(0,L.PI),i=L.randomBetween(0,this._radius),o=i*Math.cos(t)*Math.sin(n),r=i*Math.sin(t)*Math.sin(n),s=i*Math.cos(n);e.position=m.fromElements(o,r,s,e.position),e.velocity=m.normalize(e.position,e.velocity)};var _ne=Sne;var i_o=y(x(),1);function Dv(){}Dv.prototype.evaluate=function(e,t){fe.throwInstantiationError()};Dv.prototype.evaluateColor=function(e,t){fe.throwInstantiationError()};Dv.prototype.getShaderFunction=function(e,t,n,i){fe.throwInstantiationError()};Dv.prototype.getVariables=function(){fe.throwInstantiationError()};var Ine=Dv;var c_o=y(x(),1);function fR(e){this._ready=!1,this._provider=void 0,this._errorEvent=new xe,this._readyEvent=new xe,KWt(this,e)}Object.defineProperties(fR.prototype,{errorEvent:{get:function(){return this._errorEvent}},readyEvent:{get:function(){return this._readyEvent}},ready:{get:function(){return this._ready}},provider:{get:function(){return this._provider}}});fR.fromWorldTerrain=function(e){return new fR(jT(e))};fR.fromWorldBathymetry=function(e){return new fR(SX(e))};function JWt(e,t){e.numberOfListeners>0?e.raiseEvent(t):console.error(t)}async function KWt(e,t){let n;try{n=await Promise.resolve(t),e._provider=n,e._ready=!0,e._readyEvent.raiseEvent(n)}catch(i){JWt(e._errorEvent,i)}}var kv=fR;var u_o=y(x(),1);function pR(){}pR.prototype.boundingVolume=void 0;pR.prototype.boundingSphere=void 0;pR.prototype.distanceToCamera=function(e){fe.throwInstantiationError()};pR.prototype.intersectPlane=function(e){fe.throwInstantiationError()};pR.prototype.createDebugVolume=function(e){fe.throwInstantiationError()};var Zne=pR;var b_o=y(x(),1);function Qv(e){e=e??Q.EMPTY_OBJECT,this._tilingScheme=l(e.tilingScheme)?e.tilingScheme:new zi({ellipsoid:e.ellipsoid}),this._color=e.color??U.YELLOW,this._errorEvent=new xe,this._tileWidth=e.tileWidth??256,this._tileHeight=e.tileHeight??256,this._defaultAlpha=void 0,this._defaultNightAlpha=void 0,this._defaultDayAlpha=void 0,this._defaultBrightness=void 0,this._defaultContrast=void 0,this._defaultHue=void 0,this._defaultSaturation=void 0,this._defaultGamma=void 0,this._defaultMinificationFilter=void 0,this._defaultMagnificationFilter=void 0}Object.defineProperties(Qv.prototype,{proxy:{get:function(){}},tileWidth:{get:function(){return this._tileWidth}},tileHeight:{get:function(){return this._tileHeight}},maximumLevel:{get:function(){}},minimumLevel:{get:function(){}},tilingScheme:{get:function(){return this._tilingScheme}},rectangle:{get:function(){return this._tilingScheme.rectangle}},tileDiscardPolicy:{get:function(){}},errorEvent:{get:function(){return this._errorEvent}},credit:{get:function(){}},hasAlphaChannel:{get:function(){return!0}}});Qv.prototype.getTileCredits=function(e,t,n){};Qv.prototype.requestImage=function(e,t,n,i){let o=document.createElement("canvas");o.width=256,o.height=256;let r=o.getContext("2d"),s=this._color.toCssColorString();return r.strokeStyle=s,r.lineWidth=2,r.strokeRect(1,1,255,255),r.font="bold 25px Arial",r.textAlign="center",r.fillStyle=s,r.fillText(`L: ${n}`,124,86),r.fillText(`X: ${e}`,124,136),r.fillText(`Y: ${t}`,124,186),Promise.resolve(o)};Qv.prototype.pickFeatures=function(e,t,n,i,o){};var Ov=Qv;var C_o=y(x(),1);function Rne(e){fe.throwInstantiationError()}Rne.prototype.isReady=fe.throwInstantiationError;Rne.prototype.shouldDiscardImage=fe.throwInstantiationError;var Vne=Rne;var E_o=y(x(),1),jWt={START:0,LOADING:1,READY:2,UPSAMPLED_ONLY:3},Gne=Object.freeze(jWt);var w_o=y(x(),1);function yz(e,t){this.show=!0,l(e)||(e=new nt),this.rectangle=nt.clone(e),l(t)||(t=Oi.fromType(Oi.ColorType,{color:new U(1,1,1,1)})),this.material=t,this._material=void 0,this._overlayCommand=void 0,this._rs=void 0}yz.prototype.update=function(e){if(!this.show)return;let t=this._rs;if((!l(t)||!nt.equals(t.viewport,this.rectangle))&&(this._rs=Qe.fromCache({blending:ln.ALPHA_BLEND,viewport:this.rectangle})),e.passes.render){let i=e.context;if(this._material!==this.material||!l(this._overlayCommand)){this._material=this.material,l(this._overlayCommand)&&this._overlayCommand.shaderProgram.destroy();let o=new ze({sources:[this._material.shaderSource,cY]});this._overlayCommand=i.createViewportQuadCommand(o,{renderState:this._rs,uniformMap:this._material._uniforms,owner:this}),this._overlayCommand.pass=Ge.OVERLAY}this._material.update(i),this._overlayCommand.renderState=this._rs,this._overlayCommand.uniformMap=this._material._uniforms,e.commandList.push(this._overlayCommand)}};yz.prototype.isDestroyed=function(){return!1};yz.prototype.destroy=function(){return l(this._overlayCommand)&&(this._overlayCommand.shaderProgram=this._overlayCommand.shaderProgram&&this._overlayCommand.shaderProgram.destroy()),he(this)};var Lne=yz;var X_o=y(x(),1);function Wne(){fe.throwInstantiationError()}Object.defineProperties(Wne.prototype,{globalTransform:{get:fe.throwInstantiationError},shapeTransform:{get:fe.throwInstantiationError},shape:{get:fe.throwInstantiationError},minBounds:{get:fe.throwInstantiationError},maxBounds:{get:fe.throwInstantiationError},dimensions:{get:fe.throwInstantiationError},paddingBefore:{get:fe.throwInstantiationError},paddingAfter:{get:fe.throwInstantiationError},names:{get:fe.throwInstantiationError},types:{get:fe.throwInstantiationError},componentTypes:{get:fe.throwInstantiationError},minimumValues:{get:fe.throwInstantiationError},maximumValues:{get:fe.throwInstantiationError},maximumTileCount:{get:fe.throwInstantiationError},availableLevels:{get:fe.throwInstantiationError},keyframeCount:{get:fe.throwInstantiationError},timeIntervalCollection:{get:fe.throwInstantiationError}});Wne.prototype.requestData=function(e){fe.throwInstantiationError()};var Fne=Wne;var v_o=y(x(),1);function Bb(){fe.throwInstantiationError()}Object.defineProperties(Bb.prototype,{orientedBoundingBox:{get:fe.throwInstantiationError},boundingSphere:{get:fe.throwInstantiationError},boundTransform:{get:fe.throwInstantiationError},shapeTransform:{get:fe.throwInstantiationError},shaderUniforms:{get:fe.throwInstantiationError},shaderDefines:{get:fe.throwInstantiationError},shaderMaximumIntersectionsLength:{get:fe.throwInstantiationError}});Bb.prototype.update=fe.throwInstantiationError;Bb.prototype.updateViewTransforms=fe.throwInstantiationError;Bb.prototype.convertLocalToShapeUvSpace=fe.throwInstantiationError;Bb.prototype.computeOrientedBoundingBoxForTile=fe.throwInstantiationError;Bb.prototype.computeOrientedBoundingBoxForSample=fe.throwInstantiationError;Bb.DefaultMinBounds=fe.throwInstantiationError;Bb.DefaultMaxBounds=fe.throwInstantiationError;var Bne=Bb;var D_o=y(x(),1),wne=`uniform sampler2D u_depthTexture;
in vec2 v_textureCoordinates;
void main()
{
float z_window = czm_unpackDepth(texture(u_depthTexture, v_textureCoordinates));
z_window = czm_reverseLogDepth(z_window);
float n_range = czm_depthRange.near;
float f_range = czm_depthRange.far;
float z_ndc = (2.0 * z_window - n_range - f_range) / (f_range - n_range);
float scale = pow(z_ndc * 0.5 + 0.5, 8.0);
out_FragColor = vec4(mix(vec3(0.0), vec3(1.0), scale), 1.0);
}
`;var j_o=y(x(),1);function qWt(e){e=e??Q.EMPTY_OBJECT,this.typedArray=e.typedArray,this.width=e.width,this.height=e.height,this.pixelFormat=e.pixelFormat??Ke.RGBA,this.pixelDatatype=e.pixelDatatype??Oe.UNSIGNED_BYTE;let t=e.url;typeof t=="string"&&(t=Le.createIfNeeded(t)),this.resource=t;let i=e.repeat??!0?gn.REPEAT:gn.CLAMP_TO_EDGE;this.sampler=new Ht({wrapS:i,wrapT:i,minificationFilter:e.minificationFilter,magnificationFilter:e.magnificationFilter,maximumAnisotropy:e.maximumAnisotropy})}var Nne=qWt;var $_o=y(x(),1),$Wt={FLOAT:"float",VEC2:"vec2",VEC3:"vec3",VEC4:"vec4",MAT2:"mat2",MAT3:"mat3",MAT4:"mat4"},Pne=Object.freeze($Wt);var tIo=y(x(),1),eFt={SIGX:"SIGX",SIGY:"SIGY",SIGZ:"SIGZ",VARX:"VARX",VARY:"VARY",VARZ:"VARZ",SIGR:"VARZ"},Xne=Object.freeze(eFt);var oIo=y(x(),1);function tFt(e){async function t({data:i}){let o=[],r={id:i.id,result:void 0,error:void 0};self.CESIUM_BASE_URL=i.baseUrl;try{let s=await e(i.parameters,o);r.result=s}catch(s){s instanceof Error?r.error={name:s.name,message:s.message,stack:s.stack}:r.error=s}i.canTransferArrayBuffer||(o.length=0);try{postMessage(r,o)}catch(s){r.result=void 0,r.error=`postMessage failed with error: ${yp(s)}
with responseMessage: ${JSON.stringify(r)}`,postMessage(r)}}function n(i){postMessage({id:i.data?.id,error:`postMessage failed with error: ${JSON.stringify(i)}`})}return self.onmessage=t,self.onmessageerror=n,self}var Yne=tFt;globalThis.CESIUM_VERSION="1.140.0";var dKo=y(x(),1);var vQo=y(x(),1);var PQo=y(x(),1);var RQo=y(x(),1),zv;typeof ko<"u"&&(zv=ko);(function(){/*!
* Knockout JavaScript library v3.5.1
* (c) The Knockout.js team - http://knockoutjs.com/
* License: MIT (http://www.opensource.org/licenses/mit-license.php)
*/(function(){(function(e){var t=this||(0,eval)("this"),n=t.document,i=t.navigator,o=t.jQuery,r=t.JSON;o||typeof jQuery>"u"||(o=jQuery),(function(s){s(t.ko={})})(function(s,a){function c(g,_){return g===null||typeof g in b?g===_:!1}function d(g,_){var Z;return function(){Z||(Z=f.a.setTimeout(function(){Z=e,g()},_))}}function u(g,_){var Z;return function(){clearTimeout(Z),Z=f.a.setTimeout(g,_)}}function h(g,_){_&&_!=="change"?_==="beforeChange"?this.pc(g):this.gb(g,_):this.qc(g)}function p(g,_){_!==null&&_.s&&_.s()}function A(g,_){var Z=this.qd,G=Z[I];G.ra||(this.Qb&&this.mb[_]?(Z.uc(_,g,this.mb[_]),this.mb[_]=null,--this.Qb):G.I[_]||Z.uc(_,g,G.J?{da:g}:Z.$c(g)),g.Ja&&g.gd())}var f=typeof s<"u"?s:{};f.b=function(g,_){for(var Z=g.split("."),G=f,w=0;w<Z.length-1;w++)G=G[Z[w]];G[Z[Z.length-1]]=_},f.L=function(g,_,Z){g[_]=Z},f.version="3.5.1",f.b("version",f.version),f.options={deferUpdates:!1,useOnlyNativeEvents:!1,foreachHidesDestroyed:!1},f.a=(function(){function g(z,j){for(var ee in z)w.call(z,ee)&&j(ee,z[ee])}function _(z,j){if(j)for(var ee in j)w.call(j,ee)&&(z[ee]=j[ee]);return z}function Z(z,j){return z.__proto__=j,z}function G(z,j,ee,ge){var ye=z[j].match(J)||[];f.a.D(ee.match(J),function(ae){f.a.Na(ye,ae,ge)}),z[j]=ye.join(" ")}var w=Object.prototype.hasOwnProperty,X={__proto__:[]}instanceof Array,k=typeof Symbol=="function",v={},D={};v[i&&/Firefox\/2/i.test(i.userAgent)?"KeyboardEvent":"UIEvents"]=["keyup","keydown","keypress"],v.MouseEvents="click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave".split(" "),g(v,function(z,j){if(j.length)for(var ee=0,ge=j.length;ee<ge;ee++)D[j[ee]]=z});var Y={propertychange:!0},O=n&&(function(){for(var z=3,j=n.createElement("div"),ee=j.getElementsByTagName("i");j.innerHTML="<!--[if gt IE "+ ++z+"]><i></i><![endif]-->",ee[0];);return 4<z?z:e})(),J=/\S+/g,te;return{Jc:["authenticity_token",/^__RequestVerificationToken(_.*)?$/],D:function(z,j,ee){for(var ge=0,ye=z.length;ge<ye;ge++)j.call(ee,z[ge],ge,z)},A:typeof Array.prototype.indexOf=="function"?function(z,j){return Array.prototype.indexOf.call(z,j)}:function(z,j){for(var ee=0,ge=z.length;ee<ge;ee++)if(z[ee]===j)return ee;return-1},Lb:function(z,j,ee){for(var ge=0,ye=z.length;ge<ye;ge++)if(j.call(ee,z[ge],ge,z))return z[ge];return e},Pa:function(z,j){var ee=f.a.A(z,j);0<ee?z.splice(ee,1):ee===0&&z.shift()},wc:function(z){var j=[];return z&&f.a.D(z,function(ee){0>f.a.A(j,ee)&&j.push(ee)}),j},Mb:function(z,j,ee){var ge=[];if(z)for(var ye=0,ae=z.length;ye<ae;ye++)ge.push(j.call(ee,z[ye],ye));return ge},jb:function(z,j,ee){var ge=[];if(z)for(var ye=0,ae=z.length;ye<ae;ye++)j.call(ee,z[ye],ye)&&ge.push(z[ye]);return ge},Nb:function(z,j){if(j instanceof Array)z.push.apply(z,j);else for(var ee=0,ge=j.length;ee<ge;ee++)z.push(j[ee]);return z},Na:function(z,j,ee){var ge=f.a.A(f.a.bc(z),j);0>ge?ee&&z.push(j):ee||z.splice(ge,1)},Ba:X,extend:_,setPrototypeOf:Z,Ab:X?Z:_,P:g,Ga:function(z,j,ee){if(!z)return z;var ge={},ye;for(ye in z)w.call(z,ye)&&(ge[ye]=j.call(ee,z[ye],ye,z));return ge},Tb:function(z){for(;z.firstChild;)f.removeNode(z.firstChild)},Yb:function(z){z=f.a.la(z);for(var j=(z[0]&&z[0].ownerDocument||n).createElement("div"),ee=0,ge=z.length;ee<ge;ee++)j.appendChild(f.oa(z[ee]));return j},Ca:function(z,j){for(var ee=0,ge=z.length,ye=[];ee<ge;ee++){var ae=z[ee].cloneNode(!0);ye.push(j?f.oa(ae):ae)}return ye},va:function(z,j){if(f.a.Tb(z),j)for(var ee=0,ge=j.length;ee<ge;ee++)z.appendChild(j[ee])},Xc:function(z,j){var ee=z.nodeType?[z]:z;if(0<ee.length){for(var ge=ee[0],ye=ge.parentNode,ae=0,Ce=j.length;ae<Ce;ae++)ye.insertBefore(j[ae],ge);for(ae=0,Ce=ee.length;ae<Ce;ae++)f.removeNode(ee[ae])}},Ua:function(z,j){if(z.length){for(j=j.nodeType===8&&j.parentNode||j;z.length&&z[0].parentNode!==j;)z.splice(0,1);for(;1<z.length&&z[z.length-1].parentNode!==j;)z.length--;if(1<z.length){var ee=z[0],ge=z[z.length-1];for(z.length=0;ee!==ge;)z.push(ee),ee=ee.nextSibling;z.push(ge)}}return z},Zc:function(z,j){7>O?z.setAttribute("selected",j):z.selected=j},Db:function(z){return z===null||z===e?"":z.trim?z.trim():z.toString().replace(/^[\s\xa0]+|[\s\xa0]+$/g,"")},Ud:function(z,j){return z=z||"",j.length>z.length?!1:z.substring(0,j.length)===j},vd:function(z,j){if(z===j)return!0;if(z.nodeType===11)return!1;if(j.contains)return j.contains(z.nodeType!==1?z.parentNode:z);if(j.compareDocumentPosition)return(j.compareDocumentPosition(z)&16)==16;for(;z&&z!=j;)z=z.parentNode;return!!z},Sb:function(z){return f.a.vd(z,z.ownerDocument.documentElement)},kd:function(z){return!!f.a.Lb(z,f.a.Sb)},R:function(z){return z&&z.tagName&&z.tagName.toLowerCase()},Ac:function(z){return f.onError?function(){try{return z.apply(this,arguments)}catch(j){throw f.onError&&f.onError(j),j}}:z},setTimeout:function(z,j){return setTimeout(f.a.Ac(z),j)},Gc:function(z){setTimeout(function(){throw f.onError&&f.onError(z),z},0)},B:function(z,j,ee){var ge=f.a.Ac(ee);if(ee=Y[j],f.options.useOnlyNativeEvents||ee||!o)if(ee||typeof z.addEventListener!="function")if(typeof z.attachEvent<"u"){var ye=function(Ce){ge.call(z,Ce)},ae="on"+j;z.attachEvent(ae,ye),f.a.K.za(z,function(){z.detachEvent(ae,ye)})}else throw Error("Browser doesn't support addEventListener or attachEvent");else z.addEventListener(j,ge,!1);else te||(te=typeof o(z).on=="function"?"on":"bind"),o(z)[te](j,ge)},Fb:function(z,j){if(!z||!z.nodeType)throw Error("element must be a DOM node when calling triggerEvent");var ee;if(f.a.R(z)==="input"&&z.type&&j.toLowerCase()=="click"?(ee=z.type,ee=ee=="checkbox"||ee=="radio"):ee=!1,f.options.useOnlyNativeEvents||!o||ee)if(typeof n.createEvent=="function")if(typeof z.dispatchEvent=="function")ee=n.createEvent(D[j]||"HTMLEvents"),ee.initEvent(j,!0,!0,t,0,0,0,0,0,!1,!1,!1,!1,0,z),z.dispatchEvent(ee);else throw Error("The supplied element doesn't support dispatchEvent");else if(ee&&z.click)z.click();else if(typeof z.fireEvent<"u")z.fireEvent("on"+j);else throw Error("Browser doesn't support triggering events");else o(z).trigger(j)},f:function(z){return f.O(z)?z():z},bc:function(z){return f.O(z)?z.v():z},Eb:function(z,j,ee){var ge;j&&(typeof z.classList=="object"?(ge=z.classList[ee?"add":"remove"],f.a.D(j.match(J),function(ye){ge.call(z.classList,ye)})):typeof z.className.baseVal=="string"?G(z.className,"baseVal",j,ee):G(z,"className",j,ee))},Bb:function(z,j){var ee=f.a.f(j);(ee===null||ee===e)&&(ee="");var ge=f.h.firstChild(z);!ge||ge.nodeType!=3||f.h.nextSibling(ge)?f.h.va(z,[z.ownerDocument.createTextNode(ee)]):ge.data=ee,f.a.Ad(z)},Yc:function(z,j){if(z.name=j,7>=O)try{var ee=z.name.replace(/[&<>'"]/g,function(ge){return"&#"+ge.charCodeAt(0)+";"});z.mergeAttributes(n.createElement("<input name='"+ee+"'/>"),!1)}catch{}},Ad:function(z){9<=O&&(z=z.nodeType==1?z:z.parentNode,z.style&&(z.style.zoom=z.style.zoom))},wd:function(z){if(O){var j=z.style.width;z.style.width=0,z.style.width=j}},Pd:function(z,j){z=f.a.f(z),j=f.a.f(j);for(var ee=[],ge=z;ge<=j;ge++)ee.push(ge);return ee},la:function(z){for(var j=[],ee=0,ge=z.length;ee<ge;ee++)j.push(z[ee]);return j},Da:function(z){return k?Symbol(z):z},Zd:O===6,$d:O===7,W:O,Lc:function(z,j){for(var ee=f.a.la(z.getElementsByTagName("input")).concat(f.a.la(z.getElementsByTagName("textarea"))),ge=typeof j=="string"?function(Ce){return Ce.name===j}:function(Ce){return j.test(Ce.name)},ye=[],ae=ee.length-1;0<=ae;ae--)ge(ee[ae])&&ye.push(ee[ae]);return ye},Nd:function(z){return typeof z=="string"&&(z=f.a.Db(z))?r&&r.parse?r.parse(z):new Function("return "+z)():null},hc:function(z,j,ee){if(!r||!r.stringify)throw Error("Cannot find JSON.stringify(). Some browsers (e.g., IE < 8) don't support it natively, but you can overcome this by adding a script reference to json2.js, downloadable from http://www.json.org/json2.js");return r.stringify(f.a.f(z),j,ee)},Od:function(z,j,ee){ee=ee||{};var ge=ee.params||{},ye=ee.includeFields||this.Jc,ae=z;if(typeof z=="object"&&f.a.R(z)==="form")for(var ae=z.action,Ce=ye.length-1;0<=Ce;Ce--)for(var Te=f.a.Lc(z,ye[Ce]),Fe=Te.length-1;0<=Fe;Fe--)ge[Te[Fe].name]=Te[Fe].value;j=f.a.f(j);var Ne=n.createElement("form");Ne.style.display="none",Ne.action=ae,Ne.method="post";for(var Pe in j)z=n.createElement("input"),z.type="hidden",z.name=Pe,z.value=f.a.hc(f.a.f(j[Pe])),Ne.appendChild(z);g(ge,function(Xe,st){var Ye=n.createElement("input");Ye.type="hidden",Ye.name=Xe,Ye.value=st,Ne.appendChild(Ye)}),n.body.appendChild(Ne),ee.submitter?ee.submitter(Ne):Ne.submit(),setTimeout(function(){Ne.parentNode.removeChild(Ne)},0)}}})(),f.b("utils",f.a),f.b("utils.arrayForEach",f.a.D),f.b("utils.arrayFirst",f.a.Lb),f.b("utils.arrayFilter",f.a.jb),f.b("utils.arrayGetDistinctValues",f.a.wc),f.b("utils.arrayIndexOf",f.a.A),f.b("utils.arrayMap",f.a.Mb),f.b("utils.arrayPushAll",f.a.Nb),f.b("utils.arrayRemoveItem",f.a.Pa),f.b("utils.cloneNodes",f.a.Ca),f.b("utils.createSymbolOrString",f.a.Da),f.b("utils.extend",f.a.extend),f.b("utils.fieldsIncludedWithJsonPost",f.a.Jc),f.b("utils.getFormFields",f.a.Lc),f.b("utils.objectMap",f.a.Ga),f.b("utils.peekObservable",f.a.bc),f.b("utils.postJson",f.a.Od),f.b("utils.parseJson",f.a.Nd),f.b("utils.registerEventHandler",f.a.B),f.b("utils.stringifyJson",f.a.hc),f.b("utils.range",f.a.Pd),f.b("utils.toggleDomNodeCssClass",f.a.Eb),f.b("utils.triggerEvent",f.a.Fb),f.b("utils.unwrapObservable",f.a.f),f.b("utils.objectForEach",f.a.P),f.b("utils.addOrRemoveItem",f.a.Na),f.b("utils.setTextContent",f.a.Bb),f.b("unwrap",f.a.f),Function.prototype.bind||(Function.prototype.bind=function(g){var _=this;if(arguments.length===1)return function(){return _.apply(g,arguments)};var Z=Array.prototype.slice.call(arguments,1);return function(){var G=Z.slice(0);return G.push.apply(G,arguments),_.apply(g,G)}}),f.a.g=new function(){var g=0,_="__ko__"+new Date().getTime(),Z={},G,w;return f.a.W?(G=function(X,k){var v=X[_];if(!v||v==="null"||!Z[v]){if(!k)return e;v=X[_]="ko"+g++,Z[v]={}}return Z[v]},w=function(X){var k=X[_];return k?(delete Z[k],X[_]=null,!0):!1}):(G=function(X,k){var v=X[_];return!v&&k&&(v=X[_]={}),v},w=function(X){return X[_]?(delete X[_],!0):!1}),{get:function(X,k){var v=G(X,!1);return v&&v[k]},set:function(X,k,v){(X=G(X,v!==e))&&(X[k]=v)},Ub:function(X,k,v){return X=G(X,!0),X[k]||(X[k]=v)},clear:w,Z:function(){return g+++_}}},f.b("utils.domData",f.a.g),f.b("utils.domData.clear",f.a.g.clear),f.a.K=new function(){function g(k,v){var D=f.a.g.get(k,G);return D===e&&v&&(D=[],f.a.g.set(k,G,D)),D}function _(k){var v=g(k,!1);if(v)for(var v=v.slice(0),D=0;D<v.length;D++)v[D](k);f.a.g.clear(k),f.a.K.cleanExternalData(k),X[k.nodeType]&&Z(k.childNodes,!0)}function Z(k,v){for(var D=[],Y,O=0;O<k.length;O++)if((!v||k[O].nodeType===8)&&(_(D[D.length]=Y=k[O]),k[O]!==Y))for(;O--&&f.a.A(D,k[O])==-1;);}var G=f.a.g.Z(),w={1:!0,8:!0,9:!0},X={1:!0,9:!0};return{za:function(k,v){if(typeof v!="function")throw Error("Callback must be a function");g(k,!0).push(v)},yb:function(k,v){var D=g(k,!1);D&&(f.a.Pa(D,v),D.length==0&&f.a.g.set(k,G,e))},oa:function(k){return f.u.G(function(){w[k.nodeType]&&(_(k),X[k.nodeType]&&Z(k.getElementsByTagName("*")))}),k},removeNode:function(k){f.oa(k),k.parentNode&&k.parentNode.removeChild(k)},cleanExternalData:function(k){o&&typeof o.cleanData=="function"&&o.cleanData([k])}}},f.oa=f.a.K.oa,f.removeNode=f.a.K.removeNode,f.b("cleanNode",f.oa),f.b("removeNode",f.removeNode),f.b("utils.domNodeDisposal",f.a.K),f.b("utils.domNodeDisposal.addDisposeCallback",f.a.K.za),f.b("utils.domNodeDisposal.removeDisposeCallback",f.a.K.yb),(function(){var g=[0,"",""],_=[1,"<table>","</table>"],Z=[3,"<table><tbody><tr>","</tr></tbody></table>"],G=[1,"<select multiple='multiple'>","</select>"],w={thead:_,tbody:_,tfoot:_,tr:[2,"<table><tbody>","</tbody></table>"],td:Z,th:Z,option:G,optgroup:G},X=8>=f.a.W;f.a.ua=function(k,v){var D;if(o){if(o.parseHTML)D=o.parseHTML(k,v)||[];else if((D=o.clean([k],v))&&D[0]){for(var Y=D[0];Y.parentNode&&Y.parentNode.nodeType!==11;)Y=Y.parentNode;Y.parentNode&&Y.parentNode.removeChild(Y)}}else{(D=v)||(D=n);var Y=D.parentWindow||D.defaultView||t,O=f.a.Db(k).toLowerCase(),J=D.createElement("div"),te;for(te=(O=O.match(/^(?:\x3c!--.*?--\x3e\s*?)*?<([a-z]+)[\s>]/))&&w[O[1]]||g,O=te[0],te="ignored<div>"+te[1]+k+te[2]+"</div>",typeof Y.innerShiv=="function"?J.appendChild(Y.innerShiv(te)):(X&&D.body.appendChild(J),J.innerHTML=te,X&&J.parentNode.removeChild(J));O--;)J=J.lastChild;D=f.a.la(J.lastChild.childNodes)}return D},f.a.Md=function(k,v){var D=f.a.ua(k,v);return D.length&&D[0].parentElement||f.a.Yb(D)},f.a.fc=function(k,v){if(f.a.Tb(k),v=f.a.f(v),v!==null&&v!==e)if(typeof v!="string"&&(v=v.toString()),o)o(k).html(v);else for(var D=f.a.ua(v,k.ownerDocument),Y=0;Y<D.length;Y++)k.appendChild(D[Y])}})(),f.b("utils.parseHtmlFragment",f.a.ua),f.b("utils.setHtml",f.a.fc),f.aa=(function(){function g(Z,G){if(Z){if(Z.nodeType==8){var w=f.aa.Uc(Z.nodeValue);w!=null&&G.push({ud:Z,Kd:w})}else if(Z.nodeType==1)for(var w=0,X=Z.childNodes,k=X.length;w<k;w++)g(X[w],G)}}var _={};return{Xb:function(Z){if(typeof Z!="function")throw Error("You can only pass a function to ko.memoization.memoize()");var G=(4294967296*(1+Math.random())|0).toString(16).substring(1)+(4294967296*(1+Math.random())|0).toString(16).substring(1);return _[G]=Z,"<!--[ko_memo:"+G+"]-->"},bd:function(Z,G){var w=_[Z];if(w===e)throw Error("Couldn't find any memo with ID "+Z+". Perhaps it's already been unmemoized.");try{return w.apply(null,G||[]),!0}finally{delete _[Z]}},cd:function(Z,G){var w=[];g(Z,w);for(var X=0,k=w.length;X<k;X++){var v=w[X].ud,D=[v];G&&f.a.Nb(D,G),f.aa.bd(w[X].Kd,D),v.nodeValue="",v.parentNode&&v.parentNode.removeChild(v)}},Uc:function(Z){return(Z=Z.match(/^\[ko_memo\:(.*?)\]$/))?Z[1]:null}}})(),f.b("memoization",f.aa),f.b("memoization.memoize",f.aa.Xb),f.b("memoization.unmemoize",f.aa.bd),f.b("memoization.parseMemoText",f.aa.Uc),f.b("memoization.unmemoizeDomNodeAndDescendants",f.aa.cd),f.na=(function(){function g(){if(w){for(var v=w,D=0,Y;k<w;)if(Y=G[k++]){if(k>v){if(5e3<=++D){k=w,f.a.Gc(Error("'Too much recursion' after processing "+D+" task groups."));break}v=w}try{Y()}catch(O){f.a.Gc(O)}}}}function _(){g(),k=w=G.length=0}var Z,G=[],w=0,X=1,k=0;return t.MutationObserver?Z=(function(v){var D=n.createElement("div");return new MutationObserver(v).observe(D,{attributes:!0}),function(){D.classList.toggle("foo")}})(_):Z=n&&"onreadystatechange"in n.createElement("script")?function(v){var D=n.createElement("script");D.onreadystatechange=function(){D.onreadystatechange=null,n.documentElement.removeChild(D),D=null,v()},n.documentElement.appendChild(D)}:function(v){setTimeout(v,0)},{scheduler:Z,zb:function(v){return w||f.na.scheduler(_),G[w++]=v,X++},cancel:function(v){v=v-(X-w),v>=k&&v<w&&(G[v]=null)},resetForTesting:function(){var v=w-k;return k=w=G.length=0,v},Sd:g}})(),f.b("tasks",f.na),f.b("tasks.schedule",f.na.zb),f.b("tasks.runEarly",f.na.Sd),f.Ta={throttle:function(g,_){g.throttleEvaluation=_;var Z=null;return f.$({read:g,write:function(G){clearTimeout(Z),Z=f.a.setTimeout(function(){g(G)},_)}})},rateLimit:function(g,_){var Z,G,w;typeof _=="number"?Z=_:(Z=_.timeout,G=_.method),g.Hb=!1,w=typeof G=="function"?G:G=="notifyWhenChangesStop"?u:d,g.ub(function(X){return w(X,Z,_)})},deferred:function(g,_){if(_!==!0)throw Error("The 'deferred' extender only accepts the value 'true', because it is not supported to turn deferral off once enabled.");g.Hb||(g.Hb=!0,g.ub(function(Z){var G,w=!1;return function(){if(!w){f.na.cancel(G),G=f.na.zb(Z);try{w=!0,g.notifySubscribers(e,"dirty")}finally{w=!1}}}}))},notify:function(g,_){g.equalityComparer=_=="always"?null:c}};var b={undefined:1,boolean:1,number:1,string:1};f.b("extenders",f.Ta),f.ic=function(g,_,Z){this.da=g,this.lc=_,this.mc=Z,this.Ib=!1,this.fb=this.Jb=null,f.L(this,"dispose",this.s),f.L(this,"disposeWhenNodeIsRemoved",this.l)},f.ic.prototype.s=function(){this.Ib||(this.fb&&f.a.K.yb(this.Jb,this.fb),this.Ib=!0,this.mc(),this.da=this.lc=this.mc=this.Jb=this.fb=null)},f.ic.prototype.l=function(g){this.Jb=g,f.a.K.za(g,this.fb=this.s.bind(this))},f.T=function(){f.a.Ab(this,C),C.qb(this)};var C={qb:function(g){g.U={change:[]},g.sc=1},subscribe:function(g,_,Z){var G=this;Z=Z||"change";var w=new f.ic(G,_?g.bind(_):g,function(){f.a.Pa(G.U[Z],w),G.hb&&G.hb(Z)});return G.Qa&&G.Qa(Z),G.U[Z]||(G.U[Z]=[]),G.U[Z].push(w),w},notifySubscribers:function(g,_){if(_=_||"change",_==="change"&&this.Gb(),this.Wa(_)){var Z=_==="change"&&this.ed||this.U[_].slice(0);try{f.u.xc();for(var G=0,w;w=Z[G];++G)w.Ib||w.lc(g)}finally{f.u.end()}}},ob:function(){return this.sc},Dd:function(g){return this.ob()!==g},Gb:function(){++this.sc},ub:function(g){var _=this,Z=f.O(_),G,w,X,k,v;_.gb||(_.gb=_.notifySubscribers,_.notifySubscribers=h);var D=g(function(){_.Ja=!1,Z&&k===_&&(k=_.nc?_.nc():_());var Y=w||v&&_.sb(X,k);v=w=G=!1,Y&&_.gb(X=k)});_.qc=function(Y,O){O&&_.Ja||(v=!O),_.ed=_.U.change.slice(0),_.Ja=G=!0,k=Y,D()},_.pc=function(Y){G||(X=Y,_.gb(Y,"beforeChange"))},_.rc=function(){v=!0},_.gd=function(){_.sb(X,_.v(!0))&&(w=!0)}},Wa:function(g){return this.U[g]&&this.U[g].length},Bd:function(g){if(g)return this.U[g]&&this.U[g].length||0;var _=0;return f.a.P(this.U,function(Z,G){Z!=="dirty"&&(_+=G.length)}),_},sb:function(g,_){return!this.equalityComparer||!this.equalityComparer(g,_)},toString:function(){return"[object Object]"},extend:function(g){var _=this;return g&&f.a.P(g,function(Z,G){var w=f.Ta[Z];typeof w=="function"&&(_=w(_,G)||_)}),_}};f.L(C,"init",C.qb),f.L(C,"subscribe",C.subscribe),f.L(C,"extend",C.extend),f.L(C,"getSubscriptionsCount",C.Bd),f.a.Ba&&f.a.setPrototypeOf(C,Function.prototype),f.T.fn=C,f.Qc=function(g){return g!=null&&typeof g.subscribe=="function"&&typeof g.notifySubscribers=="function"},f.b("subscribable",f.T),f.b("isSubscribable",f.Qc),f.S=f.u=(function(){function g(X){Z.push(G),G=X}function _(){G=Z.pop()}var Z=[],G,w=0;return{xc:g,end:_,cc:function(X){if(G){if(!f.Qc(X))throw Error("Only subscribable things can act as dependencies");G.od.call(G.pd,X,X.fd||(X.fd=++w))}},G:function(X,k,v){try{return g(),X.apply(k,v||[])}finally{_()}},qa:function(){if(G)return G.o.qa()},Va:function(){if(G)return G.o.Va()},Ya:function(){if(G)return G.Ya},o:function(){if(G)return G.o}}})(),f.b("computedContext",f.S),f.b("computedContext.getDependenciesCount",f.S.qa),f.b("computedContext.getDependencies",f.S.Va),f.b("computedContext.isInitial",f.S.Ya),f.b("computedContext.registerDependency",f.S.cc),f.b("ignoreDependencies",f.Yd=f.u.G);var T=f.a.Da("_latestValue");f.ta=function(g){function _(){return 0<arguments.length?(_.sb(_[T],arguments[0])&&(_.ya(),_[T]=arguments[0],_.xa()),this):(f.u.cc(_),_[T])}return _[T]=g,f.a.Ba||f.a.extend(_,f.T.fn),f.T.fn.qb(_),f.a.Ab(_,E),f.options.deferUpdates&&f.Ta.deferred(_,!0),_};var E={equalityComparer:c,v:function(){return this[T]},xa:function(){this.notifySubscribers(this[T],"spectate"),this.notifySubscribers(this[T])},ya:function(){this.notifySubscribers(this[T],"beforeChange")}};f.a.Ba&&f.a.setPrototypeOf(E,f.T.fn);var S=f.ta.Ma="__ko_proto__";E[S]=f.ta,f.O=function(g){if((g=typeof g=="function"&&g[S])&&g!==E[S]&&g!==f.o.fn[S])throw Error("Invalid object that looks like an observable; possibly from another Knockout instance");return!!g},f.Za=function(g){return typeof g=="function"&&(g[S]===E[S]||g[S]===f.o.fn[S]&&g.Nc)},f.b("observable",f.ta),f.b("isObservable",f.O),f.b("isWriteableObservable",f.Za),f.b("isWritableObservable",f.Za),f.b("observable.fn",E),f.L(E,"peek",E.v),f.L(E,"valueHasMutated",E.xa),f.L(E,"valueWillMutate",E.ya),f.Ha=function(g){if(g=g||[],typeof g!="object"||!("length"in g))throw Error("The argument passed when initializing an observable array must be an array, or null, or undefined.");return g=f.ta(g),f.a.Ab(g,f.Ha.fn),g.extend({trackArrayChanges:!0})},f.Ha.fn={remove:function(g){for(var _=this.v(),Z=[],G=typeof g!="function"||f.O(g)?function(k){return k===g}:g,w=0;w<_.length;w++){var X=_[w];if(G(X)){if(Z.length===0&&this.ya(),_[w]!==X)throw Error("Array modified during remove; cannot remove item");Z.push(X),_.splice(w,1),w--}}return Z.length&&this.xa(),Z},removeAll:function(g){if(g===e){var _=this.v(),Z=_.slice(0);return this.ya(),_.splice(0,_.length),this.xa(),Z}return g?this.remove(function(G){return 0<=f.a.A(g,G)}):[]},destroy:function(g){var _=this.v(),Z=typeof g!="function"||f.O(g)?function(X){return X===g}:g;this.ya();for(var G=_.length-1;0<=G;G--){var w=_[G];Z(w)&&(w._destroy=!0)}this.xa()},destroyAll:function(g){return g===e?this.destroy(function(){return!0}):g?this.destroy(function(_){return 0<=f.a.A(g,_)}):[]},indexOf:function(g){var _=this();return f.a.A(_,g)},replace:function(g,_){var Z=this.indexOf(g);0<=Z&&(this.ya(),this.v()[Z]=_,this.xa())},sorted:function(g){var _=this().slice(0);return g?_.sort(g):_.sort()},reversed:function(){return this().slice(0).reverse()}},f.a.Ba&&f.a.setPrototypeOf(f.Ha.fn,f.ta.fn),f.a.D("pop push reverse shift sort splice unshift".split(" "),function(g){f.Ha.fn[g]=function(){var _=this.v();this.ya(),this.zc(_,g,arguments);var Z=_[g].apply(_,arguments);return this.xa(),Z===_?this:Z}}),f.a.D(["slice"],function(g){f.Ha.fn[g]=function(){var _=this();return _[g].apply(_,arguments)}}),f.Pc=function(g){return f.O(g)&&typeof g.remove=="function"&&typeof g.push=="function"},f.b("observableArray",f.Ha),f.b("isObservableArray",f.Pc),f.Ta.trackArrayChanges=function(g,_){function Z(){function J(){if(v){var te=[].concat(g.v()||[]),z;g.Wa("arrayChange")&&((!w||1<v)&&(w=f.a.Pb(D,te,g.Ob)),z=w),D=te,w=null,v=0,z&&z.length&&g.notifySubscribers(z,"arrayChange")}}G?J():(G=!0,k=g.subscribe(function(){++v},null,"spectate"),D=[].concat(g.v()||[]),w=null,X=g.subscribe(J))}if(g.Ob={},_&&typeof _=="object"&&f.a.extend(g.Ob,_),g.Ob.sparse=!0,!g.zc){var G=!1,w=null,X,k,v=0,D,Y=g.Qa,O=g.hb;g.Qa=function(J){Y&&Y.call(g,J),J==="arrayChange"&&Z()},g.hb=function(J){O&&O.call(g,J),J!=="arrayChange"||g.Wa("arrayChange")||(X&&X.s(),k&&k.s(),k=X=null,G=!1,D=e)},g.zc=function(J,te,z){function j(Ne,Pe,Xe){return ee[ee.length]={status:Ne,value:Pe,index:Xe}}if(G&&!v){var ee=[],ge=J.length,ye=z.length,ae=0;switch(te){case"push":ae=ge;case"unshift":for(te=0;te<ye;te++)j("added",z[te],ae+te);break;case"pop":ae=ge-1;case"shift":ge&&j("deleted",J[ae],ae);break;case"splice":te=Math.min(Math.max(0,0>z[0]?ge+z[0]:z[0]),ge);for(var ge=ye===1?ge:Math.min(te+(z[1]||0),ge),ye=te+ye-2,ae=Math.max(ge,ye),Ce=[],Te=[],Fe=2;te<ae;++te,++Fe)te<ge&&Te.push(j("deleted",J[te],te)),te<ye&&Ce.push(j("added",z[Fe],te));f.a.Kc(Te,Ce);break;default:return}w=ee}}}};var I=f.a.Da("_state");f.o=f.$=function(g,_,Z){function G(){if(0<arguments.length){if(typeof w=="function")w.apply(X.nb,arguments);else throw Error("Cannot write a value to a ko.computed unless you specify a 'write' option. If you wish to read the current value, don't pass any parameters.");return this}return X.ra||f.u.cc(G),(X.ka||X.J&&G.Xa())&&G.ha(),X.X}if(typeof g=="object"?Z=g:(Z=Z||{},g&&(Z.read=g)),typeof Z.read!="function")throw Error("Pass a function that returns the value of the ko.computed");var w=Z.write,X={X:e,sa:!0,ka:!0,rb:!1,jc:!1,ra:!1,wb:!1,J:!1,Wc:Z.read,nb:_||Z.owner,l:Z.disposeWhenNodeIsRemoved||Z.l||null,Sa:Z.disposeWhen||Z.Sa,Rb:null,I:{},V:0,Ic:null};return G[I]=X,G.Nc=typeof w=="function",f.a.Ba||f.a.extend(G,f.T.fn),f.T.fn.qb(G),f.a.Ab(G,R),Z.pure?(X.wb=!0,X.J=!0,f.a.extend(G,V)):Z.deferEvaluation&&f.a.extend(G,W),f.options.deferUpdates&&f.Ta.deferred(G,!0),X.l&&(X.jc=!0,X.l.nodeType||(X.l=null)),X.J||Z.deferEvaluation||G.ha(),X.l&&G.ja()&&f.a.K.za(X.l,X.Rb=function(){G.s()}),G};var R={equalityComparer:c,qa:function(){return this[I].V},Va:function(){var g=[];return f.a.P(this[I].I,function(_,Z){g[Z.Ka]=Z.da}),g},Vb:function(g){if(!this[I].V)return!1;var _=this.Va();return f.a.A(_,g)!==-1?!0:!!f.a.Lb(_,function(Z){return Z.Vb&&Z.Vb(g)})},uc:function(g,_,Z){if(this[I].wb&&_===this)throw Error("A 'pure' computed must not be called recursively");this[I].I[g]=Z,Z.Ka=this[I].V++,Z.La=_.ob()},Xa:function(){var g,_,Z=this[I].I;for(g in Z)if(Object.prototype.hasOwnProperty.call(Z,g)&&(_=Z[g],this.Ia&&_.da.Ja||_.da.Dd(_.La)))return!0},Jd:function(){this.Ia&&!this[I].rb&&this.Ia(!1)},ja:function(){var g=this[I];return g.ka||0<g.V},Rd:function(){this.Ja?this[I].ka&&(this[I].sa=!0):this.Hc()},$c:function(g){if(g.Hb){var _=g.subscribe(this.Jd,this,"dirty"),Z=g.subscribe(this.Rd,this);return{da:g,s:function(){_.s(),Z.s()}}}return g.subscribe(this.Hc,this)},Hc:function(){var g=this,_=g.throttleEvaluation;_&&0<=_?(clearTimeout(this[I].Ic),this[I].Ic=f.a.setTimeout(function(){g.ha(!0)},_)):g.Ia?g.Ia(!0):g.ha(!0)},ha:function(g){var _=this[I],Z=_.Sa,G=!1;if(!_.rb&&!_.ra){if(_.l&&!f.a.Sb(_.l)||Z&&Z()){if(!_.jc){this.s();return}}else _.jc=!1;_.rb=!0;try{G=this.zd(g)}finally{_.rb=!1}return G}},zd:function(g){var _=this[I],G=!1,Z=_.wb?e:!_.V,G={qd:this,mb:_.I,Qb:_.V};f.u.xc({pd:G,od:A,o:this,Ya:Z}),_.I={},_.V=0;var w=this.yd(_,G);return _.V?G=this.sb(_.X,w):(this.s(),G=!0),G&&(_.J?this.Gb():this.notifySubscribers(_.X,"beforeChange"),_.X=w,this.notifySubscribers(_.X,"spectate"),!_.J&&g&&this.notifySubscribers(_.X),this.rc&&this.rc()),Z&&this.notifySubscribers(_.X,"awake"),G},yd:function(g,_){try{var Z=g.Wc;return g.nb?Z.call(g.nb):Z()}finally{f.u.end(),_.Qb&&!g.J&&f.a.P(_.mb,p),g.sa=g.ka=!1}},v:function(g){var _=this[I];return(_.ka&&(g||!_.V)||_.J&&this.Xa())&&this.ha(),_.X},ub:function(g){f.T.fn.ub.call(this,g),this.nc=function(){return this[I].J||(this[I].sa?this.ha():this[I].ka=!1),this[I].X},this.Ia=function(_){this.pc(this[I].X),this[I].ka=!0,_&&(this[I].sa=!0),this.qc(this,!_)}},s:function(){var g=this[I];!g.J&&g.I&&f.a.P(g.I,function(_,Z){Z.s&&Z.s()}),g.l&&g.Rb&&f.a.K.yb(g.l,g.Rb),g.I=e,g.V=0,g.ra=!0,g.sa=!1,g.ka=!1,g.J=!1,g.l=e,g.Sa=e,g.Wc=e,this.Nc||(g.nb=e)}},V={Qa:function(g){var _=this,Z=_[I];if(!Z.ra&&Z.J&&g=="change"){if(Z.J=!1,Z.sa||_.Xa())Z.I=null,Z.V=0,_.ha()&&_.Gb();else{var G=[];f.a.P(Z.I,function(w,X){G[X.Ka]=w}),f.a.D(G,function(w,X){var k=Z.I[w],v=_.$c(k.da);v.Ka=X,v.La=k.La,Z.I[w]=v}),_.Xa()&&_.ha()&&_.Gb()}Z.ra||_.notifySubscribers(Z.X,"awake")}},hb:function(g){var _=this[I];_.ra||g!="change"||this.Wa("change")||(f.a.P(_.I,function(Z,G){G.s&&(_.I[Z]={da:G.da,Ka:G.Ka,La:G.La},G.s())}),_.J=!0,this.notifySubscribers(e,"asleep"))},ob:function(){var g=this[I];return g.J&&(g.sa||this.Xa())&&this.ha(),f.T.fn.ob.call(this)}},W={Qa:function(g){g!="change"&&g!="beforeChange"||this.v()}};f.a.Ba&&f.a.setPrototypeOf(R,f.T.fn);var B=f.ta.Ma;R[B]=f.o,f.Oc=function(g){return typeof g=="function"&&g[B]===R[B]},f.Fd=function(g){return f.Oc(g)&&g[I]&&g[I].wb},f.b("computed",f.o),f.b("dependentObservable",f.o),f.b("isComputed",f.Oc),f.b("isPureComputed",f.Fd),f.b("computed.fn",R),f.L(R,"peek",R.v),f.L(R,"dispose",R.s),f.L(R,"isActive",R.ja),f.L(R,"getDependenciesCount",R.qa),f.L(R,"getDependencies",R.Va),f.xb=function(g,_){return typeof g=="function"?f.o(g,_,{pure:!0}):(g=f.a.extend({},g),g.pure=!0,f.o(g,_))},f.b("pureComputed",f.xb),(function(){function g(G,w,X){if(X=X||new Z,G=w(G),typeof G!="object"||G===null||G===e||G instanceof RegExp||G instanceof Date||G instanceof String||G instanceof Number||G instanceof Boolean)return G;var k=G instanceof Array?[]:{};return X.save(G,k),_(G,function(v){var D=w(G[v]);switch(typeof D){case"boolean":case"number":case"string":case"function":k[v]=D;break;case"object":case"undefined":var Y=X.get(D);k[v]=Y!==e?Y:g(D,w,X)}}),k}function _(G,w){if(G instanceof Array){for(var X=0;X<G.length;X++)w(X);typeof G.toJSON=="function"&&w("toJSON")}else for(X in G)w(X)}function Z(){this.keys=[],this.values=[]}f.ad=function(G){if(arguments.length==0)throw Error("When calling ko.toJS, pass the object you want to convert.");return g(G,function(w){for(var X=0;f.O(w)&&10>X;X++)w=w();return w})},f.toJSON=function(G,w,X){return G=f.ad(G),f.a.hc(G,w,X)},Z.prototype={constructor:Z,save:function(G,w){var X=f.a.A(this.keys,G);0<=X?this.values[X]=w:(this.keys.push(G),this.values.push(w))},get:function(G){return G=f.a.A(this.keys,G),0<=G?this.values[G]:e}}})(),f.b("toJS",f.ad),f.b("toJSON",f.toJSON),f.Wd=function(g,_,Z){function G(w){var X=f.xb(g,Z).extend({ma:"always"}),k=X.subscribe(function(v){v&&(k.s(),w(v))});return X.notifySubscribers(X.v()),k}return typeof Promise!="function"||_?G(_.bind(Z)):new Promise(G)},f.b("when",f.Wd),(function(){f.w={M:function(g){switch(f.a.R(g)){case"option":return g.__ko__hasDomDataOptionValue__===!0?f.a.g.get(g,f.c.options.$b):7>=f.a.W?g.getAttributeNode("value")&&g.getAttributeNode("value").specified?g.value:g.text:g.value;case"select":return 0<=g.selectedIndex?f.w.M(g.options[g.selectedIndex]):e;default:return g.value}},cb:function(g,_,Z){switch(f.a.R(g)){case"option":typeof _=="string"?(f.a.g.set(g,f.c.options.$b,e),"__ko__hasDomDataOptionValue__"in g&&delete g.__ko__hasDomDataOptionValue__,g.value=_):(f.a.g.set(g,f.c.options.$b,_),g.__ko__hasDomDataOptionValue__=!0,g.value=typeof _=="number"?_:"");break;case"select":(_===""||_===null)&&(_=e);for(var G=-1,w=0,X=g.options.length,k;w<X;++w)if(k=f.w.M(g.options[w]),k==_||k===""&&_===e){G=w;break}(Z||0<=G||_===e&&1<g.size)&&(g.selectedIndex=G,f.a.W===6&&f.a.setTimeout(function(){g.selectedIndex=G},0));break;default:(_===null||_===e)&&(_=""),g.value=_}}}})(),f.b("selectExtensions",f.w),f.b("selectExtensions.readValue",f.w.M),f.b("selectExtensions.writeValue",f.w.cb),f.m=(function(){function g(v){v=f.a.Db(v),v.charCodeAt(0)===123&&(v=v.slice(1,-1)),v+=`
,`;var D=[],Y=v.match(G),O,J=[],te=0;if(1<Y.length){for(var z=0,j;j=Y[z];++z){var ee=j.charCodeAt(0);if(ee===44){if(0>=te){D.push(O&&J.length?{key:O,value:J.join("")}:{unknown:O||J.join("")}),O=te=0,J=[];continue}}else if(ee===58){if(!te&&!O&&J.length===1){O=J.pop();continue}}else{if(ee===47&&1<j.length&&(j.charCodeAt(1)===47||j.charCodeAt(1)===42))continue;ee===47&&z&&1<j.length?(ee=Y[z-1].match(w))&&!X[ee[0]]&&(v=v.substr(v.indexOf(j)+1),Y=v.match(G),z=-1,j="/"):ee===40||ee===123||ee===91?++te:ee===41||ee===125||ee===93?--te:O||J.length||ee!==34&&ee!==39||(j=j.slice(1,-1))}J.push(j)}if(0<te)throw Error("Unbalanced parentheses, braces, or brackets")}return D}var _=["true","false","null","undefined"],Z=/^(?:[$_a-z][$\w]*|(.+)(\.\s*[$_a-z][$\w]*|\[.+\]))$/i,G=RegExp(`"(?:\\\\.|[^"])*"|'(?:\\\\.|[^'])*'|\`(?:\\\\.|[^\`])*\`|/\\*(?:[^*]|\\*+[^*/])*\\*+/|//.*
|/(?:\\\\.|[^/])+/w*|[^\\s:,/][^,"'\`{}()/:[\\]]*[^\\s,"'\`{}()/:[\\]]|[^\\s]`,"g"),w=/[\])"'A-Za-z0-9_$]+$/,X={in:1,return:1,typeof:1},k={};return{Ra:[],wa:k,ac:g,vb:function(v,D){function Y(ee,ge){var ye;if(!z){var ae=f.getBindingHandler(ee);if(ae&&ae.preprocess&&!(ge=ae.preprocess(ge,ee,Y)))return;(ae=k[ee])&&(ye=ge,0<=f.a.A(_,ye)?ye=!1:(ae=ye.match(Z),ye=ae===null?!1:ae[1]?"Object("+ae[1]+")"+ae[2]:ye),ae=ye),ae&&J.push("'"+(typeof k[ee]=="string"?k[ee]:ee)+"':function(_z){"+ye+"=_z}")}te&&(ge="function(){return "+ge+" }"),O.push("'"+ee+"':"+ge)}D=D||{};var O=[],J=[],te=D.valueAccessors,z=D.bindingParams,j=typeof v=="string"?g(v):v;return f.a.D(j,function(ee){Y(ee.key||ee.unknown,ee.value)}),J.length&&Y("_ko_property_writers","{"+J.join(",")+" }"),O.join(",")},Id:function(v,D){for(var Y=0;Y<v.length;Y++)if(v[Y].key==D)return!0;return!1},eb:function(v,D,Y,O,J){v&&f.O(v)?!f.Za(v)||J&&v.v()===O||v(O):(v=D.get("_ko_property_writers"))&&v[Y]&&v[Y](O)}}})(),f.b("expressionRewriting",f.m),f.b("expressionRewriting.bindingRewriteValidators",f.m.Ra),f.b("expressionRewriting.parseObjectLiteral",f.m.ac),f.b("expressionRewriting.preProcessBindings",f.m.vb),f.b("expressionRewriting._twoWayBindings",f.m.wa),f.b("jsonExpressionRewriting",f.m),f.b("jsonExpressionRewriting.insertPropertyAccessorsIntoJson",f.m.vb),(function(){function g(Y){return Y.nodeType==8&&X.test(w?Y.text:Y.nodeValue)}function _(Y){return Y.nodeType==8&&k.test(w?Y.text:Y.nodeValue)}function Z(Y,O){for(var J=Y,te=1,z=[];J=J.nextSibling;){if(_(J)&&(f.a.g.set(J,D,!0),te--,te===0))return z;z.push(J),g(J)&&te++}if(!O)throw Error("Cannot find closing comment tag to match: "+Y.nodeValue);return null}function G(Y,O){var J=Z(Y,O);return J?0<J.length?J[J.length-1].nextSibling:Y.nextSibling:null}var w=n&&n.createComment("test").text==="<!--test-->",X=w?/^\x3c!--\s*ko(?:\s+([\s\S]+))?\s*--\x3e$/:/^\s*ko(?:\s+([\s\S]+))?\s*$/,k=w?/^\x3c!--\s*\/ko\s*--\x3e$/:/^\s*\/ko\s*$/,v={ul:!0,ol:!0},D="__ko_matchedEndComment__";f.h={ea:{},childNodes:function(Y){return g(Y)?Z(Y):Y.childNodes},Ea:function(Y){if(g(Y)){Y=f.h.childNodes(Y);for(var O=0,J=Y.length;O<J;O++)f.removeNode(Y[O])}else f.a.Tb(Y)},va:function(Y,O){if(g(Y)){f.h.Ea(Y);for(var J=Y.nextSibling,te=0,z=O.length;te<z;te++)J.parentNode.insertBefore(O[te],J)}else f.a.va(Y,O)},Vc:function(Y,O){var J;g(Y)?(J=Y.nextSibling,Y=Y.parentNode):J=Y.firstChild,J?O!==J&&Y.insertBefore(O,J):Y.appendChild(O)},Wb:function(Y,O,J){J?(J=J.nextSibling,g(Y)&&(Y=Y.parentNode),J?O!==J&&Y.insertBefore(O,J):Y.appendChild(O)):f.h.Vc(Y,O)},firstChild:function(Y){if(g(Y))return!Y.nextSibling||_(Y.nextSibling)?null:Y.nextSibling;if(Y.firstChild&&_(Y.firstChild))throw Error("Found invalid end comment, as the first child of "+Y);return Y.firstChild},nextSibling:function(Y){if(g(Y)&&(Y=G(Y)),Y.nextSibling&&_(Y.nextSibling)){var O=Y.nextSibling;if(_(O)&&!f.a.g.get(O,D))throw Error("Found end comment without a matching opening comment, as child of "+Y);return null}return Y.nextSibling},Cd:g,Vd:function(Y){return(Y=(w?Y.text:Y.nodeValue).match(X))?Y[1]:null},Sc:function(Y){if(v[f.a.R(Y)]){var O=Y.firstChild;if(O)do if(O.nodeType===1){var J;J=O.firstChild;var te=null;if(J)do if(te)te.push(J);else if(g(J)){var z=G(J,!0);z?J=z:te=[J]}else _(J)&&(te=[J]);while(J=J.nextSibling);if(J=te)for(te=O.nextSibling,z=0;z<J.length;z++)te?Y.insertBefore(J[z],te):Y.appendChild(J[z])}while(O=O.nextSibling)}}}})(),f.b("virtualElements",f.h),f.b("virtualElements.allowedBindings",f.h.ea),f.b("virtualElements.emptyNode",f.h.Ea),f.b("virtualElements.insertAfter",f.h.Wb),f.b("virtualElements.prepend",f.h.Vc),f.b("virtualElements.setDomNodeChildren",f.h.va),(function(){f.ga=function(){this.nd={}},f.a.extend(f.ga.prototype,{nodeHasBindings:function(g){switch(g.nodeType){case 1:return g.getAttribute("data-bind")!=null||f.j.getComponentNameForNode(g);case 8:return f.h.Cd(g);default:return!1}},getBindings:function(g,_){var Z=this.getBindingsString(g,_),Z=Z?this.parseBindingsString(Z,_,g):null;return f.j.tc(Z,g,_,!1)},getBindingAccessors:function(g,_){var Z=this.getBindingsString(g,_),Z=Z?this.parseBindingsString(Z,_,g,{valueAccessors:!0}):null;return f.j.tc(Z,g,_,!0)},getBindingsString:function(g){switch(g.nodeType){case 1:return g.getAttribute("data-bind");case 8:return f.h.Vd(g);default:return null}},parseBindingsString:function(g,_,Z,G){try{var w=this.nd,X=g+(G&&G.valueAccessors||""),k;if(!(k=w[X])){var v,D="with($context){with($data||{}){return{"+f.m.vb(g,G)+"}}}";v=new Function("$context","$element",D),k=w[X]=v}return k(_,Z)}catch(Y){throw Y.message=`Unable to parse bindings.
Bindings value: `+g+`
Message: `+Y.message,Y}}}),f.ga.instance=new f.ga})(),f.b("bindingProvider",f.ga),(function(){function g(ae){var Ce=(ae=f.a.g.get(ae,ye))&&ae.N;Ce&&(ae.N=null,Ce.Tc())}function _(ae,Ce,Te){this.node=ae,this.yc=Ce,this.kb=[],this.H=!1,Ce.N||f.a.K.za(ae,g),Te&&Te.N&&(Te.N.kb.push(ae),this.Kb=Te)}function Z(ae){return function(){return ae}}function G(ae){return ae()}function w(ae){return f.a.Ga(f.u.G(ae),function(Ce,Te){return function(){return ae()[Te]}})}function X(ae,Ce,Te){return typeof ae=="function"?w(ae.bind(null,Ce,Te)):f.a.Ga(ae,Z)}function k(ae,Ce){return w(this.getBindings.bind(this,ae,Ce))}function v(ae,Ce){var Te=f.h.firstChild(Ce);if(Te){var Fe,Ne=f.ga.instance,Pe=Ne.preprocessNode;if(Pe){for(;Fe=Te;)Te=f.h.nextSibling(Fe),Pe.call(Ne,Fe);Te=f.h.firstChild(Ce)}for(;Fe=Te;)Te=f.h.nextSibling(Fe),D(ae,Fe)}f.i.ma(Ce,f.i.H)}function D(ae,Ce){var Te=ae,Fe=Ce.nodeType===1;Fe&&f.h.Sc(Ce),(Fe||f.ga.instance.nodeHasBindings(Ce))&&(Te=O(Ce,null,ae).bindingContextForDescendants),Te&&!ee[f.a.R(Ce)]&&v(Te,Ce)}function Y(ae){var Ce=[],Te={},Fe=[];return f.a.P(ae,function Ne(Pe){if(!Te[Pe]){var Xe=f.getBindingHandler(Pe);Xe&&(Xe.after&&(Fe.push(Pe),f.a.D(Xe.after,function(st){if(ae[st]){if(f.a.A(Fe,st)!==-1)throw Error("Cannot combine the following bindings, because they have a cyclic dependency: "+Fe.join(", "));Ne(st)}}),Fe.length--),Ce.push({key:Pe,Mc:Xe})),Te[Pe]=!0}}),Ce}function O(ae,Ce,Te){var Fe=f.a.g.Ub(ae,ye,{}),Ne=Fe.hd;if(!Ce){if(Ne)throw Error("You cannot apply bindings multiple times to the same element.");Fe.hd=!0}Ne||(Fe.context=Te),Fe.Zb||(Fe.Zb={});var Pe;if(Ce&&typeof Ce!="function")Pe=Ce;else{var Xe=f.ga.instance,st=Xe.getBindingAccessors||k,Ye=f.$(function(){return(Pe=Ce?Ce(Te,ae):st.call(Xe,ae,Te))&&(Te[te]&&Te[te](),Te[j]&&Te[j]()),Pe},null,{l:ae});Pe&&Ye.ja()||(Ye=null)}var xt=Te,at;if(Pe){var Je=function(){return f.a.Ga(Ye?Ye():Pe,G)},lt=Ye?function(ht){return function(){return G(Ye()[ht])}}:function(ht){return Pe[ht]};Je.get=function(ht){return Pe[ht]&&G(lt(ht))},Je.has=function(ht){return ht in Pe},f.i.H in Pe&&f.i.subscribe(ae,f.i.H,function(){var ht=(0,Pe[f.i.H])();if(ht){var Rt=f.h.childNodes(ae);Rt.length&&ht(Rt,f.Ec(Rt[0]))}}),f.i.pa in Pe&&(xt=f.i.Cb(ae,Te),f.i.subscribe(ae,f.i.pa,function(){var ht=(0,Pe[f.i.pa])();ht&&f.h.firstChild(ae)&&ht(ae)})),Fe=Y(Pe),f.a.D(Fe,function(ht){var Rt=ht.Mc.init,_e=ht.Mc.update,Re=ht.key;if(ae.nodeType===8&&!f.h.ea[Re])throw Error("The binding '"+Re+"' cannot be used with virtual elements");try{typeof Rt=="function"&&f.u.G(function(){var jt=Rt(ae,lt(Re),Je,xt.$data,xt);if(jt&&jt.controlsDescendantBindings){if(at!==e)throw Error("Multiple bindings ("+at+" and "+Re+") are trying to control descendant bindings of the same element. You cannot use these bindings together on the same element.");at=Re}}),typeof _e=="function"&&f.$(function(){_e(ae,lt(Re),Je,xt.$data,xt)},null,{l:ae})}catch(jt){throw jt.message='Unable to process binding "'+Re+": "+Pe[Re]+`"
Message: `+jt.message,jt}})}return Fe=at===e,{shouldBindDescendants:Fe,bindingContextForDescendants:Fe&&xt}}function J(ae,Ce){return ae&&ae instanceof f.fa?ae:new f.fa(ae,e,e,Ce)}var te=f.a.Da("_subscribable"),z=f.a.Da("_ancestorBindingInfo"),j=f.a.Da("_dataDependency");f.c={};var ee={script:!0,textarea:!0,template:!0};f.getBindingHandler=function(ae){return f.c[ae]};var ge={};f.fa=function(ae,Ce,Te,Fe,Ne){function Pe(){var lt=xt?Ye():Ye,ht=f.a.f(lt);return Ce?(f.a.extend(Xe,Ce),z in Ce&&(Xe[z]=Ce[z])):(Xe.$parents=[],Xe.$root=ht,Xe.ko=f),Xe[te]=at,st?ht=Xe.$data:(Xe.$rawData=lt,Xe.$data=ht),Te&&(Xe[Te]=ht),Fe&&Fe(Xe,Ce,ht),Ce&&Ce[te]&&!f.S.o().Vb(Ce[te])&&Ce[te](),Je&&(Xe[j]=Je),Xe.$data}var Xe=this,st=ae===ge,Ye=st?e:ae,xt=typeof Ye=="function"&&!f.O(Ye),at,Je=Ne&&Ne.dataDependency;Ne&&Ne.exportDependencies?Pe():(at=f.xb(Pe),at.v(),at.ja()?at.equalityComparer=null:Xe[te]=e)},f.fa.prototype.createChildContext=function(ae,Ce,Te,Fe){if(!Fe&&Ce&&typeof Ce=="object"&&(Fe=Ce,Ce=Fe.as,Te=Fe.extend),Ce&&Fe&&Fe.noChildContext){var Ne=typeof ae=="function"&&!f.O(ae);return new f.fa(ge,this,null,function(Pe){Te&&Te(Pe),Pe[Ce]=Ne?ae():ae},Fe)}return new f.fa(ae,this,Ce,function(Pe,Xe){Pe.$parentContext=Xe,Pe.$parent=Xe.$data,Pe.$parents=(Xe.$parents||[]).slice(0),Pe.$parents.unshift(Pe.$parent),Te&&Te(Pe)},Fe)},f.fa.prototype.extend=function(ae,Ce){return new f.fa(ge,this,null,function(Te){f.a.extend(Te,typeof ae=="function"?ae(Te):ae)},Ce)};var ye=f.a.g.Z();_.prototype.Tc=function(){this.Kb&&this.Kb.N&&this.Kb.N.sd(this.node)},_.prototype.sd=function(ae){f.a.Pa(this.kb,ae),!this.kb.length&&this.H&&this.Cc()},_.prototype.Cc=function(){this.H=!0,this.yc.N&&!this.kb.length&&(this.yc.N=null,f.a.K.yb(this.node,g),f.i.ma(this.node,f.i.pa),this.Tc())},f.i={H:"childrenComplete",pa:"descendantsComplete",subscribe:function(ae,Ce,Te,Fe,Ne){var Pe=f.a.g.Ub(ae,ye,{});return Pe.Fa||(Pe.Fa=new f.T),Ne&&Ne.notifyImmediately&&Pe.Zb[Ce]&&f.u.G(Te,Fe,[ae]),Pe.Fa.subscribe(Te,Fe,Ce)},ma:function(ae,Ce){var Te=f.a.g.get(ae,ye);if(Te&&(Te.Zb[Ce]=!0,Te.Fa&&Te.Fa.notifySubscribers(ae,Ce),Ce==f.i.H)){if(Te.N)Te.N.Cc();else if(Te.N===e&&Te.Fa&&Te.Fa.Wa(f.i.pa))throw Error("descendantsComplete event not supported for bindings on this node")}},Cb:function(ae,Ce){var Te=f.a.g.Ub(ae,ye,{});return Te.N||(Te.N=new _(ae,Te,Ce[z])),Ce[z]==Te?Ce:Ce.extend(function(Fe){Fe[z]=Te})}},f.Td=function(ae){return(ae=f.a.g.get(ae,ye))&&ae.context},f.ib=function(ae,Ce,Te){return ae.nodeType===1&&f.h.Sc(ae),O(ae,Ce,J(Te))},f.ld=function(ae,Ce,Te){return Te=J(Te),f.ib(ae,X(Ce,Te,ae),Te)},f.Oa=function(ae,Ce){Ce.nodeType!==1&&Ce.nodeType!==8||v(J(ae),Ce)},f.vc=function(ae,Ce,Te){if(!o&&t.jQuery&&(o=t.jQuery),2>arguments.length){if(Ce=n.body,!Ce)throw Error("ko.applyBindings: could not find document.body; has the document been loaded?")}else if(!Ce||Ce.nodeType!==1&&Ce.nodeType!==8)throw Error("ko.applyBindings: first parameter should be your view model; second parameter should be a DOM node");D(J(ae,Te),Ce)},f.Dc=function(ae){return!ae||ae.nodeType!==1&&ae.nodeType!==8?e:f.Td(ae)},f.Ec=function(ae){return(ae=f.Dc(ae))?ae.$data:e},f.b("bindingHandlers",f.c),f.b("bindingEvent",f.i),f.b("bindingEvent.subscribe",f.i.subscribe),f.b("bindingEvent.startPossiblyAsyncContentBinding",f.i.Cb),f.b("applyBindings",f.vc),f.b("applyBindingsToDescendants",f.Oa),f.b("applyBindingAccessorsToNode",f.ib),f.b("applyBindingsToNode",f.ld),f.b("contextFor",f.Dc),f.b("dataFor",f.Ec)})(),(function(g){function _(k,v){var D=Object.prototype.hasOwnProperty.call(w,k)?w[k]:g,Y;D?D.subscribe(v):(D=w[k]=new f.T,D.subscribe(v),Z(k,function(O,J){var te=!(!J||!J.synchronous);X[k]={definition:O,Gd:te},delete w[k],Y||te?D.notifySubscribers(O):f.na.zb(function(){D.notifySubscribers(O)})}),Y=!0)}function Z(k,v){G("getConfig",[k],function(D){D?G("loadComponent",[k,D],function(Y){v(Y,D)}):v(null,null)})}function G(k,v,D,Y){Y||(Y=f.j.loaders.slice(0));var O=Y.shift();if(O){var J=O[k];if(J){var te=!1;if(J.apply(O,v.concat(function(z){te?D(null):z!==null?D(z):G(k,v,D,Y)}))!==g&&(te=!0,!O.suppressLoaderExceptions))throw Error("Component loaders must supply values by invoking the callback, not by returning values synchronously.")}else G(k,v,D,Y)}else D(null)}var w={},X={};f.j={get:function(k,v){var D=Object.prototype.hasOwnProperty.call(X,k)?X[k]:g;D?D.Gd?f.u.G(function(){v(D.definition)}):f.na.zb(function(){v(D.definition)}):_(k,v)},Bc:function(k){delete X[k]},oc:G},f.j.loaders=[],f.b("components",f.j),f.b("components.get",f.j.get),f.b("components.clearCachedDefinition",f.j.Bc)})(),(function(){function g(D,Y,O,J){function te(){--j===0&&J(z)}var z={},j=2,ee=O.template;O=O.viewModel,ee?w(Y,ee,function(ge){f.j.oc("loadTemplate",[D,ge],function(ye){z.template=ye,te()})}):te(),O?w(Y,O,function(ge){f.j.oc("loadViewModel",[D,ge],function(ye){z[v]=ye,te()})}):te()}function _(D,Y,O){if(typeof Y=="function")O(function(te){return new Y(te)});else if(typeof Y[v]=="function")O(Y[v]);else if("instance"in Y){var J=Y.instance;O(function(){return J})}else"viewModel"in Y?_(D,Y.viewModel,O):D("Unknown viewModel value: "+Y)}function Z(D){switch(f.a.R(D)){case"script":return f.a.ua(D.text);case"textarea":return f.a.ua(D.value);case"template":if(G(D.content))return f.a.Ca(D.content.childNodes)}return f.a.Ca(D.childNodes)}function G(D){return t.DocumentFragment?D instanceof DocumentFragment:D&&D.nodeType===11}function w(D,Y,O){typeof Y.require=="string"?a||t.require?(a||t.require)([Y.require],function(J){J&&typeof J=="object"&&J.Xd&&J.default&&(J=J.default),O(J)}):D("Uses require, but no AMD loader is present"):O(Y)}function X(D){return function(Y){throw Error("Component '"+D+"': "+Y)}}var k={};f.j.register=function(D,Y){if(!Y)throw Error("Invalid configuration for "+D);if(f.j.tb(D))throw Error("Component "+D+" is already registered");k[D]=Y},f.j.tb=function(D){return Object.prototype.hasOwnProperty.call(k,D)},f.j.unregister=function(D){delete k[D],f.j.Bc(D)},f.j.Fc={getConfig:function(D,Y){Y(f.j.tb(D)?k[D]:null)},loadComponent:function(D,Y,O){var J=X(D);w(J,Y,function(te){g(D,J,te,O)})},loadTemplate:function(D,Y,O){if(D=X(D),typeof Y=="string")O(f.a.ua(Y));else if(Y instanceof Array)O(Y);else if(G(Y))O(f.a.la(Y.childNodes));else if(Y.element)if(Y=Y.element,t.HTMLElement?Y instanceof HTMLElement:Y&&Y.tagName&&Y.nodeType===1)O(Z(Y));else if(typeof Y=="string"){var J=n.getElementById(Y);J?O(Z(J)):D("Cannot find element with ID "+Y)}else D("Unknown element type: "+Y);else D("Unknown template value: "+Y)},loadViewModel:function(D,Y,O){_(X(D),Y,O)}};var v="createViewModel";f.b("components.register",f.j.register),f.b("components.isRegistered",f.j.tb),f.b("components.unregister",f.j.unregister),f.b("components.defaultLoader",f.j.Fc),f.j.loaders.push(f.j.Fc),f.j.dd=k})(),(function(){function g(Z,G){var w=Z.getAttribute("params");if(w){var w=_.parseBindingsString(w,G,Z,{valueAccessors:!0,bindingParams:!0}),w=f.a.Ga(w,function(v){return f.o(v,null,{l:Z})}),X=f.a.Ga(w,function(v){var D=v.v();return v.ja()?f.o({read:function(){return f.a.f(v())},write:f.Za(D)&&function(Y){v()(Y)},l:Z}):D});return Object.prototype.hasOwnProperty.call(X,"$raw")||(X.$raw=w),X}return{$raw:{}}}f.j.getComponentNameForNode=function(Z){var G=f.a.R(Z);if(f.j.tb(G)&&(G.indexOf("-")!=-1||""+Z=="[object HTMLUnknownElement]"||8>=f.a.W&&Z.tagName===G))return G},f.j.tc=function(Z,G,w,X){if(G.nodeType===1){var k=f.j.getComponentNameForNode(G);if(k){if(Z=Z||{},Z.component)throw Error('Cannot use the "component" binding on a custom element matching a component');var v={name:k,params:g(G,w)};Z.component=X?function(){return v}:v}}return Z};var _=new f.ga;9>f.a.W&&(f.j.register=(function(Z){return function(G){return Z.apply(this,arguments)}})(f.j.register),n.createDocumentFragment=(function(Z){return function(){var G=Z(),w=f.j.dd,X;for(X in w);return G}})(n.createDocumentFragment))})(),(function(){function g(G,w,X){if(w=w.template,!w)throw Error("Component '"+G+"' has no template");G=f.a.Ca(w),f.h.va(X,G)}function _(G,w,X){var k=G.createViewModel;return k?k.call(G,w,X):w}var Z=0;f.c.component={init:function(G,w,X,k,v){function D(){var z=Y&&Y.dispose;typeof z=="function"&&z.call(Y),J&&J.s(),O=Y=J=null}var Y,O,J,te=f.a.la(f.h.childNodes(G));return f.h.Ea(G),f.a.K.za(G,D),f.o(function(){var z=f.a.f(w()),j,ee;if(typeof z=="string"?j=z:(j=f.a.f(z.name),ee=f.a.f(z.params)),!j)throw Error("No component name specified");var ge=f.i.Cb(G,v),ye=O=++Z;f.j.get(j,function(ae){if(O===ye){if(D(),!ae)throw Error("Unknown component '"+j+"'");g(j,ae,G);var Ce=_(ae,ee,{element:G,templateNodes:te});ae=ge.createChildContext(Ce,{extend:function(Te){Te.$component=Ce,Te.$componentTemplateNodes=te}}),Ce&&Ce.koDescendantsComplete&&(J=f.i.subscribe(G,f.i.pa,Ce.koDescendantsComplete,Ce)),Y=Ce,f.Oa(ae,G)}})},null,{l:G}),{controlsDescendantBindings:!0}}},f.h.ea.component=!0})();var N={class:"className",for:"htmlFor"};f.c.attr={update:function(g,_){var Z=f.a.f(_())||{};f.a.P(Z,function(G,w){w=f.a.f(w);var X=G.indexOf(":"),X="lookupNamespaceURI"in g&&0<X&&g.lookupNamespaceURI(G.substr(0,X)),k=w===!1||w===null||w===e;k?X?g.removeAttributeNS(X,G):g.removeAttribute(G):w=w.toString(),8>=f.a.W&&G in N?(G=N[G],k?g.removeAttribute(G):g[G]=w):k||(X?g.setAttributeNS(X,G,w):g.setAttribute(G,w)),G==="name"&&f.a.Yc(g,k?"":w)})}},(function(){f.c.checked={after:["value","attr"],init:function(g,_,Z){function G(){var z=g.checked,j=X();if(!f.S.Ya()&&(z||!v&&!f.S.qa())){var ee=f.u.G(_);if(Y){var ge=O?ee.v():ee,ye=te;te=j,ye!==j?z&&(f.a.Na(ge,j,!0),f.a.Na(ge,ye,!1)):f.a.Na(ge,j,z),O&&f.Za(ee)&&ee(ge)}else k&&(j===e?j=z:z||(j=e)),f.m.eb(ee,Z,"checked",j,!0)}}function w(){var z=f.a.f(_()),j=X();Y?(g.checked=0<=f.a.A(z,j),te=j):g.checked=k&&j===e?!!z:X()===z}var X=f.xb(function(){if(Z.has("checkedValue"))return f.a.f(Z.get("checkedValue"));if(J)return Z.has("value")?f.a.f(Z.get("value")):g.value}),k=g.type=="checkbox",v=g.type=="radio";if(k||v){var D=_(),Y=k&&f.a.f(D)instanceof Array,O=!(Y&&D.push&&D.splice),J=v||Y,te=Y?X():e;v&&!g.name&&f.c.uniqueName.init(g,function(){return!0}),f.o(G,null,{l:g}),f.a.B(g,"click",G),f.o(w,null,{l:g}),D=e}}},f.m.wa.checked=!0,f.c.checkedValue={update:function(g,_){g.value=f.a.f(_())}}})(),f.c.class={update:function(g,_){var Z=f.a.Db(f.a.f(_()));f.a.Eb(g,g.__ko__cssValue,!1),g.__ko__cssValue=Z,f.a.Eb(g,Z,!0)}},f.c.css={update:function(g,_){var Z=f.a.f(_());Z!==null&&typeof Z=="object"?f.a.P(Z,function(G,w){w=f.a.f(w),f.a.Eb(g,G,w)}):f.c.class.update(g,_)}},f.c.enable={update:function(g,_){var Z=f.a.f(_());Z&&g.disabled?g.removeAttribute("disabled"):Z||g.disabled||(g.disabled=!0)}},f.c.disable={update:function(g,_){f.c.enable.update(g,function(){return!f.a.f(_())})}},f.c.event={init:function(g,_,Z,G,w){var X=_()||{};f.a.P(X,function(k){typeof k=="string"&&f.a.B(g,k,function(v){var D,Y=_()[k];if(Y){try{var O=f.a.la(arguments);G=w.$data,O.unshift(G),D=Y.apply(G,O)}finally{D!==!0&&(v.preventDefault?v.preventDefault():v.returnValue=!1)}Z.get(k+"Bubble")===!1&&(v.cancelBubble=!0,v.stopPropagation&&v.stopPropagation())}})})}},f.c.foreach={Rc:function(g){return function(){var _=g(),Z=f.a.bc(_);return!Z||typeof Z.length=="number"?{foreach:_,templateEngine:f.ba.Ma}:(f.a.f(_),{foreach:Z.data,as:Z.as,noChildContext:Z.noChildContext,includeDestroyed:Z.includeDestroyed,afterAdd:Z.afterAdd,beforeRemove:Z.beforeRemove,afterRender:Z.afterRender,beforeMove:Z.beforeMove,afterMove:Z.afterMove,templateEngine:f.ba.Ma})}},init:function(g,_){return f.c.template.init(g,f.c.foreach.Rc(_))},update:function(g,_,Z,G,w){return f.c.template.update(g,f.c.foreach.Rc(_),Z,G,w)}},f.m.Ra.foreach=!1,f.h.ea.foreach=!0,f.c.hasfocus={init:function(g,_,Z){function G(k){g.__ko_hasfocusUpdating=!0;var v=g.ownerDocument;if("activeElement"in v){var D;try{D=v.activeElement}catch{D=v.body}k=D===g}v=_(),f.m.eb(v,Z,"hasfocus",k,!0),g.__ko_hasfocusLastValue=k,g.__ko_hasfocusUpdating=!1}var w=G.bind(null,!0),X=G.bind(null,!1);f.a.B(g,"focus",w),f.a.B(g,"focusin",w),f.a.B(g,"blur",X),f.a.B(g,"focusout",X),g.__ko_hasfocusLastValue=!1},update:function(g,_){var Z=!!f.a.f(_());g.__ko_hasfocusUpdating||g.__ko_hasfocusLastValue===Z||(Z?g.focus():g.blur(),!Z&&g.__ko_hasfocusLastValue&&g.ownerDocument.body.focus(),f.u.G(f.a.Fb,null,[g,Z?"focusin":"focusout"]))}},f.m.wa.hasfocus=!0,f.c.hasFocus=f.c.hasfocus,f.m.wa.hasFocus="hasfocus",f.c.html={init:function(){return{controlsDescendantBindings:!0}},update:function(g,_){f.a.fc(g,_())}},(function(){function g(_,Z,G){f.c[_]={init:function(w,X,k,v,D){var Y,O,J={},te,z,j;if(Z){v=k.get("as");var ee=k.get("noChildContext");j=!(v&&ee),J={as:v,noChildContext:ee,exportDependencies:j}}return z=(te=k.get("completeOn")=="render")||k.has(f.i.pa),f.o(function(){var ge=f.a.f(X()),ye=!G!=!ge,ae=!O,Ce;(j||ye!==Y)&&(z&&(D=f.i.Cb(w,D)),ye&&((!Z||j)&&(J.dataDependency=f.S.o()),Ce=Z?D.createChildContext(typeof ge=="function"?ge:X,J):f.S.qa()?D.extend(null,J):D),ae&&f.S.qa()&&(O=f.a.Ca(f.h.childNodes(w),!0)),ye?(ae||f.h.va(w,f.a.Ca(O)),f.Oa(Ce,w)):(f.h.Ea(w),te||f.i.ma(w,f.i.H)),Y=ye)},null,{l:w}),{controlsDescendantBindings:!0}}},f.m.Ra[_]=!1,f.h.ea[_]=!0}g("if"),g("ifnot",!1,!0),g("with",!0)})(),f.c.let={init:function(g,_,Z,G,w){return _=w.extend(_),f.Oa(_,g),{controlsDescendantBindings:!0}}},f.h.ea.let=!0;var P={};f.c.options={init:function(g){if(f.a.R(g)!=="select")throw Error("options binding applies only to SELECT elements");for(;0<g.length;)g.remove(0);return{controlsDescendantBindings:!0}},update:function(g,_,Z){function G(){return f.a.jb(g.options,function(ee){return ee.selected})}function w(ee,ge,ye){var ae=typeof ge;return ae=="function"?ge(ee):ae=="string"?ee[ge]:ye}function X(ee,ge){if(z&&Y)f.i.ma(g,f.i.H);else if(te.length){var ye=0<=f.a.A(te,f.w.M(ge[0]));f.a.Zc(ge[0],ye),z&&!ye&&f.u.G(f.a.Fb,null,[g,"change"])}}var k=g.multiple,v=g.length!=0&&k?g.scrollTop:null,D=f.a.f(_()),Y=Z.get("valueAllowUnset")&&Z.has("value"),O=Z.get("optionsIncludeDestroyed");_={};var J,te=[];Y||(k?te=f.a.Mb(G(),f.w.M):0<=g.selectedIndex&&te.push(f.w.M(g.options[g.selectedIndex]))),D&&(typeof D.length>"u"&&(D=[D]),J=f.a.jb(D,function(ee){return O||ee===e||ee===null||!f.a.f(ee._destroy)}),Z.has("optionsCaption")&&(D=f.a.f(Z.get("optionsCaption")),D!==null&&D!==e&&J.unshift(P)));var z=!1;if(_.beforeRemove=function(ee){g.removeChild(ee)},D=X,Z.has("optionsAfterRender")&&typeof Z.get("optionsAfterRender")=="function"&&(D=function(ee,ge){X(0,ge),f.u.G(Z.get("optionsAfterRender"),null,[ge[0],ee!==P?ee:e])}),f.a.ec(g,J,function(ee,ge,ye){return ye.length&&(te=!Y&&ye[0].selected?[f.w.M(ye[0])]:[],z=!0),ge=g.ownerDocument.createElement("option"),ee===P?(f.a.Bb(ge,Z.get("optionsCaption")),f.w.cb(ge,e)):(ye=w(ee,Z.get("optionsValue"),ee),f.w.cb(ge,f.a.f(ye)),ee=w(ee,Z.get("optionsText"),ye),f.a.Bb(ge,ee)),[ge]},_,D),!Y){var j;k?j=te.length&&G().length<te.length:j=te.length&&0<=g.selectedIndex?f.w.M(g.options[g.selectedIndex])!==te[0]:te.length||0<=g.selectedIndex,j&&f.u.G(f.a.Fb,null,[g,"change"])}(Y||f.S.Ya())&&f.i.ma(g,f.i.H),f.a.wd(g),v&&20<Math.abs(v-g.scrollTop)&&(g.scrollTop=v)}},f.c.options.$b=f.a.g.Z(),f.c.selectedOptions={init:function(g,_,Z){function G(){var k=_(),v=[];f.a.D(g.getElementsByTagName("option"),function(D){D.selected&&v.push(f.w.M(D))}),f.m.eb(k,Z,"selectedOptions",v)}function w(){var k=f.a.f(_()),v=g.scrollTop;k&&typeof k.length=="number"&&f.a.D(g.getElementsByTagName("option"),function(D){var Y=0<=f.a.A(k,f.w.M(D));D.selected!=Y&&f.a.Zc(D,Y)}),g.scrollTop=v}if(f.a.R(g)!="select")throw Error("selectedOptions binding applies only to SELECT elements");var X;f.i.subscribe(g,f.i.H,function(){X?G():(f.a.B(g,"change",G),X=f.o(w,null,{l:g}))},null,{notifyImmediately:!0})},update:function(){}},f.m.wa.selectedOptions=!0,f.c.style={update:function(g,_){var Z=f.a.f(_()||{});f.a.P(Z,function(G,w){if(w=f.a.f(w),(w===null||w===e||w===!1)&&(w=""),o)o(g).css(G,w);else if(/^--/.test(G))g.style.setProperty(G,w);else{G=G.replace(/-(\w)/g,function(k,v){return v.toUpperCase()});var X=g.style[G];g.style[G]=w,w===X||g.style[G]!=X||isNaN(w)||(g.style[G]=w+"px")}})}},f.c.submit={init:function(g,_,Z,G,w){if(typeof _()!="function")throw Error("The value for a submit binding must be a function");f.a.B(g,"submit",function(X){var k,v=_();try{k=v.call(w.$data,g)}finally{k!==!0&&(X.preventDefault?X.preventDefault():X.returnValue=!1)}})}},f.c.text={init:function(){return{controlsDescendantBindings:!0}},update:function(g,_){f.a.Bb(g,_())}},f.h.ea.text=!0,(function(){if(t&&t.navigator){var g=function(J){if(J)return parseFloat(J[1])},_=t.navigator.userAgent,Z,G,w,X,k;(Z=t.opera&&t.opera.version&&parseInt(t.opera.version()))||(k=g(_.match(/Edge\/([^ ]+)$/)))||g(_.match(/Chrome\/([^ ]+)/))||(G=g(_.match(/Version\/([^ ]+) Safari/)))||(w=g(_.match(/Firefox\/([^ ]+)/)))||(X=f.a.W||g(_.match(/MSIE ([^ ]+)/)))||(X=g(_.match(/rv:([^ )]+)/)))}if(8<=X&&10>X)var v=f.a.g.Z(),D=f.a.g.Z(),Y=function(J){var te=this.activeElement;(te=te&&f.a.g.get(te,D))&&te(J)},O=function(J,te){var z=J.ownerDocument;f.a.g.get(z,v)||(f.a.g.set(z,v,!0),f.a.B(z,"selectionchange",Y)),f.a.g.set(J,D,te)};f.c.textInput={init:function(J,te,z){function j(Pe,Xe){f.a.B(J,Pe,Xe)}function ee(){var Pe=f.a.f(te());(Pe===null||Pe===e)&&(Pe=""),Te!==e&&Pe===Te?f.a.setTimeout(ee,4):J.value!==Pe&&(Ne=!0,J.value=Pe,Ne=!1,ae=J.value)}function ge(){Ce||(Te=J.value,Ce=f.a.setTimeout(ye,4))}function ye(){clearTimeout(Ce),Te=Ce=e;var Pe=J.value;ae!==Pe&&(ae=Pe,f.m.eb(te(),z,"textInput",Pe))}var ae=J.value,Ce,Te,Fe=f.a.W==9?ge:ye,Ne=!1;X&&j("keypress",ye),11>X&&j("propertychange",function(Pe){Ne||Pe.propertyName!=="value"||Fe(Pe)}),X==8&&(j("keyup",ye),j("keydown",ye)),O&&(O(J,Fe),j("dragend",ge)),(!X||9<=X)&&j("input",Fe),5>G&&f.a.R(J)==="textarea"?(j("keydown",ge),j("paste",ge),j("cut",ge)):11>Z?j("keydown",ge):4>w?(j("DOMAutoComplete",ye),j("dragdrop",ye),j("drop",ye)):k&&J.type==="number"&&j("keydown",ge),j("change",ye),j("blur",ye),f.o(ee,null,{l:J})}},f.m.wa.textInput=!0,f.c.textinput={preprocess:function(J,te,z){z("textInput",J)}}})(),f.c.uniqueName={init:function(g,_){if(_()){var Z="ko_unique_"+ ++f.c.uniqueName.rd;f.a.Yc(g,Z)}}},f.c.uniqueName.rd=0,f.c.using={init:function(g,_,Z,G,w){var X;return Z.has("as")&&(X={as:Z.get("as"),noChildContext:Z.get("noChildContext")}),_=w.createChildContext(_,X),f.Oa(_,g),{controlsDescendantBindings:!0}}},f.h.ea.using=!0,f.c.value={init:function(g,_,Z){var G=f.a.R(g),w=G=="input";if(!w||g.type!="checkbox"&&g.type!="radio"){var X=[],k=Z.get("valueUpdate"),v=!1,D=null;k&&(typeof k=="string"?X=[k]:X=f.a.wc(k),f.a.Pa(X,"change"));var Y=function(){D=null,v=!1;var te=_(),z=f.w.M(g);f.m.eb(te,Z,"value",z)};!f.a.W||!w||g.type!="text"||g.autocomplete=="off"||g.form&&g.form.autocomplete=="off"||f.a.A(X,"propertychange")!=-1||(f.a.B(g,"propertychange",function(){v=!0}),f.a.B(g,"focus",function(){v=!1}),f.a.B(g,"blur",function(){v&&Y()})),f.a.D(X,function(te){var z=Y;f.a.Ud(te,"after")&&(z=function(){D=f.w.M(g),f.a.setTimeout(Y,0)},te=te.substring(5)),f.a.B(g,te,z)});var O;if(O=w&&g.type=="file"?function(){var te=f.a.f(_());te===null||te===e||te===""?g.value="":f.u.G(Y)}:function(){var te=f.a.f(_()),z=f.w.M(g);D!==null&&te===D?f.a.setTimeout(O,0):(te!==z||z===e)&&(G==="select"?(z=Z.get("valueAllowUnset"),f.w.cb(g,te,z),z||te===f.w.M(g)||f.u.G(Y)):f.w.cb(g,te))},G==="select"){var J;f.i.subscribe(g,f.i.H,function(){J?Z.get("valueAllowUnset")?O():Y():(f.a.B(g,"change",Y),J=f.o(O,null,{l:g}))},null,{notifyImmediately:!0})}else f.a.B(g,"change",Y),f.o(O,null,{l:g})}else f.ib(g,{checkedValue:_})},update:function(){}},f.m.wa.value=!0,f.c.visible={update:function(g,_){var Z=f.a.f(_()),G=g.style.display!="none";Z&&!G?g.style.display="":!Z&&G&&(g.style.display="none")}},f.c.hidden={update:function(g,_){f.c.visible.update(g,function(){return!f.a.f(_())})}},(function(g){f.c[g]={init:function(_,Z,G,w,X){return f.c.event.init.call(this,_,function(){var k={};return k[g]=Z(),k},G,w,X)}}})("click"),f.ca=function(){},f.ca.prototype.renderTemplateSource=function(){throw Error("Override renderTemplateSource")},f.ca.prototype.createJavaScriptEvaluatorBlock=function(){throw Error("Override createJavaScriptEvaluatorBlock")},f.ca.prototype.makeTemplateSource=function(g,_){if(typeof g=="string"){_=_||n;var Z=_.getElementById(g);if(!Z)throw Error("Cannot find template with ID "+g);return new f.C.F(Z)}if(g.nodeType==1||g.nodeType==8)return new f.C.ia(g);throw Error("Unknown template type: "+g)},f.ca.prototype.renderTemplate=function(g,_,Z,G){return g=this.makeTemplateSource(g,G),this.renderTemplateSource(g,_,Z,G)},f.ca.prototype.isTemplateRewritten=function(g,_){return this.allowTemplateRewriting===!1?!0:this.makeTemplateSource(g,_).data("isRewritten")},f.ca.prototype.rewriteTemplate=function(g,_,Z){g=this.makeTemplateSource(g,Z),_=_(g.text()),g.text(_),g.data("isRewritten",!0)},f.b("templateEngine",f.ca),f.kc=(function(){function g(G,w,X,k){G=f.m.ac(G);for(var v=f.m.Ra,D=0;D<G.length;D++){var Y=G[D].key;if(Object.prototype.hasOwnProperty.call(v,Y)){var O=v[Y];if(typeof O=="function"){if(Y=O(G[D].value))throw Error(Y)}else if(!O)throw Error("This template engine does not support the '"+Y+"' binding within its templates")}}return X="ko.__tr_ambtns(function($context,$element){return(function(){return{ "+f.m.vb(G,{valueAccessors:!0})+" } })()},'"+X.toLowerCase()+"')",k.createJavaScriptEvaluatorBlock(X)+w}var _=/(<([a-z]+\d*)(?:\s+(?!data-bind\s*=\s*)[a-z0-9\-]+(?:=(?:\"[^\"]*\"|\'[^\']*\'|[^>]*))?)*\s+)data-bind\s*=\s*(["'])([\s\S]*?)\3/gi,Z=/\x3c!--\s*ko\b\s*([\s\S]*?)\s*--\x3e/g;return{xd:function(G,w,X){w.isTemplateRewritten(G,X)||w.rewriteTemplate(G,function(k){return f.kc.Ld(k,w)},X)},Ld:function(G,w){return G.replace(_,function(X,k,v,D,Y){return g(Y,k,v,w)}).replace(Z,function(X,k){return g(k,"<!-- ko -->","#comment",w)})},md:function(G,w){return f.aa.Xb(function(X,k){var v=X.nextSibling;v&&v.nodeName.toLowerCase()===w&&f.ib(v,G,k)})}}})(),f.b("__tr_ambtns",f.kc.md),(function(){f.C={},f.C.F=function(Z){if(this.F=Z){var G=f.a.R(Z);this.ab=G==="script"?1:G==="textarea"?2:G=="template"&&Z.content&&Z.content.nodeType===11?3:4}},f.C.F.prototype.text=function(){var Z=this.ab===1?"text":this.ab===2?"value":"innerHTML";if(arguments.length==0)return this.F[Z];var G=arguments[0];Z==="innerHTML"?f.a.fc(this.F,G):this.F[Z]=G};var g=f.a.g.Z()+"_";f.C.F.prototype.data=function(Z){if(arguments.length===1)return f.a.g.get(this.F,g+Z);f.a.g.set(this.F,g+Z,arguments[1])};var _=f.a.g.Z();f.C.F.prototype.nodes=function(){var Z=this.F;if(arguments.length==0){var G=f.a.g.get(Z,_)||{},w=G.lb||(this.ab===3?Z.content:this.ab===4?Z:e);if(!w||G.jd){var X=this.text();X&&X!==G.bb&&(w=f.a.Md(X,Z.ownerDocument),f.a.g.set(Z,_,{lb:w,bb:X,jd:!0}))}return w}G=arguments[0],this.ab!==e&&this.text(""),f.a.g.set(Z,_,{lb:G})},f.C.ia=function(Z){this.F=Z},f.C.ia.prototype=new f.C.F,f.C.ia.prototype.constructor=f.C.ia,f.C.ia.prototype.text=function(){if(arguments.length==0){var Z=f.a.g.get(this.F,_)||{};return Z.bb===e&&Z.lb&&(Z.bb=Z.lb.innerHTML),Z.bb}f.a.g.set(this.F,_,{bb:arguments[0]})},f.b("templateSources",f.C),f.b("templateSources.domElement",f.C.F),f.b("templateSources.anonymousTemplate",f.C.ia)})(),(function(){function g(D,Y,O){var J;for(Y=f.h.nextSibling(Y);D&&(J=D)!==Y;)D=f.h.nextSibling(J),O(J,D)}function _(D,Y){if(D.length){var O=D[0],J=D[D.length-1],te=O.parentNode,z=f.ga.instance,j=z.preprocessNode;if(j){if(g(O,J,function(ee,ge){var ye=ee.previousSibling,ae=j.call(z,ee);ae&&(ee===O&&(O=ae[0]||ge),ee===J&&(J=ae[ae.length-1]||ye))}),D.length=0,!O)return;O===J?D.push(O):(D.push(O,J),f.a.Ua(D,te))}g(O,J,function(ee){ee.nodeType!==1&&ee.nodeType!==8||f.vc(Y,ee)}),g(O,J,function(ee){ee.nodeType!==1&&ee.nodeType!==8||f.aa.cd(ee,[Y])}),f.a.Ua(D,te)}}function Z(D){return D.nodeType?D:0<D.length?D[0]:null}function G(D,Y,O,J,te){te=te||{};var z=(D&&Z(D)||O||{}).ownerDocument,j=te.templateEngine||X;if(f.kc.xd(O,j,z),O=j.renderTemplate(O,J,te,z),typeof O.length!="number"||0<O.length&&typeof O[0].nodeType!="number")throw Error("Template engine must return an array of DOM nodes");switch(z=!1,Y){case"replaceChildren":f.h.va(D,O),z=!0;break;case"replaceNode":f.a.Xc(D,O),z=!0;break;case"ignoreTargetNode":break;default:throw Error("Unknown renderMode: "+Y)}return z&&(_(O,J),te.afterRender&&f.u.G(te.afterRender,null,[O,J[te.as||"$data"]]),Y=="replaceChildren"&&f.i.ma(D,f.i.H)),O}function w(D,Y,O){return f.O(D)?D():typeof D=="function"?D(Y,O):D}var X;f.gc=function(D){if(D!=e&&!(D instanceof f.ca))throw Error("templateEngine must inherit from ko.templateEngine");X=D},f.dc=function(D,Y,O,J,te){if(O=O||{},(O.templateEngine||X)==e)throw Error("Set a template engine before calling renderTemplate");if(te=te||"replaceChildren",J){var z=Z(J);return f.$(function(){var ee=Y&&Y instanceof f.fa?Y:new f.fa(Y,null,null,null,{exportDependencies:!0}),j=w(D,ee.$data,ee),ee=G(J,te,j,ee,O);te=="replaceNode"&&(J=ee,z=Z(J))},null,{Sa:function(){return!z||!f.a.Sb(z)},l:z&&te=="replaceNode"?z.parentNode:z})}return f.aa.Xb(function(j){f.dc(D,Y,O,j,"replaceNode")})},f.Qd=function(D,Y,O,J,te){function z(Te,Fe){f.u.G(f.a.ec,null,[J,Te,ee,O,j,Fe]),f.i.ma(J,f.i.H)}function j(Te,Fe){_(Fe,ge),O.afterRender&&O.afterRender(Fe,Te),ge=null}function ee(Te,Fe){ge=te.createChildContext(Te,{as:ye,noChildContext:O.noChildContext,extend:function(Pe){Pe.$index=Fe,ye&&(Pe[ye+"Index"]=Fe)}});var Ne=w(D,Te,ge);return G(J,"ignoreTargetNode",Ne,ge,O)}var ge,ye=O.as,ae=O.includeDestroyed===!1||f.options.foreachHidesDestroyed&&!O.includeDestroyed;if(ae||O.beforeRemove||!f.Pc(Y))return f.$(function(){var Te=f.a.f(Y)||[];typeof Te.length>"u"&&(Te=[Te]),ae&&(Te=f.a.jb(Te,function(Fe){return Fe===e||Fe===null||!f.a.f(Fe._destroy)})),z(Te)},null,{l:J});z(Y.v());var Ce=Y.subscribe(function(Te){z(Y(),Te)},null,"arrayChange");return Ce.l(J),Ce};var k=f.a.g.Z(),v=f.a.g.Z();f.c.template={init:function(D,Y){var O=f.a.f(Y());if(typeof O=="string"||"name"in O)f.h.Ea(D);else if("nodes"in O){if(O=O.nodes||[],f.O(O))throw Error('The "nodes" option must be a plain, non-observable array.');var J=O[0]&&O[0].parentNode;J&&f.a.g.get(J,v)||(J=f.a.Yb(O),f.a.g.set(J,v,!0)),new f.C.ia(D).nodes(J)}else if(O=f.h.childNodes(D),0<O.length)J=f.a.Yb(O),new f.C.ia(D).nodes(J);else throw Error("Anonymous template defined, but no template content was provided");return{controlsDescendantBindings:!0}},update:function(D,Y,O,J,te){var z=Y();Y=f.a.f(z),O=!0,J=null,typeof Y=="string"?Y={}:(z="name"in Y?Y.name:D,"if"in Y&&(O=f.a.f(Y.if)),O&&"ifnot"in Y&&(O=!f.a.f(Y.ifnot)),O&&!z&&(O=!1)),"foreach"in Y?J=f.Qd(z,O&&Y.foreach||[],Y,D,te):O?(O=te,"data"in Y&&(O=te.createChildContext(Y.data,{as:Y.as,noChildContext:Y.noChildContext,exportDependencies:!0})),J=f.dc(z,O,Y,D)):f.h.Ea(D),te=J,(Y=f.a.g.get(D,k))&&typeof Y.s=="function"&&Y.s(),f.a.g.set(D,k,!te||te.ja&&!te.ja()?e:te)}},f.m.Ra.template=function(D){return D=f.m.ac(D),D.length==1&&D[0].unknown||f.m.Id(D,"name")?null:"This template engine does not support anonymous templates nested within its templates"},f.h.ea.template=!0})(),f.b("setTemplateEngine",f.gc),f.b("renderTemplate",f.dc),f.a.Kc=function(g,_,Z){if(g.length&&_.length){var G,w,X,k,v;for(G=w=0;(!Z||G<Z)&&(k=g[w]);++w){for(X=0;v=_[X];++X)if(k.value===v.value){k.moved=v.index,v.moved=k.index,_.splice(X,1),G=X=0;break}G+=X}}},f.a.Pb=(function(){function g(_,Z,G,w,X){var k=Math.min,v=Math.max,D=[],Y,O=_.length,J,te=Z.length,z=te-O||1,j=O+te+1,ee,ge,ye;for(Y=0;Y<=O;Y++)for(ge=ee,D.push(ee=[]),ye=k(te,Y+z),J=v(0,Y-1);J<=ye;J++)ee[J]=J?Y?_[Y-1]===Z[J-1]?ge[J-1]:k(ge[J]||j,ee[J-1]||j)+1:J+1:Y+1;for(k=[],v=[],z=[],Y=O,J=te;Y||J;)te=D[Y][J]-1,J&&te===D[Y][J-1]?v.push(k[k.length]={status:G,value:Z[--J],index:J}):Y&&te===D[Y-1][J]?z.push(k[k.length]={status:w,value:_[--Y],index:Y}):(--J,--Y,X.sparse||k.push({status:"retained",value:Z[J]}));return f.a.Kc(z,v,!X.dontLimitMoves&&10*O),k.reverse()}return function(_,Z,G){return G=typeof G=="boolean"?{dontLimitMoves:G}:G||{},_=_||[],Z=Z||[],_.length<Z.length?g(_,Z,"added","deleted",G):g(Z,_,"deleted","added",G)}})(),f.b("utils.compareArrays",f.a.Pb),(function(){function g(G,w,X,k,v){var D=[],Y=f.$(function(){var O=w(X,v,f.a.Ua(D,G))||[];0<D.length&&(f.a.Xc(D,O),k&&f.u.G(k,null,[X,O,v])),D.length=0,f.a.Nb(D,O)},null,{l:G,Sa:function(){return!f.a.kd(D)}});return{Y:D,$:Y.ja()?Y:e}}var _=f.a.g.Z(),Z=f.a.g.Z();f.a.ec=function(G,w,X,k,v,D){function Y(ht){Ne={Aa:ht,pb:f.ta(ge++)},j.push(Ne),z||Fe.push(Ne)}function O(ht){Ne=te[ht],ge!==Ne.pb.v()&&Te.push(Ne),Ne.pb(ge++),f.a.Ua(Ne.Y,G),j.push(Ne)}function J(ht,Rt){if(ht)for(var _e=0,Re=Rt.length;_e<Re;_e++)f.a.D(Rt[_e].Y,function(jt){ht(jt,_e,Rt[_e].Aa)})}w=w||[],typeof w.length>"u"&&(w=[w]),k=k||{};var te=f.a.g.get(G,_),z=!te,j=[],ee=0,ge=0,ye=[],ae=[],Ce=[],Te=[],Fe=[],Ne,Pe=0;if(z)f.a.D(w,Y);else{if(!D||te&&te._countWaitingForRemove){var Xe=f.a.Mb(te,function(ht){return ht.Aa});D=f.a.Pb(Xe,w,{dontLimitMoves:k.dontLimitMoves,sparse:!0})}for(var Xe=0,st,Ye,xt;st=D[Xe];Xe++)switch(Ye=st.moved,xt=st.index,st.status){case"deleted":for(;ee<xt;)O(ee++);Ye===e&&(Ne=te[ee],Ne.$&&(Ne.$.s(),Ne.$=e),f.a.Ua(Ne.Y,G).length&&(k.beforeRemove&&(j.push(Ne),Pe++,Ne.Aa===Z?Ne=null:Ce.push(Ne)),Ne&&ye.push.apply(ye,Ne.Y))),ee++;break;case"added":for(;ge<xt;)O(ee++);Ye!==e?(ae.push(j.length),O(Ye)):Y(st.value)}for(;ge<w.length;)O(ee++);j._countWaitingForRemove=Pe}f.a.g.set(G,_,j),J(k.beforeMove,Te),f.a.D(ye,k.beforeRemove?f.oa:f.removeNode);var at,Je,lt;try{lt=G.ownerDocument.activeElement}catch{}if(ae.length)for(;(Xe=ae.shift())!=e;){for(Ne=j[Xe],at=e;Xe;)if((Je=j[--Xe].Y)&&Je.length){at=Je[Je.length-1];break}for(w=0;ee=Ne.Y[w];at=ee,w++)f.h.Wb(G,ee,at)}for(Xe=0;Ne=j[Xe];Xe++){for(Ne.Y||f.a.extend(Ne,g(G,X,Ne.Aa,v,Ne.pb)),w=0;ee=Ne.Y[w];at=ee,w++)f.h.Wb(G,ee,at);!Ne.Ed&&v&&(v(Ne.Aa,Ne.Y,Ne.pb),Ne.Ed=!0,at=Ne.Y[Ne.Y.length-1])}for(lt&&G.ownerDocument.activeElement!=lt&&lt.focus(),J(k.beforeRemove,Ce),Xe=0;Xe<Ce.length;++Xe)Ce[Xe].Aa=Z;J(k.afterMove,Te),J(k.afterAdd,Fe)}})(),f.b("utils.setDomNodeChildrenFromArrayMapping",f.a.ec),f.ba=function(){this.allowTemplateRewriting=!1},f.ba.prototype=new f.ca,f.ba.prototype.constructor=f.ba,f.ba.prototype.renderTemplateSource=function(g,_,Z,G){return(_=!(9>f.a.W)&&g.nodes?g.nodes():null)?f.a.la(_.cloneNode(!0).childNodes):(g=g.text(),f.a.ua(g,G))},f.ba.Ma=new f.ba,f.gc(f.ba.Ma),f.b("nativeTemplateEngine",f.ba),(function(){f.$a=function(){var _=this.Hd=(function(){if(!o||!o.tmpl)return 0;try{if(0<=o.tmpl.tag.tmpl.open.toString().indexOf("__"))return 2}catch{}return 1})();this.renderTemplateSource=function(Z,G,w,X){if(X=X||n,w=w||{},2>_)throw Error("Your version of jQuery.tmpl is too old. Please upgrade to jQuery.tmpl 1.0.0pre or later.");var k=Z.data("precompiled");return k||(k=Z.text()||"",k=o.template(null,"{{ko_with $item.koBindingContext}}"+k+"{{/ko_with}}"),Z.data("precompiled",k)),Z=[G.$data],G=o.extend({koBindingContext:G},w.templateOptions),G=o.tmpl(k,Z,G),G.appendTo(X.createElement("div")),o.fragments={},G},this.createJavaScriptEvaluatorBlock=function(Z){return"{{ko_code ((function() { return "+Z+" })()) }}"},this.addTemplate=function(Z,G){n.write("<script type='text/html' id='"+Z+"'>"+G+"<\/script>")},0<_&&(o.tmpl.tag.ko_code={open:"__.push($1 || '');"},o.tmpl.tag.ko_with={open:"with($1) {",close:"} "})},f.$a.prototype=new f.ca,f.$a.prototype.constructor=f.$a;var g=new f.$a;0<g.Hd&&f.gc(g),f.b("jqueryTmplTemplateEngine",f.$a)})()})})()})()})();var nFt=ko;typeof window<"u"?(ko=window.ko,typeof zv<"u"?window.ko=zv:delete window.ko):(ko=global.ko,typeof zv<"u"?global.ko=zv:delete global.ko);var OE=nFt;var GQo=y(x(),1);/**
* @license
* Knockout ES5 plugin - https://github.com/SteveSanderson/knockout-es5
* Copyright (c) Steve Sanderson
* MIT license
*/var Mne="__knockoutObservables",vne="__knockoutSubscribable";function VVe(e,t){if(!e)throw new Error("When calling ko.track, you must pass an object as the first parameter.");var n=this,i=GVe(e,!0);return t=t||Object.getOwnPropertyNames(e),t.forEach(function(o){if(!(o===Mne||o===vne)&&!(o in i)){var r=e[o],s=r instanceof Array,a=n.isObservable(r)?r:s?n.observableArray(r):n.observable(r);Object.defineProperty(e,o,{configurable:!0,enumerable:!0,get:a,set:n.isWriteableObservable(a)?a:void 0}),i[o]=a,s&&oFt(n,a)}}),e}function GVe(e,t){var n=e[Mne];return!n&&t&&(n={},Object.defineProperty(e,Mne,{value:n})),n}function iFt(e,t,n){var i=this,o={owner:e,deferEvaluation:!0};if(typeof n=="function")o.read=n;else{if("value"in n)throw new Error('For ko.defineProperty, you must not specify a "value" for the property. You must provide a "get" function.');if(typeof n.get!="function")throw new Error('For ko.defineProperty, the third parameter must be either an evaluator function, or an options object containing a function called "get".');o.read=n.get,o.write=n.set}return e[t]=i.computed(o),VVe.call(i,e,[t]),e}function oFt(e,t){var n=null;e.computed(function(){n&&(n.dispose(),n=null);var i=t();i instanceof Array&&(n=rFt(e,t,i))})}function rFt(e,t,n){var i=sFt(e,n);return i.subscribe(t)}function sFt(e,t){var n=t[vne];if(!n){n=new e.subscribable,Object.defineProperty(t,vne,{value:n});var i={};aFt(t,n,i),cFt(e,t,n,i)}return n}function aFt(e,t,n){["pop","push","reverse","shift","sort","splice","unshift"].forEach(function(i){var o=e[i];e[i]=function(){var r=o.apply(this,arguments);return n.pause!==!0&&t.notifySubscribers(this),r}})}function cFt(e,t,n,i){["remove","removeAll","destroy","destroyAll","replace"].forEach(function(o){Object.defineProperty(t,o,{enumerable:!1,value:function(){var r;i.pause=!0;try{r=e.observableArray.fn[o].apply(e.observableArray(t),arguments)}finally{i.pause=!1}return n.notifySubscribers(t),r}})})}function LVe(e,t){if(!e)return null;var n=GVe(e,!1);return n&&n[t]||null}function lFt(e,t){var n=LVe(e,t);n&&n.valueHasMutated()}function dFt(e){e.track=VVe,e.getObservable=LVe,e.valueHasMutated=lFt,e.defineProperty=iFt}var Hv={attachToKo:dFt};var WQo=y(x(),1),WVe="http://www.w3.org/2000/svg",FVe="cesium-svgPath-svg",uFt={register:function(e){e.bindingHandlers.cesiumSvgPath={init:function(t,n){let i=document.createElementNS(WVe,"svg:svg");i.setAttribute("class",FVe);let o=document.createElementNS(WVe,"path");return i.appendChild(o),e.virtualElements.setDomNodeChildren(t,[i]),e.computed({read:function(){let r=e.unwrap(n());o.setAttribute("d",e.unwrap(r.path));let s=e.unwrap(r.width),a=e.unwrap(r.height);i.setAttribute("width",s),i.setAttribute("height",a),i.setAttribute("viewBox",`0 0 ${s} ${a}`),r.css&&i.setAttribute("class",`${FVe} ${e.unwrap(r.css)}`)},disposeWhenNodeIsRemoved:t}),{controlsDescendantBindings:!0}}},e.virtualElements.allowedBindings.cesiumSvgPath=!0}},Jv=uFt;Hv.attachToKo(OE);Jv.register(OE);var Ie=OE;function Kv(e){l(e)||(e=new pf),this._clock=e,this._eventHelper=new Xr,this._eventHelper.add(e.onTick,this.synchronize,this),this.systemTime=Ie.observable(q.now()),this.systemTime.equalityComparer=q.equals,this.startTime=Ie.observable(e.startTime),this.startTime.equalityComparer=q.equals,this.startTime.subscribe(function(t){e.startTime=t,this.synchronize()},this),this.stopTime=Ie.observable(e.stopTime),this.stopTime.equalityComparer=q.equals,this.stopTime.subscribe(function(t){e.stopTime=t,this.synchronize()},this),this.currentTime=Ie.observable(e.currentTime),this.currentTime.equalityComparer=q.equals,this.currentTime.subscribe(function(t){e.currentTime=t,this.synchronize()},this),this.multiplier=Ie.observable(e.multiplier),this.multiplier.subscribe(function(t){e.multiplier=t,this.synchronize()},this),this.clockStep=Ie.observable(e.clockStep),this.clockStep.subscribe(function(t){e.clockStep=t,this.synchronize()},this),this.clockRange=Ie.observable(e.clockRange),this.clockRange.subscribe(function(t){e.clockRange=t,this.synchronize()},this),this.canAnimate=Ie.observable(e.canAnimate),this.canAnimate.subscribe(function(t){e.canAnimate=t,this.synchronize()},this),this.shouldAnimate=Ie.observable(e.shouldAnimate),this.shouldAnimate.subscribe(function(t){e.shouldAnimate=t,this.synchronize()},this),Ie.track(this,["systemTime","startTime","stopTime","currentTime","multiplier","clockStep","clockRange","canAnimate","shouldAnimate"])}Object.defineProperties(Kv.prototype,{clock:{get:function(){return this._clock}}});Kv.prototype.synchronize=function(){let e=this._clock;this.systemTime=q.now(),this.startTime=e.startTime,this.stopTime=e.stopTime,this.currentTime=e.currentTime,this.multiplier=e.multiplier,this.clockStep=e.clockStep,this.clockRange=e.clockRange,this.canAnimate=e.canAnimate,this.shouldAnimate=e.shouldAnimate};Kv.prototype.isDestroyed=function(){return!1};Kv.prototype.destroy=function(){this._eventHelper.removeAll(),he(this)};var jv=Kv;var kQo=y(x(),1);function mFt(){this.canExecute=void 0,this.beforeExecute=void 0,this.afterExecute=void 0,fe.throwInstantiationError()}var Une=mFt;var KQo=y(x(),1);function hFt(e,t){t=t??!0;let n=new xe,i=new xe;function o(){let r={args:arguments,cancel:!1},s;return n.raiseEvent(r),r.cancel||(s=e.apply(null,arguments),i.raiseEvent(s)),s}return o.canExecute=t,Ie.track(o,["canExecute"]),Object.defineProperties(o,{beforeExecute:{value:n},afterExecute:{value:i}}),o}var Fn=hFt;var eOo=y(x(),1);var AR={};AR.createCheckbox=function(e,t,n){let i=document.createElement("div"),o=document.createElement("label"),r=document.createElement("input");r.type="checkbox";let s=`checked: ${t}`;return l(n)&&(s+=`, enable: ${n}`),r.setAttribute("data-bind",s),o.appendChild(r),o.appendChild(document.createTextNode(e)),i.appendChild(o),i};AR.createSection=function(e,t,n,i){let o=document.createElement("div");o.className="cesium-cesiumInspector-section",o.setAttribute("data-bind",`css: { "cesium-cesiumInspector-section-collapsed": !${n} }`),e.appendChild(o);let r=document.createElement("h3");r.className="cesium-cesiumInspector-sectionHeader",r.appendChild(document.createTextNode(t)),r.setAttribute("data-bind",`click: ${i}`),o.appendChild(r);let s=document.createElement("div");return s.className="cesium-cesiumInspector-sectionContent",o.appendChild(s),s};AR.createRangeInput=function(e,t,n,i,o,r){r=r??t;let s=document.createElement("input");s.setAttribute("data-bind",`value: ${r}`),s.type="number";let a=document.createElement("input");a.type="range",a.min=n,a.max=i,a.step=o??"any",a.setAttribute("data-bind",`valueUpdate: "input", value: ${t}`);let c=document.createElement("div");c.appendChild(a);let d=document.createElement("div");return d.className="cesium-cesiumInspector-slider",d.appendChild(document.createTextNode(e)),d.appendChild(s),d.appendChild(c),d};AR.createRangeInputWithDynamicMinMax=function(e,t,n,i){i=i??t;let o=document.createElement("input");o.setAttribute("data-bind",`value: ${i}`),o.type="number";let r=document.createElement("input");r.type="range",r.step=n??"any",r.setAttribute("data-bind",`valueUpdate: "input", value: ${t}, attr: { min: ${t}Min, max: ${t}Max }`);let s=document.createElement("div");s.appendChild(r);let a=document.createElement("div");return a.className="cesium-cesiumInspector-slider",a.appendChild(document.createTextNode(e)),a.appendChild(o),a.appendChild(s),a};AR.createButton=function(e,t,n){let i=document.createElement("button");i.type="button",i.textContent=e,i.className="cesium-cesiumInspector-pickButton";let o=`click: ${t}`;return l(n)&&(o+=`, css: {"cesium-cesiumInspector-pickButtonHighlight" : ${n}}`),i.setAttribute("data-bind",o),i};var Od=AR;var iOo=y(x(),1);function fFt(e,t,n,i,o){return n.call(i,e[t]),Ie.getObservable(e,t).subscribe(n,i,o)}var gc=fFt;var lOo=y(x(),1);function BVe(e,t){this._command=e,t=t??Q.EMPTY_OBJECT,this.toggled=t.toggled??!1,this.tooltip=t.tooltip??"",Ie.track(this,["toggled","tooltip"])}Object.defineProperties(BVe.prototype,{command:{get:function(){return this._command}}});var tx=BVe;var fOo=y(x(),1);var zE="http://www.w3.org/2000/svg",PVe="http://www.w3.org/1999/xlink",xz,qv=U.fromCssColorString("rgba(247,250,255,0.384)"),Cz=U.fromCssColorString("rgba(143,191,255,0.216)"),Dne=U.fromCssColorString("rgba(153,197,255,0.098)"),Tz=U.fromCssColorString("rgba(255,255,255,0.086)"),pFt=U.fromCssColorString("rgba(255,255,255,0.267)"),AFt=U.fromCssColorString("rgba(255,255,255,0)"),wVe=U.fromCssColorString("rgba(66,67,68,0.3)"),NVe=U.fromCssColorString("rgba(0,0,0,0.5)");function nx(e){return U.fromCssColorString(window.getComputedStyle(e).getPropertyValue("color"))}var $v={animation_pathReset:{tagName:"path",transform:"translate(16,16) scale(0.85) translate(-16,-16)",d:"M24.316,5.318,9.833,13.682,9.833,5.5,5.5,5.5,5.5,25.5,9.833,25.5,9.833,17.318,24.316,25.682z"},animation_pathPause:{tagName:"path",transform:"translate(16,16) scale(0.85) translate(-16,-16)",d:"M13,5.5,7.5,5.5,7.5,25.5,13,25.5zM24.5,5.5,19,5.5,19,25.5,24.5,25.5z"},animation_pathPlay:{tagName:"path",transform:"translate(16,16) scale(0.85) translate(-16,-16)",d:"M6.684,25.682L24.316,15.5L6.684,5.318V25.682z"},animation_pathPlayReverse:{tagName:"path",transform:"translate(16,16) scale(-0.85,0.85) translate(-16,-16)",d:"M6.684,25.682L24.316,15.5L6.684,5.318V25.682z"},animation_pathLoop:{tagName:"path",transform:"translate(16,16) scale(0.85) translate(-16,-16)",d:"M24.249,15.499c-0.009,4.832-3.918,8.741-8.75,8.75c-2.515,0-4.768-1.064-6.365-2.763l2.068-1.442l-7.901-3.703l0.744,8.694l2.193-1.529c2.244,2.594,5.562,4.242,9.26,4.242c6.767,0,12.249-5.482,12.249-12.249H24.249zM15.499,6.75c2.516,0,4.769,1.065,6.367,2.764l-2.068,1.443l7.901,3.701l-0.746-8.693l-2.192,1.529c-2.245-2.594-5.562-4.245-9.262-4.245C8.734,3.25,3.25,8.734,3.249,15.499H6.75C6.758,10.668,10.668,6.758,15.499,6.75z"},animation_pathClock:{tagName:"path",transform:"translate(16,16) scale(0.85) translate(-16,-15.5)",d:"M15.5,2.374C8.251,2.375,2.376,8.251,2.374,15.5C2.376,22.748,8.251,28.623,15.5,28.627c7.249-0.004,13.124-5.879,13.125-13.127C28.624,8.251,22.749,2.375,15.5,2.374zM15.5,25.623C9.909,25.615,5.385,21.09,5.375,15.5C5.385,9.909,9.909,5.384,15.5,5.374c5.59,0.01,10.115,4.535,10.124,10.125C25.615,21.09,21.091,25.615,15.5,25.623zM8.625,15.5c-0.001-0.552-0.448-0.999-1.001-1c-0.553,0-1,0.448-1,1c0,0.553,0.449,1,1,1C8.176,16.5,8.624,16.053,8.625,15.5zM8.179,18.572c-0.478,0.277-0.642,0.889-0.365,1.367c0.275,0.479,0.889,0.641,1.365,0.365c0.479-0.275,0.643-0.887,0.367-1.367C9.27,18.461,8.658,18.297,8.179,18.572zM9.18,10.696c-0.479-0.276-1.09-0.112-1.366,0.366s-0.111,1.09,0.365,1.366c0.479,0.276,1.09,0.113,1.367-0.366C9.821,11.584,9.657,10.973,9.18,10.696zM22.822,12.428c0.478-0.275,0.643-0.888,0.366-1.366c-0.275-0.478-0.89-0.642-1.366-0.366c-0.479,0.278-0.642,0.89-0.366,1.367C21.732,12.54,22.344,12.705,22.822,12.428zM12.062,21.455c-0.478-0.275-1.089-0.111-1.366,0.367c-0.275,0.479-0.111,1.09,0.366,1.365c0.478,0.277,1.091,0.111,1.365-0.365C12.704,22.344,12.54,21.732,12.062,21.455zM12.062,9.545c0.479-0.276,0.642-0.888,0.366-1.366c-0.276-0.478-0.888-0.642-1.366-0.366s-0.642,0.888-0.366,1.366C10.973,9.658,11.584,9.822,12.062,9.545zM22.823,18.572c-0.48-0.275-1.092-0.111-1.367,0.365c-0.275,0.479-0.112,1.092,0.367,1.367c0.477,0.275,1.089,0.113,1.365-0.365C23.464,19.461,23.3,18.848,22.823,18.572zM19.938,7.813c-0.477-0.276-1.091-0.111-1.365,0.366c-0.275,0.48-0.111,1.091,0.366,1.367s1.089,0.112,1.366-0.366C20.581,8.702,20.418,8.089,19.938,7.813zM23.378,14.5c-0.554,0.002-1.001,0.45-1.001,1c0.001,0.552,0.448,1,1.001,1c0.551,0,1-0.447,1-1C24.378,14.949,23.929,14.5,23.378,14.5zM15.501,6.624c-0.552,0-1,0.448-1,1l-0.466,7.343l-3.004,1.96c-0.478,0.277-0.642,0.889-0.365,1.365c0.275,0.479,0.889,0.643,1.365,0.367l3.305-1.676C15.39,16.99,15.444,17,15.501,17c0.828,0,1.5-0.671,1.5-1.5l-0.5-7.876C16.501,7.072,16.053,6.624,15.501,6.624zM15.501,22.377c-0.552,0-1,0.447-1,1s0.448,1,1,1s1-0.447,1-1S16.053,22.377,15.501,22.377zM18.939,21.455c-0.479,0.277-0.643,0.889-0.366,1.367c0.275,0.477,0.888,0.643,1.366,0.365c0.478-0.275,0.642-0.889,0.366-1.365C20.028,21.344,19.417,21.18,18.939,21.455z"},animation_pathWingButton:{tagName:"path",d:"m 4.5,0.5 c -2.216,0 -4,1.784 -4,4 l 0,24 c 0,2.216 1.784,4 4,4 l 13.71875,0 C 22.478584,27.272785 27.273681,22.511272 32.5,18.25 l 0,-13.75 c 0,-2.216 -1.784,-4 -4,-4 l -24,0 z"},animation_pathPointer:{tagName:"path",d:"M-15,-65,-15,-55,15,-55,15,-65,0,-95z"},animation_pathSwooshFX:{tagName:"path",d:"m 85,0 c 0,16.617 -4.813944,35.356 -13.131081,48.4508 h 6.099803 c 8.317138,-13.0948 13.13322,-28.5955 13.13322,-45.2124 0,-46.94483 -38.402714,-85.00262 -85.7743869,-85.00262 -1.0218522,0 -2.0373001,0.0241 -3.0506131,0.0589 45.958443,1.59437 82.723058,35.77285 82.723058,81.70532 z"}};function Of(e){let t=document.createElementNS(zE,e.tagName);for(let n in e)if(e.hasOwnProperty(n)&&n!=="tagName")if(n==="children"){let i=e.children.length;for(let o=0;o<i;++o)t.appendChild(Of(e.children[o]))}else n.indexOf("xlink:")===0?t.setAttributeNS(PVe,n.substring(6),e[n]):n==="textContent"?t.textContent=e[n]:t.setAttribute(n,e[n]);return t}function kne(e,t,n){let i=document.createElementNS(zE,"text");i.setAttribute("x",e),i.setAttribute("y",t),i.setAttribute("class","cesium-animation-svgText");let o=document.createElementNS(zE,"tspan");return o.textContent=n,i.appendChild(o),i}function gFt(e,t,n){e.setAttribute("transform",`translate(100,100) rotate(${n})`),t.setAttribute("transform",`rotate(${n})`)}var Ez=new U;function Ms(e,t){let n=t.alpha,i=1-n;return Ez.red=e.red*i+t.red*n,Ez.green=e.green*i+t.green*n,Ez.blue=e.blue*i+t.blue*n,Ez.toCssColorString()}function Qne(e,t,n){let i=$v[n],o={tagName:"g",class:"cesium-animation-rectButton",transform:`translate(${e},${t})`,children:[{tagName:"rect",class:"cesium-animation-buttonGlow",width:32,height:32,rx:2,ry:2},{tagName:"rect",class:"cesium-animation-buttonMain",width:32,height:32,rx:4,ry:4},{class:"cesium-animation-buttonPath",id:n,tagName:i.tagName,transform:i.transform,d:i.d},{tagName:"title",textContent:""}]};return Of(o)}function bFt(e,t,n){let i=$v[n],o=$v.animation_pathWingButton,r={tagName:"g",class:"cesium-animation-rectButton",transform:`translate(${e},${t})`,children:[{class:"cesium-animation-buttonGlow",id:"animation_pathWingButton",tagName:o.tagName,d:o.d},{class:"cesium-animation-buttonMain",id:"animation_pathWingButton",tagName:o.tagName,d:o.d},{class:"cesium-animation-buttonPath",id:n,tagName:i.tagName,transform:i.transform,d:i.d},{tagName:"title",textContent:""}]};return Of(r)}function yFt(e,t){let n=e._viewModel,i=n.shuttleRingDragging;if(!(i&&xz!==e))if(t.type==="mousedown"||i&&t.type==="mousemove"||t.type==="touchstart"&&t.touches.length===1||i&&t.type==="touchmove"&&t.touches.length===1){let o=e._centerX,r=e._centerY,a=e._svgNode.getBoundingClientRect(),c,d;if(t.type==="touchstart"||t.type==="touchmove"?(c=t.touches[0].clientX,d=t.touches[0].clientY):(c=t.clientX,d=t.clientY),!i&&(c>a.right||c<a.left||d<a.top||d>a.bottom))return;let u=e._shuttleRingPointer.getBoundingClientRect(),h=c-o-a.left,p=d-r-a.top,A=Math.atan2(p,h)*180/Math.PI+90;A>180&&(A-=360);let f=n.shuttleRingAngle;i||c<u.right&&c>u.left&&d>u.top&&d<u.bottom?(xz=e,n.shuttleRingDragging=!0,n.shuttleRingAngle=A):A<f?n.slower():A>f&&n.faster(),t.preventDefault()}else e===xz&&(xz=void 0),n.shuttleRingDragging=!1}function wb(e,t){this._viewModel=t,this.svgElement=e,this._enabled=void 0,this._toggled=void 0;let n=this;this._clickFunction=function(){let i=n._viewModel.command;i.canExecute&&i()},e.addEventListener("click",this._clickFunction,!0),this._subscriptions=[gc(t,"toggled",this.setToggled,this),gc(t,"tooltip",this.setTooltip,this),gc(t.command,"canExecute",this.setEnabled,this)]}wb.prototype.destroy=function(){this.svgElement.removeEventListener("click",this._clickFunction,!0);let e=this._subscriptions;for(let t=0,n=e.length;t<n;t++)e[t].dispose();he(this)};wb.prototype.isDestroyed=function(){return!1};wb.prototype.setEnabled=function(e){if(this._enabled!==e){if(this._enabled=e,!e){this.svgElement.setAttribute("class","cesium-animation-buttonDisabled");return}if(this._toggled){this.svgElement.setAttribute("class","cesium-animation-rectButton cesium-animation-buttonToggled");return}this.svgElement.setAttribute("class","cesium-animation-rectButton")}};wb.prototype.setToggled=function(e){this._toggled!==e&&(this._toggled=e,this._enabled&&(e?this.svgElement.setAttribute("class","cesium-animation-rectButton cesium-animation-buttonToggled"):this.svgElement.setAttribute("class","cesium-animation-rectButton")))};wb.prototype.setTooltip=function(e){this.svgElement.getElementsByTagName("title")[0].textContent=e};function gR(e,t){e=vn(e),this._viewModel=t,this._container=e,this._centerX=0,this._centerY=0,this._defsElement=void 0,this._svgNode=void 0,this._topG=void 0,this._lastHeight=void 0,this._lastWidth=void 0;let n=e.ownerDocument,i=document.createElement("style");i.textContent=".cesium-animation-rectButton .cesium-animation-buttonGlow { filter: url(#animation_blurred); }.cesium-animation-rectButton .cesium-animation-buttonMain { fill: url(#animation_buttonNormal); }.cesium-animation-buttonToggled .cesium-animation-buttonMain { fill: url(#animation_buttonToggled); }.cesium-animation-rectButton:hover .cesium-animation-buttonMain { fill: url(#animation_buttonHovered); }.cesium-animation-buttonDisabled .cesium-animation-buttonMain { fill: url(#animation_buttonDisabled); }.cesium-animation-shuttleRingG .cesium-animation-shuttleRingSwoosh { fill: url(#animation_shuttleRingSwooshGradient); }.cesium-animation-shuttleRingG:hover .cesium-animation-shuttleRingSwoosh { fill: url(#animation_shuttleRingSwooshHovered); }.cesium-animation-shuttleRingPointer { fill: url(#animation_shuttleRingPointerGradient); }.cesium-animation-shuttleRingPausePointer { fill: url(#animation_shuttleRingPointerPaused); }.cesium-animation-knobOuter { fill: url(#animation_knobOuter); }.cesium-animation-knobInner { fill: url(#animation_knobInner); }",n.head.insertBefore(i,n.head.childNodes[0]);let o=document.createElement("div");o.className="cesium-animation-theme",o.innerHTML='<div class="cesium-animation-themeNormal"></div><div class="cesium-animation-themeHover"></div><div class="cesium-animation-themeSelect"></div><div class="cesium-animation-themeDisabled"></div><div class="cesium-animation-themeKnob"></div><div class="cesium-animation-themePointer"></div><div class="cesium-animation-themeSwoosh"></div><div class="cesium-animation-themeSwooshHover"></div>',this._theme=o,this._themeNormal=o.childNodes[0],this._themeHover=o.childNodes[1],this._themeSelect=o.childNodes[2],this._themeDisabled=o.childNodes[3],this._themeKnob=o.childNodes[4],this._themePointer=o.childNodes[5],this._themeSwoosh=o.childNodes[6],this._themeSwooshHover=o.childNodes[7];let r=document.createElementNS(zE,"svg:svg");this._svgNode=r,r.setAttributeNS("http://www.w3.org/2000/xmlns/","xmlns:xlink",PVe);let s=document.createElementNS(zE,"g");this._topG=s,this._realtimeSVG=new wb(bFt(3,4,"animation_pathClock"),t.playRealtimeViewModel),this._playReverseSVG=new wb(Qne(44,99,"animation_pathPlayReverse"),t.playReverseViewModel),this._playForwardSVG=new wb(Qne(124,99,"animation_pathPlay"),t.playForwardViewModel),this._pauseSVG=new wb(Qne(84,99,"animation_pathPause"),t.pauseViewModel);let a=document.createElementNS(zE,"g");a.appendChild(this._realtimeSVG.svgElement),a.appendChild(this._playReverseSVG.svgElement),a.appendChild(this._playForwardSVG.svgElement),a.appendChild(this._pauseSVG.svgElement);let c=Of({tagName:"circle",class:"cesium-animation-shuttleRingBack",cx:100,cy:100,r:99});this._shuttleRingBackPanel=c;let d=$v.animation_pathSwooshFX,u=$v.animation_pathPointer,h=Of({tagName:"g",class:"cesium-animation-shuttleRingSwoosh",children:[{tagName:d.tagName,transform:"translate(100,97) scale(-1,1)",id:"animation_pathSwooshFX",d:d.d},{tagName:d.tagName,transform:"translate(100,97)",id:"animation_pathSwooshFX",d:d.d},{tagName:"line",x1:100,y1:8,x2:100,y2:22}]});this._shuttleRingSwooshG=h,this._shuttleRingPointer=Of({class:"cesium-animation-shuttleRingPointer",id:"animation_pathPointer",tagName:u.tagName,d:u.d});let p=Of({tagName:"g",transform:"translate(100,100)"});this._knobOuter=Of({tagName:"circle",class:"cesium-animation-knobOuter",cx:0,cy:0,r:71});let A=61,f=Of({tagName:"circle",class:"cesium-animation-knobInner",cx:0,cy:0,r:A});this._knobDate=kne(0,-24,""),this._knobTime=kne(0,-7,""),this._knobStatus=kne(0,-41,"");let b=Of({tagName:"circle",class:"cesium-animation-blank",cx:0,cy:0,r:A}),C=document.createElementNS(zE,"g");C.setAttribute("class","cesium-animation-shuttleRingG"),e.appendChild(o),s.appendChild(C),s.appendChild(p),s.appendChild(a),C.appendChild(c),C.appendChild(h),C.appendChild(this._shuttleRingPointer),p.appendChild(this._knobOuter),p.appendChild(f),p.appendChild(this._knobDate),p.appendChild(this._knobTime),p.appendChild(this._knobStatus),p.appendChild(b),r.appendChild(s),e.appendChild(r);let T=this;function E(W){yFt(T,W)}this._mouseCallback=E,c.addEventListener("mousedown",E,!0),c.addEventListener("touchstart",E,!0),h.addEventListener("mousedown",E,!0),h.addEventListener("touchstart",E,!0),n.addEventListener("mousemove",E,!0),n.addEventListener("touchmove",E,!0),n.addEventListener("mouseup",E,!0),n.addEventListener("touchend",E,!0),n.addEventListener("touchcancel",E,!0),this._shuttleRingPointer.addEventListener("mousedown",E,!0),this._shuttleRingPointer.addEventListener("touchstart",E,!0),this._knobOuter.addEventListener("mousedown",E,!0),this._knobOuter.addEventListener("touchstart",E,!0);let S=this._knobTime.childNodes[0],I=this._knobDate.childNodes[0],R=this._knobStatus.childNodes[0],V;this._subscriptions=[gc(t.pauseViewModel,"toggled",function(W){V!==W&&(V=W,V?T._shuttleRingPointer.setAttribute("class","cesium-animation-shuttleRingPausePointer"):T._shuttleRingPointer.setAttribute("class","cesium-animation-shuttleRingPointer"))}),gc(t,"shuttleRingAngle",function(W){gFt(T._shuttleRingPointer,T._knobOuter,W)}),gc(t,"dateLabel",function(W){I.textContent!==W&&(I.textContent=W)}),gc(t,"timeLabel",function(W){S.textContent!==W&&(S.textContent=W)}),gc(t,"multiplierLabel",function(W){R.textContent!==W&&(R.textContent=W)})],this.applyThemeChanges(),this.resize()}Object.defineProperties(gR.prototype,{container:{get:function(){return this._container}},viewModel:{get:function(){return this._viewModel}}});gR.prototype.isDestroyed=function(){return!1};gR.prototype.destroy=function(){l(this._observer)&&(this._observer.disconnect(),this._observer=void 0);let e=this._container.ownerDocument,t=this._mouseCallback;this._shuttleRingBackPanel.removeEventListener("mousedown",t,!0),this._shuttleRingBackPanel.removeEventListener("touchstart",t,!0),this._shuttleRingSwooshG.removeEventListener("mousedown",t,!0),this._shuttleRingSwooshG.removeEventListener("touchstart",t,!0),e.removeEventListener("mousemove",t,!0),e.removeEventListener("touchmove",t,!0),e.removeEventListener("mouseup",t,!0),e.removeEventListener("touchend",t,!0),e.removeEventListener("touchcancel",t,!0),this._shuttleRingPointer.removeEventListener("mousedown",t,!0),this._shuttleRingPointer.removeEventListener("touchstart",t,!0),this._knobOuter.removeEventListener("mousedown",t,!0),this._knobOuter.removeEventListener("touchstart",t,!0),this._container.removeChild(this._svgNode),this._container.removeChild(this._theme),this._realtimeSVG.destroy(),this._playReverseSVG.destroy(),this._playForwardSVG.destroy(),this._pauseSVG.destroy();let n=this._subscriptions;for(let i=0,o=n.length;i<o;i++)n[i].dispose();return he(this)};gR.prototype.resize=function(){let e=this._container.clientWidth,t=this._container.clientHeight;if(e===this._lastWidth&&t===this._lastHeight)return;let n=this._svgNode,i=200,o=132,r=e,s=t;e===0&&t===0?(r=i,s=o):e===0?(s=t,r=i*(t/o)):t===0&&(r=e,s=o*(e/i));let a=r/i,c=s/o;n.style.cssText=`width: ${r}px; height: ${s}px; position: absolute; bottom: 0; left: 0; overflow: hidden;`,n.setAttribute("width",r),n.setAttribute("height",s),n.setAttribute("viewBox",`0 0 ${r} ${s}`),this._topG.setAttribute("transform",`scale(${a},${c})`),this._centerX=Math.max(1,100*a),this._centerY=Math.max(1,100*c),this._lastHeight=e,this._lastWidth=t};gR.prototype.applyThemeChanges=function(){let e=this._container.ownerDocument;if(!e.body.contains(this._container)){if(l(this._observer))return;let u=this;u._observer=new MutationObserver(function(){e.body.contains(u._container)&&(u._observer.disconnect(),u._observer=void 0,u.applyThemeChanges())}),u._observer.observe(e,{childList:!0,subtree:!0});return}let t=nx(this._themeNormal),n=nx(this._themeHover),i=nx(this._themeSelect),o=nx(this._themeDisabled),r=nx(this._themeKnob),s=nx(this._themePointer),a=nx(this._themeSwoosh),c=nx(this._themeSwooshHover),d=Of({tagName:"defs",children:[{id:"animation_buttonNormal",tagName:"linearGradient",x1:"50%",y1:"0%",x2:"50%",y2:"100%",children:[{tagName:"stop",offset:"0%","stop-color":Ms(t,qv)},{tagName:"stop",offset:"12%","stop-color":Ms(t,Cz)},{tagName:"stop",offset:"46%","stop-color":Ms(t,Dne)},{tagName:"stop",offset:"81%","stop-color":Ms(t,Tz)}]},{id:"animation_buttonHovered",tagName:"linearGradient",x1:"50%",y1:"0%",x2:"50%",y2:"100%",children:[{tagName:"stop",offset:"0%","stop-color":Ms(n,qv)},{tagName:"stop",offset:"12%","stop-color":Ms(n,Cz)},{tagName:"stop",offset:"46%","stop-color":Ms(n,Dne)},{tagName:"stop",offset:"81%","stop-color":Ms(n,Tz)}]},{id:"animation_buttonToggled",tagName:"linearGradient",x1:"50%",y1:"0%",x2:"50%",y2:"100%",children:[{tagName:"stop",offset:"0%","stop-color":Ms(i,qv)},{tagName:"stop",offset:"12%","stop-color":Ms(i,Cz)},{tagName:"stop",offset:"46%","stop-color":Ms(i,Dne)},{tagName:"stop",offset:"81%","stop-color":Ms(i,Tz)}]},{id:"animation_buttonDisabled",tagName:"linearGradient",x1:"50%",y1:"0%",x2:"50%",y2:"100%",children:[{tagName:"stop",offset:"0%","stop-color":Ms(o,pFt)},{tagName:"stop",offset:"75%","stop-color":Ms(o,AFt)}]},{id:"animation_blurred",tagName:"filter",width:"200%",height:"200%",x:"-50%",y:"-50%",children:[{tagName:"feGaussianBlur",stdDeviation:4,in:"SourceGraphic"}]},{id:"animation_shuttleRingSwooshGradient",tagName:"linearGradient",x1:"50%",y1:"0%",x2:"50%",y2:"100%",children:[{tagName:"stop",offset:"0%","stop-opacity":.2,"stop-color":a.toCssColorString()},{tagName:"stop",offset:"85%","stop-opacity":.85,"stop-color":a.toCssColorString()},{tagName:"stop",offset:"95%","stop-opacity":.05,"stop-color":a.toCssColorString()}]},{id:"animation_shuttleRingSwooshHovered",tagName:"linearGradient",x1:"50%",y1:"0%",x2:"50%",y2:"100%",children:[{tagName:"stop",offset:"0%","stop-opacity":.2,"stop-color":c.toCssColorString()},{tagName:"stop",offset:"85%","stop-opacity":.85,"stop-color":c.toCssColorString()},{tagName:"stop",offset:"95%","stop-opacity":.05,"stop-color":c.toCssColorString()}]},{id:"animation_shuttleRingPointerGradient",tagName:"linearGradient",x1:"0%",y1:"50%",x2:"100%",y2:"50%",children:[{tagName:"stop",offset:"0%","stop-color":s.toCssColorString()},{tagName:"stop",offset:"40%","stop-color":s.toCssColorString()},{tagName:"stop",offset:"60%","stop-color":Ms(s,NVe)},{tagName:"stop",offset:"100%","stop-color":Ms(s,NVe)}]},{id:"animation_shuttleRingPointerPaused",tagName:"linearGradient",x1:"0%",y1:"50%",x2:"100%",y2:"50%",children:[{tagName:"stop",offset:"0%","stop-color":"#CCC"},{tagName:"stop",offset:"40%","stop-color":"#CCC"},{tagName:"stop",offset:"60%","stop-color":"#555"},{tagName:"stop",offset:"100%","stop-color":"#555"}]},{id:"animation_knobOuter",tagName:"linearGradient",x1:"20%",y1:"0%",x2:"90%",y2:"100%",children:[{tagName:"stop",offset:"5%","stop-color":Ms(r,qv)},{tagName:"stop",offset:"60%","stop-color":Ms(r,wVe)},{tagName:"stop",offset:"85%","stop-color":Ms(r,Cz)}]},{id:"animation_knobInner",tagName:"linearGradient",x1:"20%",y1:"0%",x2:"90%",y2:"100%",children:[{tagName:"stop",offset:"5%","stop-color":Ms(r,wVe)},{tagName:"stop",offset:"60%","stop-color":Ms(r,qv)},{tagName:"stop",offset:"85%","stop-color":Ms(r,Tz)}]}]});l(this._defsElement)?this._svgNode.replaceChild(d,this._defsElement):this._svgNode.appendChild(d),this._defsElement=d};var eU=gR;var TOo=y(x(),1);var xFt=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],ix=15,bR=105;function XVe(e,t){return e-t}function One(e,t){let n=yo(t,e,XVe);return n<0?~n:n}function CFt(e,t){if(Math.abs(e)<=ix)return e/ix;let n=ix,i=bR,o,r=0,s;return e>0?(o=Math.log(t[t.length-1]),s=(o-r)/(i-n),Math.exp(r+s*(e-n))):(o=Math.log(-t[0]),s=(o-r)/(i-n),-Math.exp(r+s*(Math.abs(e)-n)))}function TFt(e,t,n){if(n.clockStep===Xo.SYSTEM_CLOCK)return ix;if(Math.abs(e)<=1)return e*ix;let i=t[t.length-1];e>i?e=i:e<-i&&(e=-i);let o=ix,r=bR,s,a=0,c;return e>0?(s=Math.log(i),c=(s-a)/(r-o),(Math.log(e)-a)/c+o):(s=Math.log(-t[0]),c=(s-a)/(r-o),-((Math.log(Math.abs(e))-a)/c+o))}function uh(e){let t=this;this._clockViewModel=e,this._allShuttleRingTicks=[],this._dateFormatter=uh.defaultDateFormatter,this._timeFormatter=uh.defaultTimeFormatter,this.shuttleRingDragging=!1,this.snapToTicks=!1,Ie.track(this,["_allShuttleRingTicks","_dateFormatter","_timeFormatter","shuttleRingDragging","snapToTicks"]),this._sortedFilteredPositiveTicks=[],this.setShuttleRingTicks(uh.defaultTicks),this.timeLabel=void 0,Ie.defineProperty(this,"timeLabel",function(){return t._timeFormatter(t._clockViewModel.currentTime,t)}),this.dateLabel=void 0,Ie.defineProperty(this,"dateLabel",function(){return t._dateFormatter(t._clockViewModel.currentTime,t)}),this.multiplierLabel=void 0,Ie.defineProperty(this,"multiplierLabel",function(){let s=t._clockViewModel;if(s.clockStep===Xo.SYSTEM_CLOCK)return"Today";let a=s.multiplier;return a%1===0?`${a.toFixed(0)}x`:`${a.toFixed(3).replace(/0{0,3}$/,"")}x`}),this.shuttleRingAngle=void 0,Ie.defineProperty(this,"shuttleRingAngle",{get:function(){return TFt(e.multiplier,t._allShuttleRingTicks,e)},set:function(s){s=Math.max(Math.min(s,bR),-bR);let a=t._allShuttleRingTicks,c=t._clockViewModel;if(c.clockStep=Xo.SYSTEM_CLOCK_MULTIPLIER,Math.abs(s)===bR){c.multiplier=s>0?a[a.length-1]:a[0];return}let d=CFt(s,a);if(t.snapToTicks)d=a[One(d,a)];else if(d!==0){let u=Math.abs(d);if(u>100){let h=u.toFixed(0).length-2,p=Math.pow(10,h);d=Math.round(d/p)*p|0}else u>ix?d=Math.round(d):u>1?d=+d.toFixed(1):u>0&&(d=+d.toFixed(2))}c.multiplier=d}}),this._canAnimate=void 0,Ie.defineProperty(this,"_canAnimate",function(){let s=t._clockViewModel,a=s.clockRange;if(t.shuttleRingDragging||a===xs.UNBOUNDED)return!0;let c=s.multiplier,d=s.currentTime,u=s.startTime,h=!1;if(a===xs.LOOP_STOP)h=q.greaterThan(d,u)||d.equals(u)&&c>0;else{let p=s.stopTime;h=q.greaterThan(d,u)&&q.lessThan(d,p)||d.equals(u)&&c>0||d.equals(p)&&c<0}return h||(s.shouldAnimate=!1),h}),this._isSystemTimeAvailable=void 0,Ie.defineProperty(this,"_isSystemTimeAvailable",function(){let s=t._clockViewModel;if(s.clockRange===xs.UNBOUNDED)return!0;let c=s.systemTime;return q.greaterThanOrEquals(c,s.startTime)&&q.lessThanOrEquals(c,s.stopTime)}),this._isAnimating=void 0,Ie.defineProperty(this,"_isAnimating",function(){return t._clockViewModel.shouldAnimate&&(t._canAnimate||t.shuttleRingDragging)});let n=Fn(function(){let s=t._clockViewModel;s.shouldAnimate?s.shouldAnimate=!1:t._canAnimate&&(s.shouldAnimate=!0)});this._pauseViewModel=new tx(n,{toggled:Ie.computed(function(){return!t._isAnimating}),tooltip:"Pause"});let i=Fn(function(){let s=t._clockViewModel,a=s.multiplier;a>0&&(s.multiplier=-a),s.shouldAnimate=!0});this._playReverseViewModel=new tx(i,{toggled:Ie.computed(function(){return t._isAnimating&&e.multiplier<0}),tooltip:"Play Reverse"});let o=Fn(function(){let s=t._clockViewModel,a=s.multiplier;a<0&&(s.multiplier=-a),s.shouldAnimate=!0});this._playForwardViewModel=new tx(o,{toggled:Ie.computed(function(){return t._isAnimating&&e.multiplier>0&&e.clockStep!==Xo.SYSTEM_CLOCK}),tooltip:"Play Forward"});let r=Fn(function(){t._clockViewModel.clockStep=Xo.SYSTEM_CLOCK},Ie.getObservable(this,"_isSystemTimeAvailable"));this._playRealtimeViewModel=new tx(r,{toggled:Ie.computed(function(){return e.clockStep===Xo.SYSTEM_CLOCK}),tooltip:Ie.computed(function(){return t._isSystemTimeAvailable?"Today (real-time)":"Current time not in range"})}),this._slower=Fn(function(){let s=t._clockViewModel,a=t._allShuttleRingTicks,c=s.multiplier,d=One(c,a)-1;d>=0&&(s.multiplier=a[d])}),this._faster=Fn(function(){let s=t._clockViewModel,a=t._allShuttleRingTicks,c=s.multiplier,d=One(c,a)+1;d<a.length&&(s.multiplier=a[d])})}uh.defaultDateFormatter=function(e,t){let n=q.toGregorianDate(e);return`${xFt[n.month-1]} ${n.day} ${n.year}`};uh.defaultTicks=[.001,.002,.005,.01,.02,.05,.1,.25,.5,1,2,5,10,15,30,60,120,300,600,900,1800,3600,7200,14400,21600,43200,86400,172800,345600,604800];uh.defaultTimeFormatter=function(e,t){let n=q.toGregorianDate(e),i=Math.round(n.millisecond);return Math.abs(t._clockViewModel.multiplier)<1?`${n.hour.toString().padStart(2,"0")}:${n.minute.toString().padStart(2,"0")}:${n.second.toString().padStart(2,"0")}.${i.toString().padStart(3,"0")}`:`${n.hour.toString().padStart(2,"0")}:${n.minute.toString().padStart(2,"0")}:${n.second.toString().padStart(2,"0")} UTC`};uh.prototype.getShuttleRingTicks=function(){return this._sortedFilteredPositiveTicks.slice(0)};uh.prototype.setShuttleRingTicks=function(e){let t,n,i,o={},r=this._sortedFilteredPositiveTicks;for(r.length=0,t=0,n=e.length;t<n;++t)i=e[t],o.hasOwnProperty(i)||(o[i]=!0,r.push(i));r.sort(XVe);let s=[];for(n=r.length,t=n-1;t>=0;--t)i=r[t],i!==0&&s.push(-i);ri(s,r),this._allShuttleRingTicks=s};Object.defineProperties(uh.prototype,{slower:{get:function(){return this._slower}},faster:{get:function(){return this._faster}},clockViewModel:{get:function(){return this._clockViewModel}},pauseViewModel:{get:function(){return this._pauseViewModel}},playReverseViewModel:{get:function(){return this._playReverseViewModel}},playForwardViewModel:{get:function(){return this._playForwardViewModel}},playRealtimeViewModel:{get:function(){return this._playRealtimeViewModel}},dateFormatter:{get:function(){return this._dateFormatter},set:function(e){this._dateFormatter=e}},timeFormatter:{get:function(){return this._timeFormatter},set:function(e){this._timeFormatter=e}}});uh._maxShuttleRingAngle=bR;uh._realtimeShuttleRingAngle=ix;var tU=uh;var BOo=y(x(),1);var ZOo=y(x(),1);function EFt(e){return function(t){let n=e._scene.pick(t.position);l(n)&&n.primitive instanceof js&&(e.tileset=n.primitive),e.pickActive=!1}}function MVe(e,t){t?e._eventHandler.setInputAction(function(n){let i=e._scene.pick(n.endPosition);l(i)&&i.primitive instanceof js&&(e.tileset=i.primitive)},Gn.MOUSE_MOVE):(e._eventHandler.removeInputAction(Gn.MOUSE_MOVE),e.picking=e.picking)}var SFt={maximumFractionDigits:3};function nU(e){let t=e/1048576;return t<1?t.toLocaleString(void 0,SFt):Math.round(t).toLocaleString()}function iU(e,t){if(!l(e))return"";let n=t?e._statisticsPerPass[sr.PICK]:e._statisticsPerPass[sr.RENDER],i='<ul class="cesium-cesiumInspector-statistics">';return i+=`<li><strong>Visited: </strong>${n.visited.toLocaleString()}</li><li><strong>Selected: </strong>${n.selected.toLocaleString()}</li><li><strong>Commands: </strong>${n.numberOfCommands.toLocaleString()}</li>`,i+="</ul>",t||(i+='<ul class="cesium-cesiumInspector-statistics">',i+=`<li><strong>Requests: </strong>${n.numberOfPendingRequests.toLocaleString()}</li><li><strong>Attempted: </strong>${n.numberOfAttemptedRequests.toLocaleString()}</li><li><strong>Processing: </strong>${n.numberOfTilesProcessing.toLocaleString()}</li><li><strong>Content Ready: </strong>${n.numberOfTilesWithContentReady.toLocaleString()}</li><li><strong>Total: </strong>${n.numberOfTilesTotal.toLocaleString()}</li>`,i+="</ul>",i+='<ul class="cesium-cesiumInspector-statistics">',i+=`<li><strong>Features Selected: </strong>${n.numberOfFeaturesSelected.toLocaleString()}</li><li><strong>Features Loaded: </strong>${n.numberOfFeaturesLoaded.toLocaleString()}</li><li><strong>Points Selected: </strong>${n.numberOfPointsSelected.toLocaleString()}</li><li><strong>Points Loaded: </strong>${n.numberOfPointsLoaded.toLocaleString()}</li><li><strong>Triangles Selected: </strong>${n.numberOfTrianglesSelected.toLocaleString()}</li>`,i+="</ul>",i+='<ul class="cesium-cesiumInspector-statistics">',i+=`<li><strong>Tiles styled: </strong>${n.numberOfTilesStyled.toLocaleString()}</li><li><strong>Features styled: </strong>${n.numberOfFeaturesStyled.toLocaleString()}</li>`,i+="</ul>",i+='<ul class="cesium-cesiumInspector-statistics">',i+=`<li><strong>Children Union Culled: </strong>${n.numberOfTilesCulledWithChildrenUnion.toLocaleString()}</li>`,i+="</ul>",i+='<ul class="cesium-cesiumInspector-statistics">',i+=`<li><strong>Geometry Memory (MB): </strong>${nU(n.geometryByteLength)}</li><li><strong>Texture Memory (MB): </strong>${nU(n.texturesByteLength)}</li><li><strong>Batch Table Memory (MB): </strong>${nU(n.batchTableByteLength)}</li>`,i+="</ul>"),i}function vVe(){let e=Fi.statistics;return`
<ul class="cesium-cesiumInspector-statistics">
<li><strong>Geometry Memory (MB): </strong>${nU(e.geometryByteLength)}</li>
<li><strong>Texture Memory (MB): </strong>${nU(e.texturesByteLength)}</li>
</ul>
`}var _Ft=[{text:"Highlight",value:yd.HIGHLIGHT},{text:"Replace",value:yd.REPLACE},{text:"Mix",value:yd.MIX}],YVe=new U(1,1,0,.4),IFt=new U,Sz=new U;function bc(e,t){let n=this,i=e.canvas;this._eventHandler=new Du(i),this._scene=e,this._performanceContainer=t,this._canvas=i,this._performanceDisplay=new Tb({container:t}),this._statisticsText="",this._pickStatisticsText="",this._resourceCacheStatisticsText="",this._editorError="",this.performance=!1,this.showStatistics=!0,this.showPickStatistics=!0,this.showResourceCacheStatistics=!1,this.inspectorVisible=!0,this.tilesetVisible=!1,this.displayVisible=!1,this.updateVisible=!1,this.loggingVisible=!1,this.styleVisible=!1,this.tileDebugLabelsVisible=!1,this.optimizationVisible=!1,this.styleString="{}",this.hasEnabledWireframe=!1,this._tileset=void 0,this._feature=void 0,this._tile=void 0,Ie.track(this,["performance","inspectorVisible","_statisticsText","_pickStatisticsText","_resourceCacheStatisticsText","_editorError","showPickStatistics","showStatistics","showResourceCacheStatistics","tilesetVisible","displayVisible","updateVisible","loggingVisible","styleVisible","optimizationVisible","tileDebugLabelsVisible","styleString","_feature","_tile","_tileset","hasEnabledWireframe"]),this._properties=Ie.observable({}),this.properties=[],Ie.defineProperty(this,"properties",function(){let Y=[],O=n._properties();for(let J in O)O.hasOwnProperty(J)&&Y.push(J);return Y});let o=Ie.observable();Ie.defineProperty(this,"dynamicScreenSpaceError",{get:function(){return o()},set:function(Y){o(Y),l(n._tileset)&&(n._tileset.dynamicScreenSpaceError=Y)}}),this.dynamicScreenSpaceError=!1;let r=Ie.observable();Ie.defineProperty(this,"colorBlendMode",{get:function(){return r()},set:function(Y){r(Y),l(n._tileset)&&(n._tileset.colorBlendMode=Y,n._scene.requestRender())}}),this.colorBlendMode=yd.HIGHLIGHT;let s=Ie.observable(),a=Ie.observable();Ie.defineProperty(this,"picking",{get:function(){return a()},set:function(Y){a(Y),Y?n._eventHandler.setInputAction(function(O){let J=e.pick(O.endPosition);if(J instanceof Ga?(n.feature=J,n.tile=J.content.tile):l(J)&&l(J.content)?(n.feature=void 0,n.tile=J.content.tile):(n.feature=void 0,n.tile=void 0),!!l(n._tileset)){if(s&&l(J)&&l(J.content)){let te;e.pickPositionSupported&&(te=e.pickPosition(O.endPosition),l(te)&&(n._tileset.debugPickPosition=te)),n._tileset.debugPickedTile=J.content.tile}else n._tileset.debugPickedTile=void 0;n._scene.requestRender()}},Gn.MOUSE_MOVE):(n.feature=void 0,n.tile=void 0,n._eventHandler.removeInputAction(Gn.MOUSE_MOVE))}}),this.picking=!0;let c=Ie.observable();Ie.defineProperty(this,"colorize",{get:function(){return c()},set:function(Y){c(Y),l(n._tileset)&&(n._tileset.debugColorizeTiles=Y,n._scene.requestRender())}}),this.colorize=!1;let d=Ie.observable();Ie.defineProperty(this,"wireframe",{get:function(){return d()},set:function(Y){d(Y),l(n._tileset)&&(n._tileset.debugWireframe=Y,n._scene.requestRender())}}),this.wireframe=!1;let u=Ie.observable();Ie.defineProperty(this,"showBoundingVolumes",{get:function(){return u()},set:function(Y){u(Y),l(n._tileset)&&(n._tileset.debugShowBoundingVolume=Y,n._scene.requestRender())}}),this.showBoundingVolumes=!1;let h=Ie.observable();Ie.defineProperty(this,"showContentBoundingVolumes",{get:function(){return h()},set:function(Y){h(Y),l(n._tileset)&&(n._tileset.debugShowContentBoundingVolume=Y,n._scene.requestRender())}}),this.showContentBoundingVolumes=!1;let p=Ie.observable();Ie.defineProperty(this,"showRequestVolumes",{get:function(){return p()},set:function(Y){p(Y),l(n._tileset)&&(n._tileset.debugShowViewerRequestVolume=Y,n._scene.requestRender())}}),this.showRequestVolumes=!1;let A=Ie.observable();Ie.defineProperty(this,"freezeFrame",{get:function(){return A()},set:function(Y){A(Y),l(n._tileset)&&(n._tileset.debugFreezeFrame=Y,n._scene.debugShowFrustumPlanes=Y,n._scene.requestRender())}}),this.freezeFrame=!1,Ie.defineProperty(this,"showOnlyPickedTileDebugLabel",{get:function(){return s()},set:function(Y){s(Y),l(n._tileset)&&(n._tileset.debugPickedTileLabelOnly=Y,n._scene.requestRender())}}),this.showOnlyPickedTileDebugLabel=!1;let f=Ie.observable();Ie.defineProperty(this,"showGeometricError",{get:function(){return f()},set:function(Y){f(Y),l(n._tileset)&&(n._tileset.debugShowGeometricError=Y,n._scene.requestRender())}}),this.showGeometricError=!1;let b=Ie.observable();Ie.defineProperty(this,"showRenderingStatistics",{get:function(){return b()},set:function(Y){b(Y),l(n._tileset)&&(n._tileset.debugShowRenderingStatistics=Y,n._scene.requestRender())}}),this.showRenderingStatistics=!1;let C=Ie.observable();Ie.defineProperty(this,"showMemoryUsage",{get:function(){return C()},set:function(Y){C(Y),l(n._tileset)&&(n._tileset.debugShowMemoryUsage=Y,n._scene.requestRender())}}),this.showMemoryUsage=!1;let T=Ie.observable();Ie.defineProperty(this,"showUrl",{get:function(){return T()},set:function(Y){T(Y),l(n._tileset)&&(n._tileset.debugShowUrl=Y,n._scene.requestRender())}}),this.showUrl=!1;let E=Ie.observable();Ie.defineProperty(this,"maximumScreenSpaceError",{get:function(){return E()},set:function(Y){Y=Number(Y),isNaN(Y)||(E(Y),l(n._tileset)&&(n._tileset.maximumScreenSpaceError=Y))}}),this.maximumScreenSpaceError=16;let S=Ie.observable();Ie.defineProperty(this,"dynamicScreenSpaceErrorDensity",{get:function(){return S()},set:function(Y){Y=Number(Y),isNaN(Y)||(S(Y),l(n._tileset)&&(n._tileset.dynamicScreenSpaceErrorDensity=Y))}}),this.dynamicScreenSpaceErrorDensity=2e-4,this.dynamicScreenSpaceErrorDensitySliderValue=void 0,Ie.defineProperty(this,"dynamicScreenSpaceErrorDensitySliderValue",{get:function(){return Math.pow(S(),1/6)},set:function(Y){let O=Math.pow(Y,6);S(O),l(n._tileset)&&(n._tileset.dynamicScreenSpaceErrorDensity=O)}});let I=Ie.observable();Ie.defineProperty(this,"dynamicScreenSpaceErrorFactor",{get:function(){return I()},set:function(Y){Y=Number(Y),isNaN(Y)||(I(Y),l(n._tileset)&&(n._tileset.dynamicScreenSpaceErrorFactor=Y))}}),this.dynamicScreenSpaceErrorFactor=24;let R=EFt(this),V=Ie.observable();Ie.defineProperty(this,"pickActive",{get:function(){return V()},set:function(Y){V(Y),Y?n._eventHandler.setInputAction(R,Gn.LEFT_CLICK):n._eventHandler.removeInputAction(Gn.LEFT_CLICK)}});let W=Ie.observable();Ie.defineProperty(this,"pointCloudShading",{get:function(){return W()},set:function(Y){W(Y),l(n._tileset)&&(n._tileset.pointCloudShading.attenuation=Y)}}),this.pointCloudShading=!1;let B=Ie.observable();Ie.defineProperty(this,"geometricErrorScale",{get:function(){return B()},set:function(Y){Y=Number(Y),isNaN(Y)||(B(Y),l(n._tileset)&&(n._tileset.pointCloudShading.geometricErrorScale=Y))}}),this.geometricErrorScale=1;let N=Ie.observable();Ie.defineProperty(this,"maximumAttenuation",{get:function(){return N()},set:function(Y){Y=Number(Y),isNaN(Y)||(N(Y),l(n._tileset)&&(n._tileset.pointCloudShading.maximumAttenuation=Y===0?void 0:Y))}}),this.maximumAttenuation=0;let P=Ie.observable();Ie.defineProperty(this,"baseResolution",{get:function(){return P()},set:function(Y){Y=Number(Y),isNaN(Y)||(P(Y),l(n._tileset)&&(n._tileset.pointCloudShading.baseResolution=Y===0?void 0:Y))}}),this.baseResolution=0;let g=Ie.observable();Ie.defineProperty(this,"eyeDomeLighting",{get:function(){return g()},set:function(Y){g(Y),l(n._tileset)&&(n._tileset.pointCloudShading.eyeDomeLighting=Y)}}),this.eyeDomeLighting=!1;let _=Ie.observable();Ie.defineProperty(this,"eyeDomeLightingStrength",{get:function(){return _()},set:function(Y){Y=Number(Y),isNaN(Y)||(_(Y),l(n._tileset)&&(n._tileset.pointCloudShading.eyeDomeLightingStrength=Y))}}),this.eyeDomeLightingStrength=1;let Z=Ie.observable();Ie.defineProperty(this,"eyeDomeLightingRadius",{get:function(){return Z()},set:function(Y){Y=Number(Y),isNaN(Y)||(Z(Y),l(n._tileset)&&(n._tileset.pointCloudShading.eyeDomeLightingRadius=Y))}}),this.eyeDomeLightingRadius=1,this.pickActive=!1;let G=Ie.observable();Ie.defineProperty(this,"skipLevelOfDetail",{get:function(){return G()},set:function(Y){G(Y),l(n._tileset)&&(n._tileset.skipLevelOfDetail=Y)}}),this.skipLevelOfDetail=!0;let w=Ie.observable();Ie.defineProperty(this,"skipScreenSpaceErrorFactor",{get:function(){return w()},set:function(Y){Y=Number(Y),isNaN(Y)||(w(Y),l(n._tileset)&&(n._tileset.skipScreenSpaceErrorFactor=Y))}}),this.skipScreenSpaceErrorFactor=16;let X=Ie.observable();Ie.defineProperty(this,"baseScreenSpaceError",{get:function(){return X()},set:function(Y){Y=Number(Y),isNaN(Y)||(X(Y),l(n._tileset)&&(n._tileset.baseScreenSpaceError=Y))}}),this.baseScreenSpaceError=1024;let k=Ie.observable();Ie.defineProperty(this,"skipLevels",{get:function(){return k()},set:function(Y){Y=Number(Y),isNaN(Y)||(k(Y),l(n._tileset)&&(n._tileset.skipLevels=Y))}}),this.skipLevels=1;let v=Ie.observable();Ie.defineProperty(this,"immediatelyLoadDesiredLevelOfDetail",{get:function(){return v()},set:function(Y){v(Y),l(n._tileset)&&(n._tileset.immediatelyLoadDesiredLevelOfDetail=Y)}}),this.immediatelyLoadDesiredLevelOfDetail=!1;let D=Ie.observable();Ie.defineProperty(this,"loadSiblings",{get:function(){return D()},set:function(Y){D(Y),l(n._tileset)&&(n._tileset.loadSiblings=Y)}}),this.loadSiblings=!1,this._style=void 0,this._shouldStyle=!1,this._definedProperties=["properties","dynamicScreenSpaceError","colorBlendMode","picking","colorize","wireframe","showBoundingVolumes","showContentBoundingVolumes","showRequestVolumes","freezeFrame","maximumScreenSpaceError","dynamicScreenSpaceErrorDensity","baseScreenSpaceError","skipScreenSpaceErrorFactor","skipLevelOfDetail","skipLevels","immediatelyLoadDesiredLevelOfDetail","loadSiblings","dynamicScreenSpaceErrorDensitySliderValue","dynamicScreenSpaceErrorFactor","pickActive","showOnlyPickedTileDebugLabel","showGeometricError","showRenderingStatistics","showMemoryUsage","showUrl","pointCloudShading","geometricErrorScale","maximumAttenuation","baseResolution","eyeDomeLighting","eyeDomeLightingStrength","eyeDomeLightingRadius"],this._removePostRenderEvent=e.postRender.addEventListener(function(){n._update()}),l(this._tileset)||MVe(this,!0)}Object.defineProperties(bc.prototype,{scene:{get:function(){return this._scene}},performanceContainer:{get:function(){return this._performanceContainer}},statisticsText:{get:function(){return this._statisticsText}},pickStatisticsText:{get:function(){return this._pickStatisticsText}},resourceCacheStatisticsText:{get:function(){return this._resourceCacheStatisticsText}},colorBlendModes:{get:function(){return _Ft}},editorError:{get:function(){return this._editorError}},tileset:{get:function(){return this._tileset},set:function(e){if(this._tileset=e,this._style=void 0,this.styleString="{}",this.feature=void 0,this.tile=void 0,l(e)){this._properties(e.properties);let t=["colorize","wireframe","showBoundingVolumes","showContentBoundingVolumes","showRequestVolumes","freezeFrame","showOnlyPickedTileDebugLabel","showGeometricError","showRenderingStatistics","showMemoryUsage","showUrl"],n=t.length;for(let o=0;o<n;++o){let r=t[o];this[r]=this[r]}this.maximumScreenSpaceError=e.maximumScreenSpaceError,this.dynamicScreenSpaceError=e.dynamicScreenSpaceError,this.dynamicScreenSpaceErrorDensity=e.dynamicScreenSpaceErrorDensity,this.dynamicScreenSpaceErrorFactor=e.dynamicScreenSpaceErrorFactor,this.colorBlendMode=e.colorBlendMode,this.skipLevelOfDetail=e.skipLevelOfDetail,this.skipScreenSpaceErrorFactor=e.skipScreenSpaceErrorFactor,this.baseScreenSpaceError=e.baseScreenSpaceError,this.skipLevels=e.skipLevels,this.immediatelyLoadDesiredLevelOfDetail=e.immediatelyLoadDesiredLevelOfDetail,this.loadSiblings=e.loadSiblings,this.hasEnabledWireframe=e._enableDebugWireframe;let i=e.pointCloudShading;this.pointCloudShading=i.attenuation,this.geometricErrorScale=i.geometricErrorScale,this.maximumAttenuation=i.maximumAttenuation?i.maximumAttenuation:0,this.baseResolution=i.baseResolution?i.baseResolution:0,this.eyeDomeLighting=i.eyeDomeLighting,this.eyeDomeLightingStrength=i.eyeDomeLightingStrength,this.eyeDomeLightingRadius=i.eyeDomeLightingRadius,this._scene.requestRender()}else this._properties({});this._statisticsText=iU(e,!1),this._pickStatisticsText=iU(e,!0),this._resourceCacheStatisticsText=vVe(),MVe(this,!1)}},feature:{get:function(){return this._feature},set:function(e){if(this._feature===e)return;let t=this._feature;l(t)&&!t.content.isDestroyed()&&(!this.colorize&&l(this._style)?t.color=l(this._style.color)?this._style.color.evaluateColor(t,IFt):U.WHITE:t.color=Sz,this._scene.requestRender()),l(e)&&(U.clone(e.color,Sz),e.color=YVe,this._scene.requestRender()),this._feature=e}},tile:{get:function(){return this._tile},set:function(e){if(this._tile===e)return;let t=this._tile;l(t)&&!t.isDestroyed()&&!zne(t.content)&&(t.color=Sz,this._scene.requestRender()),l(e)&&!zne(e.content)&&(U.clone(e.color,Sz),e.color=YVe,this._scene.requestRender()),this._tile=e}}});function zne(e){if(!l(e))return!1;if(e.featuresLength>0)return!0;let t=e.innerContents;if(l(t)){let n=t.length;for(let i=0;i<n;++i)if(!zne(t[i]))return!1;return!0}return!1}bc.prototype.togglePickTileset=function(){this.pickActive=!this.pickActive};bc.prototype.toggleInspector=function(){this.inspectorVisible=!this.inspectorVisible};bc.prototype.toggleTileset=function(){this.tilesetVisible=!this.tilesetVisible};bc.prototype.toggleDisplay=function(){this.displayVisible=!this.displayVisible};bc.prototype.toggleUpdate=function(){this.updateVisible=!this.updateVisible};bc.prototype.toggleLogging=function(){this.loggingVisible=!this.loggingVisible};bc.prototype.toggleStyle=function(){this.styleVisible=!this.styleVisible};bc.prototype.toggleTileDebugLabels=function(){this.tileDebugLabelsVisible=!this.tileDebugLabelsVisible};bc.prototype.toggleOptimization=function(){this.optimizationVisible=!this.optimizationVisible};bc.prototype.trimTilesCache=function(){l(this._tileset)&&this._tileset.trimLoadedTiles()};bc.prototype.compileStyle=function(){let e=this._tileset;if(!(!l(e)||this.styleString===JSON.stringify(e.style))){this._editorError="";try{this.styleString.length===0&&(this.styleString="{}"),this._style=new Wg(JSON.parse(this.styleString)),this._shouldStyle=!0,this._scene.requestRender()}catch(t){this._editorError=t.toString()}this.feature=this._feature,this.tile=this._tile}};bc.prototype.styleEditorKeyPress=function(e,t){if(t.keyCode===9){t.preventDefault();let n=t.target,i=n.selectionStart,o=n.selectionEnd,r=o,a=n.value.slice(i,o).split(`
`),c=a.length,d;if(t.shiftKey)for(d=0;d<c;++d)a[d][0]===" "&&(a[d][1]===" "?(a[d]=a[d].substr(2),r-=2):(a[d]=a[d].substr(1),r-=1));else for(d=0;d<c;++d)a[d]=` ${a[d]}`,r+=2;let u=a.join(`
`);n.value=n.value.slice(0,i)+u+n.value.slice(o),n.selectionStart=i!==o?i:r,n.selectionEnd=r}else t.ctrlKey&&(t.keyCode===10||t.keyCode===13)&&this.compileStyle();return!0};bc.prototype._update=function(){let e=this._tileset;if(this.performance&&this._performanceDisplay.update(),l(e)){if(e.isDestroyed()){this.tile=void 0,this.feature=void 0,this.tileset=void 0;return}let t=e.style;this._style!==e.style&&(this._shouldStyle?(e.style=this._style,this._shouldStyle=!1):(this._style=t,this.styleString=JSON.stringify(t.style,null," ")))}this.showStatistics&&(this._statisticsText=iU(e,!1),this._pickStatisticsText=iU(e,!0),this._resourceCacheStatisticsText=vVe())};bc.prototype.isDestroyed=function(){return!1};bc.prototype.destroy=function(){this._eventHandler.destroy(),this._removePostRenderEvent();let e=this;return this._definedProperties.forEach(function(t){Ie.getObservable(e,t).dispose()}),he(this)};bc.getStatistics=iU;var oU=bc;function _z(e,t){e=vn(e);let n=document.createElement("div"),i=document.createElement("div");i.setAttribute("data-bind","visible: performance");let o=new oU(t,i);this._viewModel=o,this._container=e,this._element=n;let r=document.createElement("div");r.textContent="3D Tiles Inspector",r.className="cesium-cesiumInspector-button",r.setAttribute("data-bind","click: toggleInspector"),n.appendChild(r),n.className="cesium-cesiumInspector cesium-3DTilesInspector",n.setAttribute("data-bind",'css: { "cesium-cesiumInspector-visible" : inspectorVisible, "cesium-cesiumInspector-hidden" : !inspectorVisible}'),e.appendChild(n);let s=document.createElement("div");s.className="cesium-cesiumInspector-dropDown",n.appendChild(s);let a=Od.createSection,c=Od.createCheckbox,d=Od.createRangeInput,u=Od.createButton,h=a(s,"Tileset","tilesetVisible","toggleTileset"),p=a(s,"Display","displayVisible","toggleDisplay"),A=a(s,"Update","updateVisible","toggleUpdate"),f=a(s,"Logging","loggingVisible","toggleLogging"),b=a(s,"Tile Debug Labels","tileDebugLabelsVisible","toggleTileDebugLabels"),C=a(s,"Style","styleVisible","toggleStyle"),T=a(s,"Optimization","optimizationVisible","toggleOptimization"),E=document.createElement("div");E.className="field-group";let S=document.createElement("label");S.className="field-label",S.appendChild(document.createTextNode("Properties: "));let I=document.createElement("div");I.setAttribute("data-bind","text: properties"),E.appendChild(S),E.appendChild(I),h.appendChild(E),h.appendChild(u("Pick Tileset","togglePickTileset","pickActive")),h.appendChild(u("Trim Tiles Cache","trimTilesCache")),h.appendChild(c("Enable Picking","picking")),p.appendChild(c("Colorize","colorize"));let R=p.appendChild(c("Wireframe","wireframe","_tileset === undefined || hasEnabledWireframe")),V=document.createElement("p");V.setAttribute("data-bind","visible: _tileset !== undefined && !hasEnabledWireframe"),V.setAttribute("class","cesium-3DTilesInspector-disabledElementsInfo"),V.innerText="Set enableDebugWireframe to true in the tileset constructor to enable this option.",R.appendChild(V),p.appendChild(c("Bounding Volumes","showBoundingVolumes")),p.appendChild(c("Content Volumes","showContentBoundingVolumes")),p.appendChild(c("Request Volumes","showRequestVolumes")),p.appendChild(c("Point Cloud Shading","pointCloudShading"));let W=document.createElement("div");W.setAttribute("data-bind","visible: pointCloudShading"),W.appendChild(d("Geometric Error Scale","geometricErrorScale",0,2,.01)),W.appendChild(d("Maximum Attenuation","maximumAttenuation",0,32,1)),W.appendChild(d("Base Resolution","baseResolution",0,1,.01)),W.appendChild(c("Eye Dome Lighting (EDL)","eyeDomeLighting")),p.appendChild(W);let B=document.createElement("div");B.setAttribute("data-bind","visible: eyeDomeLighting"),B.appendChild(d("EDL Strength","eyeDomeLightingStrength",0,2,.1)),B.appendChild(d("EDL Radius","eyeDomeLightingRadius",0,4,.1)),W.appendChild(B),A.appendChild(c("Freeze Frame","freezeFrame")),A.appendChild(c("Dynamic Screen Space Error","dynamicScreenSpaceError"));let N=document.createElement("div");N.appendChild(d("Maximum Screen Space Error","maximumScreenSpaceError",0,128,1)),A.appendChild(N);let P=document.createElement("div");P.setAttribute("data-bind","visible: dynamicScreenSpaceError"),P.appendChild(d("Screen Space Error Density","dynamicScreenSpaceErrorDensitySliderValue",0,1,.005,"dynamicScreenSpaceErrorDensity")),P.appendChild(d("Screen Space Error Factor","dynamicScreenSpaceErrorFactor",1,32,.1)),A.appendChild(P),f.appendChild(c("Performance","performance")),f.appendChild(i),f.appendChild(c("Statistics","showStatistics"));let g=document.createElement("div");g.className="cesium-3dTilesInspector-statistics",g.setAttribute("data-bind","html: statisticsText, visible: showStatistics"),f.appendChild(g),f.appendChild(c("Pick Statistics","showPickStatistics"));let _=document.createElement("div");_.className="cesium-3dTilesInspector-statistics",_.setAttribute("data-bind","html: pickStatisticsText, visible: showPickStatistics"),f.appendChild(_),f.appendChild(c("Resource Cache Statistics","showResourceCacheStatistics"));let Z=document.createElement("div");Z.className="cesium-3dTilesInspector-statistics",Z.setAttribute("data-bind","html: resourceCacheStatisticsText, visible: showResourceCacheStatistics"),f.appendChild(Z);let G=document.createElement("div");C.appendChild(G),G.appendChild(document.createTextNode("Color Blend Mode: "));let w=document.createElement("select");w.setAttribute("data-bind",'options: colorBlendModes, optionsText: "text", optionsValue: "value", value: colorBlendMode'),G.appendChild(w);let X=document.createElement("textarea");X.setAttribute("data-bind","textInput: styleString, event: { keydown: styleEditorKeyPress }"),G.className="cesium-cesiumInspector-styleEditor",G.appendChild(X);let k=u("Compile (Ctrl+Enter)","compileStyle");G.appendChild(k);let v=document.createElement("div");v.className="cesium-cesiumInspector-error",v.setAttribute("data-bind","text: editorError"),G.appendChild(v),b.appendChild(c("Show Picked Only","showOnlyPickedTileDebugLabel")),b.appendChild(c("Geometric Error","showGeometricError")),b.appendChild(c("Rendering Statistics","showRenderingStatistics")),b.appendChild(c("Memory Usage (MB)","showMemoryUsage")),b.appendChild(c("Url","showUrl")),T.appendChild(c("Skip Tile LODs","skipLevelOfDetail"));let D=document.createElement("div");D.appendChild(d("Skip SSE Factor","skipScreenSpaceErrorFactor",1,50,1)),T.appendChild(D);let Y=document.createElement("div");Y.appendChild(d("SSE before skipping LOD","baseScreenSpaceError",0,4096,1)),T.appendChild(Y);let O=document.createElement("div");O.appendChild(d("Min. levels to skip","skipLevels",0,10,1)),T.appendChild(O),T.appendChild(c("Load only tiles that meet the max SSE.","immediatelyLoadDesiredLevelOfDetail")),T.appendChild(c("Load siblings of visible tiles","loadSiblings")),Ie.applyBindings(o,n)}Object.defineProperties(_z.prototype,{container:{get:function(){return this._container}},viewModel:{get:function(){return this._viewModel}}});_z.prototype.isDestroyed=function(){return!1};_z.prototype.destroy=function(){return Ie.cleanNode(this._element),this._container.removeChild(this._element),this.viewModel.destroy(),he(this)};var rU=_z;var zOo=y(x(),1);var MOo=y(x(),1);function UVe(e){e=e??Q.EMPTY_OBJECT;let t=e.globe,n=e.imageryProviderViewModels??Q.EMPTY_ARRAY,i=e.terrainProviderViewModels??Q.EMPTY_ARRAY;this._globe=t,this.imageryProviderViewModels=n.slice(0),this.terrainProviderViewModels=i.slice(0),this.dropDownVisible=!1,Ie.track(this,["imageryProviderViewModels","terrainProviderViewModels","dropDownVisible"]);let o=Ie.getObservable(this,"imageryProviderViewModels"),r=Ie.pureComputed(function(){let h=o(),p={},A;for(A=0;A<h.length;A++){let C=h[A],T=C.category;l(p[T])?p[T].push(C):p[T]=[C]}let f=Object.keys(p),b=[];for(A=0;A<f.length;A++){let C=f[A];b.push({name:C,providers:p[C]})}return b});this._imageryProviders=r;let s=Ie.getObservable(this,"terrainProviderViewModels"),a=Ie.pureComputed(function(){let h=s(),p={},A;for(A=0;A<h.length;A++){let C=h[A],T=C.category;l(p[T])?p[T].push(C):p[T]=[C]}let f=Object.keys(p),b=[];for(A=0;A<f.length;A++){let C=f[A];b.push({name:C,providers:p[C]})}return b});this._terrainProviders=a,this.buttonTooltip=void 0,Ie.defineProperty(this,"buttonTooltip",function(){let h=this.selectedImagery,p=this.selectedTerrain,A=l(h)?h.name:void 0,f=l(p)?p.name:void 0;return l(A)&&l(f)?`${A}
${f}`:l(A)?A:f}),this.buttonImageUrl=void 0,Ie.defineProperty(this,"buttonImageUrl",function(){let h=this.selectedImagery;if(l(h))return h.iconUrl}),this.selectedImagery=void 0;let c=Ie.observable();this.updateSelectedImageryViewModel=h=>{c(h),this.dropDownVisible=!1},this._currentImageryLayers=[],Ie.defineProperty(this,"selectedImagery",{get:function(){return c()},set:function(h){if(c()===h){this.dropDownVisible=!1;return}let p=e.map,A,f=this._currentImageryLayers,b=f.length,C=this._globe.imageryLayers,T=!1;if(!p)for(A=0;A<b;A++){let E=C.length;for(let S=0;S<E;S++){let I=C.get(S);if(I===f[A]){C.remove(I),T=!0;break}}}if(l(h))if(p&&h.marsOptions)p.basemap=h.marsOptions.layerId;else if(p&&h.options&&h.isTile)p.basemap=h.options.id;else{let E=h.creationCommand();if(Array.isArray(E)){let S=E.length;for(this._currentImageryLayers=[],A=S-1;A>=0;A--){let I=fs.fromProviderAsync(E[A]);C.add(I,0),this._currentImageryLayers.push(I)}}else{this._currentImageryLayers=[];let S=fs.fromProviderAsync(E);if(S.name=h.name,T)C.add(S,0);else{let I=C.get(0);l(I)&&C.remove(I),C.add(S,0)}this._currentImageryLayers.push(S)}}else p&&(p.basemap=void 0);c(h),this.dropDownVisible=!1}}),this.selectedTerrain=void 0;let d=Ie.observable();this.updateSelectedTerrainViewModel=h=>{d(h),this.dropDownVisible=!1},Ie.defineProperty(this,"selectedTerrain",{get:function(){return d()},set:function(h){if(d()===h){this.dropDownVisible=!1;return}let p;if(l(h)&&(p=h.creationCommand()),l(p)&&!l(p.then)){if(e.map&&h.marsOptions){e.map.terrainProvider=p;return}this._globe.terrainProvider=p}else if(l(p)){let A=!1,f=this._globe.terrainProviderChanged.addEventListener(()=>{A=!0,f()}),C=new kv(p).readyEvent.addEventListener(T=>{if(!A){if(e.map&&h.marsOptions){e.map.terrainProvider=T;return}this._globe.terrainProvider=T,C()}})}d(h),this.dropDownVisible=!1}});let u=this;this._toggleDropDown=Fn(function(){u.dropDownVisible=!u.dropDownVisible}),this.selectedImagery=e.selectedImageryProviderViewModel,this.selectedTerrain=e.selectedTerrainProviderViewModel}Object.defineProperties(UVe.prototype,{toggleDropDown:{get:function(){return this._toggleDropDown}},globe:{get:function(){return this._globe}}});var sU=UVe;function Iz(e,t){e=vn(e);let n=new sU(t),i=document.createElement("button");i.type="button",i.className="cesium-button cesium-toolbar-button",i.setAttribute("data-bind","attr: { title: buttonTooltip },click: toggleDropDown"),e.appendChild(i);let o=document.createElement("img");o.setAttribute("draggable","false"),o.className="cesium-baseLayerPicker-selected",o.setAttribute("data-bind","attr: { src: buttonImageUrl }, visible: !!buttonImageUrl"),i.appendChild(o);let r=document.createElement("div");r.className="cesium-baseLayerPicker-dropDown",r.setAttribute("data-bind",'css: { "cesium-baseLayerPicker-dropDown-visible" : dropDownVisible }'),e.appendChild(r);let s=document.createElement("div");s.className="cesium-baseLayerPicker-sectionTitle",s.setAttribute("data-bind","visible: imageryProviderViewModels.length > 0"),s.innerHTML="Imagery",r.appendChild(s);let a=document.createElement("div");a.className="cesium-baseLayerPicker-section",a.setAttribute("data-bind","foreach: _imageryProviders"),r.appendChild(a);let c=document.createElement("div");c.className="cesium-baseLayerPicker-category",a.appendChild(c);let d=document.createElement("div");d.className="cesium-baseLayerPicker-categoryTitle",d.setAttribute("data-bind","text: name"),c.appendChild(d);let u=document.createElement("div");u.className="cesium-baseLayerPicker-choices",u.setAttribute("data-bind","foreach: providers"),c.appendChild(u);let h=document.createElement("div");h.className="cesium-baseLayerPicker-item",h.setAttribute("data-bind",'css: { "cesium-baseLayerPicker-selectedItem" : $data === $parents[1].selectedImagery },attr: { title: tooltip },visible: creationCommand.canExecute,click: function($data) { $parents[1].selectedImagery = $data; }'),u.appendChild(h);let p=document.createElement("img");p.className="cesium-baseLayerPicker-itemIcon",p.setAttribute("data-bind","attr: { src: iconUrl }"),p.setAttribute("draggable","false"),h.appendChild(p);let A=document.createElement("div");A.className="cesium-baseLayerPicker-itemLabel",A.setAttribute("data-bind","text: name"),h.appendChild(A);let f=document.createElement("div");f.className="cesium-baseLayerPicker-sectionTitle",f.setAttribute("data-bind","visible: terrainProviderViewModels.length > 0"),f.innerHTML="Terrain",r.appendChild(f);let b=document.createElement("div");b.className="cesium-baseLayerPicker-section",b.setAttribute("data-bind","foreach: _terrainProviders"),r.appendChild(b);let C=document.createElement("div");C.className="cesium-baseLayerPicker-category",b.appendChild(C);let T=document.createElement("div");T.className="cesium-baseLayerPicker-categoryTitle",T.setAttribute("data-bind","text: name"),C.appendChild(T);let E=document.createElement("div");E.className="cesium-baseLayerPicker-choices",E.setAttribute("data-bind","foreach: providers"),C.appendChild(E);let S=document.createElement("div");S.className="cesium-baseLayerPicker-item",S.setAttribute("data-bind",'css: { "cesium-baseLayerPicker-selectedItem" : $data === $parents[1].selectedTerrain },attr: { title: tooltip },visible: creationCommand.canExecute,click: function($data) { $parents[1].selectedTerrain = $data; }'),E.appendChild(S);let I=document.createElement("img");I.className="cesium-baseLayerPicker-itemIcon",I.setAttribute("data-bind","attr: { src: iconUrl }"),I.setAttribute("draggable","false"),S.appendChild(I);let R=document.createElement("div");R.className="cesium-baseLayerPicker-itemLabel",R.setAttribute("data-bind","text: name"),S.appendChild(R),Ie.applyBindings(n,i),Ie.applyBindings(n,r),this._viewModel=n,this._container=e,this._element=i,this._dropPanel=r,this._closeDropDown=function(V){i.contains(V.target)||r.contains(V.target)||(n.dropDownVisible=!1)},hn.supportsPointerEvents()?document.addEventListener("pointerdown",this._closeDropDown,!0):(document.addEventListener("mousedown",this._closeDropDown,!0),document.addEventListener("touchstart",this._closeDropDown,!0))}Object.defineProperties(Iz.prototype,{container:{get:function(){return this._container}},viewModel:{get:function(){return this._viewModel}}});Iz.prototype.isDestroyed=function(){return!1};Iz.prototype.destroy=function(){return hn.supportsPointerEvents()?document.removeEventListener("pointerdown",this._closeDropDown,!0):(document.removeEventListener("mousedown",this._closeDropDown,!0),document.removeEventListener("touchstart",this._closeDropDown,!0)),Ie.cleanNode(this._element),Ie.cleanNode(this._dropPanel),this._container.removeChild(this._element),this._container.removeChild(this._dropPanel),he(this)};var aU=Iz;var izo=y(x(),1);var $Oo=y(x(),1);function DVe(e){let t=e.creationFunction;l(t.canExecute)||(t=Fn(t)),this._creationCommand=t,this.name=e.name,this.tooltip=e.tooltip,this.iconUrl=e.iconUrl,this._category=e.category??"",this.marsOptions=e.marsOptions,Ie.track(this,["name","tooltip","iconUrl"])}Object.defineProperties(DVe.prototype,{creationCommand:{get:function(){return this._creationCommand}},category:{get:function(){return this._category}}});var cr=DVe;function ZFt(){let e=[],t=devicePixelRatio>=2;return e.push(new cr({name:"Bing Maps Aerial",iconUrl:en("Widgets/Images/ImageryProviders/bingAerial.png"),tooltip:"Bing Maps aerial imagery, provided by Cesium ion",category:"Cesium ion",creationFunction:function(){return bg({style:gg.AERIAL})}})),e.push(new cr({name:"Bing Maps Aerial with Labels",iconUrl:en("Widgets/Images/ImageryProviders/bingAerialLabels.png"),tooltip:"Bing Maps aerial imagery with labels, provided by Cesium ion",category:"Cesium ion",creationFunction:function(){return bg({style:gg.AERIAL_WITH_LABELS})}})),e.push(new cr({name:"Bing Maps Roads",iconUrl:en("Widgets/Images/ImageryProviders/bingRoads.png"),tooltip:"Bing Maps standard road maps, provided by Cesium ion",category:"Cesium ion",creationFunction:function(){return bg({style:gg.ROAD})}})),e.push(new cr({name:"ArcGIS World Imagery",iconUrl:en("Widgets/Images/ImageryProviders/ArcGisMapServiceWorldImagery.png"),tooltip:`ArcGIS World Imagery provides one meter or better satellite and aerial imagery in many parts of the world and lower resolution satellite imagery worldwide. The map includes 15m TerraColor imagery at small and mid-scales (~1:591M down to ~1:288k) for the world. The map features Maxar imagery at 0.3m resolution for select metropolitan areas around the world, 0.5m resolution across the United States and parts of Western Europe, and 1m resolution imagery across the rest of the world. In addition to commercial sources, the World Imagery map features high-resolution aerial photography contributed by the GIS User Community. This imagery ranges from 0.3m to 0.03m resolution (down to ~1:280 nin select communities). For more information on this map, including the terms of use, visit us online at
https://www.arcgis.com/home/item.html?id=10df2279f9684e4a9f6a7f08febac2a9`,category:"Other",creationFunction:function(){return pg.fromBasemapType(Jh.SATELLITE,{enablePickFeatures:!1})}})),e.push(new cr({name:"ArcGIS World Hillshade",iconUrl:en("Widgets/Images/ImageryProviders/ArcGisMapServiceWorldHillshade.png"),tooltip:`ArcGIS World Hillshade map portrays elevation as an artistic hillshade. This map is designed to be used as a backdrop for topographical, soil, hydro, landcover or other outdoor recreational maps. The map was compiled from a variety of sources from several data providers. The basemap has global coverage down to a scale of ~1:72k. In select areas of the United States and Europe, coverage is available down to ~1:9k. For more information on this map, including the terms of use, visit us online at
https://www.arcgis.com/home/item.html?id=1b243539f4514b6ba35e7d995890db1d`,category:"Other",creationFunction:function(){return pg.fromBasemapType(Jh.HILLSHADE,{enablePickFeatures:!1})}})),e.push(new cr({name:"Esri World Ocean",iconUrl:en("Widgets/Images/ImageryProviders/ArcGisMapServiceWorldOcean.png"),tooltip:`ArcGIS World Ocean map is designed to be used as a base map by marine GIS professionals and as a reference map by anyone interested in ocean data. The base map features marine bathymetry. Land features include inland waters and roads overlaid on land cover and shaded relief imagery. The map was compiled from a variety of best available sources from several data providers, including General Bathymetric Chart of the Oceans GEBCO_08 Grid, National Oceanic and Atmospheric Administration (NOAA), and National Geographic, Garmin, HERE, Geonames.org, and Esri, and various other contributors. The base map currently provides coverage for the world down to a scale of ~1:577k, and coverage down to 1:72k in US coastal areas, and various other areas. Coverage down to ~ 1:9k is available limited areas based on regional hydrographic survey data. The base map was designed and developed by Esri. For more information on this map, including our terms of use, visit us online at
https://www.arcgis.com/home/item.html?id=1e126e7520f9466c9ca28b8f28b5e500`,category:"Other",creationFunction:function(){return pg.fromBasemapType(Jh.OCEANS,{enablePickFeatures:!1})}})),e.push(new cr({name:"Open\xADStreet\xADMap",iconUrl:en("Widgets/Images/ImageryProviders/openStreetMap.png"),tooltip:`OpenStreetMap (OSM) is a collaborative project to create a free editable map of the world.
http://www.openstreetmap.org`,category:"Other",creationFunction:function(){return new Fb({url:"https://tile.openstreetmap.org/"})}})),e.push(new cr({name:"Stadia x Stamen Watercolor",iconUrl:en("Widgets/Images/ImageryProviders/stamenWatercolor.png"),tooltip:`Based on the original basemaps created for the Knight Foundation and reminiscent of hand drawn maps, the watercolor maps from Stamen Design apply raster effect area washes and organic edges over a paper texture to add warm pop to any map.
https://docs.stadiamaps.com/map-styles/stamen-watercolor/`,category:"Other",creationFunction:function(){return new Fb({url:"https://tiles.stadiamaps.com/tiles/stamen_watercolor/",fileExtension:"jpg",credit:`&copy; <a href="https://stamen.com/" target="_blank">Stamen Design</a>
&copy; <a href="https://www.stadiamaps.com/" target="_blank">Stadia Maps</a>
&copy; <a href="https://openmaptiles.org/" target="_blank">OpenMapTiles</a>
&copy; <a href="https://www.openstreetmap.org/about/" target="_blank">OpenStreetMap contributors</a>`})}})),e.push(new cr({name:"Stadia x Stamen Toner",iconUrl:en("Widgets/Images/ImageryProviders/stamenToner.png"),tooltip:`Based on the original basemaps created for the Knight Foundation and the most popular of the excellent styles from Stamen Design, these high-contrast B+W (black and white) maps are the perfect backdrop for your colorful and eye-catching overlays.
https://docs.stadiamaps.com/map-styles/stamen-toner/`,category:"Other",creationFunction:function(){return new Fb({url:"https://tiles.stadiamaps.com/tiles/stamen_toner/",retinaTiles:t,credit:`&copy; <a href="https://stamen.com/" target="_blank">Stamen Design</a>
&copy; <a href="https://www.stadiamaps.com/" target="_blank">Stadia Maps</a>
&copy; <a href="https://openmaptiles.org/" target="_blank">OpenMapTiles</a>
&copy; <a href="https://www.openstreetmap.org/about/" target="_blank">OpenStreetMap contributors</a>`})}})),e.push(new cr({name:"Stadia Alidade Smooth",iconUrl:en("Widgets/Images/ImageryProviders/stadiaAlidadeSmooth.png"),tooltip:`Stadia's custom Alidade Smooth style is designed for maps that use a lot of markers or overlays. It features a muted color scheme and fewer points of interest to allow your added data to shine.
https://docs.stadiamaps.com/map-styles/alidade-smooth/`,category:"Other",creationFunction:function(){return new Fb({url:"https://tiles.stadiamaps.com/tiles/alidade_smooth/",retinaTiles:t,credit:`&copy; <a href="https://www.stadiamaps.com/" target="_blank">Stadia Maps</a>
&copy; <a href="https://openmaptiles.org/" target="_blank">OpenMapTiles</a>
&copy; <a href="https://www.openstreetmap.org/about/" target="_blank">OpenStreetMap contributors</a>`})}})),e.push(new cr({name:"Stadia Alidade Smooth Dark",iconUrl:en("Widgets/Images/ImageryProviders/stadiaAlidadeSmoothDark.png"),tooltip:`Stadia Alidade Smooth Dark, like its lighter cousin, is also designed to stay out of the way. It just flips the dark mode switch on the color scheme. With the lights out, your data can now literally shine.
https://docs.stadiamaps.com/map-styles/alidade-smooth-dark/`,category:"Other",creationFunction:function(){return new Fb({url:"https://tiles.stadiamaps.com/tiles/alidade_smooth_dark/",retinaTiles:t,credit:`&copy; <a href="https://www.stadiamaps.com/" target="_blank">Stadia Maps</a>
&copy; <a href="https://openmaptiles.org/" target="_blank">OpenMapTiles</a>
&copy; <a href="https://www.openstreetmap.org/about/" target="_blank">OpenStreetMap contributors</a>`})}})),e.push(new cr({name:"Sentinel-2",iconUrl:en("Widgets/Images/ImageryProviders/sentinel-2.png"),tooltip:"Sentinel-2 cloudless by EOX IT Services GmbH (Contains modified Copernicus Sentinel data 2016 and 2017).",category:"Cesium ion",creationFunction:function(){return Dl.fromAssetId(3954)}})),e.push(new cr({name:"Blue Marble",iconUrl:en("Widgets/Images/ImageryProviders/blueMarble.png"),tooltip:"Blue Marble Next Generation July, 2004 imagery from NASA.",category:"Cesium ion",creationFunction:function(){return Dl.fromAssetId(3845)}})),e.push(new cr({name:"Earth at night",iconUrl:en("Widgets/Images/ImageryProviders/earthAtNight.png"),tooltip:"The Earth at night, also known as The Black Marble, is a 500 meter resolution global composite imagery layer released by NASA.",category:"Cesium ion",creationFunction:function(){return Dl.fromAssetId(3812)}})),e.push(new cr({name:"Natural Earth\xA0II",iconUrl:en("Widgets/Images/ImageryProviders/naturalEarthII.png"),tooltip:`Natural Earth II, darkened for contrast.
http://www.naturalearthdata.com/`,category:"Cesium ion",creationFunction:function(){return X0.fromUrl(en("Assets/Textures/NaturalEarthII"))}})),e.push(new cr({name:"Google Maps Satellite",iconUrl:en("Widgets/Images/ImageryProviders/googleSatellite.png"),tooltip:"Imagery from Google Maps",category:"Cesium ion",creationFunction:function(){return Dl.fromAssetId(3830182)}})),e.push(new cr({name:"Google Maps Satellite with Labels",iconUrl:en("Widgets/Images/ImageryProviders/googleSatelliteLabels.png"),tooltip:"Imagery with place labels from Google Maps",category:"Cesium ion",creationFunction:function(){return Dl.fromAssetId(3830183)}})),e.push(new cr({name:"Google Maps Roadmap",iconUrl:en("Widgets/Images/ImageryProviders/googleRoadmap.png"),tooltip:"Labeled roads and other features on a base landscape from Google Maps",category:"Cesium ion",creationFunction:function(){return Dl.fromAssetId(3830184)}})),e.push(new cr({name:"Google Maps Contour",iconUrl:en("Widgets/Images/ImageryProviders/googleContour.png"),tooltip:"Hillshade mapping, contour lines, natural features (roadmap features hidden) from Google Maps",category:"Cesium ion",creationFunction:function(){return Dl.fromAssetId(3830186)}})),e.push(new cr({name:"Azure Maps Aerial",iconUrl:en("Widgets/Images/ImageryProviders/azureAerial.png"),tooltip:"Imagery from Azure Maps",category:"Cesium ion",creationFunction:function(){return Dl.fromAssetId(3891168)}})),e.push(new cr({name:"Azure Maps Roads",iconUrl:en("Widgets/Images/ImageryProviders/azureRoads.png"),tooltip:"Labeled roads and other features on a base landscape from Azure Maps",category:"Cesium ion",creationFunction:function(){return Dl.fromAssetId(3891169)}})),e}var cU=ZFt;var azo=y(x(),1);function RFt(){let e=[];return e.push(new cr({name:"WGS84 Ellipsoid",iconUrl:en("Widgets/Images/TerrainProviders/Ellipsoid.png"),tooltip:"WGS84 standard ellipsoid, also known as EPSG:4326",category:"Cesium ion",creationFunction:function(){return new qT({ellipsoid:ie.WGS84})}})),e.push(new cr({name:"Cesium World Terrain",iconUrl:en("Widgets/Images/TerrainProviders/CesiumWorldTerrain.png"),tooltip:"High-resolution global terrain tileset curated from several datasources and hosted by Cesium ion",category:"Cesium ion",creationFunction:function(){return jT({requestWaterMask:!0,requestVertexNormals:!0})}})),e}var lU=RFt;var Czo=y(x(),1);var hzo=y(x(),1);function VFt(e){let t;if(l(e)){t="Command Statistics";let n=e.commandsInFrustums;for(let i in n)if(n.hasOwnProperty(i)){let o=parseInt(i,10),r;if(o===7)r="1, 2 and 3";else{let s=[];for(let a=2;a>=0;a--){let c=Math.pow(2,a);o>=c&&(s.push(a+1),o-=c)}r=s.reverse().join(" and ")}t+=`<br>&nbsp;&nbsp;&nbsp;&nbsp;${n[i]} in frustum ${r}`}t+=`<br>Total: ${e.totalCommands}`}return t}function Hne(e,t,n){let i=Math.min(n,t);return i=Math.max(i,e),i}var GFt=new Cn,LFt=new m;function dU(e,t){let n=this,i=e.canvas,o=new Du(i);this._eventHandler=o,this._scene=e,this._canvas=i,this._primitive=void 0,this._tile=void 0,this._modelMatrixPrimitive=void 0,this._performanceDisplay=void 0,this._performanceContainer=t;let r=this._scene.globe;r.depthTestAgainstTerrain=!0,this.frustums=!1,this.frustumPlanes=!1,this.performance=!1,this.shaderCacheText="",this.primitiveBoundingSphere=!1,this.primitiveReferenceFrame=!1,this.filterPrimitive=!1,this.tileBoundingSphere=!1,this.filterTile=!1,this.wireframe=!1,this.depthFrustum=1,this._numberOfFrustums=1,this.suspendUpdates=!1,this.tileCoordinates=!1,this.frustumStatisticText=!1,this.tileText="",this.hasPickedPrimitive=!1,this.hasPickedTile=!1,this.pickPrimitiveActive=!1,this.pickTileActive=!1,this.dropDownVisible=!0,this.generalVisible=!0,this.primitivesVisible=!1,this.terrainVisible=!1,this.depthFrustumText="",Ie.track(this,["frustums","frustumPlanes","performance","shaderCacheText","primitiveBoundingSphere","primitiveReferenceFrame","filterPrimitive","tileBoundingSphere","filterTile","wireframe","depthFrustum","suspendUpdates","tileCoordinates","frustumStatisticText","tileText","hasPickedPrimitive","hasPickedTile","pickPrimitiveActive","pickTileActive","dropDownVisible","generalVisible","primitivesVisible","terrainVisible","depthFrustumText"]),this._toggleDropDown=Fn(function(){n.dropDownVisible=!n.dropDownVisible}),this._toggleGeneral=Fn(function(){n.generalVisible=!n.generalVisible}),this._togglePrimitives=Fn(function(){n.primitivesVisible=!n.primitivesVisible}),this._toggleTerrain=Fn(function(){n.terrainVisible=!n.terrainVisible}),this._frustumsSubscription=Ie.getObservable(this,"frustums").subscribe(function(d){n._scene.debugShowFrustums=d,n._scene.requestRender()}),this._frustumPlanesSubscription=Ie.getObservable(this,"frustumPlanes").subscribe(function(d){n._scene.debugShowFrustumPlanes=d,n._scene.requestRender()}),this._performanceSubscription=Ie.getObservable(this,"performance").subscribe(function(d){d?n._performanceDisplay=new Tb({container:n._performanceContainer}):n._performanceContainer.innerHTML=""}),this._showPrimitiveBoundingSphere=Fn(function(){return n._primitive.debugShowBoundingVolume=n.primitiveBoundingSphere,n._scene.requestRender(),!0}),this._primitiveBoundingSphereSubscription=Ie.getObservable(this,"primitiveBoundingSphere").subscribe(function(){n._showPrimitiveBoundingSphere()}),this._showPrimitiveReferenceFrame=Fn(function(){if(n.primitiveReferenceFrame){let d=n._primitive.modelMatrix;n._modelMatrixPrimitive=new Rv({modelMatrix:d}),n._scene.primitives.add(n._modelMatrixPrimitive)}else l(n._modelMatrixPrimitive)&&(n._scene.primitives.remove(n._modelMatrixPrimitive),n._modelMatrixPrimitive=void 0);return n._scene.requestRender(),!0}),this._primitiveReferenceFrameSubscription=Ie.getObservable(this,"primitiveReferenceFrame").subscribe(function(){n._showPrimitiveReferenceFrame()}),this._doFilterPrimitive=Fn(function(){return n.filterPrimitive?n._scene.debugCommandFilter=function(d){return l(n._modelMatrixPrimitive)&&d.owner===n._modelMatrixPrimitive._primitive?!0:l(n._primitive)?d.owner===n._primitive||d.owner===n._primitive._billboardCollection||d.owner.primitive===n._primitive:!1}:n._scene.debugCommandFilter=void 0,!0}),this._filterPrimitiveSubscription=Ie.getObservable(this,"filterPrimitive").subscribe(function(){n._doFilterPrimitive(),n._scene.requestRender()}),this._wireframeSubscription=Ie.getObservable(this,"wireframe").subscribe(function(d){r._surface.tileProvider._debug.wireframe=d,n._scene.requestRender()}),this._depthFrustumSubscription=Ie.getObservable(this,"depthFrustum").subscribe(function(d){n._scene.debugShowDepthFrustum=d,n._scene.requestRender()}),this._incrementDepthFrustum=Fn(function(){let d=n.depthFrustum+1;return n.depthFrustum=Hne(1,n._numberOfFrustums,d),n._scene.requestRender(),!0}),this._decrementDepthFrustum=Fn(function(){let d=n.depthFrustum-1;return n.depthFrustum=Hne(1,n._numberOfFrustums,d),n._scene.requestRender(),!0}),this._suspendUpdatesSubscription=Ie.getObservable(this,"suspendUpdates").subscribe(function(d){r._surface._debug.suspendLodUpdate=d,d||(n.filterTile=!1)});let s;this._showTileCoordinates=Fn(function(){return n.tileCoordinates&&!l(s)?s=e.imageryLayers.addImageryProvider(new Ov({tilingScheme:e.terrainProvider.tilingScheme})):!n.tileCoordinates&&l(s)&&(e.imageryLayers.remove(s),s=void 0),!0}),this._tileCoordinatesSubscription=Ie.getObservable(this,"tileCoordinates").subscribe(function(){n._showTileCoordinates(),n._scene.requestRender()}),this._tileBoundingSphereSubscription=Ie.getObservable(this,"tileBoundingSphere").subscribe(function(){n._showTileBoundingSphere(),n._scene.requestRender()}),this._showTileBoundingSphere=Fn(function(){return n.tileBoundingSphere?r._surface.tileProvider._debug.boundingSphereTile=n._tile:r._surface.tileProvider._debug.boundingSphereTile=void 0,n._scene.requestRender(),!0}),this._doFilterTile=Fn(function(){return n.filterTile?(n.suspendUpdates=!0,r._surface._tilesToRender=[],l(n._tile)&&n._tile.renderable&&r._surface._tilesToRender.push(n._tile)):n.suspendUpdates=!1,!0}),this._filterTileSubscription=Ie.getObservable(this,"filterTile").subscribe(function(){n.doFilterTile(),n._scene.requestRender()});function a(d){let u=n._scene.pick({x:d.position.x,y:d.position.y});l(u)&&(n.primitive=l(u.collection)?u.collection:u.primitive),n._scene.requestRender(),n.pickPrimitiveActive=!1}this._pickPrimitive=Fn(function(){n.pickPrimitiveActive=!n.pickPrimitiveActive}),this._pickPrimitiveActiveSubscription=Ie.getObservable(this,"pickPrimitiveActive").subscribe(function(d){d?o.setInputAction(a,Gn.LEFT_CLICK):o.removeInputAction(Gn.LEFT_CLICK)});function c(d){let u,h=r.ellipsoid,p=n._scene.camera.getPickRay(d.position,GFt),A=r.pick(p,n._scene,LFt);if(l(A)){let f=h.cartesianToCartographic(A),b=r._surface.tileProvider._tilesToRenderByTextureCount;for(let C=0;!u&&C<b.length;++C){let T=b[C];if(l(T))for(let E=0;!u&&E<T.length;++E){let S=T[E];de.contains(S.rectangle,f)&&(u=S)}}}n.tile=u,n.pickTileActive=!1}this._pickTile=Fn(function(){n.pickTileActive=!n.pickTileActive}),this._pickTileActiveSubscription=Ie.getObservable(this,"pickTileActive").subscribe(function(d){d?o.setInputAction(c,Gn.LEFT_CLICK):o.removeInputAction(Gn.LEFT_CLICK)}),this._removePostRenderEvent=e.postRender.addEventListener(function(){n._update()})}Object.defineProperties(dU.prototype,{scene:{get:function(){return this._scene}},performanceContainer:{get:function(){return this._performanceContainer}},toggleDropDown:{get:function(){return this._toggleDropDown}},showPrimitiveBoundingSphere:{get:function(){return this._showPrimitiveBoundingSphere}},showPrimitiveReferenceFrame:{get:function(){return this._showPrimitiveReferenceFrame}},doFilterPrimitive:{get:function(){return this._doFilterPrimitive}},incrementDepthFrustum:{get:function(){return this._incrementDepthFrustum}},decrementDepthFrustum:{get:function(){return this._decrementDepthFrustum}},showTileCoordinates:{get:function(){return this._showTileCoordinates}},showTileBoundingSphere:{get:function(){return this._showTileBoundingSphere}},doFilterTile:{get:function(){return this._doFilterTile}},toggleGeneral:{get:function(){return this._toggleGeneral}},togglePrimitives:{get:function(){return this._togglePrimitives}},toggleTerrain:{get:function(){return this._toggleTerrain}},pickPrimitive:{get:function(){return this._pickPrimitive}},pickTile:{get:function(){return this._pickTile}},selectParent:{get:function(){let e=this;return Fn(function(){e.tile=e.tile.parent})}},selectNW:{get:function(){let e=this;return Fn(function(){e.tile=e.tile.northwestChild})}},selectNE:{get:function(){let e=this;return Fn(function(){e.tile=e.tile.northeastChild})}},selectSW:{get:function(){let e=this;return Fn(function(){e.tile=e.tile.southwestChild})}},selectSE:{get:function(){let e=this;return Fn(function(){e.tile=e.tile.southeastChild})}},primitive:{get:function(){return this._primitive},set:function(e){let t=this._primitive;e!==t&&(this.hasPickedPrimitive=!0,l(t)&&(t.debugShowBoundingVolume=!1),this._scene.debugCommandFilter=void 0,l(this._modelMatrixPrimitive)&&(this._scene.primitives.remove(this._modelMatrixPrimitive),this._modelMatrixPrimitive=void 0),this._primitive=e,e.show=!1,setTimeout(function(){e.show=!0},50),this.showPrimitiveBoundingSphere(),this.showPrimitiveReferenceFrame(),this.doFilterPrimitive())}},tile:{get:function(){return this._tile},set:function(e){if(l(e)){this.hasPickedTile=!0;let t=this._tile;if(e!==t){this.tileText=`L: ${e.level} X: ${e.x} Y: ${e.y}`,this.tileText+=`<br>SW corner: ${e.rectangle.west}, ${e.rectangle.south}`,this.tileText+=`<br>NE corner: ${e.rectangle.east}, ${e.rectangle.north}`;let n=e.data;l(n)&&l(n.tileBoundingRegion)?this.tileText+=`<br>Min: ${n.tileBoundingRegion.minimumHeight} Max: ${n.tileBoundingRegion.maximumHeight}`:this.tileText+="<br>(Tile is not loaded)"}this._tile=e,this.showTileBoundingSphere(),this.doFilterTile()}else this.hasPickedTile=!1,this._tile=void 0}}});dU.prototype._update=function(){this.frustums&&(this.frustumStatisticText=VFt(this._scene.debugFrustumStatistics));let e=this._scene.numberOfFrustums;this._numberOfFrustums=e,this.depthFrustum=Hne(1,e,this.depthFrustum),this.depthFrustumText=`${this.depthFrustum} of ${e}`,this.performance&&this._performanceDisplay.update(),this.primitiveReferenceFrame&&(this._modelMatrixPrimitive.modelMatrix=this._primitive.modelMatrix),this.shaderCacheText=`Cached shaders: ${this._scene.context.shaderCache.numberOfShaders}`};dU.prototype.isDestroyed=function(){return!1};dU.prototype.destroy=function(){return this._eventHandler.destroy(),this._removePostRenderEvent(),this._frustumsSubscription.dispose(),this._frustumPlanesSubscription.dispose(),this._performanceSubscription.dispose(),this._primitiveBoundingSphereSubscription.dispose(),this._primitiveReferenceFrameSubscription.dispose(),this._filterPrimitiveSubscription.dispose(),this._wireframeSubscription.dispose(),this._depthFrustumSubscription.dispose(),this._suspendUpdatesSubscription.dispose(),this._tileCoordinatesSubscription.dispose(),this._tileBoundingSphereSubscription.dispose(),this._filterTileSubscription.dispose(),this._pickPrimitiveActiveSubscription.dispose(),this._pickTileActiveSubscription.dispose(),he(this)};var uU=dU;function Zz(e,t){e=vn(e);let n=document.createElement("div"),i=new uU(t,n);this._viewModel=i,this._container=e;let o=document.createElement("div");this._element=o;let r=document.createElement("div");r.textContent="Cesium Inspector",r.className="cesium-cesiumInspector-button",r.setAttribute("data-bind","click: toggleDropDown"),o.appendChild(r),o.className="cesium-cesiumInspector",o.setAttribute("data-bind",'css: { "cesium-cesiumInspector-visible" : dropDownVisible, "cesium-cesiumInspector-hidden" : !dropDownVisible }'),e.appendChild(this._element);let s=document.createElement("div");s.className="cesium-cesiumInspector-dropDown",o.appendChild(s);let a=Od.createSection,c=Od.createCheckbox,d=a(s,"General","generalVisible","toggleGeneral"),u=c("Show Frustums","frustums"),h=document.createElement("div");h.className="cesium-cesiumInspector-frustumStatistics",h.setAttribute("data-bind","visible: frustums, html: frustumStatisticText"),u.appendChild(h),d.appendChild(u),d.appendChild(c("Show Frustum Planes","frustumPlanes")),d.appendChild(c("Performance Display","performance")),n.className="cesium-cesiumInspector-performanceDisplay",d.appendChild(n);let p=document.createElement("div");p.className="cesium-cesiumInspector-shaderCache",p.setAttribute("data-bind","html: shaderCacheText"),d.appendChild(p);let A=document.createElement("div");d.appendChild(A);let f=document.createElement("span");f.setAttribute("data-bind",'html: "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Frustum:"'),A.appendChild(f);let b=document.createElement("span");b.setAttribute("data-bind","text: depthFrustumText"),A.appendChild(b);let C=document.createElement("input");C.type="button",C.value="-",C.className="cesium-cesiumInspector-pickButton",C.setAttribute("data-bind","click: decrementDepthFrustum"),A.appendChild(C);let T=document.createElement("input");T.type="button",T.value="+",T.className="cesium-cesiumInspector-pickButton",T.setAttribute("data-bind","click: incrementDepthFrustum"),A.appendChild(T);let E=a(s,"Primitives","primitivesVisible","togglePrimitives"),S=document.createElement("div");S.className="cesium-cesiumInspector-pickSection",E.appendChild(S);let I=document.createElement("input");I.type="button",I.value="Pick a primitive",I.className="cesium-cesiumInspector-pickButton",I.setAttribute("data-bind",'css: {"cesium-cesiumInspector-pickButtonHighlight" : pickPrimitiveActive}, click: pickPrimitive');let R=document.createElement("div");R.className="cesium-cesiumInspector-center",R.appendChild(I),S.appendChild(R),S.appendChild(c("Show bounding sphere","primitiveBoundingSphere","hasPickedPrimitive")),S.appendChild(c("Show reference frame","primitiveReferenceFrame","hasPickedPrimitive")),this._primitiveOnly=c("Show only selected","filterPrimitive","hasPickedPrimitive"),S.appendChild(this._primitiveOnly);let V=a(s,"Terrain","terrainVisible","toggleTerrain"),W=document.createElement("div");W.className="cesium-cesiumInspector-pickSection",V.appendChild(W);let B=document.createElement("input");B.type="button",B.value="Pick a tile",B.className="cesium-cesiumInspector-pickButton",B.setAttribute("data-bind",'css: {"cesium-cesiumInspector-pickButtonHighlight" : pickTileActive}, click: pickTile'),R=document.createElement("div"),R.appendChild(B),R.className="cesium-cesiumInspector-center",W.appendChild(R);let N=document.createElement("div");W.appendChild(N);let P=document.createElement("input");P.type="button",P.value="Parent",P.className="cesium-cesiumInspector-pickButton",P.setAttribute("data-bind","click: selectParent");let g=document.createElement("input");g.type="button",g.value="NW",g.className="cesium-cesiumInspector-pickButton",g.setAttribute("data-bind","click: selectNW");let _=document.createElement("input");_.type="button",_.value="NE",_.className="cesium-cesiumInspector-pickButton",_.setAttribute("data-bind","click: selectNE");let Z=document.createElement("input");Z.type="button",Z.value="SW",Z.className="cesium-cesiumInspector-pickButton",Z.setAttribute("data-bind","click: selectSW");let G=document.createElement("input");G.type="button",G.value="SE",G.className="cesium-cesiumInspector-pickButton",G.setAttribute("data-bind","click: selectSE");let w=document.createElement("div");w.className="cesium-cesiumInspector-tileText",N.className="cesium-cesiumInspector-frustumStatistics",N.appendChild(w),N.setAttribute("data-bind","visible: hasPickedTile"),w.setAttribute("data-bind","html: tileText");let X=document.createElement("div");X.className="cesium-cesiumInspector-relativeText",X.textContent="Select relative:",N.appendChild(X);let k=document.createElement("table"),v=document.createElement("tr"),D=document.createElement("tr"),Y=document.createElement("td");Y.appendChild(P);let O=document.createElement("td");O.appendChild(g);let J=document.createElement("td");J.appendChild(_),v.appendChild(Y),v.appendChild(O),v.appendChild(J);let te=document.createElement("td"),z=document.createElement("td");z.appendChild(Z);let j=document.createElement("td");j.appendChild(G),D.appendChild(te),D.appendChild(z),D.appendChild(j),k.appendChild(v),k.appendChild(D),N.appendChild(k),W.appendChild(c("Show bounding volume","tileBoundingSphere","hasPickedTile")),W.appendChild(c("Show only selected","filterTile","hasPickedTile")),V.appendChild(c("Wireframe","wireframe")),V.appendChild(c("Suspend LOD update","suspendUpdates")),V.appendChild(c("Show tile coordinates","tileCoordinates")),Ie.applyBindings(i,this._element)}Object.defineProperties(Zz.prototype,{container:{get:function(){return this._container}},viewModel:{get:function(){return this._viewModel}}});Zz.prototype.isDestroyed=function(){return!1};Zz.prototype.destroy=function(){return Ie.cleanNode(this._element),this._container.removeChild(this._element),this.viewModel.destroy(),he(this)};var mU=Zz;var Bzo=y(x(),1);var Zzo=y(x(),1);function Rz(e,t){l(t)||(t=document.body),t=vn(t);let n=this,i=Ie.observable(Dr.fullscreen),o=Ie.observable(Dr.enabled),r=t.ownerDocument;this.isFullscreen=void 0,Ie.defineProperty(this,"isFullscreen",{get:function(){return i()}}),this.isFullscreenEnabled=void 0,Ie.defineProperty(this,"isFullscreenEnabled",{get:function(){return o()},set:function(s){o(s&&Dr.enabled)}}),this.tooltip=void 0,Ie.defineProperty(this,"tooltip",function(){return this.isFullscreenEnabled?i()?"Exit full screen":"Full screen":"Full screen unavailable"}),this._command=Fn(function(){Dr.fullscreen?Dr.exitFullscreen():Dr.requestFullscreen(n._fullscreenElement)},Ie.getObservable(this,"isFullscreenEnabled")),this._fullscreenElement=vn(e)??r.body,this._callback=function(){i(Dr.fullscreen)},r.addEventListener(Dr.changeEventName,this._callback)}Object.defineProperties(Rz.prototype,{fullscreenElement:{get:function(){return this._fullscreenElement},set:function(e){this._fullscreenElement=e}},command:{get:function(){return this._command}}});Rz.prototype.isDestroyed=function(){return!1};Rz.prototype.destroy=function(){document.removeEventListener(Dr.changeEventName,this._callback),he(this)};var hU=Rz;var WFt="M 83.96875 17.5625 L 83.96875 17.59375 L 76.65625 24.875 L 97.09375 24.96875 L 76.09375 45.96875 L 81.9375 51.8125 L 102.78125 30.9375 L 102.875 51.15625 L 110.15625 43.875 L 110.1875 17.59375 L 83.96875 17.5625 z M 44.125 17.59375 L 17.90625 17.625 L 17.9375 43.90625 L 25.21875 51.1875 L 25.3125 30.96875 L 46.15625 51.8125 L 52 45.96875 L 31 25 L 51.4375 24.90625 L 44.125 17.59375 z M 46.0625 76.03125 L 25.1875 96.875 L 25.09375 76.65625 L 17.8125 83.9375 L 17.8125 110.21875 L 44 110.25 L 51.3125 102.9375 L 30.90625 102.84375 L 51.875 81.875 L 46.0625 76.03125 z M 82 76.15625 L 76.15625 82 L 97.15625 103 L 76.71875 103.0625 L 84.03125 110.375 L 110.25 110.34375 L 110.21875 84.0625 L 102.9375 76.8125 L 102.84375 97 L 82 76.15625 z",FFt="M 104.34375 17.5625 L 83.5 38.4375 L 83.40625 18.21875 L 76.125 25.5 L 76.09375 51.78125 L 102.3125 51.8125 L 102.3125 51.78125 L 109.625 44.5 L 89.1875 44.40625 L 110.1875 23.40625 L 104.34375 17.5625 z M 23.75 17.59375 L 17.90625 23.4375 L 38.90625 44.4375 L 18.5 44.53125 L 25.78125 51.8125 L 52 51.78125 L 51.96875 25.53125 L 44.6875 18.25 L 44.625 38.46875 L 23.75 17.59375 z M 25.6875 76.03125 L 18.375 83.3125 L 38.78125 83.40625 L 17.8125 104.40625 L 23.625 110.25 L 44.5 89.375 L 44.59375 109.59375 L 51.875 102.3125 L 51.875 76.0625 L 25.6875 76.03125 z M 102.375 76.15625 L 76.15625 76.1875 L 76.1875 102.4375 L 83.46875 109.71875 L 83.5625 89.53125 L 104.40625 110.375 L 110.25 104.53125 L 89.25 83.53125 L 109.6875 83.46875 L 102.375 76.15625 z";function Vz(e,t){e=vn(e);let n=new hU(t,e);n._exitFullScreenPath=FFt,n._enterFullScreenPath=WFt;let i=document.createElement("button");i.type="button",i.className="cesium-button cesium-fullscreenButton",i.setAttribute("data-bind","attr: { title: tooltip },click: command,enable: isFullscreenEnabled,cesiumSvgPath: { path: isFullscreen ? _exitFullScreenPath : _enterFullScreenPath, width: 128, height: 128 }"),e.appendChild(i),Ie.applyBindings(n,i),this._container=e,this._viewModel=n,this._element=i}Object.defineProperties(Vz.prototype,{container:{get:function(){return this._container}},viewModel:{get:function(){return this._viewModel}}});Vz.prototype.isDestroyed=function(){return!1};Vz.prototype.destroy=function(){return this._viewModel.destroy(),Ie.cleanNode(this._element),this._container.removeChild(this._element),he(this)};var fU=Vz;var zzo=y(x(),1);var Mzo=y(x(),1);var kVe=1e3;function mh(e){l(e.geocoderServices)?this._geocoderServices=e.geocoderServices:this._geocoderServices=[new nE({scene:e.scene})],this._viewContainer=e.container,this._scene=e.scene,this._flightDuration=e.flightDuration,this._searchText="",this._isSearchInProgress=!1,this._wasGeocodeCancelled=!1,this._previousCredits=[],this._complete=new xe,this._suggestions=[],this._selectedSuggestion=void 0,this._showSuggestions=!0,this._handleArrowDown=OVe,this._handleArrowUp=QVe;let t=this;this._suggestionsVisible=Ie.pureComputed(function(){let o=Ie.getObservable(t,"_suggestions")().length>0,r=Ie.getObservable(t,"_showSuggestions")();return o&&r}),this._searchCommand=Fn(function(i){if(i=i??Py.SEARCH,t._focusTextbox=!1,l(t._selectedSuggestion))return t.activateSuggestion(t._selectedSuggestion),!1;if(t.hideSuggestions(),t.isSearchInProgress)YFt(t);else return PFt(t,t._geocoderServices,i)}),this.deselectSuggestion=function(){t._selectedSuggestion=void 0},this.handleKeyDown=function(i,o){let r=o.key==="ArrowDown"||o.key==="Down"||o.keyCode===40,s=o.key==="ArrowUp"||o.key==="Up"||o.keyCode===38;return(r||s)&&o.preventDefault(),!0},this.handleKeyUp=function(i,o){let r=o.key==="ArrowDown"||o.key==="Down"||o.keyCode===40,s=o.key==="ArrowUp"||o.key==="Up"||o.keyCode===38,a=o.key==="Enter"||o.keyCode===13;return s?QVe(t):r?OVe(t):a&&t._searchCommand(),!0},this.activateSuggestion=function(i){t.hideSuggestions(),t._searchText=i.displayName;let o=i.destination;JVe(t),t.destinationFound(t,o)},this.hideSuggestions=function(){t._showSuggestions=!1,t._selectedSuggestion=void 0},this.showSuggestions=function(){t._showSuggestions=!0},this.handleMouseover=function(i,o){i!==t._selectedSuggestion&&(t._selectedSuggestion=i)},this.keepExpanded=!1,this.autoComplete=e.autocomplete??!0,this.destinationFound=e.destinationFound??mh.flyToDestination,this._focusTextbox=!1,Ie.track(this,["_searchText","_isSearchInProgress","keepExpanded","_suggestions","_selectedSuggestion","_showSuggestions","_focusTextbox"]);let n=Ie.getObservable(this,"_searchText");n.extend({rateLimit:{timeout:500}}),this._suggestionSubscription=n.subscribe(function(){mh._updateSearchSuggestions(t)}),this.isSearchInProgress=void 0,Ie.defineProperty(this,"isSearchInProgress",{get:function(){return this._isSearchInProgress}}),this.searchText=void 0,Ie.defineProperty(this,"searchText",{get:function(){return this.isSearchInProgress?"Searching...":this._searchText},set:function(i){this._searchText=i}}),this.flightDuration=void 0,Ie.defineProperty(this,"flightDuration",{get:function(){return this._flightDuration},set:function(i){this._flightDuration=i}})}Object.defineProperties(mh.prototype,{complete:{get:function(){return this._complete}},scene:{get:function(){return this._scene}},search:{get:function(){return this._searchCommand}},selectedSuggestion:{get:function(){return this._selectedSuggestion}},suggestions:{get:function(){return this._suggestions}}});mh.prototype.destroy=function(){this._suggestionSubscription.dispose()};function QVe(e){if(e._suggestions.length===0)return;let t=e._suggestions.indexOf(e._selectedSuggestion);if(t===-1||t===0){e._selectedSuggestion=void 0;return}let n=t-1;e._selectedSuggestion=e._suggestions[n],mh._adjustSuggestionsScroll(e,n)}function OVe(e){if(e._suggestions.length===0)return;let t=e._suggestions.length,i=(e._suggestions.indexOf(e._selectedSuggestion)+1)%t;e._selectedSuggestion=e._suggestions[i],mh._adjustSuggestionsScroll(e,i)}function BFt(e,t){let n=l(t)?t.availability:void 0;return l(n)?iE(t,[e]).then(function(i){return e=i[0],e.height+=kVe,e}):(e.height+=kVe,Promise.resolve(e))}function wFt(e,t){let n=e._scene,i=n.ellipsoid,o=n.camera,r=n.terrainProvider,s=t,a;return t instanceof de?L.equalsEpsilon(t.south,t.north,L.EPSILON7)&&L.equalsEpsilon(t.east,t.west,L.EPSILON7)?t=de.center(t):a=aE(t,n):t=i.cartesianToCartographic(t),l(a)||(a=BFt(t,r)),a.then(function(c){s=i.cartographicToCartesian(c)}).finally(function(){o.flyTo({destination:s,complete:function(){e._complete.raiseEvent()},duration:e._flightDuration,endTransform:F.IDENTITY})})}async function NFt(e,t,n){try{return{state:"fulfilled",value:await e.geocode(t,n),credits:e.credit}}catch(i){return{state:"rejected",reason:i}}}async function PFt(e,t,n){let i=e._searchText;if(HVe(i)){e.showSuggestions();return}e._isSearchInProgress=!0,e._wasGeocodeCancelled=!1;let o,r;for(o=0;o<t.length;o++){if(e._wasGeocodeCancelled)return;if(r=await NFt(t[o],i,n),l(r)&&r.state==="fulfilled"&&r.value.length>0)break}if(e._wasGeocodeCancelled)return;e._isSearchInProgress=!1,Kne(e);let s=r.value;if(r.state==="fulfilled"&&l(s)&&s.length>0){e._searchText=s[0].displayName,e.destinationFound(e,s[0].destination);let a=zVe(e,FZ.getCreditsFromResult(s[0]));l(a)||Jne(e,t[o].credit);return}e._searchText=`${i} (not found)`}function Jne(e,t){l(t)&&!e._scene.isDestroyed()&&!e._scene.frameState.creditDisplay.isDestroyed()&&(e._scene.frameState.creditDisplay.addStaticCredit(t),e._previousCredits.push(t))}function zVe(e,t){return l(t)&&t.forEach(n=>Jne(e,n)),t}function Kne(e){!e._scene.isDestroyed()&&!e._scene.frameState.creditDisplay.isDestroyed()&&e._previousCredits.forEach(t=>{e._scene.frameState.creditDisplay.removeStaticCredit(t)}),e._previousCredits.length=0}function XFt(e,t){let n=vn(e._viewContainer),i=n.getElementsByClassName("search-results")[0],r=n.getElementsByTagName("li")[t];if(t===0){i.scrollTop=0;return}let s=r.offsetTop;s+r.clientHeight>i.clientHeight?i.scrollTop=s+r.clientHeight:s<i.scrollTop&&(i.scrollTop=s)}function YFt(e){e._isSearchInProgress&&(e._isSearchInProgress=!1,e._wasGeocodeCancelled=!0)}function HVe(e){return/^\s*$/.test(e)}function JVe(e){Ie.getObservable(e,"_suggestions").removeAll()}async function MFt(e){if(!e.autoComplete)return;let t=e._searchText;if(JVe(e),Kne(e),!HVe(t))for(let n of e._geocoderServices){let i=await n.geocode(t,Py.AUTOCOMPLETE);if(e._suggestions=e._suggestions.concat(i),i.length>0){let o=!0;i.forEach(r=>{let s=FZ.getCreditsFromResult(r);o=o&&!l(s),zVe(e,s)}),o&&Jne(e,n.credit)}if(e._suggestions.length>=5)return}}mh.flyToDestination=wFt;mh._updateSearchSuggestions=MFt;mh._adjustSuggestionsScroll=XFt;mh.prototype.isDestroyed=function(){return!1};mh.prototype.destroy=function(){return Kne(this),he(this)};var pU=mh;var vFt="M29.772,26.433l-7.126-7.126c0.96-1.583,1.523-3.435,1.524-5.421C24.169,8.093,19.478,3.401,13.688,3.399C7.897,3.401,3.204,8.093,3.204,13.885c0,5.789,4.693,10.481,10.484,10.481c1.987,0,3.839-0.563,5.422-1.523l7.128,7.127L29.772,26.433zM7.203,13.885c0.006-3.582,2.903-6.478,6.484-6.486c3.579,0.008,6.478,2.904,6.484,6.486c-0.007,3.58-2.905,6.476-6.484,6.484C10.106,20.361,7.209,17.465,7.203,13.885z",UFt="M24.778,21.419 19.276,15.917 24.777,10.415 21.949,7.585 16.447,13.087 10.945,7.585 8.117,10.415 13.618,15.917 8.116,21.419 10.946,24.248 16.447,18.746 21.948,24.248z";function Gz(e){let t=vn(e.container),n=new pU(e);n._startSearchPath=vFt,n._stopSearchPath=UFt;let i=document.createElement("form");i.setAttribute("data-bind","submit: search");let o=document.createElement("input");o.type="search",o.className="cesium-geocoder-input",o.setAttribute("placeholder","Enter an address or landmark..."),o.setAttribute("data-bind",'textInput: searchText,disable: isSearchInProgress,event: { keyup: handleKeyUp, keydown: handleKeyDown, mouseover: deselectSuggestion },css: { "cesium-geocoder-input-wide" : keepExpanded || searchText.length > 0 },hasFocus: _focusTextbox'),this._onTextBoxFocus=function(){setTimeout(function(){o.select()},0)},o.addEventListener("focus",this._onTextBoxFocus,!1),i.appendChild(o),this._textBox=o;let r=document.createElement("span");r.className="cesium-geocoder-searchButton",r.setAttribute("data-bind","click: search,cesiumSvgPath: { path: isSearchInProgress ? _stopSearchPath : _startSearchPath, width: 32, height: 32 }"),i.appendChild(r),t.appendChild(i);let s=document.createElement("div");s.className="search-results",s.setAttribute("data-bind","visible: _suggestionsVisible");let a=document.createElement("ul");a.setAttribute("data-bind","foreach: _suggestions");let c=document.createElement("li");a.appendChild(c),c.setAttribute("data-bind","text: $data.displayName, click: $parent.activateSuggestion, event: { mouseover: $parent.handleMouseover}, css: { active: $data === $parent._selectedSuggestion }"),s.appendChild(a),t.appendChild(s),Ie.applyBindings(n,i),Ie.applyBindings(n,s),this._container=t,this._searchSuggestionsContainer=s,this._viewModel=n,this._form=i,this._onInputBegin=function(d){let u=d.target;typeof d.composedPath=="function"&&(u=d.composedPath()[0]),t.contains(u)||(n._focusTextbox=!1,n.hideSuggestions())},this._onInputEnd=function(d){n._focusTextbox=!0,n.showSuggestions()},hn.supportsPointerEvents()?(document.addEventListener("pointerdown",this._onInputBegin,!0),t.addEventListener("pointerup",this._onInputEnd,!0),t.addEventListener("pointercancel",this._onInputEnd,!0)):(document.addEventListener("mousedown",this._onInputBegin,!0),t.addEventListener("mouseup",this._onInputEnd,!0),document.addEventListener("touchstart",this._onInputBegin,!0),t.addEventListener("touchend",this._onInputEnd,!0),t.addEventListener("touchcancel",this._onInputEnd,!0))}Object.defineProperties(Gz.prototype,{container:{get:function(){return this._container}},searchSuggestionsContainer:{get:function(){return this._searchSuggestionsContainer}},viewModel:{get:function(){return this._viewModel}}});Gz.prototype.isDestroyed=function(){return!1};Gz.prototype.destroy=function(){let e=this._container;return hn.supportsPointerEvents()?(document.removeEventListener("pointerdown",this._onInputBegin,!0),e.removeEventListener("pointerup",this._onInputEnd,!0)):(document.removeEventListener("mousedown",this._onInputBegin,!0),e.removeEventListener("mouseup",this._onInputEnd,!0),document.removeEventListener("touchstart",this._onInputBegin,!0),e.removeEventListener("touchend",this._onInputEnd,!0)),this._viewModel.destroy(),Ie.cleanNode(this._form),Ie.cleanNode(this._searchSuggestionsContainer),e.removeChild(this._form),e.removeChild(this._searchSuggestionsContainer),this._textBox.removeEventListener("focus",this._onTextBoxFocus,!1),he(this)};var AU=Gz;var o3o=y(x(),1);var jzo=y(x(),1);function KVe(e,t){this._scene=e,this._duration=t;let n=this;this._command=Fn(function(){n._scene.camera.flyHome(n._duration)}),this.tooltip="View Home",Ie.track(this,["tooltip"])}Object.defineProperties(KVe.prototype,{scene:{get:function(){return this._scene}},command:{get:function(){return this._command}},duration:{get:function(){return this._duration},set:function(e){this._duration=e}}});var gU=KVe;function Lz(e,t,n){e=vn(e);let i=new gU(t,n);i._svgPath="M14,4l-10,8.75h20l-4.25-3.7188v-4.6562h-2.812v2.1875l-2.938-2.5625zm-7.0938,9.906v10.094h14.094v-10.094h-14.094zm2.1876,2.313h3.3122v4.25h-3.3122v-4.25zm5.8442,1.281h3.406v6.438h-3.406v-6.438z";let o=document.createElement("button");o.type="button",o.className="cesium-button cesium-toolbar-button cesium-home-button",o.setAttribute("data-bind","attr: { title: tooltip },click: command,cesiumSvgPath: { path: _svgPath, width: 28, height: 28 }"),e.appendChild(o),Ie.applyBindings(i,o),this._container=e,this._viewModel=i,this._element=o}Object.defineProperties(Lz.prototype,{container:{get:function(){return this._container}},viewModel:{get:function(){return this._viewModel}}});Lz.prototype.isDestroyed=function(){return!1};Lz.prototype.destroy=function(){return Ie.cleanNode(this._element),this._container.removeChild(this._element),he(this)};var bU=Lz;var f3o=y(x(),1);var c3o=y(x(),1);function DFt(e,t){t.currentTarget.parentElement.parentElement.querySelector(`#${e.name}-expander`).classList.toggle("active"),t.currentTarget.textContent=t.currentTarget.textContent==="+"?"-":"+"}function qVe(e,t){Ie.track(e);for(let n=0;n<e.sublayers.length;n++)qVe(e.sublayers[n],t)}function Wz(e){return e.modelName==="FullModel"}function $Ve(e){return e.modelName==="Overview"}function eGe(e){return $Ve(e)||Wz(e)}function jVe(e,t){if(eGe(e)){e.visibility=!1;for(let i=0;i<e.sublayers.length;i++)e.sublayers[i].visibility=!0;let n={name:e.name,modelName:e.modelName,disable:Ie.observable(!1),index:t.sublayers.length};return t.topLayers.push(n),t.sublayers.push(e),n}}function kFt(e,t){if(eGe(e)){t.sublayers.forEach(i=>i.visibility=!1),t.sublayers[e.index].visibility=!0;let n=document.getElementById("bsl-wrapper");Wz(e)?(t.currentLevel=t.selectedLevel,n.style.display="block"):(t.selectedLevel=t.currentLevel,t.currentLevel="All",n.style.display="none")}}async function QFt(e,t){try{let n=e.getAttributeNames();for(let i=0;i<n.length;i++)if(n[i]==="BldgLevel"){let o=e.getAttributeValues(n[i]);for(let r=0;r<o.length;r++)t.push(o[r])}t.sort((i,o)=>i-o),t.unshift("All")}catch(n){console.log(`There was an error getting attributes: ${n}`)}}function OFt(e){let t=this;this.levels=[],this.viewModel={sublayers:[],levels:this.levels,currentLevel:Ie.observable(),selectedLevel:"All",topLayers:[{name:"Select a layer to explore...",disable:Ie.observable(!0),index:-1}],currentLayer:Ie.observable(),expandClickHandler:DFt,setOptionDisable:function(i,o){Ie.applyBindingsToNode(i,{disable:o.disable},o)},defaultLayer:void 0},this.viewModel.currentLayer.subscribe(function(i){kFt(i,t.viewModel)});let n=e.sublayers;for(let i=0;i<n.length;i++){qVe(n[i],this.viewModel);let o=jVe(n[i],this.viewModel);l(o)&&($Ve(o)||!l(this.viewModel.defaultLayer)&&Wz(o))&&(this.viewModel.defaultLayer=o)}if(this.viewModel.topLayers.length===1&&n.length>0){e.show=!1;let i={name:"Full Model",modelName:"FullModel",visibility:e.show,sublayers:e.sublayers};this.viewModel.defaultLayer=jVe(i,this.viewModel),this.viewModel.currentLayer.subscribe(function(o){e.show=Wz(o)})}else this.viewModel.topLayers.length===1&&(this.viewModel.topLayers[0].name="Building layers not found");return QFt(e,this.levels),this.viewModel.currentLevel.subscribe(function(i){i!=="All"?e.filterByAttributes([{name:"BldgLevel",values:[i]}]):e.filterByAttributes()}),this.viewModel}var yU=OFt;function zFt(e,t){let n=document.getElementById(e),i=document.createElement("div");i.classList.add("cesium-viewer-i3s-explorer"),i.innerHTML=`
<h3>Building explorer</h3>
<select
data-bind="options: topLayers, optionsText: 'name', optionsAfterRender: setOptionDisable, value: currentLayer"
></select>
<div id="bsl-wrapper">
<h3>Select Level</h3>
<select data-bind="options: levels, value: currentLevel"></select>
<h3>Disciplines & Categories</h3>
<ul class="layersList" data-bind="foreach: sublayers">
<ul class="layersList" data-bind="foreach: sublayers.sort(function (l, r) { return l.name.localeCompare(r.name) })">
<li>
<div class="li-wrapper">
<span
class="expandItem"
data-bind="click: $root.expandClickHandler"
>+</span
>
<input
type="checkbox"
data-bind="checked: visibility, valueUpdate: 'input', attr: { id: name}"
/>
<label data-bind="attr: { for: name}">
<span data-bind="text: name"></span>
</label>
</div>
<ul class="nested" data-bind="attr: { id: name + '-expander'}">
<li data-bind="foreach: sublayers.sort(function (l, r) { return l.name.localeCompare(r.name) })">
<div class="li-wrapper">
<input
type="checkbox"
data-bind="checked: visibility, valueUpdate: 'input', attr: { id: name}"
/>
<label data-bind="attr: { for: name}">
<span data-bind="text: name"></span>
</label>
</div>
</li>
</ul>
</li>
</ul>
</ul>
</div>`,n.appendChild(i);let o=new yU(t);Ie.track(o),Ie.applyBindings(o,n),l(o.defaultLayer)&&(o.currentLayer=o.defaultLayer)}var jne=zFt;var _3o=y(x(),1);var b3o=y(x(),1);var HFt="M 13.84375 7.03125 C 11.412798 7.03125 9.46875 8.975298 9.46875 11.40625 L 9.46875 11.59375 L 2.53125 7.21875 L 2.53125 24.0625 L 9.46875 19.6875 C 9.4853444 22.104033 11.423165 24.0625 13.84375 24.0625 L 25.875 24.0625 C 28.305952 24.0625 30.28125 22.087202 30.28125 19.65625 L 30.28125 11.40625 C 30.28125 8.975298 28.305952 7.03125 25.875 7.03125 L 13.84375 7.03125 z",JFt="M 27.34375 1.65625 L 5.28125 27.9375 L 8.09375 30.3125 L 30.15625 4.03125 L 27.34375 1.65625 z M 13.84375 7.03125 C 11.412798 7.03125 9.46875 8.975298 9.46875 11.40625 L 9.46875 11.59375 L 2.53125 7.21875 L 2.53125 24.0625 L 9.46875 19.6875 C 9.4724893 20.232036 9.5676108 20.7379 9.75 21.21875 L 21.65625 7.03125 L 13.84375 7.03125 z M 28.21875 7.71875 L 14.53125 24.0625 L 25.875 24.0625 C 28.305952 24.0625 30.28125 22.087202 30.28125 19.65625 L 30.28125 11.40625 C 30.28125 9.8371439 29.456025 8.4902779 28.21875 7.71875 z";function qne(){this._cameraClicked=new xe,this._closeClicked=new xe,this.maxHeight=500,this.enableCamera=!1,this.isCameraTracking=!1,this.showInfo=!1,this.titleText="",this.description="",Ie.track(this,["showInfo","titleText","description","maxHeight","enableCamera","isCameraTracking"]),this._loadingIndicatorHtml='<div class="cesium-infoBox-loadingContainer"><span class="cesium-infoBox-loading"></span></div>',this.cameraIconPath=void 0,Ie.defineProperty(this,"cameraIconPath",{get:function(){return!this.enableCamera||this.isCameraTracking?JFt:HFt}}),Ie.defineProperty(this,"_bodyless",{get:function(){return!l(this.description)||this.description.length===0}})}qne.prototype.maxHeightOffset=function(e){return`${this.maxHeight-e}px`};Object.defineProperties(qne.prototype,{cameraClicked:{get:function(){return this._cameraClicked}},closeClicked:{get:function(){return this._closeClicked}}});var xU=qne;function Fz(e){e=vn(e);let t=document.createElement("div");t.className="cesium-infoBox",t.setAttribute("data-bind",'css: { "cesium-infoBox-visible" : showInfo, "cesium-infoBox-bodyless" : _bodyless }'),e.appendChild(t);let n=document.createElement("div");n.className="cesium-infoBox-title",n.setAttribute("data-bind","text: titleText"),t.appendChild(n);let i=document.createElement("button");i.type="button",i.className="cesium-button cesium-infoBox-camera",i.setAttribute("data-bind",'attr: { title: "Focus camera on object" },click: function () { cameraClicked.raiseEvent(this); },enable: enableCamera,cesiumSvgPath: { path: cameraIconPath, width: 32, height: 32 }'),t.appendChild(i);let o=document.createElement("button");o.type="button",o.className="cesium-infoBox-close",o.setAttribute("data-bind","click: function () { closeClicked.raiseEvent(this); }"),o.innerHTML="&times;",t.appendChild(o);let r=document.createElement("iframe");r.className="cesium-infoBox-iframe",r.setAttribute("sandbox","allow-same-origin allow-popups allow-forms"),r.setAttribute("data-bind","style : { maxHeight : maxHeightOffset(40) }"),r.setAttribute("allowfullscreen",!0),t.appendChild(r);let s=new xU;Ie.applyBindings(s,t),this._container=e,this._element=t,this._frame=r,this._viewModel=s,this._descriptionSubscription=void 0;let a=this;r.addEventListener("load",function(){let c=r.contentDocument,d=c.createElement("link");d.href=en("Widgets/InfoBox/InfoBoxDescription.css"),d.rel="stylesheet",d.type="text/css";let u=c.createElement("div");u.className="cesium-infoBox-description",c.head.appendChild(d),c.body.appendChild(u),a._descriptionSubscription=gc(s,"description",function(h){r.style.height="5px",u.innerHTML=h;let p=null,A=u.firstElementChild;if(A!==null&&u.childNodes.length===1){let b=window.getComputedStyle(A);if(b!==null){let C=b["background-color"],T=U.fromCssColorString(C);l(T)&&T.alpha!==0&&(p=b["background-color"])}}t.style["background-color"]=p;let f=u.getBoundingClientRect().height;r.style.height=`${f}px`})}),r.setAttribute("src","about:blank")}Object.defineProperties(Fz.prototype,{container:{get:function(){return this._container}},viewModel:{get:function(){return this._viewModel}},frame:{get:function(){return this._frame}}});Fz.prototype.isDestroyed=function(){return!1};Fz.prototype.destroy=function(){let e=this._container;return Ie.cleanNode(this._element),e.removeChild(this._element),l(this._descriptionSubscription)&&this._descriptionSubscription.dispose(),he(this)};var CU=Fz;var N3o=y(x(),1);var V3o=y(x(),1);function tGe(){this.showInstructions=!1;let e=this;this._command=Fn(function(){e.showInstructions=!e.showInstructions}),this._showClick=Fn(function(){e._touch=!1}),this._showTouch=Fn(function(){e._touch=!0}),this._touch=!1,this.tooltip="Navigation Instructions",Ie.track(this,["tooltip","showInstructions","_touch"])}Object.defineProperties(tGe.prototype,{command:{get:function(){return this._command}},showClick:{get:function(){return this._showClick}},showTouch:{get:function(){return this._showTouch}}});var TU=tGe;function Bz(e){let t=vn(e.container),n=new TU,i=e.instructionsInitiallyVisible??!1;n.showInstructions=i,n._svgPath="M16,1.466C7.973,1.466,1.466,7.973,1.466,16c0,8.027,6.507,14.534,14.534,14.534c8.027,0,14.534-6.507,14.534-14.534C30.534,7.973,24.027,1.466,16,1.466z M17.328,24.371h-2.707v-2.596h2.707V24.371zM17.328,19.003v0.858h-2.707v-1.057c0-3.19,3.63-3.696,3.63-5.963c0-1.034-0.924-1.826-2.134-1.826c-1.254,0-2.354,0.924-2.354,0.924l-1.541-1.915c0,0,1.519-1.584,4.137-1.584c2.487,0,4.796,1.54,4.796,4.136C21.156,16.208,17.328,16.627,17.328,19.003z";let o=document.createElement("span");o.className="cesium-navigationHelpButton-wrapper",t.appendChild(o);let r=document.createElement("button");r.type="button",r.className="cesium-button cesium-toolbar-button cesium-navigation-help-button",r.setAttribute("data-bind","attr: { title: tooltip },click: command,cesiumSvgPath: { path: _svgPath, width: 32, height: 32 }"),o.appendChild(r);let s=document.createElement("div");s.className="cesium-navigation-help",s.setAttribute("data-bind",'css: { "cesium-navigation-help-visible" : showInstructions}'),o.appendChild(s);let a=document.createElement("button");a.type="button",a.className="cesium-navigation-button cesium-navigation-button-left",a.setAttribute("data-bind",'click: showClick, css: {"cesium-navigation-button-selected": !_touch, "cesium-navigation-button-unselected": _touch}');let c=document.createElement("img");c.src=en("Widgets/Images/NavigationHelp/Mouse.svg"),c.className="cesium-navigation-button-icon",c.style.width="25px",c.style.height="25px",a.appendChild(c),a.appendChild(document.createTextNode("Mouse"));let d=document.createElement("button");d.type="button",d.className="cesium-navigation-button cesium-navigation-button-right",d.setAttribute("data-bind",'click: showTouch, css: {"cesium-navigation-button-selected": _touch, "cesium-navigation-button-unselected": !_touch}');let u=document.createElement("img");u.src=en("Widgets/Images/NavigationHelp/Touch.svg"),u.className="cesium-navigation-button-icon",u.style.width="25px",u.style.height="25px",d.appendChild(u),d.appendChild(document.createTextNode("Touch")),s.appendChild(a),s.appendChild(d);let h=document.createElement("div");h.className="cesium-click-navigation-help cesium-navigation-help-instructions",h.setAttribute("data-bind",'css: { "cesium-click-navigation-help-visible" : !_touch}'),h.innerHTML=` <table> <tr> <td><img src="${en("Widgets/Images/NavigationHelp/MouseLeft.svg")}" width="48" height="48" /></td> <td> <div class="cesium-navigation-help-pan">Pan view</div> <div class="cesium-navigation-help-details">Left click + drag</div> </td> </tr> <tr> <td><img src="${en("Widgets/Images/NavigationHelp/MouseRight.svg")}" width="48" height="48" /></td> <td> <div class="cesium-navigation-help-zoom">Zoom view</div> <div class="cesium-navigation-help-details">Right click + drag, or</div> <div class="cesium-navigation-help-details">Mouse wheel scroll</div> </td> </tr> <tr> <td><img src="${en("Widgets/Images/NavigationHelp/MouseMiddle.svg")}" width="48" height="48" /></td> <td> <div class="cesium-navigation-help-rotate">Rotate view</div> <div class="cesium-navigation-help-details">Middle click + drag, or</div> <div class="cesium-navigation-help-details">CTRL + Left/Right click + drag</div> </td> </tr> </table>`,s.appendChild(h);let p=document.createElement("div");p.className="cesium-touch-navigation-help cesium-navigation-help-instructions",p.setAttribute("data-bind",'css: { "cesium-touch-navigation-help-visible" : _touch}'),p.innerHTML=` <table> <tr> <td><img src="${en("Widgets/Images/NavigationHelp/TouchDrag.svg")}" width="70" height="48" /></td> <td> <div class="cesium-navigation-help-pan">Pan view</div> <div class="cesium-navigation-help-details">One finger drag</div> </td> </tr> <tr> <td><img src="${en("Widgets/Images/NavigationHelp/TouchZoom.svg")}" width="70" height="48" /></td> <td> <div class="cesium-navigation-help-zoom">Zoom view</div> <div class="cesium-navigation-help-details">Two finger pinch</div> </td> </tr> <tr> <td><img src="${en("Widgets/Images/NavigationHelp/TouchTilt.svg")}" width="70" height="48" /></td> <td> <div class="cesium-navigation-help-rotate">Tilt view</div> <div class="cesium-navigation-help-details">Two finger drag, same direction</div> </td> </tr> <tr> <td><img src="${en("Widgets/Images/NavigationHelp/TouchRotate.svg")}" width="70" height="48" /></td> <td> <div class="cesium-navigation-help-tilt">Rotate view</div> <div class="cesium-navigation-help-details">Two finger drag, opposite direction</div> </td> </tr> </table>`,s.appendChild(p),Ie.applyBindings(n,o),this._container=t,this._viewModel=n,this._wrapper=o,this._closeInstructions=function(A){o.contains(A.target)||(n.showInstructions=!1)},hn.supportsPointerEvents()?document.addEventListener("pointerdown",this._closeInstructions,!0):(document.addEventListener("mousedown",this._closeInstructions,!0),document.addEventListener("touchstart",this._closeInstructions,!0))}Object.defineProperties(Bz.prototype,{container:{get:function(){return this._container}},viewModel:{get:function(){return this._viewModel}}});Bz.prototype.isDestroyed=function(){return!1};Bz.prototype.destroy=function(){return hn.supportsPointerEvents()?document.removeEventListener("pointerdown",this._closeInstructions,!0):(document.removeEventListener("mousedown",this._closeInstructions,!0),document.removeEventListener("touchstart",this._closeInstructions,!0)),Ie.cleanNode(this._wrapper),this._container.removeChild(this._wrapper),he(this)};var EU=Bz;var K3o=y(x(),1);var D3o=y(x(),1);function $ne(e){this._scene=e.scene,this.lowFrameRateMessage=e.lowFrameRateMessage??"This application appears to be performing poorly on your system. Please try using a different web browser or updating your video drivers.",this.lowFrameRateMessageDismissed=!1,this.showingLowFrameRateMessage=!1,Ie.track(this,["lowFrameRateMessage","lowFrameRateMessageDismissed","showingLowFrameRateMessage"]);let t=this;this._dismissMessage=Fn(function(){t.showingLowFrameRateMessage=!1,t.lowFrameRateMessageDismissed=!0});let n=Wv.fromScene(e.scene);this._unsubscribeLowFrameRate=n.lowFrameRate.addEventListener(function(){t.lowFrameRateMessageDismissed||(t.showingLowFrameRateMessage=!0)}),this._unsubscribeNominalFrameRate=n.nominalFrameRate.addEventListener(function(){t.showingLowFrameRateMessage=!1})}Object.defineProperties($ne.prototype,{scene:{get:function(){return this._scene}},dismissMessage:{get:function(){return this._dismissMessage}}});$ne.prototype.destroy=function(){return this._unsubscribeLowFrameRate(),this._unsubscribeNominalFrameRate(),he(this)};var SU=$ne;function wz(e){let t=vn(e.container),n=new SU(e),i=document.createElement("div");i.className="cesium-performance-watchdog-message-area",i.setAttribute("data-bind","visible: showingLowFrameRateMessage");let o=document.createElement("button");o.setAttribute("type","button"),o.className="cesium-performance-watchdog-message-dismiss",o.innerHTML="&times;",o.setAttribute("data-bind","click: dismissMessage"),i.appendChild(o);let r=document.createElement("div");r.className="cesium-performance-watchdog-message",r.setAttribute("data-bind","html: lowFrameRateMessage"),i.appendChild(r),t.appendChild(i),Ie.applyBindings(n,i),this._container=t,this._viewModel=n,this._element=i}Object.defineProperties(wz.prototype,{container:{get:function(){return this._container}},viewModel:{get:function(){return this._viewModel}}});wz.prototype.isDestroyed=function(){return!1};wz.prototype.destroy=function(){return this._viewModel.destroy(),Ie.cleanNode(this._element),this._container.removeChild(this._element),he(this)};var _U=wz;var lHo=y(x(),1);var nHo=y(x(),1);function Nz(e){this._scene=e,this._orthographic=e.camera.frustum instanceof bn,this._flightInProgress=!1,this.dropDownVisible=!1,this.tooltipPerspective="Perspective Projection",this.tooltipOrthographic="Orthographic Projection",this.selectedTooltip=void 0,this.sceneMode=e.mode,Ie.track(this,["_orthographic","_flightInProgress","sceneMode","dropDownVisible","tooltipPerspective","tooltipOrthographic"]);let t=this;Ie.defineProperty(this,"selectedTooltip",function(){return t._orthographic?t.tooltipOrthographic:t.tooltipPerspective}),this._toggleDropDown=Fn(function(){t.sceneMode===se.SCENE2D||t._flightInProgress||(t.dropDownVisible=!t.dropDownVisible)}),this._eventHelper=new Xr,this._eventHelper.add(e.morphComplete,function(n,i,o,r){t.sceneMode=o,t._orthographic=o===se.SCENE2D||t._scene.camera.frustum instanceof bn}),this._eventHelper.add(e.preRender,function(){t._flightInProgress=l(e.camera._currentFlight)}),this._switchToPerspective=Fn(function(){t.sceneMode!==se.SCENE2D&&(t._scene.camera.switchToPerspectiveFrustum(),t._orthographic=!1,t.dropDownVisible=!1)}),this._switchToOrthographic=Fn(function(){t.sceneMode!==se.SCENE2D&&(t._scene.camera.switchToOrthographicFrustum(),t._orthographic=!0,t.dropDownVisible=!1)}),this._sceneMode=se}Object.defineProperties(Nz.prototype,{scene:{get:function(){return this._scene}},toggleDropDown:{get:function(){return this._toggleDropDown}},switchToPerspective:{get:function(){return this._switchToPerspective}},switchToOrthographic:{get:function(){return this._switchToOrthographic}},isOrthographicProjection:{get:function(){return this._orthographic}}});Nz.prototype.isDestroyed=function(){return!1};Nz.prototype.destroy=function(){this._eventHelper.removeAll(),he(this)};var IU=Nz;var KFt="M 28.15625,10.4375 9.125,13.21875 13.75,43.25 41.75,55.09375 50.8125,37 54.5,11.9375 z m 0.125,3 19.976451,0.394265 L 43.03125,16.875 22.6875,14.28125 z M 50.971746,15.705477 47.90625,36.03125 42.53125,46 44.84375,19.3125 z M 12.625,16.03125 l 29.15625,3.6875 -2.65625,31 L 16.4375,41.125 z",jFt="m 31.560594,6.5254438 -20.75,12.4687502 0.1875,24.5625 22.28125,11.8125 19.5,-12 0.65625,-0.375 0,-0.75 0.0312,-23.21875 z m 0.0625,3.125 16.65625,9.5000002 -16.125,10.28125 -17.34375,-9.71875 z m 18.96875,11.1875002 0.15625,20.65625 -17.46875,10.59375 0.15625,-20.28125 z m -37.0625,1.25 17.21875,9.625 -0.15625,19.21875 -16.9375,-9 z";function Pz(e,t){e=vn(e);let n=new IU(t);n._perspectivePath=KFt,n._orthographicPath=jFt;let i=document.createElement("span");i.className="cesium-projectionPicker-wrapper cesium-toolbar-button",e.appendChild(i);let o=document.createElement("button");o.type="button",o.className="cesium-button cesium-toolbar-button",o.setAttribute("data-bind",'css: { "cesium-projectionPicker-buttonPerspective": !_orthographic, "cesium-projectionPicker-buttonOrthographic": _orthographic, "cesium-button-disabled" : sceneMode === _sceneMode.SCENE2D || _flightInProgress, "cesium-projectionPicker-selected": dropDownVisible },attr: { title: selectedTooltip },click: toggleDropDown'),o.innerHTML='<!-- ko cesiumSvgPath: { path: _perspectivePath, width: 64, height: 64, css: "cesium-projectionPicker-iconPerspective" } --><!-- /ko --><!-- ko cesiumSvgPath: { path: _orthographicPath, width: 64, height: 64, css: "cesium-projectionPicker-iconOrthographic" } --><!-- /ko -->',i.appendChild(o);let r=document.createElement("button");r.type="button",r.className="cesium-button cesium-toolbar-button cesium-projectionPicker-dropDown-icon",r.setAttribute("data-bind",'css: { "cesium-projectionPicker-visible" : (dropDownVisible && _orthographic), "cesium-projectionPicker-none" : !_orthographic, "cesium-projectionPicker-hidden" : !dropDownVisible },attr: { title: tooltipPerspective },click: switchToPerspective,cesiumSvgPath: { path: _perspectivePath, width: 64, height: 64 }'),i.appendChild(r);let s=document.createElement("button");s.type="button",s.className="cesium-button cesium-toolbar-button cesium-projectionPicker-dropDown-icon",s.setAttribute("data-bind",'css: { "cesium-projectionPicker-visible" : (dropDownVisible && !_orthographic), "cesium-projectionPicker-none" : _orthographic, "cesium-projectionPicker-hidden" : !dropDownVisible},attr: { title: tooltipOrthographic },click: switchToOrthographic,cesiumSvgPath: { path: _orthographicPath, width: 64, height: 64 }'),i.appendChild(s),Ie.applyBindings(n,i),this._viewModel=n,this._container=e,this._wrapper=i,this._closeDropDown=function(a){i.contains(a.target)||(n.dropDownVisible=!1)},hn.supportsPointerEvents()?document.addEventListener("pointerdown",this._closeDropDown,!0):(document.addEventListener("mousedown",this._closeDropDown,!0),document.addEventListener("touchstart",this._closeDropDown,!0))}Object.defineProperties(Pz.prototype,{container:{get:function(){return this._container}},viewModel:{get:function(){return this._viewModel}}});Pz.prototype.isDestroyed=function(){return!1};Pz.prototype.destroy=function(){return this._viewModel.destroy(),hn.supportsPointerEvents()?document.removeEventListener("pointerdown",this._closeDropDown,!0):(document.removeEventListener("mousedown",this._closeDropDown,!0),document.removeEventListener("touchstart",this._closeDropDown,!0)),Ie.cleanNode(this._wrapper),this._container.removeChild(this._wrapper),he(this)};var ZU=Pz;var EHo=y(x(),1);var AHo=y(x(),1);function Xz(e,t){this._scene=e;let n=this,i=function(o,r,s,a){n.sceneMode=s,n.dropDownVisible=!1};this._eventHelper=new Xr,this._eventHelper.add(e.morphStart,i),this._duration=t??2,this.sceneMode=e.mode,this.dropDownVisible=!1,this.tooltip2D="2D",this.tooltip3D="3D",this.tooltipColumbusView="Columbus View",Ie.track(this,["sceneMode","dropDownVisible","tooltip2D","tooltip3D","tooltipColumbusView"]),this.selectedTooltip=void 0,Ie.defineProperty(this,"selectedTooltip",function(){let o=n.sceneMode;return o===se.SCENE2D?n.tooltip2D:o===se.SCENE3D?n.tooltip3D:n.tooltipColumbusView}),this._toggleDropDown=Fn(function(){n.dropDownVisible=!n.dropDownVisible}),this._morphTo2D=Fn(function(){e.morphTo2D(n._duration)}),this._morphTo3D=Fn(function(){e.morphTo3D(n._duration)}),this._morphToColumbusView=Fn(function(){e.morphToColumbusView(n._duration)}),this._sceneMode=se}Object.defineProperties(Xz.prototype,{scene:{get:function(){return this._scene}},duration:{get:function(){return this._duration},set:function(e){this._duration=e}},toggleDropDown:{get:function(){return this._toggleDropDown}},morphTo2D:{get:function(){return this._morphTo2D}},morphTo3D:{get:function(){return this._morphTo3D}},morphToColumbusView:{get:function(){return this._morphToColumbusView}}});Xz.prototype.isDestroyed=function(){return!1};Xz.prototype.destroy=function(){this._eventHelper.removeAll(),he(this)};var RU=Xz;var qFt="m 32.401392,4.9330437 c -7.087603,0 -14.096095,2.884602 -19.10793,7.8946843 -5.0118352,5.010083 -7.9296167,11.987468 -7.9296167,19.072999 0,7.085531 2.9177815,14.097848 7.9296167,19.107931 4.837653,4.835961 11.541408,7.631372 18.374354,7.82482 0.05712,0.01231 0.454119,0.139729 0.454119,0.139729 l 0.03493,-0.104797 c 0.08246,7.84e-4 0.162033,0.03493 0.244525,0.03493 0.08304,0 0.161515,-0.03414 0.244526,-0.03493 l 0.03493,0.104797 c 0,0 0.309474,-0.129487 0.349323,-0.139729 6.867765,-0.168094 13.582903,-2.965206 18.444218,-7.82482 2.558195,-2.5573 4.551081,-5.638134 5.903547,-8.977584 1.297191,-3.202966 2.02607,-6.661489 2.02607,-10.130347 0,-6.237309 -2.366261,-12.31219 -6.322734,-17.116794 -0.0034,-0.02316 0.0049,-0.04488 0,-0.06986 -0.01733,-0.08745 -0.104529,-0.278855 -0.104797,-0.279458 -5.31e-4,-0.0012 -0.522988,-0.628147 -0.523984,-0.62878 -3.47e-4,-2.2e-4 -0.133444,-0.03532 -0.244525,-0.06987 C 51.944299,13.447603 51.751076,13.104317 51.474391,12.827728 46.462556,7.8176457 39.488996,4.9330437 32.401392,4.9330437 z m -2.130866,3.5281554 0.104797,9.6762289 c -4.111695,-0.08361 -7.109829,-0.423664 -9.257041,-0.943171 1.198093,-2.269271 2.524531,-4.124404 3.91241,-5.414496 2.167498,-2.0147811 3.950145,-2.8540169 5.239834,-3.3185619 z m 2.794579,0 c 1.280302,0.4754953 3.022186,1.3285948 5.065173,3.2486979 1.424667,1.338973 2.788862,3.303645 3.982275,5.728886 -2.29082,0.403367 -5.381258,0.621049 -8.942651,0.698645 L 33.065105,8.4611991 z m 5.728886,0.2445256 c 4.004072,1.1230822 7.793098,3.1481363 10.724195,6.0782083 0.03468,0.03466 0.07033,0.06991 0.104797,0.104797 -0.45375,0.313891 -0.923054,0.663002 -1.956205,1.082899 -0.647388,0.263114 -1.906242,0.477396 -2.829511,0.733577 -1.382296,-2.988132 -3.027146,-5.368585 -4.785716,-7.0213781 -0.422866,-0.397432 -0.835818,-0.6453247 -1.25756,-0.9781032 z m -15.33525,0.7685092 c -0.106753,0.09503 -0.207753,0.145402 -0.31439,0.244526 -1.684973,1.5662541 -3.298068,3.8232211 -4.680919,6.5672591 -0.343797,-0.14942 -1.035052,-0.273198 -1.292493,-0.419186 -0.956528,-0.542427 -1.362964,-1.022024 -1.537018,-1.292493 -0.0241,-0.03745 -0.01868,-0.0401 -0.03493,-0.06986 2.250095,-2.163342 4.948824,-3.869984 7.859752,-5.0302421 z m -9.641296,7.0912431 c 0.464973,0.571618 0.937729,1.169056 1.956205,1.746612 0.349907,0.198425 1.107143,0.335404 1.537018,0.523983 -1.20166,3.172984 -1.998037,7.051901 -2.165798,11.772162 C 14.256557,30.361384 12.934823,30.161483 12.280427,29.90959 10.644437,29.279855 9.6888882,28.674891 9.1714586,28.267775 8.6540289,27.860658 8.6474751,27.778724 8.6474751,27.778724 l -0.069864,0.03493 C 9.3100294,23.691285 11.163248,19.798527 13.817445,16.565477 z m 37.552149,0.523984 c 2.548924,3.289983 4.265057,7.202594 4.890513,11.318043 -0.650428,0.410896 -1.756876,1.001936 -3.563088,1.606882 -1.171552,0.392383 -3.163859,0.759153 -4.960377,1.117832 -0.04367,-4.752703 -0.784809,-8.591423 -1.88634,-11.807094 0.917574,-0.263678 2.170552,-0.486495 2.864443,-0.76851 1.274693,-0.518066 2.003942,-1.001558 2.654849,-1.467153 z m -31.439008,2.619917 c 2.487341,0.672766 5.775813,1.137775 10.479669,1.222628 l 0.104797,10.689263 0,0.03493 0,0.733577 c -5.435005,-0.09059 -9.512219,-0.519044 -12.610536,-1.117831 0.106127,-4.776683 0.879334,-8.55791 2.02607,-11.562569 z m 23.264866,0.31439 c 1.073459,3.067541 1.833795,6.821314 1.816476,11.702298 -3.054474,0.423245 -7.062018,0.648559 -11.702298,0.698644 l 0,-0.838373 -0.104796,-10.654331 c 4.082416,-0.0864 7.404468,-0.403886 9.990618,-0.908238 z M 8.2632205,30.922625 c 0.7558676,0.510548 1.5529563,1.013339 3.0041715,1.57195 0.937518,0.360875 2.612202,0.647642 3.91241,0.978102 0.112814,3.85566 0.703989,7.107756 1.606883,9.920754 -1.147172,-0.324262 -2.644553,-0.640648 -3.423359,-0.978102 -1.516688,-0.657177 -2.386627,-1.287332 -2.864443,-1.71168 -0.477816,-0.424347 -0.489051,-0.489051 -0.489051,-0.489051 L 9.8002387,40.319395 C 8.791691,37.621767 8.1584238,34.769583 8.1584238,31.900727 c 0,-0.330153 0.090589,-0.648169 0.1047967,-0.978102 z m 48.2763445,0.419186 c 0.0047,0.188973 0.06986,0.36991 0.06986,0.558916 0,2.938869 -0.620228,5.873558 -1.676747,8.628261 -0.07435,0.07583 -0.06552,0.07411 -0.454119,0.349323 -0.606965,0.429857 -1.631665,1.042044 -3.318562,1.676747 -1.208528,0.454713 -3.204964,0.850894 -5.135038,1.25756 0.84593,-2.765726 1.41808,-6.005357 1.606883,-9.815957 2.232369,-0.413371 4.483758,-0.840201 5.938479,-1.327425 1.410632,-0.472457 2.153108,-0.89469 2.96924,-1.327425 z m -38.530252,2.864443 c 3.208141,0.56697 7.372279,0.898588 12.575603,0.978103 l 0.174662,9.885821 c -4.392517,-0.06139 -8.106722,-0.320566 -10.863925,-0.803441 -1.051954,-2.664695 -1.692909,-6.043794 -1.88634,-10.060483 z m 26.793022,0.31439 c -0.246298,3.923551 -0.877762,7.263679 -1.816476,9.885822 -2.561957,0.361954 -5.766249,0.560708 -9.431703,0.62878 l -0.174661,-9.815957 c 4.491734,-0.04969 8.334769,-0.293032 11.42284,-0.698645 z M 12.035901,44.860585 c 0.09977,0.04523 0.105535,0.09465 0.209594,0.139729 1.337656,0.579602 3.441099,1.058072 5.589157,1.537018 1.545042,3.399208 3.548524,5.969402 5.589157,7.789888 -3.034411,-1.215537 -5.871615,-3.007978 -8.174142,-5.309699 -1.245911,-1.245475 -2.271794,-2.662961 -3.213766,-4.156936 z m 40.69605,0 c -0.941972,1.493975 -1.967855,2.911461 -3.213765,4.156936 -2.74253,2.741571 -6.244106,4.696717 -9.955686,5.868615 0.261347,-0.241079 0.507495,-0.394491 0.768509,-0.663713 1.674841,-1.727516 3.320792,-4.181056 4.645987,-7.265904 2.962447,-0.503021 5.408965,-1.122293 7.161107,-1.781544 0.284034,-0.106865 0.337297,-0.207323 0.593848,-0.31439 z m -31.404076,2.305527 c 2.645807,0.376448 5.701178,0.649995 9.466635,0.698645 l 0.139729,7.789888 c -1.38739,-0.480844 -3.316218,-1.29837 -5.659022,-3.388427 -1.388822,-1.238993 -2.743668,-3.0113 -3.947342,-5.100106 z m 20.365491,0.104797 c -1.04872,2.041937 -2.174337,3.779068 -3.353494,4.995309 -1.853177,1.911459 -3.425515,2.82679 -4.611055,3.353494 l -0.139729,-7.789887 c 3.13091,-0.05714 5.728238,-0.278725 8.104278,-0.558916 z",$Ft="m 2.9825053,17.550598 0,1.368113 0,26.267766 0,1.368113 1.36811,0 54.9981397,0 1.36811,0 0,-1.368113 0,-26.267766 0,-1.368113 -1.36811,0 -54.9981397,0 -1.36811,0 z m 2.73623,2.736226 10.3292497,0 0,10.466063 -10.3292497,0 0,-10.466063 z m 13.0654697,0 11.69737,0 0,10.466063 -11.69737,0 0,-10.466063 z m 14.43359,0 11.69737,0 0,10.466063 -11.69737,0 0,-10.466063 z m 14.43359,0 10.32926,0 0,10.466063 -10.32926,0 0,-10.466063 z m -41.9326497,13.202288 10.3292497,0 0,10.329252 -10.3292497,0 0,-10.329252 z m 13.0654697,0 11.69737,0 0,10.329252 -11.69737,0 0,-10.329252 z m 14.43359,0 11.69737,0 0,10.329252 -11.69737,0 0,-10.329252 z m 14.43359,0 10.32926,0 0,10.329252 -10.32926,0 0,-10.329252 z",e2t="m 14.723969,17.675598 -0.340489,0.817175 -11.1680536,26.183638 -0.817175,1.872692 2.076986,0 54.7506996,0 2.07698,0 -0.81717,-1.872692 -11.16805,-26.183638 -0.34049,-0.817175 -0.91933,0 -32.414586,0 -0.919322,0 z m 1.838643,2.723916 6.196908,0 -2.928209,10.418977 -7.729111,0 4.460412,-10.418977 z m 9.02297,0 4.903049,0 0,10.418977 -7.831258,0 2.928209,-10.418977 z m 7.626964,0 5.584031,0 2.62176,10.418977 -8.205791,0 0,-10.418977 z m 8.410081,0 5.51593,0 4.46042,10.418977 -7.38863,0 -2.58772,-10.418977 z m -30.678091,13.142892 8.103649,0 -2.89416,10.282782 -9.6018026,0 4.3923136,-10.282782 z m 10.929711,0 8.614384,0 0,10.282782 -11.508544,0 2.89416,-10.282782 z m 11.338299,0 8.852721,0 2.58772,10.282782 -11.440441,0 0,-10.282782 z m 11.678781,0 7.86531,0 4.39231,10.282782 -9.6699,0 -2.58772,-10.282782 z";function Yz(e,t,n){e=vn(e);let i=new RU(t,n);i._globePath=qFt,i._flatMapPath=$Ft,i._columbusViewPath=e2t;let o=document.createElement("span");o.className="cesium-sceneModePicker-wrapper cesium-toolbar-button",e.appendChild(o);let r=document.createElement("button");r.type="button",r.className="cesium-button cesium-toolbar-button",r.setAttribute("data-bind",'css: { "cesium-sceneModePicker-button2D": sceneMode === _sceneMode.SCENE2D, "cesium-sceneModePicker-button3D": sceneMode === _sceneMode.SCENE3D, "cesium-sceneModePicker-buttonColumbusView": sceneMode === _sceneMode.COLUMBUS_VIEW, "cesium-sceneModePicker-selected": dropDownVisible },attr: { title: selectedTooltip },click: toggleDropDown'),r.innerHTML='<!-- ko cesiumSvgPath: { path: _globePath, width: 64, height: 64, css: "cesium-sceneModePicker-slide-svg cesium-sceneModePicker-icon3D" } --><!-- /ko --><!-- ko cesiumSvgPath: { path: _flatMapPath, width: 64, height: 64, css: "cesium-sceneModePicker-slide-svg cesium-sceneModePicker-icon2D" } --><!-- /ko --><!-- ko cesiumSvgPath: { path: _columbusViewPath, width: 64, height: 64, css: "cesium-sceneModePicker-slide-svg cesium-sceneModePicker-iconColumbusView" } --><!-- /ko -->',o.appendChild(r);let s=document.createElement("button");s.type="button",s.className="cesium-button cesium-toolbar-button cesium-sceneModePicker-dropDown-icon",s.setAttribute("data-bind",'css: { "cesium-sceneModePicker-visible" : (dropDownVisible && (sceneMode !== _sceneMode.SCENE3D)) || (!dropDownVisible && (sceneMode === _sceneMode.SCENE3D)), "cesium-sceneModePicker-none" : sceneMode === _sceneMode.SCENE3D, "cesium-sceneModePicker-hidden" : !dropDownVisible },attr: { title: tooltip3D },click: morphTo3D,cesiumSvgPath: { path: _globePath, width: 64, height: 64 }'),o.appendChild(s);let a=document.createElement("button");a.type="button",a.className="cesium-button cesium-toolbar-button cesium-sceneModePicker-dropDown-icon",a.setAttribute("data-bind",'css: { "cesium-sceneModePicker-visible" : (dropDownVisible && (sceneMode !== _sceneMode.SCENE2D)), "cesium-sceneModePicker-none" : sceneMode === _sceneMode.SCENE2D, "cesium-sceneModePicker-hidden" : !dropDownVisible },attr: { title: tooltip2D },click: morphTo2D,cesiumSvgPath: { path: _flatMapPath, width: 64, height: 64 }'),o.appendChild(a);let c=document.createElement("button");c.type="button",c.className="cesium-button cesium-toolbar-button cesium-sceneModePicker-dropDown-icon",c.setAttribute("data-bind",'css: { "cesium-sceneModePicker-visible" : (dropDownVisible && (sceneMode !== _sceneMode.COLUMBUS_VIEW)) || (!dropDownVisible && (sceneMode === _sceneMode.COLUMBUS_VIEW)), "cesium-sceneModePicker-none" : sceneMode === _sceneMode.COLUMBUS_VIEW, "cesium-sceneModePicker-hidden" : !dropDownVisible},attr: { title: tooltipColumbusView },click: morphToColumbusView,cesiumSvgPath: { path: _columbusViewPath, width: 64, height: 64 }'),o.appendChild(c),Ie.applyBindings(i,o),this._viewModel=i,this._container=e,this._wrapper=o,this._closeDropDown=function(d){o.contains(d.target)||(i.dropDownVisible=!1)},hn.supportsPointerEvents()?document.addEventListener("pointerdown",this._closeDropDown,!0):(document.addEventListener("mousedown",this._closeDropDown,!0),document.addEventListener("touchstart",this._closeDropDown,!0))}Object.defineProperties(Yz.prototype,{container:{get:function(){return this._container}},viewModel:{get:function(){return this._viewModel}}});Yz.prototype.isDestroyed=function(){return!1};Yz.prototype.destroy=function(){return this._viewModel.destroy(),hn.supportsPointerEvents()?document.removeEventListener("pointerdown",this._closeDropDown,!0):(document.removeEventListener("mousedown",this._closeDropDown,!0),document.removeEventListener("touchstart",this._closeDropDown,!0)),Ie.cleanNode(this._wrapper),this._container.removeChild(this._wrapper),he(this)};var VU=Yz;var wHo=y(x(),1);var RHo=y(x(),1);var t2t=new M,Mz="-1000px";function GU(e,t,n){this._scene=e,this._screenPositionX=Mz,this._screenPositionY=Mz,this._tweens=e.tweens,this._container=n??document.body,this._selectionIndicatorElement=t,this._scale=1,this.position=void 0,this.showSelection=!1,Ie.track(this,["position","_screenPositionX","_screenPositionY","_scale","showSelection"]),this.isVisible=void 0,Ie.defineProperty(this,"isVisible",{get:function(){return this.showSelection&&l(this.position)}}),Ie.defineProperty(this,"_transform",{get:function(){return`scale(${this._scale})`}}),this.computeScreenSpacePosition=function(i,o){return so.worldToWindowCoordinates(e,i,o)}}GU.prototype.update=function(){if(this.showSelection&&l(this.position)){let e=this.computeScreenSpacePosition(this.position,t2t);if(!l(e))this._screenPositionX=Mz,this._screenPositionY=Mz;else{let t=this._container,n=t.parentNode.clientWidth,i=t.parentNode.clientHeight,o=this._selectionIndicatorElement.clientWidth,r=o*.5;e.x=Math.min(Math.max(e.x,-o),n+o)-r,e.y=Math.min(Math.max(e.y,-o),i+o)-r,this._screenPositionX=`${Math.floor(e.x+.25)}px`,this._screenPositionY=`${Math.floor(e.y+.25)}px`}}};GU.prototype.animateAppear=function(){this._tweens.addProperty({object:this,property:"_scale",startValue:2,stopValue:1,duration:.8,easingFunction:Ts.EXPONENTIAL_OUT})};GU.prototype.animateDepart=function(){this._tweens.addProperty({object:this,property:"_scale",startValue:this._scale,stopValue:1.5,duration:.8,easingFunction:Ts.EXPONENTIAL_OUT})};Object.defineProperties(GU.prototype,{container:{get:function(){return this._container}},selectionIndicatorElement:{get:function(){return this._selectionIndicatorElement}},scene:{get:function(){return this._scene}}});var LU=GU;function vz(e,t){e=vn(e),this._container=e;let n=document.createElement("div");n.className="cesium-selection-wrapper",n.setAttribute("data-bind",'style: { "top" : _screenPositionY, "left" : _screenPositionX },css: { "cesium-selection-wrapper-visible" : isVisible }'),e.appendChild(n),this._element=n;let i="http://www.w3.org/2000/svg",o="M -34 -34 L -34 -11.25 L -30 -15.25 L -30 -30 L -15.25 -30 L -11.25 -34 L -34 -34 z M 11.25 -34 L 15.25 -30 L 30 -30 L 30 -15.25 L 34 -11.25 L 34 -34 L 11.25 -34 z M -34 11.25 L -34 34 L -11.25 34 L -15.25 30 L -30 30 L -30 15.25 L -34 11.25 z M 34 11.25 L 30 15.25 L 30 30 L 15.25 30 L 11.25 34 L 34 34 L 34 11.25 z",r=document.createElementNS(i,"svg:svg");r.setAttribute("width",160),r.setAttribute("height",160),r.setAttribute("viewBox","0 0 160 160");let s=document.createElementNS(i,"g");s.setAttribute("transform","translate(80,80)"),r.appendChild(s);let a=document.createElementNS(i,"path");a.setAttribute("data-bind","attr: { transform: _transform }"),a.setAttribute("d",o),s.appendChild(a),n.appendChild(r);let c=new LU(t,this._element,this._container);this._viewModel=c,Ie.applyBindings(this._viewModel,this._element)}Object.defineProperties(vz.prototype,{container:{get:function(){return this._container}},viewModel:{get:function(){return this._viewModel}}});vz.prototype.isDestroyed=function(){return!1};vz.prototype.destroy=function(){let e=this._container;return Ie.cleanNode(this._element),e.removeChild(this._element),he(this)};var WU=vz;var zHo=y(x(),1);var XHo=y(x(),1);function HE(e,t,n){this._color=e,this._height=t,this._base=n??0}HE.prototype.getHeight=function(){return this._height};HE.prototype.getBase=function(){return this._base};HE.prototype.getStartTime=function(){return this._start};HE.prototype.getStopTime=function(){return this._stop};HE.prototype.setRange=function(e,t){this._start=e,this._stop=t};HE.prototype.render=function(e){let t="";if(this._start&&this._stop&&this._color){let n=q.secondsDifference(this._start,e.epochJulian),i=Math.round(e.timeBarWidth*e.getAlpha(n)),o=q.secondsDifference(this._stop,e.epochJulian),r=Math.round(e.timeBarWidth*e.getAlpha(o))-i;i<0&&(r+=i,i=0),i+r>e.timeBarWidth&&(r=e.timeBarWidth-i),r>0&&(t=`<span class="cesium-timeline-highlight" style="left: ${i.toString()}px; width: ${r.toString()}px; bottom: ${this._base.toString()}px; height: ${this._height}px; background-color: ${this._color};"></span>`)}return t};var FU=HE;var vHo=y(x(),1);function nGe(e,t,n,i){this.interval=e,this.height=t,this.color=n||new U(.5,.5,.5,1),this.backgroundColor=i||new U(0,0,0,0)}nGe.prototype.render=function(e,t){let n=this.interval.start,i=this.interval.stop,o=t.startJulian,r=q.addSeconds(t.startJulian,t.duration,new q);if(q.lessThan(n,o)&&q.greaterThan(i,r))e.fillStyle=this.color.toCssColorString(),e.fillRect(0,t.y,t.timeBarWidth,this.height);else if(q.lessThanOrEquals(n,r)&&q.greaterThanOrEquals(i,o)){let s,a,c;for(s=0;s<t.timeBarWidth;++s){let d=q.addSeconds(t.startJulian,s/t.timeBarWidth*t.duration,new q);!l(a)&&q.greaterThanOrEquals(d,n)?a=s:!l(c)&&q.greaterThanOrEquals(d,i)&&(c=s)}e.fillStyle=this.backgroundColor.toCssColorString(),e.fillRect(0,t.y,t.timeBarWidth,this.height),l(a)&&(l(c)||(c=t.timeBarWidth),e.fillStyle=this.color.toCssColorString(),e.fillRect(a,t.y,Math.max(c-a,1),this.height))}};var BU=nGe;var eie=1e12,hh={none:0,scrub:1,slide:2,zoom:3,touchOnly:4},ad={none:0,scrub:1,slideZoom:2,singleTap:3,ignore:4},ox=[.001,.002,.005,.01,.02,.05,.1,.25,.5,1,2,5,10,15,30,60,120,300,600,900,1800,3600,7200,14400,21600,43200,86400,172800,345600,604800,1296e3,2592e3,5184e3,7776e3,15552e3,31536e3,63072e3,126144e3,15768e4,31536e4,63072e4,126144e4,15768e5,31536e5,63072e5,126144e5,15768e6,31536e6],n2t=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];function cd(e,t){e=vn(e);let n=e.ownerDocument;this.container=e;let i=n.createElement("div");i.className="cesium-timeline-main",e.appendChild(i),this._topDiv=i,this._endJulian=void 0,this._epochJulian=void 0,this._lastXPos=void 0,this._scrubElement=void 0,this._startJulian=void 0,this._timeBarSecondsSpan=void 0,this._clock=t,this._scrubJulian=t.currentTime,this._mainTicSpan=-1,this._mouseMode=hh.none,this._touchMode=ad.none,this._touchState={centerX:0,spanX:0},this._mouseX=0,this._timelineDrag=0,this._timelineDragLocation=void 0,this._lastHeight=void 0,this._lastWidth=void 0,this._topDiv.innerHTML='<div class="cesium-timeline-bar"></div><div class="cesium-timeline-trackContainer"><canvas class="cesium-timeline-tracks" width="10" height="1"></canvas></div><div class="cesium-timeline-needle"></div><span class="cesium-timeline-ruler"></span>',this._timeBarEle=this._topDiv.childNodes[0],this._trackContainer=this._topDiv.childNodes[1],this._trackListEle=this._topDiv.childNodes[1].childNodes[0],this._needleEle=this._topDiv.childNodes[2],this._rulerEle=this._topDiv.childNodes[3],this._context=this._trackListEle.getContext("2d"),this._trackList=[],this._highlightRanges=[],this.zoomTo(t.startTime,t.stopTime),this._onMouseDown=i2t(this),this._onMouseUp=o2t(this),this._onMouseMove=r2t(this),this._onMouseWheel=s2t(this),this._onTouchStart=a2t(this),this._onTouchMove=l2t(this),this._onTouchEnd=c2t(this);let o=this._timeBarEle;n.addEventListener("mouseup",this._onMouseUp,!1),n.addEventListener("mousemove",this._onMouseMove,!1),o.addEventListener("mousedown",this._onMouseDown,!1),o.addEventListener("DOMMouseScroll",this._onMouseWheel,!1),o.addEventListener("mousewheel",this._onMouseWheel,!1),o.addEventListener("touchstart",this._onTouchStart,!1),o.addEventListener("touchmove",this._onTouchMove,!1),o.addEventListener("touchend",this._onTouchEnd,!1),o.addEventListener("touchcancel",this._onTouchEnd,!1),this._topDiv.oncontextmenu=function(){return!1},t.onTick.addEventListener(this.updateFromClock,this),this.updateFromClock()}cd.prototype.addEventListener=function(e,t,n){this._topDiv.addEventListener(e,t,n)};cd.prototype.removeEventListener=function(e,t,n){this._topDiv.removeEventListener(e,t,n)};cd.prototype.isDestroyed=function(){return!1};cd.prototype.destroy=function(){this._clock.onTick.removeEventListener(this.updateFromClock,this);let e=this.container.ownerDocument;e.removeEventListener("mouseup",this._onMouseUp,!1),e.removeEventListener("mousemove",this._onMouseMove,!1);let t=this._timeBarEle;t.removeEventListener("mousedown",this._onMouseDown,!1),t.removeEventListener("DOMMouseScroll",this._onMouseWheel,!1),t.removeEventListener("mousewheel",this._onMouseWheel,!1),t.removeEventListener("touchstart",this._onTouchStart,!1),t.removeEventListener("touchmove",this._onTouchMove,!1),t.removeEventListener("touchend",this._onTouchEnd,!1),t.removeEventListener("touchcancel",this._onTouchEnd,!1),this.container.removeChild(this._topDiv),he(this)};cd.prototype.addHighlightRange=function(e,t,n){let i=new FU(e,t,n);return this._highlightRanges.push(i),this.resize(),i};cd.prototype.addTrack=function(e,t,n,i){let o=new BU(e,t,n,i);return this._trackList.push(o),this._lastHeight=void 0,this.resize(),o};cd.prototype.zoomTo=function(e,t){if(this._startJulian=e,this._endJulian=t,this._timeBarSecondsSpan=q.secondsDifference(t,e),this._clock&&this._clock.clockRange!==xs.UNBOUNDED){let i=this._clock.startTime,o=this._clock.stopTime,r=q.secondsDifference(o,i),s=q.secondsDifference(i,this._startJulian),a=q.secondsDifference(o,this._endJulian);this._timeBarSecondsSpan>=r?(this._timeBarSecondsSpan=r,this._startJulian=this._clock.startTime,this._endJulian=this._clock.stopTime):s>0?(this._endJulian=q.addSeconds(this._endJulian,s,new q),this._startJulian=i,this._timeBarSecondsSpan=q.secondsDifference(this._endJulian,this._startJulian)):a<0&&(this._startJulian=q.addSeconds(this._startJulian,a,new q),this._endJulian=o,this._timeBarSecondsSpan=q.secondsDifference(this._endJulian,this._startJulian))}this._makeTics();let n=document.createEvent("Event");n.initEvent("setzoom",!0,!0),n.startJulian=this._startJulian,n.endJulian=this._endJulian,n.epochJulian=this._epochJulian,n.totalSpan=this._timeBarSecondsSpan,n.mainTicSpan=this._mainTicSpan,this._topDiv.dispatchEvent(n)};cd.prototype.zoomFrom=function(e){let t=q.secondsDifference(this._scrubJulian,this._startJulian);e>1||t<0||t>this._timeBarSecondsSpan?t=this._timeBarSecondsSpan*.5:t+=t-this._timeBarSecondsSpan*.5;let n=this._timeBarSecondsSpan-t;this.zoomTo(q.addSeconds(this._startJulian,t-t*e,new q),q.addSeconds(this._endJulian,n*e-n,new q))};function tie(e){return e<10?`0${e.toString()}`:e.toString()}cd.prototype.makeLabel=function(e){let t=q.toGregorianDate(e),n=t.millisecond,i=" UTC";if(n>0&&this._timeBarSecondsSpan<3600){for(i=Math.floor(n).toString();i.length<3;)i=`0${i}`;i=`.${i}`}return`${n2t[t.month-1]} ${t.day} ${t.year} ${tie(t.hour)}:${tie(t.minute)}:${tie(t.second)}${i}`};cd.prototype.smallestTicInPixels=7;cd.prototype._makeTics=function(){let e=this._timeBarEle,t=q.secondsDifference(this._scrubJulian,this._startJulian),n=Math.round(t*this._topDiv.clientWidth/this._timeBarSecondsSpan),i=n-8,o,r=this;this._needleEle.style.left=`${n.toString()}px`;let s="",a=.01,c=31536e6,d=1e-10,u=0,h=this._timeBarSecondsSpan;h<a?(h=a,this._timeBarSecondsSpan=a,this._endJulian=q.addSeconds(this._startJulian,a,new q)):h>c&&(h=c,this._timeBarSecondsSpan=c,this._endJulian=q.addSeconds(this._startJulian,c,new q));let p=this._timeBarEle.clientWidth;p<10&&(p=10);let A=this._startJulian,f=Math.min(h/p*1e-5,.4),b,C=q.toGregorianDate(A);h>31536e4?b=q.fromDate(new Date(Date.UTC(Math.floor(C.year/100)*100,0))):h>31536e3?b=q.fromDate(new Date(Date.UTC(Math.floor(C.year/10)*10,0))):h>86400?b=q.fromDate(new Date(Date.UTC(C.year,0))):b=q.fromDate(new Date(Date.UTC(C.year,C.month,C.day)));let T=q.secondsDifference(this._startJulian,q.addSeconds(b,f,new q)),E=T+h;this._epochJulian=b;function S(Y){return Math.floor(T/Y)*Y}function I(Y,O){return Math.ceil(Y/O+.5)*O}function R(Y){return(Y-T)/h}function V(Y,O){return Y-O*Math.round(Y/O)}this._rulerEle.innerHTML=this.makeLabel(q.addSeconds(this._endJulian,-a,new q));let W=this._rulerEle.offsetWidth+20;W<30&&(W=180);let B=u;u-=d;let N={startTime:T,startJulian:A,epochJulian:b,duration:h,timeBarWidth:p,getAlpha:R};this._highlightRanges.forEach(function(Y){s+=Y.render(N)});let P=0,g=0,_=0,Z=W/p;Z>1&&(Z=1),Z*=this._timeBarSecondsSpan;let G=-1,w=-1,X=ox.length,k;for(k=0;k<X;++k){let Y=ox[k];if(++G,P=Y,Y>Z&&Y>u)break;w<0&&p*(Y/this._timeBarSecondsSpan)>=this.smallestTicInPixels&&(w=G)}if(G>0){for(;G>0;)if(--G,Math.abs(V(P,ox[G]))<1e-5){ox[G]>=u&&(g=ox[G]);break}if(w>=0)for(;w<G;){if(Math.abs(V(g,ox[w]))<1e-5&&ox[w]>=u){_=ox[w];break}++w}}u=B,u>d&&_<1e-5&&Math.abs(u-P)>d&&(_=u,u<=P+d&&(g=0));let v=-999999,D;if(p*(_/this._timeBarSecondsSpan)>=3)for(o=S(_);o<=E;o=I(o,_))s+=`<span class="cesium-timeline-ticTiny" style="left: ${Math.round(p*R(o)).toString()}px;"></span>`;if(p*(g/this._timeBarSecondsSpan)>=3)for(o=S(g);o<=E;o=I(o,g))s+=`<span class="cesium-timeline-ticSub" style="left: ${Math.round(p*R(o)).toString()}px;"></span>`;if(p*(P/this._timeBarSecondsSpan)>=2){this._mainTicSpan=P,E+=P,o=S(P);let Y=q.computeTaiMinusUtc(b);for(;o<=E;){let O=q.addSeconds(A,o-T,new q);if(P>2.1){let j=q.computeTaiMinusUtc(O);Math.abs(j-Y)>.1&&(o+=j-Y,O=q.addSeconds(A,o-T,new q))}let J=Math.round(p*R(o)),te=this.makeLabel(O);this._rulerEle.innerHTML=te,D=this._rulerEle.offsetWidth,D<10&&(D=W);let z=J-(D/2-1);z>v?(v=z+D+5,s+=`<span class="cesium-timeline-ticMain" style="left: ${J.toString()}px;"></span><span class="cesium-timeline-ticLabel" style="left: ${z.toString()}px;">${te}</span>`):s+=`<span class="cesium-timeline-ticSub" style="left: ${J.toString()}px;"></span>`,o=I(o,P)}}else this._mainTicSpan=-1;s+=`<span class="cesium-timeline-icon16" style="left:${i}px;bottom:0;background-position: 0 0;"></span>`,e.innerHTML=s,this._scrubElement=e.lastChild,this._context.clearRect(0,0,this._trackListEle.width,this._trackListEle.height),N.y=0,this._trackList.forEach(function(Y){Y.render(r._context,N),N.y+=Y.height})};cd.prototype.updateFromClock=function(){this._scrubJulian=this._clock.currentTime;let e=this._scrubElement;if(l(this._scrubElement)){let t=q.secondsDifference(this._scrubJulian,this._startJulian),n=Math.round(t*this._topDiv.clientWidth/this._timeBarSecondsSpan);this._lastXPos!==n&&(this._lastXPos=n,e.style.left=`${n-8}px`,this._needleEle.style.left=`${n}px`)}l(this._timelineDragLocation)&&(this._setTimeBarTime(this._timelineDragLocation,this._timelineDragLocation*this._timeBarSecondsSpan/this._topDiv.clientWidth),this.zoomTo(q.addSeconds(this._startJulian,this._timelineDrag,new q),q.addSeconds(this._endJulian,this._timelineDrag,new q)))};cd.prototype._setTimeBarTime=function(e,t){if(e=Math.round(e),this._scrubJulian=q.addSeconds(this._startJulian,t,new q),this._scrubElement){let i=e-8;this._scrubElement.style.left=`${i.toString()}px`,this._needleEle.style.left=`${e.toString()}px`}let n=document.createEvent("Event");n.initEvent("settime",!0,!0),n.clientX=e,n.timeSeconds=t,n.timeJulian=this._scrubJulian,n.clock=this._clock,this._topDiv.dispatchEvent(n)};function i2t(e){return function(t){e._mouseMode!==hh.touchOnly&&(t.button===0?(e._mouseMode=hh.scrub,e._scrubElement&&(e._scrubElement.style.backgroundPosition="-16px 0"),e._onMouseMove(t)):(e._mouseX=t.clientX,t.button===2?e._mouseMode=hh.zoom:e._mouseMode=hh.slide)),t.preventDefault()}}function o2t(e){return function(t){e._mouseMode=hh.none,e._scrubElement&&(e._scrubElement.style.backgroundPosition="0 0"),e._timelineDrag=0,e._timelineDragLocation=void 0}}function r2t(e){return function(t){let n;if(e._mouseMode===hh.scrub){t.preventDefault();let i=t.clientX-e._topDiv.getBoundingClientRect().left;i<0?(e._timelineDragLocation=0,e._timelineDrag=-.01*e._timeBarSecondsSpan):i>e._topDiv.clientWidth?(e._timelineDragLocation=e._topDiv.clientWidth,e._timelineDrag=.01*e._timeBarSecondsSpan):(e._timelineDragLocation=void 0,e._setTimeBarTime(i,i*e._timeBarSecondsSpan/e._topDiv.clientWidth))}else if(e._mouseMode===hh.slide){if(n=e._mouseX-t.clientX,e._mouseX=t.clientX,n!==0){let i=n*e._timeBarSecondsSpan/e._topDiv.clientWidth;e.zoomTo(q.addSeconds(e._startJulian,i,new q),q.addSeconds(e._endJulian,i,new q))}}else e._mouseMode===hh.zoom&&(n=e._mouseX-t.clientX,e._mouseX=t.clientX,n!==0&&e.zoomFrom(Math.pow(1.01,n)))}}function s2t(e){return function(t){let n=t.wheelDeltaY||t.wheelDelta||-t.detail;eie=Math.max(Math.min(Math.abs(n),eie),1),n/=eie,e.zoomFrom(Math.pow(1.05,-n))}}function a2t(e){return function(t){let n=t.touches.length,i,o,r=e._topDiv.getBoundingClientRect().left;t.preventDefault(),e._mouseMode=hh.touchOnly,n===1?(i=q.secondsDifference(e._scrubJulian,e._startJulian),o=Math.round(i*e._topDiv.clientWidth/e._timeBarSecondsSpan+r),Math.abs(t.touches[0].clientX-o)<50?(e._touchMode=ad.scrub,e._scrubElement&&(e._scrubElement.style.backgroundPosition=n===1?"-16px 0":"0 0")):(e._touchMode=ad.singleTap,e._touchState.centerX=t.touches[0].clientX-r)):n===2?(e._touchMode=ad.slideZoom,e._touchState.centerX=(t.touches[0].clientX+t.touches[1].clientX)*.5-r,e._touchState.spanX=Math.abs(t.touches[0].clientX-t.touches[1].clientX)):e._touchMode=ad.ignore}}function c2t(e){return function(t){let n=t.touches.length,i=e._topDiv.getBoundingClientRect().left;e._touchMode===ad.singleTap?(e._touchMode=ad.scrub,e._onTouchMove(t)):e._touchMode===ad.scrub&&e._onTouchMove(t),e._mouseMode=hh.touchOnly,n!==1?e._touchMode=n>0?ad.ignore:ad.none:e._touchMode===ad.slideZoom&&(e._touchState.centerX=t.touches[0].clientX-i),e._scrubElement&&(e._scrubElement.style.backgroundPosition="0 0")}}function l2t(e){return function(t){let n,i,o,r,s,a,c=1,d=e._topDiv.getBoundingClientRect().left;e._touchMode===ad.singleTap&&(e._touchMode=ad.slideZoom),e._mouseMode=hh.touchOnly,e._touchMode===ad.scrub?(t.preventDefault(),t.changedTouches.length===1&&(i=t.changedTouches[0].clientX-d,i>=0&&i<=e._topDiv.clientWidth&&e._setTimeBarTime(i,i*e._timeBarSecondsSpan/e._topDiv.clientWidth))):e._touchMode===ad.slideZoom&&(o=t.touches.length,o===2?(r=(t.touches[0].clientX+t.touches[1].clientX)*.5-d,s=Math.abs(t.touches[0].clientX-t.touches[1].clientX)):o===1&&(r=t.touches[0].clientX-d,s=0),l(r)&&(s>0&&e._touchState.spanX>0?(c=e._touchState.spanX/s,a=q.addSeconds(e._startJulian,(e._touchState.centerX*e._timeBarSecondsSpan-r*e._timeBarSecondsSpan*c)/e._topDiv.clientWidth,new q)):(n=e._touchState.centerX-r,a=q.addSeconds(e._startJulian,n*e._timeBarSecondsSpan/e._topDiv.clientWidth,new q)),e.zoomTo(a,q.addSeconds(a,e._timeBarSecondsSpan*c,new q)),e._touchState.centerX=r,e._touchState.spanX=s))}}cd.prototype.resize=function(){let e=this.container.clientWidth,t=this.container.clientHeight;if(e===this._lastWidth&&t===this._lastHeight)return;this._trackContainer.style.height=`${t}px`;let n=1;this._trackList.forEach(function(i){n+=i.height}),this._trackListEle.style.height=`${n.toString()}px`,this._trackListEle.width=this._trackListEle.clientWidth,this._trackListEle.height=n,this._makeTics(),this._lastXPos=void 0,this._lastWidth=e,this._lastHeight=t};var wU=cd;var LJo=y(x(),1);var dJo=y(x(),1);var iJo=y(x(),1);var aGe=y(sGe(),1);function m2t(e){let t=!1,n=window.screen;return l(n)&&(l(n.lockOrientation)?t=n.lockOrientation(e):l(n.mozLockOrientation)?t=n.mozLockOrientation(e):l(n.msLockOrientation)?t=n.msLockOrientation(e):l(n.orientation&&n.orientation.lock)&&(t=n.orientation.lock(e))),t}function cGe(){let e=window.screen;l(e)&&(l(e.unlockOrientation)?e.unlockOrientation():l(e.mozUnlockOrientation)?e.mozUnlockOrientation():l(e.msUnlockOrientation)?e.msUnlockOrientation():l(e.orientation&&e.orientation.unlock)&&e.orientation.unlock())}function h2t(e,t,n,i){i()||(n()?(t.useWebVR=!1,e._locked&&(cGe(),e._locked=!1),e._noSleep.disable(),Dr.exitFullscreen(),n(!1)):(Dr.fullscreen||Dr.requestFullscreen(e._vrElement),e._noSleep.enable(),e._locked||(e._locked=m2t("landscape")),t.useWebVR=!0,n(!0)))}function Uz(e,t){let n=this,i=Ie.observable(Dr.enabled),o=Ie.observable(!1);this.isVRMode=void 0,Ie.defineProperty(this,"isVRMode",{get:function(){return o()}}),this.isVREnabled=void 0,Ie.defineProperty(this,"isVREnabled",{get:function(){return i()},set:function(s){i(s&&Dr.enabled)}}),this.tooltip=void 0,Ie.defineProperty(this,"tooltip",function(){return i()?o()?"Exit VR mode":"Enter VR mode":"VR mode is unavailable"});let r=Ie.observable(!1);this._isOrthographic=void 0,Ie.defineProperty(this,"_isOrthographic",{get:function(){return r()}}),this._eventHelper=new Xr,this._eventHelper.add(e.preRender,function(){r(e.camera.frustum instanceof bn)}),this._locked=!1,this._noSleep=new aGe.default,this._command=Fn(function(){h2t(n,e,o,r)},Ie.getObservable(this,"isVREnabled")),this._vrElement=vn(t)??document.body,this._callback=function(){!Dr.fullscreen&&o()&&(e.useWebVR=!1,n._locked&&(cGe(),n._locked=!1),n._noSleep.disable(),o(!1))},document.addEventListener(Dr.changeEventName,this._callback)}Object.defineProperties(Uz.prototype,{vrElement:{get:function(){return this._vrElement},set:function(e){this._vrElement=e}},command:{get:function(){return this._command}}});Uz.prototype.isDestroyed=function(){return!1};Uz.prototype.destroy=function(){this._eventHelper.removeAll(),document.removeEventListener(Dr.changeEventName,this._callback),he(this)};var NU=Uz;var f2t="M 5.3125 6.375 C 4.008126 6.375 2.96875 7.4141499 2.96875 8.71875 L 2.96875 19.5 C 2.96875 20.8043 4.008126 21.875 5.3125 21.875 L 13.65625 21.875 C 13.71832 20.0547 14.845166 18.59375 16.21875 18.59375 C 17.592088 18.59375 18.71881 20.0552 18.78125 21.875 L 27.09375 21.875 C 28.398125 21.875 29.4375 20.8043 29.4375 19.5 L 29.4375 8.71875 C 29.4375 7.4141499 28.398125 6.375 27.09375 6.375 L 5.3125 6.375 z M 9.625 10.4375 C 11.55989 10.4375 13.125 12.03385 13.125 13.96875 C 13.125 15.90365 11.55989 17.46875 9.625 17.46875 C 7.69011 17.46875 6.125 15.90365 6.125 13.96875 C 6.125 12.03385 7.69011 10.4375 9.625 10.4375 z M 22.46875 10.4375 C 24.40364 10.4375 25.96875 12.03385 25.96875 13.96875 C 25.96875 15.90365 24.40364 17.46875 22.46875 17.46875 C 20.53386 17.46875 18.96875 15.90365 18.96875 13.96875 C 18.96875 12.03385 20.53386 10.4375 22.46875 10.4375 z",p2t="M 25.770585,2.4552065 C 15.72282,13.962707 10.699956,19.704407 8.1768352,22.580207 c -1.261561,1.4379 -1.902282,2.1427 -2.21875,2.5 -0.141624,0.1599 -0.208984,0.2355 -0.25,0.2813 l 0.6875,0.75 c 10e-5,-10e-5 0.679191,0.727 0.6875,0.7187 0.01662,-0.016 0.02451,-0.024 0.03125,-0.031 0.01348,-0.014 0.04013,-0.038 0.0625,-0.062 0.04474,-0.05 0.120921,-0.1315 0.28125,-0.3126 0.320657,-0.3619 0.956139,-1.0921 2.2187499,-2.5312 2.5252219,-2.8781 7.5454589,-8.6169 17.5937499,-20.1250005 l -1.5,-1.3125 z m -20.5624998,3.9063 c -1.304375,0 -2.34375,1.0391 -2.34375,2.3437 l 0,10.8125005 c 0,1.3043 1.039375,2.375 2.34375,2.375 l 2.25,0 c 1.9518039,-2.2246 7.4710958,-8.5584 13.5624998,-15.5312005 l -15.8124998,0 z m 21.1249998,0 c -1.855467,2.1245 -2.114296,2.4005 -3.59375,4.0936995 1.767282,0.1815 3.15625,1.685301 3.15625,3.500001 0,1.9349 -1.56511,3.5 -3.5,3.5 -1.658043,0 -3.043426,-1.1411 -3.40625,-2.6875 -1.089617,1.2461 -2.647139,2.9988 -3.46875,3.9375 0.191501,-0.062 0.388502,-0.094 0.59375,-0.094 1.373338,0 2.50006,1.4614 2.5625,3.2812 l 8.3125,0 c 1.304375,0 2.34375,-1.0707 2.34375,-2.375 l 0,-10.8125005 c 0,-1.3046 -1.039375,-2.3437 -2.34375,-2.3437 l -0.65625,0 z M 9.5518351,10.423906 c 1.9348899,0 3.4999999,1.596401 3.4999999,3.531301 0,1.9349 -1.56511,3.5 -3.4999999,3.5 -1.9348899,0 -3.4999999,-1.5651 -3.4999999,-3.5 0,-1.9349 1.56511,-3.531301 3.4999999,-3.531301 z m 4.2187499,10.312601 c -0.206517,0.2356 -0.844218,0.9428 -1.03125,1.1562 l 0.8125,0 c 0.01392,-0.4081 0.107026,-0.7968 0.21875,-1.1562 z";function Dz(e,t,n){e=vn(e);let i=new NU(t,n);i._exitVRPath=p2t,i._enterVRPath=f2t;let o=document.createElement("button");o.type="button",o.className="cesium-button cesium-vrButton",o.setAttribute("data-bind",'css: { "cesium-button-disabled" : _isOrthographic }, attr: { title: tooltip },click: command,enable: isVREnabled,cesiumSvgPath: { path: isVRMode ? _exitVRPath : _enterVRPath, width: 32, height: 32 }'),e.appendChild(o),Ie.applyBindings(i,o),this._container=e,this._viewModel=i,this._element=o}Object.defineProperties(Dz.prototype,{container:{get:function(){return this._container}},viewModel:{get:function(){return this._viewModel}}});Dz.prototype.isDestroyed=function(){return!1};Dz.prototype.destroy=function(){return this._viewModel.destroy(),Ie.cleanNode(this._element),this._container.removeChild(this._element),he(this)};var PU=Dz;var lGe=new ue;function mGe(e){let t=e.clock;t.currentTime=e.timeJulian,t.shouldAnimate=!1}function A2t(e){let t=e.getPropertyIds(),n="";return t.forEach(function(i){let o=e.getProperty(i);l(o)&&(n+=`<tr><th>${i}</th><td>${o}</td></tr>`)}),n.length>0&&(n=`<table class="cesium-infoBox-defaultTable"><tbody>${n}</tbody></table>`),n}function g2t(e){let t,n=[],i=e.getPropertyIds();for(t=0;t<i.length;t++){let r=i[t];/^name$/i.test(r)?n[0]=e.getProperty(r):/name/i.test(r)?n[1]=e.getProperty(r):/^title$/i.test(r)?n[2]=e.getProperty(r):/^(id|identifier)$/i.test(r)?n[3]=e.getProperty(r):/element/i.test(r)?n[4]=e.getProperty(r):/(id|identifier)$/i.test(r)&&(n[5]=e.getProperty(r))}let o=n.length;for(t=0;t<o;t++){let r=n[t];if(l(r)&&r!=="")return r}return"Unnamed Feature"}function dGe(e,t){let n=e.scene.pick(t.position);if(l(n)){let i=n.id??n.primitive.id;if(i instanceof jo)return i;if(n instanceof Ga)return new jo({name:g2t(n),description:A2t(n),feature:n})}if(l(e.scene.globe))return x2t(e,t.position)}var b2t=new q;function rie(e,t){if(l(t)){let n=t.clock;if(l(n)&&l(e)){let i=n.startTime,o=n.stopTime;q.equals(i,o)&&(o=q.addSeconds(i,L.EPSILON2,b2t)),e.updateFromClock(),e.zoomTo(i,o)}}}var y2t=new m;function x2t(e,t){let n=e.scene,i=n.camera.getPickRay(t),o=n.imageryLayers.pickImageryLayerFeatures(i,n);if(!l(o))return;let r=new jo({id:"Loading...",description:"Loading feature information..."});return o.then(function(s){if(e.selectedEntity!==r)return;if(!l(s)||s.length===0){e.selectedEntity=uGe();return}let a=s[0],c=new jo({id:a.name,description:a.description});if(l(a.position)){let d=e.scene.ellipsoid.cartographicToCartesian(a.position,y2t);c.position=new Rl(d)}e.selectedEntity=c},function(){e.selectedEntity===r&&(e.selectedEntity=uGe())}),r}function uGe(){return new jo({id:"None",description:"No features found."})}function C2t(e,t){let n=e._geocoder,i=e._homeButton,o=e._sceneModePicker,r=e._projectionPicker,s=e._baseLayerPicker,a=e._animation,c=e._timeline,d=e._fullscreenButton,u=e._infoBox,h=e._selectionIndicator,p=t?"hidden":"visible";if(l(n)&&(n.container.style.visibility=p),l(i)&&(i.container.style.visibility=p),l(o)&&(o.container.style.visibility=p),l(r)&&(r.container.style.visibility=p),l(s)&&(s.container.style.visibility=p),l(a)&&(a.container.style.visibility=p),l(c)&&(c.container.style.visibility=p),l(d)&&d.viewModel.isFullscreenEnabled&&(d.container.style.visibility=p),l(u)&&(u.container.style.visibility=p),l(h)&&(h.container.style.visibility=p),e._container){let A=t||!l(d)?0:d.container.clientWidth;e._vrButton.container.style.right=`${A}px`,e.forceResize()}}function fo(e,t){e=vn(e),t=t??Q.EMPTY_OBJECT;let n=(!l(t.globe)||t.globe!==!1)&&(!l(t.baseLayerPicker)||t.baseLayerPicker!==!1),i=this,o=document.createElement("div");o.className="cesium-viewer",e.appendChild(o);let r=document.createElement("div");r.className="cesium-viewer-cesiumWidgetContainer",o.appendChild(r);let s=document.createElement("div");s.className="cesium-viewer-bottom",o.appendChild(s);let a=t.scene3DOnly??!1,c,d,u=!1;l(t.clockViewModel)?(d=t.clockViewModel,c=d.clock):(c=new pf,d=new jv(c),u=!0);let h=new Cv(r,{baseLayer:n&&l(t.selectedImageryProviderViewModel)||l(t.baseLayer)||l(t.imageryProvider)?!1:void 0,clock:c,shouldAnimate:t.shouldAnimate,skyBox:t.skyBox,skyAtmosphere:t.skyAtmosphere,sceneMode:t.sceneMode,ellipsoid:t.ellipsoid,mapProjection:t.mapProjection,globe:t.globe,orderIndependentTranslucency:t.orderIndependentTranslucency,automaticallyTrackDataSourceClocks:t.automaticallyTrackDataSourceClocks,contextOptions:t.contextOptions,useDefaultRenderLoop:t.useDefaultRenderLoop,targetFrameRate:t.targetFrameRate,showRenderLoopErrors:t.showRenderLoopErrors,useBrowserRecommendedResolution:t.useBrowserRecommendedResolution,creditContainer:l(t.creditContainer)?t.creditContainer:s,creditViewport:t.creditViewport,dataSources:t.dataSources,scene3DOnly:a,shadows:t.shadows,terrainShadows:t.terrainShadows,mapMode2D:t.mapMode2D,blurActiveElementOnCanvasFocus:t.blurActiveElementOnCanvasFocus,requestRenderMode:t.requestRenderMode,maximumRenderTimeChange:t.maximumRenderTimeChange,depthPlaneEllipsoidOffset:t.depthPlaneEllipsoidOffset,msaaSamples:t.msaaSamples}),p=h.scene,A=new Xr;A.add(c.onTick,fo.prototype._onTick,this);let f;if(!l(t.selectionIndicator)||t.selectionIndicator!==!1){let O=document.createElement("div");O.className="cesium-viewer-selectionIndicatorContainer",o.appendChild(O),f=new WU(O,p)}let b;if(!l(t.infoBox)||t.infoBox!==!1){let O=document.createElement("div");O.className="cesium-viewer-infoBoxContainer",o.appendChild(O),b=new CU(O);let J=b.viewModel;A.add(J.cameraClicked,fo.prototype._onInfoBoxCameraClicked,this),A.add(J.closeClicked,fo.prototype._onInfoBoxClockClicked,this)}let C=document.createElement("div");C.className="cesium-viewer-toolbar",o.appendChild(C);let T;if(!l(t.geocoder)||t.geocoder!==!1){let O=document.createElement("div");O.className="cesium-viewer-geocoderContainer",C.appendChild(O);let J;typeof t.geocoder=="string"?J=[new nE({scene:p,geocodeProviderType:t.geocoder})]:l(t.geocoder)&&typeof t.geocoder!="boolean"&&(J=Array.isArray(t.geocoder)?t.geocoder:[t.geocoder]),T=new AU({container:O,geocoderServices:J,scene:p}),A.add(T.viewModel.search.beforeExecute,fo.prototype._clearObjects,this)}let E;(!l(t.homeButton)||t.homeButton!==!1)&&(E=new bU(C,p),l(T)&&A.add(E.viewModel.command.afterExecute,function(){let O=T.viewModel;O.searchText="",O.isSearchInProgress&&O.search()}),A.add(E.viewModel.command.beforeExecute,fo.prototype._clearTrackedObject,this));let S;!a&&(!l(t.sceneModePicker)||t.sceneModePicker!==!1)&&(S=new VU(C,p));let I;t.projectionPicker&&(I=new ZU(C,p));let R,V;if(n){let O=t.imageryProviderViewModels??cU(),J=t.terrainProviderViewModels??lU();R=new aU(C,{globe:p.globe,imageryProviderViewModels:O,selectedImageryProviderViewModel:t.selectedImageryProviderViewModel,terrainProviderViewModels:J,selectedTerrainProviderViewModel:t.selectedTerrainProviderViewModel}),V=C.getElementsByClassName("cesium-baseLayerPicker-dropDown")[0]}l(t.baseLayer)&&t.baseLayer!==!1&&(n&&(R.viewModel.selectedImagery=void 0),p.imageryLayers.removeAll(),p.imageryLayers.add(t.baseLayer)),l(t.terrainProvider)&&(n&&(R.viewModel.selectedTerrain=void 0),p.terrainProvider=t.terrainProvider),l(t.terrain)&&(n&&(p.globe.depthTestAgainstTerrain=!0),p.setTerrain(t.terrain));let W;if(!l(t.navigationHelpButton)||t.navigationHelpButton!==!1){let O=!0;try{if(l(window.localStorage)){let J=window.localStorage.getItem("cesium-hasSeenNavHelp");l(J)&&J?O=!1:window.localStorage.setItem("cesium-hasSeenNavHelp","true")}}catch{}W=new EU({container:C,instructionsInitiallyVisible:t.navigationInstructionsInitiallyVisible??O})}let B;if(!l(t.animation)||t.animation!==!1){let O=document.createElement("div");O.className="cesium-viewer-animationContainer",o.appendChild(O),B=new eU(O,new tU(d))}let N;if(!l(t.timeline)||t.timeline!==!1){let O=document.createElement("div");O.className="cesium-viewer-timelineContainer",o.appendChild(O),N=new wU(O,c),N.addEventListener("settime",mGe,!1),N.zoomTo(c.startTime,c.stopTime)}let P,g,_;(!l(t.fullscreenButton)||t.fullscreenButton!==!1)&&(_=document.createElement("div"),_.className="cesium-viewer-fullscreenContainer",o.appendChild(_),P=new fU(_,t.fullscreenElement),g=gc(P.viewModel,"isFullscreenEnabled",function(O){_.style.display=O?"block":"none",l(N)&&(N.container.style.right=`${_.clientWidth}px`,N.resize())}));let Z,G,w;if(t.vrButton){let O=document.createElement("div");O.className="cesium-viewer-vrContainer",o.appendChild(O),Z=new PU(O,p,t.fullScreenElement),G=gc(Z.viewModel,"isVREnabled",function(J){O.style.display=J?"block":"none",l(P)&&(O.style.right=`${_.clientWidth}px`),l(N)&&(N.container.style.right=`${O.clientWidth}px`,N.resize())}),w=gc(Z.viewModel,"isVRMode",function(J){C2t(i,J)})}this._baseLayerPickerDropDown=V,this._fullscreenSubscription=g,this._vrSubscription=G,this._vrModeSubscription=w,this._dataSourceChangedListeners={},this._container=e,this._bottomContainer=s,this._element=o,this._cesiumWidget=h,this._selectionIndicator=f,this._infoBox=b,this._clockViewModel=d,this._destroyClockViewModel=u,this._toolbar=C,this._homeButton=E,this._sceneModePicker=S,this._projectionPicker=I,this._baseLayerPicker=R,this._navigationHelpButton=W,this._animation=B,this._timeline=N,this._fullscreenButton=P,this._vrButton=Z,this._geocoder=T,this._eventHelper=A,this._lastWidth=0,this._lastHeight=0,this._enableInfoOrSelection=l(b)||l(f),this._selectedEntity=void 0,this._selectedEntityChanged=new xe;let X=this._cesiumWidget.dataSources,k=this._cesiumWidget.dataSourceDisplay;A.add(X.dataSourceAdded,fo.prototype._onDataSourceAdded,this),A.add(X.dataSourceRemoved,fo.prototype._onDataSourceRemoved,this),A.add(p.postUpdate,fo.prototype.resize,this);let v=X.length;for(let O=0;O<v;O++)this._dataSourceAdded(X,X.get(O));this._dataSourceAdded(void 0,k.defaultDataSource),A.add(X.dataSourceAdded,fo.prototype._dataSourceAdded,this),A.add(X.dataSourceRemoved,fo.prototype._dataSourceRemoved,this);function D(O){let J=dGe(i,O);l(J)?K.getValueOrUndefined(J.position,i.clock.currentTime)?i.trackedEntity=J:i.zoomTo(J):l(i.trackedEntity)&&(i.trackedEntity=void 0)}function Y(O){i.selectedEntity=dGe(i,O)}h.screenSpaceEventHandler.setInputAction(Y,Gn.LEFT_CLICK),h.screenSpaceEventHandler.setInputAction(D,Gn.LEFT_DOUBLE_CLICK),h._canAnimateUpdateCallback=this._updateCanAnimate(this)}Object.defineProperties(fo.prototype,{container:{get:function(){return this._container}},creditDisplay:{get:function(){return this._cesiumWidget.creditDisplay}},bottomContainer:{get:function(){return this._bottomContainer}},cesiumWidget:{get:function(){return this._cesiumWidget}},selectionIndicator:{get:function(){return this._selectionIndicator}},infoBox:{get:function(){return this._infoBox}},geocoder:{get:function(){return this._geocoder}},homeButton:{get:function(){return this._homeButton}},sceneModePicker:{get:function(){return this._sceneModePicker}},projectionPicker:{get:function(){return this._projectionPicker}},baseLayerPicker:{get:function(){return this._baseLayerPicker}},navigationHelpButton:{get:function(){return this._navigationHelpButton}},animation:{get:function(){return this._animation}},timeline:{get:function(){return this._timeline}},fullscreenButton:{get:function(){return this._fullscreenButton}},vrButton:{get:function(){return this._vrButton}},dataSourceDisplay:{get:function(){return this._cesiumWidget.dataSourceDisplay}},entities:{get:function(){return this._cesiumWidget.entities}},dataSources:{get:function(){return this._cesiumWidget.dataSources}},canvas:{get:function(){return this._cesiumWidget.canvas}},scene:{get:function(){return this._cesiumWidget.scene}},shadows:{get:function(){return this.scene.shadowMap.enabled},set:function(e){this.scene.shadowMap.enabled=e}},terrainShadows:{get:function(){return this.scene.globe.shadows},set:function(e){this.scene.globe.shadows=e}},shadowMap:{get:function(){return this.scene.shadowMap}},imageryLayers:{get:function(){return this.scene.imageryLayers}},terrainProvider:{get:function(){return this.scene.terrainProvider},set:function(e){this.scene.terrainProvider=e}},camera:{get:function(){return this.scene.camera}},ellipsoid:{get:function(){return this.scene.ellipsoid}},postProcessStages:{get:function(){return this.scene.postProcessStages}},clock:{get:function(){return this._clockViewModel.clock}},clockViewModel:{get:function(){return this._clockViewModel}},screenSpaceEventHandler:{get:function(){return this._cesiumWidget.screenSpaceEventHandler}},targetFrameRate:{get:function(){return this._cesiumWidget.targetFrameRate},set:function(e){this._cesiumWidget.targetFrameRate=e}},useDefaultRenderLoop:{get:function(){return this._cesiumWidget.useDefaultRenderLoop},set:function(e){this._cesiumWidget.useDefaultRenderLoop=e}},resolutionScale:{get:function(){return this._cesiumWidget.resolutionScale},set:function(e){this._cesiumWidget.resolutionScale=e}},useBrowserRecommendedResolution:{get:function(){return this._cesiumWidget.useBrowserRecommendedResolution},set:function(e){this._cesiumWidget.useBrowserRecommendedResolution=e}},allowDataSourcesToSuspendAnimation:{get:function(){return this._cesiumWidget.allowDataSourcesToSuspendAnimation},set:function(e){this._cesiumWidget.allowDataSourcesToSuspendAnimation=e}},trackedEntity:{get:function(){return this._cesiumWidget.trackedEntity},set:function(e){this._cesiumWidget.trackedEntity=e}},selectedEntity:{get:function(){return this._selectedEntity},set:function(e){if(this._selectedEntity!==e){this._selectedEntity=e;let t=l(this._selectionIndicator)?this._selectionIndicator.viewModel:void 0;l(e)?l(t)&&t.animateAppear():l(t)&&t.animateDepart(),this._selectedEntityChanged.raiseEvent(e)}}},selectedEntityChanged:{get:function(){return this._selectedEntityChanged}},trackedEntityChanged:{get:function(){return this._cesiumWidget.trackedEntityChanged}},clockTrackedDataSource:{get:function(){return this._cesiumWidget.clockTrackedDataSource},set:function(e){this._cesiumWidget.clockTrackedDataSource!==e&&(this._cesiumWidget.clockTrackedDataSource=e,rie(this._timeline,e))}}});fo.prototype.extend=function(e,t){e(this,t)};fo.prototype.resize=function(){let e=this._cesiumWidget,t=this._container,n=t.clientWidth,i=t.clientHeight,o=l(this._animation),r=l(this._timeline);if(e.resize(),n===this._lastWidth&&i===this._lastHeight)return;let s=i-125,a=this._baseLayerPickerDropDown;if(l(a)&&(a.style.maxHeight=`${s}px`),l(this._geocoder)){let f=this._geocoder.searchSuggestionsContainer;f.style.maxHeight=`${s}px`}l(this._infoBox)&&(this._infoBox.viewModel.maxHeight=s);let c=this._timeline,d,u=0,h=5,p=3,A=0;if(o&&window.getComputedStyle(this._animation.container).visibility!=="hidden"){let f=this._lastWidth;d=this._animation.container,n>900?(u=169,f<=900&&(d.style.width="169px",d.style.height="112px",this._animation.resize())):n>=600?(u=136,(f<600||f>900)&&(d.style.width="136px",d.style.height="90px",this._animation.resize())):(u=106,(f>600||f===0)&&(d.style.width="106px",d.style.height="70px",this._animation.resize())),h=u+5}if(r&&window.getComputedStyle(this._timeline.container).visibility!=="hidden"){let f=this._fullscreenButton,b=this._vrButton,C=c.container,T=C.style;p=C.clientHeight+3,T.left=`${u}px`;let E=0;l(f)&&(E+=f.container.clientWidth),l(b)&&(E+=b.container.clientWidth),T.right=`${E}px`,c.resize()}!r&&l(this._fullscreenButton)&&(A=this._fullscreenButton.container.clientWidth),this._bottomContainer.style.left=`${h}px`,this._bottomContainer.style.bottom=`${p}px`,this._bottomContainer.style.right=`${A}px`,this._lastWidth=n,this._lastHeight=i};fo.prototype.forceResize=function(){this._lastWidth=0,this.resize()};fo.prototype.render=function(){this._cesiumWidget.render()};fo.prototype.isDestroyed=function(){return!1};fo.prototype.destroy=function(){return l(this.screenSpaceEventHandler)&&!this.screenSpaceEventHandler.isDestroyed()&&(this.screenSpaceEventHandler.removeInputAction(Gn.LEFT_CLICK),this.screenSpaceEventHandler.removeInputAction(Gn.LEFT_DOUBLE_CLICK)),this._container.removeChild(this._element),this._element.removeChild(this._toolbar),this._eventHelper.removeAll(),l(this._geocoder)&&(this._geocoder=this._geocoder.destroy()),l(this._homeButton)&&(this._homeButton=this._homeButton.destroy()),l(this._sceneModePicker)&&(this._sceneModePicker=this._sceneModePicker.destroy()),l(this._projectionPicker)&&(this._projectionPicker=this._projectionPicker.destroy()),l(this._baseLayerPicker)&&(this._baseLayerPicker=this._baseLayerPicker.destroy()),l(this._animation)&&(this._element.removeChild(this._animation.container),this._animation=this._animation.destroy()),l(this._timeline)&&(this._timeline.removeEventListener("settime",mGe,!1),this._element.removeChild(this._timeline.container),this._timeline=this._timeline.destroy()),l(this._fullscreenButton)&&(this._fullscreenSubscription.dispose(),this._element.removeChild(this._fullscreenButton.container),this._fullscreenButton=this._fullscreenButton.destroy()),l(this._vrButton)&&(this._vrSubscription.dispose(),this._vrModeSubscription.dispose(),this._element.removeChild(this._vrButton.container),this._vrButton=this._vrButton.destroy()),l(this._infoBox)&&(this._element.removeChild(this._infoBox.container),this._infoBox=this._infoBox.destroy()),l(this._selectionIndicator)&&(this._element.removeChild(this._selectionIndicator.container),this._selectionIndicator=this._selectionIndicator.destroy()),this._destroyClockViewModel&&(this._clockViewModel=this._clockViewModel.destroy()),this._cesiumWidget=this._cesiumWidget.destroy(),he(this)};fo.prototype._dataSourceAdded=function(e,t){t.entities.collectionChanged.addEventListener(fo.prototype._onEntityCollectionChanged,this)};fo.prototype._dataSourceRemoved=function(e,t){let n=t.entities;n.collectionChanged.removeEventListener(fo.prototype._onEntityCollectionChanged,this),l(this.selectedEntity)&&n.getById(this.selectedEntity.id)===this.selectedEntity&&(this.selectedEntity=void 0)};fo.prototype._updateCanAnimate=function(e){return function(t){e._clockViewModel.canAnimate=t}};fo.prototype._onTick=function(e){let t=e.currentTime,n,i=!1,o=this.selectedEntity,r=l(o)&&this._enableInfoOrSelection;r&&o.isShowing&&o.isAvailable(t)&&(this._cesiumWidget.dataSourceDisplay.getBoundingSphere(o,!0,lGe)!==Tt.FAILED?n=lGe.center:l(o.position)&&(n=o.position.getValue(t,n)),i=l(n));let s=l(this._selectionIndicator)?this._selectionIndicator.viewModel:void 0;l(s)&&(s.position=m.clone(n,s.position),s.showSelection=r&&i,s.update());let a=l(this._infoBox)?this._infoBox.viewModel:void 0;l(a)&&(a.showInfo=r,a.enableCamera=i,a.isCameraTracking=this.trackedEntity===this.selectedEntity,r?(a.titleText=o.name??o.id,a.description=K.getValueOrDefault(o.description,t,"")):(a.titleText="",a.description=""))};fo.prototype._onEntityCollectionChanged=function(e,t,n){let i=n.length;for(let o=0;o<i;o++){let r=n[o];this.selectedEntity===r&&(this.selectedEntity=void 0)}};fo.prototype._onInfoBoxCameraClicked=function(e){if(e.isCameraTracking&&this.trackedEntity===this.selectedEntity)this.trackedEntity=void 0;else{let n=this.selectedEntity.position;l(n)?this.trackedEntity=this.selectedEntity:this.zoomTo(this.selectedEntity)}};fo.prototype._clearTrackedObject=function(){this.trackedEntity=void 0};fo.prototype._onInfoBoxClockClicked=function(e){this.selectedEntity=void 0};fo.prototype._clearObjects=function(){this.trackedEntity=void 0,this.selectedEntity=void 0};fo.prototype._onDataSourceChanged=function(e){this.clockTrackedDataSource===e&&rie(this.timeline,e)};fo.prototype._onDataSourceAdded=function(e,t){this._cesiumWidget._automaticallyTrackDataSourceClocks&&t===this.clockTrackedDataSource&&rie(this._timeline,t);let n=t.entities.id,i=this._eventHelper.add(t.changedEvent,fo.prototype._onDataSourceChanged,this);this._dataSourceChangedListeners[n]=i};fo.prototype._onDataSourceRemoved=function(e,t){let n=t.entities.id;this._dataSourceChangedListeners[n](),this._dataSourceChangedListeners[n]=void 0};fo.prototype.zoomTo=function(e,t){return this._cesiumWidget.zoomTo(e,t)};fo.prototype.flyTo=function(e,t){return this._cesiumWidget.flyTo(e,t)};var sie=fo;var BJo=y(x(),1);function T2t(e){let t=document.createElement("div");t.className="cesium-viewer-cesium3DTilesInspectorContainer",e.container.appendChild(t);let n=new rU(t,e.scene);Object.defineProperties(e,{cesium3DTilesInspector:{get:function(){return n}}})}var aie=T2t;var PJo=y(x(),1);function E2t(e){let t=document.createElement("div");t.className="cesium-viewer-cesiumInspectorContainer",e.container.appendChild(t);let n=new mU(t,e.scene);Object.defineProperties(e,{cesiumInspector:{get:function(){return n}}})}var cie=E2t;var vJo=y(x(),1);function S2t(e,t){t=t??Q.EMPTY_OBJECT;let n=!0,i=t.flyToOnDrop??!0,o=new xe,r=t.clearOnDrop??!0,s=t.dropTarget??e.container,a=t.clampToGround??!0,c=t.proxy;s=vn(s),Object.defineProperties(e,{dropTarget:{get:function(){return s},set:function(u){hGe(s,d),s=u,lie(s,d)}},dropEnabled:{get:function(){return n},set:function(u){u!==n&&(u?lie(s,d):hGe(s,d),n=u)}},dropError:{get:function(){return o}},clearOnDrop:{get:function(){return r},set:function(u){r=u}},flyToOnDrop:{get:function(){return i},set:function(u){i=u}},proxy:{get:function(){return c},set:function(u){c=u}},clampToGround:{get:function(){return a},set:function(u){a=u}}});function d(u){JE(u),r&&(e.entities.removeAll(),e.dataSources.removeAll());let h=u.dataTransfer.files,p=h.length;for(let A=0;A<p;A++){let f=h[A],b=new FileReader;b.onload=_2t(e,f,c,a),b.onerror=I2t(e,f),b.readAsText(f)}}lie(s,d),e.destroy=vX(e,e.destroy,function(){e.dropEnabled=!1}),e._handleDrop=d}function JE(e){e.stopPropagation(),e.preventDefault()}function hGe(e,t){let n=e;l(n)&&(n.removeEventListener("drop",t,!1),n.removeEventListener("dragenter",JE,!1),n.removeEventListener("dragover",JE,!1),n.removeEventListener("dragexit",JE,!1))}function lie(e,t){e.addEventListener("drop",t,!1),e.addEventListener("dragenter",JE,!1),e.addEventListener("dragover",JE,!1),e.addEventListener("dragexit",JE,!1)}function _2t(e,t,n,i){let o=e.scene;return function(r){let s=t.name;try{let a;if(/\.czml$/i.test(s))a=NN.load(JSON.parse(r.target.result),{sourceUri:s});else if(/\.geojson$/i.test(s)||/\.json$/i.test(s)||/\.topojson$/i.test(s))a=Sy.load(JSON.parse(r.target.result),{sourceUri:s,clampToGround:i});else if(/\.(kml|kmz)$/i.test(s))a=OT.load(t,{sourceUri:s,proxy:n,camera:o.camera,canvas:o.canvas,clampToGround:i,screenOverlayContainer:e.container});else if(/\.gpx$/i.test(s))a=sX.load(t,{sourceUri:s,proxy:n});else{e.dropError.raiseEvent(e,s,`Unrecognized file: ${s}`);return}l(a)&&e.dataSources.add(a).then(function(c){e.flyToOnDrop&&e.flyTo(c)}).catch(function(c){e.dropError.raiseEvent(e,s,c)})}catch(a){e.dropError.raiseEvent(e,s,a)}}}function I2t(e,t){return function(n){e.dropError.raiseEvent(e,t.name,n.target.error)}}var die=S2t;var zJo=y(x(),1);function Z2t(e,t){t=t??Q.EMPTY_OBJECT;let n=new _U({scene:e.scene,container:e.bottomContainer,lowFrameRateMessage:t.lowFrameRateMessage});Object.defineProperties(e,{performanceWatchdog:{get:function(){return n}}})}var uie=Z2t;var cKo=y(x(),1);var rKo=y(x(),1);var qJo=y(x(),1);function fGe(e){let t=e.split(`
`),n;for(n=0;n<t.length&&!t[n].match(/\S/);n++);if(n===t.length)return"";let i="",o=/^\s*/,s=t[n].match(o)[0].length;for(let a=n;a<t.length;a++){let c=t[a];c.match(o)[0].length>=s&&(c=c.slice(s)),i+=`${c}
`}return i}function fh(e){this._scene=e,this._voxelPrimitive=void 0,this._customShaderCompilationRemoveCallback=void 0,this._definedProperties=[],this._getPrimitiveFunctions=[],this._modelMatrixReady=!1;let t=this;function n(o){let{name:r,initialValue:s}=o;t._definedProperties.push(r);let a=o.setPrimitiveFunction;a===!0&&(a=function(u){t._voxelPrimitive[r]=u});let c=o.getPrimitiveFunction;c===!0&&(c=function(){t[r]=t._voxelPrimitive[r]}),l(c)&&t._getPrimitiveFunctions.push(c);let d=Ie.observable();return Ie.defineProperty(t,r,{get:function(){return d()},set:function(u){typeof s=="number"&&typeof u=="string"&&(u=Number(u),isNaN(u)&&(u=s)),typeof s=="boolean"&&typeof u=="number"&&(u=u===1),d(u),l(a)&&l(t._voxelPrimitive)&&(a(u),e.requestRender())}}),t[r]=s,d}function i(o,r){return function(s){let a=t._voxelPrimitive[o].clone();a[r]=s,t._voxelPrimitive[o]=a}}n({name:"inspectorVisible",initialValue:!0}),n({name:"displayVisible",initialValue:!1}),n({name:"transformVisible",initialValue:!1}),n({name:"boundsVisible",initialValue:!1}),n({name:"clippingVisible",initialValue:!1}),n({name:"shaderVisible",initialValue:!1}),n({name:"shaderString",initialValue:"",getPrimitiveFunction:function(){let o=t._voxelPrimitive.customShader.fragmentShaderText;t.shaderString=fGe(o)}}),n({name:"shaderCompilationMessage",initialValue:""}),n({name:"shaderCompilationSuccess",initialValue:!0}),n({name:"depthTest",initialValue:!1,setPrimitiveFunction:!0,getPrimitiveFunction:!0}),n({name:"show",initialValue:!0,setPrimitiveFunction:!0,getPrimitiveFunction:!0}),n({name:"disableUpdate",initialValue:!1,setPrimitiveFunction:!0,getPrimitiveFunction:!0}),n({name:"debugDraw",initialValue:!1,setPrimitiveFunction:!0,getPrimitiveFunction:!0}),n({name:"jitter",initialValue:!0,setPrimitiveFunction:!0,getPrimitiveFunction:!0}),n({name:"nearestSampling",initialValue:!0,setPrimitiveFunction:!0,getPrimitiveFunction:!0}),n({name:"screenSpaceError",initialValue:4,setPrimitiveFunction:!0,getPrimitiveFunction:!0}),n({name:"stepSize",initialValue:1,setPrimitiveFunction:!0,getPrimitiveFunction:!0}),n({name:"shapeIsBox",getPrimitiveFunction:function(){let o=t._voxelPrimitive.shape;t.shapeIsBox=o===Ac.BOX}}),n({name:"shapeIsEllipsoid",getPrimitiveFunction:function(){let o=t._voxelPrimitive.shape;t.shapeIsEllipsoid=o===Ac.ELLIPSOID}}),n({name:"shapeIsCylinder",getPrimitiveFunction:function(){let o=t._voxelPrimitive.shape;t.shapeIsCylinder=o===Ac.CYLINDER}}),n({name:"clippingBoxMaxXMin",initialValue:0,getPrimitiveFunction:function(){t.clippingBoxMaxXMin=t._voxelPrimitive.minBounds.x}}),n({name:"clippingBoxMaxXMax",initialValue:1,getPrimitiveFunction:function(){t.clippingBoxMaxXMax=t._voxelPrimitive.maxBounds.x}}),n({name:"clippingBoxMaxX",initialValue:0,setPrimitiveFunction:i("maxClippingBounds","x"),getPrimitiveFunction:function(){t.clippingBoxMaxX=t._voxelPrimitive.maxClippingBounds.x}}),n({name:"clippingBoxMinXMin",initialValue:0,getPrimitiveFunction:function(){t.clippingBoxMinXMin=t._voxelPrimitive.minBounds.x}}),n({name:"clippingBoxMinXMax",initialValue:1,getPrimitiveFunction:function(){t.clippingBoxMinXMax=t._voxelPrimitive.maxBounds.x}}),n({name:"clippingBoxMinX",initialValue:0,setPrimitiveFunction:i("minClippingBounds","x"),getPrimitiveFunction:function(){t.clippingBoxMinX=t._voxelPrimitive.minClippingBounds.x}}),n({name:"clippingBoxMaxYMin",initialValue:0,getPrimitiveFunction:function(){t.clippingBoxMaxYMin=t._voxelPrimitive.minBounds.y}}),n({name:"clippingBoxMaxYMax",initialValue:1,getPrimitiveFunction:function(){t.clippingBoxMaxYMax=t._voxelPrimitive.maxBounds.y}}),n({name:"clippingBoxMaxY",initialValue:0,setPrimitiveFunction:i("maxClippingBounds","y"),getPrimitiveFunction:function(){t.clippingBoxMaxY=t._voxelPrimitive.maxClippingBounds.y}}),n({name:"clippingBoxMinYMin",initialValue:0,getPrimitiveFunction:function(){t.clippingBoxMinYMin=t._voxelPrimitive.minBounds.y}}),n({name:"clippingBoxMinYMax",initialValue:1,getPrimitiveFunction:function(){t.clippingBoxMinYMax=t._voxelPrimitive.maxBounds.y}}),n({name:"clippingBoxMinY",initialValue:0,setPrimitiveFunction:i("minClippingBounds","y"),getPrimitiveFunction:function(){t.clippingBoxMinY=t._voxelPrimitive.minClippingBounds.y}}),n({name:"clippingBoxMaxZMin",initialValue:0,getPrimitiveFunction:function(){t.clippingBoxMaxZMin=t._voxelPrimitive.minBounds.z}}),n({name:"clippingBoxMaxZMax",initialValue:1,getPrimitiveFunction:function(){t.clippingBoxMaxZMax=t._voxelPrimitive.maxBounds.z}}),n({name:"clippingBoxMaxZ",initialValue:0,setPrimitiveFunction:i("maxClippingBounds","z"),getPrimitiveFunction:function(){t.clippingBoxMaxZ=t._voxelPrimitive.maxClippingBounds.z}}),n({name:"clippingBoxMinZMin",initialValue:0,getPrimitiveFunction:function(){t.clippingBoxMinZMin=t._voxelPrimitive.minBounds.z}}),n({name:"clippingBoxMinZMax",initialValue:1,getPrimitiveFunction:function(){t.clippingBoxMinZMax=t._voxelPrimitive.maxBounds.z}}),n({name:"clippingBoxMinZ",initialValue:0,setPrimitiveFunction:i("minClippingBounds","z"),getPrimitiveFunction:function(){t.clippingBoxMinZ=t._voxelPrimitive.minClippingBounds.z}}),n({name:"clippingEllipsoidMaxLongitudeMin",initialValue:-L.PI,getPrimitiveFunction:function(){t.clippingEllipsoidMaxLongitudeMin=t._voxelPrimitive.minBounds.x}}),n({name:"clippingEllipsoidMaxLongitudeMax",initialValue:L.PI,getPrimitiveFunction:function(){t.clippingEllipsoidMaxLongitudeMax=t._voxelPrimitive.maxBounds.x}}),n({name:"clippingEllipsoidMaxLongitude",initialValue:0,setPrimitiveFunction:i("maxClippingBounds","x"),getPrimitiveFunction:function(){t.clippingEllipsoidMaxLongitude=t._voxelPrimitive.maxClippingBounds.x}}),n({name:"clippingEllipsoidMinLongitudeMin",initialValue:-L.PI,getPrimitiveFunction:function(){t.clippingEllipsoidMinLongitudeMin=t._voxelPrimitive.minBounds.x}}),n({name:"clippingEllipsoidMinLongitudeMax",initialValue:L.PI,getPrimitiveFunction:function(){t.clippingEllipsoidMinLongitudeMax=t._voxelPrimitive.maxBounds.x}}),n({name:"clippingEllipsoidMinLongitude",initialValue:0,setPrimitiveFunction:i("minClippingBounds","x"),getPrimitiveFunction:function(){t.clippingEllipsoidMinLongitude=t._voxelPrimitive.minClippingBounds.x}}),n({name:"clippingEllipsoidMaxLatitudeMin",initialValue:-L.PI_OVER_TWO,getPrimitiveFunction:function(){t.clippingEllipsoidMaxLatitudeMin=t._voxelPrimitive.minBounds.y}}),n({name:"clippingEllipsoidMaxLatitudeMax",initialValue:L.PI_OVER_TWO,getPrimitiveFunction:function(){t.clippingEllipsoidMaxLatitudeMax=t._voxelPrimitive.maxBounds.y}}),n({name:"clippingEllipsoidMaxLatitude",initialValue:0,setPrimitiveFunction:i("maxClippingBounds","y"),getPrimitiveFunction:function(){t.clippingEllipsoidMaxLatitude=t._voxelPrimitive.maxClippingBounds.y}}),n({name:"clippingEllipsoidMinLatitudeMin",initialValue:-L.PI_OVER_TWO,getPrimitiveFunction:function(){t.clippingEllipsoidMinLatitudeMin=t._voxelPrimitive.minBounds.y}}),n({name:"clippingEllipsoidMinLatitudeMax",initialValue:L.PI_OVER_TWO,getPrimitiveFunction:function(){t.clippingEllipsoidMinLatitudeMax=t._voxelPrimitive.maxBounds.y}}),n({name:"clippingEllipsoidMinLatitude",initialValue:0,setPrimitiveFunction:i("minClippingBounds","y"),getPrimitiveFunction:function(){t.clippingEllipsoidMinLatitude=t._voxelPrimitive.minClippingBounds.y}}),n({name:"clippingEllipsoidMaxHeightMin",initialValue:0,getPrimitiveFunction:function(){t.clippingEllipsoidMaxHeightMin=t._voxelPrimitive.minBounds.z}}),n({name:"clippingEllipsoidMaxHeightMax",initialValue:1e5,getPrimitiveFunction:function(){t.clippingEllipsoidMaxHeightMax=t._voxelPrimitive.maxBounds.z}}),n({name:"clippingEllipsoidMaxHeight",initialValue:0,setPrimitiveFunction:i("maxClippingBounds","z"),getPrimitiveFunction:function(){t.clippingEllipsoidMaxHeight=t._voxelPrimitive.maxClippingBounds.z}}),n({name:"clippingEllipsoidMinHeightMin",initialValue:-1e5,getPrimitiveFunction:function(){t.clippingEllipsoidMinHeightMin=t._voxelPrimitive.minBounds.z}}),n({name:"clippingEllipsoidMinHeightMax",initialValue:0,getPrimitiveFunction:function(){t.clippingEllipsoidMinHeightMax=t._voxelPrimitive.maxBounds.z}}),n({name:"clippingEllipsoidMinHeight",initialValue:0,setPrimitiveFunction:i("minClippingBounds","z"),getPrimitiveFunction:function(){t.clippingEllipsoidMinHeight=t._voxelPrimitive.minClippingBounds.z}}),n({name:"clippingCylinderMaxRadiusMin",initialValue:0,getPrimitiveFunction:function(){t.clippingCylinderMaxRadiusMin=t._voxelPrimitive.minBounds.x}}),n({name:"clippingCylinderMaxRadiusMax",initialValue:1,getPrimitiveFunction:function(){t.clippingCylinderMaxRadiusMax=t._voxelPrimitive.maxBounds.x}}),n({name:"clippingCylinderMaxRadius",initialValue:0,setPrimitiveFunction:i("maxClippingBounds","x"),getPrimitiveFunction:function(){t.clippingCylinderMaxRadius=t._voxelPrimitive.maxClippingBounds.x}}),n({name:"clippingCylinderMinRadiusMin",initialValue:0,getPrimitiveFunction:function(){t.clippingCylinderMinRadiusMin=t._voxelPrimitive.minBounds.x}}),n({name:"clippingCylinderMinRadiusMax",initialValue:1,getPrimitiveFunction:function(){t.clippingCylinderMinRadiusMax=t._voxelPrimitive.maxBounds.x}}),n({name:"clippingCylinderMinRadius",initialValue:0,setPrimitiveFunction:i("minClippingBounds","x"),getPrimitiveFunction:function(){t.clippingCylinderMinRadius=t._voxelPrimitive.minClippingBounds.x}}),n({name:"clippingCylinderMaxAngleMin",initialValue:-L.PI,getPrimitiveFunction:function(){t.clippingCylinderMaxAngleMin=t._voxelPrimitive.minBounds.y}}),n({name:"clippingCylinderMaxAngleMax",initialValue:L.PI,getPrimitiveFunction:function(){t.clippingCylinderMaxAngleMax=t._voxelPrimitive.maxBounds.y}}),n({name:"clippingCylinderMaxAngle",initialValue:0,setPrimitiveFunction:i("maxClippingBounds","y"),getPrimitiveFunction:function(){t.clippingCylinderMaxAngle=t._voxelPrimitive.maxClippingBounds.y}}),n({name:"clippingCylinderMinAngleMin",initialValue:-L.PI}),n({name:"clippingCylinderMinAngleMax",initialValue:L.PI}),n({name:"clippingCylinderMinAngle",initialValue:0,setPrimitiveFunction:i("minClippingBounds","y"),getPrimitiveFunction:function(){t.clippingCylinderMinAngle=t._voxelPrimitive.minClippingBounds.y}}),n({name:"clippingCylinderMaxHeightMin",initialValue:-1,getPrimitiveFunction:function(){t.clippingCylinderMaxHeightMin=t._voxelPrimitive.minBounds.z}}),n({name:"clippingCylinderMaxHeightMax",initialValue:1,getPrimitiveFunction:function(){t.clippingCylinderMaxHeightMax=t._voxelPrimitive.maxBounds.z}}),n({name:"clippingCylinderMaxHeight",initialValue:0,setPrimitiveFunction:i("maxClippingBounds","z"),getPrimitiveFunction:function(){t.clippingCylinderMaxHeight=t._voxelPrimitive.maxClippingBounds.z}}),n({name:"clippingCylinderMinHeightMin",initialValue:-1,getPrimitiveFunction:function(){t.clippingCylinderMinHeightMin=t._voxelPrimitive.minBounds.z}}),n({name:"clippingCylinderMinHeightMax",initialValue:1,getPrimitiveFunction:function(){t.clippingCylinderMinHeightMax=t._voxelPrimitive.maxBounds.z}}),n({name:"clippingCylinderMinHeight",initialValue:0,setPrimitiveFunction:i("minClippingBounds","z"),getPrimitiveFunction:function(){t.clippingCylinderMinHeight=t._voxelPrimitive.minClippingBounds.z}}),n({name:"translationX",initialValue:0,setPrimitiveFunction:function(){t._modelMatrixReady&&fA(t)},getPrimitiveFunction:function(){t.translationX=F.getTranslation(t._voxelPrimitive.modelMatrix,new m).x}}),n({name:"translationY",initialValue:0,setPrimitiveFunction:function(){t._modelMatrixReady&&fA(t)},getPrimitiveFunction:function(){t.translationY=F.getTranslation(t._voxelPrimitive.modelMatrix,new m).y}}),n({name:"translationZ",initialValue:0,setPrimitiveFunction:function(){t._modelMatrixReady&&fA(t)},getPrimitiveFunction:function(){t.translationZ=F.getTranslation(t._voxelPrimitive.modelMatrix,new m).z}}),n({name:"scaleX",initialValue:1,setPrimitiveFunction:function(){t._modelMatrixReady&&fA(t)},getPrimitiveFunction:function(){t.scaleX=F.getScale(t._voxelPrimitive.modelMatrix,new m).x}}),n({name:"scaleY",initialValue:1,setPrimitiveFunction:function(){t._modelMatrixReady&&fA(t)},getPrimitiveFunction:function(){t.scaleY=F.getScale(t._voxelPrimitive.modelMatrix,new m).y}}),n({name:"scaleZ",initialValue:1,setPrimitiveFunction:function(){t._modelMatrixReady&&fA(t)},getPrimitiveFunction:function(){t.scaleZ=F.getScale(t._voxelPrimitive.modelMatrix,new m).z}}),n({name:"angleX",initialValue:0,setPrimitiveFunction:function(){t._modelMatrixReady&&fA(t)}}),n({name:"angleY",initialValue:0,setPrimitiveFunction:function(){t._modelMatrixReady&&fA(t)}}),n({name:"angleZ",initialValue:0,setPrimitiveFunction:function(){t._modelMatrixReady&&fA(t)}})}var R2t=new m,V2t=new m,G2t=new yc,L2t=new $;function fA(e){let t=m.fromElements(e.translationX,e.translationY,e.translationZ,R2t),n=m.fromElements(e.scaleX,e.scaleY,e.scaleZ,V2t),i=G2t;i.heading=e.angleX,i.pitch=e.angleY,i.roll=e.angleZ;let o=$.fromHeadingPitchRoll(i,L2t),r=$.multiplyByScale(o,n,o);e._voxelPrimitive.modelMatrix=F.fromRotationTranslation(r,t,e._voxelPrimitive.modelMatrix)}Object.defineProperties(fh.prototype,{scene:{get:function(){return this._scene}},voxelPrimitive:{get:function(){return this._voxelPrimitive},set:function(e){if(l(this._customShaderCompilationRemoveCallback)&&this._customShaderCompilationRemoveCallback(),!l(e))return;this._voxelPrimitive=e;let t=this;t._customShaderCompilationRemoveCallback=t._voxelPrimitive.customShaderCompilationEvent.addEventListener(function(n){let i=t._voxelPrimitive.customShader.fragmentShaderText;t.shaderString=fGe(i),l(n)?(t.shaderCompilationMessage=n.message,t.shaderCompilationSuccess=!1):(t.shaderCompilationMessage="Shader compiled successfully!",t.shaderCompilationSuccess=!0)}),t._modelMatrixReady=!1;for(let n=0;n<t._getPrimitiveFunctions.length;n++)t._getPrimitiveFunctions[n]();t._modelMatrixReady=!0,fA(t)}}});fh.prototype.toggleInspector=function(){this.inspectorVisible=!this.inspectorVisible};fh.prototype.toggleDisplay=function(){this.displayVisible=!this.displayVisible};fh.prototype.toggleTransform=function(){this.transformVisible=!this.transformVisible};fh.prototype.toggleBounds=function(){this.boundsVisible=!this.boundsVisible};fh.prototype.toggleClipping=function(){this.clippingVisible=!this.clippingVisible};fh.prototype.toggleShader=function(){this.shaderVisible=!this.shaderVisible};fh.prototype.compileShader=function(){l(this._voxelPrimitive)&&(this._voxelPrimitive.customShader=new GE({fragmentShaderText:this.shaderString,uniforms:this._voxelPrimitive.customShader.uniforms}))};fh.prototype.shaderEditorKeyPress=function(e,t){if(t.keyCode===9){t.preventDefault();let n=t.target,i=n.selectionStart,o=n.selectionEnd,r=o,a=n.value.slice(i,o).split(`
`),c=a.length,d;if(t.shiftKey)for(d=0;d<c;++d)a[d][0]===" "&&(a[d][1]===" "?(a[d]=a[d].substr(2),r-=2):(a[d]=a[d].substr(1),r-=1));else for(d=0;d<c;++d)a[d]=` ${a[d]}`,r+=2;let u=a.join(`
`);n.value=n.value.slice(0,i)+u+n.value.slice(o),n.selectionStart=i!==o?i:r,n.selectionEnd=r}else t.ctrlKey&&(t.keyCode===10||t.keyCode===13)&&this.compileShader();return!0};fh.prototype.isDestroyed=function(){return!1};fh.prototype.destroy=function(){let e=this;return this._definedProperties.forEach(function(t){Ie.getObservable(e,t).dispose()}),he(this)};var XU=fh;function kz(e,t){e=vn(e);let n=document.createElement("div"),i=new XU(t);this._viewModel=i,this._container=e,this._element=n;let o=document.createElement("div");o.textContent="Voxel Inspector",o.className="cesium-cesiumInspector-button",o.setAttribute("data-bind","click: toggleInspector"),n.appendChild(o),n.className="cesium-cesiumInspector cesium-VoxelInspector",n.setAttribute("data-bind",'css: { "cesium-cesiumInspector-visible" : inspectorVisible, "cesium-cesiumInspector-hidden" : !inspectorVisible}'),e.appendChild(n);let r=document.createElement("div");r.className="cesium-cesiumInspector-dropDown",n.appendChild(r);let{createSection:s,createCheckbox:a,createRangeInput:c,createButton:d}=Od,u=s(r,"Display","displayVisible","toggleDisplay"),h=s(r,"Transform","transformVisible","toggleTransform"),p=s(r,"Clipping","clippingVisible","toggleClipping"),A=s(r,"Shader","shaderVisible","toggleShader");u.appendChild(a("Depth Test","depthTest")),u.appendChild(a("Show","show")),u.appendChild(a("Disable Update","disableUpdate")),u.appendChild(a("Debug Draw","debugDraw")),u.appendChild(a("Jitter","jitter")),u.appendChild(a("Nearest Sampling","nearestSampling")),u.appendChild(c("Screen Space Error","screenSpaceError",0,128)),u.appendChild(c("Step Size","stepSize",0,2));let f=10,b=10,C=L.PI;h.appendChild(c("Translation X","translationX",-f,+f)),h.appendChild(c("Translation Y","translationY",-f,+f)),h.appendChild(c("Translation Z","translationZ",-f,+f)),h.appendChild(c("Scale X","scaleX",0,+b)),h.appendChild(c("Scale Y","scaleY",0,+b)),h.appendChild(c("Scale Z","scaleZ",0,+b)),h.appendChild(c("Heading","angleX",-C,+C)),h.appendChild(c("Pitch","angleY",-C,+C)),h.appendChild(c("Roll","angleZ",-C,+C)),mie("Max X","Min X","Max Y","Min Y","Max Z","Min Z","clippingBoxMaxX","clippingBoxMinX","clippingBoxMaxY","clippingBoxMinY","clippingBoxMaxZ","clippingBoxMinZ","shapeIsBox",p),mie("Max Longitude","Min Longitude","Max Latitude","Min Latitude","Max Height","Min Height","clippingEllipsoidMaxLongitude","clippingEllipsoidMinLongitude","clippingEllipsoidMaxLatitude","clippingEllipsoidMinLatitude","clippingEllipsoidMaxHeight","clippingEllipsoidMinHeight","shapeIsEllipsoid",p),mie("Max Radius","Min Radius","Max Angle","Min Angle","Max Height","Min Height","clippingCylinderMaxRadius","clippingCylinderMinRadius","clippingCylinderMaxAngle","clippingCylinderMinAngle","clippingCylinderMaxHeight","clippingCylinderMinHeight","shapeIsCylinder",p);let T=document.createElement("div");A.appendChild(T);let E=document.createElement("textarea");E.setAttribute("data-bind","textInput: shaderString, event: { keydown: shaderEditorKeyPress }"),T.className="cesium-cesiumInspector-styleEditor",T.appendChild(E);let S=d("Compile (Ctrl+Enter)","compileShader");T.appendChild(S);let I=document.createElement("label");I.style.display="block",I.setAttribute("data-bind","text: shaderCompilationMessage, style: {color: shaderCompilationSuccess ? 'green' : 'red'}"),T.appendChild(I),Ie.applyBindings(i,n)}Object.defineProperties(kz.prototype,{container:{get:function(){return this._container}},viewModel:{get:function(){return this._viewModel}}});kz.prototype.isDestroyed=function(){return!1};kz.prototype.destroy=function(){return Ie.cleanNode(this._element),this._container.removeChild(this._element),this.viewModel.destroy(),he(this)};function mie(e,t,n,i,o,r,s,a,c,d,u,h,p,A){let f=Od.createRangeInputWithDynamicMinMax,b=A.appendChild(document.createElement("div"));b.setAttribute("data-bind",`if: ${p}`),b.appendChild(f(e,s)),b.appendChild(f(t,a)),b.appendChild(f(n,c)),b.appendChild(f(i,d)),b.appendChild(f(o,u)),b.appendChild(f(r,h))}var YU=kz;function W2t(e){let t=document.createElement("div");t.className="cesium-viewer-voxelInspectorContainer",e.container.appendChild(t);let n=new YU(t,e.scene);Object.defineProperties(e,{voxelInspector:{get:function(){return n}}})}var hie=W2t;globalThis.CESIUM_VERSION="1.140.0";var F2t="1.140.0";return SGe(B2t);})();